org.nuxeo.github.Developer.java Source code

Java tutorial

Introduction

Here is the source code for org.nuxeo.github.Developer.java

Source

/*
 * (C) Copyright 2014 Nuxeo SA (http://nuxeo.com/) and contributors.
 *
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the GNU Lesser General Public License
 * (LGPL) version 2.1 which accompanies this distribution, and is available at
 * http://www.gnu.org/licenses/lgpl-2.1.html
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * Contributors:
 *     Julien Carsique
 *
 */

package org.nuxeo.github;

import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;
import java.util.regex.Pattern;

import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.SystemUtils;
import org.apache.commons.lang.builder.CompareToBuilder;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.StandardToStringStyle;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.eclipse.egit.github.core.Contributor;
import org.eclipse.egit.github.core.Repository;
import org.eclipse.egit.github.core.RepositoryCommit;
import org.eclipse.egit.github.core.User;

/**
 *
 */
public class Developer implements Comparable<Developer> {

    private static final Pattern COMMITS_PATTERN = Pattern
            .compile("https://api.github.com/repos/(.*)/commits/(.*)");

    private String login;

    private Set<String> emails = new HashSet<>();

    private String url;

    private String company;

    private String name;

    private boolean anonymous;

    private Set<User> users = new HashSet<>();

    Set<String> commits = new TreeSet<>();

    Set<String> aliases = new HashSet<>();

    boolean signed = false;

    private static final StandardToStringStyle style;

    static {
        style = new StandardToStringStyle();
        style.setUseClassName(false);
        style.setUseIdentityHashCode(false);
        style.setUseFieldNames(true);
        style.setContentStart("[");
        style.setFieldSeparator(SystemUtils.LINE_SEPARATOR + "  ");
        style.setFieldSeparatorAtStart(true);
        style.setContentEnd(SystemUtils.LINE_SEPARATOR + "]");
        style.setNullText(null);
    }

    /**
     * Anonymous user (unknown login)
     *
     */
    public Developer(String name) {
        this.setAnonymous(true);
        this.name = name;
    }

    /**
     * GitHub user
     *
     */
    public Developer(String login, String url) {
        this.setAnonymous(false);
        this.login = login;
        this.url = url;
    }

    /**
     * @param contributor
     */
    public Developer(Contributor contributor) {
        this.name = contributor.getName();
        if (contributor.getLogin() == null) {
            this.setAnonymous(true);
        } else {
            this.setAnonymous(false);
            this.login = contributor.getLogin();
            this.url = contributor.getUrl();
        }
    }

    /**
     * @param committer
     */
    public Developer(User user) {
        this.name = user.getName();
        if (user.getLogin() == null) {
            this.setAnonymous(true);
        } else {
            this.setAnonymous(false);
            this.login = user.getLogin();
            this.url = user.getUrl();
            this.company = user.getCompany();
            this.emails.add(user.getEmail());
        }
    }

    Developer() {
    }

    public String getLogin() {
        return login;
    }

    public void setLogin(String login) {
        this.login = login;
    }

    public Set<String> getEmails() {
        return emails;
    }

    public void addEmail(String email) {
        emails.add(email);
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getCompany() {
        return company;
    }

    public void setCompany(String company) {
        this.company = company;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public boolean isAnonymous() {
        return anonymous;
    }

    public void setAnonymous(boolean anonymous) {
        this.anonymous = anonymous;
    }

    /**
     * Associate with a GitHub user and copy available fields
     *
     * @param user Ignored if null
     */
    public void set(User user) {
        if (user == null) {
            return;
        }
        users.add(user);
        if (StringUtils.isBlank(name)) {
            name = user.getName();
        }
        if (StringUtils.isNotBlank(user.getEmail()) && !emails.contains(user.getEmail())) {
            addEmail(user.getEmail());
        }
        if (StringUtils.isBlank(company)) {
            company = user.getCompany();
        }
        if (StringUtils.isBlank(url)) {
            url = user.getUrl();
        }
    }

    /**
     * Copy available fields
     *
     * @param remove
     */
    public Developer updateWith(Developer dev) {
        if (dev == null) {
            return this;
        }
        if (StringUtils.isBlank(name)) {
            name = dev.getName();
        }
        emails.addAll(dev.getEmails());
        if (StringUtils.isBlank(company)) {
            company = dev.getCompany();
        }
        if (StringUtils.isBlank(url)) {
            url = dev.getUrl();
        }
        if (anonymous) {
            commits.addAll(dev.getCommits());
        }
        signed = signed || dev.isSigned();
        return this;
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this, style) //
                .append("login", login) //
                .append("name", name) //
                .append("signed", signed) //
                .append("emails", emails) //
                .append("company", company) //
                .append("url", url) //
                .append("aliases", aliases) //
                .append("commits", commits) //
                .toString();
    }

    /**
     * @return true if all required fields have been filled
     */
    public boolean isComplete() {
        return (login != null && name != null && !emails.isEmpty() && company != null);
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (!(o instanceof Developer)) {
            return false;
        }
        Developer d = (Developer) o;
        return new EqualsBuilder() //
                .appendSuper(super.equals(d)) //
                .append(login, d.login) //
                .append(this.name, d.name) //
                .append(this.signed, d.signed) //
                .append(this.emails, d.emails) //
                .append(this.url, d.url) //
                .append(this.company, d.company) //
                .append(this.aliases, d.aliases) //
                .append(this.commits, d.commits) //
                .isEquals();
    }

    @Override
    public int compareTo(Developer o) {
        return new CompareToBuilder() //
                .append(this.login, o.login) //
                .append(this.name, o.name) //
                .append(this.signed, o.signed) //
                .append(this.emails, o.emails) //
                .append(this.url, o.url) //
                .append(this.company, o.company) //
                .append(this.aliases, o.aliases) //
                .append(this.commits, o.commits) //
                .toComparison();
    }

    @Override
    public int hashCode() {
        return new HashCodeBuilder() //
                .append(login) //
                .append(name) //
                .append(signed) //
                .append(emails) //
                .append(url) //
                .append(company) //
                .append(aliases) //
                .append(commits) //
                .toHashCode();
    }

    public void addCommit(RepositoryCommit commit) {
        String htmlUrl = COMMITS_PATTERN.matcher(commit.getUrl()).replaceFirst("https://github.com/$1/commit/$2");
        commits.add(htmlUrl);
    }

    public Set<String> getCommits() {
        return commits;
    }

    public void addRepository(Repository repo) {
        commits.add(repo.getHtmlUrl());
    }

    public Set<String> getAliases() {
        return aliases;
    }

    public boolean isSigned() {
        return signed;
    }

}