Statistics
| Revision:

root / trunk / libraries / libFMap / src / com / iver / cit / gvsig / fmap / layers / FLayers.java @ 247

History | View | Annotate | Download (9.89 KB)

1
/* Generated by Together */
2
package com.iver.cit.gvsig.fmap.layers;
3

    
4
import com.iver.cit.gvsig.fmap.ViewPort;
5
import com.iver.cit.gvsig.fmap.XMLEntity;
6
import com.iver.cit.gvsig.fmap.core.FGeometry;
7
import com.iver.cit.gvsig.fmap.drivers.DriverIOException;
8
import com.iver.cit.gvsig.fmap.operations.Cancellable;
9
import com.iver.cit.gvsig.fmap.operations.QueriedPoint;
10
import com.iver.cit.gvsig.fmap.operations.strategies.FeatureVisitor;
11

    
12
import java.awt.Graphics2D;
13
import java.awt.geom.Rectangle2D;
14
import java.awt.image.BufferedImage;
15

    
16
import java.util.ArrayList;
17
import java.util.BitSet;
18
import java.util.Iterator;
19

    
20

    
21
/**
22
 * Representa un nodo interno en el ?rbol de capas
23
 */
24
public class FLayers extends FLyrDefault implements FLayer {
25
    //ArrayList de Listener registrados.
26
        private ArrayList layerListeners=new ArrayList();
27
    private ArrayList layers = new ArrayList(4);
28

    
29
    public FLayers(){
30
            setRoot(this);
31
    }
32
    
33
    /**
34
     * A?ade un listener de los eventos de la colecci?n de capas
35
     *
36
     * @param listener DOCUMENT ME!
37
     */
38
    public void addLayerCollectionListener(LayerCollectionListener listener) {
39
    layerListeners.add(listener);
40
    }
41

    
42
    /**
43
     * ELimina un listener de los eventos de la colecci?n de capas
44
     *
45
     * @param listener DOCUMENT ME!
46
     */
47
    public void removeLayerCollectionListener(LayerCollectionListener listener) {
48
    layerListeners.remove(listener);
49
    }
50

    
51
    /**
52
     * A?ade una capa en el arbol en la posici?n indicada por el path que se
53
     * pasa como par?metro
54
     *
55
     * @param parent DOCUMENT ME!
56
     * @param layer DOCUMENT ME!
57
     *
58
     * @throws ChildrenNotAllowedException
59
     */
60
    public void addLayer(LayerPath parent, FLayer layer)
61
        throws ChildrenNotAllowedException {
62
        if (parent.isEmpty()) {
63
            LayerPath nuevo = new LayerPath(getLayerPath(), layers.size());
64
            layer.setLayerPath(nuevo);
65
            layer.setRoot(this.getRoot());
66
            layers.add(layer);
67
            LayerCollectionEvent event=new LayerCollectionEvent(layer);
68
            callLayerAdded(event);
69
            //llamar a callLayerAdded que recorrer? todos los listener registrados para invocar layerAdde
70
        } else {
71
            int index = parent.popIndex();
72

    
73
            if (layers.get(index) instanceof FLayers) {
74
                ((FLayers) layers.get(index)).addLayer(parent, layer);
75
            } else {
76
                throw new ChildrenNotAllowedException();
77
            }
78
        }
79
    }
80

    
81
    /**
82
     * Mueve una capa de la posici?n from a la posici?n to.
83
     *
84
     * @param from DOCUMENT ME!
85
     * @param to DOCUMENT ME!
86
     *
87
     * @throws ChildrenNotAllowedException DOCUMENT ME!
88
     */
89
    public void moveTo(LayerPath from, LayerPath to)
90
        throws ChildrenNotAllowedException {
91
        FLayer layer = getLayer(from);
92
        removeLayer(from);
93
        addLayer(to, layer);
94
    }
95

    
96
    /**
97
     * Elimina una capa por su path relativo a ?ste nodo
98
     *
99
     * @param path DOCUMENT ME!
100
     *
101
     * @throws ChildrenNotAllowedException DOCUMENT ME!
102
     */
103
    public void removeLayer(LayerPath path) throws ChildrenNotAllowedException {
104
        int i = path.popIndex();
105
        FLayer lyr = (FLayer) layers.get(i);
106

    
107
        if (path.isEmpty()) {
108
            layers.remove(i);
109
        } else if (layers.get(i) instanceof FLayers) {
110
            ((FLayers) lyr).removeLayer(path);
111
        } else {
112
            throw new ChildrenNotAllowedException();
113
        }
114
    }
115

    
116
    /**
117
     * Obtiene el array de capas visibles que penden del arbol cuya ra?z es
118
     * este nodo
119
     *
120
     * @return DOCUMENT ME!
121
     */
122
    public FLayer[] getVisibles() {
123
        ArrayList array = new ArrayList();
124
        for (Iterator iter = layers.iterator(); iter.hasNext();) {
125
            if (((FLayer) iter.next()).isVisible()) {
126
                array.add((FLayer) iter.next());
127
            }
128
        }
129

    
130
        return (FLayer[]) array.toArray();
131
    }
132

    
133
    /**
134
     * Obtiene el array de capas activas en el sub?rbol que pende de este nodo
135
     *
136
     * @return DOCUMENT ME!
137
     */
138
    public FLayer[] getActives() {
139
        ArrayList array = new ArrayList();
140
        for (Iterator iter = layers.iterator(); iter.hasNext();) {
141
            if (((FLayer) iter.next()).isActive()) {
142
                array.add((FLayer) iter.next());
143
            }
144
        }
145

    
146
        return (FLayer[]) array.toArray();
147
    }
148

    
149
    /**
150
     * Obtiene el descendiente de esta colecci?n que se encuentra en el camino
151
     * indicado en el par?metro. En caso de que el path no contenga ning?n
152
     * elemento se devuelve this
153
     *
154
     * @param path DOCUMENT ME!
155
     *
156
     * @return DOCUMENT ME!
157
     */
158
    public FLayer getLayer(LayerPath path) {
159
        int i = path.popIndex();
160
        FLayer lyr = (FLayer) layers.get(i);
161

    
162
        if (path.isEmpty()) {
163
            return (FLayer) layers.get(i);
164
        } else if (layers.get(i) instanceof FLayers) {
165
            ((FLayers) lyr).getLayer(path);
166
        }
167

    
168
        return this;
169
    }
170

    
171
    /**
172
     * Obtiene el hijo i-?simo directo de esta colecci?n
173
     *
174
     * @param index DOCUMENT ME!
175
     *
176
     * @return DOCUMENT ME!
177
     */
178
    public FLayer getChildLayer(int index) {
179
        return (FLayer) layers.get(index);
180
    }
181

    
182
    /**
183
     * Obtiene el n?mero de capas que hay en el sub?rbol pendiente de ?ste nodo
184
     *
185
     * @return DOCUMENT ME!
186
     */
187
    public int getLayerCount() {
188
        int all = 0;
189

    
190
        for (int i = 0; i < layers.size(); i++) {
191
            all++;
192

    
193
            if (layers.get(i) instanceof FLayers) {
194
                all += ((FLayers) layers.get(i)).getLayerCount();
195
            }
196
        }
197

    
198
        return all;
199
    }
200

    
201
    /**
202
     * Obtiene el n?mero de hijos que penden de este nodo del ?rbol de capas
203
     *
204
     * @return DOCUMENT ME!
205
     */
206
    public int getChildLayerCount() {
207
        return layers.size();
208
    }
209

    
210
    /**
211
     * Obtiene una representaci?n de la colecci?n de capas de forma recursiva
212
     *
213
     * @return DOCUMENT ME!
214
     */
215
    public XMLEntity getProperties() {
216
        //TODO implementar bien
217
        return null;
218
    }
219

    
220
    /**
221
     * DOCUMENT ME!
222
     *
223
     * @param xe DOCUMENT ME!
224
     *
225
     * @return DOCUMENT ME!
226
     */
227
    public static FLayers createFLayers(XMLEntity xe) {
228
        //TODO implementar bien
229
        return null;
230
    }
231

    
232
    /**
233
     * Crea una replica del objeto Layers
234
     *
235
     * @return DOCUMENT ME!
236
     */
237
    public FLayers cloneFLayers() {
238
        return createFLayers(getProperties());
239
    }
240

    
241
    /**
242
     * @see com.iver.cit.gvsig.fmap.operations.strategies.Strategy#process(com.iver.cit.gvsig.fmap.FeatureSelectorVisitor,
243
     *      VectorialSubSet)
244
     */
245
    public void process(FeatureVisitor visitor, BitSet subset) {
246
    }
247

    
248
    /**
249
     * @see com.iver.cit.gvsig.fmap.operations.strategies.Strategy#queryByPoint(java.awt.geom.Point2D,
250
     *      double)
251
     */
252
    public BitSet queryByPoint(QueriedPoint p, double tolerance) {
253
        return null;
254
    }
255

    
256
    /**
257
     * @see com.iver.cit.gvsig.fmap.operations.strategies.Strategy#queryByRect(java.awt.geom.Rectangle2D)
258
     */
259
    public BitSet queryByRect(Rectangle2D rect) {
260
        return null;
261
    }
262

    
263
    /**
264
     * @see com.iver.cit.gvsig.fmap.operations.strategies.Strategy#queryByShape(com.iver.cit.gvsig.fmap.fshape.FGeometry,
265
     *      int)
266
     */
267
    public BitSet queryByShape(FGeometry g, int relationship) {
268
        return null;
269
    }
270

    
271
    /**
272
     * DOCUMENT ME!
273
     *
274
     * @param image DOCUMENT ME!
275
     * @param g DOCUMENT ME!
276
     * @param viewPort DOCUMENT ME!
277
     * @param cancel
278
     *
279
     * @throws DriverIOException
280
     *
281
     * @see com.iver.cit.gvsig.fmap.operations.strategies.Strategy#draw(java.awt.image.BufferedImage,
282
     *      java.awt.Graphics2D, com.iver.cit.gvsig.fmap.ViewPort)
283
     */
284
    public void draw(BufferedImage image, Graphics2D g, ViewPort viewPort, Cancellable cancel)
285
        throws DriverIOException {
286
        for (Iterator iter = layers.iterator(); iter.hasNext();) {
287
            LayerOperations capa = (LayerOperations) iter.next();
288

    
289
            //TODO comprobar si la capa es visible
290
            //                        if (capa.isVisible()){
291
            capa.draw(image, g, viewPort, cancel);
292

    
293
            //                }
294
        }
295
    }
296

    
297
    /**
298
     * @see com.iver.cit.gvsig.fmap.operations.strategies.Strategy#getSelectionBounds()
299
     */
300
    public Rectangle2D getSelectionBounds() {
301
        return null;
302
    }
303

    
304
    /**
305
     * @see com.iver.cit.gvsig.fmap.operations.strategies.Strategy#createIndex()
306
     */
307
    public void createIndex() {
308
    }
309

    
310
    /**
311
     * @see com.iver.cit.gvsig.fmap.layers.FLayer#getFullExtent()
312
     */
313
    public Rectangle2D getFullExtent() throws DriverIOException {
314
        //TODO implementar bien
315
        return null;
316
    }
317

    
318
    /**
319
     * @see com.iver.cit.gvsig.fmap.layers.FLayer#getRecordset()
320
     */
321
    public FRecordset getRecordset() {
322
        return null;
323
    }
324

    
325
    /**
326
     * @see com.iver.cit.gvsig.fmap.layers.FLayer#selectByPoint(java.awt.geom.Point2D,
327
     *      double)
328
     */
329
    public void selectByPoint(QueriedPoint p, double tolerance) {
330
    }
331

    
332
    /**
333
     * @see com.iver.cit.gvsig.fmap.layers.FLayer#selectByRect(java.awt.geom.Rectangle2D)
334
     */
335
    public void selectByRect(Rectangle2D rect) {
336
    }
337

    
338
    /**
339
     * @see com.iver.cit.gvsig.fmap.layers.FLayer#selectByShape(com.iver.cit.gvsig.fmap.core.FGeometry,
340
     *      int)
341
     */
342
    public void selectByShape(FGeometry g, int relationship) {
343
    }
344
    private void callLayerAdded(LayerCollectionEvent event){
345
             for (Iterator iter = layerListeners.iterator(); iter.hasNext();) {
346
                     ((LayerCollectionListener)iter).layerAdded(event);
347
             }
348
    }
349
    private void callLayerRemoved(LayerCollectionEvent event){
350
            for (Iterator iter = layerListeners.iterator(); iter.hasNext();) {
351
                    ((LayerCollectionListener)iter).layerRemoved(event);
352
            }
353
   }
354
    private void callLayerMoved(LayerPositionEvent event){
355
            for (Iterator iter = layerListeners.iterator(); iter.hasNext();) {
356
                    ((LayerCollectionListener)iter).layerMoved(event);
357
            }
358
   }
359
}