--- /dev/null
+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<String> versions;
+
+ public VersionsList()
+ {
+ // no op
+ }
+
+ public VersionsList( List<String> versions )
+ {
+ this.versions = versions;
+ }
+
+ public List<String> getVersions()
+ {
+ return versions;
+ }
+
+ public void setVersions( List<String> 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();
+ }
+}
*/
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;
/**
@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;
}
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;
}
+ public VersionsList getVersionsList( String groupId, String artifactId )
+ throws ArchivaRestServiceException
+ {
+ List<String> selectedRepos = getObservableRepos();
+ if ( CollectionUtils.isEmpty( selectedRepos ) )
+ {
+ // FIXME 403 ???
+ return new VersionsList();
+ }
+
+ RepositorySession repositorySession = repositorySessionFactory.createSession();
+
+ try
+ {
+ MetadataResolver metadataResolver = repositorySession.getResolver();
+
+ Set<String> versions = new LinkedHashSet<String>();
+
+ for ( String repoId : selectedRepos )
+ {
+ versions.addAll(
+ metadataResolver.resolveProjectVersions( repositorySession, repoId, groupId, artifactId ) );
+ }
+
+ return new VersionsList( new ArrayList<String>( versions ) );
+ }
+ catch ( MetadataResolutionException e )
+ {
+ throw new ArchivaRestServiceException( e.getMessage(),
+ Response.Status.INTERNAL_SERVER_ERROR.getStatusCode() );
+ }
+ finally
+ {
+ repositorySession.close();
+ }
+
+ }
+
//---------------------------
// internals
//---------------------------
}
}
+ 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 [];
</li>
{{/if}}
{{each(i,browseResultEntry) browseResultEntries}}
- <li class="browse-list" data-bind="click:function(){displayGroupId(browseResultEntry.name)}">
+ {{if browseResultEntry.project}}
+ <li class="browse-list" data-bind="click:function(){displayProjectEntry(browseResultEntry.name)}">
+ {{else}}
+ <li class="browse-list" data-bind="click:function(){displayGroupId(browseResultEntry.name)}">
+ {{/if}}
<a href="#">
${displayEntry(browseResultEntry.name)} (project: ${browseResultEntry.project})
</a>