Revert "Added Netbeans project."
[cql-java-moved-to-github.git] / src / org / z3950 / zing / cql / CQLTermNode.java
index a519215..f9b17ac 100644 (file)
@@ -1,4 +1,4 @@
-// $Id: CQLTermNode.java,v 1.22 2006-06-14 14:36:36 mike Exp $
+// $Id: CQLTermNode.java,v 1.28 2007-07-03 13:41:24 mike Exp $
 
 package org.z3950.zing.cql;
 import java.util.Properties;
@@ -8,63 +8,69 @@ import java.util.Vector;
 /**
  * Represents a terminal node in a CQL parse-tree.
  * A term node consists of the term String itself, together with,
- * optionally, a qualifier string and a relation.  Neither or both of
- * these must be provided - you can't have a qualifier without a
+ * optionally, an index string and a relation.  Neither or both of
+ * these must be provided - you can't have an index without a
  * relation or vice versa.
  *
- * @version    $Id: CQLTermNode.java,v 1.22 2006-06-14 14:36:36 mike Exp $
+ * @version    $Id: CQLTermNode.java,v 1.28 2007-07-03 13:41:24 mike Exp $
  */
 public class CQLTermNode extends CQLNode {
-    private String qualifier;
+    private String index;
     private CQLRelation relation;
     private String term;
 
     /**
-     * Creates a new term node with the specified <TT>qualifier</TT>,
+     * Creates a new term node with the specified <TT>index</TT>,
      * <TT>relation</TT> and <TT>term</TT>.  The first two may be
      * <TT>null</TT>, but the <TT>term</TT> may not.
      */
-    public CQLTermNode(String qualifier, CQLRelation relation, String term) {
-       this.qualifier = qualifier;
+    public CQLTermNode(String index, CQLRelation relation, String term) {
+       this.index = index;
        this.relation = relation;
        this.term = term;
     }
 
-    public String getQualifier() { return qualifier; }
+    public String getIndex() { return index; }
     public CQLRelation getRelation() { return relation; }
     public String getTerm() { return term; }
 
-    private static boolean isResultSetQualifier(String qual) {
+    private static boolean isResultSetIndex(String qual) {
        return (qual.equals("srw.resultSet") ||
                qual.equals("srw.resultSetId") ||
-               qual.equals("srw.resultSetName"));
+               qual.equals("srw.resultSetName") ||
+               qual.equals("cql.resultSet") ||
+               qual.equals("cql.resultSetId") ||
+               qual.equals("cql.resultSetName"));
     }
 
     public String getResultSetName() {
-       if (isResultSetQualifier(qualifier))
+       if (isResultSetIndex(index))
            return term;
        else
            return null;
     }
 
-    public String toXCQL(int level, Vector prefixes) {
+    public String toXCQL(int level, Vector<CQLPrefix> prefixes,
+                        Vector<ModifierSet> sortkeys) {
        return (indent(level) + "<searchClause>\n" +
                renderPrefixes(level+1, prefixes) +
-               indent(level+1) + "<index>" + xq(qualifier) + "</index>\n" +
-               relation.toXCQL(level+1, new Vector()) +
+               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");
     }
 
     public String toCQL() {
-       String quotedQualifier = maybeQuote(qualifier);
+       String quotedIndex = maybeQuote(index);
        String quotedTerm = maybeQuote(term);
        String res = quotedTerm;
 
-       if (qualifier != null &&
-           !qualifier.equalsIgnoreCase("srw.serverChoice")) {
+       if (index != null &&
+           !index.equalsIgnoreCase("srw.serverChoice") &&
+           !index.equalsIgnoreCase("cql.serverChoice")) {
            // ### We don't always need spaces around `relation'.
-           res = quotedQualifier + " " + relation.toCQL() + " " + quotedTerm;
+           res = quotedIndex + " " + relation.toCQL() + " " + quotedTerm;
        }
 
        return res;
@@ -74,7 +80,7 @@ public class CQLTermNode extends CQLNode {
     // regards truncation of the term and generation of truncation
     // attributes.  Change the interface to fix this.
     private Vector getAttrs(Properties config) throws PQFTranslationException {
-       Vector attrs = new Vector();
+       Vector<String> attrs = new Vector<String>();
 
        // Do this first so that if any other truncation or
        // completeness attributes are generated, they "overwrite"
@@ -88,9 +94,9 @@ public class CQLTermNode extends CQLNode {
        if (attr != null)
            attrs.add(attr);
 
-       attr = config.getProperty("qualifier." + qualifier);
+       attr = config.getProperty("index." + index);
        if (attr == null)
-           throw new UnknownQualifierException(qualifier);
+           throw new UnknownIndexException(index);
        attrs.add(attr);
 
        String rel = relation.getBase();
@@ -109,11 +115,12 @@ public class CQLTermNode extends CQLNode {
            throw new UnknownRelationException(rel);
        attrs.add(attr);
 
-       String[] mods = relation.getModifiers();
-       for (int i = 0; i < mods.length; i++) {
-           attr = config.getProperty("relationModifier." + mods[i]);
+       Vector<Modifier> mods = relation.getModifiers();
+       for (int i = 0; i < mods.size(); i++) {
+           String type = mods.get(i).type;
+           attr = config.getProperty("relationModifier." + type);
            if (attr == null)
-               throw new UnknownRelationModifierException(mods[i]);
+               throw new UnknownRelationModifierException(type);
            attrs.add(attr);
        }
 
@@ -148,7 +155,7 @@ public class CQLTermNode extends CQLNode {
     }
 
     public String toPQF(Properties config) throws PQFTranslationException {
-       if (isResultSetQualifier(qualifier)) {
+       if (isResultSetIndex(index)) {
            // Special case: ignore relation, modifiers, wildcards, etc.
            // There's parallel code in toType1BER()
            return "@set " + maybeQuote(term);
@@ -194,7 +201,7 @@ public class CQLTermNode extends CQLNode {
     }
 
     public byte[] toType1BER(Properties config) throws PQFTranslationException {
-       if (isResultSetQualifier(qualifier)) {
+       if (isResultSetIndex(index)) {
            // Special case: ignore relation, modifiers, wildcards, etc.
            // There's parallel code in toPQF()
            byte[] operand = new byte[term.length()+100];