All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.aperteworkflow.ext.activiti.UserProcessQueueManager Maven / Gradle / Ivy

The newest version!
package org.aperteworkflow.ext.activiti;

import org.hibernate.Session;
import pl.net.bluesoft.rnd.processtool.dao.UserProcessQueueDAO;
import pl.net.bluesoft.rnd.processtool.model.BpmTask;
import pl.net.bluesoft.rnd.processtool.model.ProcessInstance;
import pl.net.bluesoft.rnd.processtool.model.QueueType;
import pl.net.bluesoft.rnd.processtool.model.UserProcessQueue;
import pl.net.bluesoft.rnd.processtool.model.nonpersistent.MutableBpmTask;
import pl.net.bluesoft.rnd.processtool.userqueues.IUserProcessQueueManager;

import java.util.Collection;

/**
 * Manager for the process instance queues
 * 
 * @author Maciej Pawlak
 *
 */
public class UserProcessQueueManager implements IUserProcessQueueManager
{
	Session session;
	UserProcessQueueDAO queueDao;
	
	public UserProcessQueueManager(Session session, UserProcessQueueDAO userProcessQueueDAO)
	{
		this.session = session;
		this.queueDao = userProcessQueueDAO;
	}
	

	public void onTaskAssigne(BpmTask bpmTask)
	{
		processTaskAssigne(bpmTask);
	}
	
	@Override
	public void onQueueAssigne(MutableBpmTask bpmTask) 
	{
		Long processId = bpmTask.getProcessInstance().getId();
		String taskIdString = bpmTask.getInternalTaskId();
		
		/* There is at least one owner - creator by default */
		for(String ownerLogin: bpmTask.getProcessInstance().getOwners())
			updateUserProcessQueue(taskIdString, processId, ownerLogin, QueueType.OWN_IN_QUEUE);
	}
	
	@Override
	public void onTaskFinished(BpmTask bpmTask) 
	{
		String taskIdString = bpmTask.getInternalTaskId();
		Long taskId = Long.parseLong(taskIdString);
		
		Collection userProcessQueues = queueDao.getAllUserProcessQueueByTaskId(taskId);
		
		/* Delete all process user task with assigned task id. It will delete all user queues
		 * for creator, assigne and owners
		 */
		queueDao.delete(userProcessQueues);
	}
	
	@Override
	public void onProcessFinished(ProcessInstance processInstance, BpmTask bpmTask) 
	{
		/* Get all queue elements for given process id and delete them */
		Long processId = processInstance.getId();
		String creatorLogin = bpmTask.getCreator();
		
		/* Create new queue element that is stored as finished process */
		UserProcessQueue finishedProcess = new UserProcessQueue();
		finishedProcess.setLogin(creatorLogin);
		finishedProcess.setProcessId(processId);
		finishedProcess.setQueueType(QueueType.OWN_FINISHED);
		finishedProcess.setTaskId(Long.parseLong(bpmTask.getInternalTaskId()));
		queueDao.saveOrUpdate(finishedProcess);
	}


	@Override
	public void onProcessHalted(ProcessInstance processInstance, BpmTask task) 
	{
		//deleteProcessAllocations(processInstance);
		/* NOP */
		
	}
	
	private void processTaskAssigne(BpmTask bpmTask)
	{
		String assignee = bpmTask.getAssignee();
		Long processId = bpmTask.getProcessInstance().getId();
		String taskIdString = bpmTask.getInternalTaskId();
		
		/* Is task assigned to one of the owners? */
		boolean taskAssignedToOneOfOwners = false;
		
		/* There is at least one owner - creator by default */
		for(String ownerLogin: bpmTask.getProcessInstance().getOwners())
		{
			/* Assign process to its owner queue */
			if(ownerLogin.equals(assignee))
			{
				//updateUserProcessQueue(taskIdString, processId, ownerLogin, QueueType.OWN_ASSIGNED);
				updateUserProcessQueue(taskIdString, processId, ownerLogin, QueueType.ASSIGNED_TO_CURRENT_USER);
				taskAssignedToOneOfOwners = true;
			}
			
			/* Assign owner process to someone else. Create queue element to owner "mine assigned to others"
			 * and element to other person queue "others assigned to me" */
			else
			{
				/* If task is already assigned to assigne as it's own task or there is no assigne,
				 * do not change queue to others-assigned */
				boolean shouldAddToOthersAssignedQueue = !taskAssignedToOneOfOwners && assignee != null;
				
				if(shouldAddToOthersAssignedQueue) {
					//updateUserProcessQueue(taskIdString, processId, assignee, QueueType.OTHERS_ASSIGNED);
					updateUserProcessQueue(taskIdString, processId, assignee, QueueType.ASSIGNED_TO_CURRENT_USER);
				}
				
				updateUserProcessQueue(taskIdString, processId, ownerLogin, QueueType.OWN_IN_PROGRESS); 
			}
		}
	}
	
	private void updateUserProcessQueue(String taskIdString, Long processId, String assigneLogin, QueueType type)
	{
		Long taskId = Long.parseLong(taskIdString);
		UserProcessQueue userProcessQueue = queueDao.getUserProcessQueueByTaskId(taskId, assigneLogin);
		
		/* The queue element for given process exists with type "mine assiegned to me". Change its type and save */
		if(userProcessQueue != null)
		{
			userProcessQueue.setQueueType(type);
		}
		/* Otherwise, create new process queue with correct type */
		else 
		{
			userProcessQueue = new UserProcessQueue();
			userProcessQueue.setLogin(assigneLogin);
			userProcessQueue.setProcessId(processId);
			userProcessQueue.setTaskId(taskId);
			userProcessQueue.setQueueType(type);
		}
		
		queueDao.saveOrUpdate(userProcessQueue);
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy