Package org.dayatang.domain.internal

Source Code of org.dayatang.domain.internal.OrCriterion

package org.dayatang.domain.internal;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.dayatang.domain.NamedParameters;
import org.dayatang.domain.QueryCriterion;
import org.dayatang.utils.Assert;


/**
* 代表两个或两个以上的查询条件OR操作结果的查询条件
* @author yyang
*/
public class OrCriterion extends AbstractCriterion {

    private final List<QueryCriterion> criterions;

    /**
     * 根据多个查询条件创建OR查询条件。创建过程中会去除为null或EmptyCriterion的查询条件。如果
     * 剩余查询条件不足两个,则抛出异常。
     * @param criterions 要用来执行OR操作的查询条件
     */
    public OrCriterion(QueryCriterion... criterions) {
        Assert.notNull(criterions, "Criterions to \"OR\" is null!");
        this.criterions = removeNullOrEmptyCriterion(criterions);
        Assert.isTrue(criterions.length > 1, "At least two query criterions required!");
    }

    /**
     * 获得要用来执行OR操作的查询条件
     * @return 要用来执行AND操作的查询条件,去除了Null和EmptyCriterion类型的元素。
     */
    public List<QueryCriterion> getCriterons() {
        return criterions;
    }

    @Override
  public String toQueryString() {
        List<String> subCriterionsStr = new ArrayList<String>();
        for (QueryCriterion each : getCriterons()) {
            subCriterionsStr.add(each.toQueryString());
        }
    return "(" + StringUtils.join(subCriterionsStr, " or ") + ")";
  }

  @Override
  public NamedParameters getParameters() {
    NamedParameters result = NamedParameters.create();
        for (QueryCriterion each : getCriterons()) {
          result.add(each.getParameters());
        }
    return result;
  }

  /**
     * 判断等价性
     * @param other 要用来判等的另一个对象
     * @return 如果当前对象和other等价,则返回true,否则返回false
     */
    @Override
    public boolean equals(final Object other) {
        if (this == other) {
            return true;
        }
        if (!(other instanceof OrCriterion)) {
            return false;
        }
        OrCriterion that = (OrCriterion) other;
        return new EqualsBuilder()
                .append(this.getCriterons(), that.getCriterons())
                .isEquals();
    }

    /**
     * 计算哈希值
     * @return 当前对象实例的哈希值
     */
    @Override
    public int hashCode() {
        return new HashCodeBuilder(17, 37).append(getCriterons()).toHashCode();
    }
}
TOP

Related Classes of org.dayatang.domain.internal.OrCriterion

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.