/** * */ package net.conselldemallorca.helium.jbpm3.command; import java.util.ArrayList; import java.util.List; import org.hibernate.Query; import org.hibernate.Session; import org.jbpm.JbpmContext; import org.jbpm.command.AbstractGetObjectBaseCommand; import org.jbpm.graph.def.ProcessDefinition; /** * Command per obtenir els subprocessos donada la id d'una definició de procés * * @author Limit Tecnologies <limit@limit.es> */ public class GetSubProcessDefinitionsCommand extends AbstractGetObjectBaseCommand { private static final long serialVersionUID = -1908847549444051495L; private long id; public GetSubProcessDefinitionsCommand() {} public GetSubProcessDefinitionsCommand(long id){ super(); this.id = id; } @SuppressWarnings("unchecked") public Object execute(JbpmContext jbpmContext) throws Exception { List<ProcessDefinition> definicionsProces = new ArrayList<ProcessDefinition>(); List<Object[]> subprocessos = null; ProcessDefinition rootProcessDefinition = jbpmContext.getGraphSession().getProcessDefinition(id); if (rootProcessDefinition != null) { Session session = jbpmContext.getSession(); Query query = session.createQuery( "select sp, ps.subProcessName " + "from org.jbpm.graph.node.ProcessState ps " + "left outer join ps.subProcessDefinition sp " + "where ps.processDefinition.id= :processDefinitionId " + "order by ps.id"); query.setParameter("processDefinitionId", id); subprocessos = query.list(); } if (subprocessos != null && !subprocessos.isEmpty()) { for (Object[] obj: subprocessos) { ProcessDefinition spd = (ProcessDefinition)obj[0]; if (!definicionsProces.contains(spd)) { String spn = (String)obj[1]; if (spd != null) { definicionsProces.add(spd); } else if (spn != null) { spd = jbpmContext.getGraphSession().findLatestProcessDefinition(spn); if (spd != null) definicionsProces.add(spd); } } } // for (ProcessState ps : subprocessos) { // if (ps.getSubProcessDefinition() != null) { // definicionsProces.add(ps.getSubProcessDefinition()); // } // } } return definicionsProces; } 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 GetSubProcessDefinitionsCommand id(long id) { setId(id); return this; } }