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 bdf98bf3a..7603d1c64 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 @@ -461,8 +461,34 @@ public class DataManagementPlanManager { } public DMP createOrUpdateWithDatasets(DataManagementPlanEditorModel dataManagementPlan, Principal principal) throws Exception { + if (dataManagementPlan.getId() != null) { + DMP dmp1 = apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().find(dataManagementPlan.getId()); + + if (!isUserOwnerOfDmp(dmp1, principal)) { + throw new Exception("User not being the creator is not authorized to edit this DMP."); + } + if (dmp1.getModified().getTime() != dataManagementPlan.getModified().getTime()) { + throw new Exception("Another user have already edit that DMP."); + } + List datasetList = new ArrayList<>(dmp1.getDataset()); + for (Dataset dataset : datasetList) { + if (dataManagementPlan.getProfiles().stream().filter(associatedProfile -> dataset.getProfile().getId().equals(associatedProfile.getId())).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())) + throw new Exception("DMP is finalized, therefore cannot be edited."); + } List datasets = new ArrayList<>(); DMP tempDMP = dataManagementPlan.toDataModel(); + if (tempDMP.getStatus() == (int) DMP.DMPStatus.FINALISED.getValue()) { + checkDmpValidationRules(tempDMP); + } + UserInfo user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(principal.getId()); + createOrganisationsIfTheyDontExist(tempDMP, apiContext.getOperationsContext().getDatabaseRepository().getOrganisationDao()); + createResearchersIfTheyDontExist(tempDMP, apiContext.getOperationsContext().getDatabaseRepository().getResearcherDao(), user); + createFunderIfItDoesntExist(tempDMP, apiContext.getOperationsContext().getDatabaseRepository().getFunderDao()); + createGrantIfItDoesntExist(tempDMP, apiContext.getOperationsContext().getDatabaseRepository().getGrantDao()); + for (DatasetWizardModel datasetWizardModel: dataManagementPlan.getDatasets()) { datasetWizardModel.setDmp(new DataManagementPlan().fromDataModel(tempDMP)); Dataset dataset = datasetManager.createOrUpdate(datasetWizardModel, principal); 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 c208ee8d1..cc2dcd4fb 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 @@ -236,7 +236,7 @@ public class DataManagementPlan implements DataModel { this.id = entity.getId(); this.profile = entity.getProfile() != null ? new Tuple(entity.getProfile().getId(), entity.getProfile().getLabel()) : null; this.organisations = entity.getOrganisations() != null ? entity.getOrganisations().stream().map(item -> new Organisation().fromDataModel(item)).collect(Collectors.toList()) : new ArrayList<>(); - this.researchers = entity.getOrganisations() != null ? entity.getResearchers().stream().map(item -> new Researcher().fromDataModel(item)).collect(Collectors.toList()): new ArrayList<>(); + this.researchers = entity.getResearchers() != null ? entity.getResearchers().stream().map(item -> new Researcher().fromDataModel(item)).collect(Collectors.toList()): new ArrayList<>(); this.version = entity.getVersion(); this.groupId = this.groupId == null ? null : entity.getGroupId(); this.label = entity.getLabel(); diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/Organisation.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/Organisation.java index 5c87d7ebd..c3092bb1f 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/Organisation.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/Organisation.java @@ -4,6 +4,7 @@ import eu.eudat.models.DataModel; import eu.eudat.logic.utilities.helpers.LabelGenerator; import java.util.Date; +import java.util.UUID; public class Organisation implements DataModel, LabelGenerator { private String label; @@ -85,6 +86,9 @@ public class Organisation implements DataModel