Add support for custom filters for all transformers, verify with unittests

git-svn-id: https://svn.apache.org/repos/asf/maven/shared/trunk@1689744 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/ArtifactIncludeFilterTransformer.java b/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/ArtifactIncludeFilterTransformer.java
index a4ccace..570b55d 100644
--- a/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/ArtifactIncludeFilterTransformer.java
+++ b/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/ArtifactIncludeFilterTransformer.java
@@ -146,6 +146,13 @@
     @Override

     public ArtifactFilter transform( final AbstractFilter filter )

     {

-        throw new UnsupportedOperationException( "Not yet implemented" );

+        return new ArtifactFilter()

+        {

+            @Override

+            public boolean include( Artifact artifact )

+            {

+                return filter.accept( new ArtifactIncludeNode( artifact ), null );

+            }

+        };

     }

 }

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
new file mode 100644
index 0000000..0ad911b
--- /dev/null
+++ b/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/ArtifactIncludeNode.java
@@ -0,0 +1,54 @@
+package org.apache.maven.shared.artifact.filter.resolve.transform;

+

+/*

+ * 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 org.apache.maven.artifact.Artifact;

+import org.apache.maven.model.Dependency;

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

+

+/**

+ * 

+ * @author Robert Scholte

+ * @since 3.0

+ */

+class ArtifactIncludeNode implements Node

+{

+    private final Artifact artifact;

+    

+    public ArtifactIncludeNode( Artifact artifact )

+    {

+        this.artifact = artifact;

+    }

+    

+    @Override

+    public Dependency getDependency()

+    {

+        org.apache.maven.model.Dependency mavenDependency = new org.apache.maven.model.Dependency();

+        mavenDependency.setGroupId( artifact.getGroupId() );

+        mavenDependency.setArtifactId( artifact.getArtifactId() );

+        mavenDependency.setVersion( artifact.getVersion() );

+        mavenDependency.setClassifier( artifact.getClassifier() );

+        mavenDependency.setType( artifact.getType() );

+

+        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 b5c1c1f..e865bb2 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
@@ -30,12 +30,12 @@
  * @author Robert Scholte

  * @since 3.0

  */

-public class EclipseAetherNode implements Node

+class EclipseAetherNode implements Node

 {

 

     private final DependencyNode node;

 

-    public EclipseAetherNode( DependencyNode node )

+    EclipseAetherNode( DependencyNode node )

     {

         this.node = node;

     }

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 e8a2ed6..3d65f64 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
@@ -30,12 +30,12 @@
  * @author Robert Scholte

  * @since 3.0

  */

-public class SonatypeAetherNode implements Node

+class SonatypeAetherNode implements Node

 {

 

     private final DependencyNode node;

 

-    public SonatypeAetherNode( DependencyNode node )

+    SonatypeAetherNode( DependencyNode node )

     {

         this.node = node;

     }

diff --git a/src/test/java/org/apache/maven/shared/artifact/filter/resolve/transform/ArtifactIncludeFilterTransformerTest.java b/src/test/java/org/apache/maven/shared/artifact/filter/resolve/transform/ArtifactIncludeFilterTransformerTest.java
index fe3e2fe..cc6fd47 100644
--- a/src/test/java/org/apache/maven/shared/artifact/filter/resolve/transform/ArtifactIncludeFilterTransformerTest.java
+++ b/src/test/java/org/apache/maven/shared/artifact/filter/resolve/transform/ArtifactIncludeFilterTransformerTest.java
@@ -23,8 +23,10 @@
 

 import java.util.Arrays;

 import java.util.Collections;

+import java.util.List;

 

 import org.apache.maven.artifact.Artifact;

+import org.apache.maven.artifact.ArtifactUtils;

 import org.apache.maven.artifact.factory.ArtifactFactory;

 import org.apache.maven.artifact.resolver.filter.AndArtifactFilter;

 import org.apache.maven.artifact.resolver.filter.ArtifactFilter;

@@ -34,8 +36,10 @@
 import org.apache.maven.plugin.testing.stubs.StubArtifactRepository;

 import org.apache.maven.shared.artifact.filter.PatternExcludesArtifactFilter;

 import org.apache.maven.shared.artifact.filter.PatternIncludesArtifactFilter;

+import org.apache.maven.shared.artifact.filter.resolve.AbstractFilter;

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

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

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

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

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

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

@@ -151,6 +155,25 @@
 

         assertFalse( dependencyFilter.include( newArtifact( "x:a:v", "runtime" ) ) );

     }

+    

+    @Test

+    public void testTransformAbstractFilter() throws Exception

+    {

+        AbstractFilter snapshotFilter = new AbstractFilter()

+        {

+            @Override

+            public boolean accept( Node node, List<Node> parents )

+            {

+                return ArtifactUtils.isSnapshot( node.getDependency().getVersion() );

+            }

+        };

+        

+        ArtifactFilter dependencyFilter = snapshotFilter.transform( transformer );

+        

+        assertTrue( dependencyFilter.include( newArtifact( "g:a:1.0-SNAPSHOT", "compile" ) ) );

+

+        assertFalse( dependencyFilter.include( newArtifact( "g:a:1.0", "compile" ) ) );

+    }

 

     private Artifact newArtifact( String coor, String scope )

         throws Exception

diff --git a/src/test/java/org/apache/maven/shared/artifact/filter/resolve/transform/EclipseAetherFilterTransformerTest.java b/src/test/java/org/apache/maven/shared/artifact/filter/resolve/transform/EclipseAetherFilterTransformerTest.java
index aac8deb..b96e833 100644
--- a/src/test/java/org/apache/maven/shared/artifact/filter/resolve/transform/EclipseAetherFilterTransformerTest.java
+++ b/src/test/java/org/apache/maven/shared/artifact/filter/resolve/transform/EclipseAetherFilterTransformerTest.java
@@ -23,9 +23,14 @@
 
 import java.util.Arrays;
 import java.util.Collections;
+import java.util.List;
 
+import org.apache.maven.artifact.ArtifactUtils;
+import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
+import org.apache.maven.shared.artifact.filter.resolve.AbstractFilter;
 import org.apache.maven.shared.artifact.filter.resolve.AndFilter;
 import org.apache.maven.shared.artifact.filter.resolve.ExclusionsFilter;
+import org.apache.maven.shared.artifact.filter.resolve.Node;
 import org.apache.maven.shared.artifact.filter.resolve.OrFilter;
 import org.apache.maven.shared.artifact.filter.resolve.PatternExclusionsFilter;
 import org.apache.maven.shared.artifact.filter.resolve.PatternInclusionsFilter;
@@ -34,6 +39,7 @@
 import org.eclipse.aether.artifact.DefaultArtifact;
 import org.eclipse.aether.graph.DefaultDependencyNode;
 import org.eclipse.aether.graph.Dependency;
+import org.eclipse.aether.graph.DependencyFilter;
 import org.eclipse.aether.graph.DependencyNode;
 import org.eclipse.aether.util.filter.AndDependencyFilter;
 import org.eclipse.aether.util.filter.ExclusionsDependencyFilter;
@@ -134,6 +140,25 @@
         assertFalse( dependencyFilter.accept( newDependencyNode( "x:a:v", "runtime" ), null ) );
     }
     
+    @Test
+    public void testTransformAbstractFilter() throws Exception
+    {
+        AbstractFilter snapshotFilter = new AbstractFilter()
+        {
+            @Override
+            public boolean accept( Node node, List<Node> parents )
+            {
+                return ArtifactUtils.isSnapshot( node.getDependency().getVersion() );
+            }
+        };
+        
+        DependencyFilter dependencyFilter = snapshotFilter.transform( transformer );
+        
+        assertTrue( dependencyFilter.accept( newDependencyNode( "g:a:1.0-SNAPSHOT", "compile" ), null ) );
+
+        assertFalse( dependencyFilter.accept( newDependencyNode( "g:a:1.0", "compile" ), null ) );
+    }
+    
     private DependencyNode newDependencyNode( String string, String scope )
     {
         return new DefaultDependencyNode( new Dependency( new DefaultArtifact( string ), scope ) );
diff --git a/src/test/java/org/apache/maven/shared/artifact/filter/resolve/transform/SonatypeAetherFilterTransformerTest.java b/src/test/java/org/apache/maven/shared/artifact/filter/resolve/transform/SonatypeAetherFilterTransformerTest.java
index 15e833b..8ff930a 100644
--- a/src/test/java/org/apache/maven/shared/artifact/filter/resolve/transform/SonatypeAetherFilterTransformerTest.java
+++ b/src/test/java/org/apache/maven/shared/artifact/filter/resolve/transform/SonatypeAetherFilterTransformerTest.java
@@ -24,14 +24,19 @@
 
 import java.util.Arrays;
 import java.util.Collections;
+import java.util.List;
 
+import org.apache.maven.artifact.ArtifactUtils;
+import org.apache.maven.shared.artifact.filter.resolve.AbstractFilter;
 import org.apache.maven.shared.artifact.filter.resolve.AndFilter;
 import org.apache.maven.shared.artifact.filter.resolve.ExclusionsFilter;
+import org.apache.maven.shared.artifact.filter.resolve.Node;
 import org.apache.maven.shared.artifact.filter.resolve.OrFilter;
 import org.apache.maven.shared.artifact.filter.resolve.PatternExclusionsFilter;
 import org.apache.maven.shared.artifact.filter.resolve.PatternInclusionsFilter;
 import org.apache.maven.shared.artifact.filter.resolve.ScopeFilter;
 import org.apache.maven.shared.artifact.filter.resolve.TransformableFilter;
+import org.sonatype.aether.graph.DependencyFilter;
 import org.sonatype.aether.graph.Dependency;
 import org.sonatype.aether.graph.DependencyNode;
 import org.sonatype.aether.util.artifact.DefaultArtifact;
@@ -136,6 +141,25 @@
         assertFalse( dependencyFilter.accept( newDependencyNode( "x:a:v", "runtime" ), null ) );
     }
     
+    @Test
+    public void testTransformAbstractFilter() throws Exception
+    {
+        AbstractFilter snapshotFilter = new AbstractFilter()
+        {
+            @Override
+            public boolean accept( Node node, List<Node> parents )
+            {
+                return ArtifactUtils.isSnapshot( node.getDependency().getVersion() );
+            }
+        };
+        
+        DependencyFilter dependencyFilter = snapshotFilter.transform( transformer );
+        
+        assertTrue( dependencyFilter.accept( newDependencyNode( "g:a:1.0-SNAPSHOT", "compile" ), null ) );
+
+        assertFalse( dependencyFilter.accept( newDependencyNode( "g:a:1.0", "compile" ), null ) );
+    }
+    
     private DependencyNode newDependencyNode( String string, String scope )
     {
         return new DefaultDependencyNode( new Dependency( new DefaultArtifact( string ), scope ) );