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.IRuleViolation;
7 import net.sourceforge.pmd.PMD;
8 import net.sourceforge.pmd.util.StringUtil;
9
10 import java.io.IOException;
11 import java.io.Writer;
12 import java.util.Iterator;
13
14 public class CSVRenderer extends OnTheFlyRenderer {
15
16 private int violationCount = 1;
17
18 public void start() throws IOException {
19 StringBuffer buf = new StringBuffer(300);
20 quoteAndCommify(buf, "Problem");
21 quoteAndCommify(buf, "Package");
22 quoteAndCommify(buf, "File");
23 quoteAndCommify(buf, "Priority");
24 quoteAndCommify(buf, "Line");
25 quoteAndCommify(buf, "Description");
26 quoteAndCommify(buf, "Rule set");
27 quote(buf, "Rule");
28 buf.append(PMD.EOL);
29 getWriter().write(buf.toString());
30 }
31
32 public void renderFileViolations(Iterator<IRuleViolation> violations) throws IOException {
33 StringBuffer buf = new StringBuffer(300);
34 Writer writer = getWriter();
35
36 IRuleViolation rv;
37 while (violations.hasNext()) {
38 buf.setLength(0);
39 rv = violations.next();
40 quoteAndCommify(buf, Integer.toString(violationCount));
41 quoteAndCommify(buf, rv.getPackageName());
42 quoteAndCommify(buf, rv.getFilename());
43 quoteAndCommify(buf, Integer.toString(rv.getRule().getPriority()));
44 quoteAndCommify(buf, Integer.toString(rv.getBeginLine()));
45 quoteAndCommify(buf, StringUtil.replaceString(rv.getDescription(), '\"', "'"));
46 quoteAndCommify(buf, rv.getRule().getRuleSetName());
47 quote(buf, rv.getRule().getName());
48 buf.append(PMD.EOL);
49 writer.write(buf.toString());
50 violationCount++;
51 }
52 }
53
54 public void end() throws IOException {
55 }
56
57 private void quote(StringBuffer sb, String d) {
58 sb.append('"').append(d).append('"');
59 }
60
61 private void quoteAndCommify(StringBuffer sb, String d) {
62 quote(sb, d);
63 sb.append(',');
64 }
65 }