Author: mgrigorov
Date: Mon Nov 14 13:00:31 2011
New Revision: 1201688

URL: http://svn.apache.org/viewvc?rev=1201688&view=rev
Log:
WICKET-4225 Allow setting cache duration for DownloadLink


Modified:
    
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/link/DownloadLink.java
    
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/handler/resource/ResourceStreamRequestHandler.java
    
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/ResourceStreamResource.java
    
wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/linkomatic/Home.html
    
wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/linkomatic/Home.java

Modified: 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/link/DownloadLink.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/link/DownloadLink.java?rev=1201688&r1=1201687&r2=1201688&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/link/DownloadLink.java
 (original)
+++ 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/link/DownloadLink.java
 Mon Nov 14 13:00:31 2011
@@ -24,11 +24,13 @@ import org.apache.wicket.request.IReques
 import org.apache.wicket.request.UrlEncoder;
 import org.apache.wicket.request.handler.resource.ResourceStreamRequestHandler;
 import org.apache.wicket.request.resource.ContentDisposition;
+import org.apache.wicket.settings.IResourceSettings;
 import org.apache.wicket.util.file.Files;
 import org.apache.wicket.util.lang.Args;
 import org.apache.wicket.util.resource.FileResourceStream;
 import org.apache.wicket.util.resource.IResourceStream;
 import org.apache.wicket.util.string.Strings;
+import org.apache.wicket.util.time.Duration;
 
 /**
  * A link that streams a file to the client. When clicked this link will 
prompt the save as dialog
@@ -56,6 +58,13 @@ public class DownloadLink extends Link<F
         */
        private boolean deleteAfter;
 
+       /**
+        * The duration for which the file resource should be cached by the 
browser.
+        * <p>
+        * By default is {@code null} and {@link 
IResourceSettings#getDefaultCacheDuration()} is used.
+        * </p>
+        */
+       private Duration cacheDuration;
 
        /**
         * Constructor. File name used will be the result of 
<code>file.getName()</code>
@@ -162,7 +171,9 @@ public class DownloadLink extends Link<F
                                                Files.remove(file);
                                        }
                                }
-                       
}.setFileName(fileName).setContentDisposition(ContentDisposition.ATTACHMENT));
+                       }.setFileName(fileName)
+                               
.setContentDisposition(ContentDisposition.ATTACHMENT)
+                               .setCacheDuration(cacheDuration));
        }
 
        /**
@@ -182,4 +193,19 @@ public class DownloadLink extends Link<F
 
                return this;
        }
+
+       /**
+        * Sets the duration for which the file resource should be cached by 
the client.
+        * 
+        * @param duration
+        *            the duration to cache
+        * @return this component.
+        */
+       public DownloadLink setCacheDuration(final Duration duration)
+       {
+               cacheDuration = duration;
+               return this;
+       }
+
+
 }

Modified: 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/handler/resource/ResourceStreamRequestHandler.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/handler/resource/ResourceStreamRequestHandler.java?rev=1201688&r1=1201687&r2=1201688&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/handler/resource/ResourceStreamRequestHandler.java
 (original)
+++ 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/handler/resource/ResourceStreamRequestHandler.java
 Mon Nov 14 13:00:31 2011
@@ -23,9 +23,11 @@ import org.apache.wicket.request.handler
 import org.apache.wicket.request.resource.ContentDisposition;
 import org.apache.wicket.request.resource.IResource.Attributes;
 import org.apache.wicket.request.resource.ResourceStreamResource;
+import org.apache.wicket.settings.IResourceSettings;
 import org.apache.wicket.util.lang.Args;
 import org.apache.wicket.util.resource.IResourceStream;
 import org.apache.wicket.util.string.Strings;
+import org.apache.wicket.util.time.Duration;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -46,6 +48,14 @@ public class ResourceStreamRequestHandle
        private String fileName;
        private ContentDisposition contentDisposition;
 
+       /**
+        * The duration fow which the resource will be cached by the browser.
+        * <p>
+        * By default is {@code null} and {@link 
IResourceSettings#getDefaultCacheDuration()} is used.
+        * </p>
+        */
+       private Duration cacheDuration;
+
        /** the resource stream for the response. */
        private final IResourceStream resourceStream;
 
@@ -131,6 +141,11 @@ public class ResourceStreamRequestHandle
                                : ContentDisposition.ATTACHMENT);
                }
 
+               if (cacheDuration != null)
+               {
+                       resource.setCacheDuration(cacheDuration);
+               }
+
                resource.respond(attributes);
        }
 
@@ -211,4 +226,24 @@ public class ResourceStreamRequestHandle
                this.contentDisposition = contentDisposition;
                return this;
        }
+
+       /**
+        * @return the duration for which the resource will be cached by the 
browser
+        */
+       public Duration getCacheDuration()
+       {
+               return cacheDuration;
+       }
+
+       /**
+        * @param cacheDuration
+        *            the duration for which the resource will be cached by the 
browser
+        * @return this component
+        */
+       public ResourceStreamRequestHandler setCacheDuration(Duration 
cacheDuration)
+       {
+               this.cacheDuration = cacheDuration;
+               return this;
+       }
+
 }

Modified: 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/ResourceStreamResource.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/ResourceStreamResource.java?rev=1201688&r1=1201687&r2=1201688&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/ResourceStreamResource.java
 (original)
+++ 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/ResourceStreamResource.java
 Mon Nov 14 13:00:31 2011
@@ -27,6 +27,7 @@ import org.apache.wicket.util.lang.Bytes
 import org.apache.wicket.util.resource.IResourceStream;
 import org.apache.wicket.util.resource.IResourceStreamWriter;
 import org.apache.wicket.util.resource.ResourceStreamNotFoundException;
+import org.apache.wicket.util.time.Duration;
 import org.apache.wicket.util.time.Time;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -47,6 +48,8 @@ public class ResourceStreamResource exte
        private String textEncoding;
        private String mimeType;
 
+       private Duration cacheDuration;
+
        /**
         * Construct.
         * 
@@ -88,6 +91,25 @@ public class ResourceStreamResource exte
                return this;
        }
 
+       /**
+        * @return the duration for which the resource will be cached by the 
browser
+        */
+       public Duration getCacheDuration()
+       {
+               return cacheDuration;
+       }
+
+       /**
+        * @param cacheDuration
+        *            the duration for which the resource will be cached by the 
browser
+        * @return this component
+        */
+       public ResourceStreamResource setCacheDuration(Duration cacheDuration)
+       {
+               this.cacheDuration = cacheDuration;
+               return this;
+       }
+
        @Override
        protected ResourceResponse newResourceResponse(Attributes attributes)
        {
@@ -135,6 +157,11 @@ public class ResourceStreamResource exte
                        data.setContentType(contentType);
                        data.setTextEncoding(textEncoding);
 
+                       if (cacheDuration != null)
+                       {
+                               data.setCacheDuration(cacheDuration);
+                       }
+
                        if (stream instanceof IResourceStreamWriter)
                        {
                                data.setWriteCallback(new WriteCallback()

Modified: 
wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/linkomatic/Home.html
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/linkomatic/Home.html?rev=1201688&r1=1201687&r2=1201688&view=diff
==============================================================================
--- 
wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/linkomatic/Home.html
 (original)
+++ 
wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/linkomatic/Home.html
 Mon Nov 14 13:00:31 2011
@@ -41,6 +41,8 @@
     </p><p>
     <a wicket:id = "cancelButtonLink">cancel button</a>
     </p><p>
+    <a wicket:id = "downloadLink">Download button</a>
+    </p><p>
        <form wicket:id="redirectForm">
                <input wicket:id="redirectUrl" type="text" size="50" /><input 
type="submit" value="go"/>
        </form>

Modified: 
wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/linkomatic/Home.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/linkomatic/Home.java?rev=1201688&r1=1201687&r2=1201688&view=diff
==============================================================================
--- 
wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/linkomatic/Home.java
 (original)
+++ 
wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/linkomatic/Home.java
 Mon Nov 14 13:00:31 2011
@@ -16,6 +16,11 @@
  */
 package org.apache.wicket.examples.linkomatic;
 
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+
 import org.apache.wicket.Component;
 import org.apache.wicket.examples.WicketExamplePage;
 import org.apache.wicket.markup.html.basic.Label;
@@ -24,6 +29,7 @@ import org.apache.wicket.markup.html.for
 import org.apache.wicket.markup.html.image.Image;
 import org.apache.wicket.markup.html.link.BookmarkablePageLink;
 import org.apache.wicket.markup.html.link.ClientSideImageMap;
+import org.apache.wicket.markup.html.link.DownloadLink;
 import org.apache.wicket.markup.html.link.ExternalLink;
 import org.apache.wicket.markup.html.link.Link;
 import org.apache.wicket.markup.html.link.PopupSettings;
@@ -31,11 +37,14 @@ import org.apache.wicket.markup.html.lin
 import org.apache.wicket.markup.html.pages.RedirectPage;
 import org.apache.wicket.markup.html.panel.FeedbackPanel;
 import org.apache.wicket.markup.parser.filter.RelativePathPrefixHandler;
+import org.apache.wicket.model.AbstractReadOnlyModel;
 import org.apache.wicket.model.CompoundPropertyModel;
 import org.apache.wicket.model.Model;
 import org.apache.wicket.model.PropertyModel;
 import org.apache.wicket.request.resource.PackageResourceReference;
 import org.apache.wicket.request.resource.SharedResourceReference;
+import org.apache.wicket.util.file.Files;
+import org.apache.wicket.util.time.Duration;
 
 
 /**
@@ -140,7 +149,32 @@ public class Home extends WicketExampleP
                        "Click this link to go to Google in a 
popup").setPopupSettings(googlePopupSettings));
 
                // Shared resource link
-               add(new ResourceLink("cancelButtonLink", new 
SharedResourceReference("cancelButton")));
+               add(new ResourceLink<Void>("cancelButtonLink", new 
SharedResourceReference("cancelButton")));
+
+               add(new DownloadLink("downloadLink", new 
AbstractReadOnlyModel<File>()
+               {
+                       private static final long serialVersionUID = 1L;
+
+                       @Override
+                       public File getObject()
+                       {
+                               File tempFile;
+                               try
+                               {
+                                       tempFile = 
File.createTempFile("wicket-examples-download-link--", ".tmp");
+
+                                       InputStream data = new 
ByteArrayInputStream("some data".getBytes());
+                                       Files.writeTo(tempFile, data);
+
+                               }
+                               catch (IOException e)
+                               {
+                                       throw new RuntimeException(e);
+                               }
+
+                               return tempFile;
+                       }
+               
}).setCacheDuration(Duration.NONE).setDeleteAfterDownload(true));
 
                // redirect to external url form
                FeedbackPanel feedbackPanel = new FeedbackPanel("feedback");


Reply via email to