]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - sandbox/argeo.slc.executionflow/src/main/java/org/argeo/slc/executionflow/SimpleExecutionFlow.java
Local variables management
[gpl/argeo-slc.git] / sandbox / argeo.slc.executionflow / src / main / java / org / argeo / slc / executionflow / SimpleExecutionFlow.java
index 747fa1652fd1623909be0a61cfc86fc30cf9c442..225400e1b9e8f31ec857edf9ca6d9b78d5dd867b 100644 (file)
@@ -16,25 +16,16 @@ import org.springframework.validation.MapBindingResult;
 
 public class SimpleExecutionFlow implements ExecutionFlow, InitializingBean,
                BeanNameAware {
-       // private static ThreadLocal<ExecutionFlow> executionFlow = new
-       // ThreadLocal<ExecutionFlow>();
-
        private ExecutionSpec executionSpec = new SimpleExecutionSpec();
        private String name = null;
-       private Map<String, Object> attributes = new HashMap<String, Object>();
-       private Map<String, Object> scopedObjects = new HashMap<String, Object>();
+       private Map<String, Object> parameters = new HashMap<String, Object>();
        private List<Executable> executables = new ArrayList<Executable>();
 
        private final String uuid = UUID.randomUUID().toString();
 
        public void execute() {
-               try {
-                       // ExecutionContext.enterFlow(this);
-                       for (Executable executable : executables) {
-                               executable.execute();
-                       }
-               } finally {
-                       // ExecutionContext.leaveFlow(this);
+               for (Executable executable : executables) {
+                       executable.execute();
                }
        }
 
@@ -43,26 +34,27 @@ public class SimpleExecutionFlow implements ExecutionFlow, InitializingBean,
                if (executionSpec == null)
                        return;
 
-               MapBindingResult errors = new MapBindingResult(attributes, "execution#"
+               MapBindingResult errors = new MapBindingResult(parameters, "execution#"
                                + getUuid());
                for (String key : executionSpec.getAttributes().keySet()) {
                        ExecutionSpecAttribute executionSpecAttr = executionSpec
                                        .getAttributes().get(key);
-                       if (!attributes.containsKey(key)) {
+                       if (!parameters.containsKey(key)) {
                                Object defaultValue = executionSpecAttr.getValue();
                                if (defaultValue == null)
                                        errors.rejectValue(key, "Not set and no default value");
                                else
-                                       attributes.put(key, defaultValue);
+                                       parameters.put(key, defaultValue);
                        } else {// contains key
-                               Object obj = attributes.get(key);
+                               Object obj = parameters.get(key);
                                if (executionSpecAttr instanceof RefSpecAttribute) {
                                        RefSpecAttribute rsa = (RefSpecAttribute) executionSpecAttr;
                                        Class targetClass = rsa.getTargetClass();
-                                       if (!targetClass.isAssignableFrom(obj.getClass()))
-                                               errors.rejectValue(key,
-                                                               "Not compatible with target class "
-                                                                               + targetClass);
+                                       if (!targetClass.isAssignableFrom(obj.getClass())) {
+                                               errors.reject(key
+                                                               + " not compatible with target class "
+                                                               + targetClass);
+                                       }
                                }
                        }
                }
@@ -84,28 +76,39 @@ public class SimpleExecutionFlow implements ExecutionFlow, InitializingBean,
                this.executionSpec = executionSpec;
        }
 
-       public void setAttributes(Map<String, Object> attributes) {
-               this.attributes = attributes;
-       }
-
-       public Map<String, Object> getAttributes() {
-               return attributes;
+       public void setParameters(Map<String, Object> attributes) {
+               this.parameters = attributes;
        }
 
        public String getUuid() {
                return uuid;
        }
 
-       public Map<String, Object> getScopedObjects() {
-               return scopedObjects;
-       }
-
        public ExecutionSpec getExecutionSpec() {
                return executionSpec;
        }
 
+       public Object getParameter(String name) {
+               if (parameters.containsKey(name)) {
+                       return parameters.get(name);
+               } else {
+                       if (executionSpec.getAttributes().containsKey(name)) {
+                               ExecutionSpecAttribute esa = executionSpec.getAttributes().get(
+                                               name);
+                               if (esa.getValue() != null)
+                                       return esa.getValue();
+                       } else {
+                               throw new SlcException("Key " + name
+                                               + " is not define in the specifications of "
+                                               + toString());
+                       }
+               }
+               throw new SlcException("Key " + name + " is not set as parameter in "
+                               + toString());
+       }
+
        public String toString() {
-               return new StringBuffer("Flow ").append(name).append(" [#")
-                               .append(uuid).append(']').toString();
+               return new StringBuffer("Flow ").append(name).toString();// .append(" [#")
+               // .append(uuid).append(']').toString();
        }
 }