From 36adf71b904abe5730aba921d72a3c76cb4c5146 Mon Sep 17 00:00:00 2001 From: Mustapha Zorgati <15628173+mustaphazorgati@users.noreply.github.com> Date: Sun, 7 Jun 2020 13:25:22 +0200 Subject: [PATCH] TSK-1257: replaced multiple helper methods with abstract helper method --- .../common/internal/util/CheckedConsumer.java | 6 +- .../task/internal/TaskServiceImpl.java | 114 +++++++----------- 2 files changed, 49 insertions(+), 71 deletions(-) diff --git a/lib/taskana-core/src/main/java/pro/taskana/common/internal/util/CheckedConsumer.java b/lib/taskana-core/src/main/java/pro/taskana/common/internal/util/CheckedConsumer.java index 161be0f8f..3b000fe06 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/common/internal/util/CheckedConsumer.java +++ b/lib/taskana-core/src/main/java/pro/taskana/common/internal/util/CheckedConsumer.java @@ -5,8 +5,8 @@ import java.util.function.Consumer; import pro.taskana.common.api.exceptions.SystemException; @FunctionalInterface -public interface CheckedConsumer { - static Consumer wrap(CheckedConsumer checkedConsumer) { +public interface CheckedConsumer { + static Consumer wrap(CheckedConsumer checkedConsumer) { return t -> { try { checkedConsumer.accept(t); @@ -16,6 +16,6 @@ public interface CheckedConsumer { }; } - void accept(T t) throws Throwable; + void accept(T t) throws E; } diff --git a/lib/taskana-core/src/main/java/pro/taskana/task/internal/TaskServiceImpl.java b/lib/taskana-core/src/main/java/pro/taskana/task/internal/TaskServiceImpl.java index 5285ea062..f6bac128c 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/task/internal/TaskServiceImpl.java +++ b/lib/taskana-core/src/main/java/pro/taskana/task/internal/TaskServiceImpl.java @@ -36,6 +36,7 @@ import pro.taskana.common.api.exceptions.TaskanaException; import pro.taskana.common.internal.CustomPropertySelector; import pro.taskana.common.internal.InternalTaskanaEngine; import pro.taskana.common.internal.security.CurrentUserContext; +import pro.taskana.common.internal.util.CheckedConsumer; import pro.taskana.common.internal.util.CheckedFunction; import pro.taskana.common.internal.util.IdGenerator; import pro.taskana.common.internal.util.Pair; @@ -1020,13 +1021,27 @@ public class TaskServiceImpl implements TaskService { BulkOperationResults bulkLog = new BulkOperationResults<>(); Instant now = Instant.now(); - Stream filteredSummaries = filterNotExistingTaskIds(taskIds, bulkLog); - filteredSummaries = filterInvalidTaskStates(filteredSummaries, bulkLog); - + Stream filteredSummaries = + filterNotExistingTaskIds(taskIds, bulkLog) + .filter(task -> task.getState() != TaskState.COMPLETED) + .filter( + addErrorToBulkLog(TaskServiceImpl::checkIfTaskIsTerminatedOrCancelled, bulkLog)); if (!forced) { - filteredSummaries = filterPreConditionForCompleteTasks(filteredSummaries, bulkLog); + filteredSummaries = + filteredSummaries.filter( + addErrorToBulkLog(TaskServiceImpl::checkPreconditionsForCompleteTask, bulkLog)); } else { - filteredSummaries = claimNotClaimedTasks(filteredSummaries, forced, now, bulkLog); + String userId = CurrentUserContext.getUserid(); + filteredSummaries = + filteredSummaries.filter( + addErrorToBulkLog( + summary -> { + if (taskIsNotClaimed(summary)) { + checkPreconditionsForClaimTask(summary, true); + claimActionsOnTask(summary, userId, now); + } + }, + bulkLog)); } updateTasksToBeCompleted(filteredSummaries, now); @@ -1038,41 +1053,6 @@ public class TaskServiceImpl implements TaskService { } } - private static Stream filterPreConditionForCompleteTasks( - Stream stream, BulkOperationResults bulkLog) { - return stream.filter( - summary -> { - try { - checkPreconditionsForCompleteTask(summary); - return true; - } catch (TaskanaException e) { - bulkLog.addError(summary.getId(), e); - return false; - } - }); - } - - private static Stream claimNotClaimedTasks( - Stream stream, - boolean forced, - Instant now, - BulkOperationResults bulkLog) { - String userId = CurrentUserContext.getUserid(); - return stream.filter( - summary -> { - try { - if (taskIsNotClaimed(summary)) { - checkPreconditionsForClaimTask(summary, forced); - claimActionsOnTask(summary, userId, now); - } - return true; - } catch (TaskanaException e) { - bulkLog.addError(summary.getId(), e); - return false; - } - }); - } - private Stream filterNotExistingTaskIds( List taskIds, BulkOperationResults bulkLog) { @@ -1080,36 +1060,34 @@ public class TaskServiceImpl implements TaskService { getTasksToChange(taskIds).stream() .collect(Collectors.toMap(TaskSummary::getId, e -> (TaskSummaryImpl) e)); return taskIds.stream() - .map(id -> Pair.of(id, taskSummaryMap.get(id))) - .filter( - pair -> { - if (pair.getRight() == null) { - String taskId = pair.getLeft(); - bulkLog.addError( - taskId, - new TaskNotFoundException( - taskId, String.format(TASK_WITH_ID_WAS_NOT_FOUND, taskId))); - return false; - } - return true; - }) - .map(Pair::getRight); + .map(id -> Pair.of(id, taskSummaryMap.get(id))) + .filter( + pair -> { + if (pair.getRight() == null) { + String taskId = pair.getLeft(); + bulkLog.addError( + taskId, + new TaskNotFoundException( + taskId, String.format(TASK_WITH_ID_WAS_NOT_FOUND, taskId))); + return false; + } + return true; + }) + .map(Pair::getRight); } - private static Stream filterInvalidTaskStates( - Stream stream, BulkOperationResults bulkLog) { - return stream - .filter(task -> task.getState() != TaskState.COMPLETED) - .filter( - summary -> { - try { - checkIfTaskIsTerminatedOrCancelled(summary); - return true; - } catch (TaskanaException e) { - bulkLog.addError(summary.getId(), e); - return false; - } - }); + private static Predicate addErrorToBulkLog( + CheckedConsumer checkedConsumer, + BulkOperationResults bulkLog) { + return summary -> { + try { + checkedConsumer.accept(summary); + return true; + } catch (TaskanaException e) { + bulkLog.addError(summary.getId(), e); + return false; + } + }; } private void checkConcurrencyAndSetModified(TaskImpl newTaskImpl, TaskImpl oldTaskImpl)