KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > net > sourceforge > pmd > renderers > HTMLRenderer


1 /**
2  * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
3  */

4 package net.sourceforge.pmd.renderers;
5
6 import net.sourceforge.pmd.IRuleViolation;
7 import net.sourceforge.pmd.PMD;
8 import net.sourceforge.pmd.Report;
9 import net.sourceforge.pmd.util.StringUtil;
10
11 import java.io.IOException JavaDoc;
12 import java.io.Writer JavaDoc;
13 import java.util.Iterator JavaDoc;
14
15 public class HTMLRenderer extends AbstractRenderer {
16
17     private String JavaDoc linkPrefix;
18     private String JavaDoc linePrefix;
19
20     public HTMLRenderer(String JavaDoc linkPrefix, String JavaDoc linePrefix) {
21         this.linkPrefix = linkPrefix;
22         this.linePrefix = linePrefix;
23         
24     }
25
26     public HTMLRenderer() {
27         this(null, null);
28     }
29
30     public void render(Writer JavaDoc writer, Report report) throws IOException JavaDoc {
31         writer.write("<html><head><title>PMD</title></head><body>" + PMD.EOL);
32         renderBody(writer, report);
33         writer.write("</body></html>");
34     }
35
36     public void renderBody(Writer JavaDoc writer, Report report) throws IOException JavaDoc {
37         glomIRuleViolations(writer, report);
38         glomProcessingErrors(writer, report);
39         if (showSuppressedViolations) {
40             glomSuppressions(writer, report);
41         }
42     }
43     
44     private void glomIRuleViolations(Writer JavaDoc writer, Report report) throws IOException JavaDoc {
45         boolean colorize = true;
46         int violationCount = 1;
47         StringBuffer JavaDoc buf = new StringBuffer JavaDoc(500);
48         writer.write("<center><h3>PMD report</h3></center>");
49         writer.write("<center><h3>Problems found</h3></center>");
50         writer.write("<table align=\"center\" cellspacing=\"0\" cellpadding=\"3\"><tr>" + PMD.EOL + "<th>#</th><th>File</th><th>Line</th><th>Problem</th></tr>" + PMD.EOL);
51         for (Iterator JavaDoc i = report.iterator(); i.hasNext();) {
52             IRuleViolation rv = (IRuleViolation) i.next();
53             buf.setLength(0);
54             buf.append("<tr");
55             if (colorize) {
56                 buf.append(" bgcolor=\"lightgrey\"");
57             }
58             colorize = !colorize;
59             buf.append("> " + PMD.EOL);
60             buf.append("<td align=\"center\">" + violationCount + "</td>" + PMD.EOL);
61             buf.append("<td width=\"*%\">" + maybeWrap(rv.getFilename(),linePrefix==null?"":linePrefix + Integer.toString(rv.getBeginLine())) + "</td>" + PMD.EOL);
62             buf.append("<td align=\"center\" width=\"5%\">" + Integer.toString(rv.getBeginLine()) + "</td>" + PMD.EOL);
63
64             String JavaDoc d = StringUtil.htmlEncode(rv.getDescription());
65             
66             if (rv.getRule().getExternalInfoUrl() != null && rv.getRule().getExternalInfoUrl().length() != 0) {
67                 d = "<a HREF=\"" + rv.getRule().getExternalInfoUrl() + "\">" + d + "</a>";
68             }
69             buf.append("<td width=\"*\">" + d + "</td>" + PMD.EOL);
70             buf.append("</tr>" + PMD.EOL);
71             writer.write(buf.toString());
72             violationCount++;
73         }
74         if (violationCount > 0) {
75             writer.write("</table>");
76         }
77     }
78
79     private void glomProcessingErrors(Writer JavaDoc writer, Report report) throws IOException JavaDoc {
80         boolean colorize = true;
81         int violationCount;
82         // errors
83
if (report.errors().hasNext()) {
84             writer.write("<hr/>");
85             writer.write("<center><h3>Processing errors</h3></center>");
86             writer.write("<table align=\"center\" cellspacing=\"0\" cellpadding=\"3\"><tr>" + PMD.EOL + "<th>File</th><th>Problem</th></tr>" + PMD.EOL);
87         }
88         violationCount = 0;
89         StringBuffer JavaDoc buf = new StringBuffer JavaDoc(500);
90         for (Iterator JavaDoc i = report.errors(); i.hasNext();) {
91             Report.ProcessingError pe = (Report.ProcessingError) i.next();
92             buf.setLength(0);
93             buf.append("<tr");
94             if (colorize) {
95                 buf.append(" bgcolor=\"lightgrey\"");
96             }
97             colorize = !colorize;
98             buf.append("> " + PMD.EOL);
99             buf.append("<td>" + pe.getFile() + "</td>" + PMD.EOL);
100             buf.append("<td>" + pe.getMsg() + "</td>" + PMD.EOL);
101             buf.append("</tr>" + PMD.EOL);
102             writer.write(buf.toString());
103             violationCount++;
104         }
105         if (violationCount > 0) {
106             writer.write("</table>");
107         }
108     }
109
110     private void glomSuppressions(Writer JavaDoc writer, Report report) throws IOException JavaDoc {
111         boolean colorize = true;
112         boolean hasSuppressedViolations = !report.getSuppressedRuleViolations().isEmpty();
113         if (hasSuppressedViolations) {
114             writer.write("<hr/>");
115             writer.write("<center><h3>Suppressed warnings</h3></center>");
116             writer.write("<table align=\"center\" cellspacing=\"0\" cellpadding=\"3\"><tr>" + PMD.EOL + "<th>File</th><th>Line</th><th>Rule</th><th>NOPMD or Annotation</th><th>Reason</th></tr>" + PMD.EOL);
117         }
118         Report.SuppressedViolation sv;
119         StringBuffer JavaDoc buf = new StringBuffer JavaDoc(500);
120         for (Iterator JavaDoc i = report.getSuppressedRuleViolations().iterator(); i.hasNext();) {
121             sv = (Report.SuppressedViolation) i.next();
122             buf.setLength(0);
123             buf.append("<tr");
124             if (colorize) {
125                 buf.append(" bgcolor=\"lightgrey\"");
126             }
127             colorize = !colorize;
128             buf.append("> " + PMD.EOL);
129             buf.append("<td align=\"left\">" + sv.getRuleViolation().getFilename() + "</td>" + PMD.EOL);
130             buf.append("<td align=\"center\">" + sv.getRuleViolation().getBeginLine() + "</td>" + PMD.EOL);
131             buf.append("<td align=\"center\">" + sv.getRuleViolation().getRule().getName() + "</td>" + PMD.EOL);
132             buf.append("<td align=\"center\">" + (sv.suppressedByNOPMD() ? "NOPMD" : "Annotation") + "</td>" + PMD.EOL);
133             buf.append("<td align=\"center\">" + (sv.getUserMessage() == null ? "" : sv.getUserMessage()) + "</td>" + PMD.EOL);
134             buf.append("</tr>" + PMD.EOL);
135             writer.write(buf.toString());
136         }
137         if (hasSuppressedViolations) {
138             writer.write("</table>");
139         }
140     }
141
142     private String JavaDoc maybeWrap(String JavaDoc filename, String JavaDoc line) {
143         if (linkPrefix == null) {
144             return filename;
145         }
146         String JavaDoc newFileName = filename.substring(0, filename.lastIndexOf('.')).replace('\\', '/');
147         return "<a HREF=\"" + linkPrefix + newFileName + ".html#" + line + "\">" + newFileName + "</a>";
148     }
149 }
150
Popular Tags