From caff822ccd6e4300c758a0b54aaf81c4f16e384a Mon Sep 17 00:00:00 2001 From: Holger Hagen <19706592+holgerhagen@users.noreply.github.com> Date: Mon, 23 Apr 2018 21:41:47 +0200 Subject: [PATCH] TSK-407: supporting all kind of lists for transferring tasks. --- .../pro/taskana/impl/TaskServiceImpl.java | 15 ++++++++-- .../acceptance/task/TransferTaskAccTest.java | 30 +++++++++++++++++++ 2 files changed, 42 insertions(+), 3 deletions(-) diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/TaskServiceImpl.java b/lib/taskana-core/src/main/java/pro/taskana/impl/TaskServiceImpl.java index c599ecbb0..e4367ba15 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/impl/TaskServiceImpl.java +++ b/lib/taskana-core/src/main/java/pro/taskana/impl/TaskServiceImpl.java @@ -484,9 +484,10 @@ public class TaskServiceImpl implements TaskService { taskanaEngine.openConnection(); LOGGER.debug("entry to transferBulk(targetWbId = {}, taskIds = {})", destinationWorkbasketId, taskIds); // Check pre-conditions with trowing Exceptions - if (destinationWorkbasketId == null || taskIds == null) { + if (destinationWorkbasketId == null || destinationWorkbasketId.isEmpty() || taskIds == null + || taskIds.isEmpty()) { throw new InvalidArgumentException( - "DestinationWorkbasketId or TaskIds can“t be used as NULL-Parameter."); + "DestinationWorkbasketId or TaskIds must not be null or empty."); } Workbasket destinationWorkbasket = workbasketService.getWorkbasket(destinationWorkbasketId); @@ -521,10 +522,18 @@ public class TaskServiceImpl implements TaskService { } } - private BulkOperationResults transferTasks(List taskIds, + private BulkOperationResults transferTasks(List taskIdsToBeTransferred, Workbasket destinationWorkbasket) throws InvalidArgumentException { BulkOperationResults bulkLog = new BulkOperationResults<>(); + // convert to ArrayList if necessary to prevent a UnsupportedOperationException while removing + ArrayList taskIds; + if (!(taskIdsToBeTransferred instanceof ArrayList)) { + taskIds = new ArrayList<>(taskIdsToBeTransferred); + } else { + taskIds = (ArrayList) taskIdsToBeTransferred; + } + // check tasks Ids exist and not empty - log and remove Iterator taskIdIterator = taskIds.iterator(); while (taskIdIterator.hasNext()) { diff --git a/lib/taskana-core/src/test/java/acceptance/task/TransferTaskAccTest.java b/lib/taskana-core/src/test/java/acceptance/task/TransferTaskAccTest.java index 8a73fbe3b..a01719760 100644 --- a/lib/taskana-core/src/test/java/acceptance/task/TransferTaskAccTest.java +++ b/lib/taskana-core/src/test/java/acceptance/task/TransferTaskAccTest.java @@ -12,6 +12,8 @@ import static org.junit.Assert.fail; import java.sql.SQLException; import java.time.Instant; import java.util.ArrayList; +import java.util.Collections; +import java.util.List; import org.junit.Test; import org.junit.runner.RunWith; @@ -251,4 +253,32 @@ public class TransferTaskAccTest extends AbstractAccTest { assertEquals("TEAMLEAD_1", transferredTask.getWorkbasketKey()); } + @WithAccessId( + userName = "teamlead_1", + groupNames = {"group_1"}) + @Test + public void testTransferTasksWithListNotSupportingRemove() + throws SQLException, NotAuthorizedException, InvalidArgumentException, ClassificationNotFoundException, + WorkbasketNotFoundException, TaskAlreadyExistException, InvalidWorkbasketException, TaskNotFoundException, + InvalidStateException, InvalidOwnerException { + TaskService taskService = taskanaEngine.getTaskService(); + List taskIds = Collections.singletonList(""); + taskService.transferTasks("WBI:100000000000000000000000000000000006", taskIds); + + } + + @WithAccessId( + userName = "teamlead_1", + groupNames = {"group_1"}) + @Test(expected = InvalidArgumentException.class) + public void testThrowsExceptionIfEmptyListIsSupplied() + throws SQLException, NotAuthorizedException, InvalidArgumentException, ClassificationNotFoundException, + WorkbasketNotFoundException, TaskAlreadyExistException, InvalidWorkbasketException, TaskNotFoundException, + InvalidStateException, InvalidOwnerException { + TaskService taskService = taskanaEngine.getTaskService(); + List taskIds = new ArrayList<>(); + taskService.transferTasks("WBI:100000000000000000000000000000000006", taskIds); + + } + }