You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by be...@apache.org on 2009/09/24 11:06:46 UTC

svn commit: r818412 - in /maven/maven-3/trunk/maven-compat/src: main/java/org/apache/maven/repository/ test/java/org/apache/maven/repository/

Author: bentmann
Date: Thu Sep 24 09:06:46 2009
New Revision: 818412

URL: http://svn.apache.org/viewvc?rev=818412&view=rev
Log:
o Refactored code

Added:
    maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/repository/DefaultMirrorSelector.java
      - copied, changed from r818396, maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/repository/DefaultMirrorBuilder.java
    maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/repository/MirrorSelector.java
      - copied, changed from r818396, maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/repository/MirrorBuilder.java
Removed:
    maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/repository/DefaultMirrorBuilder.java
    maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/repository/MirrorBuilder.java
Modified:
    maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/repository/LegacyRepositorySystem.java
    maven/maven-3/trunk/maven-compat/src/test/java/org/apache/maven/repository/MirrorProcessorTest.java

Copied: maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/repository/DefaultMirrorSelector.java (from r818396, maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/repository/DefaultMirrorBuilder.java)
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/repository/DefaultMirrorSelector.java?p2=maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/repository/DefaultMirrorSelector.java&p1=maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/repository/DefaultMirrorBuilder.java&r1=818396&r2=818412&rev=818412&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/repository/DefaultMirrorBuilder.java (original)
+++ maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/repository/DefaultMirrorSelector.java Thu Sep 24 09:06:46 2009
@@ -21,139 +21,47 @@
 
 import java.net.MalformedURLException;
 import java.net.URL;
-import java.util.LinkedHashMap;
 import java.util.List;
-import java.util.Map;
-import java.util.Set;
 
 import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
-import org.apache.maven.artifact.repository.Authentication;
-import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
+import org.apache.maven.settings.Mirror;
 import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
-import org.codehaus.plexus.logging.Logger;
 
-@Component(role=MirrorBuilder.class)
-public class DefaultMirrorBuilder
-    implements MirrorBuilder    
+@Component( role = MirrorSelector.class )
+public class DefaultMirrorSelector
+    implements MirrorSelector
 {    
+
     private static final String WILDCARD = "*";
 
     private static final String EXTERNAL_WILDCARD = "external:*";
 
-    private static int anonymousMirrorIdSeed = 0;
-    
-    @Requirement
-    private Logger logger;
-    
-    @Requirement 
-    private ArtifactRepositoryFactory repositoryFactory;
-    
-    //used LinkedMap to preserve the order.
-    private Map<String, ArtifactRepository> mirrors = new LinkedHashMap<String, ArtifactRepository>();
-
-    public void addMirror( String id, String mirrorOf, String url, Authentication auth )
-    {        
-        if ( id == null )
-        {
-            id = "mirror-" + anonymousMirrorIdSeed++;
-            logger.warn( "You are using a mirror that doesn't declare an <id/> element. Using \'" + id + "\' instead:\nId: " + id + "\nmirrorOf: " + mirrorOf + "\nurl: " + url + "\n" );
-        }
-
-        if ( !mirrors.containsKey( mirrorOf ) )
-        {
-            ArtifactRepository mirror = repositoryFactory.createArtifactRepository( id, url, (ArtifactRepositoryLayout)null, null, null );
-            
-            mirror.setAuthentication( auth );
-
-            mirrors.put( mirrorOf, mirror );
-        }
-    }
-            
-    /**
-     * This method finds a matching mirror for the selected repository. If there is an exact match,
-     * this will be used. If there is no exact match, then the list of mirrors is examined to see if
-     * a pattern applies.
-     * 
-     * @param originalRepository See if there is a mirror for this repository.
-     * @return the selected mirror or null if none are found.
-     */
-    public ArtifactRepository getMirror( ArtifactRepository originalRepository )
+    public Mirror getMirror( ArtifactRepository repository, List<Mirror> mirrors )
     {
-        ArtifactRepository selectedMirror = mirrors.get( originalRepository.getId() );
-        if ( null == selectedMirror )
+        String repoId = repository.getId();
+
+        if ( repoId != null && mirrors != null )
         {
-            // Process the patterns in order. First one that matches wins.
-            Set<String> keySet = mirrors.keySet();
-            if ( keySet != null )
+            for ( Mirror mirror : mirrors )
             {
-                for ( String pattern : keySet )
+                if ( repoId.equals( mirror.getMirrorOf() ) )
                 {
-                    if ( matchPattern( originalRepository, pattern ) )
-                    {
-                        selectedMirror = mirrors.get( pattern );
-                        //stop on the first match.
-                        break;
-                    }
+                    return mirror;
                 }
             }
-        }
-        
-        return selectedMirror;
-    }
 
-    public void clearMirrors()
-    {
-        mirrors.clear();    
-        anonymousMirrorIdSeed = 0;
-    }       
-    
-    public List<ArtifactRepository> getMirrors( List<ArtifactRepository> remoteRepositories )
-    {
-        if ( remoteRepositories != null )
-        {            
-            for ( ArtifactRepository repository : remoteRepositories)
-            {                
-                // Check to see if we have a valid mirror for this repository
-                ArtifactRepository mirror = getMirror( repository );
-                                        
-                if ( mirror != null )
-                {       
-                    // We basically just want to take the URL
-                    repository.setUrl( mirror.getUrl() );
-                    repository.setAuthentication( mirror.getAuthentication() );
-                    
-                    // I would like a mirrored repository to be visually different but we'll put another field
-                    // in the repository as changing the ID hoses up authentication.
-                    repository.setId( mirror.getId() );
+            for ( Mirror mirror : mirrors )
+            {
+                if ( matchPattern( repository, mirror.getMirrorOf() ) )
+                {
+                    return mirror;
                 }
             }
         }
-        
-        return remoteRepositories;
+
+        return null;
     }
-    
-    // Make these available to tests
-    
-    ArtifactRepository getMirrorRepository( ArtifactRepository repository )
-    {
-        ArtifactRepository mirror = getMirror( repository );
-        if ( mirror != null )
-        {
-            String id = mirror.getId();
-            if ( id == null )
-            {
-                // TODO: this should be illegal in settings.xml
-                id = repository.getId();
-            }
 
-            logger.debug( "Using mirror: " + mirror.getId() + " for repository: " + repository.getId() + "\n(mirror url: " + mirror.getUrl() + ")" );
-            repository = repositoryFactory.createArtifactRepository( id, mirror.getUrl(), repository.getLayout(), repository.getSnapshots(), repository.getReleases() );
-        }
-        return repository;
-    }    
-        
     /**
      * This method checks if the pattern matches the originalRepository. Valid patterns: * =
      * everything external:* = everything not on the localhost and not file based. repo,repo1 = repo
@@ -210,8 +118,7 @@
         }
         return result;
     }
-    
-    
+
     /**
      * Checks the URL to see if this repository refers to an external repository
      * 
@@ -231,6 +138,5 @@
             return false;
         }
     }
-    
-    
+
 }

Modified: maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/repository/LegacyRepositorySystem.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/repository/LegacyRepositorySystem.java?rev=818412&r1=818411&r2=818412&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/repository/LegacyRepositorySystem.java (original)
+++ maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/repository/LegacyRepositorySystem.java Thu Sep 24 09:06:46 2009
@@ -85,6 +85,9 @@
     @Requirement
     private PlexusContainer plexus;
 
+    @Requirement
+    private MirrorSelector mirrorSelector;
+
     public Artifact createArtifact( String groupId, String artifactId, String version, String scope, String type )
     {
         return artifactFactory.createArtifact( groupId, artifactId, version, scope, type );
@@ -456,28 +459,7 @@
 
     public Mirror getMirror( ArtifactRepository repository, List<Mirror> mirrors )
     {
-        String repoId = repository.getId();
-
-        if ( repoId != null && mirrors != null )
-        {
-            for ( Mirror mirror : mirrors )
-            {
-                if ( repoId.equals( mirror.getMirrorOf() ) )
-                {
-                    return mirror;
-                }
-            }
-
-            for ( Mirror mirror : mirrors )
-            {
-                if ( DefaultMirrorBuilder.matchPattern( repository, mirror.getMirrorOf() ) )
-                {
-                    return mirror;
-                }
-            }
-        }
-
-        return null;
+        return mirrorSelector.getMirror( repository, mirrors );
     }
 
     public void injectMirror( List<ArtifactRepository> repositories, List<Mirror> mirrors )

Copied: maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/repository/MirrorSelector.java (from r818396, maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/repository/MirrorBuilder.java)
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/repository/MirrorSelector.java?p2=maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/repository/MirrorSelector.java&p1=maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/repository/MirrorBuilder.java&r1=818396&r2=818412&rev=818412&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/repository/MirrorBuilder.java (original)
+++ maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/repository/MirrorSelector.java Thu Sep 24 09:06:46 2009
@@ -22,15 +22,23 @@
 import java.util.List;
 
 import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.repository.Authentication;
+import org.apache.maven.settings.Mirror;
 
-public interface MirrorBuilder
+/**
+ * Handles the selection of mirrors for repositories.
+ * 
+ * @author Benjamin Bentmann
+ */
+public interface MirrorSelector
 {
-    ArtifactRepository getMirror( ArtifactRepository repository );
-    
-    List<ArtifactRepository> getMirrors( List<ArtifactRepository> repositories );
-    
-    void addMirror( String id, String mirrorOf, String url, Authentication auth );
-    
-    void clearMirrors();    
+
+    /**
+     * Determines the mirror for the specified repository.
+     * 
+     * @param repository The repository to determine the mirror for, must not be {@code null}.
+     * @param mirrors The available mirrors, may be {@code null}.
+     * @return The mirror specification for the repository or {@code null} if no mirror matched.
+     */
+    Mirror getMirror( ArtifactRepository repository, List<Mirror> mirrors );
+
 }

Modified: maven/maven-3/trunk/maven-compat/src/test/java/org/apache/maven/repository/MirrorProcessorTest.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-compat/src/test/java/org/apache/maven/repository/MirrorProcessorTest.java?rev=818412&r1=818411&r2=818412&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-compat/src/test/java/org/apache/maven/repository/MirrorProcessorTest.java (original)
+++ maven/maven-3/trunk/maven-compat/src/test/java/org/apache/maven/repository/MirrorProcessorTest.java Thu Sep 24 09:06:46 2009
@@ -19,195 +19,165 @@
  * under the License.
  */
 
-import java.io.File;
 import java.util.Arrays;
 import java.util.List;
 
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
 import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
+import org.apache.maven.settings.Mirror;
 import org.codehaus.plexus.PlexusTestCase;
 
 public class MirrorProcessorTest
     extends PlexusTestCase
 {
-    private DefaultMirrorBuilder mirrorBuilder;
+    private DefaultMirrorSelector mirrorSelector;
     private ArtifactRepositoryFactory repositorySystem;
 
     protected void setUp()
         throws Exception
     {
-        mirrorBuilder = (DefaultMirrorBuilder) lookup( MirrorBuilder.class );
+        mirrorSelector = (DefaultMirrorSelector) lookup( MirrorSelector.class );
         repositorySystem = lookup( ArtifactRepositoryFactory.class );
-        mirrorBuilder.clearMirrors();
     }
 
     @Override
     protected void tearDown()
         throws Exception
     {
-        mirrorBuilder = null;
-        super.tearDown();
-    }
+        mirrorSelector = null;
+        repositorySystem = null;
 
-    public void testAddMirrorWithNullRepositoryId()
-    {
-        mirrorBuilder.addMirror( null, "test", "http://www.nowhere.com/", null );
+        super.tearDown();
     }
 
     public void testExternalURL()
     {
-        assertTrue( DefaultMirrorBuilder.isExternalRepo( getRepo( "foo", "http://somehost" ) ) );
-        assertTrue( DefaultMirrorBuilder.isExternalRepo( getRepo( "foo", "http://somehost:9090/somepath" ) ) );
-        assertTrue( DefaultMirrorBuilder.isExternalRepo( getRepo( "foo", "ftp://somehost" ) ) );
-        assertTrue( DefaultMirrorBuilder.isExternalRepo( getRepo( "foo", "http://192.168.101.1" ) ) );
-        assertTrue( DefaultMirrorBuilder.isExternalRepo( getRepo( "foo", "http://" ) ) );
+        assertTrue( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "http://somehost" ) ) );
+        assertTrue( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "http://somehost:9090/somepath" ) ) );
+        assertTrue( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "ftp://somehost" ) ) );
+        assertTrue( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "http://192.168.101.1" ) ) );
+        assertTrue( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "http://" ) ) );
         // these are local
-        assertFalse( DefaultMirrorBuilder.isExternalRepo( getRepo( "foo", "http://localhost:8080" ) ) );
-        assertFalse( DefaultMirrorBuilder.isExternalRepo( getRepo( "foo", "http://127.0.0.1:9090" ) ) );
-        assertFalse( DefaultMirrorBuilder.isExternalRepo( getRepo( "foo", "file://localhost/somepath" ) ) );
-        assertFalse( DefaultMirrorBuilder.isExternalRepo( getRepo( "foo", "file://localhost/D:/somepath" ) ) );
-        assertFalse( DefaultMirrorBuilder.isExternalRepo( getRepo( "foo", "http://localhost" ) ) );
-        assertFalse( DefaultMirrorBuilder.isExternalRepo( getRepo( "foo", "http://127.0.0.1" ) ) );
-        assertFalse( DefaultMirrorBuilder.isExternalRepo( getRepo( "foo", "file:///somepath" ) ) );
-        assertFalse( DefaultMirrorBuilder.isExternalRepo( getRepo( "foo", "file://D:/somepath" ) ) );
+        assertFalse( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "http://localhost:8080" ) ) );
+        assertFalse( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "http://127.0.0.1:9090" ) ) );
+        assertFalse( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "file://localhost/somepath" ) ) );
+        assertFalse( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "file://localhost/D:/somepath" ) ) );
+        assertFalse( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "http://localhost" ) ) );
+        assertFalse( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "http://127.0.0.1" ) ) );
+        assertFalse( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "file:///somepath" ) ) );
+        assertFalse( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "file://D:/somepath" ) ) );
 
         // not a proper url so returns false;
-        assertFalse( DefaultMirrorBuilder.isExternalRepo( getRepo( "foo", "192.168.101.1" ) ) );
-        assertFalse( DefaultMirrorBuilder.isExternalRepo( getRepo( "foo", "" ) ) );
+        assertFalse( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "192.168.101.1" ) ) );
+        assertFalse( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "" ) ) );
     }
 
     public void testMirrorLookup()
     {
-        mirrorBuilder.addMirror( "a", "a", "http://a", null );
-        mirrorBuilder.addMirror( "b", "b", "http://b", null );
+        Mirror mirrorA = newMirror( "a", "a", "http://a" );
+        Mirror mirrorB = newMirror( "b", "b", "http://b" );
 
-        ArtifactRepository repo = null;
-        repo = mirrorBuilder.getMirrorRepository( getRepo( "a", "http://a.a" ) );
-        assertEquals( "http://a", repo.getUrl() );
+        List<Mirror> mirrors = Arrays.asList( mirrorA, mirrorB );
 
-        repo = mirrorBuilder.getMirrorRepository( getRepo( "b", "http://a.a" ) );
-        assertEquals( "http://b", repo.getUrl() );
+        assertSame( mirrorA, mirrorSelector.getMirror( getRepo( "a", "http://a.a" ), mirrors ) );
 
-        repo = mirrorBuilder.getMirrorRepository( getRepo( "c", "http://c.c" ) );
-        assertEquals( "http://c.c", repo.getUrl() );
+        assertSame( mirrorB, mirrorSelector.getMirror( getRepo( "b", "http://a.a" ), mirrors ) );
 
+        assertNull( mirrorSelector.getMirror( getRepo( "c", "http://c.c" ), mirrors ) );
     }
 
     public void testMirrorWildcardLookup()
     {
-        mirrorBuilder.addMirror( "a", "a", "http://a", null );
-        mirrorBuilder.addMirror( "b", "b", "http://b", null );
-        mirrorBuilder.addMirror( "c", "*", "http://wildcard", null );
-
-        ArtifactRepository repo = null;
-        repo = mirrorBuilder.getMirrorRepository( getRepo( "a", "http://a.a" ) );
-        assertEquals( "http://a", repo.getUrl() );
+        Mirror mirrorA = newMirror( "a", "a", "http://a" );
+        Mirror mirrorB = newMirror( "b", "b", "http://b" );
+        Mirror mirrorC = newMirror( "c", "*", "http://wildcard" );
+
+        List<Mirror> mirrors = Arrays.asList( mirrorA, mirrorB, mirrorC );
 
-        repo = mirrorBuilder.getMirrorRepository( getRepo( "b", "http://a.a" ) );
-        assertEquals( "http://b", repo.getUrl() );
+        assertSame( mirrorA, mirrorSelector.getMirror( getRepo( "a", "http://a.a" ), mirrors ) );
 
-        repo = mirrorBuilder.getMirrorRepository( getRepo( "c", "http://c.c" ) );
-        assertEquals( "http://wildcard", repo.getUrl() );
+        assertSame( mirrorB, mirrorSelector.getMirror( getRepo( "b", "http://a.a" ), mirrors ) );
 
+        assertSame( mirrorC, mirrorSelector.getMirror( getRepo( "c", "http://c.c" ), mirrors ) );
     }
 
     public void testMirrorStopOnFirstMatch()
     {
-        //exact matches win first
-        mirrorBuilder.addMirror( "a2", "a,b", "http://a2", null );
-        mirrorBuilder.addMirror( "a", "a", "http://a", null );
-        //make sure repeated entries are skipped
-        mirrorBuilder.addMirror( "a", "a", "http://a3", null );
-
-        mirrorBuilder.addMirror( "b", "b", "http://b", null );
-        mirrorBuilder.addMirror( "c", "d,e", "http://de", null );
-        mirrorBuilder.addMirror( "c", "*", "http://wildcard", null );
-        mirrorBuilder.addMirror( "c", "e,f", "http://ef", null );
-
-        ArtifactRepository repo = null;
-        repo = mirrorBuilder.getMirrorRepository( getRepo( "a", "http://a.a" ) );
-        assertEquals( "http://a", repo.getUrl() );
-
-        repo = mirrorBuilder.getMirrorRepository( getRepo( "b", "http://a.a" ) );
-        assertEquals( "http://b", repo.getUrl() );
-
-        repo = mirrorBuilder.getMirrorRepository( getRepo( "c", "http://c.c" ) );
-        assertEquals( "http://wildcard", repo.getUrl() );
+        // exact matches win first
+        Mirror mirrorA2 = newMirror( "a2", "a,b", "http://a2" );
+        Mirror mirrorA = newMirror( "a", "a", "http://a" );
+        // make sure repeated entries are skipped
+        Mirror mirrorA3 = newMirror( "a", "a", "http://a3" );
 
-        repo = mirrorBuilder.getMirrorRepository( getRepo( "d", "http://d" ) );
-        assertEquals( "http://de", repo.getUrl() );
+        Mirror mirrorB = newMirror( "b", "b", "http://b" );
+        Mirror mirrorC = newMirror( "c", "d,e", "http://de" );
+        Mirror mirrorC2 = newMirror( "c", "*", "http://wildcard" );
+        Mirror mirrorC3 = newMirror( "c", "e,f", "http://ef" );
 
-        repo = mirrorBuilder.getMirrorRepository( getRepo( "e", "http://e" ) );
-        assertEquals( "http://de", repo.getUrl() );
+        List<Mirror> mirrors = Arrays.asList( mirrorA2, mirrorA, mirrorA3, mirrorB, mirrorC, mirrorC2, mirrorC3 );
 
-        repo = mirrorBuilder.getMirrorRepository( getRepo( "f", "http://f" ) );
-        assertEquals( "http://wildcard", repo.getUrl() );
+        assertSame( mirrorA, mirrorSelector.getMirror( getRepo( "a", "http://a.a" ), mirrors ) );
 
-    }
+        assertSame( mirrorB, mirrorSelector.getMirror( getRepo( "b", "http://a.a" ), mirrors ) );
 
+        assertSame( mirrorC2, mirrorSelector.getMirror( getRepo( "c", "http://c.c" ), mirrors ) );
 
-    public void testPatterns()
-    {
-        assertTrue( DefaultMirrorBuilder.matchPattern( getRepo( "a" ), "*" ) );
-        assertTrue( DefaultMirrorBuilder.matchPattern( getRepo( "a" ), "*," ) );
-        assertTrue( DefaultMirrorBuilder.matchPattern( getRepo( "a" ), ",*," ) );
-        assertTrue( DefaultMirrorBuilder.matchPattern( getRepo( "a" ), "*," ) );
-
-        assertTrue( DefaultMirrorBuilder.matchPattern( getRepo( "a" ), "a" ) );
-        assertTrue( DefaultMirrorBuilder.matchPattern( getRepo( "a" ), "a," ) );
-        assertTrue( DefaultMirrorBuilder.matchPattern( getRepo( "a" ), ",a," ) );
-        assertTrue( DefaultMirrorBuilder.matchPattern( getRepo( "a" ), "a," ) );
-
-        assertFalse( DefaultMirrorBuilder.matchPattern( getRepo( "b" ), "a" ) );
-        assertFalse( DefaultMirrorBuilder.matchPattern( getRepo( "b" ), "a," ) );
-        assertFalse( DefaultMirrorBuilder.matchPattern( getRepo( "b" ), ",a" ) );
-        assertFalse( DefaultMirrorBuilder.matchPattern( getRepo( "b" ), ",a," ) );
-
-        assertTrue( DefaultMirrorBuilder.matchPattern( getRepo( "a" ), "a,b" ) );
-        assertTrue( DefaultMirrorBuilder.matchPattern( getRepo( "b" ), "a,b" ) );
-
-        assertFalse( DefaultMirrorBuilder.matchPattern( getRepo( "c" ), "a,b" ) );
-
-        assertTrue( DefaultMirrorBuilder.matchPattern( getRepo( "a" ), "*" ) );
-        assertTrue( DefaultMirrorBuilder.matchPattern( getRepo( "a" ), "*,b" ) );
-        assertTrue( DefaultMirrorBuilder.matchPattern( getRepo( "a" ), "*,!b" ) );
+        assertSame( mirrorC, mirrorSelector.getMirror( getRepo( "d", "http://d" ), mirrors ) );
 
-        assertFalse( DefaultMirrorBuilder.matchPattern( getRepo( "a" ), "*,!a" ) );
-        assertFalse( DefaultMirrorBuilder.matchPattern( getRepo( "a" ), "!a,*" ) );
+        assertSame( mirrorC, mirrorSelector.getMirror( getRepo( "e", "http://e" ), mirrors ) );
 
-        assertTrue( DefaultMirrorBuilder.matchPattern( getRepo( "c" ), "*,!a" ) );
-        assertTrue( DefaultMirrorBuilder.matchPattern( getRepo( "c" ), "!a,*" ) );
-
-        assertFalse( DefaultMirrorBuilder.matchPattern( getRepo( "c" ), "!a,!c" ) );
-        assertFalse( DefaultMirrorBuilder.matchPattern( getRepo( "d" ), "!a,!c*" ) );
+        assertSame( mirrorC2, mirrorSelector.getMirror( getRepo( "f", "http://f" ), mirrors ) );
     }
 
-    public void testPatternsWithExternal()
+    public void testPatterns()
     {
-        assertTrue( DefaultMirrorBuilder.matchPattern( getRepo( "a", "http://localhost" ), "*" ) );
-        assertFalse( DefaultMirrorBuilder.matchPattern( getRepo( "a", "http://localhost" ), "external:*" ) );
+        assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a" ), "*" ) );
+        assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a" ), "*," ) );
+        assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a" ), ",*," ) );
+        assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a" ), "*," ) );
+
+        assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a" ), "a" ) );
+        assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a" ), "a," ) );
+        assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a" ), ",a," ) );
+        assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a" ), "a," ) );
+
+        assertFalse( DefaultMirrorSelector.matchPattern( getRepo( "b" ), "a" ) );
+        assertFalse( DefaultMirrorSelector.matchPattern( getRepo( "b" ), "a," ) );
+        assertFalse( DefaultMirrorSelector.matchPattern( getRepo( "b" ), ",a" ) );
+        assertFalse( DefaultMirrorSelector.matchPattern( getRepo( "b" ), ",a," ) );
+
+        assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a" ), "a,b" ) );
+        assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "b" ), "a,b" ) );
+
+        assertFalse( DefaultMirrorSelector.matchPattern( getRepo( "c" ), "a,b" ) );
+
+        assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a" ), "*" ) );
+        assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a" ), "*,b" ) );
+        assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a" ), "*,!b" ) );
+
+        assertFalse( DefaultMirrorSelector.matchPattern( getRepo( "a" ), "*,!a" ) );
+        assertFalse( DefaultMirrorSelector.matchPattern( getRepo( "a" ), "!a,*" ) );
 
-        assertTrue( DefaultMirrorBuilder.matchPattern( getRepo( "a", "http://localhost" ), "external:*,a" ) );
-        assertFalse( DefaultMirrorBuilder.matchPattern( getRepo( "a", "http://localhost" ), "external:*,!a" ) );
-        assertTrue( DefaultMirrorBuilder.matchPattern( getRepo( "a", "http://localhost" ), "a,external:*" ) );
-        assertFalse( DefaultMirrorBuilder.matchPattern( getRepo( "a", "http://localhost" ), "!a,external:*" ) );
+        assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "c" ), "*,!a" ) );
+        assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "c" ), "!a,*" ) );
 
-        assertFalse( DefaultMirrorBuilder.matchPattern( getRepo( "c", "http://localhost" ), "!a,external:*" ) );
-        assertTrue( DefaultMirrorBuilder.matchPattern( getRepo( "c", "http://somehost" ), "!a,external:*" ) );
+        assertFalse( DefaultMirrorSelector.matchPattern( getRepo( "c" ), "!a,!c" ) );
+        assertFalse( DefaultMirrorSelector.matchPattern( getRepo( "d" ), "!a,!c*" ) );
     }
 
-    public void testMirrorProperUrlAndProtocolAndBasedir()
+    public void testPatternsWithExternal()
     {
-        mirrorBuilder.addMirror( "mirror-id", "central", "file:///tmp", null );
+        assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a", "http://localhost" ), "*" ) );
+        assertFalse( DefaultMirrorSelector.matchPattern( getRepo( "a", "http://localhost" ), "external:*" ) );
 
-        List<ArtifactRepository> repos = Arrays.asList( getRepo( "central", "http://repo1.maven.org" ) );
-        repos = mirrorBuilder.getMirrors( repos );
+        assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a", "http://localhost" ), "external:*,a" ) );
+        assertFalse( DefaultMirrorSelector.matchPattern( getRepo( "a", "http://localhost" ), "external:*,!a" ) );
+        assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a", "http://localhost" ), "a,external:*" ) );
+        assertFalse( DefaultMirrorSelector.matchPattern( getRepo( "a", "http://localhost" ), "!a,external:*" ) );
 
-        ArtifactRepository repo = repos.get( 0 );
-        assertEquals( "file:///tmp", repo.getUrl() );
-        assertEquals( "file", repo.getProtocol() );
-        assertEquals( File.separator + "tmp", repo.getBasedir() );
+        assertFalse( DefaultMirrorSelector.matchPattern( getRepo( "c", "http://localhost" ), "!a,external:*" ) );
+        assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "c", "http://somehost" ), "!a,external:*" ) );
     }
 
     /**
@@ -232,4 +202,16 @@
     {
         return getRepo( id, "http://something" );
     }
+
+    private Mirror newMirror( String id, String mirrorOf, String url )
+    {
+        Mirror mirror = new Mirror();
+
+        mirror.setId( id );
+        mirror.setMirrorOf( mirrorOf );
+        mirror.setUrl( url );
+
+        return mirror;
+    }
+
 }