You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by vg...@apache.org on 2007/09/19 02:08:57 UTC

svn commit: r577118 - /cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/servletservice/util/RequestParameters.java

Author: vgritsenko
Date: Tue Sep 18 17:08:56 2007
New Revision: 577118

URL: http://svn.apache.org/viewvc?rev=577118&view=rev
Log:
add a FIXME, fix comments

Modified:
    cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/servletservice/util/RequestParameters.java

Modified: cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/servletservice/util/RequestParameters.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/servletservice/util/RequestParameters.java?rev=577118&r1=577117&r2=577118&view=diff
==============================================================================
--- cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/servletservice/util/RequestParameters.java (original)
+++ cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/servletservice/util/RequestParameters.java Tue Sep 18 17:08:56 2007
@@ -35,13 +35,18 @@
  */
 public final class RequestParameters implements Serializable {
 
-    /** The parameter names are the keys and the value is a List object */
+    /**
+     * The parameter names are the keys and the value is a List object
+     */
     private Map names;
 
     /**
-     * Decode the string
+     * Decodes URL encoded string
+     *
+     * @param s URL encoded string
+     * @return decoded string
      */
-    private String parseName(String s) {
+    private String decode(String s) {
         StringBuffer sb = new StringBuffer();
         for (int i = 0; i < s.length(); i++) {
             char c = s.charAt(i);
@@ -49,27 +54,33 @@
                 case '+':
                     sb.append(' ');
                     break;
+
                 case '%':
                     try {
-                        if (s.charAt(i+1) == 'u') {
+                        if (s.charAt(i + 1) == 'u') {
                             // working with multi-byte symbols in format %uXXXX
-                            sb.append((char)Integer.parseInt(s.substring(i+2, i+6), 16));
+                            sb.append((char) Integer.parseInt(s.substring(i + 2, i + 6), 16));
                             i += 5; // 4 digits and 1 symbol u
                         } else {
+                            // FIXME: w3c recommends to use UTF-8 instead of platform default encoding
+                            // http://www.w3.org/TR/html40/appendix/notes.html#non-ascii-chars
+
                             // working with single-byte symbols in format %YY
-                            sb.append((char)Integer.parseInt(s.substring(i+1, i+3), 16));
+                            sb.append((char) Integer.parseInt(s.substring(i + 1, i + 3), 16));
                             i += 2;
                         }
                     } catch (NumberFormatException e) {
                         throw new IllegalArgumentException();
                     } catch (StringIndexOutOfBoundsException e) {
-                        String rest  = s.substring(i);
+                        String rest = s.substring(i);
                         sb.append(rest);
-                        if (rest.length()==2)
+                        if (rest.length() == 2) {
                             i++;
+                        }
                     }
 
                     break;
+
                 default:
                     sb.append(c);
                     break;
@@ -81,6 +92,8 @@
 
     /**
      * Construct a new object from a queryString
+     *
+     * @param queryString request query string
      */
     public RequestParameters(String queryString) {
         this.names = new HashMap(5);
@@ -90,8 +103,8 @@
                 String pair = st.nextToken();
                 int pos = pair.indexOf('=');
                 if (pos != -1) {
-                    this.setParameter(this.parseName(pair.substring(0, pos)),
-                                      this.parseName(pair.substring(pos+1, pair.length())));
+                    setParameter(decode(pair.substring(0, pos)),
+                                 decode(pair.substring(pos + 1, pair.length())));
                 }
             }
         }
@@ -100,13 +113,14 @@
     /**
      * Add a parameter.
      * The parameter is added with the given value.
+     *
      * @param name   The name of the parameter.
      * @param value  The value of the parameter.
      */
     private void setParameter(String name, String value) {
         ArrayList list;
         if (names.containsKey(name)) {
-            list = (ArrayList)names.get(name);
+            list = (ArrayList) names.get(name);
         } else {
             list = new ArrayList(3);
             names.put(name, list);
@@ -116,19 +130,22 @@
 
     /**
      * Get the value of a parameter.
+     *
      * @param name   The name of the parameter.
      * @return       The value of the first parameter with the name
      *               or <CODE>null</CODE>
      */
     public String getParameter(String name) {
         if (names.containsKey(name)) {
-            return (String)((ArrayList)names.get(name)).get(0);
+            return (String) ((ArrayList) names.get(name)).get(0);
         }
+
         return null;
     }
 
     /**
      * Get the value of a parameter.
+     *
      * @param name   The name of the parameter.
      * @param defaultValue The default value if the parameter does not exist.
      * @return       The value of the first parameter with the name
@@ -136,13 +153,15 @@
      */
     public String getParameter(String name, String defaultValue) {
         if (names.containsKey(name)) {
-            return (String)((ArrayList)names.get(name)).get(0);
+            return (String) ((ArrayList) names.get(name)).get(0);
         }
+
         return defaultValue;
     }
 
     /**
      * Get all values of a parameter.
+     *
      * @param name   The name of the parameter.
      * @return       Array of the (String) values or null if the parameter
      *               is not defined.
@@ -150,17 +169,17 @@
     public String[] getParameterValues(String name) {
         if (names.containsKey(name)) {
             String values[] = null;
-            ArrayList list = (ArrayList)names.get(name);
+            ArrayList list = (ArrayList) names.get(name);
             Iterator iter = list.iterator();
             while (iter.hasNext()) {
                 if (values == null) {
                     values = new String[1];
                 } else {
-                    String[] copy = new String[values.length+1];
+                    String[] copy = new String[values.length + 1];
                     System.arraycopy(values, 0, copy, 0, values.length);
                     values = copy;
                 }
-                values[values.length-1] = (String)iter.next();
+                values[values.length - 1] = (String) iter.next();
             }
 
             return values;
@@ -171,6 +190,7 @@
 
     /**
      * Get all parameter names.
+     *
      * @return  Enumeration for the (String) parameter names.
      */
     public Enumeration getParameterNames() {