1 // $Id: ModifierSet.java,v 1.4 2002-11-06 20:13:45 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 the same data structures and functionality.
14 * @version $Id: ModifierSet.java,v 1.4 2002-11-06 20:13:45 mike Exp $
16 public class ModifierSet {
20 public ModifierSet(String base) {
22 modifiers = new Vector();
25 public String getBase() {
29 public void addModifier(String type, String value) {
30 Vector modifier = new Vector();
33 modifiers.add(modifier);
36 public String modifier(String type) {
37 int n = modifiers.size();
38 for (int i = 0; i < n; i++) {
39 Vector pair = (Vector) modifiers.get(i);
40 if (pair.get(0).equals(type))
41 return (String) pair.get(1);
46 public Vector[] getModifiers() {
47 int n = modifiers.size();
48 Vector[] res = new Vector[n];
49 for (int i = 0; i < n; i++) {
50 res[i] = (Vector) modifiers.get(i);
56 public String toXCQL(int level, String topLevelElement) {
57 StringBuffer buf = new StringBuffer();
58 buf.append (Utils.indent(level) + "<" + topLevelElement + ">\n" +
59 Utils.indent(level+1) + "<value>" + Utils.xq(base) +
61 Vector[] mods = getModifiers();
62 if (mods.length > 0) {
63 buf.append(Utils.indent(level+1) + "<modifiers>\n");
64 for (int i = 0; i < mods.length; i++) {
65 Vector modifier = mods[i];
66 buf.append(Utils.indent(level+2)).
68 if (modifier.get(0) != null)
70 append(Utils.xq((String) modifier.get(0))).
72 buf.append("<value>").
73 append(Utils.xq((String) modifier.get(1))).
75 buf.append("</modifier>\n");
77 buf.append(Utils.indent(level+1) + "</modifiers>\n");
79 buf.append(Utils.indent(level) + "</" + topLevelElement + ">\n");
80 return buf.toString();
83 public String toCQL() {
84 StringBuffer buf = new StringBuffer(base);
85 Vector[] mods = getModifiers();
86 for (int i = 0; i < mods.length; i++) {
87 buf.append("/").append(mods[i].get(1));
90 return buf.toString();
93 public static void main(String[] args) {
94 if (args.length < 1) {
95 System.err.println("Usage: ModifierSet <base> [<type> <name>]...");
99 ModifierSet res = new ModifierSet(args[0]);
100 for (int i = 1; i < args.length; i += 2) {
101 res.addModifier(args[i], args[i+1]);
104 System.out.println(res.toCQL());