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