package com.lesgens.blindr.network;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.ConnectException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.conn.HttpHostConnectException;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
public class HTTPRequest {
public enum RequestType {
POST, GET
};
public enum StatusCode {
FOUND(200), NOT_FOUND(404), INTERNAL_ERROR(500), REQUEST_NOT_SENT(-1);
public int value;
private StatusCode(int value) {
this.value = value;
}
private static final Map lookup = new HashMap();
public int getStatusCodeValue() {
return value;
}
static {
for (StatusCode sc : StatusCode.values()) {
lookup.put(sc.getStatusCodeValue(), sc);
}
}
public static StatusCode get(int value) { // reverse lookup
return (StatusCode) lookup.get(value);
}
};
private String output;
private StatusCode statusCode = StatusCode.REQUEST_NOT_SENT;
public HTTPRequest(String URL, RequestType requestType) {
this(URL, requestType, null);
}
public HTTPRequest(String URL, RequestType requestType, List<NameValuePair> data) {
this(URL, requestType, data, null);
}
public HTTPRequest(String URL, RequestType requestType, List<NameValuePair> data, List<NameValuePair> headers) {
performRequest(URL, requestType, data, headers);
}
private void performRequest(String URL, RequestType requestType, List<NameValuePair> data, List<NameValuePair> headers) {
statusCode = StatusCode.FOUND;
HttpClient httpClient = new DefaultHttpClient();
HttpRequestBase httpRequest;
HttpResponse httpResponse;
HttpEntity httpEntity;
InputStream is = null;
int statusCode = -1;
try {
if (requestType == RequestType.GET) {
if(data != null) {
URL += "?"+URLEncodedUtils.format(data, "utf-8");
}
HttpGet httpGet = new HttpGet(URL);
httpRequest = httpGet;
} else { // assume POST
HttpPost httpPost = new HttpPost(URL);
httpPost.setEntity(new UrlEncodedFormEntity(data));
httpRequest = httpPost;
}
if(headers != null){
for(NameValuePair pair:headers){
httpRequest.addHeader(pair.getName(), pair.getValue());
}
}
httpResponse = httpClient.execute(httpRequest);
httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
statusCode = httpResponse.getStatusLine().getStatusCode();
this.statusCode = StatusCode.get(statusCode);
} catch (HttpHostConnectException e) {
e.printStackTrace();
} catch (ConnectException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} // assume server went on with request, analyse it
// if it's 404, don't bother reading
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
output = sb.toString();
} catch (Exception e) {
e.printStackTrace();
}
}
public String getOutput() {
return output;
}
public StatusCode getStatusCode() {
return statusCode;
}
}