// This product is provided under the terms of EPL (Eclipse Public License) // version 1.0. // // The full license text can be read from: http://www.eclipse.org/org/documents/epl-v10.php package org.dtangler.core.ruleanalysis; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import org.dtangler.core.configuration.Group; import org.dtangler.core.configuration.ParserConstants; import org.dtangler.core.exception.DtException; public class RuleCreator { private Map<String, Set<String>> forbiddenDependencies; private Map<String, Set<String>> allowedDependencies; private Map<String, Group> groups; public RuleCreator(Map<String, Set<String>> forbiddenDependencies, Map<String, Set<String>> allowedDependencies, Map<String, Group> groups) { this.forbiddenDependencies = forbiddenDependencies; this.allowedDependencies = allowedDependencies; this.groups = groups; } public List<Rule> createRules() { List<Rule> rules = new ArrayList<Rule>(); for (String key : forbiddenDependencies.keySet()) { RuleMember member = getRuleMember(key); rules.add(new Rule(Rule.Type.cannotDepend, member, getMembers(forbiddenDependencies.get(key)))); } for (String key : allowedDependencies.keySet()) { RuleMember member = getRuleMember(key); rules.add(new Rule(Rule.Type.canDepend, member, getMembers(allowedDependencies.get(key)))); } return rules; } private RuleMember getRuleMember(String name) { if (isGroup(name)) { return new GroupRuleMember(groups.get(getGroupName(name))); } return new SingleRuleMember(name); } private Set<RuleMember> getMembers(Set<String> list) { Set<RuleMember> result = new HashSet<RuleMember>(); for (String name : list) { result.add(getRuleMember(name)); } return result; } private boolean isGroup(String name) { if (!name.startsWith(ParserConstants.GROUP_IDENTIFIER)) { return false; } if (!groups.containsKey(getGroupName(name))) { throw new DtException("Undefined group " + name); } return true; } private String getGroupName(String name) { // remove the group identifier return name.substring(ParserConstants.GROUP_IDENTIFIER.length()); } }