package com.googlecode.mycontainer.commons.httpclient;
import java.io.Closeable;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.Future;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.message.BasicNameValuePair;
public abstract class WebRequest implements Closeable {
protected final WebClient client;
private RequestMethod method = RequestMethod.GET;
private HttpRequestBase request;
private final List<NameValuePair> parameters = new ArrayList<NameValuePair>();
public WebRequest(WebClient client) {
this.client = client;
}
public WebClient getClient() {
return client;
}
public List<NameValuePair> getParameters() {
return parameters;
}
public HttpRequestBase getRequest() {
return request;
}
protected abstract HttpRequestBase createRequest(String url);
public RequestMethod getMethod() {
return method;
}
public void setMethod(RequestMethod method) {
this.method = method;
}
public void setUrl(String url) {
request = createRequest(url);
Map<String, List<String>> headers = getClient().getHeaders();
for (Map.Entry<String, List<String>> entry : headers.entrySet()) {
for (String value : entry.getValue()) {
request.addHeader(entry.getKey(), value);
}
}
}
public WebResponse invoke() {
try {
HttpResponse response = client.getClient().execute(request);
WebResponse ret = new WebResponse(this, response);
return ret;
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public void setUri(String uri) {
setUrl(client.getUrl() + uri);
}
public void close() throws IOException {
request.abort();
}
public void addParameter(String name, String value) {
parameters.add(new BasicNameValuePair(name, value));
}
public Future<WebResponse> invokeAsync() {
throw new RuntimeException("not implemented yet");
}
}