X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=src%2Forg%2Fz3950%2Fzing%2Fcql%2FModifierSet.java;h=8c5ec16a67132ed2a0efe56c7d406e26e77ce5ee;hb=af923f9b50aecdbf896af612e733817f96c4388a;hp=4f61bed08937b8eb2e1f5647e73e47362c7e9f9d;hpb=df372083094087da8590a526e0222c81c9ae7fc0;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 4f61bed..8c5ec16 100644 --- a/src/org/z3950/zing/cql/ModifierSet.java +++ b/src/org/z3950/zing/cql/ModifierSet.java @@ -1,68 +1,91 @@ -// $Id: ModifierSet.java,v 1.3 2002-11-06 00:05:58 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.3 2002-11-06 00:05:58 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"); } @@ -72,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(); @@ -82,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());