1
2
3
4
5
6
7
8
9
10 package org.mule.config.spring.handlers;
11
12 import org.mule.config.spring.factories.InboundEndpointFactoryBean;
13 import org.mule.config.spring.factories.OutboundEndpointFactoryBean;
14 import org.mule.config.spring.parsers.MuleDefinitionParser;
15 import org.mule.config.spring.parsers.MuleDefinitionParserConfiguration;
16 import org.mule.config.spring.parsers.PostProcessor;
17 import org.mule.config.spring.parsers.PreProcessor;
18 import org.mule.config.spring.parsers.assembly.configuration.ValueMap;
19 import org.mule.config.spring.parsers.generic.MuleOrphanDefinitionParser;
20 import org.mule.config.spring.parsers.specific.endpoint.TransportEndpointDefinitionParser;
21 import org.mule.config.spring.parsers.specific.endpoint.TransportGlobalEndpointDefinitionParser;
22 import org.mule.config.spring.parsers.specific.endpoint.support.AddressedEndpointDefinitionParser;
23 import org.mule.endpoint.EndpointURIEndpointBuilder;
24
25 import java.util.HashSet;
26 import java.util.Iterator;
27 import java.util.Map;
28 import java.util.Set;
29
30 import org.apache.commons.logging.Log;
31 import org.apache.commons.logging.LogFactory;
32 import org.springframework.beans.factory.config.BeanDefinition;
33 import org.springframework.beans.factory.xml.BeanDefinitionParser;
34 import org.springframework.beans.factory.xml.NamespaceHandlerSupport;
35 import org.springframework.beans.factory.xml.ParserContext;
36 import org.w3c.dom.Element;
37
38
39
40
41
42 public abstract class AbstractMuleNamespaceHandler extends NamespaceHandlerSupport
43 {
44 public static final String GLOBAL_ENDPOINT = "endpoint";
45 public static final String INBOUND_ENDPOINT = "inbound-endpoint";
46 public static final String OUTBOUND_ENDPOINT = "outbound-endpoint";
47
48 protected transient final Log logger = LogFactory.getLog(getClass());
49
50
51
52
53 protected final void registerIgnoredElement(String name)
54 {
55 registerBeanDefinitionParser(name, new IgnoredDefinitionParser());
56 }
57
58 protected MuleDefinitionParserConfiguration registerConnectorDefinitionParser(Class connectorClass)
59 {
60 return registerConnectorDefinitionParser( new MuleOrphanDefinitionParser(connectorClass, true));
61 }
62
63 protected MuleDefinitionParserConfiguration registerConnectorDefinitionParser(MuleDefinitionParser parser)
64 {
65 registerBeanDefinitionParser("connector", parser);
66 return parser;
67 }
68
69 protected MuleDefinitionParserConfiguration registerMuleBeanDefinitionParser(String name, MuleDefinitionParser parser)
70 {
71 registerBeanDefinitionParser(name, parser);
72 return parser;
73 }
74
75 protected MuleDefinitionParserConfiguration registerStandardTransportEndpoints(String protocol, String[] requiredAttributes)
76 {
77 return new RegisteredMdps(protocol, AddressedEndpointDefinitionParser.PROTOCOL, requiredAttributes);
78 }
79
80 protected MuleDefinitionParserConfiguration registerMetaTransportEndpoints(String protocol)
81 {
82 return new RegisteredMdps(protocol, AddressedEndpointDefinitionParser.META, new String[]{});
83 }
84
85 private static class IgnoredDefinitionParser implements BeanDefinitionParser
86 {
87 public IgnoredDefinitionParser()
88 {
89 super();
90 }
91
92 public BeanDefinition parse(Element element, ParserContext parserContext)
93 {
94 return null;
95 }
96 }
97
98 protected Class getInboundEndpointFactoryBeanClass()
99 {
100 return InboundEndpointFactoryBean.class;
101 }
102
103 protected Class getOutboundEndpointFactoryBeanClass()
104 {
105 return OutboundEndpointFactoryBean.class;
106 }
107
108 protected Class getGlobalEndpointBuilderBeanClass()
109 {
110 return EndpointURIEndpointBuilder.class;
111 }
112
113 private class RegisteredMdps implements MuleDefinitionParserConfiguration
114 {
115 private Set bdps = new HashSet();
116
117 public RegisteredMdps(String protocol, boolean isMeta, String[] requiredAttributes)
118 {
119 registerBeanDefinitionParser("endpoint", add(new TransportGlobalEndpointDefinitionParser(protocol, isMeta, AbstractMuleNamespaceHandler.this.getGlobalEndpointBuilderBeanClass(), requiredAttributes, new String[]{})));
120 registerBeanDefinitionParser("inbound-endpoint", add(new TransportEndpointDefinitionParser(protocol, isMeta, AbstractMuleNamespaceHandler.this.getInboundEndpointFactoryBeanClass(), requiredAttributes, new String[]{})));
121 registerBeanDefinitionParser("outbound-endpoint", add(new TransportEndpointDefinitionParser(protocol, isMeta, AbstractMuleNamespaceHandler.this.getOutboundEndpointFactoryBeanClass(), requiredAttributes, new String[]{})));
122 }
123
124 private MuleDefinitionParser add(MuleDefinitionParser bdp)
125 {
126 bdps.add(bdp);
127 return bdp;
128 }
129
130 public MuleDefinitionParserConfiguration registerPreProcessor(PreProcessor preProcessor)
131 {
132 for (Iterator bdp = bdps.iterator(); bdp.hasNext();)
133 {
134 ((MuleDefinitionParserConfiguration) bdp.next()).registerPreProcessor(preProcessor);
135 }
136 return this;
137 }
138
139 public MuleDefinitionParserConfiguration registerPostProcessor(PostProcessor postProcessor)
140 {
141 for (Iterator bdp = bdps.iterator(); bdp.hasNext();)
142 {
143 ((MuleDefinitionParserConfiguration) bdp.next()).registerPostProcessor(postProcessor);
144 }
145 return this;
146 }
147
148 public MuleDefinitionParserConfiguration addReference(String propertyName)
149 {
150 for (Iterator bdp = bdps.iterator(); bdp.hasNext();)
151 {
152 ((MuleDefinitionParserConfiguration) bdp.next()).addReference(propertyName);
153 }
154 return this;
155 }
156
157 public MuleDefinitionParserConfiguration addMapping(String propertyName, Map mappings)
158 {
159 for (Iterator bdp = bdps.iterator(); bdp.hasNext();)
160 {
161 ((MuleDefinitionParserConfiguration) bdp.next()).addMapping(propertyName, mappings);
162 }
163 return this;
164 }
165
166 public MuleDefinitionParserConfiguration addMapping(String propertyName, String mappings)
167 {
168 for (Iterator bdp = bdps.iterator(); bdp.hasNext();)
169 {
170 ((MuleDefinitionParserConfiguration) bdp.next()).addMapping(propertyName, mappings);
171 }
172 return this;
173 }
174
175 public MuleDefinitionParserConfiguration addMapping(String propertyName, ValueMap mappings)
176 {
177 for (Iterator bdp = bdps.iterator(); bdp.hasNext();)
178 {
179 ((MuleDefinitionParserConfiguration) bdp.next()).addMapping(propertyName, mappings);
180 }
181 return this;
182 }
183
184 public MuleDefinitionParserConfiguration addAlias(String alias, String propertyName)
185 {
186 for (Iterator bdp = bdps.iterator(); bdp.hasNext();)
187 {
188 ((MuleDefinitionParserConfiguration) bdp.next()).addAlias(alias, propertyName);
189 }
190 return this;
191 }
192
193 public MuleDefinitionParserConfiguration addCollection(String propertyName)
194 {
195 for (Iterator bdp = bdps.iterator(); bdp.hasNext();)
196 {
197 ((MuleDefinitionParserConfiguration) bdp.next()).addCollection(propertyName);
198 }
199 return this;
200 }
201
202 public MuleDefinitionParserConfiguration addIgnored(String propertyName)
203 {
204 for (Iterator bdp = bdps.iterator(); bdp.hasNext();)
205 {
206 ((MuleDefinitionParserConfiguration) bdp.next()).addIgnored(propertyName);
207 }
208 return this;
209 }
210
211 public MuleDefinitionParserConfiguration removeIgnored(String propertyName)
212 {
213 for (Iterator bdp = bdps.iterator(); bdp.hasNext();)
214 {
215 ((MuleDefinitionParserConfiguration) bdp.next()).removeIgnored(propertyName);
216 }
217 return this;
218 }
219
220 public MuleDefinitionParserConfiguration setIgnoredDefault(boolean ignoreAll)
221 {
222 for (Iterator bdp = bdps.iterator(); bdp.hasNext();)
223 {
224 ((MuleDefinitionParserConfiguration) bdp.next()).setIgnoredDefault(ignoreAll);
225 }
226 return this;
227 }
228
229 public MuleDefinitionParserConfiguration addBeanFlag(String flag)
230 {
231 for (Iterator bdp = bdps.iterator(); bdp.hasNext();)
232 {
233 ((MuleDefinitionParserConfiguration) bdp.next()).addBeanFlag(flag);
234 }
235 return this;
236 }
237 }
238
239
240
241
242
243
244 protected void registerDeprecatedBeanDefinitionParser(String elementName, BeanDefinitionParser parser, String deprecationWarning)
245 {
246 if (parser instanceof MuleDefinitionParserConfiguration)
247 {
248 ((MuleDefinitionParser) parser).setDeprecationWarning(deprecationWarning);
249 }
250 registerBeanDefinitionParser(elementName, parser);
251 }
252
253 }