package frostillicus.xsp.event; import java.util.*; import javax.faces.context.FacesContext; /** * @since 1.0 */ public class SimpleXPagesEventDispatcher implements XPagesEventDispatcher { private static final long serialVersionUID = 4297933143684795646L; private final Set<XPagesEventListener> listeners = new HashSet<XPagesEventListener>(); @SuppressWarnings("unchecked") public void setListenerClasses(final List<String> listenerClassNames) throws ClassNotFoundException, IllegalAccessException, InstantiationException { for (String className : listenerClassNames) { Class<XPagesEventListener> listenerClass = (Class<XPagesEventListener>) FacesContext.getCurrentInstance().getContextClassLoader().loadClass(className); this.addListener(listenerClass.newInstance()); } } @Override public void addListener(final XPagesEventListener listener) { this.listeners.add(listener); } @Override public void dispatch(final XPagesEvent event) { for (XPagesEventListener listener : this.listeners) { listener.receiveEvent(event); } } public void dispatch(final String eventName) { this.dispatch(eventName, new Object[] {}); } public void dispatch(final String eventName, final Object... eventPayload) { this.dispatch(new SimpleXPagesEvent(eventName, eventPayload)); } }