From 51af51196e330e149920852fdf74d940b8f25e36 Mon Sep 17 00:00:00 2001 From: "julian.schallenmueller" Date: Thu, 8 Nov 2018 17:06:15 +0100 Subject: [PATCH] TSK-734: Refactored updateTasks method --- .../pro/taskana/impl/TaskServiceImpl.java | 123 +++++++++--------- 1 file changed, 64 insertions(+), 59 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 ea60cc944..f4c520bdc 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 @@ -1063,7 +1063,7 @@ public class TaskServiceImpl implements TaskService { } return bulkLog; } finally { - LOGGER.debug("exit from deleteTasks()"); + LOGGER.debug("exit from updateTasks()"); taskanaEngine.returnConnection(); } } @@ -1075,53 +1075,29 @@ public class TaskServiceImpl implements TaskService { LOGGER.debug("entry to updateTasks(selectionCriteria = {}, customFieldsToUpdate = {})", selectionCriteria, customFieldsToUpdate); } - - if (customFieldsToUpdate == null || customFieldsToUpdate.isEmpty()) { - throw new InvalidArgumentException("The customFieldsToUpdate argument to updateTasks must not be empty."); - } validateObjectReference(selectionCriteria, "ObjectReference", "updateTasks call"); - - Set allowedKeys = new HashSet<>( - Arrays.asList("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16")); + validateCustomFields(customFieldsToUpdate); + CustomPropertySelector fieldSelector = new CustomPropertySelector(); + TaskImpl updated = initUpdatedTask(customFieldsToUpdate, fieldSelector); try { taskanaEngine.openConnection(); - CustomPropertySelector fieldSelector = new CustomPropertySelector(); - TaskImpl newTask = new TaskImpl(); - newTask.setModified(Instant.now()); - for (Map.Entry entry : customFieldsToUpdate.entrySet()) { - String key = entry.getKey(); - if (!allowedKeys.contains(key)) { - throw new InvalidArgumentException( - "The customFieldsToUpdate argument to updateTasks contains invalid key " + key); - } else { - fieldSelector.setCustomProperty(key, true); - newTask.setCustomAttribute(key, entry.getValue()); - } - } - // use query in order to find only those tasks that are visible to the current user - List taskSummaries = createTaskQuery() - .primaryObjectReferenceCompanyIn(selectionCriteria.getCompany()) - .primaryObjectReferenceSystemIn(selectionCriteria.getSystem()) - .primaryObjectReferenceSystemInstanceIn(selectionCriteria.getSystemInstance()) - .primaryObjectReferenceTypeIn(selectionCriteria.getType()) - .primaryObjectReferenceValueIn(selectionCriteria.getValue()) - .list(); + List taskSummaries = getTasksToChange(selectionCriteria); - List taskIds = new ArrayList<>(); + List changedTasks = new ArrayList<>(); if (!taskSummaries.isEmpty()) { - taskIds = taskSummaries.stream().map(TaskSummary::getTaskId).collect(Collectors.toList()); - taskMapper.updateTasks(taskIds, newTask, fieldSelector); + changedTasks = taskSummaries.stream().map(TaskSummary::getTaskId).collect(Collectors.toList()); + taskMapper.updateTasks(changedTasks, updated, fieldSelector); LOGGER.debug("updateTasks() updated the following tasks: {} ", - LoggerUtils.listToString(taskIds)); + LoggerUtils.listToString(changedTasks)); } else { LOGGER.debug("updateTasks() found no tasks for update "); } - return taskIds; + return changedTasks; } finally { - LOGGER.debug("exit from deleteTasks()."); + LOGGER.debug("exit from updateTasks()."); taskanaEngine.returnConnection(); } @@ -1135,39 +1111,20 @@ public class TaskServiceImpl implements TaskService { customFieldsToUpdate); } - if (customFieldsToUpdate == null || customFieldsToUpdate.isEmpty()) { - throw new InvalidArgumentException("The customFieldsToUpdate argument to updateTasks must not be empty."); - } - - Set allowedKeys = new HashSet<>( - Arrays.asList("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16")); + validateCustomFields(customFieldsToUpdate); + CustomPropertySelector fieldSelector = new CustomPropertySelector(); + TaskImpl updatedTask = initUpdatedTask(customFieldsToUpdate, fieldSelector); try { taskanaEngine.openConnection(); - CustomPropertySelector fieldSelector = new CustomPropertySelector(); - TaskImpl newTask = new TaskImpl(); - newTask.setModified(Instant.now()); - for (Map.Entry entry : customFieldsToUpdate.entrySet()) { - String key = entry.getKey(); - if (!allowedKeys.contains(key)) { - throw new InvalidArgumentException( - "The customFieldsToUpdate argument to updateTasks contains invalid key " + key); - } else { - fieldSelector.setCustomProperty(key, true); - newTask.setCustomAttribute(key, entry.getValue()); - } - } - // use query in order to find only those tasks that are visible to the current user - List taskSummaries = createTaskQuery() - .idIn(taskIds.toArray(new String[taskIds.size()])) - .list(); + List taskSummaries = getTasksToChange(taskIds); List changedTasks = new ArrayList<>(); if (!taskSummaries.isEmpty()) { changedTasks = taskSummaries.stream().map(TaskSummary::getTaskId).collect(Collectors.toList()); - taskMapper.updateTasks(changedTasks, newTask, fieldSelector); + taskMapper.updateTasks(changedTasks, updatedTask, fieldSelector); LOGGER.debug("updateTasks() updated the following tasks: {} ", LoggerUtils.listToString(changedTasks)); } else { @@ -1181,6 +1138,54 @@ public class TaskServiceImpl implements TaskService { } + private TaskImpl initUpdatedTask(Map customFieldsToUpdate, CustomPropertySelector fieldSelector) + throws InvalidArgumentException { + TaskImpl newTask = new TaskImpl(); + newTask.setModified(Instant.now()); + + for (Map.Entry entry : customFieldsToUpdate.entrySet()) { + String key = entry.getKey(); + fieldSelector.setCustomProperty(key, true); + newTask.setCustomAttribute(key, entry.getValue()); + } + return newTask; + } + + private void validateCustomFields(Map customFieldsToUpdate) throws InvalidArgumentException { + if (customFieldsToUpdate == null || customFieldsToUpdate.isEmpty()) { + throw new InvalidArgumentException("The customFieldsToUpdate argument to updateTasks must not be empty."); + } + + Set allowedKeys = new HashSet<>( + Arrays.asList("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16")); + + for (Map.Entry entry : customFieldsToUpdate.entrySet()) { + String key = entry.getKey(); + if (!allowedKeys.contains(key)) { + throw new InvalidArgumentException( + "The customFieldsToUpdate argument to updateTasks contains invalid key " + key); + } + } + } + + private List getTasksToChange(List taskIds) { + List taskSummaries = createTaskQuery() + .idIn(taskIds.toArray(new String[taskIds.size()])) + .list(); + return taskSummaries; + } + + private List getTasksToChange(ObjectReference selectionCriteria) { + List taskSummaries = createTaskQuery() + .primaryObjectReferenceCompanyIn(selectionCriteria.getCompany()) + .primaryObjectReferenceSystemIn(selectionCriteria.getSystem()) + .primaryObjectReferenceSystemInstanceIn(selectionCriteria.getSystemInstance()) + .primaryObjectReferenceTypeIn(selectionCriteria.getType()) + .primaryObjectReferenceValueIn(selectionCriteria.getValue()) + .list(); + return taskSummaries; + } + private void validateObjectReference(ObjectReference objRef, String objRefType, String objName) throws InvalidArgumentException { // check that all values in the ObjectReference are set correctly