com.google.appsforyourdomain.provisioning.AppsUtil.java Source code

Java tutorial

Introduction

Here is the source code for com.google.appsforyourdomain.provisioning.AppsUtil.java

Source

/**
 * Copyright 2006 Google Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy
 * of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations
 * under the License.
 */

package com.google.appsforyourdomain.provisioning;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.StringRequestEntity;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.xpath.XPath;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

/**
 * This is a Util class with methods to post HTTP request
 * and parse XML.
 *
 */
public class AppsUtil {

    /**
     * Posts the specified postContent to the urlString and
     * returns a JDOM Document object containing the XML response.
     * 
     * @param urlString URL destination
     * @param postContent XML request
     * @return a JDOM Document object containing the XML response
     */
    public static Document postHttpRequest(String urlString, String postContent) throws AppsForYourDomainException {
        try {

            // Send content
            final HttpClient client = new HttpClient();
            PostMethod method = new PostMethod(urlString);
            StringRequestEntity sre = new StringRequestEntity(postContent, "text/xml", "UTF-8");
            method.setRequestEntity(sre);
            client.executeMethod(method);

            // Get response
            final SAXBuilder builder = new SAXBuilder();
            BufferedReader rd = new BufferedReader(new InputStreamReader(method.getResponseBodyAsStream()));
            final Document doc = builder.build(rd);
            return doc;
        } catch (IOException e) {

            // error in URL Connection or reading response
            throw new ConnectionException(e.getMessage());
        } catch (JDOMException e) {

            // error in converting to JDOM Document
            throw new ParseException(e.getMessage());
        }
    }

    /**
     * Parses a JDOM Document and returns the first element that matches the
     * specified path.
     * 
     * @param doc JDOM document
     * @param path XPATH to the element
     * @return the value of the element
     */
    public static String parseXml(Document doc, String path) throws AppsForYourDomainException {
        try {
            XPath statusXPath = XPath.newInstance(path);
            Object node = statusXPath.selectSingleNode(doc);
            if (node == null) {
                return ""; // Did not find any nodes matching in doc
            }
            Element element;
            if (node instanceof Element) {
                element = (Element) node;
                return element.getText();
            } else {
                return ""; // Returned node has unexpected type
            }
        } catch (JDOMException e) {
            throw new ParseException(e.getMessage());
        }
    }

    /**
     * Parses a JDOM Document and returns a list of all matching elements that
     * match the specified path.
     * 
     * @param doc JDOM document
     * @param path XPATH to the element
     * @return a list of all matching element values
     */
    public static List<String> parseXmlMultipleNodes(Document doc, String path) throws AppsForYourDomainException {
        try {
            List nodes = XPath.selectNodes(doc, path);
            List<String> infoList = new ArrayList<String>();
            for (Object node : nodes) {
                if (node instanceof Element) {
                    Element element = (Element) node;
                    infoList.add(element.getText());
                }
            }
            return infoList;
        } catch (JDOMException e) {
            throw new ParseException(e.getMessage());
        }
    }
}