-// $Id: CQLTermNode.java,v 1.28 2007-07-03 13:41:24 mike Exp $
package org.z3950.zing.cql;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Properties;
-import java.util.Vector;
-
/**
* Represents a terminal node in a CQL parse-tree.
* these must be provided - you can't have an index without a
* relation or vice versa.
*
- * @version $Id: CQLTermNode.java,v 1.28 2007-07-03 13:41:24 mike Exp $
*/
public class CQLTermNode extends CQLNode {
private String index;
}
@Override
+ public void traverse(CQLNodeVisitor visitor) {
+ //we visit relation first to allow filtering on relation type in the visitor
+ relation.traverse(visitor);
+ visitor.onTermNode(this);
+ }
+
+ @Override
public String getResultSetName() {
if (isResultSetIndex(index))
return term;
return null;
}
- public String toXCQL(int level, Vector<CQLPrefix> prefixes,
- Vector<ModifierSet> sortkeys) {
- return (indent(level) + "<searchClause>\n" +
- renderPrefixes(level+1, prefixes) +
- indent(level+1) + "<index>" + xq(index) + "</index>\n" +
- relation.toXCQL(level+1) +
- indent(level+1) + "<term>" + xq(term) + "</term>\n" +
- renderSortKeys(level+1, sortkeys) +
- indent(level) + "</searchClause>\n");
+ @Override
+ void toXCQLInternal(XCQLBuilder b, int level, List<CQLPrefix> prefixes,
+ List<ModifierSet> sortkeys) {
+ b.indent(level).append("<searchClause>\n");
+ renderPrefixes(b, level + 1, prefixes);
+ b.indent(level + 1).append("<index>").xq(index).append("</index>\n");
+ relation.toXCQLInternal(b, level + 1);
+ b.indent(level + 1).append("<term>").xq(term).append("</term>\n");
+ renderSortKeys(b, level + 1, sortkeys);
+ b.indent(level).append("</searchClause>\n");
}
+ @Override
public String toCQL() {
String quotedIndex = maybeQuote(index);
String quotedTerm = maybeQuote(term);
// ### Interaction between this and its callers is not good as
// regards truncation of the term and generation of truncation
// attributes. Change the interface to fix this.
- private Vector getAttrs(Properties config) throws PQFTranslationException {
- Vector<String> attrs = new Vector<String>();
+ private List<String> getAttrs(Properties config) throws PQFTranslationException {
+ List<String> attrs = new ArrayList<String>();
// Do this first so that if any other truncation or
// completeness attributes are generated, they "overwrite"
throw new UnknownRelationException(rel);
attrs.add(attr);
- Vector<Modifier> mods = relation.getModifiers();
+ List<Modifier> mods = relation.getModifiers();
for (int i = 0; i < mods.size(); i++) {
String type = mods.get(i).type;
attr = config.getProperty("relationModifier." + type);
return attrs;
}
+ @Override
public String toPQF(Properties config) throws PQFTranslationException {
if (isResultSetIndex(index)) {
// Special case: ignore relation, modifiers, wildcards, etc.
return "@set " + maybeQuote(term);
}
- Vector attrs = getAttrs(config);
+ List<String> attrs = getAttrs(config);
String attr, s = "";
for (int i = 0; i < attrs.size(); i++) {
attr = (String) attrs.get(i);
- s += "@attr " + Utils.replaceString(attr, " ", " @attr ") + " ";
+ s += "@attr " + attr.replace(" ", " @attr ") + " ";
}
String text = term;
str.indexOf('/') != -1 ||
str.indexOf('(') != -1 ||
str.indexOf(')') != -1) {
- str = '"' + Utils.replaceString(str, "\"", "\\\"") + '"';
+ str = '"' + str.replace("\"", "\\\"") + '"';
}
return str;
}
+ @Override
public byte[] toType1BER(Properties config) throws PQFTranslationException {
if (isResultSetIndex(index)) {
// Special case: ignore relation, modifiers, wildcards, etc.
offset = putTag(CONTEXT, 44, CONSTRUCTED, operand, offset); // AttributeList
operand[offset++] = (byte)(0x80&0xff); // indefinite length
- Vector attrs = getAttrs(config);
+ List<String> attrs = getAttrs(config);
for(i = 0; i < attrs.size(); i++) {
attrList = (String) attrs.get(i);
java.util.StringTokenizer st =