info.jtrac.mylyn.JtracClient.java Source code

Java tutorial

Introduction

Here is the source code for info.jtrac.mylyn.JtracClient.java

Source

/*
 * Copyright 2002-2005 the original author or authors.
 * 
 * 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 info.jtrac.mylyn;

import info.jtrac.mylyn.domain.Item;
import info.jtrac.mylyn.domain.JtracVersion;
import info.jtrac.mylyn.domain.Success;
import info.jtrac.mylyn.exception.HttpException;
import info.jtrac.mylyn.util.XmlUtils;

import java.net.HttpURLConnection;
import java.net.Proxy;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpMethod;
import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.StringRequestEntity;

/**
 * this class has the responsibility of communicating with a JTrac
 * server / repository over HTTP(S).  Messages are Plain Old XML (POX), 
 * and requests are made REST style as HTTP GET / POST depending on the
 * complexity of input parameters
 */
public class JtracClient {

    private HttpClient httpClient = new HttpClient(new MultiThreadedHttpConnectionManager());

    private String repoUrl;
    private String username;
    private String password;
    private Proxy proxy;

    public JtracClient(String repoUrl, String username, String password, Proxy proxy) {
        this.repoUrl = repoUrl;
        this.username = username;
        this.password = password;
        this.proxy = proxy;
    }

    private String doGet(String url) throws Exception {
        HttpMethod get = new GetMethod(url);
        String response = null;
        int code;
        try {
            code = httpClient.executeMethod(get);
            if (code != HttpURLConnection.HTTP_OK) {
                throw new HttpException("HTTP Response Code: " + code);
            }
            response = get.getResponseBodyAsString();
        } finally {
            get.releaseConnection();
        }
        return response;
    }

    private String doPost(String url, String message) throws Exception {
        PostMethod post = new PostMethod(url);
        post.setRequestEntity(new StringRequestEntity(message, "text/xml", "UTF-8"));
        String response = null;
        int code;
        try {
            code = httpClient.executeMethod(post);
            if (code != HttpURLConnection.HTTP_OK) {
                throw new HttpException("HTTP Response Code: " + code);
            }
            response = post.getResponseBodyAsString();
        } finally {
            post.releaseConnection();
        }
        return response;
    }

    public JtracVersion getJtracVersion() throws Exception {
        RequestUri uri = new RequestUri("version.get");
        String xml = doGet(repoUrl + uri);
        return new JtracVersion(XmlUtils.parseJtrac(xml));
    }

    public String putItem(Item item) throws Exception {
        RequestUri uri = new RequestUri("item.put");
        String xml = doPost(repoUrl + uri, item.getAsXml());
        Success success = new Success(XmlUtils.parse(xml));
        return success.getValue("refId");
    }

}