Statistics
| Revision:

root / branches / v2_0_0_prep / extensions / extEditing / src / org / gvsig / editing / gui / cad / MyFinishAction.java @ 37138

History | View | Annotate | Download (15.3 KB)

1
/* gvSIG. Geographic Information System of the Valencian Government
2
 *
3
 * Copyright (C) 2007-2008 Infrastructures and Transports Department
4
 * of the Valencian Government (CIT)
5
 * 
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 2
9
 * of the License, or (at your option) any later version.
10
 * 
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 * 
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
19
 * MA  02110-1301, USA.
20
 * 
21
 */
22
package org.gvsig.editing.gui.cad;
23

    
24
import java.awt.Component;
25
import java.io.File;
26

    
27
import javax.swing.JOptionPane;
28

    
29
import jwizardcomponent.FinishAction;
30
import jwizardcomponent.JWizardComponents;
31

    
32
import org.slf4j.Logger;
33
import org.slf4j.LoggerFactory;
34

    
35
import org.gvsig.andami.PluginServices;
36
import org.gvsig.andami.messages.NotificationManager;
37
import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
38
import org.gvsig.editing.CADExtension;
39
import org.gvsig.editing.EditionManager;
40
import org.gvsig.editing.gui.cad.panels.ChooseGeometryType;
41
import org.gvsig.editing.gui.cad.panels.FileBasedPanel;
42
import org.gvsig.editing.gui.cad.panels.JPanelFieldDefinition;
43
import org.gvsig.fmap.dal.DALLocator;
44
import org.gvsig.fmap.dal.DataManager;
45
import org.gvsig.fmap.dal.DataStoreParameters;
46
import org.gvsig.fmap.dal.DataTypes;
47
import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
48
import org.gvsig.fmap.dal.feature.EditableFeatureType;
49
import org.gvsig.fmap.dal.feature.FeatureStore;
50
import org.gvsig.fmap.dal.feature.FeatureType;
51
import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
52
import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorer;
53
import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorerParameters;
54
import org.gvsig.fmap.dal.store.shp.SHPNewStoreParameters;
55
import org.gvsig.fmap.mapcontext.MapContextLocator;
56
import org.gvsig.fmap.mapcontext.MapContextManager;
57
import org.gvsig.fmap.mapcontext.layers.LayerFactory;
58
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
59
import org.gvsig.fmap.mapcontrol.MapControl;
60

    
61
public class MyFinishAction extends FinishAction {
62

    
63
    private static final Logger logger = LoggerFactory
64
        .getLogger(MyFinishAction.class);
65

    
66
    JWizardComponents myWizardComponents;
67
    FinishAction oldAction;
68
    FeatureType featureType = null;
69
    DefaultViewPanel view;
70
    String actionComand;
71

    
72
    public MyFinishAction(JWizardComponents wizardComponents,
73
        DefaultViewPanel view, String actionComand) {
74
        super(wizardComponents);
75
        oldAction = wizardComponents.getFinishAction();
76
        myWizardComponents = wizardComponents;
77
        this.view = view;
78
        this.actionComand = actionComand;
79
        // TODO Auto-generated constructor stub
80
    }
81

    
82
    public void performAction() {
83
        FLyrVect lyr = null;
84
        MapControl mapCtrl = view.getMapControl();
85
        try {
86
            mapCtrl.getMapContext().beginAtomicEvent();
87
            if (actionComand.equals("SHP")) {
88
                FileBasedPanel shpPanel =
89
                    (FileBasedPanel) myWizardComponents.getWizardPanel(2);
90
                String path = shpPanel.getPath();
91
                if (!path.toLowerCase().endsWith(".shp")) {
92
                    path += ".shp";
93
                }
94
                File newFile = new File(path);
95
                if (newFile.exists()) {
96
                    int resp =
97
                        JOptionPane.showConfirmDialog(
98
                            (Component) PluginServices.getMainFrame(),
99
                            PluginServices.getText(this,
100
                                "fichero_ya_existe_seguro_desea_guardarlo"),
101
                            PluginServices.getText(this, "guardar"),
102
                            JOptionPane.YES_NO_OPTION);
103
                    if (resp != JOptionPane.YES_OPTION) {
104
                        return;
105
                    }
106
                }
107
                ChooseGeometryType geometryTypePanel =
108
                    (ChooseGeometryType) myWizardComponents.getWizardPanel(0);
109
                JPanelFieldDefinition fieldDefinitionPanel =
110
                    (JPanelFieldDefinition) myWizardComponents
111
                        .getWizardPanel(1);
112

    
113
                String layerName = geometryTypePanel.getLayerName();
114
                String selectedDriver = geometryTypePanel.getSelectedDriver();
115
                int geometryType = geometryTypePanel.getSelectedGeometryType();
116
                EditableFeatureType featureType =
117
                    fieldDefinitionPanel.getFeatureType();
118

    
119
                EditableFeatureAttributeDescriptor efad =
120
                    featureType.add("GEOMETRY", DataTypes.GEOMETRY);
121
                efad.setGeometryType(geometryType);
122
                featureType.setDefaultGeometryAttributeName("GEOMETRY");
123

    
124
                DataManager datamanager = DALLocator.getDataManager();
125
                FilesystemServerExplorerParameters explorerParams;
126
                explorerParams =
127
                    (FilesystemServerExplorerParameters) datamanager
128
                        .createServerExplorerParameters(FilesystemServerExplorer.NAME);
129
                explorerParams.setRoot(newFile.getParent());
130
                FilesystemServerExplorer explorer =
131
                    (FilesystemServerExplorer) datamanager
132
                        .createServerExplorer(explorerParams);
133
                NewFeatureStoreParameters newParams =
134
                    (NewFeatureStoreParameters) explorer
135
                        .getAddParameters(newFile);
136
                newParams.setDefaultFeatureType(featureType);
137
                ((SHPNewStoreParameters) newParams).setCRS(mapCtrl
138
                    .getProjection());
139
                ((SHPNewStoreParameters) newParams)
140
                    .setGeometryType(geometryType);
141
                explorer.add(newParams.getDataStoreName(), newParams, true);
142
                FeatureStore target =
143
                    (FeatureStore) datamanager.openStore(
144
                        newParams.getDataStoreName(), newParams);
145
                target.edit(FeatureStore.MODE_APPEND);
146
                target.finishEditing();
147
                target.dispose();
148

    
149
                lyr =
150
                    (FLyrVect) LayerFactory.getInstance().createLayer(
151
                        layerName, newParams);
152
                lyr.setActive(true);
153
                lyr.setVisible(true);
154
                mapCtrl.getMapContext().getLayers().addLayer(lyr);
155
                mapCtrl.getMapContext().endAtomicEvent();
156
                EditionManager em = CADExtension.getEditionManager();
157
                em.setMapControl(mapCtrl);
158
                lyr.addLayerListener(em);
159
                lyr.setEditing(true);
160
                lyr.dispose();
161
                view.showConsole();
162
            }
163

    
164
            if (actionComand.equals("DXF")) {
165
                FileBasedPanel filePanel =
166
                    (FileBasedPanel) myWizardComponents.getWizardPanel(0);
167
                String path = filePanel.getPath();
168
                if (!path.toLowerCase().endsWith(".dxf")) {
169
                    path += ".dxf";
170
                }
171
                File newFile = new File(path);
172
                if (newFile.exists()) {
173
                    int resp =
174
                        JOptionPane.showConfirmDialog(
175
                            (Component) PluginServices.getMainFrame(),
176
                            PluginServices.getText(this,
177
                                "fichero_ya_existe_seguro_desea_guardarlo"),
178
                            PluginServices.getText(this, "guardar"),
179
                            JOptionPane.YES_NO_OPTION);
180
                    if (resp != JOptionPane.YES_OPTION) {
181
                        return;
182
                    }
183
                }
184
                String filename = newFile.getName();
185

    
186
                DataManager datamanager = DALLocator.getDataManager();
187

    
188
                FilesystemServerExplorerParameters explorerParams =
189
                    (FilesystemServerExplorerParameters) datamanager
190
                        .createServerExplorerParameters(FilesystemServerExplorer.NAME);
191
                explorerParams.setRoot(newFile.getParent());
192
                FilesystemServerExplorer explorer =
193
                    (FilesystemServerExplorer) datamanager.openServerExplorer(
194
                        FilesystemServerExplorer.NAME, explorerParams);
195

    
196
                NewFeatureStoreParameters newParams =
197
                    (NewFeatureStoreParameters) explorer
198
                        .getAddParameters(newFile);
199
                newParams.setDynValue("File", newFile);
200
                newParams.setDynValue("CRS", mapCtrl.getProjection());
201
                explorer.add(newParams.getDataStoreName(), newParams, true);
202

    
203
                DataStoreParameters parameters = null;
204
                parameters = datamanager.createStoreParameters("DXF");
205
                parameters.setDynValue("File", newFile);
206
                parameters.setDynValue("CRS", mapCtrl.getProjection());
207

    
208
                MapContextManager mcm =
209
                    MapContextLocator.getMapContextManager();
210
                lyr = (FLyrVect) mcm.createLayer(filename, parameters);
211

    
212
                lyr.setActive(true);
213
                lyr.setVisible(true);
214
                mapCtrl.getMapContext().getLayers().addLayer(lyr);
215
                mapCtrl.getMapContext().endAtomicEvent();
216
                EditionManager em = CADExtension.getEditionManager();
217
                em.setMapControl(mapCtrl);
218
                lyr.addLayerListener(em);
219
                lyr.setEditing(true);
220
                lyr.dispose();
221
                view.showConsole();
222
            }
223

    
224
            // else if (actionComand.equals("POSTGIS"))
225
            // {
226
            // ChooseGeometryType geometryTypePanel = (ChooseGeometryType)
227
            // myWizardComponents.getWizardPanel(0);
228
            // JPanelFieldDefinition fieldDefinitionPanel =
229
            // (JPanelFieldDefinition) myWizardComponents.getWizardPanel(1);
230
            //
231
            //
232
            // String layerName = geometryTypePanel.getLayerName();
233
            // String selectedDriver = geometryTypePanel.getSelectedDriver();
234
            // int geometryType = geometryTypePanel.getSelectedGeometryType();
235
            // FieldDescription[] fieldsDesc =
236
            // fieldDefinitionPanel.getFieldsDescription();
237
            //
238
            // Driver drv = LayerFactory.getDM().getDriver(selectedDriver);
239
            //
240
            // IVectorialJDBCDriver dbDriver = (IVectorialJDBCDriver) drv;
241
            // PostGISpanel postgisPanel = (PostGISpanel)
242
            // myWizardComponents.getWizardPanel(2);
243
            // ConnectionSettings cs = postgisPanel.getConnSettings();
244
            // if (cs == null)
245
            // return;
246
            // IConnection conex =
247
            // ConnectionFactory.createConnection(cs.getConnectionString(),
248
            // cs.getUser(), cs.getPassw());
249
            //
250
            // DBLayerDefinition dbLayerDef = new DBLayerDefinition();
251
            // dbLayerDef.setCatalogName(cs.getDb());
252
            // dbLayerDef.setSchema(cs.getSchema());
253
            // dbLayerDef.setTableName(layerName);
254
            // dbLayerDef.setShapeType(geometryType);
255
            // dbLayerDef.setFieldsDesc(fieldsDesc);
256
            // dbLayerDef.setFieldGeometry("the_geom");
257
            // dbLayerDef.setFieldID("gid");
258
            //
259
            // dbLayerDef.setWhereClause("");
260
            // String strSRID = mapCtrl.getProjection().getAbrev()
261
            // .substring(5);
262
            // dbLayerDef.setSRID_EPSG(strSRID);
263
            // dbLayerDef.setConnection(conex);
264
            //
265
            // PostGISWriter writer= new PostGISWriter();
266
            // //(PostGISWriter)LayerFactory.getWM().getWriter("PostGIS Writer");
267
            // writer.setWriteAll(true);
268
            // writer.setCreateTable(true);
269
            // writer.initialize(dbLayerDef);
270
            //
271
            // // Creamos la tabla.
272
            // writer.preProcess();
273
            // writer.postProcess();
274
            //
275
            // if (dbDriver instanceof ICanReproject)
276
            // {
277
            // ((ICanReproject)dbDriver).setDestProjection(strSRID);
278
            // }
279
            //
280
            // // Creamos el driver. OJO: Hay que a�adir el campo ID a la
281
            // // definici�n de campos.
282
            //
283
            // boolean bFound = false;
284
            // for (int i=0; i < dbLayerDef.getFieldsDesc().length; i++)
285
            // {
286
            // FieldDescription f = dbLayerDef.getFieldsDesc()[i];
287
            // if (f.getFieldName().equalsIgnoreCase(dbLayerDef.getFieldID()))
288
            // {
289
            // bFound = true;
290
            // break;
291
            // }
292
            // }
293
            // // Si no est�, lo a�adimos
294
            // if (!bFound)
295
            // {
296
            // int numFieldsAnt = dbLayerDef.getFieldsDesc().length;
297
            // FieldDescription[] newFields = new
298
            // FieldDescription[dbLayerDef.getFieldsDesc().length + 1];
299
            // for (int i=0; i < numFieldsAnt; i++)
300
            // {
301
            // newFields[i] = dbLayerDef.getFieldsDesc()[i];
302
            // }
303
            // newFields[numFieldsAnt] = new FieldDescription();
304
            // newFields[numFieldsAnt].setFieldDecimalCount(0);
305
            // newFields[numFieldsAnt].setFieldType(Types.INTEGER);
306
            // newFields[numFieldsAnt].setFieldLength(7);
307
            // newFields[numFieldsAnt].setFieldName(dbLayerDef.getFieldID());
308
            // dbLayerDef.setFieldsDesc(newFields);
309
            //
310
            // }
311
            //
312
            // dbDriver.setData(conex, dbLayerDef);
313
            // IProjection proj = null;
314
            // if (drv instanceof ICanReproject)
315
            // {
316
            // proj = CRSFactory.getCRS("EPSG:" +
317
            // ((ICanReproject)dbDriver).getSourceProjection(null,null));
318
            // }
319
            //
320
            // lyr = (FLyrVect) LayerFactory.createDBLayer(dbDriver, layerName,
321
            // proj);
322
            //
323
            // }
324
            // else // Si no es ni lo uno ni lo otro,
325
            // {
326
            //
327
            //
328
            // }
329

    
330
        } catch (Exception e) {
331
            logger.error("Can't create the layer", e);
332
            NotificationManager.showMessageError(e.getLocalizedMessage(), e);
333
            return;
334
        }
335

    
336
        // try {
337
        // lyr.setEditing(true);
338
        // VectorialEditableAdapter vea = (VectorialEditableAdapter)
339
        // lyr.getSource();
340
        // vea.getRules().clear();
341
        // // TODO: ESTO ES PROVISIONAL, DESCOMENTAR LUEGO
342
        // if (vea.getShapeType() == FShape.POLYGON)
343
        // {
344
        // IRule rulePol = new RulePolygon();
345
        // vea.getRules().add(rulePol, false);
346
        // }
347
        // StartEditing.startCommandsApplicable(view,lyr);
348
        // vea.getCommandRecord().addCommandListener(mapCtrl);
349
        // view.showConsole();
350

    
351
        // Para cerrar el cuadro de di�logo.
352
        oldAction.performAction();
353
        // } catch (ReadException e) {
354
        // NotificationManager.showMessageError(e.getMessage(),e);
355
        // } catch (StartEditionLayerException e) {
356
        // NotificationManager.showMessageError(e.getMessage(),e);
357
        // }
358

    
359
    }
360

    
361
}