]> git.argeo.org Git - gpl/argeo-slc.git/blob - runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/execution/DefaultModulesManager.java
75d94db02fd46f83ae6805d6abc192685bcb4173
[gpl/argeo-slc.git] / runtime / org.argeo.slc.support.simple / src / main / java / org / argeo / slc / core / execution / DefaultModulesManager.java
1 package org.argeo.slc.core.execution;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import org.apache.commons.logging.Log;
7 import org.apache.commons.logging.LogFactory;
8 import org.argeo.slc.execution.ExecutionFlow;
9 import org.argeo.slc.execution.ExecutionFlowDescriptor;
10 import org.argeo.slc.execution.ExecutionModule;
11 import org.argeo.slc.execution.ExecutionModuleDescriptor;
12 import org.argeo.slc.execution.ExecutionModulesManager;
13 import org.argeo.slc.process.RealizedFlow;
14 import org.argeo.slc.process.SlcExecution;
15 import org.springframework.util.Assert;
16
17 public class DefaultModulesManager implements ExecutionModulesManager {
18 private final static Log log = LogFactory
19 .getLog(DefaultModulesManager.class);
20
21 private List<ExecutionModule> executionModules = new ArrayList<ExecutionModule>();
22
23 protected ExecutionModule getExecutionModule(String moduleName, String version) {
24 for (ExecutionModule moduleT : executionModules) {
25 if (moduleT.getName().equals(moduleName)) {
26 // TODO: check version
27 return moduleT;
28 }
29 }
30 return null;
31 }
32
33 public ExecutionModuleDescriptor getExecutionModuleDescriptor(
34 String moduleName, String version) {
35 ExecutionModule module = getExecutionModule(moduleName, version);
36
37 Assert.notNull(module);
38
39 return module.getDescriptor();
40 }
41
42 public List<ExecutionModule> listExecutionModules() {
43 return executionModules;
44 }
45
46 public void setExecutionModules(List<ExecutionModule> executionModules) {
47 this.executionModules = executionModules;
48 }
49
50 public void process(SlcExecution slcExecution) {
51 log.info("SlcExecution " + slcExecution);
52
53 for(RealizedFlow flow : slcExecution.getRealizedFlows()) {
54 ExecutionModule module = getExecutionModule(flow.getModuleName(),
55 flow.getModuleVersion());
56 if(module != null) {
57 ExecutionContext executionContext = new ExecutionContext();
58 executionContext.addVariables(slcExecution.getAttributes());
59 ExecutionThread thread = new ExecutionThread(executionContext, flow.getFlowDescriptor(),
60 module);
61 thread.start();
62 }
63 else {
64 // throw exception ?
65 }
66 }
67 }
68
69 private class ExecutionThread extends Thread {
70 private final ExecutionFlowDescriptor executionFlowDescriptor;
71 private final ExecutionContext executionContext;
72 private final ExecutionModule executionModule;
73
74 public ExecutionThread(ExecutionContext executionContext,
75 ExecutionFlowDescriptor executionFlowDescriptor,
76 ExecutionModule executionModule) {
77 super("SLC Execution #" + executionContext.getUuid());
78 this.executionFlowDescriptor = executionFlowDescriptor;
79 this.executionContext = executionContext;
80 this.executionModule = executionModule;
81 }
82
83 public void run() {
84 ExecutionContext.registerExecutionContext(executionContext);
85 try {
86 executionModule.execute(executionFlowDescriptor);
87 } catch (Exception e) {
88 log.error("Execution " + executionContext.getUuid()
89 + " failed.", e);
90 }
91 }
92 }
93
94 }