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) JSON, like
* <PRE>
{
childList: [
a1 {
propsMap: {
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},
},
childList: [
b1 {
propsMap: {
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},
},
childList: [
c1 {
propsMap: {
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 JsonCallTreePrinter extends AbstractIndentPropTreePrinter {
private boolean printComment = false;
// ------------------------------------------------------------------------
protected JsonCallTreePrinter(PrintWriter out, Builder builder) {
super(out, builder);
}
// ------------------------------------------------------------------------
@Override
public void printNodeHeader(PropTreeNode node) {
print(node.getName());
print(" {");
}
@Override
public void printNodeFooter(PropTreeNode node) {
print("}");
if (node.getParent() != null) {
print(",");
}
if (printComment) print("/* " + node.getName() + "*/");
}
@Override
public void printNodeValueListHeader(PropTreeNode node) {
print("propsMap: {");
}
@Override
public void printNodeValueListFooter(PropTreeNode node) {
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
public void printChildListHeader(PropTreeNode node) {
print("childList: [");
}
@Override
public void printChildListFooter(PropTreeNode node) {
print("]");
}
@Override
public void printChildHeader(PropTreeNode node) {
}
@Override
public void printChildFooter(PropTreeNode node) {
// print(",");
// print("/* ChildFooter " + node.getName() + " */");
}
// ------------------------------------------------------------------------
public static class Builder extends AbstractIndentPropTreePrinter.Builder {
public JsonCallTreePrinter build(PrintWriter out) {
return new JsonCallTreePrinter(out, this);
}
}
}