diff options
author | Kevin Sawicki | 2011-10-11 17:17:35 +0000 |
---|---|---|
committer | Kevin Sawicki | 2011-10-11 17:17:35 +0000 |
commit | 2d41f419602586007a2419dcbbf642ec6cd81430 (patch) | |
tree | 5f1246efcb87c7b8357987174d6159b9574193cf | |
parent | 12aa135bb6b2a63b26a5b5c0177c9768e279443f (diff) | |
download | egit-github-2d41f419602586007a2419dcbbf642ec6cd81430.tar.gz egit-github-2d41f419602586007a2419dcbbf642ec6cd81430.tar.xz egit-github-2d41f419602586007a2419dcbbf642ec6cd81430.zip |
Add service support for filtering repositories.
This currently supports filtering repository requests
by type such as public, private, and member.
Change-Id: I6cfdd65dedcd93b6130021dedacaf524206c6d48
Signed-off-by: Kevin Sawicki <kevin@github.com>
2 files changed, 162 insertions, 3 deletions
diff --git a/org.eclipse.egit.github.core.tests/src/org/eclipse/egit/github/core/tests/RepositoryServiceTest.java b/org.eclipse.egit.github.core.tests/src/org/eclipse/egit/github/core/tests/RepositoryServiceTest.java index e2b47060..f3d2580c 100644 --- a/org.eclipse.egit.github.core.tests/src/org/eclipse/egit/github/core/tests/RepositoryServiceTest.java +++ b/org.eclipse.egit.github.core.tests/src/org/eclipse/egit/github/core/tests/RepositoryServiceTest.java @@ -241,7 +241,7 @@ public class RepositoryServiceTest { */ @Test(expected = IllegalArgumentException.class) public void getRepositoriesNullUser() throws IOException { - service.getRepositories(null); + service.getRepositories((String) null); } /** @@ -385,4 +385,32 @@ public class RepositoryServiceTest { request.setUri(Utils.page("/repos/o/n/tags")); verify(client).get(request); } + + /** + * Get public repositories for current user + * + * @throws IOException + */ + @Test + public void getPublicRepositories() throws IOException { + service.getRepositories(Collections.singletonMap( + RepositoryService.FILTER_TYPE, RepositoryService.TYPE_PUBLIC)); + GitHubRequest request = new GitHubRequest(); + request.setUri(Utils.page("/user/repos?type=public")); + verify(client).get(request); + } + + /** + * Get public repositories for current user + * + * @throws IOException + */ + @Test + public void getPrivateOrgRepositories() throws IOException { + service.getOrgRepositories("org1", Collections.singletonMap( + RepositoryService.FILTER_TYPE, RepositoryService.TYPE_PRIVATE)); + GitHubRequest request = new GitHubRequest(); + request.setUri(Utils.page("/orgs/org1/repos?type=private")); + verify(client).get(request); + } } diff --git a/org.eclipse.egit.github.core/src/org/eclipse/egit/github/core/service/RepositoryService.java b/org.eclipse.egit.github.core/src/org/eclipse/egit/github/core/service/RepositoryService.java index bad5a05f..4200b2cc 100644 --- a/org.eclipse.egit.github.core/src/org/eclipse/egit/github/core/service/RepositoryService.java +++ b/org.eclipse.egit.github.core/src/org/eclipse/egit/github/core/service/RepositoryService.java @@ -73,6 +73,31 @@ public class RepositoryService extends GitHubService { */ public static final String FIELD_PUBLIC = "public"; //$NON-NLS-1$ + /** + * Type filter key + */ + public static final String FILTER_TYPE = "type"; //$NON-NLS-1$ + + /** + * Public repository filter type + */ + public static final String TYPE_PUBLIC = "public"; //$NON-NLS-1$ + + /** + * Private repository filter type + */ + public static final String TYPE_PRIVATE = "private"; //$NON-NLS-1$ + + /** + * Member repository filter type + */ + public static final String TYPE_MEMBER = "member"; //$NON-NLS-1$ + + /** + * All repositories filter type + */ + public static final String TYPE_ALL = "all"; //$NON-NLS-1$ + private static class RepositoryContainer implements IResourceProvider<SearchRepository> { @@ -110,7 +135,19 @@ public class RepositoryService extends GitHubService { * @throws IOException */ public List<Repository> getRepositories() throws IOException { - return getAll(pageRepositories()); + return getRepositories((Map<String, String>) null); + } + + /** + * Get repositories for the currently authenticated user + * + * @param filterData + * @return list of repositories + * @throws IOException + */ + public List<Repository> getRepositories(Map<String, String> filterData) + throws IOException { + return getAll(pageRepositories(filterData)); } /** @@ -145,8 +182,49 @@ public class RepositoryService extends GitHubService { */ public PageIterator<Repository> pageRepositories(int start, int size) throws IOException { + return pageRepositories((Map<String, String>) null, start, size); + } + + /** + * Page repositories for currently authenticated user + * + * @param filterData + * @return iterator over pages of repositories + * @throws IOException + */ + public PageIterator<Repository> pageRepositories( + Map<String, String> filterData) throws IOException { + return pageRepositories(filterData, PAGE_SIZE); + } + + /** + * Page repositories for currently authenticated user + * + * @param filterData + * @param size + * @return iterator over pages of repositories + * @throws IOException + */ + public PageIterator<Repository> pageRepositories( + Map<String, String> filterData, int size) throws IOException { + return pageRepositories(filterData, PAGE_FIRST, size); + } + + /** + * Page repositories for currently authenticated user + * + * @param filterData + * @param start + * @param size + * @return iterator over pages of repositories + * @throws IOException + */ + public PageIterator<Repository> pageRepositories( + Map<String, String> filterData, int start, int size) + throws IOException { PagedRequest<Repository> request = createPagedRequest(start, size); request.setUri(SEGMENT_USER + SEGMENT_REPOS); + request.setParams(filterData); request.setType(new TypeToken<List<Repository>>() { }.getType()); return createPageIterator(request); @@ -223,7 +301,7 @@ public class RepositoryService extends GitHubService { */ public List<Repository> getOrgRepositories(String organization) throws IOException { - return getAll(pageOrgRepositories(organization)); + return getOrgRepositories(organization, null); } /** @@ -258,6 +336,58 @@ public class RepositoryService extends GitHubService { */ public PageIterator<Repository> pageOrgRepositories(String organization, int start, int size) { + return pageOrgRepositories(organization, null, start, size); + } + + /** + * Get organization repositories for the given organization + * + * @param organization + * @param filterData + * @return list of repositories + * @throws IOException + */ + public List<Repository> getOrgRepositories(String organization, + Map<String, String> filterData) throws IOException { + return getAll(pageOrgRepositories(organization, filterData)); + } + + /** + * Page repositories for the given organization + * + * @param organization + * @param filterData + * @return iterator over pages of repositories + */ + public PageIterator<Repository> pageOrgRepositories(String organization, + Map<String, String> filterData) { + return pageOrgRepositories(organization, filterData, PAGE_SIZE); + } + + /** + * Page repositories for the given organization + * + * @param organization + * @param filterData + * @param size + * @return iterator over pages of repositories + */ + public PageIterator<Repository> pageOrgRepositories(String organization, + Map<String, String> filterData, int size) { + return pageOrgRepositories(organization, filterData, PAGE_FIRST, size); + } + + /** + * Page repositories for the given organization + * + * @param organization + * @param filterData + * @param start + * @param size + * @return iterator over pages of repositories + */ + public PageIterator<Repository> pageOrgRepositories(String organization, + Map<String, String> filterData, int start, int size) { if (organization == null) throw new IllegalArgumentException("Organization cannot be null"); //$NON-NLS-1$ if (organization.length() == 0) @@ -267,6 +397,7 @@ public class RepositoryService extends GitHubService { uri.append('/').append(organization); uri.append(SEGMENT_REPOS); PagedRequest<Repository> request = createPagedRequest(start, size); + request.setParams(filterData); request.setUri(uri); request.setType(new TypeToken<List<Repository>>() { }.getType()); |