package de.saumya.mojo.proxy;
import org.yaml.snakeyaml.Yaml;
import org.yaml.snakeyaml.constructor.SafeConstructor;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
public abstract class RubygemsApiVisitor {
private final Set<String> versions = new TreeSet<String>();
private final boolean prereleases;
private Set<String> brokenVersions;
protected String gemname;
public RubygemsApiVisitor(String gemname, boolean prereleases, Set<String> brokenVersions) {
this.gemname = gemname;
this.prereleases = prereleases;
this.brokenVersions = brokenVersions;
}
public void accept(URL url) throws IOException{
accept(new BufferedReader(new InputStreamReader(url.openStream())));
}
@SuppressWarnings("unchecked")
private void accept(BufferedReader reader) throws IOException {
Yaml yaml = new Yaml(new SafeConstructor());
try {
List<Map<String, Object>> versionsYaml = (List<Map<String, Object>>) yaml.load(reader);
for (Map<String, Object> versionYaml : versionsYaml) {
String number = versionYaml.get("number").toString();
String platform = versionYaml.get("platform").toString();
boolean prerelease = (Boolean) versionYaml.get("prerelease");
if ((!prereleases && !prerelease) || (prereleases && prerelease)) {
if (!versions.contains(number) && (brokenVersions == null || !brokenVersions.contains(number))
&& !platform.contains("x86-m")) {
if (prereleases) {
number += "-SNAPSHOT";
}
addVersion(number);
versions.add(number);
}
}
}
} finally {
reader.close();
}
}
abstract protected void addVersion(String version);
}