From 6c1f5649f1988961824caf90c3a3af24537760bf Mon Sep 17 00:00:00 2001 From: Frederik Heremans Date: Fri, 10 Jun 2011 13:41:52 +0000 Subject: [PATCH] Implementing workflow instance image in ActivitiWorkflowEngine (+tests) and updated activiti admin-ui fixing popup-bug git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@28333 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- config/alfresco/workflow/adhoc.bpmn20.xml | 50 ++++++++++--- .../workflow/parallel-review-group.bpmn20.xml | 71 ++++++++++++++++-- .../workflow/parallel-review.bpmn20.xml | 72 +++++++++++++++++-- .../workflow/review-pooled.bpmn20.xml | 72 +++++++++++++++++-- config/alfresco/workflow/review.bpmn20.xml | 72 +++++++++++++++++-- .../AbstractActivitiComponentTest.java | 6 ++ .../workflow/activiti/ActivitiConstants.java | 2 + .../ActivitiWorkflowComponentTest.java | 19 +++++ .../activiti/ActivitiWorkflowEngine.java | 28 +++++++- .../activiti/testDiagram.bpmn20.xml | 44 ++++++++++++ 10 files changed, 397 insertions(+), 39 deletions(-) create mode 100644 source/test-resources/activiti/testDiagram.bpmn20.xml diff --git a/config/alfresco/workflow/adhoc.bpmn20.xml b/config/alfresco/workflow/adhoc.bpmn20.xml index c4ed057a25..b5a712df3f 100644 --- a/config/alfresco/workflow/adhoc.bpmn20.xml +++ b/config/alfresco/workflow/adhoc.bpmn20.xml @@ -1,12 +1,10 @@ - + @@ -77,6 +75,42 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/config/alfresco/workflow/parallel-review-group.bpmn20.xml b/config/alfresco/workflow/parallel-review-group.bpmn20.xml index 0a63335372..1a055da53d 100644 --- a/config/alfresco/workflow/parallel-review-group.bpmn20.xml +++ b/config/alfresco/workflow/parallel-review-group.bpmn20.xml @@ -1,12 +1,10 @@ - + @@ -169,4 +167,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/config/alfresco/workflow/parallel-review.bpmn20.xml b/config/alfresco/workflow/parallel-review.bpmn20.xml index 918a1cfbe0..c0a181ab5d 100644 --- a/config/alfresco/workflow/parallel-review.bpmn20.xml +++ b/config/alfresco/workflow/parallel-review.bpmn20.xml @@ -1,12 +1,10 @@ - + @@ -150,5 +148,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/config/alfresco/workflow/review-pooled.bpmn20.xml b/config/alfresco/workflow/review-pooled.bpmn20.xml index 31ddc17116..aae1432ea4 100644 --- a/config/alfresco/workflow/review-pooled.bpmn20.xml +++ b/config/alfresco/workflow/review-pooled.bpmn20.xml @@ -1,12 +1,10 @@ - + @@ -125,5 +123,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/config/alfresco/workflow/review.bpmn20.xml b/config/alfresco/workflow/review.bpmn20.xml index 70a4bdf19c..279171fce8 100644 --- a/config/alfresco/workflow/review.bpmn20.xml +++ b/config/alfresco/workflow/review.bpmn20.xml @@ -1,12 +1,10 @@ - + @@ -110,5 +108,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/java/org/alfresco/repo/workflow/activiti/AbstractActivitiComponentTest.java b/source/java/org/alfresco/repo/workflow/activiti/AbstractActivitiComponentTest.java index 4db6ffca28..9674cf9be7 100644 --- a/source/java/org/alfresco/repo/workflow/activiti/AbstractActivitiComponentTest.java +++ b/source/java/org/alfresco/repo/workflow/activiti/AbstractActivitiComponentTest.java @@ -101,6 +101,7 @@ public class AbstractActivitiComponentTest protected static final String TEST_ADHOC_KEY = "testAdhoc"; protected static final String TEST_JOB_KEY = "testAdhoc"; protected static final String TEST_JOB_DEF = "activiti/testJob.bpmn20.xml"; + protected static final String TEST_DIAGRAM_DEF = "activiti/testDiagram.bpmn20.xml"; protected static final String XML = MimetypeMap.MIMETYPE_XML; @@ -179,6 +180,11 @@ public class AbstractActivitiComponentTest return deployDefinition(TEST_JOB_DEF); } + protected WorkflowDefinition deployTestDiagramDefinition() + { + return deployDefinition(TEST_DIAGRAM_DEF); + } + protected WorkflowDefinition deployDefinition(String resource) { InputStream input = getInputStream(resource); diff --git a/source/java/org/alfresco/repo/workflow/activiti/ActivitiConstants.java b/source/java/org/alfresco/repo/workflow/activiti/ActivitiConstants.java index 3f14cd4bba..30d462a4a3 100644 --- a/source/java/org/alfresco/repo/workflow/activiti/ActivitiConstants.java +++ b/source/java/org/alfresco/repo/workflow/activiti/ActivitiConstants.java @@ -45,5 +45,7 @@ public interface ActivitiConstants public static final String SERVICE_REGISTRY_BEAN_KEY = "services"; + public static final String PROCESS_INSTANCE_IMAGE_FORMAT = "png"; + } diff --git a/source/java/org/alfresco/repo/workflow/activiti/ActivitiWorkflowComponentTest.java b/source/java/org/alfresco/repo/workflow/activiti/ActivitiWorkflowComponentTest.java index 20419d8a40..6be42f8be9 100644 --- a/source/java/org/alfresco/repo/workflow/activiti/ActivitiWorkflowComponentTest.java +++ b/source/java/org/alfresco/repo/workflow/activiti/ActivitiWorkflowComponentTest.java @@ -680,6 +680,25 @@ public class ActivitiWorkflowComponentTest extends AbstractActivitiComponentTest assertEquals(0, timers.size()); } + @Test + public void testGetWorkflowImage() { + WorkflowDefinition definitionWithoutImage = deployTestAdhocDefinition(); + WorkflowDefinition definitionWithImage = deployTestDiagramDefinition(); + + // Start process-instance that shouldn't have an image + ProcessInstance processInstance = runtime.startProcessInstanceById(BPMEngineRegistry.getLocalId(definitionWithoutImage.getId())); + String worklfowId = BPMEngineRegistry.createGlobalId(ActivitiConstants.ENGINE_ID, processInstance.getId()); + + assertNull(workflowEngine.getWorkflowImage(worklfowId)); + + // Start process-instance that SHOULD have an image + ProcessInstance processInstanceWithImage = runtime.startProcessInstanceById(BPMEngineRegistry.getLocalId(definitionWithImage.getId())); + String worklfowWithImageId = BPMEngineRegistry.createGlobalId(ActivitiConstants.ENGINE_ID, processInstanceWithImage.getId()); + + assertNotNull(workflowEngine.getWorkflowImage(worklfowWithImageId)); + } + + private void putVariable(Map variables, QName varName, Object value) { String variableName = mapQNameToName(varName); diff --git a/source/java/org/alfresco/repo/workflow/activiti/ActivitiWorkflowEngine.java b/source/java/org/alfresco/repo/workflow/activiti/ActivitiWorkflowEngine.java index 561696a4a4..dbdec815c5 100644 --- a/source/java/org/alfresco/repo/workflow/activiti/ActivitiWorkflowEngine.java +++ b/source/java/org/alfresco/repo/workflow/activiti/ActivitiWorkflowEngine.java @@ -48,9 +48,12 @@ import org.activiti.engine.history.HistoricTaskInstanceQuery; import org.activiti.engine.impl.RepositoryServiceImpl; import org.activiti.engine.impl.bpmn.behavior.UserTaskActivityBehavior; import org.activiti.engine.impl.bpmn.deployer.BpmnDeployer; +import org.activiti.engine.impl.bpmn.diagram.ProcessDiagramGenerator; import org.activiti.engine.impl.form.DefaultTaskFormHandler; import org.activiti.engine.impl.form.TaskFormHandler; import org.activiti.engine.impl.identity.Authentication; +import org.activiti.engine.impl.persistence.entity.ExecutionEntity; +import org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntity; import org.activiti.engine.impl.persistence.entity.TimerEntity; import org.activiti.engine.impl.pvm.PvmActivity; import org.activiti.engine.impl.pvm.PvmTransition; @@ -986,8 +989,7 @@ public class ActivitiWorkflowEngine extends BPMEngine implements WorkflowEngine ProcessDefinition procDef = repoService.createProcessDefinitionQuery() .processDefinitionId(procDefId) .singleResult(); - if(procDef == null) - { + if(procDef == null) { String msg = messageService.getMessage(ERR_UNDEPLOY_WORKFLOW_UNEXISTING, workflowDefinitionId); throw new WorkflowException(msg); } @@ -1007,7 +1009,27 @@ public class ActivitiWorkflowEngine extends BPMEngine implements WorkflowEngine @Override public InputStream getWorkflowImage(String workflowInstanceId) { - // TODO: Link this up with the underlying Activiti instance diagram API + String processInstanceId = createLocalId(workflowInstanceId); + ExecutionEntity pi = (ExecutionEntity) runtimeService.createProcessInstanceQuery() + .processInstanceId(processInstanceId).singleResult(); + + // If the process is finished, there is no diagram available + if (pi != null) + { + // Fetch the process-definition. Not using query API, since the + // returned + // processdefinition isn't initialized with all activities + ProcessDefinitionEntity processDefinition = (ProcessDefinitionEntity) ((RepositoryServiceImpl) repoService) + .getDeployedProcessDefinition(pi.getProcessDefinitionId()); + + if (processDefinition != null && processDefinition.isGraphicalNotationDefined()) + { + return ProcessDiagramGenerator + .generateDiagram(processDefinition, + ActivitiConstants.PROCESS_INSTANCE_IMAGE_FORMAT, + runtimeService.getActiveActivityIds(processInstanceId)); + } + } return null; } diff --git a/source/test-resources/activiti/testDiagram.bpmn20.xml b/source/test-resources/activiti/testDiagram.bpmn20.xml new file mode 100644 index 0000000000..d750e92e5d --- /dev/null +++ b/source/test-resources/activiti/testDiagram.bpmn20.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file