-
Notifications
You must be signed in to change notification settings - Fork 0
/
SummaryHTMLRenderer.java
90 lines (75 loc) · 3.19 KB
/
SummaryHTMLRenderer.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
/**
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
*/
package net.sourceforge.pmd.renderers;
import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
import org.apache.commons.lang3.mutable.MutableInt;
import net.sourceforge.pmd.Report;
import net.sourceforge.pmd.RuleViolation;
/**
* Renderer to a summarized HTML format.
*/
public class SummaryHTMLRenderer extends AbstractAccumulatingRenderer {
public static final String NAME = "summaryhtml";
public SummaryHTMLRenderer() {
super(NAME, "Summary HTML format.");
// Note: we define the same properties as HTML Renderer
// we have to copy the values later from this renderer to the HTML
// Renderer
definePropertyDescriptor(HTMLRenderer.LINK_PREFIX);
definePropertyDescriptor(HTMLRenderer.LINE_PREFIX);
definePropertyDescriptor(HTMLRenderer.HTML_EXTENSION);
}
@Override
public String defaultFileExtension() {
return "html";
}
@Override
public void outputReport(Report report) throws IOException {
writer.println("<html><head><title>PMD</title></head><body>");
renderSummary(report);
writer.write("<center><h2>Detail</h2></center>");
writer.println("<table align=\"center\" cellspacing=\"0\" cellpadding=\"3\"><tr>");
HTMLRenderer htmlRenderer = new HTMLRenderer();
htmlRenderer.setProperty(HTMLRenderer.LINK_PREFIX, getProperty(HTMLRenderer.LINK_PREFIX));
htmlRenderer.setProperty(HTMLRenderer.LINE_PREFIX, getProperty(HTMLRenderer.LINE_PREFIX));
htmlRenderer.setProperty(HTMLRenderer.HTML_EXTENSION, getProperty(HTMLRenderer.HTML_EXTENSION));
htmlRenderer.setShowSuppressedViolations(showSuppressedViolations);
htmlRenderer.renderBody(writer, report);
writer.println("</tr></table></body></html>");
}
/**
* Write a Summary HTML table.
*/
private void renderSummary(Report report) throws IOException {
writer.println("<center><h2>Summary</h2></center>");
writer.println("<table align=\"center\" cellspacing=\"0\" cellpadding=\"3\">");
writer.println("<tr><th>Rule name</th><th>Number of violations</th></tr>");
Map<String, MutableInt> summary = getSummary(report);
for (Entry<String, MutableInt> entry : summary.entrySet()) {
String ruleName = entry.getKey();
writer.write("<tr><td>");
writer.write(ruleName);
writer.write("</td><td align=center>");
writer.write(String.valueOf(entry.getValue().intValue()));
writer.println("</td></tr>");
}
writer.println("</table>");
}
private static Map<String, MutableInt> getSummary(Report report) {
Map<String, MutableInt> summary = new LinkedHashMap<>();
for (RuleViolation rv : report.getViolations()) {
String name = rv.getRule().getName();
MutableInt count = summary.get(name);
if (count == null) {
count = new MutableInt(0);
summary.put(name, count);
}
count.increment();
}
return summary;
}
}