You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jd...@apache.org on 2011/05/24 04:16:50 UTC

svn commit: r1126825 [1/2] - in /maven/maven-3/branches/mirror-group-routing: maven-core/src/main/java/org/apache/maven/ maven-core/src/main/java/org/apache/maven/execution/ maven-embedder/src/main/java/org/apache/maven/cli/

Author: jdcasey
Date: Tue May 24 02:16:50 2011
New Revision: 1126825

URL: http://svn.apache.org/viewvc?rev=1126825&view=rev
Log:
Reshuffling routing-table loader/selection infra, and modifying aether-based mirror selection implementation to try conventional mirroring, then fall back to routing table.

Modified:
    maven/maven-3/branches/mirror-group-routing/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
    maven/maven-3/branches/mirror-group-routing/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java
    maven/maven-3/branches/mirror-group-routing/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java
    maven/maven-3/branches/mirror-group-routing/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java
    maven/maven-3/branches/mirror-group-routing/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java

Modified: maven/maven-3/branches/mirror-group-routing/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
URL: http://svn.apache.org/viewvc/maven/maven-3/branches/mirror-group-routing/maven-core/src/main/java/org/apache/maven/DefaultMaven.java?rev=1126825&r1=1126824&r2=1126825&view=diff
==============================================================================
--- maven/maven-3/branches/mirror-group-routing/maven-core/src/main/java/org/apache/maven/DefaultMaven.java (original)
+++ maven/maven-3/branches/mirror-group-routing/maven-core/src/main/java/org/apache/maven/DefaultMaven.java Tue May 24 02:16:50 2011
@@ -15,22 +15,6 @@ package org.apache.maven;
  * the License.
  */
 
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashSet;
-import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-
 import org.apache.maven.artifact.ArtifactUtils;
 import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
 import org.apache.maven.eventspy.internal.EventSpyDispatcher;
@@ -58,6 +42,7 @@ import org.apache.maven.project.ProjectB
 import org.apache.maven.project.ProjectSorter;
 import org.apache.maven.repository.DelegatingLocalArtifactRepository;
 import org.apache.maven.repository.LocalRepositoryNotAccessibleException;
+import org.apache.maven.repository.mirror.RoutingMirrorSelector;
 import org.apache.maven.settings.Mirror;
 import org.apache.maven.settings.Proxy;
 import org.apache.maven.settings.Server;
@@ -93,20 +78,35 @@ import org.sonatype.aether.util.graph.se
 import org.sonatype.aether.util.graph.selector.OptionalDependencySelector;
 import org.sonatype.aether.util.graph.selector.ScopeDependencySelector;
 import org.sonatype.aether.util.graph.transformer.ChainedDependencyGraphTransformer;
-import org.sonatype.aether.util.graph.transformer.NearestVersionConflictResolver;
 import org.sonatype.aether.util.graph.transformer.ConflictMarker;
 import org.sonatype.aether.util.graph.transformer.JavaDependencyContextRefiner;
 import org.sonatype.aether.util.graph.transformer.JavaEffectiveScopeCalculator;
+import org.sonatype.aether.util.graph.transformer.NearestVersionConflictResolver;
 import org.sonatype.aether.util.graph.traverser.FatArtifactTraverser;
 import org.sonatype.aether.util.repository.ChainedWorkspaceReader;
 import org.sonatype.aether.util.repository.DefaultAuthenticationSelector;
-import org.sonatype.aether.util.repository.DefaultMirrorSelector;
 import org.sonatype.aether.util.repository.DefaultProxySelector;
 
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
 /**
  * @author Jason van Zyl
  */
-@Component(role = Maven.class)
+@Component( role = Maven.class )
 public class DefaultMaven
     implements Maven
 {
@@ -147,7 +147,7 @@ public class DefaultMaven
     @Requirement
     private EventSpyDispatcher eventSpyDispatcher;
 
-    public MavenExecutionResult execute( MavenExecutionRequest request )
+    public MavenExecutionResult execute( final MavenExecutionRequest request )
     {
         MavenExecutionResult result;
 
@@ -155,15 +155,15 @@ public class DefaultMaven
         {
             result = doExecute( populator.populateDefaults( request ) );
         }
-        catch ( OutOfMemoryError e )
+        catch ( final OutOfMemoryError e )
         {
             result = processResult( new DefaultMavenExecutionResult(), e );
         }
-        catch ( MavenExecutionRequestPopulationException e )
+        catch ( final MavenExecutionRequestPopulationException e )
         {
             result = processResult( new DefaultMavenExecutionResult(), e );
         }
-        catch ( RuntimeException e )
+        catch ( final RuntimeException e )
         {
             result =
                 processResult( new DefaultMavenExecutionResult(),
@@ -177,46 +177,48 @@ public class DefaultMaven
         return result;
     }
 
-    @SuppressWarnings({"ThrowableInstanceNeverThrown", "ThrowableResultOfMethodCallIgnored"})
-    private MavenExecutionResult doExecute( MavenExecutionRequest request )
+    @SuppressWarnings( { "ThrowableInstanceNeverThrown", "ThrowableResultOfMethodCallIgnored" } )
+    private MavenExecutionResult doExecute( final MavenExecutionRequest request )
     {
-        //TODO: Need a general way to inject standard properties
+        // TODO: Need a general way to inject standard properties
         if ( request.getStartTime() != null )
         {
-            request.getSystemProperties().put( "${build.timestamp}", new SimpleDateFormat( "yyyyMMdd-hhmm" ).format( request.getStartTime() ) );
-        }        
-        
+            request.getSystemProperties()
+                   .put( "${build.timestamp}", new SimpleDateFormat( "yyyyMMdd-hhmm" ).format( request.getStartTime() ) );
+        }
+
         request.setStartTime( new Date() );
-        
-        MavenExecutionResult result = new DefaultMavenExecutionResult();
+
+        final MavenExecutionResult result = new DefaultMavenExecutionResult();
 
         try
         {
             validateLocalRepository( request );
         }
-        catch ( LocalRepositoryNotAccessibleException e )
+        catch ( final LocalRepositoryNotAccessibleException e )
         {
             return processResult( result, e );
         }
 
-        DelegatingLocalArtifactRepository delegatingLocalArtifactRepository =
+        final DelegatingLocalArtifactRepository delegatingLocalArtifactRepository =
             new DelegatingLocalArtifactRepository( request.getLocalRepository() );
-        
-        request.setLocalRepository( delegatingLocalArtifactRepository );        
 
-        DefaultRepositorySystemSession repoSession = (DefaultRepositorySystemSession) newRepositorySession( request );
+        request.setLocalRepository( delegatingLocalArtifactRepository );
+
+        final DefaultRepositorySystemSession repoSession =
+            (DefaultRepositorySystemSession) newRepositorySession( request );
 
-        MavenSession session = new MavenSession( container, repoSession, request, result );
+        final MavenSession session = new MavenSession( container, repoSession, request, result );
         legacySupport.setSession( session );
 
         try
         {
-            for ( AbstractMavenLifecycleParticipant listener : getLifecycleParticipants( Collections.<MavenProject> emptyList() ) )
+            for ( final AbstractMavenLifecycleParticipant listener : getLifecycleParticipants( Collections.<MavenProject> emptyList() ) )
             {
                 listener.afterSessionStart( session );
             }
         }
-        catch ( MavenExecutionException e )
+        catch ( final MavenExecutionException e )
         {
             return processResult( result, e );
         }
@@ -225,14 +227,14 @@ public class DefaultMaven
 
         request.getProjectBuildingRequest().setRepositorySession( session.getRepositorySession() );
 
-        //TODO: optimize for the single project or no project
-        
+        // TODO: optimize for the single project or no project
+
         List<MavenProject> projects;
         try
         {
-            projects = getProjectsForMavenReactor( request );                                                
+            projects = getProjectsForMavenReactor( request );
         }
-        catch ( ProjectBuildingException e )
+        catch ( final ProjectBuildingException e )
         {
             return processResult( result, e );
         }
@@ -240,40 +242,40 @@ public class DefaultMaven
         session.setProjects( projects );
 
         result.setTopologicallySortedProjects( session.getProjects() );
-        
+
         result.setProject( session.getTopLevelProject() );
 
         try
         {
             Map<String, MavenProject> projectMap;
             projectMap = getProjectMap( session.getProjects() );
-    
+
             // Desired order of precedence for local artifact repositories
             //
             // Reactor
             // Workspace
             // User Local Repository
-            ReactorReader reactorRepository = new ReactorReader( projectMap );
+            final ReactorReader reactorRepository = new ReactorReader( projectMap );
 
             repoSession.setWorkspaceReader( ChainedWorkspaceReader.newInstance( reactorRepository,
                                                                                 repoSession.getWorkspaceReader() ) );
         }
-        catch ( org.apache.maven.DuplicateProjectException e )
+        catch ( final org.apache.maven.DuplicateProjectException e )
         {
             return processResult( result, e );
         }
 
-        ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader();
+        final ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader();
         try
         {
-            for ( AbstractMavenLifecycleParticipant listener : getLifecycleParticipants( projects ) )
+            for ( final AbstractMavenLifecycleParticipant listener : getLifecycleParticipants( projects ) )
             {
                 Thread.currentThread().setContextClassLoader( listener.getClass().getClassLoader() );
 
                 listener.afterProjectsRead( session );
             }
         }
-        catch ( MavenExecutionException e )
+        catch ( final MavenExecutionException e )
         {
             return processResult( result, e );
         }
@@ -284,27 +286,27 @@ public class DefaultMaven
 
         try
         {
-            ProjectSorter projectSorter = new ProjectSorter( session.getProjects() );
+            final ProjectSorter projectSorter = new ProjectSorter( session.getProjects() );
 
-            ProjectDependencyGraph projectDependencyGraph = createDependencyGraph( projectSorter, request );
+            final ProjectDependencyGraph projectDependencyGraph = createDependencyGraph( projectSorter, request );
 
             session.setProjects( projectDependencyGraph.getSortedProjects() );
 
             session.setProjectDependencyGraph( projectDependencyGraph );
         }
-        catch ( CycleDetectedException e )
-        {            
-            String message = "The projects in the reactor contain a cyclic reference: " + e.getMessage();
+        catch ( final CycleDetectedException e )
+        {
+            final String message = "The projects in the reactor contain a cyclic reference: " + e.getMessage();
 
-            ProjectCycleException error = new ProjectCycleException( message, e );
+            final ProjectCycleException error = new ProjectCycleException( message, e );
 
             return processResult( result, error );
         }
-        catch ( DuplicateProjectException e )
+        catch ( final DuplicateProjectException e )
         {
             return processResult( result, e );
         }
-        catch ( MavenExecutionException e )
+        catch ( final MavenExecutionException e )
         {
             return processResult( result, e );
         }
@@ -328,15 +330,15 @@ public class DefaultMaven
         return result;
     }
 
-    public RepositorySystemSession newRepositorySession( MavenExecutionRequest request )
+    public RepositorySystemSession newRepositorySession( final MavenExecutionRequest request )
     {
-        DefaultRepositorySystemSession session = new DefaultRepositorySystemSession();
+        final DefaultRepositorySystemSession session = new DefaultRepositorySystemSession();
 
         session.setCache( request.getRepositoryCache() );
 
         session.setIgnoreInvalidArtifactDescriptor( true ).setIgnoreMissingArtifactDescriptor( true );
 
-        Map<Object, Object> configProps = new LinkedHashMap<Object, Object>();
+        final Map<Object, Object> configProps = new LinkedHashMap<Object, Object>();
         configProps.put( ConfigurationProperties.USER_AGENT, getUserAgent() );
         configProps.put( ConfigurationProperties.INTERACTIVE, Boolean.valueOf( request.isInteractiveMode() ) );
         configProps.putAll( request.getSystemProperties() );
@@ -351,7 +353,7 @@ public class DefaultMaven
 
         session.setArtifactTypeRegistry( RepositoryUtils.newArtifactTypeRegistry( artifactHandlerManager ) );
 
-        LocalRepository localRepo = new LocalRepository( request.getLocalRepository().getBasedir() );
+        final LocalRepository localRepo = new LocalRepository( request.getLocalRepository().getBasedir() );
         session.setLocalRepositoryManager( repoSystem.newLocalRepositoryManager( localRepo ) );
 
         if ( request.getWorkspaceReader() != null )
@@ -363,57 +365,61 @@ public class DefaultMaven
             session.setWorkspaceReader( workspaceRepository );
         }
 
-        DefaultSettingsDecryptionRequest decrypt = new DefaultSettingsDecryptionRequest();
+        final DefaultSettingsDecryptionRequest decrypt = new DefaultSettingsDecryptionRequest();
         decrypt.setProxies( request.getProxies() );
         decrypt.setServers( request.getServers() );
-        SettingsDecryptionResult decrypted = settingsDecrypter.decrypt( decrypt );
+        final SettingsDecryptionResult decrypted = settingsDecrypter.decrypt( decrypt );
 
         if ( logger.isDebugEnabled() )
         {
-            for ( SettingsProblem problem : decrypted.getProblems() )
+            for ( final SettingsProblem problem : decrypted.getProblems() )
             {
                 logger.debug( problem.getMessage(), problem.getException() );
             }
         }
 
-        DefaultMirrorSelector mirrorSelector = new DefaultMirrorSelector();
-        for ( Mirror mirror : request.getMirrors() )
+        final RoutingMirrorSelector mirrorSelector =
+            new RoutingMirrorSelector( request.getMirrorRoutingTable(), logger );
+        
+        for ( final Mirror mirror : request.getMirrors() )
         {
             mirrorSelector.add( mirror.getId(), mirror.getUrl(), mirror.getLayout(), false, mirror.getMirrorOf(),
                                 mirror.getMirrorOfLayouts() );
         }
+        
         session.setMirrorSelector( mirrorSelector );
 
-        DefaultProxySelector proxySelector = new DefaultProxySelector();
-        for ( Proxy proxy : decrypted.getProxies() )
+        final DefaultProxySelector proxySelector = new DefaultProxySelector();
+        for ( final Proxy proxy : decrypted.getProxies() )
         {
-            Authentication proxyAuth = new Authentication( proxy.getUsername(), proxy.getPassword() );
-            proxySelector.add( new org.sonatype.aether.repository.Proxy( proxy.getProtocol(), proxy.getHost(), proxy.getPort(),
-                                                                proxyAuth ), proxy.getNonProxyHosts() );
+            final Authentication proxyAuth = new Authentication( proxy.getUsername(), proxy.getPassword() );
+            proxySelector.add( new org.sonatype.aether.repository.Proxy( proxy.getProtocol(), proxy.getHost(),
+                                                                         proxy.getPort(), proxyAuth ),
+                               proxy.getNonProxyHosts() );
         }
         session.setProxySelector( proxySelector );
 
-        DefaultAuthenticationSelector authSelector = new DefaultAuthenticationSelector();
-        for ( Server server : decrypted.getServers() )
+        final DefaultAuthenticationSelector authSelector = new DefaultAuthenticationSelector();
+        for ( final Server server : decrypted.getServers() )
         {
-            Authentication auth =
+            final Authentication auth =
                 new Authentication( server.getUsername(), server.getPassword(), server.getPrivateKey(),
                                     server.getPassphrase() );
             authSelector.add( server.getId(), auth );
 
             if ( server.getConfiguration() != null )
             {
-                Xpp3Dom dom = (Xpp3Dom) server.getConfiguration();
+                final Xpp3Dom dom = (Xpp3Dom) server.getConfiguration();
                 for ( int i = dom.getChildCount() - 1; i >= 0; i-- )
                 {
-                    Xpp3Dom child = dom.getChild( i );
+                    final Xpp3Dom child = dom.getChild( i );
                     if ( "wagonProvider".equals( child.getName() ) )
                     {
                         dom.removeChild( i );
                     }
                 }
 
-                XmlPlexusConfiguration config = new XmlPlexusConfiguration( dom );
+                final XmlPlexusConfiguration config = new XmlPlexusConfiguration( dom );
                 configProps.put( "aether.connector.wagon.config." + server.getId(), config );
             }
 
@@ -422,18 +428,18 @@ public class DefaultMaven
         }
         session.setAuthenticationSelector( authSelector );
 
-        DependencyTraverser depTraverser = new FatArtifactTraverser();
+        final DependencyTraverser depTraverser = new FatArtifactTraverser();
         session.setDependencyTraverser( depTraverser );
 
-        DependencyManager depManager = new ClassicDependencyManager();
+        final DependencyManager depManager = new ClassicDependencyManager();
         session.setDependencyManager( depManager );
 
-        DependencySelector depFilter =
-            new AndDependencySelector( new ScopeDependencySelector( "test", "provided" ), new OptionalDependencySelector(),
-                                     new ExclusionDependencySelector() );
+        final DependencySelector depFilter =
+            new AndDependencySelector( new ScopeDependencySelector( "test", "provided" ),
+                                       new OptionalDependencySelector(), new ExclusionDependencySelector() );
         session.setDependencySelector( depFilter );
 
-        DependencyGraphTransformer transformer =
+        final DependencyGraphTransformer transformer =
             new ChainedDependencyGraphTransformer( new ConflictMarker(), new JavaEffectiveScopeCalculator(),
                                                    new NearestVersionConflictResolver(),
                                                    new JavaDependencyContextRefiner() );
@@ -452,7 +458,7 @@ public class DefaultMaven
 
     private String getUserAgent()
     {
-        StringBuilder buffer = new StringBuilder( 128 );
+        final StringBuilder buffer = new StringBuilder( 128 );
 
         buffer.append( "Apache-Maven/" ).append( getMavenVersion() );
         buffer.append( " (" );
@@ -466,16 +472,17 @@ public class DefaultMaven
 
     private String getMavenVersion()
     {
-        Properties props = new Properties();
+        final Properties props = new Properties();
 
-        InputStream is = getClass().getResourceAsStream( "/META-INF/maven/org.apache.maven/maven-core/pom.properties" );
+        final InputStream is =
+            getClass().getResourceAsStream( "/META-INF/maven/org.apache.maven/maven-core/pom.properties" );
         if ( is != null )
         {
             try
             {
                 props.load( is );
             }
-            catch ( IOException e )
+            catch ( final IOException e )
             {
                 logger.debug( "Failed to read Maven version", e );
             }
@@ -485,11 +492,11 @@ public class DefaultMaven
         return props.getProperty( "version", "unknown-version" );
     }
 
-    @SuppressWarnings({"ResultOfMethodCallIgnored"})
-    private void validateLocalRepository( MavenExecutionRequest request )
+    @SuppressWarnings( { "ResultOfMethodCallIgnored" } )
+    private void validateLocalRepository( final MavenExecutionRequest request )
         throws LocalRepositoryNotAccessibleException
     {
-        File localRepoDir = request.getLocalRepositoryPath();
+        final File localRepoDir = request.getLocalRepositoryPath();
 
         logger.debug( "Using local repository at " + localRepoDir );
 
@@ -501,29 +508,29 @@ public class DefaultMaven
         }
     }
 
-    private Collection<AbstractMavenLifecycleParticipant> getLifecycleParticipants( Collection<MavenProject> projects )
+    private Collection<AbstractMavenLifecycleParticipant> getLifecycleParticipants( final Collection<MavenProject> projects )
     {
-        Collection<AbstractMavenLifecycleParticipant> lifecycleListeners =
+        final Collection<AbstractMavenLifecycleParticipant> lifecycleListeners =
             new LinkedHashSet<AbstractMavenLifecycleParticipant>();
 
-        ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader();
+        final ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader();
         try
         {
             try
             {
                 lifecycleListeners.addAll( container.lookupList( AbstractMavenLifecycleParticipant.class ) );
             }
-            catch ( ComponentLookupException e )
+            catch ( final ComponentLookupException e )
             {
                 // this is just silly, lookupList should return an empty list!
                 logger.warn( "Failed to lookup lifecycle participants: " + e.getMessage() );
             }
 
-            Collection<ClassLoader> scannedRealms = new HashSet<ClassLoader>();
+            final Collection<ClassLoader> scannedRealms = new HashSet<ClassLoader>();
 
-            for ( MavenProject project : projects )
+            for ( final MavenProject project : projects )
             {
-                ClassLoader projectRealm = project.getClassRealm();
+                final ClassLoader projectRealm = project.getClassRealm();
 
                 if ( projectRealm != null && scannedRealms.add( projectRealm ) )
                 {
@@ -533,7 +540,7 @@ public class DefaultMaven
                     {
                         lifecycleListeners.addAll( container.lookupList( AbstractMavenLifecycleParticipant.class ) );
                     }
-                    catch ( ComponentLookupException e )
+                    catch ( final ComponentLookupException e )
                     {
                         // this is just silly, lookupList should return an empty list!
                         logger.warn( "Failed to lookup lifecycle participants: " + e.getMessage() );
@@ -549,7 +556,7 @@ public class DefaultMaven
         return lifecycleListeners;
     }
 
-    private MavenExecutionResult processResult( MavenExecutionResult result, Throwable e )
+    private MavenExecutionResult processResult( final MavenExecutionResult result, final Throwable e )
     {
         if ( !result.getExceptions().contains( e ) )
         {
@@ -558,41 +565,43 @@ public class DefaultMaven
 
         return result;
     }
-    
-    private List<MavenProject> getProjectsForMavenReactor( MavenExecutionRequest request )
+
+    private List<MavenProject> getProjectsForMavenReactor( final MavenExecutionRequest request )
         throws ProjectBuildingException
     {
-        List<MavenProject> projects =  new ArrayList<MavenProject>();
+        final List<MavenProject> projects = new ArrayList<MavenProject>();
 
         // We have no POM file.
         //
         if ( request.getPom() == null )
         {
-            ModelSource modelSource = new UrlModelSource( DefaultMaven.class.getResource( "project/standalone.xml" ) );
-            MavenProject project =
+            final ModelSource modelSource =
+                new UrlModelSource( DefaultMaven.class.getResource( "project/standalone.xml" ) );
+            final MavenProject project =
                 projectBuilder.build( modelSource, request.getProjectBuildingRequest() ).getProject();
             project.setExecutionRoot( true );
             projects.add( project );
             request.setProjectPresent( false );
             return projects;
         }
-        
-        List<File> files = Arrays.asList( request.getPom().getAbsoluteFile() );        
+
+        final List<File> files = Arrays.asList( request.getPom().getAbsoluteFile() );
         collectProjects( projects, files, request );
         return projects;
     }
 
-    private Map<String, MavenProject> getProjectMap( List<MavenProject> projects )
+    private Map<String, MavenProject> getProjectMap( final List<MavenProject> projects )
         throws org.apache.maven.DuplicateProjectException
     {
-        Map<String, MavenProject> index = new LinkedHashMap<String, MavenProject>();
-        Map<String, List<File>> collisions = new LinkedHashMap<String, List<File>>();
+        final Map<String, MavenProject> index = new LinkedHashMap<String, MavenProject>();
+        final Map<String, List<File>> collisions = new LinkedHashMap<String, List<File>>();
 
-        for ( MavenProject project : projects )
+        for ( final MavenProject project : projects )
         {
-            String projectId = ArtifactUtils.key( project.getGroupId(), project.getArtifactId(), project.getVersion() );
+            final String projectId =
+                ArtifactUtils.key( project.getGroupId(), project.getArtifactId(), project.getVersion() );
 
-            MavenProject collision = index.get( projectId );
+            final MavenProject collision = index.get( projectId );
 
             if ( collision == null )
             {
@@ -617,23 +626,25 @@ public class DefaultMaven
         if ( !collisions.isEmpty() )
         {
             throw new org.apache.maven.DuplicateProjectException( "Two or more projects in the reactor"
-                + " have the same identifier, please make sure that <groupId>:<artifactId>:<version>"
-                + " is unique for each project: " + collisions, collisions );
+                            + " have the same identifier, please make sure that <groupId>:<artifactId>:<version>"
+                            + " is unique for each project: " + collisions, collisions );
         }
 
         return index;
     }
 
-    private void collectProjects( List<MavenProject> projects, List<File> files, MavenExecutionRequest request )
+    private void collectProjects( final List<MavenProject> projects, final List<File> files,
+                                  final MavenExecutionRequest request )
         throws ProjectBuildingException
     {
-        ProjectBuildingRequest projectBuildingRequest = request.getProjectBuildingRequest();
+        final ProjectBuildingRequest projectBuildingRequest = request.getProjectBuildingRequest();
 
-        List<ProjectBuildingResult> results = projectBuilder.build( files, request.isRecursive(), projectBuildingRequest );
+        final List<ProjectBuildingResult> results =
+            projectBuilder.build( files, request.isRecursive(), projectBuildingRequest );
 
         boolean problems = false;
 
-        for ( ProjectBuildingResult result : results )
+        for ( final ProjectBuildingResult result : results )
         {
             projects.add( result.getProject() );
 
@@ -641,11 +652,11 @@ public class DefaultMaven
             {
                 logger.warn( "" );
                 logger.warn( "Some problems were encountered while building the effective model for "
-                    + result.getProject().getId() );
+                                + result.getProject().getId() );
 
-                for ( ModelProblem problem : result.getProblems() )
+                for ( final ModelProblem problem : result.getProblems() )
                 {
-                    String location = ModelProblemUtils.formatLocation( problem, result.getProjectId() );
+                    final String location = ModelProblemUtils.formatLocation( problem, result.getProjectId() );
                     logger.warn( problem.getMessage() + ( StringUtils.isNotEmpty( location ) ? " @ " + location : "" ) );
                 }
 
@@ -657,30 +668,30 @@ public class DefaultMaven
         {
             logger.warn( "" );
             logger.warn( "It is highly recommended to fix these problems"
-                + " because they threaten the stability of your build." );
+                            + " because they threaten the stability of your build." );
             logger.warn( "" );
             logger.warn( "For this reason, future Maven versions might no"
-                + " longer support building such malformed projects." );
+                            + " longer support building such malformed projects." );
             logger.warn( "" );
         }
     }
 
-    private void validateActivatedProfiles( List<MavenProject> projects, List<String> activeProfileIds )
+    private void validateActivatedProfiles( final List<MavenProject> projects, final List<String> activeProfileIds )
     {
-        Collection<String> notActivatedProfileIds = new LinkedHashSet<String>( activeProfileIds );
+        final Collection<String> notActivatedProfileIds = new LinkedHashSet<String>( activeProfileIds );
 
-        for ( MavenProject project : projects )
+        for ( final MavenProject project : projects )
         {
-            for ( List<String> profileIds : project.getInjectedProfileIds().values() )
+            for ( final List<String> profileIds : project.getInjectedProfileIds().values() )
             {
                 notActivatedProfileIds.removeAll( profileIds );
             }
         }
 
-        for ( String notActivatedProfileId : notActivatedProfileIds )
+        for ( final String notActivatedProfileId : notActivatedProfileIds )
         {
             logger.warn( "The requested profile \"" + notActivatedProfileId
-                + "\" could not be activated because it does not exist." );
+                            + "\" could not be activated because it does not exist." );
         }
     }
 
@@ -689,7 +700,8 @@ public class DefaultMaven
         return logger;
     }
 
-    private ProjectDependencyGraph createDependencyGraph( ProjectSorter sorter, MavenExecutionRequest request )
+    private ProjectDependencyGraph createDependencyGraph( final ProjectSorter sorter,
+                                                          final MavenExecutionRequest request )
         throws MavenExecutionException
     {
         ProjectDependencyGraph graph = new DefaultProjectDependencyGraph( sorter );
@@ -707,8 +719,9 @@ public class DefaultMaven
         return graph;
     }
 
-    private List<MavenProject> trimSelectedProjects( List<MavenProject> projects, ProjectDependencyGraph graph,
-                                                     MavenExecutionRequest request )
+    private List<MavenProject> trimSelectedProjects( final List<MavenProject> projects,
+                                                     final ProjectDependencyGraph graph,
+                                                     final MavenExecutionRequest request )
         throws MavenExecutionException
     {
         List<MavenProject> result = projects;
@@ -721,13 +734,13 @@ public class DefaultMaven
                 reactorDirectory = new File( request.getBaseDirectory() );
             }
 
-            Collection<MavenProject> selectedProjects = new LinkedHashSet<MavenProject>( projects.size() );
+            final Collection<MavenProject> selectedProjects = new LinkedHashSet<MavenProject>( projects.size() );
 
-            for ( String selector : request.getSelectedProjects() )
+            for ( final String selector : request.getSelectedProjects() )
             {
                 MavenProject selectedProject = null;
 
-                for ( MavenProject project : projects )
+                for ( final MavenProject project : projects )
                 {
                     if ( isMatchingProject( project, selector, reactorDirectory ) )
                     {
@@ -743,7 +756,7 @@ public class DefaultMaven
                 else
                 {
                     throw new MavenExecutionException( "Could not find the selected project in the reactor: "
-                        + selector, request.getPom() );
+                                    + selector, request.getPom() );
                 }
             }
 
@@ -771,7 +784,7 @@ public class DefaultMaven
 
             if ( makeUpstream || makeDownstream )
             {
-                for ( MavenProject selectedProject : new ArrayList<MavenProject>( selectedProjects ) )
+                for ( final MavenProject selectedProject : new ArrayList<MavenProject>( selectedProjects ) )
                 {
                     if ( makeUpstream )
                     {
@@ -786,7 +799,7 @@ public class DefaultMaven
 
             result = new ArrayList<MavenProject>( selectedProjects.size() );
 
-            for ( MavenProject project : projects )
+            for ( final MavenProject project : projects )
             {
                 if ( selectedProjects.contains( project ) )
                 {
@@ -798,7 +811,8 @@ public class DefaultMaven
         return result;
     }
 
-    private List<MavenProject> trimResumedProjects( List<MavenProject> projects, MavenExecutionRequest request )
+    private List<MavenProject> trimResumedProjects( final List<MavenProject> projects,
+                                                    final MavenExecutionRequest request )
         throws MavenExecutionException
     {
         List<MavenProject> result = projects;
@@ -811,13 +825,13 @@ public class DefaultMaven
                 reactorDirectory = new File( request.getBaseDirectory() );
             }
 
-            String selector = request.getResumeFrom();
+            final String selector = request.getResumeFrom();
 
             result = new ArrayList<MavenProject>( projects.size() );
 
             boolean resumed = false;
 
-            for ( MavenProject project : projects )
+            for ( final MavenProject project : projects )
             {
                 if ( !resumed && isMatchingProject( project, selector, reactorDirectory ) )
                 {
@@ -833,14 +847,14 @@ public class DefaultMaven
             if ( !resumed )
             {
                 throw new MavenExecutionException( "Could not find project to resume reactor build from: " + selector
-                    + " vs " + projects, request.getPom() );
+                                + " vs " + projects, request.getPom() );
             }
         }
 
         return result;
     }
 
-    private boolean isMatchingProject( MavenProject project, String selector, File reactorDirectory )
+    private boolean isMatchingProject( final MavenProject project, final String selector, final File reactorDirectory )
     {
         // [groupId]:artifactId
         if ( selector.indexOf( ':' ) >= 0 )
@@ -863,7 +877,7 @@ public class DefaultMaven
         // relative path, e.g. "sub", "../sub" or "."
         else if ( reactorDirectory != null )
         {
-            File selectedProject = new File( new File( reactorDirectory, selector ).toURI().normalize() );
+            final File selectedProject = new File( new File( reactorDirectory, selector ).toURI().normalize() );
 
             if ( selectedProject.isFile() )
             {

Modified: maven/maven-3/branches/mirror-group-routing/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java
URL: http://svn.apache.org/viewvc/maven/maven-3/branches/mirror-group-routing/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java?rev=1126825&r1=1126824&r2=1126825&view=diff
==============================================================================
--- maven/maven-3/branches/mirror-group-routing/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java (original)
+++ maven/maven-3/branches/mirror-group-routing/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java Tue May 24 02:16:50 2011
@@ -19,16 +19,11 @@ package org.apache.maven.execution;
  * under the License.
  */
 
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Properties;
-
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.model.Profile;
 import org.apache.maven.project.DefaultProjectBuildingRequest;
 import org.apache.maven.project.ProjectBuildingRequest;
+import org.apache.maven.repository.automirror.MirrorRoutingTable;
 import org.apache.maven.settings.Mirror;
 import org.apache.maven.settings.Proxy;
 import org.apache.maven.settings.Server;
@@ -37,6 +32,12 @@ import org.sonatype.aether.repository.Wo
 import org.sonatype.aether.transfer.TransferListener;
 import org.sonatype.aether.util.DefaultRepositoryCache;
 
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Properties;
+
 /**
  * @author Jason van Zyl
  */
@@ -138,7 +139,7 @@ public class DefaultMavenExecutionReques
 
     /**
      * Suppress SNAPSHOT updates.
-     *
+     * 
      * @issue MNG-2681
      */
     private boolean noSnapshotUpdates;
@@ -147,9 +148,9 @@ public class DefaultMavenExecutionReques
     {
     }
 
-    public static MavenExecutionRequest copy( MavenExecutionRequest original )
+    public static MavenExecutionRequest copy( final MavenExecutionRequest original )
     {
-        DefaultMavenExecutionRequest copy = new DefaultMavenExecutionRequest();
+        final DefaultMavenExecutionRequest copy = new DefaultMavenExecutionRequest();
         copy.setLocalRepository( original.getLocalRepository() );
         copy.setLocalRepositoryPath( original.getLocalRepositoryPath() );
         copy.setOffline( original.isOffline() );
@@ -165,8 +166,7 @@ public class DefaultMavenExecutionReques
         copy.setUserSettingsFile( original.getUserSettingsFile() );
         copy.setGlobalSettingsFile( original.getGlobalSettingsFile() );
         copy.setUserToolchainsFile( original.getUserToolchainsFile() );
-        copy.setBaseDirectory( ( original.getBaseDirectory() != null )
-                               ? new File( original.getBaseDirectory() ) : null );
+        copy.setBaseDirectory( ( original.getBaseDirectory() != null ) ? new File( original.getBaseDirectory() ) : null );
         copy.setGoals( original.getGoals() );
         copy.setRecursive( original.isRecursive() );
         copy.setPom( original.getPom() );
@@ -185,6 +185,7 @@ public class DefaultMavenExecutionReques
         copy.setWorkspaceReader( original.getWorkspaceReader() );
         copy.setNoSnapshotUpdates( original.isNoSnapshotUpdates() );
         copy.setExecutionListener( original.getExecutionListener() );
+        copy.setMirrorRoutingTable( original.getMirrorRoutingTable() );
         return copy;
     }
 
@@ -282,7 +283,7 @@ public class DefaultMavenExecutionReques
         return interactiveMode;
     }
 
-    public MavenExecutionRequest setActiveProfiles( List<String> activeProfiles )
+    public MavenExecutionRequest setActiveProfiles( final List<String> activeProfiles )
     {
         if ( activeProfiles != null )
         {
@@ -296,7 +297,7 @@ public class DefaultMavenExecutionReques
         return this;
     }
 
-    public MavenExecutionRequest setInactiveProfiles( List<String> inactiveProfiles )
+    public MavenExecutionRequest setInactiveProfiles( final List<String> inactiveProfiles )
     {
         if ( inactiveProfiles != null )
         {
@@ -310,7 +311,7 @@ public class DefaultMavenExecutionReques
         return this;
     }
 
-    public MavenExecutionRequest setRemoteRepositories( List<ArtifactRepository> remoteRepositories )
+    public MavenExecutionRequest setRemoteRepositories( final List<ArtifactRepository> remoteRepositories )
     {
         if ( remoteRepositories != null )
         {
@@ -324,7 +325,7 @@ public class DefaultMavenExecutionReques
         return this;
     }
 
-    public MavenExecutionRequest setPluginArtifactRepositories( List<ArtifactRepository> pluginArtifactRepositories )
+    public MavenExecutionRequest setPluginArtifactRepositories( final List<ArtifactRepository> pluginArtifactRepositories )
     {
         if ( pluginArtifactRepositories != null )
         {
@@ -338,9 +339,9 @@ public class DefaultMavenExecutionReques
         return this;
     }
 
-    public void setProjectBuildingConfiguration( ProjectBuildingRequest projectBuildingConfiguration )
+    public void setProjectBuildingConfiguration( final ProjectBuildingRequest projectBuildingConfiguration )
     {
-        this.projectBuildingRequest = projectBuildingConfiguration;
+        projectBuildingRequest = projectBuildingConfiguration;
     }
 
     public List<String> getActiveProfiles()
@@ -400,28 +401,28 @@ public class DefaultMavenExecutionReques
     //
     // ----------------------------------------------------------------------
 
-    public MavenExecutionRequest setBaseDirectory( File basedir )
+    public MavenExecutionRequest setBaseDirectory( final File basedir )
     {
         this.basedir = basedir;
 
         return this;
     }
 
-    public MavenExecutionRequest setStartTime( Date startTime )
+    public MavenExecutionRequest setStartTime( final Date startTime )
     {
         this.startTime = startTime;
 
         return this;
     }
 
-    public MavenExecutionRequest setShowErrors( boolean showErrors )
+    public MavenExecutionRequest setShowErrors( final boolean showErrors )
     {
         this.showErrors = showErrors;
 
         return this;
     }
 
-    public MavenExecutionRequest setGoals( List<String> goals )
+    public MavenExecutionRequest setGoals( final List<String> goals )
     {
         if ( goals != null )
         {
@@ -435,7 +436,7 @@ public class DefaultMavenExecutionReques
         return this;
     }
 
-    public MavenExecutionRequest setLocalRepository( ArtifactRepository localRepository )
+    public MavenExecutionRequest setLocalRepository( final ArtifactRepository localRepository )
     {
         this.localRepository = localRepository;
 
@@ -447,36 +448,36 @@ public class DefaultMavenExecutionReques
         return this;
     }
 
-    public MavenExecutionRequest setLocalRepositoryPath( File localRepository )
+    public MavenExecutionRequest setLocalRepositoryPath( final File localRepository )
     {
         localRepositoryPath = localRepository;
 
         return this;
     }
 
-    public MavenExecutionRequest setLocalRepositoryPath( String localRepository )
+    public MavenExecutionRequest setLocalRepositoryPath( final String localRepository )
     {
         localRepositoryPath = ( localRepository != null ) ? new File( localRepository ) : null;
 
         return this;
     }
 
-    public MavenExecutionRequest setSystemProperties( Properties properties )
+    public MavenExecutionRequest setSystemProperties( final Properties properties )
     {
         if ( properties != null )
         {
-            this.systemProperties = new Properties();
-            this.systemProperties.putAll( properties );
+            systemProperties = new Properties();
+            systemProperties.putAll( properties );
         }
         else
         {
-            this.systemProperties = null;
+            systemProperties = null;
         }
 
         return this;
     }
 
-    public MavenExecutionRequest setUserProperties( Properties userProperties )
+    public MavenExecutionRequest setUserProperties( final Properties userProperties )
     {
         if ( userProperties != null )
         {
@@ -491,14 +492,14 @@ public class DefaultMavenExecutionReques
         return this;
     }
 
-    public MavenExecutionRequest setReactorFailureBehavior( String failureBehavior )
+    public MavenExecutionRequest setReactorFailureBehavior( final String failureBehavior )
     {
         reactorFailureBehavior = failureBehavior;
 
         return this;
     }
 
-    public MavenExecutionRequest setSelectedProjects( List<String> selectedProjects )
+    public MavenExecutionRequest setSelectedProjects( final List<String> selectedProjects )
     {
         if ( selectedProjects != null )
         {
@@ -512,21 +513,21 @@ public class DefaultMavenExecutionReques
         return this;
     }
 
-    public MavenExecutionRequest setResumeFrom( String project )
+    public MavenExecutionRequest setResumeFrom( final String project )
     {
-        this.resumeFrom = project;
+        resumeFrom = project;
 
         return this;
     }
 
-    public MavenExecutionRequest setMakeBehavior( String makeBehavior )
+    public MavenExecutionRequest setMakeBehavior( final String makeBehavior )
     {
         this.makeBehavior = makeBehavior;
 
         return this;
     }
 
-    public MavenExecutionRequest addActiveProfile( String profile )
+    public MavenExecutionRequest addActiveProfile( final String profile )
     {
         if ( !getActiveProfiles().contains( profile ) )
         {
@@ -536,7 +537,7 @@ public class DefaultMavenExecutionReques
         return this;
     }
 
-    public MavenExecutionRequest addInactiveProfile( String profile )
+    public MavenExecutionRequest addInactiveProfile( final String profile )
     {
         if ( !getInactiveProfiles().contains( profile ) )
         {
@@ -546,9 +547,9 @@ public class DefaultMavenExecutionReques
         return this;
     }
 
-    public MavenExecutionRequest addActiveProfiles( List<String> profiles )
+    public MavenExecutionRequest addActiveProfiles( final List<String> profiles )
     {
-        for ( String profile : profiles )
+        for ( final String profile : profiles )
         {
             addActiveProfile( profile );
         }
@@ -556,9 +557,9 @@ public class DefaultMavenExecutionReques
         return this;
     }
 
-    public MavenExecutionRequest addInactiveProfiles( List<String> profiles )
+    public MavenExecutionRequest addInactiveProfiles( final List<String> profiles )
     {
-        for ( String profile : profiles )
+        for ( final String profile : profiles )
         {
             addInactiveProfile( profile );
         }
@@ -566,7 +567,7 @@ public class DefaultMavenExecutionReques
         return this;
     }
 
-    public MavenExecutionRequest setUseReactor( boolean reactorActive )
+    public MavenExecutionRequest setUseReactor( final boolean reactorActive )
     {
         useReactor = reactorActive;
 
@@ -579,7 +580,8 @@ public class DefaultMavenExecutionReques
     }
 
     /** @deprecated use {@link #setPom(File)} */
-    public MavenExecutionRequest setPomFile( String pomFilename )
+    @Deprecated
+    public MavenExecutionRequest setPomFile( final String pomFilename )
     {
         if ( pomFilename != null )
         {
@@ -589,56 +591,56 @@ public class DefaultMavenExecutionReques
         return this;
     }
 
-    public MavenExecutionRequest setPom( File pom )
+    public MavenExecutionRequest setPom( final File pom )
     {
         this.pom = pom;
 
         return this;
     }
 
-    public MavenExecutionRequest setInteractiveMode( boolean interactive )
+    public MavenExecutionRequest setInteractiveMode( final boolean interactive )
     {
         interactiveMode = interactive;
 
         return this;
     }
 
-    public MavenExecutionRequest setTransferListener( TransferListener transferListener )
+    public MavenExecutionRequest setTransferListener( final TransferListener transferListener )
     {
         this.transferListener = transferListener;
 
         return this;
     }
 
-    public MavenExecutionRequest setLoggingLevel( int loggingLevel )
+    public MavenExecutionRequest setLoggingLevel( final int loggingLevel )
     {
         this.loggingLevel = loggingLevel;
 
         return this;
     }
 
-    public MavenExecutionRequest setOffline( boolean offline )
+    public MavenExecutionRequest setOffline( final boolean offline )
     {
         this.offline = offline;
 
         return this;
     }
 
-    public MavenExecutionRequest setUpdateSnapshots( boolean updateSnapshots )
+    public MavenExecutionRequest setUpdateSnapshots( final boolean updateSnapshots )
     {
         this.updateSnapshots = updateSnapshots;
 
         return this;
     }
 
-    public MavenExecutionRequest setNoSnapshotUpdates( boolean noSnapshotUpdates )
+    public MavenExecutionRequest setNoSnapshotUpdates( final boolean noSnapshotUpdates )
     {
         this.noSnapshotUpdates = noSnapshotUpdates;
 
         return this;
     }
 
-    public MavenExecutionRequest setGlobalChecksumPolicy( String globalChecksumPolicy )
+    public MavenExecutionRequest setGlobalChecksumPolicy( final String globalChecksumPolicy )
     {
         this.globalChecksumPolicy = globalChecksumPolicy;
 
@@ -658,7 +660,7 @@ public class DefaultMavenExecutionReques
         return proxies;
     }
 
-    public MavenExecutionRequest setProxies( List<Proxy> proxies )
+    public MavenExecutionRequest setProxies( final List<Proxy> proxies )
     {
         if ( proxies != null )
         {
@@ -672,14 +674,14 @@ public class DefaultMavenExecutionReques
         return this;
     }
 
-    public MavenExecutionRequest addProxy( Proxy proxy )
+    public MavenExecutionRequest addProxy( final Proxy proxy )
     {
         if ( proxy == null )
         {
             throw new IllegalArgumentException( "proxy missing" );
         }
 
-        for ( Proxy p : getProxies() )
+        for ( final Proxy p : getProxies() )
         {
             if ( p.getId() != null && p.getId().equals( proxy.getId() ) )
             {
@@ -701,7 +703,7 @@ public class DefaultMavenExecutionReques
         return servers;
     }
 
-    public MavenExecutionRequest setServers( List<Server> servers )
+    public MavenExecutionRequest setServers( final List<Server> servers )
     {
         if ( servers != null )
         {
@@ -715,14 +717,14 @@ public class DefaultMavenExecutionReques
         return this;
     }
 
-    public MavenExecutionRequest addServer( Server server )
+    public MavenExecutionRequest addServer( final Server server )
     {
         if ( server == null )
         {
             throw new IllegalArgumentException( "server missing" );
         }
 
-        for ( Server p : getServers() )
+        for ( final Server p : getServers() )
         {
             if ( p.getId() != null && p.getId().equals( server.getId() ) )
             {
@@ -744,7 +746,7 @@ public class DefaultMavenExecutionReques
         return mirrors;
     }
 
-    public MavenExecutionRequest setMirrors( List<Mirror> mirrors )
+    public MavenExecutionRequest setMirrors( final List<Mirror> mirrors )
     {
         if ( mirrors != null )
         {
@@ -758,14 +760,14 @@ public class DefaultMavenExecutionReques
         return this;
     }
 
-    public MavenExecutionRequest addMirror( Mirror mirror )
+    public MavenExecutionRequest addMirror( final Mirror mirror )
     {
         if ( mirror == null )
         {
             throw new IllegalArgumentException( "mirror missing" );
         }
 
-        for ( Mirror p : getMirrors() )
+        for ( final Mirror p : getMirrors() )
         {
             if ( p.getId() != null && p.getId().equals( mirror.getId() ) )
             {
@@ -787,7 +789,7 @@ public class DefaultMavenExecutionReques
         return profiles;
     }
 
-    public MavenExecutionRequest setProfiles( List<Profile> profiles )
+    public MavenExecutionRequest setProfiles( final List<Profile> profiles )
     {
         if ( profiles != null )
         {
@@ -811,7 +813,7 @@ public class DefaultMavenExecutionReques
         return pluginGroups;
     }
 
-    public MavenExecutionRequest setPluginGroups( List<String> pluginGroups )
+    public MavenExecutionRequest setPluginGroups( final List<String> pluginGroups )
     {
         if ( pluginGroups != null )
         {
@@ -825,7 +827,7 @@ public class DefaultMavenExecutionReques
         return this;
     }
 
-    public MavenExecutionRequest addPluginGroup( String pluginGroup )
+    public MavenExecutionRequest addPluginGroup( final String pluginGroup )
     {
         if ( !getPluginGroups().contains( pluginGroup ) )
         {
@@ -835,9 +837,9 @@ public class DefaultMavenExecutionReques
         return this;
     }
 
-    public MavenExecutionRequest addPluginGroups( List<String> pluginGroups )
+    public MavenExecutionRequest addPluginGroups( final List<String> pluginGroups )
     {
-        for ( String pluginGroup : pluginGroups )
+        for ( final String pluginGroup : pluginGroups )
         {
             addPluginGroup( pluginGroup );
         }
@@ -845,7 +847,7 @@ public class DefaultMavenExecutionReques
         return this;
     }
 
-    public MavenExecutionRequest setRecursive( boolean recursive )
+    public MavenExecutionRequest setRecursive( final boolean recursive )
     {
         this.recursive = recursive;
 
@@ -855,14 +857,12 @@ public class DefaultMavenExecutionReques
     // calculated from request attributes.
     private ProjectBuildingRequest projectBuildingRequest;
 
-    private File extensionConfDir;
-
     public boolean isProjectPresent()
     {
         return isProjectPresent;
     }
 
-    public MavenExecutionRequest setProjectPresent( boolean projectPresent )
+    public MavenExecutionRequest setProjectPresent( final boolean projectPresent )
     {
         isProjectPresent = projectPresent;
 
@@ -876,7 +876,7 @@ public class DefaultMavenExecutionReques
         return userSettingsFile;
     }
 
-    public MavenExecutionRequest setUserSettingsFile( File userSettingsFile )
+    public MavenExecutionRequest setUserSettingsFile( final File userSettingsFile )
     {
         this.userSettingsFile = userSettingsFile;
 
@@ -888,7 +888,7 @@ public class DefaultMavenExecutionReques
         return globalSettingsFile;
     }
 
-    public MavenExecutionRequest setGlobalSettingsFile( File globalSettingsFile )
+    public MavenExecutionRequest setGlobalSettingsFile( final File globalSettingsFile )
     {
         this.globalSettingsFile = globalSettingsFile;
 
@@ -900,16 +900,16 @@ public class DefaultMavenExecutionReques
         return userToolchainsFile;
     }
 
-    public MavenExecutionRequest setUserToolchainsFile( File userToolchainsFile )
+    public MavenExecutionRequest setUserToolchainsFile( final File userToolchainsFile )
     {
         this.userToolchainsFile = userToolchainsFile;
 
         return this;
     }
 
-    public MavenExecutionRequest addRemoteRepository( ArtifactRepository repository )
+    public MavenExecutionRequest addRemoteRepository( final ArtifactRepository repository )
     {
-        for ( ArtifactRepository repo : getRemoteRepositories() )
+        for ( final ArtifactRepository repo : getRemoteRepositories() )
         {
             if ( repo.getId() != null && repo.getId().equals( repository.getId() ) )
             {
@@ -931,9 +931,9 @@ public class DefaultMavenExecutionReques
         return remoteRepositories;
     }
 
-    public MavenExecutionRequest addPluginArtifactRepository( ArtifactRepository repository )
+    public MavenExecutionRequest addPluginArtifactRepository( final ArtifactRepository repository )
     {
-        for ( ArtifactRepository repo : getPluginArtifactRepositories() )
+        for ( final ArtifactRepository repo : getPluginArtifactRepositories() )
         {
             if ( repo.getId() != null && repo.getId().equals( repository.getId() ) )
             {
@@ -955,7 +955,7 @@ public class DefaultMavenExecutionReques
         return pluginArtifactRepositories;
     }
 
-    //TODO: this does not belong here.
+    // TODO: this does not belong here.
     public ProjectBuildingRequest getProjectBuildingRequest()
     {
         if ( projectBuildingRequest == null )
@@ -976,14 +976,14 @@ public class DefaultMavenExecutionReques
         return projectBuildingRequest;
     }
 
-    public MavenExecutionRequest addProfile( Profile profile )
+    public MavenExecutionRequest addProfile( final Profile profile )
     {
         if ( profile == null )
         {
             throw new IllegalArgumentException( "profile missing" );
         }
 
-        for ( Profile p : getProfiles() )
+        for ( final Profile p : getProfiles() )
         {
             if ( p.getId() != null && p.getId().equals( profile.getId() ) )
             {
@@ -1001,7 +1001,7 @@ public class DefaultMavenExecutionReques
         return repositoryCache;
     }
 
-    public MavenExecutionRequest setRepositoryCache( RepositoryCache repositoryCache )
+    public MavenExecutionRequest setRepositoryCache( final RepositoryCache repositoryCache )
     {
         this.repositoryCache = repositoryCache;
 
@@ -1013,7 +1013,7 @@ public class DefaultMavenExecutionReques
         return executionListener;
     }
 
-    public MavenExecutionRequest setExecutionListener( ExecutionListener executionListener )
+    public MavenExecutionRequest setExecutionListener( final ExecutionListener executionListener )
     {
         this.executionListener = executionListener;
 
@@ -1025,7 +1025,7 @@ public class DefaultMavenExecutionReques
         return threadCount;
     }
 
-    public void setThreadCount( String threadCount )
+    public void setThreadCount( final String threadCount )
     {
         this.threadCount = threadCount;
     }
@@ -1040,7 +1040,7 @@ public class DefaultMavenExecutionReques
         return perCoreThreadCount;
     }
 
-    public void setPerCoreThreadCount( boolean perCoreThreadCount )
+    public void setPerCoreThreadCount( final boolean perCoreThreadCount )
     {
         this.perCoreThreadCount = perCoreThreadCount;
     }
@@ -1050,7 +1050,7 @@ public class DefaultMavenExecutionReques
         return workspaceReader;
     }
 
-    public MavenExecutionRequest setWorkspaceReader( WorkspaceReader workspaceReader )
+    public MavenExecutionRequest setWorkspaceReader( final WorkspaceReader workspaceReader )
     {
         this.workspaceReader = workspaceReader;
         return this;
@@ -1061,7 +1061,7 @@ public class DefaultMavenExecutionReques
         return cacheTransferError;
     }
 
-    public MavenExecutionRequest setCacheTransferError( boolean cacheTransferError )
+    public MavenExecutionRequest setCacheTransferError( final boolean cacheTransferError )
     {
         this.cacheTransferError = cacheTransferError;
         return this;
@@ -1072,20 +1072,27 @@ public class DefaultMavenExecutionReques
         return cacheNotFound;
     }
 
-    public MavenExecutionRequest setCacheNotFound( boolean cacheNotFound )
+    public MavenExecutionRequest setCacheNotFound( final boolean cacheNotFound )
     {
         this.cacheNotFound = cacheNotFound;
         return this;
     }
 
-    public File getUserExtensionConfDir()
+    private MirrorRoutingTable mirrorRoutingTable;
+
+    public synchronized MirrorRoutingTable getMirrorRoutingTable()
     {
-        return extensionConfDir;
+        if ( mirrorRoutingTable == null )
+        {
+            mirrorRoutingTable = new MirrorRoutingTable();
+        }
+
+        return mirrorRoutingTable;
     }
 
-    public MavenExecutionRequest setUserExtensionConfDir( File extensionConfDir )
+    public MavenExecutionRequest setMirrorRoutingTable( final MirrorRoutingTable mirrorRoutingTable )
     {
-        this.extensionConfDir = extensionConfDir;
+        this.mirrorRoutingTable = mirrorRoutingTable;
         return this;
     }
 

Modified: maven/maven-3/branches/mirror-group-routing/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java
URL: http://svn.apache.org/viewvc/maven/maven-3/branches/mirror-group-routing/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java?rev=1126825&r1=1126824&r2=1126825&view=diff
==============================================================================
--- maven/maven-3/branches/mirror-group-routing/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java (original)
+++ maven/maven-3/branches/mirror-group-routing/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java Tue May 24 02:16:50 2011
@@ -23,6 +23,7 @@ import org.apache.maven.artifact.reposit
 import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
 import org.apache.maven.model.Profile;
 import org.apache.maven.project.ProjectBuildingRequest;
+import org.apache.maven.repository.automirror.MirrorRoutingTable;
 import org.apache.maven.settings.Mirror;
 import org.apache.maven.settings.Proxy;
 import org.apache.maven.settings.Server;
@@ -341,8 +342,21 @@ public interface MavenExecutionRequest
 
     ProjectBuildingRequest getProjectBuildingRequest();
 
-    File getUserExtensionConfDir();
+    /**
+     * List of mirrors, URLs they mirror, weight for each mirror, whether it's disabled, etc. This is used to select a
+     * mirror for a particular repository URL.
+     * 
+     * @return The routing table instance for use in this build. Never {@code null}.
+     */
+    MirrorRoutingTable getMirrorRoutingTable();
 
-    MavenExecutionRequest setUserExtensionConfDir( File extensionConfDir );
+    /**
+     * Set the list of mirrors, urls they mirror, weight for each mirror, whether it's disabled, etc.
+     * 
+     * @param routingTable
+     *            The {@link MirrorRoutingTable} to use for the current build.
+     * @return This request, never {@code null}.
+     */
+    MavenExecutionRequest setMirrorRoutingTable( MirrorRoutingTable routingTable );
 
 }

Modified: maven/maven-3/branches/mirror-group-routing/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java
URL: http://svn.apache.org/viewvc/maven/maven-3/branches/mirror-group-routing/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java?rev=1126825&r1=1126824&r2=1126825&view=diff
==============================================================================
--- maven/maven-3/branches/mirror-group-routing/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java (original)
+++ maven/maven-3/branches/mirror-group-routing/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java Tue May 24 02:16:50 2011
@@ -19,34 +19,35 @@ package org.apache.maven.execution;
  * under the License.
  */
 
-import java.io.File;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.concurrent.ConcurrentHashMap;
-
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.artifact.repository.RepositoryCache;
 import org.apache.maven.monitor.event.EventDispatcher;
 import org.apache.maven.plugin.descriptor.PluginDescriptor;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.project.ProjectBuildingRequest;
+import org.apache.maven.repository.automirror.MirrorRoutingTable;
 import org.apache.maven.settings.Settings;
 import org.codehaus.plexus.PlexusContainer;
 import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
 import org.sonatype.aether.RepositorySystemSession;
 
+import java.io.File;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.concurrent.ConcurrentHashMap;
+
 /**
  * @author Jason van Zyl
  */
 public class MavenSession
     implements Cloneable
 {
-    private PlexusContainer container;
+    private final PlexusContainer container;
 
-    private MavenExecutionRequest request;
+    private final MavenExecutionRequest request;
 
     private MavenExecutionResult result;
 
@@ -74,66 +75,67 @@ public class MavenSession
         new ConcurrentHashMap<String, Map<String, Map<String, Object>>>();
 
     @Deprecated
-    public MavenSession( PlexusContainer container, MavenExecutionRequest request, MavenExecutionResult result,
-                         MavenProject project )
+    public MavenSession( final PlexusContainer container, final MavenExecutionRequest request,
+                         final MavenExecutionResult result, final MavenProject project )
     {
-        this( container, request, result, Arrays.asList( new MavenProject[]{project} ) );
+        this( container, request, result, Arrays.asList( new MavenProject[] { project } ) );
     }
 
     @Deprecated
-    public MavenSession( PlexusContainer container, Settings settings, ArtifactRepository localRepository,
-                         EventDispatcher eventDispatcher, ReactorManager unused, List<String> goals,
-                         String executionRootDir, Properties executionProperties, Date startTime )
+    public MavenSession( final PlexusContainer container, final Settings settings,
+                         final ArtifactRepository localRepository, final EventDispatcher eventDispatcher,
+                         final ReactorManager unused, final List<String> goals, final String executionRootDir,
+                         final Properties executionProperties, final Date startTime )
     {
         this( container, settings, localRepository, eventDispatcher, unused, goals, executionRootDir,
               executionProperties, null, startTime );
     }
 
     @Deprecated
-    public MavenSession( PlexusContainer container, Settings settings, ArtifactRepository localRepository,
-                         EventDispatcher eventDispatcher, ReactorManager unused, List<String> goals,
-                         String executionRootDir, Properties executionProperties, Properties userProperties,
-                         Date startTime )
+    public MavenSession( final PlexusContainer container, final Settings settings,
+                         final ArtifactRepository localRepository, final EventDispatcher eventDispatcher,
+                         final ReactorManager unused, final List<String> goals, final String executionRootDir,
+                         final Properties executionProperties, final Properties userProperties, final Date startTime )
     {
         this.container = container;
         this.settings = settings;
         this.executionProperties = executionProperties;
-        this.request = new DefaultMavenExecutionRequest();
-        this.request.setUserProperties( userProperties );
-        this.request.setLocalRepository( localRepository );
-        this.request.setGoals( goals );
-        this.request.setBaseDirectory( ( executionRootDir != null ) ? new File( executionRootDir ) : null );
-        this.request.setStartTime( startTime );
+        request = new DefaultMavenExecutionRequest();
+        request.setUserProperties( userProperties );
+        request.setLocalRepository( localRepository );
+        request.setGoals( goals );
+        request.setBaseDirectory( ( executionRootDir != null ) ? new File( executionRootDir ) : null );
+        request.setStartTime( startTime );
     }
 
     @Deprecated
-    public MavenSession( PlexusContainer container, MavenExecutionRequest request, MavenExecutionResult result,
-                         List<MavenProject> projects )
+    public MavenSession( final PlexusContainer container, final MavenExecutionRequest request,
+                         final MavenExecutionResult result, final List<MavenProject> projects )
     {
         this.container = container;
         this.request = request;
         this.result = result;
-        this.settings = new SettingsAdapter( request );
+        settings = new SettingsAdapter( request );
         setProjects( projects );
     }
 
-    public MavenSession( PlexusContainer container, RepositorySystemSession repositorySession, MavenExecutionRequest request,
-                         MavenExecutionResult result )
+    public MavenSession( final PlexusContainer container, final RepositorySystemSession repositorySession,
+                         final MavenExecutionRequest request, final MavenExecutionResult result )
     {
         this.container = container;
         this.request = request;
         this.result = result;
-        this.settings = new SettingsAdapter( request );
+        settings = new SettingsAdapter( request );
         this.repositorySession = repositorySession;
     }
 
-    public void setProjects( List<MavenProject> projects )
+    public void setProjects( final List<MavenProject> projects )
     {
         if ( !projects.isEmpty() )
         {
-            this.currentProject = projects.get( 0 );
-            this.topLevelProject = currentProject;
-            for ( MavenProject project : projects )
+            currentProject = projects.get( 0 );
+            topLevelProject = currentProject;
+            for ( final MavenProject project : projects )
             {
                 if ( project.isExecutionRoot() )
                 {
@@ -144,8 +146,8 @@ public class MavenSession
         }
         else
         {
-            this.currentProject = null;
-            this.topLevelProject = null;
+            currentProject = null;
+            topLevelProject = null;
         }
         this.projects = projects;
     }
@@ -157,28 +159,28 @@ public class MavenSession
     }
 
     @Deprecated
-    public Object lookup( String role )
+    public Object lookup( final String role )
         throws ComponentLookupException
     {
         return container.lookup( role );
     }
 
     @Deprecated
-    public Object lookup( String role, String roleHint )
+    public Object lookup( final String role, final String roleHint )
         throws ComponentLookupException
     {
         return container.lookup( role, roleHint );
     }
 
     @Deprecated
-    public List<Object> lookupList( String role )
+    public List<Object> lookupList( final String role )
         throws ComponentLookupException
     {
         return container.lookupList( role );
     }
 
     @Deprecated
-    public Map<String, Object> lookupMap( String role )
+    public Map<String, Object> lookupMap( final String role )
         throws ComponentLookupException
     {
         return container.lookupMap( role );
@@ -204,7 +206,7 @@ public class MavenSession
      * Gets the user properties to use for interpolation and profile activation. The user properties have been
      * configured directly by the user on his discretion, e.g. via the {@code -Dkey=value} parameter on the command
      * line.
-     *
+     * 
      * @return The user properties, never {@code null}.
      */
     public Properties getUserProperties()
@@ -215,7 +217,7 @@ public class MavenSession
     /**
      * Gets the system properties to use for interpolation and profile activation. The system properties are collected
      * from the runtime environment like {@link System#getProperties()} and environment variables.
-     *
+     * 
      * @return The system properties, never {@code null}.
      */
     public Properties getSystemProperties()
@@ -270,7 +272,7 @@ public class MavenSession
         return request;
     }
 
-    public void setCurrentProject( MavenProject currentProject )
+    public void setCurrentProject( final MavenProject currentProject )
     {
         this.currentProject = currentProject;
     }
@@ -307,9 +309,9 @@ public class MavenSession
 
     // Backward compat
 
-    public Map<String, Object> getPluginContext( PluginDescriptor plugin, MavenProject project )
+    public Map<String, Object> getPluginContext( final PluginDescriptor plugin, final MavenProject project )
     {
-        String projectKey = project.getId();
+        final String projectKey = project.getId();
 
         Map<String, Map<String, Object>> pluginContextsByKey = pluginContextsByProjectAndPluginKey.get( projectKey );
 
@@ -320,7 +322,7 @@ public class MavenSession
             pluginContextsByProjectAndPluginKey.put( projectKey, pluginContextsByKey );
         }
 
-        String pluginKey = plugin.getPluginLookupKey();
+        final String pluginKey = plugin.getPluginLookupKey();
 
         Map<String, Object> pluginContext = pluginContextsByKey.get( pluginKey );
 
@@ -339,7 +341,7 @@ public class MavenSession
         return projectDependencyGraph;
     }
 
-    public void setProjectDependencyGraph( ProjectDependencyGraph projectDependencyGraph )
+    public void setProjectDependencyGraph( final ProjectDependencyGraph projectDependencyGraph )
     {
         this.projectDependencyGraph = projectDependencyGraph;
     }
@@ -356,13 +358,13 @@ public class MavenSession
         {
             return (MavenSession) super.clone();
         }
-        catch ( CloneNotSupportedException e )
+        catch ( final CloneNotSupportedException e )
         {
             throw new RuntimeException( "Bug", e );
         }
     }
 
-    private String getId( MavenProject project )
+    private String getId( final MavenProject project )
     {
         return project.getGroupId() + ':' + project.getArtifactId() + ':' + project.getVersion();
     }
@@ -383,7 +385,7 @@ public class MavenSession
         return parallel;
     }
 
-    public void setParallel( boolean parallel )
+    public void setParallel( final boolean parallel )
     {
         this.parallel = parallel;
     }
@@ -393,4 +395,9 @@ public class MavenSession
         return repositorySession;
     }
 
+    public MirrorRoutingTable getMirrorRoutingTable()
+    {
+        return request.getMirrorRoutingTable();
+    }
+
 }