Also pick up exclusions when available (i.e. only via Aether)

git-svn-id: https://svn.apache.org/repos/asf/maven/shared/trunk@1694577 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/ArtifactIncludeNode.java b/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/ArtifactIncludeNode.java
index 018de20..fb93dcb 100644
--- a/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/ArtifactIncludeNode.java
+++ b/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/ArtifactIncludeNode.java
@@ -37,6 +37,13 @@
         this.artifact = artifact;

     }

     

+    /**

+     * Note: an artifact doesn't contain exclusion information, so it won't be available here.

+     * When required switch to filtering based on Aether

+     * 

+     * @see EclipseAetherNode

+     * @see SonatypeAetherNode

+     */

     @Override

     public Dependency getDependency()

     {

@@ -48,7 +55,8 @@
         mavenDependency.setType( artifact.getType() );

         mavenDependency.setScope( artifact.getScope() );

         mavenDependency.setOptional( artifact.isOptional() );

-

+        // no setExcludes possible

+        

         return mavenDependency;

     }

 

diff --git a/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/EclipseAetherNode.java b/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/EclipseAetherNode.java
index 5e82737..448c218 100644
--- a/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/EclipseAetherNode.java
+++ b/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/EclipseAetherNode.java
@@ -19,10 +19,14 @@
  * under the License.

  */

 

+import java.util.ArrayList;

+import java.util.List;

+

 import org.apache.maven.shared.artifact.filter.resolve.Node;

 import org.eclipse.aether.artifact.ArtifactProperties;

 import org.eclipse.aether.graph.Dependency;

 import org.eclipse.aether.graph.DependencyNode;

+import org.eclipse.aether.graph.Exclusion;

 

 /**

  * Adapter of an Eclipse Aether DependencyNode for common Node 

@@ -62,6 +66,24 @@
         {

             mavenDependency.setOptional( nodeDependency.isOptional() );

         }

+        if ( nodeDependency.getExclusions() != null )

+        {

+            List<org.apache.maven.model.Exclusion> mavenExclusions =

+                new ArrayList<org.apache.maven.model.Exclusion>( nodeDependency.getExclusions().size() );

+

+            for ( Exclusion aetherExclusion : nodeDependency.getExclusions() )

+            {

+                org.apache.maven.model.Exclusion mavenExclusion = new org.apache.maven.model.Exclusion();

+

+                mavenExclusion.setGroupId( aetherExclusion.getGroupId() );

+                mavenExclusion.setArtifactId( aetherExclusion.getArtifactId() );

+                // that's all folks, although Aether has more metadata

+

+                mavenExclusions.add( mavenExclusion );

+            }

+

+            mavenDependency.setExclusions( mavenExclusions );

+        }

 

         return mavenDependency;

     }

diff --git a/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/SonatypeAetherNode.java b/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/SonatypeAetherNode.java
index 484b725..668d2fc 100644
--- a/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/SonatypeAetherNode.java
+++ b/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/SonatypeAetherNode.java
@@ -19,9 +19,13 @@
  * under the License.

  */

 

+import java.util.ArrayList;

+import java.util.List;

+

 import org.apache.maven.shared.artifact.filter.resolve.Node;

 import org.sonatype.aether.graph.Dependency;

 import org.sonatype.aether.graph.DependencyNode;

+import org.sonatype.aether.graph.Exclusion;

 import org.sonatype.aether.util.artifact.ArtifactProperties;

 

 /**

@@ -59,6 +63,24 @@
         mavenDependency.setType( nodeDependency.getArtifact().getProperty( ArtifactProperties.TYPE, null ) );

         mavenDependency.setScope( nodeDependency.getScope() );

         mavenDependency.setOptional( nodeDependency.isOptional() );

+        if ( nodeDependency.getExclusions() != null )

+        {

+            List<org.apache.maven.model.Exclusion> mavenExclusions =

+                new ArrayList<org.apache.maven.model.Exclusion>( nodeDependency.getExclusions().size() );

+

+            for ( Exclusion aetherExclusion : nodeDependency.getExclusions() )

+            {

+                org.apache.maven.model.Exclusion mavenExclusion = new org.apache.maven.model.Exclusion();

+

+                mavenExclusion.setGroupId( aetherExclusion.getGroupId() );

+                mavenExclusion.setArtifactId( aetherExclusion.getArtifactId() );

+                // that's all folks, although Aether has more metadata

+

+                mavenExclusions.add( mavenExclusion );

+            }

+

+            mavenDependency.setExclusions( mavenExclusions );

+        }

 

         return mavenDependency;

     }

diff --git a/src/test/java/org/apache/maven/shared/artifact/filter/resolve/transform/EclipseAetherNodeTest.java b/src/test/java/org/apache/maven/shared/artifact/filter/resolve/transform/EclipseAetherNodeTest.java
index 0edb4f6..8809beb 100644
--- a/src/test/java/org/apache/maven/shared/artifact/filter/resolve/transform/EclipseAetherNodeTest.java
+++ b/src/test/java/org/apache/maven/shared/artifact/filter/resolve/transform/EclipseAetherNodeTest.java
@@ -21,11 +21,16 @@
 

 import static org.junit.Assert.assertEquals;

 

+import java.util.ArrayList;

+import java.util.Collection;

+import java.util.Collections;

+

 import org.apache.maven.shared.artifact.filter.resolve.Node;

 import org.eclipse.aether.artifact.DefaultArtifact;

 import org.eclipse.aether.graph.DefaultDependencyNode;

 import org.eclipse.aether.graph.Dependency;

 import org.eclipse.aether.graph.DependencyNode;

+import org.eclipse.aether.graph.Exclusion;

 import org.junit.Test;

 

 public class EclipseAetherNodeTest

@@ -78,7 +83,7 @@
     @Test

     public void testOptional()

     {

-        Node node = new EclipseAetherNode( newDependencyNode( "g:a:v", null, null ) );

+        Node node = new EclipseAetherNode( newDependencyNode( "g:a:v", null, (Boolean) null ) );

         

         assertEquals( null, node.getDependency().getOptional()  );

         assertEquals( false, node.getDependency().isOptional()  );

@@ -91,6 +96,17 @@
         assertEquals( "false", node.getDependency().getOptional()  );

         assertEquals( false, node.getDependency().isOptional()  );

     }

+    

+    @Test

+    public void testExclusions()

+    {

+        Node node = new EclipseAetherNode( newDependencyNode( "g:a:v", null, Collections.singletonList( "eg:ea" ) ) );

+        assertEquals( 1, node.getDependency().getExclusions().size() );

+        

+        org.apache.maven.model.Exclusion mavenExclusion = node.getDependency().getExclusions().get( 0 );

+        assertEquals( "eg", mavenExclusion.getGroupId() );

+        assertEquals( "ea", mavenExclusion.getArtifactId() );

+    }

 

     private DependencyNode newDependencyNode( String coor, String scope )

     {

@@ -102,4 +118,19 @@
         return new DefaultDependencyNode( new Dependency( new DefaultArtifact( coor ), scope, optional ) );

     }

 

+    private DependencyNode newDependencyNode( String coor, String scope, Collection<String> exclusions )

+    {

+        Dependency dependency = new Dependency( new DefaultArtifact( coor ), scope );

+        

+        Collection<Exclusion> aetherExclusions = new ArrayList<Exclusion>( exclusions.size() );

+        for ( String exclusion : exclusions )

+        {

+            String[] ga = exclusion.split( ":" );

+            aetherExclusions.add( new Exclusion( ga[0], ga[1], null, null ) );

+        }

+        dependency = dependency.setExclusions( aetherExclusions );

+        

+        return new DefaultDependencyNode( dependency );

+    }

+

 }

diff --git a/src/test/java/org/apache/maven/shared/artifact/filter/resolve/transform/SonatypeAetherNodeTest.java b/src/test/java/org/apache/maven/shared/artifact/filter/resolve/transform/SonatypeAetherNodeTest.java
index 37a1a4e..9a26595 100644
--- a/src/test/java/org/apache/maven/shared/artifact/filter/resolve/transform/SonatypeAetherNodeTest.java
+++ b/src/test/java/org/apache/maven/shared/artifact/filter/resolve/transform/SonatypeAetherNodeTest.java
@@ -21,10 +21,15 @@
 

 import static org.junit.Assert.assertEquals;

 

+import java.util.ArrayList;

+import java.util.Collection;

+import java.util.Collections;

+

 import org.apache.maven.shared.artifact.filter.resolve.Node;

 import org.junit.Test;

 import org.sonatype.aether.graph.Dependency;

 import org.sonatype.aether.graph.DependencyNode;

+import org.sonatype.aether.graph.Exclusion;

 import org.sonatype.aether.util.artifact.DefaultArtifact;

 import org.sonatype.aether.util.graph.DefaultDependencyNode;

 

@@ -92,6 +97,17 @@
         assertEquals( false, node.getDependency().isOptional()  );

     }

 

+    @Test

+    public void testExclusions()

+    {

+        Node node = new SonatypeAetherNode( newDependencyNode( "g:a:v", null, Collections.singletonList( "eg:ea" ) ) );

+        assertEquals( 1, node.getDependency().getExclusions().size() );

+        

+        org.apache.maven.model.Exclusion mavenExclusion = node.getDependency().getExclusions().get( 0 );

+        assertEquals( "eg", mavenExclusion.getGroupId() );

+        assertEquals( "ea", mavenExclusion.getArtifactId() );

+    }

+

     private DependencyNode newDependencyNode( String string, String scope )

     {

         return new DefaultDependencyNode( new Dependency( new DefaultArtifact( string ), scope ) );

@@ -102,4 +118,18 @@
         return new DefaultDependencyNode( new Dependency( new DefaultArtifact( coor ), scope, optional ) );

     }

 

+    private DependencyNode newDependencyNode( String coor, String scope, Collection<String> exclusions )

+    {

+        Dependency dependency = new Dependency( new DefaultArtifact( coor ), scope );

+        

+        Collection<Exclusion> aetherExclusions = new ArrayList<Exclusion>( exclusions.size() );

+        for ( String exclusion : exclusions )

+        {

+            String[] ga = exclusion.split( ":" );

+            aetherExclusions.add( new Exclusion( ga[0], ga[1], null, null ) );

+        }

+        dependency = dependency.setExclusions( aetherExclusions );

+        

+        return new DefaultDependencyNode( dependency );

+    }

 }