/* * Copyright Aduna (http://www.aduna-software.com/) (c) 1997-2006. * * Licensed under the Aduna BSD-style license. */ package org.openrdf.query.algebra.helpers; import org.openrdf.query.algebra.QueryModelNode; /** * QueryModelVisitor implementation that "prints" a tree representation of a * query model. The tree representations is printed to an internal character * buffer and can be retrieved using {@link #getTreeString()}. As an * alternative, the static utility method {@link #printTree(QueryModelNode)} can * be used. */ public class QueryModelTreePrinter extends QueryModelVisitorBase<RuntimeException> { /*-----------* * Constants * *-----------*/ private static final String LINE_SEPARATOR = System.getProperty("line.separator"); /*-----------* * Constants * *-----------*/ public static String printTree(QueryModelNode node) { QueryModelTreePrinter treePrinter = new QueryModelTreePrinter(); node.visit(treePrinter); return treePrinter.getTreeString(); } /*-----------* * Variables * *-----------*/ private String indentString = " "; private StringBuilder buf; private int indentLevel = 0; /*--------------* * Constructors * *--------------*/ public QueryModelTreePrinter() { buf = new StringBuilder(256); } /*---------* * Methods * *---------*/ public String getTreeString() { return buf.toString(); } @Override protected void meetNode(QueryModelNode node) { for (int i = 0; i < indentLevel; i++) { buf.append(indentString); } buf.append(node.getSignature()); buf.append(LINE_SEPARATOR); indentLevel++; super.meetNode(node); indentLevel--; } }