Statistics
| Revision:

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

History | View | Annotate | Download (19.3 KB)

1
/* 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
package com.iver.cit.gvsig.fmap.layers;
42

    
43
import java.awt.Image;
44
import java.awt.image.BufferedImage;
45
import java.util.ArrayList;
46
import java.util.Hashtable;
47
import java.util.Iterator;
48
import java.util.List;
49
import java.util.Map;
50
import java.util.Set;
51

    
52
import javax.swing.ImageIcon;
53

    
54
import org.apache.log4j.Logger;
55
import org.cresques.cts.ICoordTrans;
56
import org.cresques.cts.IProjection;
57

    
58
import com.hardcode.driverManager.Driver;
59
import com.iver.cit.gvsig.fmap.DriverException;
60
import com.iver.cit.gvsig.fmap.MapContext;
61
import com.iver.cit.gvsig.fmap.crs.CRSFactory;
62
import com.iver.cit.gvsig.fmap.drivers.DriverIOException;
63
import com.iver.cit.gvsig.fmap.edition.EditionException;
64
import com.iver.cit.gvsig.fmap.layers.layerOperations.ComposedLayer;
65
import com.iver.cit.gvsig.fmap.operations.strategies.Strategy;
66
import com.iver.utiles.IPersistance;
67
import com.iver.utiles.XMLEntity;
68

    
69
/**
70
 * Implementaci?n de las caracter?sticas de alto nivel de las capas:
71
 * visibilidad, activaci?n, nombre, ...
72
 */
73
public abstract class FLyrDefault implements FLayer, Driver {
74
        // private PropertyChangeSupport lnkPropertyChangeSupport;
75
        private static Logger logger = Logger.getLogger(FLyrDefault.class);
76

    
77
        /** Path de la capa en el arbol de capas */
78
        private FLayers parentLayer = null;
79

    
80
        private FLayers virtualLayers = null;
81

    
82
        private FLyrText layerText = null;
83

    
84
        private String name;
85

    
86
        private IProjection projection;
87

    
88
//        private boolean visible = true;
89
//
90
//        private boolean active;
91

    
92
        private int transparency = 0;
93

    
94
        private ICoordTrans ct;
95

    
96
        private double minScale = -1; // -1 indica que no se usa
97

    
98
        private double maxScale = -1;
99

    
100
//        private boolean isInTOC = true;
101

    
102
        protected ArrayList layerListeners = new ArrayList();
103

    
104
        private Strategy privateStrategy = null;
105

    
106
//        private boolean isediting;
107

    
108
        private Hashtable properties = new Hashtable();
109

    
110
//        private boolean bCacheDrawnLayers;
111

    
112
        private BufferedImage cacheImageDrawnLayers = null;
113

    
114
//        private boolean bDirty;
115

    
116
//        private boolean available = true;
117

    
118
        //by default, all is active, visible and avalaible
119
        private FLayerStatus status = new FLayerStatus();
120

    
121
        private Image tocStatusImage;
122

    
123
        public Object getProperty(Object key) {
124
                return properties.get(key);
125
        }
126

    
127
        public void setProperty(Object key, Object val) {
128
                properties.put(key, val);
129
        }
130

    
131
        public Map getExtendedProperties() {
132
                return properties;
133
        }
134
        /**
135
         * @see com.iver.cit.gvsig.fmap.layers.FLayer#setActive(boolean)
136
         */
137
        public void setActive(boolean selected) {
138
                //active = selected;
139
                status.active = selected;
140
                callActivationChanged(LayerEvent.createActivationChangedEvent(this,
141
                                "active"));
142
        }
143

    
144
        /**
145
         * @see com.iver.cit.gvsig.fmap.layers.FLayer#isActive()
146
         */
147
        public boolean isActive() {
148
//                return active;
149
                return status.active;
150
        }
151

    
152
        /**
153
         * @see com.iver.cit.gvsig.fmap.layers.FLayer#setName(java.lang.String)
154
         */
155
        public void setName(String name) {
156
                this.name = name;
157
                callNameChanged(LayerEvent.createNameChangedEvent(this, "name"));
158
        }
159

    
160
        /**
161
         * @see com.iver.cit.gvsig.fmap.layers.FLayer#getName()
162
         */
163
        public String getName() {
164
                return name;
165
        }
166

    
167
        /*
168
         * @see com.iver.cit.gvsig.fmap.layers.FLayer#load()
169
         */
170
        public void load() throws DriverIOException {
171
        }
172

    
173
        /**
174
         * @see com.iver.cit.gvsig.fmap.layers.FLayer#setVisible(boolean)
175
         */
176
        public void setVisible(boolean visibility) {
177
//                visible = visibility;
178
                boolean changed = status.visible != visibility;
179
                status.visible = visibility;
180
                setDirty(true);
181
                if (changed){
182
                        if (this.getMapContext() != null){
183
                                this.getMapContext().clearAllCachingImageDrawnLayers();
184
                        }
185
                }
186
                callVisibilityChanged(LayerEvent.createVisibilityChangedEvent(this,
187
                                "visible"));
188
        }
189

    
190
        /**
191
         * @see com.iver.cit.gvsig.fmap.layers.FLayer#isVisible()
192
         */
193
        public boolean isVisible() {
194
//                return visible && this.available;
195
                return status.visible && status.available;
196
        }
197

    
198
        /**
199
         * Devuelve la capa padre de la actual.
200
         *
201
         * @return FLayers padre.
202
         */
203
        public FLayers getParentLayer() {
204
                return parentLayer;
205
        }
206

    
207
        /**
208
         * Inserta la capa padre.
209
         *
210
         * @param root
211
         *            capa padre.
212
         */
213
        public void setParentLayer(FLayers root) {
214
                this.parentLayer = root;
215
        }
216

    
217
        /**
218
         * Inserta una proyecci?n.
219
         *
220
         * @param proj
221
         *            Proyecci?n.
222
         */
223
        public void setProjection(IProjection proj) {
224
                projection = proj;
225
                // Comprobar que la proyecci?n es la misma que la de FMap
226
                // Si no lo es, es una capa que est? reproyectada al vuelo
227
                if ((proj != null) && (getMapContext() != null))
228
                        if (proj != getMapContext().getProjection()) {
229
                                ICoordTrans ct = proj.getCT(getMapContext().getProjection());
230
                                setCoordTrans(ct);
231
                                logger.debug("Cambio proyecci?n: FMap con "
232
                                                + getMapContext().getProjection().getAbrev() + " y capa "
233
                                                + getName() + " con " + proj.getAbrev());
234
                        }
235
        }
236

    
237
        /**
238
         * @see org.cresques.geo.Projected#getProjection()
239
         */
240
        public IProjection getProjection() {
241
                return projection;
242
        }
243

    
244
        /**
245
         * @see org.cresques.geo.Projected#reProject(org.cresques.cts.ICoordTrans)
246
         */
247
        public void reProject(ICoordTrans arg0) {
248
        }
249

    
250
        /**
251
         * Devuelve el nivel de transparencia de la capa.
252
         *
253
         * @return Entero que representa el nivel de transparencia.
254
         */
255
        public int getTransparency() {
256
                return transparency;
257
        }
258

    
259
        /**
260
         * Inserta el nivel de transparencia de la capa.
261
         *
262
         * @param trans
263
         *            Nivel de transparencia.
264
         */
265
        public void setTransparency(int trans) {
266
                transparency = trans;
267
                setDirty(true);
268
        }
269

    
270
        /**
271
         * Devuelve el XMLEntity a partir del objeto.
272
         *
273
         * @return XMLEntity.
274
         * @throws XMLException
275
         */
276
        public XMLEntity getXMLEntity() throws XMLException {
277
                XMLEntity xml = new XMLEntity();
278
                xml.putProperty("className", this.getClass().getName());
279

    
280
                if (this instanceof FLayers) {
281
                }
282

    
283
//                xml.putProperty("active", active);
284
                xml.putProperty("active", status.active);
285
                xml.putProperty("name", name);
286
                xml.putProperty("minScale", minScale);
287
                xml.putProperty("maxScale", maxScale);
288

    
289
                // TODO xml.addChild(parentLayer.getXMLEntity());
290
//                xml.putProperty("visible", visible);
291
                xml.putProperty("visible", status.visible);
292
                if (projection != null) {
293
                        xml.putProperty("proj", projection.getFullCode());
294
                }
295
                xml.putProperty("transparency", transparency);
296
//                xml.putProperty("isInTOC", isInTOC);
297
                xml.putProperty("isInTOC", status.inTOC);
298

    
299
                // persist Properties hashTable
300

    
301
                Set keyset = properties.keySet();
302
                
303

    
304
                int numProperties = 0;
305
                Iterator keyitr = keyset.iterator();
306
            while (keyitr.hasNext()) {
307
              String propName = (String)keyitr.next();
308
              Object obj = properties.get(propName);
309
              if (obj instanceof IPersistance)
310
              {
311
                      IPersistance persistObj = (IPersistance)obj;
312
                  XMLEntity xmlPropObj = persistObj.getXMLEntity();
313
              // make sure the node contains the class name
314
                  if (!xmlPropObj.contains("className")) {
315
                          try {
316
                                  String propClassName = persistObj.getClassName();
317
                                  System.out.println("PROP CLASS NAME "+propClassName);
318
                                  xmlPropObj.putProperty("className", propClassName);
319
                          } catch (Exception e) {
320
                                  e.printStackTrace();
321
                          }
322
                  }
323
                  xmlPropObj.putProperty("layerPropertyName", propName);
324
                  xml.addChild(xmlPropObj);
325
                  numProperties++;
326
              } else if (obj instanceof String) {
327
                  XMLEntity xmlPropObj = new XMLEntity();
328
                  xmlPropObj.putProperty("className", String.class.getName());
329
                  xmlPropObj.putProperty("value",(String)obj);
330
                  xmlPropObj.putProperty("layerPropertyName", propName);
331
                  xml.addChild(xmlPropObj);
332
                  numProperties++;
333
              }
334
            }
335
            xml.putProperty("numProperties", numProperties);
336

    
337
                return xml;
338
        }
339

    
340
        /*
341
         * Inserta los valores de los atributos del XMLEntity al objeto.
342
         *
343
         * @param xml XMLEntity.
344
         *
345
         * @throws XMLException @throws DriverException @throws DriverIOException
346
         *
347
         * public void setXMLEntity03(XMLEntity xml) throws XMLException { active =
348
         * xml.getBooleanProperty("active"); name = xml.getStringProperty("name");
349
         * minScale=xml.getDoubleProperty("minScale");
350
         * maxScale=xml.getDoubleProperty("maxScale"); visible =
351
         * xml.getBooleanProperty("visible"); if (xml.contains("proj")) {
352
         * setProjection(ProjectionPool.get(xml.getStringProperty("proj"))); } if
353
         * (xml.contains("transparency")) transparency =
354
         * xml.getIntProperty("transparency"); }
355
         */
356

    
357
        /**
358
         * Inserta los valores de los atributos del XMLEntity al objeto.
359
         *
360
         * @param xml
361
         *            XMLEntity.
362
         *
363
         * @throws XMLException
364
         * @throws DriverException
365
         * @throws DriverIOException
366
         */
367
        public void setXMLEntity(XMLEntity xml) throws XMLException {
368
//                active = xml.getBooleanProperty("active");
369
                status.active = xml.getBooleanProperty("active");
370
                name = xml.getStringProperty("name");
371
                minScale = xml.getDoubleProperty("minScale");
372
                maxScale = xml.getDoubleProperty("maxScale");
373
//                visible = xml.getBooleanProperty("visible");
374
                status.visible = xml.getBooleanProperty("visible");
375
                if (xml.contains("proj")) {
376
                        setProjection(CRSFactory.getCRS(xml.getStringProperty("proj")));
377
                }
378
                if (xml.contains("transparency"))
379
                        transparency = xml.getIntProperty("transparency");
380
                if (xml.contains("isInTOC"))
381
//                        isInTOC = xml.getBooleanProperty("isInTOC");
382
                        status.inTOC = xml.getBooleanProperty("isInTOC");
383

    
384
        // recreate Properties hashTable
385

    
386
                if (xml.contains("numProperties")) {
387
                        int numProps = xml.getIntProperty("numProperties");
388
                        Object obj= null;
389
                        IPersistance objPersist;
390
            for (int iProp=0; iProp<numProps; iProp++) {
391
                    XMLEntity xmlProp = xml.getChild(0);
392
                    try {
393
                            String className = xmlProp.getStringProperty("className");
394
                            if (className.equals(String.class.getName())) {
395
                                    obj = xmlProp.getStringProperty("value");
396
                            } else {
397
                                Class classProp = Class.forName(className);
398
                                obj = classProp.newInstance();
399
                                objPersist = (IPersistance)obj;
400
                                objPersist.setXMLEntity(xmlProp);
401
                        }
402
                        String propName = xmlProp.getStringProperty("layerPropertyName");
403
                        properties.put(propName, obj);
404
                        } catch (Exception e) {
405
                                continue;
406
                        }
407
                        // remove Properties children to avoid breaking layers' XML reading logic
408
                        xml.removeChild(0);
409
            }
410
                }
411
        }
412

    
413
        /**
414
         * Inserta los valores de los atributos del XMLEntity al objeto.
415
         *
416
         * @param xml
417
         *            XMLEntity.
418
         *
419
         * @throws XMLException
420
         * @throws DriverException
421
         * @throws DriverIOException
422
         */
423
        public void setXMLEntity03(XMLEntity xml) throws XMLException {
424
//                active = xml.getBooleanProperty("active");
425
                status.active = xml.getBooleanProperty("active");
426
                name = xml.getStringProperty("name");
427
                minScale = xml.getDoubleProperty("minScale");
428
                maxScale = xml.getDoubleProperty("maxScale");
429
//                visible = xml.getBooleanProperty("visible");
430
                status.visible = xml.getBooleanProperty("visible");
431
                if (xml.contains("proj")) {
432
                        setProjection(CRSFactory.getCRS(xml.getStringProperty("proj")));
433
                }
434
                if (xml.contains("transparency"))
435
                        transparency = xml.getIntProperty("transparency");
436
        }
437

    
438
        /**
439
         * @see com.iver.cit.gvsig.fmap.layers.FLayer#getMapContext()
440
         */
441
        public MapContext getMapContext() {
442
                if (getParentLayer() != null) {
443
                        return getParentLayer().getMapContext();
444
                } else {
445
                        return null;
446
                }
447
        }
448

    
449
        /**
450
         * A?ade a la lista de listener un nuevo LayerListener.
451
         *
452
         * @param o
453
         *            LayerListener.
454
         *
455
         * @return boolean.
456
         */
457
        public boolean addLayerListener(LayerListener o) {
458
                if (layerListeners.contains(o))
459
                        return false;
460
                return layerListeners.add(o);
461
        }
462
        public LayerListener[] getLayerListeners() {
463
                return (LayerListener[])layerListeners.toArray(new LayerListener[0]);
464
        }
465
        /**
466
         * Borra de la lista de listeners el que se pasa como par?metro.
467
         *
468
         * @param o
469
         *            LayerListener a borrar.
470
         *
471
         * @return True si ha sido correcto el borrado del Listener.
472
         */
473
        public boolean removeLayerListener(LayerListener o) {
474
                return layerListeners.remove(o);
475
        }
476

    
477
        /**
478
         * Llamada al metodo nameChanged de los Listeners dados de alta.
479
         *
480
         * @param e
481
         *            LayerEvent.
482
         */
483
        private void callNameChanged(LayerEvent e) {
484
                for (Iterator iter = layerListeners.iterator(); iter.hasNext();) {
485
                        LayerListener listener = (LayerListener) iter.next();
486

    
487
                        listener.nameChanged(e);
488
                }
489
        }
490

    
491
        /**
492
         * Llamada al m?todo visibilityChanged de los Listeners.
493
         *
494
         * @param e
495
         *            LayerEvent.
496
         */
497
        private void callVisibilityChanged(LayerEvent e) {
498
                for (Iterator iter = layerListeners.iterator(); iter.hasNext();) {
499
                        LayerListener listener = (LayerListener) iter.next();
500

    
501
                        listener.visibilityChanged(e);
502
                }
503
        }
504

    
505
        /**
506
         * Llamada al m?todo activationChanged de los Listener.
507
         *
508
         * @param e
509
         *            LayerEvent.
510
         */
511
        private void callActivationChanged(LayerEvent e) {
512
                for (Iterator iter = layerListeners.iterator(); iter.hasNext();) {
513
                        LayerListener listener = (LayerListener) iter.next();
514

    
515
                        listener.activationChanged(e);
516
                }
517
        }
518

    
519
        /**
520
         * Devuelve las capas virtuales.
521
         *
522
         * @return FLayers.
523
         */
524
        public FLayers getVirtualLayers() {
525
                return virtualLayers;
526
        }
527

    
528
        /**
529
         * Inserta las capas virtuales.
530
         *
531
         * @param virtualLayers
532
         *            FLayers.
533
         */
534
        public void setVirtualLayers(FLayers virtualLayers) {
535
                this.virtualLayers = virtualLayers;
536
        }
537

    
538
        /**
539
         * Devuelve la capa de texto.
540
         *
541
         * @return capa de texto.
542
         */
543
        public FLyrText getLayerText() {
544
                return layerText;
545
        }
546

    
547
        /**
548
         * Inserta la capa de texto.
549
         *
550
         * @param layerText
551
         *            Capa de texto.
552
         */
553
        public void setLayerText(FLyrText layerText) {
554
                this.layerText = layerText;
555
        }
556

    
557
        /**
558
         * Inserta la Transformaci?n de coordenadas.
559
         *
560
         * @param ct
561
         *            Transformaci?n de coordenadas.
562
         */
563
        public void setCoordTrans(ICoordTrans ct) {
564
                this.ct = ct;
565
        }
566

    
567
        /**
568
         * Devuelve las transformaci?n de coordenadas.
569
         *
570
         * @return ct.
571
         */
572
        public ICoordTrans getCoordTrans() {
573
                return ct;
574
        }
575

    
576
        /**
577
         * M?todo que es llamado por Flayers para notificar a la capa que va a ser
578
         * a?adida. Esta previa notificaci?n es util para las capas que necesitan
579
         * hacer algo antes de ser a?adida. Por ejemplo, el raster necesita volver a
580
         * abrir el fichero que ha podido ser cerrado con anterioridad. Si no se
581
         * redefine este m?todo no se har? nada ya que este es vacio.
582
         */
583
        public void wakeUp() {
584
        }
585

    
586
        public double getMinScale() {
587
                return minScale;
588
        }
589

    
590
        /*
591
         * (non-Javadoc)
592
         *
593
         * @see com.iver.cit.gvsig.fmap.layers.FLayer#getMaxScale()
594
         */
595
        public double getMaxScale() {
596
                return maxScale;
597
        }
598

    
599
        public void setMinScale(double minScale) {
600
                this.minScale = minScale;
601
        }
602

    
603
        public void setMaxScale(double maxScale) {
604
                this.maxScale = maxScale;
605
        }
606

    
607
        public boolean isWithinScale(double scale) {
608

    
609
                boolean bVisible = true;
610
                if (getMinScale() != -1) {
611
                        if (scale < getMinScale())
612
                                bVisible = false;
613
                }
614
                if (getMaxScale() != -1) {
615
                        if (scale > getMaxScale())
616
                                bVisible = false;
617
                }
618

    
619
                return bVisible;
620
        }
621

    
622
        public Strategy getStrategy() {
623
                return privateStrategy;
624
        }
625

    
626
        public void setStrategy(Strategy s) {
627
                privateStrategy = s;
628
        }
629

    
630
        public void setEditing(boolean b) throws EditionException {
631
//                isediting = b;
632
                status.editing = b;
633
                setDirty(true);
634
                setCachingDrawnLayers(b);
635
        }
636

    
637
        protected void callEditionChanged(LayerEvent e) {
638
                for (Iterator iter = layerListeners.iterator(); iter.hasNext();) {
639
                        LayerListener listener = (LayerListener) iter.next();
640

    
641
                        listener.editionChanged(e);
642
                }
643
        }
644

    
645
        public boolean isEditing() {
646
//                return isediting;
647
                return status.editing;
648
        }
649

    
650
        public ImageIcon getTocImageIcon() {
651
                return null;
652
        }
653

    
654
        public boolean isInTOC() {
655
//                return isInTOC;
656
                return status.inTOC;
657
        }
658

    
659
        /* (non-Javadoc)
660
         * @see com.iver.cit.gvsig.fmap.layers.FLayer#isCachingDrawnLayers()
661
         */
662
        public boolean isCachingDrawnLayers() {
663
//                return bCacheDrawnLayers;
664
                return status.cacheDrawnLayers;
665
        }
666

    
667
        /* (non-Javadoc)
668
         * @see com.iver.cit.gvsig.fmap.layers.FLayer#setCachingDrawnLayers(boolean)
669
         */
670
        public void setCachingDrawnLayers(boolean bCacheDrawnLayers) {
671
//                this.bCacheDrawnLayers = bCacheDrawnLayers;
672
                status.cacheDrawnLayers = bCacheDrawnLayers;
673
                if (status.cacheDrawnLayers == false)
674
                        this.cacheImageDrawnLayers = null;
675
        }
676

    
677
        public BufferedImage getCacheImageDrawnLayers() {
678
                return cacheImageDrawnLayers;
679
        }
680

    
681
        public void setCacheImageDrawnLayers(BufferedImage cacheImageDrawnLayers) {
682
                this.cacheImageDrawnLayers = cacheImageDrawnLayers;
683
        }
684

    
685
        public boolean isDirty() {
686
                return status.dirty;
687
        }
688

    
689
        public void setDirty(boolean dirty) {
690
                status.dirty = dirty;
691
        }
692

    
693
        public boolean isAvailable() {
694
                return status.available;
695
        }
696

    
697
        public void setAvailable(boolean available) {
698
                status.available = available;
699
        }
700

    
701
        public void reload() throws DriverIOException {
702
                this.setAvailable(true);
703
        }
704

    
705
        /**
706
         * Returns the status of the layer
707
         */
708
        public FLayerStatus getFLayerStatus(){
709
                return status;
710
        }
711
        /**
712
         * Sets the status of the layer
713
         * @param status
714
         */
715
        public void setFLayerStatus(FLayerStatus status){
716
                this.status = status;
717
        }
718

    
719
        /*
720
         * This stuff is to save error's info that causes
721
         * unavailable status.
722
         * */
723

    
724
        public boolean isOk(){
725
                return status.isOk();
726
        }
727

    
728
        public int getNumErrors(){
729
                return status.getNumErrors();
730
        }
731

    
732
        public DriverException getError(int i){
733
                return status.getError(i);
734
        }
735

    
736
        public List getErrors(){
737
                return status.getErrors();
738
        }
739

    
740
        public void addError(DriverException error){
741
                status.addLayerError(error);
742
        }
743

    
744
        public boolean visibleRequired() {
745
                return status.visible;
746
        }
747

    
748
        public String getInfoString() {
749
                return null;
750
        }
751

    
752
        public boolean isWritable() {
753
                return status.writable;
754
        }
755
        
756
        /* (non-Javadoc)
757
         * @see com.iver.cit.gvsig.fmap.layers.FLayer#cloneLayer()
758
         */
759
        public FLayer cloneLayer() throws Exception {
760
                return this;
761
        }
762

    
763
        /**
764
         * This method is called when the layer is going to be removed from the view.
765
         * Layers that find it useful can overwrite it.
766
         *
767
         */
768
        public void removingThisLayer() {
769

    
770
        }
771

    
772
        public Image getTocStatusImage() {
773
                return tocStatusImage;
774
        }
775

    
776
        public void setTocStatusImage(Image tocStatusImage) {
777
                this.tocStatusImage = tocStatusImage;
778
                logger.debug("setTocStatusImage " + tocStatusImage + " sobre capa " + this.getName());
779
        }
780

    
781

    
782
        /* By default this operation is not suported
783
         * 
784
         * @see com.iver.cit.gvsig.fmap.layers.FLayer#newComposedLayer()
785
         */
786
        public ComposedLayer newComposedLayer() {                
787
                return null;
788
        }
789

    
790

    
791
}