/* * Copyright 2013 GitHub Inc. * * Licensed 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. */ package com.github.mobile.core.search; import static org.eclipse.egit.github.core.client.IGitHubConstants.CHARSET_UTF8; import static org.eclipse.egit.github.core.client.IGitHubConstants.PARAM_START_PAGE; import static org.eclipse.egit.github.core.client.IGitHubConstants.SEGMENT_USER; import static org.eclipse.egit.github.core.client.IGitHubConstants.SEGMENT_LEGACY; import static org.eclipse.egit.github.core.client.IGitHubConstants.SEGMENT_SEARCH; import java.io.IOException; import java.net.URLEncoder; import java.util.HashMap; import java.util.List; import java.util.Map; import org.eclipse.egit.github.core.IResourceProvider; import org.eclipse.egit.github.core.client.GitHubClient; import org.eclipse.egit.github.core.client.PagedRequest; import org.eclipse.egit.github.core.service.UserService; public class SearchUserService extends UserService { private static class UserContainer implements IResourceProvider<SearchUser> { private List<SearchUser> users; /** * @see org.eclipse.egit.github.core.IResourceProvider#getResources() */ @Override public List<SearchUser> getResources() { return users; } } /** * Create search user service */ public SearchUserService() { super(); } /** * Create search user service * * @param client */ public SearchUserService(GitHubClient client) { super(client); } /** * Search for users matching query. * * @param query * @return list of users * @throws IOException */ public List<SearchUser> searchUsers(final String query) throws IOException { return searchUsers(query, -1); } /** * Search for users matching and query. * * @param query * @param startPage * @return list of users * @throws IOException */ public List<SearchUser> searchUsers(final String query, final int startPage) throws IOException { if (query == null) throw new IllegalArgumentException("Query cannot be null"); //$NON-NLS-1$ if (query.length() == 0) throw new IllegalArgumentException("Query cannot be empty"); //$NON-NLS-1$ StringBuilder uri = new StringBuilder(SEGMENT_LEGACY + SEGMENT_USER + SEGMENT_SEARCH); final String encodedQuery = URLEncoder.encode(query, CHARSET_UTF8) .replace("+", "%20") //$NON-NLS-1$ //$NON-NLS-2$ .replace(".", "%2E"); //$NON-NLS-1$ //$NON-NLS-2$ uri.append('/').append(encodedQuery); PagedRequest<SearchUser> request = createPagedRequest(); Map<String, String> params = new HashMap<String, String>(2, 1); if (startPage > 0) params.put(PARAM_START_PAGE, Integer.toString(startPage)); if (!params.isEmpty()) request.setParams(params); request.setUri(uri); request.setType(UserContainer.class); return getAll(request); } /** * Search for users matching search parameters. * * @param params * @return list of users * @throws IOException */ public List<SearchUser> searchUsers( final Map<String, String> params) throws IOException { return searchUsers(params, -1); } /** * Search for users matching search parameters. * * @param queryParams * @param startPage * @return list of users * @throws IOException */ public List<SearchUser> searchUsers( 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 (Map.Entry<String, String> param : queryParams.entrySet()) query.append(param.getKey()).append(':').append(param.getValue()) .append(' '); return searchUsers(query.toString(), startPage); } }