Author: ivaynberg
Date: Wed Nov 16 19:23:40 2011
New Revision: 1202848

URL: http://svn.apache.org/viewvc?rev=1202848&view=rev
Log:
WICKET-4233

Modified:
    
wicket/trunk/wicket-request/src/main/java/org/apache/wicket/request/Response.java

Modified: 
wicket/trunk/wicket-request/src/main/java/org/apache/wicket/request/Response.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-request/src/main/java/org/apache/wicket/request/Response.java?rev=1202848&r1=1202847&r2=1202848&view=diff
==============================================================================
--- 
wicket/trunk/wicket-request/src/main/java/org/apache/wicket/request/Response.java
 (original)
+++ 
wicket/trunk/wicket-request/src/main/java/org/apache/wicket/request/Response.java
 Wed Nov 16 19:23:40 2011
@@ -16,6 +16,11 @@
  */
 package org.apache.wicket.request;
 
+import java.io.IOException;
+import java.io.OutputStream;
+
+import org.apache.wicket.util.lang.Args;
+
 /**
  * Abstract base class for different implementations of response writing.
  * <p>
@@ -102,4 +107,60 @@ public abstract class Response
         * @return low-level container response object, or {@code null} if none
         */
        public abstract Object getContainerResponse();
+
+       /**
+        * Returns an {@link OutputStream} suitable for writing binary data in 
the response. The servlet
+        * container does not encode the binary data.
+        * 
+        * <p>
+        * Calling flush() on the OutputStream commits the response.
+        * </p>
+        * <p>
+        * This method returns an output stream that delegates to {@link 
#write(byte[])},
+        * {@link #write(byte[], int, int)}, and {@link #close()} methods of 
this response instance
+        * </p>
+        * 
+        * @return output stream
+        */
+       public OutputStream getOutputStream()
+       {
+               return new StreamAdapter(this);
+       }
+
+       private static class StreamAdapter extends OutputStream
+       {
+               private final Response response;
+
+               public StreamAdapter(Response response)
+               {
+                       Args.notNull(response, "response");
+                       this.response = response;
+               }
+
+               @Override
+               public void write(int b) throws IOException
+               {
+                       response.write(new byte[] { (byte)b });
+               }
+
+               @Override
+               public void write(byte[] b) throws IOException
+               {
+                       response.write(b);
+               }
+
+               @Override
+               public void write(byte[] b, int off, int len) throws IOException
+               {
+                       response.write(b, off, len);
+               }
+
+               @Override
+               public void close() throws IOException
+               {
+                       super.close();
+                       response.close();
+               }
+       }
+
 }


Reply via email to