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;
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());
+ 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());
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);
}
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.run();
}
public void setApplicationContext(ApplicationContext applicationContext)
this.applicationContext = applicationContext;
}
+ public void setExecutionContext(ExecutionContext executionContext) {
+ this.executionContext = executionContext;
+ }
+
+ public void setDescriptorConverter(
+ ExecutionFlowDescriptorConverter descriptorConverter) {
+ this.descriptorConverter = descriptorConverter;
+ }
+
}