replaced DependencyNode implementations with DefaultDependencyNode

git-svn-id: https://svn.apache.org/repos/asf/maven/shared/trunk@1356361 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/maven/shared/dependency/graph/internal/AbstractDependencyNode.java b/src/main/java/org/apache/maven/shared/dependency/graph/internal/AbstractDependencyNode.java
deleted file mode 100644
index cbb550e..0000000
--- a/src/main/java/org/apache/maven/shared/dependency/graph/internal/AbstractDependencyNode.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package org.apache.maven.shared.dependency.graph.internal;
-
-import org.apache.maven.shared.dependency.graph.DependencyNode;
-import org.apache.maven.shared.dependency.graph.traversal.DependencyNodeVisitor;
-
-public abstract class AbstractDependencyNode
-    implements DependencyNode
-{
-    /**
-     * Applies the specified dependency node visitor to this dependency node and its children.
-     * 
-     * @param visitor
-     *            the dependency node visitor to use
-     * @return the visitor result of ending the visit to this node
-     * @since 1.1
-     */
-    public boolean accept( DependencyNodeVisitor visitor )
-    {
-        if ( visitor.visit( this ) )
-        {
-            for ( DependencyNode child : getChildren() )
-            {
-                if ( !child.accept( visitor ) )
-                {
-                    break;
-                }
-            }
-        }
-
-        return visitor.endVisit( this );
-    }
-}
diff --git a/src/main/java/org/apache/maven/shared/dependency/graph/internal/DefaultDependencyNode.java b/src/main/java/org/apache/maven/shared/dependency/graph/internal/DefaultDependencyNode.java
new file mode 100644
index 0000000..7cd1fd2
--- /dev/null
+++ b/src/main/java/org/apache/maven/shared/dependency/graph/internal/DefaultDependencyNode.java
@@ -0,0 +1,67 @@
+package org.apache.maven.shared.dependency.graph.internal;
+
+import java.util.List;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.shared.dependency.graph.DependencyNode;
+import org.apache.maven.shared.dependency.graph.traversal.DependencyNodeVisitor;
+
+public class DefaultDependencyNode
+    implements DependencyNode
+{
+    private final Artifact artifact;
+
+    private final DependencyNode parent;
+
+    private List<DependencyNode> children;
+
+    public DefaultDependencyNode( DependencyNode parent, Artifact artifact )
+    {
+        this.parent = parent;
+        this.artifact = artifact;
+    }
+
+    /**
+     * Applies the specified dependency node visitor to this dependency node and its children.
+     * 
+     * @param visitor
+     *            the dependency node visitor to use
+     * @return the visitor result of ending the visit to this node
+     * @since 1.1
+     */
+    public boolean accept( DependencyNodeVisitor visitor )
+    {
+        if ( visitor.visit( this ) )
+        {
+            for ( DependencyNode child : getChildren() )
+            {
+                if ( !child.accept( visitor ) )
+                {
+                    break;
+                }
+            }
+        }
+
+        return visitor.endVisit( this );
+    }
+
+    public Artifact getArtifact()
+    {
+        return artifact;
+    }
+
+    public void setChildren( List<DependencyNode> children )
+    {
+        this.children = children;
+    }
+
+    public List<DependencyNode> getChildren()
+    {
+        return children;
+    }
+
+    public DependencyNode getParent()
+    {
+        return parent;
+    }
+}
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 d0fb71a..d40b56d 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,10 @@
  * under the License.
  */
 
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
 import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.shared.dependency.graph.DependencyGraphBuilder;
@@ -48,11 +52,37 @@
     {
         try
         {
-            return new Maven2DependencyNode( null, treeBuilder.buildDependencyTree( project ), filter );
+            return buildDependencyNode( null, treeBuilder.buildDependencyTree( project ), filter );
         }
         catch ( DependencyTreeBuilderException e )
         {
             throw new DependencyGraphBuilderException( e.getMessage(), e );
         }
     }
+
+    private DependencyNode buildDependencyNode( DependencyNode parent,
+                                                org.apache.maven.shared.dependency.tree.DependencyNode node,
+                                                ArtifactFilter filter )
+    {
+        DefaultDependencyNode current = new DefaultDependencyNode( parent, node.getArtifact() );
+
+        List<DependencyNode> nodes = new ArrayList<DependencyNode>( node.getChildren().size() );
+        for ( org.apache.maven.shared.dependency.tree.DependencyNode child : node.getChildren() )
+        {
+            if ( child.getState() != org.apache.maven.shared.dependency.tree.DependencyNode.INCLUDED )
+            {
+                // only included nodes are supported in the graph API
+                continue;
+            }
+
+            if ( ( filter == null ) || filter.include( child.getArtifact() ) )
+            {
+                nodes.add( buildDependencyNode( current, child, filter ) );
+            }
+        }
+
+        current.setChildren( Collections.unmodifiableList( nodes ) );
+
+        return current;
+    }
 }
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
deleted file mode 100644
index 8a4382a..0000000
--- a/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven2DependencyNode.java
+++ /dev/null
@@ -1,84 +0,0 @@
-package org.apache.maven.shared.dependency.graph.internal;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import java.util.ArrayList;
-import java.util.Collections;
-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;
-
-/**
- * Wrapper for Maven 2's dependency node.
- *
- * @see org.apache.maven.shared.dependency.tree.DependencyNode
- * @author Hervé Boutemy
- * @since 2.0
- */
-public class Maven2DependencyNode
-    extends AbstractDependencyNode
-{
-    private final Artifact artifact;
-
-    private final List<DependencyNode> children;
-
-    private final DependencyNode parent;
-
-    public Maven2DependencyNode( DependencyNode parent, org.apache.maven.shared.dependency.tree.DependencyNode node,
-                                 ArtifactFilter filter )
-    {
-        this.parent = parent;
-        this.artifact = node.getArtifact();
-
-        List<DependencyNode> nodes = new ArrayList<DependencyNode>( node.getChildren().size() );
-        for ( org.apache.maven.shared.dependency.tree.DependencyNode child : node.getChildren() )
-        {
-            if ( child.getState() != org.apache.maven.shared.dependency.tree.DependencyNode.INCLUDED )
-            {
-                // only included nodes are supported in the graph API
-                continue;
-            }
-
-            if ( ( filter == null ) || filter.include( child.getArtifact() ) )
-            {
-                nodes.add( new Maven2DependencyNode( this, child, filter ) );
-            }
-        }
-
-        children = Collections.unmodifiableList( nodes );
-    }
-
-    public Artifact getArtifact()
-    {
-        return artifact;
-    }
-
-    public List<DependencyNode> getChildren()
-    {
-        return children;
-    }
-
-    public DependencyNode getParent()
-    {
-        return parent;
-    }
-}
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 f59d984..315fa85 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
@@ -20,9 +20,14 @@
  */
 
 import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
 
+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.project.DefaultDependencyResolutionRequest;
 import org.apache.maven.project.DependencyResolutionException;
 import org.apache.maven.project.DependencyResolutionRequest;
@@ -35,6 +40,7 @@
 import org.apache.maven.shared.dependency.graph.DependencyNode;
 import org.codehaus.plexus.component.annotations.Component;
 import org.codehaus.plexus.component.annotations.Requirement;
+import org.sonatype.aether.graph.Dependency;
 
 /**
  * Wrapper around Maven 3 dependency resolver.
@@ -66,7 +72,7 @@
 
             DependencyResolutionResult result = resolver.resolve( request );
 
-            return new Maven3DependencyNode( null, factory, result.getDependencyGraph(), project.getArtifact(), filter );
+            return buildDependencyNode( null, result.getDependencyGraph(), project.getArtifact(), filter );
         }
         catch ( DependencyResolutionException e )
         {
@@ -91,4 +97,35 @@
     {
         return object.getClass().getMethod( method ).invoke( object );
     }
+
+    private Artifact getDependencyArtifact( Dependency dep )
+    {
+        org.sonatype.aether.artifact.Artifact artifact = dep.getArtifact();
+
+        return factory.createDependencyArtifact( artifact.getGroupId(), artifact.getArtifactId(),
+                                                 VersionRange.createFromVersion( artifact.getVersion() ),
+                                                 artifact.getExtension(), artifact.getClassifier(), dep.getScope(),
+                                                 dep.isOptional() );
+    }
+
+    private DependencyNode buildDependencyNode( DependencyNode parent, org.sonatype.aether.graph.DependencyNode node,
+                                                Artifact artifact, ArtifactFilter filter )
+    {
+        DefaultDependencyNode current = new DefaultDependencyNode( parent, artifact );
+
+        List<DependencyNode> nodes = new ArrayList<DependencyNode>( node.getChildren().size() );
+        for ( org.sonatype.aether.graph.DependencyNode child : node.getChildren() )
+        {
+            Artifact childArtifact = getDependencyArtifact( child.getDependency() );
+
+            if ( ( filter == null ) || filter.include( childArtifact ) )
+            {
+                nodes.add( buildDependencyNode( current, child, childArtifact, filter ) );
+            }
+        }
+
+        current.setChildren( Collections.unmodifiableList( nodes ) );
+
+        return current;
+    }
 }
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
deleted file mode 100644
index ce10269..0000000
--- a/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven3DependencyNode.java
+++ /dev/null
@@ -1,107 +0,0 @@
-package org.apache.maven.shared.dependency.graph.internal;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-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;
-
-/**
- * Wrapper for Maven 3's dependency node, which is provided by Aether.
- *
- * @see org.sonatype.aether.graph.DependencyNode
- * @author Hervé Boutemy
- * @since 2.0
- */
-public class Maven3DependencyNode
-    extends AbstractDependencyNode
-{
-    private final Artifact artifact;
-
-    private final List<DependencyNode> children;
-
-    private final DependencyNode parent;
-
-    public Maven3DependencyNode( DependencyNode parent, ArtifactFactory factory,
-                                 org.sonatype.aether.graph.DependencyNode node, final Artifact artifact,
-                                 ArtifactFilter filter )
-    {
-        this.parent = parent;
-
-        if ( artifact != null )
-        {
-            this.artifact = artifact;
-        }
-        else
-        {
-            Dependency dep = node.getDependency();
-            org.sonatype.aether.artifact.Artifact art = dep.getArtifact();
-
-            Artifact tmpArtifact =
-                factory.createDependencyArtifact( art.getGroupId(), art.getArtifactId(),
-                                                  VersionRange.createFromVersion( art.getVersion() ),
-                                                  art.getExtension(), art.getClassifier(), dep.getScope(),
-                                                  dep.isOptional() );
-
-            if ( ( filter != null ) && !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() )
-        {
-            DependencyNode tmpNode = new Maven3DependencyNode( this, factory, child, null, filter );
-
-            if ( tmpNode.getArtifact() != null )
-            {
-                nodes.add( tmpNode );
-            }
-        }
-        children = Collections.unmodifiableList( nodes );
-    }
-
-    public Artifact getArtifact()
-    {
-        return artifact;
-    }
-
-    public List<DependencyNode> getChildren()
-    {
-        return children;
-    }
-
-    public DependencyNode getParent()
-    {
-        return parent;
-    }
-}