argos/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/SecurityAndPrivacyRDAMapper...

154 lines
4.3 KiB
Java
Raw Normal View History

2020-03-20 17:20:22 +01:00
package eu.eudat.models.rda.mapper;
import com.fasterxml.jackson.databind.JsonNode;
import eu.eudat.logic.utilities.helpers.MyStringUtils;
2020-03-20 17:20:22 +01:00
import eu.eudat.models.rda.SecurityAndPrivacy;
2020-03-26 17:39:25 +01:00
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
2020-03-20 17:20:22 +01:00
import java.util.*;
import java.util.stream.Collectors;
2020-03-20 17:20:22 +01:00
public class SecurityAndPrivacyRDAMapper {
2020-03-26 17:39:25 +01:00
private static final Logger logger = LoggerFactory.getLogger(SecurityAndPrivacyRDAMapper.class);
2020-03-20 17:20:22 +01:00
public static List<SecurityAndPrivacy> toRDAList(List<JsonNode> nodes) {
Map<String, SecurityAndPrivacy> rdaMap = new HashMap<>();
for (JsonNode node: nodes) {
2023-02-21 10:57:34 +01:00
String rdaProperty = "";
JsonNode schematics = node.get("schematics");
if(schematics.isArray()){
for(JsonNode schematic: schematics){
if(schematic.asText().startsWith("rda.dataset.security_and_privacy")){
rdaProperty = schematic.asText();
break;
}
}
}
else{
continue;
}
String rdaValue = node.get("value").asText();
if(rdaValue == null || rdaValue.isEmpty()){
continue;
}
SecurityAndPrivacy rda = getRelative(rdaMap, node.get("numbering").asText());
if (!rdaMap.containsValue(rda)) {
rdaMap.put(node.get("numbering").asText(), rda);
}
2020-03-26 17:39:25 +01:00
for (ExportPropertyName exportPropertyName : ExportPropertyName.values()) {
if (rdaProperty.contains(exportPropertyName.getName())) {
switch (exportPropertyName) {
case TITLE:
rda.setTitle(rdaValue);
2020-03-26 17:39:25 +01:00
rda.getAdditionalProperties().put(ImportPropertyName.TITLE.getName(), node.get("id").asText());
break;
case DESCRIPTION:
rda.setDescription(rdaValue);
2020-03-26 17:39:25 +01:00
rda.getAdditionalProperties().put(ImportPropertyName.DESCRIPTION.getName(), node.get("id").asText());
break;
}
}
}
}
return rdaMap.values().stream()
.filter(sap -> sap.getTitle() != null)
.collect(Collectors.toList());
}
2020-03-26 17:39:25 +01:00
public static Map<String, String> toProperties(List<SecurityAndPrivacy> rdas) {
Map<String, String> properties = new HashMap<>();
rdas.forEach(rda -> rda.getAdditionalProperties().entrySet().forEach(entry -> {
try {
ImportPropertyName importPropertyName = ImportPropertyName.fromString(entry.getKey());
switch(importPropertyName) {
case TITLE:
properties.put(entry.getValue().toString(), rda.getTitle());
break;
case DESCRIPTION:
properties.put(entry.getValue().toString(), rda.getDescription());
break;
}
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
}));
return properties;
}
public static SecurityAndPrivacy toRDA(JsonNode node) {
2020-03-20 17:20:22 +01:00
SecurityAndPrivacy rda = new SecurityAndPrivacy();
2023-02-21 10:57:34 +01:00
String rdaProperty = "";
JsonNode schematics = node.get("schematics");
if(schematics.isArray()){
for(JsonNode schematic: schematics){
if(schematic.asText().startsWith("rda.dataset.security_and_privacy")){
rdaProperty = schematic.asText();
break;
}
}
}
String value = node.get("value").asText();
2020-03-20 17:20:22 +01:00
if (rdaProperty.contains("description")) {
rda.setDescription(value);
2020-11-13 17:26:09 +01:00
}
if (rdaProperty.contains("title")) {
2020-03-20 17:20:22 +01:00
rda.setTitle(value);
}
2020-11-13 17:26:09 +01:00
if (rda.getTitle() == null) {
throw new IllegalArgumentException("Security And Privacy Title is missing");
}
2020-03-20 17:20:22 +01:00
return rda;
}
private static SecurityAndPrivacy getRelative(Map<String, SecurityAndPrivacy> rdaMap, String numbering) {
return rdaMap.entrySet().stream().filter(entry -> MyStringUtils.getFirstDifference(entry.getKey(), numbering) > 0)
.max(Comparator.comparingInt(entry -> MyStringUtils.getFirstDifference(entry.getKey(), numbering))).map(Map.Entry::getValue).orElse(new SecurityAndPrivacy());
}
2020-03-26 17:39:25 +01:00
private enum ExportPropertyName {
TITLE("title"),
DESCRIPTION("description");
private String name;
2020-03-26 17:39:25 +01:00
ExportPropertyName(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
private enum ImportPropertyName {
TITLE("titleId"),
DESCRIPTION("descriptionId");
private String name;
ImportPropertyName(String name) {
this.name = name;
}
public String getName() {
return name;
}
2020-03-26 17:39:25 +01:00
public static ImportPropertyName fromString(String name) throws Exception {
for (ImportPropertyName importPropertyName: ImportPropertyName.values()) {
if (importPropertyName.getName().equals(name)) {
return importPropertyName;
}
}
throw new Exception("Property not available");
}
}
2020-03-20 17:20:22 +01:00
}