Refactor GitHubRepository using Lombok/delegation

Makes the hierarchy from GHRepository more explicit and just changes
the way it gets implemented, using the Lombok annotations for delegating
methods to inner composite objects.

Change-Id: Ib3d47b7d226cce4680c80b4978323cb0d148d8c9
diff --git a/github-plugin/pom.xml b/github-plugin/pom.xml
index 7f80227..f78b026 100644
--- a/github-plugin/pom.xml
+++ b/github-plugin/pom.xml
@@ -169,5 +169,11 @@
       <version>1.2</version>
       <scope>test</scope>
     </dependency>
+    <dependency>
+        <groupId>org.projectlombok</groupId>
+        <artifactId>lombok</artifactId>
+        <version>1.14.0</version>
+        <scope>provided</scope>
+    </dependency>
   </dependencies>
 </project>
diff --git a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/git/GitHubRepository.java b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/git/GitHubRepository.java
index 0c111d7..1896c04 100644
--- a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/git/GitHubRepository.java
+++ b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/git/GitHubRepository.java
@@ -14,14 +14,10 @@
 package com.googlesource.gerrit.plugins.github.git;
 
 import java.io.IOException;
-import java.net.URL;
-import java.util.Collection;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
 
-import org.kohsuke.github.*;
+import lombok.experimental.Delegate;
+
+import org.kohsuke.github.GHRepository;
 
 import com.google.inject.Inject;
 import com.google.inject.assistedinject.Assisted;
@@ -40,6 +36,8 @@
   private final String repository;
   private final GitHubLogin ghLogin;
   private final String cloneUrl;
+
+  @Delegate
   private GHRepository ghRepository;
 
   public String getCloneUrl() {
@@ -67,343 +65,4 @@
     this.ghRepository =
         ghLogin.hub.getRepository(organisation + "/" + repository);
   }
-
-  public String getDescription() {
-    return ghRepository.getDescription();
-  }
-
-  public String getHomepage() {
-    return ghRepository.getHomepage();
-  }
-
-  public String getUrl() {
-    return ghRepository.getUrl();
-  }
-
-  public String getGitTransportUrl() {
-    return ghRepository.getGitTransportUrl();
-  }
-
-  public String gitHttpTransportUrl() {
-    return ghRepository.gitHttpTransportUrl();
-  }
-
-  public String getName() {
-    return ghRepository.getName();
-  }
-
-  public boolean hasPullAccess() {
-    return ghRepository.hasPullAccess();
-  }
-
-  public boolean hasPushAccess() {
-    return ghRepository.hasPushAccess();
-  }
-
-  public boolean hasAdminAccess() {
-    return ghRepository.hasAdminAccess();
-  }
-
-  public String getLanguage() {
-    return ghRepository.getLanguage();
-  }
-
-  public GHUser getOwner() throws IOException {
-    return ghRepository.getOwner();
-  }
-
-  public GHIssue getIssue(int id) throws IOException {
-    return ghRepository.getIssue(id);
-  }
-
-  public GHIssueBuilder createIssue(String title) {
-    return ghRepository.createIssue(title);
-  }
-
-  public List<GHIssue> getIssues(GHIssueState state) throws IOException {
-    return ghRepository.getIssues(state);
-  }
-
-  public PagedIterable<GHIssue> listIssues(GHIssueState state) {
-    return ghRepository.listIssues(state);
-  }
-
-  public GHReleaseBuilder createRelease(String tag) {
-    return ghRepository.createRelease(tag);
-  }
-
-  public List<GHRelease> getReleases() throws IOException {
-    return ghRepository.getReleases();
-  }
-
-  public boolean hasIssues() {
-    return ghRepository.hasIssues();
-  }
-
-  public boolean hasWiki() {
-    return ghRepository.hasWiki();
-  }
-
-  public boolean isFork() {
-    return ghRepository.isFork();
-  }
-
-  public int getForks() {
-    return ghRepository.getForks();
-  }
-
-  public boolean isPrivate() {
-    return ghRepository.isPrivate();
-  }
-
-  public boolean hasDownloads() {
-    return ghRepository.hasDownloads();
-  }
-
-  public int getWatchers() {
-    return ghRepository.getWatchers();
-  }
-
-  public int getOpenIssueCount() {
-    return ghRepository.getOpenIssueCount();
-  }
-
-  public Date getPushedAt() {
-    return ghRepository.getPushedAt();
-  }
-
-  public Date getCreatedAt() {
-    return ghRepository.getCreatedAt();
-  }
-
-  public String getMasterBranch() {
-    return ghRepository.getMasterBranch();
-  }
-
-  public int getSize() {
-    return ghRepository.getSize();
-  }
-
-  public GHPersonSet<GHUser> getCollaborators() throws IOException {
-    return ghRepository.getCollaborators();
-  }
-
-  public Set<String> getCollaboratorNames() throws IOException {
-    return ghRepository.getCollaboratorNames();
-  }
-
-  public Set<GHTeam> getTeams() throws IOException {
-    return ghRepository.getTeams();
-  }
-
-  public void addCollaborators(GHUser... users) throws IOException {
-    ghRepository.addCollaborators(users);
-  }
-
-  public void addCollaborators(Collection<GHUser> users) throws IOException {
-    ghRepository.addCollaborators(users);
-  }
-
-  public void removeCollaborators(GHUser... users) throws IOException {
-    ghRepository.removeCollaborators(users);
-  }
-
-  public void removeCollaborators(Collection<GHUser> users) throws IOException {
-    ghRepository.removeCollaborators(users);
-  }
-
-  public void setEmailServiceHook(String address) throws IOException {
-    ghRepository.setEmailServiceHook(address);
-  }
-
-  public void enableIssueTracker(boolean v) throws IOException {
-    ghRepository.enableIssueTracker(v);
-  }
-
-  public void enableWiki(boolean v) throws IOException {
-    ghRepository.enableWiki(v);
-  }
-
-  public void enableDownloads(boolean v) throws IOException {
-    ghRepository.enableDownloads(v);
-  }
-
-  public void renameTo(String name) throws IOException {
-    ghRepository.renameTo(name);
-  }
-
-  public void setDescription(String value) throws IOException {
-    ghRepository.setDescription(value);
-  }
-
-  public void setHomepage(String value) throws IOException {
-    ghRepository.setHomepage(value);
-  }
-
-  public void delete() throws IOException {
-    ghRepository.delete();
-  }
-
-  public GHRepository fork() throws IOException {
-    return ghRepository.fork();
-  }
-
-  public GHRepository forkTo(GHOrganization org) throws IOException {
-    return ghRepository.forkTo(org);
-  }
-
-  public GHPullRequest getPullRequest(int i) throws IOException {
-    return ghRepository.getPullRequest(i);
-  }
-
-  public List<GHPullRequest> getPullRequests(GHIssueState state)
-      throws IOException {
-    return ghRepository.getPullRequests(state);
-  }
-
-  public PagedIterable<GHPullRequest> listPullRequests(GHIssueState state) {
-    return ghRepository.listPullRequests(state);
-  }
-
-  public List<GHHook> getHooks() throws IOException {
-    return ghRepository.getHooks();
-  }
-
-  public GHHook getHook(int id) throws IOException {
-    return ghRepository.getHook(id);
-  }
-
-  public GHCompare getCompare(String id1, String id2) throws IOException {
-    return ghRepository.getCompare(id1, id2);
-  }
-
-  public GHCompare getCompare(GHCommit id1, GHCommit id2) throws IOException {
-    return ghRepository.getCompare(id1, id2);
-  }
-
-  public GHCompare getCompare(GHBranch id1, GHBranch id2) throws IOException {
-    return ghRepository.getCompare(id1, id2);
-  }
-
-  public GHRef[] getRefs() throws IOException {
-    return ghRepository.getRefs();
-  }
-
-  public GHRef[] getRefs(String refType) throws IOException {
-    return ghRepository.getRefs(refType);
-  }
-
-  public GHCommit getCommit(String sha1) throws IOException {
-    return ghRepository.getCommit(sha1);
-  }
-
-  public PagedIterable<GHCommit> listCommits() {
-    return ghRepository.listCommits();
-  }
-
-  public PagedIterable<GHCommitComment> listCommitComments() {
-    return ghRepository.listCommitComments();
-  }
-
-  public PagedIterable<GHCommitStatus> listCommitStatuses(String sha1)
-      throws IOException {
-    return ghRepository.listCommitStatuses(sha1);
-  }
-
-  public GHCommitStatus getLastCommitStatus(String sha1) throws IOException {
-    return ghRepository.getLastCommitStatus(sha1);
-  }
-
-  public GHCommitStatus createCommitStatus(String sha1, GHCommitState state,
-      String targetUrl, String description) throws IOException {
-    return ghRepository.createCommitStatus(sha1, state, targetUrl, description);
-  }
-
-  public PagedIterable<GHEventInfo> listEvents() throws IOException {
-    return ghRepository.listEvents();
-  }
-
-  public GHHook createHook(String name, Map<String, String> config,
-      Collection<GHEvent> events, boolean active) throws IOException {
-    return ghRepository.createHook(name, config, events, active);
-  }
-
-  public GHHook createWebHook(URL url, Collection<GHEvent> events)
-      throws IOException {
-    return ghRepository.createWebHook(url, events);
-  }
-
-  public GHHook createWebHook(URL url) throws IOException {
-    return ghRepository.createWebHook(url);
-  }
-
-  @SuppressWarnings("deprecation")
-  public Set<URL> getPostCommitHooks() {
-    return ghRepository.getPostCommitHooks();
-  }
-
-  public Map<String, GHBranch> getBranches() throws IOException {
-    return ghRepository.getBranches();
-  }
-
-  @SuppressWarnings("deprecation")
-  public Map<Integer, GHMilestone> getMilestones() throws IOException {
-    return ghRepository.getMilestones();
-  }
-
-  public PagedIterable<GHMilestone> listMilestones(GHIssueState state) {
-    return ghRepository.listMilestones(state);
-  }
-
-  public GHMilestone getMilestone(int number) throws IOException {
-    return ghRepository.getMilestone(number);
-  }
-
-  public GHContent getFileContent(String path) throws IOException {
-    return ghRepository.getFileContent(path);
-  }
-
-  public GHContent getFileContent(String path, String ref) throws IOException {
-    return ghRepository.getFileContent(path, ref);
-  }
-
-  public List<GHContent> getDirectoryContent(String path) throws IOException {
-    return ghRepository.getDirectoryContent(path);
-  }
-
-  public List<GHContent> getDirectoryContent(String path, String ref)
-      throws IOException {
-    return ghRepository.getDirectoryContent(path, ref);
-  }
-
-  public GHContent getReadme() throws Exception {
-    return ghRepository.getReadme();
-  }
-
-  public GHContentUpdateResponse createContent(String content,
-      String commitMessage, String path) throws IOException {
-    return ghRepository.createContent(content, commitMessage, path);
-  }
-
-  public GHContentUpdateResponse createContent(String content,
-      String commitMessage, String path, String branch) throws IOException {
-    return ghRepository.createContent(content, commitMessage, path, branch);
-  }
-
-  public GHMilestone createMilestone(String title, String description)
-      throws IOException {
-    return ghRepository.createMilestone(title, description);
-  }
-
-  public String toString() {
-    return ghRepository.toString();
-  }
-
-  public int hashCode() {
-    return ghRepository.hashCode();
-  }
-
-  public boolean equals(Object obj) {
-    return ghRepository.equals(obj);
-  }
 }