From ab85be5821d972b2e97e1d6b4306eafe0e1ede97 Mon Sep 17 00:00:00 2001 From: Jan Vonka Date: Thu, 6 Sep 2007 17:10:39 +0000 Subject: [PATCH] Added getTaskDefinitions to WorkflowService - required for delete model validation git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@6693 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../repo/workflow/WorkflowComponent.java | 10 ++++ .../repo/workflow/WorkflowServiceImpl.java | 11 +++++ .../workflow/WorkflowServiceImplTest.java | 14 ++++++ .../repo/workflow/jbpm/JBPMEngine.java | 46 +++++++++++++++++++ .../service/cmr/workflow/WorkflowService.java | 9 ++++ 5 files changed, 90 insertions(+) diff --git a/source/java/org/alfresco/repo/workflow/WorkflowComponent.java b/source/java/org/alfresco/repo/workflow/WorkflowComponent.java index 006bfd1eb9..206976e9b9 100644 --- a/source/java/org/alfresco/repo/workflow/WorkflowComponent.java +++ b/source/java/org/alfresco/repo/workflow/WorkflowComponent.java @@ -35,6 +35,7 @@ import org.alfresco.service.cmr.workflow.WorkflowDeployment; import org.alfresco.service.cmr.workflow.WorkflowInstance; import org.alfresco.service.cmr.workflow.WorkflowPath; import org.alfresco.service.cmr.workflow.WorkflowTask; +import org.alfresco.service.cmr.workflow.WorkflowTaskDefinition; import org.alfresco.service.cmr.workflow.WorkflowTimer; import org.alfresco.service.namespace.QName; @@ -131,6 +132,15 @@ public interface WorkflowComponent @Auditable(parameters = {"workflowDefinitionId"}) public byte[] getDefinitionImage(String workflowDefinitionId); + /** + * Gets the Task Definitions for the given Workflow Definition + * + * @param workflowDefinitionId the workflow definition id + * @return the deployed task definitions (or null if not found) + */ + @Auditable(parameters = {"workflowDefinitionId"}) + public List getTaskDefinitions(final String workflowDefinitionId); + // // Workflow Instance Support diff --git a/source/java/org/alfresco/repo/workflow/WorkflowServiceImpl.java b/source/java/org/alfresco/repo/workflow/WorkflowServiceImpl.java index d73c464aeb..9b84b16ba8 100644 --- a/source/java/org/alfresco/repo/workflow/WorkflowServiceImpl.java +++ b/source/java/org/alfresco/repo/workflow/WorkflowServiceImpl.java @@ -42,6 +42,7 @@ import org.alfresco.service.cmr.workflow.WorkflowInstance; import org.alfresco.service.cmr.workflow.WorkflowPath; 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.WorkflowTimer; @@ -220,6 +221,16 @@ public class WorkflowServiceImpl implements WorkflowService return definitionImage; } + /* (non-Javadoc) + * @see org.alfresco.service.cmr.workflow.WorkflowService#getAllTaskDefinitions(java.lang.String) + */ + public List getTaskDefinitions(final String workflowDefinitionId) + { + String engineId = BPMEngineRegistry.getEngineId(workflowDefinitionId); + WorkflowComponent component = getWorkflowComponent(engineId); + return component.getTaskDefinitions(workflowDefinitionId); + } + /* (non-Javadoc) * @see org.alfresco.service.cmr.workflow.WorkflowService#startWorkflow(java.lang.String, java.util.Map) */ diff --git a/source/java/org/alfresco/repo/workflow/WorkflowServiceImplTest.java b/source/java/org/alfresco/repo/workflow/WorkflowServiceImplTest.java index 8d9c4f2d2e..3ae50c695e 100644 --- a/source/java/org/alfresco/repo/workflow/WorkflowServiceImplTest.java +++ b/source/java/org/alfresco/repo/workflow/WorkflowServiceImplTest.java @@ -41,6 +41,7 @@ import org.alfresco.service.cmr.workflow.WorkflowInstance; import org.alfresco.service.cmr.workflow.WorkflowPath; 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.namespace.NamespaceService; @@ -160,4 +161,17 @@ public class WorkflowServiceImplTest extends BaseSpringTest assertEquals(0, completedInstances.size()); } + public void testGetWorkflowTaskDefinitions() + { + List workflowDefs = workflowService.getDefinitions(); + assertNotNull(workflowDefs); + assertTrue(workflowDefs.size() > 0); + + for (WorkflowDefinition workflowDef : workflowDefs) + { + List workflowTaskDefs = workflowService.getTaskDefinitions(workflowDef.getId()); + assertNotNull(workflowTaskDefs); + assertTrue(workflowTaskDefs.size() > 0); + } + } } diff --git a/source/java/org/alfresco/repo/workflow/jbpm/JBPMEngine.java b/source/java/org/alfresco/repo/workflow/jbpm/JBPMEngine.java index aa5746688b..cdf8ee3de3 100644 --- a/source/java/org/alfresco/repo/workflow/jbpm/JBPMEngine.java +++ b/source/java/org/alfresco/repo/workflow/jbpm/JBPMEngine.java @@ -106,6 +106,7 @@ import org.jbpm.job.Timer; import org.jbpm.jpdl.par.ProcessArchive; import org.jbpm.jpdl.xml.Problem; import org.jbpm.taskmgmt.def.Task; +import org.jbpm.taskmgmt.def.TaskMgmtDefinition; import org.jbpm.taskmgmt.exe.PooledActor; import org.jbpm.taskmgmt.exe.TaskInstance; import org.springframework.util.StringUtils; @@ -560,6 +561,51 @@ public class JBPMEngine extends BPMEngine } } + /* (non-Javadoc) + * @see org.alfresco.repo.workflow.WorkflowComponent#getAllTaskDefinitions(java.lang.String) + */ + @SuppressWarnings("unchecked") + public List getTaskDefinitions(final String workflowDefinitionId) + { + try + { + return (List)jbpmTemplate.execute(new JbpmCallback() + { + public Object doInJbpm(JbpmContext context) + { + // retrieve process + GraphSession graphSession = context.getGraphSession(); + ProcessDefinition processDefinition = getProcessDefinition(graphSession, workflowDefinitionId); + + if (processDefinition == null) + { + return null; + } + else + { + String processName = processDefinition.getName(); + if (tenantService.isEnabled()) + { + tenantService.checkDomain(processName); // throws exception if domain mismatch + } + + TaskMgmtDefinition taskMgmtDef = processDefinition.getTaskMgmtDefinition(); + List workflowTaskDefs = new ArrayList(); + for (Object task : taskMgmtDef.getTasks().values()) + { + workflowTaskDefs.add(createWorkflowTaskDefinition((Task)task)); + } + return (workflowTaskDefs.size() == 0) ? null : workflowTaskDefs; + } + } + }); + } + catch(JbpmException e) + { + throw new WorkflowException("Failed to retrieve workflow task definitions for workflow definition '" + workflowDefinitionId + "'", e); + } + } + /** * Gets a jBPM process definition * diff --git a/source/java/org/alfresco/service/cmr/workflow/WorkflowService.java b/source/java/org/alfresco/service/cmr/workflow/WorkflowService.java index 60b2576a0a..cf57848682 100644 --- a/source/java/org/alfresco/service/cmr/workflow/WorkflowService.java +++ b/source/java/org/alfresco/service/cmr/workflow/WorkflowService.java @@ -148,6 +148,15 @@ public interface WorkflowService @Auditable(parameters = {"workflowDefinitionId"}) public byte[] getDefinitionImage(String workflowDefinitionId); + /** + * Gets the Task Definitions for the given Workflow Definition + * + * @param workflowDefinitionId the workflow definition id + * @return the deployed task definitions (or null if not found) + */ + @Auditable(parameters = {"workflowDefinitionId"}) + public List getTaskDefinitions(final String workflowDefinitionId); + // // Workflow Instance Management