Class AbstractEventBus<E extends org.refcodes.observer.GenericEvent<?>,O extends org.refcodes.observer.Observer<E>,MATCH extends org.refcodes.observer.EventMatcher<E>,META extends org.refcodes.mixin.EventMetaData,H>

java.lang.Object
org.refcodes.eventbus.AbstractEventBus<E,O,MATCH,META,H>
Type Parameters:
E - the element type
O - the generic type
MATCH - the generic type
META - the generic type
H - the generic type
All Implemented Interfaces:
org.refcodes.component.Destroyable, org.refcodes.component.HandleLookup<H,O>, DispatchStrategyAccessor, EventBusObservable<E,O,MATCH,H>, EventBusPublisher<E>, GenericEventBus<E,O,MATCH,META,H>, org.refcodes.matcher.Matchable<E>, org.refcodes.observer.Publisher<E>
Direct Known Subclasses:
EventBusImpl

public abstract class AbstractEventBus<E extends org.refcodes.observer.GenericEvent<?>,O extends org.refcodes.observer.Observer<E>,MATCH extends org.refcodes.observer.EventMatcher<E>,META extends org.refcodes.mixin.EventMetaData,H> extends Object implements GenericEventBus<E,O,MATCH,META,H>
The Class AbstractEventBus.
  • Constructor Details

    • AbstractEventBus

      public AbstractEventBus(boolean isDaemon, org.refcodes.component.HandleGenerator<H> aHandleGenerator)
      Constructs the AbstractEventBus with the DispatchStrategy being DispatchStrategy.CASCADE when publishing events and the given handle generator.
      Parameters:
      isDaemon - True when to create daemon dispatch Thread instances (shutdown upon last application Thread shutdown), else application Thread instances are created for dispatch.
      aHandleGenerator - The handle generator to be used.
    • AbstractEventBus

      public AbstractEventBus(org.refcodes.component.HandleGenerator<H> aHandleGenerator)
      Constructs the AbstractEventBus with the DispatchStrategy being DispatchStrategy.CASCADE when publishing events and the given handle generator.
      Parameters:
      aHandleGenerator - The handle generator to be used.
    • AbstractEventBus

      public AbstractEventBus(org.refcodes.component.HandleGenerator<H> aHandleGenerator, ExecutorService aExecutorService)
      Constructs the AbstractEventBus with the DispatchStrategy being DispatchStrategy.CASCADE when publishing events and the given handle generator.
      Parameters:
      aHandleGenerator - The handle generator to be used.
      aExecutorService - The ExecutorService to be used when creating threads.
    • AbstractEventBus

      public AbstractEventBus(DispatchStrategy aDispatchStrategy, org.refcodes.component.HandleGenerator<H> aHandleGenerator)
      Constructs the AbstractEventBus with the given DispatchStrategy when publishing events and the given handle generator.
      Parameters:
      aDispatchStrategy - The DispatchStrategy to be used when publishing events.
      aHandleGenerator - The handle generator to be used.
    • AbstractEventBus

      public AbstractEventBus(DispatchStrategy aDispatchStrategy, boolean isDaemon, org.refcodes.component.HandleGenerator<H> aHandleGenerator)
      Constructs the AbstractEventBus with the given DispatchStrategy when publishing events and the given handle generator.
      Parameters:
      aDispatchStrategy - The DispatchStrategy to be used when publishing events.
      isDaemon - True when to create daemon dispatch Thread instances (shutdown upon last application Thread shutdown), else application Thread instances are created for dispatch.
      aHandleGenerator - The handle generator to be used.
    • AbstractEventBus

      public AbstractEventBus(DispatchStrategy aDispatchStrategy, org.refcodes.component.HandleGenerator<H> aHandleGenerator, ExecutorService aExecutorService)
      Constructs the AbstractEventBus with the given DispatchStrategy when publishing events and the given handle generator.
      Parameters:
      aDispatchStrategy - The DispatchStrategy to be used when publishing events.
      aHandleGenerator - The handle generator to be used.
      aExecutorService - The ExecutorService to be used when creating threads.
  • Method Details

    • isMatching

      public boolean isMatching(E aEvent)
      Specified by:
      isMatching in interface org.refcodes.matcher.Matchable<E extends org.refcodes.observer.GenericEvent<?>>
    • subscribe

      public H subscribe(MATCH aEventMatcher, O aObserver)
      Subscribes a listener to the event bus. In case the handle is being ignored, use the "unsubscribeAll" method where all subscriptions for a listener are removed.
      Specified by:
      subscribe in interface EventBusObservable<E extends org.refcodes.observer.GenericEvent<?>,O extends org.refcodes.observer.Observer<E>,MATCH extends org.refcodes.observer.EventMatcher<E>,META extends org.refcodes.mixin.EventMetaData>
      Parameters:
      aEventMatcher - The EventMatcher to guard the Observer.
      aObserver - The Observer to subscribe.
      Returns:
      A handle to unsubscribe this combination.
    • unsubscribeAll

      public void unsubscribeAll(O aObserver)
      Unsubscribes all registrations to a specific listener, even if that listener is involved in several subscriptions.
      Specified by:
      unsubscribeAll in interface EventBusObservable<E extends org.refcodes.observer.GenericEvent<?>,O extends org.refcodes.observer.Observer<E>,MATCH extends org.refcodes.observer.EventMatcher<E>,META extends org.refcodes.mixin.EventMetaData>
      Parameters:
      aObserver - the observer
    • hasHandle

      public boolean hasHandle(H aHandle)
      Specified by:
      hasHandle in interface org.refcodes.component.HandleLookup<E extends org.refcodes.observer.GenericEvent<?>,O extends org.refcodes.observer.Observer<E>>
    • lookupHandle

      public O lookupHandle(H aHandle) throws org.refcodes.component.UnknownHandleRuntimeException
      Specified by:
      lookupHandle in interface org.refcodes.component.HandleLookup<E extends org.refcodes.observer.GenericEvent<?>,O extends org.refcodes.observer.Observer<E>>
      Throws:
      org.refcodes.component.UnknownHandleRuntimeException
    • removeHandle

      public O removeHandle(H aHandle) throws org.refcodes.component.UnknownHandleRuntimeException
      Specified by:
      removeHandle in interface org.refcodes.component.HandleLookup<E extends org.refcodes.observer.GenericEvent<?>,O extends org.refcodes.observer.Observer<E>>
      Throws:
      org.refcodes.component.UnknownHandleRuntimeException
    • getDispatchStrategy

      public DispatchStrategy getDispatchStrategy()
      Retrieves the DispatchStrategy property from the property. Determines in which DispatchStrategy status a component is in.
      Specified by:
      getDispatchStrategy in interface DispatchStrategyAccessor
      Returns:
      Returns the DispatchStrategy property stored by the property.
    • publishEvent

      public void publishEvent(E aEvent, DispatchStrategy aDispatchStrategy)
      Publishes an event using the given DispatchStrategy.
      Specified by:
      publishEvent in interface GenericEventBus<E extends org.refcodes.observer.GenericEvent<?>,O extends org.refcodes.observer.Observer<E>,MATCH extends org.refcodes.observer.EventMatcher<E>,META extends org.refcodes.mixin.EventMetaData,H>
      Parameters:
      aEvent - aEvent The event to be published.
      aDispatchStrategy - The DispatchStrategy to be used when publishing the event.
    • destroy

      public void destroy()
      Shuts down any ExecutorService by calling ExecutorService.shutdown() causing the GenericEventBus to be disposed.
      Specified by:
      destroy in interface org.refcodes.component.Destroyable
    • sequentialDispatch

      protected void sequentialDispatch(E aEvent)
      Hook implementing the sequential dispatch method as of DispatchStrategy.SEQUENTIAL
      Parameters:
      aEvent - The event to be dispatched sequentially.
    • parallelDispatch

      protected void parallelDispatch(E aEvent)
      Hook implementing the parallel dispatch method as of DispatchStrategy.PARALLEL
      Parameters:
      aEvent - The event to be dispatched sequentially.
    • cascadeDispatch

      protected void cascadeDispatch(E aEvent, Object aMonitor)
      Hook implementing the cascaded dispatch method as of DispatchStrategy.CASCADE
      Parameters:
      aEvent - The event to be dispatched cascading.
      aMonitor - The monitor used for synchronizing this cascade.