KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > batik > dom > events > EventListenerList


1 /*
2
3    Copyright 2000-2002 The Apache Software Foundation
4
5    Licensed under the Apache License, Version 2.0 (the "License");
6    you may not use this file except in compliance with the License.
7    You may obtain a copy of the License at
8
9        http://www.apache.org/licenses/LICENSE-2.0
10
11    Unless required by applicable law or agreed to in writing, software
12    distributed under the License is distributed on an "AS IS" BASIS,
13    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14    See the License for the specific language governing permissions and
15    limitations under the License.
16
17  */

18 package org.apache.batik.dom.events;
19
20 import org.w3c.dom.events.EventListener JavaDoc;
21
22 /**
23  * A simple list of EventListener. Listeners are always added at the
24  * head of the list.
25  *
26  * @author <a HREF="mailto:tkormann@apache.org">Thierry Kormann</a>
27  */

28 public class EventListenerList {
29
30     /**
31      * Current number of entries in list.
32      */

33     protected int n = 0;
34     /**
35      * Simple Linked list of listeners.
36      */

37     protected Entry first = null;
38     /**
39      * Array of listeners retained between calls to getEventListeners if the
40      * list of listeners doesn't change. This needs to be a copy so if the
41      * list of listeners changes during event dispatch it doesn't effect
42      * the inprogress dispatch.
43      */

44     protected EventListener JavaDoc [] listeners = null;
45
46     /**
47      * Returns an array of the event listeners of this list, or null if any.
48      */

49     public EventListener JavaDoc [] getEventListeners() {
50     if (first == null) return null;
51         if (listeners != null) return listeners;
52
53     listeners = new EventListener JavaDoc[n];
54     Entry current = first;
55     for (int i=0; i < n; ++i, current = current.next) {
56         listeners[i] = current.listener;
57     }
58     return listeners;
59     }
60
61     /**
62      * Adds the specified event listener.
63      * @param listener the event listener to add
64      */

65     public void add(EventListener JavaDoc listener) {
66     first = new Entry(listener, first);
67         listeners = null; // Clear current listener list.
68
n++;
69     }
70
71     /**
72      * Removes the specified event listener.
73      * @param listener the event listener to remove
74      */

75     public void remove(EventListener JavaDoc listener) {
76     if (first == null) return;
77
78
79         if (first.listener == listener) {
80         first = first.next;
81             listeners = null; // Clear current listener list.
82
--n;
83     } else {
84         Entry prev = first;
85         Entry e = first.next;
86         while (e != null) {
87                 if (e.listener == listener) {
88                     prev.next = e.next;
89                     listeners = null; // Clear current listener list.
90
--n;
91                     break;
92                 }
93         prev = e;
94         e = e.next;
95         }
96     }
97     }
98
99     /**
100      * Returns true of the specified event listener has already been
101      * added to this list, false otherwise.
102      * @param listener the listener th check
103      */

104     public boolean contains(EventListener JavaDoc listener) {
105     for (Entry e=first; e != null; e = e.next) {
106         if (listener == e.listener)
107         return true;
108     }
109     return false;
110     }
111
112     /**
113      * Returns the number of listeners in the list.
114      */

115     public int size() {
116         return n;
117     }
118
119     // simple entry for the list
120
protected static class Entry {
121     EventListener JavaDoc listener;
122     Entry next;
123
124     public Entry(EventListener JavaDoc listener, Entry next) {
125         this.listener = listener;
126         this.next = next;
127     }
128     }
129 }
130
Popular Tags