Clover coverage report - PMD - 3.7
Coverage timestamp: Wed May 31 2006 09:25:59 EDT
file stats: LOC: 138   Methods: 8
NCLOC: 121   Classes: 1
 
 Source file Conditionals Statements Methods TOTAL
HTMLRenderer.java 0% 2.4% 25% 3.3%
coverage coverage
 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.PMD;
 7    import net.sourceforge.pmd.Report;
 8    import net.sourceforge.pmd.IRuleViolation;
 9    import net.sourceforge.pmd.util.StringUtil;
 10   
 11    import java.util.Iterator;
 12   
 13    public class HTMLRenderer extends AbstractRenderer implements Renderer {
 14   
 15    private String linkPrefix;
 16   
 17  1 public HTMLRenderer(String linkPrefix) {
 18  1 this.linkPrefix = linkPrefix;
 19    }
 20   
 21  1 public HTMLRenderer() {
 22  1 this(null);
 23    }
 24   
 25  0 public String render(Report report) {
 26  0 StringBuffer buf = new StringBuffer("<html><head><title>PMD</title></head><body>" + PMD.EOL);
 27  0 buf.append(renderBody(report));
 28  0 buf.append("</body></html>");
 29  0 return buf.toString();
 30    }
 31   
 32  0 public String renderBody(Report report) {
 33  0 StringBuffer buf = glomIRuleViolations(report);
 34  0 glomProcessingErrors(report, buf);
 35  0 if (showSuppressedViolations) {
 36  0 glomSuppressions(report, buf);
 37    }
 38  0 return buf.toString();
 39    }
 40   
 41  0 private StringBuffer glomIRuleViolations(Report report) {
 42  0 boolean colorize = true;
 43  0 int violationCount = 1;
 44  0 StringBuffer buf = new StringBuffer();
 45  0 buf.append("<center><h3>PMD report</h3></center>");
 46  0 buf.append("<center><h3>Problems found</h3></center>");
 47  0 buf.append("<table align=\"center\" cellspacing=\"0\" cellpadding=\"3\"><tr>" + PMD.EOL + "<th>#</th><th>File</th><th>Line</th><th>Problem</th></tr>" + PMD.EOL);
 48  0 for (Iterator i = report.iterator(); i.hasNext();) {
 49  0 IRuleViolation rv = (IRuleViolation) i.next();
 50  0 buf.append("<tr");
 51  0 if (colorize) {
 52  0 buf.append(" bgcolor=\"lightgrey\"");
 53    }
 54  0 colorize = !colorize;
 55  0 buf.append("> " + PMD.EOL);
 56  0 buf.append("<td align=\"center\">" + violationCount + "</td>" + PMD.EOL);
 57  0 buf.append("<td width=\"*%\">" + maybeWrap(rv.getFilename(), Integer.toString(rv.getBeginLine())) + "</td>" + PMD.EOL);
 58  0 buf.append("<td align=\"center\" width=\"5%\">" + Integer.toString(rv.getBeginLine()) + "</td>" + PMD.EOL);
 59   
 60  0 String d = rv.getDescription();
 61  0 d = StringUtil.replaceString(d, '&', "&amp;");
 62  0 d = StringUtil.replaceString(d, '<', "&lt;");
 63  0 d = StringUtil.replaceString(d, '>', "&gt;");
 64  0 if (rv.getRule().getExternalInfoUrl() != null && rv.getRule().getExternalInfoUrl().length() != 0) {
 65  0 d = "<a href=\"" + rv.getRule().getExternalInfoUrl() + "\">" + d + "</a>";
 66    }
 67  0 buf.append("<td width=\"*\">" + d + "</td>" + PMD.EOL);
 68  0 buf.append("</tr>" + PMD.EOL);
 69  0 violationCount++;
 70    }
 71  0 if (violationCount > 0) {
 72  0 buf.append("</table>");
 73    }
 74  0 return buf;
 75    }
 76   
 77  0 private void glomProcessingErrors(Report report, StringBuffer buf) {
 78  0 boolean colorize = true;
 79  0 int violationCount;
 80    // errors
 81  0 if (report.errors().hasNext()) {
 82  0 buf.append("<hr/>");
 83  0 buf.append("<center><h3>Processing errors</h3></center>");
 84  0 buf.append("<table align=\"center\" cellspacing=\"0\" cellpadding=\"3\"><tr>" + PMD.EOL + "<th>File</th><th>Problem</th></tr>" + PMD.EOL);
 85    }
 86  0 violationCount = 0;
 87  0 for (Iterator i = report.errors(); i.hasNext();) {
 88  0 Report.ProcessingError pe = (Report.ProcessingError) i.next();
 89  0 buf.append("<tr");
 90  0 if (colorize) {
 91  0 buf.append(" bgcolor=\"lightgrey\"");
 92    }
 93  0 colorize = !colorize;
 94  0 buf.append("> " + PMD.EOL);
 95  0 buf.append("<td>" + pe.getFile() + "</td>" + PMD.EOL);
 96  0 buf.append("<td>" + pe.getMsg() + "</td>" + PMD.EOL);
 97  0 buf.append("</tr>" + PMD.EOL);
 98  0 violationCount++;
 99    }
 100  0 if (violationCount > 0) {
 101  0 buf.append("</table>");
 102    }
 103    }
 104   
 105  0 private void glomSuppressions(Report report, StringBuffer buf) {
 106  0 boolean colorize = true;
 107  0 if (!report.getSuppressedRuleViolations().isEmpty()) {
 108  0 buf.append("<hr/>");
 109  0 buf.append("<center><h3>Suppressed warnings</h3></center>");
 110  0 buf.append("<table align=\"center\" cellspacing=\"0\" cellpadding=\"3\"><tr>" + PMD.EOL + "<th>File</th><th>Line</th><th>Rule</th><th>NOPMD or Annotation</th></tr>" + PMD.EOL);
 111    }
 112  0 for (Iterator i = report.getSuppressedRuleViolations().iterator(); i.hasNext();) {
 113  0 Report.SuppressedViolation sv = (Report.SuppressedViolation) i.next();
 114  0 buf.append("<tr");
 115  0 if (colorize) {
 116  0 buf.append(" bgcolor=\"lightgrey\"");
 117    }
 118  0 colorize = !colorize;
 119  0 buf.append("> " + PMD.EOL);
 120  0 buf.append("<td align=\"left\">" + sv.getRuleViolation().getFilename() + "</td>" + PMD.EOL);
 121  0 buf.append("<td align=\"center\">" + sv.getRuleViolation().getBeginLine() + "</td>" + PMD.EOL);
 122  0 buf.append("<td align=\"center\">" + sv.getRuleViolation().getRule().getName() + "</td>" + PMD.EOL);
 123  0 buf.append("<td align=\"center\">" + (sv.suppressedByNOPMD() ? "NOPMD" : "Annotation") + "</td>" + PMD.EOL);
 124  0 buf.append("</tr>" + PMD.EOL);
 125    }
 126  0 if (!report.getSuppressedRuleViolations().isEmpty()) {
 127  0 buf.append("</table>");
 128    }
 129    }
 130   
 131  0 private String maybeWrap(String filename, String line) {
 132  0 if (linkPrefix == null) {
 133  0 return filename;
 134    }
 135  0 String newFileName = filename.substring(0, filename.lastIndexOf("."));
 136  0 return "<a href=\"" + linkPrefix + newFileName + ".html#" + line + "\">" + newFileName + "</a>";
 137    }
 138    }