View Javadoc

1   /*
2    * $Id: XmppNamespaceHandler.java 19191 2010-08-25 21:05:23Z tcarlson $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
5    *
6    * The software in this package is published under the terms of the CPAL v1.0
7    * license, a copy of which has been included with this distribution in the
8    * LICENSE.txt file.
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   * Registers a Bean Definition Parser for handling <code><xmpp:connector></code> elements.
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      // required attributes for outbound endpoints
35      private static final String[][] REQUIRED_OUTBOUND_ATTRIBUTE_GROUPS = new String[][] {
36          new String[] { XmppConnector.XMPP_TYPE, XmppConnector.XMPP_RECIPIENT }
37      };
38  
39      // required attributes for inbound endpoints
40      private static final String[][] REQUIRED_INBOUND_ATTRIBUTE_GROUPS = new String[][] {
41          new String[] { XmppConnector.XMPP_TYPE, XmppConnector.XMPP_FROM }
42      };
43  
44      // required attributes for global endpoints
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 }