103 lines
4.5 KiB
Java
103 lines
4.5 KiB
Java
package org.opencdmp.filetransformer.rda.model.rda.mapper;
|
|
import org.opencdmp.commonmodels.models.reference.ReferenceDefinitionModel;
|
|
import org.opencdmp.commonmodels.models.reference.ReferenceFieldModel;
|
|
import org.opencdmp.commonmodels.models.reference.ReferenceModel;
|
|
import org.opencdmp.commonmodels.models.reference.ReferenceTypeModel;
|
|
import org.opencdmp.filetransformer.rda.model.FundingModel;
|
|
import org.opencdmp.filetransformer.rda.model.ProjectModel;
|
|
import org.opencdmp.filetransformer.rda.model.rda.Funding;
|
|
import org.opencdmp.filetransformer.rda.model.rda.Project;
|
|
import org.opencdmp.filetransformer.rda.service.rdafiletransformer.RdaFileTransformerServiceProperties;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.springframework.stereotype.Component;
|
|
|
|
import java.util.*;
|
|
|
|
@Component
|
|
public class ProjectRDAMapper {
|
|
private final static Logger logger = LoggerFactory.getLogger(ProjectRDAMapper.class);
|
|
private final FundingRDAMapper fundingRDAMapper;
|
|
private final RdaFileTransformerServiceProperties rdaFileTransformerServiceProperties;
|
|
|
|
public ProjectRDAMapper(FundingRDAMapper fundingRDAMapper, RdaFileTransformerServiceProperties rdaFileTransformerServiceProperties) {
|
|
this.fundingRDAMapper = fundingRDAMapper;
|
|
this.rdaFileTransformerServiceProperties = rdaFileTransformerServiceProperties;
|
|
}
|
|
|
|
public Project toRDA(ProjectModel model, Map<String, Object> extraData) {
|
|
if (model == null) return null;
|
|
if (model.getProject() == null) throw new IllegalArgumentException("Project is missing");
|
|
if (model.getProject().getLabel() == null || model.getProject().getLabel().isBlank()) throw new IllegalArgumentException("Project Title is missing");
|
|
Project rda = new Project();
|
|
try {
|
|
rda.setTitle(model.getProject().getLabel());
|
|
rda.setDescription(model.getProject().getDescription());
|
|
if (model.getProject().getDefinition() != null && model.getProject().getDefinition().getFields() != null) {
|
|
String startDateString = model.getProject().getDefinition().getFields().stream().filter(field -> field.getCode().equals("startDate")).map(ReferenceFieldModel::getValue).findFirst().orElse(null);
|
|
if (startDateString != null) {
|
|
rda.setStart(startDateString);
|
|
}
|
|
String endDateString = model.getProject().getDefinition().getFields().stream().filter(field -> field.getCode().equals("endDate")).map(ReferenceFieldModel::getValue).findFirst().orElse(null);
|
|
if (endDateString != null) {
|
|
rda.setEnd(endDateString);
|
|
}
|
|
}
|
|
FundingModel fundingModel = new FundingModel();
|
|
fundingModel.setGrant(model.getGrant());
|
|
fundingModel.setFunder(model.getFunder());
|
|
rda.setFunding(List.of(fundingRDAMapper.toRDA(fundingModel)));
|
|
|
|
|
|
} catch (Exception e) {
|
|
logger.error(e.getLocalizedMessage(), e);
|
|
}
|
|
|
|
return rda;
|
|
}
|
|
|
|
public ProjectModel toEntity(Project rda) {
|
|
ProjectModel projectModel = new ProjectModel();
|
|
ReferenceModel project = new ReferenceModel();
|
|
project.setLabel(rda.getTitle());
|
|
project.setDescription(rda.getDescription());
|
|
ReferenceTypeModel referenceTypeModel = new ReferenceTypeModel();
|
|
referenceTypeModel.setCode(rdaFileTransformerServiceProperties.getProjectReferenceCode());
|
|
project.setType(referenceTypeModel);
|
|
ReferenceDefinitionModel projectDefinition = new ReferenceDefinitionModel();
|
|
projectDefinition.setFields(new ArrayList<>());
|
|
if (rda.getStart() != null && !rda.getStart().isEmpty()) {
|
|
ReferenceFieldModel startDateField = new ReferenceFieldModel();
|
|
startDateField.setCode("startDate");
|
|
startDateField.setValue(rda.getStart());
|
|
projectDefinition.getFields().add(startDateField);
|
|
}
|
|
if (rda.getEnd() != null && !rda.getEnd().isEmpty()) {
|
|
ReferenceFieldModel startDateField = new ReferenceFieldModel();
|
|
startDateField.setCode("endDate");
|
|
startDateField.setValue(rda.getEnd());
|
|
projectDefinition.getFields().add(startDateField);
|
|
}
|
|
project.setDefinition(projectDefinition);
|
|
projectModel.setProject(project);
|
|
|
|
List<FundingModel> fundingModels = fundingRDAMapper.toEntities(rda.getFunding());
|
|
if (fundingModels != null && !fundingModels.isEmpty()){
|
|
projectModel.setFunder(fundingModels.getFirst().getFunder()); //TODO
|
|
projectModel.setGrant(fundingModels.getFirst().getGrant());
|
|
}
|
|
|
|
return projectModel;
|
|
}
|
|
|
|
public List<ProjectModel> toEntities(List<Project> rdas) {
|
|
if (rdas == null) return null;
|
|
List<ProjectModel> items = new ArrayList<>();
|
|
for (Project rda : rdas){
|
|
ProjectModel item = this.toEntity(rda);
|
|
if (item != null) items.add(item);
|
|
}
|
|
return items;
|
|
}
|
|
}
|