package com.xyzboom.utils;
import com.xyzboom.database.entity.Entity;
import com.xyzboom.database.entity.EntityColumnEnum;
import com.xyzboom.database.entity.exception.EntityColumnException;
import com.xyzboom.database.entity.exception.NotEntityClassException;
import com.xyzboom.database.utils.SQLLimit;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.List;
public class Page<T> {
private Enum<?> entityColumnNull;
private Class<?> entityColumnClass;
private Enum<?> orderBy = null;
private boolean descend = false;
public Enum<?> getOrderBy() {
return orderBy;
}
public boolean isDescend() {
return descend;
}
public void setOrderBy(String orderBy) {
try {
Method fromStringMethod = entityColumnClass.
getDeclaredMethod(EntityColumnEnum.FROM_STRING_METHOD_NAME, String.class);
this.orderBy = (Enum<?>) fromStringMethod.invoke(null, orderBy);
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
this.orderBy = entityColumnNull;
}
}
public void setDescend(String descend) {
try {
this.descend = Boolean.parseBoolean(descend);
} catch (Exception e) {
this.descend = false;
}
}
@SuppressWarnings("unchecked")
public static <T> Page<T> cast(Page<?> page) {
return (Page<T>) page;
}
public interface SimplePageDelegate<T1> {
List<T1> getSimplePage(Enum<?> orderBy, boolean descend, SQLLimit limit);
}
public interface TotalSizeDelegate {
Integer getTotalSize();
}
public SimplePageDelegate<T> getSimplePageDelegate() {
return simplePageDelegate;
}
public void setSimplePageDelegate(SimplePageDelegate<T> simplePageDelegate) {
this.simplePageDelegate = simplePageDelegate;
}
private SimplePageDelegate<T> simplePageDelegate;
public TotalSizeDelegate getTotalSizeDelegate() {
return totalSizeDelegate;
}
public void setTotalSizeDelegate(TotalSizeDelegate totalSizeDelegate) {
this.totalSizeDelegate = totalSizeDelegate;
}
private TotalSizeDelegate totalSizeDelegate;
/**
* 显示的页码数量<br/>
* 例如:<br/>
* <前一页 1 2 ... 5 6 7 ... 12 13 后一页><br/>
* 以上写法共9页,省略号也算2页
*/
private int showPageNum = 9;
public Page(SimplePageDelegate<T> simplePageDelegate, TotalSizeDelegate totalSizeDelegate,
Class<?> entityClass)
throws NotEntityClassException, EntityColumnException {
if (entityClass.getAnnotation(Entity.class) == null) {
throw new NotEntityClassException("Class " + entityClass + " is not an Entity Class");
}
Method method;
try {
method = entityClass.getDeclaredMethod(Entity.GET_COLUMN_ENUM_METHOD_NAME);
} catch (NoSuchMethodException e) {
throw new NotEntityClassException(
"Class " + entityClass + " has @Entity but does not have " +
Entity.GET_COLUMN_ENUM_METHOD_NAME + " method");
}
try {
Object o = method.invoke(null);
if (o != null) {
entityColumnClass = (Class<?>) o;
if (entityColumnClass.getAnnotation(EntityColumnEnum.class) == null) {
throw new EntityColumnException("Not a column class");
}
Method getColumnNullMethod;
getColumnNullMethod = entityColumnClass.
getDeclaredMethod(EntityColumnEnum.GET_COLUMN_NULL_METHOD_NAME);
Object o1 = getColumnNullMethod.invoke(null);
this.entityColumnNull = (Enum<?>) o1;
}
} catch (IllegalAccessException | InvocationTargetException | ClassCastException e) {
throw new EntityColumnException("Fail to get entity's column class");
} catch (NoSuchMethodException e) {
throw new EntityColumnException(
"Class " + entityColumnClass + " has @Entity but does not have " +
EntityColumnEnum.GET_COLUMN_NULL_METHOD_NAME + " method");
}
this.simplePageDelegate = simplePageDelegate;
this.totalSizeDelegate = totalSizeDelegate;
}
public int getShowPageNum() {
return showPageNum;
}
public void setShowPageNum(int showPageNum) {
this.showPageNum = showPageNum;
}
/**
* 当前页码
*/
private int pageNo = 1;
/**
* 分页大小,即{@link Page#getList}的最大大小
*/
private int pageSize = 10;
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public static class PageSizeOutOfBoundsException extends IndexOutOfBoundsException {
public PageSizeOutOfBoundsException() {
}
public PageSizeOutOfBoundsException(String s) {
super(s);
}
}
public int getPageNo() {
return pageNo;
}
public void setPageNo(int pageNo) {
int totalSize = getTotalElementSize();
int maxPageNo = (int) Math.ceil(totalSize * 1.0 / pageSize);
if (pageNo > maxPageNo) {
throw new PageSizeOutOfBoundsException();
}
if (pageNo <= 0) {
throw new PageSizeOutOfBoundsException();
}
this.pageNo = pageNo;
}
/**
* 获取当前页面内容
*
* @return null 如果发生错误
*/
public List<T> getList(Enum<?> oderBy, boolean descend) {
return simplePageDelegate.getSimplePage(oderBy, descend,
new SQLLimit(pageNo - 1, pageSize));
}
public List<T> getList() {
if (orderBy == null) {
orderBy = entityColumnNull;
}
return getList(orderBy, descend);
}
/**
* 总{@link T}的数量<br/>
*
* @return null 如果发生错误
*/
public Integer getTotalElementSize() {
return totalSizeDelegate.getTotalSize();
}
public int getPrevPage() {
if (pageNo > 1) {
return pageNo - 1;
}
return -1;
}
public int getTotalPageSize() {
int totalSize = getTotalElementSize();
return (int) Math.ceil(totalSize * 1.0 / pageSize);
}
public int getNextPage() {
if (pageNo < getTotalPageSize()) {
return pageNo + 1;
}
return -1;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
j2ee-homework-master.zip (86个子文件)
j2ee-homework-master
pom.xml 3KB
src
main
java
com
xyzboom
utils
WebUtils.java 896B
VerifyCode.java 2KB
Page.java 7KB
web
services
LoginService.java 1KB
CourseService.java 840B
filters
EncodeFilter.java 957B
LoginFilter.java 954B
servlets
course
ExitCourse.java 2KB
CourseController.java 4KB
resourse
ResourceHandler.java 2KB
login
VerifyImageServlet.java 890B
LoginController.java 3KB
ExamVerify.java 1KB
beans
Login.java 1KB
CourseDeleteResult.java 572B
database
utils
SQLLimit.java 484B
DatabaseUtils.java 1KB
dao
CommonDAOUtil.java 458B
HitCourseDAO.java 4KB
UserDAO.java 2KB
CourseDAO.java 5KB
entity
EntityColumnEnum.java 412B
Entity.java 357B
HitCourse.java 1KB
exception
NotEntityClassException.java 242B
EntityColumnException.java 236B
EntityException.java 211B
Course.java 3KB
User.java 2KB
tld
ResourcePathTag.java 1KB
ForTag.java 2KB
webapp
pages
error.jsp 163B
course
delCourse.jsp 1001B
hitCourse.jsp 4KB
courseFailure.jsp 617B
allCourse.jsp 11KB
addCourse.jsp 2KB
main.jsp 678B
login
loginFailure.jsp 503B
login.jsp 4KB
WEB-INF
web.xml 416B
tld
xyzboom.tld 3KB
js
course
allCourse_jsp
js1.js 742B
_utils
url.js 499B
login
login_jsp
auto_change_selector.js 906B
css
course
hitCourse_jsp
css1.css 164B
allCourse_jsp
css1.css 161B
test
TestCoursePage.java 704B
TestHitCourse.java 218B
.idea
.name 21B
jarRepositories.xml 845B
uiDesigner.xml 9KB
sqldialects.xml 169B
runConfigurations.xml 337B
artifacts
920106840226_Homework_war.xml 605B
Homework_920106840226.xml 2KB
920106840226_Homework_war_exploded.xml 2KB
webContexts.xml 336B
libraries
Maven__jakarta_el_jakarta_el_api_4_0_0.xml 533B
Maven__org_glassfish_web_jakarta_servlet_jsp_jstl_2_0_0.xml 631B
Maven__org_junit_jupiter_junit_jupiter_api_5_7_1.xml 582B
Maven__org_junit_jupiter_junit_jupiter_engine_5_7_1.xml 603B
Maven__jakarta_servlet_jakarta_servlet_api_5_0_0.xml 588B
Maven__org_junit_platform_junit_platform_commons_1_7_1.xml 621B
Maven__jakarta_servlet_jsp_jstl_jakarta_servlet_jsp_jstl_api_2_0_0.xml 687B
Maven__com_sun_activation_jakarta_activation_2_0_0.xml 593B
Maven__jakarta_xml_bind_jakarta_xml_bind_api_3_0_0.xml 599B
Maven__org_apiguardian_apiguardian_api_1_1_0.xml 560B
Maven__jakarta_servlet_jsp_jakarta_servlet_jsp_api_3_0_0.xml 632B
Maven__commons_logging_commons_logging_1_2.xml 546B
Maven__mysql_mysql_connector_java_8_0_28.xml 562B
Maven__org_opentest4j_opentest4j_1_2_0.xml 521B
Maven__org_apache_commons_commons_dbcp2_2_9_0.xml 558B
Maven__com_google_protobuf_protobuf_java_3_11_4.xml 569B
Maven__commons_dbutils_commons_dbutils_1_7.xml 546B
Maven__org_junit_platform_junit_platform_engine_1_7_1.xml 614B
Maven__org_apache_commons_commons_pool2_2_10_0.xml 565B
vcs.xml 180B
misc.xml 581B
dataSources.xml 877B
compiler.xml 654B
modules.xml 282B
.gitignore 182B
encodings.xml 186B
920106840226-Homework.iml 4KB
共 86 条
- 1
资源评论
哆啦哆啦S梦
- 粉丝: 140
- 资源: 517
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功