blob: 487800205360ca5e30dbbdc2212f92c6e5df4748 [file] [log] [blame]
// Copyright 2007 The Android Open Source Project
package com.google.wireless.gdata.client;
import java.util.Hashtable;
import java.util.Vector;
/**
* A concrete implementation of QueryParams that uses the encodeUri method of a
* GDataClient (passed in at construction time) to URL encode parameters.
*
* This implementation maintains the order of parameters, which is useful for
* testing. Instances of this class are not thread safe.
*/
public class HttpQueryParams extends QueryParams {
private GDataClient client;
/* Used to store the mapping of names to values */
private Hashtable params;
/* Used to maintain the order of parameter additions */
private Vector names;
/**
* Constructs a new, empty HttpQueryParams.
*
* @param client GDataClient whose encodeUri method is used for URL encoding.
*/
public HttpQueryParams(GDataClient client) {
this.client = client;
// We expect most queries to have a relatively small number of parameters.
names = new Vector(4);
params = new Hashtable(7);
}
public String generateQueryUrl(String feedUrl) {
StringBuffer url = new StringBuffer(feedUrl);
url.append(feedUrl.indexOf('?') >= 0 ? '&' : '?');
for (int i = 0; i < names.size(); i++) {
if (i > 0) {
url.append('&');
}
String name = (String) names.elementAt(i);
url.append(client.encodeUri(name)).append('=');
url.append(client.encodeUri(getParamValue(name)));
}
return url.toString();
}
public String getParamValue(String param) {
return (String) params.get(param);
}
public void setParamValue(String param, String value) {
if (value != null) {
if (!params.containsKey(param)) {
names.addElement(param);
}
params.put(param, value);
} else {
if (params.remove(param) != null) {
names.removeElement(param);
}
}
}
public void clear() {
names.removeAllElements();
params.clear();
}
}