Author: rfscholte
Date: Tue Jul  7 20:26:14 2015
New Revision: 1689732

URL: http://svn.apache.org/r1689732
Log:
Introduce ArtifactIncludeFilterTransformer

Added:
    
maven/shared/trunk/maven-common-artifact-filters/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/ArtifactIncludeFilterTransformer.java
    
maven/shared/trunk/maven-common-artifact-filters/src/test/java/org/apache/maven/shared/artifact/filter/resolve/transform/ArtifactIncludeFilterTransformerTest.java
Modified:
    
maven/shared/trunk/maven-common-artifact-filters/src/main/java/org/apache/maven/shared/artifact/filter/PatternExcludesArtifactFilter.java
    
maven/shared/trunk/maven-common-artifact-filters/src/main/java/org/apache/maven/shared/artifact/filter/PatternIncludesArtifactFilter.java

Modified: 
maven/shared/trunk/maven-common-artifact-filters/src/main/java/org/apache/maven/shared/artifact/filter/PatternExcludesArtifactFilter.java
URL: 
http://svn.apache.org/viewvc/maven/shared/trunk/maven-common-artifact-filters/src/main/java/org/apache/maven/shared/artifact/filter/PatternExcludesArtifactFilter.java?rev=1689732&r1=1689731&r2=1689732&view=diff
==============================================================================
--- 
maven/shared/trunk/maven-common-artifact-filters/src/main/java/org/apache/maven/shared/artifact/filter/PatternExcludesArtifactFilter.java
 (original)
+++ 
maven/shared/trunk/maven-common-artifact-filters/src/main/java/org/apache/maven/shared/artifact/filter/PatternExcludesArtifactFilter.java
 Tue Jul  7 20:26:14 2015
@@ -19,7 +19,7 @@ package org.apache.maven.shared.artifact
  * under the License.
  */
 
-import java.util.List;
+import java.util.Collection;
 
 import org.apache.maven.artifact.Artifact;
 
@@ -32,12 +32,12 @@ import org.apache.maven.artifact.Artifac
 public class PatternExcludesArtifactFilter
     extends PatternIncludesArtifactFilter
 {
-    public PatternExcludesArtifactFilter( List<String> patterns )
+    public PatternExcludesArtifactFilter( Collection<String> patterns )
     {
         super( patterns );
     }
 
-    public PatternExcludesArtifactFilter( List<String> patterns, boolean 
actTransitively )
+    public PatternExcludesArtifactFilter( Collection<String> patterns, boolean 
actTransitively )
     {
         super( patterns, actTransitively );
     }

Modified: 
maven/shared/trunk/maven-common-artifact-filters/src/main/java/org/apache/maven/shared/artifact/filter/PatternIncludesArtifactFilter.java
URL: 
http://svn.apache.org/viewvc/maven/shared/trunk/maven-common-artifact-filters/src/main/java/org/apache/maven/shared/artifact/filter/PatternIncludesArtifactFilter.java?rev=1689732&r1=1689731&r2=1689732&view=diff
==============================================================================
--- 
maven/shared/trunk/maven-common-artifact-filters/src/main/java/org/apache/maven/shared/artifact/filter/PatternIncludesArtifactFilter.java
 (original)
+++ 
maven/shared/trunk/maven-common-artifact-filters/src/main/java/org/apache/maven/shared/artifact/filter/PatternIncludesArtifactFilter.java
 Tue Jul  7 20:26:14 2015
@@ -20,6 +20,7 @@ package org.apache.maven.shared.artifact
  */
 
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
@@ -51,12 +52,12 @@ public class PatternIncludesArtifactFilt
 
     private final List<String> filteredArtifactIds = new ArrayList<String>();
 
-    public PatternIncludesArtifactFilter( final List<String> patterns )
+    public PatternIncludesArtifactFilter( final Collection<String> patterns )
     {
         this( patterns, false );
     }
 
-    public PatternIncludesArtifactFilter( final List<String> patterns, final 
boolean actTransitively )
+    public PatternIncludesArtifactFilter( final Collection<String> patterns, 
final boolean actTransitively )
     {
         this.actTransitively = actTransitively;
         final List<String> pos = new ArrayList<String>();

Added: 
maven/shared/trunk/maven-common-artifact-filters/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/ArtifactIncludeFilterTransformer.java
URL: 
http://svn.apache.org/viewvc/maven/shared/trunk/maven-common-artifact-filters/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/ArtifactIncludeFilterTransformer.java?rev=1689732&view=auto
==============================================================================
--- 
maven/shared/trunk/maven-common-artifact-filters/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/ArtifactIncludeFilterTransformer.java
 (added)
+++ 
maven/shared/trunk/maven-common-artifact-filters/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/ArtifactIncludeFilterTransformer.java
 Tue Jul  7 20:26:14 2015
@@ -0,0 +1,151 @@
+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 java.util.ArrayList;
+import java.util.Collection;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.resolver.filter.AndArtifactFilter;
+import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
+import org.apache.maven.artifact.resolver.filter.ExcludesArtifactFilter;
+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.FilterTransformer;
+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;
+
+/**
+ * Makes it possible to use the TransformableFilters for Aether and as classic 
Maven ArtifactFilter. 
+ * 
+ * <strong>Note:</strong> the {@link AndFilter} and {@link ExclusionsFilter} 
are transformed to {@link ArtifactFilter}
+ * implementations of Maven Core
+ * 
+ * @author Robert Scholte
+ * @since 3.0
+ */
+public class ArtifactIncludeFilterTransformer implements 
FilterTransformer<ArtifactFilter>
+{
+
+    @Override
+    public ArtifactFilter transform( final ScopeFilter scopeFilter )
+    {
+        return new ArtifactFilter()
+        {
+            @Override
+            public boolean include( Artifact artifact )
+            {
+                boolean isIncluded;
+                
+                if ( scopeFilter.getIncluded() != null )
+                {
+                    isIncluded = scopeFilter.getIncluded().contains( 
artifact.getScope() );
+                }
+                else
+                {
+                    isIncluded = true;
+                }
+                
+                boolean isExcluded;
+
+                if ( scopeFilter.getExcluded() != null )
+                {
+                    isExcluded = scopeFilter.getExcluded().contains( 
artifact.getScope() ); 
+                }
+                else
+                {
+                    isExcluded = false;
+                }
+
+                return isIncluded && !isExcluded;
+            }
+        };
+    }
+
+    @Override
+    public AndArtifactFilter transform( AndFilter andFilter )
+    {
+        AndArtifactFilter filter = new AndArtifactFilter();
+
+        for ( TransformableFilter subFilter : andFilter.getFilters() )
+        {
+            filter.add( subFilter.transform( this ) );
+        }
+
+        return filter;
+    }
+
+    @Override
+    public ArtifactFilter transform( final ExclusionsFilter exclusionsFilter )
+    {
+        return new ExcludesArtifactFilter( new ArrayList<String>( 
exclusionsFilter.getExcludes() ) );
+    }
+
+    @Override
+    public ArtifactFilter transform( OrFilter orFilter )
+    {
+        final Collection<ArtifactFilter> filters = new 
ArrayList<ArtifactFilter>( orFilter.getFilters().size() );
+
+        for ( TransformableFilter subFilter : orFilter.getFilters() )
+        {
+            filters.add( subFilter.transform( this ) );
+        }
+
+        return new ArtifactFilter()
+        {
+            @Override
+            public boolean include( Artifact artifact )
+            {
+                for ( ArtifactFilter filter : filters )
+                {
+                    if ( filter.include( artifact ) )
+                    {
+                        return true;
+                    }
+                }
+                return false;
+            }
+        };
+    }
+
+    @Override
+    public ArtifactFilter transform( PatternExclusionsFilter 
patternExclusionsFilter )
+    {
+        return new PatternExcludesArtifactFilter( 
patternExclusionsFilter.getExcludes() );
+    }
+
+    @Override
+    public ArtifactFilter transform( PatternInclusionsFilter 
patternInclusionsFilter )
+    {
+        return new PatternIncludesArtifactFilter( 
patternInclusionsFilter.getIncludes() );
+    }
+
+    @Override
+    public ArtifactFilter transform( final AbstractFilter filter )
+    {
+        throw new UnsupportedOperationException( "Not yet implemented" );
+    }
+}

Added: 
maven/shared/trunk/maven-common-artifact-filters/src/test/java/org/apache/maven/shared/artifact/filter/resolve/transform/ArtifactIncludeFilterTransformerTest.java
URL: 
http://svn.apache.org/viewvc/maven/shared/trunk/maven-common-artifact-filters/src/test/java/org/apache/maven/shared/artifact/filter/resolve/transform/ArtifactIncludeFilterTransformerTest.java?rev=1689732&view=auto
==============================================================================
--- 
maven/shared/trunk/maven-common-artifact-filters/src/test/java/org/apache/maven/shared/artifact/filter/resolve/transform/ArtifactIncludeFilterTransformerTest.java
 (added)
+++ 
maven/shared/trunk/maven-common-artifact-filters/src/test/java/org/apache/maven/shared/artifact/filter/resolve/transform/ArtifactIncludeFilterTransformerTest.java
 Tue Jul  7 20:26:14 2015
@@ -0,0 +1,162 @@
+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 static org.junit.Assert.*;
+
+import java.util.Arrays;
+import java.util.Collections;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.artifact.resolver.filter.AndArtifactFilter;
+import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
+import org.apache.maven.artifact.resolver.filter.ScopeArtifactFilter;
+import org.apache.maven.plugin.testing.ArtifactStubFactory;
+import org.apache.maven.plugin.testing.stubs.ArtifactStub;
+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.AndFilter;
+import org.apache.maven.shared.artifact.filter.resolve.ExclusionsFilter;
+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.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.util.filter.AndDependencyFilter;
+import org.eclipse.aether.util.filter.ExclusionsDependencyFilter;
+import org.eclipse.aether.util.filter.OrDependencyFilter;
+import org.eclipse.aether.util.filter.PatternExclusionsDependencyFilter;
+import org.eclipse.aether.util.filter.PatternInclusionsDependencyFilter;
+import org.eclipse.aether.util.filter.ScopeDependencyFilter;
+import org.junit.Ignore;
+import org.junit.Test;
+
+public class ArtifactIncludeFilterTransformerTest
+{
+
+    private ArtifactIncludeFilterTransformer transformer = new 
ArtifactIncludeFilterTransformer();
+
+    private ArtifactStubFactory artifactFactory = new ArtifactStubFactory();
+
+    @Test
+    public void testTransformAndFilter()
+        throws Exception
+    {
+        AndFilter filter =
+            new AndFilter(
+                           Arrays.<TransformableFilter>asList( 
ScopeFilter.including( "compile" ),
+                                                        new ExclusionsFilter( 
Collections.singletonList( "x:a" ) ) ) );
+
+        AndArtifactFilter dependencyFilter = (AndArtifactFilter) 
filter.transform( transformer );
+
+        assertTrue( dependencyFilter.include( newArtifact( "g:a:v", "compile" 
) ) );
+
+        assertFalse( dependencyFilter.include( newArtifact( "x:a:v", "compile" 
) ) );
+
+        assertFalse( dependencyFilter.include( newArtifact( "g:a:v", "test" ) 
) );
+
+        assertFalse( dependencyFilter.include( newArtifact( "x:a:v", "test" ) 
) );
+    }
+
+    @Test
+    public void testTransformExclusionsFilter()
+        throws Exception
+    {
+        ExclusionsFilter filter = new ExclusionsFilter( 
Collections.singletonList( "x:a" ) );
+
+        ArtifactFilter dependencyFilter = (ArtifactFilter) filter.transform( 
transformer );
+
+        assertTrue( dependencyFilter.include( newArtifact( "g:a:v", "compile" 
) ) );
+
+        assertFalse( dependencyFilter.include( newArtifact( "x:a:v", "compile" 
) ) );
+    }
+
+    @Test
+    public void testTransformOrFilter()
+        throws Exception
+    {
+        OrFilter filter =
+            new OrFilter( Arrays.<TransformableFilter>asList( 
ScopeFilter.including( "compile" ),
+                                                              
ScopeFilter.including( "test" ) ) );
+
+        ArtifactFilter dependencyFilter = (ArtifactFilter) filter.transform( 
transformer );
+
+        assertTrue( dependencyFilter.include( newArtifact( "g:a:v", "compile" 
) ) );
+
+        assertTrue( dependencyFilter.include( newArtifact( "g:a:v", "test" ) ) 
);
+
+        assertFalse( dependencyFilter.include( newArtifact( "g:a:v", "runtime" 
) ) );
+    }
+
+    @Test
+    public void testTransformScopeFilter()
+        throws Exception
+    {
+        ScopeFilter filter = ScopeFilter.including( Collections.singletonList( 
"runtime" ) );
+
+        ArtifactFilter dependencyFilter = (ArtifactFilter) filter.transform( 
transformer );
+
+        assertTrue( dependencyFilter.include( newArtifact( "g:a:v", "runtime" 
) ) );
+
+        assertFalse( dependencyFilter.include( newArtifact( "g:a:v", "compile" 
) ) );
+
+        assertFalse( dependencyFilter.include( newArtifact( "g:a:v", "test" ) 
) );
+    }
+
+    @Test
+    public void testTransformPatternExclusionsFilter()
+        throws Exception
+    {
+        PatternExclusionsFilter filter = new PatternExclusionsFilter( 
Collections.singletonList( "x:*" ) );
+
+        PatternExcludesArtifactFilter dependencyFilter = 
(PatternExcludesArtifactFilter) filter.transform( transformer );
+
+        assertTrue( dependencyFilter.include( newArtifact( "g:a:v", "runtime" 
) ) );
+
+        assertFalse( dependencyFilter.include( newArtifact( "x:a:v", "runtime" 
) ) );
+    }
+
+    @Test
+    public void testTransformPatternInclusionsFilter()
+        throws Exception
+    {
+        PatternInclusionsFilter filter = new PatternInclusionsFilter( 
Collections.singletonList( "g:*" ) );
+
+        PatternIncludesArtifactFilter dependencyFilter = 
(PatternIncludesArtifactFilter) filter.transform( transformer );
+
+        assertTrue( dependencyFilter.include( newArtifact( "g:a:v", "runtime" 
) ) );
+
+        assertFalse( dependencyFilter.include( newArtifact( "x:a:v", "runtime" 
) ) );
+    }
+
+    private Artifact newArtifact( String coor, String scope )
+        throws Exception
+    {
+        String[] gav = coor.split( ":" );
+        return artifactFactory.createArtifact( gav[0], gav[1], gav[2], scope );
+    }
+
+}


Reply via email to