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