X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;ds=sidebyside;f=runtime%2Forg.argeo.slc.core%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fcore%2Fexecution%2FDefaultExecutionFlow.java;h=a1857a8c1482376dcf5b48378c66e35a2c7523d5;hb=5e28cf8cc3e7cb06b4ed541402dd5cf750845ea8;hp=497e6520e86177a7b1bf79748b1f1bb11298fb33;hpb=ee6c3543a0ff9403420ce6a9c647723269f14331;p=gpl%2Fargeo-slc.git diff --git a/runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/execution/DefaultExecutionFlow.java b/runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/execution/DefaultExecutionFlow.java index 497e6520e..a1857a8c1 100644 --- a/runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/execution/DefaultExecutionFlow.java +++ b/runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/execution/DefaultExecutionFlow.java @@ -5,6 +5,8 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +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; @@ -15,13 +17,12 @@ import org.argeo.slc.structure.StructureAware; import org.argeo.slc.structure.StructureRegistry; 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, ResourceLoaderAware { + BeanNameAware { + private final static Log log = LogFactory + .getLog(DefaultExecutionFlow.class); private final ExecutionSpec executionSpec; private String name = null; @@ -31,7 +32,7 @@ public class DefaultExecutionFlow implements ExecutionFlow, InitializingBean, private String path; private StructureRegistry registry = new TreeSRegistry(); - private ResourceLoader resourceLoader = null; + private Boolean failOnError = true; public DefaultExecutionFlow() { this.executionSpec = new DefaultExecutionSpec(); @@ -88,17 +89,36 @@ public class DefaultExecutionFlow implements ExecutionFlow, InitializingBean, } public void run() { - for (Runnable executable : executables) { - executable.run(); + try { + for (Runnable executable : executables) { + executable.run(); + } + } catch (RuntimeException e) { + if (failOnError) + throw e; + else { + log.error("Execution flow failed," + + " but process did not fail" + + " because failOnError property" + + " is set to false: " + e, e); + if (log.isTraceEnabled()) + e.printStackTrace(); + } } } + @SuppressWarnings(value = { "unchecked" }) public void afterPropertiesSet() throws Exception { if (path != null) { for (Runnable executable : executables) { if (executable instanceof StructureAware) { ((StructureAware) executable).notifyCurrentPath( registry, new TreeSPath(path)); + } else if (executable instanceof DefaultExecutionFlow) { + // so we don't need to have DefaultExecutionFlow + // implementing StructureAware + DefaultExecutionFlow flow = (DefaultExecutionFlow) executable; + flow.setPath(path + '/' + flow.getName()); } } } @@ -172,15 +192,12 @@ public class DefaultExecutionFlow implements ExecutionFlow, InitializingBean, this.registry = registry; } - public void notifyCurrentPath(StructureRegistry registry, - TreeSPath path) { - if (this.path == null) { - this.path = path.toString(); - } + public Boolean getFailOnError() { + return failOnError; } - public void setResourceLoader(ResourceLoader resourceLoader) { - this.resourceLoader = resourceLoader; + public void setFailOnError(Boolean failOnError) { + this.failOnError = failOnError; } }