KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > Yasna > forum > tags > CategoriesLoopTag


1 /**
2  * Copyright (C) 2001 Yasna.com. All rights reserved.
3  *
4  * ===================================================================
5  * The Apache Software License, Version 1.1
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  *
11  * 1. Redistributions of source code must retain the above copyright
12  * notice, this list of conditions and the following disclaimer.
13  *
14  * 2. Redistributions in binary form must reproduce the above copyright
15  * notice, this list of conditions and the following disclaimer in
16  * the documentation and/or other materials provided with the
17  * distribution.
18  *
19  * 3. The end-user documentation included with the redistribution,
20  * if any, must include the following acknowledgment:
21  * "This product includes software developed by
22  * Yasna.com (http://www.yasna.com)."
23  * Alternately, this acknowledgment may appear in the software itself,
24  * if and wherever such third-party acknowledgments normally appear.
25  *
26  * 4. The names "Yazd" and "Yasna.com" must not be used to
27  * endorse or promote products derived from this software without
28  * prior written permission. For written permission, please
29  * contact yazd@yasna.com.
30  *
31  * 5. Products derived from this software may not be called "Yazd",
32  * nor may "Yazd" appear in their name, without prior written
33  * permission of Yasna.com.
34  *
35  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
36  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
37  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
38  * DISCLAIMED. IN NO EVENT SHALL YASNA.COM OR
39  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
40  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
41  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
42  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
43  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
44  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
45  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
46  * SUCH DAMAGE.
47  * ====================================================================
48  *
49  * This software consists of voluntary contributions made by many
50  * individuals on behalf of Yasna.com. For more information
51  * on Yasna.com, please see <http://www.yasna.com>.
52  */

53
54 package com.Yasna.forum.tags;
55
56 import javax.servlet.jsp.tagext.*;
57 import com.Yasna.forum.*;
58 import javax.servlet.jsp.*;
59 import java.util.*;
60
61 /**
62  * Jsp tag used to iterate through categories in database.
63  * Implements the BooleanTag interface and its single method getValue()
64  * returns true if any category exits in the database. Otherwise returns false.
65  */

66 public class CategoriesLoopTag extends TagSupport implements BooleanTag {
67
68     boolean hasCategories;
69     private Iterator categoryIterator;
70     private Category category;
71     private String JavaDoc name;
72     private final String JavaDoc BLANK = "&nbsp;";
73     private String JavaDoc id;
74
75     public int doStartTag() throws JspException {
76         ForumFactory forumFactory = ForumFactory.getInstance(getAuthToken());
77         categoryIterator = forumFactory.categories();
78         hasCategories = categoryIterator.hasNext();
79         if (hasCategories) {
80             category = (Category)categoryIterator.next();
81             name = category.getName();
82             pageContext.setAttribute(id, this, PageContext.PAGE_SCOPE);
83         }
84         return EVAL_BODY_INCLUDE;
85     }
86
87     /**
88      * Returns the name of current category only once. Every other call on the
89      * same category will result in "&nbsp" string.
90      * @return Category name.
91      */

92     public String JavaDoc getName() {
93         String JavaDoc toReturn = name;
94         name = BLANK;
95         return toReturn;
96     }
97
98     /**
99      * Returns the Category object of current category.
100      * @return Category object.
101      */

102     public Category getCategory() {
103         return category;
104     }
105
106     public int doAfterBody() throws JspException {
107         if (categoryIterator.hasNext()) {
108             category = (Category) categoryIterator.next();
109             name = category.getName();
110             return EVAL_BODY_AGAIN;
111         } else {
112             return SKIP_BODY;
113         }
114     }
115
116     public int doEndTag() throws JspException {
117         return EVAL_PAGE;
118     }
119
120     public void release() {
121         category = null;
122         categoryIterator = null;
123     }
124
125     /**
126      * Retrieve Authorization object from pageContext which give the information
127      * for currently logged user.
128      *
129      * @return Authorization object.
130      */

131     private Authorization getAuthToken() {
132         YazdState js = (YazdState) pageContext.getAttribute("yazdUserState",PageContext.SESSION_SCOPE);
133         return js.getAuthorization();
134     }
135
136     /**
137      * The BooleanTag interface method.
138      * @return true if any category found in database, false otherwise.
139      */

140     public boolean getValue() {
141         return hasCategories;
142     }
143
144     /**
145      * The id that will be used for saving the current object in pageContext.
146      * @param id String value.
147      */

148     public void setId(String JavaDoc id) {
149         this.id = id;
150     }
151
152 }
Popular Tags