From effc3c8431bed63f9311838418137807136dd226 Mon Sep 17 00:00:00 2001 From: George Kalampokis Date: Fri, 29 May 2020 17:10:18 +0300 Subject: [PATCH] Improve support for External sources --- .../logic/managers/DatasetProfileManager.java | 18 ++++++++++++++++-- .../logic/proxy/fetching/RemoteFetcher.java | 14 +++++++++++++- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetProfileManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetProfileManager.java index e14f7a15b..1f2688826 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetProfileManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetProfileManager.java @@ -118,11 +118,25 @@ public class DatasetProfileManager { for (AutoCompleteData.AutoCompleteSingleData singleData: data.getAutoCompleteSingleDataList()) { switch (AutoCompleteData.AutocompleteType.fromValue(singleData.getAutocompleteType())) { case UNCACHED: - headers.setAccept(Collections.singletonList(MediaType.valueOf("application/vnd.api+json; charset=utf-8"))); + + String url = singleData.getUrl(); + String mediaType = ""; + if (url.contains("openaire")) { + mediaType = "application/json; charset=utf-8"; + url = url.replace("{like}", like.equals("") ? "*" : like); + url = url.replace("%20", " "); + url = url.replace("%22", "\""); + url = url.replace("&", "&"); + } else { + mediaType = "application/vnd.api+json; charset=utf-8"; + url += "?search=" + like; + } + + headers.setAccept(Collections.singletonList(MediaType.valueOf(mediaType))); headers.setContentType(MediaType.APPLICATION_JSON); entity = new HttpEntity<>("parameters", headers); - response = restTemplate.exchange(singleData.getUrl() + "?search=" + like, HttpMethod.GET, entity, Object.class); + response = restTemplate.exchange(url, HttpMethod.GET, entity, Object.class); jsonContext = JsonPath.parse(response.getBody()); jsonItems = jsonContext.read(singleData.getOptionsRoot() + "['" + singleData.getAutoCompleteOptions().getLabel() + "','" + singleData.getAutoCompleteOptions().getValue() + "','" + singleData.getAutoCompleteOptions().getSource() + "','" + "uri" + "']"); jsonItems.forEach(item -> result.add(new ExternalAutocompleteFieldModel(item.get(singleData.getAutoCompleteOptions().getValue()), item.get(singleData.getAutoCompleteOptions().getLabel()), item.get(singleData.getAutoCompleteOptions().getSource()), item.get("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 05f966bac..cbaf4dea1 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 @@ -268,6 +268,17 @@ public class RemoteFetcher { + "[" + jsonDataPath.getFieldsUrlConfiguration().getName() + "," + jsonDataPath.getFieldsUrlConfiguration().getId() + "]"), new HashMap<>(1, 1)); + List> fixedResults = results.getResults().stream().map(item -> { + String id = jsonDataPath.getFieldsUrlConfiguration().getId().replace("'", ""); + if (! (item.get(id) instanceof String)) { + Object obj = item.get(id); + JSONArray jarr = (JSONArray) obj; + item.put(id, jarr.get(0).toString()); + } + return item; + }).collect(Collectors.toList()); + + results = new Results(fixedResults, new HashMap<>(1, 1)); } else if (jsonDataPath.getFieldsUrlConfiguration().getPath() != null) { results = new Results(jsonContext.read(jsonDataPath.getPath() + "[" + jsonDataPath.getFieldsUrlConfiguration().getPath() @@ -312,7 +323,8 @@ public class RemoteFetcher { } results.results = results.results.stream().map(e -> e.entrySet().stream().collect(Collectors.toMap(x -> this.transformKey(jsonDataPath,x.getKey()), Map.Entry::getValue))) .collect(Collectors.toList()); - } else if (con.getHeaderField("Content-Type").contains("xml")) { + } + else if (con.getHeaderField("Content-Type").contains("xml")) { Class aClass = Class.forName(jsonDataPath.getParseClass()); JAXBContext jaxbContext = JAXBContext.newInstance(aClass); Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();