svn-gvsig-desktop / branches / v10 / extensions / extCAD / src / com / iver / cit / gvsig / StopEditing.java @ 19154
History | View | Annotate | Download (15.8 KB)
1 | 4421 | fjp | package com.iver.cit.gvsig; |
---|---|---|---|
2 | |||
3 | 5807 | caballero | import java.awt.Component; |
4 | 5267 | fjp | import java.io.IOException; |
5 | 12586 | caballero | import java.util.ArrayList; |
6 | 5267 | fjp | |
7 | 12586 | caballero | import javax.swing.ImageIcon; |
8 | 5267 | fjp | import javax.swing.JOptionPane; |
9 | |||
10 | 6312 | caballero | import com.hardcode.gdbms.engine.instruction.FieldNotFoundException; |
11 | 4421 | fjp | import com.iver.andami.PluginServices; |
12 | 5267 | fjp | import com.iver.andami.messages.NotificationManager; |
13 | 4421 | fjp | import com.iver.andami.plugins.Extension; |
14 | 12586 | caballero | import com.iver.andami.plugins.IExtension; |
15 | import com.iver.andami.plugins.status.IExtensionStatus; |
||
16 | import com.iver.andami.plugins.status.IUnsavedData; |
||
17 | import com.iver.andami.plugins.status.UnsavedData; |
||
18 | 5558 | fjp | import com.iver.cit.gvsig.fmap.DriverException; |
19 | 6878 | cesar | import com.iver.cit.gvsig.fmap.MapContext; |
20 | 4421 | fjp | import com.iver.cit.gvsig.fmap.MapControl; |
21 | 12549 | caballero | import com.iver.cit.gvsig.fmap.drivers.DriverIOException; |
22 | 6483 | fjp | import com.iver.cit.gvsig.fmap.drivers.FieldDescription; |
23 | 5558 | fjp | import com.iver.cit.gvsig.fmap.drivers.ILayerDefinition; |
24 | 6472 | caballero | import com.iver.cit.gvsig.fmap.drivers.shp.IndexedShpDriver; |
25 | 5184 | caballero | import com.iver.cit.gvsig.fmap.edition.EditionEvent; |
26 | 4421 | fjp | import com.iver.cit.gvsig.fmap.edition.EditionException; |
27 | 4430 | fjp | import com.iver.cit.gvsig.fmap.edition.ISpatialWriter; |
28 | 4421 | fjp | import com.iver.cit.gvsig.fmap.edition.VectorialEditableAdapter; |
29 | import com.iver.cit.gvsig.fmap.layers.FLayer; |
||
30 | import com.iver.cit.gvsig.fmap.layers.FLayers; |
||
31 | 9394 | caballero | import com.iver.cit.gvsig.fmap.layers.FLyrAnnotation; |
32 | 4421 | fjp | import com.iver.cit.gvsig.fmap.layers.FLyrVect; |
33 | 12645 | jmvivo | import com.iver.cit.gvsig.fmap.layers.LayersIterator; |
34 | 6312 | caballero | import com.iver.cit.gvsig.fmap.rendering.VectorialLegend; |
35 | 6002 | fjp | import com.iver.cit.gvsig.layers.VectorialLayerEdited; |
36 | 8765 | jjdelcerro | import com.iver.cit.gvsig.project.documents.table.gui.Table; |
37 | import com.iver.cit.gvsig.project.documents.view.IProjectView; |
||
38 | 12600 | cesar | import com.iver.cit.gvsig.project.documents.view.ProjectView; |
39 | 12586 | caballero | import com.iver.cit.gvsig.project.documents.view.ProjectViewFactory; |
40 | 8765 | jjdelcerro | import com.iver.cit.gvsig.project.documents.view.gui.View; |
41 | 12549 | caballero | import com.iver.cit.gvsig.project.documents.view.legend.CreateSpatialIndexMonitorableTask; |
42 | 12586 | caballero | import com.iver.utiles.swing.threads.IMonitorableTask; |
43 | 4421 | fjp | |
44 | /**
|
||
45 | * @author Francisco Jos?
|
||
46 | 5482 | caballero | *
|
47 | 4430 | fjp | * Cuando un tema se pone en edici?n, puede que su driver implemente
|
48 | * ISpatialWriter. En ese caso, es capaz de guardarse sobre s? mismo. Si no lo
|
||
49 | * implementa, esta opci?n estar? deshabilitada y la ?nica posibilidad de
|
||
50 | * guardar este tema ser? "Guardando como..."
|
||
51 | 4421 | fjp | */
|
52 | 5005 | jorpiell | public class StopEditing extends Extension { |
53 | 4430 | fjp | private View vista; |
54 | |||
55 | 4421 | fjp | /**
|
56 | 5005 | jorpiell | * @see com.iver.andami.plugins.IExtension#initialize()
|
57 | 4430 | fjp | */
|
58 | 5005 | jorpiell | public void initialize() { |
59 | 4430 | fjp | } |
60 | 4421 | fjp | |
61 | 4430 | fjp | /**
|
62 | 5005 | jorpiell | * @see com.iver.andami.plugins.IExtension#execute(java.lang.String)
|
63 | 4430 | fjp | */
|
64 | public void execute(String s) { |
||
65 | 6877 | cesar | com.iver.andami.ui.mdiManager.IWindow f = PluginServices.getMDIManager() |
66 | 6880 | cesar | .getActiveWindow(); |
67 | 4421 | fjp | |
68 | 4430 | fjp | vista = (View) f;
|
69 | 5807 | caballero | boolean isStop=false; |
70 | 8765 | jjdelcerro | IProjectView model = vista.getModel(); |
71 | 6878 | cesar | MapContext mapa = model.getMapContext(); |
72 | 4430 | fjp | FLayers layers = mapa.getLayers(); |
73 | 4475 | fjp | EditionManager edMan = CADExtension.getEditionManager(); |
74 | 4430 | fjp | if (s.equals("STOPEDITING")) { |
75 | 18452 | vcaballero | vista.getMapControl().getCanceldraw().setCanceled(true);
|
76 | 4430 | fjp | FLayer[] actives = layers.getActives();
|
77 | // TODO: Comprobar que solo hay una activa, o al menos
|
||
78 | // que solo hay una en edici?n que est? activa, etc, etc
|
||
79 | for (int i = 0; i < actives.length; i++) { |
||
80 | if (actives[i] instanceof FLyrVect && actives[i].isEditing()) { |
||
81 | FLyrVect lv = (FLyrVect) actives[i]; |
||
82 | 6604 | caballero | MapControl mapControl = vista.getMapControl(); |
83 | 6002 | fjp | VectorialLayerEdited lyrEd = (VectorialLayerEdited) edMan.getActiveLayerEdited(); |
84 | lyrEd.clearSelection(); |
||
85 | 5807 | caballero | isStop=stopEditing(lv, mapControl); |
86 | 7830 | jmvivo | if (isStop){
|
87 | 9394 | caballero | lv.removeLayerListener(edMan); |
88 | if (lv instanceof FLyrAnnotation){ |
||
89 | FLyrAnnotation lva=(FLyrAnnotation)lv; |
||
90 | lva.setMapping(lva.getMapping()); |
||
91 | } |
||
92 | 7830 | jmvivo | } |
93 | 4430 | fjp | } |
94 | } |
||
95 | 5807 | caballero | if (isStop) {
|
96 | vista.getMapControl().setTool("zoomIn");
|
||
97 | vista.hideConsole(); |
||
98 | 6002 | fjp | vista.repaintMap(); |
99 | 7830 | jmvivo | CADExtension.clearView(); |
100 | 9394 | caballero | |
101 | 5807 | caballero | } |
102 | 4430 | fjp | } |
103 | PluginServices.getMainFrame().enableControls(); |
||
104 | } |
||
105 | 4421 | fjp | |
106 | 4430 | fjp | /**
|
107 | 5005 | jorpiell | * @see com.iver.andami.plugins.IExtension#isEnabled()
|
108 | 4430 | fjp | */
|
109 | 5267 | fjp | public boolean isEnabled() { |
110 | 4430 | fjp | FLayer[] lyrs = EditionUtilities.getActiveAndEditedLayers();
|
111 | 5267 | fjp | if (lyrs == null) |
112 | return false; |
||
113 | 4430 | fjp | FLyrVect lyrVect = (FLyrVect) lyrs[0];
|
114 | 5267 | fjp | if (lyrVect.getSource() instanceof VectorialEditableAdapter) { |
115 | 5807 | caballero | return true; |
116 | 4950 | caballero | } |
117 | return false; |
||
118 | 5267 | fjp | } |
119 | 4430 | fjp | /**
|
120 | * DOCUMENT ME!
|
||
121 | */
|
||
122 | 5807 | caballero | public boolean stopEditing(FLyrVect layer, MapControl mapControl) { |
123 | 12586 | caballero | |
124 | 5267 | fjp | VectorialEditableAdapter vea = (VectorialEditableAdapter) layer |
125 | .getSource(); |
||
126 | 5807 | caballero | int resp = JOptionPane.NO_OPTION; |
127 | 4950 | caballero | |
128 | 4421 | fjp | try {
|
129 | 6856 | fjp | if (layer.isWritable()) {
|
130 | 5807 | caballero | resp = JOptionPane.showConfirmDialog((Component) PluginServices |
131 | .getMainFrame(), PluginServices.getText(this,
|
||
132 | "realmente_desea_guardar_la_capa")
|
||
133 | 12159 | caballero | + " : " + layer.getName()+"?", PluginServices.getText(this, |
134 | 5807 | caballero | "guardar"), JOptionPane.YES_NO_OPTION); |
135 | if (resp != JOptionPane.YES_OPTION) { // CANCEL EDITING |
||
136 | cancelEdition(layer); |
||
137 | } else { // GUARDAMOS EL TEMA |
||
138 | saveLayer(layer); |
||
139 | 5267 | fjp | } |
140 | 5807 | caballero | vea.getCommandRecord().removeCommandListener(mapControl); |
141 | layer.setEditing(false);
|
||
142 | 12549 | caballero | if (layer.isSpatiallyIndexed())
|
143 | { |
||
144 | if(layer.getISpatialIndex() != null) |
||
145 | { |
||
146 | try {
|
||
147 | PluginServices. |
||
148 | cancelableBackgroundExecution(new CreateSpatialIndexMonitorableTask((FLyrVect)layer));
|
||
149 | } catch (DriverIOException e) {
|
||
150 | NotificationManager.addError(e); |
||
151 | } catch (DriverException e) {
|
||
152 | NotificationManager.addError(e); |
||
153 | } |
||
154 | } |
||
155 | } |
||
156 | 5807 | caballero | return true; |
157 | 6604 | caballero | } |
158 | // Si no existe writer para la capa que tenemos en edici?n
|
||
159 | 5807 | caballero | resp = JOptionPane
|
160 | .showConfirmDialog( |
||
161 | (Component) PluginServices.getMainFrame(),
|
||
162 | PluginServices |
||
163 | .getText( |
||
164 | this,
|
||
165 | 6856 | fjp | "no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar")
|
166 | 5807 | caballero | + " : " + layer.getName(),
|
167 | 6856 | fjp | PluginServices.getText(this, "cancelar_edicion"), |
168 | 5807 | caballero | JOptionPane.YES_NO_OPTION);
|
169 | if (resp == JOptionPane.YES_OPTION) { // CANCEL EDITING |
||
170 | cancelEdition(layer); |
||
171 | vea.getCommandRecord().removeCommandListener(mapControl); |
||
172 | 6472 | caballero | if (!(layer.getSource().getDriver() instanceof IndexedShpDriver)){ |
173 | VectorialLayerEdited vle=(VectorialLayerEdited)CADExtension.getEditionManager().getLayerEdited(layer); |
||
174 | layer.setLegend((VectorialLegend)vle.getLegend()); |
||
175 | } |
||
176 | 13417 | caballero | layer.setEditing(false);
|
177 | 5807 | caballero | return true; |
178 | 5571 | jmvivo | } |
179 | 6604 | caballero | |
180 | 4421 | fjp | } catch (EditionException e) {
|
181 | 5267 | fjp | NotificationManager.addError(e); |
182 | } catch (IOException e) { |
||
183 | NotificationManager.addError(e); |
||
184 | 5558 | fjp | } catch (DriverException e) {
|
185 | 5807 | caballero | NotificationManager.addError(e); |
186 | 6312 | caballero | } catch (FieldNotFoundException e) {
|
187 | 12549 | caballero | NotificationManager.addError(e); |
188 | 4421 | fjp | } |
189 | 5807 | caballero | return false; |
190 | 4950 | caballero | |
191 | 5267 | fjp | } |
192 | |||
193 | 5807 | caballero | |
194 | private void saveLayer(FLyrVect layer) throws DriverException, |
||
195 | EditionException { |
||
196 | 12642 | caballero | layer.setProperty("stoppingEditing",new Boolean(true)); |
197 | 5807 | caballero | VectorialEditableAdapter vea = (VectorialEditableAdapter) layer |
198 | .getSource(); |
||
199 | |||
200 | ISpatialWriter writer = (ISpatialWriter) vea.getWriter(); |
||
201 | 6877 | cesar | com.iver.andami.ui.mdiManager.IWindow[] views = PluginServices
|
202 | 6880 | cesar | .getMDIManager().getAllWindows(); |
203 | 5807 | caballero | for (int j = 0; j < views.length; j++) { |
204 | if (views[j] instanceof Table) { |
||
205 | Table table = (Table) views[j]; |
||
206 | if (table.getModel().getAssociatedTable() != null |
||
207 | && table.getModel().getAssociatedTable().equals(layer)) { |
||
208 | table.stopEditingCell(); |
||
209 | } |
||
210 | } |
||
211 | } |
||
212 | 6483 | fjp | vea.cleanSelectableDatasource(); |
213 | 6604 | caballero | layer.setRecordset(vea.getRecordset()); // Queremos que el recordset del layer
|
214 | 6483 | fjp | // refleje los cambios en los campos.
|
215 | 5807 | caballero | ILayerDefinition lyrDef = EditionUtilities.createLayerDefinition(layer); |
216 | 6483 | fjp | String aux="FIELDS:"; |
217 | 6604 | caballero | FieldDescription[] flds = lyrDef.getFieldsDesc();
|
218 | 6483 | fjp | for (int i=0; i < flds.length; i++) |
219 | { |
||
220 | 6604 | caballero | aux = aux + ", " + flds[i].getFieldAlias();
|
221 | 6483 | fjp | } |
222 | 6604 | caballero | System.err.println("Escribiendo la capa " + lyrDef.getName() + |
223 | 6483 | fjp | " con los campos " + aux);
|
224 | 19154 | vcaballero | lyrDef.setShapeType(layer.getShapeType()); |
225 | 5807 | caballero | writer.initialize(lyrDef); |
226 | vea.stopEdition(writer, EditionEvent.GRAPHIC); |
||
227 | 12642 | caballero | layer.setProperty("stoppingEditing",new Boolean(false)); |
228 | 5807 | caballero | } |
229 | |||
230 | private void cancelEdition(FLyrVect layer) throws IOException { |
||
231 | 12642 | caballero | layer.setProperty("stoppingEditing",new Boolean(true)); |
232 | 6877 | cesar | com.iver.andami.ui.mdiManager.IWindow[] views = PluginServices
|
233 | 6880 | cesar | .getMDIManager().getAllWindows(); |
234 | 11468 | caballero | VectorialEditableAdapter vea = (VectorialEditableAdapter) layer |
235 | .getSource(); |
||
236 | vea.cancelEdition(EditionEvent.GRAPHIC); |
||
237 | 5807 | caballero | for (int j = 0; j < views.length; j++) { |
238 | if (views[j] instanceof Table) { |
||
239 | Table table = (Table) views[j]; |
||
240 | if (table.getModel().getAssociatedTable() != null |
||
241 | && table.getModel().getAssociatedTable().equals(layer)) { |
||
242 | table.cancelEditing(); |
||
243 | } |
||
244 | } |
||
245 | } |
||
246 | 12642 | caballero | layer.setProperty("stoppingEditing",new Boolean(false)); |
247 | 5807 | caballero | } |
248 | 4430 | fjp | /**
|
249 | 5005 | jorpiell | * @see com.iver.andami.plugins.IExtension#isVisible()
|
250 | 4430 | fjp | */
|
251 | public boolean isVisible() { |
||
252 | if (EditionUtilities.getEditionStatus() == EditionUtilities.EDITION_STATUS_ONE_VECTORIAL_LAYER_ACTIVE_AND_EDITABLE)
|
||
253 | return true; |
||
254 | 6604 | caballero | return false; |
255 | 4421 | fjp | |
256 | 4430 | fjp | } |
257 | 12586 | caballero | |
258 | public IExtensionStatus getStatus() {
|
||
259 | return new StopEditingStatus(); |
||
260 | } |
||
261 | 12591 | caballero | /**
|
262 | * Show the dialogs to save the layer without ask if don't like to save.
|
||
263 | * @param layer Layer to save.
|
||
264 | */
|
||
265 | 12634 | caballero | public boolean executeSaveLayer(FLyrVect layer ) { |
266 | 12586 | caballero | EditionManager edMan = CADExtension.getEditionManager(); |
267 | VectorialLayerEdited lyrEd = (VectorialLayerEdited) edMan.getLayerEdited(layer); |
||
268 | lyrEd.clearSelection(); |
||
269 | boolean isStop=false; |
||
270 | if (layer.isWritable()) {
|
||
271 | try {
|
||
272 | saveLayer((FLyrVect)layer); |
||
273 | layer.setEditing(false);
|
||
274 | if (layer.isSpatiallyIndexed())
|
||
275 | { |
||
276 | if(layer.getISpatialIndex() != null) |
||
277 | { |
||
278 | try {
|
||
279 | PluginServices. |
||
280 | cancelableBackgroundExecution(new CreateSpatialIndexMonitorableTask((FLyrVect)layer));
|
||
281 | } catch (DriverIOException e) {
|
||
282 | 12642 | caballero | PluginServices.getLogger().error(e.getMessage(),e); |
283 | // NotificationManager.addError(e.getMessage(),e);
|
||
284 | 12586 | caballero | } catch (DriverException e) {
|
285 | 12642 | caballero | PluginServices.getLogger().error(e.getMessage(),e); |
286 | // NotificationManager.addError(e.getMessage(),e);
|
||
287 | 12586 | caballero | } |
288 | } |
||
289 | } |
||
290 | |||
291 | } catch (DriverException e) {
|
||
292 | 12642 | caballero | PluginServices.getLogger().error(e.getMessage(),e); |
293 | // NotificationManager.addError(e.getMessage(),e);
|
||
294 | 12634 | caballero | return isStop;
|
295 | 12586 | caballero | } catch (EditionException e) {
|
296 | 12642 | caballero | PluginServices.getLogger().error(e.getMessage(),e); |
297 | // NotificationManager.addError(e.getMessage(),e);
|
||
298 | 12634 | caballero | return isStop;
|
299 | 12586 | caballero | } |
300 | isStop=true;
|
||
301 | }else {
|
||
302 | // Si no existe writer para la capa que tenemos en edici?n
|
||
303 | int resp = JOptionPane |
||
304 | .showConfirmDialog( |
||
305 | (Component) PluginServices.getMainFrame(),
|
||
306 | PluginServices |
||
307 | .getText( |
||
308 | this,
|
||
309 | "no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar")
|
||
310 | + " : " + layer.getName(),
|
||
311 | PluginServices.getText(this, "cancelar_edicion"), |
||
312 | JOptionPane.YES_NO_OPTION);
|
||
313 | if (resp == JOptionPane.YES_OPTION) { // CANCEL EDITING |
||
314 | try {
|
||
315 | cancelEdition(layer); |
||
316 | 12683 | caballero | layer.setEditing(false);
|
317 | 12586 | caballero | if (!(layer.getSource().getDriver() instanceof IndexedShpDriver)){ |
318 | VectorialLayerEdited vle=(VectorialLayerEdited)CADExtension.getEditionManager().getLayerEdited(layer); |
||
319 | layer.setLegend((VectorialLegend)vle.getLegend()); |
||
320 | } |
||
321 | } catch (IOException e) { |
||
322 | 12642 | caballero | PluginServices.getLogger().error(e.getMessage(),e); |
323 | // NotificationManager.addError(e.getMessage(),e);
|
||
324 | 12634 | caballero | return isStop;
|
325 | 12586 | caballero | } catch (FieldNotFoundException e) {
|
326 | 12642 | caballero | PluginServices.getLogger().error(e.getMessage(),e); |
327 | // NotificationManager.addError(e);
|
||
328 | 12634 | caballero | return isStop;
|
329 | 12586 | caballero | } catch (DriverException e) {
|
330 | 12642 | caballero | PluginServices.getLogger().error(e.getMessage(),e); |
331 | // NotificationManager.addError(e);
|
||
332 | 12634 | caballero | return isStop;
|
333 | 12683 | caballero | } catch (EditionException e) {
|
334 | PluginServices.getLogger().error(e.getMessage(),e); |
||
335 | // NotificationManager.addError(e);
|
||
336 | return isStop;
|
||
337 | 12586 | caballero | } |
338 | isStop=true;
|
||
339 | } |
||
340 | |||
341 | } |
||
342 | // boolean isStop=stopEditing((FLyrVect)layer, null);
|
||
343 | if (isStop){
|
||
344 | layer.removeLayerListener(edMan); |
||
345 | if (layer instanceof FLyrAnnotation){ |
||
346 | FLyrAnnotation lva=(FLyrAnnotation)layer; |
||
347 | lva.setMapping(lva.getMapping()); |
||
348 | } |
||
349 | com.iver.andami.ui.mdiManager.IWindow f = PluginServices.getMDIManager() |
||
350 | .getActiveWindow(); |
||
351 | if (f instanceof View) { |
||
352 | vista = (View) f;
|
||
353 | if (vista.getMapControl().getMapContext().getLayers().getLayer(layer.getName()).equals(layer)) {
|
||
354 | vista.getMapControl().setTool("zoomIn");
|
||
355 | vista.hideConsole(); |
||
356 | vista.repaintMap(); |
||
357 | CADExtension.clearView(); |
||
358 | } |
||
359 | } |
||
360 | } |
||
361 | 12634 | caballero | return isStop;
|
362 | 12586 | caballero | } |
363 | |||
364 | private class UnsavedLayer extends UnsavedData{ |
||
365 | |||
366 | private FLayer layer;
|
||
367 | |||
368 | public UnsavedLayer(IExtension extension) {
|
||
369 | super(extension);
|
||
370 | } |
||
371 | |||
372 | public String getDescription() { |
||
373 | return PluginServices.getText(this,"editing_layer_unsaved"); |
||
374 | } |
||
375 | |||
376 | public String getResourceName() { |
||
377 | return layer.getName();
|
||
378 | } |
||
379 | |||
380 | |||
381 | |||
382 | 12634 | caballero | public boolean saveData() { |
383 | return executeSaveLayer((FLyrVect)layer);
|
||
384 | 12586 | caballero | } |
385 | |||
386 | public void setLayer(FLayer layer) { |
||
387 | this.layer=layer;
|
||
388 | |||
389 | } |
||
390 | |||
391 | public ImageIcon getIcon() { |
||
392 | return layer.getTocImageIcon();
|
||
393 | } |
||
394 | |||
395 | } |
||
396 | |||
397 | /**
|
||
398 | * <p>This class provides the status of extensions.
|
||
399 | * If this extension has some unsaved editing layer (and save them), and methods
|
||
400 | * to check if the extension has some associated background tasks.
|
||
401 | *
|
||
402 | * @author Vicente Caballero Navarro
|
||
403 | *
|
||
404 | */
|
||
405 | private class StopEditingStatus implements IExtensionStatus { |
||
406 | /**
|
||
407 | * This method is used to check if this extension has some unsaved editing layer.
|
||
408 | *
|
||
409 | * @return true if the extension has some unsaved editing layer, false otherwise.
|
||
410 | */
|
||
411 | public boolean hasUnsavedData() { |
||
412 | ProjectExtension pe=(ProjectExtension)PluginServices.getExtension(ProjectExtension.class); |
||
413 | 12600 | cesar | ProjectView[] views=(ProjectView[])pe.getProject().getDocumentsByType(ProjectViewFactory.registerName).toArray(new ProjectView[0]); |
414 | 12634 | caballero | |
415 | 12586 | caballero | for (int i=0;i<views.length;i++) { |
416 | 12600 | cesar | FLayers layers=views[i].getMapContext().getLayers(); |
417 | 12645 | jmvivo | LayersIterator iter = getEditingLayer(layers); |
418 | if (iter.hasNext()) {
|
||
419 | 12586 | caballero | return true; |
420 | } |
||
421 | } |
||
422 | return false; |
||
423 | } |
||
424 | /**
|
||
425 | * This method is used to check if the extension has some associated
|
||
426 | * background process which is currently running.
|
||
427 | *
|
||
428 | * @return true if the extension has some associated background process,
|
||
429 | * false otherwise.
|
||
430 | */
|
||
431 | public boolean hasRunningProcesses() { |
||
432 | return false; |
||
433 | } |
||
434 | /**
|
||
435 | * <p>Gets an array of the traceable background tasks associated with this
|
||
436 | * extension. These tasks may be tracked, canceled, etc.</p>
|
||
437 | *
|
||
438 | * @return An array of the associated background tasks, or null in case there is
|
||
439 | * no associated background tasks.
|
||
440 | */
|
||
441 | public IMonitorableTask[] getRunningProcesses() { |
||
442 | return null; |
||
443 | } |
||
444 | /**
|
||
445 | * <p>Gets an array of the UnsavedData objects, which contain information about
|
||
446 | * the unsaved editing layers and allows to save it.</p>
|
||
447 | *
|
||
448 | * @return An array of the associated unsaved editing layers, or null in case the extension
|
||
449 | * has not unsaved editing layers.
|
||
450 | */
|
||
451 | public IUnsavedData[] getUnsavedData() { |
||
452 | ProjectExtension pe=(ProjectExtension)PluginServices.getExtension(ProjectExtension.class); |
||
453 | 12600 | cesar | ProjectView[] views=(ProjectView[])pe.getProject().getDocumentsByType(ProjectViewFactory.registerName).toArray(new ProjectView[0]); |
454 | 12586 | caballero | ArrayList unsavedLayers=new ArrayList(); |
455 | for (int i=0;i<views.length;i++) { |
||
456 | 12600 | cesar | FLayers layers = views[i].getMapContext().getLayers(); |
457 | 12645 | jmvivo | LayersIterator iter = getEditingLayer(layers); |
458 | while (iter.hasNext()){
|
||
459 | 12586 | caballero | UnsavedLayer ul=new UnsavedLayer(StopEditing.this);
|
460 | 12645 | jmvivo | ul.setLayer(iter.nextLayer()); |
461 | 12586 | caballero | unsavedLayers.add(ul); |
462 | } |
||
463 | } |
||
464 | return (IUnsavedData[])unsavedLayers.toArray(new IUnsavedData[0]); |
||
465 | } |
||
466 | 12645 | jmvivo | |
467 | private LayersIterator getEditingLayer(FLayers layers){
|
||
468 | return new LayersIterator(layers){ |
||
469 | public boolean evaluate(FLayer layer) { |
||
470 | return layer.isEditing();
|
||
471 | } |
||
472 | }; |
||
473 | } |
||
474 | 12586 | caballero | } |
475 | 4421 | fjp | } |