svn-gvsig-desktop / tags / v1_0_2_Build_909 / extensions / extCAD / src / com / iver / cit / gvsig / StopEditing.java @ 11150
History | View | Annotate | Download (7.31 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 | |||
6 | import javax.swing.JOptionPane; |
||
7 | |||
8 | 6312 | caballero | import com.hardcode.gdbms.engine.instruction.FieldNotFoundException; |
9 | 4421 | fjp | import com.iver.andami.PluginServices; |
10 | 5267 | fjp | import com.iver.andami.messages.NotificationManager; |
11 | 4421 | fjp | import com.iver.andami.plugins.Extension; |
12 | 5558 | fjp | import com.iver.cit.gvsig.fmap.DriverException; |
13 | 6878 | cesar | import com.iver.cit.gvsig.fmap.MapContext; |
14 | 4421 | fjp | import com.iver.cit.gvsig.fmap.MapControl; |
15 | 6483 | fjp | import com.iver.cit.gvsig.fmap.drivers.FieldDescription; |
16 | 5558 | fjp | import com.iver.cit.gvsig.fmap.drivers.ILayerDefinition; |
17 | 6472 | caballero | import com.iver.cit.gvsig.fmap.drivers.shp.IndexedShpDriver; |
18 | 5184 | caballero | import com.iver.cit.gvsig.fmap.edition.EditionEvent; |
19 | 4421 | fjp | import com.iver.cit.gvsig.fmap.edition.EditionException; |
20 | 4430 | fjp | import com.iver.cit.gvsig.fmap.edition.ISpatialWriter; |
21 | 4421 | fjp | import com.iver.cit.gvsig.fmap.edition.VectorialEditableAdapter; |
22 | import com.iver.cit.gvsig.fmap.layers.FLayer; |
||
23 | import com.iver.cit.gvsig.fmap.layers.FLayers; |
||
24 | 9394 | caballero | import com.iver.cit.gvsig.fmap.layers.FLyrAnnotation; |
25 | 4421 | fjp | import com.iver.cit.gvsig.fmap.layers.FLyrVect; |
26 | 6312 | caballero | import com.iver.cit.gvsig.fmap.rendering.VectorialLegend; |
27 | 6002 | fjp | import com.iver.cit.gvsig.layers.VectorialLayerEdited; |
28 | 8765 | jjdelcerro | import com.iver.cit.gvsig.project.documents.table.gui.Table; |
29 | import com.iver.cit.gvsig.project.documents.view.IProjectView; |
||
30 | import com.iver.cit.gvsig.project.documents.view.gui.View; |
||
31 | 4421 | fjp | |
32 | /**
|
||
33 | * @author Francisco Jos?
|
||
34 | 5482 | caballero | *
|
35 | 4430 | fjp | * Cuando un tema se pone en edici?n, puede que su driver implemente
|
36 | * ISpatialWriter. En ese caso, es capaz de guardarse sobre s? mismo. Si no lo
|
||
37 | * implementa, esta opci?n estar? deshabilitada y la ?nica posibilidad de
|
||
38 | * guardar este tema ser? "Guardando como..."
|
||
39 | 4421 | fjp | */
|
40 | 5005 | jorpiell | public class StopEditing extends Extension { |
41 | 4430 | fjp | private View vista; |
42 | |||
43 | 4421 | fjp | /**
|
44 | 5005 | jorpiell | * @see com.iver.andami.plugins.IExtension#initialize()
|
45 | 4430 | fjp | */
|
46 | 5005 | jorpiell | public void initialize() { |
47 | 4430 | fjp | } |
48 | 4421 | fjp | |
49 | 4430 | fjp | /**
|
50 | 5005 | jorpiell | * @see com.iver.andami.plugins.IExtension#execute(java.lang.String)
|
51 | 4430 | fjp | */
|
52 | public void execute(String s) { |
||
53 | 6877 | cesar | com.iver.andami.ui.mdiManager.IWindow f = PluginServices.getMDIManager() |
54 | 6880 | cesar | .getActiveWindow(); |
55 | 4421 | fjp | |
56 | 4430 | fjp | vista = (View) f;
|
57 | 5807 | caballero | boolean isStop=false; |
58 | 8765 | jjdelcerro | IProjectView model = vista.getModel(); |
59 | 6878 | cesar | MapContext mapa = model.getMapContext(); |
60 | 4430 | fjp | FLayers layers = mapa.getLayers(); |
61 | 4475 | fjp | EditionManager edMan = CADExtension.getEditionManager(); |
62 | 4430 | fjp | if (s.equals("STOPEDITING")) { |
63 | FLayer[] actives = layers.getActives();
|
||
64 | // TODO: Comprobar que solo hay una activa, o al menos
|
||
65 | // que solo hay una en edici?n que est? activa, etc, etc
|
||
66 | for (int i = 0; i < actives.length; i++) { |
||
67 | if (actives[i] instanceof FLyrVect && actives[i].isEditing()) { |
||
68 | FLyrVect lv = (FLyrVect) actives[i]; |
||
69 | 6604 | caballero | MapControl mapControl = vista.getMapControl(); |
70 | 6002 | fjp | VectorialLayerEdited lyrEd = (VectorialLayerEdited) edMan.getActiveLayerEdited(); |
71 | lyrEd.clearSelection(); |
||
72 | 5807 | caballero | isStop=stopEditing(lv, mapControl); |
73 | 7830 | jmvivo | if (isStop){
|
74 | 9394 | caballero | lv.removeLayerListener(edMan); |
75 | if (lv instanceof FLyrAnnotation){ |
||
76 | FLyrAnnotation lva=(FLyrAnnotation)lv; |
||
77 | lva.setMapping(lva.getMapping()); |
||
78 | } |
||
79 | 7830 | jmvivo | } |
80 | 4430 | fjp | } |
81 | } |
||
82 | 5807 | caballero | if (isStop) {
|
83 | vista.getMapControl().setTool("zoomIn");
|
||
84 | vista.hideConsole(); |
||
85 | 6002 | fjp | vista.repaintMap(); |
86 | 7830 | jmvivo | CADExtension.clearView(); |
87 | 9394 | caballero | |
88 | 5807 | caballero | } |
89 | 4430 | fjp | } |
90 | PluginServices.getMainFrame().enableControls(); |
||
91 | } |
||
92 | 4421 | fjp | |
93 | 4430 | fjp | /**
|
94 | 5005 | jorpiell | * @see com.iver.andami.plugins.IExtension#isEnabled()
|
95 | 4430 | fjp | */
|
96 | 5267 | fjp | public boolean isEnabled() { |
97 | 4430 | fjp | FLayer[] lyrs = EditionUtilities.getActiveAndEditedLayers();
|
98 | 5267 | fjp | if (lyrs == null) |
99 | return false; |
||
100 | 4430 | fjp | FLyrVect lyrVect = (FLyrVect) lyrs[0];
|
101 | 5267 | fjp | if (lyrVect.getSource() instanceof VectorialEditableAdapter) { |
102 | 5807 | caballero | return true; |
103 | 4950 | caballero | } |
104 | return false; |
||
105 | 5267 | fjp | } |
106 | 4430 | fjp | /**
|
107 | * DOCUMENT ME!
|
||
108 | */
|
||
109 | 5807 | caballero | public boolean stopEditing(FLyrVect layer, MapControl mapControl) { |
110 | 5267 | fjp | VectorialEditableAdapter vea = (VectorialEditableAdapter) layer |
111 | .getSource(); |
||
112 | 5807 | caballero | int resp = JOptionPane.NO_OPTION; |
113 | 4950 | caballero | |
114 | 4421 | fjp | try {
|
115 | 6856 | fjp | if (layer.isWritable()) {
|
116 | 5807 | caballero | resp = JOptionPane.showConfirmDialog((Component) PluginServices |
117 | .getMainFrame(), PluginServices.getText(this,
|
||
118 | "realmente_desea_guardar_la_capa")
|
||
119 | + " : " + layer.getName(), PluginServices.getText(this, |
||
120 | "guardar"), JOptionPane.YES_NO_OPTION); |
||
121 | if (resp != JOptionPane.YES_OPTION) { // CANCEL EDITING |
||
122 | cancelEdition(layer); |
||
123 | } else { // GUARDAMOS EL TEMA |
||
124 | saveLayer(layer); |
||
125 | 5267 | fjp | } |
126 | 5807 | caballero | |
127 | vea.getCommandRecord().removeCommandListener(mapControl); |
||
128 | layer.setEditing(false);
|
||
129 | return true; |
||
130 | 6604 | caballero | } |
131 | // Si no existe writer para la capa que tenemos en edici?n
|
||
132 | 5807 | caballero | resp = JOptionPane
|
133 | .showConfirmDialog( |
||
134 | (Component) PluginServices.getMainFrame(),
|
||
135 | PluginServices |
||
136 | .getText( |
||
137 | this,
|
||
138 | 6856 | fjp | "no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar")
|
139 | 5807 | caballero | + " : " + layer.getName(),
|
140 | 6856 | fjp | PluginServices.getText(this, "cancelar_edicion"), |
141 | 5807 | caballero | JOptionPane.YES_NO_OPTION);
|
142 | if (resp == JOptionPane.YES_OPTION) { // CANCEL EDITING |
||
143 | cancelEdition(layer); |
||
144 | vea.getCommandRecord().removeCommandListener(mapControl); |
||
145 | 6472 | caballero | if (!(layer.getSource().getDriver() instanceof IndexedShpDriver)){ |
146 | VectorialLayerEdited vle=(VectorialLayerEdited)CADExtension.getEditionManager().getLayerEdited(layer); |
||
147 | layer.setLegend((VectorialLegend)vle.getLegend()); |
||
148 | } |
||
149 | 5807 | caballero | layer.setEditing(false);
|
150 | return true; |
||
151 | 5571 | jmvivo | } |
152 | 6604 | caballero | |
153 | 4421 | fjp | } catch (EditionException e) {
|
154 | 5267 | fjp | NotificationManager.addError(e); |
155 | } catch (IOException e) { |
||
156 | NotificationManager.addError(e); |
||
157 | 5558 | fjp | } catch (DriverException e) {
|
158 | 5807 | caballero | NotificationManager.addError(e); |
159 | 6312 | caballero | } catch (FieldNotFoundException e) {
|
160 | e.printStackTrace(); |
||
161 | 4421 | fjp | } |
162 | 5807 | caballero | return false; |
163 | 4950 | caballero | |
164 | 5267 | fjp | } |
165 | |||
166 | 5807 | caballero | |
167 | private void saveLayer(FLyrVect layer) throws DriverException, |
||
168 | EditionException { |
||
169 | VectorialEditableAdapter vea = (VectorialEditableAdapter) layer |
||
170 | .getSource(); |
||
171 | |||
172 | ISpatialWriter writer = (ISpatialWriter) vea.getWriter(); |
||
173 | 6877 | cesar | com.iver.andami.ui.mdiManager.IWindow[] views = PluginServices
|
174 | 6880 | cesar | .getMDIManager().getAllWindows(); |
175 | 5807 | caballero | for (int j = 0; j < views.length; j++) { |
176 | if (views[j] instanceof Table) { |
||
177 | Table table = (Table) views[j]; |
||
178 | if (table.getModel().getAssociatedTable() != null |
||
179 | && table.getModel().getAssociatedTable().equals(layer)) { |
||
180 | table.stopEditingCell(); |
||
181 | } |
||
182 | } |
||
183 | } |
||
184 | 6483 | fjp | vea.cleanSelectableDatasource(); |
185 | 6604 | caballero | layer.setRecordset(vea.getRecordset()); // Queremos que el recordset del layer
|
186 | 6483 | fjp | // refleje los cambios en los campos.
|
187 | 5807 | caballero | ILayerDefinition lyrDef = EditionUtilities.createLayerDefinition(layer); |
188 | 6483 | fjp | String aux="FIELDS:"; |
189 | 6604 | caballero | FieldDescription[] flds = lyrDef.getFieldsDesc();
|
190 | 6483 | fjp | for (int i=0; i < flds.length; i++) |
191 | { |
||
192 | 6604 | caballero | aux = aux + ", " + flds[i].getFieldAlias();
|
193 | 6483 | fjp | } |
194 | 6604 | caballero | System.err.println("Escribiendo la capa " + lyrDef.getName() + |
195 | 6483 | fjp | " con los campos " + aux);
|
196 | 5807 | caballero | writer.initialize(lyrDef); |
197 | vea.stopEdition(writer, EditionEvent.GRAPHIC); |
||
198 | |||
199 | } |
||
200 | |||
201 | private void cancelEdition(FLyrVect layer) throws IOException { |
||
202 | 6877 | cesar | com.iver.andami.ui.mdiManager.IWindow[] views = PluginServices
|
203 | 6880 | cesar | .getMDIManager().getAllWindows(); |
204 | 5807 | caballero | for (int j = 0; j < views.length; j++) { |
205 | if (views[j] instanceof Table) { |
||
206 | Table table = (Table) views[j]; |
||
207 | if (table.getModel().getAssociatedTable() != null |
||
208 | && table.getModel().getAssociatedTable().equals(layer)) { |
||
209 | table.cancelEditing(); |
||
210 | } |
||
211 | } |
||
212 | } |
||
213 | } |
||
214 | 4430 | fjp | /**
|
215 | 5005 | jorpiell | * @see com.iver.andami.plugins.IExtension#isVisible()
|
216 | 4430 | fjp | */
|
217 | public boolean isVisible() { |
||
218 | if (EditionUtilities.getEditionStatus() == EditionUtilities.EDITION_STATUS_ONE_VECTORIAL_LAYER_ACTIVE_AND_EDITABLE)
|
||
219 | return true; |
||
220 | 6604 | caballero | return false; |
221 | 4421 | fjp | |
222 | 4430 | fjp | } |
223 | 4421 | fjp | } |