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
This commit is contained in:
Frederik Heremans
2011-06-10 13:41:52 +00:00
parent 8db6f19a3a
commit 6c1f5649f1
10 changed files with 397 additions and 39 deletions

View File

@@ -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);

View File

@@ -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";
}

View File

@@ -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<String, Object> variables, QName varName, Object value)
{
String variableName = mapQNameToName(varName);

View File

@@ -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;
}