Author: jdcasey Date: Tue May 24 03:32:38 2011 New Revision: 1126853 URL: http://svn.apache.org/viewvc?rev=1126853&view=rev Log: starting to add wrapper to repository management, to enable group routing behind-the-scenes. NOTE: This may need to go in maven-core, to enable the use of LegacySupport to get at the ArtifactRouter instance...
Added: maven/maven-3/branches/mirror-group-routing/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/RoutingRemoteRepositoryManager.java (with props) maven/maven-3/branches/mirror-group-routing/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/RoutingRepositoryConnector.java (with props) maven/maven-3/branches/mirror-group-routing/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/RoutingRepositoryConnectorFactory.java (with props) Modified: maven/maven-3/branches/mirror-group-routing/maven-aether-provider/pom.xml Modified: maven/maven-3/branches/mirror-group-routing/maven-aether-provider/pom.xml URL: http://svn.apache.org/viewvc/maven/maven-3/branches/mirror-group-routing/maven-aether-provider/pom.xml?rev=1126853&r1=1126852&r2=1126853&view=diff ============================================================================== --- maven/maven-3/branches/mirror-group-routing/maven-aether-provider/pom.xml (original) +++ maven/maven-3/branches/mirror-group-routing/maven-aether-provider/pom.xml Tue May 24 03:32:38 2011 @@ -72,6 +72,10 @@ under the License. <groupId>org.codehaus.plexus</groupId> <artifactId>plexus-utils</artifactId> </dependency> + <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven-routem-api</artifactId> + </dependency> </dependencies> <build> Added: maven/maven-3/branches/mirror-group-routing/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/RoutingRemoteRepositoryManager.java URL: http://svn.apache.org/viewvc/maven/maven-3/branches/mirror-group-routing/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/RoutingRemoteRepositoryManager.java?rev=1126853&view=auto ============================================================================== --- maven/maven-3/branches/mirror-group-routing/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/RoutingRemoteRepositoryManager.java (added) +++ maven/maven-3/branches/mirror-group-routing/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/RoutingRemoteRepositoryManager.java Tue May 24 03:32:38 2011 @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2011 John Casey. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +package org.apache.maven.repository.internal; + +import org.sonatype.aether.RepositorySystemSession; +import org.sonatype.aether.impl.internal.DefaultRemoteRepositoryManager; +import org.sonatype.aether.repository.RemoteRepository; +import org.sonatype.aether.spi.connector.RepositoryConnector; +import org.sonatype.aether.spi.connector.RepositoryConnectorFactory; +import org.sonatype.aether.transfer.NoRepositoryConnectorException; + +import java.util.List; + +public class RoutingRemoteRepositoryManager + extends DefaultRemoteRepositoryManager +{ + + @Override + public DefaultRemoteRepositoryManager addRepositoryConnectorFactory( RepositoryConnectorFactory factory ) + { + // TODO Implement RoutingRemoteRepositoryManager.addRepositoryConnectorFactory + throw new UnsupportedOperationException( "Not Implemented." ); + } + + @Override + public DefaultRemoteRepositoryManager setRepositoryConnectorFactories( List<RepositoryConnectorFactory> factories ) + { + // TODO Implement RoutingRemoteRepositoryManager.setRepositoryConnectorFactories + throw new UnsupportedOperationException( "Not Implemented." ); + } + + @Override + public RepositoryConnector getRepositoryConnector( RepositorySystemSession session, RemoteRepository repository ) + throws NoRepositoryConnectorException + { + // TODO Implement RoutingRemoteRepositoryManager.getRepositoryConnector + throw new UnsupportedOperationException( "Not Implemented." ); + } + +} Propchange: maven/maven-3/branches/mirror-group-routing/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/RoutingRemoteRepositoryManager.java ------------------------------------------------------------------------------ svn:eol-style = native Added: maven/maven-3/branches/mirror-group-routing/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/RoutingRepositoryConnector.java URL: http://svn.apache.org/viewvc/maven/maven-3/branches/mirror-group-routing/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/RoutingRepositoryConnector.java?rev=1126853&view=auto ============================================================================== --- maven/maven-3/branches/mirror-group-routing/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/RoutingRepositoryConnector.java (added) +++ maven/maven-3/branches/mirror-group-routing/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/RoutingRepositoryConnector.java Tue May 24 03:32:38 2011 @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2011 John Casey. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +package org.apache.maven.repository.internal; + +import org.apache.maven.artifact.router.ArtifactRouter; +import org.sonatype.aether.RepositorySystemSession; +import org.sonatype.aether.repository.RemoteRepository; +import org.sonatype.aether.spi.connector.ArtifactDownload; +import org.sonatype.aether.spi.connector.ArtifactUpload; +import org.sonatype.aether.spi.connector.MetadataDownload; +import org.sonatype.aether.spi.connector.MetadataUpload; +import org.sonatype.aether.spi.connector.RepositoryConnector; +import org.sonatype.aether.spi.connector.RepositoryConnectorFactory; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashSet; +import java.util.List; + +public class RoutingRepositoryConnector + implements RepositoryConnector +{ + + private final ArtifactRouter router; + + private final RepositorySystemSession session; + + private final RemoteRepository repository; + + private final List<RepositoryConnectorFactory> connectorFactories; + + private final List<RepositoryConnector> openConnectors = new ArrayList<RepositoryConnector>(); + + public RoutingRepositoryConnector( ArtifactRouter router, RepositorySystemSession session, RemoteRepository repository, + List<RepositoryConnectorFactory> connectorFactories ) + { + this.router = router; + this.session = session; + this.repository = repository; + this.connectorFactories = connectorFactories; + } + + public void get( Collection<? extends ArtifactDownload> artifactDownloads, + Collection<? extends MetadataDownload> metadataDownloads ) + { + } + + public void put( Collection<? extends ArtifactUpload> artifactUploads, + Collection<? extends MetadataUpload> metadataUploads ) + { + } + + public void close() + { + } + +} Propchange: maven/maven-3/branches/mirror-group-routing/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/RoutingRepositoryConnector.java ------------------------------------------------------------------------------ svn:eol-style = native Added: maven/maven-3/branches/mirror-group-routing/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/RoutingRepositoryConnectorFactory.java URL: http://svn.apache.org/viewvc/maven/maven-3/branches/mirror-group-routing/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/RoutingRepositoryConnectorFactory.java?rev=1126853&view=auto ============================================================================== --- maven/maven-3/branches/mirror-group-routing/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/RoutingRepositoryConnectorFactory.java (added) +++ maven/maven-3/branches/mirror-group-routing/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/RoutingRepositoryConnectorFactory.java Tue May 24 03:32:38 2011 @@ -0,0 +1,105 @@ +/* + * Copyright (C) 2011 John Casey. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +package org.apache.maven.repository.internal; + +import org.codehaus.plexus.component.annotations.Component; +import org.codehaus.plexus.component.annotations.Requirement; +import org.sonatype.aether.RepositorySystemSession; +import org.sonatype.aether.repository.RemoteRepository; +import org.sonatype.aether.spi.connector.RepositoryConnector; +import org.sonatype.aether.spi.connector.RepositoryConnectorFactory; +import org.sonatype.aether.spi.locator.Service; +import org.sonatype.aether.spi.locator.ServiceLocator; +import org.sonatype.aether.transfer.NoRepositoryConnectorException; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; + +@Component( role=RepositoryConnectorFactory.class, hint="routing" ) +public class RoutingRepositoryConnectorFactory + implements RepositoryConnectorFactory, Service +{ + + @Requirement( role = RepositoryConnectorFactory.class ) + private List<RepositoryConnectorFactory> connectorFactories = new ArrayList<RepositoryConnectorFactory>(); + + private static final Comparator<RepositoryConnectorFactory> COMPARATOR = + new Comparator<RepositoryConnectorFactory>() + { + + public int compare( RepositoryConnectorFactory o1, RepositoryConnectorFactory o2 ) + { + return o2.getPriority() - o1.getPriority(); + } + + }; + + public RepositoryConnector newInstance( RepositorySystemSession session, RemoteRepository repository ) + throws NoRepositoryConnectorException + { + return new RoutingRepositoryConnector( session, repository, connectorFactories ); + } + + public RoutingRepositoryConnectorFactory addRepositoryConnectorFactory( RepositoryConnectorFactory factory ) + { + if ( factory == null ) + { + throw new IllegalArgumentException( "repository connector factory has not been specified" ); + } + + if ( !( factory instanceof RoutingRepositoryConnectorFactory ) ) + { + connectorFactories.add( factory ); + } + + return this; + } + + public RoutingRepositoryConnectorFactory setRepositoryConnectorFactories( List<RepositoryConnectorFactory> factories ) + { + this.connectorFactories.clear(); + + if ( factories != null ) + { + for ( RepositoryConnectorFactory fac : factories ) + { + if ( !(fac instanceof RoutingRepositoryConnectorFactory ) ) + { + connectorFactories.add( fac ); + } + } + } + + return this; + } + + public int getPriority() + { + return Integer.MIN_VALUE; + } + + public void initService( ServiceLocator locator ) + { +// setLogger( locator.getService( Logger.class ) ); +// setFileProcessor( locator.getService( FileProcessor.class ) ); +// setWagonProvider( locator.getService( WagonProvider.class ) ); +// setWagonConfigurator( locator.getService( WagonConfigurator.class ) ); + } + +} Propchange: maven/maven-3/branches/mirror-group-routing/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/RoutingRepositoryConnectorFactory.java ------------------------------------------------------------------------------ svn:eol-style = native