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");