93 lines
2.8 KiB
Java
93 lines
2.8 KiB
Java
package eu.eudat.file.transformer.model.rda.mapper;
|
|
|
|
import eu.eudat.commonmodels.models.descriptiotemplate.FieldModel;
|
|
import eu.eudat.file.transformer.model.rda.DatasetId;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.springframework.stereotype.Component;
|
|
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
|
|
@Component
|
|
public class DatasetIdRDAMapper{
|
|
private static final Logger logger = LoggerFactory.getLogger(DatasetIdRDAMapper.class);
|
|
|
|
|
|
public DatasetId toRDA(List<FieldModel> nodes, List<eu.eudat.commonmodels.models.description.FieldModel> valueFields) {
|
|
if (nodes == null) return null;
|
|
if (valueFields == null) throw new IllegalArgumentException("valueFields is missing");
|
|
|
|
DatasetId data = new DatasetId();
|
|
for (FieldModel node: nodes) {
|
|
String rdaProperty = node.getSchematics().stream().filter(schematic -> schematic.startsWith("rda.dataset.dataset_id")).findFirst().orElse("");
|
|
if (node.getData() == null) {
|
|
continue;
|
|
}
|
|
eu.eudat.commonmodels.models.description.FieldModel rdaValue = valueFields.stream().filter(x-> x.getId().equals(node.getId())).findFirst().orElse(null);
|
|
if(rdaValue == null || rdaValue.getTextValue() == null || rdaValue.getTextValue().isBlank()){
|
|
continue;
|
|
}
|
|
finalRDAMap(data, rdaProperty, rdaValue.getTextValue());
|
|
// try { //TODO
|
|
// Map<String, Object> values = mapper.readValue(rdaValue, HashMap.class); //TODO
|
|
// if (!values.isEmpty()) {
|
|
// values.entrySet().forEach(entry -> finalRDAMap(data, entry.getKey(), (String) entry.getValue()));
|
|
// } else {
|
|
// finalRDAMap(data, rdaProperty, rdaValue.getTextValue());
|
|
// }
|
|
// } catch (IOException e) {
|
|
// logger.warn(e.getMessage() + ".Passing value as is");
|
|
// finalRDAMap(data, rdaProperty, rdaValue.getTextValue());
|
|
//
|
|
// }
|
|
|
|
}
|
|
|
|
if (data.getIdentifier() != null && data.getType() != null) {
|
|
return data;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
private static void finalRDAMap(DatasetId rda, String property, String value) {
|
|
if (value != null) {
|
|
for (DatasetIdProperties datasetIdProperties : DatasetIdProperties.values()) {
|
|
if (property.contains(datasetIdProperties.getName())) {
|
|
switch (datasetIdProperties) {
|
|
case IDENTIFIER:
|
|
rda.setIdentifier(value);
|
|
break;
|
|
case TYPE:
|
|
try {
|
|
rda.setType(DatasetId.Type.fromValue(value));
|
|
}
|
|
catch (IllegalArgumentException e){
|
|
logger.warn("Type " + value + " from semantic rda.dataset.dataset_id.type was not found. Setting type to OTHER.");
|
|
rda.setType(DatasetId.Type.OTHER);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
|
|
private enum DatasetIdProperties {
|
|
IDENTIFIER("identifier"),
|
|
TYPE("type");
|
|
|
|
private final String name;
|
|
|
|
DatasetIdProperties(String name) {
|
|
this.name = name;
|
|
}
|
|
|
|
public String getName() {
|
|
return name;
|
|
}
|
|
}
|
|
}
|