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 b0ac07f0a..6ae8aad7a 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 @@ -403,12 +403,11 @@ public class DataManagementPlanManager { createOrganisationsIfTheyDontExist(newDmp, apiContext.getOperationsContext().getDatabaseRepository().getOrganisationDao()); createResearchersIfTheyDontExist(newDmp, apiContext.getOperationsContext().getDatabaseRepository().getResearcherDao()); createProjectIfItDoesntExist(newDmp, apiContext.getOperationsContext().getDatabaseRepository().getProjectDao(), user); - DMP dmp = apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().find(dataManagementPlan.getId()); - - if (dmp.getStatus().equals(DMP.DMPStatus.FINALISED.getValue())) - newDmp.setStatus(DMP.DMPStatus.FINALISED.getValue()); try { + DMP dmp = apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().find(dataManagementPlan.getId()); + if (dmp.getStatus().equals(DMP.DMPStatus.FINALISED.getValue())) + newDmp.setStatus(DMP.DMPStatus.FINALISED.getValue()); newDmp.setCreated(dmp.getCreated()); if (dmp.getUsers().stream().filter(userInfo -> userInfo.getUser().getId() == principal.getId()) .collect(Collectors.toList()).size() == 0) { @@ -421,26 +420,65 @@ public class DataManagementPlanManager { } } } - } catch (Exception e) { - newDmp.setCreated(new Date()); - } + newDmp = apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().createOrUpdate(newDmp); + if (dataManagementPlan.getStatus() == DMP.DMPStatus.FINALISED.getValue()) { + if (dataManagementPlan.getDatasetsToBeFinalized() != null && !dataManagementPlan.getDatasetsToBeFinalized().isEmpty()) { + apiContext.getOperationsContext().getDatabaseRepository().getDatasetDao() + .asQueryable().where((builder, root) -> root.get("id").in(dataManagementPlan.getDatasetsToBeFinalized())) + .update(root -> root.get("status"), Dataset.Status.FINALISED.getValue()); - newDmp = apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().createOrUpdate(newDmp); - - if (dataManagementPlan.getStatus() == DMP.DMPStatus.FINALISED.getValue()) { - apiContext.getOperationsContext().getDatabaseRepository().getDatasetDao() - .asQueryable().where((builder, root) -> root.get("id").in(dataManagementPlan.getDatasetsToBeFinalized())) - .update(root -> root.get("status"), Dataset.Status.FINALISED.getValue()); - - List datasetsToBeCanceled = new LinkedList<>(); - for (Dataset dataset : dmp.getDataset()) { - if (!dataset.getStatus().equals(Dataset.Status.FINALISED.getValue()) && !dataManagementPlan.getDatasetsToBeFinalized().contains(dataset.getId())) { - datasetsToBeCanceled.add(dataset.getId()); + List datasetsToBeCanceled = new LinkedList<>(); + for (Dataset dataset : dmp.getDataset()) { + if (!dataset.getStatus().equals(Dataset.Status.FINALISED.getValue()) && !dataManagementPlan.getDatasetsToBeFinalized().contains(dataset.getId())) { + datasetsToBeCanceled.add(dataset.getId()); + } + } + apiContext.getOperationsContext().getDatabaseRepository().getDatasetDao() + .asQueryable().where((builder, root) -> root.get("id").in(datasetsToBeCanceled)) + .update(root -> root.get("status"), Dataset.Status.CANCELED.getValue()); + } else { + List datasetsToBeCanceled = new LinkedList<>(); + for (Dataset dataset : dmp.getDataset()) { + if (!dataset.getStatus().equals(Dataset.Status.FINALISED.getValue())) { + datasetsToBeCanceled.add(dataset.getId()); + } + } + apiContext.getOperationsContext().getDatabaseRepository().getDatasetDao() + .asQueryable().where((builder, root) -> root.get("id").in(datasetsToBeCanceled)) + .update(root -> root.get("status"), Dataset.Status.CANCELED.getValue()); + } + } + } catch (Exception e) { + newDmp.setCreated(new Date()); + newDmp = apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().createOrUpdate(newDmp); + + if (dataManagementPlan.getStatus() == DMP.DMPStatus.FINALISED.getValue()) { + if (dataManagementPlan.getDatasetsToBeFinalized() != null && !dataManagementPlan.getDatasetsToBeFinalized().isEmpty()) { + apiContext.getOperationsContext().getDatabaseRepository().getDatasetDao() + .asQueryable().where((builder, root) -> root.get("id").in(dataManagementPlan.getDatasetsToBeFinalized())) + .update(root -> root.get("status"), Dataset.Status.FINALISED.getValue()); + + List datasetsToBeCanceled = new LinkedList<>(); + for (DatasetListingModel dataset : dataManagementPlan.getDatasets()) { + if (!(dataset.getStatus() == (int) Dataset.Status.FINALISED.getValue()) && !dataManagementPlan.getDatasetsToBeFinalized().contains(UUID.fromString(dataset.getId()))) { + datasetsToBeCanceled.add(UUID.fromString(dataset.getId())); + } + } + apiContext.getOperationsContext().getDatabaseRepository().getDatasetDao() + .asQueryable().where((builder, root) -> root.get("id").in(datasetsToBeCanceled)) + .update(root -> root.get("status"), Dataset.Status.CANCELED.getValue()); + } else { + List datasetsToBeCanceled = new LinkedList<>(); + for (DatasetListingModel dataset : dataManagementPlan.getDatasets()) { + if (!(dataset.getStatus() == (int) Dataset.Status.FINALISED.getValue())) { + datasetsToBeCanceled.add(UUID.fromString(dataset.getId())); + } + } + apiContext.getOperationsContext().getDatabaseRepository().getDatasetDao() + .asQueryable().where((builder, root) -> root.get("id").in(datasetsToBeCanceled)) + .update(root -> root.get("status"), Dataset.Status.CANCELED.getValue()); } } - apiContext.getOperationsContext().getDatabaseRepository().getDatasetDao() - .asQueryable().where((builder, root) -> root.get("id").in(datasetsToBeCanceled)) - .update(root -> root.get("status"), Dataset.Status.CANCELED.getValue()); } if (dataManagementPlan.getAssociatedUsers().size() == 0)