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.Report;
9
10 import java.io.IOException;
11 import java.io.Writer;
12 import java.util.Iterator;
13
14 /***
15 * <P>A Renderer for running PMD via a TextPad 'tool'. <a href="http://www.textpad.com">TextPad</a> is a text editor by Helios Software Solutions.</P>
16 * <p/>
17 * <P>Output lines are in the form:</P>
18 * <p/>
19 * <P><CODE>pathtojavafile(line#, NameOfRule): Specific rule violation message</CODE></P>
20 * <p/>
21 * <P>For example:</P>
22 * <p/>
23 * <P><CODE>D:\java\pmd\src\src\net\sourceforge\pmd\renderers\TextPadRenderer.java(24, AtLeastOneConstructor): Each class should declare at least one constructor
24 * <br>D:\java\pmd\src\src\net\sourceforge\pmd\renderers\TextPadRenderer.java(26, VariableNamingConventionsRule): Variables should start with a lowercase character
25 * <br>D:\java\pmd\src\src\net\sourceforge\pmd\renderers\TextPadRenderer.java(31, ShortVariable): Avoid variables with short names</CODE></P>
26 *
27 * @author Jeff Epstein, based upon <a href="EmacsRenderer.html">EmacsRenderer</a>, Tuesday, September 23, 2003
28 */
29 public class TextPadRenderer extends AbstractRenderer {
30 public void render(Writer writer, Report report) throws IOException {
31 StringBuffer buf = new StringBuffer();
32 Iterator i;
33 try {
34 i = report.iterator();
35 } catch (NullPointerException npx) {
36 throw new NullPointerException("ERROR in " + this.getClass().getName() + ".render: Parameter report is null.");
37 }
38 while (i.hasNext()) {
39 IRuleViolation rv = (IRuleViolation) i.next();
40 buf.setLength(0);
41
42 buf.append(PMD.EOL).append(rv.getFilename() + "(");
43
44 buf.append(Integer.toString(rv.getBeginLine())).append(", ");
45
46 buf.append(rv.getRule().getName()).append("): ");
47
48 buf.append(rv.getDescription());
49 writer.write(buf.toString());
50 }
51 }
52 }