/**
*
*/
package net.conselldemallorca.helium.jbpm3.command;
import org.jbpm.JbpmContext;
import org.jbpm.command.AbstractBaseCommand;
import org.jbpm.graph.exe.ExecutionContext;
import org.jbpm.identity.assignment.ExpressionAssignmentHandler;
import org.jbpm.taskmgmt.exe.Assignable;
import org.jbpm.taskmgmt.exe.TaskInstance;
/**
* Command per reassignar una taskInstance de jBPM
*
* @author Limit Tecnologies <limit@limit.es>
*/
public class ReassignTaskInstanceCommand extends AbstractBaseCommand {
private long id;
private String actorId;
private String[] pooledActors;
private String expression;
private Long entornId;
public ReassignTaskInstanceCommand(
long id) {
super();
this.id = id;
}
public Object execute(JbpmContext jbpmContext) throws Exception {
TaskInstance taskInstance = jbpmContext.getTaskInstance(id);
if (actorId != null) {
taskInstance.setActorId(actorId);
} else if (pooledActors != null) {
taskInstance.setActorId(null);
taskInstance.setPooledActors(pooledActors);
} else if (expression != null) {
String exprTxt = "<expression>" + expression + "</expression>";
ExpressionAssignmentHandler assignmentHandler = new ExpressionAssignmentHandler();
assignmentHandler.setExpression(exprTxt);
assignmentHandler.setEntornId(entornId);
assignmentHandler.assign(new ProxyAssignable(taskInstance), new ExecutionContext(taskInstance.getToken()));
}
return taskInstance;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getActorId() {
return actorId;
}
public void setActorId(String actorId) {
this.actorId = actorId;
}
public String[] getPooledActors() {
return pooledActors;
}
public void setPooledActors(String[] pooledActors) {
this.pooledActors = pooledActors;
}
public String getExpression() {
return expression;
}
public void setExpression(String expression) {
this.expression = expression;
}
public void setEntornId(Long entornId) {
this.entornId = entornId;
}
@Override
public String getAdditionalToStringInformation() {
return "id=" + id;
}
@SuppressWarnings("serial")
private class ProxyAssignable implements Assignable {
private TaskInstance taskInstance;
public ProxyAssignable(TaskInstance taskInstance) {
taskInstance.setActorId(null, false);
if (taskInstance.getPooledActors() == null) {
taskInstance.setPooledActors(new String[0]);
}
this.taskInstance = taskInstance;
}
public void setActorId(String actorId) {
taskInstance.setActorId(actorId, false);
}
public void setPooledActors(String[] pooledActors) {
taskInstance.setPooledActors(pooledActors);
}
}
private static final long serialVersionUID = -1908847549444051495L;
}