/** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ package net.sourceforge.pmd; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Set; public class RuleSet { private Set rules = new HashSet(); private String name; private String description; /** * Indicates whether or not the rule set should be included in PMD's analysis. * True to include the rule set; otherwise, false to exclude the rule set. */ private boolean m_include; /** * The name of the file the rule set is stored in, e.g., "basic_rules.xml". The user may * change the rule set name; therefore, the rule set name cannot be used for a file name. * This variable is set when the rule set is read. */ private String m_fileName; public int size() { return rules.size(); } public void addRule(Rule rule) { rules.add(rule); } public Set getRules() { return rules; } public Rule getRuleByName(String ruleName) { for (Iterator i = rules.iterator(); i.hasNext();) { Rule r = (Rule) i.next(); if (r.getName().equals(ruleName)) { return r; } } throw new RuntimeException("Couldn't find rule named " + ruleName + " in the ruleset " + name); } public void addRuleSet(RuleSet ruleSet) { rules.addAll(ruleSet.getRules()); } public void apply(List acuList, RuleContext ctx) { Iterator rs = rules.iterator(); while (rs.hasNext()) { Rule rule = (Rule) rs.next(); rule.apply(acuList, ctx); } } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } /** * Returns true when the rule set is included in PMD's analysis; otherwise, false when * it is excluded. * * @return True to include during analysis. */ public boolean include() { return m_include; } /** * Set to true when the rule set is included in PMD's analysis; otherwise, set to false * when it is excluded. * * @param include True to include during analysis. */ public void setInclude(boolean include) { m_include = include; } /** * Get the name of the file the rule set is to be stored in, e.g., "basic_rules.xml". * * @return The name of the rule set file. */ public String getFileName() { if (m_fileName == null) { m_fileName = name.toLowerCase().replace(' ', '_') + ".xml"; } return m_fileName; } /** * Set the name of the file the rule set is to be stored in, e.g., "basic_rules.xml". * * @param fileName The name of the rule set file. */ public void setFileName(String fileName) { if (fileName != null) { fileName = fileName.trim(); if (fileName.length() == 0) { fileName = null; } } m_fileName = fileName; } }