]> git.argeo.org Git - gpl/argeo-slc.git/blob - legacy/org.argeo.slc.spring/src/org/argeo/slc/core/execution/xml/AsFlowDecorator.java
Massive Argeo APIs refactoring
[gpl/argeo-slc.git] / legacy / org.argeo.slc.spring / src / org / argeo / slc / core / execution / xml / AsFlowDecorator.java
1 package org.argeo.slc.core.execution.xml;
2
3 import org.argeo.api.cms.CmsLog;
4 import org.argeo.slc.SlcException;
5 import org.argeo.slc.core.execution.DefaultExecutionFlow;
6 import org.argeo.slc.execution.ExecutionFlow;
7 import org.springframework.beans.BeanMetadataElement;
8 import org.springframework.beans.factory.config.BeanDefinitionHolder;
9 import org.springframework.beans.factory.config.RuntimeBeanReference;
10 import org.springframework.beans.factory.support.BeanDefinitionBuilder;
11 import org.springframework.beans.factory.support.ManagedList;
12 import org.springframework.beans.factory.xml.BeanDefinitionDecorator;
13 import org.springframework.beans.factory.xml.ParserContext;
14 import org.w3c.dom.Attr;
15 import org.w3c.dom.Node;
16
17 /** Publishes a {@link Runnable} as an {@link ExecutionFlow} */
18 public class AsFlowDecorator implements BeanDefinitionDecorator {
19 private CmsLog log = CmsLog.getLog(AsFlowDecorator.class);
20
21 public BeanDefinitionHolder decorate(Node node, BeanDefinitionHolder bean,
22 ParserContext ctx) {
23 String attrValue = ((Attr) node).getValue();
24 if (attrValue.charAt(attrValue.length() - 1) == '/')
25 throw new SlcException(attrValue + " cannot end with a path");
26 final String flowBeanName = attrValue;
27
28 if (log.isTraceEnabled())
29 log.trace("flowBeanName=" + flowBeanName);
30
31 if (ctx.getRegistry().containsBeanDefinition(flowBeanName))
32 throw new SlcException("A bean named " + flowBeanName
33 + " is already defined.");
34 BeanDefinitionBuilder flow = BeanDefinitionBuilder
35 .rootBeanDefinition(DefaultExecutionFlow.class);
36 ManagedList<BeanMetadataElement> executables = new ManagedList<BeanMetadataElement>(
37 1);
38
39 String beanName = bean.getBeanName();
40 if (beanName == null)
41 executables.add(bean.getBeanDefinition());
42 else
43 executables.add(new RuntimeBeanReference(beanName));
44
45 // if (path != null)
46 // flow.addPropertyValue("path", path);
47 flow.addPropertyValue("executables", executables);
48
49 if (beanName != null)
50 ctx.getRegistry().registerBeanDefinition(flowBeanName,
51 flow.getBeanDefinition());
52 return bean;
53 }
54
55 }