You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2011/09/14 13:40:01 UTC

svn commit: r1170547 - in /wicket/trunk: wicket-core/src/main/java/org/apache/wicket/ajax/ wicket-core/src/main/java/org/apache/wicket/mock/ wicket-core/src/main/java/org/apache/wicket/protocol/http/ wicket-core/src/main/java/org/apache/wicket/protocol...

Author: mgrigorov
Date: Wed Sep 14 11:40:01 2011
New Revision: 1170547

URL: http://svn.apache.org/viewvc?rev=1170547&view=rev
Log:
WICKET-4052 Add org.apache.wicket.request.Response.write(byte[], int, int) to make it easier to write buffered data to the web response


Modified:
    wicket/trunk/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java
    wicket/trunk/wicket-core/src/main/java/org/apache/wicket/mock/MockWebResponse.java
    wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/BufferedWebResponse.java
    wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/HeaderBufferingWebResponse.java
    wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebResponse.java
    wicket/trunk/wicket-core/src/main/java/org/apache/wicket/response/ByteArrayResponse.java
    wicket/trunk/wicket-core/src/main/java/org/apache/wicket/response/NullResponse.java
    wicket/trunk/wicket-core/src/main/java/org/apache/wicket/response/StringResponse.java
    wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/cycle/BaseRequestHandlerStackTest.java
    wicket/trunk/wicket-request/src/main/java/org/apache/wicket/request/Response.java

Modified: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java?rev=1170547&r1=1170546&r2=1170547&view=diff
==============================================================================
--- wicket/trunk/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java (original)
+++ wicket/trunk/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java Wed Sep 14 11:40:01 2011
@@ -226,6 +226,12 @@ public class AjaxRequestTarget implement
 		}
 
 		@Override
+		public void write(byte[] array, int offset, int length)
+		{
+			throw new UnsupportedOperationException("Cannot write binary data.");
+		}
+
+		@Override
 		public Object getContainerResponse()
 		{
 			return originalResponse.getContainerResponse();

Modified: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/mock/MockWebResponse.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/mock/MockWebResponse.java?rev=1170547&r1=1170546&r2=1170547&view=diff
==============================================================================
--- wicket/trunk/wicket-core/src/main/java/org/apache/wicket/mock/MockWebResponse.java (original)
+++ wicket/trunk/wicket-core/src/main/java/org/apache/wicket/mock/MockWebResponse.java Wed Sep 14 11:40:01 2011
@@ -296,6 +296,21 @@ public class MockWebResponse extends Web
 		}
 	}
 
+	@Override
+	public void write(byte[] array, int offset, int length)
+	{
+		if (textResponse != null)
+		{
+			throw new IllegalStateException("Text response has already been initiated.");
+		}
+		if (binaryResponse == null)
+		{
+			binaryResponse = new ByteArrayOutputStream();
+		}
+
+		binaryResponse.write(array, offset, length);
+	}
+
 	/**
 	 * @return binary response
 	 */

Modified: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/BufferedWebResponse.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/BufferedWebResponse.java?rev=1170547&r1=1170546&r2=1170547&view=diff
==============================================================================
--- wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/BufferedWebResponse.java (original)
+++ wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/BufferedWebResponse.java Wed Sep 14 11:40:01 2011
@@ -190,6 +190,18 @@ public class BufferedWebResponse extends
 			}
 		}
 
+		public void append(byte data[], int offset, int length)
+		{
+			try
+			{
+				stream.write(data, offset, length);
+			}
+			catch (Exception e)
+			{
+				throw new WicketRuntimeException(e);
+			}
+		}
+
 		@Override
 		protected void invoke(WebResponse response)
 		{
@@ -518,6 +530,22 @@ public class BufferedWebResponse extends
 	}
 
 	@Override
+	public void write(byte[] array, int offset, int length)
+	{
+		if (charSequenceAction != null)
+		{
+			throw new IllegalStateException(
+				"Can't call write(byte[]) after write(CharSequence) has been called.");
+		}
+		if (dataAction == null)
+		{
+			dataAction = new WriteDataAction();
+			actions.add(dataAction);
+		}
+		dataAction.append(array, offset, length);
+	}
+
+	@Override
 	public void sendRedirect(String url)
 	{
 		actions.add(new SendRedirectAction(url));
@@ -630,5 +658,4 @@ public class BufferedWebResponse extends
 	{
 		return originalResponse.getContainerResponse();
 	}
-
 }

Modified: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/HeaderBufferingWebResponse.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/HeaderBufferingWebResponse.java?rev=1170547&r1=1170546&r2=1170547&view=diff
==============================================================================
--- wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/HeaderBufferingWebResponse.java (original)
+++ wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/HeaderBufferingWebResponse.java Wed Sep 14 11:40:01 2011
@@ -181,6 +181,14 @@ class HeaderBufferingWebResponse extends
 		originalResponse.write(array);
 	}
 
+
+	@Override
+	public void write(byte[] array, int offset, int length)
+	{
+		writeBuffered();
+		originalResponse.write(array, offset, length);
+	}
+
 	@Override
 	public void reset()
 	{

Modified: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebResponse.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebResponse.java?rev=1170547&r1=1170546&r2=1170547&view=diff
==============================================================================
--- wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebResponse.java (original)
+++ wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebResponse.java Wed Sep 14 11:40:01 2011
@@ -128,6 +128,20 @@ public class ServletWebResponse extends 
 	}
 
 	@Override
+	public void write(byte[] array, int offset, int length)
+	{
+		try
+		{
+			httpServletResponse.getOutputStream().write(array, offset, length);
+		}
+		catch (IOException e)
+		{
+			throw new ResponseIOException(e);
+		}
+	}
+
+
+	@Override
 	public void setStatus(int sc)
 	{
 		httpServletResponse.setStatus(sc);

Modified: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/response/ByteArrayResponse.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/response/ByteArrayResponse.java?rev=1170547&r1=1170546&r2=1170547&view=diff
==============================================================================
--- wicket/trunk/wicket-core/src/main/java/org/apache/wicket/response/ByteArrayResponse.java (original)
+++ wicket/trunk/wicket-core/src/main/java/org/apache/wicket/response/ByteArrayResponse.java Wed Sep 14 11:40:01 2011
@@ -104,6 +104,20 @@ public class ByteArrayResponse extends R
 	}
 
 	@Override
+	public void write(byte[] array, int offset, int length)
+	{
+		try
+		{
+			bytes.write(array, offset, length);
+		}
+		catch (Exception e)
+		{
+			throw new WicketRuntimeException("Cannot write into internal byte stream", e);
+		}
+
+	}
+
+	@Override
 	public String encodeURL(CharSequence url)
 	{
 		if (original != null)

Modified: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/response/NullResponse.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/response/NullResponse.java?rev=1170547&r1=1170546&r2=1170547&view=diff
==============================================================================
--- wicket/trunk/wicket-core/src/main/java/org/apache/wicket/response/NullResponse.java (original)
+++ wicket/trunk/wicket-core/src/main/java/org/apache/wicket/response/NullResponse.java Wed Sep 14 11:40:01 2011
@@ -59,6 +59,11 @@ public class NullResponse extends Respon
 	}
 
 	@Override
+	public void write(byte[] array, int offset, int length)
+	{
+	}
+
+	@Override
 	public String encodeURL(CharSequence url)
 	{
 		return url != null ? url.toString() : null;

Modified: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/response/StringResponse.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/response/StringResponse.java?rev=1170547&r1=1170546&r2=1170547&view=diff
==============================================================================
--- wicket/trunk/wicket-core/src/main/java/org/apache/wicket/response/StringResponse.java (original)
+++ wicket/trunk/wicket-core/src/main/java/org/apache/wicket/response/StringResponse.java Wed Sep 14 11:40:01 2011
@@ -76,9 +76,6 @@ public class StringResponse extends Resp
 		return out;
 	}
 
-	/**
-	 * @see org.apache.wicket.request.Response#getOutputStream()
-	 */
 	@Override
 	public void write(byte[] array)
 	{
@@ -86,6 +83,12 @@ public class StringResponse extends Resp
 	}
 
 	@Override
+	public void write(byte[] array, int offset, int length)
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	@Override
 	public String encodeURL(CharSequence url)
 	{
 		return url != null ? url.toString() : null;

Modified: wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/cycle/BaseRequestHandlerStackTest.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/cycle/BaseRequestHandlerStackTest.java?rev=1170547&r1=1170546&r2=1170547&view=diff
==============================================================================
--- wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/cycle/BaseRequestHandlerStackTest.java (original)
+++ wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/cycle/BaseRequestHandlerStackTest.java Wed Sep 14 11:40:01 2011
@@ -38,6 +38,11 @@ public abstract class BaseRequestHandler
 			}
 
 			@Override
+			public void write(byte[] array, int offset, int length)
+			{
+			}
+
+			@Override
 			public void write(CharSequence sequence)
 			{
 			}

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=1170547&r1=1170546&r2=1170547&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 Sep 14 11:40:01 2011
@@ -40,12 +40,36 @@ public abstract class Response
 	 * Writes the buffer to output.
 	 * 
 	 * @param array
+	 *            the data.
 	 * @throws IllegalStateException
 	 *             if {@link #write(CharSequence)} has already been called on this instance
 	 */
 	public abstract void write(byte[] array);
 
 	/**
+	 * Writes the buffer to output.
+	 * 
+	 * @param array
+	 *            the data.
+	 * @param offset
+	 *            the start offset in the data.
+	 * @param length
+	 *            the number of bytes to write.
+	 * 
+	 * @throws IllegalStateException
+	 *             if {@link #write(CharSequence)} has already been called on this instance
+	 * @since 1.5.1
+	 */
+	// TODO Wicket 1.6: make it abstract like other methods in this class
+	public void write(byte[] array, int offset, int length)
+	{
+		// default impl to be able to introduce it in 1.5.x series
+		byte[] towrite = new byte[length];
+		System.arraycopy(array, offset, towrite, 0, length);
+		write(towrite);
+	}
+
+	/**
 	 * Closes the response
 	 */
 	public void close()