Adds beans and configs
[mkjsf-moved-to-github.git] / src / main / java / com / indexdata / pz2utils4jsf / controls / ResultsPager.java
1 package com.indexdata.pz2utils4jsf.controls;\r
2 \r
3 import java.io.Serializable;\r
4 import java.util.ArrayList;\r
5 import java.util.List;\r
6 \r
7 import com.indexdata.pz2utils4jsf.controls.PageLink;\r
8 import com.indexdata.pz2utils4jsf.pazpar2.Pz2Session;\r
9 import com.indexdata.pz2utils4jsf.pazpar2.data.ShowResponse;\r
10 \r
11 public class ResultsPager implements Serializable {\r
12 \r
13   private static final long serialVersionUID = 8854795222615583071L;\r
14   private Pz2Session pz2session = null;\r
15   private int pageRangeLength = 13;\r
16   \r
17   public ResultsPager(Pz2Session session) {\r
18     this.pz2session = session;     \r
19   }\r
20   \r
21   public ResultsPager(Pz2Session session, int pageRange) {\r
22     this.pz2session = session;\r
23     this.pageRangeLength = pageRange;\r
24   }\r
25   \r
26   private boolean hasHits () {\r
27     return (getShow().getMerged()>0);\r
28   }\r
29   \r
30   public int getCurrentPageNum () {\r
31     if (hasHits() && getShow().getNum()>0) {      \r
32       return (getShow().getStart()/getShow().getNum())+1;\r
33     } else {\r
34       return 0;\r
35     }\r
36   }\r
37   \r
38   public int getPageSize() {\r
39     return getShow().getNum();\r
40   }\r
41     \r
42   public int getFirstDisplayedPageNum () {\r
43     if (hasHits()) {\r
44       if (getCurrentPageNum() - (pageRangeLength/2) < 1) {\r
45         return 1;\r
46       } else {\r
47         return (getCurrentPageNum()-(pageRangeLength/2));\r
48       }\r
49     } else {\r
50       return 0;\r
51     }\r
52   }\r
53     \r
54   public int getLastDisplayedPageNum () {\r
55     if (hasHits()) {\r
56       if ((getFirstDisplayedPageNum() + pageRangeLength-1) > getLastPageNum()) {\r
57         return getLastPageNum();\r
58       } else {\r
59         return getFirstDisplayedPageNum() + pageRangeLength - 1;\r
60       }\r
61     } else {\r
62       return 0;\r
63     }\r
64   }\r
65   \r
66   public int getLastPageNum () {\r
67     if (hasHits()) {\r
68       return (int) Math.ceil(new Double(getShow().getMerged())/new Double(getShow().getNum()));\r
69     } else {\r
70       return 0;\r
71     }\r
72   }\r
73   \r
74   public List<PageLink> setPageLinks (int rangeLength) {\r
75     this.pageRangeLength = rangeLength;\r
76     return getPageLinks();\r
77   }\r
78   \r
79   public List<PageLink> getPageLinks () {    \r
80     ArrayList<PageLink> range = new ArrayList<PageLink>();\r
81     if (hasHits()) {\r
82       for (int i = getFirstDisplayedPageNum(); i>0 && i<=getLastDisplayedPageNum();i++) {\r
83         range.add(new PageLink(i+"",i,this));\r
84       }\r
85     }\r
86     return range;\r
87   }\r
88 \r
89   \r
90   public PageLink getPreviousPageLink (String text) {    \r
91     String linkText = (text!=null && text.length()>0 ? text : "Prev");\r
92     if (hasHits() && getCurrentPageNum()>1) {      \r
93       return new PageLink(linkText,getCurrentPageNum()-1,this);\r
94     } else {\r
95       return new PageLink(linkText,0,this);\r
96     }\r
97   }\r
98   \r
99   public PageLink getNextPageLink (String text) {    \r
100     String linkText = (text!=null && text.length()>0 ? text : "Next");\r
101     if (hasHits() && getCurrentPageNum()<getLastPageNum()) {\r
102       return new PageLink(linkText,getCurrentPageNum()+1,this);\r
103     } else {\r
104       return new PageLink(linkText,0,this);\r
105     }    \r
106   }\r
107   \r
108   public int getCurrentPage() {\r
109     return (getShow().getStart()/getPageSize()+1);\r
110   }\r
111   \r
112   public void goToPage(int page) {    \r
113     pz2session.setStart((page-1)*getPageSize());\r
114   }\r
115   \r
116   public void goToPreviousPage() {\r
117     if (hasPreviousPage()) {\r
118       goToPage(getCurrentPage()-1);  \r
119     }    \r
120   }\r
121   \r
122   public void goToNextPage() {\r
123     if (hasNextPage()) {\r
124       goToPage(getCurrentPage()+1);\r
125     }\r
126   }\r
127   \r
128   public boolean hasPreviousPage() {\r
129     return getCurrentPage()>1;\r
130   }\r
131       \r
132   public boolean hasNextPage () {\r
133     return getCurrentPage() < getLastPageNum();\r
134   }\r
135   \r
136   public boolean hasPageAfterLastDisplayed() {\r
137     return getLastDisplayedPageNum() < getLastPageNum();\r
138   }\r
139 \r
140   \r
141   private ShowResponse getShow() {\r
142     return pz2session.getShow();\r
143   }\r
144     \r
145 }\r