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