file-transformer-rda-json/core/src/main/java/eu/eudat/file/transformer/rda/mapper/LicenseRDAMapper.java

136 lines
3.8 KiB
Java

package eu.eudat.file.transformer.rda.mapper;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ArrayNode;
import eu.eudat.file.transformer.models.descriptiontemplate.definition.FieldFileTransformerModel;
import eu.eudat.file.transformer.rda.License;
import eu.eudat.file.transformer.utils.json.JsonSearcher;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
public class LicenseRDAMapper {
private static final Logger logger = LoggerFactory.getLogger(LicenseRDAMapper.class);
public static License toRDA(List<FieldFileTransformerModel> nodes) {
License rda = new License();
for (FieldFileTransformerModel node: nodes) {
String rdaProperty = node.getSchematics().stream().filter(schematic -> schematic.startsWith("rda.dataset.distribution.license")).findFirst().orElse("");
String value = node.getData().getValue();
if(value == null || value.isEmpty()){
continue;
}
for (LicenceProperties licenceProperties: LicenceProperties.values()) {
if (rdaProperty.contains(licenceProperties.getName())) {
switch (licenceProperties) {
case LICENSE_REF:
try {
rda.setLicenseRef(URI.create(value));
} catch (IllegalArgumentException e) {
logger.warn(e.getLocalizedMessage() + ". Skipping url parsing");
}
break;
case START_DATE:
rda.setStartDate(value);
break;
}
}
}
/*if (rdaProperty.contains("license_ref")) {
rda.setLicenseRef(URI.create(value));
rda.setAdditionalProperty("license_refId", node.get("id").asText());
} else if (rdaProperty.contains("start_date")) {
rda.setStartDate(value);
rda.setAdditionalProperty("start_dateId", node.get("id").asText());
}*/
}
if(rda.getLicenseRef() == null || rda.getStartDate() == null){
return null;
}
return rda;
}
//TODO
/*public static List<Field> toProperties(List<License> rdas) {
List<Field> properties = new ArrayList<>();
rdas.forEach(rda -> {
rda.getAdditionalProperties().entrySet().forEach(entry -> {
Field field = new Field();
field.setKey(entry.getValue().toString());
switch (entry.getKey()) {
case "license_refId":
field.setValue(rda.getLicenseRef().toString());
break;
case "start_dateId":
field.setValue(rda.getStartDate());
break;
}
properties.add(field);
});
});
return properties;
}
public static List<Field> toProperties(License rda, JsonNode root) {
List<Field> properties = new ArrayList<>();
List<JsonNode> licenseNodes = JsonSearcher.findNodes(root, "schematics", "rda.dataset.distribution.license");
for (JsonNode licenseNode: licenseNodes) {
for (LicenceProperties licenceProperty: LicenceProperties.values()) {
JsonNode schematics = licenseNode.get("schematics");
if(schematics.isArray()) {
for (JsonNode schematic : schematics) {
if (schematic.asText().endsWith(licenceProperty.getName())) {
switch (licenceProperty) {
case LICENSE_REF:
if (rda.getLicenseRef() != null) {
Field field = new Field();
field.setKey(licenseNode.get("id").asText());
field.setValue(rda.getLicenseRef().toString());
properties.add(field);
}
break;
case START_DATE:
Field field = new Field();
field.setKey(licenseNode.get("id").asText());
field.setValue(rda.getStartDate());
properties.add(field);
break;
}
}
break;
}
}
}
}
return properties;
}*/
public enum LicenceProperties {
LICENSE_REF("license_ref"),
START_DATE("start_date");
private String name;
LicenceProperties(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
}