package VASSAL.tools.version; import java.io.IOException; import java.io.InputStream; import java.net.URL; import VASSAL.Info; import VASSAL.tools.io.IOUtils; public class VersionUtils { protected VersionUtils() {} private static final String baseURL = "http://www.vassalengine.org/util/"; private static final String currentRelease = "current-release"; private static final String currentBeta = "current-beta"; private static final String bugCheck = "check-version-bug.php?version="; private static VassalVersion release = null; private static VassalVersion beta = null; public static VassalVersion getRelease() throws IOException { if (release == null) release = getVersion(baseURL + currentRelease); return release; } public static VassalVersion getBeta() throws IOException { if (beta == null) beta = getVersion(baseURL + currentBeta); return beta; } private static VassalVersion getVersion(String url) throws IOException { InputStream in = null; try { in = new URL(url).openStream(); final VassalVersion version = new VassalVersion(IOUtils.toString(in).trim()); in.close(); return version; } finally { IOUtils.closeQuietly(in); } } /* public static boolean isReportable(String version) throws IOException, NumberFormatException { InputStream in = null; try { in = new URL(baseURL + bugCheck + version).openStream(); final int result = Integer.parseInt(IOUtils.toString(in)); in.close(); switch (result) { case 0: return false; case 1: return true; default: throw new NumberFormatException("bad return value: " + result); } } finally { IOUtils.closeQuietly(in); } } */ public static boolean isCurrent(VassalVersion version) throws IOException { // a version is current if it would update to itself return version.equals(update(version)); } public static VassalVersion update(VassalVersion version) throws IOException { VassalVersion current = VersionUtils.getRelease(); switch (sgn(version.compareTo(current))) { case -1: // version is older than the current release return current; case 0: // version is the current release return version; case 1: // version is newer than the current release { current = VersionUtils.getBeta(); switch (sgn(version.compareTo(current))) { case -1: // version is older than the current beta return current; case 0: // version is the current beta case 1: // version is newer than the current beta return version; } } } throw new IllegalStateException(); } private static int sgn(int i) { return i < 0 ? -1 : (i > 0 ? 1 : 0); } public static void main(String[] args) throws IOException { final VassalVersion v = new VassalVersion(Info.getVersion()); System.out.println(v.toString() + " is current? " + isCurrent(v)); } }