package org.sef4j.callstack.stattree.printers;
import java.io.PrintWriter;
import org.sef4j.core.helpers.proptree.model.PropTreeNode;
import org.sef4j.core.helpers.proptree.printers.AbstractIndentPropTreePrinter;
/**
* CallTreePrinter to print as indented ASCII, like
* <PRE>
| a1
| | histo1:{count0: 0, sum0: 0, count1: 0, sum1: 0, count2: 0, sum2: 0, count3: 0, sum3: 0, count4: 0, sum4: 0, count5: 0, sum5: 0, count6: 0, sum6: 0, count7: 0, sum7: 0, count8: 0, sum8: 0, count9: 0, sum9: 0}
| | pending1:{pendingCount: 0, pendingSumStartTime: 0}
| | perfStat1:{count0: 0, sum0: 0, count1: 0, sum1: 0, count2: 0, sum2: 0, count3: 0, sum3: 0, count4: 0, sum4: 0, count5: 0, sum5: 0, count6: 0, sum6: 0, count7: 0, sum7: 0, count8: 0, sum8: 0, count9: 0, sum9: 0}
| | b1
| | | histo1:{count0: 0, sum0: 0, count1: 0, sum1: 0, count2: 0, sum2: 0, count3: 0, sum3: 0, count4: 0, sum4: 0, count5: 0, sum5: 0, count6: 0, sum6: 0, count7: 0, sum7: 0, count8: 0, sum8: 0, count9: 0, sum9: 0}
| | | pending1:{pendingCount: 0, pendingSumStartTime: 0}
| | | perfStat1:{count0: 0, sum0: 0, count1: 0, sum1: 0, count2: 0, sum2: 0, count3: 0, sum3: 0, count4: 0, sum4: 0, count5: 0, sum5: 0, count6: 0, sum6: 0, count7: 0, sum7: 0, count8: 0, sum8: 0, count9: 0, sum9: 0}
| | | c1
| | | | histo1:{count0: 0, sum0: 0, count1: 0, sum1: 0, count2: 0, sum2: 0, count3: 0, sum3: 0, count4: 0, sum4: 0, count5: 0, sum5: 0, count6: 0, sum6: 0, count7: 0, sum7: 0, count8: 0, sum8: 0, count9: 0, sum9: 0}
| | | | pending1:{pendingCount: 0, pendingSumStartTime: 0}
| | | | perfStat1:{count0: 0, sum0: 0, count1: 0, sum1: 0, count2: 0, sum2: 0, count3: 0, sum3: 0, count4: 0, sum4: 0, count5: 0, sum5: 0, count6: 0, sum6: 0, count7: 0, sum7: 0, count8: 0, sum8: 0, count9: 0, sum9: 0}
</PRE>
*/
public class TextCallTreePrinter extends AbstractIndentPropTreePrinter {
private boolean useOpenClose; // FOR debug only?
// ------------------------------------------------------------------------
protected TextCallTreePrinter(PrintWriter out, Builder builder) {
super(out, builder);
}
// ------------------------------------------------------------------------
protected void printCurrIndent() {
for(int i = 0; i < currIndentLevel; i+=2) {
out.print('|');
if (i + 1 < currIndentLevel) {
out.print(' ');
}
}
}
@Override
public void printNodeHeader(PropTreeNode node) {
print(node.getName());
if (useOpenClose) print(" {");
}
@Override
public void printNodeFooter(PropTreeNode node) {
if (useOpenClose) print("}");
}
@Override
protected void printIndentNodeValueListHeader(PropTreeNode node) {
// do nothing
}
@Override
protected void printIndentNodeValueListFooter(PropTreeNode node) {
// do nothing
}
@Override
public void printNodeValueListHeader(PropTreeNode node) {
if (useOpenClose) print("propsMap: {");
}
@Override
public void printNodeValueListFooter(PropTreeNode node) {
if (useOpenClose) print("}");
}
@Override
public void printNodeValueHeader(PropTreeNode node, String propName) {
printCurrIndent();
// print(propName + ": "); ... cf already printed with value format printer!
}
@Override
public void printNodeValueFooter(PropTreeNode node, String propName) {
println();
}
@Override
protected void printIndentChildListHeader(PropTreeNode node) {
// do nothing
}
@Override
protected void printIndentChildListFooter(PropTreeNode node) {
// do nothing
}
@Override
public void printChildListHeader(PropTreeNode node) {
if (useOpenClose) print("childList: [");
}
@Override
public void printChildListFooter(PropTreeNode node) {
if (useOpenClose) print("]");
}
protected void printIndentNodeHeader(PropTreeNode node) {
super.printIndentNodeHeader(node);
}
protected void printIndentNodeFooter(PropTreeNode node) {
decrIndent();
}
@Override
public void printChildHeader(PropTreeNode node) {
}
@Override
public void printChildFooter(PropTreeNode node) {
if (useOpenClose) print(",");
}
// ------------------------------------------------------------------------
public static class Builder extends AbstractIndentPropTreePrinter.Builder {
public Builder() {
}
public TextCallTreePrinter build(PrintWriter out) {
return new TextCallTreePrinter(out, this);
}
}
}