]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/execution/MapExecutionContext.java
Improve SSH support
[gpl/argeo-slc.git] / runtime / org.argeo.slc.support.simple / src / main / java / org / argeo / slc / core / execution / MapExecutionContext.java
index a700ca3b810801e05f67db3ec11e0a026cc34152..2dc9b867c01595d5aa90b69dce60f3a48b3bead2 100644 (file)
@@ -1,5 +1,6 @@
 package org.argeo.slc.core.execution;
 
+import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Stack;
@@ -11,27 +12,35 @@ import org.argeo.slc.SlcException;
 import org.argeo.slc.execution.ExecutionContext;
 import org.argeo.slc.execution.ExecutionFlow;
 import org.argeo.slc.execution.ExecutionSpecAttribute;
-import org.argeo.slc.process.SlcExecution;
-import org.springframework.beans.factory.ObjectFactory;
 
 public class MapExecutionContext implements ExecutionContext {
-       private final static Log log = LogFactory.getLog(MapExecutionContext.class);
 
+       private final static Log log = LogFactory.getLog(MapExecutionContext.class);
 
        private final Stack<ExecutionFlowRuntime> stack = new Stack<ExecutionFlowRuntime>();
 
        // TODO: make it thread safe?
        private final Map<String, Object> variables = new HashMap<String, Object>();
 
-       private final String uuid = UUID.randomUUID().toString();
-       
-       public void addVariables(Map<? extends String, ? extends Object> variablesToAdd) {
+       private final String uuid;
+
+       private final Date creationDate = new Date();
+
+       public MapExecutionContext() {
+               uuid = UUID.randomUUID().toString();
+               variables.put(VAR_EXECUTION_CONTEXT_ID, uuid);
+       }
+
+       public void addVariables(
+                       Map<? extends String, ? extends Object> variablesToAdd) {
                variables.putAll(variablesToAdd);
        }
 
        public void enterFlow(ExecutionFlow executionFlow) {
                ExecutionFlowRuntime runtime = new ExecutionFlowRuntime(executionFlow);
                stack.push(runtime);
+               variables.put(VAR_FLOW_ID, runtime.getUuid());
+               variables.put(VAR_FLOW_NAME, runtime.getExecutionFlow().getName());
 
                if (log.isDebugEnabled())
                        log.debug(depthSpaces(stack.size()) + "=> " + executionFlow + " #"
@@ -40,7 +49,7 @@ public class MapExecutionContext implements ExecutionContext {
                Map<String, ExecutionSpecAttribute> specAttrs = executionFlow
                                .getExecutionSpec().getAttributes();
                for (String key : specAttrs.keySet()) {
-                       //ExecutionSpecAttribute esa = specAttrs.get(key);
+                       // ExecutionSpecAttribute esa = specAttrs.get(key);
                        if (executionFlow.isSetAsParameter(key)) {
                                runtime.getLocalVariables().put(key,
                                                executionFlow.getParameter(key));
@@ -59,14 +68,14 @@ public class MapExecutionContext implements ExecutionContext {
                return obj;
        }
 
-       protected Object findVariable(String key) {
+       public Object findVariable(String key) {
                Object obj = null;
-               
+
                // Look if the variable is set in the global execution variables
                // (i.e. the variable was overridden)
                if (variables.containsKey(key))
-                       obj = variables.get(key);               
-               
+                       obj = variables.get(key);
+
                // if the variable was not found, look in the stack starting at the
                // upper flows
                if (obj == null) {
@@ -103,12 +112,12 @@ public class MapExecutionContext implements ExecutionContext {
                leftEf.getLocalVariables().clear();
 
        }
-       
+
        public void addScopedObject(String name, Object obj) {
-               //TODO: check that the object is not set yet ?
+               // TODO: check that the object is not set yet ?
                stack.peek().getScopedObjects().put(name, obj);
        }
-       
+
        /** return null if not found */
        public Object findScopedObject(String name) {
                Object obj = null;
@@ -125,6 +134,10 @@ public class MapExecutionContext implements ExecutionContext {
                return uuid;
        }
 
+       public Date getCreationDate() {
+               return creationDate;
+       }
+
        private static class ExecutionFlowRuntime {
                private final ExecutionFlow executionFlow;
                private final Map<String, Object> scopedObjects = new HashMap<String, Object>();