experimental fix for an encoding problem
[mir.git] / source / mir / util / HTTPRequestParser.java
index 5dd2c4e..130f2e0 100755 (executable)
@@ -1,38 +1,57 @@
-package mir.util;
-
-import javax.servlet.http.HttpServletRequest;
-
-public class HTTPRequestParser {
-  private HttpServletRequest request;
-
-  public HTTPRequestParser(HttpServletRequest aRequest) {
-    request = aRequest;
-  }
-
-  public boolean hasParameter(String aName) {
-    return request.getParameter(aName)!=null;
-  }
-
-  public String getParameterWithDefault(String aName, String aDefault) {
-    if (hasParameter(aName))
-      return request.getParameter(aName);
-    else
-      return aDefault;
-  }
-
-  public String getParameter(String aName) {
-    return getParameterWithDefault(aName, "");
-  }
-
-  public int getIntegerWithDefault(String aName, int aDefault) {
-    int result = aDefault;
-    String value = getParameter(aName);
-
-    try {
-      result = Integer.parseInt(value);
-    }
-    catch (Throwable t) {
-    }
-    return result;
-  }
+package mir.util;\r
+\r
+import javax.servlet.http.HttpServletRequest;\r
+\r
+public class HTTPRequestParser {\r
+  private HttpServletRequest request;\r
+  private String encoding;\r
+\r
+  public HTTPRequestParser(HttpServletRequest aRequest) {\r
+    this(aRequest, aRequest.getCharacterEncoding());\r
+  }\r
+\r
+  public HTTPRequestParser(HttpServletRequest aRequest, String anEncoding) {\r
+    request = aRequest;\r
+    encoding = anEncoding;\r
+  }\r
+\r
+  public boolean hasParameter(String aName) {\r
+    return request.getParameter(aName)!=null;\r
+  }\r
+\r
+  public String getParameterWithDefault(String aName, String aDefault) {\r
+    if (hasParameter(aName))\r
+      return getParameter(aName);\r
+    else\r
+      return aDefault;\r
+  }\r
+\r
+  public String getParameter(String aName) {\r
+    try {\r
+      String result = request.getParameter(aName);\r
+\r
+      if (result != null && !encoding.equals(request.getCharacterEncoding())) {\r
+        System.out.println("recoding");\r
+        result = new String(result.getBytes(request.getCharacterEncoding()), encoding);\r
+      }\r
+\r
+      return result;\r
+    }\r
+    catch (Throwable t) {\r
+      t.printStackTrace(System.out);\r
+      throw new RuntimeException("HTTPRequestParser.getParameter: " + t.getMessage());\r
+    }\r
+  }\r
+\r
+  public int getIntegerWithDefault(String aName, int aDefault) {\r
+    int result = aDefault;\r
+    String value = getParameter(aName);\r
+\r
+    try {\r
+      result = Integer.parseInt(value);\r
+    }\r
+    catch (Throwable t) {\r
+    }\r
+    return result;\r
+  }\r
 }
\ No newline at end of file