/* * 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"); } }