package org.dayatang.domain.internal.criterion;
import org.dayatang.domain.QueryCriterion;
import java.util.ArrayList;
import java.util.List;
/**
* 查询条件的抽象基类,实现了AND、OR、NOT操作。
*
* @author yyang (<a href="mailto:gdyangyu@gmail.com">gdyangyu@gmail.com</a>)
*/
public abstract class AbstractCriterion implements QueryCriterion {
protected String queryString;
/**
* 执行AND操作,返回代表两个QueryCriterion的“与”操作结果的一个新的QueryCriterion
*
* @param criterion 另一个QueryCriterion
* @return 当前对象与criterion的“与”操作的结果
*/
@Override
public QueryCriterion and(QueryCriterion criterion) {
return criterion.isEmpty() ? this : new AndCriterion(this, criterion);
}
/**
* 执行OR操作,返回代表两个QueryCriterion的“或”操作结果的一个新的QueryCriterion
*
* @param criterion 另一个QueryCriterion
* @return 当前对象与criterion的“或”操作的结果
*/
@Override
public QueryCriterion or(QueryCriterion criterion) {
return criterion.isEmpty() ? this : new OrCriterion(this, criterion);
}
/**
* 执行NOT操作,返回代表当前对象的“非”操作的一个新的QueryCriterion
* @return 当前对象的“非”操作的结果
*/
@Override
public QueryCriterion not() {
return new NotCriterion(this);
}
/**
* 判断是否属于“空”条件对象,即EmptyCriterion的实例。主要用于生成查询串时进行判断
* @return 除了EmptyCriterion子类返回true外,默认返回false。
*/
@Override
public boolean isEmpty() {
return false;
}
/**
* 从数组中去除为Null的或EmptyCriterion的成员,返回剩余元素的列表
* @param criteria 原始条件数组
* @return 去除空条件对象后的剩余的成员的列表
*/
protected List<QueryCriterion> removeNullOrEmptyCriterion(QueryCriterion[] criteria) {
List<QueryCriterion> results = new ArrayList<QueryCriterion>();
for (QueryCriterion each : criteria) {
if (each == null || each.isEmpty()) {
continue;
}
results.add(each);
}
return results;
}
/**
* 获得查询条件对应的查询字符串
* @return 查询字符串
*/
@Override
public String toQueryString() {
return queryString;
}
/**
* 判断等价性
* @param other 要用来判等的另一个对象
* @return 如果当前对象和other等价,则返回true,否则返回false
*/
@Override
public abstract boolean equals(final Object other);
/**
* 计算哈希值
* @return 当前对象实例的哈希值
*/
@Override
public abstract int hashCode();
}