From 9cd7e243136a79c4f9db4769870282e2582ac75c Mon Sep 17 00:00:00 2001 From: George Kalampokis Date: Fri, 27 Mar 2020 14:34:11 +0200 Subject: [PATCH] Updated orcid external search (expanded Search) --- .../logic/proxy/fetching/RemoteFetcher.java | 52 +++++++++++++------ .../data/external/orcid/ExpandedResult.java | 44 ++++++++++++++++ .../data/external/orcid/ExpandedSearch.java | 18 +++++++ .../resources/externalUrls/ExternalUrls.xml | 21 +++++++- 4 files changed, 118 insertions(+), 17 deletions(-) create mode 100644 dmp-backend/web/src/main/java/eu/eudat/models/data/external/orcid/ExpandedResult.java create mode 100644 dmp-backend/web/src/main/java/eu/eudat/models/data/external/orcid/ExpandedSearch.java 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 3e1488c6d..6bf756d0b 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 @@ -321,23 +321,43 @@ public class RemoteFetcher { } ObjectMapper objectMapper = new ObjectMapper(); List> values = new ArrayList<>(); - Map map = objectMapper.convertValue( reader != null ? reader.invoke(data) : data, Map.class); - if (jsonDataPath.getMergedFields() != null && !jsonDataPath.getMergedFields().isEmpty() && jsonDataPath.getMergedFieldName() != null && !jsonDataPath.getMergedFieldName().isEmpty()) { - Map finalMap = new HashMap<>(); - for (Map.Entry entry : map.entrySet()) { - if (jsonDataPath.getMergedFields().contains(entry.getKey())) { - if (!finalMap.containsKey(jsonDataPath.getMergedFieldName())) { - finalMap.put(jsonDataPath.getMergedFieldName(), entry.getValue()); - } else { - finalMap.put(jsonDataPath.getMergedFieldName(), finalMap.get(jsonDataPath.getMergedFieldName())+ " " + entry.getValue()); - } - } else { - finalMap.put(entry.getKey(), entry.getValue()); - } + int max = 1; + if (reader != null) { + Object invokedField = reader.invoke(data); + if (invokedField instanceof Collection) { + max = ((Collection) invokedField).size(); + } + } + for (int i = 0; i< max; i++) { + Object value; + if (reader != null) { + Object invokedField = reader.invoke(data); + if (invokedField instanceof Collection) { + value = ((Collection) invokedField).toArray()[i]; + } else { + value = invokedField; + } + } else { + value = data; + } + Map map = objectMapper.convertValue(value, Map.class); + if (jsonDataPath.getMergedFields() != null && !jsonDataPath.getMergedFields().isEmpty() && jsonDataPath.getMergedFieldName() != null && !jsonDataPath.getMergedFieldName().isEmpty()) { + Map finalMap = new HashMap<>(); + for (Map.Entry entry : map.entrySet()) { + if (jsonDataPath.getMergedFields().contains(entry.getKey())) { + if (!finalMap.containsKey(jsonDataPath.getMergedFieldName())) { + finalMap.put(jsonDataPath.getMergedFieldName(), entry.getValue()); + } else { + finalMap.put(jsonDataPath.getMergedFieldName(), finalMap.get(jsonDataPath.getMergedFieldName()) + " " + entry.getValue()); + } + } else { + finalMap.put(entry.getKey(), entry.getValue()); + } + } + values.add(finalMap); + } else { + values.add(map); } - values.add(finalMap); - } else { - values.add(map); } results = new Results(values, new HashMap<>(1, 1)); } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/external/orcid/ExpandedResult.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/external/orcid/ExpandedResult.java new file mode 100644 index 000000000..c247b5214 --- /dev/null +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/external/orcid/ExpandedResult.java @@ -0,0 +1,44 @@ +package eu.eudat.models.data.external.orcid; + +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement(name = "expanded-result", namespace = "http://www.orcid.org/ns/expanded-search") +public class ExpandedResult { + + private String pid; + private String givenNames; + private String familyName; + + public ExpandedResult(String givenNames, String familyName) { + this.givenNames = givenNames; + this.familyName = familyName; + } + + public ExpandedResult() { + } + + @XmlElement(name = "orcid-id", namespace = "http://www.orcid.org/ns/expanded-search") + public String getPid() { + return pid; + } + public void setPid(String pid) { + this.pid = pid; + } + + @XmlElement(name = "given-names", namespace = "http://www.orcid.org/ns/expanded-search") + public String getGivenNames() { + return givenNames; + } + public void setGivenNames(String givenNames) { + this.givenNames = givenNames; + } + @XmlElement(name = "family-names", namespace = "http://www.orcid.org/ns/expanded-search") + public String getFamilyName() { + return familyName; + } + public void setFamilyName(String familyName) { + this.familyName = familyName; + } +} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/external/orcid/ExpandedSearch.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/external/orcid/ExpandedSearch.java new file mode 100644 index 000000000..d3a2cf6c6 --- /dev/null +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/external/orcid/ExpandedSearch.java @@ -0,0 +1,18 @@ +package eu.eudat.models.data.external.orcid; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import java.util.List; + +@XmlRootElement(name = "expanded-search", namespace = "http://www.orcid.org/ns/expanded-search") +public class ExpandedSearch { + List expandedResults; + + @XmlElement(name = "expanded-result", namespace = "http://www.orcid.org/ns/expanded-search") + public List getExpandedResults() { + return expandedResults; + } + public void setExpandedResults(List expandedResults) { + this.expandedResults = expandedResults; + } +} diff --git a/dmp-backend/web/src/main/resources/externalUrls/ExternalUrls.xml b/dmp-backend/web/src/main/resources/externalUrls/ExternalUrls.xml index f7af0f9ae..de3d38152 100644 --- a/dmp-backend/web/src/main/resources/externalUrls/ExternalUrls.xml +++ b/dmp-backend/web/src/main/resources/externalUrls/ExternalUrls.xml @@ -642,7 +642,7 @@ $['meta']['pagination']['page','pages','count'] - + + + orcid + + 2 + External + https://pub.sandbox.orcid.org/v3.0/expanded-search/?q={like}&start={page}&rows={pageSize} + 0 + application/vnd.orcid+xml; qs=5;charset=UTF-8 + + eu.eudat.models.data.external.orcid.ExpandedSearch + expandedResults + + givenNames + familyName + + name + + $['num-found']