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 CSVRenderer extends AbstractRenderer implements Renderer {
14
15 public String render(Report report) {
16 StringBuffer buf = new StringBuffer(quoteAndCommify("Problem"));
17 buf.append(quoteAndCommify("Package"));
18 buf.append(quoteAndCommify("File"));
19 buf.append(quoteAndCommify("Line"));
20 buf.append(quoteAndCommify("Priority"));
21 buf.append(quoteAndCommify("Description"));
22 buf.append(quoteAndCommify("Rule set"));
23 buf.append(quote("Rule"));
24 buf.append(PMD.EOL);
25
26 int violationCount = 1;
27 for (Iterator i = report.iterator(); i.hasNext();) {
28 IRuleViolation rv = (IRuleViolation) i.next();
29 buf.append(quoteAndCommify(Integer.toString(violationCount)));
30 buf.append(quoteAndCommify(rv.getPackageName()));
31 buf.append(quoteAndCommify(rv.getFilename()));
32 buf.append(quoteAndCommify(Integer.toString(rv.getRule().getPriority())));
33 buf.append(quoteAndCommify(Integer.toString(rv.getBeginLine())));
34 buf.append(quoteAndCommify(StringUtil.replaceString(rv.getDescription(), '\"', "'")));
35 buf.append(quoteAndCommify(rv.getRule().getRuleSetName()));
36 buf.append(quote(rv.getRule().getName()));
37 buf.append(PMD.EOL);
38 violationCount++;
39 }
40 return buf.toString();
41 }
42
43 private String quote(String d) {
44 return "\"" + d + "\"";
45 }
46
47 private String quoteAndCommify(String d) {
48 return quote(d) + ",";
49 }
50
51 }