X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=runtime%2Forg.argeo.slc.core%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fcore%2Fexecution%2FDefaultExecutionFlow.java;h=535c42dad7224fdded4a561e864ec801f768d67f;hb=d1298659fe6f179d1cbbc8c89f108a0bbc5b4edf;hp=9f2c9dbeabb5bf4c9717635f080f3ee1816153fa;hpb=a050d4c27325c65fc04e7eed5b63b5f8ea117df0;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 9f2c9dbea..535c42dad 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 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2012 Mathieu Baudier + * Copyright (C) 2007-2012 Argeo GmbH * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,6 +17,7 @@ package org.argeo.slc.core.execution; import java.util.ArrayList; import java.util.HashMap; +import java.util.Iterator; import java.util.List; import java.util.Map; @@ -27,10 +28,12 @@ import org.argeo.slc.execution.ExecutionFlow; import org.argeo.slc.execution.ExecutionSpec; import org.argeo.slc.execution.ExecutionSpecAttribute; import org.springframework.beans.factory.BeanNameAware; +import org.springframework.beans.factory.InitializingBean; import org.springframework.validation.MapBindingResult; /** Default implementation of an execution flow. */ -public class DefaultExecutionFlow implements ExecutionFlow, BeanNameAware { +public class DefaultExecutionFlow implements ExecutionFlow, InitializingBean, + BeanNameAware { private final static Log log = LogFactory .getLog(DefaultExecutionFlow.class); @@ -39,6 +42,8 @@ public class DefaultExecutionFlow implements ExecutionFlow, BeanNameAware { private Map parameters = new HashMap(); private List executables = new ArrayList(); + private String path; + private Boolean failOnError = true; public DefaultExecutionFlow() { @@ -128,10 +133,52 @@ public class DefaultExecutionFlow implements ExecutionFlow, BeanNameAware { } } + /** + * List sub-runnables that would be executed if run() method would be + * called. + */ + public Iterator runnables() { + return executables.iterator(); + } + + /** + * If there is one and only one runnable wrapped return it, throw an + * exeception otherwise. + */ + public Runnable getRunnable() { + if (executables.size() == 1) + return executables.get(0); + else + throw new SlcException("There are " + executables.size() + + " runnables in flow " + getName()); + } + public void doExecuteRunnable(Runnable runnable) { runnable.run(); } + public void afterPropertiesSet() throws Exception { + if (path == null) { + if (name.charAt(0) == '/') { + path = name.substring(0, name.lastIndexOf('/')); + } + } + + if (path != null) { + for (Runnable executable : executables) { + if (executable instanceof DefaultExecutionFlow) { + // so we don't need to have DefaultExecutionFlow + // implementing StructureAware + // FIXME: probably has side effects + DefaultExecutionFlow flow = (DefaultExecutionFlow) executable; + String newPath = path + '/' + flow.getName(); + flow.setPath(newPath); + log.warn(newPath + " was forcibly set on " + flow); + } + } + } + } + public void setBeanName(String name) { this.name = name; } @@ -195,9 +242,12 @@ public class DefaultExecutionFlow implements ExecutionFlow, BeanNameAware { return name.hashCode(); } - /** @deprecated does nothing */ - @Deprecated + public String getPath() { + return path; + } + public void setPath(String path) { + this.path = path; } public Boolean getFailOnError() {