Revision 328 org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.split/src/main/java/org/gvsig/vectorediting/lib/prov/split/SplitEditingProvider.java
SplitEditingProvider.java | ||
---|---|---|
35 | 35 |
import org.gvsig.fmap.dal.feature.FeatureSelection; |
36 | 36 |
import org.gvsig.fmap.dal.feature.FeatureStore; |
37 | 37 |
import org.gvsig.fmap.geom.Geometry; |
38 |
import org.gvsig.fmap.geom.Geometry.TYPES; |
|
38 | 39 |
import org.gvsig.fmap.geom.aggregate.MultiCurve; |
39 | 40 |
import org.gvsig.fmap.geom.aggregate.MultiPrimitive; |
40 |
import org.gvsig.fmap.geom.aggregate.MultiSurface; |
|
41 | 41 |
import org.gvsig.fmap.geom.exception.CreateGeometryException; |
42 | 42 |
import org.gvsig.fmap.geom.operation.GeometryOperationException; |
43 | 43 |
import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException; |
... | ... | |
280 | 280 |
Feature feature = (Feature) it.next(); |
281 | 281 |
Geometry geometryToBeSplitted = |
282 | 282 |
feature.getDefaultGeometry(); |
283 |
int type = geometryToBeSplitted.getType(); |
|
283 |
GeometryType geoType = |
|
284 |
geometryToBeSplitted.getGeometryType(); |
|
284 | 285 |
|
285 |
switch (type) {
|
|
286 |
case SURFACE:
|
|
287 |
case CURVE: |
|
286 |
if (geoType.isTypeOf(TYPES.SURFACE)
|
|
287 |
|| geoType.isTypeOf(TYPES.CURVE)) {
|
|
288 |
|
|
288 | 289 |
MultiPrimitive splittedGeometries = |
289 | 290 |
(MultiPrimitive) split( |
290 | 291 |
(Primitive) geometryToBeSplitted, splitter); |
291 | 292 |
|
292 |
EditableFeature eFeature = |
|
293 |
editingProviderServices.getFeatureCopyWithoutPK( |
|
294 |
featureStore, feature); |
|
295 |
eFeature.setDefaultGeometry(splittedGeometries); |
|
296 |
editingProviderServices.insertFeatureIntoFeatureStore( |
|
297 |
eFeature, featureStore); |
|
298 |
break; |
|
299 |
case MULTICURVE: |
|
300 |
case MULTISURFACE: |
|
293 |
copyAlfanumericDataAndInsert(splittedGeometries, |
|
294 |
feature); |
|
301 | 295 |
|
296 |
} else if (geoType.isTypeOf(TYPES.MULTISURFACE) |
|
297 |
|| geoType.isTypeOf(TYPES.MULTICURVE)) { |
|
298 |
|
|
302 | 299 |
MultiPrimitive multiPrimitive = |
303 | 300 |
(MultiPrimitive) geometryToBeSplitted; |
304 | 301 |
|
305 | 302 |
for (int i = 0; i < multiPrimitive |
306 | 303 |
.getPrimitivesNumber(); i++) { |
307 | 304 |
|
308 |
splittedGeometries = |
|
305 |
MultiPrimitive splittedGeometries =
|
|
309 | 306 |
(MultiPrimitive) split( |
310 | 307 |
multiPrimitive.getPrimitiveAt(i), splitter); |
311 | 308 |
|
312 |
for (int j = 0; j < splittedGeometries |
|
313 |
.getPrimitivesNumber(); j++) { |
|
314 |
|
|
315 |
eFeature = |
|
316 |
editingProviderServices |
|
317 |
.getFeatureCopyWithoutPK(featureStore, |
|
318 |
feature); |
|
319 |
eFeature.setDefaultGeometry(splittedGeometries |
|
320 |
.getPrimitiveAt(j)); |
|
321 |
editingProviderServices |
|
322 |
.insertFeatureIntoFeatureStore(eFeature, |
|
323 |
featureStore); |
|
324 |
} |
|
309 |
copyAlfanumericDataAndInsert(splittedGeometries, |
|
310 |
feature); |
|
325 | 311 |
} |
326 |
break; |
|
327 |
default: |
|
328 | 312 |
} |
329 | 313 |
editingProviderServices.deleteFeatureFromFeatureStore( |
330 | 314 |
feature, featureStore); |
... | ... | |
342 | 326 |
} |
343 | 327 |
} |
344 | 328 |
|
329 |
private void copyAlfanumericDataAndInsert(MultiPrimitive multiPrimitive, |
|
330 |
Feature feature) throws DataException { |
|
331 |
EditingProviderServices editingProviderServices = |
|
332 |
(EditingProviderServices) getProviderServices(); |
|
333 |
|
|
334 |
for (int j = 0; j < multiPrimitive.getPrimitivesNumber(); j++) { |
|
335 |
|
|
336 |
EditableFeature eFeature = |
|
337 |
editingProviderServices.getFeatureCopyWithoutPK(featureStore, |
|
338 |
feature); |
|
339 |
eFeature.setDefaultGeometry(multiPrimitive.getPrimitiveAt(j)); |
|
340 |
editingProviderServices.insertFeatureIntoFeatureStore(eFeature, |
|
341 |
featureStore); |
|
342 |
} |
|
343 |
} |
|
344 |
|
|
345 | 345 |
private Geometry split(Primitive geometry, Geometry splitter) |
346 | 346 |
throws CreateGeometryException, GeometryOperationNotSupportedException, |
347 | 347 |
GeometryOperationException { |
Also available in: Unified diff