70 lines
2.8 KiB
Java
70 lines
2.8 KiB
Java
package eu.eudat.file.transformer.rda.mapper;
|
|
import eu.eudat.file.transformer.enums.ReferenceType;
|
|
import eu.eudat.file.transformer.models.reference.DefinitionFileTransformerModel;
|
|
import eu.eudat.file.transformer.models.reference.FieldFileTransformerModel;
|
|
import eu.eudat.file.transformer.models.reference.ReferenceFileTransformerModel;
|
|
import eu.eudat.file.transformer.rda.Project;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
import java.util.*;
|
|
|
|
public class ProjectRDAMapper {
|
|
private final static Logger logger = LoggerFactory.getLogger(ProjectRDAMapper.class);
|
|
|
|
public static Project toRDA(ReferenceFileTransformerModel project, ReferenceFileTransformerModel grant, ReferenceFileTransformerModel funder) {
|
|
Project rda = new Project();
|
|
try {
|
|
rda.setTitle(project.getLabel());
|
|
rda.setDescription(project.getDescription());
|
|
String startDateString = project.getDefinition().getFields().stream().filter(field -> field.getCode().equals("startDate")).map(FieldFileTransformerModel::getValue).findFirst().orElse(null);
|
|
if (startDateString != null) {
|
|
rda.setStart(startDateString);
|
|
}
|
|
String endDateString = project.getDefinition().getFields().stream().filter(field -> field.getCode().equals("endDate")).map(FieldFileTransformerModel::getValue).findFirst().orElse(null);
|
|
if (endDateString != null) {
|
|
rda.setEnd(endDateString);
|
|
}
|
|
rda.setFunding(List.of(FundingRDAMapper.toRDA(grant, funder)));
|
|
|
|
if (rda.getTitle() == null) {
|
|
throw new IllegalArgumentException("Project Title is missing");
|
|
}
|
|
} catch (Exception e) {
|
|
logger.error(e.getLocalizedMessage(), e);
|
|
}
|
|
|
|
return rda;
|
|
}
|
|
|
|
public static List<ReferenceFileTransformerModel> toEntity(Project rda) {
|
|
List<ReferenceFileTransformerModel> entities = new ArrayList<>();
|
|
ReferenceFileTransformerModel project = new ReferenceFileTransformerModel();
|
|
project.setLabel(rda.getTitle());
|
|
project.setDescription(rda.getDescription());
|
|
project.setType(ReferenceType.Project);
|
|
DefinitionFileTransformerModel projectDefinition = new DefinitionFileTransformerModel();
|
|
projectDefinition.setFields(new ArrayList<>());
|
|
if (rda.getStart() != null && !rda.getStart().isEmpty()) {
|
|
FieldFileTransformerModel startDateField = new FieldFileTransformerModel();
|
|
startDateField.setCode("startDate");
|
|
startDateField.setValue(rda.getStart());
|
|
projectDefinition.getFields().add(startDateField);
|
|
}
|
|
if (rda.getEnd() != null && !rda.getEnd().isEmpty()) {
|
|
FieldFileTransformerModel startDateField = new FieldFileTransformerModel();
|
|
startDateField.setCode("endDate");
|
|
startDateField.setValue(rda.getEnd());
|
|
projectDefinition.getFields().add(startDateField);
|
|
}
|
|
project.setDefinition(projectDefinition);
|
|
entities.add(project);
|
|
|
|
for (int i = 0; i < rda.getFunding().size(); i++) {
|
|
entities.addAll(FundingRDAMapper.toEntity(rda.getFunding().get(i)));
|
|
}
|
|
|
|
return entities;
|
|
}
|
|
}
|