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.parsers.PostProcessor;
14 import org.mule.config.spring.parsers.assembly.BeanAssembler;
15 import org.mule.config.spring.parsers.assembly.BeanAssemblerFactory;
16 import org.mule.config.spring.parsers.assembly.configuration.PropertyConfiguration;
17
18 import org.w3c.dom.Element;
19 import org.w3c.dom.NodeList;
20 import org.w3c.dom.Node;
21 import org.springframework.beans.factory.xml.ParserContext;
22 import org.springframework.beans.factory.config.BeanDefinition;
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 public abstract class AbstractChildElementIterator implements PostProcessor
44 {
45
46 private BeanAssemblerFactory beanAssemblerFactory;
47 private PropertyConfiguration configuration;
48
49 public AbstractChildElementIterator(BeanAssemblerFactory beanAssemblerFactory, PropertyConfiguration configuration)
50 {
51 this.beanAssemblerFactory = beanAssemblerFactory;
52 this.configuration = configuration;
53 }
54
55 public void postProcess(ParserContext context, BeanAssembler assembler, Element element)
56 {
57 NodeList children = element.getChildNodes();
58 for (int i = 0; i < children.getLength(); ++i)
59 {
60 Node child = children.item(i);
61 if (child.getNodeType() == Node.ELEMENT_NODE)
62 {
63 processChildElement(context, assembler, element, (Element) child);
64 }
65 }
66 }
67
68 protected void processChildElement(ParserContext context, BeanAssembler assembler, Element parent, Element child)
69 {
70 BeanDefinition childBean =
71 context.getDelegate().parseCustomElement(child, assembler.getBean().getBeanDefinition());
72 BeanAssembler targetAssembler =
73 beanAssemblerFactory.newBeanAssembler(null, null, configuration,
74 assembler.getBean().getRawBeanDefinition());
75 insertBean(targetAssembler, childBean, parent, child);
76 }
77
78 protected abstract void insertBean(BeanAssembler targetAssembler, BeanDefinition childBean, Element parent, Element child);
79
80 }