Search in sources :

Example 6 with InvalidStateException

use of pro.taskana.exceptions.InvalidStateException in project taskana by Taskana.

the class TaskServiceImpl method completeTask.

@Override
public Task completeTask(String taskId, boolean isForced) throws TaskNotFoundException, InvalidOwnerException, InvalidStateException, NotAuthorizedException {
    LOGGER.debug("entry to completeTask(id = {}, isForced {})", taskId, isForced);
    TaskImpl task = null;
    try {
        taskanaEngine.openConnection();
        task = (TaskImpl) this.getTask(taskId);
        // check pre-conditions for non-forced invocation
        if (!isForced) {
            if (task.getClaimed() == null || task.getState() != TaskState.CLAIMED) {
                LOGGER.warn("Method completeTask() does expect a task which need to be CLAIMED before. TaskId={}", taskId);
                throw new InvalidStateException(taskId);
            } else if (!CurrentUserContext.getAccessIds().contains(task.getOwner())) {
                LOGGER.warn("Method completeTask() does expect to be invoced by the task-owner or a administrator. TaskId={}, TaskOwner={}, CurrentUser={}", taskId, task.getOwner(), CurrentUserContext.getUserid());
                throw new InvalidOwnerException("TaskOwner is" + task.getOwner() + ", but current User is " + CurrentUserContext.getUserid());
            }
        } else {
            // CLAIM-forced, if task was not already claimed before.
            if (task.getClaimed() == null || task.getState() != TaskState.CLAIMED) {
                task = (TaskImpl) this.claim(taskId, true);
            }
        }
        Instant now = Instant.now();
        task.setCompleted(now);
        task.setModified(now);
        task.setState(TaskState.COMPLETED);
        task.setOwner(CurrentUserContext.getUserid());
        taskMapper.update(task);
        LOGGER.debug("Method completeTask() completed Task '{}'.", taskId);
    } finally {
        taskanaEngine.returnConnection();
        LOGGER.debug("exit from completeTask()");
    }
    return task;
}
Also used : Instant(java.time.Instant) InvalidOwnerException(pro.taskana.exceptions.InvalidOwnerException) InvalidStateException(pro.taskana.exceptions.InvalidStateException)

Example 7 with InvalidStateException

use of pro.taskana.exceptions.InvalidStateException in project taskana by Taskana.

the class TaskServiceImpl method completeTasks.

@Override
public BulkOperationResults<String, TaskanaException> completeTasks(List<String> taskIds) throws InvalidArgumentException {
    try {
        LOGGER.debug("entry to completeTasks(taskIds = {})", taskIds);
        taskanaEngine.openConnection();
        // Check pre-conditions with throwing Exceptions
        if (taskIds == null) {
            throw new InvalidArgumentException("TaskIds canĀ“t be used as NULL-Parameter.");
        }
        // process bulk-complete
        BulkOperationResults<String, TaskanaException> bulkLog = new BulkOperationResults<>();
        if (!taskIds.isEmpty()) {
            // remove null/empty taskIds with message
            Iterator<String> taskIdIterator = taskIds.iterator();
            while (taskIdIterator.hasNext()) {
                String currentTaskId = taskIdIterator.next();
                if (currentTaskId == null || currentTaskId.isEmpty()) {
                    bulkLog.addError("", new InvalidArgumentException("IDs with EMPTY or NULL value are not allowed and invalid."));
                    taskIdIterator.remove();
                }
            }
            // query for existing tasks, modify values and LOG missing ones.
            List<TaskSummary> taskSummaries = this.createTaskQuery().idIn(taskIds.toArray(new String[0])).list();
            Instant now = Instant.now();
            taskIdIterator = taskIds.iterator();
            while (taskIdIterator.hasNext()) {
                String currentTaskId = taskIdIterator.next();
                TaskSummaryImpl taskSummary = (TaskSummaryImpl) taskSummaries.stream().filter(ts -> currentTaskId.equals(ts.getTaskId())).findFirst().orElse(null);
                if (taskSummary == null) {
                    bulkLog.addError(currentTaskId, new TaskNotFoundException(currentTaskId, "task with id " + currentTaskId + " was not found."));
                    taskIdIterator.remove();
                } else if (taskSummary.getClaimed() == null || taskSummary.getState() != TaskState.CLAIMED) {
                    bulkLog.addError(currentTaskId, new InvalidStateException(currentTaskId));
                    taskIdIterator.remove();
                } else if (!CurrentUserContext.getAccessIds().contains(taskSummary.getOwner())) {
                    bulkLog.addError(currentTaskId, new InvalidOwnerException("TaskOwner is" + taskSummary.getOwner() + ", but current User is " + CurrentUserContext.getUserid()));
                    taskIdIterator.remove();
                } else {
                    taskSummary.setCompleted(now);
                    taskSummary.setModified(now);
                    taskSummary.setState(TaskState.COMPLETED);
                }
            }
            if (!taskIds.isEmpty() && !taskSummaries.isEmpty()) {
                taskMapper.updateCompleted(taskIds, (TaskSummaryImpl) taskSummaries.get(0));
            }
        }
        return bulkLog;
    } finally {
        taskanaEngine.returnConnection();
        LOGGER.debug("exit from to completeTasks(taskIds = {})", taskIds);
    }
}
Also used : Arrays(java.util.Arrays) PersistenceException(org.apache.ibatis.exceptions.PersistenceException) IdGenerator(pro.taskana.impl.util.IdGenerator) LoggerFactory(org.slf4j.LoggerFactory) WorkbasketService(pro.taskana.WorkbasketService) ArrayList(java.util.ArrayList) CurrentUserContext(pro.taskana.security.CurrentUserContext) HashSet(java.util.HashSet) WorkbasketNotFoundException(pro.taskana.exceptions.WorkbasketNotFoundException) SystemException(pro.taskana.exceptions.SystemException) CustomPropertySelector(pro.taskana.mappings.CustomPropertySelector) Task(pro.taskana.Task) InvalidStateException(pro.taskana.exceptions.InvalidStateException) Duration(java.time.Duration) Map(java.util.Map) TaskState(pro.taskana.TaskState) WorkbasketPermission(pro.taskana.WorkbasketPermission) WorkbasketSummary(pro.taskana.WorkbasketSummary) TimeIntervalColumnHeader(pro.taskana.impl.report.impl.TimeIntervalColumnHeader) ClassificationSummary(pro.taskana.ClassificationSummary) TaskNotFoundException(pro.taskana.exceptions.TaskNotFoundException) TaskanaEngine(pro.taskana.TaskanaEngine) Attachment(pro.taskana.Attachment) TaskAlreadyExistException(pro.taskana.exceptions.TaskAlreadyExistException) TaskSummary(pro.taskana.TaskSummary) ClassificationNotFoundException(pro.taskana.exceptions.ClassificationNotFoundException) ConcurrencyException(pro.taskana.exceptions.ConcurrencyException) Logger(org.slf4j.Logger) InvalidOwnerException(pro.taskana.exceptions.InvalidOwnerException) Iterator(java.util.Iterator) Set(java.util.Set) InvalidWorkbasketException(pro.taskana.exceptions.InvalidWorkbasketException) AttachmentMapper(pro.taskana.mappings.AttachmentMapper) Classification(pro.taskana.Classification) LoggerUtils(pro.taskana.impl.util.LoggerUtils) Instant(java.time.Instant) Collectors(java.util.stream.Collectors) AttachmentPersistenceException(pro.taskana.exceptions.AttachmentPersistenceException) InvalidArgumentException(pro.taskana.exceptions.InvalidArgumentException) TaskService(pro.taskana.TaskService) TaskMapper(pro.taskana.mappings.TaskMapper) List(java.util.List) Workbasket(pro.taskana.Workbasket) TaskanaRole(pro.taskana.TaskanaRole) NotAuthorizedException(pro.taskana.exceptions.NotAuthorizedException) TaskanaException(pro.taskana.exceptions.TaskanaException) TaskQuery(pro.taskana.TaskQuery) Collections(java.util.Collections) Instant(java.time.Instant) InvalidStateException(pro.taskana.exceptions.InvalidStateException) TaskanaException(pro.taskana.exceptions.TaskanaException) InvalidArgumentException(pro.taskana.exceptions.InvalidArgumentException) TaskNotFoundException(pro.taskana.exceptions.TaskNotFoundException) TaskSummary(pro.taskana.TaskSummary) InvalidOwnerException(pro.taskana.exceptions.InvalidOwnerException)

Example 8 with InvalidStateException

use of pro.taskana.exceptions.InvalidStateException in project taskana by Taskana.

the class WorkOnTaskAccTest method testBulkDeleteTasksWithException.

@WithAccessId(userName = "user_1_2", groupNames = { "group_1" })
@Test
public void testBulkDeleteTasksWithException() throws SQLException, NotAuthorizedException, InvalidArgumentException, ClassificationNotFoundException, WorkbasketNotFoundException, TaskAlreadyExistException, InvalidWorkbasketException, TaskNotFoundException, ConcurrencyException, AttachmentPersistenceException {
    TaskService taskService = taskanaEngine.getTaskService();
    List<String> taskIdList = new ArrayList<>();
    taskIdList.add("TKI:000000000000000000000000000000000102");
    taskIdList.add("TKI:000000000000000000000000000000003333");
    BulkOperationResults<String, TaskanaException> results = taskService.deleteTasks(taskIdList);
    assertTrue(results.containsErrors());
    assertThat(results.getErrorMap().size(), equalTo(2));
    assertTrue(results.getErrorForId("TKI:000000000000000000000000000000003333") instanceof TaskNotFoundException);
    assertTrue(results.getErrorForId("TKI:000000000000000000000000000000000102") instanceof InvalidStateException);
}
Also used : TaskNotFoundException(pro.taskana.exceptions.TaskNotFoundException) TaskService(pro.taskana.TaskService) ArrayList(java.util.ArrayList) InvalidStateException(pro.taskana.exceptions.InvalidStateException) TaskanaException(pro.taskana.exceptions.TaskanaException) AbstractAccTest(acceptance.AbstractAccTest) Test(org.junit.Test) WithAccessId(pro.taskana.security.WithAccessId)

Aggregations

InvalidStateException (pro.taskana.exceptions.InvalidStateException)8 Instant (java.time.Instant)4 InvalidOwnerException (pro.taskana.exceptions.InvalidOwnerException)4 Test (org.junit.Test)3 TaskService (pro.taskana.TaskService)3 TaskState (pro.taskana.TaskState)3 TaskNotFoundException (pro.taskana.exceptions.TaskNotFoundException)3 TaskanaException (pro.taskana.exceptions.TaskanaException)3 AbstractAccTest (acceptance.AbstractAccTest)2 ArrayList (java.util.ArrayList)2 Classification (pro.taskana.Classification)2 Task (pro.taskana.Task)2 InvalidArgumentException (pro.taskana.exceptions.InvalidArgumentException)2 Duration (java.time.Duration)1 Arrays (java.util.Arrays)1 Collections (java.util.Collections)1 HashSet (java.util.HashSet)1 Iterator (java.util.Iterator)1 List (java.util.List)1 Map (java.util.Map)1