X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Forg%2Fz3950%2Fzing%2Fcql%2FModifierSet.java;h=8c5ec16a67132ed2a0efe56c7d406e26e77ce5ee;hb=43c5ce0c75761cdad125f0e8dc64868541b45485;hp=0f282e162efdab3fe48e87cdb9ce3c5ea562d220;hpb=e4126f4c547f5f823fbfceb4169786bc7cf98401;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 0f282e1..8c5ec16 100644 --- a/src/org/z3950/zing/cql/ModifierSet.java +++ b/src/org/z3950/zing/cql/ModifierSet.java @@ -1,32 +1,32 @@ -// $Id: ModifierSet.java,v 1.8 2007-06-06 12:22:01 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 similar data structures and functionality. *

* A ModifierSet consists of a ``base'' string together with a set of - * zero or more type=value pairs, where both type and - * value are strings. Types may be null, values may not. + * zero or more type comparison value pairs, + * where type, comparison and value are all strings. * - * @version $Id: ModifierSet.java,v 1.8 2007-06-06 12:22:01 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(); } /** @@ -37,13 +37,20 @@ public class ModifierSet { } /** - * Adds a modifier of the specified type and - * value to a ModifierSet. + * Adds a modifier of the specified type, + * comparison and value to a ModifierSet. */ - public void addModifier(String type, String value) { - Vector modifier = new Vector(); - modifier.add(type); - modifier.add(value); + public void addModifier(String type, String comparison, String value) { + Modifier modifier = new Modifier(type, comparison, value); + modifiers.add(modifier); + } + + /** + * 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); } @@ -54,9 +61,9 @@ public class ModifierSet { public String modifier(String type) { int n = modifiers.size(); for (int i = 0; i < n; i++) { - Vector pair = (Vector) modifiers.get(i); - if (pair.get(0).equals(type)) - return (String) pair.get(1); + Modifier mod = modifiers.get(i); + if (mod.type.equals(type)) + return mod.value; } return null; } @@ -64,40 +71,21 @@ public class ModifierSet { /** * Returns an array of the modifiers in a ModifierSet. * @return - * An array of modifiers, each represented by a two-element - * Vector, in which element 0 is the modifier type and - * element 1 is the associated value. + * An array of Modifiers. */ - public Vector[] getModifiers() { - int n = modifiers.size(); - Vector[] res = new Vector[n]; - for (int i = 0; i < n; i++) { - res[i] = (Vector) modifiers.get(i); - } - - return res; + 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"); } @@ -107,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(); @@ -117,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());