package mediabrowser.apiinteraction; import java.net.URLEncoder; import java.util.ArrayList; /** Class QueryStringDictionary */ public class QueryStringDictionary extends java.util.HashMap<String, String> { /** Initializes a new instance of the <see cref="QueryStringDictionary" /> class. */ public QueryStringDictionary() { super(); } /** Adds the specified name. @param name The name. @param value The value. */ public final void Add(String name, int value) { this.put(name, (new Integer(value)).toString()); } /** Adds the specified name. @param name The name. @param value The value. */ public final void Add(String name, String value) { this.put(name, value); } /** Adds the specified name. @param name The name. @param value The value. */ public final void Add(String name, long value) { this.put(name, (new Long(value)).toString()); } /** Adds the specified name. @param name The name. @param value The value. */ public final void Add(String name, double value) { this.put(name, (new Double(value)).toString()); } /** Adds if not null or empty. @param name The name. @param value The value. */ public final void AddIfNotNullOrEmpty(String name, String value) { if (!tangible.DotNetToJavaStringHelper.isNullOrEmpty(value)) { this.put(name, value); } } /** Adds if not null. @param name The name. @param value The value. */ public final void AddIfNotNull(String name, Integer value) { if (value != null) { this.Add(name, value); } } /** Adds if not null. @param name The name. @param value The value. */ public final void AddIfNotNull(String name, Double value) { if (value != null) { this.Add(name, value); } } /** Adds if not null. @param name The name. @param value The value. */ public final void AddIfNotNull(String name, Long value) { if (value != null) { this.Add(name, value); } } /** Adds the specified name. @param name The name. @param value if set to <c>true</c> [value]. */ public final void Add(String name, boolean value) { this.put(name, (new Boolean(value)).toString()); } /** Adds if not null. @param name The name. @param value if set to <c>true</c> [value]. */ public final void AddIfNotNull(String name, Boolean value) { if (value != null) { this.Add(name, value); } } /** Adds the specified name. @param name The name. @param value The value. @exception System.ArgumentNullException value */ public final void Add(String name, Integer[] value) { if (value == null) { throw new IllegalArgumentException("value"); } String attValue = tangible.DotNetToJavaStringHelper.join(",", GetStrings(value)); this.put(name, attValue); } private String[] GetStrings(Integer[] value) { String[] vals = new String[value.length]; for (int i=0; i< value.length; i++) { vals[i] = value[i].toString(); } return vals; } public final void Add(String name, int[] value) { if (value == null) { throw new IllegalArgumentException("value"); } String attValue = tangible.DotNetToJavaStringHelper.join(",", GetStrings(value)); this.put(name, attValue); } private String[] GetStrings(int[] value) { String[] vals = new String[value.length]; for (int i=0; i< value.length; i++) { vals[i] = new Integer(value[i]).toString(); } return vals; } /** Adds if not null. @param name The name. @param value The value. */ public final void AddIfNotNull(String name, int[] value) { if (value != null) { this.Add(name, value); } } /** Adds if not null. @param name The name. @param value The value. */ public final void AddIfNotNull(String name, Integer[] value) { if (value != null) { this.Add(name, value); } } /** Adds the specified name. @param name The name. @param value The value. @exception System.ArgumentNullException value */ public final void Add(String name, String[] value) { if (value == null) { throw new IllegalArgumentException("value"); } Add(name, value, ","); } /** Adds the specified name. @param name The name. @param value The value. @exception System.ArgumentNullException value */ public final void Add(String name, ArrayList<String> value) { if (value == null) { throw new IllegalArgumentException("value"); } String[] stringArray = value.toArray(new String[value.size()]); Add(name, stringArray); } /** Adds if not null. @param name The name. @param value The value. */ public final void AddIfNotNull(String name, String[] value) { if (value != null) { this.Add(name, value); } } /** Adds the specified name. @param name The name. @param value The value. @param delimiter The delimiter. */ public final void Add(String name, String[] value, String delimiter) { if (value == null) { throw new IllegalArgumentException("value"); } String paramValue = tangible.DotNetToJavaStringHelper.join(delimiter, value); this.put(name, paramValue); } /** Adds if not null. @param name The name. @param value The value. @param delimiter The delimiter. */ public final void AddIfNotNull(String name, String[] value, String delimiter) { if (value != null) { this.Add(name, value, delimiter); } } /** Adds if not null. @param name The name. @param value The value. */ public final void AddIfNotNull(String name, ArrayList<String> value) { if (value != null) { this.Add(name, value); } } /** Gets the query string. @return System.String. */ public final String GetQueryString() { String result = ""; for(String key : this.keySet()) { String paramValue = this.get(key); if (paramValue != null && paramValue.length() > 0){ if (result.length() > 0){ result += "&"; } result += String.format("%1$s=%2$s", key, GetEncodedValue(paramValue)); } } return result; } /** Gets the encoded value. @param value The value. @return System.String. */ private String GetEncodedValue(String value) { return URLEncoder.encode(value); } /** Gets the URL. @param prefix The prefix. @return System.String. */ public final String GetUrl(String prefix) { String query = GetQueryString(); if (tangible.DotNetToJavaStringHelper.isNullOrEmpty(query)) { return prefix; } return prefix + "?" + query; } public final <T extends Enum<T>> void Add(String name, T value) { this.Add(name, value.toString()); } public final <T extends Enum<T>> void AddIfNotNull(String name, T value) { if (value != null) { this.Add(name, value); } } public final <T extends Enum<T>> void Add(String name, T[] values, String delimiter) { this.Add(name, GetStrings(values), delimiter); } public final <T extends Enum<T>> void AddIfNotNull(String name, T[] values, String delimiter) { if (values != null) { this.Add(name, values, delimiter); } } public final <T extends Enum<T>> void Add(String name, T[] values) { this.Add(name, values, ","); } public final <T extends Enum<T>> void AddIfNotNull(String name, T[] values) { this.AddIfNotNull(name, values, ","); } private <T extends Enum<T>> String[] GetStrings(T[] value) { String[] vals = new String[value.length]; for (int i=0; i< value.length; i++) { vals[i] = value[i].toString(); } return vals; } }