EventDispatcherImpl.java
上传用户:qing5858
上传日期:2015-10-27
资源大小:6056k
文件大小:4k
源码类别:

搜索引擎

开发平台:

Java

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