From af8fddb89c840fc33f2905a94cd3390a1fef243f Mon Sep 17 00:00:00 2001 From: Aldo Mihasi Date: Wed, 17 May 2023 13:45:12 +0300 Subject: [PATCH] #7911 - read pid and pid type from external api respones so as to save those values in the dataset field --- .../config/DataFieldsUrlConfiguration.java | 19 ++++++++ .../logic/proxy/fetching/RemoteFetcher.java | 9 +++- .../proxy/fetching/RemoteFetcherUtils.java | 48 +++++++++++++++++-- .../mapper/DMPToDepositMapper.java | 19 +++++++- .../ExternalDatasetListingModel.java | 8 ++++ .../data/publication/PublicationModel.java | 9 ++++ .../resources/externalUrls/ExternalUrls.xml | 6 +++ 7 files changed, 112 insertions(+), 6 deletions(-) diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/config/DataFieldsUrlConfiguration.java b/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/config/DataFieldsUrlConfiguration.java index e027714ed..d629a1503 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/config/DataFieldsUrlConfiguration.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/config/DataFieldsUrlConfiguration.java @@ -8,6 +8,8 @@ import javax.xml.bind.annotation.XmlElement; public class DataFieldsUrlConfiguration { private String id; private String name; + private String pid; + private String pidTypeField; private String uri; private String description; private String source; @@ -36,6 +38,23 @@ public class DataFieldsUrlConfiguration { this.name = name; } + public String getPid() { + return pid; + } + + @XmlElement(name = "pid") + public void setPid(String pid) { + this.pid = pid; + } + + public String getPidTypeField() { + return pidTypeField; + } + + @XmlElement(name = "pidTypeField") + public void setPidTypeField(String pidTypeField) { + this.pidTypeField = pidTypeField; + } public String getUri() { return uri; diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/fetching/RemoteFetcher.java b/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/fetching/RemoteFetcher.java index 911493f29..6b9a8b9b5 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/fetching/RemoteFetcher.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/fetching/RemoteFetcher.java @@ -467,7 +467,14 @@ public class RemoteFetcher { } private String transformKey(DataUrlConfiguration dataUrlConfiguration, String key) { - if (dataUrlConfiguration.getFieldsUrlConfiguration().getId() != null && key.equals(dataUrlConfiguration.getFieldsUrlConfiguration().getId().replace("'",""))) return "pid"; + if (dataUrlConfiguration.getFieldsUrlConfiguration().getId() != null && key.equals(dataUrlConfiguration.getFieldsUrlConfiguration().getId().replace("'",""))) { + if(dataUrlConfiguration.getFieldsUrlConfiguration().getPid() == null) + return "pid"; + else + return "originalId"; + } + if (dataUrlConfiguration.getFieldsUrlConfiguration().getPid() != null && key.equals("pid")) return "pid"; + if (dataUrlConfiguration.getFieldsUrlConfiguration().getPidTypeField() != null && key.equals("pidTypeField")) return "pidTypeField"; if (dataUrlConfiguration.getFieldsUrlConfiguration().getDescription() != null && key.equals(dataUrlConfiguration.getFieldsUrlConfiguration().getDescription().replace("'",""))) return "description"; if (dataUrlConfiguration.getFieldsUrlConfiguration().getUri() != null && key.equals(dataUrlConfiguration.getFieldsUrlConfiguration().getUri().replace("'",""))) return "uri"; if (dataUrlConfiguration.getFieldsUrlConfiguration().getName() != null && key.equals(dataUrlConfiguration.getFieldsUrlConfiguration().getName().replace("'",""))) return "name"; diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/fetching/RemoteFetcherUtils.java b/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/fetching/RemoteFetcherUtils.java index 56f256254..20c57356d 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/fetching/RemoteFetcherUtils.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/fetching/RemoteFetcherUtils.java @@ -1,11 +1,15 @@ package eu.eudat.logic.proxy.fetching; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; import com.jayway.jsonpath.Configuration; import com.jayway.jsonpath.DocumentContext; +import com.jayway.jsonpath.JsonPath; import com.jayway.jsonpath.spi.json.JacksonJsonProvider; import eu.eudat.logic.proxy.config.DataUrlConfiguration; import eu.eudat.logic.proxy.config.ExternalUrlCriteria; import eu.eudat.logic.proxy.fetching.entities.Results; +import io.swagger.models.auth.In; import net.minidev.json.JSONArray; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -17,6 +21,7 @@ import java.util.stream.Collectors; public class RemoteFetcherUtils { private final static Logger logger = LoggerFactory.getLogger(RemoteFetcherUtils.class); + private static final ObjectMapper mapper = new ObjectMapper(); public static Results getFromJson(DocumentContext jsonContext, DataUrlConfiguration jsonDataPath) { return new Results(parseData(jsonContext, jsonDataPath), @@ -60,9 +65,36 @@ public class RemoteFetcherUtils { try { String value = ((String) getterMethod.invoke(jsonDataPath.getFieldsUrlConfiguration())); if (value != null) { - value = value.replace("'", ""); - if (stringObjectMap.containsKey(value)) { - parsedData.get(parsedData.size() - 1).put(field.getName().equals("types") ? "tags" : value, normalizeValue(stringObjectMap.get(value), (field.getName().equals("types") || field.getName().equals("uri")))); + if (field.getName().equals("pid") || field.getName().equals("pidTypeField")) { + String pid = null; + Object pidObj = stringObjectMap.get(value.split("\\.")[0]); + if(pidObj != null){ + if(pidObj instanceof Map){ + pid = ((Map) pidObj).get(value.split("\\.")[1]); + } + else if(pidObj instanceof List){ + Object o = ((List>) pidObj).get(0).get(value.split("\\.")[1]); + if(o instanceof String){ + pid = (String)o; + } + else if(o instanceof Integer){ + pid = String.valueOf(o); + } + } + } + if(pid != null) { + if ((field.getName().equals("pid"))){ + parsedData.get(parsedData.size() - 1).put("pid", pid); + } + else{ + parsedData.get(parsedData.size() - 1).put("pidTypeField", pid); + } + } + } else { + value = value.replace("'", ""); + if (stringObjectMap.containsKey(value)) { + parsedData.get(parsedData.size() - 1).put(field.getName().equals("types") ? "tags" : value, normalizeValue(stringObjectMap.get(value), (field.getName().equals("types") || field.getName().equals("uri")))); + } } } } catch (IllegalAccessException | InvocationTargetException e) { @@ -84,7 +116,15 @@ public class RemoteFetcherUtils { } else { for (Object o : jarr) { if ((o instanceof Map) && ((Map) o).containsKey("content")) { - return ((Map) o).get("content"); + try { + return ((Map) o).get("content"); + } + catch (ClassCastException e){ + if(((Map) o).get("content") instanceof Integer) { + return String.valueOf(((Map) o).get("content")); + } + return null; + } } } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/security/repositorydeposit/mapper/DMPToDepositMapper.java b/dmp-backend/web/src/main/java/eu/eudat/logic/security/repositorydeposit/mapper/DMPToDepositMapper.java index e47e7a95e..b6f1cc533 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/security/repositorydeposit/mapper/DMPToDepositMapper.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/security/repositorydeposit/mapper/DMPToDepositMapper.java @@ -9,6 +9,7 @@ import eu.eudat.logic.utilities.builders.XmlBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.w3c.dom.Document; +import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; @@ -83,8 +84,24 @@ public class DMPToDepositMapper { } fieldDeposit.setSchematics(schematicsDeposit); String fieldId = schematicsNode.getParentNode().getAttributes().getNamedItem("id").getNodeValue(); - String value = (String) datasetAnswers.get(fieldId); + Object value = datasetAnswers.get(fieldId); fieldDeposit.setValue(value); + Element field = (Element) schematicsNode.getParentNode(); + Element viewStyle = (Element) field.getElementsByTagName("viewStyle").item(0); + String renderStyle = viewStyle.getAttribute("renderstyle"); + fieldDeposit.setRenderStyleType(renderStyle); + Element data = (Element) field.getElementsByTagName("data").item(0); + String multipleSelection = data.getAttribute("multiList"); + String multipleAutoComplete = data.getAttribute("multiAutoComplete"); + if(!multipleSelection.isEmpty()){ + fieldDeposit.setMultiple(Boolean.parseBoolean(multipleSelection)); + } + else if(!multipleAutoComplete.isEmpty()){ + fieldDeposit.setMultiple(Boolean.parseBoolean(multipleAutoComplete)); + } + else{ + fieldDeposit.setMultiple(false); + } deposit.add(fieldDeposit); } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/externaldataset/ExternalDatasetListingModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/externaldataset/ExternalDatasetListingModel.java index f874fa74e..693da5fdc 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/externaldataset/ExternalDatasetListingModel.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/externaldataset/ExternalDatasetListingModel.java @@ -18,6 +18,7 @@ public class ExternalDatasetListingModel implements DataModel ids; private String name; private String pid; + private String pidTypeField; private String abbreviation; private String uri; private Date created; @@ -100,6 +101,14 @@ public class PublicationModel implements DataModel$['results'][*]['result']['metadata']['oaf:entity']['oaf:result'] 'originalId' + pid.content + pid.classid 'title' 'count' @@ -1017,6 +1019,8 @@ but not $['results'][*]['result']['metadata']['oaf:entity']['oaf:organization'] 'originalId' + pid.content + pid.classid 'legalname' 'count' @@ -1098,6 +1102,8 @@ but not 'originalId' 'title' + pid.content + pid.classid 'count'