1
2
3
4
5
6
7
8
9
10
11 package org.mule.config.spring.parsers.processors;
12
13 import org.mule.config.spring.MuleHierarchicalBeanDefinitionParserDelegate;
14 import org.mule.config.spring.parsers.PostProcessor;
15 import org.mule.config.spring.parsers.assembly.BeanAssembler;
16 import org.mule.config.spring.parsers.assembly.BeanAssemblerFactory;
17 import org.mule.config.spring.parsers.assembly.configuration.PropertyConfiguration;
18 import org.mule.config.spring.util.SpringXMLUtils;
19
20 import org.springframework.beans.factory.xml.BeanDefinitionParserDelegate;
21 import org.springframework.beans.factory.xml.ParserContext;
22 import org.w3c.dom.Element;
23 import org.w3c.dom.Node;
24 import org.w3c.dom.NodeList;
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54 public abstract class AbstractChildElementIterator implements PostProcessor
55 {
56
57 private BeanAssemblerFactory beanAssemblerFactory;
58 private PropertyConfiguration configuration;
59
60 public AbstractChildElementIterator(BeanAssemblerFactory beanAssemblerFactory, PropertyConfiguration configuration)
61 {
62 this.beanAssemblerFactory = beanAssemblerFactory;
63 this.configuration = configuration;
64 }
65
66 public void postProcess(ParserContext context, BeanAssembler assembler, Element element)
67 {
68 NodeList children = element.getChildNodes();
69 for (int i = 0; i < children.getLength(); ++i)
70 {
71 Node child = children.item(i);
72 if (child.getNodeType() == Node.ELEMENT_NODE)
73 {
74 processChildElement(context, assembler, element, (Element) child);
75 }
76 }
77 }
78
79 protected void processChildElement(ParserContext context, BeanAssembler assembler, Element parent, Element child)
80 {
81 Object childBean = null;
82 if (SpringXMLUtils.isBeansNamespace(child)
83 || SpringXMLUtils.isLocalName(child, BeanDefinitionParserDelegate.REF_ELEMENT))
84 {
85 childBean = context.getDelegate().parsePropertySubElement(child, null);
86 }
87 else
88 {
89 childBean = context.getDelegate().parseCustomElement(child,
90 assembler.getBean().getBeanDefinition());
91 }
92 BeanAssembler targetAssembler = beanAssemblerFactory.newBeanAssembler(null, null, configuration,
93 assembler.getBean().getRawBeanDefinition());
94 insertBean(targetAssembler, childBean, parent, child);
95 }
96
97 protected abstract void insertBean(BeanAssembler targetAssembler, Object childBean, Element parent, Element child);
98
99 }