1 package net.sourceforge.pmd.util;
2
3 import net.sourceforge.pmd.PMD;
4 import net.sourceforge.pmd.Rule;
5 import net.sourceforge.pmd.RuleSet;
6 import net.sourceforge.pmd.RuleSetFactory;
7
8 import java.util.Iterator;
9 import java.util.Set;
10
11 public class Appendix {
12
13 public static void main(String[] args) throws Exception {
14 RuleSetFactory rsf = new RuleSetFactory();
15 Iterator i = rsf.getRegisteredRuleSets();
16 StringBuffer sb = new StringBuffer();
17 while (i.hasNext()) {
18 RuleSet rs = (RuleSet)i.next();
19 if (rs.getName().toLowerCase().indexOf(args[0]) == -1) {
20 continue;
21 }
22 sb.append("====================================================================" + PMD.EOL);
23 sb.append(rs.getName() + PMD.EOL);
24 sb.append(rs.getDescription() + PMD.EOL);
25 sb.append("--------------------------------------------------------------------" + PMD.EOL);
26
27 Set rules = rs.getRules();
28 for (Iterator j = rules.iterator(); j.hasNext();) {
29 Rule r = (Rule)j.next();
30 sb.append(r.getName() + ": " + trimCRs(r.getDescription()) + PMD.EOL);
31 sb.append("Example: " + PMD.EOL + trimCRs(r.getExample()) + PMD.EOL);
32
33 if (r.hasProperty("xpath")) {
34 sb.append("XPath expression:" + PMD.EOL);
35 sb.append(trimCRs(r.getProperties().getProperty("xpath")));
36 }
37
38 Set keys = r.getProperties().keySet();
39 boolean header = false;
40 for (Iterator k = keys.iterator(); k.hasNext(); ) {
41 String key = (String)k.next();
42 String value = (String)r.getProperties().getProperty(key);
43
44 if (key.equals("xpath")) {
45 continue;
46 }
47
48 if (!header) {
49 sb.append(PMD.EOL + "Properties:" + PMD.EOL);
50 header = true;
51 }
52
53 sb.append("Name = '" + key + "', value = '" + value + "'" + PMD.EOL);
54 }
55 sb.append(PMD.EOL + "Notes: " + PMD.EOL);
56 sb.append(PMD.EOL + "--------------------------------------------------------------------" + PMD.EOL);
57 }
58 }
59 System.out.println(sb.toString());
60 }
61
62 private static String trimCRs(String str) {
63 while (str.startsWith(PMD.EOL)) {
64 str = str.substring(1);
65 }
66 while (str.endsWith(PMD.EOL)) {
67 str = str.substring(0, str.length()-1);
68 }
69 return str;
70 }
71 }