package com.cattong.commons;
import java.util.List;
public abstract class PagingSupport {
/**
* 更新Paging对象
* <p>
* 如果是Cursor分页,则设置下一页Cursor值;如果是Page分页, 则根据列表是否为空设置是否是最后一页。
* </p>
*
* @param list
* 请求结果列表
* @param paging
* paging对象
*/
protected void updatePaging(List<?> list, Paging<?> paging) {
if (list == null || paging == null) {
return;
}
if (paging.isCursorPaging() && list instanceof PagableList<?>) {
long nextCursor = Paging.CURSOR_START;
if (list.size() <= paging.getPageSize() / 2) {
nextCursor = Paging.CURSOR_END;
} else {
nextCursor = ((PagableList<?>) list).getNextCursor();
}
setNextPageCursor(paging, nextCursor);
if (nextCursor == Paging.CURSOR_END) {
paging.setLastPage(true);
}
} else {
if (list.size() <= paging.getPageSize() / 2) {
paging.setLastPage(true);
}
}
}
/**
* 检查分页控制参数是否为Cursor分页
*
* @param paging
* 分页控制参数
* @throws LibException
*/
protected void initCursorPaging(Paging<?> paging) throws LibException {
if (null == paging) {
throw new LibException(LibResultCode.E_PARAM_NULL);
}
if (paging.isCursorPaging()) {
return;
}
paging.initCursorPaging(); // 若传入的不是Cursor分页,则初始化Cursor分页参数
if (paging.getPageIndex() == 0) {
paging.moveToFirst();
}
}
/**
* 检查分页控制参数是否是page分页
*
* @param paging
* @throws LibException
*/
protected void initPagePaging(Paging<?> paging) throws LibException {
if (null == paging) {
throw new LibException(LibResultCode.E_PARAM_NULL);
}
if (!paging.isCursorPaging()) {
return;
}
paging.initPagePaging();
if (paging.getPageIndex() == 0) {
paging.moveToFirst();
}
}
protected <T> void setNextPageSince(Paging<T> paging, T since) {
if (paging == null) {
return;
}
paging.setNextPageSince(since);
}
protected <T> void setNextPageMax(Paging<T> paging, T max) {
if (paging == null) {
return;
}
paging.setNextPageMax(max);
}
protected void setNextPageCursor(Paging<?> paging, long cursor) {
if (paging == null) {
return;
}
paging.setNextPageCursor(cursor);
}
protected void setNextPageCursor(Paging<?> paging, String cursor) {
if (paging == null) {
return;
}
paging.setNextPageCursor(cursor);
}
protected void setLastPage(Paging<?> paging, boolean isLastPage) {
if (paging == null) {
return;
}
paging.setLastPage(isLastPage);
}
public static <T> Paging<T> getPagingInstance(){
return new Paging<T>();
}
public static <T> Paging<T> getPagingInstance(T globalSince, T globalMax){
return new Paging<T>(globalSince, globalMax);
}
}