diff --git a/dspace-api/src/main/resources/Messages.properties b/dspace-api/src/main/resources/Messages.properties index 0583fb493c..b537819c06 100644 --- a/dspace-api/src/main/resources/Messages.properties +++ b/dspace-api/src/main/resources/Messages.properties @@ -119,3 +119,4 @@ org.dspace.app.rest.exception.RESTEmptyWorkflowGroupException.message = Refused workflow group {1}. Delete the tasks and group first if you want to remove this user. org.dspace.app.rest.exception.EPersonNameNotProvidedException.message = The eperson.firstname and eperson.lastname values need to be filled in org.dspace.app.rest.exception.GroupNameNotProvidedException.message = Cannot create group, no group name is provided +org.dspace.app.rest.exception.GroupHasPendingWorkflowTasksException.message = Cannot delete group, the associated workflow role still has pending tasks diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/exception/DSpaceApiExceptionControllerAdvice.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/exception/DSpaceApiExceptionControllerAdvice.java index d57e637047..8e7fdc23e4 100644 --- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/exception/DSpaceApiExceptionControllerAdvice.java +++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/exception/DSpaceApiExceptionControllerAdvice.java @@ -133,6 +133,7 @@ public class DSpaceApiExceptionControllerAdvice extends ResponseEntityExceptionH RESTEmptyWorkflowGroupException.class, EPersonNameNotProvidedException.class, GroupNameNotProvidedException.class, + GroupHasPendingWorkflowTasksException.class, }) protected void handleCustomUnprocessableEntityException(HttpServletRequest request, HttpServletResponse response, TranslatableException ex) throws IOException { diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/exception/GroupHasPendingWorkflowTasksException.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/exception/GroupHasPendingWorkflowTasksException.java new file mode 100644 index 0000000000..cd50ce19bf --- /dev/null +++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/exception/GroupHasPendingWorkflowTasksException.java @@ -0,0 +1,36 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ + +package org.dspace.app.rest.exception; + +import org.dspace.core.I18nUtil; + +/** + *

Extend {@link UnprocessableEntityException} to provide a specific error message + * in the REST response. The error message is added to the response in + * {@link DSpaceApiExceptionControllerAdvice#handleCustomUnprocessableEntityException}, + * hence it should not contain sensitive or security-compromising info.

+ * + */ +public class GroupHasPendingWorkflowTasksException + extends UnprocessableEntityException implements TranslatableException { + public static final String MESSAGE_KEY = + "org.dspace.app.rest.exception.GroupHasPendingTasksException.message"; + + public GroupHasPendingWorkflowTasksException() { + super(I18nUtil.getMessage(MESSAGE_KEY)); + } + + public GroupHasPendingWorkflowTasksException(Throwable cause) { + super(I18nUtil.getMessage(MESSAGE_KEY), cause); + } + + public String getMessageKey() { + return MESSAGE_KEY; + } +} diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/CollectionRestRepository.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/CollectionRestRepository.java index 4a769709d3..ba3163a444 100644 --- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/CollectionRestRepository.java +++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/CollectionRestRepository.java @@ -24,6 +24,7 @@ import org.apache.logging.log4j.Logger; import org.dspace.app.rest.Parameter; import org.dspace.app.rest.SearchRestMethod; import org.dspace.app.rest.exception.DSpaceBadRequestException; +import org.dspace.app.rest.exception.GroupHasPendingWorkflowTasksException; import org.dspace.app.rest.exception.RepositoryMethodNotImplementedException; import org.dspace.app.rest.exception.UnprocessableEntityException; import org.dspace.app.rest.model.BitstreamRest; @@ -695,8 +696,8 @@ public class CollectionRestRepository extends DSpaceObjectRestRepository