KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > freemarker > template > TemplateExceptionHandler


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

52
53 package freemarker.template;
54
55 import java.io.Writer JavaDoc;
56 import java.io.PrintWriter JavaDoc;
57 import freemarker.core.Environment;
58
59 /**
60  * An API for objects that handle exceptions that are thrown during
61  * template rendering.
62  * @author <a HREF="mailto:jon@revusky.com">Jonathan Revusky</a>
63  */

64
65 public interface TemplateExceptionHandler {
66     
67     /**
68       * handle the exception.
69       * @param te the exception that occurred.
70       * @param env The environment object that represents the rendering context
71       * @param out the character output stream to output to.
72       */

73     void handleTemplateException(TemplateException te, Environment env, Writer JavaDoc out)
74         throws TemplateException;
75             
76             
77          /**
78            * This is a TemplateExceptionHandler which simply skips errors. It does nothing
79            * to handle the event. Note that the exception is still logged in any case, before
80            * being passed to the handler.
81            */

82     TemplateExceptionHandler IGNORE_HANDLER = new TemplateExceptionHandler() {
83         public void handleTemplateException(TemplateException te, Environment env, Writer JavaDoc out) {
84         }
85     };
86         
87          /**
88            * This is a TemplateExceptionHandler that simply rethrows the exception.
89            * Note that the exception is logged before being rethrown.
90            */

91     TemplateExceptionHandler RETHROW_HANDLER =new TemplateExceptionHandler() {
92         public void handleTemplateException(TemplateException te, Environment env, Writer JavaDoc out)
93                     throws TemplateException
94                 {
95                     throw te;
96         }
97     };
98         
99         /**
100           * This is a TemplateExceptionHandler used when you develop the templates. This handler
101           * outputs the stack trace information to the client and then rethrows the exception.
102           */

103     TemplateExceptionHandler DEBUG_HANDLER =new TemplateExceptionHandler() {
104         public void handleTemplateException(TemplateException te, Environment env, Writer JavaDoc out)
105                     throws TemplateException
106                 {
107                     PrintWriter JavaDoc pw = (out instanceof PrintWriter JavaDoc)
108                                  ? (PrintWriter JavaDoc) out
109                                  : new PrintWriter JavaDoc(out);
110                     te.printStackTrace(pw);
111                     pw.flush();
112                     throw te;
113         }
114     };
115
116         /**
117           * This is a TemplateExceptionHandler used when you develop HTML templates. This handler
118           * outputs the stack trace information to the client and then rethrows the exception, and
119           * surrounds it with tags to make the error message readable with the browser.
120           */

121     TemplateExceptionHandler HTML_DEBUG_HANDLER =new TemplateExceptionHandler() {
122         public void handleTemplateException(TemplateException te, Environment env, Writer JavaDoc out)
123                     throws TemplateException
124                 {
125                     PrintWriter JavaDoc pw = (out instanceof PrintWriter JavaDoc)
126                                  ? (PrintWriter JavaDoc) out
127                                  : new PrintWriter JavaDoc(out);
128                     pw.println("<!-- FREEMARKER ERROR MESSAGE STARTS HERE -->"
129                             + "<script language=javascript>//\"></script>"
130                             + "<script language=javascript>//\'></script>"
131                             + "<script language=javascript>//\"></script>"
132                             + "<script language=javascript>//\'></script>"
133                             + "</title></xmp></script></noscript></style></object>"
134                             + "</head></pre></table>"
135                             + "</form></table></table></table></a></u></i></b>"
136                             + "<div align=left "
137                             + "style='background-color:#FFFF00; color:#FF0000; "
138                             + "display:block; border-top:double; padding:2pt; "
139                             + "font-size:medium; font-family:Arial,sans-serif; "
140                             + "font-style: normal; font-variant: normal; "
141                             + "font-weight: normal; text-decoration: none; "
142                             + "text-transform: none'>"
143                             + "<b style='font-size:medium'>FreeMarker template error!</b>"
144                             + "<pre><xmp>");
145                     te.printStackTrace(pw);
146                     pw.println("</xmp></pre></div></html>");
147                     pw.flush();
148                     throw te;
149         }
150     };
151 }
152
Popular Tags