file-transformer-rda-json/core/src/main/java/eu/eudat/file/transformer/rda/mapper/ProjectRDAMapper.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;
}
}