1
2
3
4
5
6
7 package org.mule.transport.xmpp.config;
8
9 import org.mule.config.spring.factories.InboundEndpointFactoryBean;
10 import org.mule.config.spring.factories.OutboundEndpointFactoryBean;
11 import org.mule.config.spring.handlers.AbstractMuleNamespaceHandler;
12 import org.mule.config.spring.parsers.specific.MessageProcessorDefinitionParser;
13 import org.mule.config.spring.parsers.specific.endpoint.TransportEndpointDefinitionParser;
14 import org.mule.config.spring.parsers.specific.endpoint.TransportGlobalEndpointDefinitionParser;
15 import org.mule.endpoint.URIBuilder;
16 import org.mule.transport.xmpp.XmppConnector;
17 import org.mule.transport.xmpp.transformers.ObjectToXmppPacket;
18 import org.mule.transport.xmpp.transformers.XmppPacketToObject;
19
20
21
22
23 public class XmppNamespaceHandler extends AbstractMuleNamespaceHandler
24 {
25
26 public static final String RECIPIENT = "recipient";
27 public static final String[] REQUIRED_ADDRESS_ATTRIBUTES =
28 new String[]{RECIPIENT, URIBuilder.USER, URIBuilder.HOST};
29
30
31 private static final String[][] REQUIRED_OUTBOUND_ATTRIBUTE_GROUPS = new String[][] {
32 new String[] { XmppConnector.XMPP_TYPE, XmppConnector.XMPP_RECIPIENT }
33 };
34
35
36 private static final String[][] REQUIRED_INBOUND_ATTRIBUTE_GROUPS = new String[][] {
37 new String[] { XmppConnector.XMPP_TYPE, XmppConnector.XMPP_FROM }
38 };
39
40
41 private static final String[][] REQUIRED_ALL_ATTRIBUTE_GROUPS = new String[][] {
42 new String[] { XmppConnector.XMPP_TYPE, XmppConnector.XMPP_FROM },
43 new String[] { XmppConnector.XMPP_TYPE, XmppConnector.XMPP_RECIPIENT }
44 };
45
46 private static final String[][] REQUIRED_MESSAGE_PROPERTY_GROUPS = new String[][] {
47 new String[] { }
48 };
49
50 public void init()
51 {
52 registerGlobalEndpointParser();
53 registerInboundEndpointParser();
54 registerOutboundEndpintParser();
55
56 registerConnectorDefinitionParser(XmppConnector.class);
57 registerBeanDefinitionParser("xmpp-to-object-transformer", new MessageProcessorDefinitionParser(XmppPacketToObject.class));
58 registerBeanDefinitionParser("object-to-xmpp-transformer", new MessageProcessorDefinitionParser(ObjectToXmppPacket.class));
59 }
60
61 private void registerGlobalEndpointParser()
62 {
63 TransportGlobalEndpointDefinitionParser endpointDefinitionParser =
64 new TransportGlobalEndpointDefinitionParser(XmppConnector.XMPP,
65 TransportGlobalEndpointDefinitionParser.PROTOCOL,
66 TransportGlobalEndpointDefinitionParser.RESTRICTED_ENDPOINT_ATTRIBUTES,
67 REQUIRED_ALL_ATTRIBUTE_GROUPS, REQUIRED_MESSAGE_PROPERTY_GROUPS);
68 endpointDefinitionParser.addAlias(XmppConnector.XMPP_TYPE, URIBuilder.HOST);
69 endpointDefinitionParser.addAlias(XmppConnector.XMPP_RECIPIENT, URIBuilder.PATH);
70 endpointDefinitionParser.addAlias(XmppConnector.XMPP_FROM, URIBuilder.PATH);
71 registerBeanDefinitionParser("endpoint", endpointDefinitionParser);
72 }
73
74 private void registerInboundEndpointParser()
75 {
76 TransportEndpointDefinitionParser endpointDefinitionParser =
77 new TransportEndpointDefinitionParser(XmppConnector.XMPP,
78 TransportEndpointDefinitionParser.PROTOCOL, InboundEndpointFactoryBean.class,
79 TransportEndpointDefinitionParser.RESTRICTED_ENDPOINT_ATTRIBUTES,
80 REQUIRED_INBOUND_ATTRIBUTE_GROUPS, REQUIRED_MESSAGE_PROPERTY_GROUPS);
81 endpointDefinitionParser.addAlias(XmppConnector.XMPP_TYPE, URIBuilder.HOST);
82 endpointDefinitionParser.addAlias(XmppConnector.XMPP_FROM, URIBuilder.PATH);
83 registerBeanDefinitionParser("inbound-endpoint", endpointDefinitionParser);
84 }
85
86 private void registerOutboundEndpintParser()
87 {
88 TransportEndpointDefinitionParser endpointDefinitionParser =
89 new TransportEndpointDefinitionParser(XmppConnector.XMPP,
90 TransportEndpointDefinitionParser.PROTOCOL, OutboundEndpointFactoryBean.class,
91 TransportEndpointDefinitionParser.RESTRICTED_ENDPOINT_ATTRIBUTES,
92 REQUIRED_OUTBOUND_ATTRIBUTE_GROUPS, REQUIRED_MESSAGE_PROPERTY_GROUPS);
93 endpointDefinitionParser.addAlias(XmppConnector.XMPP_TYPE, URIBuilder.HOST);
94 endpointDefinitionParser.addAlias(XmppConnector.XMPP_RECIPIENT, URIBuilder.PATH);
95 registerBeanDefinitionParser("outbound-endpoint", endpointDefinitionParser);
96 }
97 }