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

io.github.oliviercailloux.grade.comm.StudentOnGitHub Maven / Gradle / Ivy

The newest version!
package io.github.oliviercailloux.grade.comm;

import static com.google.common.base.Preconditions.checkNotNull;

import com.google.common.base.MoreObjects;
import io.github.oliviercailloux.email.EmailAddressAndPersonal;
import io.github.oliviercailloux.git.github.model.GitHubUsername;
import java.util.Objects;
import java.util.Optional;

public class StudentOnGitHub {
  public static StudentOnGitHub with(String gitHubUsername) {
    return new StudentOnGitHub(GitHubUsername.given(gitHubUsername), Optional.empty());
  }

  public static StudentOnGitHub with(GitHubUsername gitHubUsername) {
    return new StudentOnGitHub(gitHubUsername, Optional.empty());
  }

  public static StudentOnGitHub with(GitHubUsername gitHubUsername,
      InstitutionalStudent institutionalStudent) {
    return new StudentOnGitHub(gitHubUsername, Optional.of(institutionalStudent));
  }

  public static StudentOnGitHub with(GitHubUsername gitHubUsername,
      Optional institutionalStudentOpt) {
    return new StudentOnGitHub(gitHubUsername, institutionalStudentOpt);
  }

  private final GitHubUsername gitHubUsername;
  private final Optional institutionalStudentOpt;

  private StudentOnGitHub(GitHubUsername gitHubUsername,
      Optional institutionalStudentOpt) {
    this.gitHubUsername = checkNotNull(gitHubUsername);
    this.institutionalStudentOpt = checkNotNull(institutionalStudentOpt);
  }

  public GitHubUsername getGitHubUsername() {
    return gitHubUsername;
  }

  public Optional getInstitutionalId() {
    return institutionalStudentOpt.map(InstitutionalStudent::getId);
  }

  public Optional getInstitutionalUsername() {
    return institutionalStudentOpt.map(InstitutionalStudent::getUsername);
  }

  public Optional getEmail() {
    return institutionalStudentOpt.map(InstitutionalStudent::getEmail);
  }

  public boolean hasInstitutionalPart() {
    return institutionalStudentOpt.isPresent();
  }

  public InstitutionalStudent toInstitutionalStudent() {
    return institutionalStudentOpt.orElseThrow(IllegalStateException::new);
  }

  public StudentOnGitHubKnown asStudentOnGitHubKnown() {
    return StudentOnGitHubKnown.with(gitHubUsername,
        institutionalStudentOpt.orElseThrow(IllegalStateException::new));
  }

  @Override
  public boolean equals(Object o2) {
    if (!(o2 instanceof StudentOnGitHub)) {
      return false;
    }
    final StudentOnGitHub s2 = (StudentOnGitHub) o2;
    return gitHubUsername.equals(s2.gitHubUsername)
        && institutionalStudentOpt.equals(s2.institutionalStudentOpt);
  }

  @Override
  public int hashCode() {
    return Objects.hash(gitHubUsername, institutionalStudentOpt);
  }

  @Override
  public String toString() {
    return MoreObjects.toStringHelper(this).add("GitHub username", gitHubUsername)
        .add("institutional", institutionalStudentOpt).toString();
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy