package org.argeo.api.slc.execution; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.argeo.api.slc.SlcException; import org.argeo.api.slc.deploy.ModuleDescriptor; /** Describes the information required to launch a flow */ public class ExecutionModuleDescriptor extends ModuleDescriptor { /** Metadata header identifying an SLC execution module */ public final static String SLC_EXECUTION_MODULE = "SLC-ExecutionModule"; private static final long serialVersionUID = -2394473464513029512L; private List executionSpecs = new ArrayList(); private List executionFlows = new ArrayList(); public List getExecutionSpecs() { return executionSpecs; } public List getExecutionFlows() { return executionFlows; } /** * Returns a new {@link ExecutionModuleDescriptor} that can be used to build * a {@link RealizedFlow}. */ public ExecutionFlowDescriptor cloneFlowDescriptor(String name) { ExecutionFlowDescriptor res = null; for (ExecutionFlowDescriptor efd : executionFlows) { if (efd.getName().equals(name) || ("/" + efd.getName()).equals(name)) { try { res = (ExecutionFlowDescriptor) efd.clone(); } catch (CloneNotSupportedException e) { throw new SlcException("Cannot clone " + efd, e); } } } if (res == null) throw new SlcException("Flow " + name + " not found."); return res; } public RealizedFlow asRealizedFlow(String flow, Map values) { RealizedFlow realizedFlow = new RealizedFlow(); realizedFlow.setFlowDescriptor(cloneFlowDescriptor(flow)); realizedFlow.setModuleName(getName()); realizedFlow.setModuleVersion(getVersion()); realizedFlow.getFlowDescriptor().getValues().putAll(values); return realizedFlow; } public void setExecutionSpecs(List executionSpecs) { this.executionSpecs = executionSpecs; } public void setExecutionFlows(List executionFlows) { this.executionFlows = executionFlows; } }