package com.droidworks.http;
import java.io.IOException;
import java.util.Set;
import java.util.concurrent.Callable;
import org.apache.http.HttpException;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
/**
* @author Jason Hudgins <jasonleehudgins@gmail.com>
*/
public class HttpGetWorker implements Callable<HttpResponse> {
private final HttpGet mMethod;
private final Set<Integer> mAccecptedHttpStatusCodes;
private final HttpClient mClient;
public HttpGetWorker(HttpGet method, Set<Integer> codes) {
mMethod = method;
mAccecptedHttpStatusCodes = codes;
mClient = new DefaultHttpClient();
}
public HttpGetWorker(HttpGet method, Set<Integer> codes,
HttpClient client) {
mMethod = method;
mAccecptedHttpStatusCodes = codes;
mClient = client;
}
public HttpGetWorker(HttpGet method, Set<Integer> codes,
int seconds) {
mMethod = method;
mAccecptedHttpStatusCodes = codes;
mClient = new DefaultHttpClient();
HttpUtils.setConnectionTimeout(mClient, seconds);
}
public HttpResponse call() throws HttpException, ClientProtocolException,
IOException {
HttpResponse response = mClient.execute(mMethod);
int code = response.getStatusLine().getStatusCode();
if (mAccecptedHttpStatusCodes == null) {
if (code != HttpStatus.SC_OK) {
throw new HttpException(Integer.toString(code));
}
} else {
if (!mAccecptedHttpStatusCodes.contains(code)) {
throw new HttpException(Integer.toString(code));
}
}
return response;
}
public void cancel() {
mMethod.abort();
}
}