All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.jknack.mwa.solr.SolrQueryBinExpression Maven / Gradle / Ivy

package com.github.jknack.mwa.solr;

import static org.apache.commons.lang3.Validate.isTrue;
import static org.apache.commons.lang3.Validate.notEmpty;

/**
 * Build Solr binary expressions like 'OR', 'AND', etc.
 *
 * @author edgar.espina
 * @since 0.4.0
 */
class SolrQueryBinExpression extends SolrQueryExpression {

  /**
   * The bin operator.
   */
  private String operator;

  /**
   * The expressions to join.
   */
  private SolrQueryExpression[] expressions;

  /**
   * Creates a new {@link SolrQueryBinExpression}.
   *
   * @param operator The operator to use.
   * @param expressions The expressions list.
   */
  public SolrQueryBinExpression(final String operator, final SolrQueryExpression... expressions) {
    notEmpty(operator, "The operator is required.");
    notEmpty(expressions, "At least two expressions are required.");
    isTrue(expressions.length > 1, "At least two expressions are required.");
    this.operator = operator;
    this.expressions = expressions;
  }

  @Override
  public String queryString() {
    StringBuilder buffer = new StringBuilder();
    for (SolrQueryExpression expression : expressions) {
      String text = expression.queryString();
      if (text.length() > 0) {
        buffer.append(text).append(operator);
      }
    }
    if (buffer.length() > 0) {
      buffer.setLength(buffer.length() - operator.length());
      return "(" + buffer + ")";
    }
    return "";
  }

  /**
   * Return an OR expression.
   *
   * @param expressions The expression set. Required.
   * @return An OR expression.
   */
  public static SolrQueryBinExpression or(final SolrQueryExpression... expressions) {
    return new SolrQueryBinExpression(" OR ", expressions);
  }

  /**
   * Return an AND expression.
   *
   * @param expressions The expression set. Required.
   * @return An AND expression.
   */
  public static SolrQueryBinExpression and(final SolrQueryExpression... expressions) {
    return new SolrQueryBinExpression(" AND ", expressions);
  }

  /**
   * Return an optional expression.
   *
   * @param expressions The expression set. Required.
   * @return An optional expression.
   */
  public static SolrQueryBinExpression firstOf(final SolrQueryExpression... expressions) {
    return new SolrQueryBinExpression(" ", expressions);
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy