## org.apache.lucene.queryparser.flexible.core.processors
Class QueryNodeProcessorImpl

    java.lang.Object
      org.apache.lucene.queryparser.flexible.core.processors.QueryNodeProcessorImpl

All Implemented Interfaces:
  QueryNodeProcessor

Direct Known Subclasses:
  AllowLeadingWildcardProcessor, AnalyzerQueryNodeProcessor, BooleanModifiersQueryNodeProcessor, BooleanSingleChildOptimizationQueryNodeProcessor, BoostQueryNodeProcessor, DefaultPhraseSlopQueryNodeProcessor, FuzzyQueryNodeProcessor, LowercaseExpandedTermsQueryNodeProcessor, MatchAllDocsQueryNodeProcessor, MultiFieldQueryNodeProcessor, MultiTermRewriteMethodProcessor, NoChildOptimizationQueryNodeProcessor, NumericQueryNodeProcessor, NumericRangeQueryNodeProcessor, OpenRangeQueryNodeProcessor, PhraseSlopQueryNodeProcessor, RemoveDeletedQueryNodesProcessor, RemoveEmptyNonLeafQueryNodeProcessor, TermRangeQueryNodeProcessor, WildcardQueryNodeProcessor

    public abstract class QueryNodeProcessorImpl

extends Object
implements QueryNodeProcessor

This is a default implementation for the `QueryNodeProcessor` interface, it's an abstract class, so it should be extended by classes that want to process a `QueryNode` tree.

This class process `QueryNode`s from left to right in the tree. While it's walking down the tree, for every node, `preProcessNode(QueryNode)` is invoked. After a node's children are processed, `postProcessNode(QueryNode)` is invoked for that node. `setChildrenOrder(List)` is invoked before `postProcessNode(QueryNode)` only if the node has at least one child, in `setChildrenOrder(List)` the implementor might redefine the children order or remove any children from the children list.

Here is an example about how it process the nodes:

          a
         / \
        b   e
       / \
      c   d

Here is the order the methods would be invoked for the tree described above:

          preProcessNode( a );
          preProcessNode( b );
          preProcessNode( c );
          postProcessNode( c );
          preProcessNode( d );
          postProcessNode( d );
          setChildrenOrder( bChildrenList );
          postProcessNode( b );
          preProcessNode( e );
          postProcessNode( e );
          setChildrenOrder( aChildrenList );
          postProcessNode( a )

See Also:
  `QueryNodeProcessor`

Constructor Summary
`QueryNodeProcessorImpl()`
`QueryNodeProcessorImpl(QueryConfigHandler queryConfigHandler)`

Method Summary
`QueryConfigHandler` `getQueryConfigHandler()` For reference about this method check: `QueryNodeProcessor.getQueryConfigHandler()`.
`protected abstract QueryNode` `postProcessNode(QueryNode node)` This method is invoked for every node when walking up the tree.
`protected abstract QueryNode` `preProcessNode(QueryNode node)` This method is invoked for every node when walking down the tree.
`QueryNode` `process(QueryNode queryTree)` Processes a query node tree.
`protected void` `processChildren(QueryNode queryTree)` This method is called every time a child is processed.
`protected abstract List<QueryNode>` `setChildrenOrder(List<QueryNode> children)` This method is invoked for every node that has at least on child.
`void` `setQueryConfigHandler(QueryConfigHandler queryConfigHandler)` For reference about this method check: `QueryNodeProcessor.setQueryConfigHandler(QueryConfigHandler)`.

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Constructor Detail

### QueryNodeProcessorImpl

    public QueryNodeProcessorImpl()

### QueryNodeProcessorImpl

    public QueryNodeProcessorImpl(QueryConfigHandler queryConfigHandler)

Method Detail

### process

    public QueryNode process(QueryNode queryTree)
                      throws QueryNodeException

  Description copied from interface: `QueryNodeProcessor`
  Processes a query node tree. It may return the same or another query tree. I should never return `null`.

  Specified by:
    `process` in interface `QueryNodeProcessor`
  Parameters:
    `queryTree` - tree root node
  Returns:
    the processed query tree
  Throws:
    `QueryNodeException`

### processChildren

    protected void processChildren(QueryNode queryTree)
                            throws QueryNodeException

  This method is called every time a child is processed.

  Parameters:
    `queryTree` - the query node child to be processed
  Throws:
    `QueryNodeException` - if something goes wrong during the query node processing

### setQueryConfigHandler

    public void setQueryConfigHandler(QueryConfigHandler queryConfigHandler)

  For reference about this method check: `QueryNodeProcessor.setQueryConfigHandler(QueryConfigHandler)`.

  Specified by:
    `setQueryConfigHandler` in interface `QueryNodeProcessor`
  Parameters:
    `queryConfigHandler` - the query configuration handler to be set.
  See Also:
    `QueryNodeProcessor.getQueryConfigHandler()`, `QueryConfigHandler`

### getQueryConfigHandler

    public QueryConfigHandler getQueryConfigHandler()

  For reference about this method check: `QueryNodeProcessor.getQueryConfigHandler()`.

  Specified by:
    `getQueryConfigHandler` in interface `QueryNodeProcessor`
  Returns:
    QueryConfigHandler the query configuration handler to be set.
  See Also:
    `QueryNodeProcessor.setQueryConfigHandler(QueryConfigHandler)`, `QueryConfigHandler`

### preProcessNode

    protected abstract QueryNode preProcessNode(QueryNode node)
                                         throws QueryNodeException

  This method is invoked for every node when walking down the tree.

  Parameters:
    `node` - the query node to be pre-processed
  Returns:
    a query node
  Throws:
    `QueryNodeException` - if something goes wrong during the query node processing

### postProcessNode

    protected abstract QueryNode postProcessNode(QueryNode node)
                                          throws QueryNodeException

  This method is invoked for every node when walking up the tree.

  Parameters:
    `node` - node the query node to be post-processed
  Returns:
    a query node
  Throws:
    `QueryNodeException` - if something goes wrong during the query node processing

### setChildrenOrder

    protected abstract List<QueryNode> setChildrenOrder(List<QueryNode> children)
                                                 throws QueryNodeException

  This method is invoked for every node that has at least on child. It's invoked right before `postProcessNode(QueryNode)` is invoked.

  Parameters:
    `children` - the list containing all current node's children
  Returns:
    a new list containing all children that should be set to the current node
  Throws:
    `QueryNodeException` - if something goes wrong during the query node processing

Copyright © 2000-2013 Apache Software Foundation. All Rights Reserved.