Commit a4d4c183 authored by Greg Messner's avatar Greg Messner
Browse files

Added support for fetching projects with a filter (#356).

parent c45863b6
......@@ -479,6 +479,65 @@ public class ProjectApi extends AbstractApi implements Constants {
return (getStarredProjects(getDefaultPerPage()).stream());
}
/**
* Get a list of all visible projects across GitLab for the authenticated user using the provided filter.
*
* <pre><code>GET /projects</code></pre>
*
* @param filter the ProjectFilter instance holding the filter values for the query
* @return a list of all visible projects across GitLab for the authenticated use
* @throws GitLabApiException if any exception occurs
*/
public List<Project> getProjects(ProjectFilter filter) throws GitLabApiException {
return (getProjects(filter, getDefaultPerPage()).all());
}
/**
* Get a list of all visible projects across GitLab for the authenticated user in the specified page range
* using the provided filter.
*
* <pre><code>GET /projects</code></pre>
*
* @param filter the ProjectFilter instance holding the filter values for the query
* @param page the page to get
* @param perPage the number of projects per page
* @return a list of all visible projects across GitLab for the authenticated use
* @throws GitLabApiException if any exception occurs
*/
public List<Project> getProjects(ProjectFilter filter, int page, int perPage) throws GitLabApiException {
GitLabApiForm formData = filter.getQueryParams(page, perPage);
Response response = get(Response.Status.OK, formData.asMap(), "projects");
return (response.readEntity(new GenericType<List<Project>>() {}));
}
/**
* Get a Pager of all visible projects across GitLab for the authenticated user using the provided filter.
*
* <pre><code>GET /projects</code></pre>
*
* @param filter the ProjectFilter instance holding the filter values for the query
* @param itemsPerPage the number of Project instances that will be fetched per page
* @return a Pager of all visible projects across GitLab for the authenticated use
* @throws GitLabApiException if any exception occurs
*/
public Pager<Project> getProjects(ProjectFilter filter, int itemsPerPage) throws GitLabApiException {
GitLabApiForm formData = filter.getQueryParams();
return (new Pager<Project>(this, Project.class, itemsPerPage, formData.asMap(), "projects"));
}
/**
* Get a Stream of all visible projects across GitLab for the authenticated user using the provided filter.
*
* <pre><code>GET /projects</code></pre>
*
* @param filter the ProjectFilter instance holding the filter values for the query
* @return a Stream of all visible projects across GitLab for the authenticated use
* @throws GitLabApiException if any exception occurs
*/
public Stream<Project> getProjectsStream(ProjectFilter filter) throws GitLabApiException {
return (getProjects(filter, getDefaultPerPage()).stream());
}
/**
* Get a list of visible projects owned by the given user.
*
......@@ -486,7 +545,7 @@ public class ProjectApi extends AbstractApi implements Constants {
*
* @param userIdOrUsername the user ID, username of the user, or a User instance holding the user ID or username
* @param filter the ProjectFilter instance holding the filter values for the query
* @return a list of visible projects owned by the given use
* @return a list of visible projects owned by the given user
* @throws GitLabApiException if any exception occurs
*/
public List<Project> getUserProjects(Object userIdOrUsername, ProjectFilter filter) throws GitLabApiException {
......@@ -502,7 +561,7 @@ public class ProjectApi extends AbstractApi implements Constants {
* @param filter the ProjectFilter instance holding the filter values for the query
* @param page the page to get
* @param perPage the number of projects per page
* @return a list of visible projects owned by the given use
* @return a list of visible projects owned by the given user
* @throws GitLabApiException if any exception occurs
*/
public List<Project> getUserProjects(Object userIdOrUsername, ProjectFilter filter, int page, int perPage) throws GitLabApiException {
......@@ -520,7 +579,7 @@ public class ProjectApi extends AbstractApi implements Constants {
* @param userIdOrUsername the user ID, username of the user, or a User instance holding the user ID or username
* @param filter the ProjectFilter instance holding the filter values for the query
* @param itemsPerPage the number of Project instances that will be fetched per page
* @return a Pager of visible projects owned by the given use
* @return a Pager of visible projects owned by the given user
* @throws GitLabApiException if any exception occurs
*/
public Pager<Project> getUserProjects(Object userIdOrUsername, ProjectFilter filter, int itemsPerPage) throws GitLabApiException {
......@@ -536,7 +595,7 @@ public class ProjectApi extends AbstractApi implements Constants {
*
* @param userIdOrUsername the user ID, username of the user, or a User instance holding the user ID or username
* @param filter the ProjectFilter instance holding the filter values for the query
* @return a Stream of visible projects owned by the given use
* @return a Stream of visible projects owned by the given user
* @throws GitLabApiException if any exception occurs
*/
public Stream<Project> getUserProjectsStream(Object userIdOrUsername, ProjectFilter filter) throws GitLabApiException {
......
......@@ -43,6 +43,7 @@ import org.gitlab4j.api.models.AccessLevel;
import org.gitlab4j.api.models.Group;
import org.gitlab4j.api.models.Member;
import org.gitlab4j.api.models.Project;
import org.gitlab4j.api.models.ProjectFilter;
import org.gitlab4j.api.models.Variable;
import org.gitlab4j.api.models.Visibility;
import org.junit.AfterClass;
......@@ -432,6 +433,24 @@ public class TestProjectApi extends AbstractIntegrationTest {
assertTrue(projects != null);
}
@Test
public void testProjectsWithFilter() throws GitLabApiException {
ProjectFilter filter = new ProjectFilter().withOwned(true).withStatistics(false);
List<Project> projects = gitLabApi.getProjectApi().getProjects(filter);
assertTrue(projects != null);
assertTrue(projects.size() > 0);
assertNull(projects.get(0).getStatistics());
}
@Test
public void testProjectsWithFilterAndStatistics() throws GitLabApiException {
ProjectFilter filter = new ProjectFilter().withOwned(true).withStatistics(true);
List<Project> projects = gitLabApi.getProjectApi().getProjects(filter);
assertTrue(projects != null);
assertTrue(projects.size() > 0);
assertNotNull(projects.get(0).getStatistics());
}
@Test
public void testProjectPerPage() throws GitLabApiException {
List<Project> projects = gitLabApi.getProjectApi().getProjects(1, 10);
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment