com.pamirs.pradar.common.ToStringBuilder Maven / Gradle / Ivy
package com.pamirs.pradar.common;
import java.util.Collection;
import java.util.Map;
public class ToStringBuilder implements Builder {
/**
* The default style of output to use, not null.
*/
private static volatile ToStringStyle defaultStyle = ToStringStyle.DEFAULT_STYLE;
//----------------------------------------------------------------------------
/**
* Gets the default ToStringStyle
to use.
This method gets a
* singleton default value, typically for the whole JVM. Changing this default should generally
* only be done during application startup. It is recommended to pass a
* ToStringStyle
to the constructor instead of using this global default.
*
This method can be used from multiple threads. Internally, a volatile
* variable is used to provide the guarantee that the latest value set using {@link
* #setDefaultStyle} is the value returned. It is strongly recommended that the default style is
* only changed during application startup.
One reason for changing the default could
* be to have a verbose style during development and a compact style in production.
*
* @return the default ToStringStyle
, never null
*/
public static ToStringStyle getDefaultStyle() {
return defaultStyle;
}
/**
* Sets the default ToStringStyle
to use.
This method sets a
* singleton default value, typically for the whole JVM. Changing this default should generally
* only be done during application startup. It is recommended to pass a
* ToStringStyle
to the constructor instead of changing this global default.
*
This method is not intended for use from multiple threads. Internally, a
* volatile
variable is used to provide the guarantee that the latest value set is
* the value returned from {@link #getDefaultStyle}.
*
* @param style the default ToStringStyle
* @throws IllegalArgumentException if the style is null
*/
public static void setDefaultStyle(final ToStringStyle style) {
if (style == null) {
throw new IllegalArgumentException("The style must not be null");
}
defaultStyle = style;
}
//----------------------------------------------------------------------------
/**
* Uses ReflectionToStringBuilder
to generate a toString
for the
* specified object.
*
* @param object the Object to be output
* @return the String result
* @see ReflectionToStringBuilder#toString(Object)
*/
public static String reflectionToString(final Object object) {
return ReflectionToStringBuilder.toString(object);
}
/**
* Uses ReflectionToStringBuilder
to generate a toString
for the
* specified object.
*
* @param object the Object to be output
* @param style the style of the toString
to create, may be null
* @return the String result
*/
public static String reflectionToString(final Object object, final ToStringStyle style) {
return ReflectionToStringBuilder.toString(object, style);
}
/**
* Uses ReflectionToStringBuilder
to generate a toString
for the
* specified object.
*
* @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
* @see ReflectionToStringBuilder#toString(Object, ToStringStyle, boolean)
*/
public static String reflectionToString(final Object object, final ToStringStyle style, final boolean outputTransients) {
return ReflectionToStringBuilder.toString(object, style, outputTransients, false, null);
}
/**
* Uses ReflectionToStringBuilder
to generate a toString
for the
* specified object.
*
* @param the type of the object
* @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
* @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(
final T object,
final ToStringStyle style,
final boolean outputTransients,
final Class super T> reflectUpToClass) {
return ReflectionToStringBuilder.toString(object, style, outputTransients, false, reflectUpToClass);
}
//----------------------------------------------------------------------------
/**
* Current toString buffer, not null.
*/
private final StringBuffer buffer;
/**
* The object being output, may be null.
*/
private final Object object;
/**
* The style of output to use, not null.
*/
private final ToStringStyle style;
/**
* Constructs a builder for the specified object using the default output style.
*
This default style is obtained from {@link #getDefaultStyle()}.
*
* @param object the Object to build a toString
for, not recommended to be null
*/
public ToStringBuilder(final Object object) {
this(object, null, null);
}
/**
* Constructs a builder for the specified object using the a defined output style.
*
If the style is null
, the default style is used.
*
* @param object the Object to build a toString
for, not recommended to be null
* @param style the style of the toString
to create, null uses the default style
*/
public ToStringBuilder(final Object object, final ToStringStyle style) {
this(object, style, null);
}
/**
* Constructs a builder for the specified object.
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, not recommended to be null
* @param style the style of the toString
to create, null uses the default style
* @param buffer the StringBuffer
to populate, may be null
*/
public ToStringBuilder(final 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.
*
* @param value the value to add to the toString
* @return this
*/
public ToStringBuilder append(final boolean value) {
style.append(buffer, null, value);
return this;
}
//----------------------------------------------------------------------------
/**
* Append to the toString
a boolean
array.
*
* @param array the array to add to the toString
* @return this
*/
public ToStringBuilder append(final boolean[] array) {
style.append(buffer, null, array, null);
return this;
}
//----------------------------------------------------------------------------
/**
* Append to the toString
a byte
value.
*
* @param value the value to add to the toString
* @return this
*/
public ToStringBuilder append(final byte value) {
style.append(buffer, null, value);
return this;
}
//----------------------------------------------------------------------------
/**
* Append to the toString
a byte
array.
*
* @param array the array to add to the toString
* @return this
*/
public ToStringBuilder append(final byte[] array) {
style.append(buffer, null, array, null);
return this;
}
//----------------------------------------------------------------------------
/**
* Append to the toString
a char
value.
*
* @param value the value to add to the toString
* @return this
*/
public ToStringBuilder append(final char value) {
style.append(buffer, null, value);
return this;
}
//----------------------------------------------------------------------------
/**
* Append to the toString
a char
array.
*
* @param array the array to add to the toString
* @return this
*/
public ToStringBuilder append(final char[] array) {
style.append(buffer, null, array, null);
return this;
}
//----------------------------------------------------------------------------
/**
* Append to the toString
a double
value.
*
* @param value the value to add to the toString
* @return this
*/
public ToStringBuilder append(final double value) {
style.append(buffer, null, value);
return this;
}
/**
* Append to the toString
a double
value.
*
* @param value the value to add to the toString
* @return this
*/
public ToStringBuilder append(final Collection> value) {
style.append(buffer, null, value, true);
return this;
}
/**
* Append to the toString
a double
value.
*
* @param value the value to add to the toString
* @return this
*/
public ToStringBuilder append(final Map, ?> value) {
style.append(buffer, null, value, true);
return this;
}
//----------------------------------------------------------------------------
/**
* Append to the toString
a double
array.
*
* @param array the array to add to the toString
* @return this
*/
public ToStringBuilder append(final double[] array) {
style.append(buffer, null, array, null);
return this;
}
//----------------------------------------------------------------------------
/**
* Append to the toString
a float
value.
*
* @param value the value to add to the toString
* @return this
*/
public ToStringBuilder append(final float value) {
style.append(buffer, null, value);
return this;
}
//----------------------------------------------------------------------------
/**
* Append to the toString
a float
array.
*
* @param array the array to add to the toString
* @return this
*/
public ToStringBuilder append(final float[] array) {
style.append(buffer, null, array, null);
return this;
}
//----------------------------------------------------------------------------
/**
* Append to the toString
an int
value.
*
* @param value the value to add to the toString
* @return this
*/
public ToStringBuilder append(final int value) {
style.append(buffer, null, value);
return this;
}
//----------------------------------------------------------------------------
/**
* Append to the toString
an int
array.
*
* @param array the array to add to the toString
* @return this
*/
public ToStringBuilder append(final int[] array) {
style.append(buffer, null, array, null);
return this;
}
//----------------------------------------------------------------------------
/**
* Append to the toString
a long
value.
*
* @param value the value to add to the toString
* @return this
*/
public ToStringBuilder append(final long value) {
style.append(buffer, null, value);
return this;
}
//----------------------------------------------------------------------------
/**
* Append to the toString
a long
array.
*
* @param array the array to add to the toString
* @return this
*/
public ToStringBuilder append(final long[] array) {
style.append(buffer, null, array, null);
return this;
}
//----------------------------------------------------------------------------
/**
* Append to the toString
an Object
value.
*
* @param obj the value to add to the toString
* @return this
*/
public ToStringBuilder append(final Object obj) {
style.append(buffer, null, obj, null);
return this;
}
//----------------------------------------------------------------------------
/**
* Append to the toString
an Object
array.
*
* @param array the array to add to the toString
* @return this
*/
public ToStringBuilder append(final Object[] array) {
style.append(buffer, null, array, null);
return this;
}
//----------------------------------------------------------------------------
/**
* Append to the toString
a short
value.
*
* @param value the value to add to the toString
* @return this
*/
public ToStringBuilder append(final short value) {
style.append(buffer, null, value);
return this;
}
//----------------------------------------------------------------------------
/**
* Append to the toString
a short
array.
*
* @param array the array to add to the toString
* @return this
*/
public ToStringBuilder append(final short[] array) {
style.append(buffer, null, array, null);
return this;
}
/**
* Append to the toString
a boolean
value.
*
* @param fieldName the field name
* @param value the value to add to the toString
* @return this
*/
public ToStringBuilder append(final String fieldName, final boolean value) {
style.append(buffer, fieldName, value);
return this;
}
/**
* Append to the toString
a boolean
array.
*
* @param fieldName the field name
* @param array the array to add to the hashCode
* @return this
*/
public ToStringBuilder append(final String fieldName, final 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.
*
* @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(final String fieldName, final boolean[] array, final boolean fullDetail) {
style.append(buffer, fieldName, array, Boolean.valueOf(fullDetail));
return this;
}
/**
* Append to the toString
an byte
value.
*
* @param fieldName the field name
* @param value the value to add to the toString
* @return this
*/
public ToStringBuilder append(final String fieldName, final byte value) {
style.append(buffer, fieldName, value);
return this;
}
/**
* Append to the toString
a byte
array.
*
* @param fieldName the field name
* @param array the array to add to the toString
* @return this
*/
public ToStringBuilder append(final String fieldName, final 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(final String fieldName, final byte[] array, final boolean fullDetail) {
style.append(buffer, fieldName, array, Boolean.valueOf(fullDetail));
return this;
}
/**
*
Append to the toString
a char
value.
*
* @param fieldName the field name
* @param value the value to add to the toString
* @return this
*/
public ToStringBuilder append(final String fieldName, final char value) {
style.append(buffer, fieldName, value);
return this;
}
/**
* Append to the toString
a char
array.
*
* @param fieldName the field name
* @param array the array to add to the toString
* @return this
*/
public ToStringBuilder append(final String fieldName, final 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.
*
* @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(final String fieldName, final char[] array, final boolean fullDetail) {
style.append(buffer, fieldName, array, Boolean.valueOf(fullDetail));
return this;
}
/**
* Append to the toString
a double
value.
*
* @param fieldName the field name
* @param value the value to add to the toString
* @return this
*/
public ToStringBuilder append(final String fieldName, final double value) {
style.append(buffer, fieldName, value);
return this;
}
/**
* Append to the toString
a double
array.
*
* @param fieldName the field name
* @param array the array to add to the toString
* @return this
*/
public ToStringBuilder append(final String fieldName, final 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.
*
* @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(final String fieldName, final double[] array, final boolean fullDetail) {
style.append(buffer, fieldName, array, Boolean.valueOf(fullDetail));
return this;
}
/**
* Append to the toString
an float
value.
*
* @param fieldName the field name
* @param value the value to add to the toString
* @return this
*/
public ToStringBuilder append(final String fieldName, final float value) {
style.append(buffer, fieldName, value);
return this;
}
/**
* Append to the toString
a float
array.
*
* @param fieldName the field name
* @param array the array to add to the toString
* @return this
*/
public ToStringBuilder append(final String fieldName, final 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.
*
* @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(final String fieldName, final float[] array, final boolean fullDetail) {
style.append(buffer, fieldName, array, Boolean.valueOf(fullDetail));
return this;
}
/**
* Append to the toString
an int
value.
*
* @param fieldName the field name
* @param value the value to add to the toString
* @return this
*/
public ToStringBuilder append(final String fieldName, final int value) {
style.append(buffer, fieldName, value);
return this;
}
/**
* Append to the toString
an int
array.
*
* @param fieldName the field name
* @param array the array to add to the toString
* @return this
*/
public ToStringBuilder append(final String fieldName, final 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.
*
* @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(final String fieldName, final int[] array, final boolean fullDetail) {
style.append(buffer, fieldName, array, Boolean.valueOf(fullDetail));
return this;
}
/**
* Append to the toString
a long
value.
*
* @param fieldName the field name
* @param value the value to add to the toString
* @return this
*/
public ToStringBuilder append(final String fieldName, final long value) {
style.append(buffer, fieldName, value);
return this;
}
/**
* Append to the toString
a long
array.
*
* @param fieldName the field name
* @param array the array to add to the toString
* @return this
*/
public ToStringBuilder append(final String fieldName, final 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.
*
* @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(final String fieldName, final long[] array, final boolean fullDetail) {
style.append(buffer, fieldName, array, Boolean.valueOf(fullDetail));
return this;
}
/**
* Append to the toString
an Object
value.
*
* @param fieldName the field name
* @param obj the value to add to the toString
* @return this
*/
public ToStringBuilder append(final String fieldName, final Object obj) {
style.append(buffer, fieldName, obj, null);
return this;
}
/**
* Append to the toString
an Object
value.
*
* @param fieldName the field name
* @param obj the value to add to the toString
* @param fullDetail true
for detail, false
for summary info
* @return this
*/
public ToStringBuilder append(final String fieldName, final Object obj, final boolean fullDetail) {
style.append(buffer, fieldName, obj, Boolean.valueOf(fullDetail));
return this;
}
/**
* Append to the toString
an Object
array.
*
* @param fieldName the field name
* @param array the array to add to the toString
* @return this
*/
public ToStringBuilder append(final String fieldName, final 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.
*
* @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(final String fieldName, final Object[] array, final boolean fullDetail) {
style.append(buffer, fieldName, array, Boolean.valueOf(fullDetail));
return this;
}
/**
* Append to the toString
an short
value.
*
* @param fieldName the field name
* @param value the value to add to the toString
* @return this
*/
public ToStringBuilder append(final String fieldName, final short value) {
style.append(buffer, fieldName, value);
return this;
}
/**
* Append to the toString
a short
array.
*
* @param fieldName the field name
* @param array the array to add to the toString
* @return this
*/
public ToStringBuilder append(final String fieldName, final 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(final String fieldName, final short[] array, final boolean fullDetail) {
style.append(buffer, fieldName, array, Boolean.valueOf(fullDetail));
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.
*
* @param superToString the result of super.toString()
* @return this
* @since 2.0
*/
public ToStringBuilder appendSuper(final 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.
*
* @param toString the result of toString()
on another object
* @return this
* @since 2.0
*/
public ToStringBuilder appendToString(final String toString) {
if (toString != null) {
style.appendToString(buffer, toString);
}
return this;
}
/**
* Returns the Object
being output.
*
* @return The object being output.
* @since 2.0
*/
public Object getObject() {
return object;
}
/**
* Gets the StringBuffer
being populated.
*
* @return the StringBuffer
being populated
*/
public StringBuffer getStringBuffer() {
return buffer;
}
//----------------------------------------------------------------------------
/**
* Gets the ToStringStyle
being used.
*
* @return the 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
*
* @return the String toString
*/
@Override
public String toString() {
if (this.getObject() == null) {
this.getStringBuffer().append(this.getStyle().getNullText());
} else {
style.appendEnd(this.getStringBuffer(), this.getObject());
}
return this.getStringBuffer().toString();
}
/**
* Returns the String that was build as an object representation. The default implementation
* utilizes the {@link #toString()} implementation.
*
* @return the String toString
* @see #toString()
* @since 3.0
*/
@Override
public String build() {
return toString();
}
}