package eu.eudat.models.rda.mapper; import eu.eudat.data.entities.DMP; import eu.eudat.data.entities.UserDMP; import eu.eudat.data.entities.UserInfo; import eu.eudat.models.rda.Dmp; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.transaction.Transactional; import java.util.Collections; import java.util.stream.Collectors; @Component public class DmpRDAMapper { private DatasetRDAMapper datasetRDAMapper; @Autowired public DmpRDAMapper(DatasetRDAMapper datasetRDAMapper) { this.datasetRDAMapper = datasetRDAMapper; } @Transactional public Dmp toRDA(DMP dmp) { Dmp rda = new Dmp(); if (dmp.getDoi() != null && !dmp.getDoi().isEmpty()) { rda.setDmpId(DmpIdRDAMapper.toRDA(dmp.getDoi())); } else { rda.setDmpId(DmpIdRDAMapper.toRDA(dmp.getId())); } rda.setCreated(dmp.getCreated()); rda.setDescription(dmp.getDescription()); rda.setModified(dmp.getModified()); rda.setTitle(dmp.getLabel()); UserInfo creator; if (dmp.getCreator() != null) { creator = dmp.getCreator(); } else { creator = dmp.getUsers().stream().filter(userDMP -> userDMP.getRole().equals(UserDMP.UserDMPRoles.OWNER.getValue())).map(UserDMP::getUser).findFirst().orElse(new UserInfo()); } rda.setContact(ContactRDAMapper.toRDA(creator)); rda.setContributor(dmp.getUsers().stream().map(ContributorRDAMapper::toRDA).collect(Collectors.toList())); rda.setDataset(dmp.getDataset().stream().map(dataset -> datasetRDAMapper.toRDA(dataset)).collect(Collectors.toList())); rda.setProject(Collections.singletonList(ProjectRDAMapper.toRDA(dmp.getProject(), dmp.getGrant()))); return rda; } }