/******************************************************************************* * Copyright (c) 2011 GitHub Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Jason Tsay (GitHub Inc.) - initial API and implementation *******************************************************************************/ package org.eclipse.egit.github.core.service; import static org.eclipse.egit.github.core.client.IGitHubConstants.SEGMENT_EVENTS; import static org.eclipse.egit.github.core.client.IGitHubConstants.SEGMENT_NETWORKS; import static org.eclipse.egit.github.core.client.IGitHubConstants.SEGMENT_ORGS; import static org.eclipse.egit.github.core.client.IGitHubConstants.SEGMENT_PUBLIC; import static org.eclipse.egit.github.core.client.IGitHubConstants.SEGMENT_RECEIVED_EVENTS; import static org.eclipse.egit.github.core.client.IGitHubConstants.SEGMENT_REPOS; import static org.eclipse.egit.github.core.client.IGitHubConstants.SEGMENT_USERS; import static org.eclipse.egit.github.core.client.PagedRequest.PAGE_FIRST; import static org.eclipse.egit.github.core.client.PagedRequest.PAGE_SIZE; import com.google.gson.reflect.TypeToken; import java.util.List; import org.eclipse.egit.github.core.IRepositoryIdProvider; import org.eclipse.egit.github.core.client.GitHubClient; import org.eclipse.egit.github.core.client.PageIterator; import org.eclipse.egit.github.core.client.PagedRequest; import org.eclipse.egit.github.core.event.Event; /** * Service class for interacting with Events * * @see <a href="http://developer.github.com/v3/events">GitHub Event API * documentation</a> * @see <a href="http://developer.github.com/v3/events/types">GitHub Event types * API documentation</a> */ public class EventService extends GitHubService { /** * Create event service */ public EventService() { super(); } /** * Create event service * * @param client */ public EventService(GitHubClient client) { super(client); } /** * Create page iterator for all public events * * @return events page iterator */ public PageIterator<Event> pagePublicEvents() { return pagePublicEvents(PAGE_SIZE); } /** * Create page iterator for all public events * * @param size * size of page * @return events page iterator */ public PageIterator<Event> pagePublicEvents(final int size) { return pagePublicEvents(PAGE_FIRST, size); } /** * Create page iterator for all public events * * @param start * starting page number * @param size * size of page * @return events page iterator */ public PageIterator<Event> pagePublicEvents(final int start, final int size) { PagedRequest<Event> request = createPagedRequest(start, size); request.setUri(SEGMENT_EVENTS); request.setType(new TypeToken<List<Event>>() { }.getType()); return createPageIterator(request); } /** * Create page iterator for a given repo's events * * @param repository * @return events page iterator */ public PageIterator<Event> pageEvents(IRepositoryIdProvider repository) { return pageEvents(repository, PAGE_SIZE); } /** * Create page iterator for a given repo's events * * @param repository * @param size * size of page * @return events page iterator */ public PageIterator<Event> pageEvents(IRepositoryIdProvider repository, final int size) { return pageEvents(repository, PAGE_FIRST, size); } /** * Create page iterator for a given repo's events * * @param repository * @param start * starting page number * @param size * size of page * @return events page iterator */ public PageIterator<Event> pageEvents(IRepositoryIdProvider repository, final int start, final int size) { PagedRequest<Event> request = createRepoEventRequest(repository, start, size); return createPageIterator(request); } /** * Create page iterator for a given repo network's events * * @param repository * @return events page iterator */ public PageIterator<Event> pageNetworkEvents( IRepositoryIdProvider repository) { return pageNetworkEvents(repository, PAGE_SIZE); } /** * Create page iterator for a given repo network's events * * @param repository * @param size * size of page * @return events page iterator */ public PageIterator<Event> pageNetworkEvents( IRepositoryIdProvider repository, final int size) { return pageNetworkEvents(repository, PAGE_FIRST, size); } /** * Create page iterator for a given repo network's events * * @param repository * @param start * starting page number * @param size * size of page * @return events page iterator */ public PageIterator<Event> pageNetworkEvents( IRepositoryIdProvider repository, final int start, final int size) { PagedRequest<Event> request = createNetworkRepoEventRequest(repository, start, size); return createPageIterator(request); } /** * Create page iterator for a given org's events * * @param org * @return events page iterator */ public PageIterator<Event> pageOrgEvents(String org) { return pageOrgEvents(org, PAGE_SIZE); } /** * Create page iterator for a given org's events * * @param org * @param size * size of page * @return events page iterator */ public PageIterator<Event> pageOrgEvents(String org, final int size) { return pageOrgEvents(org, PAGE_FIRST, size); } /** * Create page iterator for a given org's events * * @param org * @param start * starting page number * @param size * size of page * @return events page iterator */ public PageIterator<Event> pageOrgEvents(String org, final int start, final int size) { PagedRequest<Event> request = createOrgEventRequest(org, start, size); return createPageIterator(request); } /** * Create page iterator for a given user's received events Returns private * events if authenticated as the user * * @param user * @return events page iterator */ public PageIterator<Event> pageUserReceivedEvents(String user) { return pageUserReceivedEvents(user, false); } /** * Create page iterator for a given user's received events * * @param user * @param isPublic * only include public events? * @return events page iterator */ public PageIterator<Event> pageUserReceivedEvents(String user, boolean isPublic) { return pageUserReceivedEvents(user, isPublic, PAGE_SIZE); } /** * Create page iterator for a given user's received events * * @param user * @param isPublic * only include public events? * @param size * size of page * @return events page iterator */ public PageIterator<Event> pageUserReceivedEvents(String user, boolean isPublic, final int size) { return pageUserReceivedEvents(user, isPublic, PAGE_FIRST, size); } /** * Create page iterator for a given user's received events * * @param user * @param isPublic * only include public events? * @param start * starting page number * @param size * size of page * @return events page iterator */ public PageIterator<Event> pageUserReceivedEvents(String user, boolean isPublic, final int start, final int size) { PagedRequest<Event> request = createUserReceivedEventRequest(user, isPublic, start, size); return createPageIterator(request); } /** * Create page iterator for a given user's events Returns private events if * authenticated as the user * * @param user * @return events page iterator */ public PageIterator<Event> pageUserEvents(String user) { return pageUserEvents(user, false); } /** * Create page iterator for a given user's events * * @param user * @param isPublic * only include public events? * @return events page iterator */ public PageIterator<Event> pageUserEvents(String user, boolean isPublic) { return pageUserEvents(user, isPublic, PAGE_SIZE); } /** * Create page iterator for a given user's events * * @param user * @param isPublic * only include public events? * @param size * size of page * @return events page iterator */ public PageIterator<Event> pageUserEvents(String user, boolean isPublic, final int size) { return pageUserEvents(user, isPublic, PAGE_FIRST, size); } /** * Create page iterator for a given user's events * * @param user * @param isPublic * only include public events? * @param start * starting page number * @param size * size of page * @return events page iterator */ public PageIterator<Event> pageUserEvents(String user, boolean isPublic, final int start, final int size) { PagedRequest<Event> request = createUserEventRequest(user, isPublic, start, size); return createPageIterator(request); } /** * Create page iterator for a given user's orgs events * * @param user * @param org * @return events page iterator */ public PageIterator<Event> pageUserOrgEvents(String user, String org) { return pageUserOrgEvents(user, org, PAGE_SIZE); } /** * Create page iterator for a given user's orgs events * * @param user * @param org * @param size * size of page * @return events page iterator */ public PageIterator<Event> pageUserOrgEvents(String user, String org, final int size) { return pageUserOrgEvents(user, org, PAGE_FIRST, size); } /** * Create page iterator for a given user's orgs events * * @param user * @param org * @param start * starting page number * @param size * size of page * @return events page iterator */ public PageIterator<Event> pageUserOrgEvents(String user, String org, final int start, final int size) { PagedRequest<Event> request = createUserOrgEventRequest(user, org, start, size); return createPageIterator(request); } /** * Create repo event page request * * @param repository * @param start * starting page number * @param size * size of page * @return events page iterator */ protected PagedRequest<Event> createRepoEventRequest( IRepositoryIdProvider repository, int start, int size) { final String repoId = getId(repository); StringBuilder uri = new StringBuilder(SEGMENT_REPOS); uri.append('/').append(repoId); uri.append(SEGMENT_EVENTS); PagedRequest<Event> request = createPagedRequest(start, size); request.setUri(uri).setType(new TypeToken<List<Event>>() { }.getType()); return request; } /** * Create network repo event page request * * @param repository * @param start * starting page number * @param size * size of page * @return events page iterator */ protected PagedRequest<Event> createNetworkRepoEventRequest( IRepositoryIdProvider repository, int start, int size) { final String repoId = getId(repository); StringBuilder uri = new StringBuilder(SEGMENT_NETWORKS); uri.append('/').append(repoId); uri.append(SEGMENT_EVENTS); PagedRequest<Event> request = createPagedRequest(start, size); request.setUri(uri).setType(new TypeToken<List<Event>>() { }.getType()); return request; } /** * Create org event page request * * @param org * @param start * starting page number * @param size * size of page * @return events page iterator */ protected PagedRequest<Event> createOrgEventRequest(String org, int start, int size) { StringBuilder uri = new StringBuilder(SEGMENT_ORGS); uri.append('/').append(org); uri.append(SEGMENT_EVENTS); PagedRequest<Event> request = createPagedRequest(start, size); request.setUri(uri).setType(new TypeToken<List<Event>>() { }.getType()); return request; } /** * Create user received event page request * * @param user * @param isPublic * only include public events? * @param start * starting page number * @param size * size of page * @return events page iterator */ protected PagedRequest<Event> createUserReceivedEventRequest(String user, boolean isPublic, int start, int size) { StringBuilder uri = new StringBuilder(SEGMENT_USERS); uri.append('/').append(user); uri.append(SEGMENT_RECEIVED_EVENTS); if (isPublic) uri.append(SEGMENT_PUBLIC); PagedRequest<Event> request = createPagedRequest(start, size); request.setUri(uri).setType(new TypeToken<List<Event>>() { }.getType()); return request; } /** * Create user event page request * * @param user * @param isPublic * only include public events? * @param start * starting page number * @param size * size of page * @return events page iterator */ protected PagedRequest<Event> createUserEventRequest(String user, boolean isPublic, int start, int size) { StringBuilder uri = new StringBuilder(SEGMENT_USERS); uri.append('/').append(user); uri.append(SEGMENT_EVENTS); if (isPublic) uri.append(SEGMENT_PUBLIC); PagedRequest<Event> request = createPagedRequest(start, size); request.setUri(uri).setType(new TypeToken<List<Event>>() { }.getType()); return request; } /** * Create user's organization event page request * * @param user * @param org * @param start * starting page number * @param size * size of page * @return events page iterator */ protected PagedRequest<Event> createUserOrgEventRequest(String user, String org, int start, int size) { StringBuilder uri = new StringBuilder(SEGMENT_USERS); uri.append('/').append(user); uri.append(SEGMENT_EVENTS).append(SEGMENT_ORGS); uri.append('/').append(org); PagedRequest<Event> request = createPagedRequest(start, size); request.setUri(uri).setType(new TypeToken<List<Event>>() { }.getType()); return request; } }