]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/execution/xml/AsFlowDecorator.java
as-flow attribute deals with paths
[gpl/argeo-slc.git] / runtime / org.argeo.slc.core / src / main / java / org / argeo / slc / core / execution / xml / AsFlowDecorator.java
index 7a72e01c6877e8d010d29de6207494b67a2c7cba..2c548857686f10946cd163fe0855b58eaa371fc5 100644 (file)
@@ -1,5 +1,7 @@
 package org.argeo.slc.core.execution.xml;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 import org.argeo.slc.SlcException;
 import org.argeo.slc.core.execution.DefaultExecutionFlow;
 import org.springframework.beans.factory.config.BeanDefinitionHolder;
@@ -11,11 +13,31 @@ import org.w3c.dom.Attr;
 import org.w3c.dom.Node;
 
 public class AsFlowDecorator implements BeanDefinitionDecorator {
+       private Log log = LogFactory.getLog(AsFlowDecorator.class);
 
        @SuppressWarnings("unchecked")
        public BeanDefinitionHolder decorate(Node node, BeanDefinitionHolder bean,
                        ParserContext ctx) {
-               String flowBeanName = ((Attr) node).getValue();
+               String attrValue = ((Attr) node).getValue();
+               if (attrValue.charAt(attrValue.length() - 1) == '/')
+                       throw new SlcException(attrValue + " cannot end with a path");
+               int lastSlash = attrValue.lastIndexOf('/');
+               String path;
+               String flowBeanName;
+               if (lastSlash > 0) {
+                       flowBeanName = attrValue.substring(lastSlash + 1);
+                       path = attrValue.substring(0, lastSlash);
+               } else if (lastSlash == 0) {
+                       flowBeanName = attrValue.substring(lastSlash + 1);
+                       path = null;
+               } else {
+                       flowBeanName = attrValue;
+                       path = null;
+               }
+
+               if (log.isTraceEnabled())
+                       log.debug("path=" + path + ", flowBeanName=" + flowBeanName);
+
                if (ctx.getRegistry().containsBeanDefinition(flowBeanName))
                        throw new SlcException("A bean named " + flowBeanName
                                        + " is already defined.");
@@ -23,6 +45,8 @@ public class AsFlowDecorator implements BeanDefinitionDecorator {
                                .rootBeanDefinition(DefaultExecutionFlow.class);
                ManagedList executables = new ManagedList(1);
                executables.add(bean.getBeanDefinition());
+               if (path != null)
+                       flow.addPropertyValue("path", path);
                flow.addPropertyValue("executables", executables);
                ctx.getRegistry().registerBeanDefinition(flowBeanName,
                                flow.getBeanDefinition());