Add initial version of most of the CQL*Node classes.
[cql-java-moved-to-github.git] / src / org / z3950 / zing / cql / CQLTermNode.java
1 // $Id: CQLTermNode.java,v 1.1 2002-10-25 07:38:17 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.1 2002-10-25 07:38:17 mike Exp $
11  */
12 class CQLTermNode extends CQLNode {
13     private String qualifier;
14     private String relation;
15     private String value;
16
17     public CQLTermNode(String qualifier, String relation, String value) {
18         this.qualifier = qualifier;
19         this.relation = relation;
20         this.value = value;
21     }
22
23     String toXCQL(int level) {
24         return (indent(level) + "<searchClause>\n" +
25                 indent(level+1) + "<index>" + qualifier + "<index>\n" +
26                 indent(level+1) + "<relation>" + relation + "<relation>\n" +
27                 indent(level+1) + "<term>" + value + "<term>\n" +
28                 indent(level) + "</searchClause>\n");
29     }
30
31     String toCQL() {
32         String res = value;
33
34         if (res.indexOf('"') != -1) {
35             // ### precede each '"' with a '/'
36         }
37
38         if (res.indexOf('"') != -1 ||
39             res.indexOf(' ') != -1 ||
40             res.indexOf('\t') != -1 ||
41             res.indexOf('=') != -1 ||
42             res.indexOf('<') != -1 ||
43             res.indexOf('>') != -1 ||
44             res.indexOf('/') != -1 ||
45             res.indexOf('(') != -1 ||
46             res.indexOf(')') != -1) {
47             res = '"' + res + '"';
48         }
49
50         // ### The qualifier may need quoting.
51         // ### We don't always need spaces around `relation'.
52         return qualifier + " " + relation + " " + value;
53     }
54 }