From 494ee47620f5b238eb6b4e224bf34447f7975e4a Mon Sep 17 00:00:00 2001 From: Aldo Mihasi Date: Tue, 22 Feb 2022 15:53:25 +0200 Subject: [PATCH] zenodo prefilling customizations --- .../logic/managers/PrefillingManager.java | 2 +- .../mapper/prefilling/PrefillingMapper.java | 61 ++++++++++--------- .../config/entities/PrefillingConfig.java | 12 ++++ .../resources/externalUrls/ExternalUrls.xml | 4 +- 4 files changed, 49 insertions(+), 30 deletions(-) diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/PrefillingManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/PrefillingManager.java index 0010fe997..f80e40064 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/PrefillingManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/PrefillingManager.java @@ -50,7 +50,7 @@ public class PrefillingManager { PrefillingGet prefillingGet = prefillingConfig.getPrefillingGet(); Map prefillingEntity = getSingle(prefillingGet.getUrl(), prefillId); DatasetProfile datasetProfile = apiContext.getOperationsContext().getDatabaseRepository().getDatasetProfileDao().find(profileId); - return PrefillingMapper.mapPrefilledEntityToDatasetWizard(prefillingEntity, prefillingGet, datasetProfile, datasetManager); + return PrefillingMapper.mapPrefilledEntityToDatasetWizard(prefillingEntity, prefillingGet, prefillingConfig.getType(), datasetProfile, datasetManager); } private Map getSingle(String url, String id) { 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 b8ef8a335..d6d7320ab 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 @@ -20,6 +20,7 @@ import eu.eudat.models.data.datasetprofile.DatasetProfileOverviewModel; import eu.eudat.models.data.datasetprofile.RenderStyle; import eu.eudat.models.data.datasetwizard.DatasetWizardModel; import eu.eudat.models.data.externaldataset.ExternalAutocompleteFieldModel; +import org.json.JSONObject; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; @@ -31,7 +32,7 @@ import java.util.stream.Collectors; public class PrefillingMapper { private static final ObjectMapper mapper = new ObjectMapper().configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true); - public static DatasetWizardModel mapPrefilledEntityToDatasetWizard(Map prefilledEntity, PrefillingGet prefillingGet, + public static DatasetWizardModel mapPrefilledEntityToDatasetWizard(Map prefilledEntity, PrefillingGet prefillingGet, String type, DatasetProfile profile, DatasetManager datasetManager) throws Exception { DatasetWizardModel datasetWizardModel = new DatasetWizardModel(); datasetWizardModel.setProfile(new DatasetProfileOverviewModel().fromDataModel(profile)); @@ -49,17 +50,17 @@ public class PrefillingMapper { sourceValue = ((Map)sourceValue).get(sourceKey); } } - setValue(prefillingMapping, mapper.writeValueAsString(sourceValue), datasetWizardModel, parentNode, properties); + setValue(prefillingMapping, mapper.writeValueAsString(sourceValue), datasetWizardModel, parentNode, properties, type); } for (PrefillingFixedMapping fixedMapping: prefillingGet.getFixedMappings()) { - setValue(fixedMapping, fixedMapping.getValue(), datasetWizardModel, parentNode, properties); + setValue(fixedMapping, fixedMapping.getValue(), datasetWizardModel, parentNode, properties, type); } dataset.setProperties(mapper.writeValueAsString(properties)); datasetWizardModel.setDatasetProfileDefinition(datasetManager.getPagedProfile(datasetWizardModel, dataset)); return datasetWizardModel; } - private static void setValue(PrefillingMapping prefillingMapping, String value, DatasetWizardModel datasetWizardModel, JsonNode parentNode, Map properties) throws InvocationTargetException, IllegalAccessException, JsonProcessingException { + private static void setValue(PrefillingMapping prefillingMapping, String value, DatasetWizardModel datasetWizardModel, JsonNode parentNode, Map properties, String type) throws InvocationTargetException, IllegalAccessException, JsonProcessingException { String trimRegex = prefillingMapping.getTrimRegex() != null ? prefillingMapping.getTrimRegex() : ""; if (!value.startsWith("\"") && !value.startsWith("[") && !value.equals("null")) { value = "\"" + value + "\""; @@ -109,33 +110,29 @@ public class PrefillingMapper { } else { List nodes = JsonSearcher.findNodes(parentNode, "rdaProperty", prefillingMapping.getMaDmpTarget()); - //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); + // zenodo prefilling customizations + if(type.equals("zenodo")){ + if(prefillingMapping.getMaDmpTarget().equals("dataset.distribution.data_access")){ + if(parsedValue != null && parsedValue.equals("open")){ + List issuedNodes = JsonSearcher.findNodes(parentNode, "rdaProperty", "dataset.issued"); + if(!issuedNodes.isEmpty()){ + 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(); + 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) { @@ -151,6 +148,14 @@ public class PrefillingMapper { case TAGS: properties.put(id, mapper.valueToTree(parseTags(parsedValue)).toString()); break; + case DATASET_IDENTIFIER: + JSONObject datasetID = new JSONObject(); + datasetID.put("identifier", parsedValue); + if(type.equals("zenodo")){ + datasetID.put("type", "doi"); + } + properties.put(id, datasetID.toString()); + break; default: if (!parsedValues.isEmpty()) properties.put(id, String.join(", ", parsedValues)); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/config/entities/PrefillingConfig.java b/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/config/entities/PrefillingConfig.java index eca10e81e..fba62bab7 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/config/entities/PrefillingConfig.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/config/entities/PrefillingConfig.java @@ -1,5 +1,6 @@ package eu.eudat.logic.proxy.config.entities; +import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; @@ -9,6 +10,8 @@ public class PrefillingConfig { private PrefillingSearch prefillingSearch; private PrefillingGet prefillingGet; + private String type; + public PrefillingSearch getPrefillingSearch() { return prefillingSearch; } @@ -26,4 +29,13 @@ public class PrefillingConfig { public void setPrefillingGet(PrefillingGet prefillingGet) { this.prefillingGet = prefillingGet; } + + @XmlAttribute(name = "type") + public void setType(String type) { + this.type = type; + } + + public String getType(){ + return type; + } } diff --git a/dmp-backend/web/src/main/resources/externalUrls/ExternalUrls.xml b/dmp-backend/web/src/main/resources/externalUrls/ExternalUrls.xml index c5cc3c35a..d0a654d34 100644 --- a/dmp-backend/web/src/main/resources/externalUrls/ExternalUrls.xml +++ b/dmp-backend/web/src/main/resources/externalUrls/ExternalUrls.xml @@ -1156,7 +1156,7 @@ but not - + zenodo @@ -1181,7 +1181,9 @@ but not https://zenodo.org/api/records/{id} + +