1 package net.javacoding.jspider.core.dispatch.impl; 2 3 4 import net.javacoding.jspider.api.event.EventSink; 5 import net.javacoding.jspider.api.event.JSpiderEvent; 6 import net.javacoding.jspider.core.dispatch.EventDispatcher; 7 import net.javacoding.jspider.core.util.config.PropertySet; 8 import net.javacoding.jspider.core.util.config.ConfigConstants; 9 import net.javacoding.jspider.core.logging.Log; 10 import net.javacoding.jspider.core.logging.LogFactory; 11 import net.javacoding.jspider.spi.EventFilter; 12 import net.javacoding.jspider.mod.eventfilter.AllowAllEventFilter; 13 14 15 21 public class EventDispatcherImpl implements EventDispatcher { 22 23 protected String name; 24 protected boolean filter; 25 26 protected EventSink[] eventSinks; 27 protected EventFilter engineEventFilter; 28 protected EventFilter monitorEventFilter; 29 protected EventFilter spiderEventFilter; 30 31 protected Log log; 32 33 public void initialize() { 34 log.debug(name + " intializing..."); 35 for (int i = 0; i < eventSinks.length; i++) { 36 EventSink eventSink = eventSinks[i]; 37 eventSink.initialize(); 38 } 39 log.debug(name + " intialized."); 40 } 41 42 public void shutdown() { 43 log.debug(name + " shutting down."); 44 for (int i = 0; i < eventSinks.length; i++) { 45 EventSink eventSink = eventSinks[i]; 46 eventSink.shutdown(); 47 } 48 log.debug(name + " shutdown."); 49 } 50 51 public EventDispatcherImpl(String name, EventSink[] eventSinks, PropertySet props) { 52 log = LogFactory.getLog(EventDispatcher.class); 53 log.debug(name + " configuring..."); 54 this.name = name; 55 this.filter = props.getBoolean(ConfigConstants.FILTER_ENABLED, true); 56 this.eventSinks = eventSinks; 57 58 if (filter) { 59 60 Class engineEventFilterClass = props.getClass(ConfigConstants.FILTER_ENGINE, AllowAllEventFilter.class); 61 Class monitorEventFilterClass = props.getClass(ConfigConstants.FILTER_MONITORING, AllowAllEventFilter.class); 62 Class spiderEventFilterClass = props.getClass(ConfigConstants.FILTER_SPIDER, AllowAllEventFilter.class); 63 log.debug("EventFilter for engine events = " + engineEventFilterClass.getName()); 64 log.debug("EventFilter for monitor events = " + monitorEventFilterClass.getName()); 65 log.debug("EventFilter for spider events = " + spiderEventFilterClass.getName()); 66 try { 67 engineEventFilter = (EventFilter) engineEventFilterClass.newInstance(); 68 monitorEventFilter = (EventFilter) monitorEventFilterClass.newInstance(); 69 spiderEventFilter = (EventFilter) spiderEventFilterClass.newInstance(); 70 } catch (InstantiationException e) { 71 log.error("InstantiationException on EventFilter", e); 72 } catch (IllegalAccessException e) { 73 log.error("IllegalAccessException on instantiation of EventFilter", e); 74 } 75 } else { 76 log.info("Global event filtering is DISABLED"); 77 } 78 log.debug("EventDispatcher " + name + " configured."); 79 } 80 81 public void dispatch(JSpiderEvent event) { 82 boolean mustDispatch = false; 83 if (filter) { 84 EventFilter eventFilter = spiderEventFilter; 85 if (event.isFilterable()) { 86 switch (event.getType()) { 87 case JSpiderEvent.EVENT_TYPE_ENGINE: 88 eventFilter = engineEventFilter; 89 break; 90 case JSpiderEvent.EVENT_TYPE_MONITORING: 91 eventFilter = monitorEventFilter; 92 break; 93 case JSpiderEvent.EVENT_TYPE_SPIDER: 94 eventFilter = spiderEventFilter; 95 break; 96 default: 97 eventFilter = spiderEventFilter; 98 } 99 if (eventFilter.filterEvent(event)) { 100 mustDispatch = true; 101 } 102 } else { 103 mustDispatch = true; 104 } 105 } else { 106 mustDispatch = true; 107 } 108 if (mustDispatch) { 109 for (int i = 0; i < eventSinks.length; i++) { 110 EventSink sink = eventSinks[i]; 111 sink.notify(event); 112 } 113 } 114 } 115 116 } 117 | Popular Tags |