1
2
3
4
5
6
7 package org.mule.config.spring.parsers;
8
9 import org.mule.config.spring.parsers.assembly.BeanAssembler;
10 import org.mule.config.spring.parsers.generic.AutoIdUtils;
11 import org.mule.config.spring.util.SpringXMLUtils;
12 import org.mule.util.StringUtils;
13
14 import org.springframework.beans.factory.config.BeanDefinition;
15 import org.springframework.beans.factory.support.BeanDefinitionBuilder;
16 import org.springframework.beans.factory.xml.ParserContext;
17 import org.w3c.dom.Element;
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 public abstract class AbstractChildDefinitionParser
41 extends AbstractHierarchicalDefinitionParser
42 implements MuleChildDefinitionParser
43 {
44
45 protected final void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder)
46 {
47 setRegistry(parserContext.getRegistry());
48 parseChild(element, parserContext, builder);
49 }
50
51 protected void parseChild(Element element, ParserContext parserContext, BeanDefinitionBuilder builder)
52 {
53 builder.setScope(isSingleton() ? BeanDefinition.SCOPE_SINGLETON : BeanDefinition.SCOPE_PROTOTYPE);
54 super.doParse(element, parserContext, builder);
55 }
56
57 protected void postProcess(ParserContext context, BeanAssembler assembler, Element element)
58 {
59 super.postProcess(context, assembler, element);
60
61
62 String propertyName = getPropertyName(element);
63 if (null != propertyName)
64 {
65
66
67
68 if (!assembler.getBean().getBeanDefinition().isSingleton())
69 {
70 assembler.insertBeanInTarget(propertyName);
71 }
72 else
73 {
74 assembler.insertSingletonBeanInTarget(propertyName,
75 element.getAttribute(AbstractMuleBeanDefinitionParser.ATTRIBUTE_NAME));
76 }
77 }
78 }
79
80 public String getBeanName(Element e)
81 {
82 String name = SpringXMLUtils.getNameOrId(e);
83 if (StringUtils.isBlank(name))
84 {
85 String parentId = getParentBeanName(e);
86 if (!parentId.startsWith("."))
87 {
88 parentId = "." + parentId;
89 }
90 return AutoIdUtils.uniqueValue(parentId + ":" + e.getLocalName());
91 }
92 else
93 {
94 return name;
95 }
96 }
97
98 public abstract String getPropertyName(Element element);
99
100 }