Statistics
| Revision:

svn-gvsig-desktop / trunk / libraries / libFMap / src / com / iver / cit / gvsig / fmap / EventBuffer.java @ 6483

History | View | Annotate | Download (7.9 KB)

1 1100 fjp
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
4
 *
5
 * This program is free software; you can redistribute it and/or
6
 * modify it under the terms of the GNU General Public License
7
 * as published by the Free Software Foundation; either version 2
8
 * of the License, or (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License
16
 * along with this program; if not, write to the Free Software
17
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
18
 *
19
 * For more information, contact:
20
 *
21
 *  Generalitat Valenciana
22
 *   Conselleria d'Infraestructures i Transport
23
 *   Av. Blasco Ib??ez, 50
24
 *   46010 VALENCIA
25
 *   SPAIN
26
 *
27
 *      +34 963862235
28
 *   gvsig@gva.es
29
 *      www.gvsig.gva.es
30
 *
31
 *    or
32
 *
33
 *   IVER T.I. S.A
34
 *   Salamanca 50
35
 *   46005 Valencia
36
 *   Spain
37
 *
38
 *   +34 963163400
39
 *   dac@iver.es
40
 */
41 679 fernando
package com.iver.cit.gvsig.fmap;
42
43
import com.iver.cit.gvsig.fmap.layers.CancelationException;
44
import com.iver.cit.gvsig.fmap.layers.LayerCollectionEvent;
45
import com.iver.cit.gvsig.fmap.layers.LayerCollectionListener;
46 727 fernando
import com.iver.cit.gvsig.fmap.layers.LayerEvent;
47
import com.iver.cit.gvsig.fmap.layers.LayerListener;
48 679 fernando
import com.iver.cit.gvsig.fmap.layers.LayerPositionEvent;
49
import com.iver.cit.gvsig.fmap.layers.LegendListener;
50
import com.iver.cit.gvsig.fmap.layers.SelectionEvent;
51
import com.iver.cit.gvsig.fmap.layers.SelectionListener;
52
import com.iver.cit.gvsig.fmap.rendering.LegendChangedEvent;
53
54
import java.util.ArrayList;
55
import java.util.Iterator;
56
57
58
/**
59 1034 vcaballero
 * Evento sobre el buffer.
60 679 fernando
 *
61
 * @author Fernando Gonz?lez Cort?s
62
 */
63
public class EventBuffer implements LegendListener, LayerCollectionListener,
64 956 vcaballero
        SelectionListener, ViewPortListener, LayerListener {
65 679 fernando
        private ArrayList events = new ArrayList();
66
        private ArrayList listeners = new ArrayList();
67
        private boolean dispatching = true;
68
69
        /**
70 956 vcaballero
         * Pone el buffer en modo acumulaci?n de eventos. Los eventos que se
71
         * reciban a partir de una llamada a este m?todo ser?n acumulados y no
72
         * ser?n notificados a los listeners hasta que no se reciba una llamada a
73
         * endAtomicEvent
74 679 fernando
         */
75
        public void beginAtomicEvent() {
76
                dispatching = false;
77
        }
78
79
        /**
80 956 vcaballero
         * Termina la acumulaci?n de eventos y notifica a los  l?steners.
81 679 fernando
         */
82
        public void endAtomicEvent() {
83
                fireAtomicEventListener();
84
                events.clear();
85
                dispatching = true;
86
        }
87
88
        /**
89
         * @see com.iver.cit.gvsig.fmap.layers.LegendListener#legendChanged(com.iver.cit.gvsig.fmap.rendering.LegendChangedEvent)
90
         */
91
        public void legendChanged(LegendChangedEvent e) {
92
                events.add(e);
93 956 vcaballero
94
                if (dispatching) {
95
                        fireAtomicEventListener();
96
                }
97 679 fernando
        }
98
99
        /**
100
         * @see com.iver.cit.gvsig.fmap.layers.LayerCollectionListener#layerAdded(com.iver.cit.gvsig.fmap.layers.LayerCollectionEvent)
101
         */
102
        public void layerAdded(LayerCollectionEvent e) {
103
                events.add(e);
104 956 vcaballero
105
                if (dispatching) {
106
                        fireAtomicEventListener();
107
                }
108 679 fernando
        }
109
110
        /**
111
         * @see com.iver.cit.gvsig.fmap.layers.LayerCollectionListener#layerMoved(com.iver.cit.gvsig.fmap.layers.LayerPositionEvent)
112
         */
113
        public void layerMoved(LayerPositionEvent e) {
114
                events.add(e);
115 956 vcaballero
116
                if (dispatching) {
117
                        fireAtomicEventListener();
118
                }
119 679 fernando
        }
120
121
        /**
122
         * @see com.iver.cit.gvsig.fmap.layers.LayerCollectionListener#layerRemoved(com.iver.cit.gvsig.fmap.layers.LayerCollectionEvent)
123
         */
124
        public void layerRemoved(LayerCollectionEvent e) {
125
                events.add(e);
126 956 vcaballero
127
                if (dispatching) {
128
                        fireAtomicEventListener();
129
                }
130 679 fernando
        }
131
132
        /**
133
         * @see com.iver.cit.gvsig.fmap.layers.LayerCollectionListener#layerAdding(com.iver.cit.gvsig.fmap.layers.LayerCollectionEvent)
134
         */
135
        public void layerAdding(LayerCollectionEvent e) throws CancelationException {
136
                events.add(e);
137 956 vcaballero
138
                if (dispatching) {
139
                        fireAtomicEventListener();
140
                }
141 679 fernando
        }
142
143
        /**
144
         * @see com.iver.cit.gvsig.fmap.layers.LayerCollectionListener#layerMoving(com.iver.cit.gvsig.fmap.layers.LayerPositionEvent)
145
         */
146
        public void layerMoving(LayerPositionEvent e) throws CancelationException {
147
                events.add(e);
148 956 vcaballero
149
                if (dispatching) {
150
                        fireAtomicEventListener();
151
                }
152 679 fernando
        }
153
154
        /**
155
         * @see com.iver.cit.gvsig.fmap.layers.LayerCollectionListener#layerRemoving(com.iver.cit.gvsig.fmap.layers.LayerCollectionEvent)
156
         */
157
        public void layerRemoving(LayerCollectionEvent e)
158
                throws CancelationException {
159
                events.add(e);
160 956 vcaballero
161
                if (dispatching) {
162
                        fireAtomicEventListener();
163
                }
164 679 fernando
        }
165
166
        /**
167
         * @see com.iver.cit.gvsig.fmap.layers.LayerCollectionListener#activationChanged(com.iver.cit.gvsig.fmap.layers.LayerCollectionEvent)
168
         */
169
        public void activationChanged(LayerCollectionEvent e)
170
                throws CancelationException {
171
                events.add(e);
172 956 vcaballero
173
                if (dispatching) {
174
                        fireAtomicEventListener();
175
                }
176 679 fernando
        }
177
178
        /**
179
         * @see com.iver.cit.gvsig.fmap.layers.LayerCollectionListener#visibilityChanged(com.iver.cit.gvsig.fmap.layers.LayerCollectionEvent)
180
         */
181
        public void visibilityChanged(LayerCollectionEvent e)
182
                throws CancelationException {
183
                events.add(e);
184 956 vcaballero
185
                if (dispatching) {
186
                        fireAtomicEventListener();
187
                }
188 679 fernando
        }
189
190
        /**
191
         * @see com.iver.cit.gvsig.fmap.layers.SelectionListener#selectionChanged(com.iver.cit.gvsig.fmap.layers.SelectionEvent)
192
         */
193
        public void selectionChanged(SelectionEvent e) {
194
                events.add(e);
195 956 vcaballero
196
                if (dispatching) {
197
                        fireAtomicEventListener();
198
                }
199 679 fernando
        }
200
201
        /**
202
         * @see com.iver.cit.gvsig.fmap.ExtentListener#extentChanged(com.iver.cit.gvsig.fmap.ExtentEvent)
203
         */
204
        public void extentChanged(ExtentEvent e) {
205
                events.add(e);
206 956 vcaballero
207
                if (dispatching) {
208
                        fireAtomicEventListener();
209
                }
210 679 fernando
        }
211
212
        /**
213 1034 vcaballero
         * A?ade un AtomicEventListener a la lista de listener.
214 679 fernando
         *
215 1034 vcaballero
         * @param listener AtomicEventListener.
216 679 fernando
         *
217 1034 vcaballero
         * @return True si ha sido a?adido correctamente.
218 679 fernando
         */
219
        public boolean addAtomicEventListener(AtomicEventListener listener) {
220 4147 fjp
                boolean bFound = false;
221
                for (int i=0; i < listeners.size(); i++)
222
                        if (listeners.get(i) == listener)
223
                                bFound = true;
224
                if (!bFound)
225
                        listeners.add(listener);
226
                return true;
227 679 fernando
        }
228
229
        /**
230 1034 vcaballero
         * Borra el AtomicEventListener de la lista de listeners.
231 679 fernando
         *
232 1034 vcaballero
         * @param listener AtomicEventListener.
233 679 fernando
         *
234 1034 vcaballero
         * @return True si ha sido borrado correctamente.
235 679 fernando
         */
236
        public boolean removeAtomicEventListener(AtomicEventListener listener) {
237
                return listeners.remove(listener);
238
        }
239
240
        /**
241 1034 vcaballero
         * Ejecuta el m?todo atomicEvent de todos los listeners.
242 679 fernando
         */
243
        private void fireAtomicEventListener() {
244 4147 fjp
                if (events.size() == 0)
245
                        return; // No hay eventos que lanzar.
246 679 fernando
                for (Iterator i = listeners.iterator(); i.hasNext();) {
247
                        AtomicEventListener listener = (AtomicEventListener) i.next();
248
                        AtomicEvent e = new AtomicEvent(events);
249
                        listener.atomicEvent(e);
250
                }
251 956 vcaballero
252 679 fernando
                events.clear();
253
        }
254 727 fernando
255
        /**
256
         * @see com.iver.cit.gvsig.fmap.layers.LayerListener#visibilityChanged(com.iver.cit.gvsig.fmap.layers.LayerEvent)
257
         */
258
        public void visibilityChanged(LayerEvent e) {
259
                events.add(e);
260 956 vcaballero
261
                if (dispatching) {
262
                        fireAtomicEventListener();
263
                }
264 727 fernando
        }
265
266
        /**
267
         * @see com.iver.cit.gvsig.fmap.layers.LayerListener#activationChanged(com.iver.cit.gvsig.fmap.layers.LayerEvent)
268
         */
269
        public void activationChanged(LayerEvent e) {
270
                events.add(e);
271 956 vcaballero
272
                if (dispatching) {
273
                        fireAtomicEventListener();
274
                }
275 727 fernando
        }
276
277
        /**
278
         * @see com.iver.cit.gvsig.fmap.layers.LayerListener#nameChanged(com.iver.cit.gvsig.fmap.layers.LayerEvent)
279
         */
280
        public void nameChanged(LayerEvent e) {
281
                events.add(e);
282 956 vcaballero
283
                if (dispatching) {
284
                        fireAtomicEventListener();
285
                }
286 727 fernando
        }
287 956 vcaballero
288
        /**
289
         * @see com.iver.cit.gvsig.fmap.ViewPortListener#backColorChanged(com.iver.cit.gvsig.fmap.ColorEvent)
290
         */
291
        public void backColorChanged(ColorEvent e) {
292
                events.add(e);
293
294
                if (dispatching) {
295 979 fernando
                        fireAtomicEventListener();
296 956 vcaballero
                }
297
        }
298 4144 fjp
299
        public void editionChanged(LayerEvent e) {
300
                events.add(e);
301
302
                if (dispatching) {
303
                        fireAtomicEventListener();
304
                }
305
306
        }
307 5939 jmvivo
308
        public void projectionChanged(ProjectionEvent e) {
309
                events.add(e);
310
311
                if (dispatching) {
312
                        fireAtomicEventListener();
313
                }
314
        }
315 679 fernando
}