--- /dev/null
+package com.indexdata.mkjsf.controls;\r
+\r
+import java.io.Serializable;\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import com.indexdata.mkjsf.pazpar2.commands.Pazpar2Commands;\r
+import com.indexdata.mkjsf.pazpar2.data.Responses;\r
+\r
+public class ResultsPager implements Serializable {\r
+\r
+ private static final long serialVersionUID = 8854795222615583071L;\r
+ private Responses data = null;\r
+ private int pageRangeLength = 13;\r
+ private Pazpar2Commands req;\r
+ \r
+ public ResultsPager(Responses data) {\r
+ this.data = data; \r
+ }\r
+ \r
+ public ResultsPager(Responses data, int pageRange, Pazpar2Commands req) {\r
+ this.data = data;\r
+ this.pageRangeLength = pageRange;\r
+ this.req = req;\r
+ }\r
+ \r
+ private boolean hasHits () {\r
+ return (data.getShow().getMerged()>0);\r
+ }\r
+ \r
+ public int getCurrentPageNum () {\r
+ if (hasHits() && data.getShow().getNum()>0) { \r
+ return (data.getShow().getStart()/data.getShow().getNum())+1;\r
+ } else {\r
+ return 0;\r
+ }\r
+ }\r
+ \r
+ public int getPageSize() {\r
+ return data.getShow().getNum();\r
+ }\r
+ \r
+ public int getFirstDisplayedPageNum () {\r
+ if (hasHits()) {\r
+ if (getCurrentPageNum() - (pageRangeLength/2) < 1) {\r
+ return 1;\r
+ } else {\r
+ return (getCurrentPageNum()-(pageRangeLength/2));\r
+ }\r
+ } else {\r
+ return 0;\r
+ }\r
+ }\r
+ \r
+ public int getLastDisplayedPageNum () {\r
+ if (hasHits()) {\r
+ if ((getFirstDisplayedPageNum() + pageRangeLength-1) > getLastPageNum()) {\r
+ return getLastPageNum();\r
+ } else {\r
+ return getFirstDisplayedPageNum() + pageRangeLength - 1;\r
+ }\r
+ } else {\r
+ return 0;\r
+ }\r
+ }\r
+ \r
+ public int getLastPageNum () {\r
+ if (hasHits()) {\r
+ return (int) Math.ceil(new Double(data.getShow().getMerged())/new Double(data.getShow().getNum()));\r
+ } else {\r
+ return 0;\r
+ }\r
+ }\r
+ \r
+ public List<PageLink> setPageLinks (int rangeLength) {\r
+ this.pageRangeLength = rangeLength;\r
+ return getPageLinks();\r
+ }\r
+ \r
+ public List<PageLink> getPageLinks () { \r
+ ArrayList<PageLink> range = new ArrayList<PageLink>();\r
+ if (hasHits()) {\r
+ for (int i = getFirstDisplayedPageNum(); i>0 && i<=getLastDisplayedPageNum();i++) {\r
+ range.add(new PageLink(i+"",i,this));\r
+ }\r
+ }\r
+ return range;\r
+ }\r
+\r
+ \r
+ public PageLink getPreviousPageLink (String text) { \r
+ String linkText = (text!=null && text.length()>0 ? text : "Prev");\r
+ if (hasHits() && getCurrentPageNum()>1) { \r
+ return new PageLink(linkText,getCurrentPageNum()-1,this);\r
+ } else {\r
+ return new PageLink(linkText,0,this);\r
+ }\r
+ }\r
+ \r
+ public PageLink getNextPageLink (String text) { \r
+ String linkText = (text!=null && text.length()>0 ? text : "Next");\r
+ if (hasHits() && getCurrentPageNum()<getLastPageNum()) {\r
+ return new PageLink(linkText,getCurrentPageNum()+1,this);\r
+ } else {\r
+ return new PageLink(linkText,0,this);\r
+ } \r
+ }\r
+ \r
+ public int getCurrentPage() {\r
+ return (data.getShow().getStart()/getPageSize()+1);\r
+ }\r
+ \r
+ public void goToPage(int page) { \r
+ req.getShow().setStart((page-1)*getPageSize());\r
+ }\r
+ \r
+ public void goToPreviousPage() {\r
+ if (hasPreviousPage()) {\r
+ goToPage(getCurrentPage()-1); \r
+ } \r
+ }\r
+ \r
+ public void goToNextPage() {\r
+ if (hasNextPage()) {\r
+ goToPage(getCurrentPage()+1);\r
+ }\r
+ }\r
+ \r
+ public boolean hasPreviousPage() {\r
+ return getCurrentPage()>1;\r
+ }\r
+ \r
+ public boolean hasNextPage () {\r
+ return getCurrentPage() < getLastPageNum();\r
+ }\r
+ \r
+ public boolean hasPageAfterLastDisplayed() {\r
+ return getLastDisplayedPageNum() < getLastPageNum();\r
+ }\r
+ \r
+}\r