KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > jsptags > navigation > pager > PageTagSupport


1 /*
2  * Pager Tag Library
3  *
4  * Copyright (C) 2002 James Klicman <james@jsptags.com>
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19  */

20
21 package com.jsptags.navigation.pager;
22
23 import javax.servlet.jsp.*;
24 import javax.servlet.jsp.tagext.*;
25 import com.jsptags.navigation.pager.parser.*;
26
27 public abstract class PageTagSupport extends PagerTagSupport {
28
29     private String JavaDoc export = null;
30
31     private PageTagExport pageTagExport = null;
32     private Object JavaDoc oldPageUrl = null;
33     private Object JavaDoc oldPageNumber = null;
34     private Object JavaDoc oldFirstItem = null;
35     private Object JavaDoc oldLastItem = null;
36
37
38     public final void setExport(String JavaDoc value) throws JspException {
39         if (export != value) {
40             try {
41                 pageTagExport = TagExportParser.parsePageTagExport(value);
42             } catch (ParseException ex) {
43                 throw new JspTagException(ex.getMessage());
44             }
45         }
46         export = value;
47     }
48
49     public final String JavaDoc getExport() {
50         return export;
51     }
52
53
54     protected final void setPageAttributes(int page) {
55         if (pageTagExport == null) {
56             pageContext.setAttribute(PageTagExport.PAGE_URL,
57                 pagerTag.getPageUrl(page));
58             pageContext.setAttribute(PageTagExport.PAGE_NUMBER,
59                 pagerTag.getPageNumber(page));
60         } else {
61             String JavaDoc name;
62
63             if ((name = pageTagExport.getPageUrl()) != null)
64                 pageContext.setAttribute(name, pagerTag.getPageUrl(page));
65
66             if ((name = pageTagExport.getPageNumber()) != null)
67                 pageContext.setAttribute(name, pagerTag.getPageNumber(page));
68
69             int maxPageItems = pagerTag.getMaxPageItems();
70
71             if ((name = pageTagExport.getFirstItem()) != null) {
72                 int firstItem = (page * maxPageItems) + 1;
73                 pageContext.setAttribute(name, new Integer JavaDoc(firstItem));
74             }
75
76             if ((name = pageTagExport.getLastItem()) != null) {
77                 int lastItem = Math.min((page + 1) * maxPageItems,
78                                     pagerTag.getItemCount());
79                 pageContext.setAttribute(name, new Integer JavaDoc(lastItem));
80             }
81         }
82     }
83
84     protected final void setOffsetAttributes(int offset) {
85         if (pageTagExport == null) {
86             pageContext.setAttribute(PageTagExport.PAGE_URL,
87                 pagerTag.getOffsetUrl(offset));
88             pageContext.setAttribute(PageTagExport.PAGE_NUMBER,
89                 pagerTag.getOffsetPageNumber(offset));
90         } else {
91             String JavaDoc name;
92
93             if ((name = pageTagExport.getPageUrl()) != null)
94                 pageContext.setAttribute(name, pagerTag.getOffsetUrl(offset));
95
96             if ((name = pageTagExport.getPageNumber()) != null)
97                 pageContext.setAttribute(name,
98                     pagerTag.getOffsetPageNumber(offset));
99
100             int maxPageItems = pagerTag.getMaxPageItems();
101
102             if ((name = pageTagExport.getFirstItem()) != null) {
103                 int firstItem = offset + 1;
104                 pageContext.setAttribute(name, new Integer JavaDoc(firstItem));
105             }
106
107             if ((name = pageTagExport.getLastItem()) != null) {
108                 int lastItem = Math.min(offset + maxPageItems,
109                                     pagerTag.getItemCount());
110                 pageContext.setAttribute(name, new Integer JavaDoc(lastItem));
111             }
112         }
113     }
114
115
116     protected final void removeAttributes() {
117         if (pageTagExport == null) {
118             pageContext.removeAttribute(PageTagExport.PAGE_URL);
119             pageContext.removeAttribute(PageTagExport.PAGE_NUMBER);
120         } else {
121             String JavaDoc name;
122
123             if ((name = pageTagExport.getPageUrl()) != null)
124                 pageContext.removeAttribute(name);
125
126             if ((name = pageTagExport.getPageNumber()) != null)
127                 pageContext.removeAttribute(name);
128
129             if ((name = pageTagExport.getFirstItem()) != null)
130                 pageContext.removeAttribute(name);
131
132             if ((name = pageTagExport.getLastItem()) != null)
133                 pageContext.removeAttribute(name);
134         }
135     }
136
137     public int doStartTag() throws JspException {
138         super.doStartTag();
139
140         if (pageTagExport == null) {
141             oldPageUrl = pageContext.getAttribute(PageTagExport.PAGE_URL);
142             oldPageNumber = pageContext.getAttribute(PageTagExport.PAGE_NUMBER);
143         } else {
144             String JavaDoc name;
145
146             if ((name = pageTagExport.getPageUrl()) != null)
147                 oldPageUrl = pageContext.getAttribute(name);
148
149             if ((name = pageTagExport.getPageNumber()) != null)
150                 oldPageNumber = pageContext.getAttribute(name);
151
152             if ((name = pageTagExport.getFirstItem()) != null)
153                 oldFirstItem = pageContext.getAttribute(name);
154
155             if ((name = pageTagExport.getLastItem()) != null)
156                 oldLastItem = pageContext.getAttribute(name);
157         }
158
159         return EVAL_BODY_INCLUDE;
160     }
161
162     public int doEndTag() throws JspException {
163
164         if (pageTagExport == null) {
165             restoreAttribute(PageTagExport.PAGE_URL, oldPageUrl);
166             restoreAttribute(PageTagExport.PAGE_NUMBER, oldPageNumber);
167             oldPageUrl = null;
168             oldPageNumber = null;
169         } else {
170             String JavaDoc name;
171
172             if ((name = pageTagExport.getPageUrl()) != null) {
173                 restoreAttribute(name, oldPageUrl);
174                 oldPageUrl = null;
175             }
176
177             if ((name = pageTagExport.getPageNumber()) != null) {
178                 restoreAttribute(name, oldPageNumber);
179                 oldPageNumber = null;
180             }
181
182             if ((name = pageTagExport.getFirstItem()) != null) {
183                 restoreAttribute(name, oldFirstItem);
184                 oldFirstItem = null;
185             }
186
187             if ((name = pageTagExport.getLastItem()) != null) {
188                 restoreAttribute(name, oldLastItem);
189                 oldLastItem = null;
190             }
191         }
192
193         super.doEndTag();
194
195         return EVAL_PAGE;
196     }
197
198     public void release() {
199         export = null;
200         pageTagExport = null;
201         oldPageUrl = null;
202         oldPageNumber = null;
203         oldFirstItem = null;
204         oldLastItem = null;
205         super.release();
206     }
207 }
208
209 /* vim:set ts=4 sw=4: */
210
Popular Tags