From e5b833169ba59fcef318d3f4eefbf02ac9b659f7 Mon Sep 17 00:00:00 2001 From: Enrico Ottonello Date: Tue, 16 Feb 2021 10:51:14 +0100 Subject: [PATCH] fix multiple has_spatial_coverage issue --- .../ariadneplus/elasticsearch/BulkUpload.java | 44 +++++++++++++++---- 1 file changed, 35 insertions(+), 9 deletions(-) diff --git a/dnet-ariadneplus-graphdb-publisher/src/main/java/eu/dnetlib/ariadneplus/elasticsearch/BulkUpload.java b/dnet-ariadneplus-graphdb-publisher/src/main/java/eu/dnetlib/ariadneplus/elasticsearch/BulkUpload.java index f3c8a8e..7ab5ab3 100644 --- a/dnet-ariadneplus-graphdb-publisher/src/main/java/eu/dnetlib/ariadneplus/elasticsearch/BulkUpload.java +++ b/dnet-ariadneplus-graphdb-publisher/src/main/java/eu/dnetlib/ariadneplus/elasticsearch/BulkUpload.java @@ -19,6 +19,10 @@ import javax.annotation.PostConstruct; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; @Service public class BulkUpload { @@ -65,15 +69,37 @@ public class BulkUpload { } else { ace.setResourceType("dataset"); - Spatial esSpatial = new Spatial(); - ace.getSpatial().stream().filter(s -> s.getPlaceName()!=null).forEach(s -> { - esSpatial.setPlaceName(s.getPlaceName()); - }); - ace.getSpatial().stream().filter(s -> s.getLocation()!=null).forEach(s -> { - esSpatial.setLocation(s.getLocation()); - }); - ace.getSpatial().clear(); - ace.setSpatial(Arrays.asList(esSpatial)); + if (ace.getSpatial()!=null) { + if (ace.getSpatial().size()==2) { + Spatial uniqueSpatial = new Spatial(); + boolean uniquePlaceNameFound = ace.getSpatial().stream().filter(s -> s.getPlaceName()!=null).count()==1; + boolean uniqueLocationFound = ace.getSpatial().stream().filter(s -> s.getLocation()!=null).count()==1; + if (uniquePlaceNameFound&&uniqueLocationFound) { + ace.getSpatial().stream().filter(s -> s.getPlaceName()!=null).forEach(s -> { + uniqueSpatial.setPlaceName(s.getPlaceName()); + }); + ace.getSpatial().stream().filter(s -> s.getLocation()!=null).forEach(s -> { + uniqueSpatial.setLocation(s.getLocation()); + }); + ace.getSpatial().clear(); + ace.setSpatial(Arrays.asList(uniqueSpatial)); + } + } + else { + if (ace.getSpatial()!=null) { + Set items = new HashSet<>(); + List spatialsNoDup = ace.getSpatial().stream() + .filter(s -> !items.add(s.getPlaceName())) + .collect(Collectors.toList()); + ace.getSpatial().clear(); + ace.setSpatial(spatialsNoDup); + } + + } + } + else { + ace.setSpatial(Arrays.asList(new Spatial())); + } } if (!isCollection) {