You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by rf...@apache.org on 2016/06/14 21:43:44 UTC

svn commit: r1748472 - in /maven/shared/trunk/maven-common-artifact-filters/src: main/java/org/apache/maven/shared/artifact/filter/resolve/transform/ test/java/org/apache/maven/shared/artifact/filter/resolve/transform/

Author: rfscholte
Date: Tue Jun 14 21:43:44 2016
New Revision: 1748472

URL: http://svn.apache.org/viewvc?rev=1748472&view=rev
Log:
[MSHARED-599] Allow classifier in PatternInclusionsFilter

Modified:
    maven/shared/trunk/maven-common-artifact-filters/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/EclipseAetherFilterTransformer.java
    maven/shared/trunk/maven-common-artifact-filters/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/SonatypeAetherFilterTransformer.java
    maven/shared/trunk/maven-common-artifact-filters/src/test/java/org/apache/maven/shared/artifact/filter/resolve/transform/EclipseAetherFilterTransformerTest.java
    maven/shared/trunk/maven-common-artifact-filters/src/test/java/org/apache/maven/shared/artifact/filter/resolve/transform/SonatypeAetherFilterTransformerTest.java

Modified: maven/shared/trunk/maven-common-artifact-filters/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/EclipseAetherFilterTransformer.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/EclipseAetherFilterTransformer.java?rev=1748472&r1=1748471&r2=1748472&view=diff
==============================================================================
--- maven/shared/trunk/maven-common-artifact-filters/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/EclipseAetherFilterTransformer.java (original)
+++ maven/shared/trunk/maven-common-artifact-filters/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/EclipseAetherFilterTransformer.java Tue Jun 14 21:43:44 2016
@@ -22,6 +22,8 @@ package org.apache.maven.shared.artifact
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 import org.apache.maven.shared.artifact.filter.resolve.AbstractFilter;
 import org.apache.maven.shared.artifact.filter.resolve.AndFilter;
@@ -93,6 +95,18 @@ public class EclipseAetherFilterTransfor
     @Override
     public DependencyFilter transform( PatternInclusionsFilter filter )
     {
+        // if any include contains a classifier:
+        // split all includes and make it an or-filter for every include
+        // for the classifier, add an and-filter with a classifierfilter and patterninclusionfilter
+        
+        for ( String include : filter.getIncludes() )
+        {
+            if ( include.matches( ".*:.*:.*:.*:.*" ) )
+            {
+                return newAdvancedPatternInclusionFilter( filter.getIncludes() );
+            }
+        }
+        
         return new PatternInclusionsDependencyFilter( filter.getIncludes() );
     }
     
@@ -108,4 +122,47 @@ public class EclipseAetherFilterTransfor
             }
         }; 
     }
+
+    private DependencyFilter newAdvancedPatternInclusionFilter( Collection<String> includes )
+    {
+        List<DependencyFilter> filters = new ArrayList<DependencyFilter>( includes.size() );
+
+        Pattern pattern = Pattern.compile( "(.*:.*:.*):(.+)(:.*)" );
+        for ( String include : includes )
+        {
+            Matcher matcher = pattern.matcher( include );
+            if ( matcher.matches() )
+            {
+                DependencyFilter patternFilter =
+                    new PatternInclusionsDependencyFilter( matcher.group( 1 ) + matcher.group( 3 ) );
+
+                final String classifier = matcher.group( 2 );
+                
+                DependencyFilter classifierFilter = new DependencyFilter()
+                {
+                    @Override
+                    public boolean accept( DependencyNode node, List<DependencyNode> parents )
+                    {
+                        String nodeClassifier = node.getArtifact().getClassifier();
+                        
+                        if ( nodeClassifier == null )
+                        {
+                            return false;
+                        }
+                        else 
+                        {
+                            return "*".equals( classifier ) || nodeClassifier.matches( classifier );
+                        }
+                    }
+                };
+
+                filters.add( new AndDependencyFilter( patternFilter, classifierFilter ) );
+            }
+            else
+            {
+                filters.add( new PatternInclusionsDependencyFilter( include ) );
+            }
+        }
+        return new OrDependencyFilter( filters );
+    }
 }

Modified: maven/shared/trunk/maven-common-artifact-filters/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/SonatypeAetherFilterTransformer.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/SonatypeAetherFilterTransformer.java?rev=1748472&r1=1748471&r2=1748472&view=diff
==============================================================================
--- maven/shared/trunk/maven-common-artifact-filters/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/SonatypeAetherFilterTransformer.java (original)
+++ maven/shared/trunk/maven-common-artifact-filters/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/SonatypeAetherFilterTransformer.java Tue Jun 14 21:43:44 2016
@@ -22,6 +22,8 @@ package org.apache.maven.shared.artifact
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 import org.apache.maven.shared.artifact.filter.resolve.AbstractFilter;
 import org.apache.maven.shared.artifact.filter.resolve.AndFilter;
@@ -93,6 +95,18 @@ public class SonatypeAetherFilterTransfo
     @Override
     public DependencyFilter transform( PatternInclusionsFilter filter )
     {
+     // if any include contains a classifier:
+        // split all includes and make it an or-filter for every include
+        // for the classifier, add an and-filter with a classifierfilter and patterninclusionfilter
+        
+        for ( String include : filter.getIncludes() )
+        {
+            if ( include.matches( ".*:.*:.*:.*:.*" ) )
+            {
+                return newAdvancedPatternInclusionFilter( filter.getIncludes() );
+            }
+        }
+        
         return new PatternInclusionsDependencyFilter( filter.getIncludes() );
     }
     
@@ -108,4 +122,47 @@ public class SonatypeAetherFilterTransfo
             }
         };
     }
+    
+    private DependencyFilter newAdvancedPatternInclusionFilter( Collection<String> includes )
+    {
+        List<DependencyFilter> filters = new ArrayList<DependencyFilter>( includes.size() );
+
+        Pattern pattern = Pattern.compile( "(.*:.*:.*):(.+)(:.*)" );
+        for ( String include : includes )
+        {
+            Matcher matcher = pattern.matcher( include );
+            if ( matcher.matches() )
+            {
+                DependencyFilter patternFilter =
+                    new PatternInclusionsDependencyFilter( matcher.group( 1 ) + matcher.group( 3 ) );
+
+                final String classifier = matcher.group( 2 );
+                
+                DependencyFilter classifierFilter = new DependencyFilter()
+                {
+                    @Override
+                    public boolean accept( DependencyNode node, List<DependencyNode> parents )
+                    {
+                        String nodeClassifier = node.getDependency().getArtifact().getClassifier();
+                        
+                        if ( nodeClassifier == null )
+                        {
+                            return false;
+                        }
+                        else 
+                        {
+                            return "*".equals( classifier ) || nodeClassifier.matches( classifier );
+                        }
+                    }
+                };
+
+                filters.add( new AndDependencyFilter( patternFilter, classifierFilter ) );
+            }
+            else
+            {
+                filters.add( new PatternInclusionsDependencyFilter( include ) );
+            }
+        }
+        return new OrDependencyFilter( filters );
+    }
 }

Modified: maven/shared/trunk/maven-common-artifact-filters/src/test/java/org/apache/maven/shared/artifact/filter/resolve/transform/EclipseAetherFilterTransformerTest.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/EclipseAetherFilterTransformerTest.java?rev=1748472&r1=1748471&r2=1748472&view=diff
==============================================================================
--- maven/shared/trunk/maven-common-artifact-filters/src/test/java/org/apache/maven/shared/artifact/filter/resolve/transform/EclipseAetherFilterTransformerTest.java (original)
+++ maven/shared/trunk/maven-common-artifact-filters/src/test/java/org/apache/maven/shared/artifact/filter/resolve/transform/EclipseAetherFilterTransformerTest.java Tue Jun 14 21:43:44 2016
@@ -139,7 +139,22 @@ public class EclipseAetherFilterTransfor
 
         assertFalse( dependencyFilter.accept( newDependencyNode( "x:a:v", "runtime" ), null ) );
     }
-    
+
+    @Test
+    public void testTransformClassifierPatternInclusionsFilter()
+    {
+        PatternInclusionsFilter filter =
+            new PatternInclusionsFilter( Collections.singletonList( "g:*:*:c:*" ) );
+
+        DependencyFilter dependencyFilter = filter.transform( transformer );
+
+        assertTrue( dependencyFilter.accept( newDependencyNode( "g:a:v:c:*", "runtime" ), null ) );
+
+        assertFalse( dependencyFilter.accept( newDependencyNode( "g:a:v", "runtime" ), null ) );
+        
+        assertFalse( dependencyFilter.accept( newDependencyNode( "x:a:v:c:*", "runtime" ), null ) );
+    }
+
     @Test
     public void testTransformAbstractFilter() throws Exception
     {

Modified: maven/shared/trunk/maven-common-artifact-filters/src/test/java/org/apache/maven/shared/artifact/filter/resolve/transform/SonatypeAetherFilterTransformerTest.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/SonatypeAetherFilterTransformerTest.java?rev=1748472&r1=1748471&r2=1748472&view=diff
==============================================================================
--- maven/shared/trunk/maven-common-artifact-filters/src/test/java/org/apache/maven/shared/artifact/filter/resolve/transform/SonatypeAetherFilterTransformerTest.java (original)
+++ maven/shared/trunk/maven-common-artifact-filters/src/test/java/org/apache/maven/shared/artifact/filter/resolve/transform/SonatypeAetherFilterTransformerTest.java Tue Jun 14 21:43:44 2016
@@ -141,6 +141,22 @@ public class SonatypeAetherFilterTransfo
         assertFalse( dependencyFilter.accept( newDependencyNode( "x:a:v", "runtime" ), null ) );
     }
     
+
+    @Test
+    public void testTransformClassifierPatternInclusionsFilter()
+    {
+        PatternInclusionsFilter filter =
+            new PatternInclusionsFilter( Collections.singletonList( "g:*:*:c:*" ) );
+
+        DependencyFilter dependencyFilter = filter.transform( transformer );
+
+        assertTrue( dependencyFilter.accept( newDependencyNode( "g:a:v:c:*", "runtime" ), null ) );
+
+        assertFalse( dependencyFilter.accept( newDependencyNode( "g:a:v", "runtime" ), null ) );
+        
+        assertFalse( dependencyFilter.accept( newDependencyNode( "x:a:v:c:*", "runtime" ), null ) );
+    }
+    
     @Test
     public void testTransformAbstractFilter() throws Exception
     {