package eu.eudat.model.mapper.publicapi; import eu.eudat.data.EntityDoiEntity; import eu.eudat.model.Dmp; import eu.eudat.model.DmpDescriptionTemplate; import eu.eudat.model.publicapi.associatedprofile.AssociatedProfilePublicModel; import eu.eudat.model.publicapi.doi.DoiPublicModel; import eu.eudat.model.publicapi.grant.GrantPublicOverviewModel; import eu.eudat.model.publicapi.listingmodels.DataManagementPlanPublicListingModel; import eu.eudat.model.publicapi.organisation.OrganizationPublicModel; import eu.eudat.model.publicapi.overviewmodels.DataManagementPlanPublicModel; import eu.eudat.model.publicapi.researcher.ResearcherPublicModel; import eu.eudat.model.publicapi.user.UserInfoPublicModel; import eu.eudat.service.publicapi.PublicApiProperties; import org.springframework.stereotype.Component; import java.sql.Date; import java.util.List; import java.util.Objects; @Component public class DmpToPublicApiDmpMapper { private final DescriptionToPublicApiDatasetMapper descriptionToPublicApiDatasetMapper; public DmpToPublicApiDmpMapper(DescriptionToPublicApiDatasetMapper descriptionToPublicApiDatasetMapper) { this.descriptionToPublicApiDatasetMapper = descriptionToPublicApiDatasetMapper; } public DataManagementPlanPublicModel toPublicModel(Dmp dmp, List doiEntities, List descriptionTemplates, PublicApiProperties.ReferenceTypeMapConfig config) { DataManagementPlanPublicModel model = new DataManagementPlanPublicModel(); model.setId(dmp.getId().toString()); model.setLabel(dmp.getLabel()); model.setDescription(dmp.getDescription()); model.setVersion(dmp.getVersion()); model.setGroupId(dmp.getGroupId()); if (dmp.getBlueprint() != null) model.setProfile(dmp.getBlueprint().getLabel()); if (dmp.getDescriptions() != null) { DataManagementPlanPublicListingModel publicListingModel = new DataManagementPlanPublicListingModel(); publicListingModel.setId(model.getId()); model.setDatasets(dmp.getDescriptions().stream().map(x -> descriptionToPublicApiDatasetMapper.toPublicModel(x, publicListingModel, config)).toList()); } model.setUsers(dmp.getDmpUsers().stream().map(UserInfoPublicModel::fromDmpUser).toList()); model.setResearchers(dmp.getDmpReferences().stream().map(x-> ResearcherPublicModel.fromDmpReference(x, config)).filter(Objects::nonNull).toList()); model.setGrant(GrantPublicOverviewModel.fromDmpReferences(dmp.getDmpReferences(), config)); model.setOrganisations(dmp.getDmpReferences().stream().map(x-> OrganizationPublicModel.fromDmpReference(x, config)).filter(Objects::nonNull).toList()); model.setDois(doiEntities.stream().map(DoiPublicModel::fromDataModel).toList()); model.setAssociatedProfiles(descriptionTemplates.stream().map(x -> AssociatedProfilePublicModel.fromDmpDescriptionTemplate(x, dmp.getBlueprint())).toList()); model.setCreatedAt(Date.from(dmp.getCreatedAt())); model.setModifiedAt(Date.from(dmp.getUpdatedAt())); model.setFinalizedAt(Date.from(dmp.getFinalizedAt())); return model; } }