KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > columba > core > scripting > extensions > ExtensionEventBus


1 /*
2   The contents of this file are subject to the Mozilla Public License Version 1.1
3   (the "License"); you may not use this file except in compliance with the
4   License. You may obtain a copy of the License at http://www.mozilla.org/MPL/
5   
6   Software distributed under the License is distributed on an "AS IS" basis,
7   WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
8   for the specific language governing rights and
9   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 JavaDoc;
21 import java.util.Iterator JavaDoc;
22 import java.util.LinkedList JavaDoc;
23 import java.util.List JavaDoc;
24 import java.util.Map JavaDoc;
25 import java.util.TreeMap JavaDoc;
26 import java.util.Vector JavaDoc;
27
28
29 /**
30   @author Celso Pinto (cpinto@yimports.com)
31  */

32 public class ExtensionEventBus
33 {
34   /*TODO create javadocs for class */
35   
36   private static ExtensionEventBus self = null;
37   private Map JavaDoc eventMap = null;
38   
39   private ExtensionEventBus()
40   {
41     eventMap = new TreeMap JavaDoc();
42   }
43   
44   public static ExtensionEventBus getInstance()
45   {
46     if (self == null)
47       self = new ExtensionEventBus();
48       
49     return self;
50   }
51
52   public void registerEvent(String JavaDoc eventId)
53   {
54     if (!eventMap.containsKey(eventId))
55       eventMap.put(eventId,new LinkedList JavaDoc());
56       
57   }
58   
59   public void unregisterEvent(String JavaDoc eventId)
60   {
61     eventMap.remove(eventId);
62   }
63   
64   public void registerListener(ExtensionEventListener listener, String JavaDoc eventId)
65   {
66   
67     registerEvent(eventId);
68     List JavaDoc listeners = getListeners(eventId);
69     if (listeners == null || listeners.contains(listener))
70       return;
71       
72     listeners.add(listener);
73       
74   }
75   
76   public void unregisterListener(ExtensionEventListener listener,String JavaDoc eventId)
77   {
78     List JavaDoc listeners = getListeners(eventId);
79     if (listeners == null)
80       return;
81       
82     listeners.remove(listener);
83     
84   }
85   
86   public List JavaDoc getListeners(String JavaDoc eventId)
87   {
88     return (List JavaDoc)eventMap.get(eventId);
89   }
90   
91   public Enumeration JavaDoc enumAvailableEvents()
92   {
93     return (new Vector JavaDoc(eventMap.keySet()).elements());
94   }
95   
96   public void fireEvent(ExtensionEvent event)
97   {
98     /* XXX should this be fired by a different thread? */
99     List JavaDoc listeners = getListeners(event.getEventId());
100     if (listeners == null)
101       return ;
102     
103     for(Iterator JavaDoc it = listeners.iterator();it.hasNext();)
104       ((ExtensionEventListener)it.next()).eventFired(event);
105       
106   }
107 }
108
Popular Tags