package net.sourceforge.pmd.renderers;
import net.sourceforge.pmd.PMD;
import net.sourceforge.pmd.Report;
import net.sourceforge.pmd.RuleViolation;
import java.util.Iterator;
import java.util.Map;
public class SummaryVBHTMLRenderer implements Renderer {
public String render(Report report) {
StringBuffer sb = new StringBuffer(header());
sb.append(renderSummary(report));
if (report.isEmpty()) {
sb.append(footer());
return sb.toString();
}
boolean colorize = false;
String filename = null;
String lineSep = PMD.EOL;
for (Iterator iter = report.iterator(); iter.hasNext();) {
RuleViolation rv = (RuleViolation) iter.next();
if (!rv.getFilename().equals(filename)) { // New File
if (filename != null) {
sb.append("</table></br>");
colorize = false;
}
filename = rv.getFilename();
sb.append("<table border=\"0\" width=\"80%\">");
sb.append("<tr id=TableHeader><td colspan=\"2\"><font class=title> ").append(filename).append("</font></tr>");
sb.append(lineSep);
}
if (colorize) {
sb.append("<tr id=RowColor1>");
} else {
sb.append("<tr id=RowColor2>");
}
colorize = !colorize;
sb.append("<td width=\"50\" align=\"right\"><font class=body>" + rv.getBeginLine() + " </font></td>");
sb.append("<td><font class=body>" + rv.getDescription() + "</font></td>");
sb.append("</tr>");
sb.append(lineSep);
}
if (filename != null) {
sb.append("</table>");
}
sb.append("<br>");
// output the problems
filename = null;
Iterator iter = report.errors();
if (iter.hasNext()) {
sb.append("<table border=\"0\" width=\"80%\">");
sb.append("<tr id=TableHeader><td><font class=title> Problems found</font></td></tr>");
colorize = false;
while (iter.hasNext()) {
Report.ProcessingError rv = (Report.ProcessingError) iter.next();
if (!rv.getFile().equals(filename)) { // New File
if (filename != null) {
sb.append("</table></br>");
colorize = false;
}
filename = rv.getFile();
sb.append("<table border=\"0\" width=\"80%\">");
sb.append("<tr id=TableHeader><td colspan=\"2\"><font class=title> ").append(filename).append("</font></tr>");
sb.append(lineSep);
}
if (colorize) {
sb.append("<tr id=RowColor1>");
} else {
sb.append("<tr id=RowColor2>");
}
colorize = !colorize;
sb.append("<td align=\"right\"><font class=body>" + rv.getMsg() + " </font></td>");
sb.append("</tr>");
sb.append(lineSep);
}
sb.append("</table>");
}
sb.append(footer());
return sb.toString();
}
public String renderSummary(Report report) {
boolean colorize = false;
StringBuffer sb = new StringBuffer();
sb.append("<h2><center>Summary</center></h2>");
sb.append("<table border=\"0\" width=\"60%\">");
sb.append("<tr id=TableHeader>");
sb.append("<td><font class=title> Rule name</font></td>");
sb.append("<td><font class=title> Number of violations</font></td></tr>");
Map summary = report.getSummary();
int violationTotal = 0;
for (Iterator i = summary.keySet().iterator(); i.hasNext();) {
String ruleName = (String) i.next();
if (colorize) {
sb.append("<tr id=RowColor1>");
} else {
sb.append("<tr id=RowColor2>");
}
colorize = !colorize;
sb.append("<td><font class=body>" + ruleName + "</font></td>");
sb.append("<td align=center><font class=body>" + String.valueOf(((Integer) summary.get(ruleName)).intValue()) + "</font></td>");
sb.append("</tr>");
violationTotal += ((Integer) summary.get(ruleName)).intValue();
}
if (colorize) {
sb.append("<tr id=RowColor1>");
} else {
sb.append("<tr id=RowColor2>");
}
colorize = !colorize;
sb.append("<td><font class=body align=right>Total</font></td>");
sb.append("<td align=center><font class=body>" + violationTotal + "</font></td>");
sb.append("</tr>");
sb.append("</table><p/>");
return sb.toString();
}
private String header() {
StringBuffer sb = new StringBuffer();
sb.append("<html><head><title>PMD</title></head>");
sb.append("<style type=\"text/css\">");
sb.append("<!--" + PMD.EOL);
sb.append("body { background-color: white; font-family:verdana, arial, helvetica, geneva; font-size: 16px; font-style: italic; color: black; }" + PMD.EOL);
sb.append(".title { font-family: verdana, arial, helvetica,geneva; font-size: 12px; font-weight:bold; color: white; }" + PMD.EOL);
sb.append(".body { font-family: verdana, arial, helvetica, geneva; font-size: 12px; font-weight:plain; color: black; }" + PMD.EOL);
sb.append("#TableHeader { background-color: #003366; }" + PMD.EOL);
sb.append("#RowColor1 { background-color: #eeeeee; }" + PMD.EOL);
sb.append("#RowColor2 { background-color: white; }" + PMD.EOL);
sb.append("-->");
sb.append("</style>");
sb.append("<body><center>");
return sb.toString();
}
private String footer() {
return "</center></body></html>";
}
public void showSuppressedViolations(boolean arg0) {
// skip suppressed violations
}
}