/** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ package net.sourceforge.pmd.renderers; import java.io.IOException; import java.io.Writer; import java.util.Iterator; import net.sourceforge.pmd.PMD; import net.sourceforge.pmd.Report; import net.sourceforge.pmd.RuleViolation; /** * Renderer to another HTML format. * * @author Vladimir */ public class VBHTMLRenderer extends AbstractIncrementingRenderer { public static final String NAME = "vbhtml"; public VBHTMLRenderer() { super(NAME, "Vladimir Bossicard HTML format."); } @Override public String defaultFileExtension() { return "vb.html"; } /** * {@inheritDoc} */ @Override public void start() throws IOException { getWriter().write(header()); } /** * {@inheritDoc} */ @Override public void renderFileViolations(Iterator<RuleViolation> violations) throws IOException { if (!violations.hasNext()) { return; } Writer writer = getWriter(); StringBuilder sb = new StringBuilder(500); String filename = null; String lineSep = PMD.EOL; boolean colorize = false; while (violations.hasNext()) { sb.setLength(0); RuleViolation rv = violations.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); writer.write(sb.toString()); } if (filename != null) { writer.write("</table>"); } } /** * {@inheritDoc} */ @Override public void end() throws IOException { Writer writer = getWriter(); StringBuilder sb = new StringBuilder(); writer.write("<br>"); // output the problems if (!errors.isEmpty()) { sb.setLength(0); sb.append("<table border=\"0\" width=\"80%\">"); sb.append("<tr id=TableHeader><td><font class=title> Problems found</font></td></tr>"); boolean colorize = false; for (Report.ProcessingError error : errors) { if (colorize) { sb.append("<tr id=RowColor1>"); } else { sb.append("<tr id=RowColor2>"); } colorize = !colorize; sb.append("<td><font class=body>").append(error).append("\"</font></td></tr>"); } sb.append("</table>"); writer.write(sb.toString()); } writer.write(footer()); } private String header() { StringBuilder sb = new StringBuilder(600).append("<html><head><title>PMD</title></head>") .append("<style type=\"text/css\">").append("<!--" + PMD.EOL) .append("body { background-color: white; font-family:verdana, arial, helvetica, geneva; font-size: 16px; font-style: italic; color: black; }") .append(PMD.EOL) .append(".title { font-family: verdana, arial, helvetica,geneva; font-size: 12px; font-weight:bold; color: white; }") .append(PMD.EOL) .append(".body { font-family: verdana, arial, helvetica, geneva; font-size: 12px; font-weight:plain; color: black; }") .append(PMD.EOL).append("#TableHeader { background-color: #003366; }").append(PMD.EOL) .append("#RowColor1 { background-color: #eeeeee; }").append(PMD.EOL) .append("#RowColor2 { background-color: white; }").append(PMD.EOL).append("-->").append("</style>") .append("<body><center>"); return sb.toString(); } private String footer() { return "</center></body></html>" + PMD.EOL; } }