Revision 3067 org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.stretch/src/main/java/org/gvsig/vectorediting/lib/prov/stretch/StretchEditingProvider.java
StretchEditingProvider.java | ||
---|---|---|
5 | 5 |
|
6 | 6 |
import java.awt.geom.AffineTransform; |
7 | 7 |
import java.util.ArrayList; |
8 |
import java.util.Collections; |
|
8 | 9 |
import java.util.HashMap; |
9 | 10 |
import java.util.Iterator; |
10 | 11 |
import java.util.List; |
11 | 12 |
import java.util.Map; |
13 |
import org.apache.commons.collections4.CollectionUtils; |
|
12 | 14 |
import org.gvsig.fmap.dal.exception.DataException; |
13 | 15 |
import org.gvsig.fmap.dal.feature.EditableFeature; |
14 | 16 |
import org.gvsig.fmap.dal.feature.Feature; |
... | ... | |
58 | 60 |
import org.slf4j.Logger; |
59 | 61 |
import org.slf4j.LoggerFactory; |
60 | 62 |
|
63 |
@SuppressWarnings("UseSpecificCatch") |
|
61 | 64 |
public class StretchEditingProvider extends AbstractEditingProvider implements |
62 | 65 |
EditingProvider { |
63 | 66 |
|
... | ... | |
75 | 78 |
|
76 | 79 |
private final FeatureStore featureStore; |
77 | 80 |
|
81 |
private List<Feature> selectedFeatures; |
|
82 |
|
|
78 | 83 |
public StretchEditingProvider(ProviderServices providerServices, |
79 | 84 |
DynObject parameters) { |
80 | 85 |
super(providerServices); |
... | ... | |
118 | 123 |
if (param == selectionParameter) { |
119 | 124 |
if (value instanceof FeatureSelection) { |
120 | 125 |
values.put(param, value); |
126 |
this.selectedFeatures = this.getSelectedFeaturesCopy((FeatureSelection)value); |
|
121 | 127 |
} |
122 | 128 |
} else if (param == firstPointParameter) { |
123 | 129 |
if (value instanceof Point) { |
... | ... | |
248 | 254 |
FeatureSelection selection = |
249 | 255 |
(FeatureSelection) values.get(this.selectionParameter); |
250 | 256 |
try { |
251 |
if ((selection != null) && !selection.isEmpty()) {
|
|
257 |
if ( CollectionUtils.isNotEmpty(selectedFeatures) ) {
|
|
252 | 258 |
Geometry geometry = (Geometry) values.get(this.geometryParameter); |
253 | 259 |
if (geometry != null) { |
254 | 260 |
// |
255 | 261 |
List<Point> selectedVertex = new ArrayList<>(); |
256 |
DisposableIterator it = null; |
|
257 |
|
|
258 | 262 |
try { |
259 |
it = selection.fastIterator(); |
|
260 |
|
|
261 |
while (it.hasNext()) { |
|
262 |
Feature feature = (Feature) it.next(); |
|
263 |
for (Feature feature : selectedFeatures) { |
|
263 | 264 |
Geometry featureGeometry = feature.getDefaultGeometry(); |
264 | 265 |
List<Point> vertex = getSelectedVertex(featureGeometry, geometry); |
265 | 266 |
if(vertex != null){ |
... | ... | |
268 | 269 |
} |
269 | 270 |
} catch (BaseException e) { |
270 | 271 |
throw new InvalidEntryException(e); |
271 |
} finally { |
|
272 |
DisposeUtils.disposeQuietly(it); |
|
273 | 272 |
} |
274 | 273 |
|
275 | 274 |
if(!selectedVertex.isEmpty()){ |
... | ... | |
290 | 289 |
} |
291 | 290 |
} |
292 | 291 |
|
293 |
it = null; |
|
294 | 292 |
try { |
295 |
it = selection.fastIterator(); |
|
296 |
|
|
297 |
while (it.hasNext()) { |
|
298 |
Feature feature = (Feature) it.next(); |
|
299 |
|
|
293 |
for (Feature feature : selectedFeatures) { |
|
300 | 294 |
ISymbol previewSymbol = this.getPreviewSymbol(feature); |
301 | 295 |
|
302 | 296 |
Geometry featureGeometry = feature.getDefaultGeometry(); |
... | ... | |
322 | 316 |
} |
323 | 317 |
} catch (BaseException e) { |
324 | 318 |
throw new InvalidEntryException(e); |
325 |
} finally { |
|
326 |
DisposeUtils.disposeQuietly(it); |
|
327 | 319 |
} |
328 | 320 |
} |
329 | 321 |
} |
... | ... | |
347 | 339 |
@Override |
348 | 340 |
public void stop() { |
349 | 341 |
values.clear(); |
342 |
this.selectedFeatures = Collections.EMPTY_LIST; |
|
350 | 343 |
} |
351 | 344 |
|
352 | 345 |
|
... | ... | |
369 | 362 |
= (FeatureSelection) values.get(selectionParameter); |
370 | 363 |
|
371 | 364 |
try { |
372 |
if ((selection != null) && !selection.isEmpty()) {
|
|
365 |
if ( CollectionUtils.isNotEmpty(selectedFeatures) ) {
|
|
373 | 366 |
Geometry geometry = (Geometry) values.get(this.geometryParameter); |
374 | 367 |
if (geometry != null) { |
375 | 368 |
Point firstPoint |
... | ... | |
381 | 374 |
AffineTransform at |
382 | 375 |
= getMoveAffineTransform(firstPoint, secondPoint); |
383 | 376 |
|
384 |
DisposableIterator it = null; |
|
385 |
|
|
386 | 377 |
try { |
387 |
it = selection.fastIterator(); |
|
388 |
|
|
389 |
while (it.hasNext()) { |
|
390 |
Feature feature = (Feature) it.next(); |
|
378 |
for (Feature feature : selectedFeatures) { |
|
391 | 379 |
Geometry featureGeometry |
392 | 380 |
= feature.getDefaultGeometry(); |
393 | 381 |
|
... | ... | |
404 | 392 |
} |
405 | 393 |
} catch (BaseException e) { |
406 | 394 |
throw new FinishServiceException(e); |
407 |
} finally { |
|
408 |
DisposeUtils.disposeQuietly(it); |
|
409 | 395 |
} |
410 | 396 |
} |
411 | 397 |
} |
... | ... | |
424 | 410 |
@Override |
425 | 411 |
public void start() throws StartServiceException { |
426 | 412 |
this.values = new HashMap<>(); |
427 |
FeatureSelection selected = null; |
|
413 |
this.selectedFeatures = Collections.EMPTY_LIST; |
|
414 |
|
|
428 | 415 |
if (featureStore != null) { |
416 |
FeatureSelection selected = null; |
|
429 | 417 |
try { |
430 |
selected = |
|
431 |
(FeatureSelection) featureStore.getFeatureSelection() |
|
432 |
.clone(); |
|
418 |
selected = (FeatureSelection) featureStore.getFeatureSelection().clone(); |
|
433 | 419 |
} catch (DataException e) { |
434 | 420 |
throw new StartServiceException(e); |
435 |
} catch (CloneNotSupportedException e) { |
|
436 |
// Do nothing
|
|
421 |
} catch (CloneNotSupportedException ex) {
|
|
422 |
LOGGER.debug("Can't init selection",ex);
|
|
437 | 423 |
} |
438 | 424 |
if ((selected != null) && (selected.getSelectedCount() > 0)) { |
439 | 425 |
values.put(selectionParameter, selected); |
426 |
this.selectedFeatures = this.getSelectedFeaturesCopy(selected); |
|
440 | 427 |
} |
441 | 428 |
} |
442 | 429 |
} |
Also available in: Unified diff