package com.bocai.model; import android.net.Uri; import android.util.Log; import com.bocai.net.AsyncHTTPRequest; import com.bocai.net.AsyncHTTPResponseHandler; import com.bocai.util.RestConstants; import java.io.*; import java.util.*; import org.apache.http.cookie.Cookie; import org.json.JSONException; import org.json.JSONObject; public class FSObject implements AsyncHTTPResponseHandler { public static interface ResponseDataHandler { public abstract void responseData(JSONObject jsonObject, AsyncHTTPRequest asyncHttpRequest) throws JSONException; } public FSObject() { wasCancelled = false; wasCompleted = false; } public FSObject(AsyncHTTPRequest asyncHttpRequest) { wasCancelled = false; wasCompleted = false; request = asyncHttpRequest; performRequest(asyncHttpRequest); } static String getQueryString(HashMap<String, Object> hashMap) { String s; if(hashMap == null) { s = ""; } else { StringBuilder stringBuilder = new StringBuilder(); for(Iterator<Map.Entry<String, Object>> iterator = hashMap.entrySet().iterator(); iterator.hasNext();) { java.util.Map.Entry<String, Object> entry = iterator.next(); String key = entry.getKey(); stringBuilder.append(key).append('='); String value = Uri.encode(entry.getValue().toString(), null); stringBuilder.append(value).append('&'); } int i = stringBuilder.length(); if(i > 0) { int j = i - 1; if(stringBuilder.charAt(j) == '&') { int k = i - 1; stringBuilder.setLength(k); } } s = stringBuilder.toString(); } return s; } public static AsyncHTTPRequest requestWithPath(String path, HashMap<String, Object> params) { Object aobj[] = new Object[2]; aobj[0] = path; String queryStr = getQueryString(params); aobj[1] = queryStr; String url = String.format(RestConstants.BC_WS_TEMPLETE_URL, aobj); Log.d("FSObject", url); return new AsyncHTTPRequest(url); } public void cancelRequests() { //blank method } @Override public void handleError(String errorMsg, InputStream stream, long length) throws IOException { if (wasCancelled) return; wasCompleted = true; Log.d(LOG_TAG, "handleError=" + errorMsg); try { responseData(null, request); } catch (JSONException e) { Log.w(LOG_TAG, e.getMessage(),e); } } @Override public void handleResponse(AsyncHTTPRequest asyncHttpRequest, InputStream stream, long length) throws IOException { if (wasCancelled){ return; } wasCompleted = true; if (startTime != null) { long l1 = (new Date()).getTime(); long l2 = startTime.getTime(); float f = l1 - l2; f = f / 1000.0f; Log.i("FSObject", "httpRequest execute time(second):" + f); } JSONObject jsonObject = null; try { String s = AsyncHTTPRequest.toString(stream, length); jsonObject = new JSONObject(s); } catch (JSONException e) { Log.e("FSObject", e.getLocalizedMessage(), e); } try { Object obj = asyncHttpRequest.userData; if(obj != null && obj instanceof ResponseDataHandler){ ResponseDataHandler handler = (ResponseDataHandler)obj; handler.responseData(jsonObject, asyncHttpRequest); asyncHttpRequest.userData = null; } responseData(jsonObject, asyncHttpRequest); } catch (JSONException e) { Log.e("FSObject", e.getLocalizedMessage(),e); } } void performRequest(AsyncHTTPRequest asyncHttpRequest) { performRequest(asyncHttpRequest, null); } void performRequest(AsyncHTTPRequest asyncHttpRequest, List<Cookie> list) { performRequest(asyncHttpRequest, list, null); } void performRequest(AsyncHTTPRequest asyncHttpRequest, List<Cookie> list, Object obj) { startTime= new Date(); request = asyncHttpRequest; request.responseHandler = this; if(obj != null) request.userData = obj; if(list != null) { request.setUseCookiePersistence(false); request.setRequestCookies(list); } request.execute(); } String readResponse(InputStream inputStream) throws IOException { InputStreamReader inputstreamReader = new InputStreamReader(inputStream); BufferedReader bufferedReader = new BufferedReader(inputstreamReader); StringBuilder stringBuilder = new StringBuilder(); do { String s = bufferedReader.readLine(); if(s != null) stringBuilder.append(s); else return stringBuilder.toString(); } while(true); } void resetCancelled() { //blank method } protected void responseData(JSONObject jsonobject, AsyncHTTPRequest asynchttprequest) throws JSONException { //blank method } public String url() { String snswer; if(request != null) snswer = request.url; else snswer = null; return snswer; } public boolean wasCancelled() { return false; } public boolean wasCompleted() { return false; } static final String LOG_TAG = "FSObject"; public FSObjectDelegate delegate; AsyncHTTPRequest request; Object responseDataSel; Date startTime; public boolean wasCancelled = false; public boolean wasCompleted = false; }