Author: jdumay
Date: Thu Feb 26 04:10:04 2009
New Revision: 748002
URL: http://svn.apache.org/viewvc?rev=748002&view=rev
Log:
Proxy repository now deals with legacy server side relocation
Modified:
archiva/branches/archiva-with-new-repoapi/archiva-modules/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/ProxyRepositoryManager.java
Modified:
archiva/branches/archiva-with-new-repoapi/archiva-modules/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/ProxyRepositoryManager.java
URL:
http://svn.apache.org/viewvc/archiva/branches/archiva-with-new-repoapi/archiva-modules/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/ProxyRepositoryManager.java?rev=748002&r1=748001&r2=748002&view=diff
==============================================================================
---
archiva/branches/archiva-with-new-repoapi/archiva-modules/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/ProxyRepositoryManager.java
(original)
+++
archiva/branches/archiva-with-new-repoapi/archiva-modules/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/ProxyRepositoryManager.java
Thu Feb 26 04:10:04 2009
@@ -89,7 +89,32 @@
public boolean read(ResourceContext context, OutputStream os)
{
- return repositoryManager.read(context, os);
+ final MutableResourceContext resourceContext = new
MutableResourceContext(context);
+ final ManagedRepositoryContent managedRepository =
getManagedRepositoryContent(context);
+ try
+ {
+ performPathAjustment(resourceContext, managedRepository);
+
+ final ArtifactReference artifactReference =
managedRepository.toArtifactReference(resourceContext.getLogicalPath());
+ if (artifactReference != null)
+ {
+ try
+ {
+ applyServerSideRelocation(managedRepository,
artifactReference);
+ }
+ catch (ProxyDownloadException e)
+ {
+ log.error(e.getMessage(), e);
+ }
+
resourceContext.setLogicalPath(managedRepository.toPath(artifactReference));
+ }
+ }
+ catch (LayoutException e)
+ {
+ //Ignore
+ }
+
+ return repositoryManager.read(resourceContext, os);
}
public List<Status> stat(ResourceContext context)
@@ -97,11 +122,44 @@
final MutableResourceContext resourceContext = new
MutableResourceContext(context);
//Return the stat() result from the system repository if we are simply
getting a collection
+ final ManagedRepositoryContent managedRepository =
getManagedRepositoryContent(context);
+ if (isCollection(context, managedRepository))
+ {
+ return repositoryManager.stat(context);
+ }
+
+ final Status status = doProxy(managedRepository, resourceContext);
+ if (status != null)
+ {
+ return Arrays.asList(status);
+ }
+ return Collections.EMPTY_LIST;
+ }
- ManagedRepositoryContent managedRepository = null;
+ public boolean write(ResourceContext context, InputStream is)
+ {
+ return repositoryManager.write(context, is);
+ }
+
+ private boolean performPathAjustment(MutableResourceContext
resourceContext, ManagedRepositoryContent managedRepository)
+ {
try
{
- managedRepository =
repositoryFactory.getManagedRepositoryContent(resourceContext.getRepositoryId());
+ String localResourcePath = repositoryRequest.toNativePath(
resourceContext.getLogicalPath(), managedRepository );
+ resourceContext.setLogicalPath(localResourcePath);
+ return true;
+ }
+ catch (LayoutException e)
+ {
+ return false;
+ }
+ }
+
+ private ManagedRepositoryContent
getManagedRepositoryContent(ResourceContext resourceContext)
+ {
+ try
+ {
+ return
repositoryFactory.getManagedRepositoryContent(resourceContext.getRepositoryId());
}
catch (RepositoryNotFoundException e)
{
@@ -111,9 +169,10 @@
{
throw new RepositoryManagerException(e.getMessage(), e);
}
+ }
- //Check if logical path can be mushed into a valid path. This is so
ugly.
- boolean isCollection = false;
+ private boolean isCollection(ResourceContext resourceContext,
ManagedRepositoryContent managedRepository)
+ {
try
{
this.repositoryRequest.toArtifactReference(resourceContext.getLogicalPath());
@@ -126,26 +185,10 @@
}
catch (LayoutException ex)
{
- isCollection = true;
+ return true;
}
}
-
- if (isCollection)
- {
- return repositoryManager.stat(context);
- }
-
- final Status status = doProxy(managedRepository, resourceContext);
- if (status != null)
- {
- return Arrays.asList(status);
- }
- return Collections.EMPTY_LIST;
- }
-
- public boolean write(ResourceContext context, InputStream is)
- {
- return repositoryManager.write(context, is);
+ return false;
}
private Status doProxy( ManagedRepositoryContent managedRepository,
MutableResourceContext context )
@@ -158,14 +201,8 @@
// legacy layout format.
Status status = fetchContentFromProxies( managedRepository, context );
- try
- {
- // Perform an adjustment of the resource to the managed
- // repository expected path.
- String localResourcePath = repositoryRequest.toNativePath(
context.getLogicalPath(), managedRepository );
- resourceFile = new File( managedRepository.getId(),
localResourcePath );
- }
- catch ( LayoutException e )
+
+ if (!performPathAjustment(context, managedRepository))
{
if (previouslyExisted)
{