01: /*
02: The contents of this file are subject to the Mozilla Public License Version 1.1
03: (the "License"); you may not use this file except in compliance with the
04: License. You may obtain a copy of the License at http://www.mozilla.org/MPL/
05:
06: Software distributed under the License is distributed on an "AS IS" basis,
07: WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
08: for the specific language governing rights and
09: limitations under the License.
10:
11: The Original Code is "The Columba Project"
12:
13: The Initial Developers of the Original Code are Frederik Dietz and Timo Stich.
14: Portions created by Frederik Dietz and Timo Stich are Copyright (C) 2003.
15:
16: All Rights Reserved.
17: */
18: package org.columba.core.scripting.extensions;
19:
20: import java.util.Enumeration;
21: import java.util.Iterator;
22: import java.util.LinkedList;
23: import java.util.List;
24: import java.util.Map;
25: import java.util.TreeMap;
26: import java.util.Vector;
27:
28: /**
29: @author Celso Pinto (cpinto@yimports.com)
30: */
31: public class ExtensionEventBus {
32: /*TODO create javadocs for class */
33:
34: private static ExtensionEventBus self = null;
35: private Map eventMap = null;
36:
37: private ExtensionEventBus() {
38: eventMap = new TreeMap();
39: }
40:
41: public static ExtensionEventBus getInstance() {
42: if (self == null)
43: self = new ExtensionEventBus();
44:
45: return self;
46: }
47:
48: public void registerEvent(String eventId) {
49: if (!eventMap.containsKey(eventId))
50: eventMap.put(eventId, new LinkedList());
51:
52: }
53:
54: public void unregisterEvent(String eventId) {
55: eventMap.remove(eventId);
56: }
57:
58: public void registerListener(ExtensionEventListener listener,
59: String eventId) {
60:
61: registerEvent(eventId);
62: List listeners = getListeners(eventId);
63: if (listeners == null || listeners.contains(listener))
64: return;
65:
66: listeners.add(listener);
67:
68: }
69:
70: public void unregisterListener(ExtensionEventListener listener,
71: String eventId) {
72: List listeners = getListeners(eventId);
73: if (listeners == null)
74: return;
75:
76: listeners.remove(listener);
77:
78: }
79:
80: public List getListeners(String eventId) {
81: return (List) eventMap.get(eventId);
82: }
83:
84: public Enumeration enumAvailableEvents() {
85: return (new Vector(eventMap.keySet()).elements());
86: }
87:
88: public void fireEvent(ExtensionEvent event) {
89: /* XXX should this be fired by a different thread? */
90: List listeners = getListeners(event.getEventId());
91: if (listeners == null)
92: return;
93:
94: for (Iterator it = listeners.iterator(); it.hasNext();)
95: ((ExtensionEventListener) it.next()).eventFired(event);
96:
97: }
98: }
|