KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > taglibs > standard > examples > taglib > ResourceTag


1 /*
2  * Copyright 1999-2004 The Apache Software Foundation.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */

16
17 package org.apache.taglibs.standard.examples.taglib;
18
19 import java.io.IOException JavaDoc;
20 import java.io.PrintWriter JavaDoc;
21 import java.io.Reader JavaDoc;
22 import java.io.Writer JavaDoc;
23
24 import javax.servlet.RequestDispatcher JavaDoc;
25 import javax.servlet.ServletResponseWrapper JavaDoc;
26 import javax.servlet.http.HttpServletRequest JavaDoc;
27 import javax.servlet.http.HttpServletResponse JavaDoc;
28 import javax.servlet.jsp.JspException JavaDoc;
29 import javax.servlet.jsp.tagext.TagSupport JavaDoc;
30
31 import org.apache.taglibs.standard.examples.util.IOBean;
32 import org.apache.taglibs.standard.examples.util.ServletResponseWrapperForWriter;
33
34 /**
35  * <p>Tag handler for &lt;resource&gt;
36  *
37  * @author Pierre Delisle
38  * @version $Revision: 1.3 $ $Date: 2004/02/28 01:01:41 $
39  */

40 public class ResourceTag extends TagSupport JavaDoc {
41     
42     //*********************************************************************
43
// Instance variables
44

45     private String JavaDoc id;
46     private String JavaDoc resource;
47     
48     private Reader JavaDoc reader;
49     
50     //*********************************************************************
51
// Constructors
52

53     public ResourceTag() {
54         super();
55         init();
56     }
57     
58     private void init() {
59         id = null;
60         resource = null;
61     }
62     
63     //*********************************************************************
64
// Tag's properties
65

66     /**
67      * Tag's 'id' attribute
68      */

69     public void setId(String JavaDoc id) {
70         this.id = id;
71     }
72     
73     /**
74      * Tag's 'resource' attribute
75      */

76     public void setResource(String JavaDoc resource) {
77         this.resource = resource;
78     }
79     
80     //*********************************************************************
81
// TagSupport methods
82

83     public int doStartTag() throws JspException JavaDoc {
84         reader = getReaderFromResource(resource);
85         exposeVariable(reader);
86         return EVAL_BODY_INCLUDE;
87     }
88     
89     public int doEndTag() throws JspException JavaDoc {
90         try {
91             reader.close();
92         } catch (IOException JavaDoc ex) {}
93         reader = null;
94         return EVAL_PAGE;
95     }
96     
97     /**
98      * Releases any resources we may have (or inherit)
99      */

100     public void release() {
101         super.release();
102         init();
103     }
104     
105     //*********************************************************************
106
// Tag's scific behavior methods
107

108     private Reader JavaDoc getReaderFromResource(String JavaDoc name) throws JspException JavaDoc {
109         HttpServletRequest JavaDoc request =
110         (HttpServletRequest JavaDoc)pageContext.getRequest();
111         HttpServletResponse JavaDoc response =
112         (HttpServletResponse JavaDoc)pageContext.getResponse();
113         RequestDispatcher JavaDoc rd = null;
114         
115         // The response of the local URL becomes the reader that
116
// we export. Need temporary storage.
117
IOBean ioBean = new IOBean();
118         Writer JavaDoc writer = ioBean.getWriter();
119         ServletResponseWrapper JavaDoc responseWrapper =
120         new ServletResponseWrapperForWriter(
121         response, new PrintWriter JavaDoc(writer));
122         rd = pageContext.getServletContext().getRequestDispatcher(name);
123         try {
124             rd.include(request, responseWrapper);
125             return ioBean.getReader();
126         } catch (Exception JavaDoc ex) {
127             throw new JspException JavaDoc(ex);
128         }
129     }
130     
131     //*********************************************************************
132
// Utility methods
133

134     private void exposeVariable(Reader JavaDoc reader) {
135         if (id != null) {
136             pageContext.setAttribute(id, reader);
137         }
138     }
139 }
140
Popular Tags