diff --git a/src/main/java/org/gitlab/api/GitlabAPI.java b/src/main/java/org/gitlab/api/GitlabAPI.java index 8838573e..f967378b 100644 --- a/src/main/java/org/gitlab/api/GitlabAPI.java +++ b/src/main/java/org/gitlab/api/GitlabAPI.java @@ -3,13 +3,16 @@ import org.codehaus.jackson.map.DeserializationConfig; import org.codehaus.jackson.map.ObjectMapper; import org.gitlab.api.http.GitlabHTTPRequestor; +import org.gitlab.api.models.GitlabBranch; import org.gitlab.api.models.GitlabCommit; import org.gitlab.api.models.GitlabMergeRequest; import org.gitlab.api.models.GitlabNote; import org.gitlab.api.models.GitlabProject; +import org.gitlab.api.models.GitlabProjectHook; import java.io.IOException; import java.net.URL; +import java.net.URLEncoder; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; @@ -187,6 +190,55 @@ public GitlabNote createNote(GitlabMergeRequest mergeRequest, String body) throw return dispatch().with("body", body).to(tailUrl, GitlabNote.class); } + + public List getBranches(GitlabProject project) throws IOException { + String tailUrl = GitlabProject.URL + "/" + project.getId() + GitlabBranch.URL; + GitlabBranch[] branches = retrieve().to(tailUrl, GitlabBranch[].class); + return Arrays.asList(branches); + } + + public GitlabBranch getBranch(GitlabProject project, String branchName) throws IOException { + String tailUrl = GitlabProject.URL + "/" + project.getId() + GitlabBranch.URL + branchName; + GitlabBranch branch = retrieve().to(tailUrl, GitlabBranch.class); + return branch; + } + + public void protectBranch(GitlabProject project, String branchName) throws IOException { + String tailUrl = GitlabProject.URL + "/" + project.getId() + GitlabBranch.URL + branchName + "/protect"; + retrieve().method("PUT").to(tailUrl, Void.class); + } + + public void unprotectBranch(GitlabProject project, String branchName) throws IOException { + String tailUrl = GitlabProject.URL + "/" + project.getId() + GitlabBranch.URL + branchName + "/unprotect"; + retrieve().method("PUT").to(tailUrl, Void.class); + } + + public List getProjectHooks(GitlabProject project) throws IOException { + String tailUrl = GitlabProject.URL + "/" + project.getId() + GitlabProjectHook.URL; + GitlabProjectHook[] hooks = retrieve().to(tailUrl, GitlabProjectHook[].class); + return Arrays.asList(hooks); + } + + public GitlabProjectHook getProjectHook(GitlabProject project, String hookId) throws IOException { + String tailUrl = GitlabProject.URL + "/" + project.getId() + GitlabProjectHook.URL + "/" + hookId; + GitlabProjectHook hook = retrieve().to(tailUrl, GitlabProjectHook.class); + return hook; + } + + public GitlabProjectHook addProjectHook(GitlabProject project, String url) throws IOException { + String tailUrl = GitlabProject.URL + "/" + project.getId() + GitlabProjectHook.URL + "?url=" + URLEncoder.encode(url, "UTF-8"); + return dispatch().to(tailUrl, GitlabProjectHook.class); + } + + public GitlabProjectHook editProjectHook(GitlabProject project, String hookId, String url) throws IOException { + String tailUrl = GitlabProject.URL + "/" + project.getId() + GitlabProjectHook.URL + "/" + hookId + "?url=" + URLEncoder.encode(url, "UTF-8"); + return retrieve().method("PUT").to(tailUrl, GitlabProjectHook.class); + } + + public void deleteProjectHook(GitlabProject project, String hookId) throws IOException { + String tailUrl = GitlabProject.URL + "/" + project.getId() + GitlabProjectHook.URL + "/" + hookId; + retrieve().method("DELETE").to(tailUrl, Void.class); + } private List fetchMergeRequests(String tailUrl) throws IOException { GitlabMergeRequest[] mergeRequests = retrieve().to(tailUrl, GitlabMergeRequest[].class); diff --git a/src/main/java/org/gitlab/api/http/GitlabHTTPRequestor.java b/src/main/java/org/gitlab/api/http/GitlabHTTPRequestor.java index 8baf3638..e06ba4de 100644 --- a/src/main/java/org/gitlab/api/http/GitlabHTTPRequestor.java +++ b/src/main/java/org/gitlab/api/http/GitlabHTTPRequestor.java @@ -113,6 +113,10 @@ public T to(String tailAPIUrl, Class type, T instance) throws IOException if (hasOutput()) { submitData(connection); + } else if( "PUT".equals(_method) ) { + // PUT requires Content-Length: 0 even when there is no body (eg: API for protecting a branch) + connection.setDoOutput(true); + connection.setFixedLengthStreamingMode(0); } try { diff --git a/src/main/java/org/gitlab/api/models/GitlabBranch.java b/src/main/java/org/gitlab/api/models/GitlabBranch.java new file mode 100644 index 00000000..0fd6d878 --- /dev/null +++ b/src/main/java/org/gitlab/api/models/GitlabBranch.java @@ -0,0 +1,32 @@ +package org.gitlab.api.models; + +import org.codehaus.jackson.annotate.JsonProperty; + +public class GitlabBranch { + public final static String URL = "/repository/branches/"; + + @JsonProperty("name") + private String _name; + +// @JsonProperty("commit") +// private GitlabCommit _commit; + + @JsonProperty("protected") + private boolean _protected; + + public String getName() { + return _name; + } + + public void setName(String name) { + this._name = name; + } + + public boolean isProtected() { + return _protected; + } + + public void setProtected(boolean isProtected) { + this._protected = isProtected; + } +} diff --git a/src/main/java/org/gitlab/api/models/GitlabProjectHook.java b/src/main/java/org/gitlab/api/models/GitlabProjectHook.java new file mode 100644 index 00000000..7c1889a8 --- /dev/null +++ b/src/main/java/org/gitlab/api/models/GitlabProjectHook.java @@ -0,0 +1,41 @@ +package org.gitlab.api.models; + +import java.util.Date; + +import org.codehaus.jackson.annotate.JsonProperty; + +public class GitlabProjectHook { + + public final static String URL = "/hooks"; + + private String _id; + private String _url; + + @JsonProperty("created_at") + private Date _createdAt; + + + public String getId() { + return _id; + } + + public void setId(String id) { + _id = id; + } + + public String getUrl() { + return _url; + } + + public void setUrl(String url) { + this._url = url; + } + + public Date getCreatedAt() { + return _createdAt; + } + + public void setCreatedAt(Date createdAt) { + _createdAt = createdAt; + } +}