Skip to content

Commit 10e515e

Browse files
fix: export shp file
Fix the export of a shape file. ING-4189
1 parent 5423c78 commit 10e515e

File tree

1 file changed

+16
-18
lines changed

1 file changed

+16
-18
lines changed

io/plugins/eu.esdihumboldt.hale.io.shp/src/eu/esdihumboldt/hale/io/shp/writer/ShapefileInstanceWriter.java

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -569,16 +569,16 @@ private Map<String, Map<String, List<SimpleFeature>>> createFeatures(
569569
TypeDefinition type = instance.getDefinition();
570570
String localPart = type.getName().getLocalPart();
571571
if (schemaFtMap.containsKey(localPart)) {
572-
writeGeometryInstanceData(reporter, schemaFbMap, instance, localPart);
572+
List<GeometryProperty<?>> geoms = traverseInstanceForGeometries(instance);
573+
writeGeometryInstanceData(reporter, schemaFbMap, geoms, localPart);
573574
// add data for the rest of the properties.
574-
writePropertiesInstanceData(schemaFbMap, instance, type, localPart);
575+
writePropertiesInstanceData(schemaFbMap, instance, type, localPart, geoms);
575576

576577
// create list of simple features.
577578
// fix in case geometries have multiple geometry types but
578579
// single geometry in data. So, always extract geometries
579580
// from instance and update to schema. Otherwise the data
580581
// will be updated to all the geometries
581-
List<GeometryProperty<?>> geoms = traverseInstanceForGeometries(instance);
582582
for (GeometryProperty<?> geoProp : geoms) {
583583
String key = geoProp.getGeometry().getGeometryType();
584584
SimpleFeature feature = schemaFbMap.get(localPart).get(key)
@@ -600,15 +600,13 @@ private Map<String, Map<String, List<SimpleFeature>>> createFeatures(
600600
*
601601
* @param reporter reporter.
602602
* @param schemaFbMap map of feature builder to write the data to.
603-
* @param instance instance
603+
* @param geoms from traversing the instance to find geometries
604604
* @param localPart local part of <code>QName</code> which tracks multiple
605605
* schemas.
606606
*/
607607
private void writeGeometryInstanceData(IOReporter reporter,
608-
Map<String, Map<String, SimpleFeatureBuilder>> schemaFbMap, Instance instance,
609-
String localPart) {
610-
List<GeometryProperty<?>> geoms = traverseInstanceForGeometries(instance);
611-
608+
Map<String, Map<String, SimpleFeatureBuilder>> schemaFbMap,
609+
List<GeometryProperty<?>> geoms, String localPart) {
612610
for (GeometryProperty<?> geoProp : geoms) {
613611
addGeometryData(reporter, schemaFbMap, localPart, geoProp);
614612
}
@@ -622,10 +620,11 @@ private void writeGeometryInstanceData(IOReporter reporter,
622620
* @param type type definition.
623621
* @param localPart local part of <code>QName</code> which tracks multiple
624622
* schemas.
623+
* @param geoms from traversing the instance to find geometries
625624
*/
626625
private void writePropertiesInstanceData(
627626
Map<String, Map<String, SimpleFeatureBuilder>> schemaFbMap, Instance instance,
628-
TypeDefinition type, String localPart) {
627+
TypeDefinition type, String localPart, List<GeometryProperty<?>> geoms) {
629628
Collection<? extends PropertyDefinition> allNonComplexProperties = getNonComplexProperties(
630629
type);
631630
for (PropertyDefinition prop : allNonComplexProperties) {
@@ -635,17 +634,16 @@ private void writePropertiesInstanceData(
635634
&& prop.getName().getLocalPart() != null) {
636635
Object value = new InstanceAccessor(instance)
637636
.findChildren(prop.getName().getLocalPart()).value();
638-
List<GeometryProperty<?>> geoms = traverseInstanceForGeometries(instance);
639-
// add value by traversing geometryType from instance
640-
for (GeometryProperty<?> geoProp : geoms) {
641-
if (geoProp.getGeometry() != null) {
642-
String geometryType = geoProp.getGeometry().getGeometryType();
643-
if (schemaFbMap.get(localPart) != null
644-
&& schemaFbMap.get(localPart).get(geometryType) != null) {
645-
schemaFbMap.get(localPart).get(geometryType).add(value);
637+
if (schemaFbMap.get(localPart) != null && value != null) {
638+
// add value by traversing geometryType from instance
639+
for (GeometryProperty<?> geoProp : geoms) {
640+
if (geoProp.getGeometry() != null) {
641+
String geometryType = geoProp.getGeometry().getGeometryType();
642+
if (schemaFbMap.get(localPart).get(geometryType) != null) {
643+
schemaFbMap.get(localPart).get(geometryType).add(value);
644+
}
646645
}
647646
}
648-
649647
}
650648
}
651649
}

0 commit comments

Comments
 (0)