X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;ds=sidebyside;f=runtime%2Forg.argeo.slc.support.simple%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fcore%2Fexecution%2FDefaultExecutionFlow.java;h=16105e241ef0e4ea10a14270831d500bf9550a3d;hb=5ae9dc81ad1c3ddfa99a8456b0c5263dd483642d;hp=5be9e2ac54a2da4870130260d4a541e9834a98b9;hpb=3687609fb87c3d136db41215877e9c0406298316;p=gpl%2Fargeo-slc.git diff --git a/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/execution/DefaultExecutionFlow.java b/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/execution/DefaultExecutionFlow.java index 5be9e2ac5..16105e241 100644 --- a/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/execution/DefaultExecutionFlow.java +++ b/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/execution/DefaultExecutionFlow.java @@ -4,55 +4,66 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.UUID; -import org.apache.commons.lang.math.RandomUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.argeo.slc.SlcException; import org.argeo.slc.core.structure.tree.TreeSPath; import org.argeo.slc.core.structure.tree.TreeSRegistry; -import org.argeo.slc.execution.Executable; import org.argeo.slc.execution.ExecutionFlow; import org.argeo.slc.execution.ExecutionSpec; import org.argeo.slc.execution.ExecutionSpecAttribute; import org.argeo.slc.structure.StructureAware; import org.argeo.slc.structure.StructureRegistry; -import org.argeo.slc.test.ExecutableTestRun; import org.springframework.beans.factory.BeanNameAware; import org.springframework.beans.factory.InitializingBean; +import org.springframework.context.ResourceLoaderAware; +import org.springframework.core.io.Resource; +import org.springframework.core.io.ResourceLoader; import org.springframework.validation.MapBindingResult; public class DefaultExecutionFlow implements ExecutionFlow, InitializingBean, - BeanNameAware, StructureAware { - private ExecutionSpec executionSpec = new DefaultExecutionSpec(); + BeanNameAware, StructureAware, ResourceLoaderAware { + + private final static Log log = LogFactory + .getLog(DefaultExecutionFlow.class); + + private final ExecutionSpec executionSpec; private String name = null; private Map parameters = new HashMap(); - private List executables = new ArrayList(); + private List executables = new ArrayList(); private String path; private StructureRegistry registry = new TreeSRegistry(); - + + private ResourceLoader resourceLoader = null; + public DefaultExecutionFlow() { - } - + this.executionSpec = new DefaultExecutionSpec(); + } + public DefaultExecutionFlow(ExecutionSpec executionSpec) { this.executionSpec = executionSpec; } - - public DefaultExecutionFlow(ExecutionSpec executionSpec, Map parameters) { + + public DefaultExecutionFlow(ExecutionSpec executionSpec, + Map parameters) { // be sure to have an execution spec - this.executionSpec = (executionSpec == null) ? new DefaultExecutionSpec() : executionSpec; - - //only parameters contained in the executionSpec can be set - for(String parameter : parameters.keySet()) { - if(!executionSpec.getAttributes().containsKey(parameter)) { - throw new SlcException("Parameter " + parameter + " is not defined in the ExecutionSpec"); + this.executionSpec = (executionSpec == null) ? new DefaultExecutionSpec() + : executionSpec; + + // only parameters contained in the executionSpec can be set + for (String parameter : parameters.keySet()) { + if (!executionSpec.getAttributes().containsKey(parameter)) { + throw new SlcException("Parameter " + parameter + + " is not defined in the ExecutionSpec"); } } - + // set the parameters - this.parameters.putAll(parameters); - - //check that all the required parameters are defined + this.parameters.putAll(parameters); + + // check that all the required parameters are defined MapBindingResult errors = new MapBindingResult(parameters, "execution#" + getName()); for (String key : executionSpec.getAttributes().keySet()) { @@ -77,20 +88,19 @@ public class DefaultExecutionFlow implements ExecutionFlow, InitializingBean, if (errors.hasErrors()) throw new SlcException("Could not prepare execution flow: " - + errors.toString()); - - + + errors.toString()); + } - public void execute() { - for (Executable executable : executables) { - executable.execute(); + public void run() { + for (Runnable executable : executables) { + executable.run(); } } public void afterPropertiesSet() throws Exception { if (path != null) { - for (Executable executable : executables) { + for (Runnable executable : executables) { if (executable instanceof StructureAware) { ((StructureAware) executable).notifyCurrentPath( registry, new TreeSPath(path)); @@ -103,7 +113,7 @@ public class DefaultExecutionFlow implements ExecutionFlow, InitializingBean, this.name = name; } - public void setExecutables(List executables) { + public void setExecutables(List executables) { this.executables = executables; } @@ -119,23 +129,34 @@ public class DefaultExecutionFlow implements ExecutionFlow, InitializingBean, return executionSpec; } - public Object getParameter(String name) { - if (parameters.containsKey(name)) { - return parameters.get(name); + public Object getParameter(String parameterName) { + // Verify that there is a spec attribute + ExecutionSpecAttribute specAttr = null; + if (executionSpec.getAttributes().containsKey(parameterName)) { + specAttr = executionSpec.getAttributes().get(parameterName); } else { - if (executionSpec.getAttributes().containsKey(name)) { - ExecutionSpecAttribute esa = executionSpec.getAttributes().get( - name); - if (esa.getValue() != null) - return esa.getValue(); + throw new SlcException("Key " + parameterName + + " is not defined in the specifications of " + toString()); + } + + if (parameters.containsKey(parameterName)) { + Object paramValue = parameters.get(parameterName); + if (specAttr instanceof ResourceSpecAttribute) { + // deal with resources + Resource resource = resourceLoader.getResource(paramValue + .toString()); + return ((ResourceSpecAttribute) specAttr) + .convertResource(resource); } else { - throw new SlcException("Key " + name - + " is not defined in the specifications of " - + toString()); + return paramValue; + } + } else { + if (specAttr.getValue() != null) { + return specAttr.getValue(); } } - throw new SlcException("Key " + name + " is not set as parameter in " - + toString()); + throw new SlcException("Key " + parameterName + + " is not set as parameter in " + toString()); } public Boolean isSetAsParameter(String key) { @@ -171,4 +192,8 @@ public class DefaultExecutionFlow implements ExecutionFlow, InitializingBean, } } + public void setResourceLoader(ResourceLoader resourceLoader) { + this.resourceLoader = resourceLoader; + } + }