Author: joakime
Date: Sun Sep  9 20:03:18 2007
New Revision: 574122

URL: http://svn.apache.org/viewvc?rev=574122&view=rev
Log:
[MRM-463] Metadata merging doesn't work.
Updating guessing of intent on incoming request differently, to handle new 
metadata processing requirements.

Modified:
    
maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/repository/ProxiedDavServer.java

Modified: 
maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/repository/ProxiedDavServer.java
URL: 
http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/repository/ProxiedDavServer.java?rev=574122&r1=574121&r2=574122&view=diff
==============================================================================
--- 
maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/repository/ProxiedDavServer.java
 (original)
+++ 
maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/repository/ProxiedDavServer.java
 Sun Sep  9 20:03:18 2007
@@ -32,6 +32,8 @@
 import 
org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayout;
 import 
org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayoutFactory;
 import org.apache.maven.archiva.repository.layout.LayoutException;
+import org.apache.maven.archiva.repository.metadata.MetadataTools;
+import 
org.apache.maven.archiva.repository.metadata.RepositoryMetadataException;
 import org.codehaus.plexus.webdav.AbstractDavServerComponent;
 import org.codehaus.plexus.webdav.DavServerComponent;
 import org.codehaus.plexus.webdav.DavServerException;
@@ -74,6 +76,11 @@
     /**
      * @plexus.requirement
      */
+    private MetadataTools metadataTools;
+
+    /**
+     * @plexus.requirement
+     */
     private BidirectionalRepositoryLayoutFactory layoutFactory;
 
     private BidirectionalRepositoryLayout layout;
@@ -160,71 +167,83 @@
             return;
         }
 
-        try
+        // Is it a Metadata resource?
+        if ( resource.endsWith( "/" + MetadataTools.MAVEN_METADATA ) )
         {
             ProjectReference project;
             VersionedReference versioned;
-            ArtifactReference artifact;
-            BidirectionalRepositoryLayout resourceLayout;
-
-            try
-            {
-                resourceLayout = layoutFactory.getLayoutForPath( resource );
-            }
-            catch ( LayoutException e )
-            {
-                /* invalid request - eat it */
-                return;
-            }
 
             try
             {
-                artifact = resourceLayout.toArtifactReference( resource );
-                if ( artifact != null )
-                {
-                    connectors.fetchFromProxies( managedRepository, artifact );
-                    request.getRequest().setPathInfo( layout.toPath( artifact 
) );
-                    return;
-                }
-            }
-            catch ( LayoutException e )
-            {
-                /* eat it */
-            }
 
-            try
-            {
-                versioned = resourceLayout.toVersionedReference( resource );
+                versioned = metadataTools.toVersionedReference( resource );
                 if ( versioned != null )
                 {
                     connectors.fetchFromProxies( managedRepository, versioned 
);
-                    request.getRequest().setPathInfo( layout.toPath( versioned 
) );
+                    request.getRequest().setPathInfo( metadataTools.toPath( 
versioned ) );
                     return;
                 }
             }
-            catch ( LayoutException e )
+            catch ( RepositoryMetadataException e )
             {
                 /* eat it */
             }
+            catch ( ProxyException e )
+            {
+                throw new ServletException( "Unable to fetch versioned 
metadata resource.", e );
+            }
 
             try
             {
-                project = resourceLayout.toProjectReference( resource );
+                project = metadataTools.toProjectReference( resource );
                 if ( project != null )
                 {
                     connectors.fetchFromProxies( managedRepository, project );
-                    request.getRequest().setPathInfo( layout.toPath( project ) 
);
+                    request.getRequest().setPathInfo( metadataTools.toPath( 
project ) );
                     return;
                 }
             }
-            catch ( LayoutException e )
+            catch ( RepositoryMetadataException e )
             {
                 /* eat it */
             }
+            catch ( ProxyException e )
+            {
+                throw new ServletException( "Unable to fetch project metadata 
resource.", e );
+            }
+        }
+
+        // Not any of the above? Then it's gotta be an artifact reference.
+        ArtifactReference artifact;
+        BidirectionalRepositoryLayout resourceLayout;
+
+        try
+        {
+            resourceLayout = layoutFactory.getLayoutForPath( resource );
+        }
+        catch ( LayoutException e )
+        {
+            /* invalid request - eat it */
+            return;
+        }
+
+        try
+        {
+            artifact = resourceLayout.toArtifactReference( resource );
+            if ( artifact != null )
+            {
+                connectors.fetchFromProxies( managedRepository, artifact );
+                request.getRequest().setPathInfo( layout.toPath( artifact ) );
+                return;
+            }
+        }
+        catch ( LayoutException e )
+        {
+            /* eat it */
         }
         catch ( ProxyException e )
         {
-            throw new ServletException( "Unable to fetch resource.", e );
+            throw new ServletException( "Unable to fetch artifact resource.", 
e );
         }
     }
 


Reply via email to