KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > jcorporate > expresso > ext > taglib > OutputTag


1 /* ====================================================================
2  * The Jcorporate Apache Style Software License, Version 1.2 05-07-2002
3  *
4  * Copyright (c) 1995-2002 Jcorporate Ltd. All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  *
10  * 1. Redistributions of source code must retain the above copyright
11  * notice, this list of conditions and the following disclaimer.
12  *
13  * 2. Redistributions in binary form must reproduce the above copyright
14  * notice, this list of conditions and the following disclaimer in
15  * the documentation and/or other materials provided with the
16  * distribution.
17  *
18  * 3. The end-user documentation included with the redistribution,
19  * if any, must include the following acknowledgment:
20  * "This product includes software developed by Jcorporate Ltd.
21  * (http://www.jcorporate.com/)."
22  * Alternately, this acknowledgment may appear in the software itself,
23  * if and wherever such third-party acknowledgments normally appear.
24  *
25  * 4. "Jcorporate" and product names such as "Expresso" must
26  * not be used to endorse or promote products derived from this
27  * software without prior written permission. For written permission,
28  * please contact info@jcorporate.com.
29  *
30  * 5. Products derived from this software may not be called "Expresso",
31  * or other Jcorporate product names; nor may "Expresso" or other
32  * Jcorporate product names appear in their name, without prior
33  * written permission of Jcorporate Ltd.
34  *
35  * 6. No product derived from this software may compete in the same
36  * market space, i.e. framework, without prior written permission
37  * of Jcorporate Ltd. For written permission, please contact
38  * partners@jcorporate.com.
39  *
40  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
41  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
42  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
43  * DISCLAIMED. IN NO EVENT SHALL JCORPORATE LTD OR ITS CONTRIBUTORS
44  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
45  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
46  * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
47  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
48  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
49  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
50  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51  * SUCH DAMAGE.
52  * ====================================================================
53  *
54  * This software consists of voluntary contributions made by many
55  * individuals on behalf of the Jcorporate Ltd. Contributions back
56  * to the project(s) are encouraged when you make modifications.
57  * Please send them to support@jcorporate.com. For more information
58  * on Jcorporate Ltd. and its products, please see
59  * <http://www.jcorporate.com/>.
60  *
61  * Portions of this software are based upon other open source
62  * products and are subject to their respective licenses.
63  */

64
65 package com.jcorporate.expresso.ext.taglib;
66
67 import com.jcorporate.expresso.core.controller.Output;
68
69 import javax.servlet.jsp.JspTagException JavaDoc;
70 import javax.servlet.jsp.JspWriter JavaDoc;
71 import javax.servlet.jsp.tagext.Tag JavaDoc;
72
73
74 /**
75  * OutputTag is a tag that by itself does not display anything. The
76  * OutputTag must have a start and end tag. Between these tags,
77  * the ContentTag can be used to place the content from the Output,
78  * and the AttributeTag can be used to place attributes of the Output.
79  * The OutputTag can also be used to fetch out nested outputs, if one
80  * OutputTag is nested within another one. Right now only one level
81  * of nesting is supported. We need to do this recursively.
82  * <p/>
83  * Usage example:
84  * <expresso:OutputTag name="product">
85  * Content Area: <expresso:ContentTag /></br>
86  * Attribute: <expresso:AttributeTag name="product_desc"/>
87  * Nested Output: <expresso:OutputTag name="nestoutput">
88  * <expresso:ContentTag />
89  * </expresso:OutputTag>
90  * </expresso:OutputTag>
91  *
92  * @author Adam Rossi, PlatinumSolutions
93  */

94 public class OutputTag
95         extends ExpressoTagSupport {
96     private Output oneOutput = null;
97     private java.lang.String JavaDoc name = null;
98     private java.lang.String JavaDoc content = null;
99     private java.lang.String JavaDoc nameToUse = null;
100     private java.lang.String JavaDoc contentToUse = null;
101
102     public OutputTag() {
103         super();
104     }
105
106     /**
107      * Standard doEndTag.
108      *
109      * @return int
110      */

111     public int doEndTag()
112             throws javax.servlet.jsp.JspTagException JavaDoc {
113         return EVAL_PAGE;
114     } /* doEndTag() */
115
116
117     /**
118      * Do nothing until end tag.
119      *
120      * @return int
121      * @throws javax.servlet.jsp.JspTagException
122      * The exception description.
123      */

124     public int doStartTag()
125             throws javax.servlet.jsp.JspTagException JavaDoc {
126         nameToUse = name;
127         contentToUse = content;
128         getControllerResponse();
129
130         try {
131             Tag JavaDoc container = getContainer();
132
133             if (container == null) {
134                 oneOutput = ctlrResp.getOutput(name);
135             } else {
136                 if (container instanceof ElementIterator) {
137                     oneOutput = (Output) ((ElementIterator) container).getElement();
138                     nameToUse = oneOutput.getName();
139                 } else if (container instanceof BlockTag) {
140                     oneOutput = (Output) ((BlockTag) container).getBlock().getContent(getName());
141                 } else if (container instanceof OutputTag) {
142                     oneOutput = (Output) ((OutputTag) container).getOutput().getNested(name);
143                 } else {
144                     throw new JspTagException JavaDoc("OutputTag: cannot handle container tag" +
145                             container.getClass().getName());
146                 }
147             }
148
149             JspWriter JavaDoc writer = pageContext.getOut();
150
151             if (oneOutput == null) {
152                 writer.println("The Output Named " + nameToUse +
153                         " Could Not Be Displayed");
154             } else {
155
156                 //set the content for the children tags
157
contentToUse = oneOutput.getContent();
158             }
159         } catch (Exception JavaDoc e) {
160             throw new JspTagException JavaDoc("OutputTag Error: " + e.getMessage());
161         }
162
163         return EVAL_BODY_INCLUDE;
164     } /* doStartTag() */
165
166
167     public java.lang.String JavaDoc getContent() {
168         return contentToUse;
169     }
170
171     public java.lang.String JavaDoc getName() {
172         return nameToUse;
173     }
174
175     public Output getOutput() {
176         return oneOutput;
177     }
178
179     /**
180      * GET / SET Name
181      *
182      * @param newContent the new content for the output
183      */

184     public void setContent(java.lang.String JavaDoc newContent) {
185         content = newContent;
186     }
187
188     /**
189      * @param newName the new name for the output
190      */

191     public void setName(java.lang.String JavaDoc newName) {
192         name = newName;
193     }
194 }
Popular Tags