1 /* 2 * This file is part of dependency-check-maven. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 * 16 * Copyright (c) 2019 Jeremy Long. All Rights Reserved. 17 */ 18 package org.owasp.dependencycheck.maven; 19 20 import org.apache.maven.shared.dependency.graph.DependencyNode; 21 import org.apache.maven.shared.dependency.graph.filter.DependencyNodeFilter; 22 import org.apache.maven.shared.dependency.graph.traversal.DependencyNodeVisitor; 23 24 /** 25 * A dependency node visitor that filters nodes and their children and delegates 26 * to another visitor. 27 * 28 * @author Nikolas Falco 29 * @since 5.0.0 30 */ 31 public class FilteringDependencyTransitiveNodeVisitor implements DependencyNodeVisitor { 32 33 /** 34 * The dependency node visitor to delegate to. 35 */ 36 private final DependencyNodeVisitor visitor; 37 38 /** 39 * The dependency node filter to apply before delegation. 40 */ 41 private final DependencyNodeFilter filter; 42 43 /** 44 * Creates a dependency node visitor that delegates nodes that are accepted 45 * by the specified filter to the specified visitor. 46 * 47 * @param visitor the dependency node visitor to delegate to 48 * @param filter the dependency node filter to apply before delegation 49 */ 50 public FilteringDependencyTransitiveNodeVisitor(DependencyNodeVisitor visitor, DependencyNodeFilter filter) { 51 this.visitor = visitor; 52 this.filter = filter; 53 } 54 55 /** 56 * {@inheritDoc} 57 */ 58 @Override 59 public boolean visit(DependencyNode node) { 60 final boolean visit; 61 62 if (filter.accept(node)) { 63 visit = visitor.visit(node); 64 } else { 65 visit = false; 66 } 67 68 return visit; 69 } 70 71 /** 72 * {@inheritDoc} 73 */ 74 @Override 75 public boolean endVisit(DependencyNode node) { 76 final boolean visit; 77 78 if (filter.accept(node)) { 79 visit = visitor.endVisit(node); 80 } else { 81 visit = true; 82 } 83 84 return visit; 85 } 86 87 /** 88 * Gets the dependency node visitor that this visitor delegates to. 89 * 90 * @return the dependency node visitor 91 */ 92 public DependencyNodeVisitor getDependencyNodeVisitor() { 93 return visitor; 94 } 95 96 /** 97 * Gets the dependency node filter that this visitor applies before 98 * delegation. 99 * 100 * @return the dependency node filter 101 */ 102 public DependencyNodeFilter getDependencyNodeFilter() { 103 return filter; 104 } 105 106 }