KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > net > javacoding > jspider > core > dispatch > impl > EventDispatcherImpl


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 /**
16  *
17  * $Id: EventDispatcherImpl.java,v 1.11 2003/04/22 16:43:33 vanrogu Exp $
18  *
19  * @author Günther Van Roey
20  */

21 public class EventDispatcherImpl implements EventDispatcher {
22
23     protected String JavaDoc 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 JavaDoc 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 JavaDoc engineEventFilterClass = props.getClass(ConfigConstants.FILTER_ENGINE, AllowAllEventFilter.class);
61             Class JavaDoc monitorEventFilterClass = props.getClass(ConfigConstants.FILTER_MONITORING, AllowAllEventFilter.class);
62             Class JavaDoc 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 JavaDoc e) {
71                 log.error("InstantiationException on EventFilter", e);
72             } catch (IllegalAccessException JavaDoc 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