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

68 lines
2.0 KiB
Java

package eu.eudat.file.transformer.model.rda.mapper;
import eu.eudat.commonmodels.models.descriptiotemplate.FieldModel;
import eu.eudat.file.transformer.model.rda.License;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import java.net.URI;
import java.util.List;
import java.util.Map;
@Component
public class LicenseRDAMapper {
private static final Logger logger = LoggerFactory.getLogger(LicenseRDAMapper.class);
public License toRDA(List<FieldModel> nodes, List<eu.eudat.commonmodels.models.description.FieldModel> valueFields) {
if (nodes == null) return null;
if (valueFields == null) throw new IllegalArgumentException("extraData is missing");
License rda = new License();
for (FieldModel node: nodes) {
String rdaProperty = node.getSchematics().stream().filter(schematic -> schematic.startsWith("rda.dataset.distribution.license")).findFirst().orElse("");
eu.eudat.commonmodels.models.description.FieldModel valueField = valueFields.stream().filter(x-> x.getId().equals(node.getId())).findFirst().orElse(null);
if(valueField == null || valueField.getTextValue() == null || valueField.getTextValue().isBlank()){
continue;
}
for (LicenceProperties licenceProperties: LicenceProperties.values()) {
if (rdaProperty.contains(licenceProperties.getName())) {
switch (licenceProperties) {
case LICENSE_REF:
try {
rda.setLicenseRef(URI.create(valueField.getTextValue()));
} catch (IllegalArgumentException e) {
logger.warn(e.getLocalizedMessage() + ". Skipping url parsing");
}
break;
case START_DATE:
rda.setStartDate(valueField.getTextValue());
break;
}
}
}
}
if(rda.getLicenseRef() == null || rda.getStartDate() == null){
return null;
}
return rda;
}
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;
}
}
}