org.apache.oodt.cas.wmservices.client.WmServicesClient.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.oodt.cas.wmservices.client.WmServicesClient.java

Source

/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You 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 org.apache.oodt.cas.wmservices.client;

import java.io.DataOutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;

import org.apache.commons.io.IOUtils;
import org.apache.oodt.cas.wmservices.repository.PackagedWorkflowManager;
import org.apache.oodt.cas.workflow.structs.Workflow;
import org.apache.oodt.cas.workflow.structs.exceptions.RepositoryException;

/**
 * Client class to connect to cas-wm-services
 * 
 * @author vratnakar
 */
public class WmServicesClient {
    String serverurl;
    String service = "/service/";

    /**
     * Constructor
     * 
     * @param workflowDir
     *          the directory where workflow files exist
     */
    public WmServicesClient(String serverurl) {
        this.serverurl = serverurl;
    }

    /**
     * Add a Packaged workflow
     * 
     * @param workflowId
     *          id of the workflow
     * @param workflow
     *          the workflow to be added
     * @return true if operation successful
     * @throws RepositoryException
     */
    public boolean addPackagedWorkflow(String workflowId, Workflow workflow) throws RepositoryException {

        try {
            PackagedWorkflowManager editor = new PackagedWorkflowManager();
            String xml = editor.serializeWorkflow(workflow);

            // Now Make a POST call to the servlet with this xml
            String result = this.query("POST", "addPackagedRepositoryWorkflow", "workflowID", workflowId,
                    "workflowXML", xml);
            return Boolean.parseBoolean(result);
        } catch (Exception e) {
            throw new RepositoryException("Could not add packaged workflow: " + e.getMessage());
        }
    }

    /**
     * Delete a Packaged workflow
     * 
     * @param workflowId
     *          id of the workflow to be deleted
     * @return true if operation successful
     * @throws RepositoryException
     */
    public boolean deletePackagedWorkflow(String workflowId) throws RepositoryException {
        try {
            // Now Make a POST call to the servlet with this xml
            String result = this.query("POST", "deletePackagedRepositoryWorkflow", "workflowID", workflowId);
            return Boolean.parseBoolean(result);
        } catch (Exception e) {
            throw new RepositoryException("Could not delete packaged workflow: " + e.getMessage());
        }
    }

    // Private functions

    private String query(String method, String op, Object... args) {
        String url = this.serverurl + this.service + op;
        try {
            String params = "";
            for (int i = 0; i < args.length; i += 2) {
                if (i > 0)
                    params += "&";
                params += args[i] + "=" + URLEncoder.encode(args[i + 1].toString(), "UTF-8");
            }
            if ("GET".equals(method)) {
                URL urlobj = new URL(url + "?" + params);
                return IOUtils.toString(urlobj.openStream());
            } else {
                URL urlobj = new URL(url);
                HttpURLConnection con = (HttpURLConnection) urlobj.openConnection();
                con.setRequestMethod(method);
                con.setDoOutput(true);
                DataOutputStream out = new DataOutputStream(con.getOutputStream());
                out.writeBytes(params);
                out.flush();
                out.close();

                String result = IOUtils.toString(con.getInputStream());
                con.disconnect();
                return result;
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}