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 | 3 | llmarques | /*
|
---|---|---|---|
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 | 30 | llmarques | AbstractDerivedGeometriesProcess { |
35 | 3 | llmarques | |
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 | 30 | llmarques | boolean addLayer = parameters.getAddLayer();
|
62 | boolean createNewFeatureStore =
|
||
63 | parameters.getCreateNewFeatureStore(); |
||
64 | 3 | llmarques | 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 | 8 | llmarques | for (int i = 0; i < selectedFeatures.size(); i++) { |
81 | 3 | llmarques | |
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 | 30 | llmarques | |
99 | 14 | llmarques | if (status.isCancellationRequested()) {
|
100 | status.cancel(); |
||
101 | 3 | llmarques | |
102 | 14 | llmarques | return;
|
103 | } |
||
104 | |||
105 | 30 | llmarques | if (createNewFeatureStore) {
|
106 | // Creating new feature store
|
||
107 | createNewFeatureStore(sourceFeatureType, outputLayerType, |
||
108 | outputLayerPath, projection); |
||
109 | 3 | llmarques | |
110 | 30 | llmarques | // Set createNewFeatureStore false to avoid create new feature
|
111 | // if process is started again
|
||
112 | parameters.setCreateNewFeatureStore(false);
|
||
113 | } |
||
114 | |||
115 | 3 | llmarques | // Open the new feature store
|
116 | 30 | llmarques | FeatureStore featureStore = parameters.getFeatureStore(); |
117 | if (featureStore == null) { |
||
118 | featureStore = getFeatureStore(outputLayerPath, projection); |
||
119 | } |
||
120 | 3 | llmarques | |
121 | // Set feature store in edit mode
|
||
122 | 30 | llmarques | setEditingMode(featureStore); |
123 | 3 | llmarques | |
124 | // Add line
|
||
125 | 30 | llmarques | insertGeometryIntoFeauteStore(featureStore, line); |
126 | 3 | llmarques | |
127 | // Save changes and finish editing
|
||
128 | 30 | llmarques | endEditingMode(featureStore); |
129 | 3 | llmarques | |
130 | if (status.isCancellationRequested()) {
|
||
131 | status.cancel(); |
||
132 | |||
133 | return;
|
||
134 | } |
||
135 | |||
136 | 30 | llmarques | if (addLayer) {
|
137 | 52 | llmarques | //Dispose feature store to liberate resources
|
138 | featureStore.dispose(); |
||
139 | |||
140 | 30 | llmarques | // Add layer to MapControl
|
141 | featureStore = |
||
142 | addLayerToMapContex(outputLayerName, outputLayerPath, |
||
143 | projection); |
||
144 | parameters.setAddLayer(false);
|
||
145 | parameters.setFeatureStore(featureStore); |
||
146 | } |
||
147 | |||
148 | 14 | llmarques | this.postProcess();
|
149 | |||
150 | 3 | llmarques | } catch (Exception e) { |
151 | ThreadSafeDialogsManager dlgManager = |
||
152 | ToolsSwingLocator.getThreadSafeDialogsManager(); |
||
153 | |||
154 | 11 | llmarques | dlgManager.messageDialog("_process_error", "_error", |
155 | 3 | llmarques | JOptionPane.ERROR_MESSAGE);
|
156 | |||
157 | 10 | llmarques | logger.info("Error in point to line process", e);
|
158 | 3 | llmarques | 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 | 40 | llmarques | |
174 | 3 | llmarques | 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 | 40 | llmarques | |
182 | // Repaint mapContext to view new derived geometries added.
|
||
183 | getParameters().getMapControl().getMapContext().invalidate(); |
||
184 | 3 | llmarques | } |
185 | |||
186 | } |