You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by hl...@apache.org on 2010/08/31 19:27:22 UTC

svn commit: r991267 - in /tapestry/tapestry5/trunk/tapestry-core/src: main/java/org/apache/tapestry5/internal/services/ main/java/org/apache/tapestry5/internal/services/assets/ main/java/org/apache/tapestry5/internal/test/ main/java/org/apache/tapestry...

Author: hlship
Date: Tue Aug 31 17:27:21 2010
New Revision: 991267

URL: http://svn.apache.org/viewvc?rev=991267&view=rev
Log:
TAP5-1236: Add method Response.disableCompression() (to avoid use of a internal global key)

Modified:
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ResourceStreamerImpl.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ResponseImpl.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/StreamResponseResultProcessor.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/StackAssetRequestHandler.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/test/TestableResponseImpl.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/Request.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/Response.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/util/ResponseWrapper.java
    tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ResourceStreamerImplTest.java

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ResourceStreamerImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ResourceStreamerImpl.java?rev=991267&r1=991266&r2=991267&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ResourceStreamerImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ResourceStreamerImpl.java Tue Aug 31 17:27:21 2010
@@ -114,8 +114,8 @@ public class ResourceStreamerImpl implem
 
         // Prevent the upstream code from compressing when we don't want to.
 
-        request.setAttribute(InternalConstants.SUPPRESS_COMPRESSION, true);
-
+        response.disableCompression();
+        
         StreamableResource streamble = resourceCache.getStreamableResource(resource);
 
         long lastModified = streamble.getLastModified();

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ResponseImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ResponseImpl.java?rev=991267&r1=991266&r2=991267&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ResponseImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ResponseImpl.java Tue Aug 31 17:27:21 2010
@@ -4,7 +4,7 @@
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
-//     http://www.apache.org/licenses/LICENSE-2.0
+// http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
 // distributed under the License is distributed on an "AS IS" BASIS,
@@ -21,9 +21,11 @@ import java.io.OutputStreamWriter;
 import java.io.PrintWriter;
 import java.io.Writer;
 
+import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 import org.apache.tapestry5.Link;
+import org.apache.tapestry5.internal.InternalConstants;
 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
 import org.apache.tapestry5.services.Response;
 
@@ -32,11 +34,16 @@ import org.apache.tapestry5.services.Res
  */
 public class ResponseImpl implements Response
 {
+    private final HttpServletRequest request;
+
     private final HttpServletResponse response;
 
-    public ResponseImpl(HttpServletResponse response)
+    public ResponseImpl(HttpServletRequest request, HttpServletResponse response)
     {
+        assert request != null;
         assert response != null;
+
+        this.request = request;
         this.response = response;
     }
 
@@ -115,4 +122,9 @@ public class ResponseImpl implements Res
     {
         return response.isCommitted();
     }
+
+    public void disableCompression()
+    {
+        request.setAttribute(InternalConstants.SUPPRESS_COMPRESSION, true);
+    }
 }

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/StreamResponseResultProcessor.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/StreamResponseResultProcessor.java?rev=991267&r1=991266&r2=991267&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/StreamResponseResultProcessor.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/StreamResponseResultProcessor.java Tue Aug 31 17:27:21 2010
@@ -1,10 +1,10 @@
-// Copyright 2007, 2008, 2009 The Apache Software Foundation
+// Copyright 2007, 2008, 2009, 2010 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
-//     http://www.apache.org/licenses/LICENSE-2.0
+// http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
 // distributed under the License is distributed on an "AS IS" BASIS,
@@ -14,33 +14,27 @@
 
 package org.apache.tapestry5.internal.services;
 
+import java.io.BufferedInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
 import org.apache.tapestry5.StreamResponse;
-import org.apache.tapestry5.internal.InternalConstants;
 import org.apache.tapestry5.internal.TapestryInternalUtils;
 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
 import org.apache.tapestry5.services.ComponentEventResultProcessor;
-import org.apache.tapestry5.services.Request;
 import org.apache.tapestry5.services.Response;
 
-import java.io.BufferedInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
 public class StreamResponseResultProcessor implements ComponentEventResultProcessor<StreamResponse>
 {
-    private final Request request;
-
     private final Response response;
 
-    public StreamResponseResultProcessor(Request request, Response response)
+    public StreamResponseResultProcessor(Response response)
     {
         this.response = response;
-        this.request = request;
     }
 
-    public void processResultValue(StreamResponse streamResponse)
-            throws IOException
+    public void processResultValue(StreamResponse streamResponse) throws IOException
     {
         OutputStream os = null;
         InputStream is = null;
@@ -49,7 +43,7 @@ public class StreamResponseResultProcess
         // if they want to compress the result, they can add their own GZIPOutputStream to
         // their pipeline.
 
-        request.setAttribute(InternalConstants.SUPPRESS_COMPRESSION, true);
+        response.disableCompression();
 
         streamResponse.prepareResponse(response);
 

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/StackAssetRequestHandler.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/StackAssetRequestHandler.java?rev=991267&r1=991266&r2=991267&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/StackAssetRequestHandler.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/StackAssetRequestHandler.java Tue Aug 31 17:27:21 2010
@@ -92,10 +92,9 @@ public class StackAssetRequestHandler im
         if (productionMode)
             response.setDateHeader("Expires", lastModified + InternalConstants.TEN_YEARS);
 
-        response.setContentLength(cachedStream.size());
+        response.disableCompression();
 
-        // Inform the upper layers that we are controlled compression here.
-        request.setAttribute(InternalConstants.SUPPRESS_COMPRESSION, true);
+        response.setContentLength(cachedStream.size());
 
         if (compress)
             response.setHeader(InternalConstants.CONTENT_ENCODING_HEADER, InternalConstants.GZIP_CONTENT_ENCODING);

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/test/TestableResponseImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/test/TestableResponseImpl.java?rev=991267&r1=991266&r2=991267&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/test/TestableResponseImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/test/TestableResponseImpl.java Tue Aug 31 17:27:21 2010
@@ -1,10 +1,10 @@
-// Copyright 2007, 2008, 2009 The Apache Software Foundation
+// Copyright 2007, 2008, 2009, 2010 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
-//     http://www.apache.org/licenses/LICENSE-2.0
+// http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
 // distributed under the License is distributed on an "AS IS" BASIS,
@@ -125,4 +125,9 @@ public class TestableResponseImpl implem
     {
         renderedDocument = document;
     }
+
+    public void disableCompression()
+    {
+    }
+
 }

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/Request.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/Request.java?rev=991267&r1=991266&r2=991267&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/Request.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/Request.java Tue Aug 31 17:27:21 2010
@@ -162,7 +162,7 @@ public interface Request
      * 
      * @return a string specifying the name of the method with which this request was made
      */
-    public String getMethod();
+    String getMethod();
 
     /**
      * Returns the Internet Protocol (IP) port number of the interface
@@ -171,5 +171,5 @@ public interface Request
      * @return an integer specifying the port number
      * @since 5.2.0
      */
-    public int getLocalPort();
+    int getLocalPort();
 }

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/Response.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/Response.java?rev=991267&r1=991266&r2=991267&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/Response.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/Response.java Tue Aug 31 17:27:21 2010
@@ -1,10 +1,10 @@
-// Copyright 2006, 2007, 2008 The Apache Software Foundation
+// Copyright 2006, 2007, 2008, 2010 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
-//     http://www.apache.org/licenses/LICENSE-2.0
+// http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
 // distributed under the License is distributed on an "AS IS" BASIS,
@@ -31,41 +31,46 @@ public interface Response
 {
     /**
      * Returns a PrintWriter object to which output may be sent. Invoking flush() on the writer will commit the output.
-     *
-     * @param contentType the MIME content type for the output, typically "text/html"
+     * 
+     * @param contentType
+     *            the MIME content type for the output, typically "text/html"
      */
     PrintWriter getPrintWriter(String contentType) throws IOException;
 
     /**
      * Returns an OutputStream to which byte-oriented output may be sent. Invoking flush() on the stream will commit the
      * output.
-     *
-     * @param contentType the MIME content type for the output, often "application/octet-stream" or "text/plain" or one
-     *                    of several others
+     * 
+     * @param contentType
+     *            the MIME content type for the output, often "application/octet-stream" or "text/plain" or one
+     *            of several others
      */
     OutputStream getOutputStream(String contentType) throws IOException;
 
     /**
      * Sends a redirect to the client.
-     *
-     * @param URL full or partial (relative) URL to send to the client
+     * 
+     * @param URL
+     *            full or partial (relative) URL to send to the client
      * @see #encodeRedirectURL(String)
      */
     void sendRedirect(String URL) throws IOException;
 
     /**
      * Sends a redirect to a link.
-     *
-     * @param link link to redirect to.
+     * 
+     * @param link
+     *            link to redirect to.
      */
     void sendRedirect(Link link) throws IOException;
 
     /**
-     * Sets the status code for this response.  This method is used to set the return status code when there is no error
-     * (for example, for the status codes SC_OK or SC_MOVED_TEMPORARILY).  If there is an error, and the caller wishes
+     * Sets the status code for this response. This method is used to set the return status code when there is no error
+     * (for example, for the status codes SC_OK or SC_MOVED_TEMPORARILY). If there is an error, and the caller wishes
      * to invoke an error-page defined in the web applicaion, the <code>sendError</code> method should be used instead.
-     *
-     * @param sc the status code
+     * 
+     * @param sc
+     *            the status code
      */
     public void setStatus(int sc);
 
@@ -78,52 +83,63 @@ public interface Response
      * <p/>
      * If the response has already been committed, this method throws an IllegalStateException. After using this method,
      * the response should be considered to be committed and should not be written to.
-     *
-     * @param sc      the error status code
-     * @param message the descriptive message
-     * @throws IOException           If an input or output exception occurs
-     * @throws IllegalStateException If the response was committed
+     * 
+     * @param sc
+     *            the error status code
+     * @param message
+     *            the descriptive message
+     * @throws IOException
+     *             If an input or output exception occurs
+     * @throws IllegalStateException
+     *             If the response was committed
      */
     void sendError(int sc, String message) throws IOException;
 
     /**
      * Sets the length of the content body in the response; this method sets the HTTP Content-Length header.
-     *
-     * @param length the length of the content
+     * 
+     * @param length
+     *            the length of the content
      */
     void setContentLength(int length);
 
     /**
      * Sets a response header with the given name and date-value. The date is specified in terms of milliseconds since
      * the epoch. If the header had already been set, the new value overwrites the previous one.
-     *
-     * @param name the name of the header to set
-     * @param date the assigned date value
+     * 
+     * @param name
+     *            the name of the header to set
+     * @param date
+     *            the assigned date value
      */
     void setDateHeader(String name, long date);
 
     /**
      * Sets a response header with the given name and value. If the header had already been set, the new value
      * overwrites the previous one.
-     *
-     * @param name  the name of the header to set
-     * @param value the assigned value
+     * 
+     * @param name
+     *            the name of the header to set
+     * @param value
+     *            the assigned value
      */
     void setHeader(String name, String value);
 
     /**
      * Sets a response header with the given name and integer value. If the header had already been set, the new value
      * overwrites the previous one.
-     *
-     * @param name  the name of the header to set
-     * @param value the assigned integer value
+     * 
+     * @param name
+     *            the name of the header to set
+     * @param value
+     *            the assigned integer value
      */
     void setIntHeader(String name, int value);
 
     /**
      * Encodes the URL, ensuring that a session id is included (if a session exists, and as necessary depending on the
      * client browser's use of cookies).
-     *
+     * 
      * @param URL
      * @return the same URL or a different one with additional information to track the user session
      */
@@ -132,7 +148,7 @@ public interface Response
     /**
      * Encodes the URL for use as a redirect, ensuring that a session id is included (if a session exists, and as
      * necessary depending on the client browser's use of cookies).
-     *
+     * 
      * @param URL
      * @return the same URL or a different one with additional information to track the user session
      */
@@ -140,8 +156,15 @@ public interface Response
 
     /**
      * Returns true if the response has already been sent, either as a redirect or as a stream of content.
-     *
+     * 
      * @return true if response already sent
      */
     boolean isCommitted();
+
+    /**
+     * Invoked to indicate that the response content is either already compressed, or is not compressable.
+     * 
+     * @since 5.2.1
+     */
+    void disableCompression();
 }

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java?rev=991267&r1=991266&r2=991267&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java Tue Aug 31 17:27:21 2010
@@ -257,7 +257,7 @@ public final class TapestryModule
             requestGlobals.storeServletRequestResponse(servletRequest, servletResponse);
 
             Request request = new RequestImpl(servletRequest, applicationCharset, analyzer);
-            Response response = new ResponseImpl(servletResponse);
+            Response response = new ResponseImpl(servletRequest, servletResponse);
 
             // TAP5-257: Make sure that the "initial guess" for request/response
             // is available, even if

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/util/ResponseWrapper.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/util/ResponseWrapper.java?rev=991267&r1=991266&r2=991267&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/util/ResponseWrapper.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/util/ResponseWrapper.java Tue Aug 31 17:27:21 2010
@@ -4,7 +4,7 @@
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
-//     http://www.apache.org/licenses/LICENSE-2.0
+// http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
 // distributed under the License is distributed on an "AS IS" BASIS,
@@ -99,4 +99,9 @@ public class ResponseWrapper implements 
     {
         return response.isCommitted();
     }
+
+    public void disableCompression()
+    {
+        response.disableCompression();
+    }
 }

Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ResourceStreamerImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ResourceStreamerImplTest.java?rev=991267&r1=991266&r2=991267&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ResourceStreamerImplTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ResourceStreamerImplTest.java Tue Aug 31 17:27:21 2010
@@ -1,4 +1,4 @@
-// Copyright 2007, 2008, 2009 The Apache Software Foundation
+// Copyright 2007, 2008, 2009, 2010 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -60,7 +60,7 @@ public class ResourceStreamerImplTest ex
 
         replay();
 
-        Response response = new ResponseImpl(hsResponse);
+        Response response = new ResponseImpl(hsRequest, hsResponse);
         ResourceStreamer streamer = getService(ResourceStreamer.class);
         RequestGlobals globals = getService(RequestGlobals.class);