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