org.ckkloverdos.string
Class ToString

java.lang.Object
  extended by 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:

  1. To be used in implementing an object's toString() method.
  2. 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. Collections, Maps, 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

  1. 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.
  2. 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);
      
  3. 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
 

Constructor Detail

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()
Method Detail

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.