View Javadoc
1   /*
2    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
3    * The software in this package is published under the terms of the CPAL v1.0
4    * license, a copy of which has been included with this distribution in the
5    * LICENSE.txt file.
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   * Registers a Bean Definition Parser for handling <code><xmpp:connector></code> elements.
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      // required attributes for outbound endpoints
31      private static final String[][] REQUIRED_OUTBOUND_ATTRIBUTE_GROUPS = new String[][] {
32          new String[] { XmppConnector.XMPP_TYPE, XmppConnector.XMPP_RECIPIENT }
33      };
34  
35      // required attributes for inbound endpoints
36      private static final String[][] REQUIRED_INBOUND_ATTRIBUTE_GROUPS = new String[][] {
37          new String[] { XmppConnector.XMPP_TYPE, XmppConnector.XMPP_FROM }
38      };
39  
40      // required attributes for global endpoints
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  }