Statistics
| Revision:

svn-gvsig-desktop / tags / v10_RC2c / libraries / libFMap / src / com / iver / cit / gvsig / fmap / layers / FLyrDefault.java @ 8745

History | View | Annotate | Download (14.4 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 214 fernando
package com.iver.cit.gvsig.fmap.layers;
42
43 5923 fjp
import java.awt.image.BufferedImage;
44 2531 caballero
import java.util.ArrayList;
45 5200 ldiaz
import java.util.Hashtable;
46 2531 caballero
import java.util.Iterator;
47 214 fernando
48 5760 jmvivo
import javax.swing.ImageIcon;
49
50 2659 fjp
import org.apache.log4j.Logger;
51 354 fernando
import org.cresques.cts.ICoordTrans;
52 214 fernando
import org.cresques.cts.IProjection;
53
54 2531 caballero
import com.iver.cit.gvsig.fmap.DriverException;
55 6878 cesar
import com.iver.cit.gvsig.fmap.MapContext;
56 6164 luisw2
import com.iver.cit.gvsig.fmap.crs.CRSFactory;
57 2531 caballero
import com.iver.cit.gvsig.fmap.drivers.DriverIOException;
58 4147 fjp
import com.iver.cit.gvsig.fmap.edition.EditionException;
59 3329 fjp
import com.iver.cit.gvsig.fmap.operations.strategies.Strategy;
60 2531 caballero
import com.iver.utiles.XMLEntity;
61 214 fernando
62
/**
63 435 vcaballero
 * Implementaci?n de las caracter?sticas de alto nivel de las capas:
64
 * visibilidad, activaci?n, nombre, ...
65 214 fernando
 */
66 341 fernando
public abstract class FLyrDefault implements FLayer {
67 5923 fjp
        // private PropertyChangeSupport lnkPropertyChangeSupport;
68
        private static Logger logger = Logger.getLogger(FLyrDefault.class);
69
70 525 vcaballero
        /** Path de la capa en el arbol de capas */
71
        private FLayers parentLayer = null;
72 5923 fjp
73 745 fjp
        private FLayers virtualLayers = null;
74 5923 fjp
75 757 fjp
        private FLyrText layerText = null;
76 5923 fjp
77 274 fjp
        private String name;
78 5923 fjp
79 354 fernando
        private IProjection projection;
80 5923 fjp
81 525 vcaballero
        private boolean visible = true;
82 5923 fjp
83 387 fjp
        private boolean active;
84 5923 fjp
85 434 fjp
        private int transparency = 0;
86 5923 fjp
87 885 fjp
        private ICoordTrans ct;
88 5923 fjp
89 1176 fjp
        private double minScale = -1; // -1 indica que no se usa
90 5923 fjp
91 1176 fjp
        private double maxScale = -1;
92 5923 fjp
93 5802 jaume
        private boolean isInTOC = true;
94 5923 fjp
95 3256 nacho
        protected ArrayList layerListeners = new ArrayList();
96 884 fernando
97 5923 fjp
        private Strategy privateStrategy = null;
98
99 3690 caballero
        private boolean isediting;
100 5908 caballero
101 5200 ldiaz
        private Hashtable properties = new Hashtable();
102 5908 caballero
103 5923 fjp
        private boolean bCacheDrawnLayers;
104
105
        private BufferedImage cacheImageDrawnLayers = null;
106
107
        private boolean bDirty;
108 6400 jmvivo
109 6532 jmvivo
        private boolean available = true;
110 5923 fjp
111
        public Object getProperty(Object key) {
112 5200 ldiaz
                return properties.get(key);
113
        }
114 5923 fjp
115
        public void setProperty(Object key, Object val) {
116 5200 ldiaz
                properties.put(key, val);
117
        }
118 5908 caballero
119 525 vcaballero
        /**
120
         * @see com.iver.cit.gvsig.fmap.layers.FLayer#setActive(boolean)
121
         */
122
        public void setActive(boolean selected) {
123
                active = selected;
124 5923 fjp
                callActivationChanged(LayerEvent.createActivationChangedEvent(this,
125
                                "active"));
126 525 vcaballero
        }
127 214 fernando
128 525 vcaballero
        /**
129
         * @see com.iver.cit.gvsig.fmap.layers.FLayer#isActive()
130
         */
131
        public boolean isActive() {
132
                return active;
133
        }
134 214 fernando
135 525 vcaballero
        /**
136
         * @see com.iver.cit.gvsig.fmap.layers.FLayer#setName(java.lang.String)
137
         */
138
        public void setName(String name) {
139
                this.name = name;
140 1082 fernando
                callNameChanged(LayerEvent.createNameChangedEvent(this, "name"));
141 525 vcaballero
        }
142 214 fernando
143 525 vcaballero
        /**
144
         * @see com.iver.cit.gvsig.fmap.layers.FLayer#getName()
145
         */
146
        public String getName() {
147
                return name;
148
        }
149 214 fernando
150 567 luisw
        /*
151 525 vcaballero
         * @see com.iver.cit.gvsig.fmap.layers.FLayer#load()
152
         */
153 1034 vcaballero
        public void load() throws DriverIOException {
154 525 vcaballero
        }
155 214 fernando
156 525 vcaballero
        /**
157
         * @see com.iver.cit.gvsig.fmap.layers.FLayer#setVisible(boolean)
158
         */
159
        public void setVisible(boolean visibility) {
160 7367 jmvivo
                boolean changed = visible != visibility;
161 525 vcaballero
                visible = visibility;
162 6002 fjp
                setDirty(true);
163 7367 jmvivo
                if (changed){
164
                        if (this.getMapContext() != null){
165
                                this.getMapContext().clearAllCachingImageDrawnLayers();
166
                        }
167
                }
168 5923 fjp
                callVisibilityChanged(LayerEvent.createVisibilityChangedEvent(this,
169
                                "visible"));
170 7367 jmvivo
171
172 525 vcaballero
        }
173 435 vcaballero
174 525 vcaballero
        /**
175
         * @see com.iver.cit.gvsig.fmap.layers.FLayer#isVisible()
176
         */
177
        public boolean isVisible() {
178 6532 jmvivo
                return visible && this.available;
179 525 vcaballero
        }
180 435 vcaballero
181 525 vcaballero
        /**
182 1034 vcaballero
         * Devuelve la capa padre de la actual.
183 5923 fjp
         *
184 1034 vcaballero
         * @return FLayers padre.
185 525 vcaballero
         */
186
        public FLayers getParentLayer() {
187
                return parentLayer;
188
        }
189 435 vcaballero
190 525 vcaballero
        /**
191 1034 vcaballero
         * Inserta la capa padre.
192 5923 fjp
         *
193
         * @param root
194
         *            capa padre.
195 525 vcaballero
         */
196
        public void setParentLayer(FLayers root) {
197
                this.parentLayer = root;
198
        }
199 435 vcaballero
200 525 vcaballero
        /**
201 1034 vcaballero
         * Inserta una proyecci?n.
202 5923 fjp
         *
203
         * @param proj
204
         *            Proyecci?n.
205 525 vcaballero
         */
206
        public void setProjection(IProjection proj) {
207 5908 caballero
                projection = proj;
208 5923 fjp
                // Comprobar que la proyecci?n es la misma que la de FMap
209
                // Si no lo es, es una capa que est? reproyectada al vuelo
210 6881 cesar
                if ((proj != null) && (getMapContext() != null))
211
                        if (proj != getMapContext().getProjection()) {
212
                                ICoordTrans ct = proj.getCT(getMapContext().getProjection());
213 5923 fjp
                                setCoordTrans(ct);
214
                                logger.debug("Cambio proyecci?n: FMap con "
215 6881 cesar
                                                + getMapContext().getProjection().getAbrev() + " y capa "
216 5923 fjp
                                                + getName() + " con " + proj.getAbrev());
217
                        }
218 525 vcaballero
        }
219 435 vcaballero
220 525 vcaballero
        /**
221
         * @see org.cresques.geo.Projected#getProjection()
222
         */
223
        public IProjection getProjection() {
224
                return projection;
225
        }
226 435 vcaballero
227 525 vcaballero
        /**
228
         * @see org.cresques.geo.Projected#reProject(org.cresques.cts.ICoordTrans)
229
         */
230
        public void reProject(ICoordTrans arg0) {
231
        }
232 435 vcaballero
233 525 vcaballero
        /**
234 1034 vcaballero
         * Devuelve el nivel de transparencia de la capa.
235 5923 fjp
         *
236 1034 vcaballero
         * @return Entero que representa el nivel de transparencia.
237 525 vcaballero
         */
238
        public int getTransparency() {
239 434 fjp
                return transparency;
240
        }
241 525 vcaballero
242
        /**
243 1034 vcaballero
         * Inserta el nivel de transparencia de la capa.
244 5923 fjp
         *
245
         * @param trans
246
         *            Nivel de transparencia.
247 525 vcaballero
         */
248 434 fjp
        public void setTransparency(int trans) {
249
                transparency = trans;
250 6002 fjp
                setDirty(true);
251 434 fjp
        }
252 435 vcaballero
253 525 vcaballero
        /**
254 1034 vcaballero
         * Devuelve el XMLEntity a partir del objeto.
255 5923 fjp
         *
256 1034 vcaballero
         * @return XMLEntity.
257 1828 fernando
         * @throws XMLException
258 525 vcaballero
         */
259 1828 fernando
        public XMLEntity getXMLEntity() throws XMLException {
260 525 vcaballero
                XMLEntity xml = new XMLEntity();
261 5923 fjp
                xml.putProperty("className", this.getClass().getName());
262 435 vcaballero
263 525 vcaballero
                if (this instanceof FLayers) {
264
                }
265
266
                xml.putProperty("active", active);
267
                xml.putProperty("name", name);
268 5923 fjp
                xml.putProperty("minScale", minScale);
269
                xml.putProperty("maxScale", maxScale);
270 5908 caballero
271 5923 fjp
                // TODO xml.addChild(parentLayer.getXMLEntity());
272 525 vcaballero
                xml.putProperty("visible", visible);
273 1417 fjp
                if (projection != null) {
274
                        xml.putProperty("proj", projection.getAbrev());
275
                }
276 1455 luisw
                xml.putProperty("transparency", transparency);
277 5802 jaume
                xml.putProperty("isInTOC", isInTOC);
278 525 vcaballero
                return xml;
279
        }
280
281 2183 fernando
        /*
282
         * Inserta los valores de los atributos del XMLEntity al objeto.
283 5923 fjp
         *
284 2183 fernando
         * @param xml XMLEntity.
285 5923 fjp
         *
286
         * @throws XMLException @throws DriverException @throws DriverIOException
287
         *
288
         * public void setXMLEntity03(XMLEntity xml) throws XMLException { active =
289
         * xml.getBooleanProperty("active"); name = xml.getStringProperty("name");
290
         * minScale=xml.getDoubleProperty("minScale");
291
         * maxScale=xml.getDoubleProperty("maxScale"); visible =
292
         * xml.getBooleanProperty("visible"); if (xml.contains("proj")) {
293
         * setProjection(ProjectionPool.get(xml.getStringProperty("proj"))); } if
294
         * (xml.contains("transparency")) transparency =
295
         * xml.getIntProperty("transparency"); }
296
         */
297 2183 fernando
298 525 vcaballero
        /**
299 1034 vcaballero
         * Inserta los valores de los atributos del XMLEntity al objeto.
300 5923 fjp
         *
301
         * @param xml
302
         *            XMLEntity.
303
         *
304 1034 vcaballero
         * @throws XMLException
305
         * @throws DriverException
306
         * @throws DriverIOException
307 525 vcaballero
         */
308 5923 fjp
        public void setXMLEntity(XMLEntity xml) throws XMLException {
309 525 vcaballero
                active = xml.getBooleanProperty("active");
310
                name = xml.getStringProperty("name");
311 5923 fjp
                minScale = xml.getDoubleProperty("minScale");
312
                maxScale = xml.getDoubleProperty("maxScale");
313 525 vcaballero
                visible = xml.getBooleanProperty("visible");
314 1417 fjp
                if (xml.contains("proj")) {
315 6164 luisw2
                        setProjection(CRSFactory.getCRS(xml.getStringProperty("proj")));
316 1417 fjp
                }
317 1455 luisw
                if (xml.contains("transparency"))
318
                        transparency = xml.getIntProperty("transparency");
319 5802 jaume
                if (xml.contains("isInTOC"))
320
                        isInTOC = xml.getBooleanProperty("isInTOC");
321 525 vcaballero
        }
322 694 fernando
323
        /**
324 2183 fernando
         * Inserta los valores de los atributos del XMLEntity al objeto.
325 5923 fjp
         *
326
         * @param xml
327
         *            XMLEntity.
328
         *
329 2183 fernando
         * @throws XMLException
330
         * @throws DriverException
331
         * @throws DriverIOException
332
         */
333 5923 fjp
        public void setXMLEntity03(XMLEntity xml) throws XMLException {
334 2183 fernando
                active = xml.getBooleanProperty("active");
335
                name = xml.getStringProperty("name");
336 5923 fjp
                minScale = xml.getDoubleProperty("minScale");
337
                maxScale = xml.getDoubleProperty("maxScale");
338 2183 fernando
                visible = xml.getBooleanProperty("visible");
339
                if (xml.contains("proj")) {
340 6164 luisw2
                        setProjection(CRSFactory.getCRS(xml.getStringProperty("proj")));
341 2183 fernando
                }
342
                if (xml.contains("transparency"))
343
                        transparency = xml.getIntProperty("transparency");
344
        }
345
346
        /**
347 6881 cesar
         * @see com.iver.cit.gvsig.fmap.layers.FLayer#getMapContext()
348 694 fernando
         */
349 6881 cesar
        public MapContext getMapContext() {
350 884 fernando
                if (getParentLayer() != null) {
351 6881 cesar
                        return getParentLayer().getMapContext();
352 884 fernando
                } else {
353
                        return null;
354
                }
355 694 fernando
        }
356
357 884 fernando
        /**
358 1034 vcaballero
         * A?ade a la lista de listener un nuevo LayerListener.
359 5923 fjp
         *
360
         * @param o
361
         *            LayerListener.
362
         *
363 1034 vcaballero
         * @return boolean.
364 884 fernando
         */
365 727 fernando
        public boolean addLayerListener(LayerListener o) {
366 4370 caballero
                if (layerListeners.contains(o))
367
                        return false;
368 727 fernando
                return layerListeners.add(o);
369
        }
370 5908 caballero
        public LayerListener[] getLayerListeners() {
371
                return (LayerListener[])layerListeners.toArray(new LayerListener[0]);
372
        }
373 884 fernando
        /**
374 1034 vcaballero
         * Borra de la lista de listeners el que se pasa como par?metro.
375 5923 fjp
         *
376
         * @param o
377
         *            LayerListener a borrar.
378
         *
379 1034 vcaballero
         * @return True si ha sido correcto el borrado del Listener.
380 884 fernando
         */
381 727 fernando
        public boolean removeLayerListener(LayerListener o) {
382
                return layerListeners.remove(o);
383
        }
384 884 fernando
385
        /**
386 1034 vcaballero
         * Llamada al metodo nameChanged de los Listeners dados de alta.
387 5923 fjp
         *
388
         * @param e
389
         *            LayerEvent.
390 884 fernando
         */
391
        private void callNameChanged(LayerEvent e) {
392 727 fernando
                for (Iterator iter = layerListeners.iterator(); iter.hasNext();) {
393
                        LayerListener listener = (LayerListener) iter.next();
394 884 fernando
395 727 fernando
                        listener.nameChanged(e);
396
                }
397
        }
398 884 fernando
399
        /**
400 1034 vcaballero
         * Llamada al m?todo visibilityChanged de los Listeners.
401 5923 fjp
         *
402
         * @param e
403
         *            LayerEvent.
404 884 fernando
         */
405
        private void callVisibilityChanged(LayerEvent e) {
406 727 fernando
                for (Iterator iter = layerListeners.iterator(); iter.hasNext();) {
407
                        LayerListener listener = (LayerListener) iter.next();
408 884 fernando
409 727 fernando
                        listener.visibilityChanged(e);
410
                }
411
        }
412 884 fernando
413
        /**
414 1034 vcaballero
         * Llamada al m?todo activationChanged de los Listener.
415 5923 fjp
         *
416
         * @param e
417
         *            LayerEvent.
418 884 fernando
         */
419
        private void callActivationChanged(LayerEvent e) {
420 727 fernando
                for (Iterator iter = layerListeners.iterator(); iter.hasNext();) {
421
                        LayerListener listener = (LayerListener) iter.next();
422 884 fernando
423 727 fernando
                        listener.activationChanged(e);
424
                }
425
        }
426 745 fjp
427 884 fernando
        /**
428 1034 vcaballero
         * Devuelve las capas virtuales.
429 5923 fjp
         *
430 1034 vcaballero
         * @return FLayers.
431 884 fernando
         */
432 745 fjp
        public FLayers getVirtualLayers() {
433
                return virtualLayers;
434
        }
435 884 fernando
436
        /**
437 1034 vcaballero
         * Inserta las capas virtuales.
438 5923 fjp
         *
439
         * @param virtualLayers
440
         *            FLayers.
441 884 fernando
         */
442 745 fjp
        public void setVirtualLayers(FLayers virtualLayers) {
443
                this.virtualLayers = virtualLayers;
444
        }
445 884 fernando
446
        /**
447 1034 vcaballero
         * Devuelve la capa de texto.
448 5923 fjp
         *
449 1034 vcaballero
         * @return capa de texto.
450 884 fernando
         */
451 757 fjp
        public FLyrText getLayerText() {
452
                return layerText;
453
        }
454 884 fernando
455
        /**
456 1034 vcaballero
         * Inserta la capa de texto.
457 5923 fjp
         *
458
         * @param layerText
459
         *            Capa de texto.
460 884 fernando
         */
461 757 fjp
        public void setLayerText(FLyrText layerText) {
462
                this.layerText = layerText;
463
        }
464 885 fjp
465
        /**
466 4479 fjp
         * Inserta la Transformaci?n de coordenadas.
467 5923 fjp
         *
468
         * @param ct
469
         *            Transformaci?n de coordenadas.
470 885 fjp
         */
471
        public void setCoordTrans(ICoordTrans ct) {
472
                this.ct = ct;
473
        }
474
475
        /**
476 4479 fjp
         * Devuelve las transformaci?n de coordenadas.
477 5923 fjp
         *
478 4479 fjp
         * @return ct.
479 885 fjp
         */
480
        public ICoordTrans getCoordTrans() {
481
                return ct;
482
        }
483 5908 caballero
484 4376 nacho
        /**
485 5923 fjp
         * M?todo que es llamado por Flayers para notificar a la capa que va a ser
486
         * a?adida. Esta previa notificaci?n es util para las capas que necesitan
487
         * hacer algo antes de ser a?adida. Por ejemplo, el raster necesita volver a
488
         * abrir el fichero que ha podido ser cerrado con anterioridad. Si no se
489
         * redefine este m?todo no se har? nada ya que este es vacio.
490 4376 nacho
         */
491 5923 fjp
        public void wakeUp() {
492
        }
493 5908 caballero
494 5923 fjp
        public double getMinScale() {
495
                return minScale;
496
        }
497 1176 fjp
498 5923 fjp
        /*
499
         * (non-Javadoc)
500
         *
501
         * @see com.iver.cit.gvsig.fmap.layers.FLayer#getMaxScale()
502
         */
503
        public double getMaxScale() {
504
                return maxScale;
505
        }
506 5908 caballero
507 5923 fjp
        public void setMinScale(double minScale) {
508
                this.minScale = minScale;
509
        }
510 5908 caballero
511 5923 fjp
        public void setMaxScale(double maxScale) {
512
                this.maxScale = maxScale;
513
        }
514 5908 caballero
515 5923 fjp
        public boolean isWithinScale(double scale) {
516 5908 caballero
517 5923 fjp
                boolean bVisible = true;
518
                if (getMinScale() != -1) {
519
                        if (scale < getMinScale())
520
                                bVisible = false;
521
                }
522
                if (getMaxScale() != -1) {
523
                        if (scale > getMaxScale())
524
                                bVisible = false;
525
                }
526 5908 caballero
527 5923 fjp
                return bVisible;
528
        }
529 3690 caballero
530 5923 fjp
        public Strategy getStrategy() {
531
                return privateStrategy;
532
        }
533
534
        public void setStrategy(Strategy s) {
535
                privateStrategy = s;
536
        }
537
538 5152 fjp
        public void setEditing(boolean b) throws EditionException {
539 5923 fjp
                isediting = b;
540 6002 fjp
                setDirty(true);
541
                setCachingDrawnLayers(b);
542 3690 caballero
        }
543 5923 fjp
544 4147 fjp
        protected void callEditionChanged(LayerEvent e) {
545 4144 fjp
                for (Iterator iter = layerListeners.iterator(); iter.hasNext();) {
546
                        LayerListener listener = (LayerListener) iter.next();
547
548
                        listener.editionChanged(e);
549
                }
550
        }
551
552 5923 fjp
        public boolean isEditing() {
553 3690 caballero
                return isediting;
554
        }
555 5908 caballero
556 5923 fjp
        public ImageIcon getTocImageIcon() {
557
                return null;
558
        }
559 5908 caballero
560 5923 fjp
        public boolean isInTOC() {
561
                return isInTOC;
562
        }
563
564
        /* (non-Javadoc)
565
         * @see com.iver.cit.gvsig.fmap.layers.FLayer#isCachingDrawnLayers()
566
         */
567
        public boolean isCachingDrawnLayers() {
568
                return bCacheDrawnLayers;
569
        }
570
571
        /* (non-Javadoc)
572
         * @see com.iver.cit.gvsig.fmap.layers.FLayer#setCachingDrawnLayers(boolean)
573
         */
574
        public void setCachingDrawnLayers(boolean bCacheDrawnLayers) {
575
                this.bCacheDrawnLayers = bCacheDrawnLayers;
576 5997 fjp
                if (bCacheDrawnLayers == false)
577
                        this.cacheImageDrawnLayers = null;
578 5923 fjp
        }
579
580
        public BufferedImage getCacheImageDrawnLayers() {
581
                return cacheImageDrawnLayers;
582
        }
583
584
        public void setCacheImageDrawnLayers(BufferedImage cacheImageDrawnLayers) {
585
                this.cacheImageDrawnLayers = cacheImageDrawnLayers;
586
        }
587
588
        public boolean isDirty() {
589
                return bDirty;
590
        }
591
592
        public void setDirty(boolean dirty) {
593
                bDirty = dirty;
594
        }
595 6400 jmvivo
596 6543 jmvivo
        public boolean isAvailable() {
597 6532 jmvivo
                return this.available;
598 6400 jmvivo
        }
599
600 6532 jmvivo
        public void setAvailable(boolean available) {
601
                this.available = available;
602 6400 jmvivo
        }
603 6532 jmvivo
604
        public void reload() throws DriverIOException {
605
                this.setAvailable(true);
606
        }
607
608
        public boolean visibleRequired() {
609
                return this.visible;
610
        }
611
612
        public String getInfoString() {
613
                return null;
614
        }
615 5923 fjp
616 6856 fjp
        public boolean isWritable() {
617
                // TODO Auto-generated method stub
618
                return false;
619
        }
620 5923 fjp
621 6856 fjp
622 214 fernando
}