Statistics
| Revision:

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

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