ALF-19822: Task listeners wired for multi-instance user-tasks now, copying correct workflow-details to default task-properties

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@55431 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Frederik Heremans
2013-09-18 07:44:54 +00:00
parent c61dd01e28
commit ec2e2a3660
3 changed files with 63 additions and 10 deletions

View File

@@ -18,6 +18,7 @@ import java.util.List;
import org.activiti.bpmn.model.BaseElement;
import org.activiti.bpmn.model.UserTask;
import org.activiti.engine.delegate.TaskListener;
import org.activiti.engine.impl.bpmn.behavior.MultiInstanceActivityBehavior;
import org.activiti.engine.impl.bpmn.behavior.UserTaskActivityBehavior;
import org.activiti.engine.impl.bpmn.parser.BpmnParse;
import org.activiti.engine.impl.bpmn.parser.handler.AbstractBpmnParseHandler;
@@ -49,15 +50,27 @@ public class AlfrescoUserTaskBpmnParseHandler extends AbstractBpmnParseHandler<U
ActivityBehavior activitybehaviour = activity.getActivityBehavior();
if (activitybehaviour instanceof UserTaskActivityBehavior)
{
UserTaskActivityBehavior userTaskActivity = (UserTaskActivityBehavior) activitybehaviour;
addListeners((UserTaskActivityBehavior) activity.getActivityBehavior());
}
else if(activitybehaviour instanceof MultiInstanceActivityBehavior)
{
MultiInstanceActivityBehavior multiInstance = (MultiInstanceActivityBehavior) activitybehaviour;
if(multiInstance.getInnerActivityBehavior() instanceof UserTaskActivityBehavior)
{
addListeners((UserTaskActivityBehavior) multiInstance.getInnerActivityBehavior());
}
}
}
protected void addListeners(UserTaskActivityBehavior activityBehavior)
{
if (createTaskListener != null)
{
addTaskListenerAsFirst(createTaskListener, TaskListener.EVENTNAME_CREATE, userTaskActivity);
addTaskListenerAsFirst(createTaskListener, TaskListener.EVENTNAME_CREATE, activityBehavior);
}
if (completeTaskListener != null)
{
addTaskListenerAsFirst(completeTaskListener, TaskListener.EVENTNAME_COMPLETE, userTaskActivity);
}
addTaskListenerAsFirst(completeTaskListener, TaskListener.EVENTNAME_COMPLETE, activityBehavior);
}
}
@@ -71,7 +84,8 @@ public class AlfrescoUserTaskBpmnParseHandler extends AbstractBpmnParseHandler<U
this.createTaskListener = createTaskListener;
}
protected void addTaskListenerAsFirst(TaskListener taskListener, String eventName, UserTaskActivityBehavior userTask) {
protected void addTaskListenerAsFirst(TaskListener taskListener, String eventName, UserTaskActivityBehavior userTask)
{
List<TaskListener> taskEventListeners = userTask.getTaskDefinition().getTaskListeners().get(eventName);
if (taskEventListeners == null) {
taskEventListeners = new ArrayList<TaskListener>();

View File

@@ -38,6 +38,7 @@ import org.alfresco.repo.security.permissions.AccessDeniedException;
import org.alfresco.repo.security.person.TestGroupManager;
import org.alfresco.repo.security.person.TestPersonManager;
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
import org.alfresco.repo.transaction.TransactionServiceImpl;
import org.alfresco.service.ServiceRegistry;
import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.NodeRef;
@@ -59,7 +60,6 @@ import org.alfresco.service.cmr.workflow.WorkflowTaskState;
import org.alfresco.service.cmr.workflow.WorkflowTimer;
import org.alfresco.service.namespace.NamespaceService;
import org.alfresco.service.namespace.QName;
import org.alfresco.repo.transaction.TransactionServiceImpl;
import org.alfresco.util.BaseSpringTest;
import org.alfresco.util.GUID;
import org.alfresco.util.collections.CollectionUtils;

View File

@@ -22,6 +22,7 @@ package org.alfresco.repo.workflow.activiti;
import java.io.Serializable;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -211,6 +212,44 @@ public class ActivitiWorkflowServiceIntegrationTest extends AbstractWorkflowServ
}
}
/**
* Test to validate fix for ALF-19822
*/
public void testMultiInstanceListenersCalled() throws Exception
{
// start pooled review and approve workflow
WorkflowDefinition workflowDef = deployDefinition(getParallelReviewDefinitionPath());
assertNotNull(workflowDef);
// Create workflow parameters
Map<QName, Serializable> params = new HashMap<QName, Serializable>();
Serializable wfPackage = workflowService.createPackage(null);
params.put(WorkflowModel.ASSOC_PACKAGE, wfPackage);
Date dueDate = new Date();
params.put(WorkflowModel.PROP_WORKFLOW_DUE_DATE, dueDate);
params.put(WorkflowModel.PROP_WORKFLOW_PRIORITY, 1);
params.put(WorkflowModel.PROP_WORKFLOW_DESCRIPTION, "This is the description");
NodeRef group = groupManager.get(GROUP);
assertNotNull(group);
List<NodeRef> assignees = Arrays.asList(personManager.get(USER2), personManager.get(USER3));
params.put(WorkflowModel.ASSOC_ASSIGNEES, (Serializable) assignees);
// Start a workflow instance
WorkflowPath path = workflowService.startWorkflow(workflowDef.getId(), params);
assertNotNull(path);
assertTrue(path.isActive());
String instnaceId = path.getInstance().getId();
WorkflowTask startTask = workflowService.getStartTask(instnaceId);
workflowService.endTask(startTask.getId(), null);
personManager.setUser(USER2);
List<WorkflowTask> tasks = workflowService.getAssignedTasks(USER2, WorkflowTaskState.IN_PROGRESS);
assertEquals(1, tasks.size());
assertEquals("This is the description", tasks.get(0).getDescription());
}
@Override
protected void checkTaskQueryStartTaskCompleted(String workflowInstanceId, WorkflowTask startTask)