*
* @author niki
*/
-public class Version {
+public class Version implements Comparable<Version> {
private String version;
private int major;
private int minor;
private int patch;
+ /**
+ * Create a new, empty {@link Version}.
+ *
+ */
+ public Version() {
+ }
+
/**
* Create a new {@link Version} with the given values.
*
* <p>
* An empty {@link Version} is always <tt>0.0.0</tt>.
*
- * @return TRUS if it is empty
+ * @return TRUE if it is empty
*/
public boolean isEmpty() {
return major == 0 && minor == 0 && patch == 0;
}
+ /**
+ * Check if we are more recent than the given {@link Version}.
+ *
+ * @param o
+ * the other {@link Version}
+ * @return TRUE if this {@link Version} is more recent than the given one
+ */
+ public boolean isNewerThan(Version o) {
+ if (major > o.major) {
+ return true;
+ }
+
+ if (major == o.major && minor > o.minor) {
+ return true;
+ }
+
+ if (major == o.major && minor == o.minor && patch > o.patch) {
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Check if we are older than the given {@link Version}.
+ *
+ * @param o
+ * the other {@link Version}
+ * @return TRUE if this {@link Version} is older than the given one
+ */
+ public boolean isOlderThan(Version o) {
+ return !equals(o) && !isNewerThan(o);
+ }
+
/**
* Return the version of the running program if it follows the VERSION
* convention (i.e., if it has a file called VERSION containing the version
return new Version(version);
}
+ public int compareTo(Version o) {
+ if (equals(o)) {
+ return 0;
+ } else if (isNewerThan(o)) {
+ return 1;
+ } else {
+ return -1;
+ }
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj instanceof Version) {
+ Version o = (Version) obj;
+ return o.major == major && o.minor == minor && o.patch == patch;
+ }
+
+ return false;
+ }
+
+ @Override
+ public int hashCode() {
+ return version == null ? 0 : version.hashCode();
+ }
+
/**
* Return a user-readable form of this {@link Version}.
*/
Version.getCurrentVersion().isEmpty());
}
});
+
+ addTest(new TestCase("Comparing versions") {
+ @Override
+ public void test() throws Exception {
+ assertEquals(true,
+ new Version(1, 1, 1).isNewerThan(new Version(1, 1, 0)));
+ assertEquals(true,
+ new Version(2, 0, 0).isNewerThan(new Version(1, 1, 1)));
+ assertEquals(true,
+ new Version(10, 7, 8).isNewerThan(new Version(9, 9, 9)));
+ assertEquals(true,
+ new Version(0, 0, 0).isOlderThan(new Version(0, 0, 1)));
+ assertEquals(1,
+ new Version(1, 1, 1).compareTo(new Version(0, 1, 1)));
+ assertEquals(-1,
+ new Version(0, 0, 1).compareTo(new Version(0, 1, 1)));
+ assertEquals(0,
+ new Version(0, 0, 1).compareTo(new Version(0, 0, 1)));
+ assertEquals(true,
+ new Version(0, 0, 1).equals(new Version(0, 0, 1)));
+ assertEquals(false,
+ new Version(0, 2, 1).equals(new Version(0, 0, 1)));
+ }
+ });
}
}