/**
*
*/
package net.conselldemallorca.helium.jbpm3.command;
import java.util.Map;
import org.jbpm.JbpmContext;
import org.jbpm.command.AbstractBaseCommand;
import org.jbpm.graph.exe.ExecutionContext;
import org.jbpm.graph.exe.ProcessInstance;
import org.jbpm.taskmgmt.exe.TaskInstance;
/**
* Command per clonar una tasca jBPM
*
* @author Limit Tecnologies <limit@limit.es>
*/
public class CloneTaskInstanceCommand extends AbstractBaseCommand {
private static final long serialVersionUID = -1908847549444051495L;
private long id;
private String actorId;
private boolean signalling;
private Map<String, Object> variables;
public CloneTaskInstanceCommand(
long id,
String actorId,
boolean signalling) {
super();
this.id = id;
this.actorId = actorId;
this.signalling = signalling;
}
public Object execute(JbpmContext jbpmContext) throws Exception {
TaskInstance taskInstance = jbpmContext.getTaskInstance(id);
ExecutionContext executionContext = new ExecutionContext(taskInstance.getToken());
TaskInstance clone = taskInstance.getTaskMgmtInstance().createTaskInstance(
taskInstance.getTask(),
executionContext);
clone.setSignalling(signalling);
clone.setActorId(actorId, false);
if (variables != null) {
for (String codi: variables.keySet()) {
clone.setVariableLocally(codi, variables.get(codi));
}
}
// Desam logs Ășnicament si estĂ marcat al tipus d'expedient
if (getAmbRetroaccio(jbpmContext, taskInstance.getProcessInstance()))
jbpmContext.addAutoSaveTaskInstance(clone);
return clone;
}
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 boolean isSignalling() {
return signalling;
}
public void setSignalling(boolean signalling) {
this.signalling = signalling;
}
public Map<String, Object> getVariables() {
return variables;
}
public void setVariables(Map<String, Object> variables) {
this.variables = variables;
}
@Override
public String getAdditionalToStringInformation() {
return "id=" + id;
}
//methods for fluent programming
public CloneTaskInstanceCommand id(long id) {
setId(id);
return this;
}
private Boolean getAmbRetroaccio(JbpmContext jbpmContext, ProcessInstance processInstance) {
if (processInstance.getExpedient() == null) {
return true;
} else {
return processInstance.getExpedient().isAmbRetroaccio();
}
// Query query = jbpmContext.getSession().createQuery(
// "select te.ambRetroaccio " +
// " from net.conselldemallorca.helium.core.model.hibernate.ExpedientTipus te, " +
// " org.jbpm.graph.exe.ProcessInstanceExpedient exp " +
// " where exp.processInstanceId = :processInstanceId " +
// " and exp.expedientTipusId = te.id ");
// query.setParameter("processInstanceId", processInstanceId.toString());
//
// Boolean ambRetroaccio = (Boolean)query.uniqueResult();
// if (ambRetroaccio == null)
// return false;
// return ambRetroaccio;
}
}