diff --git a/TaskService.java b/TaskService.java deleted file mode 100644 index 812288f66..000000000 --- a/TaskService.java +++ /dev/null @@ -1,993 +0,0 @@ -package pro.taskana.task.api; - -import java.time.Instant; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import pro.taskana.classification.api.exceptions.ClassificationNotFoundException; -import pro.taskana.classification.api.models.Classification; -import pro.taskana.common.api.BulkOperationResults; -import pro.taskana.common.api.TaskanaRole; -import pro.taskana.common.api.exceptions.ConcurrencyException; -import pro.taskana.common.api.exceptions.InvalidArgumentException; -import pro.taskana.common.api.exceptions.NotAuthorizedException; -import pro.taskana.common.api.exceptions.TaskanaException; -import pro.taskana.spi.routing.api.TaskRoutingProvider; -import pro.taskana.task.api.exceptions.AttachmentPersistenceException; -import pro.taskana.task.api.exceptions.InvalidCallbackStateException; -import pro.taskana.task.api.exceptions.InvalidOwnerException; -import pro.taskana.task.api.exceptions.InvalidTaskStateException; -import pro.taskana.task.api.exceptions.NotAuthorizedOnTaskCommentException; -import pro.taskana.task.api.exceptions.ObjectReferencePersistenceException; -import pro.taskana.task.api.exceptions.TaskAlreadyExistException; -import pro.taskana.task.api.exceptions.TaskCommentNotFoundException; -import pro.taskana.task.api.exceptions.TaskNotFoundException; -import pro.taskana.task.api.models.Attachment; -import pro.taskana.task.api.models.ObjectReference; -import pro.taskana.task.api.models.Task; -import pro.taskana.task.api.models.TaskComment; -import pro.taskana.workbasket.api.WorkbasketPermission; -import pro.taskana.workbasket.api.exceptions.NotAuthorizedOnWorkbasketException; -import pro.taskana.workbasket.api.exceptions.WorkbasketNotFoundException; -import pro.taskana.workbasket.api.models.Workbasket; - -/** The TaskService manages all operations on {@linkplain Task Tasks}. */ -public interface TaskService { - - // region Task - - // region CREATE - - /** - * Instantiates a non-persistent/non-inserted {@linkplain Task}. - * - *

Since a {@linkplain Task} doesn't allow setting a {@linkplain Task#getWorkbasketSummary() - * workbasketSummary}, please either provide an implementation of the {@linkplain - * TaskRoutingProvider} or use the referenced methods to create a {@linkplain Task} within a - * specific {@linkplain Workbasket}. - * - * @return the instantiated {@linkplain Task} - * @see #newTask(String) - * @see #newTask(String, String) - */ - Task newTask(); - - /** - * Instantiates a non-persistent/non-inserted {@linkplain Task}. - * - * @param workbasketId the {@linkplain Workbasket#getId() id} of the {@linkplain Workbasket} to - * which the {@linkplain Task} belongs - * @return the instantiated {@linkplain Task} - * @see #newTask() - * @see #newTask(String, String) - */ - Task newTask(String workbasketId); - - /** - * Instantiates a non-persistent/non-inserted {@linkplain Task}. - * - * @param workbasketKey the {@linkplain Workbasket#getKey() key} of the {@linkplain Workbasket} to - * which the {@linkplain Task} belongs - * @param domain the {@linkplain Workbasket#getDomain() domain} of the {@linkplain Workbasket} to - * which the {@linkplain Task} belongs - * @return the instantiated {@linkplain Task} - * @see #newTask() - * @see #newTask(String) - */ - Task newTask(String workbasketKey, String domain); - - /** - * Inserts a {@linkplain Task} that doesn't exist in the database yet. - * - *

If the {@linkplain Task#getWorkbasketSummary() workbasketSummary} of the given {@linkplain - * Task} is NULL, TaskService will call the {@linkplain TaskRoutingProvider} to determine a - * {@linkplain Workbasket} for the {@linkplain Task}. If the {@linkplain TaskRoutingProvider} is - * not active, e.g. because no {@linkplain TaskRoutingProvider} is registered, or the {@linkplain - * TaskRoutingProvider} doesn't find a {@linkplain Workbasket}, the {@linkplain Task} will not be - * inserted. - * - *

The default values of the created {@linkplain Task} are: - * - *

- * - * @param taskToCreate the transient {@linkplain Task} to be inserted - * @return the created and inserted {@linkplain Task} - * @throws TaskAlreadyExistException if the {@linkplain Task} already exists - * @throws NotAuthorizedOnWorkbasketException if the current user has no {@linkplain - * WorkbasketPermission#APPEND} for the {@linkplain Workbasket} the {@linkplain Task} is in - * @throws WorkbasketNotFoundException if the {@linkplain Workbasket} referenced by the - * {@linkplain Task#getWorkbasketSummary() workbasketSummary} of the {@linkplain Task} isn't - * found - * @throws ClassificationNotFoundException if the {@linkplain Classification} referenced by - * {@linkplain Task#getClassificationSummary() classificationSummary} of the {@linkplain Task} - * isn't found - * @throws InvalidArgumentException if the {@linkplain Task#getPrimaryObjRef() primaryObjRef} is - * invalid - * @throws AttachmentPersistenceException if an {@linkplain Attachment} with the same {@linkplain - * Attachment#getId() id} was added to the {@linkplain Task} multiple times without using - * {@linkplain Task#addAttachment(Attachment)} - * @throws ObjectReferencePersistenceException if an {@linkplain ObjectReference} with the same - * {@linkplain ObjectReference#getId() id} was added to the {@linkplain Task} multiple times - * without using {@linkplain Task#addSecondaryObjectReference(ObjectReference)} - */ - Task createTask(Task taskToCreate) - throws WorkbasketNotFoundException, - ClassificationNotFoundException, - TaskAlreadyExistException, - InvalidArgumentException, - AttachmentPersistenceException, - ObjectReferencePersistenceException, - NotAuthorizedOnWorkbasketException; - - // endregion - - // region READ - - /** - * Fetches a {@linkplain Task} from the database by the specified {@linkplain Task#getId() id}. - * - * @param taskId the {@linkplain Task#getId() id} of the {@linkplain Task} - * @return the {@linkplain Task} with the specified taskId - * @throws TaskNotFoundException if the {@linkplain Task} with taskId wasn't found - * @throws NotAuthorizedOnWorkbasketException if the current user has no {@linkplain - * WorkbasketPermission#READ} for the {@linkplain Workbasket} the {@linkplain Task} is in - */ - Task getTask(String taskId) throws TaskNotFoundException, NotAuthorizedOnWorkbasketException; - - // endregion - - // region UPDATE - - /** - * Claim an existing {@linkplain Task} for the current user. - * - * @param taskId the {@linkplain Task#getId() id} of the {@linkplain Task} to be claimed - * @return the claimed {@linkplain Task} - * @throws TaskNotFoundException if the {@linkplain Task} with taskId was not found - * @throws InvalidTaskStateException if the {@linkplain Task#getState() state} of the {@linkplain - * Task} with taskId isn't {@linkplain TaskState#READY} - * @throws InvalidOwnerException if the {@linkplain Task} with taskId is claimed by some else - * @throws NotAuthorizedOnWorkbasketException if the current user has no {@linkplain - * WorkbasketPermission#READ} for the {@linkplain Workbasket} the {@linkplain Task} is in - */ - Task claim(String taskId) - throws TaskNotFoundException, - InvalidOwnerException, - NotAuthorizedOnWorkbasketException, - InvalidTaskStateException; - - /** - * Claim an existing {@linkplain Task} for the current user even if it is already claimed by - * someone else. - * - * @param taskId the {@linkplain Task#getId() id} of the {@linkplain Task} to be claimed - * @return the claimed {@linkplain Task} - * @throws TaskNotFoundException if the {@linkplain Task} with taskId was not found - * @throws InvalidTaskStateException if the state of Task with taskId is in {@linkplain - * TaskState#END_STATES} - * @throws InvalidOwnerException cannot be thrown - * @throws NotAuthorizedOnWorkbasketException if the current user has no {@linkplain - * WorkbasketPermission#READ} for the {@linkplain Workbasket} the {@linkplain Task} is in - */ - Task forceClaim(String taskId) - throws TaskNotFoundException, - InvalidOwnerException, - NotAuthorizedOnWorkbasketException, - InvalidTaskStateException; - - /** - * Selects and claims the first {@linkplain Task} which is returned by the {@linkplain TaskQuery}. - * - * @param taskQuery the {@linkplain TaskQuery} - * @return the {@linkplain Task} that got selected and claimed - * @throws InvalidOwnerException if the {@linkplain Task} is claimed by someone else - * @throws NotAuthorizedOnWorkbasketException if the current user has no {@linkplain - * WorkbasketPermission#READ} for the {@linkplain Workbasket} the {@linkplain Task} is in - */ - Optional selectAndClaim(TaskQuery taskQuery) - throws InvalidOwnerException, NotAuthorizedOnWorkbasketException; - - /** - * Cancel the claim of an existing {@linkplain Task} if it was claimed by the current user before. - * - * @param taskId the {@linkplain Task#getId() id} of the {@linkplain Task} which should be - * unclaimed - * @return the unclaimed {@linkplain Task} - * @throws TaskNotFoundException if the {@linkplain Task} with taskId was not found - * @throws InvalidTaskStateException if the {@linkplain Task} is already in one of the {@linkplain - * TaskState#END_STATES} - * @throws InvalidOwnerException if the {@linkplain Task} is claimed by another user - * @throws NotAuthorizedOnWorkbasketException if the current user has no {@linkplain - * WorkbasketPermission#READ} for the {@linkplain Workbasket} the {@linkplain Task} is in - */ - Task cancelClaim(String taskId) - throws TaskNotFoundException, - InvalidOwnerException, - NotAuthorizedOnWorkbasketException, - InvalidTaskStateException; - - /** - * Cancel the claim of an existing {@linkplain Task} even if it was claimed by another user. - * - * @param taskId the {@linkplain Task#getId() id} of the {@linkplain Task} which should be - * unclaimed - * @return the unclaimed {@linkplain Task} - * @throws TaskNotFoundException if the {@linkplain Task} with taskId was not found - * @throws InvalidTaskStateException if the {@linkplain Task} is already in one of the {@linkplain - * TaskState#END_STATES} - * @throws InvalidOwnerException cannot be thrown - * @throws NotAuthorizedOnWorkbasketException if the current user has no {@linkplain - * WorkbasketPermission#READ} for the {@linkplain Workbasket} the {@linkplain Task} is in - */ - Task forceCancelClaim(String taskId) - throws TaskNotFoundException, - InvalidOwnerException, - InvalidTaskStateException { - try { - return this.cancelClaim(taskId, true); - } catch (NotAuthorizedOnWorkbasketException e) { - throw new SystemException( - "this should not have happened. You've discovered a new bug! :D", e); - } - } - - /** - * Request review for an existing {@linkplain Task} that is in {@linkplain TaskState#CLAIMED}. - * - * @param taskId the {@linkplain Task#getId() id} of the specified {@linkplain Task} - * @return the {@linkplain Task} after a review has been requested - * @throws InvalidTaskStateException if the {@linkplain Task#getState() state} of the {@linkplain - * Task} with taskId is not in {@linkplain TaskState#CLAIMED} - * @throws TaskNotFoundException if the {@linkplain Task} with taskId wasn't found - * @throws InvalidOwnerException if the {@linkplain Task} is claimed by another user - * @throws NotAuthorizedOnWorkbasketException if the current user has no {@linkplain - * WorkbasketPermission#READ} for the {@linkplain Workbasket} the {@linkplain Task} is in - */ - Task requestReview(String taskId) - throws InvalidTaskStateException, - TaskNotFoundException, - InvalidOwnerException, - NotAuthorizedOnWorkbasketException; - - /** - * Request review for an existing {@linkplain Task} even if the current user is not the - * {@linkplain Task#getOwner() owner} or the Task is not in {@linkplain TaskState#CLAIMED} yet. - * - * @param taskId the {@linkplain Task#getId() id} of the specified {@linkplain Task} - * @return the {@linkplain Task} after a review has been requested - * @throws InvalidTaskStateException if the {@linkplain Task#getState() state} of the {@linkplain - * Task} with taskId is one of the {@linkplain TaskState#END_STATES} - * @throws TaskNotFoundException if the {@linkplain Task} with taskId wasn't found - * @throws InvalidOwnerException cannot be thrown - * @throws NotAuthorizedOnWorkbasketException if the current user has no {@linkplain - * WorkbasketPermission#READ} for the {@linkplain Workbasket} the {@linkplain Task} is in - */ - Task forceRequestReview(String taskId) - throws InvalidTaskStateException, - TaskNotFoundException, - InvalidOwnerException, - NotAuthorizedOnWorkbasketException; - - /** - * Request changes for an existing {@linkplain Task} that is in {@linkplain TaskState#IN_REVIEW}. - * The {@linkplain TaskState} is changed to {@linkplain TaskState#READY} after changes have been - * requested. - * - * @param taskId the {@linkplain Task#getId() id} of the specified {@linkplain Task} - * @return the {@linkplain Task} after changes have been requested - * @throws InvalidTaskStateException if the {@linkplain Task#getState() state} of the {@linkplain - * Task} with taskId is not in {@linkplain TaskState#IN_REVIEW} - * @throws TaskNotFoundException if the {@linkplain Task} with taskId wasn't found - * @throws InvalidOwnerException if the {@linkplain Task} is claimed by another user - * @throws NotAuthorizedOnWorkbasketException if the current user has no {@linkplain - * WorkbasketPermission#READ} for the {@linkplain Workbasket} the {@linkplain Task} is in - */ - Task requestChanges(String taskId) - throws InvalidTaskStateException, - TaskNotFoundException, - InvalidOwnerException, - NotAuthorizedOnWorkbasketException; - - /** - * Request changes for an existing {@linkplain Task} even if the current user is not the - * {@linkplain Task#getOwner() owner} or the Task is not in {@linkplain TaskState#IN_REVIEW} yet. - * The {@linkplain TaskState} is changed to {@linkplain TaskState#READY} after changes have been - * requested. - * - * @param taskId the {@linkplain Task#getId() id} of the specified {@linkplain Task} - * @return the {@linkplain Task} after changes have been requested - * @throws InvalidTaskStateException if the {@linkplain Task#getState() state} of the {@linkplain - * Task} with taskId is one of the {@linkplain TaskState#END_STATES} - * @throws TaskNotFoundException if the {@linkplain Task} with taskId wasn't found - * @throws InvalidOwnerException cannot be thrown - * @throws NotAuthorizedOnWorkbasketException if the current user has no {@linkplain - * WorkbasketPermission#READ} for the {@linkplain Workbasket} the {@linkplain Task} is in - */ - Task forceRequestChanges(String taskId) - throws InvalidTaskStateException, - TaskNotFoundException, - InvalidOwnerException, - NotAuthorizedOnWorkbasketException; - - /** - * Complete a claimed {@linkplain Task} as {@linkplain Task#getOwner() owner} or {@linkplain - * TaskanaRole#ADMIN} and update {@linkplain Task#getState() state} and timestamps. - * - *

If the {@linkplain Task} is already completed, the {@linkplain Task} is returned unchanged. - * - * @param taskId the {@linkplain Task#getId() id} of the {@linkplain Task} which should be - * completed - * @return the completed {@linkplain Task} - * @throws InvalidTaskStateException if the {@linkplain Task#getState() state} of the {@linkplain - * Task} with taskId is neither {@linkplain TaskState#CLAIMED} nor {@linkplain - * TaskState#COMPLETED} - * @throws TaskNotFoundException if the {@linkplain Task} with taskId wasn't found - * @throws InvalidOwnerException if current user isn't the {@linkplain Task#getOwner() owner} of - * the {@linkplain Task} or {@linkplain TaskanaRole#ADMIN} - * @throws NotAuthorizedOnWorkbasketException if the current user has no {@linkplain - * WorkbasketPermission#READ} for the {@linkplain Workbasket} the {@linkplain Task} is in - */ - Task completeTask(String taskId) - throws TaskNotFoundException, - InvalidOwnerException, - NotAuthorizedOnWorkbasketException, - InvalidTaskStateException; - - /** - * Completes a {@linkplain Task} and updates {@linkplain Task#getState() state} and timestamps in - * every case if the {@linkplain Task} exists. - * - *

If the {@linkplain Task} is already completed, the {@linkplain Task} is returned unchanged. - * - * @param taskId the {@linkplain Task#getId() id} of the {@linkplain Task} which should be - * completed - * @return the updated {@linkplain Task} after completion - * @throws InvalidTaskStateException if the {@linkplain Task#getState() state} of the {@linkplain - * Task} with taskId is with taskId is {@linkplain TaskState#TERMINATED} or {@linkplain - * TaskState#CANCELLED} - * @throws TaskNotFoundException if the {@linkplain Task} with taskId wasn't found - * @throws InvalidOwnerException if current user isn't the {@linkplain Task#getOwner() owner} of - * the {@linkplain Task} or {@linkplain TaskanaRole#ADMIN} - * @throws NotAuthorizedOnWorkbasketException if the current user has no {@linkplain - * WorkbasketPermission#READ} for the {@linkplain Workbasket} the {@linkplain Task} is in - */ - Task forceCompleteTask(String taskId) - throws TaskNotFoundException, - InvalidOwnerException, - NotAuthorizedOnWorkbasketException, - InvalidTaskStateException; - - /** - * Completes a List of {@linkplain Task Tasks}. - * - * @param taskIds {@linkplain Task#getId() ids} of the {@linkplain Task Tasks} which should be - * completed - * @return the result of the operations with each {@linkplain Task#getId() id} and Exception for - * each failed completion - * @throws InvalidArgumentException If the taskIds parameter is NULL - */ - BulkOperationResults completeTasks(List taskIds) - throws InvalidArgumentException; - - /** - * Completes each existing {@linkplain Task} in the given List in every case, independent of the - * {@linkplain Task#getOwner() owner} or {@linkplain Task#getState() state} of the {@linkplain - * Task}. - * - *

If the {@linkplain Task} is already {@linkplain TaskState#COMPLETED completed}, the - * {@linkplain Task} stays unchanged. - * - * @param taskIds {@linkplain Task#getId() id} of the {@linkplain Task Tasks} which should be - * completed - * @return the result of the operations with {@linkplain Task#getId() ids} and Exception for each - * failed completion - * @throws InvalidArgumentException If the taskIds parameter is NULL - */ - BulkOperationResults forceCompleteTasks(List taskIds) - throws InvalidArgumentException; - - /** - * Cancels the {@linkplain Task} with the given {@linkplain Task#getId() id}. - * - *

Cancellation means a {@linkplain Task} is obsolete from a business perspective and doesn't - * need to be completed anymore. - * - * @param taskId the {@linkplain Task#getId() id} of the {@linkplain Task} to cancel - * @return the updated {@linkplain Task} - * @throws TaskNotFoundException if the {@linkplain Task} with taskId wasn't found - * @throws InvalidTaskStateException if the {@linkplain Task} isn't in {@linkplain - * TaskState#READY} or {@linkplain TaskState#CLAIMED} - * @throws NotAuthorizedOnWorkbasketException if the current user has no {@linkplain - * WorkbasketPermission#READ} for the {@linkplain Workbasket} the {@linkplain Task} is in - */ - Task cancelTask(String taskId) - throws TaskNotFoundException, NotAuthorizedOnWorkbasketException, InvalidTaskStateException; - - /** - * Terminates a {@linkplain Task}. Termination is an administrative action to complete a - * {@linkplain Task}. - * - *

This is typically done by administration to correct any technical issue. - * - * @param taskId the {@linkplain Task#getId() id} of the {@linkplain Task} to terminate - * @return the updated {@linkplain Task} - * @throws TaskNotFoundException if the {@linkplain Task} with taskId wasn't found - * @throws InvalidTaskStateException if the {@linkplain Task} isn't in {@linkplain - * TaskState#READY} or {@linkplain TaskState#CLAIMED} - * @throws NotAuthorizedException if the current user isn't member of {@linkplain - * TaskanaRole#ADMIN} or {@linkplain TaskanaRole#TASK_ADMIN} - * @throws NotAuthorizedOnWorkbasketException If the current user doesn't have the correct - * permission - */ - Task terminateTask(String taskId) - throws TaskNotFoundException, - NotAuthorizedException, - NotAuthorizedOnWorkbasketException, - InvalidTaskStateException; - - /** - * Transfers a {@linkplain Task} to another {@linkplain Workbasket} while always setting - * {@linkplain Task#isTransferred() isTransferred} to true. - * - * @see #transfer(String, String, boolean) - */ - @SuppressWarnings("checkstyle:JavadocMethod") - default Task transfer(String taskId, String destinationWorkbasketId) - throws TaskNotFoundException, - WorkbasketNotFoundException, - NotAuthorizedOnWorkbasketException, - InvalidTaskStateException { - return transfer(taskId, destinationWorkbasketId, true); - } - - /** - * Transfers a {@linkplain Task} to another {@linkplain Workbasket}. - * - *

The transfer resets {@linkplain Task#isRead() isRead} and sets {@linkplain - * Task#isTransferred() isTransferred} if setTransferFlag is true. - * - * @param taskId the {@linkplain Task#getId() id} of the {@linkplain Task} which should be - * transferred - * @param destinationWorkbasketId the {@linkplain Workbasket#getId() id} of the target {@linkplain - * Workbasket} - * @param setTransferFlag controls whether to set {@linkplain Task#isTransferred() isTransferred} - * to true or not - * @return the transferred {@linkplain Task} - * @throws TaskNotFoundException if the {@linkplain Task} with taskId wasn't found - * @throws WorkbasketNotFoundException if the target {@linkplain Workbasket} was not found - * @throws NotAuthorizedOnWorkbasketException if the current user has no {@linkplain - * WorkbasketPermission#READ} for the source {@linkplain Workbasket} or no {@linkplain - * WorkbasketPermission#TRANSFER} for the target {@linkplain Workbasket} - * @throws InvalidTaskStateException if the {@linkplain Task} is in one of the {@linkplain - * TaskState#END_STATES} - */ - Task transfer(String taskId, String destinationWorkbasketId, boolean setTransferFlag) - throws TaskNotFoundException, - WorkbasketNotFoundException, - NotAuthorizedOnWorkbasketException, - InvalidTaskStateException; - - /** - * Transfers a {@linkplain Task} to another {@linkplain Workbasket} while always setting - * {@linkplain Task#isTransferred isTransferred} . - * - * @see #transfer(String, String, String, boolean) - */ - @SuppressWarnings("checkstyle:JavadocMethod") - default Task transfer(String taskId, String workbasketKey, String domain) - throws TaskNotFoundException, - WorkbasketNotFoundException, - NotAuthorizedOnWorkbasketException, - InvalidTaskStateException { - return transfer(taskId, workbasketKey, domain, true); - } - - /** - * Transfers a {@linkplain Task} to another {@linkplain Workbasket}. - * - *

The transfer resets {@linkplain Task#isRead() isRead} and sets {@linkplain - * Task#isTransferred() isTransferred} if setTransferFlag is true. - * - * @param taskId the {@linkplain Task#getId() id} of the {@linkplain Task} which should be - * transferred - * @param workbasketKey the {@linkplain Workbasket#getKey() key} of the target {@linkplain - * Workbasket} - * @param domain the {@linkplain Workbasket#getDomain() domain} of the target {@linkplain - * Workbasket} - * @param setTransferFlag controls whether to set {@linkplain Task#isTransferred() isTransferred} - * or not - * @return the transferred {@linkplain Task} - * @throws TaskNotFoundException if the {@linkplain Task} with taskId was not found - * @throws WorkbasketNotFoundException if the target {@linkplain Workbasket} was not found - * @throws NotAuthorizedOnWorkbasketException if the current user has no {@linkplain - * WorkbasketPermission#READ} for the source {@linkplain Workbasket} or no {@linkplain - * WorkbasketPermission#TRANSFER} for the target {@linkplain Workbasket} - * @throws InvalidTaskStateException if the {@linkplain Task} is in one of the {@linkplain - * TaskState#END_STATES} - */ - Task transfer(String taskId, String workbasketKey, String domain, boolean setTransferFlag) - throws TaskNotFoundException, - WorkbasketNotFoundException, - NotAuthorizedOnWorkbasketException, - InvalidTaskStateException; - - /** - * Transfers a List of {@linkplain Task Tasks} to another {@linkplain Workbasket} while always - * setting {@linkplain Task#isTransferred isTransferred} to true. - * - * @see #transferTasks(String, List, boolean) - */ - @SuppressWarnings("checkstyle:JavadocMethod") - default BulkOperationResults transferTasks( - String destinationWorkbasketId, List taskIds) - throws InvalidArgumentException, - WorkbasketNotFoundException, - NotAuthorizedOnWorkbasketException { - return transferTasks(destinationWorkbasketId, taskIds, true); - } - - /** - * Transfers a List of {@linkplain Task Tasks} to another {@linkplain Workbasket}. - * - *

The transfer resets {@linkplain Task#isRead() isRead} and sets {@linkplain - * Task#isTransferred() isTransferred} if setTransferFlag is true. Exceptions will be thrown if - * the caller got no {@linkplain WorkbasketPermission} on the target or if the target {@linkplain - * Workbasket} doesn't exist. Other Exceptions will be stored and returned in the end. - * - * @param destinationWorkbasketId {@linkplain Workbasket#getId() id} of the target {@linkplain - * Workbasket} - * @param taskIds List of source {@linkplain Task Tasks} which will be moved - * @param setTransferFlag controls whether to set {@linkplain Task#isTransferred() isTransferred} - * or not - * @return Bulkresult with {@linkplain Task#getId() ids} and Error for each failed transactions - * @throws NotAuthorizedOnWorkbasketException if the current user has no {@linkplain - * WorkbasketPermission#READ} for the source {@linkplain Workbasket} or no {@linkplain - * WorkbasketPermission#TRANSFER} for the target {@linkplain Workbasket} - * @throws InvalidArgumentException if the method parameters are empty or NULL - * @throws WorkbasketNotFoundException if the target {@linkplain Workbasket} can't be found - */ - BulkOperationResults transferTasks( - String destinationWorkbasketId, List taskIds, boolean setTransferFlag) - throws InvalidArgumentException, - WorkbasketNotFoundException, - NotAuthorizedOnWorkbasketException; - - /** - * Transfers a List of {@linkplain Task Tasks} to another {@linkplain Workbasket} while always - * setting {@linkplain Task#isTransferred() isTransferred} to true. - * - * @see #transferTasks(String, String, List, boolean) - */ - @SuppressWarnings("checkstyle:JavadocMethod") - default BulkOperationResults transferTasks( - String destinationWorkbasketKey, String destinationWorkbasketDomain, List taskIds) - throws InvalidArgumentException, - WorkbasketNotFoundException, - NotAuthorizedOnWorkbasketException { - return transferTasks(destinationWorkbasketKey, destinationWorkbasketDomain, taskIds, true); - } - - /** - * Transfers a List of {@linkplain Task Tasks} to another {@linkplain Workbasket}. - * - *

The transfer resets {@linkplain Task#isRead() isRead} and sets {@linkplain - * Task#isTransferred() isTransferred} if setTransferFlag is true. Exceptions will be thrown if - * the caller got no {@linkplain WorkbasketPermission} on the target {@linkplain Workbasket} or if - * it doesn't exist. Other Exceptions will be stored and returned in the end. - * - * @param destinationWorkbasketKey target {@linkplain Workbasket#getKey() key} - * @param destinationWorkbasketDomain target {@linkplain Workbasket#getDomain() domain} - * @param taskIds List of {@linkplain Task#getId() ids} of source {@linkplain Task Tasks} which - * will be moved - * @param setTransferFlag controls whether to set {@linkplain Task#isTransferred() isTransferred} - * or not - * @return BulkResult with {@linkplain Task#getId() ids} and Error for each failed transactions - * @throws NotAuthorizedOnWorkbasketException if the current user has no {@linkplain - * WorkbasketPermission#READ} for the source {@linkplain Workbasket} or no {@linkplain - * WorkbasketPermission#TRANSFER} for the target {@linkplain Workbasket} - * @throws InvalidArgumentException if the method parameters are empty or NULL - * @throws WorkbasketNotFoundException if the target {@linkplain Workbasket} can't be found - */ - BulkOperationResults transferTasks( - String destinationWorkbasketKey, - String destinationWorkbasketDomain, - List taskIds, - boolean setTransferFlag) - throws InvalidArgumentException, - WorkbasketNotFoundException, - NotAuthorizedOnWorkbasketException; - - /** - * Update a {@linkplain Task}. - * - * @param task the {@linkplain Task} to be updated - * @return the updated {@linkplain Task} - * @throws InvalidArgumentException if the {@linkplain Task} to be updated contains invalid - * properties like e.g. invalid {@linkplain Task#getSecondaryObjectReferences() - * secondaryObjectReferences} - * @throws TaskNotFoundException if the {@linkplain Task} isn't found in the database by its - * {@linkplain Task#getId() id} - * @throws ConcurrencyException if the {@linkplain Task} has been updated by another user in the - * meantime; that's the case if the given {@linkplain Task#getModified() modified} timestamp - * differs from the one in the database - * @throws ClassificationNotFoundException if the {@linkplain Task#getClassificationSummary() - * classificationSummary} of the updated {@linkplain Task} refers to a {@link Classification} - * that can't be found - * @throws NotAuthorizedOnWorkbasketException if the current user has no {@linkplain - * WorkbasketPermission#READ} for the {@linkplain Workbasket} the {@linkplain Task} is in - * @throws AttachmentPersistenceException if an {@linkplain Attachment} with the same {@linkplain - * Attachment#getId() id} was added to the {@linkplain Task} multiple times without using - * {@linkplain Task#addAttachment(Attachment)} - * @throws ObjectReferencePersistenceException if an {@linkplain ObjectReference} with the same - * {@linkplain ObjectReference#getId() id} was added to the {@linkplain Task} multiple times - * without using {@linkplain Task#addSecondaryObjectReference(ObjectReference)} - * @throws InvalidTaskStateException if an attempt is made to change the {@linkplain - * Task#getOwner() owner} of the {@linkplain Task} that {@linkplain Task#getState() state} - * isn't {@linkplain TaskState#READY} - */ - Task updateTask(Task task) - throws InvalidArgumentException, - TaskNotFoundException, - ConcurrencyException, - ClassificationNotFoundException, - AttachmentPersistenceException, - ObjectReferencePersistenceException, - NotAuthorizedOnWorkbasketException, - InvalidTaskStateException; - - /** - * Updates specified {@linkplain TaskCustomField TaskCustomFields} of {@linkplain Task Tasks} - * associated with the given {@linkplain Task#getPrimaryObjRef() primaryObjRef}. - * - * @param selectionCriteria the {@linkplain Task#getPrimaryObjRef() primaryObjRef} of the - * searched-for {@linkplain Task Tasks}. - * @param customFieldsToUpdate a Map that contains as key the identification of the {@linkplain - * TaskCustomField} and as value the corresponding new value of that {@linkplain - * TaskCustomField} - * @return a List of the {@linkplain Task#getId() ids} of all modified {@linkplain Task Tasks} - * @throws InvalidArgumentException if the given selectionCriteria is invalid or the given - * customFieldsToUpdate are NULL or empty - * @see #updateTasks(List, Map) - */ - List updateTasks( - ObjectReference selectionCriteria, Map customFieldsToUpdate) - throws InvalidArgumentException; - - /** - * Updates specified {@linkplain TaskCustomField TaskCustomFields} for all given {@linkplain Task - * Tasks}. - * - * @param taskIds the {@linkplain Task#getId() taskIds} that are used to select the {@linkplain - * Task Tasks} - * @param customFieldsToUpdate a Map that contains as key the identification of the {@linkplain - * TaskCustomField} and as value the corresponding new value of that {@linkplain - * TaskCustomField} - * @return a list of the {@linkplain Task#getId() ids} of all modified {@linkplain Task Tasks} - * @throws InvalidArgumentException if the given customFieldsToUpdate are NULL or empty - * @see #updateTasks(ObjectReference, Map) - */ - List updateTasks(List taskIds, Map customFieldsToUpdate) - throws InvalidArgumentException; - - /** - * Sets the value of {@linkplain Task#isRead() isRead} of the specified {@linkplain Task}. - * - * @param taskId the {@linkplain Task#getId() id} of the {@linkplain Task} to be updated - * @param isRead the new status of {@linkplain Task#isRead() isRead} - * @return the updated {@linkplain Task} - * @throws TaskNotFoundException if the {@linkplain Task} with taskId wasn't found - * @throws NotAuthorizedOnWorkbasketException if the current user has no {@linkplain - * WorkbasketPermission#READ} for the {@linkplain Workbasket} the {@linkplain Task} is in - */ - Task setTaskRead(String taskId, boolean isRead) - throws TaskNotFoundException, NotAuthorizedOnWorkbasketException; - - /** - * Sets the specified {@linkplain CallbackState} on a List of {@linkplain Task Tasks}. - * - *

Note: this method is primarily intended to be used by the TaskanaAdapter - * - * @param externalIds the {@linkplain Task#getExternalId() externalIds} of the {@linkplain Task - * Tasks} on which the {@linkplain CallbackState} is set - * @param state the {@linkplain CallbackState} that is to be set on the {@linkplain Task Tasks} - * @return the result of the operations with {@linkplain Task#getId() ids} and Exception for each - * failed operation - */ - BulkOperationResults setCallbackStateForTasks( - List externalIds, CallbackState state); - - /** - * Sets the {@linkplain Task#getOwner() owner} on a List of {@linkplain Task Tasks}. - * - *

The {@linkplain Task#getOwner() owner} will only be set on {@linkplain Task Tasks} that are - * in {@linkplain TaskState#READY}. - * - * @param owner the new {@linkplain Task#getOwner() owner} of the {@linkplain Task Tasks} - * @param taskIds the {@linkplain Task#getId() ids} of the {@linkplain Task Tasks} on which the - * {@linkplain Task#getOwner() owner} is to be set - * @return the result of the operations with {@linkplain Task#getId() ids} and Exception for each - * failed {@linkplain Task}-update - */ - BulkOperationResults setOwnerOfTasks( - String owner, List taskIds); - - /** - * Sets the {@linkplain Task#getPlanned() planned} Instant on a List of {@linkplain Task Tasks}. - * - *

Only {@linkplain Task Tasks} in state {@linkplain TaskState#READY} and {@linkplain - * TaskState#CLAIMED} will be affected by this method. On each {@linkplain Task}, the - * corresponding {@linkplain Task#getDue() due} Instant is set according to the shortest - * serviceLevel in the {@linkplain Task#getClassificationSummary() Classification} of the - * {@linkplain Task} and its {@linkplain Task#getAttachments() Attachments}. - * - * @param planned the new {@linkplain Task#getPlanned() planned} Instant of the {@linkplain Task - * Tasks} - * @param taskIds the {@linkplain Task#getId() ids} of the {@linkplain Task Tasks} on which the - * new {@linkplain Task#getPlanned() planned} Instant is to be set - * @return the result of the operations with {@linkplain Task#getId() ids} and Exception for each - * failed {@linkplain Task} update - */ - BulkOperationResults setPlannedPropertyOfTasks( - Instant planned, List taskIds); - - // endregion - - // region DELETE - - /** - * Deletes the {@linkplain Task} with the given {@linkplain Task#getId() id}. - * - * @param taskId The {@linkplain Task#getId() id} of the {@linkplain Task} to delete - * @throws NotAuthorizedOnWorkbasketException If the current user doesn't have correct permission - * @throws TaskNotFoundException If the given {@linkplain Task#getId() id} doesn't refer to an - * existing {@linkplain Task} - * @throws InvalidTaskStateException If the {@linkplain Task#getState() state} of the referenced - * {@linkplain Task} isn't one of the {@linkplain TaskState#END_STATES} - * @throws NotAuthorizedException if the current user isn't member of {@linkplain - * TaskanaRole#ADMIN} - * @throws InvalidCallbackStateException the Callback State of the Task is {@linkplain - * CallbackState#CALLBACK_PROCESSING_REQUIRED} - */ - void deleteTask(String taskId) - throws TaskNotFoundException, - NotAuthorizedException, - NotAuthorizedOnWorkbasketException, - InvalidTaskStateException, - InvalidCallbackStateException; - - /** - * Deletes the {@linkplain Task} with the given {@linkplain Task#getId() id} even if it isn't - * completed. - * - * @param taskId The {@linkplain Task#getId() id} of the {@linkplain Task} to delete - * @throws TaskNotFoundException if the given {@linkplain Task#getId() id} doesn't refer to an - * existing {@linkplain Task} - * @throws InvalidTaskStateException if the {@linkplain Task#getState() state} of the referenced - * {@linkplain Task} isn't {@linkplain TaskState#TERMINATED} or {@linkplain - * TaskState#CANCELLED} - * @throws NotAuthorizedOnWorkbasketException If the current user doesn't have correct permissions - * @throws NotAuthorizedException if the current user isn't member of {@linkplain - * TaskanaRole#ADMIN} - * @throws InvalidCallbackStateException the Callback State of the Task is {@linkplain - * CallbackState#CALLBACK_PROCESSING_REQUIRED} - */ - void forceDeleteTask(String taskId) - throws TaskNotFoundException, - NotAuthorizedException, - NotAuthorizedOnWorkbasketException, - InvalidTaskStateException, - InvalidCallbackStateException; - - /** - * Deletes a List of {@linkplain Task Tasks}. - * - * @param tasks the {@linkplain Task#getId() ids} of the {@linkplain Task Tasks} to delete - * @return the result of the operations with each {@linkplain Task#getId() id} and Exception for - * each failed deletion - * @throws InvalidArgumentException if the tasks parameter contains NULL values - * @throws NotAuthorizedException if the current user isn't member of {@linkplain - * TaskanaRole#ADMIN} - */ - BulkOperationResults deleteTasks(List tasks) - throws InvalidArgumentException, NotAuthorizedException; - - // endregion - - // endregion - - // region TaskComment - - // region CREATE - /** - * Instantiates a non-persistent/non-inserted {@linkplain TaskComment}. - * - * @param taskId the {@linkplain Task#getId() id} of the {@linkplain Task} to which the - * {@linkplain TaskComment} belongs - * @return the instantiated {@linkplain TaskComment} - */ - TaskComment newTaskComment(String taskId); - - /** - * Inserts the specified {@linkplain TaskComment} into the database. - * - * @param taskComment the {@linkplain TaskComment} to be created - * @return the created {@linkplain TaskComment} - * @throws NotAuthorizedOnWorkbasketException if the current user has no {@linkplain - * WorkbasketPermission#READ} for the {@linkplain Workbasket} of the commented {@linkplain - * Task}. - * @throws TaskNotFoundException if the given {@linkplain TaskComment#getTaskId() taskId} doesn't - * refer to an existing {@linkplain Task} - * @throws InvalidArgumentException if the {@linkplain TaskComment#getId() id} of the provided - * {@link TaskComment} is neither NULL nor empty - */ - TaskComment createTaskComment(TaskComment taskComment) - throws TaskNotFoundException, InvalidArgumentException, NotAuthorizedOnWorkbasketException; - - // endregion - - // region READ - - /** - * Retrieves the {@linkplain TaskComment} with the given {@linkplain TaskComment#getId() id}. - * - * @param taskCommentId the {@linkplain TaskComment#getId() id} of the {@linkplain TaskComment} - * which should be retrieved - * @return the {@linkplain TaskComment} identified by taskCommentId - * @throws TaskCommentNotFoundException if the given taskCommentId doesn't refer to an existing - * {@linkplain TaskComment} - * @throws NotAuthorizedOnWorkbasketException if the current user has no {@linkplain - * WorkbasketPermission#READ} for the {@linkplain Workbasket} of the commented {@linkplain - * Task} - * @throws TaskNotFoundException if the {@linkplain TaskComment#getTaskId() taskId} of the - * TaskComment doesn't refer to an existing {@linkplain Task} - * @throws InvalidArgumentException if the given taskCommentId is NULL or empty - */ - TaskComment getTaskComment(String taskCommentId) - throws TaskCommentNotFoundException, - TaskNotFoundException, - InvalidArgumentException, - NotAuthorizedOnWorkbasketException; - - /** - * Retrieves the List of {@linkplain TaskComment TaskComments} for the {@linkplain Task} with - * given {@linkplain Task#getId() id}. - * - * @param taskId the {@linkplain Task#getId() id} of the {@linkplain Task} for which all - * {@linkplain TaskComment TaskComments} should be retrieved - * @return the List of {@linkplain TaskComment TaskComments} attached to the specified {@linkplain - * Task} - * @throws NotAuthorizedOnWorkbasketException if the current user has no {@linkplain - * WorkbasketPermission#READ} for the {@linkplain Workbasket} of the commented {@linkplain - * Task} - * @throws TaskNotFoundException if the given taskId doesn't refer to an existing {@linkplain - * Task} - */ - List getTaskComments(String taskId) - throws TaskNotFoundException, NotAuthorizedOnWorkbasketException; - - // endregion - - // region UPDATE - - /** - * Updates the specified {@linkplain TaskComment}. - * - * @param taskComment the {@linkplain TaskComment} to be updated in the database - * @return the updated {@linkplain TaskComment} - * @throws NotAuthorizedOnWorkbasketException if the current user has no {@linkplain - * WorkbasketPermission#READ} for the {@linkplain Workbasket} of the commented {@linkplain - * Task}. - * @throws ConcurrencyException if an attempt is made to update the {@linkplain TaskComment} and - * another user updated it already; that's the case if the given {@linkplain - * Task#getModified() modified} timestamp differs from the one in the database - * @throws TaskCommentNotFoundException if the {@linkplain TaskComment#getId() id} of the - * specified {@linkplain TaskComment} doesn't refer to an existing {@linkplain TaskComment} - * @throws TaskNotFoundException if the {@linkplain TaskComment#getTaskId() taskId} doesn't refer - * to an existing {@linkplain Task} - * @throws InvalidArgumentException if the {@linkplain TaskComment#getId() id} of the specified - * {@linkplain TaskComment} is NULL or empty - * @throws NotAuthorizedOnTaskCommentException If the current user doesn't have correct - * permissions - */ - TaskComment updateTaskComment(TaskComment taskComment) - throws ConcurrencyException, - TaskCommentNotFoundException, - TaskNotFoundException, - InvalidArgumentException, - NotAuthorizedOnTaskCommentException, - NotAuthorizedOnWorkbasketException; - - // endregion - - // region DELETE - - /** - * Deletes the {@linkplain TaskComment} with the given {@linkplain TaskComment#getId() id}. - * - * @param taskCommentId the {@linkplain TaskComment#getId() id} of the {@linkplain TaskComment} to - * delete - * @throws InvalidArgumentException if the taskCommentId is NULL or empty - * @throws TaskCommentNotFoundException if the given taskCommentId doesn't refer to an existing - * {@linkplain TaskComment} - * @throws TaskNotFoundException if the {@linkplain TaskComment#getTaskId() taskId} of the - * TaskComment doesn't refer to an existing {@linkplain Task} - * @throws InvalidArgumentException if the given taskCommentId is NULL or empty - * @throws NotAuthorizedOnWorkbasketException if the current user has no {@linkplain - * WorkbasketPermission#READ} for the {@linkplain Workbasket} the commented {@linkplain Task} - * is in - * @throws NotAuthorizedOnTaskCommentException if the current user is not the {@linkplain - * TaskComment#getCreator() creator} of the {@linkplain TaskComment}. - */ - void deleteTaskComment(String taskCommentId) - throws TaskCommentNotFoundException, - TaskNotFoundException, - InvalidArgumentException, - NotAuthorizedOnTaskCommentException, - NotAuthorizedOnWorkbasketException; - - // endregion - - // endregion - - /** - * Instantiates a non-persistent/non-inserted {@linkplain Attachment}. - * - * @return the instantiated {@linkplain Attachment} - */ - Attachment newAttachment(); - - /** - * Instantiates a non-persistent/non-inserted {@linkplain ObjectReference}. - * - * @return the instantiated {@linkplain ObjectReference} - * @see #newObjectReference(String, String, String, String, String) - */ - ObjectReference newObjectReference(); - - /** - * Instantiates a non-persistent/non-inserted {@linkplain ObjectReference}. - * - * @param company the {@linkplain ObjectReference#getCompany() company} of the new {@linkplain - * ObjectReference} - * @param system the {@linkplain ObjectReference#getSystem() system} of the new {@linkplain - * ObjectReference} - * @param systemInstance the {@linkplain ObjectReference#getSystemInstance() systemInstance} of - * the new {@linkplain ObjectReference} - * @param type the {@linkplain ObjectReference#getType() type} of the new {@linkplain - * ObjectReference} - * @param value the {@linkplain ObjectReference#getValue() value} of the new {@linkplain - * ObjectReference} - * @return the instantiated {@linkplain ObjectReference} - * @see #newObjectReference() - */ - ObjectReference newObjectReference( - String company, String system, String systemInstance, String type, String value); - - /** - * Creates an empty {@linkplain TaskQuery}. - * - * @return a {@linkplain TaskQuery} - */ - TaskQuery createTaskQuery(); - - /** - * Creates an empty {@linkplain TaskCommentQuery}. - * - * @return a {@linkplain TaskCommentQuery} - */ - TaskCommentQuery createTaskCommentQuery(); -}