package net.mograsim.logic.model.util;
-public final class Version
+import java.io.IOException;
+
+import com.google.gson.TypeAdapter;
+import com.google.gson.annotations.JsonAdapter;
+import com.google.gson.stream.JsonReader;
+import com.google.gson.stream.JsonWriter;
+
+import net.mograsim.logic.model.util.Version.VersionJSONAdapter;
+
+@JsonAdapter(VersionJSONAdapter.class)
+public final class Version implements Comparable<Version>
{
- public final static Version jsonCompVersion = new Version(0, 1, 3);
public final int major, minor, patch;
public Version(int major, int minor, int patch)
@Override
public String toString()
+ {
+ return toSemverString();
+ }
+
+ public String toSemverString()
{
return major + "." + minor + "." + patch;
}
+ public static Version parseSemver(String semver)
+ {
+ String[] semverParts = semver.split("\\.");
+ return new Version(Integer.parseInt(semverParts[0]), semverParts.length > 1 ? Integer.parseInt(semverParts[1]) : 0,
+ semverParts.length > 2 ? Integer.parseInt(semverParts[2]) : 0);
+ }
+
@Override
public int hashCode()
{
public boolean is(int major)
{
- return major != this.major;
+ return major == this.major;
}
public boolean is(int major, int minor)
{
return is(major, minor) && this.patch == patch;
}
+
+ /**
+ * Compares this {@link Version} with the specified version.<br>
+ * As required by {@link Comparable#compareTo(Object)}, returns a negative integer, zero, or a positive integer as this version is less
+ * (earlier) than, equal to, or greater (later) than the specified version.
+ * <p>
+ * If the versions are equal ({@link #major}, {@link #minor}, {@link #patch} are the same), returns 0. <br>
+ * If they differ in {@link #patch}, but neither {@link #major} or {@link #minor} , returns +-1. <br>
+ * If they differ in {@link #minor}, but not {@link #major}, returns +-2.<br>
+ * If they differ in {@link #major}, returns +-3.
+ */
+ @Override
+ public int compareTo(Version o)
+ {
+ if (major != o.major)
+ {
+ if (major > o.major)
+ return 3;
+ return -3;
+ }
+ if (minor != o.minor)
+ {
+ if (minor > o.minor)
+ return 2;
+ return -2;
+ }
+ if (patch != o.patch)
+ {
+ if (patch > o.patch)
+ return 1;
+ return -1;
+ }
+ return 0;
+ }
+
+ static class VersionJSONAdapter extends TypeAdapter<Version>
+ {
+ @Override
+ public void write(JsonWriter out, Version value) throws IOException
+ {
+ out.value(value.toSemverString());
+ }
+
+ @Override
+ public Version read(JsonReader in) throws IOException
+ {
+ return parseSemver(in.nextString());
+ }
+ }
}
\ No newline at end of file