package eu.eudat.models.rda.mapper; import com.fasterxml.jackson.databind.JsonNode; import eu.eudat.logic.utilities.helpers.MyStringUtils; import eu.eudat.models.rda.Host; import eu.eudat.models.rda.PidSystem; import java.net.URI; import java.util.Collections; import java.util.List; public class HostRDAMapper { public static Host toRDA(List nodes, String numbering) { Host rda = new Host(); for (JsonNode node: nodes) { String rdaProperty = node.get("rdaProperties").asText(); if (rdaProperty.contains("host")) { int firstDiff = MyStringUtils.getFirstDifference(numbering, node.get("numbering").asText()); if (firstDiff == -1 || firstDiff > 2) { String rdaValue = node.get("value").asText(); for (PropertyName propertyName: PropertyName.values()) { if (rdaProperty.contains(propertyName.getName())) { switch (propertyName) { case AVAILABILITY: rda.setAvailability(rdaValue); break; case BACKUP_FREQUENCY: rda.setBackupFrequency(rdaValue); break; case BACKUP_TYPE: rda.setBackupType(rdaValue); break; case CERTIFIED_WITH: rda.setCertifiedWith(Host.CertifiedWith.fromValue(rdaValue)); break; case DESCRIPTION: rda.setDescription(rdaValue); break; case GEO_LOCATION: rda.setGeoLocation(Host.GeoLocation.fromValue(rdaValue)); break; case PID_SYSTEM: rda.setPidSystem(Collections.singletonList(PidSystem.fromValue(rdaValue))); break; case STORAGE_TYPE: rda.setStorageType(rdaValue); break; case SUPPORT_VERSIONING: rda.setSupportVersioning(Host.SupportVersioning.fromValue(rdaValue)); break; case TITLE: rda.setTitle(rdaValue); break; case URL: rda.setUrl(URI.create(rdaValue)); break; } } } } } } return rda; } private enum PropertyName { AVAILABILITY("availability"), BACKUP_FREQUENCY("backup_frequency"), BACKUP_TYPE("backup_type"), CERTIFIED_WITH("certified_with"), DESCRIPTION("description"), GEO_LOCATION("geo_location"), PID_SYSTEM("pid_system"), STORAGE_TYPE("storage_type"), SUPPORT_VERSIONING("support_versioning"), TITLE("title"), URL("url"); private final String name; PropertyName(String name) { this.name = name; } public String getName() { return name; } } }