You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by jb...@apache.org on 2007/03/13 21:41:46 UTC
svn commit: r517860 - in
/incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/wicket:
markup/html/link/ request/target/resource/ util/resource/
Author: jbq
Date: Tue Mar 13 13:41:45 2007
New Revision: 517860
URL: http://svn.apache.org/viewvc?view=rev&rev=517860
Log:
WICKET-356 Detect Content-Type automatically in ResourceStreamRequestTarget
Modified:
incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/wicket/markup/html/link/DownloadLink.java
incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/wicket/request/target/resource/ResourceStreamRequestTarget.java
incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/wicket/util/resource/FileResourceStream.java
incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/wicket/util/resource/IResourceStream.java
Modified: incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/wicket/markup/html/link/DownloadLink.java
URL: http://svn.apache.org/viewvc/incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/wicket/markup/html/link/DownloadLink.java?view=diff&rev=517860&r1=517859&r2=517860
==============================================================================
--- incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/wicket/markup/html/link/DownloadLink.java (original)
+++ incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/wicket/markup/html/link/DownloadLink.java Tue Mar 13 13:41:45 2007
@@ -17,12 +17,10 @@
package wicket.markup.html.link;
import java.io.File;
-import java.io.FileInputStream;
-import wicket.IRequestTarget;
-import wicket.RequestCycle;
-import wicket.WicketRuntimeException;
-import wicket.protocol.http.WebResponse;
+import wicket.request.target.resource.ResourceStreamRequestTarget;
+import wicket.util.resource.FileResourceStream;
+import wicket.util.resource.IResourceStream;
import wicket.util.string.Strings;
/**
@@ -101,32 +99,12 @@
*/
public void onClick()
{
- getRequestCycle().setRequestTarget(new IRequestTarget()
- {
-
- public void detach(RequestCycle requestCycle)
+ IResourceStream resourceStream = new FileResourceStream(new wicket.util.file.File(file));
+ getRequestCycle().setRequestTarget(new ResourceStreamRequestTarget(resourceStream) {
+ public String getFileName()
{
- }
-
- public void respond(RequestCycle requestCycle)
- {
- WebResponse r = (WebResponse)requestCycle.getResponse();
- r.setAttachmentHeader(fileName);
-
- try
- {
- // NOTE headers must be written before the body
- r.setContentLength(file.length());
- // Set content type
- r.detectContentType(requestCycle, fileName);
- r.write(new FileInputStream(file));
- }
- catch (Exception e)
- {
- throw new WicketRuntimeException(e);
- }
+ return fileName;
}
});
}
-
}
Modified: incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/wicket/request/target/resource/ResourceStreamRequestTarget.java
URL: http://svn.apache.org/viewvc/incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/wicket/request/target/resource/ResourceStreamRequestTarget.java?view=diff&rev=517860&r1=517859&r2=517860
==============================================================================
--- incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/wicket/request/target/resource/ResourceStreamRequestTarget.java (original)
+++ incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/wicket/request/target/resource/ResourceStreamRequestTarget.java Tue Mar 13 13:41:45 2007
@@ -47,13 +47,6 @@
private final IResourceStream resourceStream;
/**
- * the response type, eg 'text/html'.
- *
- * @deprecated Removed in 2.0
- */
- private final String responseType;
-
- /**
* Construct.
*
* @param resourceStream
@@ -61,28 +54,7 @@
*/
public ResourceStreamRequestTarget(IResourceStream resourceStream)
{
- this(resourceStream, null);
- }
-
- /**
- * Construct.
- *
- * @param resourceStream
- * the resource stream for the response
- * @param responseType
- * the response type, eg 'text/html'
- * @deprecated Will be removed in 2.0. Response type can be determined from
- * resource stream
- */
- public ResourceStreamRequestTarget(IResourceStream resourceStream, String responseType)
- {
- if (resourceStream == null)
- {
- throw new IllegalArgumentException("Argument resourceStream must be not null");
- }
-
this.resourceStream = resourceStream;
- this.responseType = responseType;
}
/**
@@ -126,18 +98,6 @@
}
/**
- * Gets the response type, eg 'text/html'.
- *
- * @return the response type, eg 'text/html'
- * @deprecated Will be removed in 2.0. Response type can be determined by
- * looking at the resource stream
- */
- public final String getResponseType()
- {
- return responseType;
- }
-
- /**
* @see java.lang.Object#hashCode()
*/
public int hashCode()
@@ -158,7 +118,7 @@
// Get servlet response to use when responding with resource
final Response response = requestCycle.getResponse();
- configure(response, resourceStream);
+ configure(requestCycle, response, resourceStream);
try
{
@@ -196,20 +156,27 @@
* Configures the response, default by setting the content type and length
* and content disposition (in case the fileName property was set).
*
+ * @param requestCycle
* @param response
* the response
* @param resourceStream
* the resource stream that will be rendered
*/
- protected void configure(final Response response, final IResourceStream resourceStream)
+ protected void configure(final RequestCycle requestCycle, final Response response, final IResourceStream resourceStream)
{
- // Configure response with content type of resource
+ // Configure response with content type of resource, if available
String responseType = resourceStream.getContentType();
- if (responseType == null)
+ if (responseType != null) {
+ response.setContentType(responseType + "; charset=" + response.getCharacterEncoding());
+ }
+ else
{
- responseType = this.responseType;
+ // otherwise detect content-type automatically
+ if (getFileName() != null)
+ response.detectContentType(requestCycle, getFileName());
+ else
+ response.detectContentType(requestCycle, requestCycle.getRequest().getRelativeURL());
}
- response.setContentType(responseType + ";charset=" + response.getCharacterEncoding());
// and the content length
response.setContentLength((int)resourceStream.length());
Modified: incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/wicket/util/resource/FileResourceStream.java
URL: http://svn.apache.org/viewvc/incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/wicket/util/resource/FileResourceStream.java?view=diff&rev=517860&r1=517859&r2=517860
==============================================================================
--- incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/wicket/util/resource/FileResourceStream.java (original)
+++ incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/wicket/util/resource/FileResourceStream.java Tue Mar 13 13:41:45 2007
@@ -20,8 +20,9 @@
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
-import java.net.URLConnection;
+import wicket.protocol.http.WebResponse;
+import wicket.request.target.resource.ResourceStreamRequestTarget;
import wicket.util.file.File;
import wicket.util.time.Time;
@@ -68,12 +69,12 @@
}
/**
- * @return The content type of this resource, such as "image/jpeg" or
- * "text/html"
+ * @see IResourceStream#getContentType()
*/
public String getContentType()
{
- return URLConnection.getFileNameMap().getContentTypeFor(file.getName());
+ // Let ResourceStreamRequestTarget handle content-type automatically
+ return null;
}
/**
Modified: incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/wicket/util/resource/IResourceStream.java
URL: http://svn.apache.org/viewvc/incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/wicket/util/resource/IResourceStream.java?view=diff&rev=517860&r1=517859&r2=517860
==============================================================================
--- incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/wicket/util/resource/IResourceStream.java (original)
+++ incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/wicket/util/resource/IResourceStream.java Tue Mar 13 13:41:45 2007
@@ -21,6 +21,8 @@
import java.io.Serializable;
import java.util.Locale;
+import wicket.protocol.http.WebResponse;
+import wicket.request.target.resource.ResourceStreamRequestTarget;
import wicket.util.watch.IModifiable;
/**
@@ -44,7 +46,10 @@
* Gets the mime type of this resource
*
* @return The mime type of this resource, such as "image/jpeg" or
- * "text/html"
+ * "text/html". Return null to let
+ * {@link ResourceStreamRequestTarget} handle the Content-Type
+ * automatically
+ * @see WebResponse#detectContentType()
*/
String getContentType();