]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/execution/AbstractSpringExecutionModule.java
Improve detached launcher
[gpl/argeo-slc.git] / runtime / org.argeo.slc.support.simple / src / main / java / org / argeo / slc / core / execution / AbstractSpringExecutionModule.java
index 4e0842e37dd142d9c05ed6c9724060021059dad6..1cac123a81daf00a9489529a07e967aa5533eddb 100644 (file)
@@ -1,17 +1,17 @@
 package org.argeo.slc.core.execution;
 
-import java.util.HashMap;
 import java.util.Map;
 import java.util.TreeMap;
 
 import org.argeo.slc.SlcException;
+import org.argeo.slc.execution.ExecutionContext;
 import org.argeo.slc.execution.ExecutionFlow;
 import org.argeo.slc.execution.ExecutionFlowDescriptor;
+import org.argeo.slc.execution.ExecutionFlowDescriptorConverter;
 import org.argeo.slc.execution.ExecutionModule;
 import org.argeo.slc.execution.ExecutionModuleDescriptor;
 import org.argeo.slc.execution.ExecutionSpec;
 import org.argeo.slc.execution.ExecutionSpecAttribute;
-import org.argeo.slc.process.SlcExecution;
 import org.springframework.aop.scope.ScopedObject;
 import org.springframework.beans.BeansException;
 import org.springframework.beans.factory.generic.GenericBeanFactoryAccessor;
@@ -21,8 +21,13 @@ import org.springframework.util.Assert;
 
 public abstract class AbstractSpringExecutionModule implements ExecutionModule,
                ApplicationContextAware {
+
        private ApplicationContext applicationContext;
 
+       private ExecutionContext executionContext;
+
+       private ExecutionFlowDescriptorConverter descriptorConverter = new DefaultDescriptorConverter();
+
        public ExecutionModuleDescriptor getDescriptor() {
                ExecutionModuleDescriptor md = new ExecutionModuleDescriptor();
                md.setName(getName());
@@ -67,6 +72,13 @@ public abstract class AbstractSpringExecutionModule implements ExecutionModule,
                                                                        + value.getClass().getName());
                                                }
                                                values.put(key, refValue);
+                                       } else if (attribute instanceof ResourceSpecAttribute) {
+                                               PrimitiveValue primitiveValue = new PrimitiveValue();
+                                               primitiveValue
+                                                               .setType(((ResourceSpecAttribute) attribute)
+                                                                               .getType());
+                                               primitiveValue.setValue(value);
+                                               values.put(key, primitiveValue);
                                        } else {
                                                throw new SlcException("Unkown spec attribute type "
                                                                + attribute.getClass());
@@ -77,11 +89,13 @@ public abstract class AbstractSpringExecutionModule implements ExecutionModule,
 
                        ExecutionFlowDescriptor efd = new ExecutionFlowDescriptor(name,
                                        values, executionSpec);
+                       if (executionFlow.getPath() != null)
+                               efd.setPath(executionFlow.getPath());
 
                        // Add execution spec if necessary
                        if (!md.getExecutionSpecs().contains(executionSpec))
                                md.getExecutionSpecs().add(executionSpec);
-                       
+
                        // Add execution flow
                        md.getExecutionFlows().add(efd);
                }
@@ -89,9 +103,13 @@ public abstract class AbstractSpringExecutionModule implements ExecutionModule,
                return md;
        }
 
-       public void execute(SlcExecution slcExecution) {
-               applicationContext.publishEvent(new NewExecutionEvent(this,
-                               slcExecution));
+       public void execute(ExecutionFlowDescriptor executionFlowDescriptor) {
+               if (descriptorConverter != null)
+                       executionContext.addVariables(descriptorConverter
+                                       .convertValues(executionFlowDescriptor));
+               ExecutionFlow flow = (ExecutionFlow) applicationContext.getBean(
+                               executionFlowDescriptor.getName(), ExecutionFlow.class);
+               flow.execute();
        }
 
        public void setApplicationContext(ApplicationContext applicationContext)
@@ -99,4 +117,13 @@ public abstract class AbstractSpringExecutionModule implements ExecutionModule,
                this.applicationContext = applicationContext;
        }
 
+       public void setExecutionContext(ExecutionContext executionContext) {
+               this.executionContext = executionContext;
+       }
+
+       public void setDescriptorConverter(
+                       ExecutionFlowDescriptorConverter descriptorConverter) {
+               this.descriptorConverter = descriptorConverter;
+       }
+
 }