OSDN Git Service

track
[luz/luz.git] / src / com / lavans / luz2 / util / Pager.java
diff --git a/src/com/lavans/luz2/util/Pager.java b/src/com/lavans/luz2/util/Pager.java
new file mode 100644 (file)
index 0000000..40f0cad
--- /dev/null
@@ -0,0 +1,291 @@
+/* $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