diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementProfileManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementProfileManager.java index 6f1797776..031bab7e7 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementProfileManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementProfileManager.java @@ -164,18 +164,23 @@ public class DataManagementProfileManager { } private List> externalAutocompleteRequest(DmpProfileExternalAutoComplete data, String like) { - List> result = new LinkedList<>(); - RestTemplate restTemplate = new RestTemplate(); - HttpHeaders headers = new HttpHeaders(); - headers.setAccept(Collections.singletonList(MediaType.valueOf("application/vnd.api+json; charset=utf-8"))); - headers.setContentType(MediaType.APPLICATION_JSON); - HttpEntity entity = new HttpEntity<>("parameters", headers); - - ResponseEntity response = restTemplate.exchange(data.getUrl() + "?search=" + like, HttpMethod.GET, entity, Object.class); - DocumentContext jsonContext = JsonPath.parse(response.getBody()); - - List> jsonItems = jsonContext.read(data.getOptionsRoot() + "['" + data.getLabel() + "','" + data.getValue() + "']"); - jsonItems.forEach(item -> result.add(new Tuple<>(item.get(data.getValue()), item.get(data.getLabel())))); - return result; + return externalAutocompleteRequest(data.getUrl(), data.getOptionsRoot(), data.getLabel(), data.getValue(), like); } + + public static List> externalAutocompleteRequest(String url, String optionsRoot, String label, String value, String like) { + List> result = new LinkedList<>(); + RestTemplate restTemplate = new RestTemplate(); + HttpHeaders headers = new HttpHeaders(); + headers.setAccept(Collections.singletonList(MediaType.valueOf("application/vnd.api+json; charset=utf-8"))); + headers.setContentType(MediaType.APPLICATION_JSON); + HttpEntity entity = new HttpEntity<>("parameters", headers); + + ResponseEntity response = restTemplate.exchange(url + "?search=" + like, HttpMethod.GET, entity, Object.class); + DocumentContext jsonContext = JsonPath.parse(response.getBody()); + + List> jsonItems = jsonContext.read(optionsRoot + "['" + label + "','" + value + "']"); + jsonItems.forEach(item -> result.add(new Tuple<>(item.get(value), item.get(label)))); + return result; + + } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java index 9ea5fabb3..5d3c35c98 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java @@ -1050,10 +1050,13 @@ public class DatasetManager { Set tagNodes = new HashSet<>(); tagNodes.addAll(JsonSearcher.findNodes(propertiesJson, "renderStyle", "tags", true)); tagNodes.addAll(JsonSearcher.findNodes(propertiesJson, "rdaProperty", "dataset.keyword")); + if(wizardModel.getTags() == null){ + wizardModel.setTags(new ArrayList<>()); + } if (!tagNodes.isEmpty()) { tagNodes.forEach(node -> { JsonNode value = node.get("value"); - if (!value.toString().equals("\"\"")) { + if (!value.toString().equals("\"\"") && !value.toString().equals("null")) { String stringValue = value.toString().replaceAll("=", ":"); JSONArray values = new JSONArray(stringValue); values.iterator().forEachRemaining(element -> { diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/datasetwizard/DatasetWizardModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/datasetwizard/DatasetWizardModel.java index 7a259b315..79bfe4723 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/datasetwizard/DatasetWizardModel.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/datasetwizard/DatasetWizardModel.java @@ -5,6 +5,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import eu.eudat.data.entities.*; import eu.eudat.elastic.entities.Tag; +import eu.eudat.logic.managers.DataManagementProfileManager; import eu.eudat.logic.managers.DatasetManager; import eu.eudat.logic.proxy.config.entities.PrefillingFixedMapping; import eu.eudat.logic.proxy.config.entities.PrefillingGet; @@ -18,15 +19,11 @@ import eu.eudat.models.data.dataset.Service; import eu.eudat.models.data.datasetprofile.DatasetProfileOverviewModel; import eu.eudat.models.data.dmp.DataManagementPlan; import eu.eudat.models.data.externaldataset.ExternalDatasetListingModel; +import eu.eudat.models.data.helpermodels.Tuple; import eu.eudat.models.data.user.composite.PagedDatasetProfile; import net.minidev.json.JSONValue; import org.json.JSONArray; import org.json.JSONObject; -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpMethod; -import org.springframework.http.MediaType; -import org.springframework.web.client.RestTemplate; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; @@ -34,7 +31,6 @@ import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; -import java.util.stream.Stream; public class DatasetWizardModel implements DataModel { @@ -361,6 +357,11 @@ public class DatasetWizardModel implements DataModel parsedTags = rawTags.stream().map(rawTag -> new Tag((String) rawTag, (String) rawTag)).collect(Collectors.toList()); value = mapper.writeValueAsString(parsedTags); + List nodes = JsonSearcher.findNodes(parentNode, "rdaProperty", "dataset.keyword"); + for (JsonNode node: nodes) { + String id = node.get(0) != null ? node.get(0).get("id").asText() : node.get("id").asText(); + properties.put(id, value); + } } } setterMethod.invoke(datasetWizardModel, mapper.readValue(value, params[0])); @@ -375,9 +376,10 @@ public class DatasetWizardModel implements DataModel formats = new ArrayList<>(); String extension; @@ -389,52 +391,45 @@ public class DatasetWizardModel implements DataModel standardFormats = new ArrayList<>(); - StringBuilder freeTextFormat = new StringBuilder(); - for(String format: formats) { - RestTemplate restTemplate = new RestTemplate(); - String parsedUrl = "https://eestore.paas2.uninett.no/api/fileformat/?search=" + format; - HttpHeaders headers = new HttpHeaders(); - headers.setAccept(Collections.singletonList(new MediaType("application", "vnd.api+json"))); - HttpEntity entity = new HttpEntity("", headers); - Map data = restTemplate.exchange(parsedUrl, HttpMethod.GET, entity, LinkedHashMap.class).getBody(); - jsonArr = new JSONArray(new ObjectMapper().writeValueAsString(data.get("data"))); - if(jsonArr.length() > 0) { - for (int i = 0; i < jsonArr.length(); i++) { - JSONObject jsonObj = jsonArr.getJSONObject(i); - jsonObj = jsonObj.getJSONObject("attributes"); - JSONArray extensions = jsonObj.getJSONArray("extensions"); - Object formatName = jsonObj.get("name"); - boolean found = false; - for (int j = 0; j < extensions.length(); j++) { - if (extensions.getString(j).equals(format)) { + + String renderStyle = node.get(0) != null ? node.get(0).get("viewStyle").get("renderStyle").asText() : node.get("viewStyle").get("renderStyle").asText(); + if(renderStyle.equals("combobox")){ + String autocomplete = node.get(0) != null ? node.get(0).get("data").get("type").asText() : node.get("data").get("type").asText(); + if(autocomplete.equals("autocomplete")) { + JsonNode urlNode = node.get(0) != null ? node.get(0).get("data").get("autoCompleteSingleDataList") : node.get("data").get("autoCompleteSingleDataList"); + String url = urlNode.get(0).get("url").asText(); + String optionsRoot = urlNode.get(0).get("optionsRoot").asText(); + String label = urlNode.get(0).get("autoCompleteOptions").get("label").asText(); + String val = urlNode.get(0).get("autoCompleteOptions").get("value").asText(); + for (String format : formats) { + List> result = DataManagementProfileManager.externalAutocompleteRequest(url, optionsRoot, label, val, format); + result = result.stream().distinct().collect(Collectors.toList()); + if(!result.isEmpty()){ + for (Tuple f : result) { JSONObject cur = new JSONObject(); - cur.put("label", formatName.toString()); + cur.put("label", f.getLabel()); standardFormats.add(cur.toString()); - found = true; - break; + freeTextFormat.append(f.getLabel()).append(", "); } } - if (found) { - break; + else{ + freeTextFormat.append(format).append(", "); } } + properties.put(id, standardFormats); } - else{ - freeTextFormat.append(format).append(", "); - } - } - String renderStyle = node.get(0) != null ? node.get(0).get("viewStyle").get("renderStyle").asText() : node.get("viewStyle").get("renderStyle").asText(); - if(renderStyle.equals("freetext")){ - if (freeTextFormat.length() > 0) { - freeTextFormat.setLength(freeTextFormat.length() - 2); + else if(renderStyle.equals("freetext")){ + if (freeTextFormat.length() == 0) { + for (String format : formats) { + freeTextFormat.append(format).append(", "); + } } + freeTextFormat.setLength(freeTextFormat.length() - 2); properties.put(id, freeTextFormat.toString()); } - else{ - properties.put(id, standardFormats); - } } else if(prefillingMapping.getMaDmpTarget().equals("dataset.distribution.data_access")){ value = value.replace("\"", ""); diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DistributionRDAMapper.java b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DistributionRDAMapper.java index 00eae64b7..c9bd007dc 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DistributionRDAMapper.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DistributionRDAMapper.java @@ -89,12 +89,12 @@ public class DistributionRDAMapper { int i = 1; while(iter.hasNext()) { JsonNode current = iter.next(); - String format = JavaToJson.objectStringToJson(current.asText()); + String format = JavaToJson.objectStringToJson(current.toString()); try { Map result = new ObjectMapper().readValue(format, HashMap.class); format = result.get("label"); formats.add(format); - rda.setAdditionalProperty("format" + i++, new ObjectMapper().readTree(current.asText())); + rda.setAdditionalProperty("format" + i++, new ObjectMapper().readTree(current.toString())); } catch(JsonProcessingException e){ logger.warn(e.getMessage()); @@ -103,7 +103,12 @@ public class DistributionRDAMapper { rda.setFormat(formats); } else{ - rda.setFormat(new ArrayList<>(Arrays.asList(rdaValue.replace(" ", "").split(",")))); + if(rda.getFormat() == null || rda.getFormat().isEmpty()){ + rda.setFormat(new ArrayList<>(Arrays.asList(rdaValue.replace(" ", "").split(",")))); + } + else{ + rda.getFormat().addAll(Arrays.asList(rdaValue.replace(" ", "").split(","))); + } } rda.setAdditionalProperty(ImportPropertyName.FORMAT.getName(), node.get("id").asText()); break; @@ -209,19 +214,27 @@ public class DistributionRDAMapper { break; case FORMAT: if (rda.getFormat() != null && !rda.getFormat().isEmpty()) { - Map additionalProperties = rda.getAdditionalProperties(); - List standardFormats = new ArrayList<>(); - ObjectMapper mapper = new ObjectMapper(); - rda.getAdditionalProperties().forEach((key, value) -> { - try { - if (key.matches("format\\d+")) { - standardFormats.add(additionalProperties.get(key)); - properties.put(distributionNode.get("id").asText(), mapper.writeValueAsString(standardFormats)); - } - } catch (JsonProcessingException e) { - logger.error(e.getMessage(), e); + String style = distributionNode.get("viewStyle").get("renderStyle").asText(); + if(style.equals("combobox")) { + if (distributionNode.get("data").get("type").asText().equals("autocomplete")) { + Map additionalProperties = rda.getAdditionalProperties(); + List standardFormats = new ArrayList<>(); + ObjectMapper mapper = new ObjectMapper(); + rda.getAdditionalProperties().forEach((key, value) -> { + try { + if (key.matches("format\\d+")) { + standardFormats.add(additionalProperties.get(key)); + properties.put(distributionNode.get("id").asText(), mapper.writeValueAsString(standardFormats)); + } + } catch (JsonProcessingException e) { + logger.error(e.getMessage(), e); + } + }); } - }); + } + else if(style.equals("freetext")){ + properties.put(distributionNode.get("id").asText(), String.join(", ", rda.getFormat())); + } } break; case LICENSE: