X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=runtime%2Forg.argeo.slc.support.simple%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fcore%2Fexecution%2FDefaultModulesManager.java;h=9bb6aae6442b6247e1a9daf9a9bb67825145e67a;hb=ae98a7536a842021e433a43427db79a18abf3a6c;hp=5daa5822b2d09f5889ec4627f298b2c990399693;hpb=995d94b321ef6aba1cf2252b2087920294d525ce;p=gpl%2Fargeo-slc.git diff --git a/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/execution/DefaultModulesManager.java b/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/execution/DefaultModulesManager.java index 5daa5822b..9bb6aae64 100644 --- a/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/execution/DefaultModulesManager.java +++ b/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/execution/DefaultModulesManager.java @@ -1,13 +1,20 @@ package org.argeo.slc.core.execution; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +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.ExecutionModule; import org.argeo.slc.execution.ExecutionModuleDescriptor; import org.argeo.slc.execution.ExecutionModulesManager; +import org.argeo.slc.process.RealizedFlow; import org.argeo.slc.process.SlcExecution; import org.springframework.util.Assert; @@ -16,18 +23,22 @@ public class DefaultModulesManager implements ExecutionModulesManager { .getLog(DefaultModulesManager.class); private List executionModules = new ArrayList(); - - public ExecutionModuleDescriptor getExecutionModuleDescriptor( - String moduleName, String version) { - ExecutionModule module = null; + + protected ExecutionModule getExecutionModule(String moduleName, String version) { for (ExecutionModule moduleT : executionModules) { if (moduleT.getName().equals(moduleName)) { - // TODO: check version - module = moduleT; - break; + if(moduleT.getVersion().equals(version)) { + return moduleT; + } } } - + return null; + } + + public ExecutionModuleDescriptor getExecutionModuleDescriptor( + String moduleName, String version) { + ExecutionModule module = getExecutionModule(moduleName, version); + Assert.notNull(module); return module.getDescriptor(); @@ -41,9 +52,67 @@ public class DefaultModulesManager implements ExecutionModulesManager { this.executionModules = executionModules; } + protected Map convertValues(ExecutionFlowDescriptor executionFlowDescriptor) { + // convert the values of flow.getFlowDescriptor() + Map values = executionFlowDescriptor.getValues(); + + Map convertedValues = new HashMap(); + + for(String key : values.keySet()) { + Object value = values.get(key); + if(value instanceof PrimitiveValue) { + PrimitiveValue primitiveValue = (PrimitiveValue) value; + + // TODO: check that the class of the the primitiveValue.value matches + // the primitiveValue.type + convertedValues.put(key, primitiveValue.getValue()); + } + else if(value instanceof RefValue) { + RefValue refValue = (RefValue) value; + convertedValues.put(key, refValue.getLabel()); + } + } + return convertedValues; + } + public void process(SlcExecution slcExecution) { - log.info("SlcExecution " + slcExecution); + log.info("##\n## Process SLC Execution " + slcExecution+"\n##"); + for(RealizedFlow flow : slcExecution.getRealizedFlows()) { + ExecutionModule module = getExecutionModule(flow.getModuleName(), + flow.getModuleVersion()); + if(module != null) { + ExecutionThread thread = new ExecutionThread(flow.getFlowDescriptor(), module); + thread.start(); + } + else { + throw new SlcException("ExecutionModule " + flow.getModuleName() + ", version " + + flow.getModuleVersion() + " not found."); + } + } } + private class ExecutionThread extends Thread { + private final ExecutionFlowDescriptor executionFlowDescriptor; + private final ExecutionModule executionModule; + + public ExecutionThread(ExecutionFlowDescriptor executionFlowDescriptor, + ExecutionModule executionModule) { + super("SLC Execution #" /*+ executionContext.getUuid()*/); + this.executionFlowDescriptor = executionFlowDescriptor; + this.executionModule = executionModule; + } + + public void run() { + ExecutionContext executionContext = executionModule.getExecutionContext(); + executionContext.addVariables(convertValues(executionFlowDescriptor)); + try { + executionModule.execute(executionFlowDescriptor); + } catch (Exception e) { + //TODO: re-throw exception ? + log.error("Execution " + executionContext.getUuid() + + " failed.", e); + } + } + } }