package com.sematext.lucene.query.extractor;

import java.util.List;
import java.util.Set;
import org.apache.lucene.search.ConstantScoreQuery;
import org.apache.lucene.search.Query;

/**
 * Exctractor for ConstantScoreQuery.
 * It extracts inner query. If there is no inner query and only filter this extractor will do nothing.
 *
 * @author prog
 */
public class ConstantScoreQueryExtractor extends QueryExtractor<ConstantScoreQuery> {

  /**
   * Default constructor.
   * It only uses super class constructor giving as an argument query class.
   */
  public ConstantScoreQueryExtractor() {
    super(ConstantScoreQuery.class);
  }

  @Override
  public void extract(final ConstantScoreQuery q, final Iterable<QueryExtractor<? extends Query>> extractors,
          final List<Query> extractedQueries) throws UnsupportedOperationException {
    if (q.getQuery() != null) {
      extractQuery(q.getQuery(), extractors, extractedQueries);
    } else {
      extractedQueries.add(q);
    }
  }

  @Override
  public void extractSubQueriesFields(final ConstantScoreQuery q,
          final Iterable<QueryExtractor<? extends Query>> extractors,
          final Set<String> extractedFields) throws UnsupportedOperationException {
    if (q.getQuery() != null) {
      extractFields(q.getQuery(), extractors, extractedFields);
    }
  }

}