Statistics
| Revision:

svn-gvsig-desktop / branches / v2_0_0_prep / extensions / org.gvsig.geocoding.extension / src / org / gvsig / geocoding / export / MasiveExportThread.java @ 32526

History | View | Annotate | Download (20.3 KB)

1
/* gvSIG. Geographic Information System of the Valencian Government
2
 *
3
 * Copyright (C) 2007-2008 Infrastructures and Transports Department
4
 * of the Valencian Government (CIT)
5
 * 
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 2
9
 * of the License, or (at your option) any later version.
10
 * 
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 * 
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
19
 * MA  02110-1301, USA.
20
 * 
21
 */
22

    
23
/*
24
 * AUTHORS (In addition to CIT):
25
 * 2009 Prodevelop S.L  main developer
26
 */
27

    
28
package org.gvsig.geocoding.export;
29

    
30
import java.io.File;
31
import java.util.Date;
32
import java.util.Iterator;
33
import java.util.List;
34
import java.util.Map;
35
import java.util.Set;
36

    
37
import javax.swing.JFileChooser;
38

    
39
import org.gvsig.andami.PluginServices;
40
import org.gvsig.app.project.Project;
41
import org.gvsig.app.project.ProjectManager;
42
import org.gvsig.app.project.documents.Document;
43
import org.gvsig.app.project.documents.table.TableDocument;
44
import org.gvsig.app.project.documents.table.TableManager;
45
import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
46
import org.gvsig.app.project.documents.view.gui.IView;
47
import org.gvsig.fmap.dal.DALLocator;
48
import org.gvsig.fmap.dal.DataManager;
49
import org.gvsig.fmap.dal.DataServerExplorer;
50
import org.gvsig.fmap.dal.DataTypes;
51
import org.gvsig.fmap.dal.NewDataStoreParameters;
52
import org.gvsig.fmap.dal.exception.DataException;
53
import org.gvsig.fmap.dal.feature.EditableFeature;
54
import org.gvsig.fmap.dal.feature.EditableFeatureType;
55
import org.gvsig.fmap.dal.feature.Feature;
56
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
57
import org.gvsig.fmap.dal.feature.FeatureSet;
58
import org.gvsig.fmap.dal.feature.FeatureStore;
59
import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
60
import org.gvsig.fmap.dal.feature.impl.DefaultEditableFeatureType;
61
import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorer;
62
import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorerParameters;
63
import org.gvsig.fmap.dal.store.dbf.DBFNewStoreParameters;
64
import org.gvsig.fmap.dal.store.dbf.DBFStoreParameters;
65
import org.gvsig.fmap.dal.store.dbf.DBFStoreProvider;
66
import org.gvsig.fmap.dal.store.shp.SHPNewStoreParameters;
67
import org.gvsig.fmap.dal.store.shp.SHPStoreProvider;
68
import org.gvsig.fmap.geom.Geometry;
69
import org.gvsig.fmap.geom.exception.CreateGeometryException;
70
import org.gvsig.fmap.geom.primitive.Point;
71
import org.gvsig.fmap.mapcontext.layers.FLayers;
72
import org.gvsig.fmap.mapcontext.layers.LayerFactory;
73
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
74
import org.gvsig.geocoding.address.Address;
75
import org.gvsig.geocoding.address.ComposedAddress;
76
import org.gvsig.geocoding.address.Literal;
77
import org.gvsig.geocoding.address.impl.DefaultLiteral;
78
import org.gvsig.geocoding.extension.GeocodingController;
79
import org.gvsig.geocoding.result.GeocodingResult;
80
import org.gvsig.geocoding.utils.GeocodingExtTags;
81
import org.gvsig.geocoding.utils.GeocodingUtils;
82
import org.gvsig.utils.GenericFileFilter;
83
import org.slf4j.Logger;
84
import org.slf4j.LoggerFactory;
85

    
86
/**
87
 * This class generates a Layer with geocoding results and dbf file with all
88
 * results
89
 * 
90
 * @author Jorge Gaspar Sanz Salinas (jsanz@prodevelop.es)
91
 * @author Vicente Sanjaime Calvet (vsanjaime@prodevelop.es)
92
 * 
93
 */
94

    
95
public class MasiveExportThread extends Thread {
96

    
97
        private Logger log = LoggerFactory.getLogger(MasiveExportThread.class);
98
        private GeocodingController control = null;
99

    
100
        /**
101
         * Contructor
102
         * 
103
         * @param control
104
         */
105
        public MasiveExportThread(GeocodingController control) {
106
                super();
107
                this.control = control;
108

    
109
        }
110

    
111
        /**
112
         * Run export process
113
         */
114
        public void run() {
115
                // get file name
116
                File exportFile = getFilesExportResults();
117
                if (exportFile != null) {
118
                        // Build dbf name
119
                        File suffixfile = GeocodingUtils.addSuffixFile(exportFile,
120
                                        GeocodingExtTags.GEOCODINGALLRESULTS);
121
                        File dbfFile = GeocodingUtils.addDBFSuffix(suffixfile);
122
                        // Create DBF Store Results
123
                        FeatureStore dbfStore = createDBFStoreAllResults(dbfFile);
124
                        // Load dbf all results in gvSIG project
125
                        TableDocument table = loadTableAllResults(dbfStore, dbfFile);
126
                        // Build shp name
127
                        File shpFile = GeocodingUtils.addSHPSuffix(exportFile);
128
                        // create layer
129
                        FLyrVect flyr = createGeocodingResultsLayer(shpFile);
130
                        if (flyr != null) {
131
                                try {
132
                                        fillStoreWithSelectedResults(flyr.getFeatureStore());
133
                                        // relate table all results to layer
134
                                        flyr.setProperty(GeocodingExtTags.GEOCODINGPROPERTY, table);
135
                                        // add layer to view
136
                                        IView view = control.getCurrentView();
137
                                        FLayers lyrs = view.getMapControl().getMapContext()
138
                                                        .getLayers();
139
                                        lyrs.addLayer(flyr);
140
                                } catch (Exception e) {
141
                                        log.error("filling geocoding layer store", e);
142
                                }
143
                        }
144
                }
145
        }
146

    
147
        /**
148
         * Create dbf store all results
149
         * 
150
         * @param dbfFile
151
         * @return store
152
         */
153
        private FeatureStore createDBFStoreAllResults(File dbfFile) {
154

    
155
                FeatureStore store = null;
156
                DataManager manager = DALLocator.getDataManager();
157

    
158
                if (dbfFile != null) {
159

    
160
                        // build DBF store
161
                        File parentfile = dbfFile.getParentFile();
162

    
163
                        FilesystemServerExplorerParameters exParam = null;
164
                        try {
165
                                exParam = (FilesystemServerExplorerParameters) manager
166
                                                .createServerExplorerParameters(FilesystemServerExplorer.NAME);
167

    
168
                                exParam.setRoot(parentfile.getAbsolutePath());
169

    
170
                                DataServerExplorer serverExplorer = manager
171
                                                .createServerExplorer(exParam);
172

    
173
                                NewDataStoreParameters newDBFParams = serverExplorer
174
                                                .getAddParameters(DBFStoreProvider.NAME);
175
                                ((DBFNewStoreParameters) newDBFParams).setDBFFile(dbfFile);
176
                                EditableFeatureType featureType = generateFeatureTypeAllResults(newDBFParams);
177
                                ((DBFNewStoreParameters) newDBFParams)
178
                                                .setDefaultFeatureType(featureType.getNotEditableCopy());
179

    
180
                                serverExplorer.add(newDBFParams, true);
181

    
182
                                // fill DBF store
183
                                int max = control.getGmodel().getPattern().getSettings()
184
                                                .getMaxResultsNumber();
185

    
186
                                DBFStoreParameters dbfParameters = (DBFStoreParameters) manager
187
                                                .createStoreParameters(DBFStoreProvider.NAME);
188
                                dbfParameters.setFile(dbfFile);
189

    
190
                                store = (FeatureStore) manager.createStore(dbfParameters);
191
                                store.edit();
192

    
193
                                List<Set<GeocodingResult>> results = control.getGmodel()
194
                                                .getAllResults();
195

    
196
                                int id = 0;
197
                                int idres = 0;
198

    
199
                                Integer[] sels = control.getGmodel().getExportElements();
200
                                for (Set<GeocodingResult> set : results) {
201
                                        int sel = sels[idres];
202
                                        int i = 0;
203
                                        int selec = 0;
204
                                        for (GeocodingResult res : set) {
205
                                                if (i >= max) {
206
                                                        break;
207
                                                }
208
                                                EditableFeature feature = store.createNewFeature();
209
                                                // FIRST fields
210
                                                feature.setInt(GeocodingExtTags.gID, id);
211
                                                feature.setInt(GeocodingExtTags.gID_RESUL, idres);
212
                                                if (selec == sel) {
213
                                                        feature.setInt(GeocodingExtTags.gSELECT, 1);
214
                                                } else {
215
                                                        feature.setInt(GeocodingExtTags.gSELECT, 0);
216
                                                }
217
                                                feature.setDouble(GeocodingExtTags.gSCORE, res
218
                                                                .getScore());
219
                                                Point pto = (Point) res.getGeometry();
220
                                                feature.setDouble(GeocodingExtTags.gX, pto.getX());
221
                                                feature.setDouble(GeocodingExtTags.gY, pto.getY());
222
                                                // Dynamic address fields
223
                                                Literal listLit = getListAddressElements(res
224
                                                                .getAddress());
225
                                                for (Map.Entry<String, String> ele : listLit.entrySet()) {
226
                                                        feature.setString(ele.getKey(), ele.getValue());
227
                                                }
228

    
229
                                                store.insert(feature);
230
                                                id++;
231
                                                i++;
232
                                                selec++;
233
                                        }
234
                                        idres++;
235
                                }
236
                                store.finishEditing();
237
                                // store.dispose();
238

    
239
                        } catch (Exception e) {
240
                                log.error("Creating dbf store", e);
241
                        }
242
                }
243
                return store;
244
        }
245

    
246
        // /**
247
        // * Create dbf store all results
248
        // *
249
        // * @param dbfFile
250
        // * @return store
251
        // */
252
        // private FeatureStore createDBFStoreAllResults2(File dbfFile) {
253
        //
254
        // FeatureStore store = null;
255
        // DataManager manager = DALLocator.getDataManager();
256
        //
257
        // if (dbfFile != null) {
258
        // // build DBF store
259
        // File parentfile = dbfFile.getParentFile();
260
        //
261
        // FilesystemServerExplorerParameters exParam = null;
262
        // try {
263
        // exParam = (FilesystemServerExplorerParameters) manager
264
        // .createServerExplorerParameters(FilesystemServerExplorer.NAME);
265
        //
266
        // exParam.setRoot(parentfile.getAbsolutePath());
267
        //
268
        // DataServerExplorer serverExplorer = manager
269
        // .createServerExplorer(exParam);
270
        //
271
        // NewDataStoreParameters newParams = serverExplorer
272
        // .getAddParameters(DBFStoreProvider.NAME);
273
        // ((FilesystemStoreParameters) newParams).setFile(dbfFile);
274
        // EditableFeatureType featureType = generateFeatureTypeAllResults();
275
        // ((NewFeatureStoreParameters) newParams)
276
        // .setDefaultFeatureType(featureType);
277
        // serverExplorer.add(newParams, true);
278
        //
279
        // // fill DBF store
280
        // int max = control.getGmodel().getPattern().getSettings()
281
        // .getResultsNumber();
282
        //
283
        // DBFStoreParameters dbfParameters = (DBFStoreParameters) manager
284
        // .createStoreParameters(DBFStoreProvider.NAME);
285
        // dbfParameters.setFile(dbfFile);
286
        //
287
        // store = (FeatureStore) manager.createStore(dbfParameters);
288
        // store.edit();
289
        //
290
        // List<Set<GeocodingResult>> results = control.getGmodel()
291
        // .getAllResults();
292
        //
293
        // int id = 0;
294
        // int idres = 0;
295
        //
296
        // Integer[] sels = control.getGmodel().getExportElements();
297
        // for (Set<GeocodingResult> set : results) {
298
        // int sel = sels[idres];
299
        // int i = 0;
300
        // int selec = 0;
301
        // for (GeocodingResult res : set) {
302
        // if (i >= max) {
303
        // break;
304
        // }
305
        // EditableFeature feature = store.createNewFeature();
306
        // // FIRST fields
307
        // feature.setInt(GeocodingTags.gID, id);
308
        // feature.setInt(GeocodingTags.gID_RESUL, idres);
309
        // if (selec == sel) {
310
        // feature.setInt(GeocodingTags.gSELECT, 1);
311
        // } else {
312
        // feature.setInt(GeocodingTags.gSELECT, 0);
313
        // }
314
        // feature.setDouble(GeocodingTags.gSCORE, res.getScore());
315
        // Point pto = (Point) res.getGeometry();
316
        // feature.setDouble(GeocodingTags.gX, pto.getX());
317
        // feature.setDouble(GeocodingTags.gY, pto.getY());
318
        // // Dynamic address fields
319
        // List<AddressComponent> comps = getListAddressElements(res
320
        // .getAddress());
321
        // for (AddressComponent comp : comps) {
322
        // feature.setString(comp.getKeyElement(), comp
323
        // .getValue());
324
        // }
325
        // store.insert(feature);
326
        // id++;
327
        // i++;
328
        // selec++;
329
        // }
330
        // idres++;
331
        // }
332
        // store.finishEditing();
333
        // store.dispose();
334
        //
335
        // } catch (Exception e) {
336
        // log.error("Creating dbf store", e);
337
        // }
338
        // }
339
        // return store;
340
        // }
341

    
342
        /**
343
         * Build feature type dbf all results
344
         * 
345
         * @return
346
         */
347
        private EditableFeatureType generateFeatureTypeAllResults(
348
                        NewDataStoreParameters params) {
349

    
350
                boolean compose = false;
351
                boolean cross = true;
352

    
353
                // address fields
354
                Set<GeocodingResult> result = control.getGmodel().getAllResults()
355
                                .get(0);
356
                Address address = null;
357
                for (GeocodingResult res : result) {
358
                        address = res.getAddress();
359
                        break;
360
                }
361
                Literal mainLiteral = address.getMainLiteral();
362
                int cant = mainLiteral.size();
363
                String[] fields = new String[cant];
364
                int i = 0;
365
                for (String key : mainLiteral.keySet()) {
366
                        fields[i] = key;
367
                        i++;
368
                }
369
                if (address instanceof ComposedAddress) {
370
                        compose = true;
371
                        ComposedAddress caddress = (ComposedAddress) address;
372
                        List<Literal> inter = caddress.getIntersectionLiterals();
373
                        if (inter.size() == 2) {
374
                                cross = false;
375
                        }
376
                }
377

    
378
                EditableFeatureType eFType = (EditableFeatureType) ((NewFeatureStoreParameters) params)
379
                                .getDefaultFeatureType();
380
                eFType.add(GeocodingExtTags.gID, DataTypes.INT).setSize(10);
381
                eFType.add(GeocodingExtTags.gID_RESUL, DataTypes.INT).setSize(10);
382
                eFType.add(GeocodingExtTags.gSELECT, DataTypes.INT).setSize(10);
383
                eFType.add(GeocodingExtTags.gSCORE, DataTypes.DOUBLE).setSize(10);
384
                eFType.add(GeocodingExtTags.gX, DataTypes.DOUBLE).setSize(14);
385
                eFType.add(GeocodingExtTags.gY, DataTypes.DOUBLE).setSize(14);
386

    
387
                // no compose address
388
                if (!compose) {
389
                        for (String field : fields) {
390
                                eFType.add(field, DataTypes.STRING).setSize(20);
391
                        }
392
                }
393
                // compose address
394
                else {
395
                        for (String field : fields) {
396
                                eFType.add(field + "_1", DataTypes.STRING).setSize(20);
397
                        }
398
                        for (String field : fields) {
399
                                eFType.add(field + "_2", DataTypes.STRING).setSize(20);
400
                        }
401
                        // compose between address
402
                        if (!cross) {
403
                                for (String field : fields) {
404
                                        eFType.add(field + "_3", DataTypes.STRING).setSize(20);
405
                                }
406
                        }
407
                }
408
                return eFType;
409
        }
410

    
411
        /**
412
         * get list address elements
413
         * 
414
         * @param address
415
         * @return
416
         */
417
        private Literal getListAddressElements(Address address) {
418

    
419
                Literal listLit = new DefaultLiteral();
420
                Literal mainLiteral = address.getMainLiteral();
421

    
422
                for (Map.Entry<String, String> ele : mainLiteral.entrySet()) {
423
                        listLit.put(ele.getKey(), ele.getValue());
424
                }
425
                if (address instanceof ComposedAddress) {
426
                        ComposedAddress caddress = (ComposedAddress) address;
427
                        List<Literal> inter = caddress.getIntersectionLiterals();
428
                        if (inter.size() == 1) {
429
                                Literal seclit = inter.get(0);
430
                                for (Map.Entry<String, String> ele : seclit.entrySet()) {
431
                                        listLit.put(ele.getKey(), ele.getValue());
432
                                }
433
                        }
434
                        if (inter.size() == 2) {
435
                                Literal thilit = inter.get(1);
436
                                for (Map.Entry<String, String> ele : thilit.entrySet()) {
437
                                        listLit.put(ele.getKey(), ele.getValue());
438
                                }
439

    
440
                        }
441
                }
442
                return listLit;
443
        }
444

    
445
        /**
446
         * Load in gvSIG the dbf with all results
447
         * 
448
         * @param store
449
         * @param file
450
         * @return
451
         */
452
        private TableDocument loadTableAllResults(FeatureStore store, File file) {
453
                ProjectManager pman = ProjectManager.getInstance();
454
                Project project = pman.getCurrentProject();
455
                Document doc = pman.createDocument(TableManager.TYPENAME);
456
                TableDocument table = (TableDocument) doc;
457
                table.setName(file.getName());
458
                table.setStore(store);
459
                project.add(table);
460

    
461
                return table;
462
        }
463

    
464
        /**
465
         * Get the file to export the geocoding results process
466
         * 
467
         * @return
468
         */
469
        private File getFilesExportResults() {
470
                File thefile = null;
471
                JFileChooser jfc = new JFileChooser();
472
                jfc.setDialogTitle(PluginServices.getText(this, "exportresults"));
473
                String[] extensions = { "shp" };
474
                jfc.setCurrentDirectory(new File(""));
475
                jfc.addChoosableFileFilter(new GenericFileFilter(extensions,
476
                                PluginServices.getText(this, "shp_file")));
477
                int returnval = jfc.showSaveDialog((java.awt.Component) PluginServices
478
                                .getMainFrame());
479
                if (returnval == JFileChooser.APPROVE_OPTION) {
480
                        thefile = jfc.getSelectedFile();
481
                        log.debug("file opened: " + thefile);
482
                } else {
483
                        return null;
484
                }
485
                if (thefile != null) {
486
                        thefile = GeocodingUtils.delSHPSuffix(thefile);
487
                }
488
                return thefile;
489
        }
490

    
491
        /**
492
         * Fill selected results store
493
         * 
494
         * @param newstore
495
         * @throws DataException
496
         * @throws CreateGeometryException
497
         */
498
        private void fillStoreWithSelectedResults(FeatureStore newstore)
499
                        throws DataException, CreateGeometryException {
500

    
501
                Integer[] sels = control.getGmodel().getExportElements();
502
                List<Set<GeocodingResult>> results = control.getGmodel()
503
                                .getAllResults();
504

    
505
                FeatureStore table = control.getGmodel().getSelectedTableStore();
506

    
507
                newstore.edit(FeatureStore.MODE_APPEND);
508
                int i = 0;
509
                for (Set<GeocodingResult> set : results) {
510
                        int sel = sels[i];
511
                        GeocodingResult result = null;
512
                        int j = 0;
513
                        for (GeocodingResult res : set) {
514
                                if (j == sel) {
515
                                        result = res;
516
                                        break;
517
                                }
518
                                j++;
519
                        }
520

    
521
                        EditableFeature feature = newstore.createNewFeature();
522
                        String fieldname = control.getGmodel().getIdMasiveTable();
523

    
524
                        if (result != null) {
525

    
526
                                FeatureSet feats = table.getFeatureSet();
527
                                Iterator<Feature> it = feats.iterator(i);
528
                                Feature tableFeat = it.next();
529
                                Object obj = tableFeat.get(fieldname);
530
                                FeatureAttributeDescriptor desc = table.getDefaultFeatureType()
531
                                .getAttributeDescriptor(fieldname);
532
                                int dataType = desc.getDataType();
533

    
534
                                Point pto = (Point) result.getGeometry();
535
                                // fill fields
536
                                feature.setInt(GeocodingExtTags.gID_RESUL, i);
537
                                 switch (dataType) {
538
                            case 1:  feature.setBoolean(fieldname, (Boolean)obj); break;
539
                            case 2:  feature.setString(fieldname, obj.toString()); break;
540
                            case 17:  feature.setString(fieldname, obj.toString()); break;
541
                            case 3:  feature.setString(fieldname, obj.toString()); break;
542
                            case 9:  feature.setDate(fieldname, (Date)obj); break;
543
                            case 7:  feature.setDouble(fieldname, (Double)obj); break;
544
                            case 6:  feature.setFloat(fieldname, (Float)obj); break;
545
                            case 5:  feature.setLong(fieldname, (Long)obj); break;
546
                            case 13:  feature.set(fieldname, obj); break;
547
                            case 8:  feature.setString(fieldname, obj.toString()); break;
548
                            case 10:  feature.setString(fieldname, obj.toString()); break;
549
                            case 11:  feature.setString(fieldname, obj.toString()); break;
550
                                 }
551
                                feature.setString(fieldname, obj.toString());
552
                                feature.setDouble(GeocodingExtTags.gSCORE, result.getScore());
553
                                feature.setDouble(GeocodingExtTags.gX, pto.getX());
554
                                feature.setDouble(GeocodingExtTags.gY, pto.getY());
555
                                feature.setGeometry(GeocodingExtTags.gGEOMETRY, pto);
556
                        }
557
                        newstore.insert(feature);
558
                        i++;
559
                }
560
                newstore.finishEditing();
561
                newstore.refresh();
562
                //newstore.dispose();
563
        }
564

    
565
        /**
566
         * Build layer with selected geocoding results
567
         * 
568
         * @param shpFile
569
         * @return
570
         */
571
        private FLyrVect createGeocodingResultsLayer(File shpFile) {
572

    
573
                FLyrVect lyr = null;
574
                FilesystemServerExplorerParameters explorerParam = null;
575

    
576
                DataManager manager = DALLocator.getDataManager();
577

    
578
                File directory = shpFile.getParentFile();
579

    
580
                try {
581
                        explorerParam = (FilesystemServerExplorerParameters) manager
582
                                        .createServerExplorerParameters(FilesystemServerExplorer.NAME);
583
                        explorerParam.setRoot(directory.getAbsolutePath());
584

    
585
                        DataServerExplorer serverExplorer = manager
586
                                        .createServerExplorer(explorerParam);
587

    
588
                        SHPNewStoreParameters newShpParams = (SHPNewStoreParameters) serverExplorer
589
                                        .getAddParameters(SHPStoreProvider.NAME);
590
                        newShpParams.setFile(shpFile);
591
                        String proj = ((DefaultViewPanel) this.control.getCurrentView())
592
                                        .getProjection().getAbrev();
593
                        newShpParams.setSRSID(proj);
594
                        // newShpParams.setDynValue("SRSOriginalParameters", proj);
595

    
596
                        EditableFeatureType featureType = generateFeatureTypeSelectedResult();
597
                        newShpParams.setDefaultFeatureType(featureType);
598
                        serverExplorer.add(newShpParams, true);
599

    
600
                        LayerFactory factory = LayerFactory.getInstance();
601
                        String name = shpFile.getName();
602
                        lyr = (FLyrVect) factory.createLayer(name, newShpParams);
603

    
604
                } catch (Exception e) {
605
                        log.error("ERROR building FLayer");
606
                }
607

    
608
                return lyr;
609
        }
610

    
611
        /**
612
         * Build feature type of the selected results store
613
         * 
614
         * @return
615
         * @throws DataException
616
         */
617
        private EditableFeatureType generateFeatureTypeSelectedResult()
618
                        throws DataException {
619

    
620
                String fname = control.getGmodel().getIdMasiveTable();
621

    
622
                FeatureStore table = control.getGmodel().getSelectedTableStore();
623

    
624
                FeatureAttributeDescriptor desc = table.getDefaultFeatureType()
625
                                .getAttributeDescriptor(fname);
626

    
627
                EditableFeatureType eFType = new DefaultEditableFeatureType();
628

    
629
                eFType.add(GeocodingExtTags.gID_RESUL, DataTypes.INT).setSize(10);
630
                eFType.add(fname, desc.getDataType()).setSize(desc.getSize());
631
                eFType.add(GeocodingExtTags.gSCORE, DataTypes.DOUBLE).setSize(10);
632
                eFType.add(GeocodingExtTags.gX, DataTypes.DOUBLE).setSize(14);
633
                eFType.add(GeocodingExtTags.gY, DataTypes.DOUBLE).setSize(14);
634
                // GEOM field
635
                eFType.add(GeocodingExtTags.gGEOMETRY, DataTypes.GEOMETRY).setGeometryType(
636
                                Geometry.TYPES.POINT).setGeometrySubType(
637
                                                Geometry.SUBTYPES.GEOM2D);
638
                eFType.setDefaultGeometryAttributeName(GeocodingExtTags.gGEOMETRY);
639

    
640
                return eFType;
641
        }
642

    
643
}