Commit 005d6005 authored by Paul Weingardt's avatar Paul Weingardt

added generic method for paged results

parent 6fb31590
package org.gitlab.api; package org.gitlab.api;
import java.io.IOException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.codehaus.jackson.map.DeserializationConfig; import org.codehaus.jackson.map.DeserializationConfig;
import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.map.ObjectMapper;
import org.gitlab.api.http.GitlabHTTPRequestor; import org.gitlab.api.http.GitlabHTTPRequestor;
...@@ -12,14 +19,6 @@ import org.gitlab.api.models.GitlabProject; ...@@ -12,14 +19,6 @@ import org.gitlab.api.models.GitlabProject;
import org.gitlab.api.models.GitlabProjectHook; import org.gitlab.api.models.GitlabProjectHook;
import org.gitlab.api.models.GitlabSession; import org.gitlab.api.models.GitlabSession;
import java.io.IOException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
/** /**
* Gitlab API Wrapper class * Gitlab API Wrapper class
* *
...@@ -96,19 +95,7 @@ public class GitlabAPI { ...@@ -96,19 +95,7 @@ public class GitlabAPI {
public List<GitlabProject> getAllProjects() throws IOException { public List<GitlabProject> getAllProjects() throws IOException {
String tailUrl = GitlabProject.URL; String tailUrl = GitlabProject.URL;
List<GitlabProject> results = new ArrayList<GitlabProject>(); return retrieve().getAll(tailUrl, GitlabProject[].class);
Iterator<GitlabProject[]> iterator = retrieve().asIterator(tailUrl, GitlabProject[].class);
while (iterator.hasNext()) {
GitlabProject[] projects = iterator.next();
if (projects.length > 0) {
results.addAll(Arrays.asList(projects));
}
}
return results;
} }
public List<GitlabMergeRequest> getOpenMergeRequests(GitlabProject project) throws IOException { public List<GitlabMergeRequest> getOpenMergeRequests(GitlabProject project) throws IOException {
...@@ -137,18 +124,7 @@ public class GitlabAPI { ...@@ -137,18 +124,7 @@ public class GitlabAPI {
public List<GitlabMergeRequest> getAllMergeRequests(GitlabProject project) throws IOException { public List<GitlabMergeRequest> getAllMergeRequests(GitlabProject project) throws IOException {
String tailUrl = GitlabProject.URL + "/" + project.getId() + GitlabMergeRequest.URL; String tailUrl = GitlabProject.URL + "/" + project.getId() + GitlabMergeRequest.URL;
List<GitlabMergeRequest> results = new ArrayList<GitlabMergeRequest>(); return retrieve().getAll(tailUrl, GitlabMergeRequest[].class);
Iterator<GitlabMergeRequest[]> iterator = retrieve().asIterator(tailUrl, GitlabMergeRequest[].class);
while (iterator.hasNext()) {
GitlabMergeRequest[] requests = iterator.next();
if (requests.length > 0) {
results.addAll(Arrays.asList(requests));
}
}
return results;
} }
public GitlabMergeRequest getMergeRequest(GitlabProject project, Integer mergeRequestId) throws IOException { public GitlabMergeRequest getMergeRequest(GitlabProject project, Integer mergeRequestId) throws IOException {
...@@ -169,19 +145,8 @@ public class GitlabAPI { ...@@ -169,19 +145,8 @@ public class GitlabAPI {
String tailUrl = GitlabProject.URL + "/" + mergeRequest.getProjectId() + String tailUrl = GitlabProject.URL + "/" + mergeRequest.getProjectId() +
GitlabMergeRequest.URL + "/" + mergeRequest.getId() + GitlabMergeRequest.URL + "/" + mergeRequest.getId() +
GitlabNote.URL; GitlabNote.URL;
List<GitlabNote> results = new ArrayList<GitlabNote>(); return retrieve().getAll(tailUrl, GitlabNote[].class);
Iterator<GitlabNote[]> iterator = retrieve().asIterator(tailUrl, GitlabNote[].class);
while (iterator.hasNext()) {
GitlabNote[] projects = iterator.next();
if (projects.length > 0) {
results.addAll(Arrays.asList(projects));
}
}
return results;
} }
...@@ -256,7 +221,7 @@ public class GitlabAPI { ...@@ -256,7 +221,7 @@ public class GitlabAPI {
public List<GitlabIssue> getIssues(GitlabProject project) throws IOException { public List<GitlabIssue> getIssues(GitlabProject project) throws IOException {
String tailUrl = GitlabProject.URL + "/" + project.getId() + GitlabIssue.URL; String tailUrl = GitlabProject.URL + "/" + project.getId() + GitlabIssue.URL;
return Arrays.asList(retrieve().to(tailUrl, GitlabIssue[].class)); return retrieve().getAll(tailUrl, GitlabIssue[].class);
} }
public GitlabIssue getIssue(Integer projectId, Integer issueId) throws IOException { public GitlabIssue getIssue(Integer projectId, Integer issueId) throws IOException {
...@@ -269,16 +234,10 @@ public class GitlabAPI { ...@@ -269,16 +234,10 @@ public class GitlabAPI {
String tailUrl = GitlabProject.URL + "/" + projectId + GitlabIssue.URL; String tailUrl = GitlabProject.URL + "/" + projectId + GitlabIssue.URL;
GitlabHTTPRequestor requestor = dispatch().with("title", title) GitlabHTTPRequestor requestor = dispatch().with("title", title)
.with("description", description) .with("description", description)
.with("labels", labels); .with("labels", labels)
.with("assignee_id", assigneeId)
if(assigneeId != 0) { .with("milestone_id", milestoneId);
requestor.with("assignee_id", assigneeId);
}
if(milestoneId != 0) {
requestor.with("milestone_id", milestoneId);
}
return requestor.to(tailUrl, GitlabIssue.class); return requestor.to(tailUrl, GitlabIssue.class);
} }
...@@ -287,18 +246,12 @@ public class GitlabAPI { ...@@ -287,18 +246,12 @@ public class GitlabAPI {
String tailUrl = GitlabProject.URL + "/" + projectId + GitlabIssue.URL + "/" + issueId; String tailUrl = GitlabProject.URL + "/" + projectId + GitlabIssue.URL + "/" + issueId;
GitlabHTTPRequestor requestor = retrieve().method("PUT").with("title", title) GitlabHTTPRequestor requestor = retrieve().method("PUT").with("title", title)
.with("description", description) .with("description", description)
.with("labels", labels); .with("labels", labels)
.with("assignee_id", assigneeId)
if(assigneeId != 0) { .with("milestone_id", milestoneId);
requestor.with("assignee_id", assigneeId);
}
if(milestoneId != 0) {
requestor.with("milestone_id", milestoneId);
}
if(action != GitlabIssue.Action.LEAVE) { if(action != GitlabIssue.Action.LEAVE) {
requestor.with("state_event", action.toString().toLowerCase()); requestor.with("state_event", action.toString().toLowerCase());
} }
return requestor.to(tailUrl, GitlabIssue.class); return requestor.to(tailUrl, GitlabIssue.class);
......
package org.gitlab.api.http; package org.gitlab.api.http;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLHandshakeException;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
...@@ -14,10 +9,23 @@ import java.net.HttpURLConnection; ...@@ -14,10 +9,23 @@ import java.net.HttpURLConnection;
import java.net.MalformedURLException; import java.net.MalformedURLException;
import java.net.ProtocolException; import java.net.ProtocolException;
import java.net.URL; import java.net.URL;
import java.util.*; import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import java.util.zip.GZIPInputStream; import java.util.zip.GZIPInputStream;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLHandshakeException;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
import org.gitlab.api.GitlabAPI; import org.gitlab.api.GitlabAPI;
...@@ -128,6 +136,19 @@ public class GitlabHTTPRequestor { ...@@ -128,6 +136,19 @@ public class GitlabHTTPRequestor {
return null; return null;
} }
public <T> List<T> getAll(final String tailUrl, final Class<T[]> type) {
List<T> results = new ArrayList<T>();
Iterator<T[]> iterator = asIterator(tailUrl, type);
while (iterator.hasNext()) {
T[] requests = iterator.next();
if (requests.length > 0) {
results.addAll(Arrays.asList(requests));
}
}
return results;
}
public <T> Iterator<T> asIterator(final String tailApiUrl, final Class<T> type) { public <T> Iterator<T> asIterator(final String tailApiUrl, final Class<T> type) {
method("GET"); // Ensure we only use iterators for GET requests method("GET"); // Ensure we only use iterators for GET requests
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment