Author: etnu
Date: Fri Jul 10 21:15:52 2009
New Revision: 793110

URL: http://svn.apache.org/viewvc?rev=793110&view=rev
Log:
Added a method for assigning a new byte array to HttpResponse objects without 
performing another copy. This allows for distributed caches that don't use java 
serialization to rebuild objects without double parsing, as well as allowing 
for some more efficient implementation of the image resizing code. This isn't 
much of a safety concern because the byte[] of the HttpResponse objects are 
still technically mutable when using getResponseAsBytes() in any case. Given 
that java has no efficient immutable byte array, this will have to do.


Modified:
    
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpResponseBuilder.java
    
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/HttpResponseBuilderTest.java

Modified: 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpResponseBuilder.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpResponseBuilder.java?rev=793110&r1=793109&r2=793110&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpResponseBuilder.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpResponseBuilder.java
 Fri Jul 10 21:15:52 2009
@@ -87,6 +87,17 @@
   }
 
   /**
+   * @param responseBytes The response body. Not copied when set.
+   */
+  public HttpResponseBuilder setResponseNoCopy(byte[] responseBytes) {
+    if (responseBytes == null) {
+      responseBytes = ArrayUtils.EMPTY_BYTE_ARRAY;
+    }
+    this.responseBytes = responseBytes;
+    return this;
+  }
+
+  /**
    * @param httpStatusCode The HTTP response status, defined on HttpResponse.
    */
   public HttpResponseBuilder setHttpStatusCode(int httpStatusCode) {

Modified: 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/HttpResponseBuilderTest.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/HttpResponseBuilderTest.java?rev=793110&r1=793109&r2=793110&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/HttpResponseBuilderTest.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/HttpResponseBuilderTest.java
 Fri Jul 10 21:15:52 2009
@@ -17,8 +17,11 @@
  */
 package org.apache.shindig.gadgets.http;
 
+import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotSame;
+import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
 
 import com.google.common.base.Joiner;
@@ -138,6 +141,27 @@
   }
 
   @Test
+  public void setResponse() {
+    byte[] someData = "some data".getBytes();
+    HttpResponse resp = new HttpResponseBuilder()
+        .setResponse(someData)
+        .create();
+
+    assertNotSame(someData, resp.getResponseAsBytes());
+    assertArrayEquals(someData, resp.getResponseAsBytes());
+  }
+
+  @Test
+  public void setResponseNoCopy() {
+    byte[] someData = "some data".getBytes();
+    HttpResponse resp = new HttpResponseBuilder()
+        .setResponseNoCopy(someData)
+        .create();
+
+    assertSame(someData, resp.getResponseAsBytes());
+  }
+
+  @Test
   public void headerOrdering() {
     ImmutableList<String> soupList = ImmutableList.of("Tomato", "Potato", 
"Lentil", "Onion");
     HttpResponseBuilder b = new HttpResponseBuilder();


Reply via email to