1 package org
.argeo
.slc
.core
.execution
.xml
;
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
;
17 /** Publishes a {@link Runnable} as an {@link ExecutionFlow} */
18 public class AsFlowDecorator
implements BeanDefinitionDecorator
{
19 private CmsLog log
= CmsLog
.getLog(AsFlowDecorator
.class);
21 public BeanDefinitionHolder
decorate(Node node
, BeanDefinitionHolder bean
,
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
;
28 if (log
.isTraceEnabled())
29 log
.trace("flowBeanName=" + flowBeanName
);
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
>(
39 String beanName
= bean
.getBeanName();
41 executables
.add(bean
.getBeanDefinition());
43 executables
.add(new RuntimeBeanReference(beanName
));
46 // flow.addPropertyValue("path", path);
47 flow
.addPropertyValue("executables", executables
);
50 ctx
.getRegistry().registerBeanDefinition(flowBeanName
,
51 flow
.getBeanDefinition());