// 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.List;
import java.util.Set;
import org.dtangler.core.dependencies.Dependable;
import org.dtangler.core.dependencies.Dependencies;
public class RuleFilter {
private List<Rule> rules;
public RuleFilter(List<Rule> rules) {
this.rules = rules;
}
public List<Rule> getRulesForDependant(Dependable dependant) {
List<Rule> rulesFound = new ArrayList();
for (Rule rule : rules) {
if (rule.appliesToLeftSide(dependant)) {
rulesFound.add(rule);
}
}
return rulesFound;
}
public List<Rule> getParentRulesForDependant(Dependable dependant,
Dependencies dependencies) {
List<Rule> rules = new ArrayList();
Set<Dependable> parents = dependencies
.getParentsFromAllScopes(dependant);
for (Dependable parent : parents) {
rules.addAll(getRulesForDependant(parent));
}
return rules;
}
public boolean isDependencyAllowedByRule(Dependable dependant,
Dependable dependee) {
for (Rule rule : rules) {
if (!rule.getType().equals(Rule.Type.canDepend))
continue;
if (rule.appliesToLeftSide(dependant)
&& rule.appliesToRightSide(dependee)) {
return true;
}
}
return false;
}
}