From f2115257131d292b539c12173e9c47742818a776 Mon Sep 17 00:00:00 2001
From: Baptiste Toulemonde <toulemonde@cines.fr>
Date: Fri, 7 Oct 2022 15:35:50 +0200
Subject: [PATCH] add keyword

---
 .../service/MappingService.java               | 56 ++++++++++++++-----
 1 file changed, 43 insertions(+), 13 deletions(-)

diff --git a/src/main/java/com/smartharvester/service/MappingService.java b/src/main/java/com/smartharvester/service/MappingService.java
index d085289..9b396e3 100644
--- a/src/main/java/com/smartharvester/service/MappingService.java
+++ b/src/main/java/com/smartharvester/service/MappingService.java
@@ -115,8 +115,8 @@ public class MappingService {
 
         if (!iris.isEmpty()) {
             iris.forEach(iri -> {
-                //datasetString.append("dcat:theme <" + iri.getIri() + ">" + " <http://www.w3.org/2000/01/rdf-schema#label> \"" + iri.getLabel() + "\".\n" );
-                if (null !=iri.getLabel()) {
+                datasetString.append(this.write("dcat:theme", iri.getIri()));
+                if (null != iri.getLabel()) {
                     if (datasetMap.containsKey("dcat:keyword")) {
                         List<String> keywords = datasetMap.get("dcat:keyword");
                         if (keywords.stream().noneMatch(e -> e.equals(iri.getLabel()))) {
@@ -134,7 +134,7 @@ public class MappingService {
 
         }
         for (Map.Entry<String, List<String>> entry : datasetMap.entrySet()) {
-            if (entry.getValue().isEmpty()) {
+            if (entry.getValue().isEmpty() && !entry.getKey().equals("dcat:keyword")) {
                 entry.setValue(List.of("undefined"));
             }
             if (isReplicable(entry.getKey(), paths) && (entry.getValue().size() > 1)) {
@@ -605,11 +605,11 @@ public class MappingService {
         ResponseEntity<Object> response =
             this.restTemplate.exchange(url + "/catalog/" + catId, HttpMethod.GET, entity, Object.class);
 
-            ObjectMapper mapper = new ObjectMapper();
-            JSONArray body = new JSONArray(mapper.writeValueAsString(response.getBody()));
+        ObjectMapper mapper = new ObjectMapper();
+        JSONArray body = new JSONArray(mapper.writeValueAsString(response.getBody()));
 
-            List<String> datasets =
-                getValuesFromJsonLd(body.getJSONObject(1), "http://www.w3.org/ns/dcat#dataset", "@id");
+        List<String> datasets =
+            getValuesFromJsonLd(body.getJSONObject(1), "http://www.w3.org/ns/dcat#dataset", "@id");
 
         List<KeywordResponse> keywordResponses = new ArrayList<>();
         datasets.stream().forEach(datasetUrl -> {
@@ -731,16 +731,46 @@ public class MappingService {
                         concept.getIris().forEach(iri -> {
                             if (null != body.optJSONObject(finalIndex)) {
                                 try {
-                                    if (concept.getIris().indexOf(iri) == 0) {
+                                    if (concept.getIris().indexOf(iri.getIri()) == 0) {
                                         body.getJSONObject(finalIndex).remove("http://www.w3.org/ns/dcat#theme");
                                         body.getJSONObject(finalIndex)
                                             .put("http://www.w3.org/ns/dcat#theme", new JSONArray());
                                     }
-                                   if (null != body.getJSONObject(finalIndex).optJSONArray("http://www.w3.org/ns/dcat#theme")) {
-                                       body.getJSONObject(finalIndex)
-                                           .getJSONArray("http://www.w3.org/ns/dcat#theme")
-                                           .put(new JSONObject().put("@id", iri));
-                                   }
+                                    if (null != body.getJSONObject(finalIndex)
+                                        .optJSONArray("http://www.w3.org/ns/dcat#theme")) {
+                                        body.getJSONObject(finalIndex)
+                                            .getJSONArray("http://www.w3.org/ns/dcat#theme")
+                                            .put(new JSONObject().put("@id", iri.getIri()));
+                                    }
+                                    if (null != iri.getLabel()) {
+
+
+                                        if (null != body.getJSONObject(finalIndex)
+                                            .optJSONArray("http://www.w3.org/ns/dcat#keyword")) {
+                                            JSONArray keywordsArray = body.getJSONObject(finalIndex)
+                                                .getJSONArray("http://www.w3.org/ns/dcat#keyword");
+                                            boolean isPresent = false;
+                                            for (int i = 0; i < keywordsArray.length(); i++) {
+                                                if (keywordsArray.optJSONObject(i) != null
+                                                    && keywordsArray.optJSONObject(i).getString("@value")
+                                                    .equals(iri.getLabel())) {
+                                                    isPresent = true;
+                                                }
+                                            }
+                                            if (!isPresent) {
+                                                body.getJSONObject(finalIndex)
+                                                    .getJSONArray("http://www.w3.org/ns/dcat#keyword")
+                                                    .put(new JSONObject().put("@value", iri.getLabel()));
+                                            }
+                                        } else {
+                                            body.getJSONObject(finalIndex)
+                                                .put("http://www.w3.org/ns/dcat#keyword", new JSONArray());
+                                            body.getJSONObject(finalIndex)
+                                                .getJSONArray("http://www.w3.org/ns/dcat#keyword")
+                                                .put(new JSONObject().put("@value", iri.getLabel()));
+
+                                        }
+                                    }
                                 } catch (JSONException e) {
                                     notPublishedUrl.add(concept.getUrl() + " => " + e.getMessage());
                                     LOGGER.error(e.getMessage());
-- 
GitLab