X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=src%2Forg%2Fz3950%2Fzing%2Fcql%2FModifierSet.java;h=8c5ec16a67132ed2a0efe56c7d406e26e77ce5ee;hb=8e35f984081a29de9b53af7c1b2fbf981c474d88;hp=3e45fb71ea6f57d084fce9d6b9ba9ae8c26f94d3;hpb=d35c815366893704f2e2038f6977a6dbbbfc778e;p=cql-java-moved-to-github.git
diff --git a/src/org/z3950/zing/cql/ModifierSet.java b/src/org/z3950/zing/cql/ModifierSet.java
index 3e45fb7..8c5ec16 100644
--- a/src/org/z3950/zing/cql/ModifierSet.java
+++ b/src/org/z3950/zing/cql/ModifierSet.java
@@ -1,64 +1,91 @@
-// $Id: ModifierSet.java,v 1.2 2002-11-02 01:20:42 mike Exp $
+// $Id: ModifierSet.java,v 1.12 2007-06-29 10:20:41 mike Exp $
package org.z3950.zing.cql;
import java.util.Vector;
import java.lang.StringBuffer;
/**
- * Represents a base String and a set of modifier Strings.
+ * Represents a base String and a set of Modifiers.
*
* This class is used as a workhorse delegate by both CQLRelation and
* CQLProxNode - two functionally very separate classes that happen to
- * require the same data structures and functionality.
+ * require similar data structures and functionality.
+ *
+ * A ModifierSet consists of a ``base'' string together with a set of
+ * zero or more type comparison value pairs,
+ * where type, comparison and value are all strings.
*
- * @version $Id: ModifierSet.java,v 1.2 2002-11-02 01:20:42 mike Exp $
+ * @version $Id: ModifierSet.java,v 1.12 2007-06-29 10:20:41 mike Exp $
*/
public class ModifierSet {
String base;
- Vector modifiers;
+ Vector modifiers;
+ /**
+ * Creates a new ModifierSet with the specified base.
+ */
public ModifierSet(String base) {
this.base = base;
- modifiers = new Vector();
+ modifiers = new Vector();
+ }
+
+ /**
+ * Returns the base string with which the ModifierSet was created.
+ */
+ public String getBase() {
+ return base;
}
- public void addModifier(String type, String value) {
- Vector modifier = new Vector();
- modifier.add(type);
- modifier.add(value);
+ /**
+ * Adds a modifier of the specified type,
+ * comparison and value to a ModifierSet.
+ */
+ public void addModifier(String type, String comparison, String value) {
+ Modifier modifier = new Modifier(type, comparison, value);
modifiers.add(modifier);
}
- public Vector[] getModifiers() {
+ /**
+ * Adds a modifier of the specified type, but with no
+ * comparison and value, to a ModifierSet.
+ */
+ public void addModifier(String type) {
+ Modifier modifier = new Modifier(type);
+ modifiers.add(modifier);
+ }
+
+ /**
+ * Returns the value of the modifier in the specified ModifierSet
+ * that corresponds to the specified type.
+ */
+ public String modifier(String type) {
int n = modifiers.size();
- Vector[] res = new Vector[n];
for (int i = 0; i < n; i++) {
- res[i] = (Vector) modifiers.get(i);
+ Modifier mod = modifiers.get(i);
+ if (mod.type.equals(type))
+ return mod.value;
}
+ return null;
+ }
- return res;
+ /**
+ * Returns an array of the modifiers in a ModifierSet.
+ * @return
+ * An array of Modifiers.
+ */
+ public Vector getModifiers() {
+ return modifiers;
}
public String toXCQL(int level, String topLevelElement) {
StringBuffer buf = new StringBuffer();
- buf.append (Utils.indent(level) + "<" + topLevelElement + ">\n" +
- Utils.indent(level+1) + "" + Utils.xq(base) +
- "\n");
- Vector[] mods = getModifiers();
- if (mods.length > 0) {
+ buf.append(Utils.indent(level) + "<" + topLevelElement + ">\n");
+ buf.append(Utils.indent(level+1) +
+ "" + Utils.xq(base) + "\n");
+ if (modifiers.size() > 0) {
buf.append(Utils.indent(level+1) + "\n");
- for (int i = 0; i < mods.length; i++) {
- Vector modifier = mods[i];
- buf.append(Utils.indent(level+2)).
- append("");
- if (modifier.get(0) != null)
- buf.append("").
- append(Utils.xq((String) modifier.get(0))).
- append("");
- buf.append("").
- append(Utils.xq((String) modifier.get(1))).
- append("");
- buf.append("\n");
+ for (int i = 0; i < modifiers.size(); i++) {
+ buf.append(modifiers.get(i).toXCQL(level+2, "comparison"));
}
buf.append(Utils.indent(level+1) + "\n");
}
@@ -68,9 +95,8 @@ public class ModifierSet {
public String toCQL() {
StringBuffer buf = new StringBuffer(base);
- Vector[] mods = getModifiers();
- for (int i = 0; i < mods.length; i++) {
- buf.append("/").append(mods[i].get(1));
+ for (int i = 0; i < modifiers.size(); i++) {
+ buf.append("/" + modifiers.get(i).toCQL());
}
return buf.toString();
@@ -78,13 +104,13 @@ public class ModifierSet {
public static void main(String[] args) {
if (args.length < 1) {
- System.err.println("Usage: ModifierSet [ ]...");
+ System.err.println("Usage: ModifierSet [ ]...");
System.exit(1);
}
ModifierSet res = new ModifierSet(args[0]);
- for (int i = 1; i < args.length; i += 2) {
- res.addModifier(args[i], args[i+1]);
+ for (int i = 1; i < args.length; i += 3) {
+ res.addModifier(args[i], args[i+1], args[i+2]);
}
System.out.println(res.toCQL());