package org.swellrt.server.box.events; import org.waveprotocol.wave.util.logging.Log; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; public class EventQueueImpl implements EventQueue { private static final Log LOG = Log.get(EventQueueImpl.class); private List<EventQueueListener> listeners = new ArrayList<EventQueueListener>(); private Map<EventRuleClass, Set<String>> expressions = new HashMap<EventRuleClass, Set<String>>(); @Override public void add(Event event) { LOG.info("Added new event to queue: " + event); for (EventQueueListener l : listeners) l.onEvent(event); } @Override public void registerListener(EventQueueListener listener) { listeners.add(listener); } @Override public boolean hasEventsFor(String app, String dataType) { return expressions.containsKey(new EventRuleClass(app, dataType)); } @Override public Set<String> getExpressionPaths(String app, String dataType) { return expressions.get(new EventRuleClass(app, dataType)); } @Override public void registerConfigurator(EventQueueConfigurator configurator) { for (EventRuleClass appAndType : configurator.getEventRuleClasses()) { Set<String> paths = expressions.get(appAndType); if (paths == null) { paths = new HashSet<String>(); expressions.put(appAndType, paths); } paths.addAll(configurator.getExpressionPaths(appAndType)); } } }