/**
*
*/
package net.conselldemallorca.helium.jbpm3.command;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.Session;
import org.jbpm.JbpmContext;
import org.jbpm.command.AbstractGetObjectBaseCommand;
import org.jbpm.graph.exe.ProcessInstance;
/**
* Command per obtenir la definició de procés de jBPM 3 donat el seu id
*
* @author Limit Tecnologies <limit@limit.es>
*/
public class GetProcessInstancesTreeCommand extends AbstractGetObjectBaseCommand {
private static final long serialVersionUID = -1908847549444051495L;
private long id;
public GetProcessInstancesTreeCommand() {}
public GetProcessInstancesTreeCommand(long id){
super();
this.id = id;
}
public Object execute(JbpmContext jbpmContext) throws Exception {
List<ProcessInstance> resposta = new ArrayList<ProcessInstance>();
afegirProcessInstanceAmbFills(
jbpmContext.getSession(),
jbpmContext.getProcessInstance(id),
resposta);
return resposta;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
@Override
public String getAdditionalToStringInformation() {
return "id=" + id;
}
//methods for fluent programming
public GetProcessInstancesTreeCommand id(long id) {
setId(id);
return this;
}
@SuppressWarnings("unchecked")
private void afegirProcessInstanceAmbFills(
Session session,
ProcessInstance processInstance,
List<ProcessInstance> llista) {
llista.add(retrieveProcessInstance(processInstance));
// Cerca els subprocessos d'un procés determinat
List<ProcessInstance> fills = session.getNamedQuery("GraphSession.findSubProcessInstances").
setEntity("processInstance", processInstance).
list();
for (ProcessInstance pi: fills) {
pi.getProcessDefinition().getName();
if (pi.getSuperProcessToken() != null && pi.getSuperProcessToken().getNode() != null)
pi.getSuperProcessToken().getNode().getName();
// Per a cada subprocés també hi afegeix els seus subprocessos
afegirProcessInstanceAmbFills(session, pi, llista);
}
}
}