Clover coverage report - PMD - 3.3
Coverage timestamp: Thu Sep 15 2005 17:59:57 EDT
file stats: LOC: 95   Methods: 5
NCLOC: 75   Classes: 1
 
 Source file Conditionals Statements Methods TOTAL
XMLRenderer.java 100% 100% 100% 100%
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.RuleViolation;
 9    import net.sourceforge.pmd.util.StringUtil;
 10   
 11    import java.text.SimpleDateFormat;
 12    import java.util.Date;
 13    import java.util.Iterator;
 14   
 15    public class XMLRenderer implements Renderer {
 16   
 17  9 public String render(Report report) {
 18   
 19  9 StringBuffer buf = new StringBuffer("<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + PMD.EOL + createVersionAttr() + createTimestampAttr() + createTimeElapsedAttr(report) + ">" + PMD.EOL);
 20  9 String filename = null;
 21   
 22    // rule violations
 23  9 for (Iterator i = report.iterator(); i.hasNext();) {
 24  13 RuleViolation rv = (RuleViolation) i.next();
 25  13 if (!rv.getFilename().equals(filename)) { // New File
 26  11 if (filename != null) {// Not first file ?
 27  4 buf.append("</file>"+PMD.EOL);
 28    }
 29  11 filename = rv.getFilename();
 30  11 buf.append("<file name=\"");
 31  11 StringUtil.appendXmlEscaped(buf, filename);
 32  11 buf.append("\">").append(PMD.EOL);
 33    }
 34   
 35  13 buf.append("<violation line=\"").append(rv.getLine()).append("\"");
 36  13 buf.append(" rule=\"");
 37  13 StringUtil.appendXmlEscaped(buf, rv.getRule().getName());
 38  13 buf.append("\"");
 39  13 buf.append(" ruleset=\"");
 40  13 StringUtil.appendXmlEscaped(buf, rv.getRule().getRuleSetName());
 41  13 buf.append("\"");
 42  13 maybeAdd("package", rv.getPackageName(), buf);
 43  13 maybeAdd("class", rv.getClassName(), buf);
 44  13 maybeAdd("method", rv.getMethodName(), buf);
 45  13 maybeAdd("externalInfoUrl", rv.getRule().getExternalInfoUrl(), buf);
 46  13 buf.append(" priority=\"");
 47  13 buf.append(rv.getRule().getPriority());
 48  13 buf.append("\">");
 49  13 buf.append(PMD.EOL);
 50  13 StringUtil.appendXmlEscaped(buf, rv.getDescription());
 51   
 52  13 buf.append(PMD.EOL);
 53  13 buf.append("</violation>");
 54  13 buf.append(PMD.EOL);
 55    }
 56  9 if (filename != null) { // Not first file ?
 57  7 buf.append("</file>"+PMD.EOL);
 58    }
 59   
 60    // errors
 61  9 for (Iterator i = report.errors(); i.hasNext();) {
 62  1 Report.ProcessingError pe = (Report.ProcessingError) i.next();
 63  1 buf.append("<error ").append("filename=\"");
 64  1 StringUtil.appendXmlEscaped(buf, pe.getFile());
 65  1 buf.append("\" msg=\"");
 66  1 StringUtil.appendXmlEscaped(buf, pe.getMsg());
 67  1 buf.append("\"/>").append(PMD.EOL);
 68    }
 69   
 70  9 buf.append("</pmd>");
 71  9 return buf.toString();
 72    }
 73   
 74  52 private void maybeAdd(String attr, String value, StringBuffer buf) {
 75  52 if (value != null && value.length() > 0) {
 76  12 buf.append(" " + attr +"=\"");
 77  12 StringUtil.appendXmlEscaped(buf, value);
 78  12 buf.append("\"");
 79    }
 80    }
 81   
 82  9 private String createVersionAttr() {
 83  9 return "<pmd version=\"" + PMD.VERSION + "\"";
 84    }
 85   
 86  9 private String createTimestampAttr() {
 87  9 return " timestamp=\"" + new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS").format(new Date()) + "\"";
 88    }
 89   
 90  9 private String createTimeElapsedAttr(Report rpt) {
 91  9 Report.ReadableDuration d = new Report.ReadableDuration(rpt.getElapsedTimeInMillis());
 92  9 return " elapsedTime=\"" + d.getTime() + "\"";
 93    }
 94   
 95    }