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)
             {


Reply via email to