package org.ovirt.engine.ui.uicommonweb;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import com.google.gwt.http.client.URL;
public class HtmlParameters {
private final Map<String, List<String>> paramsMap = new HashMap<>();
public void addParameter(String key, String value) {
List<String> oldParams = paramsMap.get(key);
if (oldParams == null) {
setParameter(key, value);
} else {
oldParams.add(encodeParameter(value));
}
}
public void setParameter(String key, String... value) {
paramsMap.put(key, new LinkedList<>(Arrays.asList(encodeParameters(value))));
}
public Map<String, List<String>> getParameters() {
return Collections.unmodifiableMap(paramsMap);
}
public void removeParameter(String key) {
paramsMap.remove(key);
}
private static String[] encodeParameters(String[] values) {
for (int index = 0; index < values.length; ++index) {
values[index] = encodeParameter(values[index]);
}
return values;
}
private static String encodeParameter(String value) {
return URL.encode(value);
}
/**
* Parse the passed in URL, and take any parameters found and put them in this {@code HtmlParameters} object.
* This is a naive parse method.
* This will not handle duplicate parameters, nor empty ones, nor hash tags, or partials.
* So this will fail: ?a=b&c&d&e=f#g;h even though it is a valid URL.
* @param baseUrl The {@code String} URL to parse.
*/
public void parseUrlParams(String baseUrl) {
if (baseUrl.indexOf('?') >= 0) {
String params = baseUrl.substring(baseUrl.indexOf('?') + 1);
for (String keyValue: params.split("&")) { //$NON-NLS-1$
String[] pair = keyValue.split("="); //$NON-NLS-1$
if (!"".equals(pair[1])) {
setParameter(pair[0], pair[1]);
}
}
}
}
}