KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > taglibs > io > TransformerTagSupport


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.io;
18
19 import java.io.IOException JavaDoc;
20 import java.io.InputStream JavaDoc;
21 import java.io.InputStreamReader JavaDoc;
22 import java.io.OutputStream JavaDoc;
23 import java.io.Reader JavaDoc;
24 import java.io.StringReader JavaDoc;
25 import java.io.Writer JavaDoc;
26
27 import javax.servlet.ServletContext JavaDoc;
28 import javax.servlet.jsp.JspException JavaDoc;
29 import javax.servlet.jsp.tagext.BodyContent JavaDoc;
30 import javax.servlet.jsp.tagext.Tag JavaDoc;
31
32 /** An abstract base class for a text based transformation tags which take some
33   * input and produces some output. Both input and output can be specified via
34   * attributes and scriplet expressions or via contained 'pipeline aware' tags.
35   *
36   * @author <a HREF="mailto:james.strachan@metastuff.com">James Strachan</a>
37   * @version $Revision: 1.2 $
38   */

39 public abstract class TransformerTagSupport extends AbstractBodyTag implements PipeConsumer {
40
41     protected static final boolean CLOSE_READER = false;
42     
43     
44     /** Reader to take input from */
45     private Reader JavaDoc reader;
46     
47     /** Writer to output to */
48     private Writer JavaDoc writer;
49     
50     public TransformerTagSupport() {
51     }
52     
53     
54     // BodyTag interface
55
//-------------------------------------------------------------------------
56
public int doStartTag() throws JspException JavaDoc {
57         return EVAL_BODY_TAG;
58     }
59     
60     public int doAfterBody() throws JspException JavaDoc {
61         BodyContent JavaDoc body = null;
62         if ( reader == null ) {
63             body = getBodyContent();
64             reader = new StringReader JavaDoc( body.getString() );
65         }
66         if ( writer == null ) {
67             writer = getBodyContent().getEnclosingWriter();
68         }
69         try {
70             transform( reader, writer );
71         }
72         catch (IOException JavaDoc e) {
73             handleException(e);
74         }
75         finally {
76             if ( CLOSE_READER ) {
77                 try {
78                     reader.close();
79                 }
80                 catch (Exception JavaDoc e) {
81                 }
82             }
83             reader = null;
84             writer = null;
85             if ( body != null ) {
86                 body.clearBody();
87             }
88         }
89         return EVAL_PAGE;
90     }
91     
92     public void release() {
93         super.release();
94         reader = null;
95         writer = null;
96     }
97     
98     // PipeConsumer interface
99
//-------------------------------------------------------------------------
100
public void setReader(Reader JavaDoc reader) {
101         this.reader = reader;
102     }
103
104     // PipeProducer interface
105
//-------------------------------------------------------------------------
106
public void setWriter(Writer JavaDoc writer) {
107         this.writer = writer;
108     }
109     
110     // Implementation methods
111
//-------------------------------------------------------------------------
112
protected PipeConsumer getConsumer() {
113         return (PipeConsumer) findAncestorWithClass( this, PipeConsumer.class );
114     }
115
116     /** Perform some arbitrary transformation */
117     protected abstract void transform(
118         Reader JavaDoc reader,
119         Writer JavaDoc writer
120     ) throws IOException JavaDoc, JspException JavaDoc;
121 }
122
Popular Tags