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 QueryMap extends LinkedHashMap<String, Object> implements Map<String, Object>{ private static final long serialVersionUID = -7607844916041020445L; private static final String TAG = QueryMap.class.getSimpleName(); private String queryTemplate; // MSH: magic sauce :) private String generateQuerySet(final String key, final Object value, final String queryTemplate) { 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()); } } public void setQueryTemplate(final String queryTemplate) { this.queryTemplate = queryTemplate; } @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(); // MSH: Ignore null values - but leave a log warning. if(m.getValue() == null) Log.w(TAG, "Input value is null for key: " + m.getKey()); else urlParams.append(generateQuerySet(m.getKey(), m.getValue(), this.queryTemplate)); } } 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); } }