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

added generic method for paged results

parent 6fb31590
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.ObjectMapper;
import org.gitlab.api.http.GitlabHTTPRequestor;
......@@ -12,14 +19,6 @@ import org.gitlab.api.models.GitlabProject;
import org.gitlab.api.models.GitlabProjectHook;
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
*
......@@ -96,19 +95,7 @@ public class GitlabAPI {
public List<GitlabProject> getAllProjects() throws IOException {
String tailUrl = GitlabProject.URL;
List<GitlabProject> results = new ArrayList<GitlabProject>();
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;
return retrieve().getAll(tailUrl, GitlabProject[].class);
}
public List<GitlabMergeRequest> getOpenMergeRequests(GitlabProject project) throws IOException {
......@@ -137,18 +124,7 @@ public class GitlabAPI {
public List<GitlabMergeRequest> getAllMergeRequests(GitlabProject project) throws IOException {
String tailUrl = GitlabProject.URL + "/" + project.getId() + GitlabMergeRequest.URL;
List<GitlabMergeRequest> results = new ArrayList<GitlabMergeRequest>();
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;
return retrieve().getAll(tailUrl, GitlabMergeRequest[].class);
}
public GitlabMergeRequest getMergeRequest(GitlabProject project, Integer mergeRequestId) throws IOException {
......@@ -170,18 +146,7 @@ public class GitlabAPI {
GitlabMergeRequest.URL + "/" + mergeRequest.getId() +
GitlabNote.URL;
List<GitlabNote> results = new ArrayList<GitlabNote>();
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;
return retrieve().getAll(tailUrl, GitlabNote[].class);
}
......@@ -256,7 +221,7 @@ public class GitlabAPI {
public List<GitlabIssue> getIssues(GitlabProject project) throws IOException {
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 {
......@@ -269,15 +234,9 @@ public class GitlabAPI {
String tailUrl = GitlabProject.URL + "/" + projectId + GitlabIssue.URL;
GitlabHTTPRequestor requestor = dispatch().with("title", title)
.with("description", description)
.with("labels", labels);
if(assigneeId != 0) {
requestor.with("assignee_id", assigneeId);
}
if(milestoneId != 0) {
requestor.with("milestone_id", milestoneId);
}
.with("labels", labels)
.with("assignee_id", assigneeId)
.with("milestone_id", milestoneId);
return requestor.to(tailUrl, GitlabIssue.class);
}
......@@ -287,15 +246,9 @@ public class GitlabAPI {
String tailUrl = GitlabProject.URL + "/" + projectId + GitlabIssue.URL + "/" + issueId;
GitlabHTTPRequestor requestor = retrieve().method("PUT").with("title", title)
.with("description", description)
.with("labels", labels);
if(assigneeId != 0) {
requestor.with("assignee_id", assigneeId);
}
if(milestoneId != 0) {
requestor.with("milestone_id", milestoneId);
}
.with("labels", labels)
.with("assignee_id", assigneeId)
.with("milestone_id", milestoneId);
if(action != GitlabIssue.Action.LEAVE) {
requestor.with("state_event", action.toString().toLowerCase());
......
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.IOException;
import java.io.InputStream;
......@@ -14,10 +9,23 @@ import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
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.Pattern;
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.gitlab.api.GitlabAPI;
......@@ -128,6 +136,19 @@ public class GitlabHTTPRequestor {
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) {
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