package dgm.trees;
import com.google.common.base.Function;
import dgm.trees.TreeViewer;
import dgm.trees.TreeVisitor;
public class PrettyPrinter<T> implements TreeVisitor<T>
{
protected final Function<T,String> show;
protected int currentLevel = 0;
protected StringBuilder currentOutput = new StringBuilder();
public PrettyPrinter(Function<T,String> show)
{
this.show = show;
}
protected void doIndent()
{
for(int i = 0; i < currentLevel; i++)
currentOutput.append(" ");
}
@Override
public boolean visitNode(T node, TreeViewer<T> viewer)
{
doIndent();
currentOutput.append(show.apply(node));
currentOutput.append('\n');
// keep recursions going
return false;
}
@Override
public void beginChildren(T node, TreeViewer<T> viewer)
{
currentLevel++;
}
@Override
public void endChildren(T node, TreeViewer<T> viewer)
{
currentLevel--;
}
public String toString()
{
return currentOutput.toString();
}
}