SummaryHTMLRenderer.java
01 /**
02  * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
03  */
04 package net.sourceforge.pmd.renderers;
05 
06 import java.io.IOException;
07 import java.util.Map;
08 import java.util.Properties;
09 
10 import net.sourceforge.pmd.PMD;
11 
12 /**
13  * Renderer to a summarized HTML format.
14  */
15 public class SummaryHTMLRenderer extends AbstractAccumulatingRenderer {
16 
17     public static final String NAME = "summaryhtml";
18 
19     public static final String LINK_PREFIX = HTMLRenderer.LINK_PREFIX;
20     public static final String LINE_PREFIX = HTMLRenderer.LINE_PREFIX;
21 
22     public SummaryHTMLRenderer(Properties properties) {
23   super(NAME, "Summary HTML format.", properties);
24 
25   // These properties are defined here, but used by the HTMLRenderer
26   super.defineProperty(HTMLRenderer.LINK_PREFIX, "Path to HTML source.");
27   super.defineProperty(HTMLRenderer.LINE_PREFIX, "Prefix for line number anchor in the source file.");
28     }
29 
30     /**
31      * {@inheritDoc}
32      */
33     @Override
34     public void end() throws IOException {
35   writer.write("<html><head><title>PMD</title></head><body>" + PMD.EOL);
36   renderSummary();
37   writer.write("<h2><center>Detail</h2></center>");
38   writer.write("<table align=\"center\" cellspacing=\"0\" cellpadding=\"3\"><tr>" + PMD.EOL);
39   new HTMLRenderer(properties).renderBody(writer, report);
40   writer.write("</table></body></html>" + PMD.EOL);
41     }
42 
43     /**
44      * Write a Summary HTML table.
45      *
46      @throws IOException
47      */
48     public void renderSummary() throws IOException {
49   StringBuffer buf = new StringBuffer(500);
50   buf.append("<h2><center>Summary</h2></center>");
51   buf.append("<table align=\"center\" cellspacing=\"0\" cellpadding=\"3\">");
52   buf.append("<th>Rule name</th>");
53   buf.append("<th>Number of violations</th>");
54   writer.write(buf.toString());
55   Map<String, Integer> summary = report.getSummary();
56   for (Map.Entry<String, Integer> entry : summary.entrySet()) {
57       String ruleName = entry.getKey();
58       buf.setLength(0);
59       buf.append("<tr>");
60       buf.append("<td>" + ruleName + "</td>");
61       buf.append("<td align=center>" + entry.getValue().intValue() "</td>");
62       buf.append("</tr>");
63       writer.write(buf.toString());
64   }
65   writer.write("</table>");
66     }
67 }