org.eclipse.che.plugin.github.ide.GitHubClientServiceImpl.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.che.plugin.github.ide.GitHubClientServiceImpl.java

Source

/*******************************************************************************
 * Copyright (c) 2012-2016 Codenvy, S.A.
 * 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:
 *   Codenvy, S.A. - initial API and implementation
 *******************************************************************************/
package org.eclipse.che.plugin.github.ide;

import com.google.gwt.http.client.RequestBuilder;
import com.google.inject.Inject;
import com.google.inject.Singleton;

import org.eclipse.che.api.promises.client.Promise;
import org.eclipse.che.ide.api.app.AppContext;
import org.eclipse.che.ide.rest.AsyncRequestCallback;
import org.eclipse.che.ide.rest.AsyncRequestFactory;
import org.eclipse.che.ide.rest.AsyncRequestLoader;
import org.eclipse.che.ide.rest.DtoUnmarshallerFactory;
import org.eclipse.che.ide.ui.loaders.request.LoaderFactory;
import org.eclipse.che.plugin.github.shared.Collaborators;
import org.eclipse.che.plugin.github.shared.GitHubIssueComment;
import org.eclipse.che.plugin.github.shared.GitHubIssueCommentInput;
import org.eclipse.che.plugin.github.shared.GitHubPullRequest;
import org.eclipse.che.plugin.github.shared.GitHubPullRequestCreationInput;
import org.eclipse.che.plugin.github.shared.GitHubPullRequestList;
import org.eclipse.che.plugin.github.shared.GitHubRepository;
import org.eclipse.che.plugin.github.shared.GitHubRepositoryList;
import org.eclipse.che.plugin.github.shared.GitHubUser;

import javax.validation.constraints.NotNull;
import java.util.List;

/**
 * Implementation for {@link GitHubClientService}.
 *
 * @author Oksana Vereshchaka
 * @author Stphane Daviet
 */
@Singleton
public class GitHubClientServiceImpl implements GitHubClientService {
    private static final String LIST = "/list";
    private static final String LIST_ACCOUNT = "/list/account";
    private static final String LIST_ORG = "/list/org";
    private static final String LIST_USER = "/list/user";
    private static final String COLLABORATORS = "/collaborators";
    private static final String ORGANIZATIONS = "/orgs";
    private static final String USER = "/user";
    private static final String SSH_GEN = "/ssh/generate";
    private static final String FORKS = "/forks";
    private static final String CREATE_FORK = "/createfork";
    private static final String PULL_REQUEST = "/pullrequest";
    private static final String PULL_REQUESTS = "/pullrequests";
    private static final String ISSUE_COMMENTS = "/issuecomments";
    private static final String REPOSITORIES = "/repositories";

    /** Loader to be displayed. */
    private final AsyncRequestLoader loader;
    private final AsyncRequestFactory asyncRequestFactory;
    private final AppContext appContext;
    private final DtoUnmarshallerFactory dtoUnmarshallerFactory;

    @Inject
    protected GitHubClientServiceImpl(LoaderFactory loaderFactory, AsyncRequestFactory asyncRequestFactory,
            AppContext appContext, DtoUnmarshallerFactory dtoUnmarshallerFactory) {
        this.appContext = appContext;
        this.dtoUnmarshallerFactory = dtoUnmarshallerFactory;
        this.loader = loaderFactory.newLoader();
        this.asyncRequestFactory = asyncRequestFactory;
    }

    private String baseUrl() {
        return appContext.getDevMachine().getWsAgentBaseUrl() + "/github";
    }

    @Override
    public void getRepository(@NotNull String user, @NotNull String repository,
            @NotNull AsyncRequestCallback<GitHubRepository> callback) {
        String url = baseUrl() + REPOSITORIES + "/" + user + "/" + repository;
        asyncRequestFactory.createGetRequest(url).loader(loader).send(callback);
    }

    @Override
    public Promise<GitHubRepository> getRepository(String user, String repository) {
        final String url = baseUrl() + REPOSITORIES + "/" + user + "/" + repository;
        return asyncRequestFactory.createGetRequest(url).loader(loader)
                .send(dtoUnmarshallerFactory.newUnmarshaller(GitHubRepository.class));
    }

    /** {@inheritDoc} */
    @Override
    public Promise<List<GitHubRepository>> getRepositoriesList() {
        String url = baseUrl() + LIST;
        return asyncRequestFactory.createGetRequest(url).loader(loader)
                .send(dtoUnmarshallerFactory.newListUnmarshaller(GitHubRepository.class));
    }

    /** {@inheritDoc} */
    @Override
    public void getForks(@NotNull String user, @NotNull String repository,
            @NotNull AsyncRequestCallback<GitHubRepositoryList> callback) {
        String url = baseUrl() + FORKS + "/" + user + "/" + repository;
        asyncRequestFactory.createGetRequest(url).loader(loader).send(callback);
    }

    @Override
    public Promise<GitHubRepositoryList> getForks(String user, String repository) {
        return asyncRequestFactory.createGetRequest(baseUrl() + FORKS + '/' + user + '/' + repository)
                .loader(loader).send(dtoUnmarshallerFactory.newUnmarshaller(GitHubRepositoryList.class));
    }

    /** {@inheritDoc} */
    @Override
    public void fork(@NotNull String user, @NotNull String repository,
            @NotNull AsyncRequestCallback<GitHubRepository> callback) {
        String url = baseUrl() + CREATE_FORK + "/" + user + "/" + repository;
        asyncRequestFactory.createGetRequest(url).loader(loader).send(callback);
    }

    @Override
    public Promise<GitHubRepository> fork(String user, String repository) {
        return asyncRequestFactory.createGetRequest(baseUrl() + CREATE_FORK + '/' + user + '/' + repository)
                .loader(loader).send(dtoUnmarshallerFactory.newUnmarshaller(GitHubRepository.class));
    }

    @Override
    public void commentIssue(@NotNull String user, @NotNull String repository, @NotNull String issue,
            @NotNull GitHubIssueCommentInput input, @NotNull AsyncRequestCallback<GitHubIssueComment> callback) {
        String url = baseUrl() + ISSUE_COMMENTS + "/" + user + "/" + repository + "/" + issue;
        asyncRequestFactory.createPostRequest(url, input).loader(loader).send(callback);
    }

    @Override
    public void getPullRequests(@NotNull String owner, @NotNull String repository,
            @NotNull AsyncRequestCallback<GitHubPullRequestList> callback) {
        String url = baseUrl() + PULL_REQUESTS + "/" + owner + "/" + repository;
        asyncRequestFactory.createGetRequest(url).loader(loader).send(callback);
    }

    @Override
    public Promise<GitHubPullRequestList> getPullRequests(@NotNull String owner, @NotNull String repository) {
        final String url = baseUrl() + PULL_REQUESTS + '/' + owner + '/' + repository;
        return asyncRequestFactory.createGetRequest(url).loader(loader)
                .send(dtoUnmarshallerFactory.newUnmarshaller(GitHubPullRequestList.class));
    }

    @Override
    public Promise<GitHubPullRequestList> getPullRequests(String owner, String repository, String head) {
        final String url = baseUrl() + PULL_REQUESTS + '/' + owner + '/' + repository + "?head=" + head;
        return asyncRequestFactory.createGetRequest(url).loader(loader)
                .send(dtoUnmarshallerFactory.newUnmarshaller(GitHubPullRequestList.class));
    }

    @Override
    public void getPullRequest(final String owner, final String repository, final String pullRequestId,
            final AsyncRequestCallback<GitHubPullRequest> callback) {
        String url = baseUrl() + PULL_REQUESTS + "/" + owner + "/" + repository + "/" + pullRequestId;
        asyncRequestFactory.createGetRequest(url).loader(loader).send(callback);
    }

    /** {@inheritDoc} */
    @Override
    public void createPullRequest(@NotNull String user, @NotNull String repository,
            @NotNull GitHubPullRequestCreationInput input,
            @NotNull AsyncRequestCallback<GitHubPullRequest> callback) {
        String url = baseUrl() + PULL_REQUEST + "/" + user + "/" + repository;
        asyncRequestFactory.createPostRequest(url, input).loader(loader).send(callback);
    }

    @Override
    public Promise<GitHubPullRequest> createPullRequest(@NotNull String user, @NotNull String repository,
            @NotNull GitHubPullRequestCreationInput input) {
        final String url = baseUrl() + PULL_REQUEST + '/' + user + '/' + repository;
        return asyncRequestFactory.createPostRequest(url, input).loader(loader)
                .send(dtoUnmarshallerFactory.newUnmarshaller(GitHubPullRequest.class));
    }

    /** {@inheritDoc} */
    @Override
    public void getRepositoriesByUser(String userName,
            @NotNull AsyncRequestCallback<GitHubRepositoryList> callback) {
        String params = (userName != null) ? "?username=" + userName : "";
        String url = baseUrl() + LIST_USER;
        asyncRequestFactory.createGetRequest(url + params).loader(loader).send(callback);
    }

    /** {@inheritDoc} */
    @Override
    public void getCollaborators(@NotNull String user, @NotNull String repository,
            @NotNull AsyncRequestCallback<Collaborators> callback) {
        String url = baseUrl() + COLLABORATORS + "/" + user + "/" + repository;
        asyncRequestFactory.createGetRequest(url).loader(loader).send(callback);
    }

    /** {@inheritDoc} */
    @Override
    public void getOrganizations(@NotNull AsyncRequestCallback<List<String>> callback) {
        String url = baseUrl() + ORGANIZATIONS;
        asyncRequestFactory.createGetRequest(url).loader(loader).send(callback);
    }

    /** {@inheritDoc} */
    @Override
    public Promise<List<GitHubUser>> getOrganizations() {
        String url = baseUrl() + ORGANIZATIONS;
        return asyncRequestFactory.createGetRequest(url).loader(loader)
                .send(dtoUnmarshallerFactory.newListUnmarshaller(GitHubUser.class));
    }

    /** {@inheritDoc} */
    @Override
    public void getUserInfo(@NotNull AsyncRequestCallback<GitHubUser> callback) {
        String url = baseUrl() + USER;
        asyncRequestFactory.createGetRequest(url).loader(loader).send(callback);
    }

    /** {@inheritDoc} */
    @Override
    public Promise<GitHubUser> getUserInfo() {
        String url = baseUrl() + USER;
        return asyncRequestFactory.createGetRequest(url).loader(loader)
                .send(dtoUnmarshallerFactory.newUnmarshaller(GitHubUser.class));
    }

    /** {@inheritDoc} */
    @Override
    public void getRepositoriesByOrganization(String organization,
            @NotNull AsyncRequestCallback<GitHubRepositoryList> callback) {
        String params = (organization != null) ? "?organization=" + organization : "";
        String url = baseUrl() + LIST_ORG;
        asyncRequestFactory.createGetRequest(url + params).loader(loader).send(callback);
    }

    /** {@inheritDoc} */
    @Override
    public void getRepositoriesByAccount(String account,
            @NotNull AsyncRequestCallback<GitHubRepositoryList> callback) {
        String params = (account != null) ? "?account=" + account : "";
        String url = baseUrl() + LIST_ACCOUNT;
        asyncRequestFactory.createGetRequest(url + params).loader(loader).send(callback);
    }

    /** {@inheritDoc} */
    @Override
    public void updatePublicKey(@NotNull AsyncRequestCallback<Void> callback) {
        String url = baseUrl() + SSH_GEN;
        asyncRequestFactory.createPostRequest(url, null).loader(loader).send(callback);
    }

    @Override
    public Promise<GitHubPullRequest> updatePullRequest(String owner, String repository, String pullRequestId,
            GitHubPullRequest updateInput) {
        final String url = baseUrl() + PULL_REQUEST + '/' + owner + '/' + repository + '/' + pullRequestId;
        return asyncRequestFactory.createRequest(RequestBuilder.PUT, url, updateInput, false).loader(loader)
                .send(dtoUnmarshallerFactory.newUnmarshaller(GitHubPullRequest.class));
    }
}