org.helio.taverna.helio_taverna_suite.common.UWSCaller.java Source code

Java tutorial

Introduction

Here is the source code for org.helio.taverna.helio_taverna_suite.common.UWSCaller.java

Source

package org.helio.taverna.helio_taverna_suite.common;

/*
 * $Header: 
 * $Revision$
 * $Date$
 * ====================================================================
 *
 *  Copyright 2002-2004 The Apache Software Foundation
 *
 *  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.
 * ====================================================================
 *
 * This software consists of voluntary contributions made by many
 * individuals on behalf of the Apache Software Foundation.  For more
 * information on the Apache Software Foundation, please see
 * <http://www.apache.org/>.
 *
 * [Additional notices, if required by prior licensing conditions]
 *
 */

import java.io.File;
import java.io.FileInputStream;
import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.InputStreamRequestEntity;
import org.apache.commons.httpclient.methods.PostMethod;
import java.util.ArrayList;
import java.util.Hashtable;

public class UWSCaller {

    /**
     *    Usage:
     *       java PostXML http://mywebserver:80/ c:\foo.xml
     *
     *    @param args command line arguments
     *         Argument 0 is a URL to a web server
     *         Argument 1 is a local filename
    **/
    public static String uwsCaller(String uwsURL, File fileName) throws Exception {
        System.out.println(" : URL : " + uwsURL + " : File Name : " + fileName.toString());
        System.out.println("-------> getting location ------->");
        String location = getDetails(fileName, uwsURL, "");
        System.out.println("------->Location ------->" + location);
        System.out.println("-------> Executing the job ------->");
        executeJob(location, "phase");
        return location;
    }

    /**
     *    Usage:
     *       java PostXML http://mywebserver:80/ c:\foo.xml
     *
     *    @param args command line arguments
     *         Argument 0 is a URL to a web server
     *         Argument 1 is a local filename
    **/
    //public static Hashtable<String,String> uwsCaller(String uwsURL, File fileName) throws Exception {
    public static Hashtable<String, String> uwsCaller(String location) throws Exception {

        // Get target URL
        long start = System.currentTimeMillis();
        //String strURL = uwsURL;

        System.out.println("-------> Getting phase ------->");
        String sPhase = null;
        int count = 0;
        do {
            //getting phase
            System.out.println(" Checking if completed ");
            sPhase = getPhase(location, "phase");
            count++;
            if (count == 40) {
                System.out.println("-------> Aborting the job, Exection occurred ------->");
                abortJob(location, "phase");
            }
            Thread.sleep(10000);
        } while (!sPhase.contains("COMPLETED") && !sPhase.contains("ERROR"));
        //System.out.println("");
        //System.out.println("");
        //System.out.println("");
        //System.out.println("");
        System.out.println("-------> Phase of executing ------->" + sPhase);
        //System.out.println("");
        //System.out.println("");
        String[] sResult = null;
        //getting result
        if (sPhase.contains("COMPLETED")) {
            return getResults(location, "results");
        }
        /*
        System.out.println("-------> Result of the executing ------->");
        for(int k=0;k < sResult.length;k++) {
           System.out.println("Resulting URL "+ domain + sResult[k]);
        }
            
        System.out.println("Time taken for Java app: " + (System.currentTimeMillis() - start));
        */
        return null;

    }

    /**
     * 
     * @param strURL
     * @param append
     * @return
     * @throws Exception
    */
    private static Hashtable<String, String> getResults(String strURL, String append) throws Exception {
        if (append != null && !append.trim().equals("")) {
            strURL = strURL + "/" + append;
        }
        System.out.print(" --------> Location --------> " + strURL);
        //PostMethod post = new PostMethod(strURL);
        GetMethod get = new GetMethod(strURL);
        get.setFollowRedirects(false);
        //post.setParameter("phase", "RUN");
        //NameValuePair action   = new NameValuePair("PHASE", "RUN");
        //post.setRequestBody( new NameValuePair[] {action});
        // Get HTTP client
        HttpClient httpclient = new HttpClient();
        int result = httpclient.executeMethod(get);
        int statuscode = get.getStatusCode();
        String results = get.getResponseBodyAsString();
        //System.out.println(results);
        ArrayList<String> resArr = new ArrayList<String>();
        Hashtable<String, String> ht = new Hashtable();
        if (results != null && !results.equals("")) {
            while (results.indexOf("xlink:href") >= 0) {
                ht.put(results.substring(results.indexOf("id=\"") + 4,
                        results.indexOf("\"", results.indexOf("id=\"") + 4)),
                        strURL.substring(0, strURL.indexOf("/", 7))
                                + results.substring(results.indexOf("xlink:href") + 12,
                                        results.indexOf("\"", results.indexOf("xlink:href") + 12)));
                //resArr.add(results.substring(results.indexOf("xlink:href")+12,results.indexOf("\"",results.indexOf("xlink:href")+12)));
                //System.out.println("Placed in arr = " + strURL.substring(0,strURL.indexOf("/",7)) + (results.substring(results.indexOf("xlink:href")+12,results.indexOf("\"",results.indexOf("xlink:href")+12)))   );
                results = results.substring(results.indexOf("xlink:href") + 12);
                //System.out.println("new results = " + results);

            }

        }
        return ht;//resArr.toArray(new String[0]);
    }

    /**
     * 
     * @param strURL
     * @param append
     * @return
     * @throws Exception
    */
    private static String getPhase(String strURL, String append) throws Exception {
        if (append != null && !append.trim().equals("")) {
            strURL = strURL + "/" + append;
        }
        System.out.print(" ----------> Location ----------> " + strURL);
        //PostMethod post = new PostMethod(strURL);
        GetMethod get = new GetMethod(strURL);
        get.setFollowRedirects(false);
        //post.setParameter("phase", "RUN");
        // Get HTTP client
        HttpClient httpclient = new HttpClient();
        int result = httpclient.executeMethod(get);
        return get.getResponseBodyAsString();
    }

    /**
     * @param strURL
     * @param append
     * @throws Exception
    */
    private static void abortJob(String strURL, String append) throws Exception {
        if (append != null && !append.trim().equals("")) {
            strURL = strURL + "/" + append;
        }
        //Post 
        PostMethod post = new PostMethod(strURL);
        post.setFollowRedirects(false);
        post.setParameter("phase", "ABORT");
        // Get HTTP client
        HttpClient httpclient = new HttpClient();
        int result = httpclient.executeMethod(post);
        int statuscode = post.getStatusCode();
        //System.out.println(post.getResponseBodyAsString());
    }

    /**
     * 
     * @param strURL
     * @param append
     * @throws Exception
    */
    private static void executeJob(String strURL, String append) throws Exception {
        if (append != null && !append.trim().equals("")) {
            strURL = strURL + "/" + append;
        }
        PostMethod post = new PostMethod(strURL);
        post.setFollowRedirects(false);
        post.setParameter("phase", "RUN");
        //
        HttpClient httpclient = new HttpClient();
        int result = httpclient.executeMethod(post);
        int statuscode = post.getStatusCode();
        //System.out.println(post.getResponseBodyAsString());
    }

    /**
     * @param filename
     * @param strURL
     * @param append
     * @return
     * @throws Exception
     */
    private static String getDetails(File input, String strURL, String append) throws Exception {
        // Prepare HTTP post
        PostMethod post = new PostMethod(strURL);
        // Request content will be retrieved directly
        // from the input stream
        // Per default, the request content needs to be buffered
        // in order to determine its length.
        // Request body buffering can be avoided when
        // content length is explicitly specified

        post.setRequestEntity(new InputStreamRequestEntity(new FileInputStream(input), input.length()));
        post.setRequestHeader("Content-type", "text/xml; charset=ISO-8859-1");

        post.setFollowRedirects(false);
        // Get HTTP client
        HttpClient httpclient = new HttpClient();

        try {
            //httpclient.
            int result = httpclient.executeMethod(post);
            int statuscode = post.getStatusCode();

            if ((statuscode == HttpStatus.SC_MOVED_TEMPORARILY) || (statuscode == HttpStatus.SC_MOVED_PERMANENTLY)
                    || (statuscode == HttpStatus.SC_SEE_OTHER)
                    || (statuscode == HttpStatus.SC_TEMPORARY_REDIRECT)) {

                Header header = post.getResponseHeader("location");
                //System.out.println("   :  Header  :  "+header);
                if (header != null) {
                    String newuri = header.getValue();
                    if ((newuri == null) || (newuri.equals("")))
                        newuri = "/";
                    return newuri;
                } else {
                    return null;
                }
            } else {
                //System.out.println(post.getResponseBodyAsString());
            }
        } finally {
            // Release current connection to the connection pool 
            // once you are done
            post.releaseConnection();
        }
        return null;
    }
}