From 4845ba84a7cdcbc779c3eff412724871a7296d3f Mon Sep 17 00:00:00 2001 From: Ioannis Kalyvas Date: Fri, 30 Nov 2018 16:57:20 +0200 Subject: [PATCH] Added Delete action on Projects , Datasets and Datamanagement Plans --- .../data/dao/entities/DatasetDaoImpl.java | 1 + .../eudat/data/entities/DataRepository.java | 2 ++ .../DynamicProjectConfigurationDevelImpl.java | 2 +- .../main/java/eu/eudat/controllers/DMPs.java | 10 +++++-- .../controllers/DatasetWizardController.java | 17 ++++++++--- .../java/eu/eudat/controllers/Projects.java | 14 +++++++++- .../DMPWithDatasetsDeleteException.java | 22 +++++++++++++++ .../DMPWithDatasetsException.java | 22 --------------- .../ProjectWithDMPsDeleteException.java | 22 +++++++++++++++ .../managers/DataManagementPlanManager.java | 6 ++-- .../logic/managers/DatasetWizardManager.java | 6 ++++ .../eudat/logic/managers/ProjectManager.java | 9 ++++++ .../configloaders/DevelConfigLoader.java | 2 +- .../dataset-wizard.component.html | 2 ++ .../dataset-wizard.component.ts | 28 ++++++++++++++++++- .../dataset-wizard/dataset-wizard.service.ts | 4 +++ .../app/services/project/project.service.ts | 4 +++ .../dmp-criteria.component.ts | 2 +- .../admin-login/admin-login.component.html | 4 +-- .../admin-login/admin-login.component.scss | 4 +-- dmp-frontend/src/assets/lang/en.json | 1 + 21 files changed, 144 insertions(+), 40 deletions(-) create mode 100644 dmp-backend/web/src/main/java/eu/eudat/exceptions/datamanagementplan/DMPWithDatasetsDeleteException.java delete mode 100644 dmp-backend/web/src/main/java/eu/eudat/exceptions/datamanagementplan/DMPWithDatasetsException.java create mode 100644 dmp-backend/web/src/main/java/eu/eudat/exceptions/project/ProjectWithDMPsDeleteException.java diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetDaoImpl.java index 2ee7fb626..5bcbb779f 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetDaoImpl.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetDaoImpl.java @@ -41,6 +41,7 @@ public class DatasetDaoImpl extends DatabaseAccess implements DatasetDa query.initSubQuery(String.class).where((builder, root) -> builder.equal(root.get("dmp").get("version"), query.subQueryMax((builder1, externalRoot, nestedRoot) -> builder1.equal(externalRoot.get("dmp").get("groupId"), nestedRoot.get("dmp").get("groupId")), Arrays.asList(new SelectionField(FieldSelectionType.COMPOSITE_FIELD, "dmp:version")), String.class))); if (criteria.getDmpIds() != null && !criteria.getDmpIds().isEmpty()) query.where((builder, root) -> root.get("dmp").get("id").in(criteria.getDmpIds())); + query.where(((builder, root) -> builder.notEqual(root.get("status"), Dataset.Status.DELETED.getValue()))); return query; } diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/entities/DataRepository.java b/dmp-backend/data/src/main/java/eu/eudat/data/entities/DataRepository.java index 86f9246b5..5519b55d0 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/entities/DataRepository.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/entities/DataRepository.java @@ -17,6 +17,8 @@ import java.util.UUID; public class DataRepository implements Serializable, DataEntity { @Id + @GeneratedValue + @GenericGenerator(name = "uuid2", strategy = "uuid2") @Column(name = "\"ID\"", updatable = false, nullable = false, columnDefinition = "BINARY(16)") private UUID id; diff --git a/dmp-backend/web/src/main/java/eu/eudat/configurations/dynamicproject/DynamicProjectConfigurationDevelImpl.java b/dmp-backend/web/src/main/java/eu/eudat/configurations/dynamicproject/DynamicProjectConfigurationDevelImpl.java index 62306332c..5b4f06be3 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/configurations/dynamicproject/DynamicProjectConfigurationDevelImpl.java +++ b/dmp-backend/web/src/main/java/eu/eudat/configurations/dynamicproject/DynamicProjectConfigurationDevelImpl.java @@ -48,7 +48,7 @@ public class DynamicProjectConfigurationDevelImpl implements DynamicProjectConfi JAXBContext jaxbContext = JAXBContext.newInstance(Configuration.class); Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); - is = new URL("file:///"+current + "/web/src/main/resources/ProjectConfiguration.xml").openStream(); + is = new URL("file:///"+current + "/dmp-backend/web/src/main/resources/ProjectConfiguration.xml").openStream(); this.configuration = (Configuration) jaxbUnmarshaller.unmarshal(is); } catch (Exception ex) { ex.printStackTrace(); diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/DMPs.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/DMPs.java index 8e7b07b6b..d9a4a2cd2 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/DMPs.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/DMPs.java @@ -7,6 +7,7 @@ import eu.eudat.data.dao.criteria.RequestItem; import eu.eudat.data.entities.DMP; import eu.eudat.data.query.items.item.dmp.DataManagementPlanCriteriaRequest; import eu.eudat.data.query.items.table.dmp.DataManagementPlanTableRequest; +import eu.eudat.exceptions.datamanagementplan.DMPWithDatasetsDeleteException; import eu.eudat.logic.managers.DataManagementPlanManager; import eu.eudat.logic.managers.DatasetManager; import eu.eudat.logic.services.ApiContext; @@ -109,8 +110,13 @@ public class DMPs extends BaseController { @RequestMapping(method = RequestMethod.DELETE, value = {"/delete/{id}"}, consumes = "application/json", produces = "application/json") public @ResponseBody ResponseEntity> delete(@PathVariable UUID id, Principal principal) { - DataManagementPlanManager.delete(this.getApiContext(), id); - return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.SUCCESS_MESSAGE).message("Successfully Deleted Dataset")); + try{ + DataManagementPlanManager.delete(this.getApiContext(), id); + return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.SUCCESS_MESSAGE).message("Successfully Deleted Datamanagement Plan")); + }catch (DMPWithDatasetsDeleteException exception){ + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseItem().status(ApiMessageCode.ERROR_MESSAGE).message(exception.getMessage())); + } + } @RequestMapping(method = RequestMethod.POST, value = {"/dynamic"}, consumes = "application/json", produces = "application/json") diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/DatasetWizardController.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/DatasetWizardController.java index 1e156e2f5..cedcca1f7 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/DatasetWizardController.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/DatasetWizardController.java @@ -1,11 +1,9 @@ package eu.eudat.controllers; -import eu.eudat.data.entities.DMP; import eu.eudat.data.entities.Dataset; import eu.eudat.data.query.items.item.dataset.DatasetWizardAutocompleteRequest; import eu.eudat.data.query.items.item.datasetprofile.DatasetProfileWizardAutocompleteRequest; import eu.eudat.exceptions.datasetwizard.DatasetWizardCannotUnlockException; -import eu.eudat.logic.managers.DataManagementPlanManager; import eu.eudat.logic.managers.DatasetManager; import eu.eudat.logic.managers.DatasetWizardManager; import eu.eudat.logic.security.claims.ClaimedAuthorities; @@ -28,7 +26,10 @@ import org.springframework.web.bind.annotation.*; import javax.activation.MimetypesFileTypeMap; import javax.transaction.Transactional; -import java.io.*; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; import java.util.List; import java.util.UUID; @@ -125,8 +126,16 @@ public class DatasetWizardController extends BaseController { try { new DatasetWizardManager().unlock(this.getApiContext(), id); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.SUCCESS_MESSAGE).message("Unlocked")); - }catch (DatasetWizardCannotUnlockException datasetWizardCannotUnlockException ){ + } catch (DatasetWizardCannotUnlockException datasetWizardCannotUnlockException) { return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseItem().status(ApiMessageCode.ERROR_MESSAGE).message(datasetWizardCannotUnlockException.getMessage())); } } + + @Transactional + @RequestMapping(method = RequestMethod.DELETE, value = {"/delete/{id}"}, produces = "application/json") + public @ResponseBody + ResponseEntity> delete(@PathVariable(value = "id") UUID id, Principal principal) throws Exception { + new DatasetWizardManager().delete(this.getApiContext(), id); + return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.SUCCESS_MESSAGE).message("Deleted")); + } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/Projects.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/Projects.java index dded1520e..2265d58f9 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/Projects.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/Projects.java @@ -3,6 +3,7 @@ package eu.eudat.controllers; import eu.eudat.data.entities.Project; import eu.eudat.data.query.items.item.project.ProjectCriteriaRequest; import eu.eudat.data.query.items.table.project.ProjectTableRequest; +import eu.eudat.exceptions.project.ProjectWithDMPsDeleteException; import eu.eudat.logic.managers.ProjectManager; import eu.eudat.logic.proxy.config.exceptions.HugeResultSet; import eu.eudat.logic.proxy.config.exceptions.NoURLFound; @@ -25,8 +26,8 @@ import java.io.IOException; import java.text.ParseException; import java.util.List; import java.util.Map; +import java.util.UUID; -import static eu.eudat.types.Authorities.ADMIN; import static eu.eudat.types.Authorities.ANONYMOUS; @@ -95,5 +96,16 @@ public class Projects extends BaseController { return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().payload(projectsExternalSourcesModel).status(ApiMessageCode.SUCCESS_MESSAGE)); } + @Transactional + @RequestMapping(method = RequestMethod.DELETE, value = {"/delete/{id}"}, produces = "application/json") + public @ResponseBody + ResponseEntity> delete(@PathVariable(value = "id") UUID id, Principal principal) throws Exception { + try{ + new ProjectManager().delete(this.getApiContext(), id); + return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.SUCCESS_MESSAGE).message("Unlocked")); + }catch (ProjectWithDMPsDeleteException exception){ + return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.ERROR_MESSAGE).message(exception.getMessage())); + } + } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/exceptions/datamanagementplan/DMPWithDatasetsDeleteException.java b/dmp-backend/web/src/main/java/eu/eudat/exceptions/datamanagementplan/DMPWithDatasetsDeleteException.java new file mode 100644 index 000000000..4bf9c7dde --- /dev/null +++ b/dmp-backend/web/src/main/java/eu/eudat/exceptions/datamanagementplan/DMPWithDatasetsDeleteException.java @@ -0,0 +1,22 @@ +package eu.eudat.exceptions.datamanagementplan; + +/** + * Created by ikalyvas on 2/5/2018. + */ +public class DMPWithDatasetsDeleteException extends RuntimeException { + public DMPWithDatasetsDeleteException() { + super(); + } + + public DMPWithDatasetsDeleteException(String message, Throwable cause) { + super(message, cause); + } + + public DMPWithDatasetsDeleteException(String message) { + super(message); + } + + public DMPWithDatasetsDeleteException(Throwable cause) { + super(cause); + } +} diff --git a/dmp-backend/web/src/main/java/eu/eudat/exceptions/datamanagementplan/DMPWithDatasetsException.java b/dmp-backend/web/src/main/java/eu/eudat/exceptions/datamanagementplan/DMPWithDatasetsException.java deleted file mode 100644 index 3fec6c3da..000000000 --- a/dmp-backend/web/src/main/java/eu/eudat/exceptions/datamanagementplan/DMPWithDatasetsException.java +++ /dev/null @@ -1,22 +0,0 @@ -package eu.eudat.exceptions.datamanagementplan; - -/** - * Created by ikalyvas on 2/5/2018. - */ -public class DMPWithDatasetsException extends RuntimeException { - public DMPWithDatasetsException() { - super(); - } - - public DMPWithDatasetsException(String message, Throwable cause) { - super(message, cause); - } - - public DMPWithDatasetsException(String message) { - super(message); - } - - public DMPWithDatasetsException(Throwable cause) { - super(cause); - } -} diff --git a/dmp-backend/web/src/main/java/eu/eudat/exceptions/project/ProjectWithDMPsDeleteException.java b/dmp-backend/web/src/main/java/eu/eudat/exceptions/project/ProjectWithDMPsDeleteException.java new file mode 100644 index 000000000..863e61dd9 --- /dev/null +++ b/dmp-backend/web/src/main/java/eu/eudat/exceptions/project/ProjectWithDMPsDeleteException.java @@ -0,0 +1,22 @@ +package eu.eudat.exceptions.project; + +/** + * Created by ikalyvas on 11/30/2018. + */ +public class ProjectWithDMPsDeleteException extends RuntimeException { + public ProjectWithDMPsDeleteException() { + super(); + } + + public ProjectWithDMPsDeleteException(String message, Throwable cause) { + super(message, cause); + } + + public ProjectWithDMPsDeleteException(String message) { + super(message); + } + + public ProjectWithDMPsDeleteException(Throwable cause) { + super(cause); + } +} \ No newline at end of file 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 54816ac81..8de44dc13 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 @@ -10,7 +10,7 @@ import eu.eudat.data.dao.entities.*; import eu.eudat.data.entities.*; import eu.eudat.data.query.items.item.dmp.DataManagementPlanCriteriaRequest; import eu.eudat.data.query.items.table.dmp.DataManagementPlanTableRequest; -import eu.eudat.exceptions.datamanagementplan.DMPWithDatasetsException; +import eu.eudat.exceptions.datamanagementplan.DMPWithDatasetsDeleteException; import eu.eudat.exceptions.security.UnauthorisedException; import eu.eudat.logic.builders.entity.UserInfoBuilder; import eu.eudat.logic.services.ApiContext; @@ -263,10 +263,10 @@ public class DataManagementPlanManager { copyDatasets(newDmp, apiContext.getOperationsContext().getDatabaseRepository().getDatasetDao()); } - public static void delete(ApiContext apiContext, UUID uuid) throws DMPWithDatasetsException { + public static void delete(ApiContext apiContext, UUID uuid) throws DMPWithDatasetsDeleteException { DMP oldDmp = apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().find(uuid); if (oldDmp.getDataset().size() > 0) - throw new DMPWithDatasetsException("You cannot Remove Datamanagement Plan with Datasets"); + throw new DMPWithDatasetsDeleteException("You cannot Remove Datamanagement Plan with Datasets"); oldDmp.setStatus(DMP.DMPStatus.DELETED.getValue()); apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().createOrUpdate(oldDmp); } 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 14db4bdff..ef3a4cc95 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 @@ -46,4 +46,10 @@ public class DatasetWizardManager { apiContext.getOperationsContext().getDatabaseRepository().getDatasetDao().createOrUpdate(dataset); return; } + + public void delete(ApiContext apiContext, UUID uuid) { + Dataset oldDataset = apiContext.getOperationsContext().getDatabaseRepository().getDatasetDao().find(uuid); + oldDataset.setStatus(DMP.DMPStatus.DELETED.getValue()); + apiContext.getOperationsContext().getDatabaseRepository().getDatasetDao().createOrUpdate(oldDataset); + } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/ProjectManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/ProjectManager.java index 08f15cbf1..48b2695e7 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/ProjectManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/ProjectManager.java @@ -1,5 +1,6 @@ package eu.eudat.logic.managers; +import eu.eudat.exceptions.project.ProjectWithDMPsDeleteException; import eu.eudat.logic.builders.entity.ContentBuilder; import eu.eudat.logic.builders.model.models.ProjectBuilder; import eu.eudat.data.dao.entities.ContentDao; @@ -125,4 +126,12 @@ public class ProjectManager { projectEntity.setCreationUser(userInfoRepository.find(principal.getId())); projectRepository.createOrUpdate(projectEntity); } + + public void delete(ApiContext apiContext, UUID uuid) { + eu.eudat.data.entities.Project oldProject = apiContext.getOperationsContext().getDatabaseRepository().getProjectDao().find(uuid); + if (oldProject.getDmps().size() > 0) + throw new ProjectWithDMPsDeleteException("You cannot Remove Projects with DMPs"); + oldProject.setStatus(DMP.DMPStatus.DELETED.getValue()); + apiContext.getOperationsContext().getDatabaseRepository().getProjectDao().createOrUpdate(oldProject); + } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/config/configloaders/DevelConfigLoader.java b/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/config/configloaders/DevelConfigLoader.java index 4af836fbd..5873073e2 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/config/configloaders/DevelConfigLoader.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/config/configloaders/DevelConfigLoader.java @@ -31,7 +31,7 @@ public class DevelConfigLoader implements ConfigLoader { JAXBContext jaxbContext = JAXBContext.newInstance(ExternalUrls.class); Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); - is = new URL("file:///"+current+"/web/src/main/resources/ExternalUrls.xml").openStream(); + is = new URL("file:///"+current+"/dmp-backend/web/src/main/resources/ExternalUrls.xml").openStream(); externalUrls = (ExternalUrls) jaxbUnmarshaller.unmarshal(is); } catch (Exception ex) { diff --git a/dmp-frontend/src/app/datasets/dataset-wizard/dataset-wizard.component.html b/dmp-frontend/src/app/datasets/dataset-wizard/dataset-wizard.component.html index 8b836ed92..42b50b304 100644 --- a/dmp-frontend/src/app/datasets/dataset-wizard/dataset-wizard.component.html +++ b/dmp-frontend/src/app/datasets/dataset-wizard/dataset-wizard.component.html @@ -15,6 +15,8 @@
+