Merge branch 'master' of ssh://git.indexdata.com/home/git/private/mkjsf.git into...
[mkjsf-moved-to-github.git] / src / main / java / com / indexdata / mkjsf / controls / ResultsPager.java
diff --git a/src/main/java/com/indexdata/mkjsf/controls/ResultsPager.java b/src/main/java/com/indexdata/mkjsf/controls/ResultsPager.java
new file mode 100644 (file)
index 0000000..951e8d4
--- /dev/null
@@ -0,0 +1,141 @@
+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