Package org.apache.lucene.queryparser.flexible.core.builders

# Class QueryTreeBuilder

java.lang.Object
org.apache.lucene.queryparser.flexible.core.builders.QueryTreeBuilder

All Implemented Interfaces:
  `QueryBuilder`

Direct Known Subclasses:
  `StandardQueryTreeBuilder`

public class QueryTreeBuilder extends Object implements QueryBuilder
This class should be used when there is a builder for each type of node.

The type of node may be defined in 2 different ways: - by the field name, when the node implements the `FieldableNode` interface - by its class, it keeps checking the class and all the interfaces and classes this class implements/extends until it finds a builder for that class/interface

This class always check if there is a builder for the field name before it checks for the node class. So, field name builders have precedence over class builders.

When a builder is found for a node, it's called and the node is passed to the builder. If the returned built object is not `null`, it's tagged on the node using the tag `QUERY_TREE_BUILDER_TAGID`.

The children are usually built before the parent node. However, if a builder associated to a node is an instance of `QueryTreeBuilder`, the node is delegated to this builder and it's responsible to build the node and its children.

See Also:
  - `QueryBuilder`

## Field Summary

Fields
Modifier and Type
Field
Description
`static final String`
`QUERY_TREE_BUILDER_TAGID`
This tag is used to tag the nodes in a query tree with the built objects produced from their own associated builder.

## Constructor Summary

Constructors
Constructor
Description
`QueryTreeBuilder()`
`QueryTreeBuilder` constructor.

## Method Summary

Modifier and Type
Method
Description
`Object`
`build(QueryNode queryNode)`
Builds some kind of object from a query tree.
`void`
`setBuilder(CharSequence fieldName, QueryBuilder builder)`
Associates a field name with a builder.
`void`
`setBuilder(Class<? extends QueryNode> queryNodeClass, QueryBuilder builder)`
Associates a class with a builder

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Field Details

### QUERY_TREE_BUILDER_TAGID

public static final String QUERY_TREE_BUILDER_TAGID
This tag is used to tag the nodes in a query tree with the built objects produced from their own associated builder.

## Constructor Details

### QueryTreeBuilder

public QueryTreeBuilder()
`QueryTreeBuilder` constructor.

## Method Details

### setBuilder

public void setBuilder(CharSequence fieldName, QueryBuilder builder)
Associates a field name with a builder.

Parameters:
  `fieldName` - the field name
  `builder` - the builder to be associated

### setBuilder

public void setBuilder(Class<? extends QueryNode> queryNodeClass, QueryBuilder builder)
Associates a class with a builder

Parameters:
  `queryNodeClass` - the class
  `builder` - the builder to be associated

### build

public Object build(QueryNode queryNode) throws QueryNodeException
Builds some kind of object from a query tree. Each node in the query tree is built using an specific builder associated to it.

Specified by:
  `build` in interface `QueryBuilder`
Parameters:
  `queryNode` - the query tree root node
Returns:
  the built object
Throws:
  `QueryNodeException` - if some node builder throws a `QueryNodeException` or if there is a node which had no builder associated to it