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