//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.analysis;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.dtangler.core.analysisresult.Violation;
import org.dtangler.core.dependencies.Dependable;
import org.dtangler.core.dependencies.Dependencies;
import org.dtangler.core.dependencies.Dependency;
public abstract class DependencyAnalyzer {
private final Map<Dependency, Set<Violation>> violations = new HashMap();
private final Map<Dependable, Set<Violation>> childViolations = new HashMap();
public abstract void doAnalyze(Dependencies dependencies);
public final void analyze(Dependencies dependencies) {
violations.clear();
childViolations.clear();
doAnalyze(dependencies);
childViolations.putAll(new ChildViolationFinder(dependencies)
.findChildViolationsForParents(violations));
}
public final Map<Dependency, Set<Violation>> getViolations() {
return violations;
}
public Set<Violation> getChildViolations() {
Set<Violation> childViolations = new HashSet();
for (Set<Violation> v : this.childViolations.values()) {
childViolations.addAll(v);
}
return childViolations;
}
abstract public boolean isValidResult();
protected void addViolation(Dependency dependency, Violation violation) {
Set<Violation> violationSet = violations.get(dependency);
if (violationSet == null) {
violationSet = new HashSet();
violations.put(dependency, violationSet);
}
violationSet.add(violation);
}
protected void addViolations(Dependency dependency,
Collection<Violation> violations) {
for (Violation v : violations)
addViolation(dependency, v);
}
}