You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by sc...@apache.org on 2002/09/15 21:26:45 UTC
cvs commit: jakarta-commons-sandbox/lang ToStringBuilder.java ToStringBuilderTest.java ToStringStyle.java
scolebourne 2002/09/15 12:26:45
Modified: lang ToStringBuilder.java ToStringBuilderTest.java
ToStringStyle.java
Log:
Added code and tests in preparation for moving to commons proper
Revision Changes Path
1.3 +143 -9 jakarta-commons-sandbox/lang/ToStringBuilder.java
Index: ToStringBuilder.java
===================================================================
RCS file: /home/cvs/jakarta-commons-sandbox/lang/ToStringBuilder.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- ToStringBuilder.java 8 Sep 2002 15:25:04 -0000 1.2
+++ ToStringBuilder.java 15 Sep 2002 19:26:45 -0000 1.3
@@ -52,6 +52,8 @@
* <http://www.apache.org/>.
*/
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
import java.util.Arrays;
import java.util.Collection;
import java.util.Map;
@@ -95,11 +97,15 @@
public class ToStringBuilder {
/**
+ * The default style of output to use
+ */
+ private static ToStringStyle defaultStyle;
+ /**
* Current toString buffer
*/
private final StringBuffer buffer;
/**
- * Is it full detail
+ * The style of output to use
*/
private final ToStringStyle style;
/**
@@ -109,21 +115,23 @@
/**
* Constructor for ToStringBuilder.
- * This constructor outputs using a default style.
+ * This constructor outputs using the default style set with
+ * <code>setDefaultStyle</code>.
*
* @param object the object to build a toString for, must not be null
* @throws IllegalArgumentException if the object passed in is null
*/
public ToStringBuilder(Object object) {
- this(object, null, null);
+ this(object, getDefaultStyle(), null);
}
/**
* Constructor for ToStringBuilder specifying the output style.
+ * <p>
+ * If the style is null, the default style is used.
*
* @param object the object to build a toString for, must not be null
- * @param style the style of the toString to create
- * @param buffer the string buffer to populate
+ * @param style the style of the toString to create, may be null
* @throws IllegalArgumentException if the object passed in is null
*/
public ToStringBuilder(Object object, ToStringStyle style) {
@@ -132,10 +140,13 @@
/**
* Constructor for ToStringBuilder.
+ * <p>
+ * If the style is null, the default style is used.
+ * If the buffer is null, a new one is created.
*
* @param object the object to build a toString for, must not be null
- * @param style the style of the toString to create
- * @param buffer the string buffer to populate
+ * @param style the style of the toString to create, may be null
+ * @param buffer the string buffer to populate, may be null
* @throws IllegalArgumentException if the object passed in is null
*/
public ToStringBuilder(Object object, ToStringStyle style, StringBuffer buffer) {
@@ -159,6 +170,120 @@
//----------------------------------------------------------------------------
/**
+ * Gets the default style to use.
+ * <p>
+ * This could allow the toString style to be controlled for an entire
+ * application with one call. This might be used to have a verbose toString
+ * during development and a compact toString in production.
+ *
+ * @return the default toString style
+ */
+ public static ToStringStyle getDefaultStyle() {
+ return defaultStyle;
+ }
+
+ /**
+ * Sets the default style to use.
+ *
+ * @param style the default toString style
+ * @throws IllegalArgumentException if the style is null
+ */
+ public static void setDefaultStyle(ToStringStyle style) {
+ if (style == null) {
+ throw new IllegalArgumentException("The style must not be null");
+ }
+ defaultStyle = style;
+ }
+
+ //-------------------------------------------------------------------------
+
+ /**
+ * This method uses reflection to build a suitable toString using the default style.
+ * <p>
+ * It uses Field.setAccessible to gain access to private fields. This means
+ * that it will throw a security exception if run under a security manger, if
+ * the permissions are not set up.
+ * It is also not as efficient as testing explicitly.
+ * Transient members will be not be included, as they are likely derived
+ * fields, and not part of the value of the object.
+ *
+ * @param object the object to be output
+ * @return the String result
+ * @throws IllegalArgumentException if the object is null
+ */
+ public static String reflectionToString(Object object) {
+ return reflectionToString(object, null, false);
+ }
+
+ /**
+ * This method uses reflection to build a suitable toString.
+ * <p>
+ * It uses Field.setAccessible to gain access to private fields. This means
+ * that it will throw a security exception if run under a security manger, if
+ * the permissions are not set up.
+ * It is also not as efficient as testing explicitly.
+ * Transient members will be not be included, as they are likely derived
+ * fields, and not part of the value of the object.
+ * <p>
+ * If the style is null, the default style is used.
+ *
+ * @param object the object to be output
+ * @param style the style of the toString to create, may be null
+ * @return the String result
+ * @throws IllegalArgumentException if the object or style is null
+ */
+ public static String reflectionToString(Object object, ToStringStyle style) {
+ return reflectionToString(object, style, false);
+ }
+
+ /**
+ * This method uses reflection to build a suitable toString.
+ * <p>
+ * It uses Field.setAccessible to gain access to private fields. This means
+ * that it will throw a security exception if run under a security manger, if
+ * the permissions are not set up.
+ * It is also not as efficient as testing explicitly.
+ * If the outputTransients parameter is set to true, transient members will be
+ * output, otherwise they are ignored, as they are likely derived fields, and
+ * not part of the value of the object.
+ * <p>
+ * If the style is null, the default style is used.
+ *
+ * @param object the object to be output
+ * @param style the style of the toString to create, may be null
+ * @param outputTransients whether to include transient fields
+ * @return the String result
+ * @throws IllegalArgumentException if the object or style is null
+ */
+ public static String reflectionToString(Object object, ToStringStyle style, boolean outputTransients) {
+ if (object == null) {
+ throw new IllegalArgumentException("The object must not be null");
+ }
+ if (style == null) {
+ style = getDefaultStyle();
+ }
+ Field[] fields = object.getClass().getDeclaredFields();
+ Field.setAccessible(fields, true);
+ ToStringBuilder builder = new ToStringBuilder(object, style);
+ for (int i = 0; i < fields.length; ++i) {
+ Field f = fields[i];
+ if (outputTransients || !Modifier.isTransient(f.getModifiers())) {
+ try {
+ builder.append(f.getName(), f.get(object));
+
+ } catch (IllegalAccessException ex) {
+ //this can't happen. Would get a Security exception instead
+ //throw a runtime exception in case the impossible happens.
+ throw new InternalError("Unexpected IllegalAccessException");
+ }
+ }
+ }
+ return builder.toString();
+ }
+
+ //----------------------------------------------------------------------------
+
+ /**
* Append to the toString an Object value.
*
* @param value the value to add to the toString
@@ -776,7 +901,16 @@
//----------------------------------------------------------------------------
/**
- * Return the built toString
+ * Gets the buffer being populated
+ *
+ * @return the StringBuffer being populated
+ */
+ public StringBuffer getStringBuffer() {
+ return buffer;
+ }
+
+ /**
+ * Returns the built toString
*
* @return the String toString
*/
1.3 +199 -99 jakarta-commons-sandbox/lang/ToStringBuilderTest.java
Index: ToStringBuilderTest.java
===================================================================
RCS file: /home/cvs/jakarta-commons-sandbox/lang/ToStringBuilderTest.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- ToStringBuilderTest.java 8 Sep 2002 15:25:04 -0000 1.2
+++ ToStringBuilderTest.java 15 Sep 2002 19:26:45 -0000 1.3
@@ -52,9 +52,52 @@
public void testConstructorEx2() {
try {
+ new ToStringBuilder(null, null);
+
+ } catch (IllegalArgumentException ex) {
+ try {
+ new ToStringBuilder(base, null);
+
+ } catch (Exception ex2) {
+ fail();
+ }
+ return;
+ }
+ fail();
+ }
+
+ public void testConstructorEx3() {
+ try {
new ToStringBuilder(null, null, null);
} catch (IllegalArgumentException ex) {
+ try {
+ new ToStringBuilder(base, null, null);
+ new ToStringBuilder(base, ToStringStyle.DEFAULT_STYLE, null);
+
+ } catch (Exception ex2) {
+ fail();
+ }
+ return;
+ }
+ fail();
+ }
+
+ public void testGetSetDefault() {
+ try {
+ ToStringBuilder.setDefaultStyle(ToStringStyle.NO_FIELD_NAMES_STYLE);
+ assertSame(ToStringStyle.NO_FIELD_NAMES_STYLE, ToStringBuilder.getDefaultStyle());
+ } finally {
+ // reset for other tests
+ ToStringBuilder.setDefaultStyle(ToStringStyle.DEFAULT_STYLE);
+ }
+ }
+
+ public void testSetDefaultEx() {
+ try {
+ ToStringBuilder.setDefaultStyle(null);
+
+ } catch (IllegalArgumentException ex) {
return;
}
fail();
@@ -125,102 +168,159 @@
assertEquals(baseStr + "[a=true,b=false]", new ToStringBuilder(base).append("a", true).append("b", false).toString());
}
-// public void testObjectArray() {
-// assertEquals(17 * 37, new HashCodeBuilder(17, 37).append((Object[]) null).toHashCode());
-// Object[] obj = new Object[2];
-// assertEquals((17 * 37) * 37 , new HashCodeBuilder(17, 37).append(obj).toHashCode());
-// obj[0] = new Object();
-// assertEquals((17 * 37 + obj[0].hashCode()) * 37, new HashCodeBuilder(17, 37).append(obj).toHashCode());
-// obj[1] = new Object();
-// assertEquals( (17 * 37 + obj[0].hashCode()) * 37 + obj[1].hashCode(), new HashCodeBuilder(17, 37).append(obj).toHashCode());
-// }
-//
-// public void testLongArray() {
-// assertEquals(17 * 37, new HashCodeBuilder(17, 37).append((long[]) null).toHashCode());
-// long[] obj = new long[2];
-// assertEquals((17 * 37) * 37 , new HashCodeBuilder(17, 37).append(obj).toHashCode());
-// obj[0] = 5L;
-// int h1 = (int) (5L ^ (5L >> 32));
-// assertEquals((17 * 37 + h1) * 37, new HashCodeBuilder(17, 37).append(obj).toHashCode());
-// obj[1] = 6L;
-// int h2 = (int) (6L ^ (6L >> 32));
-// assertEquals( (17 * 37 + h1) * 37 + h2, new HashCodeBuilder(17, 37).append(obj).toHashCode());
-// }
-//
-// public void testIntArray() {
-// assertEquals(17 * 37, new HashCodeBuilder(17, 37).append((int[]) null).toHashCode());
-// int[] obj = new int[2];
-// assertEquals((17 * 37) * 37 , new HashCodeBuilder(17, 37).append(obj).toHashCode());
-// obj[0] = 5;
-// assertEquals((17 * 37 + 5) * 37, new HashCodeBuilder(17, 37).append(obj).toHashCode());
-// obj[1] = 6;
-// assertEquals( (17 * 37 + 5) * 37 + 6, new HashCodeBuilder(17, 37).append(obj).toHashCode());
-// }
-//
-// public void testShortArray() {
-// assertEquals(17 * 37, new HashCodeBuilder(17, 37).append((short[]) null).toHashCode());
-// short[] obj = new short[2];
-// assertEquals((17 * 37) * 37 , new HashCodeBuilder(17, 37).append(obj).toHashCode());
-// obj[0] = (short) 5;
-// assertEquals((17 * 37 + 5) * 37, new HashCodeBuilder(17, 37).append(obj).toHashCode());
-// obj[1] = (short) 6;
-// assertEquals( (17 * 37 + 5) * 37 + 6, new HashCodeBuilder(17, 37).append(obj).toHashCode());
-// }
-//
-// public void testCharArray() {
-// assertEquals(17 * 37, new HashCodeBuilder(17, 37).append((char[]) null).toHashCode());
-// char[] obj = new char[2];
-// assertEquals((17 * 37) * 37 , new HashCodeBuilder(17, 37).append(obj).toHashCode());
-// obj[0] = (char) 5;
-// assertEquals((17 * 37 + 5) * 37, new HashCodeBuilder(17, 37).append(obj).toHashCode());
-// obj[1] = (char) 6;
-// assertEquals( (17 * 37 + 5) * 37 + 6, new HashCodeBuilder(17, 37).append(obj).toHashCode());
-// }
-//
-// public void testByteArray() {
-// assertEquals(17 * 37, new HashCodeBuilder(17, 37).append((byte[]) null).toHashCode());
-// byte[] obj = new byte[2];
-// assertEquals((17 * 37) * 37 , new HashCodeBuilder(17, 37).append(obj).toHashCode());
-// obj[0] = (byte) 5;
-// assertEquals((17 * 37 + 5) * 37, new HashCodeBuilder(17, 37).append(obj).toHashCode());
-// obj[1] = (byte) 6;
-// assertEquals( (17 * 37 + 5) * 37 + 6, new HashCodeBuilder(17, 37).append(obj).toHashCode());
-// }
-//
-// public void testDoubleArray() {
-// assertEquals(17 * 37, new HashCodeBuilder(17, 37).append((double[]) null).toHashCode());
-// double[] obj = new double[2];
-// assertEquals((17 * 37) * 37 , new HashCodeBuilder(17, 37).append(obj).toHashCode());
-// obj[0] = 5.4d;
-// long l1 = Double.doubleToLongBits(5.4d);
-// int h1 = (int) (l1 ^ (l1 >> 32));
-// assertEquals((17 * 37 + h1) * 37, new HashCodeBuilder(17, 37).append(obj).toHashCode());
-// obj[1] = 6.3d;
-// long l2 = Double.doubleToLongBits(6.3d);
-// int h2 = (int) (l2 ^ (l2 >> 32));
-// assertEquals( (17 * 37 + h1) * 37 + h2, new HashCodeBuilder(17, 37).append(obj).toHashCode());
-// }
-//
-// public void testFloatArray() {
-// assertEquals(17 * 37, new HashCodeBuilder(17, 37).append((float[]) null).toHashCode());
-// float[] obj = new float[2];
-// assertEquals((17 * 37) * 37 , new HashCodeBuilder(17, 37).append(obj).toHashCode());
-// obj[0] = 5.4f;
-// int h1 = Float.floatToIntBits(5.4f);
-// assertEquals((17 * 37 + h1) * 37, new HashCodeBuilder(17, 37).append(obj).toHashCode());
-// obj[1] = 6.3f;
-// int h2 = Float.floatToIntBits(6.3f);
-// assertEquals( (17 * 37 + h1) * 37 + h2, new HashCodeBuilder(17, 37).append(obj).toHashCode());
-// }
-//
-// public void testBooleanArray() {
-// assertEquals(17 * 37, new HashCodeBuilder(17, 37).append((boolean[]) null).toHashCode());
-// boolean[] obj = new boolean[2];
-// assertEquals((17 * 37 + 1) * 37 + 1 , new HashCodeBuilder(17, 37).append(obj).toHashCode());
-// obj[0] = true;
-// assertEquals((17 * 37 + 0) * 37 + 1, new HashCodeBuilder(17, 37).append(obj).toHashCode());
-// obj[1] = false;
-// assertEquals( (17 * 37 + 0) * 37 + 1, new HashCodeBuilder(17, 37).append(obj).toHashCode());
-// }
-//
+
+ public void testObjectArray() {
+ Object[] array = new Object[] {null, base, new int[] {3, 6}};
+ assertEquals(baseStr + "[{<null>,5,{3,6}}]", new ToStringBuilder(base).append(array).toString());
+ assertEquals(baseStr + "[{<null>,5,{3,6}}]", new ToStringBuilder(base).append((Object) array).toString());
+ array = null;
+ assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append(array).toString());
+ assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append((Object) array).toString());
+ }
+
+ public void testLongArray() {
+ long[] array = new long[] {1, 2, -3, 4};
+ assertEquals(baseStr + "[{1,2,-3,4}]", new ToStringBuilder(base).append(array).toString());
+ assertEquals(baseStr + "[{1,2,-3,4}]", new ToStringBuilder(base).append((Object) array).toString());
+ array = null;
+ assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append(array).toString());
+ assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append((Object) array).toString());
+ }
+
+ public void testIntArray() {
+ int[] array = new int[] {1, 2, -3, 4};
+ assertEquals(baseStr + "[{1,2,-3,4}]", new ToStringBuilder(base).append(array).toString());
+ assertEquals(baseStr + "[{1,2,-3,4}]", new ToStringBuilder(base).append((Object) array).toString());
+ array = null;
+ assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append(array).toString());
+ assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append((Object) array).toString());
+ }
+
+ public void testShortArray() {
+ short[] array = new short[] {1, 2, -3, 4};
+ assertEquals(baseStr + "[{1,2,-3,4}]", new ToStringBuilder(base).append(array).toString());
+ assertEquals(baseStr + "[{1,2,-3,4}]", new ToStringBuilder(base).append((Object) array).toString());
+ array = null;
+ assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append(array).toString());
+ assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append((Object) array).toString());
+ }
+
+ public void testByteArray() {
+ byte[] array = new byte[] {1, 2, -3, 4};
+ assertEquals(baseStr + "[{1,2,-3,4}]", new ToStringBuilder(base).append(array).toString());
+ assertEquals(baseStr + "[{1,2,-3,4}]", new ToStringBuilder(base).append((Object) array).toString());
+ array = null;
+ assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append(array).toString());
+ assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append((Object) array).toString());
+ }
+
+ public void testCharArray() {
+ char[] array = new char[] {'A', '2', '_', 'D'};
+ assertEquals(baseStr + "[{A,2,_,D}]", new ToStringBuilder(base).append(array).toString());
+ assertEquals(baseStr + "[{A,2,_,D}]", new ToStringBuilder(base).append((Object) array).toString());
+ array = null;
+ assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append(array).toString());
+ assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append((Object) array).toString());
+ }
+
+ public void testDoubleArray() {
+ double[] array = new double[] {1.0, 2.9876, -3.00001, 4.3};
+ assertEquals(baseStr + "[{1.0,2.9876,-3.00001,4.3}]", new ToStringBuilder(base).append(array).toString());
+ assertEquals(baseStr + "[{1.0,2.9876,-3.00001,4.3}]", new ToStringBuilder(base).append((Object) array).toString());
+ array = null;
+ assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append(array).toString());
+ assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append((Object) array).toString());
+ }
+
+ public void testFloatArray() {
+ float[] array = new float[] {1.0f, 2.9876f, -3.00001f, 4.3f};
+ assertEquals(baseStr + "[{1.0,2.9876,-3.00001,4.3}]", new ToStringBuilder(base).append(array).toString());
+ assertEquals(baseStr + "[{1.0,2.9876,-3.00001,4.3}]", new ToStringBuilder(base).append((Object) array).toString());
+ array = null;
+ assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append(array).toString());
+ assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append((Object) array).toString());
+ }
+
+ public void testBooleanArray() {
+ boolean[] array = new boolean[] {true, false, false};
+ assertEquals(baseStr + "[{true,false,false}]", new ToStringBuilder(base).append(array).toString());
+ assertEquals(baseStr + "[{true,false,false}]", new ToStringBuilder(base).append((Object) array).toString());
+ array = null;
+ assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append(array).toString());
+ assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append((Object) array).toString());
+ }
+
+
+ public void testLongArrayArray() {
+ long[][] array = new long[][] {{1, 2}, null, {5}};
+ assertEquals(baseStr + "[{{1,2},<null>,{5}}]", new ToStringBuilder(base).append(array).toString());
+ assertEquals(baseStr + "[{{1,2},<null>,{5}}]", new ToStringBuilder(base).append((Object) array).toString());
+ array = null;
+ assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append(array).toString());
+ assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append((Object) array).toString());
+ }
+
+ public void testIntArrayArray() {
+ int[][] array = new int[][] {{1, 2}, null, {5}};
+ assertEquals(baseStr + "[{{1,2},<null>,{5}}]", new ToStringBuilder(base).append(array).toString());
+ assertEquals(baseStr + "[{{1,2},<null>,{5}}]", new ToStringBuilder(base).append((Object) array).toString());
+ array = null;
+ assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append(array).toString());
+ assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append((Object) array).toString());
+ }
+
+ public void testShortArrayArray() {
+ short[][] array = new short[][] {{1, 2}, null, {5}};
+ assertEquals(baseStr + "[{{1,2},<null>,{5}}]", new ToStringBuilder(base).append(array).toString());
+ assertEquals(baseStr + "[{{1,2},<null>,{5}}]", new ToStringBuilder(base).append((Object) array).toString());
+ array = null;
+ assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append(array).toString());
+ assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append((Object) array).toString());
+ }
+
+ public void testByteArrayArray() {
+ byte[][] array = new byte[][] {{1, 2}, null, {5}};
+ assertEquals(baseStr + "[{{1,2},<null>,{5}}]", new ToStringBuilder(base).append(array).toString());
+ assertEquals(baseStr + "[{{1,2},<null>,{5}}]", new ToStringBuilder(base).append((Object) array).toString());
+ array = null;
+ assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append(array).toString());
+ assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append((Object) array).toString());
+ }
+
+ public void testCharArrayArray() {
+ char[][] array = new char[][] {{'A', 'B'}, null, {'p'}};
+ assertEquals(baseStr + "[{{A,B},<null>,{p}}]", new ToStringBuilder(base).append(array).toString());
+ assertEquals(baseStr + "[{{A,B},<null>,{p}}]", new ToStringBuilder(base).append((Object) array).toString());
+ array = null;
+ assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append(array).toString());
+ assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append((Object) array).toString());
+ }
+
+ public void testDoubleArrayArray() {
+ double[][] array = new double[][] {{1.0, 2.29686}, null, {Double.NaN}};
+ assertEquals(baseStr + "[{{1.0,2.29686},<null>,{NaN}}]", new ToStringBuilder(base).append(array).toString());
+ assertEquals(baseStr + "[{{1.0,2.29686},<null>,{NaN}}]", new ToStringBuilder(base).append((Object) array).toString());
+ array = null;
+ assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append(array).toString());
+ assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append((Object) array).toString());
+ }
+
+ public void testFloatArrayArray() {
+ float[][] array = new float[][] {{1.0f, 2.29686f}, null, {Float.NaN}};
+ assertEquals(baseStr + "[{{1.0,2.29686},<null>,{NaN}}]", new ToStringBuilder(base).append(array).toString());
+ assertEquals(baseStr + "[{{1.0,2.29686},<null>,{NaN}}]", new ToStringBuilder(base).append((Object) array).toString());
+ array = null;
+ assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append(array).toString());
+ assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append((Object) array).toString());
+ }
+
+ public void testBooleanArrayArray() {
+ boolean[][] array = new boolean[][] {{true, false}, null, {false}};
+ assertEquals(baseStr + "[{{true,false},<null>,{false}}]", new ToStringBuilder(base).append(array).toString());
+ assertEquals(baseStr + "[{{true,false},<null>,{false}}]", new ToStringBuilder(base).append((Object) array).toString());
+ array = null;
+ assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append(array).toString());
+ assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append((Object) array).toString());
+ }
+
}
1.2 +597 -143 jakarta-commons-sandbox/lang/ToStringStyle.java
Index: ToStringStyle.java
===================================================================
RCS file: /home/cvs/jakarta-commons-sandbox/lang/ToStringStyle.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- ToStringStyle.java 8 Sep 2002 15:25:04 -0000 1.1
+++ ToStringStyle.java 15 Sep 2002 19:26:45 -0000 1.2
@@ -89,7 +89,7 @@
/**
* The no field names toString style.
*/
- public static final ToStringStyle XML_STYLE = new XMLToStringStyle();
+// public static final ToStringStyle XML_STYLE = new XMLToStringStyle();
/**
* The content start '['
@@ -221,29 +221,61 @@
}
} else if (value instanceof long[]) {
- appendDetail(buffer, fieldName, (long[]) value);
+ if (detail) {
+ appendDetail(buffer, fieldName, (long[]) value);
+ } else {
+ appendSummary(buffer, fieldName, (long[]) value);
+ }
+
+ } else if (value instanceof int[]) {
+ if (detail) {
+ appendDetail(buffer, fieldName, (int[]) value);
+ } else {
+ appendSummary(buffer, fieldName, (int[]) value);
+ }
+
+ } else if (value instanceof short[]) {
+ if (detail) {
+ appendDetail(buffer, fieldName, (short[]) value);
+ } else {
+ appendSummary(buffer, fieldName, (short[]) value);
+ }
-// } else if (item instanceof int[]) {
-// appendDetail(buffer, fieldName, (int[]) item);
-//
-// } else if (item instanceof short[]) {
-// appendDetail(buffer, fieldName, (short[]) item);
-//
-// } else if (item instanceof byte[]) {
-// appendDetail(buffer, fieldName, (byte[]) item);
-//
-// } else if (item instanceof char[]) {
-// appendDetail(buffer, fieldName, (char[]) item);
-//
-// } else if (item instanceof double[]) {
-// appendDetail(buffer, fieldName, (double[]) item);
-//
-// } else if (item instanceof float[]) {
-// appendDetail(buffer, fieldName, (float[]) item);
-//
-// } else if (item instanceof boolean[]) {
-// appendDetail(buffer, fieldName, (boolean[]) item);
+ } else if (value instanceof byte[]) {
+ if (detail) {
+ appendDetail(buffer, fieldName, (byte[]) value);
+ } else {
+ appendSummary(buffer, fieldName, (byte[]) value);
+ }
+ } else if (value instanceof char[]) {
+ if (detail) {
+ appendDetail(buffer, fieldName, (char[]) value);
+ } else {
+ appendSummary(buffer, fieldName, (char[]) value);
+ }
+
+ } else if (value instanceof double[]) {
+ if (detail) {
+ appendDetail(buffer, fieldName, (double[]) value);
+ } else {
+ appendSummary(buffer, fieldName, (double[]) value);
+ }
+
+ } else if (value instanceof float[]) {
+ if (detail) {
+ appendDetail(buffer, fieldName, (float[]) value);
+ } else {
+ appendSummary(buffer, fieldName, (float[]) value);
+ }
+
+ } else if (value instanceof boolean[]) {
+ if (detail) {
+ appendDetail(buffer, fieldName, (boolean[]) value);
+ } else {
+ appendSummary(buffer, fieldName, (boolean[]) value);
+ }
+
} else if (value.getClass().isArray()) {
if (detail) {
appendDetail(buffer, fieldName, (Object[]) value);
@@ -251,11 +283,12 @@
appendSummary(buffer, fieldName, (Object[]) value);
}
- } else if (detail) {
- appendDetail(buffer, fieldName, value);
-
} else {
- appendSummary(buffer, fieldName, value);
+ if (detail) {
+ appendDetail(buffer, fieldName, (Object) value);
+ } else {
+ appendSummary(buffer, fieldName, (Object) value);
+ }
}
}
@@ -360,6 +393,58 @@
//----------------------------------------------------------------------------
/**
+ * Append to the toString a short value.
+ *
+ * @param buffer the StringBuffer to populate
+ * @param fieldName the field name
+ * @param value the value to add to the toString
+ */
+ public void append(StringBuffer buffer, String fieldName, short value) {
+ appendFieldStart(buffer, fieldName);
+ appendDetail(buffer, fieldName, value);
+ appendFieldEnd(buffer, fieldName);
+ }
+
+ /**
+ * Append to the toString a short value.
+ *
+ * @param buffer the StringBuffer to populate
+ * @param fieldName the field name, typically not used as already appended
+ * @param value the value to add to the toString
+ */
+ protected void appendDetail(StringBuffer buffer, String fieldName, short value) {
+ buffer.append(value);
+ }
+
+ //----------------------------------------------------------------------------
+
+ /**
+ * Append to the toString a byte value.
+ *
+ * @param buffer the StringBuffer to populate
+ * @param fieldName the field name
+ * @param value the value to add to the toString
+ */
+ public void append(StringBuffer buffer, String fieldName, byte value) {
+ appendFieldStart(buffer, fieldName);
+ appendDetail(buffer, fieldName, value);
+ appendFieldEnd(buffer, fieldName);
+ }
+
+ /**
+ * Append to the toString a byte value.
+ *
+ * @param buffer the StringBuffer to populate
+ * @param fieldName the field name, typically not used as already appended
+ * @param value the value to add to the toString
+ */
+ protected void appendDetail(StringBuffer buffer, String fieldName, byte value) {
+ buffer.append(value);
+ }
+
+ //----------------------------------------------------------------------------
+
+ /**
* Append to the toString a char value.
*
* @param buffer the StringBuffer to populate
@@ -504,42 +589,8 @@
if (item == null) {
appendNullText(buffer, fieldName);
- } else if (item instanceof long[]) {
- appendDetail(buffer, fieldName, (long[]) item);
-
-// } else if (item instanceof int[]) {
-// appendDetail(buffer, fieldName, (int[]) item);
-//
-// } else if (item instanceof short[]) {
-// appendDetail(buffer, fieldName, (short[]) item);
-//
-// } else if (item instanceof byte[]) {
-// appendDetail(buffer, fieldName, (byte[]) item);
-//
-// } else if (item instanceof char[]) {
-// appendDetail(buffer, fieldName, (char[]) item);
-//
-// } else if (item instanceof double[]) {
-// appendDetail(buffer, fieldName, (double[]) item);
-//
-// } else if (item instanceof float[]) {
-// appendDetail(buffer, fieldName, (float[]) item);
-//
-// } else if (item instanceof boolean[]) {
-// appendDetail(buffer, fieldName, (boolean[]) item);
-
- } else if (item.getClass().isArray()) {
- if (arrayContentDetail) {
- appendDetail(buffer, fieldName, (Object[]) item);
- } else {
- appendSummary(buffer, fieldName, (Object[]) item);
- }
-
- } else if (arrayContentDetail) {
- appendDetail(buffer, fieldName, item);
-
} else {
- appendSummary(buffer, fieldName, item);
+ appendInternal(buffer, fieldName, item, arrayContentDetail);
}
}
buffer.append(arrayEnd);
@@ -614,6 +665,391 @@
//----------------------------------------------------------------------------
/**
+ * Append to the toString an int array.
+ *
+ * @param buffer the StringBuffer to populate
+ * @param fieldName the field name
+ * @param array the array to add to the toString
+ * @param fullDetail true for detail, false for summary info, null for style decides
+ */
+ public void append(StringBuffer buffer, String fieldName, int[] array, Boolean fullDetail) {
+ appendFieldStart(buffer, fieldName);
+
+ if (array == null) {
+ appendNullText(buffer, fieldName);
+
+ } else if (isFullDetail(fullDetail)) {
+ appendDetail(buffer, fieldName, array);
+
+ } else {
+ appendSummary(buffer, fieldName, array);
+ }
+
+ appendFieldEnd(buffer, fieldName);
+ }
+
+ /**
+ * Append to the toString the detail of an int array.
+ *
+ * @param buffer the StringBuffer to populate
+ * @param fieldName the field name, typically not used as already appended
+ * @param array the array to add to the toString, not null
+ */
+ protected void appendDetail(StringBuffer buffer, String fieldName, int[] array) {
+ buffer.append(arrayStart);
+ for (int i = 0; i < array.length; i++) {
+ if (i > 0) {
+ buffer.append(arraySeparator);
+ }
+ appendDetail(buffer, fieldName, array[i]);
+ }
+ buffer.append(arrayEnd);
+ }
+
+ /**
+ * Append to the toString a summary of an int array.
+ *
+ * @param buffer the StringBuffer to populate
+ * @param fieldName the field name, typically not used as already appended
+ * @param array the array to add to the toString, not null
+ */
+ protected void appendSummary(StringBuffer buffer, String fieldName, int[] array) {
+ appendSummarySize(buffer, fieldName, array.length);
+ }
+
+ //----------------------------------------------------------------------------
+
+ /**
+ * Append to the toString a short array.
+ *
+ * @param buffer the StringBuffer to populate
+ * @param fieldName the field name
+ * @param array the array to add to the toString
+ * @param fullDetail true for detail, false for summary info, null for style decides
+ */
+ public void append(StringBuffer buffer, String fieldName, short[] array, Boolean fullDetail) {
+ appendFieldStart(buffer, fieldName);
+
+ if (array == null) {
+ appendNullText(buffer, fieldName);
+
+ } else if (isFullDetail(fullDetail)) {
+ appendDetail(buffer, fieldName, array);
+
+ } else {
+ appendSummary(buffer, fieldName, array);
+ }
+
+ appendFieldEnd(buffer, fieldName);
+ }
+
+ /**
+ * Append to the toString the detail of a short array.
+ *
+ * @param buffer the StringBuffer to populate
+ * @param fieldName the field name, typically not used as already appended
+ * @param array the array to add to the toString, not null
+ */
+ protected void appendDetail(StringBuffer buffer, String fieldName, short[] array) {
+ buffer.append(arrayStart);
+ for (int i = 0; i < array.length; i++) {
+ if (i > 0) {
+ buffer.append(arraySeparator);
+ }
+ appendDetail(buffer, fieldName, array[i]);
+ }
+ buffer.append(arrayEnd);
+ }
+
+ /**
+ * Append to the toString a summary of a short array.
+ *
+ * @param buffer the StringBuffer to populate
+ * @param fieldName the field name, typically not used as already appended
+ * @param array the array to add to the toString, not null
+ */
+ protected void appendSummary(StringBuffer buffer, String fieldName, short[] array) {
+ appendSummarySize(buffer, fieldName, array.length);
+ }
+
+ //----------------------------------------------------------------------------
+
+ /**
+ * Append to the toString a byte array.
+ *
+ * @param buffer the StringBuffer to populate
+ * @param fieldName the field name
+ * @param array the array to add to the toString
+ * @param fullDetail true for detail, false for summary info, null for style decides
+ */
+ public void append(StringBuffer buffer, String fieldName, byte[] array, Boolean fullDetail) {
+ appendFieldStart(buffer, fieldName);
+
+ if (array == null) {
+ appendNullText(buffer, fieldName);
+
+ } else if (isFullDetail(fullDetail)) {
+ appendDetail(buffer, fieldName, array);
+
+ } else {
+ appendSummary(buffer, fieldName, array);
+ }
+
+ appendFieldEnd(buffer, fieldName);
+ }
+
+ /**
+ * Append to the toString the detail of a byte array.
+ *
+ * @param buffer the StringBuffer to populate
+ * @param fieldName the field name, typically not used as already appended
+ * @param array the array to add to the toString, not null
+ */
+ protected void appendDetail(StringBuffer buffer, String fieldName, byte[] array) {
+ buffer.append(arrayStart);
+ for (int i = 0; i < array.length; i++) {
+ if (i > 0) {
+ buffer.append(arraySeparator);
+ }
+ appendDetail(buffer, fieldName, array[i]);
+ }
+ buffer.append(arrayEnd);
+ }
+
+ /**
+ * Append to the toString a summary of a byte array.
+ *
+ * @param buffer the StringBuffer to populate
+ * @param fieldName the field name, typically not used as already appended
+ * @param array the array to add to the toString, not null
+ */
+ protected void appendSummary(StringBuffer buffer, String fieldName, byte[] array) {
+ appendSummarySize(buffer, fieldName, array.length);
+ }
+
+ //----------------------------------------------------------------------------
+
+ /**
+ * Append to the toString a char array.
+ *
+ * @param buffer the StringBuffer to populate
+ * @param fieldName the field name
+ * @param array the array to add to the toString
+ * @param fullDetail true for detail, false for summary info, null for style decides
+ */
+ public void append(StringBuffer buffer, String fieldName, char[] array, Boolean fullDetail) {
+ appendFieldStart(buffer, fieldName);
+
+ if (array == null) {
+ appendNullText(buffer, fieldName);
+
+ } else if (isFullDetail(fullDetail)) {
+ appendDetail(buffer, fieldName, array);
+
+ } else {
+ appendSummary(buffer, fieldName, array);
+ }
+
+ appendFieldEnd(buffer, fieldName);
+ }
+
+ /**
+ * Append to the toString the detail of a char array.
+ *
+ * @param buffer the StringBuffer to populate
+ * @param fieldName the field name, typically not used as already appended
+ * @param array the array to add to the toString, not null
+ */
+ protected void appendDetail(StringBuffer buffer, String fieldName, char[] array) {
+ buffer.append(arrayStart);
+ for (int i = 0; i < array.length; i++) {
+ if (i > 0) {
+ buffer.append(arraySeparator);
+ }
+ appendDetail(buffer, fieldName, array[i]);
+ }
+ buffer.append(arrayEnd);
+ }
+
+ /**
+ * Append to the toString a summary of a char array.
+ *
+ * @param buffer the StringBuffer to populate
+ * @param fieldName the field name, typically not used as already appended
+ * @param array the array to add to the toString, not null
+ */
+ protected void appendSummary(StringBuffer buffer, String fieldName, char[] array) {
+ appendSummarySize(buffer, fieldName, array.length);
+ }
+
+ //----------------------------------------------------------------------------
+
+ /**
+ * Append to the toString a double array.
+ *
+ * @param buffer the StringBuffer to populate
+ * @param fieldName the field name
+ * @param array the array to add to the toString
+ * @param fullDetail true for detail, false for summary info, null for style decides
+ */
+ public void append(StringBuffer buffer, String fieldName, double[] array, Boolean fullDetail) {
+ appendFieldStart(buffer, fieldName);
+
+ if (array == null) {
+ appendNullText(buffer, fieldName);
+
+ } else if (isFullDetail(fullDetail)) {
+ appendDetail(buffer, fieldName, array);
+
+ } else {
+ appendSummary(buffer, fieldName, array);
+ }
+
+ appendFieldEnd(buffer, fieldName);
+ }
+
+ /**
+ * Append to the toString the detail of a double array.
+ *
+ * @param buffer the StringBuffer to populate
+ * @param fieldName the field name, typically not used as already appended
+ * @param array the array to add to the toString, not null
+ */
+ protected void appendDetail(StringBuffer buffer, String fieldName, double[] array) {
+ buffer.append(arrayStart);
+ for (int i = 0; i < array.length; i++) {
+ if (i > 0) {
+ buffer.append(arraySeparator);
+ }
+ appendDetail(buffer, fieldName, array[i]);
+ }
+ buffer.append(arrayEnd);
+ }
+
+ /**
+ * Append to the toString a summary of a double array.
+ *
+ * @param buffer the StringBuffer to populate
+ * @param fieldName the field name, typically not used as already appended
+ * @param array the array to add to the toString, not null
+ */
+ protected void appendSummary(StringBuffer buffer, String fieldName, double[] array) {
+ appendSummarySize(buffer, fieldName, array.length);
+ }
+
+ //----------------------------------------------------------------------------
+
+ /**
+ * Append to the toString a float array.
+ *
+ * @param buffer the StringBuffer to populate
+ * @param fieldName the field name
+ * @param array the array to add to the toString
+ * @param fullDetail true for detail, false for summary info, null for style decides
+ */
+ public void append(StringBuffer buffer, String fieldName, float[] array, Boolean fullDetail) {
+ appendFieldStart(buffer, fieldName);
+
+ if (array == null) {
+ appendNullText(buffer, fieldName);
+
+ } else if (isFullDetail(fullDetail)) {
+ appendDetail(buffer, fieldName, array);
+
+ } else {
+ appendSummary(buffer, fieldName, array);
+ }
+
+ appendFieldEnd(buffer, fieldName);
+ }
+
+ /**
+ * Append to the toString the detail of a float array.
+ *
+ * @param buffer the StringBuffer to populate
+ * @param fieldName the field name, typically not used as already appended
+ * @param array the array to add to the toString, not null
+ */
+ protected void appendDetail(StringBuffer buffer, String fieldName, float[] array) {
+ buffer.append(arrayStart);
+ for (int i = 0; i < array.length; i++) {
+ if (i > 0) {
+ buffer.append(arraySeparator);
+ }
+ appendDetail(buffer, fieldName, array[i]);
+ }
+ buffer.append(arrayEnd);
+ }
+
+ /**
+ * Append to the toString a summary of a float array.
+ *
+ * @param buffer the StringBuffer to populate
+ * @param fieldName the field name, typically not used as already appended
+ * @param array the array to add to the toString, not null
+ */
+ protected void appendSummary(StringBuffer buffer, String fieldName, float[] array) {
+ appendSummarySize(buffer, fieldName, array.length);
+ }
+
+ //----------------------------------------------------------------------------
+
+ /**
+ * Append to the toString a boolean array.
+ *
+ * @param buffer the StringBuffer to populate
+ * @param fieldName the field name
+ * @param array the array to add to the toString
+ * @param fullDetail true for detail, false for summary info, null for style decides
+ */
+ public void append(StringBuffer buffer, String fieldName, boolean[] array, Boolean fullDetail) {
+ appendFieldStart(buffer, fieldName);
+
+ if (array == null) {
+ appendNullText(buffer, fieldName);
+
+ } else if (isFullDetail(fullDetail)) {
+ appendDetail(buffer, fieldName, array);
+
+ } else {
+ appendSummary(buffer, fieldName, array);
+ }
+
+ appendFieldEnd(buffer, fieldName);
+ }
+
+ /**
+ * Append to the toString the detail of a boolean array.
+ *
+ * @param buffer the StringBuffer to populate
+ * @param fieldName the field name, typically not used as already appended
+ * @param array the array to add to the toString, not null
+ */
+ protected void appendDetail(StringBuffer buffer, String fieldName, boolean[] array) {
+ buffer.append(arrayStart);
+ for (int i = 0; i < array.length; i++) {
+ if (i > 0) {
+ buffer.append(arraySeparator);
+ }
+ appendDetail(buffer, fieldName, array[i]);
+ }
+ buffer.append(arrayEnd);
+ }
+
+ /**
+ * Append to the toString a summary of a boolean array.
+ *
+ * @param buffer the StringBuffer to populate
+ * @param fieldName the field name, typically not used as already appended
+ * @param array the array to add to the toString, not null
+ */
+ protected void appendSummary(StringBuffer buffer, String fieldName, boolean[] array) {
+ appendSummarySize(buffer, fieldName, array.length);
+ }
+
+ //----------------------------------------------------------------------------
+
+ /**
* Append the class name.
*
* @param object the object whose name to output
@@ -679,7 +1115,7 @@
* Append the field start to the buffer.
*
* @param buffer the StringBuffer to populate
- * @param first is it the first field
+ * @param fieldName the field name
*/
protected void appendFieldStart(StringBuffer buffer, String fieldName) {
if (fieldName != null) {
@@ -692,7 +1128,7 @@
* Append the field end to the buffer.
*
* @param buffer the StringBuffer to populate
- * @param fieldName the field name
+ * @param fieldName the field name, typically not used as already appended
*/
protected void appendFieldEnd(StringBuffer buffer, String fieldName) {
appendFieldSeparator(buffer);
@@ -713,10 +1149,9 @@
/**
* Is this field to be output in full detail.
- * <p>
- * null defaults to full detail.
*
- * @param fullDetail the detail requested
+ * @param fullDetail the detail level requested
+ * @return whether full detail is to be shown
*/
protected boolean isFullDetail(Boolean fullDetailRequest) {
if (fullDetailRequest == null) {
@@ -740,27 +1175,35 @@
return name.substring(pos + 1);
}
- /**
- * Return a toString
- *
- * @return debug toString
- */
- public String toString() {
- return "ToStringStyle";
- }
-
//----------------------------------------------------------------------------
/**
* Default ToStringStyle
*/
- public static class DefaultToStringStyle extends ToStringStyle {
+ private static class DefaultToStringStyle extends ToStringStyle {
+
+ /**
+ * Constructor - use the static constant rather than instantiating.
+ */
+ private DefaultToStringStyle() {
+ super();
+ }
+
}
+ //----------------------------------------------------------------------------
+
/**
* ToStringStyle that does not print out the field names
*/
- public static class NoFieldNameToStringStyle extends ToStringStyle {
+ private static class NoFieldNameToStringStyle extends ToStringStyle {
+
+ /**
+ * Constructor - use the static constant rather than instantiating.
+ */
+ private NoFieldNameToStringStyle() {
+ super();
+ }
/**
* @see ToStringStyle#appendFieldStart(StringBuffer, String)
@@ -771,12 +1214,21 @@
}
+ //----------------------------------------------------------------------------
+
/**
* ToStringStyle that outputs on multiple lines
*/
- public static class MultiLineToStringStyle extends ToStringStyle {
+ private static class MultiLineToStringStyle extends ToStringStyle {
/**
+ * Constructor - use the static constant rather than instantiating.
+ */
+ private MultiLineToStringStyle() {
+ super();
+ }
+
+ /**
* @see ToStringStyle#appendContentStart(StringBuffer)
*/
protected void appendContentStart(StringBuffer buffer) {
@@ -805,69 +1257,71 @@
}
- /**
- * ToStringStyle that outputs in XML style
- */
- public static class XMLToStringStyle extends ToStringStyle {
-
- /**
- * Constructor
- */
- public XMLToStringStyle() {
- super();
- nullText = "null";
- sizeStartText = "size=";
- sizeEndText = "";
- }
-
- /**
- * @see ToStringStyle#appendStart(StringBuffer, Object)
- */
- public void appendStart(StringBuffer buffer, Object object) {
- buffer.append('<');
- buffer.append(getShortClassName(object.getClass()));
- buffer.append(" class=\"");
- appendClassName(buffer, object);
- buffer.append("\" hashCode=\"");
- appendIdentityHashCode(buffer, object);
- buffer.append("\">");
- buffer.append(SystemUtils.LINE_SEPARATOR);
- buffer.append(" ");
- }
-
- /**
- * @see ToStringStyle#appendFieldStart(StringBuffer, String)
- */
- protected void appendFieldStart(StringBuffer buffer, String fieldName) {
- buffer.append('<');
- buffer.append(fieldName);
- buffer.append('>');
- }
-
- /**
- * @see ToStringStyle#appendFieldEnd(StringBuffer, String)
- */
- protected void appendFieldEnd(StringBuffer buffer, String fieldName) {
- buffer.append("</");
- buffer.append(fieldName);
- buffer.append('>');
- buffer.append(SystemUtils.LINE_SEPARATOR);
- buffer.append(" ");
- }
-
- /**
- * @see ToStringStyle#appendEnd(StringBuffer, Object)
- */
- public void appendEnd(StringBuffer buffer, Object object) {
- int len = buffer.length();
- if (len > 2 && buffer.charAt(len - 1) == ' ' && buffer.charAt(len - 2) == ' ') {
- buffer.setLength(len - 2);
- }
- buffer.append("</");
- buffer.append(getShortClassName(object.getClass()));
- buffer.append("\">");
- }
-
- }
+ //----------------------------------------------------------------------------
+
+// /**
+// * ToStringStyle that outputs in XML style
+// */
+// private static class XMLToStringStyle extends ToStringStyle {
+//
+// /**
+// * Constructor - use the static constant rather than instantiating.
+// */
+// private XMLToStringStyle() {
+// super();
+// nullText = "null";
+// sizeStartText = "size=";
+// sizeEndText = "";
+// }
+//
+// /**
+// * @see ToStringStyle#appendStart(StringBuffer, Object)
+// */
+// public void appendStart(StringBuffer buffer, Object object) {
+// buffer.append('<');
+// buffer.append(getShortClassName(object.getClass()));
+// buffer.append(" class=\"");
+// appendClassName(buffer, object);
+// buffer.append("\" hashCode=\"");
+// appendIdentityHashCode(buffer, object);
+// buffer.append("\">");
+// buffer.append(SystemUtils.LINE_SEPARATOR);
+// buffer.append(" ");
+// }
+//
+// /**
+// * @see ToStringStyle#appendFieldStart(StringBuffer, String)
+// */
+// protected void appendFieldStart(StringBuffer buffer, String fieldName) {
+// buffer.append('<');
+// buffer.append(fieldName);
+// buffer.append('>');
+// }
+//
+// /**
+// * @see ToStringStyle#appendFieldEnd(StringBuffer, String)
+// */
+// protected void appendFieldEnd(StringBuffer buffer, String fieldName) {
+// buffer.append("</");
+// buffer.append(fieldName);
+// buffer.append('>');
+// buffer.append(SystemUtils.LINE_SEPARATOR);
+// buffer.append(" ");
+// }
+//
+// /**
+// * @see ToStringStyle#appendEnd(StringBuffer, Object)
+// */
+// public void appendEnd(StringBuffer buffer, Object object) {
+// int len = buffer.length();
+// if (len > 2 && buffer.charAt(len - 1) == ' ' && buffer.charAt(len - 2) == ' ') {
+// buffer.setLength(len - 2);
+// }
+// buffer.append("</");
+// buffer.append(getShortClassName(object.getClass()));
+// buffer.append("\">");
+// }
+//
+// }
}
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>