KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > tonbeller > wcf > sqltable > SqlTablePageNavigationsTag


1 /*
2  * ====================================================================
3  * This software is subject to the terms of the Common Public License
4  * Agreement, available at the following URL:
5  * http://www.opensource.org/licenses/cpl.html .
6  * Copyright (C) 2003-2004 TONBELLER AG.
7  * All Rights Reserved.
8  * You must accept the terms of that agreement to use this software.
9  * ====================================================================
10  *
11  *
12  */

13 package com.tonbeller.wcf.sqltable;
14
15 import java.io.IOException JavaDoc;
16
17 import javax.servlet.http.HttpServletRequest JavaDoc;
18 import javax.servlet.jsp.JspException JavaDoc;
19 import javax.servlet.jsp.JspWriter JavaDoc;
20 import javax.servlet.jsp.jstl.sql.Result;
21
22 import org.apache.log4j.Logger;
23
24 import com.tonbeller.tbutils.res.Resources;
25 import com.tonbeller.wcf.controller.RequestContext;
26 import com.tonbeller.wcf.controller.RequestListener;
27 import com.tonbeller.wcf.expr.ExprUtils;
28 import com.tonbeller.wcf.scroller.Scroller;
29
30 /**
31  * @author av
32  * @since Oct 6, 2004
33  */

34 public class SqlTablePageNavigationsTag extends SqlTableNestedTag {
35   String JavaDoc resultExpr;
36   private static Logger logger = Logger.getLogger(SqlTablePageNavigationsTag.class);
37
38   static abstract class PageButton implements RequestListener {
39     protected SqlTable table;
40
41     protected abstract int getStartRow(RequestContext context);
42
43     PageButton(SqlTable table) {
44       this.table = table;
45     }
46
47     public void request(RequestContext context) throws Exception JavaDoc {
48       Scroller.enableScroller(context);
49       int maxRows = table.getMaxRows();
50       if (maxRows < 0) {
51         // show all rows
52
table.setStartRow(0);
53         return;
54       }
55       int startRow = getStartRow(context);
56       if (startRow < 0)
57         startRow = 0;
58       table.setStartRow(startRow);
59     }
60   }
61
62   static class PrevButton extends PageButton {
63     public PrevButton(SqlTable table) {
64       super(table);
65     }
66
67     protected int getStartRow(RequestContext context) {
68       return table.getStartRow() - table.getMaxRows();
69     }
70   }
71
72   static class NextButton extends PageButton {
73     public NextButton(SqlTable table) {
74       super(table);
75     }
76
77     protected int getStartRow(RequestContext context) {
78       return table.getStartRow() + table.getMaxRows();
79     }
80   }
81
82   static class GotoButton extends PageButton {
83     public GotoButton(SqlTable table) {
84       super(table);
85     }
86
87     protected int getStartRow(RequestContext context) {
88       String JavaDoc value = context.getParameter(table.getId() + ".goto.value");
89       if (value == null)
90         return 0;
91       int page;
92       try {
93         page = Integer.parseInt(value);
94       } catch (NumberFormatException JavaDoc e) {
95         return 0;
96       }
97       return (page - 1) * table.getMaxRows();
98     }
99   }
100
101   static class PageSizeButton implements RequestListener {
102     private SqlTable table;
103
104     PageSizeButton(SqlTable table) {
105       this.table = table;
106     }
107
108     public void request(RequestContext context) throws Exception JavaDoc {
109       Scroller.enableScroller(context);
110       String JavaDoc value = context.getParameter(table.getId() + ".size.value");
111       if (value == null)
112         return;
113       int size;
114       try {
115         size = Integer.parseInt(value);
116       } catch (NumberFormatException JavaDoc e) {
117         return;
118       }
119       if (size > 0) {
120         table.setMaxRows(size);
121         table.setStartRow(0);
122       }
123     }
124
125   }
126
127   public int doStartTag() throws JspException JavaDoc {
128     if (!isRenderActions())
129       return SKIP_BODY;
130     
131     SqlTable table = getTable();
132     int startRow = table.getStartRow();
133     int maxRows = table.getMaxRows();
134     if (maxRows <= 0)
135       return SKIP_BODY;
136
137     Resources res = getResources();
138     String JavaDoc contextPath = ((HttpServletRequest JavaDoc) pageContext.getRequest()).getContextPath();
139     String JavaDoc tableId = table.getId();
140     String JavaDoc curPage = Integer.toString(startRow / maxRows + 1);
141     String JavaDoc pageSize = Integer.toString(maxRows);
142     Object JavaDoc[] args = { contextPath, tableId, curPage, pageSize};
143
144     boolean havePrevious = false;
145     String JavaDoc prevButton = "";
146     if (table.getStartRow() > 0) {
147       prevButton = res.getString("sqltable.page.button.prev", args);
148       RequestListener r = new PrevButton(table);
149       table.addRequestListener(table.getId() + ".prev", null, r);
150       havePrevious = true;
151     }
152
153     boolean haveNext = false;
154     String JavaDoc nextButton = "";
155     Result result = (Result) ExprUtils.getModelReference(pageContext, resultExpr);
156     if (result.isLimitedByMaxRows()) {
157       nextButton = res.getString("sqltable.page.button.next", args);
158       RequestListener r = new NextButton(table);
159       table.addRequestListener(table.getId() + ".next", null, r);
160       haveNext = true;
161     }
162
163     RequestListener r = new GotoButton(table);
164     table.addRequestListener(table.getId() + ".goto.button", null, r);
165     r = new PageSizeButton(table);
166     table.addRequestListener(table.getId() + ".size.button", null, r);
167
168     String JavaDoc show = res.getString("sqltable.page.show", args);
169     String JavaDoc go = res.getString("sqltable.page.goto", args);
170     String JavaDoc size = res.getString("sqltable.page.size", args);
171     try {
172       JspWriter JavaDoc out = pageContext.getOut();
173       if (havePrevious) {
174         out.print(prevButton);
175         out.print(" ");
176       }
177       if (havePrevious || haveNext) {
178         out.print(show);
179         out.print(" ");
180       }
181       if (haveNext) {
182         out.print(nextButton);
183         out.print(" ");
184       }
185       if (havePrevious || haveNext) {
186         out.print(go);
187         out.print(" ");
188       }
189       pageContext.getOut().print(size);
190     } catch (IOException JavaDoc e) {
191       logger.error(null, e);
192     }
193     return SKIP_BODY;
194   }
195
196   public void setResult(String JavaDoc result) {
197     this.resultExpr = result;
198   }
199 }
200
Popular Tags