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