Statistics
| Revision:

svn-gvsig-desktop / branches / v2_0_0_prep / extensions / extEditing / src / com / iver / cit / gvsig / ExportTo.java @ 24778

History | View | Annotate | Download (26.4 KB)

1
package com.iver.cit.gvsig;
2

    
3
import java.awt.Component;
4
import java.io.File;
5

    
6
import javax.swing.JFileChooser;
7

    
8
import org.gvsig.fmap.dal.DALLocator;
9
import org.gvsig.fmap.dal.DataExplorerParameters;
10
import org.gvsig.fmap.dal.DataManager;
11
import org.gvsig.fmap.dal.exception.DataException;
12
import org.gvsig.fmap.dal.exception.ReadException;
13
import org.gvsig.fmap.mapcontext.MapContext;
14
import org.gvsig.fmap.mapcontext.layers.FLayer;
15
import org.gvsig.fmap.mapcontext.layers.FLayers;
16
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
17
import org.gvsig.tools.exception.DriverException;
18

    
19
import com.iver.andami.PluginServices;
20
import com.iver.andami.messages.NotificationManager;
21
import com.iver.andami.plugins.Extension;
22
import com.iver.cit.gvsig.project.documents.view.IProjectView;
23
import com.iver.cit.gvsig.project.documents.view.gui.View;
24
import com.iver.utiles.SimpleFileFilter;
25

    
26
public class ExportTo extends Extension {
27
        private String lastPath = null;
28
//        private class WriterTask extends AbstractMonitorableTask
29
//        {
30
//                FLyrVect lyrVect;
31
//                IWriter writer;
32
//                int rowCount;
33
//                ReadableVectorial va;
34
//                SelectableDataSource sds;
35
//                FBitSet bitSet;
36
//                MapContext mapContext;
37
//                VectorialDriver reader;
38
//
39
//                public WriterTask(MapContext mapContext, FLyrVect lyr, IWriter writer, Driver reader) throws ReadDriverException
40
//                {
41
//                        this.mapContext = mapContext;
42
//                        this.lyrVect = lyr;
43
//                        this.writer = writer;
44
//                        this.reader = (VectorialDriver) reader;
45
//
46
//                        setInitialStep(0);
47
//                        setDeterminatedProcess(true);
48
//                        setStatusMessage(PluginServices.getText(this, "exportando_features"));
49
//
50
//                        va = lyrVect.getSource();
51
//                        sds = lyrVect.getRecordset();
52
//
53
//                        bitSet = sds.getSelection();
54
//
55
//                        if (bitSet.cardinality() == 0)
56
//                                rowCount = va.getShapeCount();
57
//                        else
58
//                                rowCount = bitSet.cardinality();
59
//
60
//                        setFinalStep(rowCount);
61
//
62
//                }
63
//                public void run() throws Exception {
64
//                        va.start();
65
//                        ICoordTrans ct = lyrVect.getCoordTrans();
66
//                        DriverAttributes attr = va.getDriverAttributes();
67
//                        boolean bMustClone = false;
68
//                        if (attr != null) {
69
//                                if (attr.isLoadedInMemory()) {
70
//                                        bMustClone = attr.isLoadedInMemory();
71
//                                }
72
//                        }
73
//                        if (lyrVect instanceof FLyrAnnotation && lyrVect.getShapeType()!=FShape.POINT) {
74
//                                SHPLayerDefinition lyrDef=(SHPLayerDefinition)writer.getTableDefinition();
75
//                                lyrDef.setShapeType(FShape.POINT);
76
//                                writer.initialize(lyrDef);
77
//                        }
78
//
79
//                        // Creamos la tabla.
80
//                        writer.preProcess();
81
//
82
//                        if (bitSet.cardinality() == 0) {
83
//                                rowCount = va.getShapeCount();
84
//                                for (int i = 0; i < rowCount; i++) {
85
//                                        IGeometry geom = va.getShape(i);
86
//                                        if (geom == null) {
87
//                                                continue;
88
//                                        }
89
//                                        if (lyrVect instanceof FLyrAnnotation && geom.getGeometryType()!=FShape.POINT) {
90
//                                                Point2D p=FLabel.createLabelPoint((FShape)geom.getInternalShape());
91
//                                                geom=ShapeFactory.createPoint2D(p.getX(),p.getY());
92
//                                        }
93
//                                        if (ct != null) {
94
//                                                if (bMustClone)
95
//                                                        geom = geom.cloneGeometry();
96
//                                                geom.reProject(ct);
97
//                                        }
98
//                                        reportStep();
99
//                                        setNote(PluginServices.getText(this, "exporting_") + i);
100
//                                        if (isCanceled())
101
//                                                break;
102
//
103
//                                        if (geom != null) {
104
//                                                Value[] values = sds.getRow(i);
105
//                                                IFeature feat = new DefaultFeature(geom, values, "" + i);
106
//                                                DefaultRowEdited edRow = new DefaultRowEdited(feat,
107
//                                                                DefaultRowEdited.STATUS_ADDED, i);
108
//                                                writer.process(edRow);
109
//                                        }
110
//                                }
111
//                        } else {
112
//                                int counter = 0;
113
//                                for (int i = bitSet.nextSetBit(0); i >= 0; i = bitSet
114
//                                                .nextSetBit(i + 1)) {
115
//                                        IGeometry geom = va.getShape(i);
116
//                                        if (geom == null) {
117
//                                                continue;
118
//                                        }
119
//                                        if (lyrVect instanceof FLyrAnnotation && geom.getGeometryType()!=FShape.POINT) {
120
//                                                Point2D p=FLabel.createLabelPoint((FShape)geom.getInternalShape());
121
//                                                geom=ShapeFactory.createPoint2D(p.getX(),p.getY());
122
//                                        }
123
//                                        if (ct != null) {
124
//                                                if (bMustClone)
125
//                                                        geom = geom.cloneGeometry();
126
//                                                geom.reProject(ct);
127
//                                        }
128
//                                        reportStep();
129
//                                        setNote(PluginServices.getText(this, "exporting_") + counter);
130
//                                        if (isCanceled())
131
//                                                break;
132
//
133
//                                        if (geom != null) {
134
//                                                Value[] values = sds.getRow(i);
135
//                                                IFeature feat = new DefaultFeature(geom, values, "" + i);
136
//                                                DefaultRowEdited edRow = new DefaultRowEdited(feat,
137
//                                                                DefaultRowEdited.STATUS_ADDED, i);
138
//
139
//                                                writer.process(edRow);
140
//                                        }
141
//                                }
142
//
143
//                        }
144
//
145
//                        writer.postProcess();
146
//                        va.stop();
147
//                        if (reader != null){
148
//                                int res = JOptionPane.showConfirmDialog(
149
//                                        (JComponent) PluginServices.getMDIManager().getActiveWindow()
150
//                                        , PluginServices.getText(this, "insertar_en_la_vista_la_capa_creada"),
151
//                                        PluginServices.getText(this,"insertar_capa"),
152
//                                        JOptionPane.YES_NO_OPTION);
153
//
154
//                                if (res == JOptionPane.YES_OPTION)
155
//                                {
156
//                                        PostProcessSupport.executeCalls();
157
//                                        ILayerDefinition lyrDef = (ILayerDefinition) writer.getTableDefinition();
158
//                                        FLayer newLayer = LayerFactory.createLayer(
159
//                                                        lyrDef.getName(), reader, mapContext.getProjection());
160
//                                        mapContext.getLayers().addLayer(newLayer);
161
//                                }
162
//                        }
163
//
164
//                }
165
//                /* (non-Javadoc)
166
//                 * @see com.iver.utiles.swing.threads.IMonitorableTask#finished()
167
//                 */
168
//                public void finished() {
169
//                        // TODO Auto-generated method stub
170
//
171
//                }
172
//
173
//        }
174
//        private class MultiWriterTask extends AbstractMonitorableTask{
175
//                Vector tasks=new Vector();
176
//                public void addTask(WriterTask wt) {
177
//                        tasks.add(wt);
178
//                }
179
//                public void run() throws Exception {
180
//                        for (int i = 0; i < tasks.size(); i++) {
181
//                                ((WriterTask)tasks.get(i)).run();
182
//                        }
183
//                        tasks.clear();
184
//                }
185
//                /* (non-Javadoc)
186
//                 * @see com.iver.utiles.swing.threads.IMonitorableTask#finished()
187
//                 */
188
//                public void finished() {
189
//                        // TODO Auto-generated method stub
190
//
191
//                }
192
//
193
//
194
//        }
195
        /**
196
         * @see com.iver.andami.plugins.IExtension#initialize()
197
         */
198
        public void initialize() {
199
        }
200

    
201
        /**
202
         * @see com.iver.andami.plugins.IExtension#execute(java.lang.String)
203
         */
204
        public void execute(String actionCommand) {
205
                com.iver.andami.ui.mdiManager.IWindow f = PluginServices.getMDIManager()
206
                                .getActiveWindow();
207

    
208
                if (f instanceof View) {
209
                        View vista = (View) f;
210
                        IProjectView model = vista.getModel();
211
                        MapContext mapa = model.getMapContext();
212
                        FLayers layers = mapa.getLayers();
213
                        FLayer[] actives = layers.getActives();
214
                        try {
215
                                // NOTA: SI HAY UNA SELECCI?N, SOLO SE SALVAN LOS SELECCIONADOS
216
                                for (int i = 0; i < actives.length; i++) {
217
                                        if (actives[i] instanceof FLyrVect) {
218
                                                FLyrVect lv = (FLyrVect) actives[i];
219
                                                saveToDXF(mapa,lv);
220

    
221

    
222

    
223
                                                /////////
224

    
225
//                                                int numSelec = lv.getRecordset().getSelection()
226
//                                                                .cardinality();
227
//                                                if (numSelec > 0) {
228
//                                                        int resp = JOptionPane.showConfirmDialog(
229
//                                                                        (Component) PluginServices.getMainFrame(),
230
//                                                                        PluginServices.getText(this,"se_van_a_guardar_") + numSelec
231
//                                                                                        + PluginServices.getText(this,"features_desea_continuar"),
232
//                                                                        PluginServices.getText(this,"export_to"), JOptionPane.YES_NO_OPTION);
233
//                                                        if (resp != JOptionPane.YES_OPTION) {
234
//                                                                continue;
235
//                                                        }
236
//                                                } // if numSelec > 0
237
//                                                if (actionCommand.equals("SHP")) {
238
//                                                        saveToShp(mapa, lv);
239
//                                                }
240
//                                                if (actionCommand.equals("DXF")) {
241
//                                                        saveToDxf(mapa, lv);
242
//                                                }
243
//                                                if (actionCommand.equals("POSTGIS")) {
244
//                                                        saveToPostGIS(mapa, lv);
245
//                                                }
246
//                                                if (actionCommand.equals("GML")) {
247
//                                                        saveToGml(mapa, lv);
248
//                                                }
249
                                        } // actives[i]
250
                                } // for
251
                        } catch (ReadException e) {
252
                                NotificationManager.showMessageError(e.getMessage(),e);
253
                        } catch (DataException e) {
254
                                NotificationManager.showMessageError(e.getMessage(),e);
255
                        }
256

    
257
                }
258
        }
259

    
260
//        public void saveToPostGIS(MapContext mapContext, FLyrVect layer){
261
//                try {
262
//                        String tableName = JOptionPane.showInputDialog(PluginServices
263
//                                        .getText(this, "intro_tablename"));
264
//                        if (tableName == null)
265
//                                return;
266
//                        tableName = tableName.toLowerCase();
267
//                        DlgConnection dlg = new DlgConnection();
268
//                        dlg.setModal(true);
269
//                        dlg.setVisible(true);
270
//                        ConnectionSettings cs = dlg.getConnSettings();
271
//                        if (cs == null)
272
//                                return;
273
//                        IConnection conex = ConnectionFactory.createConnection(cs
274
//                                        .getConnectionString(), cs.getUser(), cs.getPassw());
275
//
276
//
277
//                        DBLayerDefinition originalDef = null;
278
//                        if (layer.getSource().getDriver() instanceof IVectorialDatabaseDriver) {
279
//                                originalDef=((IVectorialDatabaseDriver) layer.getSource().getDriver()).getLyrDef();
280
//                        }
281
//
282
//
283
//                        DBLayerDefinition dbLayerDef = new DBLayerDefinition();
284
//                        // Fjp:
285
//                        // Cambio: En Postgis, el nombre de cat?logo est? siempre vac?o. Es algo heredado de Oracle, que no se usa.
286
//                        // dbLayerDef.setCatalogName(cs.getDb());
287
//                        dbLayerDef.setCatalogName("");
288
//
289
//                        // A?adimos el schema dentro del layer definition para poder tenerlo en cuenta.
290
//                        dbLayerDef.setSchema(cs.getSchema());
291
//
292
//                        dbLayerDef.setTableName(tableName);
293
//                        dbLayerDef.setName(tableName);
294
//                        dbLayerDef.setShapeType(layer.getShapeType());
295
//                        SelectableDataSource sds = layer.getRecordset();
296
//
297
//                        FieldDescription[] fieldsDescrip = sds.getFieldsDescription();
298
//                        dbLayerDef.setFieldsDesc(fieldsDescrip);
299
//                // Creamos el driver. OJO: Hay que a?adir el campo ID a la
300
//                // definici?n de campos.
301
//
302
//                        if (originalDef != null){
303
//                                dbLayerDef.setFieldID(originalDef.getFieldID());
304
//                                dbLayerDef.setFieldGeometry(originalDef.getFieldGeometry());
305
//
306
//                        }else{
307
//                                // Search for id field name
308
//                                int index=0;
309
//                                String fieldName="gid";
310
//                                while (findFileByName(fieldsDescrip,fieldName) != -1){
311
//                                        index++;
312
//                                        fieldName="gid"+index;
313
//                                }
314
//                                dbLayerDef.setFieldID(fieldName);
315
//
316
//                                // search for geom field name
317
//                                index=0;
318
//                                fieldName="the_geom";
319
//                                while (findFileByName(fieldsDescrip,fieldName) != -1){
320
//                                        index++;
321
//                                        fieldName="the_geom"+index;
322
//                                }
323
//                                dbLayerDef.setFieldGeometry(fieldName);
324
//
325
//                        }
326
//
327
//                        // if id field dosen't exist we add it
328
//                        if (findFileByName(fieldsDescrip,dbLayerDef.getFieldID()) == -1)
329
//                        {
330
//                        int numFieldsAnt = fieldsDescrip.length;
331
//                        FieldDescription[] newFields = new FieldDescription[dbLayerDef.getFieldsDesc().length + 1];
332
//                    for (int i=0; i < numFieldsAnt; i++)
333
//                    {
334
//                            newFields[i] = fieldsDescrip[i];
335
//                    }
336
//                    newFields[numFieldsAnt] = new FieldDescription();
337
//                    newFields[numFieldsAnt].setFieldDecimalCount(0);
338
//                    newFields[numFieldsAnt].setFieldType(Types.INTEGER);
339
//                    newFields[numFieldsAnt].setFieldLength(7);
340
//                    newFields[numFieldsAnt].setFieldName("gid");
341
//                    dbLayerDef.setFieldsDesc(newFields);
342
//
343
//                }
344
//
345
//
346
//                        dbLayerDef.setWhereClause("");
347
//                        String strSRID = layer.getProjection().getAbrev();
348
//                        dbLayerDef.setSRID_EPSG(strSRID);
349
//                        dbLayerDef.setConnection(conex);
350
//
351
//                        PostGISWriter writer=(PostGISWriter)LayerFactory.getWM().getWriter("PostGIS Writer");
352
//                        writer.setWriteAll(true);
353
//                        writer.setCreateTable(true);
354
//                        writer.initialize(dbLayerDef);
355
//                        PostGisDriver postGISDriver=new PostGisDriver();
356
//                        postGISDriver.setLyrDef(dbLayerDef);
357
//                        postGISDriver.open();
358
//                        PostProcessSupport.clearList();
359
//                        Object[] params = new Object[2];
360
//                        params[0] = conex;
361
//                        params[1] = dbLayerDef;
362
//                        PostProcessSupport.addToPostProcess(postGISDriver, "setData",
363
//                                        params, 1);
364
//
365
//                        writeFeatures(mapContext, layer, writer, postGISDriver);
366
//
367
//                } catch (DriverLoadException e) {
368
//                        NotificationManager.addError(e.getMessage(),e);
369
//                } catch (DBException e) {
370
//                        NotificationManager.addError(e.getMessage(),e);
371
//                } catch (InitializeWriterException e) {
372
//                        NotificationManager.addError(e.getMessage(),e);
373
//                } catch (ReadDriverException e) {
374
//                        NotificationManager.addError(e.getMessage(),e);
375
//                }
376
//
377
//        }
378

    
379
        /**
380
         * Lanza un thread en background que escribe las features. Cuando termina, pregunta al usuario si quiere
381
         * a?adir la nueva capa a la vista. Para eso necesita un driver de lectura ya configurado.
382
         * @param mapContext
383
         * @param layer
384
         * @param writer
385
         * @param reader
386
         * @throws ReadDriverException
387
         * @throws DriverException
388
         * @throws DriverIOException
389
         */
390
//        private void writeFeatures(MapContext mapContext, FLyrVect layer, IWriter writer, Driver reader) throws ReadDriverException
391
//        {
392
//                PluginServices.cancelableBackgroundExecution(new WriterTask(mapContext, layer, writer, reader));
393
//        }
394
//        private void writeMultiFeatures(MapContext mapContext, FLyrVect layers, IWriter[] writers, Driver[] readers) throws ReadDriverException{
395
//                MultiWriterTask mwt=new MultiWriterTask();
396
//                for (int i=0;i<writers.length;i++) {
397
//                        mwt.addTask(new WriterTask(mapContext, layers, writers[i], readers[i]));
398
//                }
399
//                PluginServices.cancelableBackgroundExecution(mwt);
400
//        }
401
        /**
402
         * @param layer
403
         *            FLyrVect to obtain features. If selection, only selected
404
         *            features will be precessed.
405
         * @param writer
406
         *            (Must be already initialized)
407
         * @throws DataException
408
         * @throws ReadException
409
         * @throws ReadDriverException
410
         * @throws ProcessWriterException
411
         * @throws ExpansionFileReadException
412
         * @throws EditionException
413
         * @throws DriverException
414
         * @throws DriverIOException
415
         * @throws com.hardcode.gdbms.engine.data.driver.DriverException
416
         */
417
//        public void writeFeaturesNoThread(FLyrVect layer, IWriter writer) throws ReadDriverException, VisitorException, ExpansionFileReadException{
418
//                ReadableVectorial va = layer.getSource();
419
//                SelectableDataSource sds = layer.getRecordset();
420
//
421
//                // Creamos la tabla.
422
//                writer.preProcess();
423
//
424
//                int rowCount;
425
//                FBitSet bitSet = layer.getRecordset().getSelection();
426
//
427
//                if (bitSet.cardinality() == 0)
428
//                        rowCount = va.getShapeCount();
429
//                else
430
//                        rowCount = bitSet.cardinality();
431
//
432
//                ProgressMonitor progress = new ProgressMonitor(
433
//                                (JComponent) PluginServices.getMDIManager().getActiveWindow(),
434
//                                PluginServices.getText(this, "exportando_features"),
435
//                                PluginServices.getText(this, "exportando_features"), 0,
436
//                                rowCount);
437
//
438
//                progress.setMillisToDecideToPopup(200);
439
//                progress.setMillisToPopup(500);
440
//
441
//                if (bitSet.cardinality() == 0) {
442
//                        rowCount = va.getShapeCount();
443
//                        for (int i = 0; i < rowCount; i++) {
444
//                                IGeometry geom = va.getShape(i);
445
//
446
//                                progress.setProgress(i);
447
//                                if (progress.isCanceled())
448
//                                        break;
449
//
450
//                                if (geom != null) {
451
//                                        Value[] values = sds.getRow(i);
452
//                                        IFeature feat = new DefaultFeature(geom, values, "" + i);
453
//                                        DefaultRowEdited edRow = new DefaultRowEdited(feat,
454
//                                                        IRowEdited.STATUS_ADDED, i);
455
//                                        writer.process(edRow);
456
//                                }
457
//                        }
458
//                } else {
459
//                        int counter = 0;
460
//                        for (int i = bitSet.nextSetBit(0); i >= 0; i = bitSet
461
//                                        .nextSetBit(i + 1)) {
462
//                                IGeometry geom = va.getShape(i);
463
//
464
//                                progress.setProgress(counter++);
465
//                                if (progress.isCanceled())
466
//                                        break;
467
//
468
//                                if (geom != null) {
469
//                                        Value[] values = sds.getRow(i);
470
//                                        IFeature feat = new DefaultFeature(geom, values, "" + i);
471
//                                        DefaultRowEdited edRow = new DefaultRowEdited(feat,
472
//                                                        IRowEdited.STATUS_ADDED, i);
473
//
474
//                                        writer.process(edRow);
475
//                                }
476
//                        }
477
//
478
//                }
479
//
480
//                writer.postProcess();
481
//                progress.close();
482
//        }
483

    
484
//        public void saveToDxf(MapContext mapContext, FLyrVect layer)  {
485
//                try {
486
//                        JFileChooser jfc = new JFileChooser(lastPath);
487
//                        SimpleFileFilter filterShp = new SimpleFileFilter("dxf",
488
//                                        PluginServices.getText(this, "dxf_files"));
489
//                        jfc.setFileFilter(filterShp);
490
//                        if (jfc.showSaveDialog((Component) PluginServices.getMainFrame()) == JFileChooser.APPROVE_OPTION) {
491
//                                File newFile = jfc.getSelectedFile();
492
//                                String path = newFile.getAbsolutePath();
493
//                                if (!(path.toLowerCase().endsWith(".dxf"))) {
494
//                                        path = path + ".dxf";
495
//                                }
496
//                                newFile = new File(path);
497
//
498
//                                DxfWriter writer = (DxfWriter) LayerFactory.getWM().getWriter(
499
//                                                "DXF Writer");
500
//                                SHPLayerDefinition lyrDef = new SHPLayerDefinition();
501
//                                SelectableDataSource sds = layer.getRecordset();
502
//                                FieldDescription[] fieldsDescrip = sds.getFieldsDescription();
503
//                                lyrDef.setFieldsDesc(fieldsDescrip);
504
//                                lyrDef.setFile(newFile);
505
//                                lyrDef.setName(newFile.getName());
506
//                                lyrDef.setShapeType(layer.getShapeType());
507
//                                writer.setFile(newFile);
508
//                                writer.initialize(lyrDef);
509
//                                writer.setProjection(layer.getProjection());
510
//                                DxfFieldsMapping fieldsMapping = new DxfFieldsMapping();
511
//                                // TODO: Recuperar aqu? los campos del cuadro de di?logo.
512
//                                writer.setFieldMapping(fieldsMapping);
513
//                                DXFMemoryDriver dxfDriver=new DXFMemoryDriver();
514
//                                dxfDriver.open(newFile);
515
//                                writeFeatures(mapContext, layer, writer, dxfDriver);
516
//                                String fileName = newFile.getAbsolutePath();
517
//                                lastPath  = fileName.substring(0, fileName.lastIndexOf(File.separatorChar));
518
//                        }
519
//
520
//                } catch (ReadDriverException e) {
521
//                        NotificationManager.addError(e.getMessage(),e);
522
//                } catch (InitializeWriterException e) {
523
//                        NotificationManager.addError(e.getMessage(),e);
524
//                } catch (DriverLoadException e) {
525
//                        NotificationManager.addError(e.getMessage(),e);
526
//                }
527
//
528
//        }
529

    
530
        public void saveToDXF(MapContext mapContext, FLyrVect lv) throws ReadException, DataException {
531
                JFileChooser jfc = new JFileChooser(lastPath);
532
                SimpleFileFilter filterShp = new SimpleFileFilter("dxf",
533
                                PluginServices.getText(this, "dxf_files"));
534
                jfc.setFileFilter(filterShp);
535
                if (jfc.showSaveDialog((Component) PluginServices.getMainFrame()) == JFileChooser.APPROVE_OPTION) {
536
                        File newFile = jfc.getSelectedFile();
537
                        String path = newFile.getAbsolutePath();
538
                        if (!(path.toLowerCase().endsWith(".dxf"))) {
539
                                path = path + ".dxf";
540
                        }
541
                        newFile = new File(path);
542

    
543
                        DataManager datamanager=DALLocator.getDataManager();
544
                        DataExplorerParameters explorerParameters=datamanager.createExplorerParameters(DXFDataExplorer.DATASOURCE_NAME);
545
                        explorerParameters.setAttribute("file", newFile);
546
                        FeatureExplorer explorer=(FeatureExplorer)datamanager.createExplorer(explorerParameters);
547
                        FeatureStoreParameters storeParameters=(FeatureStoreParameters)datamanager.createStoreParameters(DXFStore.DATASTORE_NAME);
548

    
549
                        lv.getFeatureStore().export(explorer, storeParameters);
550
                }
551
        }
552

    
553

    
554
//        public void saveToShp(MapContext mapContext, FLyrVect layer) {
555
//                try {
556
//                        JFileChooser jfc = new JFileChooser();
557
//                        SimpleFileFilter filterShp = new SimpleFileFilter("shp",
558
//                                        PluginServices.getText(this, "shp_files"));
559
//                        jfc.setFileFilter(filterShp);
560
//                        if (jfc.showSaveDialog((Component) PluginServices.getMainFrame()) == JFileChooser.APPROVE_OPTION) {
561
//                                File newFile = jfc.getSelectedFile();
562
//                                String path = newFile.getAbsolutePath();
563
//                                if( newFile.exists()){
564
//                                        int resp = JOptionPane.showConfirmDialog(
565
//                                                        (Component) PluginServices.getMainFrame(),PluginServices.getText(this,"fichero_ya_existe_seguro_desea_guardarlo"),
566
//                                                        PluginServices.getText(this,"guardar"), JOptionPane.YES_NO_OPTION);
567
//                                        if (resp != JOptionPane.YES_OPTION) {
568
//                                                return;
569
//                                        }
570
//                                }
571
//                                if (!(path.toLowerCase().endsWith(".shp"))) {
572
//                                        path = path + ".shp";
573
//                                }
574
//                                newFile = new File(path);
575
//
576
//
577
//
578
//                                SelectableDataSource sds = layer.getRecordset();
579
//                                FieldDescription[] fieldsDescrip = sds.getFieldsDescription();
580
//
581
//                                if (layer.getShapeType() == FShape.MULTI) // Exportamos a 3
582
//                                // ficheros
583
//                                {
584
//                                        ShpWriter writer1 = (ShpWriter) LayerFactory.getWM().getWriter(
585
//                                        "Shape Writer");
586
//                                        Driver[] drivers=new Driver[3];
587
//                                        ShpWriter[] writers=new ShpWriter[3];
588
//
589
//                                        // puntos
590
//                                        String auxPoint = path.replaceFirst(".shp", "_points.shp");
591
//
592
//                                        SHPLayerDefinition lyrDefPoint = new SHPLayerDefinition();
593
//                                        lyrDefPoint.setFieldsDesc(fieldsDescrip);
594
//                                        File filePoints = new File(auxPoint);
595
//                                        lyrDefPoint.setFile(filePoints);
596
//                                        lyrDefPoint.setName(filePoints.getName());
597
//                                        lyrDefPoint.setShapeType(FShape.POINT);
598
//                                        writer1.setFile(filePoints);
599
//                                        writer1.initialize(lyrDefPoint);
600
//                                        writers[0]=writer1;
601
//                                        drivers[0]=getOpenShpDriver(filePoints);
602
//                                        //drivers[0]=null;
603
//
604
//
605
//
606
//                                        ShpWriter writer2 = (ShpWriter) LayerFactory.getWM().getWriter(
607
//                                        "Shape Writer");
608
//                                        // Lineas
609
//                                        String auxLine = path.replaceFirst(".shp", "_line.shp");
610
//                                        SHPLayerDefinition lyrDefLine = new SHPLayerDefinition();
611
//                                        lyrDefLine.setFieldsDesc(fieldsDescrip);
612
//
613
//                                        File fileLines = new File(auxLine);
614
//                                        lyrDefLine.setFile(fileLines);
615
//                                        lyrDefLine.setName(fileLines.getName());
616
//                                        lyrDefLine.setShapeType(FShape.LINE);
617
//                                        writer2.setFile(fileLines);
618
//                                        writer2.initialize(lyrDefLine);
619
//                                        writers[1]=writer2;
620
//                                        drivers[1]=getOpenShpDriver(fileLines);
621
//                                        //drivers[1]=null;
622
//
623
//                                        ShpWriter writer3 = (ShpWriter) LayerFactory.getWM().getWriter(
624
//                                        "Shape Writer");
625
//                                        // Pol?gonos
626
//                                        String auxPolygon = path.replaceFirst(".shp", "_polygons.shp");
627
//                                        SHPLayerDefinition lyrDefPolygon = new SHPLayerDefinition();
628
//                                        lyrDefPolygon.setFieldsDesc(fieldsDescrip);
629
//                                        File filePolygons = new File(auxPolygon);
630
//                                        lyrDefPolygon.setFile(filePolygons);
631
//                                        lyrDefPolygon.setName(filePolygons.getName());
632
//                                        lyrDefPolygon.setShapeType(FShape.POLYGON);
633
//                                        writer3.setFile(filePolygons);
634
//                                        writer3.initialize(lyrDefPolygon);
635
//                                        writers[2]=writer3;
636
//                                        drivers[2]=getOpenShpDriver(filePolygons);
637
//                                        //drivers[2]=null;
638
//
639
//                                        writeMultiFeatures(mapContext,layer, writers, drivers);
640
//                                } else {
641
//                                        ShpWriter writer = (ShpWriter) LayerFactory.getWM().getWriter(
642
//                                                "Shape Writer");
643
//                                        IndexedShpDriver drv = getOpenShpDriver(newFile);
644
//                                        SHPLayerDefinition lyrDef = new SHPLayerDefinition();
645
//                                        lyrDef.setFieldsDesc(fieldsDescrip);
646
//                                        lyrDef.setFile(newFile);
647
//                                        lyrDef.setName(newFile.getName());
648
//                                        lyrDef.setShapeType(layer.getShapeType());
649
//                                        writer.setFile(newFile);
650
//                                        writer.initialize(lyrDef);
651
//                                        // CODIGO PARA EXPORTAR UN SHP A UN CHARSET DETERMINADO
652
//                                        // ES UTIL PARA QUE UN DBF SE VEA CORRECTAMENTE EN EXCEL, POR EJEMPLO
653
////                                        Charset resul = (Charset) JOptionPane.showInputDialog((Component)PluginServices.getMDIManager().getActiveWindow(),
654
////                                                                PluginServices.getText(ExportTo.class, "select_charset_for_writing"),
655
////                                                                "Charset", JOptionPane.QUESTION_MESSAGE, null,
656
////                                                                Charset.availableCharsets().values().toArray(),
657
////                                                                writer.getCharsetForWriting().displayName());
658
////                                        if (resul == null)
659
////                                                return;
660
////                                        Charset charset = resul;
661
////                                        writer.setCharsetForWriting(charset);
662
//                                        writeFeatures(mapContext, layer, writer, drv);
663
//
664
//                                }
665
//                        }
666
//                } catch (InitializeWriterException e) {
667
//                        NotificationManager.addError(e.getMessage(),e);
668
//                } catch (OpenDriverException e) {
669
//                        NotificationManager.addError(e.getMessage(),e);
670
//                } catch (ReadDriverException e) {
671
//                        NotificationManager.addError(e.getMessage(),e);
672
//                } catch (DriverLoadException e) {
673
//                        NotificationManager.addError(e.getMessage(),e);
674
//                }
675
//
676
//        }
677
        /**
678
         * This method saves a layer to GML
679
         * @param mapContext
680
         * @param layer
681
         * @throws EditionException
682
         * @throws DriverIOException
683
         */
684
//        public void saveToGml(MapContext mapContext, FLyrVect layer)  {
685
//                try {
686
//                        JFileChooser jfc = new JFileChooser();
687
//                        SimpleFileFilter filterShp = new SimpleFileFilter("gml",
688
//                                        PluginServices.getText(this, "gml_files"));
689
//                        jfc.setFileFilter(filterShp);
690
//                        if (jfc.showSaveDialog((Component) PluginServices.getMainFrame()) == JFileChooser.APPROVE_OPTION) {
691
//                                File newFile = jfc.getSelectedFile();
692
//                                String path = newFile.getAbsolutePath();
693
//                                if (!(path.toLowerCase().endsWith(".gml"))) {
694
//                                        path = path + ".gml";
695
//                                }
696
//                                newFile = new File(path);
697
//
698
//                                GMLWriter writer = (GMLWriter)LayerFactory.getWM().getWriter("GML Writer");
699
//
700
//                                SHPLayerDefinition lyrDef = new SHPLayerDefinition();
701
//                                SelectableDataSource sds = layer.getRecordset();
702
//                                FieldDescription[] fieldsDescrip = sds.getFieldsDescription();
703
//                                lyrDef.setFieldsDesc(fieldsDescrip);
704
//                                lyrDef.setName(newFile.getName());
705
//                                lyrDef.setShapeType(layer.getShapeType());
706
//
707
//                                writer.setFile(newFile);
708
//                                writer.setSchema(lyrDef);
709
//                                writer.setBoundedBy(layer.getFullExtent(),layer.getProjection());
710
//                                writer.initialize(lyrDef);
711
//                                GMLDriver gmlDriver=new GMLDriver();
712
//                                gmlDriver.open(newFile);
713
//                                writeFeatures(mapContext, layer, writer, gmlDriver);
714
//                        }
715
//
716
//                } catch (SchemaEditionException e) {
717
//                        NotificationManager.addError(e.getMessage(),e);
718
//                } catch (InitializeWriterException e) {
719
//                        NotificationManager.addError(e.getMessage(),e);
720
//                } catch (ReadDriverException e) {
721
//                        NotificationManager.addError(e.getMessage(),e);
722
//                } catch (DriverLoadException e) {
723
//                        NotificationManager.addError(e.getMessage(),e);
724
//                }
725
//
726
//        }
727
//        private IndexedShpDriver getOpenShpDriver(File fileShp) throws OpenDriverException {
728
//                IndexedShpDriver drv = new IndexedShpDriver();
729
//                if (!fileShp.exists()) {
730
//                        try {
731
//                                fileShp.createNewFile();
732
//                                File newFileSHX=new File(fileShp.getAbsolutePath().replaceAll("[.]shp",".shx"));
733
//                                newFileSHX.createNewFile();
734
//                                File newFileDBF=new File(fileShp.getAbsolutePath().replaceAll("[.]shp",".dbf"));
735
//                                newFileDBF.createNewFile();
736
//                        } catch (IOException e) {
737
//                                throw new FileNotFoundDriverException("SHP",e,fileShp.getAbsolutePath());
738
//                        }
739
//                }
740
//                drv.open(fileShp);
741
//                return drv;
742
//        }
743
        /**
744
         * @see com.iver.andami.plugins.IExtension#isEnabled()
745
         */
746
        public boolean isEnabled() {
747
                int status = EditionUtilities.getEditionStatus();
748
                if (( status == EditionUtilities.EDITION_STATUS_ONE_VECTORIAL_LAYER_ACTIVE || status == EditionUtilities.EDITION_STATUS_ONE_VECTORIAL_LAYER_ACTIVE_AND_EDITABLE)
749
                                || (status == EditionUtilities.EDITION_STATUS_MULTIPLE_VECTORIAL_LAYER_ACTIVE)|| (status == EditionUtilities.EDITION_STATUS_MULTIPLE_VECTORIAL_LAYER_ACTIVE_AND_EDITABLE))
750
                {
751
                        return true;
752
                }
753
                return false;
754
        }
755

    
756
        /**
757
         * @see com.iver.andami.plugins.IExtension#isVisible()
758
         */
759
        public boolean isVisible() {
760
                com.iver.andami.ui.mdiManager.IWindow f = PluginServices.getMDIManager()
761
                                .getActiveWindow();
762

    
763
                if (f == null) {
764
                        return false;
765
                }
766

    
767
                if (f instanceof View)
768
                        return true;
769
                return false;
770
        }
771

    
772
//        private int findFileByName(FieldDescription[] fields, String fieldName){
773
//        for (int i=0; i < fields.length; i++)
774
//        {
775
//                FieldDescription f = fields[i];
776
//                if (f.getFieldName().equalsIgnoreCase(fieldName))
777
//                {
778
//                        return i;
779
//                }
780
//        }
781
//
782
//                return -1;
783
//
784
//        }
785

    
786
}