View Javadoc

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.util.Iterator;
12  
13  public class XMLRenderer implements Renderer {
14  
15      public String render(Report report) {
16          StringBuffer buf = new StringBuffer("<?xml version=\"1.0\"?><pmd>" + PMD.EOL);
17          String filename = null;
18  
19          // rule violations
20          for (Iterator i = report.iterator(); i.hasNext();) {
21              RuleViolation rv = (RuleViolation) i.next();
22              if (!rv.getFilename().equals(filename)) { // New File
23                  if (filename != null) // Not first file ?
24                      buf.append("</file>");
25                  filename = rv.getFilename();
26                  buf.append("<file name=\"");
27                  StringUtil.appendXmlEscaped(buf, filename);
28                  buf.append("\">")
29                     .append(PMD.EOL);
30              }
31  
32              buf.append("<violation line=\"")
33                 .append(rv.getLine()) // int
34                 .append("\" rule=\"");
35              StringUtil.appendXmlEscaped(buf, rv.getRule().getName());
36              buf.append("\">")
37                 .append(PMD.EOL);
38              StringUtil.appendXmlEscaped(buf, rv.getDescription());
39  
40              buf.append(PMD.EOL);
41              buf.append("</violation>");
42              buf.append(PMD.EOL);
43          }
44          if (filename != null) { // Not first file ?
45              buf.append("</file>");
46          }
47  
48          // errors
49          for (Iterator i = report.errors(); i.hasNext();) {
50              Report.ProcessingError pe = (Report.ProcessingError) i.next();
51              buf.append("<error ")
52                 .append("filename=\"");
53              StringUtil.appendXmlEscaped(buf, pe.getFile());
54              buf.append("\" msg=\"");
55              StringUtil.appendXmlEscaped(buf, pe.getMsg());
56              buf.append("\"/>")
57                 .append(PMD.EOL);
58          }
59  
60          buf.append("</pmd>");
61          return buf.toString();
62      }
63  
64  }