Statistics
| Revision:

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

History | View | Annotate | Download (11 KB)

1 4380 fjp
package com.iver.cit.gvsig.gui.cad;
2
3 6157 caballero
import java.awt.Component;
4 4416 fjp
import java.io.File;
5 4740 fjp
import java.sql.Connection;
6
import java.sql.DriverManager;
7 4767 fjp
import java.sql.Types;
8 4416 fjp
9 6157 caballero
import javax.swing.JOptionPane;
10
11 4380 fjp
import jwizardcomponent.FinishAction;
12
import jwizardcomponent.JWizardComponents;
13
14 4740 fjp
import org.cresques.cts.IProjection;
15
16
import com.hardcode.driverManager.Driver;
17 6157 caballero
import com.iver.andami.PluginServices;
18 5152 fjp
import com.iver.andami.messages.NotificationManager;
19 4421 fjp
import com.iver.cit.gvsig.CADExtension;
20 6022 caballero
import com.iver.cit.gvsig.StartEditing;
21 4416 fjp
import com.iver.cit.gvsig.fmap.MapControl;
22 5893 fjp
import com.iver.cit.gvsig.fmap.core.FShape;
23 4740 fjp
import com.iver.cit.gvsig.fmap.core.ICanReproject;
24 7703 luisw2
import com.iver.cit.gvsig.fmap.crs.CRSFactory;
25 11935 caballero
import com.iver.cit.gvsig.fmap.drivers.ConnectionFactory;
26 4740 fjp
import com.iver.cit.gvsig.fmap.drivers.DBLayerDefinition;
27 5152 fjp
import com.iver.cit.gvsig.fmap.drivers.DXFLayerDefinition;
28 5893 fjp
import com.iver.cit.gvsig.fmap.drivers.DriverIOException;
29 4385 fjp
import com.iver.cit.gvsig.fmap.drivers.FieldDescription;
30 11935 caballero
import com.iver.cit.gvsig.fmap.drivers.IConnection;
31 4416 fjp
import com.iver.cit.gvsig.fmap.drivers.ITableDefinition;
32
import com.iver.cit.gvsig.fmap.drivers.SHPLayerDefinition;
33 4387 fjp
import com.iver.cit.gvsig.fmap.drivers.VectorialFileDriver;
34 11935 caballero
import com.iver.cit.gvsig.fmap.drivers.IVectorialJDBCDriver;
35 4740 fjp
import com.iver.cit.gvsig.fmap.drivers.jdbc.postgis.PostGISWriter;
36 5152 fjp
import com.iver.cit.gvsig.fmap.edition.EditionException;
37 4416 fjp
import com.iver.cit.gvsig.fmap.edition.VectorialEditableAdapter;
38 5893 fjp
import com.iver.cit.gvsig.fmap.edition.rules.IRule;
39
import com.iver.cit.gvsig.fmap.edition.rules.RulePolygon;
40 5152 fjp
import com.iver.cit.gvsig.fmap.edition.writers.dxf.DxfFieldsMapping;
41 4937 fjp
import com.iver.cit.gvsig.fmap.edition.writers.dxf.DxfWriter;
42 4416 fjp
import com.iver.cit.gvsig.fmap.edition.writers.shp.ShpWriter;
43 4421 fjp
import com.iver.cit.gvsig.fmap.layers.FLyrVect;
44 4385 fjp
import com.iver.cit.gvsig.fmap.layers.LayerFactory;
45
import com.iver.cit.gvsig.gui.cad.panels.ChooseGeometryType;
46 5152 fjp
import com.iver.cit.gvsig.gui.cad.panels.FileBasedPanel;
47 4385 fjp
import com.iver.cit.gvsig.gui.cad.panels.JPanelFieldDefinition;
48 4740 fjp
import com.iver.cit.gvsig.gui.cad.panels.PostGISpanel;
49 8765 jjdelcerro
import com.iver.cit.gvsig.project.documents.view.gui.View;
50 11935 caballero
import com.iver.cit.gvsig.vectorialdb.ConnectionSettings;
51 4385 fjp
52 4380 fjp
public class MyFinishAction extends FinishAction
53
{
54
        JWizardComponents myWizardComponents;
55
        FinishAction oldAction;
56 4416 fjp
        ITableDefinition lyrDef = null;
57 4487 fjp
        View view;
58 4416 fjp
        String actionComand;
59 6022 caballero
        public MyFinishAction(JWizardComponents wizardComponents, View view, String actionComand) {
60 4380 fjp
                super(wizardComponents);
61
                oldAction = wizardComponents.getFinishAction();
62
                myWizardComponents = wizardComponents;
63 4487 fjp
                this.view = view;
64 4416 fjp
                this.actionComand = actionComand;
65 4380 fjp
                // TODO Auto-generated constructor stub
66
        }
67
68
        public void performAction() {
69 4487 fjp
                FLyrVect lyr = null;
70
                MapControl mapCtrl = view.getMapControl();
71 6022 caballero
                try {
72 4416 fjp
                        // ChooseWriteDriver driverPanel = (ChooseWriteDriver) myWizardComponents.getWizardPanel(0);
73 4740 fjp
                        mapCtrl.getMapContext().beginAtomicEvent();
74 4416 fjp
                        if (actionComand.equals("SHP"))
75 4387 fjp
                        {
76 6157 caballero
                                FileBasedPanel shpPanel = (FileBasedPanel) myWizardComponents.getWizardPanel(2);
77 10937 caballero
                                String path=shpPanel.getPath();
78
                                if (!path.toLowerCase().endsWith(".shp")){
79
                                        path+=".shp";
80
                                }
81
                                File newFile = new File(path);
82 6157 caballero
                                if( newFile.exists()){
83
                                        int resp = JOptionPane.showConfirmDialog(
84
                                                        (Component) PluginServices.getMainFrame(),PluginServices.getText(this,"fichero_ya_existe_seguro_desea_guardarlo"),
85
                                                        PluginServices.getText(this,"guardar"), JOptionPane.YES_NO_OPTION);
86
                                        if (resp != JOptionPane.YES_OPTION) {
87
                                                return;
88
                                        }
89
                                }
90 5152 fjp
                                ChooseGeometryType geometryTypePanel = (ChooseGeometryType) myWizardComponents.getWizardPanel(0);
91
                                JPanelFieldDefinition fieldDefinitionPanel = (JPanelFieldDefinition) myWizardComponents.getWizardPanel(1);
92 6022 caballero
93
94 5152 fjp
                                String layerName = geometryTypePanel.getLayerName();
95
                                String selectedDriver = geometryTypePanel.getSelectedDriver();
96
                                int geometryType = geometryTypePanel.getSelectedGeometryType();
97
                                FieldDescription[] fieldsDesc = fieldDefinitionPanel.getFieldsDescription();
98 6022 caballero
99
                                Driver drv = LayerFactory.getDM().getDriver(selectedDriver);
100
101 6157 caballero
102
103 4416 fjp
                        SHPLayerDefinition lyrDef = new SHPLayerDefinition();
104
                        lyrDef.setFieldsDesc(fieldsDesc);
105
                        lyrDef.setFile(newFile);
106
                        lyrDef.setName(layerName);
107
                        lyrDef.setShapeType(geometryType);
108
                            ShpWriter writer= (ShpWriter)LayerFactory.getWM().getWriter("Shape Writer");
109 4438 fjp
                            writer.setFile(newFile);
110
                            writer.initialize(lyrDef);
111 4416 fjp
                            writer.preProcess();
112
                            writer.postProcess();
113 6022 caballero
114
115 4421 fjp
                lyr = (FLyrVect) LayerFactory.createLayer(layerName,
116 4416 fjp
                        (VectorialFileDriver) drv, newFile, mapCtrl.getProjection());
117 6022 caballero
118 4387 fjp
                        }
119 4937 fjp
                        else if (actionComand.equals("DXF"))
120
                        {
121 6473 caballero
                            FileBasedPanel dxfPanel = (FileBasedPanel) myWizardComponents.getWizardPanel(0);
122 10937 caballero
                            String path=dxfPanel.getPath();
123
                                if (!path.toLowerCase().endsWith(".dxf")){
124
                                        path+=".dxf";
125
                                }
126
                            File newFile = new File(path);
127 6473 caballero
                        if( newFile.exists()){
128
                                        int resp = JOptionPane.showConfirmDialog(
129
                                                        (Component) PluginServices.getMainFrame(),PluginServices.getText(this,"fichero_ya_existe_seguro_desea_guardarlo"),
130
                                                        PluginServices.getText(this,"guardar"), JOptionPane.YES_NO_OPTION);
131
                                        if (resp != JOptionPane.YES_OPTION) {
132
                                                return;
133
                                        }
134
                                }
135 5152 fjp
                        DXFLayerDefinition lyrDef = new DXFLayerDefinition();
136 4937 fjp
                        lyrDef.setFile(newFile);
137 5152 fjp
                        String layerName = newFile.getName();
138 4937 fjp
                        lyrDef.setName(layerName);
139
                            DxfWriter writer= (DxfWriter)LayerFactory.getWM().getWriter("DXF Writer");
140
                            writer.setFile(newFile);
141 5152 fjp
                            DxfFieldsMapping fieldsMapping = new DxfFieldsMapping();
142
                            fieldsMapping.setLayerField("Layer");
143
                            fieldsMapping.setColorField("Color");
144
                            fieldsMapping.setElevationField("Elevation");
145
                            fieldsMapping.setThicknessField("Thickness");
146
                            fieldsMapping.setTextField("Text");
147
                            fieldsMapping.setHeightText("HeightText");
148
                            fieldsMapping.setRotationText("RotationText");
149
                            writer.setFieldMapping(fieldsMapping);
150
                            writer.setProjection(mapCtrl.getProjection());
151 4937 fjp
                            writer.initialize(lyrDef);
152
                            writer.preProcess();
153
                            writer.postProcess();
154 5152 fjp
                            Driver drv = LayerFactory.getDM().getDriver("gvSIG DXF Memory Driver");
155 6022 caballero
156 4937 fjp
                lyr = (FLyrVect) LayerFactory.createLayer(layerName,
157
                        (VectorialFileDriver) drv, newFile, mapCtrl.getProjection());
158 6022 caballero
159
                        }
160 5152 fjp
                        else if (actionComand.equals("POSTGIS"))
161 4387 fjp
                        {
162 5152 fjp
                                ChooseGeometryType geometryTypePanel = (ChooseGeometryType) myWizardComponents.getWizardPanel(0);
163
                                JPanelFieldDefinition fieldDefinitionPanel = (JPanelFieldDefinition) myWizardComponents.getWizardPanel(1);
164 6022 caballero
165
166 5152 fjp
                                String layerName = geometryTypePanel.getLayerName();
167
                                String selectedDriver = geometryTypePanel.getSelectedDriver();
168
                                int geometryType = geometryTypePanel.getSelectedGeometryType();
169
                                FieldDescription[] fieldsDesc = fieldDefinitionPanel.getFieldsDescription();
170 6022 caballero
171
                                Driver drv = LayerFactory.getDM().getDriver(selectedDriver);
172
173 11935 caballero
                                IVectorialJDBCDriver dbDriver = (IVectorialJDBCDriver) drv;
174 4740 fjp
                            PostGISpanel postgisPanel = (PostGISpanel) myWizardComponents.getWizardPanel(2);
175
                                ConnectionSettings cs = postgisPanel.getConnSettings();
176 4416 fjp
                                if (cs == null)
177
                                        return;
178 11935 caballero
                                IConnection conex = ConnectionFactory.createConnection(cs.getConnectionString(),
179 4416 fjp
                                                cs.getUser(), cs.getPassw());
180
181 4740 fjp
                                DBLayerDefinition dbLayerDef = new DBLayerDefinition();
182 4416 fjp
                                dbLayerDef.setCatalogName(cs.getDb());
183 11867 jmvivo
                                dbLayerDef.setSchema(cs.getSchema());
184 4740 fjp
                                dbLayerDef.setTableName(layerName);
185
                                dbLayerDef.setShapeType(geometryType);
186 4767 fjp
                                dbLayerDef.setFieldsDesc(fieldsDesc);
187 4416 fjp
                                dbLayerDef.setFieldGeometry("the_geom");
188 4748 fjp
                                dbLayerDef.setFieldID("gid");
189 6022 caballero
190 4748 fjp
                                dbLayerDef.setWhereClause("");
191 4740 fjp
                                String strSRID = mapCtrl.getProjection().getAbrev()
192 4416 fjp
                                                .substring(5);
193 6022 caballero
                                dbLayerDef.setSRID_EPSG(strSRID);
194 4748 fjp
                                dbLayerDef.setConnection(conex);
195 4740 fjp
196 4748 fjp
                            PostGISWriter writer= new PostGISWriter(); //(PostGISWriter)LayerFactory.getWM().getWriter("PostGIS Writer");
197 4740 fjp
                            writer.setWriteAll(true);
198
                            writer.setCreateTable(true);
199
                            writer.initialize(dbLayerDef);
200
201 4767 fjp
                            // Creamos la tabla.
202 4740 fjp
                            writer.preProcess();
203
                            writer.postProcess();
204 6022 caballero
205 4740 fjp
                    if (dbDriver instanceof ICanReproject)
206 6022 caballero
                    {
207 4740 fjp
                        ((ICanReproject)dbDriver).setDestProjection(strSRID);
208
                    }
209 6022 caballero
210
                    // Creamos el driver. OJO: Hay que a?adir el campo ID a la
211 4767 fjp
                    // definici?n de campos.
212 6022 caballero
213 4767 fjp
                    boolean bFound = false;
214
                    for (int i=0; i < dbLayerDef.getFieldsDesc().length; i++)
215
                    {
216
                            FieldDescription f = dbLayerDef.getFieldsDesc()[i];
217
                            if (f.getFieldName().equalsIgnoreCase(dbLayerDef.getFieldID()))
218
                            {
219
                                    bFound = true;
220
                                    break;
221
                            }
222
                    }
223
                    // Si no est?, lo a?adimos
224
                    if (!bFound)
225
                    {
226
                            int numFieldsAnt = dbLayerDef.getFieldsDesc().length;
227
                            FieldDescription[] newFields = new FieldDescription[dbLayerDef.getFieldsDesc().length + 1];
228
                        for (int i=0; i < numFieldsAnt; i++)
229
                        {
230
                                newFields[i] = dbLayerDef.getFieldsDesc()[i];
231
                        }
232
                        newFields[numFieldsAnt] = new FieldDescription();
233
                        newFields[numFieldsAnt].setFieldDecimalCount(0);
234
                        newFields[numFieldsAnt].setFieldType(Types.INTEGER);
235
                        newFields[numFieldsAnt].setFieldLength(7);
236
                        newFields[numFieldsAnt].setFieldName(dbLayerDef.getFieldID());
237
                        dbLayerDef.setFieldsDesc(newFields);
238 6022 caballero
239 4767 fjp
                    }
240
241 4740 fjp
                    dbDriver.setData(conex, dbLayerDef);
242 6022 caballero
                    IProjection proj = null;
243 4740 fjp
                    if (drv instanceof ICanReproject)
244 6022 caballero
                    {
245 12840 caballero
                        proj = CRSFactory.getCRS("EPSG:" + ((ICanReproject)dbDriver).getSourceProjection(null,null));
246 4740 fjp
                    }
247 6022 caballero
248 4740 fjp
                            lyr = (FLyrVect) LayerFactory.createDBLayer(dbDriver, layerName, proj);
249 6022 caballero
250 4387 fjp
                        }
251 6022 caballero
                        else // Si no es ni lo uno ni lo otro,
252 4387 fjp
                        {
253 6022 caballero
254
255 4387 fjp
                        }
256 4380 fjp
                } catch (Exception e) {
257 12643 caballero
                        NotificationManager.addError(e.getMessage(), e);
258 4380 fjp
                }
259 4487 fjp
        lyr.setVisible(true);
260 6022 caballero
261 4487 fjp
                mapCtrl.getMapContext().getLayers().addLayer(lyr);
262 6022 caballero
263 4487 fjp
                mapCtrl.getMapContext().endAtomicEvent();
264
                lyr.addLayerListener(CADExtension.getEditionManager());
265
                lyr.setActive(true);
266 6473 caballero
267 5152 fjp
                try {
268
                        lyr.setEditing(true);
269 5893 fjp
                VectorialEditableAdapter vea = (VectorialEditableAdapter) lyr.getSource();
270
                        vea.getRules().clear();
271 6002 fjp
                        // TODO: ESTO ES PROVISIONAL, DESCOMENTAR LUEGO
272 6013 fjp
                        if (vea.getShapeType() == FShape.POLYGON)
273
                        {
274
                                IRule rulePol = new RulePolygon();
275
                                vea.getRules().add(rulePol);
276
                        }
277 6022 caballero
                        StartEditing.startCommandsApplicable(view,lyr);
278 5893 fjp
                vea.getCommandRecord().addCommandListener(mapCtrl);
279
                view.showConsole();
280 6022 caballero
281 5893 fjp
                        // Para cerrar el cuadro de di?logo.
282
                        oldAction.performAction();
283 5152 fjp
                } catch (EditionException e) {
284
                        e.printStackTrace();
285 12643 caballero
                        NotificationManager.addError(e.getMessage(), e);
286 6013 fjp
                } catch (DriverIOException e) {
287 5893 fjp
                        e.printStackTrace();
288 12643 caballero
                        NotificationManager.addError(e.getMessage(), e);
289 5893 fjp
290 5152 fjp
                }
291 5893 fjp
292 6022 caballero
293 4380 fjp
        }
294 6022 caballero
295 4380 fjp
}