Author: olamy
Date: Wed Dec  4 12:09:22 2013
New Revision: 1547780

URL: http://svn.apache.org/r1547780
Log:
more moving of maven2 logic from dav

Modified:
    archiva/trunk/archiva-modules/archiva-web/archiva-webdav/pom.xml
    
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/archiva/webdav/ArchivaDavResourceFactory.java
    
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/archiva/webdav/util/RepositoryPathUtil.java
    
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/archiva/webdav/RepositoryServletRepositoryGroupTest.java
    
archiva/trunk/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/storage/RepositoryStorage.java
    
archiva/trunk/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryStorage.java

Modified: archiva/trunk/archiva-modules/archiva-web/archiva-webdav/pom.xml
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webdav/pom.xml?rev=1547780&r1=1547779&r2=1547780&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-web/archiva-webdav/pom.xml (original)
+++ archiva/trunk/archiva-modules/archiva-web/archiva-webdav/pom.xml Wed Dec  4 
12:09:22 2013
@@ -224,6 +224,11 @@
       <artifactId>redback-common-test-resources</artifactId>
       <scope>test</scope>
     </dependency>
+    <dependency>
+      <groupId>org.easytesting</groupId>
+      <artifactId>fest-assert-core</artifactId>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
   <build>
     <plugins>

Modified: 
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/archiva/webdav/ArchivaDavResourceFactory.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/archiva/webdav/ArchivaDavResourceFactory.java?rev=1547780&r1=1547779&r2=1547780&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/archiva/webdav/ArchivaDavResourceFactory.java
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/archiva/webdav/ArchivaDavResourceFactory.java
 Wed Dec  4 12:09:22 2013
@@ -198,7 +198,7 @@ public class ArchivaDavResourceFactory
     @PostConstruct
     public void initialize()
     {
-
+        // no op
     }
 
     public DavResource createResource( final DavResourceLocator locator, final 
DavServletRequest request,
@@ -227,10 +227,17 @@ public class ArchivaDavResourceFactory
             log.debug( "Repository group '{}' accessed by '{}", 
repoGroupConfig.getId(), activePrincipal );
 
             // handle browse requests for virtual repos
-            if ( RepositoryPathUtil.getLogicalResource( 
archivaLocator.getOrigResourcePath() ).endsWith( "/" ) )
+            if ( getLogicalResource( archivaLocator, null, true ).endsWith( 
"/" ) )
             {
-                return getResourceFromGroup( request, 
repoGroupConfig.getRepositories(), archivaLocator,
-                                             repoGroupConfig );
+                try
+                {
+                    return getResourceFromGroup( request, 
repoGroupConfig.getRepositories(), archivaLocator,
+                                                 repoGroupConfig );
+                }
+                catch ( RepositoryAdminException e )
+                {
+                    throw new DavException( 500, e );
+                }
             }
             else
             {
@@ -252,7 +259,7 @@ public class ArchivaDavResourceFactory
 
                 if ( remoteRepository != null )
                 {
-                    String logicalResource = 
RepositoryPathUtil.getLogicalResource( locator.getResourcePath() );
+                    String logicalResource = getLogicalResource( 
archivaLocator, null, false );
                     IndexingContext indexingContext = 
remoteRepositoryAdmin.createIndexContext( remoteRepository );
                     File resourceFile = StringUtils.equals( logicalResource, 
"/" )
                         ? new File( 
indexingContext.getIndexDirectoryFile().getParent() )
@@ -275,7 +282,8 @@ public class ArchivaDavResourceFactory
 
             try
             {
-                managedRepositoryContent = 
repositoryFactory.getManagedRepositoryContent( archivaLocator.getRepositoryId() 
);
+                managedRepositoryContent =
+                    repositoryFactory.getManagedRepositoryContent( 
archivaLocator.getRepositoryId() );
             }
             catch ( RepositoryNotFoundException e )
             {
@@ -292,16 +300,18 @@ public class ArchivaDavResourceFactory
             try
             {
                 resource = processRepository( request, archivaLocator, 
activePrincipal, managedRepositoryContent,
-                                              
managedRepositoryAdmin.getManagedRepository( archivaLocator.getRepositoryId() ) 
);
+                                              
managedRepositoryAdmin.getManagedRepository(
+                                                  
archivaLocator.getRepositoryId() ) );
+
+                String logicalResource = getLogicalResource( archivaLocator, 
null, false );
+                resourcesInAbsolutePath.add(
+                    new File( managedRepositoryContent.getRepoRoot(), 
logicalResource ).getAbsolutePath() );
+
             }
             catch ( RepositoryAdminException e )
             {
                 throw new DavException( 500, e );
             }
-
-            String logicalResource = RepositoryPathUtil.getLogicalResource( 
locator.getResourcePath() );
-            resourcesInAbsolutePath.add(
-                new File( managedRepositoryContent.getRepoRoot(), 
logicalResource ).getAbsolutePath() );
         }
 
         String requestedResource = request.getRequestURI();
@@ -329,7 +339,7 @@ public class ArchivaDavResourceFactory
                     if ( metadataChecksum.exists() )
                     {
                         LogicalResource logicalResource =
-                            new LogicalResource( 
RepositoryPathUtil.getLogicalResource( locator.getResourcePath() ) );
+                            new LogicalResource (getLogicalResource( 
archivaLocator, null, false ) );
 
                         resource =
                             new ArchivaDavResource( 
metadataChecksum.getAbsolutePath(), logicalResource.getPath(), null,
@@ -367,8 +377,7 @@ public class ArchivaDavResourceFactory
                         {
                             File resourceFile = writeMergedMetadataToFile( 
mergedMetadata, filePath );
 
-                            LogicalResource logicalResource = new 
LogicalResource(
-                                RepositoryPathUtil.getLogicalResource( 
locator.getResourcePath() ) );
+                            LogicalResource logicalResource = new 
LogicalResource( getLogicalResource( archivaLocator, null, false ) );
 
                             resource =
                                 new ArchivaDavResource( 
resourceFile.getAbsolutePath(), logicalResource.getPath(), null,
@@ -389,7 +398,7 @@ public class ArchivaDavResourceFactory
                         catch ( DigesterException de )
                         {
                             throw new DavException( 
HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
-                                                    "Error occurred while 
generating checksum files." );
+                                                    "Error occurred while 
generating checksum files." + de.getMessage() );
                         }
                     }
                 }
@@ -437,10 +446,10 @@ public class ArchivaDavResourceFactory
         {
             for ( String repositoryId : repositories )
             {
-                ManagedRepositoryContent managedRepository;
+                ManagedRepositoryContent managedRepositoryContent;
                 try
                 {
-                    managedRepository = 
repositoryFactory.getManagedRepositoryContent( repositoryId );
+                    managedRepositoryContent = 
repositoryFactory.getManagedRepositoryContent( repositoryId );
                 }
                 catch ( RepositoryNotFoundException e )
                 {
@@ -453,21 +462,22 @@ public class ArchivaDavResourceFactory
 
                 try
                 {
+                    ManagedRepository managedRepository = 
managedRepositoryAdmin.getManagedRepository( repositoryId );
                     DavResource updatedResource =
-                        processRepository( request, archivaLocator, 
activePrincipal, managedRepository,
-                                           
managedRepositoryAdmin.getManagedRepository( repositoryId ) );
+                        processRepository( request, archivaLocator, 
activePrincipal, managedRepositoryContent,
+                                           managedRepository );
                     if ( resource == null )
                     {
                         resource = updatedResource;
                     }
 
-                    String logicalResource = 
RepositoryPathUtil.getLogicalResource( archivaLocator.getResourcePath() );
+                    String logicalResource = getLogicalResource( 
archivaLocator, null, false );
                     if ( logicalResource.endsWith( "/" ) )
                     {
                         logicalResource = logicalResource.substring( 1 );
                     }
                     resourcesInAbsolutePath.add(
-                        new File( managedRepository.getRepoRoot(), 
logicalResource ).getAbsolutePath() );
+                        new File( managedRepositoryContent.getRepoRoot(), 
logicalResource ).getAbsolutePath() );
                 }
                 catch ( DavException e )
                 {
@@ -502,6 +512,21 @@ public class ArchivaDavResourceFactory
         return resource;
     }
 
+    private String getLogicalResource( ArchivaDavResourceLocator 
archivaLocator, ManagedRepository managedRepository,
+                                       boolean useOrigResourcePath )
+    {
+        // FIXME remove this hack
+        // but currently managedRepository can be null in case of group
+        String layout = managedRepository == null ? new ManagedRepository( 
).getLayout() : managedRepository.getLayout();
+        RepositoryStorage repositoryStorage =
+            this.applicationContext.getBean( "repositoryStorage#" + layout, 
RepositoryStorage.class );
+        String path = repositoryStorage.getFilePath(
+            useOrigResourcePath ? archivaLocator.getOrigResourcePath() : 
archivaLocator.getResourcePath(), managedRepository );
+        log.debug( "found path {} for resourcePath: '{}' with managedRepo '{}' 
and layout '{}'", path,
+                   archivaLocator.getResourcePath(), managedRepository == null 
? "null" : managedRepository.getId(), layout );
+        return path;
+    }
+
     private DavResource processRepository( final DavServletRequest request, 
ArchivaDavResourceLocator archivaLocator,
                                            String activePrincipal, 
ManagedRepositoryContent managedRepositoryContent,
                                            ManagedRepository managedRepository 
)
@@ -510,10 +535,7 @@ public class ArchivaDavResourceFactory
         DavResource resource = null;
         if ( isAuthorized( request, managedRepositoryContent.getId() ) )
         {
-            RepositoryStorage repositoryStorage =
-                this.applicationContext.getBean( "repositoryStorage#" + 
managedRepository.getLayout(),
-                                                 RepositoryStorage.class );
-            String path = repositoryStorage.getFilePath( 
archivaLocator.getResourcePath(), managedRepository );
+            String path = getLogicalResource( archivaLocator, 
managedRepository, false );
             if ( path.startsWith( "/" ) )
             {
                 path = path.substring( 1 );
@@ -641,7 +663,8 @@ public class ArchivaDavResourceFactory
                                        AuditEvent.CREATE_DIR, activePrincipal 
);
                 }
             }
-        } return resource;
+        }
+        return resource;
     }
 
     public DavResource createResource( final DavResourceLocator locator, final 
DavSession davSession )
@@ -649,10 +672,11 @@ public class ArchivaDavResourceFactory
     {
         ArchivaDavResourceLocator archivaLocator = 
checkLocatorIsInstanceOfRepositoryLocator( locator );
 
-        ManagedRepositoryContent managedRepository;
+        ManagedRepositoryContent managedRepositoryContent;
         try
         {
-            managedRepository = repositoryFactory.getManagedRepositoryContent( 
archivaLocator.getRepositoryId() );
+            managedRepositoryContent =
+                repositoryFactory.getManagedRepositoryContent( 
archivaLocator.getRepositoryId() );
         }
         catch ( RepositoryNotFoundException e )
         {
@@ -664,17 +688,26 @@ public class ArchivaDavResourceFactory
             throw new DavException( 
HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e );
         }
 
-        String logicalResource = RepositoryPathUtil.getLogicalResource( 
locator.getResourcePath() );
-        if ( logicalResource.startsWith( "/" ) )
+        DavResource resource = null;
+        try
         {
-            logicalResource = logicalResource.substring( 1 );
-        }
-        File resourceFile = new File( managedRepository.getRepoRoot(), 
logicalResource );
-        DavResource resource =
-            new ArchivaDavResource( resourceFile.getAbsolutePath(), 
logicalResource, managedRepository.getRepository(),
-                                    davSession, archivaLocator, this, 
mimeTypes, auditListeners, scheduler );
+            String logicalResource = getLogicalResource( archivaLocator, 
managedRepositoryAdmin.getManagedRepository(
+                archivaLocator.getRepositoryId() ), false );
+            if ( logicalResource.startsWith( "/" ) )
+            {
+                logicalResource = logicalResource.substring( 1 );
+            }
+            File resourceFile = new File( 
managedRepositoryContent.getRepoRoot(), logicalResource );
+            resource = new ArchivaDavResource( resourceFile.getAbsolutePath(), 
logicalResource,
+                                               
managedRepositoryContent.getRepository(), davSession, archivaLocator,
+                                               this, mimeTypes, 
auditListeners, scheduler );
 
-        resource.addLockManager( lockManager );
+            resource.addLockManager( lockManager );
+        }
+        catch ( RepositoryAdminException e )
+        {
+            throw new DavException( 500, e );
+        }
         return resource;
     }
 
@@ -893,10 +926,15 @@ public class ArchivaDavResourceFactory
     private DavResource getResourceFromGroup( DavServletRequest request, 
List<String> repositories,
                                               ArchivaDavResourceLocator 
locator,
                                               RepositoryGroupConfiguration 
repositoryGroupConfiguration )
-        throws DavException
+        throws DavException, RepositoryAdminException
     {
         List<File> mergedRepositoryContents = new ArrayList<File>();
-        String path = RepositoryPathUtil.getLogicalResource( 
locator.getResourcePath() );
+        // multiple repo types so we guess they are all the same type
+        // so use the first one
+        // FIXME add a method with group in the repository storage
+        String firstRepoId = 
repositoryGroupConfiguration.getRepositories().get( 1 );
+
+        String path = getLogicalResource( locator, 
managedRepositoryAdmin.getManagedRepository( firstRepoId ), false );
         if ( path.startsWith( "/" ) )
         {
             path = path.substring( 1 );

Modified: 
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/archiva/webdav/util/RepositoryPathUtil.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/archiva/webdav/util/RepositoryPathUtil.java?rev=1547780&r1=1547779&r2=1547780&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/archiva/webdav/util/RepositoryPathUtil.java
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/archiva/webdav/util/RepositoryPathUtil.java
 Wed Dec  4 12:09:22 2013
@@ -26,46 +26,6 @@ import org.apache.commons.lang.StringUti
  */
 public class RepositoryPathUtil
 {
-    public static String getLogicalResource( final String href )
-    {
-        String logicalResource = null;
-        String requestPathInfo = StringUtils.defaultString( href );
-
-        //remove prefix ie /repository/blah becomes /blah
-        requestPathInfo = removePrefix( requestPathInfo );
-
-        // Remove prefixing slash as the repository id doesn't contain it;
-        if ( requestPathInfo.startsWith( "/" ) )
-        {
-            requestPathInfo = requestPathInfo.substring( 1 );
-        }
-
-        int slash = requestPathInfo.indexOf( '/' );
-        if ( slash > 0 )
-        {
-            logicalResource = requestPathInfo.substring( slash );
-
-            if ( logicalResource.endsWith( "/.." ) )
-            {
-                logicalResource += "/";
-            }
-
-            if ( logicalResource != null && logicalResource.startsWith( "//" ) 
)
-            {
-                logicalResource = logicalResource.substring( 1 );
-            }
-
-            if ( logicalResource == null )
-            {
-                logicalResource = "/";
-            }
-        }
-        else
-        {
-            logicalResource = "/";
-        }
-        return logicalResource;
-    }
 
     public static String getRepositoryName( final String href )
     {

Modified: 
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/archiva/webdav/RepositoryServletRepositoryGroupTest.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/archiva/webdav/RepositoryServletRepositoryGroupTest.java?rev=1547780&r1=1547779&r2=1547780&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/archiva/webdav/RepositoryServletRepositoryGroupTest.java
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/archiva/webdav/RepositoryServletRepositoryGroupTest.java
 Wed Dec  4 12:09:22 2013
@@ -30,6 +30,7 @@ import org.apache.archiva.maven2.metadat
 import org.apache.archiva.model.ArchivaRepositoryMetadata;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang.StringUtils;
+import org.fest.assertions.api.Assertions;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -324,7 +325,8 @@ public class RepositoryServletRepository
         assertTrue( StringUtils.contains( response.getText(), "Collection" ) );
         assertTrue( StringUtils.contains( response.getText(), 
"dummy/dummy-artifact" ) );
         assertTrue( StringUtils.contains( response.getText(), "1.0" ) );
-        assertTrue( StringUtils.contains( response.getText(), "2.0" ) );
+        Assertions.assertThat( response.getText() ).contains( "2.0" );
+        //assertTrue( StringUtils.contains( response.getText(), "2.0" ) );
     }
 
     protected void assertResponseMethodNotAllowed( WebResponse response )

Modified: 
archiva/trunk/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/storage/RepositoryStorage.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/storage/RepositoryStorage.java?rev=1547780&r1=1547779&r2=1547780&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/storage/RepositoryStorage.java
 (original)
+++ 
archiva/trunk/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/storage/RepositoryStorage.java
 Wed Dec  4 12:09:22 2013
@@ -62,8 +62,10 @@ public interface RepositoryStorage
         throws ProxyDownloadException;
 
     /**
+     * add an other method to evaluate real path as when receiving -SNAPSHOT 
(for maven storage)
+     * request redirect to the last build
      * @param requestPath the web uri request
-     * @param managedRepository the used managed repository
+     * @param managedRepository the used managed repository can be 
<code>null</code> so last version won't be resolved
      * @return the file path
      * @since 2.0.0
      */

Modified: 
archiva/trunk/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryStorage.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryStorage.java?rev=1547780&r1=1547779&r2=1547780&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryStorage.java
 (original)
+++ 
archiva/trunk/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryStorage.java
 Wed Dec  4 12:09:22 2013
@@ -713,6 +713,7 @@ public class Maven2RepositoryStorage
 
     public String getFilePath( String requestPath, ManagedRepository 
managedRepository )
     {
+        // managedRepository can be null
         // extract artifact reference from url
         // groupId:artifactId:version:packaging:classifier
         
//org/apache/archiva/archiva-checksum/1.4-M4-SNAPSHOT/archiva-checksum-1.4-M4-SNAPSHOT.jar


Reply via email to