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 {
|