Return-Path:
+ * Assists in implementing {@link Object#toString()} methods using reflection.
+ *
+ * This class uses reflection to determine the fields to append. Because these fields are usually private, the class
+ * uses {@link java.lang.reflect.AccessibleObject#setAccessible(java.lang.reflect.AccessibleObject[], boolean)} to
+ * change the visibility of the fields. This will fail under a security manager, unless the appropriate permissions are
+ * set up correctly.
+ *
+ * A typical invocation for this method would look like:
+ *
+ * You can also use the builder to debug 3rd party objects:
+ *
+ * A subclass can control field output by overriding the methods:
+ *
+ * public String toString() {
+ * return ReflectionToStringBuilder.toString(this);
+ * }
+ *
+ *
+ *
+ *
+ * System.out.println("An object: " + ReflectionToStringBuilder.toString(anObject));
+ *
+ *
+ *
+ *
+ *
+ *
+ * For example, this method does not include the password
field in the returned
+ * String
:
+ *
+ * public String toString() { + * return (new ReflectionToStringBuilder(this) { + * protected boolean accept(Field f) { + * return super.accept(f) && !f.getName().equals("password"); + * } + * }).toString(); + * }+ * + * + * + *
+ * The exact format of the toString
is determined by the {@link ToStringStyle} passed into the
+ * constructor.
+ *
+ * Builds a toString
value using the default ToStringStyle
through reflection.
+ *
+ * It uses AccessibleObject.setAccessible
to gain access to private fields. This means that it will
+ * throw a security exception if run under a security manager, if the permissions are not set up correctly. It is
+ * also not as efficient as testing explicitly.
+ *
+ * Transient members will be not be included, as they are likely derived. Static fields will not be included. + * Superclass fields will be appended. + *
+ * + * @param object + * the Object to be output + * @return the String result + * @throws IllegalArgumentException + * if the Object isnull
+ */
+ public static String toString(Object object) {
+ return toString(object, null, false, false, null);
+ }
+
+ /**
+ *
+ * Builds a toString
value through reflection.
+ *
+ * It uses AccessibleObject.setAccessible
to gain access to private fields. This means that it will
+ * throw a security exception if run under a security manager, if the permissions are not set up correctly. It is
+ * also not as efficient as testing explicitly.
+ *
+ * Transient members will be not be included, as they are likely derived. Static fields will not be included. + * Superclass fields will be appended. + *
+ * + *
+ * If the style is null
, the default ToStringStyle
is used.
+ *
toString
to create, may be null
+ * @return the String result
+ * @throws IllegalArgumentException
+ * if the Object or ToStringStyle
is null
+ */
+ public static String toString(Object object, ToStringStyle style) {
+ return toString(object, style, false, false, null);
+ }
+
+ /**
+ *
+ * Builds a toString
value through reflection.
+ *
+ * It uses AccessibleObject.setAccessible
to gain access to private fields. This means that it will
+ * throw a security exception if run under a security manager, if the permissions are not set up correctly. It is
+ * also not as efficient as testing explicitly.
+ *
+ * If the outputTransients
is 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.
+ *
+ * Static fields will not be included. Superclass fields will be appended. + *
+ * + *
+ * If the style is null
, the default ToStringStyle
is used.
+ *
toString
to create, may be null
+ * @param outputTransients
+ * whether to include transient fields
+ * @return the String result
+ * @throws IllegalArgumentException
+ * if the Object is null
+ */
+ public static String toString(Object object, ToStringStyle style, boolean outputTransients) {
+ return toString(object, style, outputTransients, false, null);
+ }
+
+ /**
+ *
+ * Builds a toString
value through reflection.
+ *
+ * It uses AccessibleObject.setAccessible
to gain access to private fields. This means that it will
+ * throw a security exception if run under a security manager, if the permissions are not set up correctly. It is
+ * also not as efficient as testing explicitly.
+ *
+ * If the outputTransients
is true
, transient fields will be output, otherwise they
+ * are ignored, as they are likely derived fields, and not part of the value of the Object.
+ *
+ * If the outputStatics
is true
, static fields will be output, otherwise they are
+ * ignored.
+ *
+ * Static fields will not be included. Superclass fields will be appended. + *
+ * + *
+ * If the style is null
, the default ToStringStyle
is used.
+ *
toString
to create, may be null
+ * @param outputTransients
+ * whether to include transient fields
+ * @param outputStatics
+ * whether to include transient fields
+ * @return the String result
+ * @throws IllegalArgumentException
+ * if the Object is null
+ * @since 2.1
+ */
+ public static String toString(Object object, ToStringStyle style, boolean outputTransients, boolean outputStatics) {
+ return toString(object, style, outputTransients, outputStatics, null);
+ }
+
+ /**
+ *
+ * Builds a toString
value through reflection.
+ *
+ * It uses AccessibleObject.setAccessible
to gain access to private fields. This means that it will
+ * throw a security exception if run under a security manager, if the permissions are not set up correctly. It is
+ * also not as efficient as testing explicitly.
+ *
+ * If the outputTransients
is true
, transient fields will be output, otherwise they
+ * are ignored, as they are likely derived fields, and not part of the value of the Object.
+ *
+ * If the outputStatics
is true
, static fields will be output, otherwise they are
+ * ignored.
+ *
+ * Superclass fields will be appended up to and including the specified superclass. A null superclass is treated as
+ * java.lang.Object
.
+ *
+ * If the style is null
, the default ToStringStyle
is used.
+ *
toString
to create, may be null
+ * @param outputTransients
+ * whether to include transient fields
+ * @param outputStatics
+ * whether to include static fields
+ * @param reflectUpToClass
+ * the superclass to reflect up to (inclusive), may be null
+ * @return the String result
+ * @throws IllegalArgumentException
+ * if the Object is null
+ * @since 2.1
+ */
+ public static String toString(Object object, ToStringStyle style, boolean outputTransients, boolean outputStatics,
+ Class reflectUpToClass) {
+ return new ReflectionToStringBuilder(object, style, null, reflectUpToClass, outputTransients, outputStatics)
+ .toString();
+ }
+
+ /**
+ *
+ * Builds a toString
value through reflection.
+ *
+ * It uses AccessibleObject.setAccessible
to gain access to private fields. This means that it will
+ * throw a security exception if run under a security manager, if the permissions are not set up correctly. It is
+ * also not as efficient as testing explicitly.
+ *
+ * If the outputTransients
is 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.
+ *
+ * Static fields will not be included. Superclass fields will be appended up to and including the specified
+ * superclass. A null superclass is treated as java.lang.Object
.
+ *
+ * If the style is null
, the default ToStringStyle
is used.
+ *
toString
to create, may be null
+ * @param outputTransients
+ * whether to include transient fields
+ * @param reflectUpToClass
+ * the superclass to reflect up to (inclusive), may be null
+ * @return the String result
+ * @throws IllegalArgumentException
+ * if the Object is null
+ * @since 2.0
+ */
+ public static String toString(Object object, ToStringStyle style,
+ boolean outputTransients, Class reflectUpToClass)
+ {
+ return new ReflectionToStringBuilder(object, style, null, reflectUpToClass, outputTransients).toString();
+ }
+
+ /**
+ * Builds a String for a toString method excluding the given field name.
+ *
+ * @param object
+ * The object to "toString".
+ * @param excludeFieldName
+ * The field name to exclude
+ * @return The toString value.
+ */
+ public static String toStringExclude(Object object, final String excludeFieldName) {
+ return toStringExclude(object, new String[]{excludeFieldName});
+ }
+
+ /**
+ * Builds a String for a toString method excluding the given field names.
+ *
+ * @param object
+ * The object to "toString".
+ * @param excludeFieldNames
+ * The field names to exclude. Null excludes nothing.
+ * @return The toString value.
+ */
+ public static String toStringExclude(Object object, Collection /*String*/ excludeFieldNames) {
+ return toStringExclude(object, toNoNullStringArray(excludeFieldNames));
+ }
+
+ /**
+ * Converts the given Collection into an array of Strings. The returned array does not contain null
+ * entries. Note that {@link Arrays#sort(Object[])} will throw an {@link NullPointerException} if an array element
+ * is null
.
+ *
+ * @param collection
+ * The collection to convert
+ * @return A new array of Strings.
+ */
+ static String[] toNoNullStringArray(Collection collection) {
+ if (collection == null) {
+ return ArrayUtils_EMPTY_STRING_ARRAY;
+ }
+ return toNoNullStringArray(collection.toArray());
+ }
+
+ /**
+ * Returns a new array of Strings without null elements. Internal method used to normalize exclude lists
+ * (arrays and collections). Note that {@link Arrays#sort(Object[])} will throw an {@link NullPointerException}
+ * if an array element is null
.
+ *
+ * @param array
+ * The array to check
+ * @return The given array or a new array without null.
+ */
+ static String[] toNoNullStringArray(Object[] array) {
+ ArrayList list = new ArrayList(array.length);
+ for (int i = 0; i < array.length; i++) {
+ Object e = array[i];
+ if (e != null) {
+ list.add(e.toString());
+ }
+ }
+ return (String[]) list.toArray(ArrayUtils_EMPTY_STRING_ARRAY);
+ }
+
+
+ /**
+ * Builds a String for a toString method excluding the given field names.
+ *
+ * @param object
+ * The object to "toString".
+ * @param excludeFieldNames
+ * The field names to exclude
+ * @return The toString value.
+ */
+ public static String toStringExclude(Object object, String[] excludeFieldNames) {
+ return new ReflectionToStringBuilder(object).setExcludeFieldNames(excludeFieldNames).toString();
+ }
+
+ /**
+ * Whether or not to append static fields.
+ */
+ private boolean appendStatics = false;
+
+ /**
+ * Whether or not to append transient fields.
+ */
+ private boolean appendTransients = false;
+
+ /**
+ * Which field names to exclude from output. Intended for fields like "password"
.
+ */
+ private String[] excludeFieldNames;
+
+ /**
+ * The last super class to stop appending fields for.
+ */
+ private Class upToClass = null;
+
+ /**
+ * + * Constructor. + *
+ * + *
+ * This constructor outputs using the default style set with setDefaultStyle
.
+ *
toString
for, must not be null
+ * @throws IllegalArgumentException
+ * if the Object passed in is null
+ */
+ public ReflectionToStringBuilder(Object object) {
+ super(object);
+ }
+
+ /**
+ * + * Constructor. + *
+ * + *
+ * If the style is null
, the default style is used.
+ *
toString
for, must not be null
+ * @param style
+ * the style of the toString
to create, may be null
+ * @throws IllegalArgumentException
+ * if the Object passed in is null
+ */
+ public ReflectionToStringBuilder(Object object, ToStringStyle style) {
+ super(object, style);
+ }
+
+ /**
+ * + * Constructor. + *
+ * + *
+ * If the style is null
, the default style is used.
+ *
+ * If the buffer is null
, a new one is created.
+ *
toString
for
+ * @param style
+ * the style of the toString
to create, may be null
+ * @param buffer
+ * the StringBuffer
to populate, may be null
+ * @throws IllegalArgumentException
+ * if the Object passed in is null
+ */
+ public ReflectionToStringBuilder(Object object, ToStringStyle style, StringBuffer buffer) {
+ super(object, style, buffer);
+ }
+
+ /**
+ * Constructor.
+ *
+ * @deprecated Use {@link #ReflectionToStringBuilder(Object,ToStringStyle,StringBuffer,Class,boolean,boolean)}.
+ *
+ * @param object
+ * the Object to build a toString
for
+ * @param style
+ * the style of the toString
to create, may be null
+ * @param buffer
+ * the StringBuffer
to populate, may be null
+ * @param reflectUpToClass
+ * the superclass to reflect up to (inclusive), may be null
+ * @param outputTransients
+ * whether to include transient fields
+ */
+ public ReflectionToStringBuilder(Object object, ToStringStyle style, StringBuffer buffer, Class reflectUpToClass,
+ boolean outputTransients) {
+ super(object, style, buffer);
+ this.setUpToClass(reflectUpToClass);
+ this.setAppendTransients(outputTransients);
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param object
+ * the Object to build a toString
for
+ * @param style
+ * the style of the toString
to create, may be null
+ * @param buffer
+ * the StringBuffer
to populate, may be null
+ * @param reflectUpToClass
+ * the superclass to reflect up to (inclusive), may be null
+ * @param outputTransients
+ * whether to include transient fields
+ * @param outputStatics
+ * whether to include static fields
+ * @since 2.1
+ */
+ public ReflectionToStringBuilder(Object object, ToStringStyle style, StringBuffer buffer, Class reflectUpToClass,
+ boolean outputTransients, boolean outputStatics) {
+ super(object, style, buffer);
+ this.setUpToClass(reflectUpToClass);
+ this.setAppendTransients(outputTransients);
+ this.setAppendStatics(outputStatics);
+ }
+
+ /**
+ * Returns whether or not to append the given Field
.
+ * true
.
+ * true
.
+ * Field
.
+ */
+ protected boolean accept(Field field) {
+ if (field.getName().indexOf(ClassUtils_INNER_CLASS_SEPARATOR_CHAR) != -1) {
+ // Reject field from inner class.
+ return false;
+ }
+ if (Modifier.isTransient(field.getModifiers()) && !this.isAppendTransients()) {
+ // Reject transient fields.
+ return false;
+ }
+ if (Modifier.isStatic(field.getModifiers()) && !this.isAppendStatics()) {
+ // Rject static fields.
+ return false;
+ }
+ if (this.getExcludeFieldNames() != null
+ && Arrays.binarySearch(this.getExcludeFieldNames(), field.getName()) >= 0) {
+ // Reject fields from the getExcludeFieldNames list.
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * + * Appends the fields and values defined by the given object of the given Class. + *
+ * + *
+ * If a cycle is detected as an object is "toString()'ed", such an object is rendered as if
+ * Object.toString()
had been called and not implemented by the object.
+ *
+ * Gets the last super class to stop appending fields for. + *
+ * + * @return The last super class to stop appending fields for. + */ + public Class getUpToClass() { + return this.upToClass; + } + + /** + *
+ * Calls java.lang.reflect.Field.get(Object)
.
+ *
+ * Gets whether or not to append static fields. + *
+ * + * @return Whether or not to append static fields. + * @since 2.1 + */ + public boolean isAppendStatics() { + return this.appendStatics; + } + + /** + *+ * Gets whether or not to append transient fields. + *
+ * + * @return Whether or not to append transient fields. + */ + public boolean isAppendTransients() { + return this.appendTransients; + } + + /** + *
+ * Append to the toString
an Object
array.
+ *
toString
+ * @return this
+ */
+ public ToStringBuilder reflectionAppendArray(Object array) {
+ this.getStyle().reflectionAppendArrayDetail(this.getStringBuffer(), null, array);
+ return this;
+ }
+
+ /**
+ * + * Sets whether or not to append static fields. + *
+ * + * @param appendStatics + * Whether or not to append static fields. + * @since 2.1 + */ + public void setAppendStatics(boolean appendStatics) { + this.appendStatics = appendStatics; + } + + /** + *+ * Sets whether or not to append transient fields. + *
+ * + * @param appendTransients + * Whether or not to append transient fields. + */ + public void setAppendTransients(boolean appendTransients) { + this.appendTransients = appendTransients; + } + + /** + * Sets the field names to exclude. + * + * @param excludeFieldNamesParam + * The excludeFieldNames to excluding from toString ornull
.
+ * @return this
+ */
+ public ReflectionToStringBuilder setExcludeFieldNames(String[] excludeFieldNamesParam) {
+ if (excludeFieldNamesParam == null) {
+ this.excludeFieldNames = null;
+ } else {
+ this.excludeFieldNames = toNoNullStringArray(excludeFieldNamesParam);
+ Arrays.sort(this.excludeFieldNames);
+ }
+ return this;
+ }
+
+ /**
+ * + * Sets the last super class to stop appending fields for. + *
+ * + * @param clazz + * The last super class to stop appending fields for. + */ + public void setUpToClass(Class clazz) { + this.upToClass = clazz; + } + + /** + *+ * Gets the String built by this builder. + *
+ * + * @return the built string + */ + public String toString() { + if (this.getObject() == null) { + return this.getStyle().getNullText(); + } + Class clazz = this.getObject().getClass(); + this.appendFieldsIn(clazz); + while (clazz.getSuperclass() != null && clazz != this.getUpToClass()) { + clazz = clazz.getSuperclass(); + this.appendFieldsIn(clazz); + } + return super.toString(); + } + + // + // NOTE: Unrolled from commons-lang bits + // + + private static final String[] ArrayUtils_EMPTY_STRING_ARRAY = {}; + + private static final char ClassUtils_INNER_CLASS_SEPARATOR_CHAR = '$'; +} \ No newline at end of file Propchange: geronimo/sandbox/gshell/trunk/gshell-support/gshell-common/src/main/java/org/apache/geronimo/gshell/common/tostring/ReflectionToStringBuilder.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: geronimo/sandbox/gshell/trunk/gshell-support/gshell-common/src/main/java/org/apache/geronimo/gshell/common/tostring/ReflectionToStringBuilder.java ------------------------------------------------------------------------------ svn:keywords = Date Author Id Revision HeadURL Propchange: geronimo/sandbox/gshell/trunk/gshell-support/gshell-common/src/main/java/org/apache/geronimo/gshell/common/tostring/ReflectionToStringBuilder.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: geronimo/sandbox/gshell/trunk/gshell-support/gshell-common/src/main/java/org/apache/geronimo/gshell/common/tostring/StandardToStringStyle.java URL: http://svn.apache.org/viewvc/geronimo/sandbox/gshell/trunk/gshell-support/gshell-common/src/main/java/org/apache/geronimo/gshell/common/tostring/StandardToStringStyle.java?rev=576632&view=auto ============================================================================== --- geronimo/sandbox/gshell/trunk/gshell-support/gshell-common/src/main/java/org/apache/geronimo/gshell/common/tostring/StandardToStringStyle.java (added) +++ geronimo/sandbox/gshell/trunk/gshell-support/gshell-common/src/main/java/org/apache/geronimo/gshell/common/tostring/StandardToStringStyle.java Mon Sep 17 17:22:04 2007 @@ -0,0 +1,552 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.geronimo.gshell.common.tostring; + +// +// NOTE: Copied and massaged from commons-lang 2.3 +// + +/** + *Works with {@link ToStringBuilder} to create a toString
.
This class is intended to be used as a singleton. + * There is no need to instantiate a new style each time. + * Simply instantiate the class once, customize the values as required, and + * store the result in a public static final variable for the rest of the + * program to access.
+ * + * @author Stephen Colebourne + * @author Pete Gieser + * @author Gary Gregory + * @since 1.0 + * @version $Id$ + */ +public class StandardToStringStyle extends ToStringStyle { + + /** + * Required for serialization support. + * + * @see java.io.Serializable + */ + private static final long serialVersionUID = 1L; + + /** + *Constructor.
+ */ + public StandardToStringStyle() { + super(); + } + + //--------------------------------------------------------------------- + + /** + *Gets whether to use the class name.
+ * + * @return the current useClassName flag + */ + public boolean isUseClassName() { + return super.isUseClassName(); + } + + /** + *Sets whether to use the class name.
+ * + * @param useClassName the new useClassName flag + */ + public void setUseClassName(boolean useClassName) { + super.setUseClassName(useClassName); + } + + //--------------------------------------------------------------------- + + /** + *Gets whether to output short or long class names.
+ * + * @return the current useShortClassName flag + * @since 2.0 + */ + public boolean isUseShortClassName() { + return super.isUseShortClassName(); + } + + /** + *Gets whether to output short or long class names.
+ * + * @return the current shortClassName flag + * @deprecated Use {@link #isUseShortClassName()} + * Method will be removed in Commons Lang 3.0. + */ + public boolean isShortClassName() { + return super.isUseShortClassName(); + } + + /** + *Sets whether to output short or long class names.
+ * + * @param useShortClassName the new useShortClassName flag + * @since 2.0 + */ + public void setUseShortClassName(boolean useShortClassName) { + super.setUseShortClassName(useShortClassName); + } + + /** + *Sets whether to output short or long class names.
+ * + * @param shortClassName the new shortClassName flag + * @deprecated Use {@link #setUseShortClassName(boolean)} + * Method will be removed in Commons Lang 3.0. + */ + public void setShortClassName(boolean shortClassName) { + super.setUseShortClassName(shortClassName); + } + + //--------------------------------------------------------------------- + + /** + *Gets whether to use the identity hash code.
+ * @return the current useIdentityHashCode flag + */ + public boolean isUseIdentityHashCode() { + return super.isUseIdentityHashCode(); + } + + /** + *Sets whether to use the identity hash code.
+ * + * @param useIdentityHashCode the new useIdentityHashCode flag + */ + public void setUseIdentityHashCode(boolean useIdentityHashCode) { + super.setUseIdentityHashCode(useIdentityHashCode); + } + + //--------------------------------------------------------------------- + + /** + *Gets whether to use the field names passed in.
+ * + * @return the current useFieldNames flag + */ + public boolean isUseFieldNames() { + return super.isUseFieldNames(); + } + + /** + *Sets whether to use the field names passed in.
+ * + * @param useFieldNames the new useFieldNames flag + */ + public void setUseFieldNames(boolean useFieldNames) { + super.setUseFieldNames(useFieldNames); + } + + //--------------------------------------------------------------------- + + /** + *Gets whether to use full detail when the caller doesn't + * specify.
+ * + * @return the current defaultFullDetail flag + */ + public boolean isDefaultFullDetail() { + return super.isDefaultFullDetail(); + } + + /** + *Sets whether to use full detail when the caller doesn't + * specify.
+ * + * @param defaultFullDetail the new defaultFullDetail flag + */ + public void setDefaultFullDetail(boolean defaultFullDetail) { + super.setDefaultFullDetail(defaultFullDetail); + } + + //--------------------------------------------------------------------- + + /** + *Gets whether to output array content detail.
+ * + * @return the current array content detail setting + */ + public boolean isArrayContentDetail() { + return super.isArrayContentDetail(); + } + + /** + *Sets whether to output array content detail.
+ * + * @param arrayContentDetail the new arrayContentDetail flag + */ + public void setArrayContentDetail(boolean arrayContentDetail) { + super.setArrayContentDetail(arrayContentDetail); + } + + //--------------------------------------------------------------------- + + /** + *Gets the array start text.
+ * + * @return the current array start text + */ + public String getArrayStart() { + return super.getArrayStart(); + } + + /** + *Sets the array start text.
+ * + *null
is accepted, but will be converted
+ * to an empty String.
Gets the array end text.
+ * + * @return the current array end text + */ + public String getArrayEnd() { + return super.getArrayEnd(); + } + + /** + *Sets the array end text.
+ * + *null
is accepted, but will be converted
+ * to an empty String.
Gets the array separator text.
+ * + * @return the current array separator text + */ + public String getArraySeparator() { + return super.getArraySeparator(); + } + + /** + *Sets the array separator text.
+ * + *null
is accepted, but will be converted
+ * to an empty String.
Gets the content start text.
+ * + * @return the current content start text + */ + public String getContentStart() { + return super.getContentStart(); + } + + /** + *Sets the content start text.
+ * + *null
is accepted, but will be converted
+ * to an empty String.
Gets the content end text.
+ * + * @return the current content end text + */ + public String getContentEnd() { + return super.getContentEnd(); + } + + /** + *Sets the content end text.
+ * + *null
is accepted, but will be converted
+ * to an empty String.
Gets the field name value separator text.
+ * + * @return the current field name value separator text + */ + public String getFieldNameValueSeparator() { + return super.getFieldNameValueSeparator(); + } + + /** + *Sets the field name value separator text.
+ * + *null
is accepted, but will be converted
+ * to an empty String.
Gets the field separator text.
+ * + * @return the current field separator text + */ + public String getFieldSeparator() { + return super.getFieldSeparator(); + } + + /** + *Sets the field separator text.
+ * + *null
is accepted, but will be converted
+ * to an empty String.
Gets whether the field separator should be added at the start + * of each buffer.
+ * + * @return the fieldSeparatorAtStart flag + * @since 2.0 + */ + public boolean isFieldSeparatorAtStart() { + return super.isFieldSeparatorAtStart(); + } + + /** + *Sets whether the field separator should be added at the start + * of each buffer.
+ * + * @param fieldSeparatorAtStart the fieldSeparatorAtStart flag + * @since 2.0 + */ + public void setFieldSeparatorAtStart(boolean fieldSeparatorAtStart) { + super.setFieldSeparatorAtStart(fieldSeparatorAtStart); + } + + //--------------------------------------------------------------------- + + /** + *Gets whether the field separator should be added at the end + * of each buffer.
+ * + * @return fieldSeparatorAtEnd flag + * @since 2.0 + */ + public boolean isFieldSeparatorAtEnd() { + return super.isFieldSeparatorAtEnd(); + } + + /** + *Sets whether the field separator should be added at the end + * of each buffer.
+ * + * @param fieldSeparatorAtEnd the fieldSeparatorAtEnd flag + * @since 2.0 + */ + public void setFieldSeparatorAtEnd(boolean fieldSeparatorAtEnd) { + super.setFieldSeparatorAtEnd(fieldSeparatorAtEnd); + } + + //--------------------------------------------------------------------- + + /** + *Gets the text to output when null
found.
null
found
+ */
+ public String getNullText() {
+ return super.getNullText();
+ }
+
+ /**
+ * Sets the text to output when null
found.
null
is accepted, but will be converted
+ * to an empty String.
null
found
+ */
+ public void setNullText(String nullText) {
+ super.setNullText(nullText);
+ }
+
+ //---------------------------------------------------------------------
+
+ /**
+ * Gets the text to output when a Collection
,
+ * Map
or Array
size is output.
This is output before the size value.
+ * + * @return the current start of size text + */ + public String getSizeStartText() { + return super.getSizeStartText(); + } + + /** + *Sets the start text to output when a Collection
,
+ * Map
or Array
size is output.
This is output before the size value.
+ * + *null
is accepted, but will be converted to
+ * an empty String.
Collection
,
+ * Map
or Array
size is output.
+ *
+ * This is output after the size value.
+ * + * @return the current end of size text + */ + public String getSizeEndText() { + return super.getSizeEndText(); + } + + /** + *Sets the end text to output when a Collection
,
+ * Map
or Array
size is output.
This is output after the size value.
+ * + *null
is accepted, but will be converted
+ * to an empty String.
Gets the start text to output when an Object
is
+ * output in summary mode.
This is output before the size value.
+ * + * @return the current start of summary text + */ + public String getSummaryObjectStartText() { + return super.getSummaryObjectStartText(); + } + + /** + *Sets the start text to output when an Object
is
+ * output in summary mode.
This is output before the size value.
+ * + *null
is accepted, but will be converted to
+ * an empty String.
Gets the end text to output when an Object
is
+ * output in summary mode.
This is output after the size value.
+ * + * @return the current end of summary text + */ + public String getSummaryObjectEndText() { + return super.getSummaryObjectEndText(); + } + + /** + *Sets the end text to output when an Object
is
+ * output in summary mode.
This is output after the size value.
+ * + *null
is accepted, but will be converted to
+ * an empty String.
Assists in implementing {@link Object#toString()} methods.
+ * + *This class enables a good and consistent toString()
to be built for any
+ * class or object. This class aims to simplify the process by:
To use this class write code as follows:
+ * + *+ * public class Person { + * String name; + * int age; + * boolean smoker; + * + * ... + * + * public String toString() { + * return new ToStringBuilder(this). + * append("name", name). + * append("age", age). + * append("smoker", smoker). + * toString(); + * } + * } + *+ * + *
This will produce a toString of the format:
+ * Person@7f54[name=Stephen,age=29,smoker=false]
To add the superclass toString
, use {@link #appendSuper}.
+ * To append the toString
from an object that is delegated
+ * to (or any other object), use {@link #appendToString}.
Alternatively, there is a method that uses reflection to determine
+ * the fields to test. Because these fields are usually private, the method,
+ * reflectionToString
, uses AccessibleObject.setAccessible
to
+ * change the visibility of the fields. This will fail under a security manager,
+ * unless the appropriate permissions are set up correctly. It is also
+ * slower than testing explicitly.
A typical invocation for this method would look like:
+ * + *+ * public String toString() { + * return ToStringBuilder.reflectionToString(this); + * } + *+ * + *
You can also use the builder to debug 3rd party objects:
+ * + *+ * System.out.println("An object: " + ToStringBuilder.reflectionToString(anObject)); + *+ * + *
The exact format of the toString
is determined by
+ * the {@link ToStringStyle} passed into the constructor.
Gets the default ToStringStyle
to use.
This could allow the ToStringStyle
to be
+ * controlled for an entire application with one call.
This might be used to have a verbose
+ * ToStringStyle
during development and a compact
+ * ToStringStyle
in production.
ToStringStyle
+ */
+ public static ToStringStyle getDefaultStyle() {
+ return defaultStyle;
+ }
+
+ /**
+ * Forwards to ReflectionToStringBuilder
.
Forwards to ReflectionToStringBuilder
.
toString
to create, may be null
+ * @return the String result
+ * @see ReflectionToStringBuilder#toString(Object,ToStringStyle)
+ */
+ public static String reflectionToString(Object object, ToStringStyle style) {
+ return ReflectionToStringBuilder.toString(object, style);
+ }
+
+ /**
+ * Forwards to ReflectionToStringBuilder
.
toString
to create, may be null
+ * @param outputTransients whether to include transient fields
+ * @return the String result
+ * @see ReflectionToStringBuilder#toString(Object,ToStringStyle,boolean)
+ */
+ public static String reflectionToString(Object object, ToStringStyle style, boolean outputTransients) {
+ return ReflectionToStringBuilder.toString(object, style, outputTransients, false, null);
+ }
+
+ /**
+ * Forwards to ReflectionToStringBuilder
.
toString
to create, may be null
+ * @param outputTransients whether to include transient fields
+ * @param reflectUpToClass the superclass to reflect up to (inclusive), may be null
+ * @return the String result
+ * @see ReflectionToStringBuilder#toString(Object,ToStringStyle,boolean,boolean,Class)
+ * @since 2.0
+ */
+ public static String reflectionToString(
+ Object object,
+ ToStringStyle style,
+ boolean outputTransients,
+ Class reflectUpToClass) {
+ return ReflectionToStringBuilder.toString(object, style, outputTransients, false, reflectUpToClass);
+ }
+
+ /**
+ * Sets the default ToStringStyle
to use.
ToStringStyle
+ * @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;
+ }
+
+ /**
+ * Current toString buffer.
+ */
+ private final StringBuffer buffer;
+
+ /**
+ * The object being output.
+ */
+ private final Object object;
+
+ /**
+ * The style of output to use.
+ */
+ private final ToStringStyle style;
+
+ /**
+ * Constructor for ToStringBuilder
.
This constructor outputs using the default style set with
+ * setDefaultStyle
.
toString
for
+ * @throws IllegalArgumentException if the Object passed in is
+ * null
+ */
+ public ToStringBuilder(Object object) {
+ this(object, getDefaultStyle(), null);
+ }
+
+ /**
+ * Constructor for ToStringBuilder
specifying the
+ * output style.
If the style is null
, the default style is used.
toString
for
+ * @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) {
+ this(object, style, null);
+ }
+
+ /**
+ * Constructor for ToStringBuilder
.
If the style is null
, the default style is used.
If the buffer is null
, a new one is created.
toString
for
+ * @param style the style of the toString
to create,
+ * may be null
+ * @param buffer the StringBuffer
to populate, may be
+ * null
+ */
+ public ToStringBuilder(Object object, ToStringStyle style, StringBuffer buffer) {
+ if (style == null) {
+ style = getDefaultStyle();
+ }
+ if (buffer == null) {
+ buffer = new StringBuffer(512);
+ }
+ this.buffer = buffer;
+ this.style = style;
+ this.object = object;
+
+ style.appendStart(buffer, object);
+ }
+
+ //----------------------------------------------------------------------------
+
+ /**
+ * Append to the toString
a boolean
+ * value.
toString
+ * @return this
+ */
+ public ToStringBuilder append(boolean value) {
+ style.append(buffer, null, value);
+ return this;
+ }
+
+ //----------------------------------------------------------------------------
+
+ /**
+ * Append to the toString
a boolean
+ * array.
toString
+ * @return this
+ */
+ public ToStringBuilder append(boolean[] array) {
+ style.append(buffer, null, array, null);
+ return this;
+ }
+
+ //----------------------------------------------------------------------------
+
+ /**
+ * Append to the toString
a byte
+ * value.
toString
+ * @return this
+ */
+ public ToStringBuilder append(byte value) {
+ style.append(buffer, null, value);
+ return this;
+ }
+
+ //----------------------------------------------------------------------------
+
+ /**
+ * Append to the toString
a byte
+ * array.
toString
+ * @return this
+ */
+ public ToStringBuilder append(byte[] array) {
+ style.append(buffer, null, array, null);
+ return this;
+ }
+
+ //----------------------------------------------------------------------------
+
+ /**
+ * Append to the toString
a char
+ * value.
toString
+ * @return this
+ */
+ public ToStringBuilder append(char value) {
+ style.append(buffer, null, value);
+ return this;
+ }
+
+ //----------------------------------------------------------------------------
+
+ /**
+ * Append to the toString
a char
+ * array.
toString
+ * @return this
+ */
+ public ToStringBuilder append(char[] array) {
+ style.append(buffer, null, array, null);
+ return this;
+ }
+
+ //----------------------------------------------------------------------------
+
+ /**
+ * Append to the toString
a double
+ * value.
toString
+ * @return this
+ */
+ public ToStringBuilder append(double value) {
+ style.append(buffer, null, value);
+ return this;
+ }
+
+ //----------------------------------------------------------------------------
+
+ /**
+ * Append to the toString
a double
+ * array.
toString
+ * @return this
+ */
+ public ToStringBuilder append(double[] array) {
+ style.append(buffer, null, array, null);
+ return this;
+ }
+
+ //----------------------------------------------------------------------------
+
+ /**
+ * Append to the toString
a float
+ * value.
toString
+ * @return this
+ */
+ public ToStringBuilder append(float value) {
+ style.append(buffer, null, value);
+ return this;
+ }
+
+ //----------------------------------------------------------------------------
+
+ /**
+ * Append to the toString
a float
+ * array.
toString
+ * @return this
+ */
+ public ToStringBuilder append(float[] array) {
+ style.append(buffer, null, array, null);
+ return this;
+ }
+
+ //----------------------------------------------------------------------------
+
+ /**
+ * Append to the toString
an int
+ * value.
toString
+ * @return this
+ */
+ public ToStringBuilder append(int value) {
+ style.append(buffer, null, value);
+ return this;
+ }
+
+ //----------------------------------------------------------------------------
+
+ /**
+ * Append to the toString
an int
+ * array.
toString
+ * @return this
+ */
+ public ToStringBuilder append(int[] array) {
+ style.append(buffer, null, array, null);
+ return this;
+ }
+
+ //----------------------------------------------------------------------------
+
+ /**
+ * Append to the toString
a long
+ * value.
toString
+ * @return this
+ */
+ public ToStringBuilder append(long value) {
+ style.append(buffer, null, value);
+ return this;
+ }
+
+ //----------------------------------------------------------------------------
+
+ /**
+ * Append to the toString
a long
+ * array.
toString
+ * @return this
+ */
+ public ToStringBuilder append(long[] array) {
+ style.append(buffer, null, array, null);
+ return this;
+ }
+
+ //----------------------------------------------------------------------------
+
+ /**
+ * Append to the toString
an Object
+ * value.
toString
+ * @return this
+ */
+ public ToStringBuilder append(Object obj) {
+ style.append(buffer, null, obj, null);
+ return this;
+ }
+
+ //----------------------------------------------------------------------------
+
+ /**
+ * Append to the toString
an Object
+ * array.
toString
+ * @return this
+ */
+ public ToStringBuilder append(Object[] array) {
+ style.append(buffer, null, array, null);
+ return this;
+ }
+
+ //----------------------------------------------------------------------------
+
+ /**
+ * Append to the toString
a short
+ * value.
toString
+ * @return this
+ */
+ public ToStringBuilder append(short value) {
+ style.append(buffer, null, value);
+ return this;
+ }
+
+ //----------------------------------------------------------------------------
+
+ /**
+ * Append to the toString
a short
+ * array.
toString
+ * @return this
+ */
+ public ToStringBuilder append(short[] array) {
+ style.append(buffer, null, array, null);
+ return this;
+ }
+
+ /**
+ * Append to the toString
a boolean
+ * value.
toString
+ * @return this
+ */
+ public ToStringBuilder append(String fieldName, boolean value) {
+ style.append(buffer, fieldName, value);
+ return this;
+ }
+
+ /**
+ * Append to the toString
a boolean
+ * array.
hashCode
+ * @return this
+ */
+ public ToStringBuilder append(String fieldName, boolean[] array) {
+ style.append(buffer, fieldName, array, null);
+ return this;
+ }
+
+ /**
+ * Append to the toString
a boolean
+ * array.
A boolean parameter controls the level of detail to show.
+ * Setting true
will output the array in full. Setting
+ * false
will output a summary, typically the size of
+ * the array.
toString
+ * @param fullDetail true
for detail, false
+ * for summary info
+ * @return this
+ */
+ public ToStringBuilder append(String fieldName, boolean[] array, boolean fullDetail) {
+ style.append(buffer, fieldName, array, BooleanUtils_toBooleanObject(fullDetail));
+ return this;
+ }
+
+ /**
+ * Append to the toString
an byte
+ * value.
toString
+ * @return this
+ */
+ public ToStringBuilder append(String fieldName, byte value) {
+ style.append(buffer, fieldName, value);
+ return this;
+ }
+
+ /**
+ * Append to the toString
a byte
array.
toString
+ * @return this
+ */
+ public ToStringBuilder append(String fieldName, byte[] array) {
+ style.append(buffer, fieldName, array, null);
+ return this;
+ }
+
+ /**
+ * Append to the toString
a byte
+ * array.
A boolean parameter controls the level of detail to show.
+ * Setting true
will output the array in full. Setting
+ * false
will output a summary, typically the size of
+ * the array.
+ *
+ * @param fieldName the field name
+ * @param array the array to add to the toString
+ * @param fullDetail true
for detail, false
+ * for summary info
+ * @return this
+ */
+ public ToStringBuilder append(String fieldName, byte[] array, boolean fullDetail) {
+ style.append(buffer, fieldName, array, BooleanUtils_toBooleanObject(fullDetail));
+ return this;
+ }
+
+ /**
+ *
Append to the toString
a char
+ * value.
toString
+ * @return this
+ */
+ public ToStringBuilder append(String fieldName, char value) {
+ style.append(buffer, fieldName, value);
+ return this;
+ }
+
+ /**
+ * Append to the toString
a char
+ * array.
toString
+ * @return this
+ */
+ public ToStringBuilder append(String fieldName, char[] array) {
+ style.append(buffer, fieldName, array, null);
+ return this;
+ }
+
+ /**
+ * Append to the toString
a char
+ * array.
A boolean parameter controls the level of detail to show.
+ * Setting true
will output the array in full. Setting
+ * false
will output a summary, typically the size of
+ * the array.
toString
+ * @param fullDetail true
for detail, false
+ * for summary info
+ * @return this
+ */
+ public ToStringBuilder append(String fieldName, char[] array, boolean fullDetail) {
+ style.append(buffer, fieldName, array, BooleanUtils_toBooleanObject(fullDetail));
+ return this;
+ }
+
+ /**
+ * Append to the toString
a double
+ * value.
toString
+ * @return this
+ */
+ public ToStringBuilder append(String fieldName, double value) {
+ style.append(buffer, fieldName, value);
+ return this;
+ }
+
+ /**
+ * Append to the toString
a double
+ * array.
toString
+ * @return this
+ */
+ public ToStringBuilder append(String fieldName, double[] array) {
+ style.append(buffer, fieldName, array, null);
+ return this;
+ }
+
+ /**
+ * Append to the toString
a double
+ * array.
A boolean parameter controls the level of detail to show.
+ * Setting true
will output the array in full. Setting
+ * false
will output a summary, typically the size of
+ * the array.
toString
+ * @param fullDetail true
for detail, false
+ * for summary info
+ * @return this
+ */
+ public ToStringBuilder append(String fieldName, double[] array, boolean fullDetail) {
+ style.append(buffer, fieldName, array, BooleanUtils_toBooleanObject(fullDetail));
+ return this;
+ }
+
+ /**
+ * Append to the toString
an float
+ * value.
toString
+ * @return this
+ */
+ public ToStringBuilder append(String fieldName, float value) {
+ style.append(buffer, fieldName, value);
+ return this;
+ }
+
+ /**
+ * Append to the toString
a float
+ * array.
toString
+ * @return this
+ */
+ public ToStringBuilder append(String fieldName, float[] array) {
+ style.append(buffer, fieldName, array, null);
+ return this;
+ }
+
+ /**
+ * Append to the toString
a float
+ * array.
A boolean parameter controls the level of detail to show.
+ * Setting true
will output the array in full. Setting
+ * false
will output a summary, typically the size of
+ * the array.
toString
+ * @param fullDetail true
for detail, false
+ * for summary info
+ * @return this
+ */
+ public ToStringBuilder append(String fieldName, float[] array, boolean fullDetail) {
+ style.append(buffer, fieldName, array, BooleanUtils_toBooleanObject(fullDetail));
+ return this;
+ }
+
+ /**
+ * Append to the toString
an int
+ * value.
toString
+ * @return this
+ */
+ public ToStringBuilder append(String fieldName, int value) {
+ style.append(buffer, fieldName, value);
+ return this;
+ }
+
+ /**
+ * Append to the toString
an int
+ * array.
toString
+ * @return this
+ */
+ public ToStringBuilder append(String fieldName, int[] array) {
+ style.append(buffer, fieldName, array, null);
+ return this;
+ }
+
+ /**
+ * Append to the toString
an int
+ * array.
A boolean parameter controls the level of detail to show.
+ * Setting true
will output the array in full. Setting
+ * false
will output a summary, typically the size of
+ * the array.
toString
+ * @param fullDetail true
for detail, false
+ * for summary info
+ * @return this
+ */
+ public ToStringBuilder append(String fieldName, int[] array, boolean fullDetail) {
+ style.append(buffer, fieldName, array, BooleanUtils_toBooleanObject(fullDetail));
+ return this;
+ }
+
+ /**
+ * Append to the toString
a long
+ * value.
toString
+ * @return this
+ */
+ public ToStringBuilder append(String fieldName, long value) {
+ style.append(buffer, fieldName, value);
+ return this;
+ }
+
+ /**
+ * Append to the toString
a long
+ * array.
toString
+ * @return this
+ */
+ public ToStringBuilder append(String fieldName, long[] array) {
+ style.append(buffer, fieldName, array, null);
+ return this;
+ }
+
+ /**
+ * Append to the toString
a long
+ * array.
A boolean parameter controls the level of detail to show.
+ * Setting true
will output the array in full. Setting
+ * false
will output a summary, typically the size of
+ * the array.
toString
+ * @param fullDetail true
for detail, false
+ * for summary info
+ * @return this
+ */
+ public ToStringBuilder append(String fieldName, long[] array, boolean fullDetail) {
+ style.append(buffer, fieldName, array, BooleanUtils_toBooleanObject(fullDetail));
+ return this;
+ }
+
+ /**
+ * Append to the toString
an Object
+ * value.
toString
+ * @return this
+ */
+ public ToStringBuilder append(String fieldName, Object obj) {
+ style.append(buffer, fieldName, obj, null);
+ return this;
+ }
+
+ /**
+ * Append to the toString
an Object
+ * value.
toString
+ * @param fullDetail true
for detail,
+ * false
for summary info
+ * @return this
+ */
+ public ToStringBuilder append(String fieldName, Object obj, boolean fullDetail) {
+ style.append(buffer, fieldName, obj, BooleanUtils_toBooleanObject(fullDetail));
+ return this;
+ }
+
+ /**
+ * Append to the toString
an Object
+ * array.
toString
+ * @return this
+ */
+ public ToStringBuilder append(String fieldName, Object[] array) {
+ style.append(buffer, fieldName, array, null);
+ return this;
+ }
+
+ /**
+ * Append to the toString
an Object
+ * array.
A boolean parameter controls the level of detail to show.
+ * Setting true
will output the array in full. Setting
+ * false
will output a summary, typically the size of
+ * the array.
toString
+ * @param fullDetail true
for detail, false
+ * for summary info
+ * @return this
+ */
+ public ToStringBuilder append(String fieldName, Object[] array, boolean fullDetail) {
+ style.append(buffer, fieldName, array, BooleanUtils_toBooleanObject(fullDetail));
+ return this;
+ }
+
+ /**
+ * Append to the toString
an short
+ * value.
toString
+ * @return this
+ */
+ public ToStringBuilder append(String fieldName, short value) {
+ style.append(buffer, fieldName, value);
+ return this;
+ }
+
+ /**
+ * Append to the toString
a short
+ * array.
toString
+ * @return this
+ */
+ public ToStringBuilder append(String fieldName, short[] array) {
+ style.append(buffer, fieldName, array, null);
+ return this;
+ }
+
+ /**
+ * Append to the toString
a short
+ * array.
A boolean parameter controls the level of detail to show.
+ * Setting true
will output the array in full. Setting
+ * false
will output a summary, typically the size of
+ * the array.
+ *
+ * @param fieldName the field name
+ * @param array the array to add to the toString
+ * @param fullDetail true
for detail, false
+ * for summary info
+ * @return this
+ */
+ public ToStringBuilder append(String fieldName, short[] array, boolean fullDetail) {
+ style.append(buffer, fieldName, array, BooleanUtils_toBooleanObject(fullDetail));
+ return this;
+ }
+
+ /**
+ *
Appends with the same format as the default Object toString()
+ *
method. Appends the class name followed by
+ * {@link System#identityHashCode(java.lang.Object)}.
Object
whose class name and id to output
+ * @return this
+ * @since 2.0
+ */
+ public ToStringBuilder appendAsObjectToString(Object object) {
+ ObjectUtils_appendIdentityToString(this.getStringBuffer(), object);
+ return this;
+ }
+
+ //----------------------------------------------------------------------------
+
+ /**
+ * Append the toString
from the superclass.
This method assumes that the superclass uses the same ToStringStyle
+ * as this one.
If superToString
is null
, no change is made.
super.toString()
+ * @return this
+ * @since 2.0
+ */
+ public ToStringBuilder appendSuper(String superToString) {
+ if (superToString != null) {
+ style.appendSuper(buffer, superToString);
+ }
+ return this;
+ }
+
+ /**
+ * Append the toString
from another object.
This method is useful where a class delegates most of the implementation of
+ * its properties to another class. You can then call toString()
on
+ * the other class and pass the result into this method.
+ * private AnotherObject delegate; + * private String fieldInThisClass; + * + * public String toString() { + * return new ToStringBuilder(this). + * appendToString(delegate.toString()). + * append(fieldInThisClass). + * toString(); + * }+ * + *
This method assumes that the other object uses the same ToStringStyle
+ * as this one.
If the toString
is null
, no change is made.
toString()
on another object
+ * @return this
+ * @since 2.0
+ */
+ public ToStringBuilder appendToString(String toString) {
+ if (toString != null) {
+ style.appendToString(buffer, toString);
+ }
+ return this;
+ }
+
+ /**
+ * Returns the Object
being output.
Gets the StringBuffer
being populated.
StringBuffer
being populated
+ */
+ public StringBuffer getStringBuffer() {
+ return buffer;
+ }
+
+ //----------------------------------------------------------------------------
+
+ /**
+ * Gets the ToStringStyle
being used.
ToStringStyle
being used
+ * @since 2.0
+ */
+ public ToStringStyle getStyle() {
+ return style;
+ }
+
+ /**
+ * Returns the built toString
.
This method appends the end of data indicator, and can only be called once. + * Use {@link #getStringBuffer} to get the current string state.
+ * + *If the object is null
, return the style's nullText
toString
+ */
+ public String toString() {
+ if (this.getObject() == null) {
+ this.getStringBuffer().append(this.getStyle().getNullText());
+ } else {
+ style.appendEnd(this.getStringBuffer(), this.getObject());
+ }
+ return this.getStringBuffer().toString();
+ }
+
+ //
+ // NOTE: Unrolled from commons-lang bits
+ //
+
+ private static Boolean BooleanUtils_toBooleanObject(boolean bool) {
+ return bool ? Boolean.TRUE : Boolean.FALSE;
+ }
+
+ private static StringBuffer ObjectUtils_appendIdentityToString(StringBuffer buffer, Object object) {
+ if (object == null) {
+ return null;
+ }
+ if (buffer == null) {
+ buffer = new StringBuffer();
+ }
+ return buffer
+ .append(object.getClass().getName())
+ .append('@')
+ .append(Integer.toHexString(System.identityHashCode(object)));
+ }
+}
\ No newline at end of file
Propchange: geronimo/sandbox/gshell/trunk/gshell-support/gshell-common/src/main/java/org/apache/geronimo/gshell/common/tostring/ToStringBuilder.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: geronimo/sandbox/gshell/trunk/gshell-support/gshell-common/src/main/java/org/apache/geronimo/gshell/common/tostring/ToStringBuilder.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: geronimo/sandbox/gshell/trunk/gshell-support/gshell-common/src/main/java/org/apache/geronimo/gshell/common/tostring/ToStringBuilder.java
------------------------------------------------------------------------------
svn:mime-type = text/plain