package eu.eudat.models.rda.mapper; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import eu.eudat.logic.utilities.json.JsonSearcher; import eu.eudat.models.rda.DatasetId; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; public class DatasetIdRDAMapper { /*public static DatasetId toRDA(UUID id) { DatasetId rda = new DatasetId(); rda.setIdentifier(id.toString()); rda.setType(DatasetId.Type.OTHER); return rda; }*/ public static DatasetId toRDA(List nodes) { DatasetId data = new DatasetId(); for (JsonNode node: nodes) { String rdaProperty = node.get("rdaProperty").asText(); String rdaValue = node.get("value").asText(); for (DatasetIdProperties datasetIdProperties : DatasetIdProperties.values()) { if (rdaProperty.contains(datasetIdProperties.getName())) { switch (datasetIdProperties) { case IDENTIFIER: data.setIdentifier(rdaValue); break; case TYPE: data.setType(DatasetId.Type.fromValue(rdaValue)); break; } } } } if (data.getIdentifier() != null && data.getType() != null) { return data; } return null; } public static Map toProperties(DatasetId rda, JsonNode node) { Map properties = new HashMap<>(); List idNodes = JsonSearcher.findNodes(node, "rdaProperty", "dataset.dataset_id"); for (JsonNode idNode: idNodes) { for (DatasetIdProperties datasetIdProperties : DatasetIdProperties.values()) { if (idNode.get("rdaProperty").asText().endsWith(datasetIdProperties.getName())) { switch (datasetIdProperties) { case IDENTIFIER: properties.put(idNode.get("id").asText(), rda.getIdentifier()); break; case TYPE: properties.put(idNode.get("id").asText(), rda.getType().value()); break; } } } } return properties; } private enum DatasetIdProperties { IDENTIFIER("identifier"), TYPE("type"); private final String name; DatasetIdProperties(String name) { this.name = name; } public String getName() { return name; } } }