Package net.java.sip.communicator.plugin.openmeetings

Source Code of net.java.sip.communicator.plugin.openmeetings.OpenmeetingsPluginSoapClient

package net.java.sip.communicator.plugin.openmeetings;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.net.URI;

import javax.swing.JOptionPane;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPConnection;
import javax.xml.soap.SOAPConnectionFactory;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPMessage;
import javax.xml.soap.SOAPPart;
import javax.xml.transform.TransformerException;

import net.java.sip.communicator.util.Logger;

import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class OpenmeetingsPluginSoapClient
{

    String serverUrl;
   
    Logger logger = Logger.getLogger(OpenmeetingsPluginActivator.class);

    private static final String NAMESPACE_PREFIX = "openmeetings";

    public OpenmeetingsPluginSoapClient()
    {
        super();
    }

    public String getSID(String username, String password) throws Exception
    {
        final SOAPMessage soapMessage = getSoapMessage();
        soapMessage.getSOAPBody().addChildElement("getSession", NAMESPACE_PREFIX);
        soapMessage.saveChanges();
       
        final SOAPBody responseBody = getSOAPResponseBody(soapMessage, getUserServiceUrl());

        String sid = null;

        final Node getSessionResponse = responseBody.getFirstChild();
        final Node returnResult = getSessionResponse.getFirstChild();

        final NodeList childNodes = returnResult.getChildNodes();
        sid = childNodes.item(5).getTextContent();

        return sid;
    }

    public void logMessage(SOAPMessage msg)
    {
        try
        {
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            msg.writeTo(out);
            logger.info(new String(out.toByteArray()) + "\n\n");
        }
        catch (Exception e)
        {
            logger.error(e);
        }
    }

    private String login(final String sid, final String username,
        final String password) throws SOAPException, IOException
    {
        final SOAPMessage soapMessage = getSoapMessage();
        final SOAPBody soapBody = soapMessage.getSOAPBody();
        final SOAPElement loginElement =
            soapBody.addChildElement("loginUser", NAMESPACE_PREFIX);

        loginElement.addChildElement("SID", NAMESPACE_PREFIX).addTextNode(sid);
        loginElement.addChildElement("username", NAMESPACE_PREFIX).addTextNode(
            username);
        loginElement.addChildElement("userpass", NAMESPACE_PREFIX).addTextNode(
            password);
        soapMessage.saveChanges();

        final SOAPBody soapResponseBody = getSOAPResponseBody(soapMessage, getUserServiceUrl());
        final String textContent = soapResponseBody.getFirstChild().getTextContent();
        if (!textContent.equals("1"))
            JOptionPane.showMessageDialog(null,
                    OpenmeetingsPluginActivator.resourceService
                    .getI18NString("plugin.openmeetings.ERROR_LOGIN_MSG")
                    + " - Reason: " + this.getErrorCode(sid, textContent));

        return textContent;
    }

    public String getInvitationHash(final String username,
        final String password, final String displayedName, final String RoomID)
            throws Exception
    {
        final SOAPMessage soapMessage = getSoapMessage();
        final SOAPBody soapBody = soapMessage.getSOAPBody();
        final SOAPElement requestElement =
            soapBody.addChildElement("getInvitationHash", NAMESPACE_PREFIX);

        logger.info(username + ":" + displayedName);

        String sid = getSID(username, password);
        String error_id = null;
        try
        {
            error_id = login(sid, username, password);
        }
        catch (Exception e)
        {
            logger.info(e.getMessage());
        }

        if (!error_id.equals("1"))
        {
            logger.info("User cant login!");
            return null;
        }

        String room_id = RoomID;
        if ((room_id == null) || (room_id.trim().isEmpty()))
            room_id = getAvailableRooms(sid);
        if (room_id == null)
        {
            logger.error("No rooms available in openmeetings");
            return null;
        } else
        {
            room_id = room_id.trim();
            logger.info("Found openmeetings conference room ID " + room_id);
        }

        requestElement.addChildElement("SID", NAMESPACE_PREFIX)
            .addTextNode(sid);
        requestElement.addChildElement("username", NAMESPACE_PREFIX)
            .addTextNode(displayedName);
        requestElement.addChildElement("room_id", NAMESPACE_PREFIX)
            .addTextNode(room_id);
        soapMessage.saveChanges();

        final SOAPBody soapResponseBody = getSOAPResponseBody(soapMessage, getJabberServiceUrl());
        final String textContent = soapResponseBody.getFirstChild().getTextContent();
        logger.info("INVITATION RESPONSE =  " + textContent);
        return textContent;
    }

    private String getAvailableRooms(final String sid)
        throws SOAPException,
        IOException,
        TransformerException
    {
        final SOAPMessage soapMessage = getSoapMessage();
        final SOAPBody soapBody = soapMessage.getSOAPBody();
        final SOAPElement elemCodeElement =
            soapBody.addChildElement("getAvailableRooms", NAMESPACE_PREFIX);
        elemCodeElement.addChildElement("SID", "rooms").addTextNode(sid);
        soapMessage.saveChanges();

        final SOAPBody soapResponseBody = getSOAPResponseBody(soapMessage, getJabberServiceUrl());
        final Node getFirstRoomResult = soapResponseBody.getFirstChild().getFirstChild();
        if (getFirstRoomResult == null)
            return null;

        String rooms_id = new String();
        final NodeList childNodes = getFirstRoomResult.getChildNodes();
        int count = childNodes.getLength();
        for (int i = 0; i < count; ++i)
        {
            String nodeName = childNodes.item(i).getNodeName();
            if (nodeName.contains("rooms_id"))
            {
                rooms_id = childNodes.item(i).getTextContent();
            }
        }
        System.out.println("GET_AVAILABLE_ROOMS RESULT =  " + rooms_id);

        return rooms_id;
    }

    private String getErrorCode(final String sid, final String error_id)
        throws SOAPException,
        IOException
    {
        final SOAPMessage soapMessage = getSoapMessage();
        final SOAPBody soapBody = soapMessage.getSOAPBody();
        final SOAPElement errorCodeElement =
            soapBody.addChildElement("getErrorByCode", NAMESPACE_PREFIX);
        errorCodeElement.addChildElement("SID", NAMESPACE_PREFIX).addTextNode(
            sid);
        errorCodeElement.addChildElement("errorid", NAMESPACE_PREFIX)
            .addTextNode(error_id);
        errorCodeElement.addChildElement("language_id", NAMESPACE_PREFIX)
            .addTextNode("0");
        soapMessage.saveChanges();

        final SOAPBody soapResponseBody = getSOAPResponseBody(soapMessage, getUserServiceUrl());
        return soapResponseBody.getFirstChild().getTextContent();
    }
   
    private SOAPBody getSOAPResponseBody(SOAPMessage soapMessage, String url)
        throws SOAPException,
        IOException
    {
        logger.info("\nSOAP request to " + url);
        logMessage(soapMessage);

     
        final SOAPConnection soapConnection = getSoapConnectionInstance();
        final SOAPMessage soapMessageReply =
            soapConnection.call(soapMessage, url);
        logger.info("\nSOAP response");
        logMessage(soapMessageReply);
        soapConnection.close();
       
        return soapMessageReply.getSOAPBody();
    }
   

    private SOAPConnection getSoapConnectionInstance()
        throws UnsupportedOperationException,
        SOAPException
    {

        final SOAPConnectionFactory soapConnectionFactory =
            SOAPConnectionFactory.newInstance();
        final SOAPConnection soapConnection =
            soapConnectionFactory.createConnection();

        return soapConnection;
    }

    private SOAPMessage getSoapMessage() throws SOAPException
    {
        final MessageFactory messageFactory =
            javax.xml.soap.MessageFactory.newInstance();
        final SOAPMessage soapMessage = messageFactory.createMessage();

        // Object for message parts
        final SOAPPart soapPart = soapMessage.getSOAPPart();
        final SOAPEnvelope envelope = soapPart.getEnvelope();

        envelope.addNamespaceDeclaration("xsd",
            "http://www.w3.org/2001/XMLSchema");
        envelope.addNamespaceDeclaration("xsd",
            "http://basic.beans.data.app.openmeetings.org/xsd");
        envelope.addNamespaceDeclaration("xsd",
            "http://basic.beans.persistence.app.openmeetings.org/xsd");
        envelope.addNamespaceDeclaration("xsi",
            "http://www.w3.org/2001/XMLSchema-instance");
        envelope.addNamespaceDeclaration("enc",
            "http://schemas.xmlsoap.org/soap/encoding/");
        envelope.addNamespaceDeclaration("env",
            "http://schemas.xmlsoap.org/soap/envelop/");

        envelope.addNamespaceDeclaration(NAMESPACE_PREFIX,
            "http://services.axis.openmeetings.org");
        envelope.addNamespaceDeclaration("rooms",
            "http://rooms.beans.persistence.app.openmeetings.org/xsd");

        envelope.setEncodingStyle("http://schemas.xmlsoap.org/soap/encoding/");

        return soapMessage;
    }

    public void setServerUrl(String serverUrl)
    {
        this.serverUrl = serverUrl;
    }
   
    public void setProxy(String proxy) throws Exception
    {
        logger.info("SOAP proxy [" + proxy + "]");
        if ((proxy != null) && (proxy.length() > 0))
        {
            URI u = new URI(proxy);
            logger.info("SOAP proxy host " + u.getHost());
            logger.info("SOAP proxy port " + u.getPort());
            System.getProperties().put("http.proxyHost", u.getHost());
            System.getProperties().put("http.proxyPort", Integer.toString(u.getPort()));
        }
    }

    private String getServerUrl()
    {
        return serverUrl;
    }

    private String getUserServiceUrl()
    {
        String url = getServerUrl() + "services/UserService?wsdl";
        System.out.println("URL = " + url);
        return url;
    }

    private String getJabberServiceUrl()
    {
        String url = getServerUrl() + "services/JabberService?wsdl";
        System.out.println("URL = " + url);
        return url;
    }
}
TOP

Related Classes of net.java.sip.communicator.plugin.openmeetings.OpenmeetingsPluginSoapClient

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.