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 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

    All Methods Instance Methods Concrete Methods
    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 Detail

    - #### 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 Detail

    - #### QueryTreeBuilder

          public QueryTreeBuilder()

      `QueryTreeBuilder` constructor.

  - ### Method Detail

    - #### 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