Author: jdumay
Date: Thu Feb 26 01:57:39 2009
New Revision: 747984

URL: http://svn.apache.org/viewvc?rev=747984&view=rev
Log:
RepositoryGroup metadata merge and checksum now works


Modified:
    
archiva/branches/archiva-with-new-repoapi/archiva-modules/archiva-base/archiva-repository/src/main/java/org/apache/archiva/repository/GroupRepositoryManager.java
    
archiva/branches/archiva-with-new-repoapi/archiva-modules/archiva-web/archiva-repository-servlet/src/main/java/org/apache/archiva/web/servlet/RepositoryServlet.java
    
archiva/branches/archiva-with-new-repoapi/archiva-modules/archiva-web/archiva-repository-servlet/src/test/java/org/apache/archiva/web/servlet/RepositoryServletRepositoryGroupTest.java

Modified: 
archiva/branches/archiva-with-new-repoapi/archiva-modules/archiva-base/archiva-repository/src/main/java/org/apache/archiva/repository/GroupRepositoryManager.java
URL: 
http://svn.apache.org/viewvc/archiva/branches/archiva-with-new-repoapi/archiva-modules/archiva-base/archiva-repository/src/main/java/org/apache/archiva/repository/GroupRepositoryManager.java?rev=747984&r1=747983&r2=747984&view=diff
==============================================================================
--- 
archiva/branches/archiva-with-new-repoapi/archiva-modules/archiva-base/archiva-repository/src/main/java/org/apache/archiva/repository/GroupRepositoryManager.java
 (original)
+++ 
archiva/branches/archiva-with-new-repoapi/archiva-modules/archiva-base/archiva-repository/src/main/java/org/apache/archiva/repository/GroupRepositoryManager.java
 Thu Feb 26 01:57:39 2009
@@ -96,6 +96,16 @@
         return null;
     }
 
+    private MutableResourceContext 
getMetadataLogicalPathWithoutChecksum(ResourceContext resourceContext)
+    {
+        MutableResourceContext context = new 
MutableResourceContext(resourceContext);
+        if (context.getLogicalPath().endsWith(".md5") || 
context.getLogicalPath().endsWith(".sha1"))
+        {
+            context.setLogicalPath(context.getLogicalPath().substring(0, 
context.getLogicalPath().lastIndexOf('.')));
+        }
+        return context;
+    }
+
     public boolean read(ResourceContext context, OutputStream os)
     {
         final RepositoryGroupConfiguration groupConfiguration = 
getGroupConfiguration(context.getRepositoryId());
@@ -105,7 +115,7 @@
             for (final String repositoryId : 
groupConfiguration.getRepositories() )
             {
                 final ByteArrayOutputStream baos = new ByteArrayOutputStream();
-                final MutableResourceContext resourceContext = new 
MutableResourceContext(context);
+                final MutableResourceContext resourceContext = 
getMetadataLogicalPathWithoutChecksum(context);
                 resourceContext.setRepositoryId(repositoryId);
 
                 if (systemRepositoryManager.read(resourceContext, baos))
@@ -129,6 +139,11 @@
                 }
             }
 
+            if (mainMetadata == null)
+            {
+                throw new RepositoryManagerException("Could not merge 
repository metadata for path " + context.getLogicalPath() + " in repository 
group " + context.getRepositoryId());
+            }
+
             try
             {
                 final OutputStreamWriter writer = new OutputStreamWriter(os);
@@ -175,7 +190,7 @@
         final LinkedHashMap<String, Status> statusMap = new 
LinkedHashMap<String, Status>();
         for (final String repositoryId : groupConfiguration.getRepositories())
         {
-            final MutableResourceContext resourceContext = new 
MutableResourceContext(context);
+            final MutableResourceContext resourceContext = 
getMetadataLogicalPathWithoutChecksum(context);
             resourceContext.setRepositoryId(repositoryId);
 
             ResourceContext rc = 
proxyRepositoryManager.handles(resourceContext);
@@ -207,6 +222,12 @@
     {
         for (final Status status : repositoryManager.stat(resourceContext))
         {
+            //Metadata requests do not have determinable response lengths
+            if (isMetadataRequest(resourceContext) && 
isProjectReference(resourceContext))
+            {
+                status.setContentLength(-1);
+            }
+
             statusMap.put(status.getName(), status);
         }
     }

Modified: 
archiva/branches/archiva-with-new-repoapi/archiva-modules/archiva-web/archiva-repository-servlet/src/main/java/org/apache/archiva/web/servlet/RepositoryServlet.java
URL: 
http://svn.apache.org/viewvc/archiva/branches/archiva-with-new-repoapi/archiva-modules/archiva-web/archiva-repository-servlet/src/main/java/org/apache/archiva/web/servlet/RepositoryServlet.java?rev=747984&r1=747983&r2=747984&view=diff
==============================================================================
--- 
archiva/branches/archiva-with-new-repoapi/archiva-modules/archiva-web/archiva-repository-servlet/src/main/java/org/apache/archiva/web/servlet/RepositoryServlet.java
 (original)
+++ 
archiva/branches/archiva-with-new-repoapi/archiva-modules/archiva-web/archiva-repository-servlet/src/main/java/org/apache/archiva/web/servlet/RepositoryServlet.java
 Thu Feb 26 01:57:39 2009
@@ -209,7 +209,11 @@
             else
             {
                 resp.setStatus(HttpServletResponse.SC_OK);
-                resp.setContentLength((int)status.getContentLength());
+
+                if (status.getContentLength() >= 0)
+                {
+                    resp.setContentLength((int)status.getContentLength());
+                }
                 resp.setContentType(status.getContentType());
                 resp.setDateHeader(LAST_MODIFIED, status.getLastModified());
 

Modified: 
archiva/branches/archiva-with-new-repoapi/archiva-modules/archiva-web/archiva-repository-servlet/src/test/java/org/apache/archiva/web/servlet/RepositoryServletRepositoryGroupTest.java
URL: 
http://svn.apache.org/viewvc/archiva/branches/archiva-with-new-repoapi/archiva-modules/archiva-web/archiva-repository-servlet/src/test/java/org/apache/archiva/web/servlet/RepositoryServletRepositoryGroupTest.java?rev=747984&r1=747983&r2=747984&view=diff
==============================================================================
--- 
archiva/branches/archiva-with-new-repoapi/archiva-modules/archiva-web/archiva-repository-servlet/src/test/java/org/apache/archiva/web/servlet/RepositoryServletRepositoryGroupTest.java
 (original)
+++ 
archiva/branches/archiva-with-new-repoapi/archiva-modules/archiva-web/archiva-repository-servlet/src/test/java/org/apache/archiva/web/servlet/RepositoryServletRepositoryGroupTest.java
 Thu Feb 26 01:57:39 2009
@@ -260,15 +260,6 @@
         assertTrue( "Versions list contains version 2.0", 
metadata.getAvailableVersions().contains( "2.0" ) );
         assertTrue( "Versions list contains version 2.5", 
metadata.getAvailableVersions().contains( "2.5" ) );
         
-        //check if the checksum files were generated
-        File checksumFileSha1 = new File( repoRootFirst, resourceName + 
".sha1" );
-        checksumFileSha1.getParentFile().mkdirs();
-        FileUtils.writeStringToFile( checksumFileSha1, "3290853214d3687134", 
null );
-        
-        File checksumFileMd5 = new File( repoRootFirst, resourceName + ".md5" 
);
-        checksumFileMd5.getParentFile().mkdirs();
-        FileUtils.writeStringToFile( checksumFileMd5, 
"98745897234eda12836423", null );
-        
         // request the sha1 checksum of the metadata
         request =
             new GetMethodWebRequest( "http://machine.com/repository/"; + 
REPO_GROUP_WITH_VALID_REPOS + "/dummy/" +
@@ -276,7 +267,7 @@
         response = sc.getResource( request );
         
         assertResponseOK( response );
-        assertEquals( "add113b0d7f8c6adb92a5015a7a3701081edf998  
maven-metadata-group-with-valid-repos.xml", response.getText() );
+        assertEquals( "add113b0d7f8c6adb92a5015a7a3701081edf998", 
response.getText() );
         
         // request the md5 checksum of the metadata
         request =
@@ -285,7 +276,7 @@
         response = sc.getResource( request );
                 
         assertResponseOK( response );
-        assertEquals( "5b85ea4aa5f52bb76760041a52f98de8  
maven-metadata-group-with-valid-repos.xml", response.getText().trim() );
+        assertEquals( "5b85ea4aa5f52bb76760041a52f98de8", 
response.getText().trim() );
     }
         
     protected void assertResponseMethodNotAllowed( WebResponse response )


Reply via email to