You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@archiva.apache.org by ol...@apache.org on 2013/12/09 03:46:56 UTC

svn commit: r1549368 - in /archiva/trunk/archiva-modules: archiva-web/archiva-webdav/src/main/java/org/apache/archiva/webdav/ metadata/metadata-repository-api/ metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/storag...

Author: olamy
Date: Mon Dec  9 02:46:56 2013
New Revision: 1549368

URL: http://svn.apache.org/r1549368
Log:
[MRM-1761] Returned URL in search result does not work for SNAPSHOTS

Modified:
    archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/archiva/webdav/ArchivaDavResourceFactory.java
    archiva/trunk/archiva-modules/metadata/metadata-repository-api/pom.xml
    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/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=1549368&r1=1549367&r2=1549368&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 Mon Dec  9 02:46:56 2013
@@ -527,6 +527,28 @@ public class ArchivaDavResourceFactory
         return path;
     }
 
+    private String evaluatePathWithVersion( ArchivaDavResourceLocator archivaLocator, ManagedRepositoryContent managedRepositoryContent )
+        throws DavException
+    {
+        String layout = managedRepositoryContent.getRepository() == null ? new ManagedRepository( ).getLayout() : managedRepositoryContent.getRepository().getLayout();
+        RepositoryStorage repositoryStorage =
+            this.applicationContext.getBean( "repositoryStorage#" + layout, RepositoryStorage.class );
+        try
+        {
+            return repositoryStorage.getFilePathWithVersion( archivaLocator.getResourcePath(), managedRepositoryContent );
+        }
+        catch ( LayoutException e )
+        {
+            log.error( e.getMessage(), e );
+            throw new DavException( HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e );
+        }
+        catch ( XMLException e )
+        {
+            log.error( e.getMessage(), e );
+            throw new DavException( HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e );
+        }
+    }
+
     private DavResource processRepository( final DavServletRequest request, ArchivaDavResourceLocator archivaLocator,
                                            String activePrincipal, ManagedRepositoryContent managedRepositoryContent,
                                            ManagedRepository managedRepository )
@@ -535,7 +557,8 @@ public class ArchivaDavResourceFactory
         DavResource resource = null;
         if ( isAuthorized( request, managedRepositoryContent.getId() ) )
         {
-            String path = getLogicalResource( archivaLocator, managedRepository, false );
+            // Maven Centric part ask evaluation if -SNAPSHOT
+            String path = evaluatePathWithVersion(archivaLocator, managedRepositoryContent);
             if ( path.startsWith( "/" ) )
             {
                 path = path.substring( 1 );

Modified: archiva/trunk/archiva-modules/metadata/metadata-repository-api/pom.xml
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/metadata/metadata-repository-api/pom.xml?rev=1549368&r1=1549367&r2=1549368&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/metadata/metadata-repository-api/pom.xml (original)
+++ archiva/trunk/archiva-modules/metadata/metadata-repository-api/pom.xml Mon Dec  9 02:46:56 2013
@@ -91,7 +91,9 @@
               org.apache.archiva.model,
               org.apache.archiva.policies,
               org.apache.archiva.repository,
-              org.apache.archiva.admin.model.beans
+              org.apache.archiva.admin.model.beans,
+              org.apache.archiva.repository.layout,
+              org.apache.archiva.xml
             </Import-Package>
           </instructions>
         </configuration>

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=1549368&r1=1549367&r2=1549368&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 Mon Dec  9 02:46:56 2013
@@ -27,6 +27,8 @@ import org.apache.archiva.metadata.repos
 import org.apache.archiva.model.ArtifactReference;
 import org.apache.archiva.policies.ProxyDownloadException;
 import org.apache.archiva.repository.ManagedRepositoryContent;
+import org.apache.archiva.repository.layout.LayoutException;
+import org.apache.archiva.xml.XMLException;
 
 import java.util.Collection;
 
@@ -70,4 +72,9 @@ public interface RepositoryStorage
      * @since 2.0.0
      */
     String getFilePath( String requestPath, ManagedRepository managedRepository );
+
+    String getFilePathWithVersion( final String requestPath, ManagedRepositoryContent managedRepositoryContent )
+        throws LayoutException, XMLException;
+
+
 }

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=1549368&r1=1549367&r2=1549368&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 Mon Dec  9 02:46:56 2013
@@ -35,6 +35,7 @@ import org.apache.archiva.maven2.metadat
 import org.apache.archiva.metadata.model.ArtifactMetadata;
 import org.apache.archiva.metadata.model.ProjectMetadata;
 import org.apache.archiva.metadata.model.ProjectVersionMetadata;
+import org.apache.archiva.metadata.repository.RepositorySessionFactory;
 import org.apache.archiva.metadata.repository.filter.Filter;
 import org.apache.archiva.metadata.repository.storage.ReadMetadataRequest;
 import org.apache.archiva.metadata.repository.storage.RepositoryPathTranslator;
@@ -50,6 +51,8 @@ import org.apache.archiva.proxy.common.W
 import org.apache.archiva.proxy.model.RepositoryProxyConnectors;
 import org.apache.archiva.reports.RepositoryProblemFacet;
 import org.apache.archiva.repository.ManagedRepositoryContent;
+import org.apache.archiva.repository.content.PathParser;
+import org.apache.archiva.repository.layout.LayoutException;
 import org.apache.archiva.xml.XMLException;
 import org.apache.commons.lang.ArrayUtils;
 import org.apache.commons.lang.StringUtils;
@@ -131,6 +134,10 @@ public class Maven2RepositoryStorage
     @Inject
     private ApplicationContext applicationContext;
 
+    @Inject
+    @Named ( value = "pathParser#default")
+    private PathParser pathParser;
+
     private static final Logger log = LoggerFactory.getLogger( Maven2RepositoryStorage.class );
 
     private static final String METADATA_FILENAME_START = "maven-metadata";
@@ -757,6 +764,34 @@ public class Maven2RepositoryStorage
 
     }
 
+    public String getFilePathWithVersion( final String requestPath, ManagedRepositoryContent managedRepositoryContent )
+        throws LayoutException, XMLException
+    {
+        String requestPathNoRepository = removePrefix( requestPath );
+        ArtifactReference artifactReference = pathParser.toArtifactReference( requestPathNoRepository );
+
+        String filePath = getFilePath( requestPath, managedRepositoryContent.getRepository() );
+
+        if (StringUtils.endsWith( artifactReference.getVersion(), "SNAPSHOT" ))
+        {
+            // read maven metadata to get last timestamp
+            File metadataDir = new File( managedRepositoryContent.getRepoRoot(), filePath).getParentFile();
+            ArchivaRepositoryMetadata archivaRepositoryMetadata = MavenMetadataReader.read( new File(metadataDir, METADATA_FILENAME ) );
+            int buildNumber = archivaRepositoryMetadata.getSnapshotVersion().getBuildNumber();
+            String timestamp = archivaRepositoryMetadata.getSnapshotVersion().getTimestamp();
+
+            // org/apache/archiva/archiva-checksum/1.4-M4-SNAPSHOT/archiva-checksum-1.4-M4-SNAPSHOT.jar
+            // ->  archiva-checksum-1.4-M4-20130425.081822-1.jar
+
+            filePath = StringUtils.replace( filePath, artifactReference.getArtifactId() + "-" + artifactReference.getVersion(),
+                                            artifactReference.getArtifactId() + "-" + StringUtils.remove( artifactReference.getVersion(), "-SNAPSHOT")
+                                                + "-" + timestamp + "-" + buildNumber );
+
+        }
+
+        return filePath;
+    }
+
 
 
     //-----------------------------
@@ -1002,4 +1037,13 @@ public class Maven2RepositoryStorage
     }
 
 
+    public PathParser getPathParser()
+    {
+        return pathParser;
+    }
+
+    public void setPathParser( PathParser pathParser )
+    {
+        this.pathParser = pathParser;
+    }
 }