package com.mattc.autotyper;
/**
* Extremely Simple Application Version Comparison
*/
public final class AppVersion {
private AppVersion() {
// DO NOT INSTANTIATE
}
public static final int MAJOR, MINOR, REVISION;
static {
try {
final String[] parts = Ref.VERSION.split("\\.");
MAJOR = parts.length < 1 ? 0 : Integer.parseInt(parts[0]);
MINOR = parts.length < 2 ? 0 : Integer.parseInt(parts[1]);
REVISION = parts.length < 3 ? 0 : Integer.parseInt(parts[2]);
} catch (final Throwable t) {
throw new ExceptionInInitializerError(t);
}
}
public static boolean isEqual(int major, int minor, int revision) {
return (MAJOR == major) && (MINOR == minor) && (REVISION == revision);
}
public static boolean isHigher(int major, int minor, int revision) {
return isHigherOrEqualTo(major, minor, revision + 1);
}
public static boolean isHigherOrEqualTo(int major, int minor, int revision) {
if (MAJOR != major)
return major < MAJOR;
else if (MINOR != minor) return minor < MINOR;
return REVISION >= revision;
}
public static boolean isLower(int major, int minor, int revision) {
return isLowerOrEqualTo(major, minor, revision - 1);
}
public static boolean isLowerOrEqualTo(int major, int minor, int revision) {
if (MAJOR != major)
return major > MAJOR;
else if (MINOR != minor) return minor > MINOR;
return REVISION <= revision;
}
public static boolean isEqualTo(int major, int minor, int revision) {
return MAJOR == major && MINOR == minor && REVISION == revision;
}
public static int compareTo(String version) {
String[] parts = version.split("\\.");
int major = Integer.parseInt(parts[0]);
int minor = Integer.parseInt(parts[1]);
int revision = Integer.parseInt(parts[2]);
if (isLower(major, minor, revision))
return -1;
else if (isHigher(major, minor, revision))
return 1;
else
return 0;
}
}