All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.kohsuke.github.GHPerson Maven / Gradle / Ivy

There is a newer version: 2.0.0-alpha-2
Show newest version
package org.kohsuke.github;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.URL;
import java.util.Collections;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.TreeMap;

// TODO: Auto-generated Javadoc
/**
 * Common part of {@link GHUser} and {@link GHOrganization}.
 *
 * @author Kohsuke Kawaguchi
 */
public abstract class GHPerson extends GHObject {

    /** The avatar url. */
    // core data fields that exist even for "small" user data (such as the user info in pull request)
    protected String login, avatar_url;

    /** The twitter username. */
    // other fields (that only show up in full data)
    protected String location, blog, email, bio, name, company, type, twitter_username;

    /** The html url. */
    protected String html_url;

    /** The public gists. */
    protected int followers, following, public_repos, public_gists;

    /** The hireable. */
    protected boolean site_admin, hireable;

    /** The total private repos. */
    // other fields (that only show up in full data) that require privileged scope
    protected Integer total_private_repos;

    /**
     * Fully populate the data by retrieving missing data.
     * 

* Depending on the original API call where this object is created, it may not contain everything. * * @throws IOException * the io exception */ protected synchronized void populate() throws IOException { if (super.getCreatedAt() != null) { return; // already populated } if (isOffline()) { return; // cannot populate, will have to live with what we have } URL url = getUrl(); if (url != null) { root().createRequest().setRawUrlPath(url.toString()).fetchInto(this); } } /** * Gets the public repositories this user owns. * *

* To list your own repositories, including private repositories, use {@link GHMyself#listRepositories()} * * @return the repositories * @throws IOException * the io exception */ public synchronized Map getRepositories() throws IOException { Map repositories = new TreeMap(); for (GHRepository r : listRepositories(100)) { repositories.put(r.getName(), r); } return Collections.unmodifiableMap(repositories); } /** * Lists up all the repositories using a 30 items page size. *

* Unlike {@link #getRepositories()}, this does not wait until all the repositories are returned. * * @return the paged iterable */ public PagedIterable listRepositories() { return listRepositories(30); } /** * Lists up all the repositories using the specified page size. * * @param pageSize * size for each page of items returned by GitHub. Maximum page size is 100. Unlike * {@link #getRepositories()}, this does not wait until all the repositories are returned. * @return the paged iterable */ public PagedIterable listRepositories(final int pageSize) { return root().createRequest() .withUrlPath("/users/" + login + "/repos") .toIterable(GHRepository[].class, null) .withPageSize(pageSize); } /** * Loads repository list in a paginated fashion. * *

* For a person with a lot of repositories, GitHub returns the list of repositories in a paginated fashion. Unlike * {@link #getRepositories()}, this method allows the caller to start processing data as it arrives. *

* Every {@link Iterator#next()} call results in I/O. Exceptions that occur during the processing is wrapped into * {@link Error}. * * @param pageSize * the page size * @return the iterable * @deprecated Use {@link #listRepositories()} */ @Deprecated public synchronized Iterable> iterateRepositories(final int pageSize) { return () -> { final PagedIterator pager; GitHubPageIterator iterator = GitHubPageIterator.create(root().getClient(), GHRepository[].class, root().createRequest().withUrlPath("users", login, "repos").build(), pageSize); pager = new PagedIterator<>(iterator, null); return new Iterator>() { public boolean hasNext() { return pager.hasNext(); } public List next() { return pager.nextPage(); } }; }; } /** * Gets repository. * * @param name * the name * @return null if the repository was not found * @throws IOException * the io exception */ public GHRepository getRepository(String name) throws IOException { try { return GHRepository.read(root(), login, name); } catch (FileNotFoundException e) { return null; } } /** * Lists events for an organization or an user. * * @return the paged iterable * @throws IOException * the io exception */ public abstract PagedIterable listEvents() throws IOException; /** * Gravatar ID of this user, like 0cb9832a01c22c083390f3c5dcb64105. * * @return the gravatar id * @deprecated No longer available in the v3 API. */ @Deprecated public String getGravatarId() { return ""; } /** * Returns a string of the avatar image URL. * * @return the avatar url */ public String getAvatarUrl() { return avatar_url; } /** * Gets the login ID of this user, like 'kohsuke'. * * @return the login */ public String getLogin() { return login; } /** * Gets the human-readable name of the user, like "Kohsuke Kawaguchi". * * @return the name * @throws IOException * the io exception */ public String getName() throws IOException { populate(); return name; } /** * Gets the company name of this user, like "Sun Microsystems, Inc." * * @return the company * @throws IOException * the io exception */ public String getCompany() throws IOException { populate(); return company; } /** * Gets the location of this user, like "Santa Clara, California". * * @return the location * @throws IOException * the io exception */ public String getLocation() throws IOException { populate(); return location; } /** * Gets the Twitter Username of this user, like "GitHub". * * @return the Twitter username * @throws IOException * the io exception */ public String getTwitterUsername() throws IOException { populate(); return twitter_username; } /** * Gets the created at. * * @return the created at * @throws IOException * Signals that an I/O exception has occurred. */ public Date getCreatedAt() throws IOException { populate(); return super.getCreatedAt(); } /** * Gets the updated at. * * @return the updated at * @throws IOException * Signals that an I/O exception has occurred. */ public Date getUpdatedAt() throws IOException { populate(); return super.getUpdatedAt(); } /** * Gets the blog URL of this user. * * @return the blog * @throws IOException * the io exception */ public String getBlog() throws IOException { populate(); return blog; } /** * Gets the html url. * * @return the html url */ @Override public URL getHtmlUrl() { return GitHubClient.parseURL(html_url); } /** * Gets the e-mail address of the user. * * @return the email * @throws IOException * the io exception */ public String getEmail() throws IOException { populate(); return email; } /** * Gets public gist count. * * @return the public gist count * @throws IOException * the io exception */ public int getPublicGistCount() throws IOException { populate(); return public_gists; } /** * Gets public repo count. * * @return the public repo count * @throws IOException * the io exception */ public int getPublicRepoCount() throws IOException { populate(); return public_repos; } /** * Gets following count. * * @return the following count * @throws IOException * the io exception */ public int getFollowingCount() throws IOException { populate(); return following; } /** * Gets followers count. * * @return the followers count * @throws IOException * the io exception */ public int getFollowersCount() throws IOException { populate(); return followers; } /** * Gets the type. This is either "User" or "Organization". * * @return the type * @throws IOException * the io exception */ public String getType() throws IOException { populate(); return type; } /** * Gets the site_admin field. * * @return the site_admin field * @throws IOException * the io exception */ public boolean isSiteAdmin() throws IOException { populate(); return site_admin; } /** * Gets total private repo count. * * @return the total private repo count * @throws IOException * the io exception */ public Optional getTotalPrivateRepoCount() throws IOException { populate(); return Optional.ofNullable(total_private_repos); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy