package net.ftb.util.winreg; import java.util.Comparator; import lombok.Getter; import net.ftb.log.Logger; import net.ftb.util.ComparableVersion; public class JavaVersion { public ComparableVersion comparableVersion; public String origVersion; @Getter protected int major = -1, minor = -1, revision = -1, update = -1; public static JavaVersion createJavaVersion (String version) { try { return new JavaVersion(version, false); } catch (Exception e) { return null; } } /** * * @param str String containing output of java -version command * @param full Boolean to indicate if str is full output or only version string * @throws Exception */ protected JavaVersion (String str, boolean full) throws Exception { if (full) { String[] tokens = str.split("\""); if (tokens.length < 2) { throw new Exception("Input string unsupported format"); } else { this.origVersion = tokens[1]; } } else { this.origVersion = str; } parseVersionString(); this.comparableVersion = new ComparableVersion(this.origVersion); } private void parseVersionString () { String[] s = this.origVersion.split("[._-]"); try { this.major = Integer.parseInt(s[0]); this.minor = s.length > 1 ? Integer.parseInt(s[1]) : 0; this.revision = s.length > 2 ? Integer.parseInt(s[2]) : 0; this.update = s.length > 3 ? Integer.parseInt(s[3]) : 0; } catch (NumberFormatException e) { Logger.logDebug("failed", e); } } /** * @return Human-readable contents of this JavaInfo instance ****************************************************************************/ public String toString () { return "Java Version: " + origVersion + " sorted as: " + this.verToString(); } public String verToString () { return major + "." + minor + "." + revision + "_" + update; } public static final Comparator<JavaVersion> PREFERRED_SORTING = new Comparator<JavaVersion>() { public int compare (JavaVersion j1, JavaVersion j2) { return j1.comparableVersion.compareTo(j2.comparableVersion); } }; public boolean isOlder (JavaVersion j1) { return this.comparableVersion.isOlder(j1.comparableVersion); } public boolean isOlder (String str) { return this.isOlder(JavaVersion.createJavaVersion(str)); } public boolean isSameVersion (JavaVersion j1) { return this.comparableVersion.isSameVersion(j1.comparableVersion); } public boolean isSameVersion (String str) { return this.isSameVersion(JavaVersion.createJavaVersion(str)); } }