From: Olivier Lamy Date: Thu, 23 Feb 2012 21:25:20 +0000 (+0000) Subject: add REST to browse a groupId/artifactId and retrieve all versions X-Git-Tag: archiva-1.4-M3~1248 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=d026cc88a72bfbbbb90892120f8e614c63dd9243;p=archiva.git add REST to browse a groupId/artifactId and retrieve all versions git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1292963 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/VersionsList.java b/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/VersionsList.java new file mode 100644 index 000000000..e6729aa9f --- /dev/null +++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/VersionsList.java @@ -0,0 +1,62 @@ +package org.apache.archiva.rest.api.model; +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import javax.xml.bind.annotation.XmlRootElement; +import java.util.List; + +/** + * @author Olivier Lamy + */ +@XmlRootElement( name = "versionsList" ) +public class VersionsList +{ + + private List versions; + + public VersionsList() + { + // no op + } + + public VersionsList( List versions ) + { + this.versions = versions; + } + + public List getVersions() + { + return versions; + } + + public void setVersions( List versions ) + { + this.versions = versions; + } + + @Override + public String toString() + { + final StringBuilder sb = new StringBuilder(); + sb.append( "VersionsList" ); + sb.append( "{versions=" ).append( versions ); + sb.append( '}' ); + return sb.toString(); + } +} 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 1e7584a8a..15d6b4c9c 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 @@ -19,13 +19,14 @@ package org.apache.archiva.rest.api.services; */ import org.apache.archiva.rest.api.model.BrowseResult; -import org.apache.archiva.rest.api.model.GroupIdList; +import org.apache.archiva.rest.api.model.VersionsList; import org.codehaus.plexus.redback.authorization.RedbackAuthorization; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; /** @@ -46,6 +47,13 @@ public interface BrowseService @GET @Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML } ) @RedbackAuthorization( noRestriction = true, noPermission = false ) - BrowseResult browseGroupId(@PathParam( "groupId" ) String groupId ) + BrowseResult browseGroupId( @PathParam( "groupId" ) String groupId ) + throws ArchivaRestServiceException; + + @Path( "browseGroupId" ) + @GET + @Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML } ) + @RedbackAuthorization( noRestriction = true, noPermission = false ) + VersionsList getVersionsList( @QueryParam( "g" ) String groupId, @QueryParam( "a" ) String artifactId ) 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 9b1a16a49..360868142 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.metadata.repository.MetadataResolver; import org.apache.archiva.metadata.repository.RepositorySession; import org.apache.archiva.rest.api.model.BrowseResult; import org.apache.archiva.rest.api.model.BrowseResultEntry; +import org.apache.archiva.rest.api.model.VersionsList; import org.apache.archiva.rest.api.services.ArchivaRestServiceException; import org.apache.archiva.rest.api.services.BrowseService; import org.apache.commons.collections.CollectionUtils; @@ -159,6 +160,44 @@ public class DefaultBrowseService } + public VersionsList getVersionsList( String groupId, String artifactId ) + throws ArchivaRestServiceException + { + List selectedRepos = getObservableRepos(); + if ( CollectionUtils.isEmpty( selectedRepos ) ) + { + // FIXME 403 ??? + return new VersionsList(); + } + + RepositorySession repositorySession = repositorySessionFactory.createSession(); + + try + { + MetadataResolver metadataResolver = repositorySession.getResolver(); + + Set versions = new LinkedHashSet(); + + for ( String repoId : selectedRepos ) + { + versions.addAll( + metadataResolver.resolveProjectVersions( repositorySession, repoId, groupId, artifactId ) ); + } + + return new VersionsList( new ArrayList( versions ) ); + } + catch ( MetadataResolutionException e ) + { + throw new ArchivaRestServiceException( e.getMessage(), + Response.Status.INTERNAL_SERVER_ERROR.getStatusCode() ); + } + finally + { + repositorySession.close(); + } + + } + //--------------------------- // internals //--------------------------- diff --git a/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/search.js b/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/search.js index 5a39f6876..9a641848f 100644 --- a/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/search.js +++ b/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/search.js @@ -40,6 +40,19 @@ $(function() { } } + displayProjectEntry=function(id){ + $.log("displayProjectEntry:"+id); + var url = "restServices/archivaServices/browseService/browseGroupId?g=org.apache.maven&a=maven-archiver"; + + $.ajax(url, { + type: "GET", + dataType: 'json', + success: function(data) { + + } + }); + } + breadCrumbEntries=function(){ // root level ? if (!self.parentBrowseViewModel) return []; diff --git a/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/templates/search.html b/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/templates/search.html index 42f326204..722c81e12 100644 --- a/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/templates/search.html +++ b/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/templates/search.html @@ -47,7 +47,11 @@ {{/if}} {{each(i,browseResultEntry) browseResultEntries}} -
  • + {{if browseResultEntry.project}} +
  • + {{else}} +
  • + {{/if}}  ${displayEntry(browseResultEntry.name)} (project: ${browseResultEntry.project})