/**
   * Convert given Query into a SolrQuery executable via {@link
   * org.apache.solr.client.solrj.SolrServer}
   *
   * @param query
   * @return
   */
  public final SolrQuery constructSolrQuery(SolrDataQuery query) {
    Assert.notNull(query, "Cannot construct solrQuery from null value.");
    Assert.notNull(query.getCriteria(), "Query has to have a criteria.");

    SolrQuery solrQuery = new SolrQuery();
    solrQuery.setParam(CommonParams.Q, getQueryString(query));
    if (query instanceof Query) {
      processQueryOptions(solrQuery, (Query) query);
    }
    if (query instanceof FacetQuery) {
      processFacetOptions(solrQuery, (FacetQuery) query);
    }
    if (query instanceof HighlightQuery) {
      processHighlightOptions(solrQuery, (HighlightQuery) query);
    }
    return solrQuery;
  }