1 // $Id: ModifierSet.java,v 1.6 2002-11-20 17:26:42 mike Exp $
3 package org.z3950.zing.cql;
4 import java.util.Vector;
5 import java.lang.StringBuffer;
8 * Represents a base String and a set of modifier Strings.
10 * This class is used as a workhorse delegate by both CQLRelation and
11 * CQLProxNode - two functionally very separate classes that happen to
12 * require similar data structures and functionality.
14 * A ModifierSet consists of a ``base'' string together with a set of
15 * zero or more <I>type</I>=<I>value</I> pairs, where both type and
16 * value are strings. Types may be null, values may not.
18 * @version $Id: ModifierSet.java,v 1.6 2002-11-20 17:26:42 mike Exp $
20 public class ModifierSet {
25 * Creates a new ModifierSet with the specified base.
27 public ModifierSet(String base) {
29 modifiers = new Vector();
33 * Returns the base string with which the ModifierSet was created.
35 public String getBase() {
40 * Adds a modifier of the specified <TT>type</TT> and
41 * <TT>value</TT> to a ModifierSet.
43 public void addModifier(String type, String value) {
44 Vector modifier = new Vector();
47 modifiers.add(modifier);
51 * Returns the value of the modifier in the specified ModifierSet
52 * that corresponds to the specified type.
54 public String modifier(String type) {
55 int n = modifiers.size();
56 for (int i = 0; i < n; i++) {
57 Vector pair = (Vector) modifiers.get(i);
58 if (pair.get(0).equals(type))
59 return (String) pair.get(1);
65 * Returns an array of the modifiers in a ModifierSet.
67 * An array of modifiers, each represented by a two-element
68 * <TT>Vector</TT>, in which element 0 is the modifier type and
69 * element 1 is the associated value.
71 public Vector[] getModifiers() {
72 int n = modifiers.size();
73 Vector[] res = new Vector[n];
74 for (int i = 0; i < n; i++) {
75 res[i] = (Vector) modifiers.get(i);
81 public String toXCQL(int level, String topLevelElement) {
82 System.err.println("in ModifierSet.toXCQL()");
83 StringBuffer buf = new StringBuffer();
84 buf.append (Utils.indent(level) + "<" + topLevelElement + ">\n" +
85 Utils.indent(level+1) + "<value>" + Utils.xq(base) +
87 Vector[] mods = getModifiers();
88 if (mods.length > 0) {
89 buf.append(Utils.indent(level+1) + "<modifiers>\n");
90 for (int i = 0; i < mods.length; i++) {
91 Vector modifier = mods[i];
92 buf.append(Utils.indent(level+2)).
94 if (modifier.get(0) != null)
96 append(Utils.xq((String) modifier.get(0))).
98 buf.append("<value>").
99 append(Utils.xq((String) modifier.get(1))).
101 buf.append("</modifier>\n");
103 buf.append(Utils.indent(level+1) + "</modifiers>\n");
105 buf.append(Utils.indent(level) + "</" + topLevelElement + ">\n");
106 return buf.toString();
109 public String toCQL() {
110 StringBuffer buf = new StringBuffer(base);
111 Vector[] mods = getModifiers();
112 for (int i = 0; i < mods.length; i++) {
113 buf.append("/").append(mods[i].get(1));
116 return buf.toString();
119 public static void main(String[] args) {
120 if (args.length < 1) {
121 System.err.println("Usage: ModifierSet <base> [<type> <name>]...");
125 ModifierSet res = new ModifierSet(args[0]);
126 for (int i = 1; i < args.length; i += 2) {
127 res.addModifier(args[i], args[i+1]);
130 System.out.println(res.toCQL());