Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin Sawicki2011-10-29 00:06:54 +0000
committerKevin Sawicki2011-10-29 00:06:54 +0000
commitbdddd7d38f2633858e5a0ef5f3c27def0dd54902 (patch)
treee44e4852a94c7c85fc8f6045f600e8cbfe8ad706
parent206e0d34453ab84021593527be1b3e884e7f26e1 (diff)
downloadegit-github-bdddd7d38f2633858e5a0ef5f3c27def0dd54902.tar.gz
egit-github-bdddd7d38f2633858e5a0ef5f3c27def0dd54902.tar.xz
egit-github-bdddd7d38f2633858e5a0ef5f3c27def0dd54902.zip
Support searching repositories using all parameters.
Previously only language was supported, now all search parameters such as watchers count, size, etc. can be searched for using an input parameters map. Change-Id: I6d5b2f95ec1b72090e8154dde1a3b421bf192af7 Signed-off-by: Kevin Sawicki <kevin@github.com>
-rw-r--r--org.eclipse.egit.github.core.tests/src/org/eclipse/egit/github/core/tests/RepositoryServiceTest.java2
-rw-r--r--org.eclipse.egit.github.core/src/org/eclipse/egit/github/core/service/RepositoryService.java59
2 files changed, 54 insertions, 7 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 fa62743a..405424cf 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
@@ -308,7 +308,7 @@ public class RepositoryServiceTest {
*/
@Test(expected = IllegalArgumentException.class)
public void searchRepositoriesNullQuery() throws IOException {
- service.searchRepositories(null);
+ service.searchRepositories((String) null);
}
/**
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 1489ff76..8c7d64bc 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
@@ -10,6 +10,7 @@
*******************************************************************************/
package org.eclipse.egit.github.core.service;
+import static org.eclipse.egit.github.core.client.IGitHubConstants.CHARSET_UTF8;
import static org.eclipse.egit.github.core.client.IGitHubConstants.PARAM_LANGUAGE;
import static org.eclipse.egit.github.core.client.IGitHubConstants.PARAM_START_PAGE;
import static org.eclipse.egit.github.core.client.IGitHubConstants.SEGMENT_BRANCHES;
@@ -31,10 +32,12 @@ import static org.eclipse.egit.github.core.client.PagedRequest.PAGE_SIZE;
import com.google.gson.reflect.TypeToken;
import java.io.IOException;
+import java.net.URLEncoder;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Map.Entry;
import org.eclipse.egit.github.core.Contributor;
import org.eclipse.egit.github.core.IRepositoryIdProvider;
@@ -413,7 +416,7 @@ public class RepositoryService extends GitHubService {
/**
* Search for repositories matching query.
- *
+ * <p>
* This method requires an API v2 configured {@link GitHubClient} as it is
* not yet supported in API v3 clients.
*
@@ -428,7 +431,7 @@ public class RepositoryService extends GitHubService {
/**
* Search for repositories matching query.
- *
+ * <p>
* This method requires an API v2 configured {@link GitHubClient} as it is
* not yet supported in API v3 clients.
*
@@ -444,7 +447,7 @@ public class RepositoryService extends GitHubService {
/**
* Search for repositories matching language and query.
- *
+ * <p>
* This method requires an API v2 configured {@link GitHubClient} as it is
* not yet supported in API v3 clients.
*
@@ -460,7 +463,7 @@ public class RepositoryService extends GitHubService {
/**
* Search for repositories matching language and query.
- *
+ * <p>
* This method requires an API v2 configured {@link GitHubClient} as it is
* not yet supported in API v3 clients.
*
@@ -480,10 +483,13 @@ public class RepositoryService extends GitHubService {
StringBuilder uri = new StringBuilder(SEGMENT_V2_API);
uri.append(SEGMENT_REPOS);
uri.append(SEGMENT_SEARCH);
- uri.append('/').append(query);
+ final String encodedQuery = URLEncoder.encode(query, CHARSET_UTF8)
+ .replace("+", "%20");
+ uri.append('/').append(encodedQuery);
+
PagedRequest<SearchRepository> request = createPagedRequest();
- Map<String, String> params = new HashMap<String, String>();
+ Map<String, String> params = new HashMap<String, String>(2, 1);
if (language != null && language.length() > 0)
params.put(PARAM_LANGUAGE, language);
if (startPage > 0)
@@ -497,6 +503,47 @@ public class RepositoryService extends GitHubService {
}
/**
+ * Search for repositories matching search parameters.
+ * <p>
+ * This method requires an API v2 configured {@link GitHubClient} as it is
+ * not yet supported in API v3 clients.
+ *
+ * @param params
+ * @return list of repositories
+ * @throws IOException
+ */
+ public List<SearchRepository> searchRepositories(
+ final Map<String, String> params) throws IOException {
+ return searchRepositories(params, -1);
+ }
+
+ /**
+ * Search for repositories matching search parameters.
+ * <p>
+ * This method requires an API v2 configured {@link GitHubClient} as it is
+ * not yet supported in API v3 clients.
+ *
+ * @param queryParams
+ * @param startPage
+ * @return list of repositories
+ * @throws IOException
+ */
+ public List<SearchRepository> searchRepositories(
+ final Map<String, String> queryParams, final int startPage)
+ throws IOException {
+ if (queryParams == null)
+ throw new IllegalArgumentException("Params cannot be null"); //$NON-NLS-1$
+ if (queryParams.isEmpty())
+ throw new IllegalArgumentException("Params cannot be empty"); //$NON-NLS-1$
+
+ StringBuilder query = new StringBuilder();
+ for (Entry<String, String> param : queryParams.entrySet())
+ query.append(param.getKey()).append(':').append(param.getValue())
+ .append(' ');
+ return searchRepositories(query.toString(), startPage);
+ }
+
+ /**
* Create a new repository
*
* @param repository

Back to the top