From 7b9ae7c91d979c0a7043a83692ea09d7f6477383 Mon Sep 17 00:00:00 2001 From: George Kalampokis Date: Thu, 1 Oct 2020 16:08:32 +0300 Subject: [PATCH] Add support for Zenodo license autocomplete source --- .../logic/managers/DatasetProfileManager.java | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 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 34505d0fa..362acb233 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 @@ -26,6 +26,10 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; import org.springframework.http.*; +import org.springframework.http.client.ClientHttpRequestFactory; +import org.springframework.http.client.SimpleClientHttpRequestFactory; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.stereotype.Component; import org.springframework.web.client.RestTemplate; import org.springframework.web.multipart.MultipartFile; @@ -109,7 +113,9 @@ public class DatasetProfileManager { public List getAutocomplete(AutoCompleteData data, String like) { List result = new LinkedList<>(); - RestTemplate restTemplate = new RestTemplate(); + SimpleClientHttpRequestFactory simpleFactory = new SimpleClientHttpRequestFactory(); + + RestTemplate restTemplate = new RestTemplate(simpleFactory); HttpHeaders headers = new HttpHeaders(); DocumentContext jsonContext = null; HttpEntity entity; @@ -123,7 +129,11 @@ public class DatasetProfileManager { String url = singleData.getUrl(); String mediaType = ""; if (url.contains("openaire") || url.contains("zenodo")) { - mediaType = "application/json; charset=utf-8"; + mediaType = "application/json; charset=utf-8"; + if (url.contains("zenodo")) { + url = url.replace("?", "/?"); + } + url = url.replace("{like}", like.equals("") ? "*" : like); url = url.replace("%20", " "); url = url.replace("%22", "\""); @@ -133,14 +143,17 @@ public class DatasetProfileManager { url += "?search=" + like; } - headers.setAccept(Collections.singletonList(MediaType.valueOf(mediaType))); + if (!url.contains("zenodo")) { + headers.setAccept(Collections.singletonList(MediaType.valueOf(mediaType))); + } headers.setContentType(MediaType.APPLICATION_JSON); entity = new HttpEntity<>("parameters", headers); + 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")))); + jsonItems.forEach(item -> result.add(new ExternalAutocompleteFieldModel(item.get(singleData.getAutoCompleteOptions().getValue()), item.get(singleData.getAutoCompleteOptions().getLabel()), item.get(singleData.getAutoCompleteOptions().getSource()) != null ? item.get(singleData.getAutoCompleteOptions().getSource()) : singleData.getAutoCompleteOptions().getSource(), item.get("uri")))); break; case CACHED: headers.setAccept(Collections.singletonList(MediaType.valueOf("text/plain; charset=utf-8")));