import lombok.Data;
import lombok.ToString;
import java.util.ArrayList;
import java.util.List;
@Data
@ToString
public class PageInfo<T> {
public static final int DEFAULT_NAVIGATE_PAGES = 8;
private long total;
private int pageNum;
private int pageSize;
private int size;
private long startRow;
private long endRow;
private int pages;
private int prePage;
private int nextPage;
private boolean isFirstPage;
private boolean isLastPage;
private boolean hasPreviousPage;
private boolean hasNextPage;
private int navigatePages;
private int[] navigatepageNums = new int[0];
private int navigateFirstPage;
private int navigateLastPage;
private List<T> list = new ArrayList<>();
public PageInfo(List<T> list, int pageNum, int pageSize, long count) {
this(list, pageNum, pageSize, count, 8);
}
public PageInfo(List<T> list, int pageNum, int pageSize, long count, int navigatePages) {
if (pageSize < 1) {
return;
}
if (pageNum < 1) {
return;
}
if (count < 1) {
return;
}
this.pageSize = pageSize;
this.total = count;
this.pages = (int) (this.total % this.pageSize > 0 ? this.total / this.pageSize + 1 : this.total / this.pageSize);
this.pageNum = Math.min(pageNum, pages);
this.size = list.size();
if (this.size == 0) {
this.startRow = 0L;
this.endRow = 0L;
} else {
this.startRow = (long) this.pageNum * this.pageSize - this.pageSize + 1;
this.endRow = this.startRow - 1L + (long) this.size;
}
this.prePage = this.pageNum > 1 ? this.pageNum - 1 : 1;
this.nextPage = (long) (this.pageNum - 1) * pageSize + this.size < this.total ? this.pageNum + 1 : pages;
this.isFirstPage = this.pageNum == 1;
this.isLastPage = this.nextPage == this.pageNum;
this.hasPreviousPage = this.prePage < this.pageNum;
this.hasNextPage = this.nextPage > this.pageNum;
this.navigatePages = navigatePages;
int[] navigatepageNums = new int[pages];
for (int i = 0; i < pages; i++) {
navigatepageNums[i] = i + 1;
}
this.navigatepageNums = navigatepageNums;
this.navigateFirstPage = this.navigatepageNums.length > 0 ? this.navigatepageNums[0] : 0;
this.navigateLastPage = this.navigatepageNums.length > 0 ? this.navigatepageNums[navigatepageNums.length - 1] : 0;
this.list = list;
}
public static int firstResult(int pageNum, int pageSize) {
int firstResult = pageNum * pageSize - pageSize;
return Math.max(firstResult, 0);
}
public static int maxResult(int pageSize) {
return Math.max(pageSize, 0);
}
}