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 05:26:00 UTC

svn commit: r1126847 - in /maven/maven-3/branches/mirror-group-routing: maven-auto-mirror-model/ maven-auto-mirror-model/src/main/java/org/apache/maven/repository/automirror/ maven-auto-mirror-model/src/test/java/org/apache/maven/repository/automirror/...

Author: jdcasey
Date: Tue May 24 03:25:59 2011
New Revision: 1126847

URL: http://svn.apache.org/viewvc?rev=1126847&view=rev
Log:
allow mirror-routes to be mirrorOf for multiple canonical repository URLs.

Modified:
    maven/maven-3/branches/mirror-group-routing/maven-auto-mirror-model/pom.xml
    maven/maven-3/branches/mirror-group-routing/maven-auto-mirror-model/src/main/java/org/apache/maven/repository/automirror/MirrorRoute.java
    maven/maven-3/branches/mirror-group-routing/maven-auto-mirror-model/src/main/java/org/apache/maven/repository/automirror/MirrorRouteSerializer.java
    maven/maven-3/branches/mirror-group-routing/maven-auto-mirror-model/src/main/java/org/apache/maven/repository/automirror/MirrorRoutingTable.java
    maven/maven-3/branches/mirror-group-routing/maven-auto-mirror-model/src/test/java/org/apache/maven/repository/automirror/RouterMirrorSerializerTest.java
    maven/maven-3/branches/mirror-group-routing/maven-compat/src/main/java/org/apache/maven/repository/DefaultMirrorSelector.java
    maven/maven-3/branches/mirror-group-routing/maven-core/src/main/java/org/apache/maven/repository/mirror/RoutingMirrorSelector.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-auto-mirror-model/pom.xml
URL: http://svn.apache.org/viewvc/maven/maven-3/branches/mirror-group-routing/maven-auto-mirror-model/pom.xml?rev=1126847&r1=1126846&r2=1126847&view=diff
==============================================================================
--- maven/maven-3/branches/mirror-group-routing/maven-auto-mirror-model/pom.xml (original)
+++ maven/maven-3/branches/mirror-group-routing/maven-auto-mirror-model/pom.xml Tue May 24 03:25:59 2011
@@ -26,5 +26,9 @@
   		<groupId>com.google.code.gson</groupId>
   		<artifactId>gson</artifactId>
   	</dependency>
+  	<dependency>
+  		<groupId>org.codehaus.plexus</groupId>
+  		<artifactId>plexus-utils</artifactId>
+  	</dependency>
   </dependencies>
 </project>

Modified: maven/maven-3/branches/mirror-group-routing/maven-auto-mirror-model/src/main/java/org/apache/maven/repository/automirror/MirrorRoute.java
URL: http://svn.apache.org/viewvc/maven/maven-3/branches/mirror-group-routing/maven-auto-mirror-model/src/main/java/org/apache/maven/repository/automirror/MirrorRoute.java?rev=1126847&r1=1126846&r2=1126847&view=diff
==============================================================================
--- maven/maven-3/branches/mirror-group-routing/maven-auto-mirror-model/src/main/java/org/apache/maven/repository/automirror/MirrorRoute.java (original)
+++ maven/maven-3/branches/mirror-group-routing/maven-auto-mirror-model/src/main/java/org/apache/maven/repository/automirror/MirrorRoute.java Tue May 24 03:25:59 2011
@@ -19,47 +19,87 @@ package org.apache.maven.repository.auto
  * under the License.
  */
 
+import static org.codehaus.plexus.util.StringUtils.join;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+
 public class MirrorRoute
     implements Comparable<MirrorRoute>
 {
 
     private final String id;
 
-    private final String mirrorUrl;
+    private final String myUrl;
 
     private final int weight;
 
     private final boolean enabled;
 
-    private final String url;
+    private final Set<String> mirrorOfUrls;
 
+    // NOTE: ONLY used during deserialization!
     MirrorRoute()
     {
         id = null;
-        url = null;
-        mirrorUrl = null;
+        mirrorOfUrls = Collections.emptySet();
+        myUrl = null;
         weight = 0;
         enabled = false;
     }
 
-    public MirrorRoute( final String id, final String url, final String mirrorUrl, final int weight,
-                        final boolean enabled )
+    public MirrorRoute( final String id, final String myUrl, final int weight,
+                        final boolean enabled, final String... mirrorOfUrls )
     {
+        if ( mirrorOfUrls.length < 1 )
+        {
+            throw new IllegalArgumentException( "Cannot construct a mirror route without at least one mirror-of URL." );
+        }
+        
         this.id = id;
-        this.url = url;
-        this.mirrorUrl = mirrorUrl;
+        this.mirrorOfUrls = toLowerCaseSet( Arrays.asList( mirrorOfUrls ) );
+        this.myUrl = myUrl;
         this.weight = weight;
         this.enabled = enabled;
     }
 
+    public MirrorRoute( final String id, final String myUrl, final int weight,
+                        final boolean enabled, final Collection<String> mirrorOfUrls )
+    {
+        if ( mirrorOfUrls.size() < 1 )
+        {
+            throw new IllegalArgumentException( "Cannot construct a mirror route without at least one mirror-of URL." );
+        }
+        
+        this.id = id;
+        this.mirrorOfUrls = toLowerCaseSet( mirrorOfUrls );
+        this.myUrl = myUrl;
+        this.weight = weight;
+        this.enabled = enabled;
+    }
+
+    private Set<String> toLowerCaseSet( Collection<String> src )
+    {
+        Set<String> result = new HashSet<String>( src.size() );
+        for ( String srcItem : src )
+        {
+            result.add( srcItem.toLowerCase() );
+        }
+        
+        return result;
+    }
+
     public String getId()
     {
         return id;
     }
 
-    public String getMirrorUrl()
+    public String getRouteUrl()
     {
-        return mirrorUrl;
+        return myUrl;
     }
 
     public int getWeight()
@@ -80,7 +120,7 @@ public class MirrorRoute
     @Override
     public String toString()
     {
-        return "mirror [id: " + id + ", weight: " + weight + ", url: " + url + ", mirror-url: " + mirrorUrl
+        return "mirror [id: " + id + ", weight: " + weight + ", mirror-of urls: " + join( mirrorOfUrls.iterator(), ", " ) + ", mirror-url: " + myUrl
                         + ", enabled: " + enabled + "]";
     }
 
@@ -89,7 +129,7 @@ public class MirrorRoute
     {
         final int prime = 31;
         int result = 1;
-        result = prime * result + ( ( mirrorUrl == null ) ? 0 : mirrorUrl.hashCode() );
+        result = prime * result + ( ( myUrl == null ) ? 0 : myUrl.hashCode() );
         return result;
     }
 
@@ -109,23 +149,28 @@ public class MirrorRoute
             return false;
         }
         final MirrorRoute other = (MirrorRoute) obj;
-        if ( mirrorUrl == null )
+        if ( myUrl == null )
         {
-            if ( other.mirrorUrl != null )
+            if ( other.myUrl != null )
             {
                 return false;
             }
         }
-        else if ( !mirrorUrl.equals( other.mirrorUrl ) )
+        else if ( !myUrl.equals( other.myUrl ) )
         {
             return false;
         }
         return true;
     }
 
-    public String getUrl()
+    public Set<String> getMirrorOfUrls()
+    {
+        return mirrorOfUrls;
+    }
+
+    public boolean isMirrorOf( String canonicalUrl )
     {
-        return url;
+        return mirrorOfUrls.contains( canonicalUrl.toLowerCase() );
     }
 
 }

Modified: maven/maven-3/branches/mirror-group-routing/maven-auto-mirror-model/src/main/java/org/apache/maven/repository/automirror/MirrorRouteSerializer.java
URL: http://svn.apache.org/viewvc/maven/maven-3/branches/mirror-group-routing/maven-auto-mirror-model/src/main/java/org/apache/maven/repository/automirror/MirrorRouteSerializer.java?rev=1126847&r1=1126846&r2=1126847&view=diff
==============================================================================
--- maven/maven-3/branches/mirror-group-routing/maven-auto-mirror-model/src/main/java/org/apache/maven/repository/automirror/MirrorRouteSerializer.java (original)
+++ maven/maven-3/branches/mirror-group-routing/maven-auto-mirror-model/src/main/java/org/apache/maven/repository/automirror/MirrorRouteSerializer.java Tue May 24 03:25:59 2011
@@ -29,7 +29,9 @@ import java.io.Reader;
 import java.io.Writer;
 import java.lang.reflect.Type;
 import java.util.ArrayList;
+import java.util.LinkedHashSet;
 import java.util.List;
+import java.util.Set;
 
 public class MirrorRouteSerializer
 {
@@ -37,7 +39,7 @@ public class MirrorRouteSerializer
     // NOTE: Gson is supposed to be threadsafe, so all this static stuff should be fine.
     private static Gson gson;
 
-    public static void serializeList( final List<MirrorRoute> mirrors, final Writer writer )
+    public static void serializeLoose( final Set<MirrorRoute> mirrors, final Writer writer )
         throws MirrorRouterModelException
     {
         try
@@ -50,7 +52,7 @@ public class MirrorRouteSerializer
         }
     }
 
-    public static String serializeListToString( final List<MirrorRoute> mirrors )
+    public static String serializeLooseToString( final Set<MirrorRoute> mirrors )
         throws MirrorRouterModelException
     {
         try
@@ -63,12 +65,12 @@ public class MirrorRouteSerializer
         }
     }
 
-    public static List<MirrorRoute> deserializeList( final Reader reader )
+    public static Set<MirrorRoute> deserializeLoose( final Reader reader )
         throws MirrorRouterModelException
     {
         try
         {
-            return getGson().fromJson( reader, RepositoryMirrorListCreator.getType() );
+            return getGson().fromJson( reader, RepositoryMirrorSetCreator.getType() );
         }
         catch ( final JsonParseException e )
         {
@@ -76,12 +78,12 @@ public class MirrorRouteSerializer
         }
     }
 
-    public static List<MirrorRoute> deserializeList( final String source )
+    public static Set<MirrorRoute> deserializeLoose( final String source )
         throws MirrorRouterModelException
     {
         try
         {
-            return getGson().fromJson( source, RepositoryMirrorListCreator.getType() );
+            return getGson().fromJson( source, RepositoryMirrorSetCreator.getType() );
         }
         catch ( final JsonParseException e )
         {
@@ -147,6 +149,7 @@ public class MirrorRouteSerializer
         {
             final GsonBuilder builder = new GsonBuilder();
             builder.disableHtmlEscaping().disableInnerClassSerialization().setPrettyPrinting();
+            builder.registerTypeAdapter( RepositoryMirrorSetCreator.getType(), new RepositoryMirrorSetCreator() );
             builder.registerTypeAdapter( RepositoryMirrorListCreator.getType(), new RepositoryMirrorListCreator() );
 
             gson = builder.create();
@@ -173,4 +176,22 @@ public class MirrorRouteSerializer
 
     }
 
+    public static final class RepositoryMirrorSetCreator
+        implements InstanceCreator<Set<MirrorRoute>>
+    {
+
+        public Set<MirrorRoute> createInstance( final Type type )
+        {
+            return new LinkedHashSet<MirrorRoute>();
+        }
+
+        public static Type getType()
+        {
+            return new TypeToken<Set<MirrorRoute>>()
+            {
+            }.getType();
+        }
+
+    }
+
 }

Modified: maven/maven-3/branches/mirror-group-routing/maven-auto-mirror-model/src/main/java/org/apache/maven/repository/automirror/MirrorRoutingTable.java
URL: http://svn.apache.org/viewvc/maven/maven-3/branches/mirror-group-routing/maven-auto-mirror-model/src/main/java/org/apache/maven/repository/automirror/MirrorRoutingTable.java?rev=1126847&r1=1126846&r2=1126847&view=diff
==============================================================================
--- maven/maven-3/branches/mirror-group-routing/maven-auto-mirror-model/src/main/java/org/apache/maven/repository/automirror/MirrorRoutingTable.java (original)
+++ maven/maven-3/branches/mirror-group-routing/maven-auto-mirror-model/src/main/java/org/apache/maven/repository/automirror/MirrorRoutingTable.java Tue May 24 03:25:59 2011
@@ -41,7 +41,10 @@ public class MirrorRoutingTable
         if ( !mirrors.contains( mirror ) )
         {
             mirrors.add( mirror );
-            indexGrabBags.remove( mirror.getUrl() );
+            for ( String url : mirror.getMirrorOfUrls() )
+            {
+                indexGrabBags.remove( url );
+            }
         }
 
         return this;
@@ -93,9 +96,9 @@ public class MirrorRoutingTable
                 for ( int idx = 0; idx < mirrors.size(); idx++ )
                 {
                     final MirrorRoute mirror = mirrors.get( idx );
-                    if ( !mirror.isEnabled() )
+                    if ( !mirror.isEnabled() || !mirror.isMirrorOf( canonicalUrl ) )
                     {
-                        // only select from enabled mirrors.
+                        // only select from enabled mirrors that actually mirror the given canonical repository URL.
                         continue;
                     }
 
@@ -114,13 +117,13 @@ public class MirrorRoutingTable
                     }
                 }
 
-                final int[] grabBag = new int[gb.size()];
-                for ( int i = 0; i < grabBag.length; i++ )
+                indexGrabBag = new int[gb.size()];
+                for ( int i = 0; i < indexGrabBag.length; i++ )
                 {
-                    grabBag[i] = gb.get( i );
+                    indexGrabBag[i] = gb.get( i );
                 }
 
-                indexGrabBags.put( canonicalUrl, grabBag );
+                indexGrabBags.put( canonicalUrl, indexGrabBag );
             }
         }
 
@@ -207,7 +210,7 @@ public class MirrorRoutingTable
     {
         for ( final MirrorRoute mirror : mirrors )
         {
-            if ( mirror.isEnabled() && canonicalUrl.equals( mirror.getUrl() ) )
+            if ( mirror.isEnabled() && mirror.isMirrorOf( canonicalUrl ) )
             {
                 return true;
             }

Modified: maven/maven-3/branches/mirror-group-routing/maven-auto-mirror-model/src/test/java/org/apache/maven/repository/automirror/RouterMirrorSerializerTest.java
URL: http://svn.apache.org/viewvc/maven/maven-3/branches/mirror-group-routing/maven-auto-mirror-model/src/test/java/org/apache/maven/repository/automirror/RouterMirrorSerializerTest.java?rev=1126847&r1=1126846&r2=1126847&view=diff
==============================================================================
--- maven/maven-3/branches/mirror-group-routing/maven-auto-mirror-model/src/test/java/org/apache/maven/repository/automirror/RouterMirrorSerializerTest.java (original)
+++ maven/maven-3/branches/mirror-group-routing/maven-auto-mirror-model/src/test/java/org/apache/maven/repository/automirror/RouterMirrorSerializerTest.java Tue May 24 03:25:59 2011
@@ -31,8 +31,8 @@ public class RouterMirrorSerializerTest
         throws Exception
     {
         final MirrorRoutingTable mirrorMap =
-            new MirrorRoutingTable().addMirror( new MirrorRoute( "central", "http://repo1.maven.org/maven2",
-                                                             "http://localhost:8081/nexus", 99, true ) );
+            new MirrorRoutingTable().addMirror( new MirrorRoute( "central",
+                                                             "http://localhost:8081/nexus", 99, true, "http://repo1.maven.org/maven2" ) );
 
         final StringWriter sw = new StringWriter();
         MirrorRouteSerializer.serialize( mirrorMap, sw );
@@ -44,8 +44,8 @@ public class RouterMirrorSerializerTest
         throws Exception
     {
         final MirrorRoutingTable mirrorMap =
-            new MirrorRoutingTable().addMirror( new MirrorRoute( "central", "http://repo1.maven.org/maven2",
-                                                             "http://localhost:8081/nexus", 99, true ) );
+            new MirrorRoutingTable().addMirror( new MirrorRoute( "central",
+                                                             "http://localhost:8081/nexus", 99, true, "http://repo1.maven.org/maven2" ) );
 
         System.out.println( MirrorRouteSerializer.serializeToString( mirrorMap ) );
     }
@@ -54,8 +54,8 @@ public class RouterMirrorSerializerTest
         throws Exception
     {
         final MirrorRoutingTable mirrorMap =
-            new MirrorRoutingTable().addMirror( new MirrorRoute( "central", "http://repo1.maven.org/maven2",
-                                                             "http://localhost:8081/nexus", 99, true ) );
+            new MirrorRoutingTable().addMirror( new MirrorRoute( "central",
+                                                             "http://localhost:8081/nexus", 99, true, "http://repo1.maven.org/maven2" ) );
 
         final String ser = MirrorRouteSerializer.serializeToString( mirrorMap );
         final MirrorRoutingTable result = MirrorRouteSerializer.deserialize( ser );

Modified: maven/maven-3/branches/mirror-group-routing/maven-compat/src/main/java/org/apache/maven/repository/DefaultMirrorSelector.java
URL: http://svn.apache.org/viewvc/maven/maven-3/branches/mirror-group-routing/maven-compat/src/main/java/org/apache/maven/repository/DefaultMirrorSelector.java?rev=1126847&r1=1126846&r2=1126847&view=diff
==============================================================================
--- maven/maven-3/branches/mirror-group-routing/maven-compat/src/main/java/org/apache/maven/repository/DefaultMirrorSelector.java (original)
+++ maven/maven-3/branches/mirror-group-routing/maven-compat/src/main/java/org/apache/maven/repository/DefaultMirrorSelector.java Tue May 24 03:25:59 2011
@@ -88,7 +88,7 @@ public class DefaultMirrorSelector
                 // FIXME!
                 mirror.setLayout( "default" );
                 mirror.setId( rMirror.getId() );
-                mirror.setUrl( rMirror.getMirrorUrl() );
+                mirror.setUrl( rMirror.getRouteUrl() );
             }
             else
             {

Modified: maven/maven-3/branches/mirror-group-routing/maven-core/src/main/java/org/apache/maven/repository/mirror/RoutingMirrorSelector.java
URL: http://svn.apache.org/viewvc/maven/maven-3/branches/mirror-group-routing/maven-core/src/main/java/org/apache/maven/repository/mirror/RoutingMirrorSelector.java?rev=1126847&r1=1126846&r2=1126847&view=diff
==============================================================================
--- maven/maven-3/branches/mirror-group-routing/maven-core/src/main/java/org/apache/maven/repository/mirror/RoutingMirrorSelector.java (original)
+++ maven/maven-3/branches/mirror-group-routing/maven-core/src/main/java/org/apache/maven/repository/mirror/RoutingMirrorSelector.java Tue May 24 03:25:59 2011
@@ -78,7 +78,7 @@ public class RoutingMirrorSelector
 
                 mirror.setRepositoryManager( false );
                 mirror.setId( route.getId() );
-                mirror.setUrl( route.getMirrorUrl() );
+                mirror.setUrl( route.getRouteUrl() );
                 mirror.setContentType( repository.getContentType() );
                 mirror.setPolicy( true, repository.getPolicy( true ) );
                 mirror.setPolicy( false, repository.getPolicy( false ) );

Modified: maven/maven-3/branches/mirror-group-routing/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java
URL: http://svn.apache.org/viewvc/maven/maven-3/branches/mirror-group-routing/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java?rev=1126847&r1=1126846&r2=1126847&view=diff
==============================================================================
--- maven/maven-3/branches/mirror-group-routing/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java (original)
+++ maven/maven-3/branches/mirror-group-routing/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java Tue May 24 03:25:59 2011
@@ -50,13 +50,11 @@ import org.apache.maven.lifecycle.intern
 import org.apache.maven.model.building.ModelProcessor;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.properties.internal.EnvironmentUtils;
-import org.apache.maven.repository.automirror.MirrorRoutingTable;
 import org.apache.maven.repository.mirror.MirrorRouter;
 import org.apache.maven.repository.mirror.MirrorRouterException;
 import org.apache.maven.repository.mirror.configuration.FileMirrorRouterConfigSource;
 import org.apache.maven.repository.mirror.configuration.MirrorRouterConfigBuilder;
 import org.apache.maven.repository.mirror.configuration.MirrorRouterConfiguration;
-import org.apache.maven.repository.mirror.configuration.MirrorRouterConfigurationException;
 import org.apache.maven.repository.mirror.loader.MirrorRouterLoader;
 import org.apache.maven.settings.building.DefaultSettingsBuildingRequest;
 import org.apache.maven.settings.building.SettingsBuilder;