/** * */ package net.conselldemallorca.helium.jbpm3.command; import java.util.List; /*import net.conselldemallorca.helium.jbpm3.api.HeliumActionHandler; import net.conselldemallorca.helium.jbpm3.api.HeliumApi; import net.conselldemallorca.helium.jbpm3.api.HeliumApiImpl;*/ import net.conselldemallorca.helium.jbpm3.handlers.AccioExternaRetrocedirHandler; import org.jbpm.JbpmConfiguration; import org.jbpm.JbpmContext; import org.jbpm.command.AbstractBaseCommand; import org.jbpm.graph.def.Action; import org.jbpm.graph.exe.ExecutionContext; import org.jbpm.graph.exe.ProcessInstance; import org.jbpm.taskmgmt.exe.TaskInstance; /** * Command per executar una acció global a dins una instància de procés jBPM * * @author Limit Tecnologies <limit@limit.es> */ public class ExecuteActionCommand extends AbstractBaseCommand { private static final long serialVersionUID = -1908847549444051495L; private long id; private String actionName; private boolean isTaskInstance = false; private boolean goBack = false; private List<String> params; public ExecuteActionCommand( long id, String actionName) { super(); this.id = id; this.actionName = actionName; } public Object execute(JbpmContext jbpmContext) throws Exception { Action action = null; TaskInstance ti = null; ProcessInstance pi = null; if (isTaskInstance) { ti = jbpmContext.getTaskInstance(id); action = ti.getTaskMgmtInstance().getProcessInstance().getProcessDefinition().getAction(actionName); } else { pi = jbpmContext.getProcessInstance(id); action = pi.getProcessDefinition().getAction(actionName); } if (!goBack) { if (isTaskInstance) { ExecutionContext ec = new ExecutionContext(ti.getToken()); ec.setTaskInstance(ti); ti.getTask().executeAction(action, ec); } else { pi.getProcessDefinition().executeAction( action, new ExecutionContext(pi.getRootToken())); } } else { executeGoBack(action, new ExecutionContext(pi.getRootToken())); } return null; } public long getId() { return id; } public void setId(long id) { this.id = id; } public String getActionName() { return actionName; } public void setActionName(String actionName) { this.actionName = actionName; } public boolean isTaskInstance() { return isTaskInstance; } public void setTaskInstance(boolean isTaskInstance) { this.isTaskInstance = isTaskInstance; } public boolean isGoBack() { return goBack; } public void setGoBack(boolean goBack) { this.goBack = goBack; } public List<String> getParams() { return params; } public void setParams(List<String> params) { this.params = params; } @Override public String getAdditionalToStringInformation() { return "id=" + id + ", actionName=" + actionName; } public void executeGoBack(Action action, ExecutionContext context) throws Exception { if (action != null && action.getActionDelegation() != null) { ClassLoader surroundingClassLoader = Thread.currentThread().getContextClassLoader(); try { Thread.currentThread().setContextClassLoader(JbpmConfiguration.getProcessClassLoader(context.getProcessDefinition())); Object actionHandler = action.getActionDelegation().getInstance(); if (actionHandler instanceof AccioExternaRetrocedirHandler) { ((AccioExternaRetrocedirHandler)actionHandler).retrocedir(context, params); }/* else if (actionHandler instanceof HeliumActionHandler) { HeliumApi heliumApi = new HeliumApiImpl(context); ((HeliumActionHandler)actionHandler).retrocedir(heliumApi, params); }*/ } finally { Thread.currentThread().setContextClassLoader(surroundingClassLoader); } } } }