1 // $Id: CQLPrefixNode.java,v 1.10 2007-07-03 16:40:11 mike Exp $
3 package org.z3950.zing.cql;
4 import java.util.ArrayList;
6 import java.util.Properties;
10 * Represents a prefix node in a CQL parse-tree.
12 * @version $Id: CQLPrefixNode.java,v 1.10 2007-07-03 16:40:11 mike Exp $
14 public class CQLPrefixNode extends CQLNode {
16 * The prefix definition that governs the subtree.
18 private CQLPrefix prefix;
20 public CQLPrefix getPrefix() {
25 * The root of a parse-tree representing the part of the query
26 * that is governed by this prefix definition.
28 private CQLNode subtree;
30 public CQLNode getSubtree() {
35 * Creates a new CQLPrefixNode inducing a mapping from the
36 * specified index-set name to the specified identifier across
37 * the specified subtree.
39 public CQLPrefixNode(String name, String identifier, CQLNode subtree) {
40 this.prefix = new CQLPrefix(name, identifier);
41 this.subtree = subtree;
45 void toXCQLInternal(XCQLBuilder b, int level, List<CQLPrefix> prefixes,
46 List<ModifierSet> sortkeys) {
47 List<CQLPrefix> tmp = (prefixes == null ?
48 new ArrayList<CQLPrefix>() :
49 new ArrayList<CQLPrefix>(prefixes));
51 subtree.toXCQLInternal(b, level, tmp, sortkeys);
55 public String toCQL() {
56 // ### We don't always need parens around the subtree
57 if (prefix.name == null) {
58 return ">\"" + prefix.identifier + "\" " +
59 "(" + subtree.toCQL() + ")";
61 return ">" + prefix.name + "=\"" + prefix.identifier + "\" " +
62 "(" + subtree.toCQL() + ")";
67 public String toPQF(Properties config) throws PQFTranslationException {
68 // Prefixes and their identifiers don't actually play any role
69 // in PQF translation, since the meanings of the indexes,
70 // including their prefixes if any, are instead wired into
72 return subtree.toPQF(config);
76 public byte[] toType1BER(Properties config) throws PQFTranslationException {
77 // See comment on toPQF()
78 return subtree.toType1BER(config);