--- /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.io.Serializable;
+import java.util.List;
+
+/**
+ * @author Olivier Lamy
+ * @since 1.4-M1
+ */
+@XmlRootElement( name = "groupIdList" )
+public class GroupIdList
+ implements Serializable
+{
+ private List<String> groupIds;
+ public GroupIdList ( )
+ {
+ // no op
+ }
+
+ public GroupIdList ( List<String> groupIds )
+ {
+ this.groupIds = groupIds;
+ }
+
+ public List<String> getGroupIds()
+ {
+ return groupIds;
+ }
+
+ public void setGroupIds(List<String> groupIds)
+ {
+ this.groupIds = groupIds;
+ }
+}
import org.apache.archiva.rest.api.model.Artifact;
import org.apache.archiva.rest.api.model.Dependency;
+import org.apache.archiva.rest.api.model.GroupIdList;
import org.apache.archiva.rest.api.model.SearchRequest;
import org.codehaus.plexus.redback.authorization.RedbackAuthorization;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
+import java.util.Collection;
import java.util.List;
@Path( "/searchService/" )
@Path( "quickSearch" )
@GET
@Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN } )
- @RedbackAuthorization( noPermission = true, noRestriction = true )
+ @RedbackAuthorization( noPermission = true, noRestriction = false )
List<Artifact> quickSearch( @QueryParam( "queryString" ) String queryString )
throws ArchivaRestServiceException;
@Path( "getArtifactVersions" )
@GET
@Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN } )
- @RedbackAuthorization( noPermission = true, noRestriction = true )
+ @RedbackAuthorization( noPermission = true, noRestriction = false )
List<Artifact> getArtifactVersions( @QueryParam( "groupId" ) String groupId,
@QueryParam( "artifactId" ) String artifactId,
@QueryParam( "packaging" ) String packaging )
@Path( "searchArtifacts" )
@POST
@Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN } )
- @RedbackAuthorization( noPermission = true, noRestriction = true )
+ @RedbackAuthorization( noPermission = true, noRestriction = false )
List<Artifact> searchArtifacts( SearchRequest searchRequest )
throws ArchivaRestServiceException;
+ @Path( "getAllGroupIds" )
+ @GET
+ @Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN } )
+ @RedbackAuthorization( noPermission = true, noRestriction = false )
+ GroupIdList getAllGroupIds( @QueryParam( "selectedRepos" ) List<String> selectedRepos )
+ throws ArchivaRestServiceException;
+
@Path( "getDependencies" )
@GET
@Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN } )
import org.apache.archiva.indexer.search.SearchResults;
import org.apache.archiva.rest.api.model.Artifact;
import org.apache.archiva.rest.api.model.Dependency;
+import org.apache.archiva.rest.api.model.GroupIdList;
import org.apache.archiva.rest.api.model.SearchRequest;
import org.apache.archiva.rest.api.services.ArchivaRestServiceException;
import org.apache.archiva.rest.api.services.SearchService;
import org.apache.archiva.security.ArchivaSecurityException;
import org.apache.archiva.security.PrincipalNotFoundException;
import org.apache.archiva.security.UserRepositories;
+import org.apache.commons.collections.ListUtils;
import org.apache.commons.lang.StringUtils;
import org.codehaus.plexus.redback.users.UserManager;
import org.codehaus.redback.rest.services.RedbackAuthenticationThreadLocal;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Collections;
import java.util.List;
}
}
+ public GroupIdList getAllGroupIds(List<String> selectedRepos)
+ throws ArchivaRestServiceException
+ {
+ List<String> observableRepos = getObservableRepos();
+ List<String> repos = ListUtils.intersection( observableRepos, selectedRepos );
+ if (repos == null || repos.isEmpty())
+ {
+ return new GroupIdList( Collections.<String>emptyList() );
+ }
+ try
+ {
+ return new GroupIdList( new ArrayList<String>( repositorySearch.getAllGroupIds( getPrincipal(), repos ) ) );
+ }
+ catch ( RepositorySearchException e )
+ {
+ log.error( e.getMessage(), e );
+ throw new ArchivaRestServiceException( e.getMessage() );
+ }
+
+ }
+
public List<Dependency> getDependencies( String groupId, String artifactId, String version )
throws ArchivaRestServiceException
{
import org.apache.archiva.rest.api.model.SearchRequest;
import org.apache.archiva.rest.api.services.ManagedRepositoriesService;
import org.apache.archiva.rest.api.services.SearchService;
+import org.apache.archiva.security.common.ArchivaRoleConstants;
import org.apache.commons.io.FileUtils;
import org.junit.Test;
import java.io.File;
+import java.util.Arrays;
+import java.util.Collection;
import java.util.Date;
import java.util.List;
deleteTestRepo( testRepoId, targetRepo );
}
+ @Test
+ public void getAllGroupIds()
+ throws Exception
+ {
+
+ String testRepoId = "test-repo";
+ // force guest user creation if not exists
+ if ( getUserService( authorizationHeader ).getGuestUser() == null )
+ {
+ assertNotNull( getUserService( authorizationHeader ).createGuestUser() );
+ }
+
+ File targetRepo = createAndIndexRepo( testRepoId );
+
+ SearchService searchService = getSearchService( authorizationHeader );
+
+ Collection<String> groupIds = searchService.getAllGroupIds( Arrays.asList( testRepoId ) ).getGroupIds();
+ log.info( "groupIds " + groupIds );
+ assertFalse( groupIds.isEmpty() );
+ assertTrue( groupIds.contains( "commons-cli") );
+ assertTrue( groupIds.contains( "org.apache.felix" ) );
+ deleteTestRepo( testRepoId, targetRepo );
+ }
+
private File createAndIndexRepo( String testRepoId )
throws Exception
{
ManagedRepositoriesService service = getManagedRepositoriesService( authorizationHeader );
service.addManagedRepository( managedRepository );
- getRepositoriesService( authorizationHeader ).scanRepositoryNow( testRepoId, true );
+ getRoleManagementService( authorizationHeader ).assignTemplatedRole(ArchivaRoleConstants.TEMPLATE_REPOSITORY_OBSERVER, testRepoId, "admin" );
+
+ getRepositoriesService(authorizationHeader).scanRepositoryNow( testRepoId, true );
return targetRepo;
}