From 6154a5fa51beb2e1b93ce771e212815dee313773 Mon Sep 17 00:00:00 2001 From: Aldo Mihasi Date: Tue, 12 Sep 2023 15:36:06 +0300 Subject: [PATCH] fix associated dmps bugs in DMP table, new/existing DmpDatasetProfile entries were not saved/updated --- .../dao/entities/DmpDatasetProfileDao.java | 9 ++++ .../entities/DmpDatasetProfileDaoImpl.java | 52 +++++++++++++++++++ .../main/java/eu/eudat/data/entities/DMP.java | 2 +- .../data/entities/DMPDatasetProfile.java | 1 - .../elastic/entities/DatasetTempalate.java | 24 +++++++++ .../managers/DataManagementPlanManager.java | 17 ++++-- .../logic/managers/DatasetWizardManager.java | 2 +- .../mapper/elastic/DatasetTemplateMapper.java | 18 +++++-- .../operations/DatabaseRepository.java | 2 + .../operations/DatabaseRepositoryImpl.java | 11 ++++ .../models/data/dmp/AssociatedProfile.java | 17 ++++-- .../models/data/dmp/DataManagementPlan.java | 4 +- .../dmp/DataManagementPlanEditorModel.java | 2 +- .../DataManagementPlanNewVersionModel.java | 2 +- .../data/quickwizard/DmpQuickWizardModel.java | 2 +- .../eudat/models/rda/mapper/DmpRDAMapper.java | 16 +++--- .../AssociatedProfilePublicModel.java | 15 ++++-- .../DataManagementPlanPublicModel.java | 1 + 18 files changed, 170 insertions(+), 27 deletions(-) create mode 100644 dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DmpDatasetProfileDao.java create mode 100644 dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DmpDatasetProfileDaoImpl.java diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DmpDatasetProfileDao.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DmpDatasetProfileDao.java new file mode 100644 index 000000000..9febf7abf --- /dev/null +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DmpDatasetProfileDao.java @@ -0,0 +1,9 @@ +package eu.eudat.data.dao.entities; + +import eu.eudat.data.dao.DatabaseAccessLayer; +import eu.eudat.data.entities.DMPDatasetProfile; + +import java.util.UUID; + +public interface DmpDatasetProfileDao extends DatabaseAccessLayer { +} diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DmpDatasetProfileDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DmpDatasetProfileDaoImpl.java new file mode 100644 index 000000000..6c65b804f --- /dev/null +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DmpDatasetProfileDaoImpl.java @@ -0,0 +1,52 @@ +package eu.eudat.data.dao.entities; + +import eu.eudat.data.dao.DatabaseAccess; +import eu.eudat.data.dao.databaselayer.service.DatabaseService; +import eu.eudat.data.entities.Content; +import eu.eudat.data.entities.DMPDatasetProfile; +import eu.eudat.queryable.QueryableList; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import java.util.UUID; +import java.util.concurrent.CompletableFuture; + +@Service("dmpDatasetProfileDao") +public class DmpDatasetProfileDaoImpl extends DatabaseAccess implements DmpDatasetProfileDao { + @Autowired + public DmpDatasetProfileDaoImpl(DatabaseService databaseService) { + super(databaseService); + } + + @Override + public DMPDatasetProfile createOrUpdate(DMPDatasetProfile item) { + return this.getDatabaseService().createOrUpdate(item, DMPDatasetProfile.class); + } + + @Override + @Async + public CompletableFuture createOrUpdateAsync(DMPDatasetProfile item) { + return CompletableFuture.supplyAsync(() -> this.createOrUpdate(item)); + } + + @Override + public DMPDatasetProfile find(UUID id) { + return this.getDatabaseService().getQueryable(DMPDatasetProfile.class).where((builder, root) -> builder.equal(root.get("id"), id)).getSingle(); + } + + @Override + public DMPDatasetProfile find(UUID id, String hint) { + throw new UnsupportedOperationException(); + } + + @Override + public void delete(DMPDatasetProfile item) { + this.getDatabaseService().delete(item); + } + + @Override + public QueryableList asQueryable() { + return this.getDatabaseService().getQueryable(DMPDatasetProfile.class); + } +} diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/entities/DMP.java b/dmp-backend/data/src/main/java/eu/eudat/data/entities/DMP.java index dcfbdb698..60277ead5 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/entities/DMP.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/entities/DMP.java @@ -112,7 +112,7 @@ public class DMP implements DataEntity { /*@Type(type = "eu.eudat.configurations.typedefinition.XMLType") @Column(name = "\"AssociatedDmps\"", columnDefinition = "xml", nullable = true) private String associatedDmps;*/ - @OneToMany(fetch = FetchType.LAZY) + @OneToMany(fetch = FetchType.LAZY, mappedBy = "dmp") private Set associatedDmps; diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/entities/DMPDatasetProfile.java b/dmp-backend/data/src/main/java/eu/eudat/data/entities/DMPDatasetProfile.java index 8ee7a59fc..816ec0410 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/entities/DMPDatasetProfile.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/entities/DMPDatasetProfile.java @@ -2,7 +2,6 @@ package eu.eudat.data.entities; import eu.eudat.queryable.queryableentity.DataEntity; import org.hibernate.annotations.GenericGenerator; -import org.hibernate.annotations.Type; import javax.persistence.*; import java.util.List; diff --git a/dmp-backend/elastic/src/main/java/eu/eudat/elastic/entities/DatasetTempalate.java b/dmp-backend/elastic/src/main/java/eu/eudat/elastic/entities/DatasetTempalate.java index c62c32986..a6a6a6782 100644 --- a/dmp-backend/elastic/src/main/java/eu/eudat/elastic/entities/DatasetTempalate.java +++ b/dmp-backend/elastic/src/main/java/eu/eudat/elastic/entities/DatasetTempalate.java @@ -1,14 +1,18 @@ package eu.eudat.elastic.entities; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; import org.elasticsearch.common.xcontent.XContentBuilder; import java.io.IOException; +import java.util.HashMap; import java.util.Map; import java.util.UUID; public class DatasetTempalate implements ElasticEntity { private UUID id; private String name; + private Map data; public UUID getId() { return id; @@ -26,11 +30,25 @@ public class DatasetTempalate implements ElasticEntity { this.name = name; } + public Map getData() { + return data; + } + + public void setData(Map data) { + this.data = data; + } + @Override public XContentBuilder toElasticEntity(XContentBuilder builder) throws IOException { builder.startObject(); builder.field("id", this.id.toString()); builder.field("name", this.name); + if(this.data != null) { + builder.field("data", new ObjectMapper().writeValueAsString(this.data)); + } + else{ + builder.field("data", ""); + } builder.endObject(); return builder; } @@ -39,6 +57,12 @@ public class DatasetTempalate implements ElasticEntity { public DatasetTempalate fromElasticEntity(Map fields) { this.id = UUID.fromString((String) fields.get("id")); this.name = (String) fields.get("name"); + try { + this.data = new ObjectMapper().readValue((String) fields.get("data"), new TypeReference>() {}); + } + catch (Exception e){ + this.data = new HashMap<>(); + } return this; } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java index 6a68163cb..6fddb00a3 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java @@ -447,6 +447,7 @@ public class DataManagementPlanManager { * Data Management * */ + @Transactional public DMP createOrUpdate(DataManagementPlanEditorModel dataManagementPlan, Principal principal) throws Exception { boolean setNotification = false; if (dataManagementPlan.getId() != null) { @@ -463,7 +464,7 @@ public class DataManagementPlanManager { } List datasetList = dmp1.getDataset().stream().filter(dataset -> dataset.getStatus() != 99).collect(Collectors.toList()); for (Dataset dataset : datasetList) { - if (dataManagementPlan.getProfiles().stream().filter(associatedProfile -> dataset.getProfile().getId().equals(associatedProfile.getId())).findAny().orElse(null) == null) + if (dataManagementPlan.getProfiles().stream().filter(associatedProfile -> dataset.getProfile().getId().equals(associatedProfile.getDescriptionTemplateId())).findAny().orElse(null) == null) throw new Exception("Dataset Template for Dataset Description is missing from the DMP."); } if (dataManagementPlan.getStatus() == (int) DMP.DMPStatus.FINALISED.getValue() && dmp1.getStatus().equals(DMP.DMPStatus.FINALISED.getValue())) @@ -519,9 +520,19 @@ public class DataManagementPlanManager { assignFunderUserIfInternal(newDmp, user); assignProjectUserIfInternal(newDmp, user); + if(newDmp.getId() != null){ + for(DMPDatasetProfile dmpDatasetProfile : newDmp.getAssociatedDmps()){ + apiContext.getOperationsContext().getDatabaseRepository().getDmpDatasetProfileDao().createOrUpdate(dmpDatasetProfile); + } + } + apiContext.getOperationsContext().getDatabaseRepository().getGrantDao().createOrUpdate(newDmp.getGrant()); newDmp = apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().createOrUpdate(newDmp); + for(DMPDatasetProfile dmpDatasetProfile : newDmp.getAssociatedDmps()){ + apiContext.getOperationsContext().getDatabaseRepository().getDmpDatasetProfileDao().createOrUpdate(dmpDatasetProfile); + } + if (dataManagementPlan.getUsers() != null && !dataManagementPlan.getUsers().isEmpty()) { clearUsers(newDmp); for (UserInfoListingModel userListing : dataManagementPlan.getUsers()) { @@ -597,7 +608,7 @@ public class DataManagementPlanManager { throw new Exception("Another user have already edit that DMP."); } for (DatasetWizardModel dataset : dataManagementPlan.getDatasets()) { - if (dataManagementPlan.getProfiles().stream().filter(associatedProfile -> dataset.getProfile().getId().equals(associatedProfile.getId())).findAny().orElse(null) == null) + if (dataManagementPlan.getProfiles().stream().filter(associatedProfile -> dataset.getProfile().getId().equals(associatedProfile.getDescriptionTemplateId())).findAny().orElse(null) == null) throw new Exception("Dataset Template for Dataset Description is missing from the DMP."); } if (dataManagementPlan.getStatus() == (int) DMP.DMPStatus.FINALISED.getValue() && dmp1.getStatus().equals(DMP.DMPStatus.FINALISED.getValue())) @@ -1997,7 +2008,7 @@ public class DataManagementPlanManager { try { dataset.setProfile(databaseRepository.getDatasetProfileDao().find(das.getProfile())); } catch (Exception ignored) { - dataset.setProfile(databaseRepository.getDatasetProfileDao().find(associatedProfiles.get(0).getId())); + dataset.setProfile(databaseRepository.getDatasetProfileDao().find(associatedProfiles.get(0).getDescriptionTemplateId())); } dataset.setProperties(objectMapper.writeValueAsString(das.getFieldImportModels())); dataset.setStatus((short) 0); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetWizardManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetWizardManager.java index 20cb2dc9c..123f70881 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetWizardManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetWizardManager.java @@ -40,7 +40,7 @@ public class DatasetWizardManager { return new LinkedList<>(); } DatasetProfileCriteria criteria = new DatasetProfileCriteria(); - criteria.setIds(dataManagementPlan.getProfiles().stream().map(AssociatedProfile::getId).collect(Collectors.toList())); + criteria.setIds(dataManagementPlan.getProfiles().stream().map(AssociatedProfile::getDescriptionTemplateId).collect(Collectors.toList())); List descriptionTemplates = profileDao.getWithCriteria(criteria).toList(); criteria.setIds(null); criteria.setGroupIds(descriptionTemplates.stream().map(DescriptionTemplate::getGroupId).collect(Collectors.toList())); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/mapper/elastic/DatasetTemplateMapper.java b/dmp-backend/web/src/main/java/eu/eudat/logic/mapper/elastic/DatasetTemplateMapper.java index 65cd3f598..75e979175 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/mapper/elastic/DatasetTemplateMapper.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/mapper/elastic/DatasetTemplateMapper.java @@ -1,14 +1,26 @@ package eu.eudat.logic.mapper.elastic; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import eu.eudat.data.entities.DMPDatasetProfile; import eu.eudat.data.entities.DescriptionTemplate; import eu.eudat.elastic.entities.DatasetTempalate; +import java.util.HashMap; +import java.util.Map; + public class DatasetTemplateMapper { - public static DatasetTempalate toElastic(DescriptionTemplate profile) { + public static DatasetTempalate toElastic(DMPDatasetProfile profile) { DatasetTempalate elastic = new DatasetTempalate(); - elastic.setId(profile.getId()); - elastic.setName(profile.getLabel()); + elastic.setId(profile.getDatasetprofile().getId()); + elastic.setName(profile.getDatasetprofile().getLabel()); + try { + elastic.setData(new ObjectMapper().readValue(profile.getData(), new TypeReference>() {})); + } + catch (Exception e){ + elastic.setData(new HashMap<>()); + } return elastic; } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/DatabaseRepository.java b/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/DatabaseRepository.java index b10ecaa0e..1d5e10df8 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/DatabaseRepository.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/DatabaseRepository.java @@ -14,6 +14,8 @@ public interface DatabaseRepository { DMPDao getDmpDao(); + DmpDatasetProfileDao getDmpDatasetProfileDao(); + OrganisationDao getOrganisationDao(); GrantDao getGrantDao(); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/DatabaseRepositoryImpl.java b/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/DatabaseRepositoryImpl.java index c72baec18..ccbb80304 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/DatabaseRepositoryImpl.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/DatabaseRepositoryImpl.java @@ -16,6 +16,7 @@ public class DatabaseRepositoryImpl implements DatabaseRepository { private DatasetDao datasetDao; private DatasetProfileDao datasetProfileDao; private DMPDao dmpDao; + private DmpDatasetProfileDao dmpDatasetProfileDao; private OrganisationDao organisationDao; private GrantDao GrantDao; private RegistryDao registryDao; @@ -64,6 +65,11 @@ public class DatabaseRepositoryImpl implements DatabaseRepository { this.dmpDao = dmpDao; } + @Autowired + private void setDmpDatasetProfileDao(DmpDatasetProfileDao dmpDatasetProfileDao) { + this.dmpDatasetProfileDao = dmpDatasetProfileDao; + } + @Autowired private void setOrganisationDao(OrganisationDao organisationDao) { this.organisationDao = organisationDao; @@ -114,6 +120,11 @@ public class DatabaseRepositoryImpl implements DatabaseRepository { return dmpDao; } + @Override + public DmpDatasetProfileDao getDmpDatasetProfileDao() { + return dmpDatasetProfileDao; + } + @Override public OrganisationDao getOrganisationDao() { return organisationDao; diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/AssociatedProfile.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/AssociatedProfile.java index 46408dfa4..13343fa5b 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/AssociatedProfile.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/AssociatedProfile.java @@ -11,6 +11,7 @@ import java.util.UUID; public class AssociatedProfile implements XmlSerializable { private UUID id; + private UUID descriptionTemplateId; private String label; private Map data; @@ -22,6 +23,14 @@ public class AssociatedProfile implements XmlSerializable { this.id = id; } + public UUID getDescriptionTemplateId() { + return descriptionTemplateId; + } + + public void setDescriptionTemplateId(UUID descriptionTemplateId) { + this.descriptionTemplateId = descriptionTemplateId; + } + public String getLabel() { return label; } @@ -41,27 +50,27 @@ public class AssociatedProfile implements XmlSerializable { @Override public Element toXml(Document doc) { Element profile = doc.createElement("profile"); - profile.setAttribute("profileId", this.id.toString()); + profile.setAttribute("profileId", this.descriptionTemplateId.toString()); profile.setAttribute("label", this.label); return profile; } @Override public AssociatedProfile fromXml(Element item) { - this.id = UUID.fromString(item.getAttribute("profileId")); + this.descriptionTemplateId = UUID.fromString(item.getAttribute("profileId")); this.label = item.getAttribute("label"); return this; } public DescriptionTemplate toData() { DescriptionTemplate profile = new DescriptionTemplate(); - profile.setId(this.id); + profile.setId(this.descriptionTemplateId); profile.setLabel(this.label); return profile; } public AssociatedProfile fromData(DescriptionTemplate entity) { - this.id = entity.getId(); + this.descriptionTemplateId = entity.getId(); this.label = entity.getLabel(); return this; } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlan.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlan.java index 2de902349..002cd9bf8 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlan.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlan.java @@ -262,6 +262,7 @@ public class DataManagementPlan implements DataModel { this.profiles = new LinkedList<>(); for (DMPDatasetProfile dmpDescriptionProfile : entity.getAssociatedDmps()) { AssociatedProfile associatedProfile = new AssociatedProfile().fromData(dmpDescriptionProfile.getDatasetprofile()); + associatedProfile.setId(dmpDescriptionProfile.getId()); try { associatedProfile.setData(new ObjectMapper().readValue(dmpDescriptionProfile.getData(), new TypeReference>() {})); } @@ -331,7 +332,7 @@ public class DataManagementPlan implements DataModel { Set dmpDatasetProfiles = new HashSet<>(); for (AssociatedProfile profile : this.profiles) { DMPDatasetProfile dmpDatasetProfile = new DMPDatasetProfile(); - dmpDatasetProfile.setId(UUID.randomUUID()); + dmpDatasetProfile.setId(profile.getId()); dmpDatasetProfile.setDmp(dataManagementPlanEntity); dmpDatasetProfile.setDatasetprofile(profile.toData()); dmpDatasetProfile.setData(new ObjectMapper().writeValueAsString(profile.getData())); @@ -380,6 +381,7 @@ public class DataManagementPlan implements DataModel { this.profiles = new LinkedList<>(); for (DMPDatasetProfile dmpDescriptionProfile : entity.getAssociatedDmps()) { AssociatedProfile associatedProfile = new AssociatedProfile().fromData(dmpDescriptionProfile.getDatasetprofile()); + associatedProfile.setId(dmpDescriptionProfile.getId()); try { associatedProfile.setData(new ObjectMapper().readValue(dmpDescriptionProfile.getData(), new TypeReference>() {})); } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlanEditorModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlanEditorModel.java index 1fde4e113..4f3f0b644 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlanEditorModel.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlanEditorModel.java @@ -369,7 +369,7 @@ public class DataManagementPlanEditorModel implements DataModel dmpDatasetProfiles = new HashSet<>(); for (AssociatedProfile profile : this.profiles) { DMPDatasetProfile dmpDatasetProfile = new DMPDatasetProfile(); - dmpDatasetProfile.setId(UUID.randomUUID()); + dmpDatasetProfile.setId(profile.getId()); dmpDatasetProfile.setDmp(dataManagementPlanEntity); dmpDatasetProfile.setDatasetprofile(profile.toData()); dmpDatasetProfile.setData(new ObjectMapper().writeValueAsString(profile.getData())); diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlanNewVersionModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlanNewVersionModel.java index a45246e2e..ed62cda3e 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlanNewVersionModel.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlanNewVersionModel.java @@ -265,7 +265,7 @@ public class DataManagementPlanNewVersionModel implements DataModel dmpDatasetProfiles = new HashSet<>(); for (AssociatedProfile profile : this.profiles) { DMPDatasetProfile dmpDatasetProfile = new DMPDatasetProfile(); - dmpDatasetProfile.setId(UUID.randomUUID()); + dmpDatasetProfile.setId(profile.getId()); dmpDatasetProfile.setDmp(entity); dmpDatasetProfile.setDatasetprofile(profile.toData()); dmpDatasetProfile.setData(new ObjectMapper().writeValueAsString(profile.getData())); diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/quickwizard/DmpQuickWizardModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/quickwizard/DmpQuickWizardModel.java index 427172351..5f2be414a 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/quickwizard/DmpQuickWizardModel.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/quickwizard/DmpQuickWizardModel.java @@ -112,7 +112,7 @@ public class DmpQuickWizardModel { DescriptionTemplate descriptionTemplate = new DescriptionTemplate(); descriptionTemplate.setDefinition(this.datasetProfile.getLabel()); descriptionTemplate.setLabel(this.datasetProfile.getLabel()); - descriptionTemplate.setId(this.datasetProfile.getId()); + descriptionTemplate.setId(this.datasetProfile.getDescriptionTemplateId()); return descriptionTemplate; } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DmpRDAMapper.java b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DmpRDAMapper.java index 5272cc6cd..c55d0d66c 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DmpRDAMapper.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DmpRDAMapper.java @@ -125,16 +125,15 @@ public class DmpRDAMapper { entity.setDois(new HashSet<>()); } } - if (((List) rda.getAdditionalProperties().get("templates")) != null && !((List) rda.getAdditionalProperties().get("templates")).isEmpty()) { - entity.setAssociatedDmps(((List) rda.getAdditionalProperties().get("templates")).stream().map(this::getProfile).filter(Objects::nonNull).collect(Collectors.toSet())); + if (((List) rda.getAdditionalProperties().get("templates")) != null && !((List) rda.getAdditionalProperties().get("templates")).isEmpty() && entity.getId() != null) { + entity.setAssociatedDmps(((List) rda.getAdditionalProperties().get("templates")).stream().map(x -> this.getProfile(x, entity.getId())).filter(Objects::nonNull).collect(Collectors.toSet())); } if (entity.getAssociatedDmps() == null) { entity.setAssociatedDmps(new HashSet<>()); } - if (profiles != null) { + if (profiles != null && entity.getId() != null) { for (String profile : profiles) { - DescriptionTemplate exProfile = apiContext.getOperationsContext().getDatabaseRepository().getDatasetProfileDao().find(UUID.fromString(profile)); - entity.getAssociatedDmps().add(exProfile); + entity.getAssociatedDmps().add(this.getProfile(profile, entity.getId())); } } if (rda.getContributor() != null && !rda.getContributor().isEmpty() && rda.getContributor().get(0).getContributorId() != null) { @@ -159,7 +158,10 @@ public class DmpRDAMapper { return entity; } - private DescriptionTemplate getProfile(String id) { - return apiContext.getOperationsContext().getDatabaseRepository().getDatasetProfileDao().asQueryable().where(((builder, root) -> builder.equal(root.get("id"), UUID.fromString(id)))).getSingleOrDefault(); + private DMPDatasetProfile getProfile(String descriptionTemplateId, UUID dmpId) { + return apiContext.getOperationsContext().getDatabaseRepository().getDmpDatasetProfileDao().asQueryable().where(((builder, root) -> builder.and( + builder.equal(root.get("datasetprofile"), UUID.fromString(descriptionTemplateId)), + builder.equal(root.get("dmp"), dmpId)) + )).getSingleOrDefault(); } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/publicapi/models/associatedprofile/AssociatedProfilePublicModel.java b/dmp-backend/web/src/main/java/eu/eudat/publicapi/models/associatedprofile/AssociatedProfilePublicModel.java index 228f843e5..b04f57678 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/publicapi/models/associatedprofile/AssociatedProfilePublicModel.java +++ b/dmp-backend/web/src/main/java/eu/eudat/publicapi/models/associatedprofile/AssociatedProfilePublicModel.java @@ -10,6 +10,7 @@ import java.util.UUID; public class AssociatedProfilePublicModel implements XmlSerializable { private UUID id; + private UUID descriptionTemplateId; private String label; private Map data; @@ -21,6 +22,14 @@ public class AssociatedProfilePublicModel implements XmlSerializable(); for (DMPDatasetProfile dmpDescriptionProfile : entity.getAssociatedDmps()) { AssociatedProfilePublicModel associatedProfile = new AssociatedProfilePublicModel().fromData(dmpDescriptionProfile.getDatasetprofile()); + associatedProfile.setId(dmpDescriptionProfile.getId()); try { associatedProfile.setData(new ObjectMapper().readValue(dmpDescriptionProfile.getData(), new TypeReference>() {})); }