136 lines
3.8 KiB
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;
|
|
}
|
|
}
|
|
}
|