package org.codefx.mvn.jdeps.result; import org.codefx.mvn.jdeps.dependency.Violation; import org.codefx.mvn.jdeps.rules.DependencyRule; import org.codefx.mvn.jdeps.rules.Severity; import java.util.stream.Stream; import static java.util.Objects.requireNonNull; /** * Converts a {@link Result}'s {@link Violation}s into {@link DependencyRule}s. */ public class ViolationsToRuleTransformer { /** * * @param result the result containing the violations * @return a stream of {@link DependencyRule}s */ public static Stream<DependencyRule> transform(Result result) { requireNonNull(result, "The argument 'result' must not be null."); return Severity.stream() .flatMap(severity -> dependencyRulesForSeverity(result, severity)); } private static Stream<DependencyRule> dependencyRulesForSeverity(Result result, Severity severity) { return result .violationsWithSeverity(severity) .flatMap(violation -> dependencyRulesForViolation(severity, violation)); } private static Stream<DependencyRule> dependencyRulesForViolation(Severity severity, Violation violation) { return violation .getInternalDependencies().stream() .map(dependency -> DependencyRule.of( violation.getDependent().getFullyQualifiedName(), dependency.getFullyQualifiedName(), severity)); } }