diff --git a/.gitignore b/.gitignore index deaf0118..24adfbae 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,8 @@ .DS_Store build **/build +target +**/target **/src/test/java/exploration .gradle spring-social-core/src/test/java/exploration diff --git a/README b/README index 511b1c62..a20711e7 100644 --- a/README +++ b/README @@ -1,3 +1,4 @@ +1 ============================= Spring Social GitHub ============================ To check out the project and build from source, do the following: diff --git a/build.gradle b/build.gradle index 29145917..d54435c7 100644 --- a/build.gradle +++ b/build.gradle @@ -21,11 +21,11 @@ configure(allprojects) { ext { springSocialVersion = '1.1.4.RELEASE' - jacksonVersion = '2.3.0' - junitVersion = '4.11' - mockitoVersion = '1.9.5' - servletApiVersion = '3.0.1' - springVersion = '4.0.2.RELEASE' + jacksonVersion = '2.6.5' + junitVersion = '4.12' + mockitoVersion = '1.10.19' + servletApiVersion = '3.1.0' + springVersion = '4.2.5.RELEASE' } [compileJava, compileTestJava]*.options*.compilerArgs = ['-Xlint:none'] diff --git a/spring-social-github/pom.xml b/spring-social-github/pom.xml new file mode 100644 index 00000000..ac765249 --- /dev/null +++ b/spring-social-github/pom.xml @@ -0,0 +1,102 @@ + + + 4.0.0 + org.springframework.social + spring-social-github + Spring Social GitHub + 1.0.0.CONTRIB + + Spring Social extension with connection support and an API binding for GitHub + + + 1.1.4.RELEASE + 2.6.5 + 4.2.5.RELEASE + 1.10.19 + + + + + org.springframework.maven.release + Spring Maven Release Repository + http://maven.springframework.org/release + + true + + + false + + + + org.springframework.maven.milestone + Spring Maven Milestone Repository + http://maven.springframework.org/milestone + + false + + + + + + + org.springframework.social + spring-social-core + ${spring.social.version} + + + org.springframework.social + spring-social-config + ${spring.social.version} + + + org.springframework.social + spring-social-security + ${spring.social.version} + + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + + + com.fasterxml.jackson.core + jackson-annotations + ${jackson.version} + + + + org.springframework + spring-test + ${spring.version} + test + + + junit + junit + 4.12 + test + + + org.mockito + mockito-all + ${mockito.version} + test + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 2.0.2 + + 1.5 + 1.5 + + + + + + \ No newline at end of file diff --git a/spring-social-github/src/main/java/org/springframework/social/github/api/GitHubBranch.java b/spring-social-github/src/main/java/org/springframework/social/github/api/GitHubBranch.java new file mode 100644 index 00000000..de8cf329 --- /dev/null +++ b/spring-social-github/src/main/java/org/springframework/social/github/api/GitHubBranch.java @@ -0,0 +1,25 @@ +package org.springframework.social.github.api; + +import java.io.Serializable; + +/** + * A GitHub repo branch. + * + * @author Boris Yakovito + */ +public class GitHubBranch implements Serializable { + + private String name; + + public GitHubBranch(String name) { + this.name = name; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/spring-social-github/src/main/java/org/springframework/social/github/api/RepoOperations.java b/spring-social-github/src/main/java/org/springframework/social/github/api/RepoOperations.java index cb0bc6db..d488c03e 100644 --- a/spring-social-github/src/main/java/org/springframework/social/github/api/RepoOperations.java +++ b/spring-social-github/src/main/java/org/springframework/social/github/api/RepoOperations.java @@ -32,7 +32,16 @@ public interface RepoOperations { * @return repo */ GitHubRepo getRepo(String user, String repo); - + + /** + * Public operation to return a list of branches for the given repository. + * + * @param user GitHub user + * @param repo GitHub repository + * @return list of collaborators + */ + List getBranches(String user, String repo); + /** * Public operation to return a list of collaborators for the given repository. * diff --git a/spring-social-github/src/main/java/org/springframework/social/github/api/UserOperations.java b/spring-social-github/src/main/java/org/springframework/social/github/api/UserOperations.java index 5bf441a2..bb00e05d 100644 --- a/spring-social-github/src/main/java/org/springframework/social/github/api/UserOperations.java +++ b/spring-social-github/src/main/java/org/springframework/social/github/api/UserOperations.java @@ -60,4 +60,13 @@ public interface UserOperations { * @return list of users the given user is following */ List getFollowing(String user); + + + /** + * Public operation to return the user's repositories + * + * @param user GitHub user + * @return list of repositories + */ + List getRepos(String user); } diff --git a/spring-social-github/src/main/java/org/springframework/social/github/api/impl/RepoTemplate.java b/spring-social-github/src/main/java/org/springframework/social/github/api/impl/RepoTemplate.java index b3f7a0d5..6fc4bf41 100644 --- a/spring-social-github/src/main/java/org/springframework/social/github/api/impl/RepoTemplate.java +++ b/spring-social-github/src/main/java/org/springframework/social/github/api/impl/RepoTemplate.java @@ -19,13 +19,7 @@ import java.util.List; -import org.springframework.social.github.api.GitHubCommit; -import org.springframework.social.github.api.GitHubDownload; -import org.springframework.social.github.api.GitHubHook; -import org.springframework.social.github.api.GitHubIssue; -import org.springframework.social.github.api.GitHubRepo; -import org.springframework.social.github.api.GitHubUser; -import org.springframework.social.github.api.RepoOperations; +import org.springframework.social.github.api.*; import org.springframework.web.client.RestTemplate; /** @@ -52,7 +46,12 @@ public RepoTemplate(RestTemplate restTemplate, boolean isAuthorizedForUser) { public GitHubRepo getRepo(String user, String repo) { return restTemplate.getForObject(buildRepoUri(""), GitHubRepo.class, user, repo); } - + + @Override + public List getBranches(String user, String repo) { + return asList(restTemplate.getForObject(buildRepoUri("/branches"), GitHubBranch[].class, user, repo)); + } + public List getCollaborators(String user, String repo) { return asList(restTemplate.getForObject(buildRepoUri("/collaborators"), GitHubUser[].class, user, repo)); } diff --git a/spring-social-github/src/main/java/org/springframework/social/github/api/impl/UserTemplate.java b/spring-social-github/src/main/java/org/springframework/social/github/api/impl/UserTemplate.java index c76c8cd5..409c2776 100644 --- a/spring-social-github/src/main/java/org/springframework/social/github/api/impl/UserTemplate.java +++ b/spring-social-github/src/main/java/org/springframework/social/github/api/impl/UserTemplate.java @@ -23,8 +23,8 @@ import java.util.Date; import java.util.List; import java.util.Locale; -import java.util.Map; +import org.springframework.social.github.api.GitHubRepo; import org.springframework.social.github.api.GitHubUser; import org.springframework.social.github.api.GitHubUserProfile; import org.springframework.social.github.api.UserOperations; @@ -71,7 +71,10 @@ public String getProfileUrl() { return "https://github.com/" + getUserProfile().getLogin(); } - + @Override + public List getRepos(String user) { + return asList(restTemplate.getForObject(buildUserUri("/repos"), GitHubRepo[].class, user)); + } private String buildUserUri(String path) { return buildUri("users/{user}" + path); diff --git a/spring-social-github/src/main/java/org/springframework/social/github/api/impl/json/GitHubBranchMixin.java b/spring-social-github/src/main/java/org/springframework/social/github/api/impl/json/GitHubBranchMixin.java new file mode 100644 index 00000000..eac922f9 --- /dev/null +++ b/spring-social-github/src/main/java/org/springframework/social/github/api/impl/json/GitHubBranchMixin.java @@ -0,0 +1,14 @@ +package org.springframework.social.github.api.impl.json; + +import com.fasterxml.jackson.annotation.JsonProperty; +import org.springframework.social.github.api.GitHubBranch; + +/** + * Annotated mixin to add annotations to {@link GitHubBranch} + * + * @author Boris Yakovito + */ +public class GitHubBranchMixin extends GitHubObjectMixin { + + GitHubBranchMixin(@JsonProperty("name") String name) {} +} diff --git a/spring-social-github/src/main/java/org/springframework/social/github/api/impl/json/GitHubModule.java b/spring-social-github/src/main/java/org/springframework/social/github/api/impl/json/GitHubModule.java index ba2954e8..92988f63 100644 --- a/spring-social-github/src/main/java/org/springframework/social/github/api/impl/json/GitHubModule.java +++ b/spring-social-github/src/main/java/org/springframework/social/github/api/impl/json/GitHubModule.java @@ -15,7 +15,6 @@ */ package org.springframework.social.github.api.impl.json; -import com.fasterxml.jackson.databind.Module; import com.fasterxml.jackson.databind.module.SimpleModule; import org.springframework.social.github.api.*; @@ -40,6 +39,7 @@ public void setupModule(SetupContext context) { context.setMixInAnnotations(GitHubHook.class, GitHubHookMixin.class); context.setMixInAnnotations(GitHubIssue.class, GitHubIssueMixin.class); context.setMixInAnnotations(GitHubRepo.class, GitHubRepoMixin.class); + context.setMixInAnnotations(GitHubBranch.class, GitHubBranchMixin.class); context.setMixInAnnotations(GitHubUser.class, GitHubUserMixin.class); context.setMixInAnnotations(GitHubUserProfile.class, GitHubUserProfileMixin.class); } diff --git a/spring-social-github/src/test/java/org/springframework/social/github/api/impl/gist-comment.json b/spring-social-github/src/test/resources/org/springframework/social/github/api/impl/gist-comment.json similarity index 100% rename from spring-social-github/src/test/java/org/springframework/social/github/api/impl/gist-comment.json rename to spring-social-github/src/test/resources/org/springframework/social/github/api/impl/gist-comment.json diff --git a/spring-social-github/src/test/java/org/springframework/social/github/api/impl/gist-comments.json b/spring-social-github/src/test/resources/org/springframework/social/github/api/impl/gist-comments.json similarity index 100% rename from spring-social-github/src/test/java/org/springframework/social/github/api/impl/gist-comments.json rename to spring-social-github/src/test/resources/org/springframework/social/github/api/impl/gist-comments.json diff --git a/spring-social-github/src/test/java/org/springframework/social/github/api/impl/gists-public.json b/spring-social-github/src/test/resources/org/springframework/social/github/api/impl/gists-public.json similarity index 100% rename from spring-social-github/src/test/java/org/springframework/social/github/api/impl/gists-public.json rename to spring-social-github/src/test/resources/org/springframework/social/github/api/impl/gists-public.json diff --git a/spring-social-github/src/test/java/org/springframework/social/github/api/impl/profile.json b/spring-social-github/src/test/resources/org/springframework/social/github/api/impl/profile.json similarity index 100% rename from spring-social-github/src/test/java/org/springframework/social/github/api/impl/profile.json rename to spring-social-github/src/test/resources/org/springframework/social/github/api/impl/profile.json diff --git a/spring-social-github/src/test/java/org/springframework/social/github/api/impl/repo-collaborators.json b/spring-social-github/src/test/resources/org/springframework/social/github/api/impl/repo-collaborators.json similarity index 100% rename from spring-social-github/src/test/java/org/springframework/social/github/api/impl/repo-collaborators.json rename to spring-social-github/src/test/resources/org/springframework/social/github/api/impl/repo-collaborators.json diff --git a/spring-social-github/src/test/java/org/springframework/social/github/api/impl/repo-commits.json b/spring-social-github/src/test/resources/org/springframework/social/github/api/impl/repo-commits.json similarity index 100% rename from spring-social-github/src/test/java/org/springframework/social/github/api/impl/repo-commits.json rename to spring-social-github/src/test/resources/org/springframework/social/github/api/impl/repo-commits.json diff --git a/spring-social-github/src/test/java/org/springframework/social/github/api/impl/repo-download.json b/spring-social-github/src/test/resources/org/springframework/social/github/api/impl/repo-download.json similarity index 100% rename from spring-social-github/src/test/java/org/springframework/social/github/api/impl/repo-download.json rename to spring-social-github/src/test/resources/org/springframework/social/github/api/impl/repo-download.json diff --git a/spring-social-github/src/test/java/org/springframework/social/github/api/impl/repo-downloads.json b/spring-social-github/src/test/resources/org/springframework/social/github/api/impl/repo-downloads.json similarity index 100% rename from spring-social-github/src/test/java/org/springframework/social/github/api/impl/repo-downloads.json rename to spring-social-github/src/test/resources/org/springframework/social/github/api/impl/repo-downloads.json diff --git a/spring-social-github/src/test/java/org/springframework/social/github/api/impl/repo-forks.json b/spring-social-github/src/test/resources/org/springframework/social/github/api/impl/repo-forks.json similarity index 100% rename from spring-social-github/src/test/java/org/springframework/social/github/api/impl/repo-forks.json rename to spring-social-github/src/test/resources/org/springframework/social/github/api/impl/repo-forks.json diff --git a/spring-social-github/src/test/java/org/springframework/social/github/api/impl/repo-hooks.json b/spring-social-github/src/test/resources/org/springframework/social/github/api/impl/repo-hooks.json similarity index 100% rename from spring-social-github/src/test/java/org/springframework/social/github/api/impl/repo-hooks.json rename to spring-social-github/src/test/resources/org/springframework/social/github/api/impl/repo-hooks.json diff --git a/spring-social-github/src/test/java/org/springframework/social/github/api/impl/repo-issues.json b/spring-social-github/src/test/resources/org/springframework/social/github/api/impl/repo-issues.json similarity index 100% rename from spring-social-github/src/test/java/org/springframework/social/github/api/impl/repo-issues.json rename to spring-social-github/src/test/resources/org/springframework/social/github/api/impl/repo-issues.json diff --git a/spring-social-github/src/test/java/org/springframework/social/github/api/impl/repo-watchers.json b/spring-social-github/src/test/resources/org/springframework/social/github/api/impl/repo-watchers.json similarity index 100% rename from spring-social-github/src/test/java/org/springframework/social/github/api/impl/repo-watchers.json rename to spring-social-github/src/test/resources/org/springframework/social/github/api/impl/repo-watchers.json diff --git a/spring-social-github/src/test/java/org/springframework/social/github/api/impl/repo.json b/spring-social-github/src/test/resources/org/springframework/social/github/api/impl/repo.json similarity index 100% rename from spring-social-github/src/test/java/org/springframework/social/github/api/impl/repo.json rename to spring-social-github/src/test/resources/org/springframework/social/github/api/impl/repo.json diff --git a/spring-social-github/src/test/java/org/springframework/social/github/api/impl/user-followers.json b/spring-social-github/src/test/resources/org/springframework/social/github/api/impl/user-followers.json similarity index 100% rename from spring-social-github/src/test/java/org/springframework/social/github/api/impl/user-followers.json rename to spring-social-github/src/test/resources/org/springframework/social/github/api/impl/user-followers.json diff --git a/spring-social-github/src/test/java/org/springframework/social/github/api/impl/user-following.json b/spring-social-github/src/test/resources/org/springframework/social/github/api/impl/user-following.json similarity index 100% rename from spring-social-github/src/test/java/org/springframework/social/github/api/impl/user-following.json rename to spring-social-github/src/test/resources/org/springframework/social/github/api/impl/user-following.json diff --git a/spring-social-github/src/test/java/org/springframework/social/github/api/impl/user-gists.json b/spring-social-github/src/test/resources/org/springframework/social/github/api/impl/user-gists.json similarity index 100% rename from spring-social-github/src/test/java/org/springframework/social/github/api/impl/user-gists.json rename to spring-social-github/src/test/resources/org/springframework/social/github/api/impl/user-gists.json