diff --git a/lib/taskana-core/src/main/java/pro/taskana/common/api/BulkOperationResults.java b/lib/taskana-core/src/main/java/pro/taskana/common/api/BulkOperationResults.java index 0fed5a940..6ba18b3e3 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/common/api/BulkOperationResults.java +++ b/lib/taskana-core/src/main/java/pro/taskana/common/api/BulkOperationResults.java @@ -4,8 +4,6 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * Returning type for a bulk db interaction with errors. This wrapper is storing them with a @@ -14,10 +12,9 @@ import org.slf4j.LoggerFactory; * @param unique keys for the logs. * @param type of the stored informations */ -public class BulkOperationResults { +public class BulkOperationResults { - private static final Logger LOGGER = LoggerFactory.getLogger(BulkOperationResults.class); - private Map errorMap = new HashMap<>(); + private final Map errorMap = new HashMap<>(); /** * Returning a list of current errors as map. If there are no errors the result will be empty. @@ -29,29 +26,13 @@ public class BulkOperationResults { } /** - * Adding an appearing error to the map and list them by a unique ID as key. NULL keys will be - * ignored. + * Adding an appearing error to the map and list them by a unique ID as key. * * @param objectId unique key of a entity. * @param error occurred error of a interaction with the entity - * @return status of adding the values. */ - public boolean addError(K objectId, V error) { - boolean status = false; - try { - if (objectId != null) { - this.errorMap.put(objectId, error); - status = true; - } - } catch (Exception e) { - LOGGER.warn( - "Can´t add bulkoperation-error, because of a map failure. " - + "ID={}, error={} and current failure={}", - objectId, - error, - e); - } - return status; + public void addError(K objectId, V error) { + this.errorMap.put(objectId, error); } /** @@ -60,11 +41,7 @@ public class BulkOperationResults { * @return true if there are logged errors. */ public boolean containsErrors() { - boolean isContainingErrors = false; - if (!this.errorMap.isEmpty()) { - isContainingErrors = true; - } - return isContainingErrors; + return !errorMap.isEmpty(); } /** @@ -74,11 +51,7 @@ public class BulkOperationResults { * @return stored error for ID */ public V getErrorForId(K idKey) { - V result = null; - if (idKey != null) { - result = this.errorMap.get(idKey); - } - return result; + return errorMap.get(idKey); } /** @@ -100,12 +73,9 @@ public class BulkOperationResults { * * @param log the other log */ - public void addAllErrors(BulkOperationResults log) { - if (log != null && log.containsErrors()) { - List failedIds = log.getFailedIds(); - for (K id : failedIds) { - addError(id, log.getErrorForId(id)); - } + public void addAllErrors(BulkOperationResults log) { + if (log != null) { + errorMap.putAll(log.errorMap); } } @@ -116,19 +86,12 @@ public class BulkOperationResults { */ public BulkOperationResults mapBulkOperationResults() { BulkOperationResults bulkLogMapped = new BulkOperationResults<>(); - - List failedIds = this.getFailedIds(); - for (K id : failedIds) { - bulkLogMapped.addError(id, (Exception) this.getErrorForId(id)); - } - + bulkLogMapped.addAllErrors(this); return bulkLogMapped; } @Override public String toString() { - return "BulkOperationResults [BulkOperationResults= " - + this.errorMap - + "]"; + return "BulkOperationResults [errorMap=" + errorMap + "]"; } } diff --git a/lib/taskana-core/src/main/java/pro/taskana/task/api/TaskService.java b/lib/taskana-core/src/main/java/pro/taskana/task/api/TaskService.java index a0ab4e029..191069a20 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/task/api/TaskService.java +++ b/lib/taskana-core/src/main/java/pro/taskana/task/api/TaskService.java @@ -346,6 +346,16 @@ public interface TaskService { BulkOperationResults completeTasks(List taskIds) throws InvalidArgumentException; + /** + * Completes a list of tasks. + * + * @param taskIds of the tasks which should be completed. + * @return the result of the operations with Id and Exception for each failed task completion. + * @throws InvalidArgumentException If the taskId parameter is NULL. + */ + BulkOperationResults forceCompleteTasks(List taskIds) + throws InvalidArgumentException; + /** * Updates tasks with a matching {@link ObjectReference}. * diff --git a/lib/taskana-core/src/main/java/pro/taskana/task/internal/TaskMapper.java b/lib/taskana-core/src/main/java/pro/taskana/task/internal/TaskMapper.java index e820cee79..8506cc2f4 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/task/internal/TaskMapper.java +++ b/lib/taskana-core/src/main/java/pro/taskana/task/internal/TaskMapper.java @@ -17,6 +17,7 @@ import pro.taskana.common.internal.persistence.InstantTypeHandler; import pro.taskana.common.internal.persistence.MapTypeHandler; import pro.taskana.common.internal.util.Pair; import pro.taskana.task.api.CallbackState; +import pro.taskana.task.api.models.TaskSummary; import pro.taskana.task.internal.models.MinimalTaskSummary; import pro.taskana.task.internal.models.TaskImpl; import pro.taskana.task.internal.models.TaskSummaryImpl; @@ -157,12 +158,12 @@ public interface TaskMapper { @Update( "") void updateCompleted( @Param("taskIds") List taskIds, - @Param("referencetask") TaskSummaryImpl referencetask); + @Param("referenceTask") TaskSummary referenceTask); @Select( "