]> git.argeo.org Git - gpl/argeo-slc.git/blob - runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/execution/xml/AsFlowDecorator.java
Introduce runnable interception
[gpl/argeo-slc.git] / runtime / org.argeo.slc.core / src / main / java / org / argeo / slc / core / execution / xml / AsFlowDecorator.java
1 package org.argeo.slc.core.execution.xml;
2
3 import org.argeo.slc.SlcException;
4 import org.argeo.slc.core.execution.DefaultExecutionFlow;
5 import org.springframework.beans.factory.config.BeanDefinitionHolder;
6 import org.springframework.beans.factory.support.BeanDefinitionBuilder;
7 import org.springframework.beans.factory.support.ManagedList;
8 import org.springframework.beans.factory.xml.BeanDefinitionDecorator;
9 import org.springframework.beans.factory.xml.ParserContext;
10 import org.w3c.dom.Attr;
11 import org.w3c.dom.Node;
12
13 public class AsFlowDecorator implements BeanDefinitionDecorator {
14
15 @SuppressWarnings("unchecked")
16 public BeanDefinitionHolder decorate(Node node, BeanDefinitionHolder bean,
17 ParserContext ctx) {
18 String flowBeanName = ((Attr) node).getValue();
19 if (ctx.getRegistry().containsBeanDefinition(flowBeanName))
20 throw new SlcException("A bean named " + flowBeanName
21 + " is already defined.");
22 BeanDefinitionBuilder flow = BeanDefinitionBuilder
23 .rootBeanDefinition(DefaultExecutionFlow.class);
24 ManagedList executables = new ManagedList(1);
25 executables.add(bean.getBeanDefinition());
26 flow.addPropertyValue("executables", executables);
27 ctx.getRegistry().registerBeanDefinition(flowBeanName,
28 flow.getBeanDefinition());
29 return bean;
30 }
31
32 }