package org.zalando.catwatch.backend.model; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import javax.persistence.EmbeddedId; import javax.persistence.Entity; import java.util.Date; @Entity @ApiModel(description = "A contributor is a (GitHub) user that may have contributed to projects. " + "Equals to a GitHub acocunt. See https://developer.github.com/v3/users/#get-a-single-user") public class Contributor { @EmbeddedId private ContributorKey key; private String name = null; private String url = null; private Integer organizationalCommitsCount = null; /** * todo */ private Integer personalCommitsCount = null; private Integer personalProjectsCount = null; private Integer organizationalProjectsCount = null; private String organizationName = null; public Contributor() { super(); } public Contributor(long id, long organizationId, Date snapshotDate) { super(); this.key = new ContributorKey(id, organizationId, snapshotDate); } public ContributorKey getKey() { return key; } @ApiModelProperty(value = "the GitHub User ID of the Contributor. Part of the primary key. See official GitHub REST API guide.") @JsonProperty("id") public long getId() { return key == null ? 0: key.getId(); } @ApiModelProperty(value = "the GitHub ID of the organization. Part of the primary key. See official GitHub REST API guide.") @JsonProperty("organizationId") public long getOrganizationId() { return key == null ? 0: key.getOrganizationId(); } /** * Name of contributor **/ @ApiModelProperty(value = "Name of contributor") @JsonProperty("name") public String getName() { return name; } public void setName(String name) { this.name = name; } /** * URL of contributor **/ @ApiModelProperty(value = "URL of contributor") @JsonProperty("url") public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } /** * Count of organizational commits. **/ @ApiModelProperty(value = "Count of organizational commits.") @JsonProperty("organizationalCommitsCount") public Integer getOrganizationalCommitsCount() { return organizationalCommitsCount; } public void setOrganizationalCommitsCount(Integer organizationalCommitsCount) { this.organizationalCommitsCount = organizationalCommitsCount; } /** * Count of personal commits. **/ @ApiModelProperty(value = "Count of personal commits.") @JsonProperty("personalCommitsCount") public Integer getPersonalCommitsCount() { return personalCommitsCount; } public void setPersonalCommitsCount(Integer personalCommitsCount) { this.personalCommitsCount = personalCommitsCount; } /** * Count of personal projects of contributor. **/ @ApiModelProperty(value = "Count of personal projects of contributor.") @JsonProperty("personalProjectsCount") public Integer getPersonalProjectsCount() { return personalProjectsCount; } public void setPersonalProjectsCount(Integer personalProjectsCount) { this.personalProjectsCount = personalProjectsCount; } /** * Count of organization projects of contributor. **/ @ApiModelProperty(value = "Count of organization projects of contributor.") @JsonProperty("organizationalProjectsCount") public Integer getOrganizationalProjectsCount() { return organizationalProjectsCount; } public void setOrganizationalProjectsCount(Integer organizationalProjectsCount) { this.organizationalProjectsCount = organizationalProjectsCount; } /** * Organization of the Contributor. **/ @ApiModelProperty(value = "Organization of the Contributor.") @JsonProperty("organizationName") public String getOrganizationName() { return organizationName; } public void setOrganizationName(String organizationName) { this.organizationName = organizationName; } /** * Contributor snapshot date. **/ @ApiModelProperty(value = "Contributor snapshot date. Part of the primary key.") @JsonProperty("snapshotDate") public Date getSnapshotDate() { return key == null ? null : key.getSnapshotDate(); } public String getLoginId() { String regex = "https://github.com/"; String loginId = ""; if (url != null && url.startsWith(regex)) { loginId = url.split(regex)[1]; } return loginId; } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("class Contributor {\n"); sb.append(" id: ").append(getId()).append("\n"); sb.append(" organizationId: ").append(getOrganizationId()).append("\n"); sb.append(" name: ").append(name).append("\n"); sb.append(" url: ").append(url).append("\n"); sb.append(" organizationalCommitsCount: ").append(organizationalCommitsCount).append("\n"); sb.append(" personalCommitsCount: ").append(personalCommitsCount).append("\n"); sb.append(" personalProjectsCount: ").append(personalProjectsCount).append("\n"); sb.append(" organizationalProjectsCount: ").append(organizationalProjectsCount).append("\n"); sb.append(" organizationName: ").append(organizationName).append("\n"); sb.append(" snapshotDate: ").append(getSnapshotDate()).append("\n"); sb.append("}\n"); return sb.toString(); } }