org.ckkloverdos.string
Class ToString
java.lang.Object
org.ckkloverdos.string.ToString
- All Implemented Interfaces:
- java.lang.Cloneable
- Direct Known Subclasses:
- KVToString
public class ToString
- extends java.lang.Object
- implements java.lang.Cloneable
Generic class for producing string representations of objects.
The purpose of this class is twofold:
- To be used in implementing an object's
toString()
method.
- To be used whenever a series of name-value pairs should be printed
together.
It works in two modes of operation, namely horizontal and vertical.
Collection
s, Map
s, arrays, primitive values and object graphs
are handled in a uniform way.
This class can handle circular references and, with a little help from the
interested object, can also handle pretty printing for nested hierarchies.
The latter is achieved for a class by implementing the IToStringAware
interface.
In case you need to pretty-print a third-party class for which you do not
have access to or you should alter the source code in order implement
IToStringAware
, then you can register an
instance of IToStringAwareProvider
.
Note
When building a toString()
method for some object
items
of class A
, do not create other
instances of A
in order to put them as part of
items
's string representation, since this will lead to
successive toString()
calls on instances of A
,
resulting to StackOverflowError
.
Examples
- Implementing an object's
toString()
method.
public class Person
{
private String name;
private int age;
public String toString()
{
ToString ts = new ToString(this, false);
ts.add("name", name);
ts.add("age", age);
return ts.toString();
}
}
Usually, objects are part of a larger hierarachy, so in order for them to be
pretty-printed correctly, they should conform to the IToStringAware
interface. In this case, all the code tha should go to the
toString()
method, is now placed in the only method of
IToStringAware
. So, the class above should be modified as follows:
public class Person implements IToStringAware
{
private String name;
private int age;
public String toString()
{
ToString ts = new ToString(this, false);
toStringAware(ts);
return ts.toString();
}
public void toStringAware(ToString ts)
{
ts.addFile("name", name);
ts.addFile("age", age);
}
}
The key difference is that while toString()
can only be called from
an external object, toStringAware()
, if it exists, can be detected
and subsequently called by an existing ToString
instance. This instance
could have been created as part of an ancestor object containing a Person
object and since the pretty-printing is guaranteed within ToString
,
the pretty-printing of the hierarachy up to Person
is also guaranteed.
- Common variable pretty-printing.
Instead of doing the, rather common and ugly:
sop("Invalid info for: customer=" + customer + ", id=" + id + ", address=" + address + ", phone=" + phone);
we can do the following:
ToString ts = new ToString();
ts.literal("Invalid info for: ")
.add("customer", customer)
.add("id", id)
.add("address", address)
.add("phone", phone);
sop(ts);
- Implementing
IToStringAwareProvider
in order
to enable pretty-printing for log4j loggers.
import org.apache.log4j.Logger;
import org.ckkloverdos.collection.CollectionUtil;
import org.ckkloverdos.string.IToStringAwareProvider;
import org.ckkloverdos.string.ToString;
import java.util.Enumeration;
public class LoggerToStringAwareProvider implements IToStringAwareProvider
{
public void toStringAware(Object o, ToString ts)
{
Logger log = (Logger) o;
Enumeration appenders = log.getAllAppenders();
ts.add("name", log.getName());
ts.add("appenders", CollectionUtil.toList(appenders));
}
}
...
ToString.registerProvider(new LoggerToStringAwareProvider(), Logger.class);
- Author:
- Christos KK Loverdos
Constructor Summary |
ToString()
|
ToString(boolean multiline)
|
ToString(java.lang.Object theObject)
|
ToString(java.lang.Object theObject,
boolean multiline)
|
ToString(java.lang.Object theObject,
boolean multiline,
boolean fullTypeNames)
|
Method Summary |
ToString |
add(boolean o)
|
ToString |
add(byte o)
|
ToString |
add(char o)
|
ToString |
add(double o)
|
ToString |
add(float o)
|
ToString |
add(int o)
|
ToString |
add(long o)
|
ToString |
add(java.lang.Object o)
|
ToString |
add(short o)
|
ToString |
add(java.lang.String name,
boolean value)
|
ToString |
add(java.lang.String name,
byte value)
|
ToString |
add(java.lang.String name,
char value)
|
ToString |
add(java.lang.String name,
java.util.Date value,
java.text.DateFormat format)
|
ToString |
add(java.lang.String name,
double value)
|
ToString |
add(java.lang.String name,
float value)
|
ToString |
add(java.lang.String name,
int value)
|
ToString |
add(java.lang.String name,
long value)
|
ToString |
add(java.lang.String name,
java.lang.Object value)
|
ToString |
add(java.lang.String name,
short value)
|
ToString |
addIf(java.lang.String name,
java.lang.Object value,
boolean condition)
|
ToString |
addIfNotNull(java.lang.Object o)
|
ToString |
addIfNotNull(java.lang.String name,
java.lang.Object value)
|
ToString |
addNotNullReflectiveProperties()
|
ToString |
addNotNullReflectiveProperties(java.lang.Object obj)
|
ToString |
addNotNullReflectiveProperties(java.lang.Object obj,
java.lang.String[] exclude)
|
ToString |
addReflectiveProperties()
|
ToString |
addReflectiveProperties(java.lang.Object obj)
|
ToString |
addReflectiveProperties(java.lang.Object obj,
java.lang.String[] exclude)
|
ToString |
addReflectiveProperties(java.lang.Object obj,
java.lang.String[] exclude,
boolean includeNullValues)
|
ToString |
addValue(java.lang.Object o)
|
ToString |
append(java.lang.Object value)
|
protected java.lang.Object |
clone()
|
java.lang.String |
getArrayEnd()
|
java.lang.String |
getArrayStart()
|
java.lang.String |
getCircularRefString()
|
java.lang.String |
getEqualsString()
|
int |
getIndentationMultiplier()
|
java.lang.String |
getIndentationString()
|
java.lang.String |
getKeyValueSeparator()
|
java.lang.String |
getMapEnd()
|
java.lang.String |
getMapStart()
|
java.lang.String |
getNullValue()
|
java.lang.String |
getSingleLineItemSeparator()
|
char |
getStringQuote()
|
java.lang.String |
getTypeEnd()
|
java.lang.String |
getTypeStart()
|
boolean |
isEndIndented()
|
boolean |
isFullTypeNames()
|
boolean |
isMultiline()
|
boolean |
isStringQuoted()
|
boolean |
isUsingIndices()
|
boolean |
isUsingTypeNames()
|
static void |
main(java.lang.String[] args)
|
static void |
registerProvider(IToStringAwareProvider provider,
java.lang.Class c)
|
ToString |
restore(ToString ts)
Restores the internal state of this instance from another one. |
ToString |
save()
Creates a new instance with the same internal state as this one. |
void |
setArrayEnd(java.lang.String arrayEnd)
|
void |
setArrayStart(java.lang.String arrayStart)
|
void |
setCircularRefString(java.lang.String circularRefString)
|
ToString |
setEndIndented()
|
ToString |
setEndIndented(boolean arrayEndIndented)
|
ToString |
setEqualsString(java.lang.String equalsString)
|
ToString |
setFullTypeNames()
|
ToString |
setFullTypeNames(boolean fullTypeNames)
|
ToString |
setIndentationMultiplier(int indentationMultiplier)
|
ToString |
setIndentationString(java.lang.String indentationString)
|
ToString |
setKeyValueSeparator(java.lang.String nameValueSeparator)
|
ToString |
setMapEnd(java.lang.String mapEnd)
|
ToString |
setMapStart(java.lang.String mapStart)
|
ToString |
setMultiline()
|
ToString |
setMultiline(boolean multiline)
|
ToString |
setNullValue(java.lang.String nullValue)
|
ToString |
setSingleline()
|
ToString |
setSingleLineItemSeparator(java.lang.String singleLineItemSeparator)
|
ToString |
setStringQuote(char stringQuote)
|
ToString |
setStringQuoted()
|
ToString |
setStringQuoted(boolean stringQuoted)
|
ToString |
setTypeEnd(java.lang.String typeEnd)
|
ToString |
setTypeStart(java.lang.String typeStart)
|
ToString |
setUsingIndices(boolean useIndices)
|
ToString |
setUsingTypeNames()
|
ToString |
setUsingTypeNames(boolean usingTypeNames)
|
java.lang.String |
toString()
|
Methods inherited from class java.lang.Object |
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
ToString
public ToString(java.lang.Object theObject,
boolean multiline,
boolean fullTypeNames)
ToString
public ToString(java.lang.Object theObject,
boolean multiline)
ToString
public ToString(java.lang.Object theObject)
ToString
public ToString(boolean multiline)
ToString
public ToString()
registerProvider
public static void registerProvider(IToStringAwareProvider provider,
java.lang.Class c)
clone
protected java.lang.Object clone()
throws java.lang.CloneNotSupportedException
- Overrides:
clone
in class java.lang.Object
- Throws:
java.lang.CloneNotSupportedException
save
public ToString save()
- Creates a new instance with the same internal state as this one.
restore
public ToString restore(ToString ts)
- Restores the internal state of this instance from another one.
toString
public java.lang.String toString()
- Overrides:
toString
in class java.lang.Object
getKeyValueSeparator
public java.lang.String getKeyValueSeparator()
setKeyValueSeparator
public ToString setKeyValueSeparator(java.lang.String nameValueSeparator)
getTypeStart
public java.lang.String getTypeStart()
setTypeStart
public ToString setTypeStart(java.lang.String typeStart)
getTypeEnd
public java.lang.String getTypeEnd()
setTypeEnd
public ToString setTypeEnd(java.lang.String typeEnd)
getMapEnd
public java.lang.String getMapEnd()
setMapEnd
public ToString setMapEnd(java.lang.String mapEnd)
getMapStart
public java.lang.String getMapStart()
setMapStart
public ToString setMapStart(java.lang.String mapStart)
isUsingTypeNames
public boolean isUsingTypeNames()
setUsingTypeNames
public ToString setUsingTypeNames()
setUsingTypeNames
public ToString setUsingTypeNames(boolean usingTypeNames)
getCircularRefString
public java.lang.String getCircularRefString()
setCircularRefString
public void setCircularRefString(java.lang.String circularRefString)
isFullTypeNames
public boolean isFullTypeNames()
setFullTypeNames
public ToString setFullTypeNames()
setFullTypeNames
public ToString setFullTypeNames(boolean fullTypeNames)
getStringQuote
public char getStringQuote()
setStringQuote
public ToString setStringQuote(char stringQuote)
isStringQuoted
public boolean isStringQuoted()
setStringQuoted
public ToString setStringQuoted()
setStringQuoted
public ToString setStringQuoted(boolean stringQuoted)
isEndIndented
public boolean isEndIndented()
setEndIndented
public ToString setEndIndented()
setEndIndented
public ToString setEndIndented(boolean arrayEndIndented)
getSingleLineItemSeparator
public java.lang.String getSingleLineItemSeparator()
setSingleLineItemSeparator
public ToString setSingleLineItemSeparator(java.lang.String singleLineItemSeparator)
getNullValue
public java.lang.String getNullValue()
setNullValue
public ToString setNullValue(java.lang.String nullValue)
isUsingIndices
public boolean isUsingIndices()
getEqualsString
public java.lang.String getEqualsString()
setEqualsString
public ToString setEqualsString(java.lang.String equalsString)
setUsingIndices
public ToString setUsingIndices(boolean useIndices)
getIndentationString
public java.lang.String getIndentationString()
setIndentationString
public ToString setIndentationString(java.lang.String indentationString)
getIndentationMultiplier
public int getIndentationMultiplier()
setIndentationMultiplier
public ToString setIndentationMultiplier(int indentationMultiplier)
getArrayStart
public java.lang.String getArrayStart()
setArrayStart
public void setArrayStart(java.lang.String arrayStart)
getArrayEnd
public java.lang.String getArrayEnd()
setArrayEnd
public void setArrayEnd(java.lang.String arrayEnd)
isMultiline
public boolean isMultiline()
setSingleline
public ToString setSingleline()
setMultiline
public ToString setMultiline()
setMultiline
public ToString setMultiline(boolean multiline)
append
public ToString append(java.lang.Object value)
add
public ToString add(java.lang.String name,
java.lang.Object value)
addIfNotNull
public ToString addIfNotNull(java.lang.String name,
java.lang.Object value)
addIf
public ToString addIf(java.lang.String name,
java.lang.Object value,
boolean condition)
add
public ToString add(java.lang.String name,
java.util.Date value,
java.text.DateFormat format)
add
public ToString add(java.lang.String name,
byte value)
add
public ToString add(java.lang.String name,
boolean value)
add
public ToString add(java.lang.String name,
char value)
add
public ToString add(java.lang.String name,
double value)
add
public ToString add(java.lang.String name,
float value)
add
public ToString add(java.lang.String name,
int value)
add
public ToString add(java.lang.String name,
long value)
add
public ToString add(java.lang.String name,
short value)
add
public ToString add(java.lang.Object o)
addIfNotNull
public ToString addIfNotNull(java.lang.Object o)
add
public ToString add(byte o)
add
public ToString add(boolean o)
add
public ToString add(char o)
add
public ToString add(double o)
add
public ToString add(float o)
add
public ToString add(int o)
add
public ToString add(long o)
add
public ToString add(short o)
addNotNullReflectiveProperties
public ToString addNotNullReflectiveProperties(java.lang.Object obj,
java.lang.String[] exclude)
addReflectiveProperties
public ToString addReflectiveProperties(java.lang.Object obj,
java.lang.String[] exclude)
addReflectiveProperties
public ToString addReflectiveProperties(java.lang.Object obj,
java.lang.String[] exclude,
boolean includeNullValues)
addReflectiveProperties
public ToString addReflectiveProperties(java.lang.Object obj)
addReflectiveProperties
public ToString addReflectiveProperties()
addNotNullReflectiveProperties
public ToString addNotNullReflectiveProperties(java.lang.Object obj)
addNotNullReflectiveProperties
public ToString addNotNullReflectiveProperties()
addValue
public ToString addValue(java.lang.Object o)
main
public static void main(java.lang.String[] args)
throws java.beans.IntrospectionException
- Throws:
java.beans.IntrospectionException
Copyright © 1999-2007 Christos KK Loverdos. All Rights Reserved.