package dgm.trees; /** * Created with IntelliJ IDEA. * User: wires * Date: 3/20/13 * Time: 12:50 AM * To change this template use File | Settings | File Templates. */ public class LevelLimitingVisitor<A> implements TreeVisitor<A> { final TreeVisitor<A> adaptee; final int maxLevel; int currentLevel = 0; public LevelLimitingVisitor(int maxLevel, TreeVisitor<A> adaptee) { this.adaptee = adaptee; this.maxLevel = Math.max(0, maxLevel); } @Override public boolean visitNode(A node, TreeViewer<A> viewer) { // stop the recursion when maximum level is reached final boolean shouldStop = currentLevel >= maxLevel; return shouldStop || adaptee.visitNode(node, viewer); } @Override public void beginChildren(A node, TreeViewer<A> viewer) { currentLevel++; adaptee.beginChildren(node, viewer); } @Override public void endChildren(A node, TreeViewer<A> viewer) { currentLevel--; adaptee.endChildren(node, viewer); } }