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 }