package com.geoloqi.rpc; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import org.apache.http.Header; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpEntityEnclosingRequestBase; 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.entity.AbstractHttpEntity; import org.apache.http.message.BasicHeader; import org.apache.http.message.BasicNameValuePair; import org.apache.http.params.BasicHttpParams; import com.geoloqi.ADB; class MyRequest { static final int GET = 0; static final int POST = 1; private ArrayList<Header> headers = new ArrayList<Header>(); private BasicHttpParams params = new BasicHttpParams(); private ArrayList<BasicNameValuePair> entityParams = new ArrayList<BasicNameValuePair>(); private AbstractHttpEntity entity = null; private final HttpRequestBase request; MyRequest(int requestType, String url) { switch (requestType) { case GET: request = new HttpGet(url); break; case POST: request = new HttpPost(url); break; default: throw new IllegalArgumentException("Request type must be one of the static types."); } } synchronized void authorize(OAuthToken token) { ADB.log("In authorize"); // Remove the old authorization header. for (Header header : headers) { if (header.getName().equals("Authorization")) { headers.remove(header); } } // Insert the new authorization header. headers.add(new BasicHeader("Authorization", "OAuth " + token.accessToken)); } synchronized void addHeaders(Header... headers) { ADB.log("In addHeaders"); for (int i = 0; i < headers.length; i++) { this.headers.add(headers[i]); } } synchronized void addParams(BasicNameValuePair... pairs) { ADB.log("In addParams"); for (int i = 0; i < pairs.length; i++) { params.setParameter(pairs[i].getName(), pairs[i].getValue()); } } synchronized void addEntityParams(BasicNameValuePair... pairs) { ADB.log("In addEntityParams"); if (request instanceof HttpEntityEnclosingRequestBase) { for (int i = 0; i < pairs.length; i++) { entityParams.add(pairs[i]); } } else { throw new RuntimeException("Request must be PUT or POST to enclose an entity."); } } synchronized void setEntity(AbstractHttpEntity entity) { ADB.log("In setEntity"); if (request instanceof HttpEntityEnclosingRequestBase) { this.entity = entity; } else { throw new RuntimeException("Request must be PUT or POST to enclose an entity."); } } synchronized public HttpRequestBase getRequest() { ADB.log("------------------------------------------"); ADB.log("URI: " + request.getURI()); for (Header header : headers) { ADB.log("Header: " + header.getName() + "=" + header.getValue()); } ADB.log("Parameters: " + params.toString()); for (BasicNameValuePair param : entityParams) { ADB.log("Entity Parameter: " + param.getName() + "=" + param.getValue()); } //Set headers if (headers.size() > 0) { request.setHeaders(headers.toArray(new Header[headers.size()])); } //Set params request.setParams(params); //Set entity if (request instanceof HttpEntityEnclosingRequestBase) { if (entityParams.size() > 0) { if (entity != null) { throw new RuntimeException("Entity conflict"); } else { try { ((HttpEntityEnclosingRequestBase) request).setEntity(new UrlEncodedFormEntity(entityParams)); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e.getMessage()); } } } else if (entity != null) { ((HttpEntityEnclosingRequestBase) request).setEntity(entity); } } return request; } }