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.BaseElement;
|
||||||
import org.activiti.bpmn.model.UserTask;
|
import org.activiti.bpmn.model.UserTask;
|
||||||
import org.activiti.engine.delegate.TaskListener;
|
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.behavior.UserTaskActivityBehavior;
|
||||||
import org.activiti.engine.impl.bpmn.parser.BpmnParse;
|
import org.activiti.engine.impl.bpmn.parser.BpmnParse;
|
||||||
import org.activiti.engine.impl.bpmn.parser.handler.AbstractBpmnParseHandler;
|
import org.activiti.engine.impl.bpmn.parser.handler.AbstractBpmnParseHandler;
|
||||||
@@ -49,15 +50,27 @@ public class AlfrescoUserTaskBpmnParseHandler extends AbstractBpmnParseHandler<U
|
|||||||
ActivityBehavior activitybehaviour = activity.getActivityBehavior();
|
ActivityBehavior activitybehaviour = activity.getActivityBehavior();
|
||||||
if (activitybehaviour instanceof UserTaskActivityBehavior)
|
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)
|
if (createTaskListener != null)
|
||||||
{
|
{
|
||||||
addTaskListenerAsFirst(createTaskListener, TaskListener.EVENTNAME_CREATE, userTaskActivity);
|
addTaskListenerAsFirst(createTaskListener, TaskListener.EVENTNAME_CREATE, activityBehavior);
|
||||||
}
|
}
|
||||||
if (completeTaskListener != null)
|
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;
|
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);
|
List<TaskListener> taskEventListeners = userTask.getTaskDefinition().getTaskListeners().get(eventName);
|
||||||
if (taskEventListeners == null) {
|
if (taskEventListeners == null) {
|
||||||
taskEventListeners = new ArrayList<TaskListener>();
|
taskEventListeners = new ArrayList<TaskListener>();
|
||||||
|
@@ -38,6 +38,7 @@ import org.alfresco.repo.security.permissions.AccessDeniedException;
|
|||||||
import org.alfresco.repo.security.person.TestGroupManager;
|
import org.alfresco.repo.security.person.TestGroupManager;
|
||||||
import org.alfresco.repo.security.person.TestPersonManager;
|
import org.alfresco.repo.security.person.TestPersonManager;
|
||||||
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
|
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
|
||||||
|
import org.alfresco.repo.transaction.TransactionServiceImpl;
|
||||||
import org.alfresco.service.ServiceRegistry;
|
import org.alfresco.service.ServiceRegistry;
|
||||||
import org.alfresco.service.cmr.repository.ChildAssociationRef;
|
import org.alfresco.service.cmr.repository.ChildAssociationRef;
|
||||||
import org.alfresco.service.cmr.repository.NodeRef;
|
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.cmr.workflow.WorkflowTimer;
|
||||||
import org.alfresco.service.namespace.NamespaceService;
|
import org.alfresco.service.namespace.NamespaceService;
|
||||||
import org.alfresco.service.namespace.QName;
|
import org.alfresco.service.namespace.QName;
|
||||||
import org.alfresco.repo.transaction.TransactionServiceImpl;
|
|
||||||
import org.alfresco.util.BaseSpringTest;
|
import org.alfresco.util.BaseSpringTest;
|
||||||
import org.alfresco.util.GUID;
|
import org.alfresco.util.GUID;
|
||||||
import org.alfresco.util.collections.CollectionUtils;
|
import org.alfresco.util.collections.CollectionUtils;
|
||||||
|
@@ -22,6 +22,7 @@ package org.alfresco.repo.workflow.activiti;
|
|||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
import java.util.Date;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
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
|
@Override
|
||||||
protected void checkTaskQueryStartTaskCompleted(String workflowInstanceId, WorkflowTask startTask)
|
protected void checkTaskQueryStartTaskCompleted(String workflowInstanceId, WorkflowTask startTask)
|
||||||
|
Reference in New Issue
Block a user