package dk.slott.super_volley.managers;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
import android.util.Log;
public class ResourceMap extends LinkedHashMap<String, Object> implements Map<String, Object>{
private static final long serialVersionUID = 603613924346400931L;
private static final String TAG = ResourceMap.class.getSimpleName();
private static final String queryTemplate = "/%s/%s";
private String generateQuerySet(final String key, final Object value) {
// MSH: If resource mapping is a collection there will be no value.
// http://en.wikipedia.org/wiki/Representational_state_transfer
if(value == null)
return "/" + key;
try {
return String.format(queryTemplate, key, URLEncoder.encode(value.toString(), "UTF-8"));
}
catch (UnsupportedEncodingException e) {
Log.e(TAG, "UnsupportedEncodingException: " + e);
return String.format(queryTemplate, key, value.toString());
}
}
@Override
public String toString() {
final StringBuffer urlParams = new StringBuffer(120);
if (this!=null) {
final Set<Entry<String, Object>> s=this.entrySet();
final Iterator<Entry<String, Object>> it=s.iterator();
while(it.hasNext()) {
final Map.Entry<String, Object> m =(Map.Entry<String, Object>)it.next();
urlParams.append(generateQuerySet(m.getKey(), m.getValue()));
}
}
return urlParams.toString();
}
/**
* MSH: For the internal workings we want to keep key values as type String.
* @param key
* @param value
*/
public void put(final Enum<?> key, final Object value) {
super.put(key.toString(), value);
}
public void put(final Enum<?> key) {
super.put(key.toString(), null);
}
}