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 2012/03/16 17:42:53 UTC

svn commit: r1301640 - in /archiva/trunk/archiva-modules/archiva-web/archiva-rest: archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/ archiva-rest-services/src/main/java/org/apache/archiva/rest/services/

Author: olamy
Date: Fri Mar 16 16:42:52 2012
New Revision: 1301640

URL: http://svn.apache.org/viewvc?rev=1301640&view=rev
Log:
add a rest method to get project metadata for 1 version only

Modified:
    archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/BrowseService.java
    archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultBrowseService.java

Modified: archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/BrowseService.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/BrowseService.java?rev=1301640&r1=1301639&r2=1301640&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/BrowseService.java (original)
+++ archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/BrowseService.java Fri Mar 16 16:42:52 2012
@@ -71,6 +71,15 @@ public interface BrowseService
                                                       @QueryParam( "repositoryId" ) String repositoryId )
         throws ArchivaRestServiceException;
 
+    @Path( "projectVersionMetadata/{g}/{a}/{v}" )
+    @GET
+    @Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML } )
+    @RedbackAuthorization( noPermission = true, noRestriction = true )
+    ProjectVersionMetadata getProjectMetadata( @PathParam( "g" ) String groupId, @PathParam( "a" ) String artifactId,
+                                               @PathParam( "v" ) String version,
+                                               @QueryParam( "repositoryId" ) String repositoryId )
+        throws ArchivaRestServiceException;
+
     @Path( "userRepositories" )
     @GET
     @Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML } )

Modified: archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultBrowseService.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultBrowseService.java?rev=1301640&r1=1301639&r2=1301640&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultBrowseService.java (original)
+++ archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultBrowseService.java Fri Mar 16 16:42:52 2012
@@ -35,6 +35,7 @@ import org.apache.commons.collections.Co
 import org.apache.commons.lang.StringUtils;
 import org.springframework.stereotype.Service;
 
+import javax.ws.rs.PathParam;
 import javax.ws.rs.core.Response;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -251,6 +252,88 @@ public class DefaultBrowseService
         }
     }
 
+    public ProjectVersionMetadata getProjectMetadata( @PathParam( "g" ) String groupId,
+                                                      @PathParam( "a" ) String artifactId,
+                                                      @PathParam( "v" ) String version, String repositoryId )
+        throws ArchivaRestServiceException
+    {
+        List<String> selectedRepos = getObservableRepos();
+
+        if ( CollectionUtils.isEmpty( selectedRepos ) )
+        {
+            // FIXME 403 ???
+            return null;
+        }
+
+        if ( StringUtils.isNotEmpty( repositoryId ) )
+        {
+            // check user has karma on the repository
+            if ( !selectedRepos.contains( repositoryId ) )
+            {
+                throw new ArchivaRestServiceException( "browse.root.groups.repositoy.denied",
+                                                       Response.Status.FORBIDDEN.getStatusCode() );
+            }
+            selectedRepos = Collections.singletonList( repositoryId );
+        }
+
+        RepositorySession repositorySession = null;
+        try
+        {
+            repositorySession = repositorySessionFactory.createSession();
+
+            MetadataResolver metadataResolver = repositorySession.getResolver();
+
+            ProjectVersionMetadata versionMetadata = null;
+            for ( String repoId : selectedRepos )
+            {
+                if ( versionMetadata == null || versionMetadata.isIncomplete() )
+                {
+                    try
+                    {
+                        versionMetadata =
+                            metadataResolver.resolveProjectVersion( repositorySession, repoId, groupId, artifactId,
+                                                                    version );
+                    }
+                    catch ( MetadataResolutionException e )
+                    {
+                        log.error(
+                            "Skipping invalid metadata while compiling shared model for " + groupId + ":" + artifactId
+                                + " in repo " + repoId + ": " + e.getMessage() );
+                    }
+                }
+            }
+            if ( versionMetadata == null )
+            {
+                return null;
+            }
+
+            MavenProjectFacet mavenFacet = new MavenProjectFacet();
+            mavenFacet.setGroupId( groupId );
+            mavenFacet.setArtifactId( artifactId );
+            versionMetadata.addFacet( mavenFacet );
+            MavenProjectFacet versionMetadataMavenFacet =
+                (MavenProjectFacet) versionMetadata.getFacet( MavenProjectFacet.FACET_ID );
+            if ( versionMetadataMavenFacet != null )
+            {
+                if ( mavenFacet.getPackaging() != null && !StringUtils.equalsIgnoreCase( mavenFacet.getPackaging(),
+                                                                                         versionMetadataMavenFacet.getPackaging() ) )
+                {
+                    mavenFacet.setPackaging( null );
+                }
+            }
+
+            return versionMetadata;
+        }
+        finally
+        {
+            if ( repositorySession != null )
+            {
+                repositorySession.close();
+            }
+        }
+
+    }
+
     public ProjectVersionMetadata getProjectVersionMetadata( String groupId, String artifactId, String repositoryId )
         throws ArchivaRestServiceException
     {
@@ -298,7 +381,7 @@ public class DefaultBrowseService
                 ProjectVersionMetadata versionMetadata = null;
                 for ( String repoId : selectedRepos )
                 {
-                    if ( versionMetadata == null )
+                    if ( versionMetadata == null || versionMetadata.isIncomplete() )
                     {
                         try
                         {