Add classes for visitor traversal
[cql-java-moved-to-github.git] / src / main / java / org / z3950 / zing / cql / ModifierSet.java
index 7b6991a..da94b8c 100644 (file)
@@ -1,8 +1,7 @@
-// $Id: ModifierSet.java,v 1.13 2007-07-03 13:30:18 mike Exp $
 
 package org.z3950.zing.cql;
-import java.util.Vector;
-import java.lang.StringBuffer;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * Represents a base String and a set of Modifiers.
@@ -15,18 +14,17 @@ import java.lang.StringBuffer;
  * zero or more <I>type</I> <I>comparison</I> <I>value</I> pairs,
  * where type, comparison and value are all strings.
  *
- * @version $Id: ModifierSet.java,v 1.13 2007-07-03 13:30:18 mike Exp $
  */
 public class ModifierSet {
-    String base;
-    Vector<Modifier> modifiers;
+    private String base;
+    private List<Modifier> modifiers;
 
     /**
      * Creates a new ModifierSet with the specified base.
      */
     public ModifierSet(String base) {
        this.base = base;
-       modifiers = new Vector<Modifier>();
+       modifiers = new ArrayList<Modifier>();
     }
 
     /**
@@ -73,40 +71,30 @@ public class ModifierSet {
      * @return
      * An array of Modifiers.
      */
-    public Vector<Modifier> getModifiers() {
+    public List<Modifier> getModifiers() {
        return modifiers;
     }
 
-    public String toXCQL(int level, String topLevelElement) {
-       return underlyingToXCQL(level, topLevelElement, "value");
-    }
-
-    public String sortKeyToXCQL(int level) {
-       return underlyingToXCQL(level, "key", "index");
-    }
-
-    private String underlyingToXCQL(int level, String topLevelElement,
-                                   String valueElement) {
-       StringBuffer buf = new StringBuffer();
-       buf.append(Utils.indent(level) + "<" + topLevelElement + ">\n");
-       buf.append(Utils.indent(level+1) +
-                  "<" + valueElement + ">" + Utils.xq(base) +
-                  "</" + valueElement + ">\n");
+    void toXCQLInternal(XCQLBuilder b, int level,
+        String topLevelElement, String valueElement) {
+       b.indent(level).append("<").append(topLevelElement).
+            append(">\n").indent(level + 1).append("<").
+            append(valueElement).append(">").xq(base).append("</").
+            append(valueElement).append(">\n");
        if (modifiers.size() > 0) {
-           buf.append(Utils.indent(level+1) + "<modifiers>\n");
+           b.indent(level + 1).append("<modifiers>\n");
            for (int i = 0; i < modifiers.size(); i++) {
-               buf.append(modifiers.get(i).toXCQL(level+2, "comparison"));
+              modifiers.get(i).toXCQLInternal(b, level+2, "comparison");
            }
-           buf.append(Utils.indent(level+1) + "</modifiers>\n");
+           b.indent(level + 1).append("</modifiers>\n");
        }
-       buf.append(Utils.indent(level) + "</" + topLevelElement + ">\n");
-       return buf.toString();
+       b.indent(level).append("</").append(topLevelElement).append(">\n");
     }
 
     public String toCQL() {
-       StringBuffer buf = new StringBuffer(base);
+       StringBuilder buf = new StringBuilder(base);
        for (int i = 0; i < modifiers.size(); i++) {
-           buf.append("/" + modifiers.get(i).toCQL());
+           buf.append("/").append(modifiers.get(i).toCQL());
        }
 
        return buf.toString();