package org.jboss.seam.bpm;
import static org.jboss.seam.annotations.Install.BUILT_IN;
import org.jboss.seam.ScopeType;
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.web.Parameters;
import org.jbpm.taskmgmt.exe.TaskInstance;
/**
* Support for assigning tasks in the pooled task list.
*
* @see TaskInstanceList
* @author Gavin King
*/
@Name("org.jboss.seam.bpm.pooledTask")
@Scope(ScopeType.APPLICATION)
@Install(precedence=BUILT_IN, dependencies="org.jboss.seam.bpm.jbpm")
public class PooledTask
{
/**
* Assign the TaskInstance with the id passed
* in the request parameter named "taskId" to
* the current actor.
*
* @see Actor
* @return a null outcome only if the task was not found
*/
@Transactional
public String assignToCurrentActor()
{
Actor actor = Actor.instance();
if ( actor.getId()==null )
{
throw new IllegalStateException("no current actor id defined");
}
TaskInstance taskInstance = getTaskInstance();
if (taskInstance!=null)
{
taskInstance.setActorId( actor.getId() );
return "taskAssignedToActor";
}
else
{
return null;
}
}
/**
* Assign the TaskInstance with the id passed
* in the request parameter named "taskId" to
* the given actor id.
*
* @param actorId the jBPM actor id
* @return a null outcome only if the task was not found
*/
@Transactional
public String assign(String actorId)
{
TaskInstance taskInstance = getTaskInstance();
if (taskInstance!=null)
{
taskInstance.setActorId(actorId);
return "taskAssigned";
}
else
{
return null;
}
}
/**
* Unassign the TaskInstance with the id passed
* in the request parameter named "taskId" from
* the actor to which it is assigned, and return
* it to the pool it came from.
*
* @return a null outcome only if the task was not found
*/
@Transactional
public String unassign()
{
TaskInstance taskInstance = getTaskInstance();
if (taskInstance!=null)
{
taskInstance.setActorId(null);
return "taskUnassigned";
}
else
{
return null;
}
}
/**
* @return the TaskInstance with the id passed
* in the request parameter named "taskId".
*/
@Transactional
public TaskInstance getTaskInstance()
{
String[] values = Parameters.instance().getRequestParameters().get("taskId");
if ( values==null || values.length!=1 )
{
return null;
}
else
{
String taskId = values[0];
return taskId==null ?
null :
ManagedJbpmContext.instance().getTaskInstanceForUpdate( Long.parseLong(taskId) );
}
}
}