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


Reply via email to