aboutsummaryrefslogtreecommitdiffstats
path: root/archiva-modules/archiva-base/archiva-proxy
diff options
context:
space:
mode:
authorOlivier Lamy <olamy@apache.org>2012-10-31 21:40:53 +0000
committerOlivier Lamy <olamy@apache.org>2012-10-31 21:40:53 +0000
commit2f906b6593efea6268ea149f4604d1240e2b4e7e (patch)
tree9348834bdded06dce5156cdc181177c350acc8fa /archiva-modules/archiva-base/archiva-proxy
parent27c8f4047caf10fa1a0db28e61f2170faa437785 (diff)
downloadarchiva-2f906b6593efea6268ea149f4604d1240e2b4e7e.tar.gz
archiva-2f906b6593efea6268ea149f4604d1240e2b4e7e.zip
[MRM-1707] Allow different implementation of transfer mechanism in the DefaultRepositoryProxyConnectors class
Submitted by charles kim. git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1404368 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'archiva-modules/archiva-base/archiva-proxy')
-rw-r--r--archiva-modules/archiva-base/archiva-proxy/src/main/java/org/apache/archiva/proxy/DefaultRepositoryProxyConnectors.java190
1 files changed, 111 insertions, 79 deletions
diff --git a/archiva-modules/archiva-base/archiva-proxy/src/main/java/org/apache/archiva/proxy/DefaultRepositoryProxyConnectors.java b/archiva-modules/archiva-base/archiva-proxy/src/main/java/org/apache/archiva/proxy/DefaultRepositoryProxyConnectors.java
index 1b6d7831e..96775d153 100644
--- a/archiva-modules/archiva-base/archiva-proxy/src/main/java/org/apache/archiva/proxy/DefaultRepositoryProxyConnectors.java
+++ b/archiva-modules/archiva-base/archiva-proxy/src/main/java/org/apache/archiva/proxy/DefaultRepositoryProxyConnectors.java
@@ -552,6 +552,107 @@ public class DefaultRepositoryProxyConnectors
return null;
}
+ /**
+ * @param connector
+ * @param remoteRepository
+ * @param tmpMd5
+ * @param tmpSha1
+ * @param tmpResource
+ * @param url
+ * @param remotePath
+ * @param resource
+ * @param workingDirectory
+ * @param repository
+ * @throws ProxyException
+ * @throws NotModifiedException
+ */
+ protected void transferResources( ProxyConnector connector, RemoteRepositoryContent remoteRepository, File tmpMd5,
+ File tmpSha1, File tmpResource, String url, String remotePath, File resource,
+ File workingDirectory, ManagedRepositoryContent repository )
+ throws ProxyException, NotModifiedException, RepositoryAdminException
+ {
+ Wagon wagon = null;
+ try
+ {
+ RepositoryURL repoUrl = remoteRepository.getURL();
+ String protocol = repoUrl.getProtocol();
+ NetworkProxy networkProxy = null;
+ if ( StringUtils.isNotBlank( connector.getProxyId() ) )
+ {
+ networkProxy = networkProxyAdmin.getNetworkProxy( connector.getProxyId() );
+ }
+ WagonFactoryRequest wagonFactoryRequest = new WagonFactoryRequest( "wagon#" + protocol,
+ remoteRepository.getRepository().getExtraHeaders() ).networkProxy(
+ networkProxy );
+ wagon = wagonFactory.getWagon( wagonFactoryRequest );
+ if ( wagon == null )
+ {
+ throw new ProxyException( "Unsupported target repository protocol: " + protocol );
+ }
+
+ if ( wagon == null )
+ {
+ throw new ProxyException( "Unsupported target repository protocol: " + protocol );
+ }
+
+ boolean connected = connectToRepository( connector, wagon, remoteRepository );
+ if ( connected )
+ {
+ transferArtifact( wagon, remoteRepository, remotePath, repository, resource, workingDirectory,
+ tmpResource );
+
+ // TODO: these should be used to validate the download based on the policies, not always downloaded
+ // to
+ // save on connections since md5 is rarely used
+ transferChecksum( wagon, remoteRepository, remotePath, repository, resource, workingDirectory, ".sha1",
+ tmpSha1 );
+ transferChecksum( wagon, remoteRepository, remotePath, repository, resource, workingDirectory, ".md5",
+ tmpMd5 );
+ }
+ }
+ catch ( NotFoundException e )
+ {
+ urlFailureCache.cacheFailure( url );
+ throw e;
+ }
+ catch ( NotModifiedException e )
+ {
+ // Do not cache url here.
+ throw e;
+ }
+ catch ( ProxyException e )
+ {
+ urlFailureCache.cacheFailure( url );
+ throw e;
+ }
+ catch ( WagonFactoryException e )
+ {
+ throw new ProxyException( e.getMessage(), e );
+ }
+ finally
+ {
+ if ( wagon != null )
+ {
+ try
+ {
+ wagon.disconnect();
+ }
+ catch ( ConnectionException e )
+ {
+ log.warn( "Unable to disconnect wagon.", e );
+ }
+ }
+ }
+ }
+
+ private void transferArtifact( Wagon wagon, RemoteRepositoryContent remoteRepository, String remotePath,
+ ManagedRepositoryContent repository, File resource, File tmpDirectory,
+ File destFile )
+ throws ProxyException
+ {
+ transferSimpleFile( wagon, remoteRepository, remotePath, repository, resource, destFile );
+ }
+
private long getLastModified( File file )
{
if ( !file.exists() || !file.isFile() )
@@ -689,84 +790,17 @@ public class DefaultRepositoryProxyConnectors
return null;
}
- File tmpMd5 = null;
- File tmpSha1 = null;
- File tmpResource = null;
-
File workingDirectory = createWorkingDirectory( repository );
+ File tmpResource = new File( workingDirectory, resource.getName() );
+ File tmpMd5 = new File( workingDirectory, resource.getName() + ".md5" );
+ File tmpSha1 = new File( workingDirectory, resource.getName() + ".sha1" );
+
try
{
Wagon wagon = null;
- try
- {
- RepositoryURL repoUrl = remoteRepository.getURL();
- String protocol = repoUrl.getProtocol();
- NetworkProxy networkProxy = null;
- if ( StringUtils.isNotBlank( connector.getProxyId() ) )
- {
- networkProxy = networkProxyAdmin.getNetworkProxy( connector.getProxyId() );
- }
- wagon = ( networkProxy != null && networkProxy.isUseNtlm() )
- ? wagonFactory.getWagon( new WagonFactoryRequest( "wagon#" + protocol + "-ntlm",
- remoteRepository.getRepository().getExtraHeaders() ) )
- : wagonFactory.getWagon( new WagonFactoryRequest( "wagon#" + protocol,
- remoteRepository.getRepository().getExtraHeaders() ) );
- if ( wagon == null )
- {
- throw new ProxyException( "Unsupported target repository protocol: " + protocol );
- }
-
- boolean connected = connectToRepository( connector, wagon, remoteRepository );
- if ( connected )
- {
- tmpResource = new File( workingDirectory, resource.getName() );
- transferSimpleFile( wagon, remoteRepository, remotePath, repository, resource, tmpResource );
-
- // TODO: these should be used to validate the download based on the policies, not always downloaded
- // to
- // save on connections since md5 is rarely used
- tmpSha1 =
- transferChecksum( wagon, remoteRepository, remotePath, repository, resource, workingDirectory,
- ".sha1" );
- tmpMd5 =
- transferChecksum( wagon, remoteRepository, remotePath, repository, resource, workingDirectory,
- ".md5" );
- }
- }
- catch ( NotFoundException e )
- {
- urlFailureCache.cacheFailure( url );
- throw e;
- }
- catch ( NotModifiedException e )
- {
- // Do not cache url here.
- throw e;
- }
- catch ( ProxyException e )
- {
- urlFailureCache.cacheFailure( url );
- throw e;
- }
- catch ( WagonFactoryException e )
- {
- throw new ProxyException( e.getMessage(), e );
- }
- finally
- {
- if ( wagon != null )
- {
- try
- {
- wagon.disconnect();
- }
- catch ( ConnectionException e )
- {
- log.warn( "Unable to disconnect wagon.", e );
- }
- }
- }
+ transferResources( connector, remoteRepository, tmpMd5, tmpSha1, tmpResource, url, remotePath, resource,
+ workingDirectory, repository );
// Handle post-download policies.
try
@@ -858,8 +892,9 @@ public class DefaultRepositoryProxyConnectors
* @param ext the type of checksum to transfer (example: ".md5" or ".sha1")
* @throws ProxyException if copying the downloaded file into place did not succeed.
*/
- private File transferChecksum( Wagon wagon, RemoteRepositoryContent remoteRepository, String remotePath,
- ManagedRepositoryContent repository, File resource, File tmpDirectory, String ext )
+ private void transferChecksum( Wagon wagon, RemoteRepositoryContent remoteRepository, String remotePath,
+ ManagedRepositoryContent repository, File resource, File tmpDirectory, String ext,
+ File destFile )
throws ProxyException
{
String url = remoteRepository.getURL().getUrl() + remotePath + ext;
@@ -867,11 +902,9 @@ public class DefaultRepositoryProxyConnectors
// Transfer checksum does not use the policy.
if ( urlFailureCache.hasFailedBefore( url ) )
{
- return null;
+ return;
}
- File destFile = new File( tmpDirectory, resource.getName() + ext );
-
try
{
transferSimpleFile( wagon, remoteRepository, remotePath + ext, repository, resource, destFile );
@@ -895,7 +928,6 @@ public class DefaultRepositoryProxyConnectors
// Critical issue, pass it on.
throw e;
}
- return destFile;
}
/**