001package edu.pdx.cs.joy.grader;
002
003import java.util.regex.Matcher;
004import java.util.regex.Pattern;
005
006public class GitHubUserNameFinder implements GitConfigParser.Callback {
007  private String gitHubUserName;
008  private boolean isInOrigin;
009
010  @Override
011  public void startCoreSection() {
012
013  }
014
015  @Override
016  public void property(String name, String value) {
017    if (name.equals("url") && this.isInOrigin) {
018      extractGitHubUserNameFrom(value);
019    }
020  }
021
022  private void extractGitHubUserNameFrom(String gitUrl) {
023    Matcher gitHubMatcher = Pattern.compile("git@github.com:(.*)/.*\\.git").matcher(gitUrl);
024    if (gitHubMatcher.matches()) {
025      this.gitHubUserName = gitHubMatcher.group(1);
026
027    } else {
028      Matcher httpsMatcher = Pattern.compile("https://github.com/(.*)/.*\\.git").matcher(gitUrl);
029      if (httpsMatcher.matches()) {
030        this.gitHubUserName = httpsMatcher.group(1);
031      }
032    }
033  }
034
035  @Override
036  public void endSection(String name) {
037    this.isInOrigin = false;
038  }
039
040  @Override
041  public void startRemoteSection(String name) {
042    if (name.equals("origin")) {
043      this.isInOrigin = true;
044    }
045  }
046
047  public String getGitHubUserName() {
048    return gitHubUserName;
049  }
050}