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>
"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}
"a1:pending1" : {pendingCount: 0, pendingSumStartTime: 0}
"a1: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}
"a1/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}
"a1/b1:pending1" : {pendingCount: 0, pendingSumStartTime: 0}
"a1/b1: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}
"a1/b1/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}
"a1/b1/c1:pending1" : {pendingCount: 0, pendingSumStartTime: 0}
"a1/b1/c1: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}
"a2: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}
"a2:pending1" : {pendingCount: 0, pendingSumStartTime: 0}
"a2: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}
"a2/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}
"a2/b1:pending1" : {pendingCount: 0, pendingSumStartTime: 0}
"a2/b1: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}
"a3: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}
"a3:pending1" : {pendingCount: 0, pendingSumStartTime: 0}
"a3: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 PathJsonCallTreePrinter extends AbstractIndentPropTreePrinter {
private String currNodePath;
// ------------------------------------------------------------------------
protected PathJsonCallTreePrinter(PrintWriter out, Builder builder) {
super(out, builder);
}
// ------------------------------------------------------------------------
@Override
public void printNodeHeader(PropTreeNode node) {
currNodePath = node.getPathStr();
}
@Override
public void printNodeFooter(PropTreeNode node) {
}
@Override
public void printNodeValueListHeader(PropTreeNode node) {
}
@Override
public void printNodeValueListFooter(PropTreeNode node) {
}
@Override
public void printNodeValueHeader(PropTreeNode node, String propName) {
print("\"" + currNodePath // node.getPathStr()
+ ":" + propName + "\" : ");
}
@Override
public void printNodeValueFooter(PropTreeNode node, String propName) {
println();
}
@Override
public void printChildListHeader(PropTreeNode node) {
}
@Override
public void printChildListFooter(PropTreeNode node) {
}
@Override
public void printChildHeader(PropTreeNode node) {
}
@Override
public void printChildFooter(PropTreeNode node) {
}
// ------------------------------------------------------------------------
public static class Builder extends AbstractIndentPropTreePrinter.Builder {
public Builder() {
super();
this.useIndent = false; // ovewrite to skip use of indentation
}
public PathJsonCallTreePrinter build(PrintWriter out) {
return new PathJsonCallTreePrinter(out, this);
}
}
}