mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
CLOUD-2167: notification sent after other task-listeners have been called
git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@57881 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -66,6 +66,7 @@
|
|||||||
<bean id="activitiUserTaskParseHandler" class="org.alfresco.repo.workflow.activiti.AlfrescoUserTaskBpmnParseHandler">
|
<bean id="activitiUserTaskParseHandler" class="org.alfresco.repo.workflow.activiti.AlfrescoUserTaskBpmnParseHandler">
|
||||||
<property name="createTaskListener" ref="activitiCreateTaskListener" />
|
<property name="createTaskListener" ref="activitiCreateTaskListener" />
|
||||||
<property name="completeTaskListener" ref="activitiCompleteTaskListener" />
|
<property name="completeTaskListener" ref="activitiCompleteTaskListener" />
|
||||||
|
<property name="notificationTaskListener" ref="activitiTaskNotificationListener" />
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
<!-- -->
|
<!-- -->
|
||||||
@@ -225,6 +226,11 @@
|
|||||||
class="org.alfresco.repo.workflow.activiti.tasklistener.TaskCreateListener"
|
class="org.alfresco.repo.workflow.activiti.tasklistener.TaskCreateListener"
|
||||||
depends-on="activitiWorkflowManager">
|
depends-on="activitiWorkflowManager">
|
||||||
<property name="propertyConverter" ref="activitiPropertyConverter" />
|
<property name="propertyConverter" ref="activitiPropertyConverter" />
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
<bean id="activitiTaskNotificationListener"
|
||||||
|
class="org.alfresco.repo.workflow.activiti.tasklistener.TaskNotificationListener"
|
||||||
|
depends-on="activitiWorkflowManager">
|
||||||
<property name="workflowNotification" ref="workflowNotification" />
|
<property name="workflowNotification" ref="workflowNotification" />
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
|
@@ -38,6 +38,7 @@ public class AlfrescoUserTaskBpmnParseHandler extends AbstractBpmnParseHandler<U
|
|||||||
{
|
{
|
||||||
private TaskListener completeTaskListener;
|
private TaskListener completeTaskListener;
|
||||||
private TaskListener createTaskListener;
|
private TaskListener createTaskListener;
|
||||||
|
private TaskListener notificationTaskListener;
|
||||||
|
|
||||||
protected Class<? extends BaseElement> getHandledType()
|
protected Class<? extends BaseElement> getHandledType()
|
||||||
{
|
{
|
||||||
@@ -72,6 +73,10 @@ public class AlfrescoUserTaskBpmnParseHandler extends AbstractBpmnParseHandler<U
|
|||||||
{
|
{
|
||||||
addTaskListenerAsFirst(completeTaskListener, TaskListener.EVENTNAME_COMPLETE, activityBehavior);
|
addTaskListenerAsFirst(completeTaskListener, TaskListener.EVENTNAME_COMPLETE, activityBehavior);
|
||||||
}
|
}
|
||||||
|
if(notificationTaskListener != null)
|
||||||
|
{
|
||||||
|
addTaskListenerAsLast(notificationTaskListener, TaskListener.EVENTNAME_CREATE, activityBehavior);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setCompleteTaskListener(TaskListener completeTaskListener)
|
public void setCompleteTaskListener(TaskListener completeTaskListener)
|
||||||
@@ -84,13 +89,28 @@ public class AlfrescoUserTaskBpmnParseHandler extends AbstractBpmnParseHandler<U
|
|||||||
this.createTaskListener = createTaskListener;
|
this.createTaskListener = createTaskListener;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setNotificationTaskListener(TaskListener notificationTaskListener)
|
||||||
|
{
|
||||||
|
this.notificationTaskListener = notificationTaskListener;
|
||||||
|
}
|
||||||
|
|
||||||
protected void addTaskListenerAsFirst(TaskListener taskListener, String eventName, UserTaskActivityBehavior userTask)
|
protected void addTaskListenerAsFirst(TaskListener taskListener, String eventName, UserTaskActivityBehavior userTask)
|
||||||
|
{
|
||||||
|
getOrCreateListenerList(eventName, userTask).add(0, taskListener);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void addTaskListenerAsLast(TaskListener taskListener, String eventName, UserTaskActivityBehavior userTask)
|
||||||
|
{
|
||||||
|
getOrCreateListenerList(eventName, userTask).add(taskListener);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected List<TaskListener> getOrCreateListenerList(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>();
|
||||||
userTask.getTaskDefinition().getTaskListeners().put(eventName, taskEventListeners);
|
userTask.getTaskDefinition().getTaskListeners().put(eventName, taskEventListeners);
|
||||||
}
|
}
|
||||||
taskEventListeners.add(0, taskListener);
|
return taskEventListeners;
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -19,25 +19,18 @@
|
|||||||
|
|
||||||
package org.alfresco.repo.workflow.activiti.tasklistener;
|
package org.alfresco.repo.workflow.activiti.tasklistener;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.activiti.engine.delegate.DelegateTask;
|
import org.activiti.engine.delegate.DelegateTask;
|
||||||
import org.activiti.engine.delegate.TaskListener;
|
import org.activiti.engine.delegate.TaskListener;
|
||||||
import org.activiti.engine.form.FormData;
|
import org.activiti.engine.form.FormData;
|
||||||
import org.activiti.engine.impl.form.TaskFormHandler;
|
import org.activiti.engine.impl.form.TaskFormHandler;
|
||||||
import org.activiti.engine.impl.persistence.entity.ExecutionEntity;
|
|
||||||
import org.activiti.engine.impl.persistence.entity.IdentityLinkEntity;
|
|
||||||
import org.activiti.engine.impl.persistence.entity.TaskEntity;
|
import org.activiti.engine.impl.persistence.entity.TaskEntity;
|
||||||
import org.activiti.engine.task.IdentityLinkType;
|
import org.activiti.engine.task.IdentityLinkType;
|
||||||
import org.alfresco.model.ContentModel;
|
import org.alfresco.model.ContentModel;
|
||||||
import org.alfresco.repo.workflow.WorkflowConstants;
|
import org.alfresco.repo.workflow.WorkflowConstants;
|
||||||
import org.alfresco.repo.workflow.WorkflowNotificationUtils;
|
|
||||||
import org.alfresco.repo.workflow.activiti.ActivitiConstants;
|
import org.alfresco.repo.workflow.activiti.ActivitiConstants;
|
||||||
import org.alfresco.repo.workflow.activiti.ActivitiScriptNode;
|
import org.alfresco.repo.workflow.activiti.ActivitiScriptNode;
|
||||||
import org.alfresco.repo.workflow.activiti.properties.ActivitiPropertyConverter;
|
import org.alfresco.repo.workflow.activiti.properties.ActivitiPropertyConverter;
|
||||||
import org.alfresco.service.cmr.dictionary.TypeDefinition;
|
import org.alfresco.service.cmr.dictionary.TypeDefinition;
|
||||||
import org.alfresco.service.cmr.repository.NodeRef;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tasklistener that is notified when a task is created. This will set all
|
* Tasklistener that is notified when a task is created. This will set all
|
||||||
@@ -51,15 +44,6 @@ public class TaskCreateListener implements TaskListener
|
|||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
private ActivitiPropertyConverter propertyConverter;
|
private ActivitiPropertyConverter propertyConverter;
|
||||||
private WorkflowNotificationUtils workflowNotificationUtils;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param services the service registry
|
|
||||||
*/
|
|
||||||
public void setWorkflowNotification(WorkflowNotificationUtils service)
|
|
||||||
{
|
|
||||||
this.workflowNotificationUtils = service;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void notify(DelegateTask task)
|
public void notify(DelegateTask task)
|
||||||
@@ -82,73 +66,6 @@ public class TaskCreateListener implements TaskListener
|
|||||||
if(initiatorNode != null) {
|
if(initiatorNode != null) {
|
||||||
task.addUserIdentityLink((String) initiatorNode.getProperties().get(ContentModel.PROP_USERNAME.toPrefixString()), IdentityLinkType.STARTER);
|
task.addUserIdentityLink((String) initiatorNode.getProperties().get(ContentModel.PROP_USERNAME.toPrefixString()), IdentityLinkType.STARTER);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Determine whether we need to send the workflow notification or not
|
|
||||||
ExecutionEntity executionEntity = ((ExecutionEntity)task.getExecution()).getProcessInstance();
|
|
||||||
Boolean value = (Boolean)executionEntity.getVariable(WorkflowNotificationUtils.PROP_SEND_EMAIL_NOTIFICATIONS);
|
|
||||||
if (Boolean.TRUE.equals(value) == true)
|
|
||||||
{
|
|
||||||
// Get the workflow package node
|
|
||||||
NodeRef workflowPackage = null;
|
|
||||||
ActivitiScriptNode scriptNode = (ActivitiScriptNode)executionEntity.getVariable(WorkflowNotificationUtils.PROP_PACKAGE);
|
|
||||||
if (scriptNode != null)
|
|
||||||
{
|
|
||||||
workflowPackage = scriptNode.getNodeRef();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Determine whether the task is pooled or not
|
|
||||||
String[] authorities = null;
|
|
||||||
boolean isPooled = false;
|
|
||||||
if (task.getAssignee() == null)
|
|
||||||
{
|
|
||||||
// Task is pooled
|
|
||||||
isPooled = true;
|
|
||||||
|
|
||||||
// Get the pool of user/groups for this task
|
|
||||||
List<IdentityLinkEntity> identities = ((TaskEntity)task).getIdentityLinks();
|
|
||||||
List<String> temp = new ArrayList<String>(identities.size());
|
|
||||||
for (IdentityLinkEntity item : identities)
|
|
||||||
{
|
|
||||||
String group = item.getGroupId();
|
|
||||||
if (group != null)
|
|
||||||
{
|
|
||||||
temp.add(group);
|
|
||||||
}
|
|
||||||
String user = item.getUserId();
|
|
||||||
if (user != null)
|
|
||||||
{
|
|
||||||
temp.add(user);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
authorities = temp.toArray(new String[temp.size()]);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Get the assigned user or group
|
|
||||||
authorities = new String[]{task.getAssignee()};
|
|
||||||
}
|
|
||||||
|
|
||||||
String title;
|
|
||||||
if (task.getName() != null)
|
|
||||||
{
|
|
||||||
title = task.getName();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
title = taskFormKey.replace(":", "_");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Send email notification
|
|
||||||
workflowNotificationUtils.sendWorkflowAssignedNotificationEMail(
|
|
||||||
ActivitiConstants.ENGINE_ID + "$" + task.getId(),
|
|
||||||
title,
|
|
||||||
task.getDescription(),
|
|
||||||
task.getDueDate(),
|
|
||||||
Integer.valueOf(task.getPriority()),
|
|
||||||
workflowPackage,
|
|
||||||
authorities,
|
|
||||||
isPooled);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getFormKey(DelegateTask task)
|
private String getFormKey(DelegateTask task)
|
||||||
|
Reference in New Issue
Block a user