Merged V4.0-BUGFIX into HEAD

36714: ALF-14224: WorkflowTaskDefinition form-key fetching fixed for multi-instance UserTasks

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@36719 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Frederik Heremans
2012-05-22 13:52:33 +00:00
parent ece106d1d8
commit 51015d7d4d
2 changed files with 45 additions and 9 deletions

View File

@@ -48,6 +48,7 @@ import org.activiti.engine.history.HistoricProcessInstanceQuery;
import org.activiti.engine.history.HistoricTaskInstance; import org.activiti.engine.history.HistoricTaskInstance;
import org.activiti.engine.history.HistoricTaskInstanceQuery; import org.activiti.engine.history.HistoricTaskInstanceQuery;
import org.activiti.engine.impl.RepositoryServiceImpl; import org.activiti.engine.impl.RepositoryServiceImpl;
import org.activiti.engine.impl.bpmn.behavior.MultiInstanceActivityBehavior;
import org.activiti.engine.impl.bpmn.behavior.ReceiveTaskActivityBehavior; import org.activiti.engine.impl.bpmn.behavior.ReceiveTaskActivityBehavior;
import org.activiti.engine.impl.bpmn.behavior.UserTaskActivityBehavior; import org.activiti.engine.impl.bpmn.behavior.UserTaskActivityBehavior;
import org.activiti.engine.impl.bpmn.deployer.BpmnDeployer; import org.activiti.engine.impl.bpmn.deployer.BpmnDeployer;
@@ -62,6 +63,7 @@ import org.activiti.engine.impl.pvm.PvmActivity;
import org.activiti.engine.impl.pvm.PvmTransition; import org.activiti.engine.impl.pvm.PvmTransition;
import org.activiti.engine.impl.pvm.ReadOnlyProcessDefinition; import org.activiti.engine.impl.pvm.ReadOnlyProcessDefinition;
import org.activiti.engine.impl.pvm.process.ActivityImpl; import org.activiti.engine.impl.pvm.process.ActivityImpl;
import org.activiti.engine.impl.task.TaskDefinition;
import org.activiti.engine.repository.Deployment; import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.ProcessDefinition; import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.runtime.Execution; import org.activiti.engine.runtime.Execution;
@@ -617,14 +619,14 @@ public class ActivitiWorkflowEngine extends BPMEngine implements WorkflowEngine
Collection<PvmActivity> taskActivities = findUserTasks(startEvent); Collection<PvmActivity> taskActivities = findUserTasks(startEvent);
for(PvmActivity act : taskActivities) for(PvmActivity act : taskActivities)
{ {
String formKey = getFormKey(act); String formKey = getFormKey(act, processDefinition);
defs.add(typeConverter.getTaskDefinition(act, formKey, processDefinition.getId(), false)); defs.add(typeConverter.getTaskDefinition(act, formKey, processDefinition.getId(), false));
} }
return defs; return defs;
} }
private String getFormKey(PvmActivity act) private String getFormKey(PvmActivity act, ReadOnlyProcessDefinition processDefinition)
{ {
if(act instanceof ActivityImpl) if(act instanceof ActivityImpl)
{ {
@@ -632,15 +634,33 @@ public class ActivitiWorkflowEngine extends BPMEngine implements WorkflowEngine
if (actImpl.getActivityBehavior() instanceof UserTaskActivityBehavior) if (actImpl.getActivityBehavior() instanceof UserTaskActivityBehavior)
{ {
UserTaskActivityBehavior uta = (UserTaskActivityBehavior) actImpl.getActivityBehavior(); UserTaskActivityBehavior uta = (UserTaskActivityBehavior) actImpl.getActivityBehavior();
TaskFormHandler handler = uta.getTaskDefinition().getTaskFormHandler(); return getFormKey(uta.getTaskDefinition());
}
else if(actImpl.getActivityBehavior() instanceof MultiInstanceActivityBehavior)
{
// Get the task-definition from the process-definition
if(processDefinition instanceof ProcessDefinitionEntity)
{
// Task definition id is the same the the activity id
TaskDefinition taskDef = ((ProcessDefinitionEntity) processDefinition).getTaskDefinitions().get(act.getId());
if(taskDef != null)
{
return getFormKey(taskDef);
}
}
}
}
return null;
}
private String getFormKey(TaskDefinition taskDefinition)
{
TaskFormHandler handler = taskDefinition.getTaskFormHandler();
if(handler != null && handler instanceof DefaultTaskFormHandler) if(handler != null && handler instanceof DefaultTaskFormHandler)
{ {
// We cast to DefaultTaskFormHandler since we do not configure our own // We cast to DefaultTaskFormHandler since we do not configure our own
return ((DefaultTaskFormHandler)handler).getFormKey(); return ((DefaultTaskFormHandler)handler).getFormKey();
} }
}
}
return null; return null;
} }

View File

@@ -33,6 +33,7 @@ import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.workflow.WorkflowDefinition; import org.alfresco.service.cmr.workflow.WorkflowDefinition;
import org.alfresco.service.cmr.workflow.WorkflowPath; import org.alfresco.service.cmr.workflow.WorkflowPath;
import org.alfresco.service.cmr.workflow.WorkflowTask; 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.WorkflowTaskQuery;
import org.alfresco.service.cmr.workflow.WorkflowTaskState; import org.alfresco.service.cmr.workflow.WorkflowTaskState;
import org.alfresco.service.namespace.NamespaceService; import org.alfresco.service.namespace.NamespaceService;
@@ -132,6 +133,21 @@ public class ActivitiWorkflowServiceIntegrationTest extends AbstractWorkflowServ
assertEquals(props.get(WorkflowModel.PROP_PRIORITY),Integer.valueOf(priorDef.getDefaultValue())); assertEquals(props.get(WorkflowModel.PROP_PRIORITY),Integer.valueOf(priorDef.getDefaultValue()));
} }
} }
public void testGetWorkflowTaskDefinitionsWithMultiInstanceTask()
{
// Test added to validate fix for ALF-14224
WorkflowDefinition definition = deployDefinition(getParallelReviewDefinitionPath());
String workflowDefId = definition.getId();
List<WorkflowTaskDefinition> taskDefs = workflowService.getTaskDefinitions(workflowDefId);
assertEquals(4, taskDefs.size());
// The first task is the start-task, the second one is a multi-instance UserTask. This should have the right form-key
WorkflowTaskDefinition taskDef = taskDefs.get(1);
assertEquals("wf:activitiReviewTask", taskDef.getId());
}
@Override @Override
protected void checkTaskQueryStartTaskCompleted(String workflowInstanceId, WorkflowTask startTask) protected void checkTaskQueryStartTaskCompleted(String workflowInstanceId, WorkflowTask startTask)
{ {