package com.christophdietze.jack.shared.util;
public class SimpleToStringBuilder {
private StringBuilder sb = new StringBuilder();
private boolean beforeFirstArg = true;
private boolean stringClosed = false;
public static SimpleToStringBuilder create(Object object) {
SimpleToStringBuilder csb = new SimpleToStringBuilder(object);
StringBuilder sb = csb.sb;
if (object == null) {
sb.append("null");
csb.stringClosed = true;
return csb;
}
csb.appendPrefix(object);
return csb;
}
public static SimpleToStringBuilder create(Object object, String superToString) {
SimpleToStringBuilder csb = new SimpleToStringBuilder(object);
StringBuilder sb = csb.sb;
if (object == null) {
sb.append("null");
csb.stringClosed = true;
return csb;
}
if (superToString.charAt(superToString.length() - 1) == ']') {
sb.append(superToString, 0, superToString.length() - 1);
csb.beforeFirstArg = false;
} else {
csb.appendPrefix(object);
}
return csb;
}
private SimpleToStringBuilder(Object object) {
}
private void appendPrefix(Object object) {
// sb.append(object.getClass().getName());
String fullName = object.getClass().getName();
int prefixLen = fullName.lastIndexOf('$');
if (prefixLen == -1) {
prefixLen = fullName.lastIndexOf('.');
}
prefixLen++;
String name = fullName.substring(prefixLen);
sb.append(name);
// sb.append("@");
// sb.append(Integer.toHexString(System.identityHashCode(object)));
sb.append("[");
}
public SimpleToStringBuilder append(String label, Object value) {
appendFieldSeperator();
sb.append(label);
sb.append("=");
sb.append(value);
return this;
}
public SimpleToStringBuilder append(Object value) {
appendFieldSeperator();
sb.append(value);
return this;
}
private void appendFieldSeperator() {
if (beforeFirstArg) {
beforeFirstArg = false;
} else {
sb.append(",");
}
}
@Override
public String toString() {
if (!stringClosed) {
sb.append("]");
stringClosed = true;
}
return sb.toString();
}
}