From: Olivier Lamy Date: Fri, 23 Mar 2012 08:33:02 +0000 (+0000) Subject: add a rest method to get artifact dependees X-Git-Tag: archiva-1.4-M3~975 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=f61e9b7ba98d4cbcc04104fd17afc69f1602dcb7;p=archiva.git add a rest method to get artifact dependees git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1304227 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/Artifact.java b/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/Artifact.java index eab427cff..2adeece4c 100644 --- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/Artifact.java +++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/Artifact.java @@ -129,6 +129,7 @@ public class Artifact /** * file extension of the artifact + * * @since 1.4-M2 */ private String fileExtension; @@ -139,6 +140,13 @@ public class Artifact // no op } + public Artifact( String groupId, String artifactId, String version ) + { + this.artifactId = artifactId; + this.groupId = groupId; + this.version = version; + } + public String getGroupId() { return groupId; diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/BrowseService.java b/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/BrowseService.java index bd9095f19..d4a38e407 100644 --- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/BrowseService.java +++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/BrowseService.java @@ -20,6 +20,7 @@ package org.apache.archiva.rest.api.services; import org.apache.archiva.admin.model.beans.ManagedRepository; import org.apache.archiva.metadata.model.ProjectVersionMetadata; +import org.apache.archiva.rest.api.model.Artifact; import org.apache.archiva.rest.api.model.BrowseResult; import org.apache.archiva.rest.api.model.TreeEntry; import org.apache.archiva.rest.api.model.VersionsList; @@ -96,4 +97,12 @@ public interface BrowseService @PathParam( "v" ) String version, @QueryParam( "repositoryId" ) String repositoryId ) throws ArchivaRestServiceException; + + @Path( "dependees/{g}/{a}/{v}" ) + @GET + @Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML } ) + @RedbackAuthorization( noPermission = true, noRestriction = true ) + List getDependees( @PathParam( "g" ) String groupId, @PathParam( "a" ) String artifactId, + @PathParam( "v" ) String version, @QueryParam( "repositoryId" ) String repositoryId ) + throws ArchivaRestServiceException; } diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultBrowseService.java b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultBrowseService.java index 22d079651..f15a113c7 100644 --- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultBrowseService.java +++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultBrowseService.java @@ -23,6 +23,7 @@ import org.apache.archiva.admin.model.beans.ManagedRepository; import org.apache.archiva.common.utils.VersionComparator; import org.apache.archiva.dependency.tree.maven2.DependencyTreeBuilder; import org.apache.archiva.metadata.model.ProjectVersionMetadata; +import org.apache.archiva.metadata.model.ProjectVersionReference; import org.apache.archiva.metadata.repository.MetadataResolutionException; import org.apache.archiva.metadata.repository.MetadataResolver; import org.apache.archiva.metadata.repository.RepositorySession; @@ -567,6 +568,43 @@ public class DefaultBrowseService } } + public List getDependees( String groupId, String artifactId, String version, String repositoryId ) + throws ArchivaRestServiceException + { + List references = new ArrayList(); + // TODO: what if we get duplicates across repositories? + RepositorySession repositorySession = repositorySessionFactory.createSession(); + try + { + MetadataResolver metadataResolver = repositorySession.getResolver(); + for ( String repoId : getObservableRepos() ) + { + // TODO: what about if we want to see this irrespective of version? + references.addAll( + metadataResolver.resolveProjectReferences( repositorySession, repoId, groupId, artifactId, + version ) ); + } + } + catch ( MetadataResolutionException e ) + { + throw new ArchivaRestServiceException( e.getMessage(), + Response.Status.INTERNAL_SERVER_ERROR.getStatusCode() ); + } + finally + { + repositorySession.close(); + } + + List artifacts = new ArrayList( references.size() ); + + for ( ProjectVersionReference projectVersionReference : references ) + { + artifacts.add( new Artifact( projectVersionReference.getNamespace(), projectVersionReference.getProjectId(), + projectVersionReference.getProjectVersion() ) ); + } + return artifacts; + } + //--------------------------- // internals //---------------------------