From f1419ab8ea9080deb2252601c7c331c315b347e5 Mon Sep 17 00:00:00 2001 From: jensp Date: Thu, 22 Jun 2017 16:39:55 +0000 Subject: [PATCH] CCM NG/ccm-core: WorkflowManager added multiple TaskAssignments for same task and assignee git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@4799 8810af33-2d31-482b-a856-94f89814c4df --- .../libreccm/workflow/WorkflowManager.java | 35 +++++++++++++++---- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/ccm-core/src/main/java/org/libreccm/workflow/WorkflowManager.java b/ccm-core/src/main/java/org/libreccm/workflow/WorkflowManager.java index e5c0a4b5c..cf645583c 100644 --- a/ccm-core/src/main/java/org/libreccm/workflow/WorkflowManager.java +++ b/ccm-core/src/main/java/org/libreccm/workflow/WorkflowManager.java @@ -49,7 +49,9 @@ import javax.inject.Inject; import javax.persistence.EntityManager; import javax.persistence.TypedQuery; import javax.transaction.Transactional; + import org.apache.shiro.subject.Subject; +import org.libreccm.security.Role; /** * Manager for {@link Workflow}s. The logic of some of these classes has been @@ -82,6 +84,9 @@ public class WorkflowManager { @Inject private TaskManager taskManager; + @Inject + private AssignableTaskManager assignableTaskManager; + @Inject private Shiro shiro; @@ -138,6 +143,8 @@ public class WorkflowManager { .forEach((locale, str) -> description.addValue(locale, str)); workflow.setDescription(description); + workflowRepo.save(workflow); + final Map tasks = new HashMap<>(); template @@ -147,7 +154,7 @@ public class WorkflowManager { .getTasks() .forEach(taskTemplate -> { fixTaskDependencies(taskTemplate, - tasks.get(taskTemplate.getTaskId()), + tasks.get(taskTemplate.getTaskId()), tasks); }); @@ -169,10 +176,10 @@ public class WorkflowManager { * @param template The template for the task from the workflow template. * @param tasks A map for storing the new tasks. */ - private void createTask(final Workflow workflow, - final Task template, + private void createTask(final Workflow workflow, + final Task template, final Map tasks) { - + final Class templateClass = template.getClass(); final Task task; try { @@ -224,10 +231,24 @@ public class WorkflowManager { | InvocationTargetException ex) { throw new RuntimeException(); } + } - workflow.addTask(task); - task.setWorkflow(workflow); - tasks.put(template.getTaskId(), task); + workflow.addTask(task); + task.setWorkflow(workflow); + tasks.put(template.getTaskId(), task); + + if (template instanceof AssignableTask) { + final AssignableTask assignableTemplate + = (AssignableTask) template; + final AssignableTask assignableTask = (AssignableTask) task; + + assignableTemplate + .getAssignments() + .stream() + .map(TaskAssignment::getRole) + .forEach(role -> { + assignableTaskManager.assignTask(assignableTask, role); + }); } }