svn-gvsig-desktop / trunk / libraries / libFMap / src / com / iver / cit / gvsig / fmap / layers / FLyrDefault.java @ 10932
History | View | Annotate | Download (18.8 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 | 7463 | azabala | import java.util.List; |
48 | 9224 | jjdelcerro | import java.util.Map; |
49 | 7867 | sbayarri | import java.util.Set; |
50 | 214 | fernando | |
51 | 5760 | jmvivo | import javax.swing.ImageIcon; |
52 | |||
53 | 2659 | fjp | import org.apache.log4j.Logger; |
54 | 354 | fernando | import org.cresques.cts.ICoordTrans; |
55 | 214 | fernando | import org.cresques.cts.IProjection; |
56 | 10627 | caballero | import org.gvsig.exceptions.BaseException; |
57 | 214 | fernando | |
58 | 10627 | caballero | import com.hardcode.gdbms.engine.data.driver.DriverException; |
59 | import com.iver.cit.gvsig.exceptions.layers.LoadLayerException; |
||
60 | import com.iver.cit.gvsig.exceptions.layers.ReloadLayerException; |
||
61 | import com.iver.cit.gvsig.exceptions.layers.StartEditionLayerException; |
||
62 | 6878 | cesar | import com.iver.cit.gvsig.fmap.MapContext; |
63 | 6164 | luisw2 | import com.iver.cit.gvsig.fmap.crs.CRSFactory; |
64 | 2531 | caballero | import com.iver.cit.gvsig.fmap.drivers.DriverIOException; |
65 | 10932 | jmvivo | import com.iver.cit.gvsig.fmap.layers.layerOperations.ComposedLayer; |
66 | 3329 | fjp | import com.iver.cit.gvsig.fmap.operations.strategies.Strategy; |
67 | 9224 | jjdelcerro | import com.iver.utiles.IPersistance; |
68 | 2531 | caballero | import com.iver.utiles.XMLEntity; |
69 | 214 | fernando | |
70 | /**
|
||
71 | 435 | vcaballero | * Implementaci?n de las caracter?sticas de alto nivel de las capas:
|
72 | * visibilidad, activaci?n, nombre, ...
|
||
73 | 214 | fernando | */
|
74 | 341 | fernando | public abstract class FLyrDefault implements FLayer { |
75 | 5923 | fjp | // private PropertyChangeSupport lnkPropertyChangeSupport;
|
76 | private static Logger logger = Logger.getLogger(FLyrDefault.class); |
||
77 | |||
78 | 525 | vcaballero | /** Path de la capa en el arbol de capas */
|
79 | private FLayers parentLayer = null; |
||
80 | 745 | fjp | private FLayers virtualLayers = null; |
81 | 274 | fjp | private String name; |
82 | 354 | fernando | private IProjection projection;
|
83 | 434 | fjp | private int transparency = 0; |
84 | 885 | fjp | private ICoordTrans ct;
|
85 | 1176 | fjp | private double minScale = -1; // -1 indica que no se usa |
86 | private double maxScale = -1; |
||
87 | 7463 | azabala | // private boolean isInTOC = true;
|
88 | 3256 | nacho | protected ArrayList layerListeners = new ArrayList(); |
89 | 5923 | fjp | private Strategy privateStrategy = null; |
90 | 5200 | ldiaz | private Hashtable properties = new Hashtable(); |
91 | 5923 | fjp | private BufferedImage cacheImageDrawnLayers = null; |
92 | 7867 | sbayarri | |
93 | 7463 | azabala | //by default, all is active, visible and avalaible
|
94 | private FLayerStatus status = new FLayerStatus(); |
||
95 | 5923 | fjp | |
96 | public Object getProperty(Object key) { |
||
97 | 5200 | ldiaz | return properties.get(key);
|
98 | } |
||
99 | 5923 | fjp | |
100 | public void setProperty(Object key, Object val) { |
||
101 | 5200 | ldiaz | properties.put(key, val); |
102 | } |
||
103 | 5908 | caballero | |
104 | 9224 | jjdelcerro | public Map getExtendedProperties() { |
105 | return properties;
|
||
106 | } |
||
107 | 525 | vcaballero | /**
|
108 | * @see com.iver.cit.gvsig.fmap.layers.FLayer#setActive(boolean)
|
||
109 | */
|
||
110 | public void setActive(boolean selected) { |
||
111 | 7463 | azabala | //active = selected;
|
112 | status.active = selected; |
||
113 | 5923 | fjp | callActivationChanged(LayerEvent.createActivationChangedEvent(this,
|
114 | "active"));
|
||
115 | 525 | vcaballero | } |
116 | 214 | fernando | |
117 | 525 | vcaballero | /**
|
118 | * @see com.iver.cit.gvsig.fmap.layers.FLayer#isActive()
|
||
119 | */
|
||
120 | public boolean isActive() { |
||
121 | 7463 | azabala | // return active;
|
122 | return status.active;
|
||
123 | 525 | vcaballero | } |
124 | 214 | fernando | |
125 | 525 | vcaballero | /**
|
126 | * @see com.iver.cit.gvsig.fmap.layers.FLayer#setName(java.lang.String)
|
||
127 | */
|
||
128 | public void setName(String name) { |
||
129 | this.name = name;
|
||
130 | 1082 | fernando | callNameChanged(LayerEvent.createNameChangedEvent(this, "name")); |
131 | 525 | vcaballero | } |
132 | 214 | fernando | |
133 | 525 | vcaballero | /**
|
134 | * @see com.iver.cit.gvsig.fmap.layers.FLayer#getName()
|
||
135 | */
|
||
136 | public String getName() { |
||
137 | return name;
|
||
138 | } |
||
139 | 214 | fernando | |
140 | 567 | luisw | /*
|
141 | 525 | vcaballero | * @see com.iver.cit.gvsig.fmap.layers.FLayer#load()
|
142 | */
|
||
143 | 10627 | caballero | public void load() throws LoadLayerException { |
144 | 525 | vcaballero | } |
145 | 214 | fernando | |
146 | 525 | vcaballero | /**
|
147 | * @see com.iver.cit.gvsig.fmap.layers.FLayer#setVisible(boolean)
|
||
148 | */
|
||
149 | public void setVisible(boolean visibility) { |
||
150 | 7463 | azabala | // visible = visibility;
|
151 | 7464 | azabala | boolean changed = status.visible != visibility;
|
152 | 7463 | azabala | status.visible = visibility; |
153 | 6002 | fjp | setDirty(true);
|
154 | 7380 | jmvivo | if (changed){
|
155 | if (this.getMapContext() != null){ |
||
156 | this.getMapContext().clearAllCachingImageDrawnLayers();
|
||
157 | } |
||
158 | } |
||
159 | 5923 | fjp | callVisibilityChanged(LayerEvent.createVisibilityChangedEvent(this,
|
160 | "visible"));
|
||
161 | 525 | vcaballero | } |
162 | 435 | vcaballero | |
163 | 525 | vcaballero | /**
|
164 | * @see com.iver.cit.gvsig.fmap.layers.FLayer#isVisible()
|
||
165 | */
|
||
166 | public boolean isVisible() { |
||
167 | 7463 | azabala | // return visible && this.available;
|
168 | return status.visible && status.available;
|
||
169 | 525 | vcaballero | } |
170 | 435 | vcaballero | |
171 | 525 | vcaballero | /**
|
172 | 1034 | vcaballero | * Devuelve la capa padre de la actual.
|
173 | 7867 | sbayarri | *
|
174 | 1034 | vcaballero | * @return FLayers padre.
|
175 | 525 | vcaballero | */
|
176 | public FLayers getParentLayer() {
|
||
177 | return parentLayer;
|
||
178 | } |
||
179 | 435 | vcaballero | |
180 | 525 | vcaballero | /**
|
181 | 1034 | vcaballero | * Inserta la capa padre.
|
182 | 7867 | sbayarri | *
|
183 | 5923 | fjp | * @param root
|
184 | * capa padre.
|
||
185 | 525 | vcaballero | */
|
186 | public void setParentLayer(FLayers root) { |
||
187 | this.parentLayer = root;
|
||
188 | } |
||
189 | 435 | vcaballero | |
190 | 525 | vcaballero | /**
|
191 | 1034 | vcaballero | * Inserta una proyecci?n.
|
192 | 7867 | sbayarri | *
|
193 | 5923 | fjp | * @param proj
|
194 | * Proyecci?n.
|
||
195 | 525 | vcaballero | */
|
196 | public void setProjection(IProjection proj) { |
||
197 | 5908 | caballero | projection = proj; |
198 | 5923 | fjp | // Comprobar que la proyecci?n es la misma que la de FMap
|
199 | // Si no lo es, es una capa que est? reproyectada al vuelo
|
||
200 | 6881 | cesar | if ((proj != null) && (getMapContext() != null)) |
201 | if (proj != getMapContext().getProjection()) {
|
||
202 | ICoordTrans ct = proj.getCT(getMapContext().getProjection()); |
||
203 | 5923 | fjp | setCoordTrans(ct); |
204 | logger.debug("Cambio proyecci?n: FMap con "
|
||
205 | 6881 | cesar | + getMapContext().getProjection().getAbrev() + " y capa "
|
206 | 5923 | fjp | + getName() + " con " + proj.getAbrev());
|
207 | } |
||
208 | 525 | vcaballero | } |
209 | 435 | vcaballero | |
210 | 525 | vcaballero | /**
|
211 | * @see org.cresques.geo.Projected#getProjection()
|
||
212 | */
|
||
213 | public IProjection getProjection() {
|
||
214 | return projection;
|
||
215 | } |
||
216 | 435 | vcaballero | |
217 | 525 | vcaballero | /**
|
218 | * @see org.cresques.geo.Projected#reProject(org.cresques.cts.ICoordTrans)
|
||
219 | */
|
||
220 | public void reProject(ICoordTrans arg0) { |
||
221 | } |
||
222 | 435 | vcaballero | |
223 | 525 | vcaballero | /**
|
224 | 1034 | vcaballero | * Devuelve el nivel de transparencia de la capa.
|
225 | 7867 | sbayarri | *
|
226 | 1034 | vcaballero | * @return Entero que representa el nivel de transparencia.
|
227 | 525 | vcaballero | */
|
228 | public int getTransparency() { |
||
229 | 434 | fjp | return transparency;
|
230 | } |
||
231 | 525 | vcaballero | |
232 | /**
|
||
233 | 1034 | vcaballero | * Inserta el nivel de transparencia de la capa.
|
234 | 7867 | sbayarri | *
|
235 | 5923 | fjp | * @param trans
|
236 | * Nivel de transparencia.
|
||
237 | 525 | vcaballero | */
|
238 | 434 | fjp | public void setTransparency(int trans) { |
239 | transparency = trans; |
||
240 | 6002 | fjp | setDirty(true);
|
241 | 434 | fjp | } |
242 | 435 | vcaballero | |
243 | 525 | vcaballero | /**
|
244 | 1034 | vcaballero | * Devuelve el XMLEntity a partir del objeto.
|
245 | 7867 | sbayarri | *
|
246 | 1034 | vcaballero | * @return XMLEntity.
|
247 | 1828 | fernando | * @throws XMLException
|
248 | 525 | vcaballero | */
|
249 | 1828 | fernando | public XMLEntity getXMLEntity() throws XMLException { |
250 | 525 | vcaballero | XMLEntity xml = new XMLEntity();
|
251 | 5923 | fjp | xml.putProperty("className", this.getClass().getName()); |
252 | 435 | vcaballero | |
253 | 525 | vcaballero | if (this instanceof FLayers) { |
254 | } |
||
255 | |||
256 | 7463 | azabala | // xml.putProperty("active", active);
|
257 | xml.putProperty("active", status.active);
|
||
258 | 525 | vcaballero | xml.putProperty("name", name);
|
259 | 5923 | fjp | xml.putProperty("minScale", minScale);
|
260 | xml.putProperty("maxScale", maxScale);
|
||
261 | 5908 | caballero | |
262 | 5923 | fjp | // TODO xml.addChild(parentLayer.getXMLEntity());
|
263 | 7463 | azabala | // xml.putProperty("visible", visible);
|
264 | xml.putProperty("visible", status.visible);
|
||
265 | 1417 | fjp | if (projection != null) { |
266 | xml.putProperty("proj", projection.getAbrev());
|
||
267 | } |
||
268 | 1455 | luisw | xml.putProperty("transparency", transparency);
|
269 | 7463 | azabala | // xml.putProperty("isInTOC", isInTOC);
|
270 | xml.putProperty("isInTOC", status.inTOC);
|
||
271 | 7867 | sbayarri | |
272 | // persist Properties hashTable
|
||
273 | |||
274 | 10627 | caballero | |
275 | 7867 | sbayarri | Set keyset = properties.keySet();
|
276 | |||
277 | 10627 | caballero | |
278 | |||
279 | 7867 | sbayarri | Iterator keyitr = keyset.iterator();
|
280 | 9072 | jmvivo | XMLEntity xmlProperties = new XMLEntity();
|
281 | xmlProperties.putProperty("childName","properties"); |
||
282 | 7867 | sbayarri | while (keyitr.hasNext()) {
|
283 | String propName = (String)keyitr.next(); |
||
284 | Object obj = properties.get(propName);
|
||
285 | if (obj instanceof IPersistance) |
||
286 | { |
||
287 | IPersistance persistObj = (IPersistance)obj; |
||
288 | XMLEntity xmlPropObj = persistObj.getXMLEntity(); |
||
289 | // make sure the node contains the class name
|
||
290 | if (!xmlPropObj.contains("className")) { |
||
291 | try {
|
||
292 | String propClassName = persistObj.getClassName();
|
||
293 | System.out.println("PROP CLASS NAME "+propClassName); |
||
294 | xmlPropObj.putProperty("className", propClassName);
|
||
295 | } catch (Exception e) { |
||
296 | e.printStackTrace(); |
||
297 | } |
||
298 | } |
||
299 | xmlPropObj.putProperty("layerPropertyName", propName);
|
||
300 | 10627 | caballero | xmlProperties.addChild(xmlPropObj); |
301 | 9072 | jmvivo | } else if (obj instanceof String) { |
302 | XMLEntity xmlPropObj = new XMLEntity();
|
||
303 | xmlPropObj.putProperty("className", String.class.getName()); |
||
304 | xmlPropObj.putProperty("value",(String)obj); |
||
305 | xmlPropObj.putProperty("layerPropertyName", propName);
|
||
306 | 10627 | caballero | xmlProperties.addChild(xmlPropObj); |
307 | 9072 | jmvivo | |
308 | 7867 | sbayarri | } |
309 | } |
||
310 | 9072 | jmvivo | if (xmlProperties.getChildrenCount() > 0) { |
311 | xml.addChild(xmlProperties); |
||
312 | } |
||
313 | 10627 | caballero | |
314 | 525 | vcaballero | return xml;
|
315 | } |
||
316 | |||
317 | 2183 | fernando | /*
|
318 | * Inserta los valores de los atributos del XMLEntity al objeto.
|
||
319 | 7867 | sbayarri | *
|
320 | 2183 | fernando | * @param xml XMLEntity.
|
321 | 7867 | sbayarri | *
|
322 | 5923 | fjp | * @throws XMLException @throws DriverException @throws DriverIOException
|
323 | 7867 | sbayarri | *
|
324 | 5923 | fjp | * public void setXMLEntity03(XMLEntity xml) throws XMLException { active =
|
325 | * xml.getBooleanProperty("active"); name = xml.getStringProperty("name");
|
||
326 | * minScale=xml.getDoubleProperty("minScale");
|
||
327 | * maxScale=xml.getDoubleProperty("maxScale"); visible =
|
||
328 | * xml.getBooleanProperty("visible"); if (xml.contains("proj")) {
|
||
329 | * setProjection(ProjectionPool.get(xml.getStringProperty("proj"))); } if
|
||
330 | * (xml.contains("transparency")) transparency =
|
||
331 | * xml.getIntProperty("transparency"); }
|
||
332 | */
|
||
333 | 2183 | fernando | |
334 | 525 | vcaballero | /**
|
335 | 1034 | vcaballero | * Inserta los valores de los atributos del XMLEntity al objeto.
|
336 | 7867 | sbayarri | *
|
337 | 5923 | fjp | * @param xml
|
338 | * XMLEntity.
|
||
339 | 7867 | sbayarri | *
|
340 | 1034 | vcaballero | * @throws XMLException
|
341 | * @throws DriverException
|
||
342 | * @throws DriverIOException
|
||
343 | 525 | vcaballero | */
|
344 | 5923 | fjp | public void setXMLEntity(XMLEntity xml) throws XMLException { |
345 | 7463 | azabala | // active = xml.getBooleanProperty("active");
|
346 | status.active = xml.getBooleanProperty("active");
|
||
347 | 525 | vcaballero | name = xml.getStringProperty("name");
|
348 | 5923 | fjp | minScale = xml.getDoubleProperty("minScale");
|
349 | maxScale = xml.getDoubleProperty("maxScale");
|
||
350 | 7463 | azabala | // visible = xml.getBooleanProperty("visible");
|
351 | status.visible = xml.getBooleanProperty("visible");
|
||
352 | 1417 | fjp | if (xml.contains("proj")) { |
353 | 6164 | luisw2 | setProjection(CRSFactory.getCRS(xml.getStringProperty("proj")));
|
354 | 1417 | fjp | } |
355 | 1455 | luisw | if (xml.contains("transparency")) |
356 | transparency = xml.getIntProperty("transparency");
|
||
357 | 5802 | jaume | if (xml.contains("isInTOC")) |
358 | 7463 | azabala | // isInTOC = xml.getBooleanProperty("isInTOC");
|
359 | status.inTOC = xml.getBooleanProperty("isInTOC");
|
||
360 | 7867 | sbayarri | |
361 | // recreate Properties hashTable
|
||
362 | 10627 | caballero | |
363 | 9072 | jmvivo | int xmlPropertiesPos = xml.firstIndexOfChild("childName","properties"); |
364 | XMLEntity xmlProperties =null;
|
||
365 | if (xmlPropertiesPos > -1) |
||
366 | xmlProperties = xml.getChild(xmlPropertiesPos); |
||
367 | 10627 | caballero | |
368 | 9072 | jmvivo | if (xmlProperties != null) { |
369 | 10627 | caballero | |
370 | 9072 | jmvivo | int numProps = xmlProperties.getChildrenCount();
|
371 | Object obj;
|
||
372 | String className;
|
||
373 | Class classProp;
|
||
374 | IPersistance objPersist; |
||
375 | 7867 | sbayarri | for (int iProp=0; iProp<numProps; iProp++) { |
376 | 9072 | jmvivo | XMLEntity xmlProp = xmlProperties.getChild(iProp); |
377 | 7867 | sbayarri | try {
|
378 | 9072 | jmvivo | className = xmlProp.getStringProperty("className");
|
379 | if (className.equals(String.class.getName())) { |
||
380 | obj = xmlProp.getStringProperty("value");
|
||
381 | } else {
|
||
382 | classProp = Class.forName(className);
|
||
383 | obj = classProp.newInstance(); |
||
384 | objPersist = (IPersistance)obj; |
||
385 | objPersist.setXMLEntity(xmlProp); |
||
386 | 10627 | caballero | |
387 | 9072 | jmvivo | } |
388 | String propName = xmlProp.getStringProperty("layerPropertyName"); |
||
389 | properties.put(propName, obj); |
||
390 | 7867 | sbayarri | } catch (Exception e) { |
391 | 9072 | jmvivo | //FIXME: OJO !!!!!
|
392 | 7867 | sbayarri | continue;
|
393 | } |
||
394 | 9072 | jmvivo | } |
395 | 7867 | sbayarri | // remove Properties children to avoid breaking layers' XML reading logic
|
396 | 10627 | caballero | xml.removeChild(xmlPropertiesPos); |
397 | 7867 | sbayarri | } |
398 | 10627 | caballero | |
399 | 525 | vcaballero | } |
400 | 694 | fernando | |
401 | /**
|
||
402 | 2183 | fernando | * Inserta los valores de los atributos del XMLEntity al objeto.
|
403 | 7867 | sbayarri | *
|
404 | 5923 | fjp | * @param xml
|
405 | * XMLEntity.
|
||
406 | 7867 | sbayarri | *
|
407 | 2183 | fernando | * @throws XMLException
|
408 | * @throws DriverException
|
||
409 | * @throws DriverIOException
|
||
410 | */
|
||
411 | 5923 | fjp | public void setXMLEntity03(XMLEntity xml) throws XMLException { |
412 | 7463 | azabala | // active = xml.getBooleanProperty("active");
|
413 | status.active = xml.getBooleanProperty("active");
|
||
414 | 2183 | fernando | name = xml.getStringProperty("name");
|
415 | 5923 | fjp | minScale = xml.getDoubleProperty("minScale");
|
416 | maxScale = xml.getDoubleProperty("maxScale");
|
||
417 | 7463 | azabala | // visible = xml.getBooleanProperty("visible");
|
418 | status.visible = xml.getBooleanProperty("visible");
|
||
419 | 2183 | fernando | if (xml.contains("proj")) { |
420 | 6164 | luisw2 | setProjection(CRSFactory.getCRS(xml.getStringProperty("proj")));
|
421 | 2183 | fernando | } |
422 | if (xml.contains("transparency")) |
||
423 | transparency = xml.getIntProperty("transparency");
|
||
424 | } |
||
425 | |||
426 | /**
|
||
427 | 6881 | cesar | * @see com.iver.cit.gvsig.fmap.layers.FLayer#getMapContext()
|
428 | 694 | fernando | */
|
429 | 6881 | cesar | public MapContext getMapContext() {
|
430 | 884 | fernando | if (getParentLayer() != null) { |
431 | 6881 | cesar | return getParentLayer().getMapContext();
|
432 | 884 | fernando | } else {
|
433 | return null; |
||
434 | } |
||
435 | 694 | fernando | } |
436 | |||
437 | 884 | fernando | /**
|
438 | 1034 | vcaballero | * A?ade a la lista de listener un nuevo LayerListener.
|
439 | 7867 | sbayarri | *
|
440 | 5923 | fjp | * @param o
|
441 | * LayerListener.
|
||
442 | 7867 | sbayarri | *
|
443 | 1034 | vcaballero | * @return boolean.
|
444 | 884 | fernando | */
|
445 | 727 | fernando | public boolean addLayerListener(LayerListener o) { |
446 | 4370 | caballero | if (layerListeners.contains(o))
|
447 | return false; |
||
448 | 727 | fernando | return layerListeners.add(o);
|
449 | } |
||
450 | 5908 | caballero | public LayerListener[] getLayerListeners() { |
451 | return (LayerListener[])layerListeners.toArray(new LayerListener[0]); |
||
452 | } |
||
453 | 884 | fernando | /**
|
454 | 1034 | vcaballero | * Borra de la lista de listeners el que se pasa como par?metro.
|
455 | 7867 | sbayarri | *
|
456 | 5923 | fjp | * @param o
|
457 | * LayerListener a borrar.
|
||
458 | 7867 | sbayarri | *
|
459 | 1034 | vcaballero | * @return True si ha sido correcto el borrado del Listener.
|
460 | 884 | fernando | */
|
461 | 727 | fernando | public boolean removeLayerListener(LayerListener o) { |
462 | return layerListeners.remove(o);
|
||
463 | } |
||
464 | 884 | fernando | |
465 | /**
|
||
466 | 1034 | vcaballero | * Llamada al metodo nameChanged de los Listeners dados de alta.
|
467 | 7867 | sbayarri | *
|
468 | 5923 | fjp | * @param e
|
469 | * LayerEvent.
|
||
470 | 884 | fernando | */
|
471 | private void callNameChanged(LayerEvent e) { |
||
472 | 727 | fernando | for (Iterator iter = layerListeners.iterator(); iter.hasNext();) { |
473 | LayerListener listener = (LayerListener) iter.next(); |
||
474 | 884 | fernando | |
475 | 727 | fernando | listener.nameChanged(e); |
476 | } |
||
477 | } |
||
478 | 884 | fernando | |
479 | /**
|
||
480 | 1034 | vcaballero | * Llamada al m?todo visibilityChanged de los Listeners.
|
481 | 7867 | sbayarri | *
|
482 | 5923 | fjp | * @param e
|
483 | * LayerEvent.
|
||
484 | 884 | fernando | */
|
485 | private void callVisibilityChanged(LayerEvent e) { |
||
486 | 727 | fernando | for (Iterator iter = layerListeners.iterator(); iter.hasNext();) { |
487 | LayerListener listener = (LayerListener) iter.next(); |
||
488 | 884 | fernando | |
489 | 727 | fernando | listener.visibilityChanged(e); |
490 | } |
||
491 | } |
||
492 | 884 | fernando | |
493 | /**
|
||
494 | 1034 | vcaballero | * Llamada al m?todo activationChanged de los Listener.
|
495 | 7867 | sbayarri | *
|
496 | 5923 | fjp | * @param e
|
497 | * LayerEvent.
|
||
498 | 884 | fernando | */
|
499 | private void callActivationChanged(LayerEvent e) { |
||
500 | 727 | fernando | for (Iterator iter = layerListeners.iterator(); iter.hasNext();) { |
501 | LayerListener listener = (LayerListener) iter.next(); |
||
502 | 884 | fernando | |
503 | 727 | fernando | listener.activationChanged(e); |
504 | } |
||
505 | } |
||
506 | 745 | fjp | |
507 | 884 | fernando | /**
|
508 | 1034 | vcaballero | * Devuelve las capas virtuales.
|
509 | 7867 | sbayarri | *
|
510 | 1034 | vcaballero | * @return FLayers.
|
511 | 884 | fernando | */
|
512 | 745 | fjp | public FLayers getVirtualLayers() {
|
513 | return virtualLayers;
|
||
514 | } |
||
515 | 884 | fernando | |
516 | /**
|
||
517 | 1034 | vcaballero | * Inserta las capas virtuales.
|
518 | 7867 | sbayarri | *
|
519 | 5923 | fjp | * @param virtualLayers
|
520 | * FLayers.
|
||
521 | 884 | fernando | */
|
522 | 745 | fjp | public void setVirtualLayers(FLayers virtualLayers) { |
523 | this.virtualLayers = virtualLayers;
|
||
524 | } |
||
525 | 884 | fernando | |
526 | /**
|
||
527 | 4479 | fjp | * Inserta la Transformaci?n de coordenadas.
|
528 | 7867 | sbayarri | *
|
529 | 5923 | fjp | * @param ct
|
530 | * Transformaci?n de coordenadas.
|
||
531 | 885 | fjp | */
|
532 | public void setCoordTrans(ICoordTrans ct) { |
||
533 | this.ct = ct;
|
||
534 | } |
||
535 | |||
536 | /**
|
||
537 | 4479 | fjp | * Devuelve las transformaci?n de coordenadas.
|
538 | 7867 | sbayarri | *
|
539 | 4479 | fjp | * @return ct.
|
540 | 885 | fjp | */
|
541 | public ICoordTrans getCoordTrans() {
|
||
542 | return ct;
|
||
543 | } |
||
544 | 5908 | caballero | |
545 | 4376 | nacho | /**
|
546 | 5923 | fjp | * M?todo que es llamado por Flayers para notificar a la capa que va a ser
|
547 | * a?adida. Esta previa notificaci?n es util para las capas que necesitan
|
||
548 | * hacer algo antes de ser a?adida. Por ejemplo, el raster necesita volver a
|
||
549 | * abrir el fichero que ha podido ser cerrado con anterioridad. Si no se
|
||
550 | * redefine este m?todo no se har? nada ya que este es vacio.
|
||
551 | 10627 | caballero | * @throws LoadLayerException
|
552 | 4376 | nacho | */
|
553 | 10627 | caballero | public void wakeUp() throws LoadLayerException { |
554 | 5923 | fjp | } |
555 | 5908 | caballero | |
556 | 5923 | fjp | public double getMinScale() { |
557 | return minScale;
|
||
558 | } |
||
559 | 1176 | fjp | |
560 | 5923 | fjp | /*
|
561 | * (non-Javadoc)
|
||
562 | 7867 | sbayarri | *
|
563 | 5923 | fjp | * @see com.iver.cit.gvsig.fmap.layers.FLayer#getMaxScale()
|
564 | */
|
||
565 | public double getMaxScale() { |
||
566 | return maxScale;
|
||
567 | } |
||
568 | 5908 | caballero | |
569 | 5923 | fjp | public void setMinScale(double minScale) { |
570 | this.minScale = minScale;
|
||
571 | } |
||
572 | 5908 | caballero | |
573 | 5923 | fjp | public void setMaxScale(double maxScale) { |
574 | this.maxScale = maxScale;
|
||
575 | } |
||
576 | 5908 | caballero | |
577 | 5923 | fjp | public boolean isWithinScale(double scale) { |
578 | 5908 | caballero | |
579 | 5923 | fjp | boolean bVisible = true; |
580 | if (getMinScale() != -1) { |
||
581 | if (scale < getMinScale())
|
||
582 | bVisible = false;
|
||
583 | } |
||
584 | if (getMaxScale() != -1) { |
||
585 | if (scale > getMaxScale())
|
||
586 | bVisible = false;
|
||
587 | } |
||
588 | 5908 | caballero | |
589 | 5923 | fjp | return bVisible;
|
590 | } |
||
591 | 3690 | caballero | |
592 | 5923 | fjp | public Strategy getStrategy() {
|
593 | return privateStrategy;
|
||
594 | } |
||
595 | |||
596 | public void setStrategy(Strategy s) { |
||
597 | privateStrategy = s; |
||
598 | } |
||
599 | |||
600 | 10627 | caballero | public void setEditing(boolean b) throws StartEditionLayerException { |
601 | 7463 | azabala | // isediting = b;
|
602 | status.editing = b; |
||
603 | 6002 | fjp | setDirty(true);
|
604 | setCachingDrawnLayers(b); |
||
605 | 3690 | caballero | } |
606 | 5923 | fjp | |
607 | 4147 | fjp | protected void callEditionChanged(LayerEvent e) { |
608 | 4144 | fjp | for (Iterator iter = layerListeners.iterator(); iter.hasNext();) { |
609 | LayerListener listener = (LayerListener) iter.next(); |
||
610 | |||
611 | listener.editionChanged(e); |
||
612 | } |
||
613 | } |
||
614 | |||
615 | 5923 | fjp | public boolean isEditing() { |
616 | 7463 | azabala | // return isediting;
|
617 | return status.editing;
|
||
618 | 3690 | caballero | } |
619 | 5908 | caballero | |
620 | 5923 | fjp | public ImageIcon getTocImageIcon() { |
621 | return null; |
||
622 | } |
||
623 | 5908 | caballero | |
624 | 5923 | fjp | public boolean isInTOC() { |
625 | 7463 | azabala | // return isInTOC;
|
626 | return status.inTOC;
|
||
627 | 5923 | fjp | } |
628 | |||
629 | /* (non-Javadoc)
|
||
630 | * @see com.iver.cit.gvsig.fmap.layers.FLayer#isCachingDrawnLayers()
|
||
631 | */
|
||
632 | public boolean isCachingDrawnLayers() { |
||
633 | 7463 | azabala | // return bCacheDrawnLayers;
|
634 | return status.cacheDrawnLayers;
|
||
635 | 5923 | fjp | } |
636 | |||
637 | /* (non-Javadoc)
|
||
638 | * @see com.iver.cit.gvsig.fmap.layers.FLayer#setCachingDrawnLayers(boolean)
|
||
639 | */
|
||
640 | public void setCachingDrawnLayers(boolean bCacheDrawnLayers) { |
||
641 | 7463 | azabala | // this.bCacheDrawnLayers = bCacheDrawnLayers;
|
642 | status.cacheDrawnLayers = bCacheDrawnLayers; |
||
643 | if (status.cacheDrawnLayers == false) |
||
644 | 5997 | fjp | this.cacheImageDrawnLayers = null; |
645 | 5923 | fjp | } |
646 | |||
647 | public BufferedImage getCacheImageDrawnLayers() { |
||
648 | return cacheImageDrawnLayers;
|
||
649 | } |
||
650 | |||
651 | public void setCacheImageDrawnLayers(BufferedImage cacheImageDrawnLayers) { |
||
652 | this.cacheImageDrawnLayers = cacheImageDrawnLayers;
|
||
653 | } |
||
654 | |||
655 | public boolean isDirty() { |
||
656 | 7463 | azabala | return status.dirty;
|
657 | 5923 | fjp | } |
658 | |||
659 | public void setDirty(boolean dirty) { |
||
660 | 7463 | azabala | status.dirty = dirty; |
661 | 5923 | fjp | } |
662 | 7867 | sbayarri | |
663 | 6543 | jmvivo | public boolean isAvailable() { |
664 | 7463 | azabala | return status.available;
|
665 | 6400 | jmvivo | } |
666 | 7867 | sbayarri | |
667 | 6532 | jmvivo | public void setAvailable(boolean available) { |
668 | 7463 | azabala | status.available = available; |
669 | 6400 | jmvivo | } |
670 | 7867 | sbayarri | |
671 | 10627 | caballero | public void reload() throws ReloadLayerException { |
672 | 6532 | jmvivo | this.setAvailable(true); |
673 | } |
||
674 | 7867 | sbayarri | |
675 | 7463 | azabala | /**
|
676 | * Returns the status of the layer
|
||
677 | */
|
||
678 | public FLayerStatus getFLayerStatus(){
|
||
679 | return status;
|
||
680 | } |
||
681 | /**
|
||
682 | * Sets the status of the layer
|
||
683 | * @param status
|
||
684 | */
|
||
685 | public void setFLayerStatus(FLayerStatus status){ |
||
686 | this.status = status;
|
||
687 | } |
||
688 | 7867 | sbayarri | |
689 | 7463 | azabala | /*
|
690 | * This stuff is to save error's info that causes
|
||
691 | * unavailable status.
|
||
692 | * */
|
||
693 | 7867 | sbayarri | |
694 | 7463 | azabala | public boolean isOk(){ |
695 | return status.isOk();
|
||
696 | } |
||
697 | 7867 | sbayarri | |
698 | 7463 | azabala | public int getNumErrors(){ |
699 | return status.getNumErrors();
|
||
700 | } |
||
701 | 7867 | sbayarri | |
702 | 10627 | caballero | public BaseException getError(int i){ |
703 | 7463 | azabala | return status.getError(i);
|
704 | } |
||
705 | 7867 | sbayarri | |
706 | 7463 | azabala | public List getErrors(){ |
707 | return status.getErrors();
|
||
708 | } |
||
709 | 7867 | sbayarri | |
710 | 10627 | caballero | public void addError(BaseException exception){ |
711 | status.addLayerError(exception); |
||
712 | 7463 | azabala | } |
713 | 7867 | sbayarri | |
714 | 6532 | jmvivo | public boolean visibleRequired() { |
715 | 7463 | azabala | return status.visible;
|
716 | 6532 | jmvivo | } |
717 | 7867 | sbayarri | |
718 | 6532 | jmvivo | public String getInfoString() { |
719 | return null; |
||
720 | } |
||
721 | 5923 | fjp | |
722 | 6856 | fjp | public boolean isWritable() { |
723 | 7463 | azabala | return status.writable;
|
724 | 6856 | fjp | } |
725 | 10627 | caballero | |
726 | 9923 | fjp | /* (non-Javadoc)
|
727 | * @see com.iver.cit.gvsig.fmap.layers.FLayer#cloneLayer()
|
||
728 | */
|
||
729 | public FLayer cloneLayer() throws Exception { |
||
730 | return this; |
||
731 | } |
||
732 | 5923 | fjp | |
733 | 10932 | jmvivo | /* By default this operation is not suported
|
734 | *
|
||
735 | * @see com.iver.cit.gvsig.fmap.layers.FLayer#newComposedLayer()
|
||
736 | */
|
||
737 | public ComposedLayer newComposedLayer() {
|
||
738 | return null; |
||
739 | } |
||
740 | 6856 | fjp | |
741 | 10932 | jmvivo | |
742 | 214 | fernando | } |