Statistics
| Revision:

root / trunk / extensions / extCAD / src / com / iver / cit / gvsig / ExportTo.java @ 6471

History | View | Annotate | Download (21.1 KB)

1 5267 fjp
package com.iver.cit.gvsig;
2
3
import java.awt.Component;
4 6371 caballero
import java.awt.geom.Point2D;
5 5267 fjp
import java.io.File;
6 6313 fjp
import java.io.IOException;
7 5267 fjp
import java.sql.Connection;
8
import java.sql.DriverManager;
9
import java.sql.SQLException;
10 6371 caballero
import java.util.ArrayList;
11
import java.util.Vector;
12 5267 fjp
13 5284 fjp
import javax.swing.JComponent;
14 5267 fjp
import javax.swing.JFileChooser;
15
import javax.swing.JOptionPane;
16
import javax.swing.ProgressMonitor;
17
18 6313 fjp
import com.hardcode.driverManager.Driver;
19 5267 fjp
import com.hardcode.driverManager.DriverLoadException;
20
import com.hardcode.gdbms.engine.values.Value;
21
import com.iver.andami.PluginServices;
22
import com.iver.andami.messages.NotificationManager;
23
import com.iver.andami.plugins.Extension;
24
import com.iver.cit.gvsig.fmap.DriverException;
25
import com.iver.cit.gvsig.fmap.FMap;
26
import com.iver.cit.gvsig.fmap.core.DefaultFeature;
27
import com.iver.cit.gvsig.fmap.core.FShape;
28
import com.iver.cit.gvsig.fmap.core.IFeature;
29
import com.iver.cit.gvsig.fmap.core.IGeometry;
30 6371 caballero
import com.iver.cit.gvsig.fmap.core.ShapeFactory;
31
import com.iver.cit.gvsig.fmap.core.v02.FLabel;
32 5267 fjp
import com.iver.cit.gvsig.fmap.drivers.DBLayerDefinition;
33
import com.iver.cit.gvsig.fmap.drivers.DriverIOException;
34
import com.iver.cit.gvsig.fmap.drivers.FieldDescription;
35
import com.iver.cit.gvsig.fmap.drivers.SHPLayerDefinition;
36 6313 fjp
import com.iver.cit.gvsig.fmap.drivers.VectorialDriver;
37 6471 caballero
import com.iver.cit.gvsig.fmap.drivers.dxf.DXFMemoryDriver;
38 5267 fjp
import com.iver.cit.gvsig.fmap.drivers.jdbc.postgis.PostGISWriter;
39 6471 caballero
import com.iver.cit.gvsig.fmap.drivers.jdbc.postgis.PostGisDriver;
40 6313 fjp
import com.iver.cit.gvsig.fmap.drivers.shp.IndexedShpDriver;
41 5267 fjp
import com.iver.cit.gvsig.fmap.edition.DefaultRowEdited;
42
import com.iver.cit.gvsig.fmap.edition.EditionException;
43
import com.iver.cit.gvsig.fmap.edition.IWriter;
44
import com.iver.cit.gvsig.fmap.edition.writers.dxf.DxfFieldsMapping;
45
import com.iver.cit.gvsig.fmap.edition.writers.dxf.DxfWriter;
46 6433 jorpiell
import com.iver.cit.gvsig.fmap.edition.writers.gml.GMLWriter;
47 5267 fjp
import com.iver.cit.gvsig.fmap.edition.writers.shp.ShpWriter;
48
import com.iver.cit.gvsig.fmap.layers.FBitSet;
49
import com.iver.cit.gvsig.fmap.layers.FLayer;
50
import com.iver.cit.gvsig.fmap.layers.FLayers;
51 6371 caballero
import com.iver.cit.gvsig.fmap.layers.FLyrAnnotation;
52 5267 fjp
import com.iver.cit.gvsig.fmap.layers.FLyrVect;
53
import com.iver.cit.gvsig.fmap.layers.LayerFactory;
54
import com.iver.cit.gvsig.fmap.layers.ReadableVectorial;
55
import com.iver.cit.gvsig.fmap.layers.SelectableDataSource;
56
import com.iver.cit.gvsig.gui.View;
57
import com.iver.cit.gvsig.jdbc_spatial.DlgConnection;
58
import com.iver.cit.gvsig.jdbc_spatial.gui.jdbcwizard.ConnectionSettings;
59
import com.iver.cit.gvsig.project.ProjectView;
60
import com.iver.utiles.SimpleFileFilter;
61 5317 fjp
import com.iver.utiles.swing.threads.AbstractMonitorableTask;
62 5267 fjp
63
public class ExportTo extends Extension {
64
65 5284 fjp
        private class WriterTask extends AbstractMonitorableTask
66
        {
67
                FLyrVect lyrVect;
68
                IWriter writer;
69
                int rowCount;
70
                ReadableVectorial va;
71
                SelectableDataSource sds;
72
                FBitSet bitSet;
73 6313 fjp
                FMap mapContext;
74
                VectorialDriver reader;
75 6371 caballero
76 6313 fjp
                public WriterTask(FMap mapContext, FLyrVect lyr, IWriter writer, Driver reader) throws DriverException, DriverIOException
77 5284 fjp
                {
78 6313 fjp
                        this.mapContext = mapContext;
79 5284 fjp
                        this.lyrVect = lyr;
80
                        this.writer = writer;
81 6313 fjp
                        this.reader = (VectorialDriver) reader;
82 5675 caballero
83 5284 fjp
                        setInitialStep(0);
84
                        setDeterminatedProcess(true);
85
                        setStatusMessage(PluginServices.getText(this, "exportando_features"));
86 5675 caballero
87 5284 fjp
                        va = lyrVect.getSource();
88
                        sds = lyrVect.getRecordset();
89
90
                        bitSet = sds.getSelection();
91
92
                        if (bitSet.cardinality() == 0)
93
                                rowCount = va.getShapeCount();
94
                        else
95
                                rowCount = bitSet.cardinality();
96
97
                        setFinalStep(rowCount);
98 5675 caballero
99 5284 fjp
                }
100
                public void run() throws Exception {
101
102 6371 caballero
                        if (lyrVect instanceof FLyrAnnotation && lyrVect.getShapeType()!=FShape.POINT) {
103
                                SHPLayerDefinition lyrDef=(SHPLayerDefinition)writer.getTableDefinition();
104
                                lyrDef.setShapeType(FShape.POINT);
105
                                writer.initialize(lyrDef);
106
                        }
107
108 5284 fjp
                        // Creamos la tabla.
109
                        writer.preProcess();
110
111
                        if (bitSet.cardinality() == 0) {
112
                                rowCount = va.getShapeCount();
113
                                for (int i = 0; i < rowCount; i++) {
114
                                        IGeometry geom = va.getShape(i);
115 6371 caballero
                                        if (lyrVect instanceof FLyrAnnotation && geom.getGeometryType()!=FShape.POINT) {
116
                                                Point2D p=FLabel.createLabelPoint((FShape)geom.getInternalShape());
117
                                                geom=ShapeFactory.createPoint2D(p.getX(),p.getY());
118
                                        }
119 5284 fjp
                                        reportStep();
120
                                        setNote(PluginServices.getText(this, "exporting_") + i);
121
                                        if (isCanceled())
122
                                                break;
123
124
                                        if (geom != null) {
125
                                                Value[] values = sds.getRow(i);
126
                                                IFeature feat = new DefaultFeature(geom, values, "" + i);
127
                                                DefaultRowEdited edRow = new DefaultRowEdited(feat,
128
                                                                DefaultRowEdited.STATUS_ADDED, i);
129
                                                writer.process(edRow);
130
                                        }
131
                                }
132
                        } else {
133
                                int counter = 0;
134
                                for (int i = bitSet.nextSetBit(0); i >= 0; i = bitSet
135
                                                .nextSetBit(i + 1)) {
136
                                        IGeometry geom = va.getShape(i);
137 6371 caballero
                                        if (lyrVect instanceof FLyrAnnotation && geom.getGeometryType()!=FShape.POINT) {
138
                                                Point2D p=FLabel.createLabelPoint((FShape)geom.getInternalShape());
139
                                                geom=ShapeFactory.createPoint2D(p.getX(),p.getY());
140
                                        }
141 5284 fjp
                                        reportStep();
142
                                        setNote(PluginServices.getText(this, "exporting_") + counter);
143
                                        if (isCanceled())
144
                                                break;
145
146
                                        if (geom != null) {
147
                                                Value[] values = sds.getRow(i);
148
                                                IFeature feat = new DefaultFeature(geom, values, "" + i);
149
                                                DefaultRowEdited edRow = new DefaultRowEdited(feat,
150
                                                                DefaultRowEdited.STATUS_ADDED, i);
151
152
                                                writer.process(edRow);
153
                                        }
154
                                }
155
156
                        }
157
158
                        writer.postProcess();
159 6471 caballero
                        if (reader != null){
160
                                int res = JOptionPane.showConfirmDialog(
161 5284 fjp
                                        (JComponent) PluginServices.getMDIManager().getActiveView()
162 6471 caballero
                                        , PluginServices.getText(this, "insertar_en_la_vista_la_capa_creada"),
163
                                        PluginServices.getText(this,"insertar_capa"),
164 6313 fjp
                                        JOptionPane.YES_NO_OPTION);
165 6471 caballero
166 6313 fjp
                                if (res == JOptionPane.YES_OPTION)
167
                                {
168
                                        FLayer newLayer = LayerFactory.createLayer(
169
                                                        writer.getTableDefinition().getName(), reader, mapContext.getProjection());
170
                                        mapContext.getLayers().addLayer(newLayer);
171
                                }
172
                        }
173 5284 fjp
174
                }
175 5675 caballero
176 5284 fjp
        }
177 6371 caballero
        private class MultiWriterTask extends AbstractMonitorableTask{
178
                Vector tasks=new Vector();
179
                public void addTask(WriterTask wt) {
180
                        tasks.add(wt);
181
                }
182
                public void run() throws Exception {
183
                        for (int i = 0; i < tasks.size(); i++) {
184
                                ((WriterTask)tasks.get(i)).run();
185
                        }
186
                        tasks.clear();
187
                }
188 5284 fjp
189 6371 caballero
190
        }
191 5267 fjp
        /**
192
         * @see com.iver.andami.plugins.IExtension#initialize()
193
         */
194
        public void initialize() {
195
        }
196
197
        /**
198
         * @see com.iver.andami.plugins.IExtension#execute(java.lang.String)
199
         */
200
        public void execute(String actionCommand) {
201
                com.iver.andami.ui.mdiManager.View f = PluginServices.getMDIManager()
202
                                .getActiveView();
203
204
                if (f instanceof View) {
205
                        View vista = (View) f;
206
                        ProjectView model = vista.getModel();
207
                        FMap mapa = model.getMapContext();
208
                        FLayers layers = mapa.getLayers();
209
                        FLayer[] actives = layers.getActives();
210
                        try {
211
                                // NOTA: SI HAY UNA SELECCI?N, SOLO SE SALVAN LOS SELECCIONADOS
212
                                for (int i = 0; i < actives.length; i++) {
213
                                        if (actives[i] instanceof FLyrVect) {
214
                                                FLyrVect lv = (FLyrVect) actives[i];
215
                                                int numSelec = lv.getRecordset().getSelection()
216
                                                                .cardinality();
217
                                                if (numSelec > 0) {
218 5284 fjp
                                                        int resp = JOptionPane.showConfirmDialog(
219 5806 caballero
                                                                        (Component) PluginServices.getMainFrame(),
220
                                                                        PluginServices.getText(this,"se_van_a_guardar_") + numSelec
221
                                                                                        + PluginServices.getText(this,"features_desea_continuar"),
222
                                                                        PluginServices.getText(this,"export_to"), JOptionPane.YES_NO_OPTION);
223
                                                        if (resp != JOptionPane.YES_OPTION) {
224 5267 fjp
                                                                continue;
225
                                                        }
226
                                                } // if numSelec > 0
227
                                                if (actionCommand.equals("SHP")) {
228 6313 fjp
                                                        saveToShp(mapa, lv);
229 5267 fjp
                                                }
230
                                                if (actionCommand.equals("DXF")) {
231 6313 fjp
                                                        saveToDxf(mapa, lv);
232 5267 fjp
                                                }
233
                                                if (actionCommand.equals("POSTGIS")) {
234 6313 fjp
                                                        saveToPostGIS(mapa, lv);
235 5267 fjp
                                                }
236 6433 jorpiell
                                                if (actionCommand.equals("GML")) {
237
                                                        saveToGml(mapa, lv);
238
                                                }
239 5267 fjp
                                        } // actives[i]
240
                                } // for
241
                        } catch (EditionException e) {
242
                                e.printStackTrace();
243
                                NotificationManager.addError(e.getMessage(), e);
244
                        } catch (DriverException e) {
245
                                e.printStackTrace();
246
                                NotificationManager.addError(e.getMessage(), e);
247 5284 fjp
                        } catch (DriverIOException e) {
248
                                e.printStackTrace();
249
                                NotificationManager.addError(e.getMessage(), e);
250 5267 fjp
                        }
251
252
                }
253
        }
254
255 6313 fjp
        public void saveToPostGIS(FMap mapContext, FLyrVect layer) throws EditionException, DriverIOException {
256 5267 fjp
                try {
257
                        String tableName = JOptionPane.showInputDialog(PluginServices
258
                                        .getText(this, "intro_tablename"));
259
                        if (tableName == null)
260
                                return;
261
                        DlgConnection dlg = new DlgConnection();
262
                        dlg.setModal(true);
263
                        dlg.setVisible(true);
264
                        ConnectionSettings cs = dlg.getConnSettings();
265
                        if (cs == null)
266
                                return;
267
                        Connection conex = DriverManager.getConnection(cs
268
                                        .getConnectionString(), cs.getUser(), cs.getPassw());
269
270
                        DBLayerDefinition dbLayerDef = new DBLayerDefinition();
271
                        dbLayerDef.setCatalogName(cs.getDb());
272
                        dbLayerDef.setTableName(tableName);
273
                        dbLayerDef.setShapeType(layer.getShapeType());
274
                        SelectableDataSource sds = layer.getRecordset();
275
                        FieldDescription[] fieldsDescrip = sds.getFieldsDescription();
276
                        dbLayerDef.setFieldsDesc(fieldsDescrip);
277
                        dbLayerDef.setFieldGeometry("the_geom");
278
                        dbLayerDef.setFieldID("gid");
279
280
                        dbLayerDef.setWhereClause("");
281
                        String strSRID = layer.getProjection().getAbrev().substring(5);
282
                        dbLayerDef.setSRID_EPSG(strSRID);
283
                        dbLayerDef.setConnection(conex);
284
285
                        PostGISWriter writer = new PostGISWriter(); // (PostGISWriter)LayerFactory.getWM().getWriter("PostGIS
286
                        // Writer");
287
                        writer.setWriteAll(true);
288
                        writer.setCreateTable(true);
289
                        writer.initialize(dbLayerDef);
290 6471 caballero
                        PostGisDriver postGISDriver=new PostGisDriver();
291
                        postGISDriver.setLyrDef(dbLayerDef);
292
                        postGISDriver.open();
293 5267 fjp
294 6471 caballero
                        writeFeatures(mapContext, layer, writer, postGISDriver);
295
296 5267 fjp
                } catch (DriverException e) {
297
                        e.printStackTrace();
298
                        throw new EditionException(e);
299
                } catch (DriverLoadException e) {
300
                        throw new EditionException(e);
301
                } catch (SQLException e) {
302
                        throw new EditionException(e);
303
                } catch (com.hardcode.gdbms.engine.data.driver.DriverException e) {
304
                        e.printStackTrace();
305
                        throw new EditionException(e);
306
                }
307
308
        }
309 5675 caballero
310 6313 fjp
        private void writeFeatures(FMap mapContext, FLyrVect layer, IWriter writer, Driver reader) throws DriverException, DriverIOException
311 5284 fjp
        {
312 6313 fjp
                PluginServices.cancelableBackgroundExecution(new WriterTask(mapContext, layer, writer, reader));
313 5284 fjp
        }
314 6471 caballero
        private void writeMultiFeatures(FMap mapContext, FLyrVect layers, IWriter[] writers, Driver[] readers) throws DriverException, DriverIOException{
315 6371 caballero
                MultiWriterTask mwt=new MultiWriterTask();
316
                for (int i=0;i<writers.length;i++) {
317 6471 caballero
                        mwt.addTask(new WriterTask(mapContext, layers, writers[i], readers[i]));
318 6371 caballero
                }
319
                PluginServices.cancelableBackgroundExecution(mwt);
320
        }
321 5267 fjp
        /**
322
         * @param layer
323
         *            FLyrVect to obtain features. If selection, only selected
324
         *            features will be precessed.
325
         * @param writer
326
         *            (Must be already initialized)
327
         * @throws EditionException
328
         * @throws DriverException
329
         * @throws DriverIOException
330
         * @throws com.hardcode.gdbms.engine.data.driver.DriverException
331
         */
332 5284 fjp
        public void writeFeaturesNoThread(FLyrVect layer, IWriter writer)
333 5267 fjp
                        throws EditionException, DriverException, DriverIOException,
334
                        com.hardcode.gdbms.engine.data.driver.DriverException {
335
                ReadableVectorial va = layer.getSource();
336
                SelectableDataSource sds = layer.getRecordset();
337
338
                // Creamos la tabla.
339
                writer.preProcess();
340
341
                int rowCount;
342
                FBitSet bitSet = layer.getRecordset().getSelection();
343 5284 fjp
344
                if (bitSet.cardinality() == 0)
345
                        rowCount = va.getShapeCount();
346
                else
347
                        rowCount = bitSet.cardinality();
348
349
                ProgressMonitor progress = new ProgressMonitor(
350
                                (JComponent) PluginServices.getMDIManager().getActiveView(),
351
                                PluginServices.getText(this, "exportando_features"),
352
                                PluginServices.getText(this, "exportando_features"), 0,
353
                                rowCount);
354
355
                progress.setMillisToDecideToPopup(200);
356
                progress.setMillisToPopup(500);
357
358 5267 fjp
                if (bitSet.cardinality() == 0) {
359
                        rowCount = va.getShapeCount();
360
                        for (int i = 0; i < rowCount; i++) {
361
                                IGeometry geom = va.getShape(i);
362
363 5284 fjp
                                progress.setProgress(i);
364
                                if (progress.isCanceled())
365
                                        break;
366
367 5267 fjp
                                if (geom != null) {
368
                                        Value[] values = sds.getRow(i);
369
                                        IFeature feat = new DefaultFeature(geom, values, "" + i);
370
                                        DefaultRowEdited edRow = new DefaultRowEdited(feat,
371
                                                        DefaultRowEdited.STATUS_ADDED, i);
372
                                        writer.process(edRow);
373
                                }
374
                        }
375
                } else {
376 5284 fjp
                        int counter = 0;
377 5267 fjp
                        for (int i = bitSet.nextSetBit(0); i >= 0; i = bitSet
378
                                        .nextSetBit(i + 1)) {
379
                                IGeometry geom = va.getShape(i);
380
381 5284 fjp
                                progress.setProgress(counter++);
382
                                if (progress.isCanceled())
383
                                        break;
384
385 5267 fjp
                                if (geom != null) {
386
                                        Value[] values = sds.getRow(i);
387
                                        IFeature feat = new DefaultFeature(geom, values, "" + i);
388
                                        DefaultRowEdited edRow = new DefaultRowEdited(feat,
389
                                                        DefaultRowEdited.STATUS_ADDED, i);
390
391
                                        writer.process(edRow);
392
                                }
393
                        }
394
395
                }
396
397
                writer.postProcess();
398 5284 fjp
                progress.close();
399 5267 fjp
        }
400
401 6313 fjp
        public void saveToDxf(FMap mapContext, FLyrVect layer) throws EditionException, DriverIOException {
402 5267 fjp
                try {
403
                        JFileChooser jfc = new JFileChooser();
404
                        SimpleFileFilter filterShp = new SimpleFileFilter("dxf",
405
                                        PluginServices.getText(this, "dxf_files"));
406
                        jfc.setFileFilter(filterShp);
407
                        if (jfc.showSaveDialog((Component) PluginServices.getMainFrame()) == JFileChooser.APPROVE_OPTION) {
408
                                File newFile = jfc.getSelectedFile();
409
                                String path = newFile.getAbsolutePath();
410
                                if (!(path.toLowerCase().endsWith(".dxf"))) {
411
                                        path = path + ".dxf";
412
                                }
413
                                newFile = new File(path);
414
415
                                DxfWriter writer = (DxfWriter) LayerFactory.getWM().getWriter(
416
                                                "DXF Writer");
417
                                SHPLayerDefinition lyrDef = new SHPLayerDefinition();
418
                                SelectableDataSource sds = layer.getRecordset();
419
                                FieldDescription[] fieldsDescrip = sds.getFieldsDescription();
420
                                lyrDef.setFieldsDesc(fieldsDescrip);
421
                                lyrDef.setFile(newFile);
422
                                lyrDef.setName(newFile.getName());
423
                                lyrDef.setShapeType(layer.getShapeType());
424
                                writer.setFile(newFile);
425
                                writer.initialize(lyrDef);
426
                                writer.setProjection(layer.getProjection());
427
                                DxfFieldsMapping fieldsMapping = new DxfFieldsMapping();
428
                                // TODO: Recuperar aqu? los campos del cuadro de di?logo.
429
                                writer.setFieldMapping(fieldsMapping);
430 6471 caballero
                                DXFMemoryDriver dxfDriver=new DXFMemoryDriver();
431
                                dxfDriver.open(newFile);
432
                                writeFeatures(mapContext, layer, writer, dxfDriver);
433 5267 fjp
                        }
434
435
                } catch (DriverException e) {
436
                        e.printStackTrace();
437
                        throw new EditionException(e);
438
                } catch (com.hardcode.gdbms.engine.data.driver.DriverException e) {
439
                        e.printStackTrace();
440
                        throw new EditionException(e);
441 6471 caballero
                } catch (IOException e) {
442
                        // TODO Auto-generated catch block
443
                        e.printStackTrace();
444 5267 fjp
                }
445
446
        }
447
448 6313 fjp
        public void saveToShp(FMap mapContext, FLyrVect layer) throws EditionException, DriverIOException {
449 5267 fjp
                try {
450
                        JFileChooser jfc = new JFileChooser();
451
                        SimpleFileFilter filterShp = new SimpleFileFilter("shp",
452
                                        PluginServices.getText(this, "shp_files"));
453
                        jfc.setFileFilter(filterShp);
454
                        if (jfc.showSaveDialog((Component) PluginServices.getMainFrame()) == JFileChooser.APPROVE_OPTION) {
455
                                File newFile = jfc.getSelectedFile();
456
                                String path = newFile.getAbsolutePath();
457 5806 caballero
                                if( newFile.exists()){
458
                                        int resp = JOptionPane.showConfirmDialog(
459
                                                        (Component) PluginServices.getMainFrame(),PluginServices.getText(this,"fichero_ya_existe_seguro_desea_guardarlo"),
460
                                                        PluginServices.getText(this,"guardar"), JOptionPane.YES_NO_OPTION);
461
                                        if (resp != JOptionPane.YES_OPTION) {
462
                                                return;
463
                                        }
464
                                }
465 5267 fjp
                                if (!(path.toLowerCase().endsWith(".shp"))) {
466
                                        path = path + ".shp";
467
                                }
468
                                newFile = new File(path);
469
470 6471 caballero
471 5267 fjp
                                SHPLayerDefinition lyrDef = new SHPLayerDefinition();
472
                                SelectableDataSource sds = layer.getRecordset();
473
                                FieldDescription[] fieldsDescrip = sds.getFieldsDescription();
474
                                lyrDef.setFieldsDesc(fieldsDescrip);
475
                                if (layer.getShapeType() == FShape.MULTI) // Exportamos a 3
476 5284 fjp
                                // ficheros
477 5267 fjp
                                {
478 6471 caballero
                                        ShpWriter writer1 = (ShpWriter) LayerFactory.getWM().getWriter(
479
                                        "Shape Writer");
480
                                        Driver[] drivers=new Driver[3];
481 6371 caballero
                                        ShpWriter[] writers=new ShpWriter[3];
482 6471 caballero
483 5267 fjp
                                        // puntos
484
                                        String aux = path.replaceFirst(".shp", "_points.shp");
485 6471 caballero
486 5267 fjp
                                        File filePoints = new File(aux);
487
                                        lyrDef.setFile(filePoints);
488
                                        lyrDef.setName(filePoints.getName());
489
                                        lyrDef.setShapeType(FShape.POINT);
490 6471 caballero
                                        writer1.setFile(filePoints);
491 5267 fjp
                                        lyrDef.setFile(filePoints);
492 6471 caballero
                                        writer1.initialize(lyrDef);
493
                                        writers[0]=writer1;
494
                                        drivers[0]=getOpenShpDriver(filePoints);
495
                                        //drivers[0]=null;
496 5267 fjp
497 6471 caballero
                                        ShpWriter writer2 = (ShpWriter) LayerFactory.getWM().getWriter(
498
                                        "Shape Writer");
499 5267 fjp
                                        // Lineas
500
                                        aux = path.replaceFirst(".shp", "_line.shp");
501
                                        File fileLines = new File(aux);
502
                                        lyrDef.setFile(fileLines);
503
                                        lyrDef.setName(fileLines.getName());
504
                                        lyrDef.setShapeType(FShape.LINE);
505 6471 caballero
                                        writer2.setFile(fileLines);
506 5267 fjp
                                        lyrDef.setFile(fileLines);
507 6471 caballero
                                        writer2.initialize(lyrDef);
508
                                        writers[1]=writer2;
509
                                        drivers[1]=getOpenShpDriver(fileLines);
510
                                        //drivers[1]=null;
511 5267 fjp
512 6471 caballero
                                        ShpWriter writer3 = (ShpWriter) LayerFactory.getWM().getWriter(
513
                                        "Shape Writer");
514 5267 fjp
                                        // Pol?gonos
515
                                        aux = path.replaceFirst(".shp", "_polygons.shp");
516
                                        File filePolygons = new File(aux);
517
                                        lyrDef.setFile(filePolygons);
518
                                        lyrDef.setName(filePolygons.getName());
519
                                        lyrDef.setShapeType(FShape.POLYGON);
520 6471 caballero
                                        writer3.setFile(filePolygons);
521 5267 fjp
                                        lyrDef.setFile(filePolygons);
522 6471 caballero
                                        writer3.initialize(lyrDef);
523
                                        writers[2]=writer3;
524
                                        drivers[2]=getOpenShpDriver(filePolygons);
525
                                        //drivers[2]=null;
526 6371 caballero
527 6471 caballero
                                        writeMultiFeatures(mapContext,layer, writers, drivers);
528 5267 fjp
                                } else {
529 6471 caballero
                                        ShpWriter writer = (ShpWriter) LayerFactory.getWM().getWriter(
530
                                                "Shape Writer");
531
                                        IndexedShpDriver drv = getOpenShpDriver(newFile);
532 6371 caballero
533 5267 fjp
                                        lyrDef.setFile(newFile);
534
                                        lyrDef.setName(newFile.getName());
535
                                        lyrDef.setShapeType(layer.getShapeType());
536
                                        writer.setFile(newFile);
537
                                        writer.initialize(lyrDef);
538 6471 caballero
                                        writeFeatures(mapContext, layer, writer, drv);
539 5267 fjp
540
                                }
541
                        }
542
                } catch (DriverException e) {
543
                        e.printStackTrace();
544
                        throw new EditionException(e);
545
                } catch (com.hardcode.gdbms.engine.data.driver.DriverException e) {
546
                        e.printStackTrace();
547
                        throw new EditionException(e);
548
                }
549 6371 caballero
//                catch (IOException e) {
550
//                        e.printStackTrace();
551
//                        throw new EditionException(e);
552
//                }
553 6471 caballero
                catch (IOException e) {
554
                        // TODO Auto-generated catch block
555
                        e.printStackTrace();
556
                }
557 5267 fjp
558
        }
559 6433 jorpiell
        /**
560
         * This method saves a layer to GML
561
         * @param mapContext
562
         * @param layer
563
         * @throws EditionException
564
         * @throws DriverIOException
565
         */
566
        public void saveToGml(FMap mapContext, FLyrVect layer) throws EditionException, DriverIOException {
567
                try {
568
                        JFileChooser jfc = new JFileChooser();
569
                        SimpleFileFilter filterShp = new SimpleFileFilter("gml",
570
                                        PluginServices.getText(this, "gml_files"));
571
                        jfc.setFileFilter(filterShp);
572
                        if (jfc.showSaveDialog((Component) PluginServices.getMainFrame()) == JFileChooser.APPROVE_OPTION) {
573
                                File newFile = jfc.getSelectedFile();
574
                                String path = newFile.getAbsolutePath();
575
                                if (!(path.toLowerCase().endsWith(".gml"))) {
576
                                        path = path + ".gml";
577
                                }
578
                                newFile = new File(path);
579
580
                                GMLWriter writer = (GMLWriter)LayerFactory.getWM().getWriter("GML Writer");
581
582
                                SHPLayerDefinition lyrDef = new SHPLayerDefinition();
583
                                SelectableDataSource sds = layer.getRecordset();
584
                                FieldDescription[] fieldsDescrip = sds.getFieldsDescription();
585
                                lyrDef.setFieldsDesc(fieldsDescrip);
586
                                lyrDef.setName(layer.getName());
587
                                lyrDef.setShapeType(layer.getShapeType());
588
589
                                writer.setFile(newFile);
590
                                writer.setSchema(lyrDef);
591
                                writer.setBoundedBy(layer.getFullExtent(),layer.getProjection());
592
593
                                writeFeatures(mapContext, layer, writer, null);
594
                        }
595 5267 fjp
596 6433 jorpiell
                } catch (DriverException e) {
597
                        e.printStackTrace();
598
                        throw new EditionException(e);
599
                } catch (com.hardcode.gdbms.engine.data.driver.DriverException e) {
600
                        e.printStackTrace();
601
                        throw new EditionException(e);
602
                }
603
//                catch (IOException e) {
604
//                        e.printStackTrace();
605
//                        throw new EditionException(e);
606
//                }
607
608
        }
609 6471 caballero
        private IndexedShpDriver getOpenShpDriver(File fileShp) throws IOException {
610
                IndexedShpDriver drv = new IndexedShpDriver();
611
                if (!fileShp.exists()) {
612
                        fileShp.createNewFile();
613
                        File newFileSHX=new File(fileShp.getAbsolutePath().replaceAll(".shp",".shx"));
614
                        newFileSHX.createNewFile();
615
                        File newFileDBF=new File(fileShp.getAbsolutePath().replaceAll(".shp",".dbf"));
616
                        newFileDBF.createNewFile();
617
                }
618
                drv.open(fileShp);
619
                return drv;
620
        }
621 5267 fjp
        /**
622
         * @see com.iver.andami.plugins.IExtension#isEnabled()
623
         */
624
        public boolean isEnabled() {
625 5675 caballero
                int status = EditionUtilities.getEditionStatus();
626
                if (( status == EditionUtilities.EDITION_STATUS_ONE_VECTORIAL_LAYER_ACTIVE || status == EditionUtilities.EDITION_STATUS_ONE_VECTORIAL_LAYER_ACTIVE_AND_EDITABLE)
627
                                || (status == EditionUtilities.EDITION_STATUS_MULTIPLE_VECTORIAL_LAYER_ACTIVE)|| (status == EditionUtilities.EDITION_STATUS_MULTIPLE_VECTORIAL_LAYER_ACTIVE_AND_EDITABLE))
628 5562 fjp
                {
629
                        return true;
630
                }
631
                else
632 5267 fjp
                        return false;
633
        }
634
635
        /**
636
         * @see com.iver.andami.plugins.IExtension#isVisible()
637
         */
638
        public boolean isVisible() {
639
                com.iver.andami.ui.mdiManager.View f = PluginServices.getMDIManager()
640
                                .getActiveView();
641
642
                if (f == null) {
643
                        return false;
644
                }
645
646 5900 jorpiell
                if (f instanceof View) {
647 5267 fjp
                        return true;
648
                } else {
649
                        return false;
650
                }
651
652
        }
653
654
}