Statistics
| Revision:

svn-gvsig-desktop / tags / v10_RC2c / extensions / extCAD / src / com / iver / cit / gvsig / gui / cad / MyFinishAction.java @ 8745

History | View | Annotate | Download (10.7 KB)

1
package com.iver.cit.gvsig.gui.cad;
2

    
3
import java.awt.Component;
4
import java.awt.geom.Rectangle2D;
5
import java.io.File;
6
import java.io.IOException;
7
import java.sql.Connection;
8
import java.sql.DriverManager;
9
import java.sql.Types;
10

    
11
import javax.swing.JOptionPane;
12

    
13
import jwizardcomponent.FinishAction;
14
import jwizardcomponent.JWizardComponents;
15

    
16
import org.cresques.cts.IProjection;
17
import org.cresques.cts.ProjectionPool;
18

    
19
import com.hardcode.driverManager.Driver;
20
import com.iver.andami.PluginServices;
21
import com.iver.andami.messages.NotificationManager;
22
import com.iver.cit.gvsig.CADExtension;
23
import com.iver.cit.gvsig.StartEditing;
24
import com.iver.cit.gvsig.fmap.MapControl;
25
import com.iver.cit.gvsig.fmap.core.FShape;
26
import com.iver.cit.gvsig.fmap.core.ICanReproject;
27
import com.iver.cit.gvsig.fmap.crs.CRSFactory;
28
import com.iver.cit.gvsig.fmap.drivers.DBLayerDefinition;
29
import com.iver.cit.gvsig.fmap.drivers.DXFLayerDefinition;
30
import com.iver.cit.gvsig.fmap.drivers.DriverIOException;
31
import com.iver.cit.gvsig.fmap.drivers.FieldDescription;
32
import com.iver.cit.gvsig.fmap.drivers.ITableDefinition;
33
import com.iver.cit.gvsig.fmap.drivers.SHPLayerDefinition;
34
import com.iver.cit.gvsig.fmap.drivers.VectorialFileDriver;
35
import com.iver.cit.gvsig.fmap.drivers.VectorialJDBCDriver;
36
import com.iver.cit.gvsig.fmap.drivers.jdbc.postgis.PostGISWriter;
37
import com.iver.cit.gvsig.fmap.edition.EditionException;
38
import com.iver.cit.gvsig.fmap.edition.VectorialEditableAdapter;
39
import com.iver.cit.gvsig.fmap.edition.rules.IRule;
40
import com.iver.cit.gvsig.fmap.edition.rules.RulePolygon;
41
import com.iver.cit.gvsig.fmap.edition.writers.dxf.DxfFieldsMapping;
42
import com.iver.cit.gvsig.fmap.edition.writers.dxf.DxfWriter;
43
import com.iver.cit.gvsig.fmap.edition.writers.shp.ShpWriter;
44
import com.iver.cit.gvsig.fmap.layers.FLyrVect;
45
import com.iver.cit.gvsig.fmap.layers.LayerFactory;
46
import com.iver.cit.gvsig.gui.View;
47
import com.iver.cit.gvsig.gui.cad.panels.ChooseGeometryType;
48
import com.iver.cit.gvsig.gui.cad.panels.FileBasedPanel;
49
import com.iver.cit.gvsig.gui.cad.panels.JPanelFieldDefinition;
50
import com.iver.cit.gvsig.gui.cad.panels.PostGISpanel;
51
import com.iver.cit.gvsig.jdbc_spatial.gui.jdbcwizard.ConnectionSettings;
52

    
53
public class MyFinishAction extends FinishAction
54
{
55
        JWizardComponents myWizardComponents;
56
        FinishAction oldAction;
57
        ITableDefinition lyrDef = null;
58
        View view;
59
        String actionComand;
60
        public MyFinishAction(JWizardComponents wizardComponents, View view, String actionComand) {
61
                super(wizardComponents);
62
                oldAction = wizardComponents.getFinishAction();
63
                myWizardComponents = wizardComponents;
64
                this.view = view;
65
                this.actionComand = actionComand;
66
                // TODO Auto-generated constructor stub
67
        }
68

    
69
        public void performAction() {
70
                FLyrVect lyr = null;
71
                MapControl mapCtrl = view.getMapControl();
72
                try {
73
                        // ChooseWriteDriver driverPanel = (ChooseWriteDriver) myWizardComponents.getWizardPanel(0);
74
                        mapCtrl.getMapContext().beginAtomicEvent();
75
                        if (actionComand.equals("SHP"))
76
                        {
77
                                FileBasedPanel shpPanel = (FileBasedPanel) myWizardComponents.getWizardPanel(2);
78
                                File newFile = new File(shpPanel.getPath());
79
                                if( newFile.exists()){
80
                                        int resp = JOptionPane.showConfirmDialog(
81
                                                        (Component) PluginServices.getMainFrame(),PluginServices.getText(this,"fichero_ya_existe_seguro_desea_guardarlo"),
82
                                                        PluginServices.getText(this,"guardar"), JOptionPane.YES_NO_OPTION);
83
                                        if (resp != JOptionPane.YES_OPTION) {
84
                                                return;
85
                                        }
86
                                }
87
                                ChooseGeometryType geometryTypePanel = (ChooseGeometryType) myWizardComponents.getWizardPanel(0);
88
                                JPanelFieldDefinition fieldDefinitionPanel = (JPanelFieldDefinition) myWizardComponents.getWizardPanel(1);
89

    
90

    
91
                                String layerName = geometryTypePanel.getLayerName();
92
                                String selectedDriver = geometryTypePanel.getSelectedDriver();
93
                                int geometryType = geometryTypePanel.getSelectedGeometryType();
94
                                FieldDescription[] fieldsDesc = fieldDefinitionPanel.getFieldsDescription();
95

    
96
                                Driver drv = LayerFactory.getDM().getDriver(selectedDriver);
97

    
98

    
99

    
100
                        SHPLayerDefinition lyrDef = new SHPLayerDefinition();
101
                        lyrDef.setFieldsDesc(fieldsDesc);
102
                        lyrDef.setFile(newFile);
103
                        lyrDef.setName(layerName);
104
                        lyrDef.setShapeType(geometryType);
105
                            ShpWriter writer= (ShpWriter)LayerFactory.getWM().getWriter("Shape Writer");
106
                            writer.setFile(newFile);
107
                            writer.initialize(lyrDef);
108
                            writer.preProcess();
109
                            writer.postProcess();
110

    
111

    
112
                lyr = (FLyrVect) LayerFactory.createLayer(layerName,
113
                        (VectorialFileDriver) drv, newFile, mapCtrl.getProjection());
114

    
115
                        }
116
                        else if (actionComand.equals("DXF"))
117
                        {
118
                            FileBasedPanel dxfPanel = (FileBasedPanel) myWizardComponents.getWizardPanel(0);
119
                        File newFile = new File(dxfPanel.getPath());
120
                        if( newFile.exists()){
121
                                        int resp = JOptionPane.showConfirmDialog(
122
                                                        (Component) PluginServices.getMainFrame(),PluginServices.getText(this,"fichero_ya_existe_seguro_desea_guardarlo"),
123
                                                        PluginServices.getText(this,"guardar"), JOptionPane.YES_NO_OPTION);
124
                                        if (resp != JOptionPane.YES_OPTION) {
125
                                                return;
126
                                        }
127
                                }
128
                        DXFLayerDefinition lyrDef = new DXFLayerDefinition();
129
                        lyrDef.setFile(newFile);
130
                        String layerName = newFile.getName();
131
                        lyrDef.setName(layerName);
132
                            DxfWriter writer= (DxfWriter)LayerFactory.getWM().getWriter("DXF Writer");
133
                            writer.setFile(newFile);
134
                            DxfFieldsMapping fieldsMapping = new DxfFieldsMapping();
135
                            fieldsMapping.setLayerField("Layer");
136
                            fieldsMapping.setColorField("Color");
137
                            fieldsMapping.setElevationField("Elevation");
138
                            fieldsMapping.setThicknessField("Thickness");
139
                            fieldsMapping.setTextField("Text");
140
                            fieldsMapping.setHeightText("HeightText");
141
                            fieldsMapping.setRotationText("RotationText");
142
                            writer.setFieldMapping(fieldsMapping);
143
                            writer.setProjection(mapCtrl.getProjection());
144
                            writer.initialize(lyrDef);
145
                            writer.preProcess();
146
                            writer.postProcess();
147
                            Driver drv = LayerFactory.getDM().getDriver("gvSIG DXF Memory Driver");
148

    
149
                lyr = (FLyrVect) LayerFactory.createLayer(layerName,
150
                        (VectorialFileDriver) drv, newFile, mapCtrl.getProjection());
151

    
152
                        }
153
                        else if (actionComand.equals("POSTGIS"))
154
                        {
155
                                ChooseGeometryType geometryTypePanel = (ChooseGeometryType) myWizardComponents.getWizardPanel(0);
156
                                JPanelFieldDefinition fieldDefinitionPanel = (JPanelFieldDefinition) myWizardComponents.getWizardPanel(1);
157

    
158

    
159
                                String layerName = geometryTypePanel.getLayerName();
160
                                String selectedDriver = geometryTypePanel.getSelectedDriver();
161
                                int geometryType = geometryTypePanel.getSelectedGeometryType();
162
                                FieldDescription[] fieldsDesc = fieldDefinitionPanel.getFieldsDescription();
163

    
164
                                Driver drv = LayerFactory.getDM().getDriver(selectedDriver);
165

    
166
                                VectorialJDBCDriver dbDriver = (VectorialJDBCDriver) drv;
167
                            PostGISpanel postgisPanel = (PostGISpanel) myWizardComponents.getWizardPanel(2);
168
                                ConnectionSettings cs = postgisPanel.getConnSettings();
169
                                if (cs == null)
170
                                        return;
171
                                Connection conex = DriverManager.getConnection(cs.getConnectionString(),
172
                                                cs.getUser(), cs.getPassw());
173

    
174
                                DBLayerDefinition dbLayerDef = new DBLayerDefinition();
175
                                dbLayerDef.setCatalogName(cs.getDb());
176
                                dbLayerDef.setTableName(layerName);
177
                                dbLayerDef.setShapeType(geometryType);
178
                                dbLayerDef.setFieldsDesc(fieldsDesc);
179
                                dbLayerDef.setFieldGeometry("the_geom");
180
                                dbLayerDef.setFieldID("gid");
181

    
182
                                dbLayerDef.setWhereClause("");
183
                                String strSRID = mapCtrl.getProjection().getAbrev()
184
                                                .substring(5);
185
                                dbLayerDef.setSRID_EPSG(strSRID);
186
                                dbLayerDef.setConnection(conex);
187

    
188
                            PostGISWriter writer= new PostGISWriter(); //(PostGISWriter)LayerFactory.getWM().getWriter("PostGIS Writer");
189
                            writer.setWriteAll(true);
190
                            writer.setCreateTable(true);
191
                            writer.initialize(dbLayerDef);
192

    
193
                            // Creamos la tabla.
194
                            writer.preProcess();
195
                            writer.postProcess();
196

    
197
                    if (dbDriver instanceof ICanReproject)
198
                    {
199
                        ((ICanReproject)dbDriver).setDestProjection(strSRID);
200
                    }
201

    
202
                    // Creamos el driver. OJO: Hay que a?adir el campo ID a la
203
                    // definici?n de campos.
204

    
205
                    boolean bFound = false;
206
                    for (int i=0; i < dbLayerDef.getFieldsDesc().length; i++)
207
                    {
208
                            FieldDescription f = dbLayerDef.getFieldsDesc()[i];
209
                            if (f.getFieldName().equalsIgnoreCase(dbLayerDef.getFieldID()))
210
                            {
211
                                    bFound = true;
212
                                    break;
213
                            }
214
                    }
215
                    // Si no est?, lo a?adimos
216
                    if (!bFound)
217
                    {
218
                            int numFieldsAnt = dbLayerDef.getFieldsDesc().length;
219
                            FieldDescription[] newFields = new FieldDescription[dbLayerDef.getFieldsDesc().length + 1];
220
                        for (int i=0; i < numFieldsAnt; i++)
221
                        {
222
                                newFields[i] = dbLayerDef.getFieldsDesc()[i];
223
                        }
224
                        newFields[numFieldsAnt] = new FieldDescription();
225
                        newFields[numFieldsAnt].setFieldDecimalCount(0);
226
                        newFields[numFieldsAnt].setFieldType(Types.INTEGER);
227
                        newFields[numFieldsAnt].setFieldLength(7);
228
                        newFields[numFieldsAnt].setFieldName(dbLayerDef.getFieldID());
229
                        dbLayerDef.setFieldsDesc(newFields);
230

    
231
                    }
232

    
233
                    dbDriver.setData(conex, dbLayerDef);
234
                    IProjection proj = null;
235
                    if (drv instanceof ICanReproject)
236
                    {
237
                        proj = CRSFactory.getCRS("EPSG:" + ((ICanReproject)dbDriver).getSourceProjection());
238
                    }
239

    
240
                            lyr = (FLyrVect) LayerFactory.createDBLayer(dbDriver, layerName, proj);
241

    
242
                        }
243
                        else // Si no es ni lo uno ni lo otro,
244
                        {
245

    
246

    
247
                        }
248
                } catch (Exception e) {
249
                        // TODO Auto-generated catch block
250
                        e.printStackTrace();
251
                }
252
        lyr.setVisible(true);
253

    
254
                mapCtrl.getMapContext().getLayers().addLayer(lyr);
255

    
256
                mapCtrl.getMapContext().endAtomicEvent();
257
                lyr.addLayerListener(CADExtension.getEditionManager());
258
                lyr.setActive(true);
259

    
260
                try {
261
                        lyr.setEditing(true);
262
                VectorialEditableAdapter vea = (VectorialEditableAdapter) lyr.getSource();
263
                        vea.getRules().clear();
264
                        // TODO: ESTO ES PROVISIONAL, DESCOMENTAR LUEGO
265
                        if (vea.getShapeType() == FShape.POLYGON)
266
                        {
267
                                IRule rulePol = new RulePolygon();
268
                                vea.getRules().add(rulePol);
269
                        }
270
                        StartEditing.startCommandsApplicable(view,lyr);
271
                vea.getCommandRecord().addCommandListener(mapCtrl);
272
                view.showConsole();
273

    
274
                        // Para cerrar el cuadro de di?logo.
275
                        oldAction.performAction();
276
                } catch (EditionException e) {
277
                        e.printStackTrace();
278
                        NotificationManager.addError(e);
279
                } catch (DriverIOException e) {
280
                        e.printStackTrace();
281
                        NotificationManager.addError(e);
282

    
283
                }
284

    
285

    
286
        }
287

    
288
}
289