Package org.exist.xquery.modules.xmpp

Source Code of org.exist.xquery.modules.xmpp.XMPPConnectionFunction

/*
*  This program is free software; you can redistribute it and/or
*  modify it under the terms of the GNU Lesser General Public License
*  as published by the Free Software Foundation; either version 2
*  of the License, or (at your option) any later version.
*
*  This program is distributed in the hope that it will be useful,
*  but WITHOUT ANY WARRANTY; without even the implied warranty of
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*  GNU Lesser General Public License for more details.
*
*  You should have received a copy of the GNU Lesser General Public License
*  along with this program; if not, write to the Free Software Foundation
*  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/

package org.exist.xquery.modules.xmpp;


import java.util.Properties;

import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.proxy.ProxyInfo;
import org.jivesoftware.smack.proxy.ProxyInfo.ProxyType;
import org.jivesoftware.smack.ConnectionConfiguration;

import org.apache.log4j.Logger;
import org.exist.dom.QName;
import org.exist.xquery.BasicFunction;
import org.exist.xquery.Cardinality;
import org.exist.xquery.FunctionSignature;
import org.exist.xquery.XPathException;
import org.exist.xquery.XQueryContext;
import org.exist.xquery.modules.ModuleUtils;
import org.exist.xquery.value.FunctionParameterSequenceType;
import org.exist.xquery.value.FunctionReturnSequenceType;
import org.exist.xquery.value.IntegerValue;
import org.exist.xquery.value.NodeValue;
import org.exist.xquery.value.Sequence;
import org.exist.xquery.value.SequenceType;
import org.exist.xquery.value.Type;

public class XMPPConnectionFunction extends BasicFunction
{
  protected static final Logger logger = Logger.getLogger(XMPPConnectionFunction.class);

  public final static FunctionSignature signatures[] = {
    new FunctionSignature(
      new QName( "get-xmpp-connection", XMPPModule.NAMESPACE_URI, XMPPModule.PREFIX ),
      "Create a XMPP connection.",
      new SequenceType[]
      {
        new FunctionParameterSequenceType( "properties", Type.ELEMENT, Cardinality.EXACTLY_ONE,
            "An optional connection properties in the form <properties><property name=\"\" value=\"\"/></properties>.")
      },
      new FunctionReturnSequenceType( Type.LONG, Cardinality.EXACTLY_ONE, "an xs:long representing the connection handle." )
      )
    };

  public XMPPConnectionFunction( XQueryContext context, FunctionSignature signature )
  {
    super( context, signature );
    }

  public Sequence eval( Sequence[] args, Sequence contextSequence ) throws XPathException
  {
    Properties props = ModuleUtils.parseProperties( ((NodeValue) args[0].itemAt(0)).getNode() );
   
    ProxyInfo proxy;
    ConnectionConfiguration config;
   
    if (props.containsKey("proxy.type")){
      ProxyType type   = ProxyType.valueOf(props.getProperty("proxy.type"));
      String    host   = props.getProperty("proxy.host");
      int       port   = new Integer(props.getProperty("proxy.port")).intValue();
      String    user   = props.getProperty("proxy.user");
      String    passwd = props.getProperty("proxy.password");
      proxy  =  new ProxyInfo(type, host, port, user, passwd);
    } else proxy = null;
   
    String service  = props.getProperty("xmpp.service");
    String host     = props.getProperty("xmpp.host");
    String tmp     = props.getProperty("xmpp.port");
    int    port    = tmp == null ? 5222 : new Integer(tmp).intValue();  
   
    if (proxy == null){
      if (host == null)
         config = new ConnectionConfiguration(service);
      else if (service == null)
         config = new ConnectionConfiguration(host, port);
      else config = new ConnectionConfiguration(host, port, service);
    } else {
      if (host == null)
         config = new ConnectionConfiguration(service, proxy);
      else if (service == null)
         config = new ConnectionConfiguration(host, port, proxy);
      else config = new ConnectionConfiguration(host, port, service, proxy);
    }
   
    XMPPConnection connection = new XMPPConnection(config);
   
    // store the connection and return the handle of the connection
     
    IntegerValue integerValue = new IntegerValue( XMPPModule.storeConnection( connection ) );
    return integerValue;
  }
}
TOP

Related Classes of org.exist.xquery.modules.xmpp.XMPPConnectionFunction

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.