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

com.kasinf.framework.rest.support.Searchable Maven / Gradle / Ivy

There is a newer version: 1.4.0
Show newest version
package com.kasinf.framework.rest.support;

import com.kasinf.framework.rest.exception.InvalidSearchPropertyException;
import com.kasinf.framework.rest.exception.InvalidSearchValueException;
import com.kasinf.framework.rest.exception.SearchException;
import com.kasinf.framework.rest.support.filter.SearchFilter;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;

import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * @author lkhsh
 * 查询条件接口
 */
public interface Searchable {

    /**
     * 创建一个新的查询
     *
     * @return 查询实现类 {@link SearchRequest}
     */
    static Searchable newSearchable() {
        return new SearchRequest();
    }

    /**
     * 创建一个新的查询,带条件
     *
     * @param searchParams 查询的条件
     * @return 查询实现类 {@link SearchRequest}
     */
    static Searchable newSearchable(final Map searchParams) throws SearchException {
        return new SearchRequest(searchParams);
    }

    /**
     * 创建一个新的查询,带条件,分页
     *
     * @param searchParams 查询的条件
     * @param page         分页条件
     * @return 查询实现类 {@link SearchRequest}
     * @throws SearchException 自定义查询异常
     */
    static Searchable newSearchable(final Map searchParams, final Pageable page) throws SearchException {
        return new SearchRequest(searchParams, page);
    }

    /**
     * 创建一个新的查询,带条件,排序
     *
     * @param searchParams 查询的条件
     * @param sort         排序条件
     * @return 查询实现类 {@link SearchRequest}
     * @throws SearchException 自定义查询异常
     */
    static Searchable newSearchable(final Map searchParams, final Sort sort) throws SearchException {
        return new SearchRequest(searchParams, sort);
    }

    /**
     * 创建一个新的查询,待条件,分页,排序
     *
     * @param searchParams 查询的条件
     * @param page         分页条件
     * @param sort         排序条件
     * @return 查询实现类 {@link SearchRequest}
     * @throws SearchException 自定义查询异常
     */
    static Searchable newSearchable(final Map searchParams, final Pageable page, final Sort sort) {
        return new SearchRequest(searchParams, page, sort);
    }

    /**
     * 添加过滤条件 如key="parent.id_eq" value = 1
     * 如果添加时不加操作符 默认是custom 即如key=parent 实际key是parent_custom
     *
     * @param key   如 name_like
     * @param value 如果是in查询 多个值之间","分隔
     * @return 查询实现类 {@link SearchRequest}
     * @throws SearchException 自定义查询异常
     */
    Searchable addSearchParam(final String key, final Object value) throws SearchException;

    /**
     * 添加一组查询参数
     *
     * @param searchParams 查询条件
     * @return 查询实现类 {@link SearchRequest}
     * @throws SearchException 自定义查询异常
     */
    Searchable addSearchParams(final Map searchParams) throws SearchException;

    /**
     * 添加过滤条件
     *
     * @param searchProperty 查询的属性名
     * @param operator       操作运算符
     * @param value          值
     * @return 查询实现类 {@link SearchRequest}
     * @throws SearchException 自定义查询异常
     */
    Searchable addSearchFilter(final String searchProperty, final SearchOperator operator, final Object value) throws SearchException;


    /**
     * 添加单目运算符的条件
     * @param searchProperty 查询的属性名
     * @param operator 单目运算操作
     * @return 查询实现类 {@link SearchRequest}
     * @throws SearchException 自定义查询异常
     */
    Searchable addSearchFilter(final String searchProperty, final SearchOperator operator) throws SearchException;

    /**
     * 添加过滤条件
     *
     * @param searchFilter 查询条件{@link SearchFilter}
     * @return 查询实现类 {@link SearchRequest}
     */
    Searchable addSearchFilter(final SearchFilter searchFilter);

    /**
     * 添加多个过滤条件
     *
     * @param searchFilters 过滤条件{@link SearchFilter}
     * @return 查询实现类 {@link SearchRequest}
     */
    Searchable addSearchFilters(final Collection searchFilters);

    /**
     * 添加多个or连接的过滤条件
     *
     * @param first  第一个
     * @param others 其他
     * @return 查询实现类 {@link SearchRequest}
     */
    Searchable or(final SearchFilter first, final SearchFilter... others);

    /**
     * 添加多个and连接的过滤条件
     *
     * @param first  第一个
     * @param others 其他
     * @return 查询实现类 {@link SearchRequest}
     */
    Searchable and(final SearchFilter first, final SearchFilter... others);

    /**
     * 移除指定key的过滤条件
     *
     * @param key 键
     * @return 查询实现类 {@link SearchRequest}
     */
    Searchable removeSearchFilter(final String key);

    /**
     * 移除指定属性 和 操作符的过滤条件
     *
     * @param searchProperty 查询属性
     * @param operator       操作符
     * @return 查询实现类 {@link SearchRequest}
     */
    Searchable removeSearchFilter(String searchProperty, SearchOperator operator);

    /**
     * 把字符串类型的值转化为entity属性值
     *
     * @param entityClass 实体类
     * @param  实体类型
     * @return 查询实现类 {@link SearchRequest}
     */
     Searchable convert(final Class entityClass)
            throws InvalidSearchValueException, InvalidSearchPropertyException;

    /**
     * 转换时间类型的操作符,变成大于等于开始时间和小于等于结束时间
     */
    void changeDataCondition();

    /**
     * 标识为已经转换过了 避免多次转换
     *
     * @return 查询实现类 {@link SearchRequest}
     */
    Searchable markConverted();

    /**
     * 设置分页
     *
     * @param page 分页信息
     * @return 查询实现类 {@link SearchRequest}
     */
    Searchable setPage(final Pageable page);

    /**
     * 设置分页
     *
     * @param pageNumber 分页页码 索引从 0 开始
     * @param pageSize   每页大小
     * @return 查询实现类 {@link SearchRequest}
     */
    Searchable setPage(final int pageNumber, final int pageSize);

    /**
     * 添加排序条件
     *
     * @param sort 排序
     * @return 查询实现类 {@link SearchRequest}
     */
    Searchable addSort(final Sort sort);

    /**
     * 添加排序条件
     *
     * @param direction 排序方向
     * @param property  属性
     * @return 查询实现类 {@link SearchRequest}
     */
    Searchable addSort(final Sort.Direction direction, String property);

    /**
     * 获取查询过滤条件
     *
     * @return 查询条件集合
     */
    List getSearchFilters();

    /**
     * 是否已经转换过了,避免多次转换
     *
     * @return 标识符
     */
    boolean isConverted();

    /**
     * 是否有查询参数
     *
     * @return 标识符
     */
    boolean hasSearchFilter();

    /**
     * 是否有排序
     *
     * @return 标识符
     */
    boolean hashSort();

    /**
     * 移除排序
     */
    void removeSort();

    /**
     * 是否有分页
     *
     * @return 标识符
     */
    boolean hasPageable();

    /**
     * 移除分页
     */
    void removePageable();

    /**
     * 获取分页信息
     *
     * @return 分页信息 {@link Pageable}
     */
    Pageable getPage();

    /**
     * 获取排序信息
     *
     * @return 排序信息 {@link Sort}
     */
    Sort getSort();

    /**
     * 是否包含要搜索的键,如 name_like,包括and和or
     *
     * @param key 查询条件
     * @return 标识符
     */
    boolean containsSearchKey(final String key);

    /**
     * 获取查询属性对应的值
     * 不能获取or 或 and 的
     * @param key 查询的键
     * @param  属性值
     * @return 获取的值
     */
     T getValue(final String key);

    /**
     * 是否使用了投影
     * @return 是/否
     */
    boolean hasProjection();

    /**
     * 获取投影类型
     * @return 投影
     */
    Class getProjection();

    Searchable setProjection(Class projection);
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy