diff --git a/pom.xml b/pom.xml index b8aadaafff..7675cf7dee 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ github-api - 1.17 + 1.18 GitHub API for Java http://github-api.kohsuke.org/ GitHub API for Java diff --git a/src/main/java/org/kohsuke/github/GHMilestone.java b/src/main/java/org/kohsuke/github/GHMilestone.java new file mode 100644 index 0000000000..e32f13843b --- /dev/null +++ b/src/main/java/org/kohsuke/github/GHMilestone.java @@ -0,0 +1,73 @@ +package org.kohsuke.github; + +import java.util.Date; +import java.util.Locale; + +/** + * + * @author Yusuke Kokubo + * + */ +public class GHMilestone { + GitHub root; + GHRepository owner; + + GHUser creator; + private String state, due_on, title, url, created_at, description; + private int closed_issues, open_issues, number; + + public GitHub getRoot() { + return root; + } + + public GHRepository getOwner() { + return owner; + } + + public GHUser getCreator() { + return creator; + } + + public Date getDueOn() { + if (due_on == null) return null; + return GitHub.parseDate(due_on); + } + + public String getTitle() { + return title; + } + + public String getUrl() { + return url; + } + + public Date getCreatedAt() { + return GitHub.parseDate(created_at); + } + + public String getDescription() { + return description; + } + + public int getClosedIssues() { + return closed_issues; + } + + public int getOpenIssues() { + return open_issues; + } + + public int getNumber() { + return number; + } + + public GHMilestoneState getState() { + return Enum.valueOf(GHMilestoneState.class, state.toUpperCase(Locale.ENGLISH)); + } + + public GHMilestone wrap(GHRepository repo) { + this.owner = repo; + this.root = repo.root; + return this; + } +} diff --git a/src/main/java/org/kohsuke/github/GHMilestoneState.java b/src/main/java/org/kohsuke/github/GHMilestoneState.java new file mode 100644 index 0000000000..92194546cb --- /dev/null +++ b/src/main/java/org/kohsuke/github/GHMilestoneState.java @@ -0,0 +1,11 @@ +package org.kohsuke.github; + +/** + * + * @author Yusuke Kokubo + * + */ +public enum GHMilestoneState { + OPEN, + CLOSED +} \ No newline at end of file diff --git a/src/main/java/org/kohsuke/github/GHMyself.java b/src/main/java/org/kohsuke/github/GHMyself.java new file mode 100644 index 0000000000..fe00518e96 --- /dev/null +++ b/src/main/java/org/kohsuke/github/GHMyself.java @@ -0,0 +1,34 @@ +package org.kohsuke.github; + +import java.io.IOException; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +/** + * Represents the account that's logging into GitHub. + * + * @author Kohsuke Kawaguchi + */ +public class GHMyself extends GHUser { + /** + * Returns the read-only list of e-mail addresses configured for you. + * + * This corresponds to the stuff you configure in https://github.com/settings/emails, + * and not to be confused with {@link #getEmail()} that shows your public e-mail address + * set in https://github.com/settings/profile + * + * @return + * Always non-null. + */ + public List getEmails() throws IOException { + String[] addresses = root.retrieveWithAuth3("/user/emails",String[].class); + return Collections.unmodifiableList(Arrays.asList(addresses)); + } + +// public void addEmails(Collection emails) throws IOException { +//// new Poster(root,ApiVersion.V3).withCredential().to("/user/emails"); +// root.retrieveWithAuth3() +// } +} diff --git a/src/main/java/org/kohsuke/github/GHRepository.java b/src/main/java/org/kohsuke/github/GHRepository.java index 20392d1192..83eb21ad91 100644 --- a/src/main/java/org/kohsuke/github/GHRepository.java +++ b/src/main/java/org/kohsuke/github/GHRepository.java @@ -42,12 +42,14 @@ import java.util.Collection; import java.util.Collections; import java.util.Date; +import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Set; +import java.util.TreeMap; import static java.util.Arrays.*; import static org.kohsuke.github.ApiVersion.V3; @@ -68,6 +70,7 @@ public class GHRepository { private boolean has_issues, has_wiki, fork, _private, has_downloads; private int watchers,forks,open_issues; private String created_at, pushed_at; + private Map milestones = new HashMap(); public String getDescription() { return description; @@ -458,6 +461,34 @@ public boolean remove(Object url) { return this; } + public Map getMilestones() throws IOException { + Map milestones = new TreeMap(); + GHMilestone[] ms = root.retrieve3("/repos/"+owner.login+"/"+name+"/milestones", GHMilestone[].class); + for (GHMilestone m : ms) { + m.owner = this; + m.root = root; + milestones.put(m.getNumber(), m); + } + return milestones; + } + + public GHMilestone getMilestone(int number) throws IOException { + GHMilestone m = milestones.get(number); + if (m == null) { + m = root.retrieve3("/repos/"+owner.login+"/"+name+"/milestones/"+number, GHMilestone.class); + m.owner = this; + m.root = root; + milestones.put(m.getNumber(), m); + } + return m; + } + + public GHMilestone createMilestone(String title, String description) throws IOException { + return new Poster(root,V3).withCredential() + .with("title", title).with("description", description) + .to("/repos/"+owner.login+"/"+name+"/milestones", GHMilestone.class,"POST").wrap(this); + } + @Override public String toString() { return "Repository:"+owner.login+":"+name; diff --git a/src/main/java/org/kohsuke/github/GitHub.java b/src/main/java/org/kohsuke/github/GitHub.java index 8f3c472c58..d95287f243 100644 --- a/src/main/java/org/kohsuke/github/GitHub.java +++ b/src/main/java/org/kohsuke/github/GitHub.java @@ -49,6 +49,7 @@ import java.util.Properties; import java.util.TimeZone; +import com.infradna.tool.bridge_method_injector.WithBridgeMethods; import org.apache.commons.io.IOUtils; import org.codehaus.jackson.map.DeserializationConfig.Feature; import org.codehaus.jackson.map.ObjectMapper; @@ -240,19 +241,16 @@ private T _retrieve(String tailApiUrl, Class type, String method, boolean /** * Gets the {@link GHUser} that represents yourself. */ - public GHUser getMyself() throws IOException { + @WithBridgeMethods(GHUser.class) + public GHMyself getMyself() throws IOException { requireCredential(); - if (oauthAccessToken != null) { - GHUser u = retrieveWithAuth("/user/show", JsonUser.class).user; - - u.root = this; - users.put(u.getLogin(), u); - - return u; - } else { - return getUser(login); - } + GHMyself u = retrieveWithAuth("/user/show", JsonMyself.class).user; + + u.root = this; + users.put(u.getLogin(), u); + + return u; } /** diff --git a/src/main/java/org/kohsuke/github/JsonMyself.java b/src/main/java/org/kohsuke/github/JsonMyself.java new file mode 100644 index 0000000000..419d840d49 --- /dev/null +++ b/src/main/java/org/kohsuke/github/JsonMyself.java @@ -0,0 +1,8 @@ +package org.kohsuke.github; + +/** + * @author Kohsuke Kawaguchi + */ +class JsonMyself { + GHMyself user; +} diff --git a/src/test/java/org/kohsuke/AppTest.java b/src/test/java/org/kohsuke/AppTest.java index 8e49623f93..a9af305266 100644 --- a/src/test/java/org/kohsuke/AppTest.java +++ b/src/test/java/org/kohsuke/AppTest.java @@ -64,8 +64,8 @@ public void tryHook() throws Exception { for (GHHook h : r.getHooks()) h.delete(); } - - public void testApp() throws IOException { + + public void testEventApi() throws Exception { GitHub gitHub = GitHub.connect(); for (GHEventInfo ev : gitHub.getEvents()) { System.out.println(ev); @@ -75,6 +75,11 @@ public void testApp() throws IOException { System.out.println(pr.getPullRequest()); } } + } + + public void testApp() throws IOException { + GitHub gitHub = GitHub.connect(); + System.out.println(gitHub.getMyself().getEmails()); // GHRepository r = gitHub.connect().getOrganization("jenkinsci").createRepository("kktest4", "Kohsuke's test", "http://kohsuke.org/", "Everyone", true); // r.fork();