package org.jboss.seam.bpm;
import static org.hibernate.criterion.Order.asc;
import static org.hibernate.criterion.Order.desc;
import static org.hibernate.criterion.Restrictions.isNotNull;
import static org.hibernate.criterion.Restrictions.isNull;
import static org.jboss.seam.annotations.Install.BUILT_IN;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.criterion.Restrictions;
import org.jboss.seam.annotations.Factory;
import org.jboss.seam.annotations.Install;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Transactional;
import org.jbpm.graph.exe.ProcessInstance;
/**
* Support for the process list.
*
* @author Gavin King
*/
@Name("org.jboss.seam.bpm.processInstanceFinder")
@Install(precedence=BUILT_IN, dependencies="org.jboss.seam.bpm.jbpm")
public class ProcessInstanceFinder
{
private String processDefinitionName;
private String nodeName;
private Boolean processInstanceEnded = false;
private Boolean sortDescending = false;
@Factory(value="org.jboss.seam.bpm.processInstanceList", autoCreate=true)
@Transactional
public List<ProcessInstance> getProcessInstanceList()
{
Criteria query = ManagedJbpmContext.instance().getSession()
.createCriteria(ProcessInstance.class);
if ( processInstanceEnded!=null )
{
query.add( processInstanceEnded ? isNotNull("end") : isNull("end") );
}
if (processDefinitionName!=null)
{
query.createCriteria("processDefinition")
.add( Restrictions.eq("name", processDefinitionName) );
}
query = query.createCriteria("rootToken");
if (sortDescending!=null)
{
query.addOrder( sortDescending ? desc("nodeEnter") : asc("nodeEnter") );
}
if (nodeName!=null)
{
query.createCriteria("node")
.add( Restrictions.eq("name", nodeName) );
}
return query.list();
}
protected String getNodeName()
{
return nodeName;
}
protected void setNodeName(String nodeName)
{
this.nodeName = nodeName;
}
protected String getProcessDefinitionName()
{
return processDefinitionName;
}
protected void setProcessDefinitionName(String processDefinitionName)
{
this.processDefinitionName = processDefinitionName;
}
protected Boolean isSortDescending()
{
return sortDescending;
}
protected void setSortDescending(Boolean sortDescending)
{
this.sortDescending = sortDescending;
}
protected Boolean getProcessInstanceEnded()
{
return processInstanceEnded;
}
protected void setProcessInstanceEnded(Boolean ended)
{
this.processInstanceEnded = ended;
}
}