once again, why not Duration instead of long?

-igor

On Sat, Sep 11, 2010 at 3:32 AM,  <[email protected]> wrote:
> Author: pete
> Date: Sat Sep 11 10:32:04 2010
> New Revision: 996115
>
> URL: http://svn.apache.org/viewvc?rev=996115&view=rev
> Log:
> helper method to utilize caching easier
>
> Modified:
>    
> wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/RequestUtils.java
>
> Modified: 
> wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/RequestUtils.java
> URL: 
> http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/RequestUtils.java?rev=996115&r1=996114&r2=996115&view=diff
> ==============================================================================
> --- 
> wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/RequestUtils.java
>  (original)
> +++ 
> wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/RequestUtils.java
>  Sat Sep 11 10:32:04 2010
> @@ -28,6 +28,7 @@ import org.apache.wicket.request.UrlDeco
>  import org.apache.wicket.request.cycle.RequestCycle;
>  import org.apache.wicket.request.http.WebResponse;
>  import org.apache.wicket.request.mapper.parameter.PageParameters;
> +import org.apache.wicket.util.lang.Args;
>  import org.apache.wicket.util.string.Strings;
>
>  /**
> @@ -35,6 +36,8 @@ import org.apache.wicket.util.string.Str
>  */
>  public final class RequestUtils
>  {
> +       public static final long MAX_CACHE_DURATION = 60 * 60 * 24 * 365; // 
> one year, maximum recommended cache duration
> +
>        /**
>         * Decode the provided queryString as a series of key/ value pairs and 
> set them in the provided
>         * value map.
> @@ -260,9 +263,76 @@ public final class RequestUtils
>         */
>        public static void disableCaching(WebResponse response)
>        {
> +               Args.notNull(response, "response");
>                response.setDateHeader("Date", System.currentTimeMillis());
>                response.setDateHeader("Expires", 0);
>                response.setHeader("Pragma", "no-cache");
>                response.setHeader("Cache-Control", "no-cache");
>        }
> +
> +       /**
> +        * enable caching for the given response
> +        * <p/>
> +        * The [duration] is the maximum time in seconds until the response 
> is invalidated from the cache. The
> +        * maximum duration should not exceed one year, based on
> +        * <a 
> href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html";>RFC-2616</a>.
> +        * <p/>
> +        * The [cachePublic] flag will let you control if the response may be 
> cached
> +        * by public caches or just by the client itself. This sets the http 
> response header
> +        *
> +        * <ul>
> +        * <li><code>[Cache-Control: public]</code> if <code>cachePublic = 
> true</code></li>
> +        * <li><code>[Cache-Control: private]</code> if <code>cachePublic = 
> false</code></li>
> +        * </ul>
> +        * <p/>
> +        * Details on <code>Cache-Control</code> header can be found
> +        *  <a 
> href="http://palisade.plynt.com/issues/2008Jul/cache-control-attributes";>here</a>
> +        * or in <a 
> href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html";>RFC-2616</a>.
> +        * <p/>
> +        * Choose <code>cachePublic = false</code> wisely since setting 
> <code>Cache-Control: private</code>
> +        * may cause trouble with some versions of Firefox which will not 
> cache SSL content at all. More details
> +        * on this Firefox issue can be found <a 
> href="http://blog.pluron.com/2008/07/why-you-should.html";>here</a>.
> +        * <p/>
> +        * Never set <code>cachePublic=true</code> when the response is 
> confidential or client-specific. You
> +        * don't want to see your sensitive private data on some public proxy.
> +        * <p/>
> +        * Unless the response really is confidential / top-secret or 
> client-specific the general advice is
> +        * to always prefer <code>cachePublic=true</code> for best network 
> performance.
> +        *
> +        * @param response
> +        *            response that should be cacheable
> +        * @param duration
> +        *            duration in seconds that the response may be cached
> +        * @param cachePublic
> +        *            If <code>true</code> all caches are allowed to cache 
> the response.
> +        *            If <code>false</code> only the client may cache the 
> response (if at all).
> +        *
> +        * @see RequestUtils#MAX_CACHE_DURATION
> +        */
> +       public static void enableCaching(WebResponse response, long duration, 
> boolean cachePublic)
> +       {
> +               Args.notNull(response, "response");
> +
> +               if(duration < 0)
> +                       throw new IllegalArgumentException("duration must be 
> a positive value");
> +
> +               // Get current time
> +               long now = System.currentTimeMillis();
> +
> +               // Time of message generation
> +               response.setDateHeader("Date", now);
> +
> +               // Time for cache expiry = now + duration
> +               response.setDateHeader("Expires", now + (duration * 1000L));
> +
> +               // Set caching scope
> +               String scope = cachePublic ? "public" : "private";
> +
> +               // Enable caching and set max age
> +               response.setHeader("Cache-Control", scope + ", max-age=" + 
> duration);
> +
> +               // Let caches distinguish between compressed and uncompressed
> +               // versions of the resource so they can serve them properly
> +               response.setHeader("Vary", "Accept-Encoding");
> +       }
>  }
>
>
>

Reply via email to