package uk.org.squirm3.listener;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
/**
* Binds and fires {@link Listener} for a defined event.
*/
public final class EventDispatcher<E> {
private final Map<E, Collection<Listener>> listeners;
public EventDispatcher() {
listeners = new HashMap<E, Collection<Listener>>();
}
/**
* Binds a listener to an event. It will then be called by
* {@link #dispatchEvent(Object)}.
*/
public void addListener(final Listener listener, final E event) {
if (!listeners.containsKey(event)) {
listeners.put(event, new LinkedList<Listener>());
}
listeners.get(event).add(listener);
}
/**
* Calls all listeners associated with an event.
*/
public void dispatchEvent(final E event) {
if (!listeners.containsKey(event)) {
listeners.put(event, new LinkedList<Listener>());
}
for (final Listener listener : listeners.get(event)) {
listener.propertyHasChanged();
}
}
}