You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by fm...@apache.org on 2008/03/12 23:52:33 UTC

svn commit: r636559 - /incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/

Author: fmeschbe
Date: Wed Mar 12 15:52:29 2008
New Revision: 636559

URL: http://svn.apache.org/viewvc?rev=636559&view=rev
Log:
SLING-242 Cleanup EncodedRequestParameter to not round-trip to byte[] on plain strings
for parameters retrieved from the servlet container

Added:
    incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/AbstractRequestParameter.java
      - copied, changed from r636378, incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/AbstractEncodedParameter.java
    incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/ContainerRequestParameter.java
      - copied, changed from r636378, incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/EncodedRequestParameter.java
Removed:
    incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/AbstractEncodedParameter.java
    incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/EncodedRequestParameter.java
Modified:
    incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/MultipartPostParameter.java
    incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/ParameterSupport.java
    incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/Util.java

Copied: incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/AbstractRequestParameter.java (from r636378, incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/AbstractEncodedParameter.java)
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/AbstractRequestParameter.java?p2=incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/AbstractRequestParameter.java&p1=incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/AbstractEncodedParameter.java&r1=636378&r2=636559&rev=636559&view=diff
==============================================================================
--- incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/AbstractEncodedParameter.java (original)
+++ incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/AbstractRequestParameter.java Wed Mar 12 15:52:29 2008
@@ -20,32 +20,20 @@
 
 import org.apache.sling.api.request.RequestParameter;
 
-abstract class AbstractEncodedParameter implements RequestParameter {
+abstract class AbstractRequestParameter implements RequestParameter {
 
     private String encoding;
-    private String cachedValue;
 
-    protected AbstractEncodedParameter(String encoding) {
+    protected AbstractRequestParameter(String encoding) {
         this.encoding = encoding;
     }
 
     void setEncoding(String encoding) {
         this.encoding = encoding;
-        this.cachedValue = null;
     }
 
     String getEncoding() {
         return this.encoding;
     }
 
-    String getEncodedString() {
-        if (this.cachedValue == null) {
-            // try explicit encoding if available
-            this.cachedValue = this.decode(this.get(), this.encoding);
-        }
-
-        return this.cachedValue;
-    }
-
-    protected abstract String decode(byte[] data, String encoding);
 }

Copied: incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/ContainerRequestParameter.java (from r636378, incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/EncodedRequestParameter.java)
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/ContainerRequestParameter.java?p2=incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/ContainerRequestParameter.java&p1=incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/EncodedRequestParameter.java&r1=636378&r2=636559&rev=636559&view=diff
==============================================================================
--- incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/EncodedRequestParameter.java (original)
+++ incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/ContainerRequestParameter.java Wed Mar 12 15:52:29 2008
@@ -23,27 +23,39 @@
 import java.io.UnsupportedEncodingException;
 
 /**
- * The <code>EncodedRequestParameter</code> TODO
+ * The <code>ContainerRequestParameter</code> TODO
  */
-public class EncodedRequestParameter extends AbstractEncodedParameter {
+public class ContainerRequestParameter extends AbstractRequestParameter {
+
+    private final String value;
 
     private byte[] content;
 
-    EncodedRequestParameter(String encoding) {
+    ContainerRequestParameter(String value, String encoding) {
         super(encoding);
-        this.content = Util.NO_CONTENT;
+        this.value = value;
+        this.content = null;
     }
 
-    void setContent(byte[] content) {
-        this.content = content;
-        super.setEncoding(this.getEncoding());
+    @Override
+    void setEncoding(String encoding) {
+        super.setEncoding(encoding);
+        content = null;
     }
 
     /**
      * @see org.apache.sling.api.request.RequestParameter#get()
      */
     public byte[] get() {
-        return this.content;
+        if (content == null) {
+            try {
+                content = getString().getBytes(getEncoding());
+            } catch (Exception e) {
+                // UnsupportedEncodingException, IllegalArgumentException
+                content = getString().getBytes();
+            }
+        }
+        return content;
     }
 
     /**
@@ -80,13 +92,14 @@
      * @see org.apache.sling.api.request.RequestParameter#getString()
      */
     public String getString() {
-        return this.getEncodedString();
+        return value;
     }
 
     /**
      * @see org.apache.sling.api.request.RequestParameter#getString(java.lang.String)
      */
-    public String getString(String encoding) throws UnsupportedEncodingException {
+    public String getString(String encoding)
+            throws UnsupportedEncodingException {
         return new String(this.get(), encoding);
     }
 
@@ -102,19 +115,4 @@
         return this.getString();
     }
 
-    protected String decode(byte[] data, String encoding) {
-        if (encoding != null) {
-            try {
-                String value = new String(data, Util.ENCODING_DIRECT);
-                return value; // URLDecoder.decode(value, encoding);
-            } catch (UnsupportedEncodingException uue) {
-                // not expected, use default encoding anyway ...
-            } catch (IllegalArgumentException iae) {
-                // due to illegal encoding in value, ignore for now
-            }
-        }
-
-        // if still here, use platform default encoding
-        return new String(data);
-    }
 }

Modified: incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/MultipartPostParameter.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/MultipartPostParameter.java?rev=636559&r1=636558&r2=636559&view=diff
==============================================================================
--- incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/MultipartPostParameter.java (original)
+++ incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/MultipartPostParameter.java Wed Mar 12 15:52:29 2008
@@ -27,11 +27,14 @@
 /**
  * The <code>MultipartRequestParameter</code> TODO
  */
-class MultipartRequestParameter extends AbstractEncodedParameter {
+class MultipartRequestParameter extends AbstractRequestParameter {
 
     private final FileItem delegatee;
+
     private String encodedFileName;
 
+    private String cachedValue;
+
     /**
      *
      */
@@ -44,6 +47,12 @@
         this.delegatee.delete();
     }
 
+    @Override
+    void setEncoding(String encoding) {
+        super.setEncoding(encoding);
+        cachedValue = null;
+    }
+
     /**
      * @see org.apache.sling.api.request.RequestParameter#get()
      */
@@ -98,23 +107,29 @@
     public String getString() {
         // only apply encoding in the case of a form field
         if (this.isFormField()) {
-            return this.getEncodedString();
-        }
-
-        return this.delegatee.getString();
-    }
+            if (this.cachedValue == null) {
+                // try explicit encoding if available
+                byte[] data = get();
+                String encoding = getEncoding();
+                if (encoding != null) {
+                    try {
+                        this.cachedValue = new String(data, encoding);
+                    } catch (UnsupportedEncodingException uee) {
+                        // don't care, fall back to platform default
+                    }
+                }
 
-    protected String decode(byte[] data, String encoding) {
-        if (encoding != null) {
-            try {
-                return new String(data, encoding);
-            } catch (UnsupportedEncodingException uee) {
-                // TODO: handle
+                // if there is no encoding, or an illegal encoding,
+                // use platform default
+                if (cachedValue == null) {
+                    cachedValue = new String(data);
+                }
             }
+
+            return this.cachedValue;
         }
 
-        // if there is no encoding, or an illegal encoding, use platform default
-        return new String(data);
+        return this.delegatee.getString();
     }
 
     /**
@@ -136,6 +151,7 @@
             return this.getString();
         }
 
-        return "File: " + this.getFileName() + " (" + this.getSize() + " bytes)";
+        return "File: " + this.getFileName() + " (" + this.getSize()
+            + " bytes)";
     }
 }

Modified: incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/ParameterSupport.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/ParameterSupport.java?rev=636559&r1=636558&r2=636559&view=diff
==============================================================================
--- incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/ParameterSupport.java (original)
+++ incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/ParameterSupport.java Wed Mar 12 15:52:29 2008
@@ -126,16 +126,8 @@
             final String[] values = (String[]) entry.getValue();
 
             for (int i = 0; i < values.length; i++) {
-                final EncodedRequestParameter rp = new EncodedRequestParameter(
-                    Util.ENCODING_DEFAULT);
-                try {
-                    rp.setContent(values[i].getBytes(Util.ENCODING_DEFAULT));
-                } catch (UnsupportedEncodingException ue) {
-                    throw new Error(
-                        "Unexpected UnsupportedEncodingException for encoding="
-                            + Util.ENCODING_DEFAULT);
-                }
-                parameters.addParameter(name, rp);
+                parameters.addParameter(name, new ContainerRequestParameter(
+                    values[i], Util.ENCODING_DEFAULT));
             }
 
         }

Modified: incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/Util.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/Util.java?rev=636559&r1=636558&r2=636559&view=diff
==============================================================================
--- incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/Util.java (original)
+++ incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/Util.java Wed Mar 12 15:52:29 2008
@@ -104,8 +104,8 @@
             RequestParameter[] params = paramEntry.getValue();
             String parName = null;
             for (int i = 0; i < params.length; i++) {
-                if (params[i] instanceof AbstractEncodedParameter) {
-                    AbstractEncodedParameter param = (AbstractEncodedParameter) params[i];
+                if (params[i] instanceof AbstractRequestParameter) {
+                    AbstractRequestParameter param = (AbstractRequestParameter) params[i];
 
                     // fix encoding if different
                     if (param.getEncoding() == null) {