]> git.argeo.org Git - gpl/argeo-slc.git/blob - runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/execution/AbstractExecutionFlowGenerator.java
Modular distributions
[gpl/argeo-slc.git] / runtime / org.argeo.slc.core / src / main / java / org / argeo / slc / core / execution / AbstractExecutionFlowGenerator.java
1 package org.argeo.slc.core.execution;
2
3 import java.util.List;
4 import java.util.Map;
5
6 import org.apache.commons.logging.Log;
7 import org.apache.commons.logging.LogFactory;
8 import org.argeo.slc.SlcException;
9 import org.springframework.beans.BeansException;
10 import org.springframework.beans.MutablePropertyValues;
11 import org.springframework.beans.factory.config.BeanDefinition;
12 import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
13 import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
14 import org.springframework.beans.factory.support.BeanDefinitionRegistry;
15 import org.springframework.beans.factory.support.GenericBeanDefinition;
16 import org.springframework.core.Ordered;
17 import org.springframework.core.PriorityOrdered;
18
19 public abstract class AbstractExecutionFlowGenerator implements
20 BeanFactoryPostProcessor, PriorityOrdered {
21 private final Log log = LogFactory.getLog(getClass());
22
23 protected abstract Map<String, BeanDefinition> createExecutionFlowDefinitions(
24 ConfigurableListableBeanFactory beanFactory);
25
26 public void postProcessBeanFactory(
27 ConfigurableListableBeanFactory beanFactory) throws BeansException {
28 if (!(beanFactory instanceof BeanDefinitionRegistry)) {
29 throw new SlcException("Can only work on "
30 + BeanDefinitionRegistry.class);
31 }
32
33 Map<String, BeanDefinition> definitions = createExecutionFlowDefinitions(beanFactory);
34
35 for (String beanName : definitions.keySet()) {
36 if (log.isTraceEnabled())
37 log.debug("Registering execution flow " + beanName);
38 ((BeanDefinitionRegistry) beanFactory).registerBeanDefinition(
39 beanName, definitions.get(beanName));
40 }
41 }
42
43 protected GenericBeanDefinition createDefaultFlowDefinition(
44 List<Runnable> executables) {
45 GenericBeanDefinition bd = new GenericBeanDefinition();
46 bd.setBeanClass(DefaultExecutionFlow.class);
47
48 MutablePropertyValues mpv = new MutablePropertyValues();
49 mpv.addPropertyValue("executables", executables);
50
51 bd.setPropertyValues(mpv);
52 return bd;
53 }
54
55 public int getOrder() {
56 return Ordered.HIGHEST_PRECEDENCE;
57 }
58
59 }