diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java index 4cb98b59b..92b7d11c0 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java @@ -1054,14 +1054,10 @@ public class DatasetManager { if (!value.toString().equals("\"\"")) { String stringValue = value.toString().replaceAll("=", ":"); JSONArray values = new JSONArray(stringValue); - if (values != null) { - values.iterator().forEachRemaining(element -> { - Map data = ((JSONObject) element).toMap(); - this.addTag(tags, wizardModel.getTags(), data.get("id").toString(), data.get("name").toString()); - }); - } else { - this.addTag(tags, wizardModel.getTags(), "", value.asText()); - } + values.iterator().forEachRemaining(element -> { + Map data = ((JSONObject) element).toMap(); + this.addTag(tags, wizardModel.getTags(), data.get("id").toString(), data.get("name").toString()); + }); } }); } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/datasetwizard/DatasetWizardModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/datasetwizard/DatasetWizardModel.java index cf4e6da80..8dff940c1 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/datasetwizard/DatasetWizardModel.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/datasetwizard/DatasetWizardModel.java @@ -20,9 +20,13 @@ import eu.eudat.models.data.dmp.DataManagementPlan; import eu.eudat.models.data.externaldataset.ExternalDatasetListingModel; import eu.eudat.models.data.user.composite.PagedDatasetProfile; import net.minidev.json.JSONValue; +import org.json.JSONArray; +import org.json.JSONObject; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; @@ -346,7 +350,7 @@ public class DatasetWizardModel implements DataModel[] params = setterMethod.getParameterTypes(); ObjectMapper mapper = new ObjectMapper(); //GK: Tags Special logic - if (prefillingMapping.getTarget().equals("tags")) { + if (!value.equals("null") && prefillingMapping.getTarget().equals("tags")) { List rawTags = (List) mapper.readValue(value, params[0]); if (rawTags.get(0) instanceof String) { List parsedTags = rawTags.stream().map(rawTag -> new Tag((String) rawTag, (String) rawTag)).collect(Collectors.toList()); @@ -359,9 +363,44 @@ public class DatasetWizardModel implements DataModel nodes = JsonSearcher.findNodes(parentNode, "rdaProperty", prefillingMapping.getMaDmpTarget()); + if(prefillingMapping.getMaDmpTarget().equals("dataset.distribution.available_until") && !value.equals("null")){ + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd"); + LocalDate date = LocalDate.parse(value.replace("\"", ""), formatter); + date = date.plusYears(20); + value = date.toString(); + } for (JsonNode node: nodes) { String id = node.get(0) != null ? node.get(0).get("id").asText() : node.get("id").asText(); - properties.put(id, value); + if(prefillingMapping.getMaDmpTarget().equals("dataset.distribution.format")){ + JSONArray jsonArr = new JSONArray(value); + List formats = new ArrayList<>(); + String extension; + for (int i = 0; i < jsonArr.length(); i++){ + JSONObject jsonObj = jsonArr.getJSONObject(i); + String filename = (String) jsonObj.get("filename"); + int index = filename.lastIndexOf('.'); + extension = (index > 0) ? filename.substring(index+1) : filename; + formats.add(extension); + } + formats = formats.stream().distinct().collect(Collectors.toList()); + String format = String.join(", ", formats); + properties.put(id, format); + } + else if(prefillingMapping.getMaDmpTarget().equals("dataset.distribution.data_access")){ + value = value.replace("\"", ""); + if(value.equals("open")){ + properties.put(id, value); + } + else if(value.equals("restricted")){ + properties.put(id, "shared"); + } + else{ + properties.put(id, "closed"); + } + } + else{ + properties.put(id, value.replace("\"", "")); + } } } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DatasetRDAMapper.java b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DatasetRDAMapper.java index 6cbdcc98a..39b4187c3 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DatasetRDAMapper.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DatasetRDAMapper.java @@ -1,13 +1,13 @@ package eu.eudat.models.rda.mapper; -import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import eu.eudat.data.entities.DatasetProfile; +import eu.eudat.elastic.criteria.DatasetCriteria; import eu.eudat.elastic.entities.Tag; import eu.eudat.logic.managers.DatasetManager; import eu.eudat.logic.services.ApiContext; -import eu.eudat.logic.utilities.json.JavaToJson; +import eu.eudat.logic.utilities.helpers.StreamDistinctBy; import eu.eudat.logic.utilities.json.JsonSearcher; import eu.eudat.models.data.datasetprofile.DatasetProfileOverviewModel; import eu.eudat.models.data.datasetwizard.DatasetWizardModel; @@ -19,7 +19,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.transaction.Transactional; -import java.net.URI; import java.time.Instant; import java.time.ZoneId; import java.time.format.DateTimeFormatter; @@ -131,7 +130,7 @@ public class DatasetRDAMapper { rda.setKeyword(keywordNodes.stream().map(keywordNode -> { JsonNode value = keywordNode.get("value"); if (value.isArray()) { - return StreamSupport.stream(value.spliterator(), false).map(node -> KeywordRDAMapper.toRDA(node.asText())).flatMap(Collection::stream).collect(Collectors.toList()); + return StreamSupport.stream(value.spliterator(), false).map(node -> KeywordRDAMapper.toRDA(node.toString())).flatMap(Collection::stream).collect(Collectors.toList()); } else { return KeywordRDAMapper.toRDA(keywordNode.get("value").asText()); } @@ -331,9 +330,14 @@ public class DatasetRDAMapper { // if (keywordIds.size() < rda.getKeyword().size()) { // takeAll = true; // } + DatasetCriteria criteria = new DatasetCriteria(); + criteria.setHasTags(true); + List tags = this.apiContext.getOperationsContext().getElasticRepository().getDatasetRepository().query(criteria).stream().map(eu.eudat.elastic.entities.Dataset::getTags).flatMap(Collection::stream).filter(StreamDistinctBy.distinctByKey(Tag::getId)).collect(Collectors.toList()); if(!rda.getKeyword().isEmpty()){ - for (int i = 0; i < keywordIds.size(); i++) { -// if (takeAll) { + List templateTags = tags.stream().filter(tag -> rda.getKeyword().contains(tag.getName())).collect(Collectors.toList()); + properties.put(keywordIds.get(0), mapper.writeValueAsString(templateTags)); +// for (int i = 0; i < keywordIds.size(); i++) { +// //if (takeAll) { // List tags = new ArrayList<>(); // for (String keyword : rda.getKeyword()) { // tags.add(mapper.writeValueAsString(toTagEntity(keyword))); @@ -342,8 +346,8 @@ public class DatasetRDAMapper { // } else { // properties.put(keywordIds.get(i), mapper.writeValueAsString(toTagEntity(rda.getKeyword().get(i)))); // } - properties.put(keywordIds.get(i), rda.getKeyword().get(i)); - } +// properties.put(keywordIds.get(i), rda.getKeyword().get(i)); +// } } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/KeywordRDAMapper.java b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/KeywordRDAMapper.java index dcdd0deac..fa5ecdb19 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/KeywordRDAMapper.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/KeywordRDAMapper.java @@ -2,7 +2,9 @@ package eu.eudat.models.rda.mapper; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import eu.eudat.elastic.entities.Dataset; import eu.eudat.elastic.entities.Tag; +import eu.eudat.logic.services.ApiContext; import eu.eudat.logic.utilities.json.JavaToJson; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -15,15 +17,15 @@ public class KeywordRDAMapper { private static final Logger logger = LoggerFactory.getLogger(KeywordRDAMapper.class); public static List toRDA(String value) { - if (!value.isEmpty()) { + if (!value.isEmpty() && !value.equals("null")) { try { ObjectMapper mapper = new ObjectMapper(); String valueJson = JavaToJson.objectStringToJson(value); - List tags = Arrays.asList(mapper.readValue(valueJson, Tag[].class)); - return tags.stream().map(Tag::getName).collect(Collectors.toList()); + Tag tag = mapper.readValue(valueJson, Tag.class); + return new ArrayList<>(Collections.singletonList(tag.getName())); } catch (JsonProcessingException e) { - logger.warn(e.getMessage() + ". Attempting to parse it as a String list."); - return new ArrayList<>(Arrays.asList(value.replace(" ", "").split(","))); + logger.warn(e.getMessage() + ". Attempting to parse it as a String since its a new tag."); + return new ArrayList<>(Collections.singletonList(value)); } } diff --git a/dmp-backend/web/src/main/resources/externalUrls/ExternalUrls.xml b/dmp-backend/web/src/main/resources/externalUrls/ExternalUrls.xml index 7d055d3de..ee11d46a7 100644 --- a/dmp-backend/web/src/main/resources/externalUrls/ExternalUrls.xml +++ b/dmp-backend/web/src/main/resources/externalUrls/ExternalUrls.xml @@ -1039,11 +1039,19 @@ - + + + + + + + + +