KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > net > jforum > exceptions > ExceptionWriter


1 /*
2  * Copyright (c) Rafael Steil
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms,
6  * with or without modification, are permitted provided
7  * that the following conditions are met:
8  *
9  * 1) Redistributions of source code must retain the above
10  * copyright notice, this list of conditions and the
11  * following disclaimer.
12  * 2) Redistributions in binary form must reproduce the
13  * above copyright notice, this list of conditions and
14  * the following disclaimer in the documentation and/or
15  * other materials provided with the distribution.
16  * 3) Neither the name of "Rafael Steil" nor
17  * the names of its contributors may be used to endorse
18  * or promote products derived from this software without
19  * specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT
22  * HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
23  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
24  * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
25  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR
26  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
27  * THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
28  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
29  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES
30  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
31  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
32  * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
33  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
34  * IN CONTRACT, STRICT LIABILITY, OR TORT
35  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
36  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
37  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE
38  * /*
39  * Created on Feb 3, 2005 5:15:34 PM
40   * The JForum Project
41  * http://www.jforum.net
42  */

43 package net.jforum.exceptions;
44
45 import java.io.PrintWriter JavaDoc;
46 import java.io.StringWriter JavaDoc;
47 import java.io.Writer JavaDoc;
48
49 import net.jforum.JForumExecutionContext;
50 import net.jforum.SessionFacade;
51 import net.jforum.util.preferences.ConfigKeys;
52 import net.jforum.util.preferences.SystemGlobals;
53
54 import org.apache.log4j.Logger;
55
56 import freemarker.template.SimpleHash;
57 import freemarker.template.Template;
58
59 /**
60  * @author Rafael Steil
61  * @version $Id: ExceptionWriter.java,v 1.9 2006/01/29 15:07:16 rafaelsteil Exp $
62  */

63 public class ExceptionWriter
64 {
65     private static Logger logger = Logger.getLogger(ExceptionWriter.class);
66     
67     public void handleExceptionData(Throwable JavaDoc t, Writer JavaDoc w)
68     {
69         StringWriter JavaDoc strWriter = new StringWriter JavaDoc();
70         PrintWriter JavaDoc writer = new PrintWriter JavaDoc(strWriter);
71         t.printStackTrace(writer);
72         writer.close();
73         
74         try {
75             logger.error(strWriter);
76             String JavaDoc message = "";
77             
78             if (t.getCause() != null) {
79                 message = t.getCause().getMessage();
80             }
81             
82             if (message == null) {
83                 message = t.getMessage();
84             }
85             
86             if (message == null) {
87                 message = t.toString();
88             }
89
90             boolean canViewStackTrace = !SystemGlobals.getBoolValue(ConfigKeys.STACKTRACE_MODERATORS_ONLY)
91                     || (SessionFacade.isLogged()
92                     && SessionFacade.getUserSession().isModerator());
93             
94             String JavaDoc filter = "[<>]";
95             String JavaDoc stackTrace = canViewStackTrace
96                 ? strWriter.toString()
97                 : "Only moderators can view stack trace.";
98             
99             stackTrace = stackTrace.replaceAll(filter, "");
100             message = message.replaceAll(filter, "");
101             
102             SimpleHash templateContext = JForumExecutionContext.getTemplateContext();
103             
104             templateContext.put("stackTrace", stackTrace);
105             templateContext.put("message", message);
106
107             Template template = JForumExecutionContext.templateConfig().getTemplate("exception.html");
108             template.process(templateContext, w);
109         }
110         catch (Exception JavaDoc e) {
111             strWriter = new StringWriter JavaDoc();
112             writer = new PrintWriter JavaDoc(strWriter);
113             e.printStackTrace(writer);
114             writer.close();
115             logger.error(strWriter);
116         }
117     }
118 }
119
Popular Tags