1 /***
2 * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
3 */
4 package net.sourceforge.pmd;
5
6 import java.util.ArrayList;
7 import java.util.Collection;
8 import java.util.Iterator;
9 import java.util.List;
10
11
12 /***
13 * This class represents a collectin of rules.
14 *
15 * @see Rule
16 */
17 public class RuleSet {
18
19 private List rules = new ArrayList();
20 private String name = "";
21 private String description = "";
22 private Language language;
23
24 /***
25 * Returns the number of rules in this ruleset
26 *
27 * @return an int representing the number of rules
28 */
29 public int size() {
30 return rules.size();
31 }
32
33 /***
34 * Add a new rule to this ruleset
35 *
36 * @param rule the rule to be added
37 */
38 public void addRule(Rule rule) {
39 if (rule == null) {
40 throw new RuntimeException("Null Rule reference added to a RuleSet; that's a bug somewhere in PMD");
41 }
42 rules.add(rule);
43 }
44
45 /***
46 * Returns the actual Collection of rules in this ruleset
47 *
48 * @return a Collection with the rules. All objects are of type {@link Rule}
49 */
50 public Collection getRules() {
51 return rules;
52 }
53
54 /***
55 * @return true if any rule in the RuleSet needs the DFA layer
56 */
57 public boolean usesDFA() {
58 for (Iterator i = rules.iterator(); i.hasNext();) {
59 Rule r = (Rule) i.next();
60 if (r.usesDFA()) {
61 return true;
62 }
63 }
64 return false;
65 }
66
67 /***
68 * Returns the Rule with the given name
69 *
70 * @param ruleName the name of the rule to find
71 * @return the rule or null if not found
72 */
73 public Rule getRuleByName(String ruleName) {
74 Rule rule = null;
75 for (Iterator i = rules.iterator(); i.hasNext() && (rule == null);) {
76 Rule r = (Rule) i.next();
77 if (r.getName().equals(ruleName)) {
78 rule = r;
79 }
80 }
81 return rule;
82 }
83
84 /***
85 * Add a whole RuleSet to this RuleSet
86 *
87 * @param ruleSet the RuleSet to add
88 */
89 public void addRuleSet(RuleSet ruleSet) {
90 rules.addAll(rules.size(), ruleSet.getRules());
91 }
92
93 public void apply(List acuList, RuleContext ctx) {
94 Iterator rs = rules.iterator();
95 while (rs.hasNext()) {
96 Rule rule = (Rule) rs.next();
97 rule.apply(acuList, ctx);
98 }
99 }
100
101 /***
102 * Gives the name of this ruleset
103 *
104 * @return a String representing the name
105 */
106 public String getName() {
107 return name;
108 }
109
110 /***
111 * Set the name of this ruleset
112 *
113 * @param name a String representing the name
114 */
115 public void setName(String name) {
116 this.name = name;
117 }
118
119 /***
120 * Gives the description of this ruleset
121 *
122 * @return a String representing the description
123 */
124 public String getDescription() {
125 return description;
126 }
127
128 /***
129 * Set the description of this ruleset
130 *
131 * @param description a String representing the description
132 */
133 public void setDescription(String description) {
134 this.description = description;
135 }
136
137 /***
138 * @see java.lang.Object#equals(java.lang.Object)
139 */
140 public boolean equals(Object o) {
141 if ((o == null) || !(o instanceof RuleSet)) {
142 return false;
143 }
144
145 if (this == o) {
146 return true;
147 }
148
149 RuleSet ruleSet = (RuleSet) o;
150 return this.getName().equals(ruleSet.getName()) && this.getRules().equals(ruleSet.getRules());
151 }
152
153 /***
154 * @see java.lang.Object#hashCode()
155 */
156 public int hashCode() {
157 return this.getName().hashCode() + 13 * this.getRules().hashCode();
158 }
159
160 /***
161 * @return Returns the language.
162 */
163 public Language getLanguage() {
164 return language;
165 }
166
167 /***
168 * @param language The language to set.
169 */
170 public void setLanguage(Language language) {
171 this.language = language;
172 }
173 }