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 | 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 | 10401 | fjp | import java.awt.Image; |
44 | 5923 | fjp | import java.awt.image.BufferedImage; |
45 | 2531 | caballero | import java.util.ArrayList; |
46 | 5200 | ldiaz | import java.util.Hashtable; |
47 | 2531 | caballero | import java.util.Iterator; |
48 | 8765 | jjdelcerro | import java.util.List; |
49 | 9360 | fdiaz | import java.util.Map; |
50 | 8765 | jjdelcerro | import java.util.Set; |
51 | 214 | fernando | |
52 | 5760 | jmvivo | import javax.swing.ImageIcon; |
53 | |||
54 | 2659 | fjp | import org.apache.log4j.Logger; |
55 | 354 | fernando | import org.cresques.cts.ICoordTrans; |
56 | 214 | fernando | import org.cresques.cts.IProjection; |
57 | |||
58 | 8765 | jjdelcerro | import com.hardcode.driverManager.Driver; |
59 | 2531 | caballero | import com.iver.cit.gvsig.fmap.DriverException; |
60 | 6878 | cesar | import com.iver.cit.gvsig.fmap.MapContext; |
61 | 6164 | luisw2 | import com.iver.cit.gvsig.fmap.crs.CRSFactory; |
62 | 2531 | caballero | import com.iver.cit.gvsig.fmap.drivers.DriverIOException; |
63 | 4147 | fjp | import com.iver.cit.gvsig.fmap.edition.EditionException; |
64 | 11030 | jmvivo | import com.iver.cit.gvsig.fmap.layers.layerOperations.ComposedLayer; |
65 | 3329 | fjp | import com.iver.cit.gvsig.fmap.operations.strategies.Strategy; |
66 | 10401 | fjp | import com.iver.utiles.IPersistance; |
67 | 2531 | caballero | import com.iver.utiles.XMLEntity; |
68 | 214 | fernando | |
69 | /**
|
||
70 | 435 | vcaballero | * Implementaci?n de las caracter?sticas de alto nivel de las capas:
|
71 | * visibilidad, activaci?n, nombre, ...
|
||
72 | 214 | fernando | */
|
73 | 10401 | fjp | public abstract class FLyrDefault implements FLayer, Driver { |
74 | 5923 | fjp | // private PropertyChangeSupport lnkPropertyChangeSupport;
|
75 | private static Logger logger = Logger.getLogger(FLyrDefault.class); |
||
76 | |||
77 | 525 | vcaballero | /** Path de la capa en el arbol de capas */
|
78 | private FLayers parentLayer = null; |
||
79 | 5923 | fjp | |
80 | 745 | fjp | private FLayers virtualLayers = null; |
81 | 5923 | fjp | |
82 | 757 | fjp | private FLyrText layerText = null; |
83 | 5923 | fjp | |
84 | 274 | fjp | private String name; |
85 | 5923 | fjp | |
86 | 354 | fernando | private IProjection projection;
|
87 | 5923 | fjp | |
88 | 8765 | jjdelcerro | // private boolean visible = true;
|
89 | //
|
||
90 | // private boolean active;
|
||
91 | 5923 | fjp | |
92 | 434 | fjp | private int transparency = 0; |
93 | 5923 | fjp | |
94 | 885 | fjp | private ICoordTrans ct;
|
95 | 5923 | fjp | |
96 | 1176 | fjp | private double minScale = -1; // -1 indica que no se usa |
97 | 5923 | fjp | |
98 | 1176 | fjp | private double maxScale = -1; |
99 | 5923 | fjp | |
100 | 8765 | jjdelcerro | // private boolean isInTOC = true;
|
101 | 5923 | fjp | |
102 | 3256 | nacho | protected ArrayList layerListeners = new ArrayList(); |
103 | 884 | fernando | |
104 | 5923 | fjp | private Strategy privateStrategy = null; |
105 | |||
106 | 8765 | jjdelcerro | // private boolean isediting;
|
107 | 5908 | caballero | |
108 | 5200 | ldiaz | private Hashtable properties = new Hashtable(); |
109 | 5908 | caballero | |
110 | 8765 | jjdelcerro | // private boolean bCacheDrawnLayers;
|
111 | |||
112 | 5923 | fjp | private BufferedImage cacheImageDrawnLayers = null; |
113 | |||
114 | 8765 | jjdelcerro | // 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 | 10401 | fjp | private Image tocStatusImage; |
122 | |||
123 | 5923 | fjp | public Object getProperty(Object key) { |
124 | 5200 | ldiaz | return properties.get(key);
|
125 | } |
||
126 | 5923 | fjp | |
127 | public void setProperty(Object key, Object val) { |
||
128 | 5200 | ldiaz | properties.put(key, val); |
129 | } |
||
130 | 5908 | caballero | |
131 | 9360 | fdiaz | public Map getExtendedProperties() { |
132 | return properties;
|
||
133 | } |
||
134 | 525 | vcaballero | /**
|
135 | * @see com.iver.cit.gvsig.fmap.layers.FLayer#setActive(boolean)
|
||
136 | */
|
||
137 | public void setActive(boolean selected) { |
||
138 | 8765 | jjdelcerro | //active = selected;
|
139 | status.active = selected; |
||
140 | 5923 | fjp | callActivationChanged(LayerEvent.createActivationChangedEvent(this,
|
141 | "active"));
|
||
142 | 525 | vcaballero | } |
143 | 214 | fernando | |
144 | 525 | vcaballero | /**
|
145 | * @see com.iver.cit.gvsig.fmap.layers.FLayer#isActive()
|
||
146 | */
|
||
147 | public boolean isActive() { |
||
148 | 8765 | jjdelcerro | // return active;
|
149 | return status.active;
|
||
150 | 525 | vcaballero | } |
151 | 214 | fernando | |
152 | 525 | vcaballero | /**
|
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 | 1082 | fernando | callNameChanged(LayerEvent.createNameChangedEvent(this, "name")); |
158 | 525 | vcaballero | } |
159 | 214 | fernando | |
160 | 525 | vcaballero | /**
|
161 | * @see com.iver.cit.gvsig.fmap.layers.FLayer#getName()
|
||
162 | */
|
||
163 | public String getName() { |
||
164 | return name;
|
||
165 | } |
||
166 | 214 | fernando | |
167 | 567 | luisw | /*
|
168 | 525 | vcaballero | * @see com.iver.cit.gvsig.fmap.layers.FLayer#load()
|
169 | */
|
||
170 | 1034 | vcaballero | public void load() throws DriverIOException { |
171 | 525 | vcaballero | } |
172 | 214 | fernando | |
173 | 525 | vcaballero | /**
|
174 | * @see com.iver.cit.gvsig.fmap.layers.FLayer#setVisible(boolean)
|
||
175 | */
|
||
176 | public void setVisible(boolean visibility) { |
||
177 | 8765 | jjdelcerro | // visible = visibility;
|
178 | boolean changed = status.visible != visibility;
|
||
179 | status.visible = visibility; |
||
180 | 6002 | fjp | setDirty(true);
|
181 | 7367 | jmvivo | if (changed){
|
182 | if (this.getMapContext() != null){ |
||
183 | this.getMapContext().clearAllCachingImageDrawnLayers();
|
||
184 | } |
||
185 | } |
||
186 | 5923 | fjp | callVisibilityChanged(LayerEvent.createVisibilityChangedEvent(this,
|
187 | "visible"));
|
||
188 | 525 | vcaballero | } |
189 | 435 | vcaballero | |
190 | 525 | vcaballero | /**
|
191 | * @see com.iver.cit.gvsig.fmap.layers.FLayer#isVisible()
|
||
192 | */
|
||
193 | public boolean isVisible() { |
||
194 | 8765 | jjdelcerro | // return visible && this.available;
|
195 | return status.visible && status.available;
|
||
196 | 525 | vcaballero | } |
197 | 435 | vcaballero | |
198 | 525 | vcaballero | /**
|
199 | 1034 | vcaballero | * Devuelve la capa padre de la actual.
|
200 | 8765 | jjdelcerro | *
|
201 | 1034 | vcaballero | * @return FLayers padre.
|
202 | 525 | vcaballero | */
|
203 | public FLayers getParentLayer() {
|
||
204 | return parentLayer;
|
||
205 | } |
||
206 | 435 | vcaballero | |
207 | 525 | vcaballero | /**
|
208 | 1034 | vcaballero | * Inserta la capa padre.
|
209 | 8765 | jjdelcerro | *
|
210 | 5923 | fjp | * @param root
|
211 | * capa padre.
|
||
212 | 525 | vcaballero | */
|
213 | public void setParentLayer(FLayers root) { |
||
214 | this.parentLayer = root;
|
||
215 | } |
||
216 | 435 | vcaballero | |
217 | 525 | vcaballero | /**
|
218 | 1034 | vcaballero | * Inserta una proyecci?n.
|
219 | 8765 | jjdelcerro | *
|
220 | 5923 | fjp | * @param proj
|
221 | * Proyecci?n.
|
||
222 | 525 | vcaballero | */
|
223 | public void setProjection(IProjection proj) { |
||
224 | 5908 | caballero | projection = proj; |
225 | 5923 | fjp | // 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 | 6881 | cesar | if ((proj != null) && (getMapContext() != null)) |
228 | if (proj != getMapContext().getProjection()) {
|
||
229 | ICoordTrans ct = proj.getCT(getMapContext().getProjection()); |
||
230 | 5923 | fjp | setCoordTrans(ct); |
231 | logger.debug("Cambio proyecci?n: FMap con "
|
||
232 | 6881 | cesar | + getMapContext().getProjection().getAbrev() + " y capa "
|
233 | 5923 | fjp | + getName() + " con " + proj.getAbrev());
|
234 | } |
||
235 | 525 | vcaballero | } |
236 | 435 | vcaballero | |
237 | 525 | vcaballero | /**
|
238 | * @see org.cresques.geo.Projected#getProjection()
|
||
239 | */
|
||
240 | public IProjection getProjection() {
|
||
241 | return projection;
|
||
242 | } |
||
243 | 435 | vcaballero | |
244 | 525 | vcaballero | /**
|
245 | * @see org.cresques.geo.Projected#reProject(org.cresques.cts.ICoordTrans)
|
||
246 | */
|
||
247 | public void reProject(ICoordTrans arg0) { |
||
248 | } |
||
249 | 435 | vcaballero | |
250 | 525 | vcaballero | /**
|
251 | 1034 | vcaballero | * Devuelve el nivel de transparencia de la capa.
|
252 | 8765 | jjdelcerro | *
|
253 | 1034 | vcaballero | * @return Entero que representa el nivel de transparencia.
|
254 | 525 | vcaballero | */
|
255 | public int getTransparency() { |
||
256 | 434 | fjp | return transparency;
|
257 | } |
||
258 | 525 | vcaballero | |
259 | /**
|
||
260 | 1034 | vcaballero | * Inserta el nivel de transparencia de la capa.
|
261 | 8765 | jjdelcerro | *
|
262 | 5923 | fjp | * @param trans
|
263 | * Nivel de transparencia.
|
||
264 | 525 | vcaballero | */
|
265 | 434 | fjp | public void setTransparency(int trans) { |
266 | transparency = trans; |
||
267 | 6002 | fjp | setDirty(true);
|
268 | 434 | fjp | } |
269 | 435 | vcaballero | |
270 | 525 | vcaballero | /**
|
271 | 1034 | vcaballero | * Devuelve el XMLEntity a partir del objeto.
|
272 | 8765 | jjdelcerro | *
|
273 | 1034 | vcaballero | * @return XMLEntity.
|
274 | 1828 | fernando | * @throws XMLException
|
275 | 525 | vcaballero | */
|
276 | 1828 | fernando | public XMLEntity getXMLEntity() throws XMLException { |
277 | 525 | vcaballero | XMLEntity xml = new XMLEntity();
|
278 | 5923 | fjp | xml.putProperty("className", this.getClass().getName()); |
279 | 435 | vcaballero | |
280 | 525 | vcaballero | if (this instanceof FLayers) { |
281 | } |
||
282 | |||
283 | 8765 | jjdelcerro | // xml.putProperty("active", active);
|
284 | xml.putProperty("active", status.active);
|
||
285 | 525 | vcaballero | xml.putProperty("name", name);
|
286 | 5923 | fjp | xml.putProperty("minScale", minScale);
|
287 | xml.putProperty("maxScale", maxScale);
|
||
288 | 5908 | caballero | |
289 | 5923 | fjp | // TODO xml.addChild(parentLayer.getXMLEntity());
|
290 | 8765 | jjdelcerro | // xml.putProperty("visible", visible);
|
291 | xml.putProperty("visible", status.visible);
|
||
292 | 1417 | fjp | if (projection != null) { |
293 | 11345 | dguerrero | xml.putProperty("proj", projection.getFullCode());
|
294 | 1417 | fjp | } |
295 | 1455 | luisw | xml.putProperty("transparency", transparency);
|
296 | 8765 | jjdelcerro | // xml.putProperty("isInTOC", isInTOC);
|
297 | xml.putProperty("isInTOC", status.inTOC);
|
||
298 | |||
299 | // persist Properties hashTable
|
||
300 | |||
301 | Set keyset = properties.keySet();
|
||
302 | 9360 | fdiaz | |
303 | 8765 | jjdelcerro | |
304 | 9360 | fdiaz | int numProperties = 0; |
305 | 8765 | jjdelcerro | 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 | 9360 | fdiaz | 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 | 8765 | jjdelcerro | } |
334 | } |
||
335 | 9360 | fdiaz | xml.putProperty("numProperties", numProperties);
|
336 | 8765 | jjdelcerro | |
337 | 525 | vcaballero | return xml;
|
338 | } |
||
339 | |||
340 | 2183 | fernando | /*
|
341 | * Inserta los valores de los atributos del XMLEntity al objeto.
|
||
342 | 8765 | jjdelcerro | *
|
343 | 2183 | fernando | * @param xml XMLEntity.
|
344 | 8765 | jjdelcerro | *
|
345 | 5923 | fjp | * @throws XMLException @throws DriverException @throws DriverIOException
|
346 | 8765 | jjdelcerro | *
|
347 | 5923 | fjp | * 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 | 2183 | fernando | |
357 | 525 | vcaballero | /**
|
358 | 1034 | vcaballero | * Inserta los valores de los atributos del XMLEntity al objeto.
|
359 | 8765 | jjdelcerro | *
|
360 | 5923 | fjp | * @param xml
|
361 | * XMLEntity.
|
||
362 | 8765 | jjdelcerro | *
|
363 | 1034 | vcaballero | * @throws XMLException
|
364 | * @throws DriverException
|
||
365 | * @throws DriverIOException
|
||
366 | 525 | vcaballero | */
|
367 | 5923 | fjp | public void setXMLEntity(XMLEntity xml) throws XMLException { |
368 | 8765 | jjdelcerro | // active = xml.getBooleanProperty("active");
|
369 | status.active = xml.getBooleanProperty("active");
|
||
370 | 525 | vcaballero | name = xml.getStringProperty("name");
|
371 | 5923 | fjp | minScale = xml.getDoubleProperty("minScale");
|
372 | maxScale = xml.getDoubleProperty("maxScale");
|
||
373 | 8765 | jjdelcerro | // visible = xml.getBooleanProperty("visible");
|
374 | status.visible = xml.getBooleanProperty("visible");
|
||
375 | 1417 | fjp | if (xml.contains("proj")) { |
376 | 6164 | luisw2 | setProjection(CRSFactory.getCRS(xml.getStringProperty("proj")));
|
377 | 1417 | fjp | } |
378 | 1455 | luisw | if (xml.contains("transparency")) |
379 | transparency = xml.getIntProperty("transparency");
|
||
380 | 5802 | jaume | if (xml.contains("isInTOC")) |
381 | 8765 | jjdelcerro | // 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 | 9360 | fdiaz | Object obj= null; |
389 | IPersistance objPersist; |
||
390 | 8765 | jjdelcerro | for (int iProp=0; iProp<numProps; iProp++) { |
391 | 9360 | fdiaz | XMLEntity xmlProp = xml.getChild(0);
|
392 | 8765 | jjdelcerro | try {
|
393 | String className = xmlProp.getStringProperty("className"); |
||
394 | 9360 | fdiaz | 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 | 8765 | jjdelcerro | String propName = xmlProp.getStringProperty("layerPropertyName"); |
403 | properties.put(propName, obj); |
||
404 | } catch (Exception e) { |
||
405 | continue;
|
||
406 | } |
||
407 | 9360 | fdiaz | // remove Properties children to avoid breaking layers' XML reading logic
|
408 | xml.removeChild(0);
|
||
409 | 8765 | jjdelcerro | } |
410 | } |
||
411 | 525 | vcaballero | } |
412 | 694 | fernando | |
413 | /**
|
||
414 | 2183 | fernando | * Inserta los valores de los atributos del XMLEntity al objeto.
|
415 | 8765 | jjdelcerro | *
|
416 | 5923 | fjp | * @param xml
|
417 | * XMLEntity.
|
||
418 | 8765 | jjdelcerro | *
|
419 | 2183 | fernando | * @throws XMLException
|
420 | * @throws DriverException
|
||
421 | * @throws DriverIOException
|
||
422 | */
|
||
423 | 5923 | fjp | public void setXMLEntity03(XMLEntity xml) throws XMLException { |
424 | 8765 | jjdelcerro | // active = xml.getBooleanProperty("active");
|
425 | status.active = xml.getBooleanProperty("active");
|
||
426 | 2183 | fernando | name = xml.getStringProperty("name");
|
427 | 5923 | fjp | minScale = xml.getDoubleProperty("minScale");
|
428 | maxScale = xml.getDoubleProperty("maxScale");
|
||
429 | 8765 | jjdelcerro | // visible = xml.getBooleanProperty("visible");
|
430 | status.visible = xml.getBooleanProperty("visible");
|
||
431 | 2183 | fernando | if (xml.contains("proj")) { |
432 | 6164 | luisw2 | setProjection(CRSFactory.getCRS(xml.getStringProperty("proj")));
|
433 | 2183 | fernando | } |
434 | if (xml.contains("transparency")) |
||
435 | transparency = xml.getIntProperty("transparency");
|
||
436 | } |
||
437 | |||
438 | /**
|
||
439 | 6881 | cesar | * @see com.iver.cit.gvsig.fmap.layers.FLayer#getMapContext()
|
440 | 694 | fernando | */
|
441 | 6881 | cesar | public MapContext getMapContext() {
|
442 | 884 | fernando | if (getParentLayer() != null) { |
443 | 6881 | cesar | return getParentLayer().getMapContext();
|
444 | 884 | fernando | } else {
|
445 | return null; |
||
446 | } |
||
447 | 694 | fernando | } |
448 | |||
449 | 884 | fernando | /**
|
450 | 1034 | vcaballero | * A?ade a la lista de listener un nuevo LayerListener.
|
451 | 8765 | jjdelcerro | *
|
452 | 5923 | fjp | * @param o
|
453 | * LayerListener.
|
||
454 | 8765 | jjdelcerro | *
|
455 | 1034 | vcaballero | * @return boolean.
|
456 | 884 | fernando | */
|
457 | 727 | fernando | public boolean addLayerListener(LayerListener o) { |
458 | 4370 | caballero | if (layerListeners.contains(o))
|
459 | return false; |
||
460 | 727 | fernando | return layerListeners.add(o);
|
461 | } |
||
462 | 5908 | caballero | public LayerListener[] getLayerListeners() { |
463 | return (LayerListener[])layerListeners.toArray(new LayerListener[0]); |
||
464 | } |
||
465 | 884 | fernando | /**
|
466 | 1034 | vcaballero | * Borra de la lista de listeners el que se pasa como par?metro.
|
467 | 8765 | jjdelcerro | *
|
468 | 5923 | fjp | * @param o
|
469 | * LayerListener a borrar.
|
||
470 | 8765 | jjdelcerro | *
|
471 | 1034 | vcaballero | * @return True si ha sido correcto el borrado del Listener.
|
472 | 884 | fernando | */
|
473 | 727 | fernando | public boolean removeLayerListener(LayerListener o) { |
474 | return layerListeners.remove(o);
|
||
475 | } |
||
476 | 884 | fernando | |
477 | /**
|
||
478 | 1034 | vcaballero | * Llamada al metodo nameChanged de los Listeners dados de alta.
|
479 | 8765 | jjdelcerro | *
|
480 | 5923 | fjp | * @param e
|
481 | * LayerEvent.
|
||
482 | 884 | fernando | */
|
483 | private void callNameChanged(LayerEvent e) { |
||
484 | 727 | fernando | for (Iterator iter = layerListeners.iterator(); iter.hasNext();) { |
485 | LayerListener listener = (LayerListener) iter.next(); |
||
486 | 884 | fernando | |
487 | 727 | fernando | listener.nameChanged(e); |
488 | } |
||
489 | } |
||
490 | 884 | fernando | |
491 | /**
|
||
492 | 1034 | vcaballero | * Llamada al m?todo visibilityChanged de los Listeners.
|
493 | 8765 | jjdelcerro | *
|
494 | 5923 | fjp | * @param e
|
495 | * LayerEvent.
|
||
496 | 884 | fernando | */
|
497 | private void callVisibilityChanged(LayerEvent e) { |
||
498 | 727 | fernando | for (Iterator iter = layerListeners.iterator(); iter.hasNext();) { |
499 | LayerListener listener = (LayerListener) iter.next(); |
||
500 | 884 | fernando | |
501 | 727 | fernando | listener.visibilityChanged(e); |
502 | } |
||
503 | } |
||
504 | 884 | fernando | |
505 | /**
|
||
506 | 1034 | vcaballero | * Llamada al m?todo activationChanged de los Listener.
|
507 | 8765 | jjdelcerro | *
|
508 | 5923 | fjp | * @param e
|
509 | * LayerEvent.
|
||
510 | 884 | fernando | */
|
511 | private void callActivationChanged(LayerEvent e) { |
||
512 | 727 | fernando | for (Iterator iter = layerListeners.iterator(); iter.hasNext();) { |
513 | LayerListener listener = (LayerListener) iter.next(); |
||
514 | 884 | fernando | |
515 | 727 | fernando | listener.activationChanged(e); |
516 | } |
||
517 | } |
||
518 | 745 | fjp | |
519 | 884 | fernando | /**
|
520 | 1034 | vcaballero | * Devuelve las capas virtuales.
|
521 | 8765 | jjdelcerro | *
|
522 | 1034 | vcaballero | * @return FLayers.
|
523 | 884 | fernando | */
|
524 | 745 | fjp | public FLayers getVirtualLayers() {
|
525 | return virtualLayers;
|
||
526 | } |
||
527 | 884 | fernando | |
528 | /**
|
||
529 | 1034 | vcaballero | * Inserta las capas virtuales.
|
530 | 8765 | jjdelcerro | *
|
531 | 5923 | fjp | * @param virtualLayers
|
532 | * FLayers.
|
||
533 | 884 | fernando | */
|
534 | 745 | fjp | public void setVirtualLayers(FLayers virtualLayers) { |
535 | this.virtualLayers = virtualLayers;
|
||
536 | } |
||
537 | 884 | fernando | |
538 | /**
|
||
539 | 1034 | vcaballero | * Devuelve la capa de texto.
|
540 | 8765 | jjdelcerro | *
|
541 | 1034 | vcaballero | * @return capa de texto.
|
542 | 884 | fernando | */
|
543 | 757 | fjp | public FLyrText getLayerText() {
|
544 | return layerText;
|
||
545 | } |
||
546 | 884 | fernando | |
547 | /**
|
||
548 | 1034 | vcaballero | * Inserta la capa de texto.
|
549 | 8765 | jjdelcerro | *
|
550 | 5923 | fjp | * @param layerText
|
551 | * Capa de texto.
|
||
552 | 884 | fernando | */
|
553 | 757 | fjp | public void setLayerText(FLyrText layerText) { |
554 | this.layerText = layerText;
|
||
555 | } |
||
556 | 885 | fjp | |
557 | /**
|
||
558 | 4479 | fjp | * Inserta la Transformaci?n de coordenadas.
|
559 | 8765 | jjdelcerro | *
|
560 | 5923 | fjp | * @param ct
|
561 | * Transformaci?n de coordenadas.
|
||
562 | 885 | fjp | */
|
563 | public void setCoordTrans(ICoordTrans ct) { |
||
564 | this.ct = ct;
|
||
565 | } |
||
566 | |||
567 | /**
|
||
568 | 4479 | fjp | * Devuelve las transformaci?n de coordenadas.
|
569 | 8765 | jjdelcerro | *
|
570 | 4479 | fjp | * @return ct.
|
571 | 885 | fjp | */
|
572 | public ICoordTrans getCoordTrans() {
|
||
573 | return ct;
|
||
574 | } |
||
575 | 5908 | caballero | |
576 | 4376 | nacho | /**
|
577 | 5923 | fjp | * 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 | 4376 | nacho | */
|
583 | 5923 | fjp | public void wakeUp() { |
584 | } |
||
585 | 5908 | caballero | |
586 | 5923 | fjp | public double getMinScale() { |
587 | return minScale;
|
||
588 | } |
||
589 | 1176 | fjp | |
590 | 5923 | fjp | /*
|
591 | * (non-Javadoc)
|
||
592 | 8765 | jjdelcerro | *
|
593 | 5923 | fjp | * @see com.iver.cit.gvsig.fmap.layers.FLayer#getMaxScale()
|
594 | */
|
||
595 | public double getMaxScale() { |
||
596 | return maxScale;
|
||
597 | } |
||
598 | 5908 | caballero | |
599 | 5923 | fjp | public void setMinScale(double minScale) { |
600 | this.minScale = minScale;
|
||
601 | } |
||
602 | 5908 | caballero | |
603 | 5923 | fjp | public void setMaxScale(double maxScale) { |
604 | this.maxScale = maxScale;
|
||
605 | } |
||
606 | 5908 | caballero | |
607 | 5923 | fjp | public boolean isWithinScale(double scale) { |
608 | 5908 | caballero | |
609 | 5923 | fjp | 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 | 5908 | caballero | |
619 | 5923 | fjp | return bVisible;
|
620 | } |
||
621 | 3690 | caballero | |
622 | 5923 | fjp | public Strategy getStrategy() {
|
623 | return privateStrategy;
|
||
624 | } |
||
625 | |||
626 | public void setStrategy(Strategy s) { |
||
627 | privateStrategy = s; |
||
628 | } |
||
629 | |||
630 | 5152 | fjp | public void setEditing(boolean b) throws EditionException { |
631 | 8765 | jjdelcerro | // isediting = b;
|
632 | status.editing = b; |
||
633 | 6002 | fjp | setDirty(true);
|
634 | setCachingDrawnLayers(b); |
||
635 | 3690 | caballero | } |
636 | 5923 | fjp | |
637 | 4147 | fjp | protected void callEditionChanged(LayerEvent e) { |
638 | 4144 | fjp | for (Iterator iter = layerListeners.iterator(); iter.hasNext();) { |
639 | LayerListener listener = (LayerListener) iter.next(); |
||
640 | |||
641 | listener.editionChanged(e); |
||
642 | } |
||
643 | } |
||
644 | |||
645 | 5923 | fjp | public boolean isEditing() { |
646 | 8765 | jjdelcerro | // return isediting;
|
647 | return status.editing;
|
||
648 | 3690 | caballero | } |
649 | 5908 | caballero | |
650 | 5923 | fjp | public ImageIcon getTocImageIcon() { |
651 | return null; |
||
652 | } |
||
653 | 5908 | caballero | |
654 | 5923 | fjp | public boolean isInTOC() { |
655 | 8765 | jjdelcerro | // return isInTOC;
|
656 | return status.inTOC;
|
||
657 | 5923 | fjp | } |
658 | |||
659 | /* (non-Javadoc)
|
||
660 | * @see com.iver.cit.gvsig.fmap.layers.FLayer#isCachingDrawnLayers()
|
||
661 | */
|
||
662 | public boolean isCachingDrawnLayers() { |
||
663 | 8765 | jjdelcerro | // return bCacheDrawnLayers;
|
664 | return status.cacheDrawnLayers;
|
||
665 | 5923 | fjp | } |
666 | |||
667 | /* (non-Javadoc)
|
||
668 | * @see com.iver.cit.gvsig.fmap.layers.FLayer#setCachingDrawnLayers(boolean)
|
||
669 | */
|
||
670 | public void setCachingDrawnLayers(boolean bCacheDrawnLayers) { |
||
671 | 8765 | jjdelcerro | // this.bCacheDrawnLayers = bCacheDrawnLayers;
|
672 | status.cacheDrawnLayers = bCacheDrawnLayers; |
||
673 | if (status.cacheDrawnLayers == false) |
||
674 | 5997 | fjp | this.cacheImageDrawnLayers = null; |
675 | 5923 | fjp | } |
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 | 8765 | jjdelcerro | return status.dirty;
|
687 | 5923 | fjp | } |
688 | |||
689 | public void setDirty(boolean dirty) { |
||
690 | 8765 | jjdelcerro | status.dirty = dirty; |
691 | 5923 | fjp | } |
692 | 8765 | jjdelcerro | |
693 | 6543 | jmvivo | public boolean isAvailable() { |
694 | 8765 | jjdelcerro | return status.available;
|
695 | 6400 | jmvivo | } |
696 | 8765 | jjdelcerro | |
697 | 6532 | jmvivo | public void setAvailable(boolean available) { |
698 | 8765 | jjdelcerro | status.available = available; |
699 | 6400 | jmvivo | } |
700 | 8765 | jjdelcerro | |
701 | 6532 | jmvivo | public void reload() throws DriverIOException { |
702 | this.setAvailable(true); |
||
703 | } |
||
704 | 8765 | jjdelcerro | |
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 | 6532 | jmvivo | public boolean visibleRequired() { |
745 | 8765 | jjdelcerro | return status.visible;
|
746 | 6532 | jmvivo | } |
747 | 8765 | jjdelcerro | |
748 | 6532 | jmvivo | public String getInfoString() { |
749 | return null; |
||
750 | } |
||
751 | 5923 | fjp | |
752 | 6856 | fjp | public boolean isWritable() { |
753 | 8765 | jjdelcerro | return status.writable;
|
754 | 6856 | fjp | } |
755 | 9225 | fjp | |
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 | 5923 | fjp | |
763 | 10048 | fjp | /**
|
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 | 6856 | fjp | |
770 | 10048 | fjp | } |
771 | 9225 | fjp | |
772 | 10401 | fjp | public Image getTocStatusImage() { |
773 | return tocStatusImage;
|
||
774 | } |
||
775 | 10048 | fjp | |
776 | 10401 | fjp | public void setTocStatusImage(Image tocStatusImage) { |
777 | this.tocStatusImage = tocStatusImage;
|
||
778 | 10633 | fjp | logger.debug("setTocStatusImage " + tocStatusImage + " sobre capa " + this.getName()); |
779 | 10401 | fjp | } |
780 | 10048 | fjp | |
781 | 10401 | fjp | |
782 | 11030 | jmvivo | /* 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 | 214 | fernando | } |