Statistics
| Revision:

svn-gvsig-desktop / trunk / extensions / extCAD / src / com / iver / cit / gvsig / gui / cad / MyFinishAction.java @ 4937

History | View | Annotate | Download (8.26 KB)

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

    
3
import java.io.File;
4
import java.sql.Connection;
5
import java.sql.DriverManager;
6
import java.sql.Types;
7

    
8
import jwizardcomponent.FinishAction;
9
import jwizardcomponent.JWizardComponents;
10

    
11
import org.cresques.cts.IProjection;
12
import org.cresques.cts.ProjectionPool;
13

    
14
import com.hardcode.driverManager.Driver;
15
import com.iver.cit.gvsig.CADExtension;
16
import com.iver.cit.gvsig.fmap.MapControl;
17
import com.iver.cit.gvsig.fmap.core.ICanReproject;
18
import com.iver.cit.gvsig.fmap.drivers.DBLayerDefinition;
19
import com.iver.cit.gvsig.fmap.drivers.FieldDescription;
20
import com.iver.cit.gvsig.fmap.drivers.ITableDefinition;
21
import com.iver.cit.gvsig.fmap.drivers.SHPLayerDefinition;
22
import com.iver.cit.gvsig.fmap.drivers.VectorialFileDriver;
23
import com.iver.cit.gvsig.fmap.drivers.VectorialJDBCDriver;
24
import com.iver.cit.gvsig.fmap.drivers.jdbc.postgis.PostGISWriter;
25
import com.iver.cit.gvsig.fmap.edition.VectorialEditableAdapter;
26
import com.iver.cit.gvsig.fmap.edition.writers.dxf.DxfWriter;
27
import com.iver.cit.gvsig.fmap.edition.writers.shp.ShpWriter;
28
import com.iver.cit.gvsig.fmap.layers.FLyrVect;
29
import com.iver.cit.gvsig.fmap.layers.LayerFactory;
30
import com.iver.cit.gvsig.gui.View;
31
import com.iver.cit.gvsig.gui.cad.panels.ChooseGeometryType;
32
import com.iver.cit.gvsig.gui.cad.panels.JPanelFieldDefinition;
33
import com.iver.cit.gvsig.gui.cad.panels.PostGISpanel;
34
import com.iver.cit.gvsig.gui.cad.panels.FileBasedPanel;
35
import com.iver.cit.gvsig.jdbc_spatial.gui.jdbcwizard.ConnectionSettings;
36

    
37
public class MyFinishAction extends FinishAction
38
{
39
        JWizardComponents myWizardComponents;
40
        FinishAction oldAction;
41
        ITableDefinition lyrDef = null;
42
        View view;
43
        String actionComand;
44
        public MyFinishAction(JWizardComponents wizardComponents, View view, String actionComand) {                
45
                super(wizardComponents);
46
                oldAction = wizardComponents.getFinishAction();
47
                myWizardComponents = wizardComponents;
48
                this.view = view;
49
                this.actionComand = actionComand;
50
                // TODO Auto-generated constructor stub
51
        }
52

    
53
        public void performAction() {
54
                FLyrVect lyr = null;
55
                MapControl mapCtrl = view.getMapControl();
56
                try {                        
57
                        // ChooseWriteDriver driverPanel = (ChooseWriteDriver) myWizardComponents.getWizardPanel(0);
58
                        ChooseGeometryType geometryTypePanel = (ChooseGeometryType) myWizardComponents.getWizardPanel(0);
59
                        JPanelFieldDefinition fieldDefinitionPanel = (JPanelFieldDefinition) myWizardComponents.getWizardPanel(1);
60
                        
61
                         
62
                        String layerName = geometryTypePanel.getLayerName();
63
                        String selectedDriver = geometryTypePanel.getSelectedDriver();
64
                        int geometryType = geometryTypePanel.getSelectedGeometryType();
65
                        FieldDescription[] fieldsDesc = fieldDefinitionPanel.getFieldsDescription();
66
                        
67
                        Driver drv = LayerFactory.getDM().getDriver(selectedDriver);                    
68
                        mapCtrl.getMapContext().beginAtomicEvent();
69
                        if (actionComand.equals("SHP"))
70
                        {
71
                            FileBasedPanel shpPanel = (FileBasedPanel) myWizardComponents.getWizardPanel(2);
72
                        File newFile = new File(shpPanel.getPath());
73
                        SHPLayerDefinition lyrDef = new SHPLayerDefinition();
74
                        lyrDef.setFieldsDesc(fieldsDesc);
75
                        lyrDef.setFile(newFile);
76
                        lyrDef.setName(layerName);
77
                        lyrDef.setShapeType(geometryType);
78
                            ShpWriter writer= (ShpWriter)LayerFactory.getWM().getWriter("Shape Writer");
79
                            writer.setFile(newFile);
80
                            writer.initialize(lyrDef);
81
                            writer.preProcess();
82
                            writer.postProcess();
83
                            
84
                                
85
                lyr = (FLyrVect) LayerFactory.createLayer(layerName,
86
                        (VectorialFileDriver) drv, newFile, mapCtrl.getProjection());
87
                                
88
                        }
89
                        else if (actionComand.equals("DXF"))
90
                        {
91
                            FileBasedPanel shpPanel = (FileBasedPanel) myWizardComponents.getWizardPanel(2);
92
                        File newFile = new File(shpPanel.getPath());
93
                        SHPLayerDefinition lyrDef = new SHPLayerDefinition();
94
                        lyrDef.setFieldsDesc(fieldsDesc);
95
                        lyrDef.setFile(newFile);
96
                        lyrDef.setName(layerName);
97
                        lyrDef.setShapeType(geometryType);
98
                            DxfWriter writer= (DxfWriter)LayerFactory.getWM().getWriter("DXF Writer");
99
                            writer.setFile(newFile);
100
                            writer.initialize(lyrDef);
101
                            writer.preProcess();
102
                            writer.postProcess();
103
                            
104
                                
105
                lyr = (FLyrVect) LayerFactory.createLayer(layerName,
106
                        (VectorialFileDriver) drv, newFile, mapCtrl.getProjection());
107
                                
108
                        }                        
109
                        else if (drv instanceof VectorialJDBCDriver)
110
                        {
111
                                VectorialJDBCDriver dbDriver = (VectorialJDBCDriver) drv;
112
                            PostGISpanel postgisPanel = (PostGISpanel) myWizardComponents.getWizardPanel(2);
113
                                ConnectionSettings cs = postgisPanel.getConnSettings();
114
                                if (cs == null)
115
                                        return;
116
                                Connection conex = DriverManager.getConnection(cs.getConnectionString(),
117
                                                cs.getUser(), cs.getPassw());
118

    
119
                                DBLayerDefinition dbLayerDef = new DBLayerDefinition();
120
                                dbLayerDef.setCatalogName(cs.getDb());
121
                                dbLayerDef.setTableName(layerName);
122
                                dbLayerDef.setShapeType(geometryType);
123
                                dbLayerDef.setFieldsDesc(fieldsDesc);
124
                                dbLayerDef.setFieldGeometry("the_geom");
125
                                dbLayerDef.setFieldID("gid");
126
                                
127
                                dbLayerDef.setWhereClause("");
128
                                String strSRID = mapCtrl.getProjection().getAbrev()
129
                                                .substring(5);
130
                                dbLayerDef.setSRID_EPSG(strSRID); 
131
                                dbLayerDef.setConnection(conex);
132

    
133
                            PostGISWriter writer= new PostGISWriter(); //(PostGISWriter)LayerFactory.getWM().getWriter("PostGIS Writer");
134
                            writer.setWriteAll(true);
135
                            writer.setCreateTable(true);
136
                            writer.initialize(dbLayerDef);
137

    
138
                            // Creamos la tabla.
139
                            writer.preProcess();
140
                            writer.postProcess();
141
                            
142
                    if (dbDriver instanceof ICanReproject)
143
                    {                    
144
                        ((ICanReproject)dbDriver).setDestProjection(strSRID);
145
                    }
146
                    
147
                    // Creamos el driver. OJO: Hay que a?adir el campo ID a la 
148
                    // definici?n de campos.
149
                    
150
                    boolean bFound = false;
151
                    for (int i=0; i < dbLayerDef.getFieldsDesc().length; i++)
152
                    {
153
                            FieldDescription f = dbLayerDef.getFieldsDesc()[i];
154
                            if (f.getFieldName().equalsIgnoreCase(dbLayerDef.getFieldID()))
155
                            {
156
                                    bFound = true;
157
                                    break;
158
                            }
159
                    }
160
                    // Si no est?, lo a?adimos
161
                    if (!bFound)
162
                    {
163
                            int numFieldsAnt = dbLayerDef.getFieldsDesc().length;
164
                            FieldDescription[] newFields = new FieldDescription[dbLayerDef.getFieldsDesc().length + 1];
165
                        for (int i=0; i < numFieldsAnt; i++)
166
                        {
167
                                newFields[i] = dbLayerDef.getFieldsDesc()[i];
168
                        }
169
                        newFields[numFieldsAnt] = new FieldDescription();
170
                        newFields[numFieldsAnt].setFieldDecimalCount(0);
171
                        newFields[numFieldsAnt].setFieldType(Types.INTEGER);
172
                        newFields[numFieldsAnt].setFieldLength(7);
173
                        newFields[numFieldsAnt].setFieldName(dbLayerDef.getFieldID());
174
                        dbLayerDef.setFieldsDesc(newFields);
175
                            
176
                    }
177

    
178
                    dbDriver.setData(conex, dbLayerDef);
179
                    IProjection proj = null; 
180
                    if (drv instanceof ICanReproject)
181
                    {                                        
182
                        proj = ProjectionPool.get("EPSG:" + ((ICanReproject)dbDriver).getSourceProjection()); 
183
                    }
184
                                
185
                            lyr = (FLyrVect) LayerFactory.createDBLayer(dbDriver, layerName, proj);
186
                                
187
                        }
188
                        else // Si no es ni lo uno ni lo otro, 
189
                        {
190
                                
191
                                
192
                        }
193
                } catch (Exception e) {
194
                        // TODO Auto-generated catch block
195
                        e.printStackTrace();
196
                }
197
        lyr.setVisible(true);
198
                mapCtrl.getMapContext().getLayers().addLayer(lyr);
199
                
200
                mapCtrl.getMapContext().endAtomicEvent();
201
                lyr.addLayerListener(CADExtension.getEditionManager());
202
                lyr.setActive(true);
203
                lyr.setEditing(true);
204
        VectorialEditableAdapter vea = (VectorialEditableAdapter) lyr.getSource();
205
        // TODO: Provisional, para que al poner
206
        // un tema en edici?n el CADToolAdapter se entere
207
        CADExtension.getCADToolAdapter().setVectorialAdapter(vea);
208
        vea.getCommandRecord().addCommandListener(mapCtrl);
209
        view.showConsole();
210
                
211
                // Para cerrar el cuadro de di?logo.
212
                oldAction.performAction();
213
                
214
        }
215
          
216
}
217