package in.srain.cube.request.sender; import in.srain.cube.request.IRequest; import in.srain.cube.request.RequestData; import java.io.*; import java.net.HttpURLConnection; import java.util.HashMap; import java.util.Iterator; import java.util.Map; public abstract class BaseRequestSender implements IRequestSender { protected final static String EMPTY_VALUE = ""; protected HttpURLConnection mHttpURLConnection; protected RequestData mRequestData; protected IRequest<?> mRequest; public BaseRequestSender(IRequest<?> request, HttpURLConnection httpURLConnection) { mRequest = request; mHttpURLConnection = httpURLConnection; mRequestData = request.getRequestData(); } @Override public void setup() throws IOException { HashMap<String, Object> data = mRequestData.getHeaderData(); if (data == null || data.size() == 0) { return; } Iterator<Map.Entry<String, Object>> it = data.entrySet().iterator(); while (it.hasNext()) { Map.Entry<String, Object> item = it.next(); String key = item.getKey(); Object value = item.getValue(); if (value == null) { value = EMPTY_VALUE; } mHttpURLConnection.setRequestProperty(key, value.toString()); } } /** * Completes the request and receives response from the server. * * @return a list of Strings as response in case the server returned * status OK, otherwise an exception is thrown. * @throws java.io.IOException */ public void getResponse(StringBuilder sb) throws IOException { // checks server's status code first int status = mHttpURLConnection.getResponseCode(); if (status == HttpURLConnection.HTTP_OK) { InputStream ips = new BufferedInputStream(mHttpURLConnection.getInputStream()); BufferedReader reader = new BufferedReader(new InputStreamReader(ips, "UTF-8")); char[] buffer = new char[1024]; int bufferLength; while ((bufferLength = reader.read(buffer, 0, buffer.length)) > 0) { sb.append(buffer, 0, bufferLength); } reader.close(); ips.close(); mHttpURLConnection.disconnect(); } else { throw new IOException("Server returned non-OK status: " + status); } } }