Saturday, April 30, 2011

Listing 3: package event


Listing 3:
package event;

import com.sun.java.swing.event.EventListenerList;
import java.io.Serializable;

/**
 * Abstract class that both consumes events and
 * forwards event to other consumers.
 * Generally used to filter the events by their
 * context and possibly some other data, so that
 * the other consumers get only the events they
 * are interested in.
 * The consume method needs to be implemented.
 */

public abstract class EventFilter implements
    EventConsumer, EventDistributor, Serializable
{
  private EventListenerList myEventConsumer = null;

  /**
   * Constructor.
   */
  public EventFilter () {
    myEventConsumer = new EventListenerList();
  }

  /**
   * Abstract method that processes Events.
   * This method needs to be implmented to
   * process each event when they are received.
   * @param Event the event to be processed.
   * @see EventConsumer.
   */
  public abstract void consume(Event event);

  /**
   * Add an event consumer.
   * @see EventDistributor.
   */
  public void addEventConsumer(
      EventConsumer consumer, String context)
  {
    myEventConsumer.add(EventConsumer.class,
      consumer);
  }

  /**
   * Remove an event consumer.
   * @see EventDistributor.
   */
  public void removeEventConsumer(
      EventConsumer consumer)
  {
    myEventConsumer.remove(EventConsumer.class,
      consumer);
  }

  /**
   * Call all consumers that have registered.
   * Helper method to walk the list of consumers
   * calling all of their consume methods.
   * @param Event the event to be processed.
   * @see EventListenerList
   */
  protected void fireEventConsumer(Event newEvent)
  {
    Object[] listeners =
      myEventConsumer.getListenerList();

    for (int i = listeners.length-2;
        i >= 0;
        i -= 2)
    {
      if (listeners[i] == EventConsumer.class) {
        ((EventConsumer)
          listeners[i+1]).consume(newEvent);
      }
    }
  }
}

No comments:

Post a Comment