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
+        *         [EMAIL PROTECTED] ResourceStreamRequestTarget} handle the 
Content-Type
+        *         automatically
+        * @see WebResponse#detectContentType()
         */
        String getContentType();
 


Reply via email to