Class EventMulticaster

java.lang.Object
com.iizix.event.EventMulticaster
All Implemented Interfaces:
EventListener

public class EventMulticaster extends Object implements EventListener
A class which implements efficient and thread-safe multicast event dispatching for generic events.

This class will manage an immutable structure consisting of a chain of event listeners and will dispatch events to those listeners. Because the structure is immutable, it is safe to use this API to add/remove listeners during the process of an event dispatch operation.

An example of how this class could be used to implement a new component which fires "action" events:

public MyComponent extends Component
  {
  EventListener listener;
  public void addPropertyValueListener(PropertyListener l)
    {
    listener=EventMulticaster.add(listener,l);
    }
  public void removePropertyListener(PropertyListener l)
    {
    listener=EventMulticaster.remove(listener,l);
    }
  public void someMethod()
    {
    // When event occurs which causes "onEvent".
    EventListener listener=this.listener;
    if ( listener!=null )
      listener.onEvent(new SomeEvent(...));
    }
  }

Author:
Christopher Mindus
  • Field Details

  • Constructor Details

    • EventMulticaster

      protected EventMulticaster(EventListener a, EventListener b)
      Creates an event multicaster instance which chains listener-a with listener-b.
      Parameters:
      a - listener-a.
      b - listener-b.
  • Method Details

    • remove

      protected EventListener remove(EventListener old)
      Removes a listener from this multicaster and returns the resulting multicast listener.
      Parameters:
      old - the listener to be removed.
    • populate

      public void populate(ArrayList<EventListener> listeners)
      Populates the array with listeners.
    • onEvent

      public void onEvent(GEvent event)
      Called when the event is fired.
      Specified by:
      onEvent in interface EventListener
      Parameters:
      event - The event.
    • add

      public static EventListener add(EventListener a, EventListener b)
      Adds listener-a with listener-b and returns the resulting multicast listener.

      No duplicate check is performed, following the java.awt.AWTEventMulticaster contract this class is modelled on. Adding the same listener twice chains it twice, and the event is then delivered to it twice for every fire. One call to remove(EventListener,EventListener) undoes one registration, not all of them, so a listener added twice keeps receiving events after being removed once. Callers that cannot guarantee a single registration must track that themselves.

      Parameters:
      a - listener-a.
      b - listener-b.
    • remove

      public static EventListener remove(EventListener l, EventListener old)
      Removes the old listener from listener-l and returns the resulting multicast listener.
      Parameters:
      l - listener-l.
      old - the listener being removed.
    • addInternal

      protected static EventListener addInternal(EventListener a, EventListener b)
      Returns the resulting multicast listener from adding listener-a and listener-b together.
      1. If listener-a is null, it returns listener-b.
      2. If listener-b is null, it returns listener-a.
      3. If neither are null, then it creates and returns a new EventMulticaster instance which chains a with b.
      Parameters:
      a - event-listener-a.
      b - event-listener-b.
    • removeInternal

      protected static EventListener removeInternal(EventListener l, EventListener old)
      Returns the resulting multicast listener after removing the old listener from listener-l.
      1. If listener-l equals the old listener OR listener-l is null, returns null.
      2. If listener-l is an instance of EventMulticaster, then it removes the old listener from it.
      3. Returns listener l.
      Parameters:
      l - the listener being removed from.
      old - the listener being removed.