TSK-1257: replaced multiple helper methods with abstract helper method

This commit is contained in:
Mustapha Zorgati 2020-06-07 13:25:22 +02:00
parent 6f12677b74
commit 36adf71b90
2 changed files with 49 additions and 71 deletions

View File

@ -5,8 +5,8 @@ import java.util.function.Consumer;
import pro.taskana.common.api.exceptions.SystemException; import pro.taskana.common.api.exceptions.SystemException;
@FunctionalInterface @FunctionalInterface
public interface CheckedConsumer<T> { public interface CheckedConsumer<T, E extends Throwable> {
static <T> Consumer<T> wrap(CheckedConsumer<T> checkedConsumer) { static <T, E extends Throwable> Consumer<T> wrap(CheckedConsumer<T, E> checkedConsumer) {
return t -> { return t -> {
try { try {
checkedConsumer.accept(t); checkedConsumer.accept(t);
@ -16,6 +16,6 @@ public interface CheckedConsumer<T> {
}; };
} }
void accept(T t) throws Throwable; void accept(T t) throws E;
} }

View File

@ -36,6 +36,7 @@ import pro.taskana.common.api.exceptions.TaskanaException;
import pro.taskana.common.internal.CustomPropertySelector; import pro.taskana.common.internal.CustomPropertySelector;
import pro.taskana.common.internal.InternalTaskanaEngine; import pro.taskana.common.internal.InternalTaskanaEngine;
import pro.taskana.common.internal.security.CurrentUserContext; 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.CheckedFunction;
import pro.taskana.common.internal.util.IdGenerator; import pro.taskana.common.internal.util.IdGenerator;
import pro.taskana.common.internal.util.Pair; import pro.taskana.common.internal.util.Pair;
@ -1020,13 +1021,27 @@ public class TaskServiceImpl implements TaskService {
BulkOperationResults<String, TaskanaException> bulkLog = new BulkOperationResults<>(); BulkOperationResults<String, TaskanaException> bulkLog = new BulkOperationResults<>();
Instant now = Instant.now(); Instant now = Instant.now();
Stream<TaskSummaryImpl> filteredSummaries = filterNotExistingTaskIds(taskIds, bulkLog); Stream<TaskSummaryImpl> filteredSummaries =
filteredSummaries = filterInvalidTaskStates(filteredSummaries, bulkLog); filterNotExistingTaskIds(taskIds, bulkLog)
.filter(task -> task.getState() != TaskState.COMPLETED)
.filter(
addErrorToBulkLog(TaskServiceImpl::checkIfTaskIsTerminatedOrCancelled, bulkLog));
if (!forced) { if (!forced) {
filteredSummaries = filterPreConditionForCompleteTasks(filteredSummaries, bulkLog); filteredSummaries =
filteredSummaries.filter(
addErrorToBulkLog(TaskServiceImpl::checkPreconditionsForCompleteTask, bulkLog));
} else { } 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); updateTasksToBeCompleted(filteredSummaries, now);
@ -1038,41 +1053,6 @@ public class TaskServiceImpl implements TaskService {
} }
} }
private static Stream<TaskSummaryImpl> filterPreConditionForCompleteTasks(
Stream<TaskSummaryImpl> stream, BulkOperationResults<String, TaskanaException> bulkLog) {
return stream.filter(
summary -> {
try {
checkPreconditionsForCompleteTask(summary);
return true;
} catch (TaskanaException e) {
bulkLog.addError(summary.getId(), e);
return false;
}
});
}
private static Stream<TaskSummaryImpl> claimNotClaimedTasks(
Stream<TaskSummaryImpl> stream,
boolean forced,
Instant now,
BulkOperationResults<String, TaskanaException> 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<TaskSummaryImpl> filterNotExistingTaskIds( private Stream<TaskSummaryImpl> filterNotExistingTaskIds(
List<String> taskIds, BulkOperationResults<String, TaskanaException> bulkLog) { List<String> taskIds, BulkOperationResults<String, TaskanaException> bulkLog) {
@ -1096,20 +1076,18 @@ public class TaskServiceImpl implements TaskService {
.map(Pair::getRight); .map(Pair::getRight);
} }
private static Stream<TaskSummaryImpl> filterInvalidTaskStates( private static Predicate<TaskSummaryImpl> addErrorToBulkLog(
Stream<TaskSummaryImpl> stream, BulkOperationResults<String, TaskanaException> bulkLog) { CheckedConsumer<TaskSummaryImpl, TaskanaException> checkedConsumer,
return stream BulkOperationResults<String, TaskanaException> bulkLog) {
.filter(task -> task.getState() != TaskState.COMPLETED) return summary -> {
.filter(
summary -> {
try { try {
checkIfTaskIsTerminatedOrCancelled(summary); checkedConsumer.accept(summary);
return true; return true;
} catch (TaskanaException e) { } catch (TaskanaException e) {
bulkLog.addError(summary.getId(), e); bulkLog.addError(summary.getId(), e);
return false; return false;
} }
}); };
} }
private void checkConcurrencyAndSetModified(TaskImpl newTaskImpl, TaskImpl oldTaskImpl) private void checkConcurrencyAndSetModified(TaskImpl newTaskImpl, TaskImpl oldTaskImpl)