package org.test4j.spec.reader;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ConnectException;
import java.net.URL;
import java.net.URLConnection;
import org.test4j.spec.ISpec;
/**
* 梯田远程数据读取器
*
* @author darui.wudr 2012-5-18 下午2:47:33
*/
public class TitianHttpRequest {
private final String baseURL;
private final String site;
private final String projectID;
public TitianHttpRequest(String baseURL, String site, String projectID) {
this.baseURL = baseURL;
this.site = site;
this.projectID = projectID;
}
/**
* 构造请求连接url
*
* @param java
* @return
*/
public String titianURL(String java) {
StringBuffer url = new StringBuffer(baseURL);
if (baseURL.endsWith("/")) {
url.append("jspec.do?");
} else {
url.append("/jspec.do?");
}
url.append("site=").append(site).append("&projectID=").append(projectID).append("&java=").append(java);
return url.toString();
}
/**
* 采用get方式远程连接梯田系统,获取用例描述信息
*
* @param clazz
* @return
*/
public String sendGetRequest(Class<? extends ISpec> clazz) {
String xml = sendGetRequest(clazz.getName());
return xml;
}
/**
* 采用get方式远程连接梯田系统,获取用例描述信息
*
* @param clazz
* @return
*/
public String sendGetRequest(String clazz) {
String url = this.titianURL(clazz);
BufferedReader reader = null;
try {
reader = createHttpReader(url);
StringBuffer message = new StringBuffer();
String line;
while ((line = reader.readLine()) != null) {
message.append(line).append("\n");
}
return message.toString();
} catch (ConnectException ce) {
throw new RuntimeException("can't connect titian web system, url:" + url);
} catch (Exception e) {
throw new RuntimeException("remote[" + url + "] reader error.", e);
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
}
}
}
}
/**
* 根据远程连接url创建输出流
*
* @param url
* @return
* @throws IOException
*/
private static BufferedReader createHttpReader(String url) throws IOException {
// Send a GET request to the servlet
URL remoteURL = new URL(url);
URLConnection conn = remoteURL.openConnection();
// Get the response
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
return reader;
}
}