Revision 2616 org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.duplicate/src/main/java/org/gvsig/vectorediting/lib/prov/duplicate/DuplicateEditingProvider.java
DuplicateEditingProvider.java | ||
---|---|---|
29 | 29 |
import java.util.HashMap; |
30 | 30 |
import java.util.List; |
31 | 31 |
import java.util.Map; |
32 |
|
|
33 | 32 |
import org.gvsig.fmap.dal.exception.DataException; |
34 | 33 |
import org.gvsig.fmap.dal.feature.EditableFeature; |
35 | 34 |
import org.gvsig.fmap.dal.feature.Feature; |
... | ... | |
52 | 51 |
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol; |
53 | 52 |
import org.gvsig.tools.ToolsLocator; |
54 | 53 |
import org.gvsig.tools.dispose.DisposableIterator; |
54 |
import org.gvsig.tools.dispose.DisposeUtils; |
|
55 | 55 |
import org.gvsig.tools.dynobject.DynObject; |
56 | 56 |
import org.gvsig.tools.exception.BaseException; |
57 | 57 |
import org.gvsig.tools.service.spi.ProviderServices; |
... | ... | |
81 | 81 |
public class DuplicateEditingProvider extends AbstractEditingProvider implements |
82 | 82 |
EditingProvider { |
83 | 83 |
|
84 |
private EditingServiceParameter selection; |
|
84 |
private final EditingServiceParameter selection;
|
|
85 | 85 |
|
86 |
private EditingServiceParameter firstPoint; |
|
86 |
private final EditingServiceParameter firstPoint;
|
|
87 | 87 |
|
88 |
private EditingServiceParameter secondPoint; |
|
88 |
private final EditingServiceParameter secondPoint;
|
|
89 | 89 |
|
90 |
private FeatureStore featureStore; |
|
90 |
private final FeatureStore featureStore;
|
|
91 | 91 |
|
92 | 92 |
private Map<EditingServiceParameter, Object> values; |
93 | 93 |
|
94 | 94 |
/** |
95 | 95 |
* Default constructor. |
96 | 96 |
* |
97 |
* @param providerServices
|
|
97 |
* @param services
|
|
98 | 98 |
* available services for this provider |
99 | 99 |
* @param parameters |
100 | 100 |
* of this provider |
... | ... | |
120 | 120 |
TYPE.POSITION); |
121 | 121 |
} |
122 | 122 |
|
123 |
@Override |
|
123 | 124 |
public EditingServiceParameter next() { |
124 | 125 |
if (values.get(selection) == null) { |
125 | 126 |
return selection; |
... | ... | |
131 | 132 |
return null; |
132 | 133 |
} |
133 | 134 |
|
135 |
@Override |
|
134 | 136 |
public DrawingStatus getDrawingStatus(Point mousePosition) |
135 | 137 |
throws DrawServiceException { |
136 | 138 |
DefaultDrawingStatus drawingStatus = new DefaultDrawingStatus(); |
... | ... | |
151 | 153 |
ISymbol polygonSymbolEditing = editingProviderManager.getSymbol("polygon-symbol-editing"); |
152 | 154 |
ISymbol auxiliaryPointSymbolEditing = editingProviderManager.getSymbol("auxiliary-point-symbol-editing"); |
153 | 155 |
|
156 |
|
|
154 | 157 |
if (values != null) { |
155 | 158 |
|
156 | 159 |
FeatureSelection featureSelection = |
... | ... | |
173 | 176 |
it = featureSelection.fastIterator(); |
174 | 177 |
while (it.hasNext()) { |
175 | 178 |
Feature feature = (Feature) it.next(); |
179 |
ISymbol previewSymbol = this.getPreviewSymbol(feature); |
|
176 | 180 |
|
177 | 181 |
Geometry geometry = |
178 | 182 |
feature.getDefaultGeometry().cloneGeometry(); |
... | ... | |
193 | 197 |
int primitivesNumber = ((Aggregate)geometry).getPrimitivesNumber(); |
194 | 198 |
for (int i = 0; i < primitivesNumber; i++) { |
195 | 199 |
drawingStatus.addStatus(((Aggregate)geometry).getPrimitiveAt(i), symbol, ""); |
200 |
drawingStatus.addStatus(((Aggregate)geometry).getPrimitiveAt(i), previewSymbol, ""); |
|
196 | 201 |
} |
197 | 202 |
} else { |
198 | 203 |
drawingStatus.addStatus(geometry, symbol, ""); |
204 |
drawingStatus.addStatus(geometry, previewSymbol, ""); |
|
199 | 205 |
} |
200 | 206 |
// drawingStatus.addGeometry(geometry); |
201 | 207 |
} |
202 | 208 |
} catch (BaseException e) { |
203 | 209 |
throw new DrawServiceException(e); |
204 | 210 |
} finally { |
205 |
it.dispose();
|
|
211 |
DisposeUtils.disposeQuietly(it);
|
|
206 | 212 |
} |
207 | 213 |
} |
208 | 214 |
} |
... | ... | |
220 | 226 |
return translate; |
221 | 227 |
} |
222 | 228 |
|
229 |
@Override |
|
223 | 230 |
public void stop() throws StopServiceException { |
224 | 231 |
if (values != null) { |
225 | 232 |
values.clear(); |
226 | 233 |
} |
227 | 234 |
} |
228 | 235 |
|
236 |
@Override |
|
229 | 237 |
public List<EditingServiceParameter> getParameters() { |
230 | 238 |
List<EditingServiceParameter> parameters = |
231 |
new ArrayList<EditingServiceParameter>();
|
|
239 |
new ArrayList<>(); |
|
232 | 240 |
parameters.add(selection); |
233 | 241 |
parameters.add(firstPoint); |
234 | 242 |
parameters.add(secondPoint); |
... | ... | |
240 | 248 |
validateAndInsertValue(parameter, value); |
241 | 249 |
} |
242 | 250 |
|
251 |
@Override |
|
243 | 252 |
public void setValue(Object value) throws InvalidEntryException { |
244 | 253 |
EditingServiceParameter parameter = next(); |
245 | 254 |
validateAndInsertValue(parameter, value); |
... | ... | |
257 | 266 |
} else if (parameter == firstPoint || parameter == secondPoint) { |
258 | 267 |
if (value instanceof Point) { |
259 | 268 |
values.put(parameter, value); |
260 |
return; |
|
261 | 269 |
} |
262 | 270 |
} |
263 | 271 |
} |
264 | 272 |
|
273 |
@Override |
|
265 | 274 |
public Geometry finish() throws FinishServiceException { |
266 | 275 |
return null; |
267 | 276 |
} |
268 | 277 |
|
278 |
@Override |
|
269 | 279 |
public void finishAndStore() throws FinishServiceException { |
270 | 280 |
if (values != null) { |
271 | 281 |
|
... | ... | |
277 | 287 |
ToolsLocator.getDisposableManager().bind(featureSelection); |
278 | 288 |
|
279 | 289 |
try { |
280 |
featureSelection.accept(new Visitor() { |
|
281 |
|
|
282 |
public void visit(Object obj) |
|
283 |
throws VisitCanceledException, BaseException { |
|
284 |
Feature feature = (Feature) obj; |
|
285 |
|
|
286 |
EditingProviderServices editingProviderServices = |
|
290 |
featureSelection.accept((Object obj) -> { |
|
291 |
Feature feature = (Feature) obj; |
|
292 |
|
|
293 |
EditingProviderServices editingProviderServices = |
|
287 | 294 |
(EditingProviderServices) getProviderServices(); |
288 |
|
|
289 |
EditableFeature editable =
|
|
295 |
|
|
296 |
EditableFeature editable = |
|
290 | 297 |
editingProviderServices.getFeatureCopyWithoutUniqueIndex( |
291 |
featureStore, feature); |
|
292 |
|
|
293 |
Geometry geometry =
|
|
298 |
featureStore, feature);
|
|
299 |
|
|
300 |
Geometry geometry = |
|
294 | 301 |
feature.getDefaultGeometry().cloneGeometry(); |
295 |
geometry.transform(getMoveAffineTransform(p1, p2));
|
|
296 |
|
|
297 |
editable.setDefaultGeometry(geometry);
|
|
298 |
editingProviderServices.insertFeatureIntoFeatureStore(
|
|
302 |
geometry.transform(getMoveAffineTransform(p1, p2)); |
|
303 |
|
|
304 |
editable.setDefaultGeometry(geometry); |
|
305 |
editingProviderServices.insertFeatureIntoFeatureStore( |
|
299 | 306 |
editable, featureStore); |
300 |
} |
|
301 | 307 |
}); |
302 | 308 |
|
303 | 309 |
featureStore.getFeatureSelection().deselectAll(); |
... | ... | |
309 | 315 |
} |
310 | 316 |
} |
311 | 317 |
|
318 |
@Override |
|
312 | 319 |
public void start() throws StartServiceException, InvalidEntryException { |
313 |
values = new HashMap<EditingServiceParameter, Object>();
|
|
320 |
values = new HashMap<>(); |
|
314 | 321 |
FeatureSelection selected = null; |
315 | 322 |
if (featureStore != null) { |
316 | 323 |
try { |
... | ... | |
326 | 333 |
} |
327 | 334 |
} |
328 | 335 |
|
336 |
@Override |
|
329 | 337 |
public String getName() { |
330 | 338 |
return DuplicateEditingProviderFactory.PROVIDER_NAME; |
331 | 339 |
} |
Also available in: Unified diff