Statistics
| Revision:

gvsig-derived-geometries / org.gvsig.derivedgeometries / trunk / org.gvsig.derivedgeometries / org.gvsig.derivedgeometries.swing / org.gvsig.derivedgeometries.swing.impl / src / main / java / org / gvsig / derivedgeometries / swing / impl / processes / PointToLineDerivedGeometriesProcess.java @ 52

History | View | Annotate | Download (6.42 KB)

1
/*
2
 * Copyright 2014 DiSiD Technologies S.L.L. All rights reserved.
3
 * 
4
 * Project  : DiSiD org.gvsig.derivedgeometries.swing.impl 
5
 * SVN Id   : $Id$
6
 */
7
package org.gvsig.derivedgeometries.swing.impl.processes;
8

    
9
import java.util.List;
10

    
11
import javax.swing.JOptionPane;
12

    
13
import org.cresques.cts.IProjection;
14
import org.slf4j.Logger;
15
import org.slf4j.LoggerFactory;
16

    
17
import org.gvsig.derivedgeometries.swing.api.DerivedGeometriesParameters;
18
import org.gvsig.derivedgeometries.swing.impl.AbstractDerivedGeometriesProcess;
19
import org.gvsig.fmap.dal.feature.FeatureReference;
20
import org.gvsig.fmap.dal.feature.FeatureStore;
21
import org.gvsig.fmap.dal.feature.FeatureType;
22
import org.gvsig.fmap.geom.Geometry;
23
import org.gvsig.fmap.geom.GeometryLocator;
24
import org.gvsig.fmap.geom.GeometryManager;
25
import org.gvsig.fmap.geom.primitive.Line;
26
import org.gvsig.fmap.geom.primitive.Point;
27
import org.gvsig.fmap.geom.type.GeometryType;
28
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
29
import org.gvsig.tools.swing.api.ToolsSwingLocator;
30
import org.gvsig.tools.swing.api.threadsafedialogs.ThreadSafeDialogsManager;
31
import org.gvsig.tools.task.SimpleTaskStatus;
32

    
33
public class PointToLineDerivedGeometriesProcess extends
34
    AbstractDerivedGeometriesProcess {
35

    
36
    private static final Logger logger = LoggerFactory
37
        .getLogger(PointToLineDerivedGeometriesProcess.class);
38

    
39
    public PointToLineDerivedGeometriesProcess(
40
        DerivedGeometriesParameters parameters) {
41
        super("Point to line process", parameters);
42
    }
43

    
44
    public void run() {
45
        SimpleTaskStatus status = null;
46

    
47
        try {
48
            status = (SimpleTaskStatus) this.getTaskStatus();
49

    
50
            if (status.isCancellationRequested()) {
51

    
52
                status.cancel();
53
                return;
54
            }
55

    
56
            // Get data process
57
            DerivedGeometriesParameters parameters = super.getParameters();
58
            String outputLayerName = parameters.getOutPutLayerName();
59
            String outputLayerPath = parameters.getOutPutLayerPath();
60
            int outputLayerType = parameters.getOutPutLayerType();
61
            boolean addLayer = parameters.getAddLayer();
62
            boolean createNewFeatureStore =
63
                parameters.getCreateNewFeatureStore();
64
            FLyrVect sourceLayer = parameters.getSourceLayer();
65
            IProjection projection = sourceLayer.getProjection();
66
            FeatureType sourceFeatureType =
67
                sourceLayer.getFeatureStore().getDefaultFeatureType();
68
            List<FeatureReference> selectedFeatures =
69
                parameters.getSelectedFeatures();
70

    
71
            GeometryManager geomManager = GeometryLocator.getGeometryManager();
72
            GeometryType sourceGeomType =
73
                sourceLayer.getFeatureStore().getDefaultFeatureType()
74
                    .getDefaultGeometryAttribute().getGeomType();
75
            Line line = geomManager.createLine(sourceGeomType.getSubType());
76

    
77
            status.setRangeOfValues(1, selectedFeatures.size());
78

    
79
            // Iterate over features getting geometries to create polygon
80
            for (int i = 0; i < selectedFeatures.size(); i++) {
81

    
82
                // Si ha sido solicitada la cancelacion de la tarea
83
                // la marcamos como cancelada y salimos del proceso.
84
                if (status.isCancellationRequested()) {
85
                    status.cancel();
86
                    return;
87
                }
88

    
89
                // Informamos del progreso de la tarea
90
                status.setCurValue(i);
91

    
92
                FeatureReference featureReference = selectedFeatures.get(i);
93
                Geometry geom =
94
                    featureReference.getFeature().getDefaultGeometry();
95
                line.addVertex((Point) geom);
96

    
97
            }
98

    
99
            if (status.isCancellationRequested()) {
100
                status.cancel();
101

    
102
                return;
103
            }
104

    
105
            if (createNewFeatureStore) {
106
                // Creating new feature store
107
                createNewFeatureStore(sourceFeatureType, outputLayerType,
108
                    outputLayerPath, projection);
109

    
110
                // Set createNewFeatureStore false to avoid create new feature
111
                // if process is started again
112
                parameters.setCreateNewFeatureStore(false);
113
            }
114

    
115
            // Open the new feature store
116
            FeatureStore featureStore = parameters.getFeatureStore();
117
            if (featureStore == null) {
118
                featureStore = getFeatureStore(outputLayerPath, projection);
119
            }
120

    
121
            // Set feature store in edit mode
122
            setEditingMode(featureStore);
123

    
124
            // Add line
125
            insertGeometryIntoFeauteStore(featureStore, line);
126

    
127
            // Save changes and finish editing
128
            endEditingMode(featureStore);
129

    
130
            if (status.isCancellationRequested()) {
131
                status.cancel();
132

    
133
                return;
134
            }
135

    
136
            if (addLayer) {
137
                //Dispose feature store to liberate resources
138
                featureStore.dispose();
139
                
140
                // Add layer to MapControl
141
                featureStore =
142
                    addLayerToMapContex(outputLayerName, outputLayerPath,
143
                        projection);
144
                parameters.setAddLayer(false);
145
                parameters.setFeatureStore(featureStore);
146
            }
147

    
148
            this.postProcess();
149

    
150
        } catch (Exception e) {
151
            ThreadSafeDialogsManager dlgManager =
152
                ToolsSwingLocator.getThreadSafeDialogsManager();
153

    
154
            dlgManager.messageDialog("_process_error", "_error",
155
                JOptionPane.ERROR_MESSAGE);
156

    
157
            logger.info("Error in point to line process", e);
158
            if (status != null) {
159
                status.abort();
160
            }
161

    
162
        } finally {
163
            if (status != null) {
164
                // Mark process as terminate if it is running.
165
                if (status.isRunning()) {
166
                    status.terminate();
167
                }
168
            }
169
        }
170
    }
171

    
172
    private void postProcess() {
173

    
174
        ThreadSafeDialogsManager dlgManager =
175
            ToolsSwingLocator.getThreadSafeDialogsManager();
176

    
177
        String message = "_process_finished_successfully";
178
        String title = "_information";
179
        dlgManager.messageDialog(message, title,
180
            JOptionPane.INFORMATION_MESSAGE);
181

    
182
        // Repaint mapContext to view new derived geometries added.
183
        getParameters().getMapControl().getMapContext().invalidate();
184
    }
185

    
186
}