fda71474ade6a65488c1a043f2cf317d5d4952be
[cql-java-moved-to-github.git] / src / org / z3950 / zing / cql / CQLTermNode.java
1 // $Id: CQLTermNode.java,v 1.6 2002-10-31 22:22:01 mike Exp $
2
3 package org.z3950.zing.cql;
4
5
6 /**
7  * Represents a terminal node in a CQL parse-tree.
8  * ##
9  *
10  * @version     $Id: CQLTermNode.java,v 1.6 2002-10-31 22:22:01 mike Exp $
11  */
12 public class CQLTermNode extends CQLNode {
13     private String qualifier;
14     private CQLRelation relation;
15     private String term;
16
17     public CQLTermNode(String qualifier, CQLRelation relation, String term) {
18         this.qualifier = qualifier;
19         this.relation = relation;
20         this.term = term;
21     }
22
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");
29     }
30
31     String toCQL() {
32         String quotedQualifier = maybeQuote(qualifier);
33         String quotedTerm = maybeQuote(term);
34         String res = quotedTerm;
35
36         if (!qualifier.equalsIgnoreCase("srw.serverChoice")) {
37             // ### We don't always need spaces around `relation'.
38             res = quotedQualifier + " " + relation.toCQL() + " " + quotedTerm;
39         }
40
41         return res;
42     }
43
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, "\"", "\\\"") + '"';
57         }
58
59         return str;
60     }
61 }