content: package org.apache.lucene.queryparser.flexible.aqp.builders;
  
  import org.apache.lucene.queryparser.flexible.aqp.nodes.AqpFunctionQueryNode;
  import org.apache.lucene.queryparser.flexible.aqp.processors.AqpQFUNCProcessor;
  import org.apache.lucene.queryparser.flexible.core.QueryNodeException;
  import org.apache.lucene.queryparser.flexible.core.config.QueryConfigHandler;
  import org.apache.lucene.queryparser.flexible.core.nodes.QueryNode;
  
  /**
   * Provider gets called from the QueryNodeProcess when QFUNC node
   * is first encountered.
   * <p>
   * The provider should return a QueryNodeBuilder that implements
   * the build() method, which returns Query object.
   * <p>
   * The provider has a chance to modify the node, harvest its elements,
   * save the original input values etc. This should happen inside
   * getBuilder() call
   *
   * @see AqpFunctionQueryNodeBuilder
   * @see AqpFunctionQueryNode
   * @see AqpQFUNCProcessor
   */
  
  public interface AqpFunctionQueryBuilderProvider {
  
      /**
       * Returns the builder for the given function name or null if this
       * provider has nothing to offer
       * <p>
       * Care should be taken not to change the total number of childre
       * because the node will be passed into {@link AqpFunctionQueryNode}
       * which may modify them
       *
       * @param funcName name of the funciton, i.e. pos
       * @param node     query node
       * @param config   query config
       * @return {@link AqpFunctionQueryBuilder}
       */
      AqpFunctionQueryBuilder getBuilder(String funcName, QueryNode node, QueryConfigHandler config)
              throws QueryNodeException;
  }
  