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