package frame.object.dao; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import chat.server.call.IJSONWriter; import chat.server.call.IJsonProvider; import frame.persist.NamedSQL; import frame.variant.IVariantsProvider; import frame.variant.expression.IVariantRequestListener; import frame.variant.expression.VariantRequestParams; public class Page implements IVariantRequestListener, IVariantsProvider, IJsonProvider { private static Set parameterNames; private int pageSize; private int recordCount; private int pageNo; static { parameterNames = new HashSet(); parameterNames.add("pagesize"); parameterNames.add("recordcount"); parameterNames.add("pageno"); parameterNames.add("beginno"); parameterNames.add(NamedSQL.Param_Limit); } public Page(int recordCount) { this.pageSize = 20; this.pageNo = 1; this.recordCount = recordCount; } public int getBeginRecordNo() { int recordNo = pageSize * (pageNo - 1) + 1; return recordNo; } public int getBeginRecordNo_1() { int recordNo = getBeginRecordNo(); return recordNo - 1; } public int getEndRecordNo() { int recordNo = pageSize * pageNo; return Math.min(recordNo, recordCount); } public int getPageSize() { return pageSize; } public int getPageNo() { return pageNo; } public int getRecordCount() { return recordCount; } public int getPageCount() { return (int)Math.ceil(recordCount * 1.0d / pageSize); } public void setRecordCount(int count) { this.recordCount = count; } public void setPageSize(int value) { if (value <= 0) { return; } pageSize = value; } public void setPageNo(int pageNo) { this.pageNo = pageNo; } public void set(String name, String value) { name = name.toLowerCase(); if ("pageno".equals(name)) { setPageNo(Integer.parseInt(value)); } else if ("pagesize".equals(name)) { setPageSize(Integer.parseInt(value)); } } public String toString() { StringBuilder result = new StringBuilder(); result.append("size=").append(pageSize).append(","); result.append("recordCount=").append(recordCount).append(","); result.append("pageNo=").append(pageNo); return result.toString(); } @Override public String getStringValue(String name, VariantRequestParams params) { if ("pageSize".equalsIgnoreCase(name)) { return String.valueOf(pageSize); } else if ("recordCount".equalsIgnoreCase(name)) { return String.valueOf(recordCount); } else if ("pageNo".equalsIgnoreCase(name)) { return String.valueOf(pageNo); } else if ("beginNo".equalsIgnoreCase(name)) { int beginNo = getBeginRecordNo_1(); return String.valueOf(beginNo); } else if ("endNo".equalsIgnoreCase(name)) { int endNo = getEndRecordNo(); return String.valueOf(endNo); } else if (NamedSQL.Param_Limit.equalsIgnoreCase(name)) { return getLimitSQL(); } return null; } @Override public List getVariantNames() { return new ArrayList(parameterNames); } public static Set getVarinatNameSet() { return parameterNames; } @Override public List getVariantNameList() { List result = new ArrayList(); result.addAll(parameterNames); return result; } @Override public boolean containsVariant(String name) { if (name == null) { return false; } name = name.toLowerCase(); return parameterNames.contains(name); } @Override public Object getVariantValue(String name) { return getStringValue(name, null); } public boolean next() { int pageCount = getPageCount(); if (pageNo < pageCount) { pageNo++; return true; } return false; } public String getLimitSQL() { return " limit " + getBeginRecordNo_1() + ", " + pageSize; } @Override public void writeJSONObject(IJSONWriter writer) { writer.beginObject(); writeJSONData(writer); writer.endObject(); } @Override public void writeJSONData(IJSONWriter writer) { writer.write("recordcount", getRecordCount()); writer.write("pagecount", getPageCount()); writer.write("pagesize", getPageSize()); writer.write("pageno", getPageNo()); writer.write("beginrecordno", getBeginRecordNo()); writer.write("endrecordno", getEndRecordNo()); } }