package pl.net.bluesoft.rnd.processtool.filters.factory;
import pl.net.bluesoft.rnd.processtool.model.ProcessInstanceFilter;
import pl.net.bluesoft.rnd.processtool.model.QueueType;
import pl.net.bluesoft.rnd.processtool.model.UserData;
import pl.net.bluesoft.rnd.processtool.model.nonpersistent.ProcessQueue;
/**
* Filter factory to encapsulte filter creation logic
* @author Maciej Pawlak
*
*/
public class ProcessInstanceFilterFactory
{
public ProcessInstanceFilterFactory()
{
}
/** Methods creates new filter which returns tasks created by given user, but done by others */
public ProcessInstanceFilter createMyTaskDoneByOthersFilter(UserData user)
{
return getProcessInstanceFilter(user,user,null,"activity.created.tasks", QueueType.OWN_IN_PROGRESS, QueueType.OWN_IN_QUEUE);
}
/** Methods creates new filter which returns tasks created by other users, but assigned to given user */
public ProcessInstanceFilter createOthersTaskAssignedToMeFilter(UserData user)
{
return getProcessInstanceFilter(user,null,user,"activity.assigned.tasks", QueueType.ASSIGNED_TO_CURRENT_USER);
}
/** Methods creates new filter which returns tasks created by given user and assigned to him */
public ProcessInstanceFilter createMyTasksAssignedToMeFilter(UserData user)
{
return getProcessInstanceFilter(user,user,user,"activity.created.assigned.tasks", QueueType.ASSIGNED_TO_CURRENT_USER);
}
/** Methods creates new filter which returns tasks assigned to given user */
public ProcessInstanceFilter createTaskAssignedToMeFilter(UserData user)
{
return getProcessInstanceFilter(user,null,user,"activity.assigned.tasks", QueueType.ASSIGNED_TO_CURRENT_USER);
}
/** Methods creates new filter which returns user closed tasks */
public ProcessInstanceFilter createMyClosedTasksFilter(UserData user)
{
return getProcessInstanceFilter(user,user,null,"activity.created.closed.tasks", QueueType.OWN_FINISHED);
}
/** Methods creates new filter which returns user closed tasks */
public ProcessInstanceFilter createQueuedTaskFilter(UserData user, ProcessQueue processQueue)
{
return getProcessInstanceFilterForQueue(user, processQueue);
}
/** Methods creates new filter which returns tasks created by given user, but done by others */
public ProcessInstanceFilter createSubstitutedTaskDoneByOthersFilter(UserData substitutedUser)
{
return getProcessInstanceFilter(substitutedUser,substitutedUser,null,"activity.subst.created.tasks", QueueType.OWN_IN_PROGRESS);
}
/** Methods creates new filter which returns tasks created by other users, but assigned to given user */
public ProcessInstanceFilter createSubstitutedOthersTaskAssignedToMeFilter(UserData substitutedUser)
{
return getProcessInstanceFilter(substitutedUser,null,substitutedUser,"activity.subst.assigned.tasks", QueueType.ASSIGNED_TO_CURRENT_USER);
}
/** Methods creates new filter which returns tasks created by given user and assigned to him */
public ProcessInstanceFilter createSubstitutedTasksAssignedToMeFilter(UserData substitutedUser)
{
return getProcessInstanceFilter(substitutedUser,substitutedUser,substitutedUser,"activity.subst.created.assigned.tasks", QueueType.ASSIGNED_TO_CURRENT_USER);
}
/** Methods creates new filter which returns tasks assigned to given user */
public ProcessInstanceFilter createTasksAssignedToSubstitutedUserFilter(UserData substitutedUser)
{
return getProcessInstanceFilter(substitutedUser,null,substitutedUser,"activity.subst.assigned.tasks", QueueType.ASSIGNED_TO_CURRENT_USER);
}
/** Methods creates new filter which returns user closed tasks */
public ProcessInstanceFilter createSubstitutedClosedTasksFilter(UserData substitutedUser)
{
return getProcessInstanceFilter(substitutedUser,substitutedUser,null,"activity.subst.created.closed.tasks", QueueType.OWN_FINISHED);
}
/** Methods creates new filter which returns user closed tasks */
public ProcessInstanceFilter createOtherUserTaskForSubstitutedUser(UserData substitutedUser)
{
return getProcessInstanceFilter(substitutedUser,
null,
substitutedUser,
"activity.other.users.tasks",
QueueType.ASSIGNED_TO_CURRENT_USER);
}
private ProcessInstanceFilter getProcessInstanceFilterForQueue(UserData user, ProcessQueue processQueue)
{
ProcessInstanceFilter instanceFilter = getProcessInstanceFilter(user,user,null,"user.queue.name."+processQueue.getName(), QueueType.OWN_IN_QUEUE);
instanceFilter.getQueues().add(processQueue.getName());
return instanceFilter;
}
private ProcessInstanceFilter getProcessInstanceFilter(UserData user, UserData creator, UserData owner, String name, QueueType ... types)
{
ProcessInstanceFilter pif = new ProcessInstanceFilter();
pif.setFilterOwner(user);
pif.setName(name);
for(QueueType queueType: types)
pif.addQueueType(queueType);
if(creator != null)
pif.getCreators().add(creator);
if(owner != null)
pif.getOwners().add(owner);
return pif;
}
}