Author: bryanduxbury
Date: Thu Dec  2 21:29:20 2010
New Revision: 1041590

URL: http://svn.apache.org/viewvc?rev=1041590&view=rev
Log:
THRIFT-1015. java: TUnion does not handle ByteBuffer in toString

This patch adds a test case and fixes the toString method of TBaseHelper for 
ByteBuffers.

Patch: Takashi Yonebayashi

Modified:
    thrift/trunk/lib/java/src/org/apache/thrift/TUnion.java
    thrift/trunk/lib/java/test/org/apache/thrift/TestTUnion.java

Modified: thrift/trunk/lib/java/src/org/apache/thrift/TUnion.java
URL: 
http://svn.apache.org/viewvc/thrift/trunk/lib/java/src/org/apache/thrift/TUnion.java?rev=1041590&r1=1041589&r2=1041590&view=diff
==============================================================================
--- thrift/trunk/lib/java/src/org/apache/thrift/TUnion.java (original)
+++ thrift/trunk/lib/java/src/org/apache/thrift/TUnion.java Thu Dec  2 21:29:20 
2010
@@ -104,7 +104,7 @@ public abstract class TUnion<T extends T
     if (fieldId != setField_) {
       throw new IllegalArgumentException("Cannot get the value of field " + 
fieldId + " because union's set field is " + setField_);
     }
-    
+
     return getFieldValue();
   }
 
@@ -115,7 +115,7 @@ public abstract class TUnion<T extends T
   public boolean isSet() {
     return setField_ != null;
   }
-  
+
   public boolean isSet(F fieldId) {
     return setField_ == fieldId;
   }
@@ -193,35 +193,22 @@ public abstract class TUnion<T extends T
 
   @Override
   public String toString() {
-    String result = "<" + this.getClass().getSimpleName() + " ";
+    StringBuilder sb = new StringBuilder();
+    sb.append("<");
+    sb.append(this.getClass().getSimpleName());
+    sb.append(" ");
 
     if (getSetField() != null) {
       Object v = getFieldValue();
-      String vStr = null;
-      if (v instanceof byte[]) {
-        vStr = bytesToStr((byte[])v);
+      sb.append(getFieldDesc(getSetField()).name);
+      sb.append(":");
+      if(v instanceof ByteBuffer) {
+        TBaseHelper.toString((ByteBuffer)v, sb);
       } else {
-        vStr = v.toString();
-      }
-      result += getFieldDesc(getSetField()).name + ":" + vStr;
-    }
-
-    return result + ">";
-  }
-
-  private static String bytesToStr(byte[] bytes) {
-    StringBuilder sb = new StringBuilder();
-    int size = Math.min(bytes.length, 128);
-    for (int i = 0; i < size; i++) {
-      if (i != 0) {
-        sb.append(" ");
+        sb.append(v.toString());
       }
-      String digit = Integer.toHexString(bytes[i] & 0xFF);
-      sb.append(digit.length() > 1 ? digit : "0" + digit);
-    }
-    if (bytes.length > 128) {
-      sb.append(" ...");
     }
+    sb.append(">");
     return sb.toString();
   }
 

Modified: thrift/trunk/lib/java/test/org/apache/thrift/TestTUnion.java
URL: 
http://svn.apache.org/viewvc/thrift/trunk/lib/java/test/org/apache/thrift/TestTUnion.java?rev=1041590&r1=1041589&r2=1041590&view=diff
==============================================================================
--- thrift/trunk/lib/java/test/org/apache/thrift/TestTUnion.java (original)
+++ thrift/trunk/lib/java/test/org/apache/thrift/TestTUnion.java Thu Dec  2 
21:29:20 2010
@@ -192,4 +192,12 @@ public class TestTUnion extends TestCase
     assertEquals(cu, copy);
     assertNotSame(cu.bufferForBinary_field().array(), 
copy.bufferForBinary_field().array());
   }
+  
+  public void testToString() throws Exception {
+    byte[] bytes = {1, 2, 3};
+    ByteBuffer value = ByteBuffer.wrap(bytes);
+    ComparableUnion cu = ComparableUnion.binary_field(value);
+    String expectedString = "<ComparableUnion binary_field:01 02 03>";
+    assertEquals(expectedString, cu.toString());
+  }
 }


Reply via email to