From f6cb4a40d2e8dae6590b1a41001f1b903ed5b364 Mon Sep 17 00:00:00 2001 From: George Kalampokis Date: Tue, 22 Feb 2022 11:58:39 +0200 Subject: [PATCH] Generalized (again) dataset prefilling --- .../mapper/prefilling/PrefillingMapper.java | 80 +++++++++---------- .../resources/externalUrls/ExternalUrls.xml | 1 + 2 files changed, 39 insertions(+), 42 deletions(-) diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/mapper/prefilling/PrefillingMapper.java b/dmp-backend/web/src/main/java/eu/eudat/logic/mapper/prefilling/PrefillingMapper.java index ebead5b31..fea4f46e0 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/mapper/prefilling/PrefillingMapper.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/mapper/prefilling/PrefillingMapper.java @@ -70,11 +70,6 @@ public class PrefillingMapper { //GK: Tags Special logic if (!value.equals("null") && prefillingMapping.getTarget().equals("tags")) { value = mapper.valueToTree(parseTags(value)).toString(); - List nodes = JsonSearcher.findNodes(parentNode, "rdaProperty", "dataset.keyword"); - for (JsonNode node: nodes) { - String id = node.get(0) != null ? node.get(0).get("id").asText() : node.get("id").asText(); - properties.put(id, value); - } } setterMethod.invoke(datasetWizardModel, mapper.readValue(value, params[0])); }catch (InvocationTargetException | IllegalAccessException | JsonProcessingException e) { @@ -88,7 +83,7 @@ public class PrefillingMapper { } JsonNode valueNode = mapper.readTree(value); List parsedValues = new ArrayList<>(); - if (valueNode.isArray() && (!valueNode.get(0).isTextual() || !valueNode.get(0).isNull())) { + if (valueNode.isArray() && (!valueNode.get(0).isTextual())) { if (prefillingMapping.getSubSource() == null || prefillingMapping.getSubSource().isEmpty()) { throw new IllegalArgumentException("Source value is an array but no subSource field have been set"); } @@ -104,6 +99,41 @@ public class PrefillingMapper { String parsedValue = null; if (valueNode.isTextual()) { parsedValue = valueNode.textValue().replace(trimRegex, ""); + }else if (valueNode.isArray() && valueNode.get(0).isTextual()) { + List values = new LinkedList<>(); + for (int i = 0; i < valueNode.size(); i++) { + values.add(valueNode.get(i).textValue().replace(trimRegex, "")); + } + parsedValue = String.join(", ", values); + } + + //GK: This is not generic and it will crash if the dataset.issued is not available on the template + /*if(prefillingMapping.getMaDmpTarget().equals("dataset.distribution.data_access")){ + if(parsedValue != null && parsedValue.equals("open")){ + List issuedNodes = JsonSearcher.findNodes(parentNode, "rdaProperty", "dataset.issued"); + String issuedIdNode = issuedNodes.get(0).get("id").asText(); + String issuedValue = (String)properties.get(issuedIdNode); + List licStartDateNodes = JsonSearcher.findNodes(parentNode, "rdaProperty", "dataset.distribution.license.start_date"); + for (JsonNode licStartDateNode: licStartDateNodes) { + String licStartDateId = licStartDateNode.get(0) != null ? licStartDateNode.get(0).get("id").asText() : licStartDateNode.get("id").asText(); + properties.put(licStartDateId, issuedValue); + } + } + }*/ + + //GK: How do we know what field will get that value? and why is only DOI? + /*if (prefillingMapping.getMaDmpTarget().equals("dataset.dataset_id")) { + JSONObject datasetID = new JSONObject(); + datasetID.put("identifier", parsedValue); + datasetID.put("type", "doi"); + properties.put(id, datasetID.toString()); + }*/ + + if (prefillingMapping.getMaDmpTarget().equals("dataset.distribution.available_until") && parsedValue != null && !parsedValue.equals("null")) { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd"); + LocalDate date = LocalDate.parse(parsedValue, formatter); + date = date.plusYears(20); + parsedValue = date.toString(); } for (JsonNode node: nodes) { @@ -114,27 +144,7 @@ public class PrefillingMapper { case COMBO_BOX: if (parsedValues.isEmpty()) parsedValues.add(parsedValue); - if(prefillingMapping.getMaDmpTarget().equals("dataset.distribution.data_access")){ - if(parsedValue != null && parsedValue.equals("open")){ - properties.put(id, parsedValue); - List issuedNodes = JsonSearcher.findNodes(parentNode, "rdaProperty", "dataset.issued"); - String issuedIdNode = issuedNodes.get(0).get("id").asText(); - String issuedValue = (String)properties.get(issuedIdNode); - List licStartDateNodes = JsonSearcher.findNodes(parentNode, "rdaProperty", "dataset.distribution.license.start_date"); - for (JsonNode licStartDateNode: licStartDateNodes) { - String licStartDateId = licStartDateNode.get(0) != null ? licStartDateNode.get(0).get("id").asText() : licStartDateNode.get("id").asText(); - properties.put(licStartDateId, issuedValue); - } - } - else if(parsedValue != null && parsedValue.equals("restricted")){ - properties.put(id, "shared"); - } - else{ - properties.put(id, "closed"); - } - } - else - properties.put(id, parseComboBoxValues(node, parsedValues)); + properties.put(id, parseComboBoxValues(node, parsedValues)); break; case TAGS: properties.put(id, parseTags(parsedValue)); @@ -143,21 +153,7 @@ public class PrefillingMapper { if (!parsedValues.isEmpty()) properties.put(id, String.join(", ", parsedValues)); else { - if (prefillingMapping.getMaDmpTarget().equals("dataset.dataset_id")) { - JSONObject datasetID = new JSONObject(); - datasetID.put("identifier", parsedValue); - datasetID.put("type", "doi"); - properties.put(id, datasetID.toString()); - } - else { - if (prefillingMapping.getMaDmpTarget().equals("dataset.distribution.available_until") && parsedValue != null && !parsedValue.equals("null")) { - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd"); - LocalDate date = LocalDate.parse(parsedValue, formatter); - date = date.plusYears(20); - parsedValue = date.toString(); - } - properties.put(id, parsedValue); - } + properties.put(id, parsedValue); } break; } diff --git a/dmp-backend/web/src/main/resources/externalUrls/ExternalUrls.xml b/dmp-backend/web/src/main/resources/externalUrls/ExternalUrls.xml index c84171c14..c5cc3c35a 100644 --- a/dmp-backend/web/src/main/resources/externalUrls/ExternalUrls.xml +++ b/dmp-backend/web/src/main/resources/externalUrls/ExternalUrls.xml @@ -1184,6 +1184,7 @@ but not +