package org.jboss.seam.bpm;
import static org.jboss.seam.ScopeType.APPLICATION;
import static org.jboss.seam.annotations.Install.BUILT_IN;
import java.util.List;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.jboss.seam.annotations.Install;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.Transactional;
import org.jboss.seam.annotations.Unwrap;
import org.jbpm.taskmgmt.exe.TaskInstance;
/**
* Support for a task list ordered by priority.
*
* @see TaskInstanceList
* @see PooledTask
* @author Gavin King
*/
@Name("org.jboss.seam.bpm.taskInstancePriorityList")
@Scope(APPLICATION)
@Install(precedence=BUILT_IN, dependencies="org.jboss.seam.bpm.jbpm")
public class TaskInstancePriorityList
{
//TODO: we really need to cache the list in the event context,
// but then we would need some events to refresh it
// when tasks end, which is non-trivial to do....
@Unwrap
@Transactional
public List<TaskInstance> getTaskInstanceList()
{
return getTaskInstanceList( Actor.instance().getId() );
}
private List<TaskInstance> getTaskInstanceList(String actorId)
{
if ( actorId == null ) return null;
return ManagedJbpmContext.instance().getSession()
.createCriteria(TaskInstance.class)
.add( Restrictions.eq("actorId", actorId) )
.add( Restrictions.eq("isOpen", true) )
.add( Restrictions.ne("isSuspended", true) )
.addOrder( Order.asc("priority") )
.setCacheable(true)
.list();
}
}