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 ) );