Package 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`, `IntervalQueryNodeProcessor`, `MatchAllDocsQueryNodeProcessor`, `MultiFieldQueryNodeProcessor`, `MultiTermRewriteMethodProcessor`, `NoChildOptimizationQueryNodeProcessor`, `OpenRangeQueryNodeProcessor`, `PhraseSlopQueryNodeProcessor`, `PointQueryNodeProcessor`, `PointRangeQueryNodeProcessor`, `RegexpQueryNodeProcessor`, `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

Constructors
Constructor
Description
`QueryNodeProcessorImpl()`
`QueryNodeProcessorImpl(QueryConfigHandler queryConfigHandler)`

## Method Summary

Modifier and Type
Method
Description
`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 Details

### QueryNodeProcessorImpl

public QueryNodeProcessorImpl()

### QueryNodeProcessorImpl

public QueryNodeProcessorImpl(QueryConfigHandler queryConfigHandler)

## Method Details

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