avoid using plexus-sisu bridge to get wagon instances: use now spring

git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1235559 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Olivier Lamy 2012-01-24 23:42:53 +00:00
parent 5eed5ccf55
commit 37382ef788
17 changed files with 120 additions and 94 deletions

View File

@ -57,6 +57,11 @@
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-i18n</artifactId>
</dependency>
<dependency>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-http</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>

View File

@ -36,6 +36,11 @@
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-provider-api</artifactId>
</dependency>
<dependency>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-http</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-file</artifactId>
@ -79,6 +84,8 @@
org.apache.archiva.common.plexusbridge;version=${project.version},
org.apache.commons.lang;version="[2.4,3)",
org.springframework.stereotype;version="[3,4)",
org.springframework.context;version="[3,4)",
org.springframework.beans;version="[3,4)",
org.apache.maven.wagon*,
org.slf4j;resolution:=optional
</Import-Package>

View File

@ -23,6 +23,8 @@
import org.apache.archiva.common.plexusbridge.PlexusSisuBridgeException;
import org.apache.commons.lang.StringUtils;
import org.apache.maven.wagon.Wagon;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Service;
import javax.inject.Inject;
@ -38,12 +40,15 @@ public class DefaultWagonFactory
private PlexusSisuBridge plexusSisuBridge;
private ApplicationContext applicationContext;
private DebugTransferListener debugTransferListener = new DebugTransferListener();
@Inject
public DefaultWagonFactory( PlexusSisuBridge plexusSisuBridge )
public DefaultWagonFactory( PlexusSisuBridge plexusSisuBridge, ApplicationContext applicationContext )
{
this.plexusSisuBridge = plexusSisuBridge;
this.applicationContext = applicationContext;
}
public Wagon getWagon( String protocol )
@ -53,12 +58,17 @@ public Wagon getWagon( String protocol )
{
// with sisu inject bridge hint is file or http
// so remove wagon#
protocol = StringUtils.remove( protocol, "wagon#" );
Wagon wagon = plexusSisuBridge.lookup( Wagon.class, protocol );
//protocol = StringUtils.remove( protocol, "wagon#" );
// spring beans will be named wagon#protocol (http, https, file )
protocol = StringUtils.startsWith( protocol, "wagon#" ) ? protocol : "wagon#" + protocol;
//Wagon wagon = plexusSisuBridge.lookup( Wagon.class, protocol );
Wagon wagon = applicationContext.getBean( protocol, Wagon.class );
wagon.addTransferListener( debugTransferListener );
return wagon;
}
catch ( PlexusSisuBridgeException e )
//catch ( PlexusSisuBridgeException e )
catch ( BeansException e )
{
throw new WagonFactoryException( e.getMessage(), e );
}

View File

@ -30,5 +30,8 @@
<context:annotation-config/>
<context:component-scan base-package="org.apache.archiva.proxy.common"/>
<bean name="wagon#http" scope="prototype" class="org.apache.maven.wagon.providers.http.HttpWagon"/>
<bean name="wagon#https" scope="prototype" class="org.apache.maven.wagon.providers.http.HttpWagon"/>
</beans>

View File

@ -27,4 +27,6 @@
http://www.springframework.org/schema/context/spring-context-3.0.xsd"
default-lazy-init="true">
<bean name="wagon#file" scope="prototype" class="org.apache.maven.wagon.providers.file.FileWagon"/>
</beans>

View File

@ -73,6 +73,11 @@
<groupId>org.apache.archiva</groupId>
<artifactId>archiva-plexus-bridge</artifactId>
</dependency>
<dependency>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-http</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-file</artifactId>

View File

@ -1042,8 +1042,8 @@ private boolean connectToRepository( ProxyConnector connector, Wagon wagon,
{
boolean connected = false;
final ProxyInfo networkProxy = this.networkProxyMap.get( connector.getProxyId() );
final ProxyInfo networkProxy =
connector.getProxyId() == null ? null : this.networkProxyMap.get( connector.getProxyId() );
if ( log.isDebugEnabled() )
{

View File

@ -135,7 +135,7 @@ public abstract class AbstractProxyTestCase
protected ManagedRepositoryAdmin managedRepositoryAdmin;
@Inject
PlexusSisuBridge plexusSisuBridge;
protected PlexusSisuBridge plexusSisuBridge;
@Before
public void setUp()
@ -208,7 +208,7 @@ public void setUp()
wagonMockControl = MockControl.createNiceControl( Wagon.class );
wagonMock = (Wagon) wagonMockControl.getMock();
delegate = (WagonDelegate) plexusSisuBridge.lookup( Wagon.class, "test" );
delegate = (WagonDelegate) applicationContext.getBean( "wagon#test", Wagon.class );
delegate.setDelegate( wagonMock );

View File

@ -19,10 +19,6 @@
* under the License.
*/
import java.io.File;
import java.io.IOException;
import java.util.List;
import org.apache.commons.io.FileUtils;
import org.apache.maven.wagon.ConnectionException;
import org.apache.maven.wagon.ResourceDoesNotExistException;
@ -40,9 +36,14 @@
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import javax.inject.Inject;
import javax.inject.Named;
import java.io.File;
import java.io.IOException;
import java.util.List;
/**
* A dummy wagon implementation
*
*/
@Service( "wagon#test" )
public class WagonDelegate

View File

@ -1,28 +0,0 @@
<!--
~ Licensed to the Apache Software Foundation (ASF) under one
~ or more contributor license agreements. See the NOTICE file
~ distributed with this work for additional information
~ regarding copyright ownership. The ASF licenses this file
~ to you under the Apache License, Version 2.0 (the
~ "License"); you may not use this file except in compliance
~ with the License. You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing,
~ software distributed under the License is distributed on an
~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~ KIND, either express or implied. See the License for the
~ specific language governing permissions and limitations
~ under the License.
-->
<component-set>
<components>
<component>
<role>org.apache.maven.wagon.Wagon</role>
<role-hint>test</role-hint>
<implementation>org.apache.archiva.proxy.WagonDelegate</implementation>
</component>
</components>
</component-set>

View File

@ -27,4 +27,6 @@
http://www.springframework.org/schema/context/spring-context-3.0.xsd"
default-lazy-init="true">
</beans>

View File

@ -80,5 +80,7 @@
<property name="timeToLiveSeconds" value="1800"/>
</bean>
<bean name="wagon#test" class="org.apache.archiva.proxy.WagonDelegate" scope="singleton"/>
<bean name="wagon#file" scope="prototype" class="org.apache.maven.wagon.providers.file.FileWagon"/>
</beans>

View File

@ -75,6 +75,11 @@
<groupId>org.apache.archiva</groupId>
<artifactId>maven2-repository</artifactId>
</dependency>
<dependency>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-http</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>

View File

@ -130,7 +130,6 @@ public void run()
final Wagon wagon = wagonFactory.getWagon( new URL( this.remoteRepository.getUrl() ).getProtocol() );
setupWagonReadTimeout( wagon );
// TODO transferListener
wagon.addTransferListener( new DownloadListener() );
ProxyInfo proxyInfo = null;
if ( this.networkProxy != null )

View File

@ -62,6 +62,11 @@
<groupId>org.apache.archiva</groupId>
<artifactId>archiva-repository-scanner</artifactId>
</dependency>
<dependency>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-http</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.archiva</groupId>
<artifactId>archiva-repository-layer</artifactId>

View File

@ -99,6 +99,11 @@
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-provider-api</artifactId>
</dependency>
<dependency>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-http</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>

View File

@ -19,20 +19,15 @@
* under the License.
*/
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import org.apache.archiva.metadata.repository.storage.RepositoryPathTranslator;
import org.apache.archiva.proxy.common.WagonFactory;
import org.apache.archiva.proxy.common.WagonFactoryException;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.archiva.common.utils.VersionUtil;
import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
import org.apache.archiva.configuration.RemoteRepositoryConfiguration;
import org.apache.archiva.metadata.repository.storage.RepositoryPathTranslator;
import org.apache.archiva.proxy.common.WagonFactory;
import org.apache.archiva.proxy.common.WagonFactoryException;
import org.apache.archiva.xml.XMLException;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.maven.model.Repository;
import org.apache.maven.model.building.FileModelSource;
import org.apache.maven.model.building.ModelSource;
@ -50,6 +45,11 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Map;
public class RepositoryModelResolver
implements ModelResolver
{
@ -77,9 +77,10 @@ public RepositoryModelResolver( File basedir, RepositoryPathTranslator pathTrans
this.pathTranslator = pathTranslator;
}
public RepositoryModelResolver( File basedir, RepositoryPathTranslator pathTranslator,
WagonFactory wagonFactory, List<RemoteRepositoryConfiguration> remoteRepositories,
Map<String, ProxyInfo> networkProxiesMap, ManagedRepositoryConfiguration targetRepository )
public RepositoryModelResolver( File basedir, RepositoryPathTranslator pathTranslator, WagonFactory wagonFactory,
List<RemoteRepositoryConfiguration> remoteRepositories,
Map<String, ProxyInfo> networkProxiesMap,
ManagedRepositoryConfiguration targetRepository )
{
this( basedir, pathTranslator );
@ -109,7 +110,8 @@ public ModelSource resolveModel( String groupId, String artifactId, String versi
boolean success = getModelFromProxy( remoteRepository, groupId, artifactId, version, filename );
if ( success && model.exists() )
{
log.info( "Model '" + model.getAbsolutePath() + "' successfully retrieved from remote repository '"
log.info(
"Model '" + model.getAbsolutePath() + "' successfully retrieved from remote repository '"
+ remoteRepository.getId() + "'" );
break;
}
@ -177,7 +179,8 @@ private boolean getModelFromProxy( RemoteRepositoryConfiguration remoteRepositor
// get the metadata first!
File tmpMetadataResource = new File( workingDirectory, METADATA_FILENAME );
String metadataPath = StringUtils.substringBeforeLast( artifactPath, "/" ) + "/" + METADATA_FILENAME;
String metadataPath =
StringUtils.substringBeforeLast( artifactPath, "/" ) + "/" + METADATA_FILENAME;
wagon.get( metadataPath, tmpMetadataResource );
@ -190,10 +193,10 @@ private boolean getModelFromProxy( RemoteRepositoryConfiguration remoteRepositor
String timestampVersion = version;
if ( snapshotVersion != null )
{
timestampVersion =
timestampVersion.substring( 0, timestampVersion.length() - 8 ); // remove SNAPSHOT from end
timestampVersion =
timestampVersion + snapshotVersion.getTimestamp() + "-" + snapshotVersion.getBuildNumber();
timestampVersion = timestampVersion.substring( 0, timestampVersion.length()
- 8 ); // remove SNAPSHOT from end
timestampVersion = timestampVersion + snapshotVersion.getTimestamp() + "-"
+ snapshotVersion.getBuildNumber();
filename = artifactId + "-" + timestampVersion + ".pom";
@ -209,10 +212,10 @@ private boolean getModelFromProxy( RemoteRepositoryConfiguration remoteRepositor
log.debug( "Downloaded successfully." );
tmpSha1 =
transferChecksum( wagon, remoteRepository, artifactPath, tmpResource, workingDirectory, ".sha1" );
tmpMd5 =
transferChecksum( wagon, remoteRepository, artifactPath, tmpResource, workingDirectory, ".md5" );
tmpSha1 = transferChecksum( wagon, remoteRepository, artifactPath, tmpResource, workingDirectory,
".sha1" );
tmpMd5 = transferChecksum( wagon, remoteRepository, artifactPath, tmpResource, workingDirectory,
".md5" );
}
}
finally
@ -267,8 +270,7 @@ private boolean connectToRepository( Wagon wagon, RemoteRepositoryConfiguration
if ( networkProxy != null )
{
String msg =
"Using network proxy " + networkProxy.getHost() + ":" + networkProxy.getPort()
String msg = "Using network proxy " + networkProxy.getHost() + ":" + networkProxy.getPort()
+ " to connect to remote repository " + remoteRepository.getUrl();
if ( networkProxy.getNonProxyHosts() != null )
{
@ -289,7 +291,7 @@ private boolean connectToRepository( Wagon wagon, RemoteRepositoryConfiguration
if ( StringUtils.isNotBlank( username ) && StringUtils.isNotBlank( password ) )
{
log.debug( "Using username " + username + " to connect to remote repository " + remoteRepository.getUrl() );
log.debug( "Using username {} to connect to remote repository {}", username, remoteRepository.getUrl() );
authInfo = new AuthenticationInfo();
authInfo.setUserName( username );
authInfo.setPassword( password );
@ -366,7 +368,8 @@ private void moveFileIfExists( File fileToMove, File directory )
File newLocation = new File( directory, fileToMove.getName() );
if ( newLocation.exists() && !newLocation.delete() )
{
throw new RuntimeException( "Unable to overwrite existing target file: " + newLocation.getAbsolutePath() );
throw new RuntimeException(
"Unable to overwrite existing target file: " + newLocation.getAbsolutePath() );
}
newLocation.getParentFile().mkdirs();
@ -387,8 +390,8 @@ private void moveFileIfExists( File fileToMove, File directory )
}
else
{
throw new RuntimeException( "Cannot copy tmp file " + fileToMove.getAbsolutePath()
+ " to its final location", e );
throw new RuntimeException(
"Cannot copy tmp file " + fileToMove.getAbsolutePath() + " to its final location", e );
}
}
finally