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 | } |