Statistics
| Revision:

svn-gvsig-desktop / trunk / extensions / extCAD / src / com / iver / cit / gvsig / StopEditing.java @ 5558

History | View | Annotate | Download (4.71 KB)

1
package com.iver.cit.gvsig;
2

    
3
import java.io.IOException;
4

    
5
import javax.swing.JOptionPane;
6

    
7
import com.iver.andami.PluginServices;
8
import com.iver.andami.messages.NotificationManager;
9
import com.iver.andami.plugins.Extension;
10
import com.iver.cit.gvsig.fmap.DriverException;
11
import com.iver.cit.gvsig.fmap.FMap;
12
import com.iver.cit.gvsig.fmap.MapControl;
13
import com.iver.cit.gvsig.fmap.drivers.ILayerDefinition;
14
import com.iver.cit.gvsig.fmap.edition.EditionEvent;
15
import com.iver.cit.gvsig.fmap.edition.EditionException;
16
import com.iver.cit.gvsig.fmap.edition.ISpatialWriter;
17
import com.iver.cit.gvsig.fmap.edition.VectorialEditableAdapter;
18
import com.iver.cit.gvsig.fmap.layers.FLayer;
19
import com.iver.cit.gvsig.fmap.layers.FLayers;
20
import com.iver.cit.gvsig.fmap.layers.FLyrVect;
21
import com.iver.cit.gvsig.fmap.layers.SelectableDataSource;
22
import com.iver.cit.gvsig.gui.Table;
23
import com.iver.cit.gvsig.gui.View;
24
import com.iver.cit.gvsig.project.ProjectView;
25

    
26
/**
27
 * @author Francisco Jos?
28
 *
29
 * Cuando un tema se pone en edici?n, puede que su driver implemente
30
 * ISpatialWriter. En ese caso, es capaz de guardarse sobre s? mismo. Si no lo
31
 * implementa, esta opci?n estar? deshabilitada y la ?nica posibilidad de
32
 * guardar este tema ser? "Guardando como..."
33
 */
34
public class StopEditing extends Extension {
35
        private View vista;
36

    
37
        /**
38
         * @see com.iver.andami.plugins.IExtension#initialize()
39
         */
40
        public void initialize() {
41
        }
42

    
43
        /**
44
         * @see com.iver.andami.plugins.IExtension#execute(java.lang.String)
45
         */
46
        public void execute(String s) {
47
                com.iver.andami.ui.mdiManager.View f = PluginServices.getMDIManager()
48
                                .getActiveView();
49

    
50
                vista = (View) f;
51

    
52
                ProjectView model = vista.getModel();
53
                FMap mapa = model.getMapContext();
54
                FLayers layers = mapa.getLayers();
55
                EditionManager edMan = CADExtension.getEditionManager();
56
                if (s.equals("STOPEDITING")) {
57
                        FLayer[] actives = layers.getActives();
58
                        // TODO: Comprobar que solo hay una activa, o al menos
59
                        // que solo hay una en edici?n que est? activa, etc, etc
60
                        for (int i = 0; i < actives.length; i++) {
61
                                if (actives[i] instanceof FLyrVect && actives[i].isEditing()) {
62
                                        FLyrVect lv = (FLyrVect) actives[i];
63
                                        MapControl mapControl = (MapControl) vista.getMapControl();
64
                                        // VectorialLayerEdited lyrEd = (VectorialLayerEdited)
65
                                        // edMan.getActiveLayerEdited();
66
                                        // lyrEd.clearSelection();
67
                                        stopEditing(lv, mapControl);
68

    
69
                                        // return;
70
                                }
71
                        }
72
                        vista.getMapControl().setTool("zoomIn");
73
                        vista.hideConsole();
74
                }
75
                PluginServices.getMainFrame().enableControls();
76
        }
77

    
78
        /**
79
         * @see com.iver.andami.plugins.IExtension#isEnabled()
80
         */
81
        public boolean isEnabled() {
82
                FLayer[] lyrs = EditionUtilities.getActiveAndEditedLayers();
83
                if (lyrs == null)
84
                        return false;
85
                FLyrVect lyrVect = (FLyrVect) lyrs[0];
86
                if (lyrVect.getSource() instanceof VectorialEditableAdapter) {
87
                        if (!lyrVect.getSource().getDriver().isWritable())
88
                                return false;
89
                        VectorialEditableAdapter vea = (VectorialEditableAdapter) lyrVect
90
                                        .getSource();
91
                        if (vea.getDriver() instanceof ISpatialWriter)
92
                                return true;
93
                }
94
                return false;
95
        }
96

    
97
        /**
98
         * DOCUMENT ME!
99
         */
100
        public void stopEditing(FLyrVect layer, MapControl mapControl) {
101
                VectorialEditableAdapter vea = (VectorialEditableAdapter) layer
102
                                .getSource();
103

    
104
                ISpatialWriter writer = (ISpatialWriter) vea.getDriver();
105

    
106
                int resp = JOptionPane
107
                                .showConfirmDialog(null, PluginServices.getText(this,
108
                                                "realmente_desea_guardar_features_de_capa") + layer.getName(),
109
                                                PluginServices.getText(this,"Guardar"),
110
                                                JOptionPane.YES_NO_OPTION);
111
                try {
112
                        if (resp == JOptionPane.NO_OPTION) { // CANCEL EDITING
113
                                com.iver.andami.ui.mdiManager.View[] views = PluginServices
114
                                                .getMDIManager().getAllViews();
115
                                for (int j = 0; j < views.length; j++) {
116
                                        if (views[j] instanceof Table) {
117
                                                Table table = (Table) views[j];
118
                                                if (table.getModel().getAssociatedTable() != null
119
                                                                && table.getModel().getAssociatedTable()
120
                                                                                .equals(layer)) {
121
                                                        table.cancelEditing();
122
                                                }
123
                                        }
124
                                }
125
                        } else { // GUARDAMOS EL TEMA
126
                                ILayerDefinition lyrDef = EditionUtilities.createLayerDefinition(layer);
127
                                writer.initialize( lyrDef);
128
                                vea.stopEdition(writer, EditionEvent.GRAPHIC);
129
                        }
130
                        vea.getCommandRecord().removeCommandListener(mapControl);
131
                        layer.setEditing(false);
132
                } catch (EditionException e) {
133
                        NotificationManager.addError(e);
134

    
135
                } catch (IOException e) {
136
                        NotificationManager.addError(e);
137
                } catch (DriverException e) {
138
                        NotificationManager.addError(e);
139
                }
140

    
141
        }
142

    
143
        /**
144
         * @see com.iver.andami.plugins.IExtension#isVisible()
145
         */
146
        public boolean isVisible() {
147
                if (EditionUtilities.getEditionStatus() == EditionUtilities.EDITION_STATUS_ONE_VECTORIAL_LAYER_ACTIVE_AND_EDITABLE)
148
                        return true;
149
                else
150
                        return false;
151

    
152
        }
153
}