-// $Id: CQLTermNode.java,v 1.28 2007-07-03 13:41:24 mike Exp $
package org.z3950.zing.cql;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
-
/**
* Represents a terminal node in a CQL parse-tree.
* A term node consists of the term String itself, together with,
* these must be provided - you can't have an index without a
* relation or vice versa.
*
- * @version $Id: CQLTermNode.java,v 1.28 2007-07-03 13:41:24 mike Exp $
*/
public class CQLTermNode extends CQLNode {
private String index;
}
@Override
+ public void traverse(CQLNodeVisitor visitor) {
+ //we visit relation first to allow filtering on relation type in the visitor
+ relation.traverse(visitor);
+ visitor.onTermNode(this);
+ }
+
+ @Override
public String getResultSetName() {
if (isResultSetIndex(index))
return term;
}
@Override
- public String toXCQL(int level, List<CQLPrefix> prefixes,
+ void toXCQLInternal(XCQLBuilder b, int level, List<CQLPrefix> prefixes,
List<ModifierSet> sortkeys) {
- return (indent(level) + "<searchClause>\n" +
- renderPrefixes(level+1, prefixes) +
- indent(level+1) + "<index>" + xq(index) + "</index>\n" +
- relation.toXCQL(level+1) +
- indent(level+1) + "<term>" + xq(term) + "</term>\n" +
- renderSortKeys(level+1, sortkeys) +
- indent(level) + "</searchClause>\n");
+ b.indent(level).append("<searchClause>\n");
+ renderPrefixes(b, level + 1, prefixes);
+ b.indent(level + 1).append("<index>").xq(index).append("</index>\n");
+ relation.toXCQLInternal(b, level + 1);
+ b.indent(level + 1).append("<term>").xq(term).append("</term>\n");
+ renderSortKeys(b, level + 1, sortkeys);
+ b.indent(level).append("</searchClause>\n");
}
@Override