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;