blob: 4f15f7c7c9176d2f1059091c52c2dd2f7ebef6ee [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.lucene.queryparser.flexible.core.nodes;
import org.apache.lucene.queryparser.flexible.core.parser.EscapeQuerySyntax;
import java.util.List;
import java.util.Map;
/**
* A {@link QueryNode} is a interface implemented by all nodes on a QueryNode
* tree.
*/
public interface QueryNode {
/** convert to a query string understood by the query parser */
// TODO: this interface might be changed in the future
public CharSequence toQueryString(EscapeQuerySyntax escapeSyntaxParser);
/** for printing */
@Override
public String toString();
/** get Children nodes */
public List<QueryNode> getChildren();
/** verify if a node is a Leaf node */
public boolean isLeaf();
/** verify if a node contains a tag */
public boolean containsTag(String tagName);
/**
* Returns object stored under that tag name
*/
public Object getTag(String tagName);
public QueryNode getParent();
/**
* Recursive clone the QueryNode tree The tags are not copied to the new tree
* when you call the cloneTree() method
*
* @return the cloned tree
*/
public QueryNode cloneTree() throws CloneNotSupportedException;
// Below are the methods that can change state of a QueryNode
// Write Operations (not Thread Safe)
// add a new child to a non Leaf node
public void add(QueryNode child);
public void add(List<QueryNode> children);
// reset the children of a node
public void set(List<QueryNode> children);
/**
* Associate the specified value with the specified tagName. If the tagName
* already exists, the old value is replaced. The tagName and value cannot be
* null. tagName will be converted to lowercase.
*/
public void setTag(String tagName, Object value);
/**
* Unset a tag. tagName will be converted to lowercase.
*/
public void unsetTag(String tagName);
/**
* Returns a map containing all tags attached to this query node.
*
* @return a map containing all tags attached to this query node
*/
public Map<String, Object> getTagMap();
/**
* Removes this query node from its parent.
*/
public void removeFromParent();
/**
* Remove a child node
* @param childNode Which child to remove
*/
public void removeChildren(QueryNode childNode);
}