mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
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:
@@ -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,18 +50,30 @@ public class AlfrescoUserTaskBpmnParseHandler extends AbstractBpmnParseHandler<U
|
||||
ActivityBehavior activitybehaviour = activity.getActivityBehavior();
|
||||
if (activitybehaviour instanceof UserTaskActivityBehavior)
|
||||
{
|
||||
UserTaskActivityBehavior userTaskActivity = (UserTaskActivityBehavior) activitybehaviour;
|
||||
if (createTaskListener != null)
|
||||
addListeners((UserTaskActivityBehavior) activity.getActivityBehavior());
|
||||
}
|
||||
else if(activitybehaviour instanceof MultiInstanceActivityBehavior)
|
||||
{
|
||||
MultiInstanceActivityBehavior multiInstance = (MultiInstanceActivityBehavior) activitybehaviour;
|
||||
if(multiInstance.getInnerActivityBehavior() instanceof UserTaskActivityBehavior)
|
||||
{
|
||||
addTaskListenerAsFirst(createTaskListener, TaskListener.EVENTNAME_CREATE, userTaskActivity);
|
||||
}
|
||||
if (completeTaskListener != null)
|
||||
{
|
||||
addTaskListenerAsFirst(completeTaskListener, TaskListener.EVENTNAME_COMPLETE, userTaskActivity);
|
||||
addListeners((UserTaskActivityBehavior) multiInstance.getInnerActivityBehavior());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected void addListeners(UserTaskActivityBehavior activityBehavior)
|
||||
{
|
||||
if (createTaskListener != null)
|
||||
{
|
||||
addTaskListenerAsFirst(createTaskListener, TaskListener.EVENTNAME_CREATE, activityBehavior);
|
||||
}
|
||||
if (completeTaskListener != null)
|
||||
{
|
||||
addTaskListenerAsFirst(completeTaskListener, TaskListener.EVENTNAME_COMPLETE, activityBehavior);
|
||||
}
|
||||
}
|
||||
|
||||
public void setCompleteTaskListener(TaskListener completeTaskListener)
|
||||
{
|
||||
this.completeTaskListener = completeTaskListener;
|
||||
@@ -71,8 +84,9 @@ public class AlfrescoUserTaskBpmnParseHandler extends AbstractBpmnParseHandler<U
|
||||
this.createTaskListener = createTaskListener;
|
||||
}
|
||||
|
||||
protected void addTaskListenerAsFirst(TaskListener taskListener, String eventName, UserTaskActivityBehavior userTask) {
|
||||
List<TaskListener> taskEventListeners = userTask.getTaskDefinition().getTaskListeners().get(eventName);
|
||||
protected void addTaskListenerAsFirst(TaskListener taskListener, String eventName, UserTaskActivityBehavior userTask)
|
||||
{
|
||||
List<TaskListener> taskEventListeners = userTask.getTaskDefinition().getTaskListeners().get(eventName);
|
||||
if (taskEventListeners == null) {
|
||||
taskEventListeners = new ArrayList<TaskListener>();
|
||||
userTask.getTaskDefinition().getTaskListeners().put(eventName, taskEventListeners);
|
||||
|
@@ -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;
|
||||
|
@@ -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)
|
||||
|
Reference in New Issue
Block a user