--- /dev/null
+/* $Id: Pager.java 472 2011-08-20 13:34:00Z dobashi $\r
+ * create: 2004/10/18\r
+ * (c)2004 Lavans Networks Inc. All Rights Reserved.\r
+ */\r
+package com.lavans.luz2.util;\r
+\r
+import java.io.Serializable;\r
+import java.util.ArrayList;\r
+import java.util.Arrays;\r
+import java.util.HashMap;\r
+import java.util.HashSet;\r
+import java.util.List;\r
+import java.util.Map;\r
+import java.util.Set;\r
+\r
+import com.lavans.luz2.commons.ArrayUtils;\r
+\r
+//import com.lavans.util.Logger;\r
+\r
+/**\r
+ *\r
+ * @author dobashi\r
+ * @version 1.00\r
+ */\r
+public class Pager<E> implements Serializable{\r
+ /**\r
+ *\r
+ */\r
+ private static final long serialVersionUID = 4429141113724792971L;\r
+\r
+ /** Logger */\r
+// private static Logger logger = Logger.getInstance();\r
+\r
+ /** ページ情報 */\r
+ private PageInfo pageInfo = null;\r
+\r
+ /** 全件数。 */\r
+ private long totalCount;\r
+ /** 全ページ数。 */\r
+ private int totalPage;\r
+\r
+ /** 次ページ制御用リンク先URL */\r
+ private String linkUrl="";\r
+ /** 次ページ制御用リンクパラメータ */\r
+ private String linkParam="";\r
+\r
+ /** 保持しているデータのリスト */\r
+ private List<E> dataList;\r
+\r
+ /** 属性格納用Map */\r
+ private Map<String, Object> attributeMap = new HashMap<String, Object>();\r
+\r
+ // 複数選択\r
+ /** 前画面での全ID */\r
+ public static final String ID_LIST = "id_list";\r
+ /** 保存済みID */\r
+ public static final String CHECKED_ID_LIST = "checked_id_list";\r
+ /** 今回選択されたID */\r
+ public static final String CHECKED_ID = "checked_id";\r
+ /** 複数選択時の選択済みID一覧 */\r
+ private Set<String> checkedIdList;\r
+\r
+ /**\r
+ * コンストラクタ。表示行数指定。\r
+ */\r
+ public Pager(PageInfo pageInfo) {\r
+ this.pageInfo = pageInfo;\r
+ dataList = new ArrayList<E>(pageInfo.getRows());\r
+ checkedIdList = new HashSet<String>();\r
+ }\r
+\r
+ //----------------------------------------------------------\r
+ // ページ制御情報設定\r
+ //----------------------------------------------------------\r
+ /**\r
+ * 件数設定。\r
+ * この件数を元にページ数や次ページ存在チェック等を行う。\r
+ * DAOクラスで読込の際に使用する。\r
+ *\r
+ */\r
+ public void setTotalCount(long x){\r
+ totalCount = x;\r
+ // 全ページ数\r
+ totalPage = (int)(totalCount / pageInfo.getRows() -1);\r
+ if(totalCount % pageInfo.getRows() != 0){\r
+ totalPage++;\r
+ }\r
+ }\r
+\r
+ /** 前のページがあるか。 */\r
+ public boolean hasPrev(){\r
+ return pageInfo.getPage()>0;\r
+ }\r
+ /** 次のページがあるか。 */\r
+ public boolean hasNext(){\r
+ return pageInfo.getPage() < totalPage;\r
+ }\r
+// protected void setHasNext(boolean x){\r
+// hasNext = x;\r
+// }\r
+ /** 全ページ数。 */\r
+ public int getTotalPage(){\r
+ return totalPage;\r
+ }\r
+\r
+ /**\r
+ * 全件データから現在のページを表すpagerにする。\r
+ * @param totalData\r
+ */\r
+ public void setTotalData(List<E> totalData){\r
+ // 全件数\r
+ setTotalCount(totalData.size());\r
+\r
+ int start = pageInfo.getPage() * pageInfo.getRows();\r
+ for(int i=start; i<start+pageInfo.getRows(); i++){\r
+ if(i>=totalData.size()){\r
+ break;\r
+ }\r
+ add(totalData.get(i));\r
+ }\r
+\r
+ }\r
+\r
+\r
+ //----------------------------------------------------------\r
+ // 複数選択処理\r
+ //----------------------------------------------------------\r
+ /**\r
+ * 複数選択時の選択項目判別処理\r
+ * 下記のようにパラメータを渡すと、選択/非選択の判定を行う。\r
+ * pager.setCheckedParams(request.getParamegerMap());\r
+ */\r
+ public void setCheckedParams(Map<String, String[]> params){\r
+ // 今回選択されたID\r
+ String checkedId[] = null;\r
+ if(params.containsKey(CHECKED_ID)){\r
+ checkedId = params.get(CHECKED_ID);\r
+ // 今回選択されたIDを保存\r
+ checkedIdList.addAll(Arrays.asList(checkedId));\r
+ }\r
+ // 保存済みID\r
+ if(params.containsKey(CHECKED_ID_LIST) && !params.get(CHECKED_ID_LIST)[0].equals("")){\r
+ checkedIdList.addAll(Arrays.asList(params.get(CHECKED_ID_LIST)[0].split(",")));\r
+ }\r
+\r
+ // 前画面の分がなければここで終了\r
+ if(!params.containsKey(ID_LIST)) return;\r
+ // 前画面で表示していたすべてのid\r
+ String idList[] = params.get(ID_LIST)[0].split(",");\r
+ // 保存済みIDから、前回表示で選択されなかったIDを引く\r
+ for(int i=0; i<idList.length; i++){\r
+ if(!ArrayUtils.contains(checkedId, idList[i])){\r
+ checkedIdList.remove(idList[i]);\r
+ }\r
+ }\r
+ }\r
+\r
+\r
+ /**\r
+ * タイトル : ポジションデータ取得処理\r
+ * 説明 :\r
+ * @return List\r
+ * @param なし\r
+ * @throws なし\r
+ */\r
+ public E get(int i) {\r
+ return dataList.get(i);\r
+ }\r
+\r
+ /**\r
+ * タイトル : ポジションデータ取得処理\r
+ * 説明 :\r
+ * @return List\r
+ * @param なし\r
+ * @throws なし\r
+ */\r
+ public void add(E obj) {\r
+ dataList.add(obj);\r
+ }\r
+\r
+ /**\r
+ * タイトル : ポジションリスト取得処理\r
+ * 説明 :\r
+ * @return List\r
+ * @param なし\r
+ * @throws なし\r
+ */\r
+ public List<E> getList() {\r
+ return dataList;\r
+ }\r
+\r
+ /**\r
+ * タイトル : ポジションリストサイズ取得処理\r
+ * 説明 :\r
+ * @return int\r
+ * @param なし\r
+ * @throws なし\r
+ */\r
+ public int size() {\r
+ return dataList.size();\r
+ }\r
+\r
+ /**\r
+ * 表示開始番号。\r
+ * @return\r
+ */\r
+ public int getStartNumber(){\r
+ return pageInfo.getPage()*pageInfo.getRows()+1;\r
+ }\r
+\r
+ /**\r
+ * 表示終了番号。\r
+ * @return\r
+ */\r
+ public int getEndNumber(){\r
+ return getStartNumber()+dataList.size()-1;\r
+ }\r
+\r
+ /**\r
+ * @return totalCount を戻します。\r
+ */\r
+ public long getTotalCount() {\r
+ return totalCount;\r
+ }\r
+ /**\r
+ * @return linkParam を戻します。\r
+ */\r
+ public String getLinkParam() {\r
+ // pageInfoのrowsも自動的に付加する。\r
+ if(pageInfo!=null){\r
+ return linkParam + PageInfo.ROWS +"="+pageInfo.getRows()+"&";\r
+ }\r
+ return linkParam;\r
+ }\r
+ /**\r
+ * @param linkParam linkParam を設定。\r
+ */\r
+ public void setLinkParam(String linkParam) {\r
+ this.linkParam = linkParam;\r
+// this.linkParam = StringUtil.encodeParameterValues(linkParam);\r
+ }\r
+ /**\r
+ * @return linkUrl を戻します。\r
+ */\r
+ public String getLinkUrl() {\r
+ return linkUrl;\r
+ }\r
+ /**\r
+ * @param linkUrl linkUrl を設定。\r
+ */\r
+ public void setLinkUrl(String linkUrl) {\r
+ this.linkUrl = linkUrl;\r
+ }\r
+ /**\r
+ * @return pageInfo を戻します。\r
+ */\r
+ public PageInfo getPageInfo() {\r
+ return pageInfo;\r
+ }\r
+\r
+ /**\r
+ * 属性追加。\r
+ * @param key\r
+ * @param value\r
+ */\r
+ public void setAttribute(String key, Object value){\r
+ attributeMap.put(key, value);\r
+ }\r
+ /**\r
+ * 属性取得。\r
+ * @param key\r
+ * @param value\r
+ */\r
+ public Object getAttribute(String key){\r
+ return attributeMap.get(key);\r
+ }\r
+\r
+ /**\r
+ * @return the checkedIdList\r
+ */\r
+ public Set<String> getCheckedIdList() {\r
+ return checkedIdList;\r
+ }\r
+\r
+ /**\r
+ * @param checkedIdList the checkedIdList to set\r
+ */\r
+ public void setCheckedIdList(Set<String> checkedIdList) {\r
+ this.checkedIdList = checkedIdList;\r
+ }\r
+}\r