package org.xins.common.servlet;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;
import javax.servlet.ServletConfig;
import javax.servlet.http.HttpServletRequest;
import org.xins.common.text.ParseException;
import org.xins.common.text.TextUtils;
import org.xins.common.text.URLEncoding;
public class ServletToMapConverter {
public static Map<String, String> servletConfigToMap(ServletConfig configuration) {
Map<String, String> settings = new HashMap<String, String>();
Enumeration enuParameterNames = configuration.getInitParameterNames();
while (enuParameterNames.hasMoreElements()) {
String name = (String) enuParameterNames.nextElement();
String value = configuration.getInitParameter(name);
settings.put(name, value);
}
return settings;
}
public static Map<String, String> servletRequestToMap(HttpServletRequest request)
throws ParseException {
Map<String, String> settings = new HashMap<String, String>();
String query = request.getQueryString();
if (TextUtils.isEmpty(query)) {
return settings;
}
try {
StringTokenizer st = new StringTokenizer(query, "&");
while (st.hasMoreTokens()) {
String token = st.nextToken();
int equalsPos = token.indexOf('=');
if (equalsPos != -1) {
String parameterKey = URLEncoding.decode(token.substring(0, equalsPos));
String parameterValue = URLEncoding.decode(token.substring(equalsPos + 1));
settings.put(parameterKey, parameterValue);
} else {
settings.put(token, "");
}
}
} catch (Exception cause) {
throw new ParseException("Failed to parse HTTP query string.",
cause,
"URL decoding failed.");
}
return settings;
}
}