package in.srain.cube.request; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.HashMap; import java.util.Iterator; import java.util.Map; public class RequestData { private static final String CHAR_QM = "?"; private static final String CHAR_AND = "&"; private static final String CHAR_EQ = "="; private static final String CHAR_SET = "UTF-8"; public String mUrl; private HashMap<String, Object> mQueryData; private HashMap<String, Object> mPostData; private boolean mUsePost = false; public static String buildQueryString(Map<String, ?> data, String url) { StringBuilder sb = new StringBuilder(); boolean append = false; if (url != null) { sb.append(url); if (url.contains(CHAR_QM)) { append = true; } else { sb.append(CHAR_QM); } } Iterator<? extends Map.Entry<String, ?>> it = data.entrySet().iterator(); while (it.hasNext()) { Map.Entry<String, ?> item = it.next(); if (append) { sb.append(CHAR_AND); } else { append = true; } try { sb.append(URLEncoder.encode(item.getKey(), CHAR_SET)); sb.append(CHAR_EQ); sb.append(URLEncoder.encode(item.getValue().toString(), CHAR_SET)); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } return sb.toString(); } public void addPostData(String key, Object data) { if (mPostData == null) { mPostData = new HashMap<String, Object>(); } mPostData.put(key, data); } public void addPostData(Map<String, ?> data) { if (mPostData == null) { mPostData = new HashMap<String, Object>(); } mPostData.putAll(data); } public void addQueryData(String key, Object data) { if (mQueryData == null) { mQueryData = new HashMap<String, Object>(); } mQueryData.put(key, data); } public void addQueryData(Map<String, ?> data) { if (mQueryData == null) { mQueryData = new HashMap<String, Object>(); } mQueryData.putAll(data); } public String getRequestUrl() { if (mQueryData != null) { return buildQueryString(mQueryData, mUrl); } return mUrl; } public void setRequestUrl(String url) { mUrl = url; } public HashMap<String, Object> getQueryData() { return mQueryData; } public HashMap<String, Object> getPostData() { return mPostData; } public void usePost(boolean use) { mUsePost = use; } public String getPostString() { return buildQueryString(mPostData, null); } public boolean shouldPost() { return mUsePost || (mPostData != null && mPostData.size() > 0); } }