diff --git a/source/java/org/alfresco/repo/workflow/WorkflowComponent.java b/source/java/org/alfresco/repo/workflow/WorkflowComponent.java index a1955e1150..07517a4da4 100644 --- a/source/java/org/alfresco/repo/workflow/WorkflowComponent.java +++ b/source/java/org/alfresco/repo/workflow/WorkflowComponent.java @@ -151,13 +151,29 @@ public interface WorkflowComponent public WorkflowPath startWorkflow(String workflowDefinitionId, Map parameters); /** - * Gets all "in-flight" workflow instances of the specified Workflow Definition + * Gets all "in-flight" active workflow instances of the specified Workflow Definition * * @param workflowDefinitionId the workflow definition id * @return the list of "in-flight" workflow instances */ public List getActiveWorkflows(String workflowDefinitionId); + /** + * Gets all "in-flight" completed workflow instances of the specified Workflow Definition + * + * @param workflowDefinitionId the workflow definition id + * @return the list of "in-flight" workflow instances + */ + public List getCompletedWorkflows(String workflowDefinitionId); + + /** + * Gets all "in-flight" workflow instances (both active and completed) of the specified Workflow Definition + * + * @param workflowDefinitionId the workflow definition id + * @return the list of "in-flight" workflow instances + */ + public List getWorkflows(String workflowDefinitionId); + /** * Gets a specific workflow instances * diff --git a/source/java/org/alfresco/repo/workflow/WorkflowServiceImpl.java b/source/java/org/alfresco/repo/workflow/WorkflowServiceImpl.java index 5e88acff4e..344e20a080 100644 --- a/source/java/org/alfresco/repo/workflow/WorkflowServiceImpl.java +++ b/source/java/org/alfresco/repo/workflow/WorkflowServiceImpl.java @@ -381,6 +381,32 @@ public class WorkflowServiceImpl implements WorkflowService return component.getActiveWorkflows(workflowDefinitionId); } + /* + * (non-Javadoc) + * @see + * org.alfresco.service.cmr.workflow.WorkflowService#getCompletedWorkflows( + * java.lang.String) + */ + public List getCompletedWorkflows(String workflowDefinitionId) + { + String engineId = BPMEngineRegistry.getEngineId(workflowDefinitionId); + WorkflowComponent component = getWorkflowComponent(engineId); + return component.getCompletedWorkflows(workflowDefinitionId); + } + + /* + * (non-Javadoc) + * @see + * org.alfresco.service.cmr.workflow.WorkflowService#getWorkflows( + * java.lang.String) + */ + public List getWorkflows(String workflowDefinitionId) + { + String engineId = BPMEngineRegistry.getEngineId(workflowDefinitionId); + WorkflowComponent component = getWorkflowComponent(engineId); + return component.getWorkflows(workflowDefinitionId); + } + /* * (non-Javadoc) * @see diff --git a/source/java/org/alfresco/repo/workflow/jbpm/JBPMEngine.java b/source/java/org/alfresco/repo/workflow/jbpm/JBPMEngine.java index e9383171a1..5a1c5e3a53 100644 --- a/source/java/org/alfresco/repo/workflow/jbpm/JBPMEngine.java +++ b/source/java/org/alfresco/repo/workflow/jbpm/JBPMEngine.java @@ -782,6 +782,28 @@ public class JBPMEngine extends BPMEngine */ @SuppressWarnings("unchecked") public List getActiveWorkflows(final String workflowDefinitionId) + { + return getWorkflowsInternal(workflowDefinitionId, true); + } + + /* (non-Javadoc) + * @see org.alfresco.repo.workflow.WorkflowComponent#getCompletedWorkflows(java.lang.String) + */ + public List getCompletedWorkflows(final String workflowDefinitionId) + { + return getWorkflowsInternal(workflowDefinitionId, false); + } + + /* (non-Javadoc) + * @see org.alfresco.repo.workflow.WorkflowComponent#getWorkflows(java.lang.String) + */ + public List getWorkflows(final String workflowDefinitionId) + { + return getWorkflowsInternal(workflowDefinitionId, null); + } + + @SuppressWarnings("unchecked") + private List getWorkflowsInternal(final String workflowDefinitionId, final Boolean active) { try { @@ -794,7 +816,7 @@ public class JBPMEngine extends BPMEngine List workflowInstances = new ArrayList(processInstances.size()); for (ProcessInstance processInstance : processInstances) { - if (!processInstance.hasEnded()) + if ((active == null) || (!active && processInstance.hasEnded()) || (active && !processInstance.hasEnded())) { WorkflowInstance workflowInstance = createWorkflowInstance(processInstance); workflowInstances.add(workflowInstance); diff --git a/source/java/org/alfresco/service/cmr/workflow/WorkflowService.java b/source/java/org/alfresco/service/cmr/workflow/WorkflowService.java index c50ce34de1..a6720f8627 100644 --- a/source/java/org/alfresco/service/cmr/workflow/WorkflowService.java +++ b/source/java/org/alfresco/service/cmr/workflow/WorkflowService.java @@ -194,7 +194,7 @@ public interface WorkflowService public WorkflowPath startWorkflowFromTemplate(NodeRef templateDefinition); /** - * Gets all "in-flight" workflow instances of the specified Workflow Definition + * Gets all "in-flight" active workflow instances of the specified Workflow Definition * * @param workflowDefinitionId the workflow definition id * @return the list of "in-flight" workflow instances @@ -202,6 +202,24 @@ public interface WorkflowService @Auditable(parameters = {"workflowDefinitionId"}) public List getActiveWorkflows(String workflowDefinitionId); + /** + * Gets all "in-flight" completed workflow instances of the specified Workflow Definition + * + * @param workflowDefinitionId the workflow definition id + * @return the list of "in-flight" workflow instances + */ + @Auditable(parameters = {"workflowDefinitionId"}) + public List getCompletedWorkflows(String workflowDefinitionId); + + /** + * Gets all "in-flight" workflow instances (both active and completed) of the specified Workflow Definition + * + * @param workflowDefinitionId the workflow definition id + * @return the list of "in-flight" workflow instances + */ + @Auditable(parameters = {"workflowDefinitionId"}) + public List getWorkflows(String workflowDefinitionId); + /** * Gets a specific workflow instances *