1 // $Id: CQLTermNode.java,v 1.6 2002-10-31 22:22:01 mike Exp $
3 package org.z3950.zing.cql;
7 * Represents a terminal node in a CQL parse-tree.
10 * @version $Id: CQLTermNode.java,v 1.6 2002-10-31 22:22:01 mike Exp $
12 public class CQLTermNode extends CQLNode {
13 private String qualifier;
14 private CQLRelation relation;
17 public CQLTermNode(String qualifier, CQLRelation relation, String term) {
18 this.qualifier = qualifier;
19 this.relation = relation;
23 String toXCQL(int level) {
24 return (indent(level) + "<searchClause>\n" +
25 indent(level+1) + "<index>" + xq(qualifier) + "</index>\n" +
26 relation.toXCQL(level+1) +
27 indent(level+1) + "<term>" + xq(term) + "</term>\n" +
28 indent(level) + "</searchClause>\n");
32 String quotedQualifier = maybeQuote(qualifier);
33 String quotedTerm = maybeQuote(term);
34 String res = quotedTerm;
36 if (!qualifier.equalsIgnoreCase("srw.serverChoice")) {
37 // ### We don't always need spaces around `relation'.
38 res = quotedQualifier + " " + relation.toCQL() + " " + quotedTerm;
44 static String maybeQuote(String str) {
45 // There _must_ be a better way to make this test ...
46 if (str.length() == 0 ||
47 str.indexOf('"') != -1 ||
48 str.indexOf(' ') != -1 ||
49 str.indexOf('\t') != -1 ||
50 str.indexOf('=') != -1 ||
51 str.indexOf('<') != -1 ||
52 str.indexOf('>') != -1 ||
53 str.indexOf('/') != -1 ||
54 str.indexOf('(') != -1 ||
55 str.indexOf(')') != -1) {
56 str = '"' + Utils.replaceString(str, "\"", "\\\"") + '"';