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