| package com.google.android.gdata.client; |
| |
| import com.google.wireless.gdata.client.QueryParams; |
| |
| import android.text.TextUtils; |
| import android.util.Log; |
| |
| import java.io.UnsupportedEncodingException; |
| import java.net.URLEncoder; |
| import java.util.HashMap; |
| import java.util.Map; |
| import java.util.Set; |
| |
| /** |
| * Simple implementation of the QueryParams interface. |
| */ |
| // TODO: deal with categories |
| public class QueryParamsImpl extends QueryParams { |
| |
| private final Map<String,String> mParams = new HashMap<String,String>(); |
| |
| /** |
| * Creates a new empty QueryParamsImpl. |
| */ |
| public QueryParamsImpl() { |
| } |
| |
| @Override |
| public void clear() { |
| setEntryId(null); |
| mParams.clear(); |
| } |
| |
| @Override |
| public String generateQueryUrl(String feedUrl) { |
| |
| if (TextUtils.isEmpty(getEntryId()) && |
| mParams.isEmpty()) { |
| // nothing to do |
| return feedUrl; |
| } |
| |
| // handle entry IDs |
| if (!TextUtils.isEmpty(getEntryId())) { |
| if (!mParams.isEmpty()) { |
| throw new IllegalStateException("Cannot set both an entry ID " |
| + "and other query paramters."); |
| } |
| return feedUrl + '/' + getEntryId(); |
| } |
| |
| // otherwise, append the querystring params. |
| StringBuilder sb = new StringBuilder(); |
| sb.append(feedUrl); |
| Set<String> params = mParams.keySet(); |
| boolean first = true; |
| if (feedUrl.contains("?")) { |
| first = false; |
| } else { |
| sb.append('?'); |
| } |
| for (String param : params) { |
| if (first) { |
| first = false; |
| } else { |
| sb.append('&'); |
| } |
| sb.append(param); |
| sb.append('='); |
| String value = mParams.get(param); |
| String encodedValue = null; |
| |
| try { |
| encodedValue = URLEncoder.encode(value, "UTF-8"); |
| } catch (UnsupportedEncodingException uee) { |
| // should not happen. |
| Log.w("QueryParamsImpl", |
| "UTF-8 not supported -- should not happen. " |
| + "Using default encoding.", uee); |
| encodedValue = URLEncoder.encode(value); |
| } |
| sb.append(encodedValue); |
| } |
| return sb.toString(); |
| } |
| |
| @Override |
| public String getParamValue(String param) { |
| if (!(mParams.containsKey(param))) { |
| return null; |
| } |
| return mParams.get(param); |
| } |
| |
| @Override |
| public void setParamValue(String param, String value) { |
| mParams.put(param, value); |
| } |
| |
| } |