package edu.washington.cs.oneswarm.ui.gwt.client; import java.util.HashMap; import java.util.Map; import com.google.gwt.user.client.Window; public class Parser { public static boolean isAcceptableString(String str) { char[] c = str.toCharArray(); for (int i = 0; i < c.length; i++) { if (!isSafeChar(c[i])) { return false; } } return true; } public static Map<String, String> parseURLParameters() { return parseParameters(getURL()); } public static Map<String, String> parseParameters(String url) { Map<String, String> map = new HashMap<String, String>(); if (url.indexOf('?') == -1) { return map; } String parameterString = url.substring(url.lastIndexOf('?') + 1); String[] parameterPairs = parameterString.split("&"); for (int i = 0; i < parameterPairs.length; i++) { String parameterPair = parameterPairs[i]; String name = parameterPair.substring(0, parameterPair.indexOf('=')); String value = parameterPair.substring(parameterPair.indexOf('=') + 1); // Window.alert(parameterPair + " '" + name + "'= '" + value + "'"); if (isAcceptableString(name) && isAcceptableString(value)) { map.put(name, value); } else { Window.alert("Sorry, all parameters must be url-encoded:\n\n" + "'" + name + "'='" + value + "'\n\n" + "is not a valid url encoded string, skipping '" + name + "'"); } } return map; } // check if the char is safe, all characters that are possible in // URL-encoded strings are ok. // this means that all safe chars, and % is ok public static boolean isSafeChar(char c) { return ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || c == '-' || c == '_' || c == '.' || c == '*' || c == '%'); } private static native String getURL() /*-{ return parent.location.href //return window.location.href }-*/; }