OSDN Git Service

import
[luz/luz.git] / luz2 / src / com / lavans / luz2 / util / Pager.java
1 /* $Id: Pager.java 472 2011-08-20 13:34:00Z dobashi $\r
2  * create: 2004/10/18\r
3  * (c)2004 Lavans Networks Inc. All Rights Reserved.\r
4  */\r
5 package com.lavans.luz2.util;\r
6 \r
7 import java.io.Serializable;\r
8 import java.util.ArrayList;\r
9 import java.util.Arrays;\r
10 import java.util.HashMap;\r
11 import java.util.HashSet;\r
12 import java.util.List;\r
13 import java.util.Map;\r
14 import java.util.Set;\r
15 \r
16 import com.lavans.luz2.commons.ArrayUtils;\r
17 \r
18 //import com.lavans.util.Logger;\r
19 \r
20 /**\r
21  *\r
22  * @author dobashi\r
23  * @version 1.00\r
24  */\r
25 public class Pager<E> implements Serializable{\r
26         /**\r
27          *\r
28          */\r
29         private static final long serialVersionUID = 4429141113724792971L;\r
30 \r
31         /** Logger */\r
32 //      private static Logger logger = Logger.getInstance();\r
33 \r
34         /** ページ情報 */\r
35         private PageInfo pageInfo = null;\r
36 \r
37         /** 全件数。 */\r
38         private long totalCount;\r
39         /** 全ページ数。 */\r
40         private int totalPage;\r
41 \r
42         /** 次ページ制御用リンク先URL */\r
43         private String linkUrl="";\r
44         /** 次ページ制御用リンクパラメータ */\r
45         private String linkParam="";\r
46 \r
47         /** 保持しているデータのリスト */\r
48         private List<E> dataList;\r
49 \r
50         /** 属性格納用Map */\r
51         private Map<String, Object> attributeMap = new HashMap<String, Object>();\r
52 \r
53         // 複数選択\r
54         /** 前画面での全ID */\r
55         public static final String ID_LIST = "id_list";\r
56         /** 保存済みID */\r
57         public static final String CHECKED_ID_LIST = "checked_id_list";\r
58         /** 今回選択されたID */\r
59         public static final String CHECKED_ID = "checked_id";\r
60         /** 複数選択時の選択済みID一覧 */\r
61         private Set<String> checkedIdList;\r
62 \r
63         /**\r
64          * コンストラクタ。表示行数指定。\r
65          */\r
66         public Pager(PageInfo pageInfo) {\r
67                 this.pageInfo = pageInfo;\r
68                 dataList = new ArrayList<E>(pageInfo.getRows());\r
69                 checkedIdList = new HashSet<String>();\r
70         }\r
71 \r
72         //----------------------------------------------------------\r
73         // ページ制御情報設定\r
74         //----------------------------------------------------------\r
75         /**\r
76          * 件数設定。\r
77          * この件数を元にページ数や次ページ存在チェック等を行う。\r
78          * DAOクラスで読込の際に使用する。\r
79          *\r
80          */\r
81         public void setTotalCount(long x){\r
82                 totalCount = x;\r
83                 // 全ページ数\r
84                 totalPage = (int)(totalCount / pageInfo.getRows() -1);\r
85                 if(totalCount % pageInfo.getRows() != 0){\r
86                         totalPage++;\r
87                 }\r
88         }\r
89 \r
90         /** 前のページがあるか。 */\r
91         public boolean hasPrev(){\r
92                 return pageInfo.getPage()>0;\r
93         }\r
94         /** 次のページがあるか。 */\r
95         public boolean hasNext(){\r
96                 return pageInfo.getPage() < totalPage;\r
97         }\r
98 //      protected void setHasNext(boolean x){\r
99 //              hasNext = x;\r
100 //      }\r
101         /** 全ページ数。 */\r
102         public int getTotalPage(){\r
103                 return totalPage;\r
104         }\r
105 \r
106         /**\r
107          * 全件データから現在のページを表すpagerにする。\r
108          * @param totalData\r
109          */\r
110         public void setTotalData(List<E> totalData){\r
111                 // 全件数\r
112                 setTotalCount(totalData.size());\r
113 \r
114                 int start = pageInfo.getPage() * pageInfo.getRows();\r
115                 for(int i=start; i<start+pageInfo.getRows(); i++){\r
116                         if(i>=totalData.size()){\r
117                                 break;\r
118                         }\r
119                         add(totalData.get(i));\r
120                 }\r
121 \r
122         }\r
123 \r
124 \r
125         //----------------------------------------------------------\r
126         // 複数選択処理\r
127         //----------------------------------------------------------\r
128         /**\r
129          * 複数選択時の選択項目判別処理\r
130          * 下記のようにパラメータを渡すと、選択/非選択の判定を行う。\r
131          * pager.setCheckedParams(request.getParamegerMap());\r
132          */\r
133         public void setCheckedParams(Map<String, String[]> params){\r
134                 // 今回選択されたID\r
135                 String checkedId[] = null;\r
136                 if(params.containsKey(CHECKED_ID)){\r
137                         checkedId = params.get(CHECKED_ID);\r
138                         // 今回選択されたIDを保存\r
139                         checkedIdList.addAll(Arrays.asList(checkedId));\r
140                 }\r
141                 // 保存済みID\r
142                 if(params.containsKey(CHECKED_ID_LIST) && !params.get(CHECKED_ID_LIST)[0].equals("")){\r
143                         checkedIdList.addAll(Arrays.asList(params.get(CHECKED_ID_LIST)[0].split(",")));\r
144                 }\r
145 \r
146                 // 前画面の分がなければここで終了\r
147                 if(!params.containsKey(ID_LIST)) return;\r
148                 // 前画面で表示していたすべてのid\r
149                 String idList[] = params.get(ID_LIST)[0].split(",");\r
150                 // 保存済みIDから、前回表示で選択されなかったIDを引く\r
151                 for(int i=0; i<idList.length; i++){\r
152                         if(!ArrayUtils.contains(checkedId, idList[i])){\r
153                                 checkedIdList.remove(idList[i]);\r
154                         }\r
155                 }\r
156         }\r
157 \r
158 \r
159         /**\r
160          * タイトル : ポジションデータ取得処理\r
161          * 説明 :\r
162          * @return List\r
163          * @param なし\r
164          * @throws なし\r
165          */\r
166         public E get(int i) {\r
167                 return dataList.get(i);\r
168         }\r
169 \r
170         /**\r
171          * タイトル : ポジションデータ取得処理\r
172          * 説明 :\r
173          * @return List\r
174          * @param なし\r
175          * @throws なし\r
176          */\r
177         public void add(E obj) {\r
178                 dataList.add(obj);\r
179         }\r
180 \r
181         /**\r
182          * タイトル : ポジションリスト取得処理\r
183          * 説明 :\r
184          * @return List\r
185          * @param なし\r
186          * @throws なし\r
187          */\r
188         public List<E> getList() {\r
189                 return dataList;\r
190         }\r
191 \r
192         /**\r
193          * タイトル : ポジションリストサイズ取得処理\r
194          * 説明 :\r
195          * @return int\r
196          * @param なし\r
197          * @throws なし\r
198          */\r
199         public int size() {\r
200                 return dataList.size();\r
201         }\r
202 \r
203         /**\r
204          * 表示開始番号。\r
205          * @return\r
206          */\r
207         public int getStartNumber(){\r
208                 return pageInfo.getPage()*pageInfo.getRows()+1;\r
209         }\r
210 \r
211         /**\r
212          * 表示終了番号。\r
213          * @return\r
214          */\r
215         public int getEndNumber(){\r
216                 return getStartNumber()+dataList.size()-1;\r
217         }\r
218 \r
219         /**\r
220          * @return totalCount を戻します。\r
221          */\r
222         public long getTotalCount() {\r
223                 return totalCount;\r
224         }\r
225         /**\r
226          * @return linkParam を戻します。\r
227          */\r
228         public String getLinkParam() {\r
229                 // pageInfoのrowsも自動的に付加する。\r
230                 if(pageInfo!=null){\r
231                         return linkParam + PageInfo.ROWS +"="+pageInfo.getRows()+"&";\r
232                 }\r
233                 return linkParam;\r
234         }\r
235         /**\r
236          * @param linkParam linkParam を設定。\r
237          */\r
238         public void setLinkParam(String linkParam) {\r
239                 this.linkParam = linkParam;\r
240 //              this.linkParam = StringUtil.encodeParameterValues(linkParam);\r
241         }\r
242         /**\r
243          * @return linkUrl を戻します。\r
244          */\r
245         public String getLinkUrl() {\r
246                 return linkUrl;\r
247         }\r
248         /**\r
249          * @param linkUrl linkUrl を設定。\r
250          */\r
251         public void setLinkUrl(String linkUrl) {\r
252                 this.linkUrl = linkUrl;\r
253         }\r
254         /**\r
255          * @return pageInfo を戻します。\r
256          */\r
257         public PageInfo getPageInfo() {\r
258                 return pageInfo;\r
259         }\r
260 \r
261         /**\r
262          * 属性追加。\r
263          * @param key\r
264          * @param value\r
265          */\r
266         public void setAttribute(String key, Object value){\r
267                 attributeMap.put(key, value);\r
268         }\r
269         /**\r
270          * 属性取得。\r
271          * @param key\r
272          * @param value\r
273          */\r
274         public Object getAttribute(String key){\r
275                 return attributeMap.get(key);\r
276         }\r
277 \r
278         /**\r
279          * @return the checkedIdList\r
280          */\r
281         public Set<String> getCheckedIdList() {\r
282                 return checkedIdList;\r
283         }\r
284 \r
285         /**\r
286          * @param checkedIdList the checkedIdList to set\r
287          */\r
288         public void setCheckedIdList(Set<String> checkedIdList) {\r
289                 this.checkedIdList = checkedIdList;\r
290         }\r
291 }\r