added filter to DependencyGraphBuilder

git-svn-id: https://svn.apache.org/repos/asf/maven/shared/trunk@1348667 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/maven/shared/dependency/graph/DependencyGraphBuilder.java b/src/main/java/org/apache/maven/shared/dependency/graph/DependencyGraphBuilder.java
index d43f4a0..8112aec 100644
--- a/src/main/java/org/apache/maven/shared/dependency/graph/DependencyGraphBuilder.java
+++ b/src/main/java/org/apache/maven/shared/dependency/graph/DependencyGraphBuilder.java
@@ -19,6 +19,7 @@
  * under the License.
  */
 
+import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
 import org.apache.maven.project.MavenProject;
 
 /**
@@ -29,6 +30,6 @@
  */
 public interface DependencyGraphBuilder
 {
-    public DependencyNode buildDependencyGraph( MavenProject project )
+    public DependencyNode buildDependencyGraph( MavenProject project, ArtifactFilter filter )
         throws DependencyGraphBuilderException;
 }
diff --git a/src/main/java/org/apache/maven/shared/dependency/graph/internal/DefaultDependencyGraphBuilder.java b/src/main/java/org/apache/maven/shared/dependency/graph/internal/DefaultDependencyGraphBuilder.java
index dd05b78..16bb1e5 100644
--- a/src/main/java/org/apache/maven/shared/dependency/graph/internal/DefaultDependencyGraphBuilder.java
+++ b/src/main/java/org/apache/maven/shared/dependency/graph/internal/DefaultDependencyGraphBuilder.java
@@ -19,6 +19,7 @@
  * under the License.
  */
 
+import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.shared.dependency.graph.DependencyGraphBuilder;
 import org.apache.maven.shared.dependency.graph.DependencyGraphBuilderException;
@@ -46,7 +47,7 @@
 {
     protected PlexusContainer container;
 
-    public DependencyNode buildDependencyGraph( MavenProject project )
+    public DependencyNode buildDependencyGraph( MavenProject project, ArtifactFilter filter )
         throws DependencyGraphBuilderException
     {
         try
@@ -56,7 +57,7 @@
             DependencyGraphBuilder effectiveGraphBuilder =
                 (DependencyGraphBuilder) container.lookup( DependencyGraphBuilder.class.getCanonicalName(), hint );
 
-            return effectiveGraphBuilder.buildDependencyGraph( project );
+            return effectiveGraphBuilder.buildDependencyGraph( project, filter );
         }
         catch ( ComponentLookupException e )
         {
diff --git a/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven2DependencyGraphBuilder.java b/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven2DependencyGraphBuilder.java
index b487013..63a03c2 100644
--- a/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven2DependencyGraphBuilder.java
+++ b/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven2DependencyGraphBuilder.java
@@ -19,6 +19,7 @@
  * under the License.
  */
 
+import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.shared.dependency.graph.DependencyGraphBuilder;
 import org.apache.maven.shared.dependency.graph.DependencyGraphBuilderException;
@@ -42,12 +43,12 @@
     @Requirement
     private DependencyTreeBuilder treeBuilder;
 
-    public DependencyNode buildDependencyGraph( MavenProject project )
+    public DependencyNode buildDependencyGraph( MavenProject project, ArtifactFilter filter )
         throws DependencyGraphBuilderException
     {
         try
         {
-            return new Maven2DependencyNode( treeBuilder.buildDependencyTree( project ) );
+            return new Maven2DependencyNode( treeBuilder.buildDependencyTree( project ), filter );
         }
         catch ( DependencyTreeBuilderException e )
         {
diff --git a/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven2DependencyNode.java b/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven2DependencyNode.java
index ac3a34a..614846b 100644
--- a/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven2DependencyNode.java
+++ b/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven2DependencyNode.java
@@ -24,6 +24,7 @@
 import java.util.List;
 
 import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
 import org.apache.maven.shared.dependency.graph.DependencyNode;
 
 /**
@@ -40,14 +41,17 @@
 
     private final List<DependencyNode> children;
 
-    public Maven2DependencyNode( org.apache.maven.shared.dependency.tree.DependencyNode node )
+    public Maven2DependencyNode( org.apache.maven.shared.dependency.tree.DependencyNode node, ArtifactFilter filter )
     {
         this.artifact = node.getArtifact();
 
         List<DependencyNode> nodes = new ArrayList<DependencyNode>( node.getChildren().size() );
         for ( org.apache.maven.shared.dependency.tree.DependencyNode child : node.getChildren() )
         {
-            nodes.add( new Maven2DependencyNode( child ) );
+            if ( filter.include( child.getArtifact() ) )
+            {
+                nodes.add( new Maven2DependencyNode( child, filter ) );
+            }
         }
 
         children = Collections.unmodifiableList( nodes );
diff --git a/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven3DependencyGraphBuilder.java b/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven3DependencyGraphBuilder.java
index c582b66..cd1b111 100644
--- a/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven3DependencyGraphBuilder.java
+++ b/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven3DependencyGraphBuilder.java
@@ -22,6 +22,7 @@
 import java.lang.reflect.InvocationTargetException;
 
 import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
 import org.apache.maven.project.DefaultDependencyResolutionRequest;
 import org.apache.maven.project.DependencyResolutionException;
 import org.apache.maven.project.DependencyResolutionRequest;
@@ -52,7 +53,7 @@
     @Requirement
     private ArtifactFactory factory;
 
-    public DependencyNode buildDependencyGraph( MavenProject project )
+    public DependencyNode buildDependencyGraph( MavenProject project, ArtifactFilter filter )
         throws DependencyGraphBuilderException
     {
         try
@@ -65,7 +66,7 @@
 
             DependencyResolutionResult result = resolver.resolve( request );
 
-            return new Maven3DependencyNode( factory, result.getDependencyGraph(), project.getArtifact() );
+            return new Maven3DependencyNode( factory, result.getDependencyGraph(), project.getArtifact(), filter );
         }
         catch ( DependencyResolutionException e )
         {
diff --git a/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven3DependencyNode.java b/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven3DependencyNode.java
index fdffc16..48ef43b 100644
--- a/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven3DependencyNode.java
+++ b/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven3DependencyNode.java
@@ -25,6 +25,7 @@
 
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
 import org.apache.maven.artifact.versioning.VersionRange;
 import org.apache.maven.shared.dependency.graph.DependencyNode;
 import org.sonatype.aether.graph.Dependency;
@@ -43,7 +44,8 @@
 
     private final List<DependencyNode> children;
 
-    public Maven3DependencyNode( ArtifactFactory factory, org.sonatype.aether.graph.DependencyNode node, final Artifact artifact )
+    public Maven3DependencyNode( ArtifactFactory factory, org.sonatype.aether.graph.DependencyNode node,
+                                 final Artifact artifact, ArtifactFilter filter )
     {
         if ( artifact != null )
         {
@@ -54,16 +56,30 @@
             Dependency dep = node.getDependency();
             org.sonatype.aether.artifact.Artifact art = dep.getArtifact();
 
-            this.artifact =
+            Artifact tmpArtifact =
                 factory.createDependencyArtifact( art.getGroupId(), art.getArtifactId(),
                                                   VersionRange.createFromVersion( art.getVersion() ),
                                                   art.getExtension(), art.getClassifier(), dep.getScope() );
+
+            if ( !filter.include( tmpArtifact ) )
+            {
+                this.artifact = null;
+                children = null;
+                return;
+            }
+
+            this.artifact = tmpArtifact;
         }
 
         List<DependencyNode> nodes = new ArrayList<DependencyNode>( node.getChildren().size() );
         for ( org.sonatype.aether.graph.DependencyNode child : node.getChildren() )
         {
-            nodes.add( new Maven3DependencyNode( factory, child, null ) );
+            DependencyNode tmpNode = new Maven3DependencyNode( factory, child, null, filter );
+
+            if ( tmpNode.getArtifact() != null )
+            {
+                nodes.add( tmpNode );
+            }
         }
         children = Collections.unmodifiableList( nodes );
     }