Revision 15

View differences:

org.gvsig.lrs/trunk/org.gvsig.lrs/org.gvsig.lrs.lib/org.gvsig.lrs.lib.impl/src/main/java/org/gvsig/lrs/lib/impl/LrsCreateRouteAlgorithm.java
22 22
 */
23 23
package org.gvsig.lrs.lib.impl;
24 24

  
25
import java.io.File;
25 26
import java.util.ArrayList;
26 27
import java.util.HashMap;
27 28
import java.util.Iterator;
28 29
import java.util.List;
29 30
import java.util.Map;
31
import java.util.Map.Entry;
30 32

  
31
import org.slf4j.Logger;
32
import org.slf4j.LoggerFactory;
33

  
33
import org.gvsig.fmap.dal.DALLocator;
34
import org.gvsig.fmap.dal.DataManager;
35
import org.gvsig.fmap.dal.DataServerExplorer;
36
import org.gvsig.fmap.dal.DataServerExplorerParameters;
37
import org.gvsig.fmap.dal.DataStore;
38
import org.gvsig.fmap.dal.DataStoreParameters;
39
import org.gvsig.fmap.dal.DataTypes;
34 40
import org.gvsig.fmap.dal.exception.DataException;
41
import org.gvsig.fmap.dal.feature.EditableFeature;
42
import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
43
import org.gvsig.fmap.dal.feature.EditableFeatureType;
35 44
import org.gvsig.fmap.dal.feature.Feature;
36 45
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
37 46
import org.gvsig.fmap.dal.feature.FeatureReference;
38 47
import org.gvsig.fmap.dal.feature.FeatureSelection;
48
import org.gvsig.fmap.dal.feature.FeatureSet;
39 49
import org.gvsig.fmap.dal.feature.FeatureStore;
40 50
import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
51
import org.gvsig.fmap.dal.store.shp.SHPNewStoreParameters;
41 52
import org.gvsig.fmap.geom.Geometry;
42 53
import org.gvsig.fmap.geom.GeometryLocator;
43 54
import org.gvsig.fmap.geom.GeometryManager;
......
49 60
import org.gvsig.fmap.geom.primitive.Envelope;
50 61
import org.gvsig.fmap.geom.primitive.Line;
51 62
import org.gvsig.fmap.geom.primitive.Point;
63
import org.gvsig.fmap.geom.type.GeometryType;
52 64
import org.gvsig.lrs.lib.api.LrsAlgorithm;
53 65
import org.gvsig.lrs.lib.api.LrsAlgorithmParams;
54 66
import org.gvsig.lrs.lib.api.LrsCoordinatesPriority;
......
57 69
import org.gvsig.lrs.lib.api.exceptions.LrsCreateRouteException;
58 70
import org.gvsig.lrs.lib.api.exceptions.LrsException;
59 71
import org.gvsig.tools.ToolsLocator;
72
import org.gvsig.tools.dataTypes.DataType;
60 73
import org.gvsig.tools.exception.BaseException;
61 74
import org.gvsig.tools.i18n.I18nManager;
62 75
import org.gvsig.tools.service.Manager;
63 76
import org.gvsig.tools.task.SimpleTaskStatus;
64 77
import org.gvsig.tools.visitor.VisitCanceledException;
65 78
import org.gvsig.tools.visitor.Visitor;
79
import org.slf4j.Logger;
80
import org.slf4j.LoggerFactory;
66 81

  
67 82
/**
68 83
 * @author fdiaz
......
123 138
        I18nManager i18nManager = ToolsLocator.getI18nManager();
124 139
        taskStatus.message(i18nManager.getTranslation("grouping_features"));
125 140

  
126
        taskStatus.setRangeOfValues(0, 100000-1);
141
        try {
142
            final String routeFieldName=idRouteField.getName();
143
            final String fromFieldName;
144
            final DataType fromDataType;
145
            final DataType toDataType;
146
            if (fromMeasureField!=null){
147
                fromFieldName=fromMeasureField.getName();
148
                fromDataType=fromMeasureField.getDataType();
149
            }else{
150
                fromFieldName=null;
151
                fromDataType=null;
152
            }
153
            final String toFieldName;
154
            if (toMeasureField!=null){
155
                toFieldName=toMeasureField.getName();
156
                toDataType=toMeasureField.getDataType();
157
            }else{
158
                toFieldName=null;
159
                toDataType=null;
160
            }
127 161

  
128
        for (int i = 0; i < 100000; i++) {
129
            logger.info(new StringBuilder().append(i).toString());
130
            taskStatus.setCurValue(i);
131
            if (i == 99900) {
132
                try {
133
                    int infinito = i / 0;
134
                } catch (Exception e) {
135
                    taskStatus.abort();
136
                    throw new LrsCreateRouteException("Error creating routes", e);
162

  
163
            DataStore newDataStore=createNewDataStore(newFeatureStoreParameters,idRouteField);
164

  
165
            FeatureSet sourceFeatures;
166
            if (sourceFeatureStore.getFeatureSelection().getSize()>0){
167
                sourceFeatures=sourceFeatureStore.getFeatureSelection();
168
            }else{
169
                sourceFeatures=sourceFeatureStore.getFeatureSet();
170
            }
171

  
172
            final Map<String,List<MStructure>> featuresMap=new HashMap<String, List<MStructure>>();
173
            sourceFeatures.accept(new Visitor() {
174

  
175
                public void visit(Object obj) throws VisitCanceledException, BaseException {
176
                    Feature feature=(Feature)obj;
177
                    String routeName=(String)feature.get(routeFieldName);
178
                    Geometry originalGeometry=feature.getDefaultGeometry();
179
                    Object objFrom=null;
180
                    Object objTo=null;
181
                    if (fromFieldName!=null){
182
                        objFrom=feature.get(fromFieldName);
183
                    }
184
                    if (toFieldName!=null){
185
                        objTo=feature.get(toFieldName);
186
                    }
187
                    if (!featuresMap.containsKey(routeName)){
188
                        featuresMap.put(routeName, new ArrayList<MStructure>());
189
                    }
190
                    List<MStructure> mList=featuresMap.get(routeName);
191
                    MStructure mStructure=new MStructure();
192
                    mStructure.geometry=originalGeometry;
193
                    mStructure.fromField=getDouble(objFrom,fromDataType);
194
                    mStructure.toField=getDouble(objTo,toDataType);
195
                    mList.add(mStructure);
196
                    featuresMap.put(routeName, mList);
137 197
                }
198
            });
199

  
200
            taskStatus.setRangeOfValues(0, featuresMap.size()-1);
201
            int taskCount=0;
202
            FeatureStore featureStore=(FeatureStore)newDataStore;
203
            featureStore.edit(FeatureStore.MODE_FULLEDIT);
204
            for(Entry<String, List<MStructure>> entry : featuresMap.entrySet()) {
205
                String routeName = entry.getKey();
206
                List<MStructure> mList = entry.getValue();
207

  
208
                EditableFeature newFeature = featureStore.createNewFeature(true);
209
                newFeature.set(routeFieldName, routeName);
210
                Geometry route = createGeometryRoute(mList);
211
                newFeature.setDefaultGeometry(route);
212
                featureStore.update(newFeature);
213

  
214
                taskStatus.setCurValue(taskCount);
215
                taskCount++;
138 216
            }
217
            featureStore.finishEditing();
218

  
219
        } catch (Exception e1) {
220
            taskStatus.abort();
221
            throw new LrsCreateRouteException("Error creating routes", e1);
139 222
        }
140 223

  
141 224
        taskStatus.terminate();
......
181 264
//        }
182 265
    }
183 266

  
267

  
268
    private DataStore createNewDataStore(NewFeatureStoreParameters newFeatureStoreParameters,FeatureAttributeDescriptor idRouteField)
269
        throws LrsCreateRouteException{
270
        try {
271
            SHPNewStoreParameters shapeStoreParams = (SHPNewStoreParameters)newFeatureStoreParameters;
272
            File file=shapeStoreParams.getFile();
273
            String filePath=file.getPath().substring(0, file.getPath().lastIndexOf(File.separator));
274

  
275
            DataManager dataManager = DALLocator.getDataManager();
276
            DataServerExplorerParameters serverParams =
277
                dataManager.createServerExplorerParameters("FilesystemExplorer");
278
            serverParams.setDynValue("initialpath", filePath);
279
            DataServerExplorer serverExplorer =
280
                dataManager.openServerExplorer(serverParams.getExplorerName(), serverParams);
281

  
282
            EditableFeatureType featureType = (EditableFeatureType)shapeStoreParams.getDefaultFeatureType();
283
            featureType.add(idRouteField.getName(), idRouteField.getType(), idRouteField.getSize());
284
            EditableFeatureAttributeDescriptor geometryField = featureType.add("Geometry", DataTypes.GEOMETRY);
285
            GeometryType geometryType = GeometryLocator.getGeometryManager().getGeometryType(Geometry.TYPES.MULTICURVE, Geometry.SUBTYPES.GEOM2D);
286
            geometryField.setGeometryType(geometryType);
287

  
288
            featureType.setDefaultGeometryAttributeName("Geometry");
289

  
290
            shapeStoreParams.setDefaultFeatureType(featureType);
291
            serverExplorer.add("Shape", shapeStoreParams, true);
292

  
293
            DataStore store = dataManager.createStore(shapeStoreParams);
294

  
295
            return store;
296

  
297
        } catch (Exception e) {
298
            throw new LrsCreateRouteException("Error creating new dataStore", e);
299
        }
300
    }
301

  
302
    private Geometry createGeometryRoute(List<MStructure> mList) throws CreateGeometryException{
303
        GeometryManager geomanager= GeometryLocator.getGeometryManager();
304
        //TODO Must be changed to Multiline and GEOM2DM
305
        MultiLine routeGeometry= (MultiLine)geomanager.create(Geometry.TYPES.MULTICURVE, Geometry.SUBTYPES.GEOM2D);
306
        for (MStructure mStructure:mList){
307
            Geometry geometry=mStructure.geometry;
308
            if (geometry instanceof Line){
309
                routeGeometry.addPrimitive((Line)geometry);
310
            }
311
            if (geometry instanceof MultiLine){
312
                MultiLine multiLine =(MultiLine) geometry;
313
                for (int i=0;i<multiLine.getPrimitivesNumber();i++){
314
                    routeGeometry.addPrimitive(multiLine.getPrimitiveAt(i));
315
                }
316
            }
317
        }
318
        return routeGeometry;
319
    }
320

  
321
    private Double getDouble(Object obj,DataType dataType){
322
        Double result=Double.NaN;
323
        if (dataType.equals(DataTypes.DOUBLE)){
324
            result=(Double)obj;
325
        }else {
326
            result=Double.valueOf(String.valueOf(obj));
327
        }
328
        return result;
329
    }
330

  
331

  
332

  
333

  
334

  
184 335
    /**
185 336
     * @param route
186 337
     * @return
......
591 742
    }
592 743

  
593 744
}
745

  
746
class MStructure{
747
    Geometry geometry;
748
    Double fromField;
749
    Double toField;
750
}
751

  
752

  
org.gvsig.lrs/trunk/org.gvsig.lrs/org.gvsig.lrs.lib/org.gvsig.lrs.lib.impl/pom.xml
18 18
      <groupId>org.gvsig</groupId>
19 19
      <artifactId>org.gvsig.fmap.dal.api</artifactId>
20 20
    </dependency>
21
    <dependency>
22
     <groupId>org.gvsig</groupId>
23
     <artifactId>org.gvsig.fmap.dal.file.shp</artifactId>
24
    </dependency>
21 25
  </dependencies>
22 26
</project>
org.gvsig.lrs/trunk/org.gvsig.lrs/org.gvsig.lrs.swing/org.gvsig.lrs.swing.impl/src/main/java/org/gvsig/lrs/swing/impl/JLrsCreateRouteParamsController.java
45 45
import org.gvsig.fmap.dal.DALLocator;
46 46
import org.gvsig.fmap.dal.DataManager;
47 47
import org.gvsig.fmap.dal.DataParameters;
48
import org.gvsig.fmap.dal.DataServerExplorer;
49
import org.gvsig.fmap.dal.DataServerExplorerParameters;
48 50
import org.gvsig.fmap.dal.DataStoreParameters;
51
import org.gvsig.fmap.dal.NewDataStoreParameters;
49 52
import org.gvsig.fmap.dal.exception.DataException;
53
import org.gvsig.fmap.dal.exception.InitializeException;
54
import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
50 55
import org.gvsig.fmap.dal.exception.ReadException;
51 56
import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
52 57
import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
......
55 60
import org.gvsig.fmap.dal.feature.FeatureStore;
56 61
import org.gvsig.fmap.dal.feature.FeatureType;
57 62
import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
63
import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerProvider;
58 64
import org.gvsig.fmap.dal.store.shp.SHPNewStoreParameters;
59 65
import org.gvsig.fmap.geom.DataTypes;
60 66
import org.gvsig.fmap.geom.Geometry;
......
85 91
import org.gvsig.tools.i18n.I18nManager;
86 92
import org.gvsig.tools.locator.LocatorException;
87 93
import org.gvsig.tools.persistence.PersistentState;
94
import org.gvsig.tools.persistence.case1.model.Projection;
88 95
import org.gvsig.tools.persistence.exception.PersistenceException;
89 96
import org.gvsig.tools.swing.api.ActionListenerSupport;
90 97
import org.gvsig.tools.swing.api.ToolsSwingLocator;
......
342 349
            logger.error("Error getting selected item from cmbInputLayer");
343 350
            throw new LrsGettingParametersException("error_getting_selected_item_from_cmbInputLayer", null);
344 351
        }
345
        FLyrVect fLyrVect = (FLyrVect) this.cmbIdRouteField.getSelectedItem();
352
        FLyrVect fLyrVect = (FLyrVect) this.cmbInputLayer.getSelectedItem();
353
        IProjection projection= fLyrVect.getProjection();
346 354
        if (!(fLyrVect.getFeatureStore() instanceof FeatureStore)){
347 355
            logger.error("Error getting selected item from cmbInputLayer");
348 356
            throw new LrsGettingParametersException("error_getting_selected_item_from_cmbInputLayer", null);
......
365 373
        params.setIdRouteField(idRouteField);
366 374

  
367 375
        //OutputStore
368
        String outputLayerPath = this.txtOutputFile.getText();
369
        if(StringUtils.isEmpty(outputLayerPath)){
376
        String outputLayerPathFile = this.txtOutputFile.getText();
377
        if(StringUtils.isEmpty(outputLayerPathFile)){
370 378
            throw new LrsNeededParameterException("need_to_fill_the_target_path", null);
371 379
        }
372
        SHPNewStoreParameters sHPNewStoreParameters=new SHPNewStoreParameters();
373
        sHPNewStoreParameters.setFile(outputLayerPath);
374
        params.setNewFeatureStoreParameters((NewFeatureStoreParameters)sHPNewStoreParameters);
375 380

  
381
//        SHPNewStoreParameters sHPNewStoreParameters=new SHPNewStoreParameters();
382
//        sHPNewStoreParameters.setFile(outputLayerPath);
383
//        params.setNewFeatureStoreParameters((NewFeatureStoreParameters)sHPNewStoreParameters);
384
        try {
385
            NewFeatureStoreParameters newFeatureStoreParams=createFeatureStoreParams(outputLayerPathFile, projection);
386
            params.setNewFeatureStoreParameters(newFeatureStoreParams);
387
        } catch (Exception e) {
388
            throw new LrsNeededParameterException("error_creating_outputStore", e);
389
        }
390

  
376 391
        LrsSourceOfMeasures measureSources = (LrsSourceOfMeasures) this.cmbMeasureSource.getSelectedItem();
377 392
        FeatureAttributeDescriptor fromMeasureField = (FeatureAttributeDescriptor) this.cmbFromMeasureField.getSelectedItem();
378 393
        FeatureAttributeDescriptor toMeasureField = (FeatureAttributeDescriptor) this.cmbToMeasureField.getSelectedItem();
......
517 532
        case LENGTH:
518 533
            cmbFromMeasureField.setEnabled(false);
519 534
            cmbToMeasureField.setEnabled(false);
535
            chkIgnoreSpatialGaps.setEnabled(true);
520 536
            break;
521 537
        case ONE_FIELD:
522 538
            cmbFromMeasureField.setEnabled(true);
523 539
            cmbToMeasureField.setEnabled(false);
540
            chkIgnoreSpatialGaps.setEnabled(true);
524 541
            break;
525 542
        case TWO_FIELDS:
526 543
            cmbFromMeasureField.setEnabled(true);
527 544
            cmbToMeasureField.setEnabled(true);
545
            chkIgnoreSpatialGaps.setEnabled(false);
528 546
            break;
529 547
        default:
530 548
            break;
......
606 624
        return correctCurveLayerFound;
607 625
    }
608 626

  
627
    private NewFeatureStoreParameters createFeatureStoreParams(String outputLayerPathFile,IProjection projection) throws Exception{
628
        String filePath="";
629
        if(outputLayerPathFile!=null){
630
            filePath=outputLayerPathFile.substring(0,outputLayerPathFile.lastIndexOf(File.separator));
631
        }
632
        DataManager dataManager = DALLocator.getDataManager();
633
        DataServerExplorerParameters eparams =
634
            dataManager.createServerExplorerParameters("FilesystemExplorer");
635
        eparams.setDynValue("initialpath", filePath);
636
        DataServerExplorer serverExplorer =
637
            dataManager.openServerExplorer(eparams.getExplorerName(), eparams);
609 638

  
639
        SHPNewStoreParameters sparams = (SHPNewStoreParameters)serverExplorer.getAddParameters("Shape");
640
        sparams.setDynValue("shpfile",outputLayerPathFile);
641

  
642
        sparams.setCRS(projection);
643

  
644
        return sparams;
645
    }
646

  
647

  
610 648
//    private void test() {
611 649
//        WindowManager winManager = ToolsSwingLocator.getWindowManager();
612 650
//
org.gvsig.lrs/trunk/org.gvsig.lrs/org.gvsig.lrs.swing/org.gvsig.lrs.swing.impl/src/main/java/org/gvsig/lrs/swing/impl/JLrsCalibrateRouteParamsController.java
320 320
            logger.error("Error getting selected item from cmbInputLayer");
321 321
            throw new LrsGettingParametersException("error_getting_selected_item_from_cmbInputLayer", null);
322 322
        }
323
        FLyrVect fLyrVect = (FLyrVect) this.cmbIdRouteField.getSelectedItem();
323
        FLyrVect fLyrVect = (FLyrVect) this.cmbInputLayer.getSelectedItem();
324 324
        if (!(fLyrVect.getFeatureStore() instanceof FeatureStore)){
325 325
            logger.error("Error getting selected item from cmbInputLayer");
326 326
            throw new LrsGettingParametersException("error_getting_selected_item_from_cmbInputLayer", null);
org.gvsig.lrs/trunk/org.gvsig.lrs/org.gvsig.lrs.app/org.gvsig.lrs.app.mainplugin/src/main/resources-plugin/config.xml
13 13
<plugin-config>
14 14
  <depends plugin-name="org.gvsig.app.mainplugin" />
15 15
  <depends plugin-name="org.gvsig.app.document.table.app.mainplugin" />
16
  <depends plugin-name="org.gvsig.shp.app.mainplugin" />
16 17
  <resourceBundle name="text" />
17 18
  <libraries library-dir="lib" />
18 19
  <extensions>
org.gvsig.lrs/trunk/org.gvsig.lrs/org.gvsig.lrs.app/org.gvsig.lrs.app.mainplugin/src/main/resources-plugin/i18n/text.properties
39 39
grouping_features=Agrupando elementos
40 40
at_least_one_layer_needed=Es necesaria al menos una capa
41 41
impossible_to_find_needed_layer=No se ha podido encontrar la capa necesaria
42
error_creating_outputStore=Error creando el almac\u00E9n de salida
42 43

  
43

  
44 44
#CALIBRATE ROUTE
45 45
calibrate_point_layer=Capa de puntos de calibraci\u00f3n
46 46
id_calibration_point_route_field=Identificador de ruta en la capa de puntos de calibraci\u00f3n
org.gvsig.lrs/trunk/org.gvsig.lrs/org.gvsig.lrs.app/org.gvsig.lrs.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties
39 39
grouping_features=Grouping features
40 40
at_least_one_layer_needed=At least one layer is needed
41 41
impossible_to_find_needed_layer=Impossible to find needed layer
42
error_creating_outputStore=Error creating output store
42 43

  
43 44

  
44 45
#CALIBRATE ROUTE

Also available in: Unified diff