aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/io/trygvis/esper/testing/gitorious/GitoriousClient.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/io/trygvis/esper/testing/gitorious/GitoriousClient.java')
-rw-r--r--src/main/java/io/trygvis/esper/testing/gitorious/GitoriousClient.java149
1 files changed, 142 insertions, 7 deletions
diff --git a/src/main/java/io/trygvis/esper/testing/gitorious/GitoriousClient.java b/src/main/java/io/trygvis/esper/testing/gitorious/GitoriousClient.java
index a4f300f..a58f1de 100644
--- a/src/main/java/io/trygvis/esper/testing/gitorious/GitoriousClient.java
+++ b/src/main/java/io/trygvis/esper/testing/gitorious/GitoriousClient.java
@@ -2,6 +2,7 @@ package io.trygvis.esper.testing.gitorious;
import static java.lang.System.*;
import org.apache.commons.io.*;
+import static org.apache.commons.lang.StringUtils.*;
import static org.codehaus.httpcache4j.HTTPMethod.*;
import org.codehaus.httpcache4j.*;
import org.codehaus.httpcache4j.cache.*;
@@ -16,20 +17,20 @@ import java.util.*;
public class GitoriousClient {
public static final STAXEventReader xmlReader = new STAXEventReader();
private final HTTPCache httpCache;
- private final String gitoriousUrl;
+ public final String baseUrl;
private final String projectsUri;
- public GitoriousClient(HTTPCache httpCache, String gitoriousUrl) throws URISyntaxException {
+ public GitoriousClient(HTTPCache httpCache, String baseUrl) throws URISyntaxException {
this.httpCache = httpCache;
- this.gitoriousUrl = new URI(gitoriousUrl).toASCIIString();
- this.projectsUri = gitoriousUrl + "/projects.xml";
+ this.baseUrl = new URI(baseUrl).toASCIIString();
+ this.projectsUri = baseUrl + "/projects.xml";
}
- public Set<GitoriousProject> findProjects() throws Exception {
+ public Set<GitoriousProjectXml> findProjects() throws Exception {
System.out.println("Fetching all projects");
int page = 1;
- Set<GitoriousProject> all = new HashSet<>();
+ Set<GitoriousProjectXml> all = new HashSet<>();
while (page <= 10) {
System.out.println("Fetching projects XML, page=" + page);
long start = currentTimeMillis();
@@ -42,7 +43,7 @@ public class GitoriousClient {
try {
Document doc = xmlReader.readDocument(new ByteArrayInputStream(bytes));
- List<GitoriousProject> list = GitoriousProject.projectsFromXml(gitoriousUrl, doc.getRootElement());
+ List<GitoriousProjectXml> list = GitoriousProjectXml.projectsFromXml(doc.getRootElement());
// This indicates the last page.
if (list.size() == 0) {
@@ -61,4 +62,138 @@ public class GitoriousClient {
return all;
}
+
+ public URI atomFeed(String slug) {
+ return URI.create(baseUrl + "/" + slug + ".atom");
+ }
+}
+
+class GitoriousProjectXml implements Comparable<GitoriousProjectXml> {
+ public final String slug;
+ public final List<GitoriousRepositoryXml> repositories;
+
+ public GitoriousProjectXml(String slug, List<GitoriousRepositoryXml> repositories) {
+ this.slug = slug;
+ this.repositories = repositories;
+ }
+
+ public static GitoriousProjectXml fromXml(Element project) throws URISyntaxException {
+ String slug = trimToNull(project.elementText("slug"));
+
+ if (slug == null) {
+ System.out.println("Missing slug");
+ return null;
+ }
+
+ Element repositories = project.element("repositories");
+ if (repositories == null) {
+ System.out.println("Missing <repositories>");
+ return null;
+ }
+
+ Element mainlines = repositories.element("mainlines");
+ if (mainlines == null) {
+ System.out.println("Missing <mainlines>");
+ return null;
+ }
+
+ List<Element> list = (List<Element>) mainlines.elements("repository");
+ List<GitoriousRepositoryXml> repositoryList = new ArrayList<>(list.size());
+ for (Element repository : list) {
+ GitoriousRepositoryXml r = GitoriousRepositoryXml.fromXml(slug, repository);
+
+ if (r == null) {
+ continue;
+ }
+
+ repositoryList.add(r);
+ }
+
+ return new GitoriousProjectXml(slug, repositoryList);
+ }
+
+ public static List<GitoriousProjectXml> projectsFromXml(Element root) throws URISyntaxException {
+ List<GitoriousProjectXml> projects = new ArrayList<>();
+ for (Element project : (List<Element>) root.elements("project")) {
+
+ GitoriousProjectXml p = GitoriousProjectXml.fromXml(project);
+ if (p == null) {
+ System.out.println(project.toString());
+ continue;
+ }
+ projects.add(p);
+ }
+
+ return projects;
+ }
+
+ public int compareTo(GitoriousProjectXml other) {
+ return slug.compareTo(other.slug);
+ }
+
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (!(o instanceof GitoriousProjectXml)) return false;
+
+ GitoriousProjectXml that = (GitoriousProjectXml) o;
+
+ if (!repositories.equals(that.repositories)) return false;
+ if (!slug.equals(that.slug)) return false;
+
+ return true;
+ }
+
+ public int hashCode() {
+ int result = slug.hashCode();
+ result = 31 * result + repositories.hashCode();
+ return result;
+ }
+}
+
+class GitoriousRepositoryXml implements Comparable<GitoriousRepositoryXml> {
+ public final String projectSlug;
+ public final String name;
+
+ GitoriousRepositoryXml(String projectSlug, String name) {
+ this.projectSlug = projectSlug;
+ this.name = name;
+ }
+
+ public static GitoriousRepositoryXml fromXml(String project, Element element) throws URISyntaxException {
+ String name = trimToNull(element.elementText("name"));
+
+ if (name == null) {
+ return null;
+ }
+
+ return new GitoriousRepositoryXml(project, name);
+ }
+
+ public int compareTo(GitoriousRepositoryXml o) {
+ int a = projectSlug.compareTo(o.projectSlug);
+
+ if (a != 0) {
+ return a;
+ }
+
+ return name.compareTo(o.name);
+ }
+
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (!(o instanceof GitoriousRepositoryXml)) return false;
+
+ GitoriousRepositoryXml that = (GitoriousRepositoryXml) o;
+
+ if (!name.equals(that.name)) return false;
+ if (!projectSlug.equals(that.projectSlug)) return false;
+
+ return true;
+ }
+
+ public int hashCode() {
+ int result = projectSlug.hashCode();
+ result = 31 * result + name.hashCode();
+ return result;
+ }
}