From 1dd3aa14f66e4f8303e3fc1ddb22b7ce42a0d981 Mon Sep 17 00:00:00 2001 From: Gavin Cornwell Date: Wed, 4 Aug 2010 07:27:55 +0000 Subject: [PATCH] Merged BRANCHES/DEV/BELARUS/HEAD_2010_07_29 to HEAD: 21577: ALF-3895 : F66 REST API to get a specific workflow instance git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@21584 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../workflow/WorkflowModelBuilder.java | 101 ++++++++---------- 1 file changed, 47 insertions(+), 54 deletions(-) diff --git a/source/java/org/alfresco/repo/web/scripts/workflow/WorkflowModelBuilder.java b/source/java/org/alfresco/repo/web/scripts/workflow/WorkflowModelBuilder.java index ae01fabd83..76d571d2d5 100644 --- a/source/java/org/alfresco/repo/web/scripts/workflow/WorkflowModelBuilder.java +++ b/source/java/org/alfresco/repo/web/scripts/workflow/WorkflowModelBuilder.java @@ -47,7 +47,6 @@ import org.alfresco.service.cmr.workflow.WorkflowService; import org.alfresco.service.cmr.workflow.WorkflowTask; import org.alfresco.service.cmr.workflow.WorkflowTaskDefinition; import org.alfresco.service.cmr.workflow.WorkflowTaskQuery; -import org.alfresco.service.cmr.workflow.WorkflowTaskState; import org.alfresco.service.cmr.workflow.WorkflowTransition; import org.alfresco.service.namespace.NamespaceException; import org.alfresco.service.namespace.NamespaceService; @@ -255,61 +254,15 @@ public class WorkflowModelBuilder Serializable priority = null; Serializable startTaskId = null; - // get all active tasks - List activeTasks = workflowService.queryTasks(new WorkflowTaskQuery()); - // get all completed tasks - WorkflowTaskQuery completedTasksQuery = new WorkflowTaskQuery(); - completedTasksQuery.setTaskState(WorkflowTaskState.COMPLETED); - completedTasksQuery.setActive(null); - List completedTasks = workflowService.queryTasks(completedTasksQuery); - - ArrayList> results = new ArrayList>(); - - for (WorkflowTask completedTask : completedTasks) + WorkflowTask startTask = getStartTaskForWorkflow(workflowInstance); + + if (startTask != null) { - if (completedTask.path.instance.id.equals(workflowInstance.id)) - { - if (completedTask.properties.get(WorkflowModel.PROP_DUE_DATE) != null) - { - dueDate = completedTask.properties.get(WorkflowModel.PROP_DUE_DATE); - } - if (completedTask.properties.get(WorkflowModel.PROP_PRIORITY) != null) - { - priority = completedTask.properties.get(WorkflowModel.PROP_PRIORITY); - } - if (workflowInstance.definition.getStartTaskDefinition().id.equals(completedTask.definition.id)) - { - startTaskId = completedTask.id; - } - results.add(buildSimple(completedTask, null)); - } + startTaskId = startTask.id; + dueDate = startTask.properties.get(WorkflowModel.PROP_WORKFLOW_DUE_DATE); + priority = startTask.properties.get(WorkflowModel.PROP_WORKFLOW_PRIORITY); } - - for (WorkflowTask activeTask : activeTasks) - { - if (activeTask.path.instance.id.equals(workflowInstance.id)) - { - if (activeTask.properties.get(WorkflowModel.PROP_DUE_DATE) != null) - { - dueDate = activeTask.properties.get(WorkflowModel.PROP_DUE_DATE); - } - if (activeTask.properties.get(WorkflowModel.PROP_PRIORITY) != null) - { - priority = activeTask.properties.get(WorkflowModel.PROP_PRIORITY); - } - if (workflowInstance.definition.getStartTaskDefinition().id.equals(activeTask.definition.id)) - { - startTaskId = activeTask.id; - } - results.add(buildSimple(activeTask, null)); - } - } - - if (includeTasks) - { - model.put(TASK_WORKFLOW_INSTANCE_TASKS, results); - } - + if (dueDate != null) { model.put(TASK_WORKFLOW_INSTANCE_DUE_DATE, ISO8601DateFormat.format((Date) dueDate)); @@ -329,6 +282,25 @@ public class WorkflowModelBuilder model.put(TASK_WORKFLOW_INSTANCE_START_TASK_INSTANCE_ID, startTaskId); model.put(TASK_WORKFLOW_INSTANCE_DEFINITION, buildDetailed(workflowInstance.definition)); + if (includeTasks) + { + // get all tasks for workflow + WorkflowTaskQuery tasksQuery = new WorkflowTaskQuery(); + tasksQuery.setTaskState(null); + tasksQuery.setActive(null); + tasksQuery.setProcessId(workflowInstance.id); + List tasks = workflowService.queryTasks(tasksQuery); + + ArrayList> results = new ArrayList>(tasks.size()); + + for (WorkflowTask task : tasks) + { + results.add(buildSimple(task, null)); + } + + model.put(TASK_WORKFLOW_INSTANCE_TASKS, results); + } + return model; } @@ -564,6 +536,27 @@ public class WorkflowModelBuilder return hiddenTransitions.contains(transitionId); } + protected WorkflowTask getStartTaskForWorkflow(WorkflowInstance workflowInstance) + { + WorkflowTaskQuery startTaskQuery = new WorkflowTaskQuery(); + startTaskQuery.setTaskState(null); + startTaskQuery.setActive(null); + startTaskQuery.setTaskName(workflowInstance.definition.getStartTaskDefinition().metadata.getName()); + startTaskQuery.setProcessId(workflowInstance.id); + + List startTasks = workflowService.queryTasks(startTaskQuery); + + if (!startTasks.isEmpty()) + { + return startTasks.get(0); + } + else + { + return null; + } + + } + private String getUrl(WorkflowTask task) { return "api/task-instances/" + task.getId();