package org.dayatang.domain.internal.criterion; 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; /** * 代表某个查询条件的取反的查询条件 * @author yyang */ public class NotCriterion extends AbstractCriterion { private final QueryCriterion criterion; /** * 根据一个查询条件创建它的取反查询条件 * @param criterion 原本的查询条件 */ public NotCriterion(QueryCriterion criterion) { Assert.notNull(criterion, "Query criterion is null!"); this.criterion = criterion; } /** * 返回原本的查询条件 * @return 原本的查询条件 */ public QueryCriterion getCriteron() { return criterion; } @Override public String toQueryString() { return "not (" + criterion.toQueryString() + ")"; } @Override public NamedParameters getParameters() { return criterion.getParameters(); } /** * 判断等价性 * @param other 要用来判等的另一个对象 * @return 如果当前对象和other等价,则返回true,否则返回false */ @Override public boolean equals(final Object other) { if (this == other) { return true; } if (!(other instanceof NotCriterion)) { return false; } NotCriterion that = (NotCriterion) other; return new EqualsBuilder() .append(this.getCriteron(), that.getCriteron()) .isEquals(); } /** * 计算哈希值 * @return 当前对象实例的哈希值 */ @Override public int hashCode() { return new HashCodeBuilder(17, 37).append(getCriteron()).toHashCode(); } }