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