KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > netbeans > modules > exceptions > web > StacktraceTagHandler


1 /*
2  * The contents of this file are subject to the terms of the Common Development
3  * and Distribution License (the License). You may not use this file except in
4  * compliance with the License.
5  *
6  * You can obtain a copy of the License at http://www.netbeans.org/cddl.html
7  * or http://www.netbeans.org/cddl.txt.
8  *
9  * When distributing Covered Code, include this CDDL Header Notice in each file
10  * and include the License file at http://www.netbeans.org/cddl.txt.
11  * If applicable, add the following below the CDDL Header, with the fields
12  * enclosed by brackets [] replaced by your own identifying information:
13  * "Portions Copyrighted [year] [name of copyright owner]"
14  *
15  * The Original Software is NetBeans. The Initial Developer of the Original
16  * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
17  * Microsystems, Inc. All Rights Reserved.
18  */

19 package org.netbeans.modules.exceptions.web;
20
21 import java.io.IOException JavaDoc;
22 import java.util.ArrayList JavaDoc;
23 import java.util.Collections JavaDoc;
24 import java.util.List JavaDoc;
25 import java.util.regex.Pattern JavaDoc;
26 import javax.servlet.jsp.tagext.*;
27 import javax.servlet.jsp.JspWriter JavaDoc;
28 import javax.servlet.jsp.JspException JavaDoc;
29 import org.netbeans.modules.exceptions.entity.Issue;
30 import org.netbeans.modules.exceptions.entity.Line;
31 import org.netbeans.modules.exceptions.entity.Stacktrace;
32
33 /**
34  *
35  * @author Jan Horvath
36  * @version
37  */

38
39 public class StacktraceTagHandler extends SimpleTagSupport {
40     
41     /**Called by the container to invoke this tag.
42      * The implementation of this method is provided by the tag library developer,
43      * and handles all tag processing, body iteration, etc.
44      */

45     private Issue issue;
46     
47     /**Called by the container to invoke this tag.
48      * The implementation of this method is provided by the tag library developer,
49      * and handles all tag processing, body iteration, etc.
50      */

51     public void doTag() throws JspException JavaDoc {
52         
53         JspWriter JavaDoc out=getJspContext().getOut();
54         
55         try {
56             Stacktrace stacktrace = issue.getStacktrace();
57             out.println();
58             while (stacktrace != null) {
59                 out.println(stacktrace.getMessage());
60                 List JavaDoc<Line> lines = new ArrayList JavaDoc(stacktrace.getLineCollection());
61                 Collections.sort(lines, new LineComparator());
62                 for(Line line : lines) {
63                     formatLine(out, line);
64                 }
65                 stacktrace = stacktrace.getAnnotation();
66             }
67             JspFragment f=getJspBody();
68             if (f != null) f.invoke(out);
69                         
70         } catch (java.io.IOException JavaDoc ex) {
71             throw new JspException JavaDoc(ex.getMessage());
72         }
73         
74     }
75     
76     public void setIssue(Issue issue) {
77         this.issue = issue;
78     }
79     
80     private void formatLine(JspWriter JavaDoc out, Line line) throws IOException JavaDoc {
81         String JavaDoc methodName = line.getMethod().getName();
82         Pattern JavaDoc pat = Pattern.compile("\\.");
83         String JavaDoc[] items = pat.split(methodName);
84         int i = items.length-2;
85         if (i<0) i=0;
86         StringBuffer JavaDoc fileName = new StringBuffer JavaDoc();
87         int s = items[i].indexOf("$");
88         if (s >= 0) {
89             fileName.append(items[i].substring(0, s));
90         } else {
91             fileName.append(items[i]);
92         }
93         fileName.append(".java");
94         out.print(" at " + methodName);
95         out.println("(" + fileName + ":" + line.getLinePK().getLinenumber() + ")");
96     }
97 }
98
Popular Tags