]> git.argeo.org Git - gpl/argeo-slc.git/blob - runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/execution/AbstractSpringExecutionModule.java
fa42917fdb3e5ca43e43efdb79d1b6aa04939fdb
[gpl/argeo-slc.git] / runtime / org.argeo.slc.support.simple / src / main / java / org / argeo / slc / core / execution / AbstractSpringExecutionModule.java
1 package org.argeo.slc.core.execution;
2
3 import java.util.HashMap;
4 import java.util.Map;
5
6 import org.argeo.slc.execution.ExecutionFlow;
7 import org.argeo.slc.execution.ExecutionFlowDescriptor;
8 import org.argeo.slc.execution.ExecutionModule;
9 import org.argeo.slc.execution.ExecutionModuleDescriptor;
10 import org.argeo.slc.execution.ExecutionSpec;
11 import org.argeo.slc.execution.ExecutionSpecAttribute;
12 import org.argeo.slc.process.SlcExecution;
13 import org.springframework.beans.BeansException;
14 import org.springframework.beans.factory.generic.GenericBeanFactoryAccessor;
15 import org.springframework.context.ApplicationContext;
16 import org.springframework.context.ApplicationContextAware;
17 import org.springframework.util.Assert;
18
19 public abstract class AbstractSpringExecutionModule implements ExecutionModule,
20 ApplicationContextAware {
21 private ApplicationContext applicationContext;
22
23 public ExecutionModuleDescriptor getDescriptor() {
24 ExecutionModuleDescriptor md = new ExecutionModuleDescriptor();
25 md.setName(getName());
26 md.setVersion(getVersion());
27
28 GenericBeanFactoryAccessor accessor = new GenericBeanFactoryAccessor(
29 applicationContext);
30 Map<String, ExecutionFlow> executionFlows = accessor
31 .getBeansOfType(ExecutionFlow.class);
32
33 for (String name : executionFlows.keySet()) {
34 ExecutionFlow executionFlow = executionFlows.get(name);
35
36 Assert.notNull(executionFlow.getName());
37 Assert.state(name.equals(executionFlow.getName()));
38
39 ExecutionSpec executionSpec = executionFlow.getExecutionSpec();
40 Assert.notNull(executionSpec);
41 Assert.notNull(executionSpec.getName());
42
43 Map<String, Object> values = new HashMap<String, Object>();
44 for (String key : executionSpec.getAttributes().keySet()) {
45 ExecutionSpecAttribute attribute = executionSpec
46 .getAttributes().get(key);
47 if (attribute instanceof SimpleExecutionSpec
48 && attribute.getIsParameter()) {
49 values.put(key, executionFlow.getParameter(key));
50 }
51 }
52
53 ExecutionFlowDescriptor efd = new ExecutionFlowDescriptor(name,
54 values, executionSpec);
55
56 if (!md.getExecutionSpecs().contains(executionSpec))
57 md.getExecutionSpecs().add(executionSpec);
58 md.getExecutionFlows().add(efd);
59 }
60
61 return md;
62 }
63
64 public void execute(SlcExecution slcExecution) {
65 applicationContext.publishEvent(new NewExecutionEvent(this,
66 slcExecution));
67 }
68
69 public void setApplicationContext(ApplicationContext applicationContext)
70 throws BeansException {
71 this.applicationContext = applicationContext;
72 }
73
74 }