From dbf94eb4b44bfa1b16f8c1759fc75b3a21664319 Mon Sep 17 00:00:00 2001 From: George Kalampokis Date: Fri, 13 Mar 2020 12:04:20 +0200 Subject: [PATCH] Add support for Research Organization Registry API --- .../config/DataFieldsUrlConfiguration.java | 9 +++++++ .../logic/proxy/fetching/RemoteFetcher.java | 25 ++++++++++++++++++- .../resources/externalUrls/ExternalUrls.xml | 19 ++++++++++++++ 3 files changed, 52 insertions(+), 1 deletion(-) 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 0cd8c559b..7c746fb85 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 @@ -14,6 +14,7 @@ public class DataFieldsUrlConfiguration { private String count; private String path; private String host; + private String types; public String getId() { return id; @@ -85,4 +86,12 @@ public class DataFieldsUrlConfiguration { public void setHost(String host) { this.host = host; } + + @XmlElement(name = "types") + public String getTypes() { + return types; + } + public void setTypes(String types) { + this.types = types; + } } 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 0c96e45b2..3e1488c6d 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 @@ -11,6 +11,7 @@ import eu.eudat.logic.proxy.config.UrlConfiguration; import eu.eudat.logic.proxy.config.configloaders.ConfigLoader; import eu.eudat.logic.proxy.config.exceptions.HugeResultSet; import eu.eudat.logic.proxy.config.exceptions.NoURLFound; +import net.minidev.json.JSONArray; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -159,7 +160,7 @@ public class RemoteFetcher { private String replaceCriteriaOnUrl(String path, ExternalUrlCriteria externalUrlCriteria, String firstPage) { String completedPath = path; if (externalUrlCriteria.getLike() != null) { - if ((path.contains("openaire") || path.contains("orcid")) && externalUrlCriteria.getLike().equals("")) { + if ((path.contains("openaire") || path.contains("orcid") || path.contains("ror")) && externalUrlCriteria.getLike().equals("")) { completedPath = completedPath.replaceAll("\\{like}", "*"); } else { completedPath = completedPath.replaceAll("\\{like}", externalUrlCriteria.getLike()); @@ -279,6 +280,28 @@ public class RemoteFetcher { return getResultsFromUrl(replacedPath, jsonDataPath.getUrlConfiguration().getData(), jsonDataPath.getUrlConfiguration().getData().getPath(), jsonDataPath.getUrlConfiguration().getContentType()); }).filter(Objects::nonNull).map(results1 -> results1.results.get(0)).collect(Collectors.toList()); results = new Results(multiResults, new HashMap<>(1, 1)); + } else if (jsonDataPath.getFieldsUrlConfiguration().getTypes() != null) { + List> tempRes = jsonContext.read(jsonDataPath.getPath() + + "[" + jsonDataPath.getFieldsUrlConfiguration().getId() + "," + jsonDataPath.getFieldsUrlConfiguration().getName() + + "," + jsonDataPath.getFieldsUrlConfiguration().getTypes() + "," + jsonDataPath.getFieldsUrlConfiguration().getUri() + "]"); + List> finalRes = new ArrayList<>(); + tempRes.forEach(map -> { + Map resMap = new HashMap<>(); + map.forEach((key, value) -> { + if (key.equals(jsonDataPath.getFieldsUrlConfiguration().getTypes().substring(1, jsonDataPath.getFieldsUrlConfiguration().getTypes().length() - 1))) { + resMap.put("tags", ((JSONArray) value).toJSONString()); + } else if (key.equals(jsonDataPath.getFieldsUrlConfiguration().getUri().substring(1, jsonDataPath.getFieldsUrlConfiguration().getTypes().length() - 1))) { + resMap.put(key, ((JSONArray) value).toJSONString()); + } else { + resMap.put(key, (String) value); + } + }); + + finalRes.add(resMap); + }); + + results = new Results(finalRes, + new HashMap<>(1, 1)); } else { results = new Results(jsonContext.read(jsonDataPath.getPath() + "[" + jsonDataPath.getFieldsUrlConfiguration().getName() + "," + jsonDataPath.getFieldsUrlConfiguration().getDescription() diff --git a/dmp-backend/web/src/main/resources/externalUrls/ExternalUrls.xml b/dmp-backend/web/src/main/resources/externalUrls/ExternalUrls.xml index da79907a5..64e06586e 100644 --- a/dmp-backend/web/src/main/resources/externalUrls/ExternalUrls.xml +++ b/dmp-backend/web/src/main/resources/externalUrls/ExternalUrls.xml @@ -743,6 +743,25 @@ $['meta']['pagination']['page','pages','count'] + + ROR + + 1 + External + https://api.ror.org/organizations?query={like}&page={page} + 1 + application/vnd.api+json; charset=utf-8 + + $['items'][*] + + 'id' + 'name' + 'links' + 'types' + + + $['number_of_results'] +