java.lang.String |
toString()
The default toString() method
@@ -442,6 +448,22 @@ implements java.io.Serializable, java.lang.Comparable<
+
+
+
diff --git a/SubServers.Bungee/src.jar b/SubServers.Bungee/src.jar
index 195ec7a7..30305a5c 100644
Binary files a/SubServers.Bungee/src.jar and b/SubServers.Bungee/src.jar differ
diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Files/lang.yml b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Files/lang.yml
index c6c235f2..dedca774 100644
--- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Files/lang.yml
+++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Files/lang.yml
@@ -31,7 +31,7 @@ Lang:
'Command.Help.SubServer.Terminate': ' &7Terminate Server:&f $str$'
'Command.Help.SubServer.Command': ' &7Command Server:&f $str$'
'Command.Version': '&7SubServers &8&l\u00BB&7 $name$ is running version &f$str$'
- 'Command.Version.Outdated': '&7You are $int$ version(s) behind.'
+ 'Command.Version.Outdated': '&7$name$ &f$str$ &7is available. You are $int$ version(s) behind.'
'Command.Version.Latest': '&7You are on the latest version.'
'Command.List.Group-Header': '&7SubServers &8&l\u00BB&7 Group/Server List:'
'Command.List.Host-Header': '&7SubServers &8&l\u00BB&7 Host/SubServer List:'
diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Version/Version.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Version/Version.java
index 526306b4..b4dfd65e 100644
--- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Version/Version.java
+++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Version/Version.java
@@ -3,6 +3,10 @@ package net.ME1312.SubServers.Bungee.Library.Version;
import net.ME1312.SubServers.Bungee.Library.Util;
import java.io.Serializable;
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
/**
* Version Class
@@ -22,10 +26,10 @@ public class Version implements Serializable, Comparable {
PRE_RELEASE(4, "pr", "pre-release"),
RELEASE(5, "r", "release");
- private final int id;
+ private final short stageid;
private final String shortname, longname;
- VersionType(int id, String shortname, String longname) {
- this.id = id;
+ VersionType(int stageid, String shortname, String longname) {
+ this.stageid = (short) stageid;
this.shortname = shortname;
this.longname = longname;
}
@@ -125,6 +129,42 @@ public class Version implements Serializable, Comparable {
this.string = string;
}
+ /**
+ * Parse a Version from a string
+ *
+ * @param string String to parse
+ * @see #toFullString() for a valid string value
+ */
+ public static Version fromString(String string) {
+ Matcher regex = Pattern.compile("(p?[abr])?([^/]+)").matcher(string);
+ Version current = null;
+ while (regex.find()) {
+ try {
+ VersionType type = VersionType.RELEASE;
+ if (regex.group(1) != null) switch (regex.group(1).toLowerCase()) {
+ case "pa":
+ type = VersionType.PRE_ALPHA;
+ break;
+ case "a":
+ type = VersionType.ALPHA;
+ break;
+ case "pb":
+ type = VersionType.PRE_BETA;
+ break;
+ case "b":
+ type = VersionType.BETA;
+ break;
+ case "pr":
+ type = VersionType.PRE_RELEASE;
+ break;
+ }
+ current = new Version(current, type, regex.group(2));
+ } catch (Throwable e) {}
+ }
+ if (current == null) throw new IllegalArgumentException("Could not find version in string: " + string);
+ return current;
+ }
+
/**
* The default toString() method
*
@@ -212,21 +252,82 @@ public class Version implements Serializable, Comparable {
* @param version The version to compare to
*/
public int compareTo(Version version) {
- // Compare parent versions first
- if (this.parent != null || version.parent != null) {
- int parent = ((this.parent == null)?this:this.parent).compareTo((version.parent == null)?version:version.parent);
- if (parent != 0) return parent;
+ return compare(this, version);
+ }
+
+ /**
+ * See if Versions are Equal
+ *
+ * @param ver1 Version to Compare
+ * @param ver2 Version to Compare
+ * @return
+ */
+ public static boolean equals(Version ver1, Version ver2) {
+ return compare(ver1, ver2) == 0;
+ }
+
+ /*
+ * Returns 1 if Greater than
+ * Returns 0 if Equal
+ * Returns -1 if Less than
+ *//**
+ * Compare Versions
+ *
+ * @param ver1 Version to Compare
+ * @param ver2 Version to Compare
+ */
+ public static int compare(Version ver1, Version ver2) {
+ LinkedList stack1 = new LinkedList(), stack2 = new LinkedList();
+ if (ver1 != null) {
+ stack1.add(ver1);
+ while (ver1.parent != null) {
+ ver1 = ver1.parent;
+ stack1.add(ver1);
+ }
+ Collections.reverse(stack1);
+ }
+ if (ver2 != null) {
+ stack2.add(ver2);
+ while (ver2.parent != null) {
+ ver2 = ver2.parent;
+ stack2.add(ver2);
+ }
+ Collections.reverse(stack2);
}
- if (this.parent != null && version.parent == null) {
- // Version one has a parent version and version two does not, making version two the official version
- return -1;
- }
+ int id;
+ for (id = 0; id < stack1.size(); id++) {
+ if (id >= stack2.size()) {
+ // Version one still has children when version two does not, making version two the official version
+ return -1;
+ }
- if (this.parent == null && version.parent != null) {
- // Version one does not have a parent version and version two does, making version one the official version
+ int result = stack1.get(id).compare(stack2.get(id));
+ if (result != 0) {
+ // Versions are not the same, return the result
+ return result;
+ }
+ }
+ if (id < stack2.size()) {
+ // Version one does not children when version two still does, making version one the official version
return 1;
}
+ return 0;
+ }
+
+ /*
+ * Compares versions ignoring parent/child relationships
+ */
+ private int compare(Version version) {
+ if (this.type.stageid > version.type.stageid) {
+ // Version one has a type of a later stage than version two
+ return 1;
+ }
+
+ if (this.type.stageid < version.type.stageid) {
+ // Version one has a type of an earlier stage than version two
+ return -1;
+ }
VersionTokenizer tokenizer1 = new VersionTokenizer(string);
VersionTokenizer tokenizer2 = new VersionTokenizer(version.string);
@@ -292,29 +393,4 @@ public class Version implements Serializable, Comparable {
}
return 0;
}
-
- /**
- * See if Versions are Equal
- *
- * @param ver1 Version to Compare
- * @param ver2 Version to Compare
- * @return
- */
- public static boolean equals(Version ver1, Version ver2) {
- return compare(ver1, ver2) == 0;
- }
-
- /*
- * Returns 1 if Greater than
- * Returns 0 if Equal
- * Returns -1 if Less than
- *//**
- * Compare Versions
- *
- * @param ver1 Version to Compare
- * @param ver2 Version to Compare
- */
- public static int compare(Version ver1, Version ver2) {
- return ver1.compareTo(ver2);
- }
}
\ No newline at end of file
diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubCommand.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubCommand.java
index d4b82bfd..0ce293b0 100644
--- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubCommand.java
+++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubCommand.java
@@ -77,8 +77,8 @@ public final class SubCommand extends CommandX {
for (int i = 0; i < updnodeList.getLength(); i++) {
Node node = updnodeList.item(i);
if (node.getNodeType() == Node.ELEMENT_NODE) {
- if (!node.getTextContent().startsWith("-") && !node.getTextContent().equals(plugin.version.toString()) && new Version(node.getTextContent()).compareTo(updversion) > 0) {
- updversion = new Version(node.getTextContent());
+ if (!node.getTextContent().startsWith("-") && !node.getTextContent().equals(plugin.version.toString()) && Version.fromString(node.getTextContent()).compareTo(updversion) > 0) {
+ updversion = Version.fromString(node.getTextContent());
updcount++;
}
}
@@ -86,7 +86,7 @@ public final class SubCommand extends CommandX {
if (updcount == 0) {
sender.sendMessage("You are on the latest version.");
} else {
- sender.sendMessage("You are " + updcount + " version" + ((updcount == 1)?"":"s") + " behind.");
+ sender.sendMessage("SubServers.Bungee v" + updversion + " is available. You are " + updcount + " version" + ((updcount == 1)?"":"s") + " behind.");
}
} catch (Exception e) {}
}).start();
diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubPlugin.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubPlugin.java
index 99f87f21..9570c624 100644
--- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubPlugin.java
+++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubPlugin.java
@@ -58,7 +58,8 @@ public final class SubPlugin extends BungeeCord implements Listener {
public SubDataServer subdata = null;
public SubServer sudo = null;
//public static final Version version = new Version("2.13a");
- public static final Version version = new Version(new Version("2.13a"), Version.VersionType.PRE_RELEASE, 1);
+ //public static final Version version = new Version(new Version("2.13a"), Version.VersionType.BETA, 1); // TODO Beta Version Setting
+ public static final Version version = new Version(new Version(new Version("2.13a"), Version.VersionType.PRE_RELEASE, 2), Version.VersionType.BETA, 1); // TODO Beta Version Setting
public boolean redis = false;
public long resetDate = 0;
@@ -502,8 +503,8 @@ public final class SubPlugin extends BungeeCord implements Listener {
for (int i = 0; i < updnodeList.getLength(); i++) {
Node node = updnodeList.item(i);
if (node.getNodeType() == Node.ELEMENT_NODE) {
- if (!node.getTextContent().startsWith("-") && !node.getTextContent().equals(version.toString()) && new Version(node.getTextContent()).compareTo(updversion) > 0) {
- updversion = new Version(node.getTextContent());
+ if (!node.getTextContent().startsWith("-") && !node.getTextContent().equals(version.toString()) && Version.fromString(node.getTextContent()).compareTo(updversion) > 0) {
+ updversion = Version.fromString(node.getTextContent());
updcount++;
}
}
diff --git a/SubServers.Client/Bukkit/src.jar b/SubServers.Client/Bukkit/src.jar
index d2302587..a474d0a1 100644
Binary files a/SubServers.Client/Bukkit/src.jar and b/SubServers.Client/Bukkit/src.jar differ
diff --git a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Library/Version/Version.java b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Library/Version/Version.java
index 94d599e9..204527fc 100644
--- a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Library/Version/Version.java
+++ b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Library/Version/Version.java
@@ -3,6 +3,10 @@ package net.ME1312.SubServers.Client.Bukkit.Library.Version;
import net.ME1312.SubServers.Client.Bukkit.Library.Util;
import java.io.Serializable;
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
/**
* Version Class
@@ -11,10 +15,10 @@ import java.io.Serializable;
public class Version implements Serializable, Comparable {
private final Version parent;
private final VersionType type;
- private final String string;
+ private final String string;
- public enum VersionType {
- PRE_ALPHA(0, "pa", "pre-alpha"),
+ public enum VersionType {
+ PRE_ALPHA(0, "pa", "pre-alpha"),
ALPHA(1, "a", "alpha"),
PREVIEW(2, "pb", "preview"),
PRE_BETA(2, "pb", "pre-beta"),
@@ -22,12 +26,12 @@ public class Version implements Serializable, Comparable {
PRE_RELEASE(4, "pr", "pre-release"),
RELEASE(5, "r", "release");
- private final int id;
- private final String shortname, longname;
- VersionType(int id, String shortname, String longname) {
- this.id = id;
- this.shortname = shortname;
- this.longname = longname;
+ private final short stageid;
+ private final String shortname, longname;
+ VersionType(int stageid, String shortname, String longname) {
+ this.stageid = (short) stageid;
+ this.shortname = shortname;
+ this.longname = longname;
}
}
@@ -36,9 +40,9 @@ public class Version implements Serializable, Comparable {
*
* @param string Version String
*/
- public Version(String string) {
- this(VersionType.RELEASE, string);
- }
+ public Version(String string) {
+ this(VersionType.RELEASE, string);
+ }
/**
* Creates a Version
@@ -46,8 +50,8 @@ public class Version implements Serializable, Comparable {
* @param type Version Type
* @param string Version String
*/
- public Version(VersionType type, String string) {
- this(null, type, string);
+ public Version(VersionType type, String string) {
+ this(null, type, string);
}
/**
@@ -125,6 +129,42 @@ public class Version implements Serializable, Comparable {
this.string = string;
}
+ /**
+ * Parse a Version from a string
+ *
+ * @param string String to parse
+ * @see #toFullString() for a valid string value
+ */
+ public static Version fromString(String string) {
+ Matcher regex = Pattern.compile("(p?[abr])?([^/]+)").matcher(string);
+ Version current = null;
+ while (regex.find()) {
+ try {
+ VersionType type = VersionType.RELEASE;
+ if (regex.group(1) != null) switch (regex.group(1).toLowerCase()) {
+ case "pa":
+ type = VersionType.PRE_ALPHA;
+ break;
+ case "a":
+ type = VersionType.ALPHA;
+ break;
+ case "pb":
+ type = VersionType.PRE_BETA;
+ break;
+ case "b":
+ type = VersionType.BETA;
+ break;
+ case "pr":
+ type = VersionType.PRE_RELEASE;
+ break;
+ }
+ current = new Version(current, type, regex.group(2));
+ } catch (Throwable e) {}
+ }
+ if (current == null) throw new IllegalArgumentException("Could not find version in string: " + string);
+ return current;
+ }
+
/**
* The default toString() method
*
@@ -212,21 +252,82 @@ public class Version implements Serializable, Comparable {
* @param version The version to compare to
*/
public int compareTo(Version version) {
- // Compare parent versions first
- if (this.parent != null || version.parent != null) {
- int parent = ((this.parent == null)?this:this.parent).compareTo((version.parent == null)?version:version.parent);
- if (parent != 0) return parent;
+ return compare(this, version);
+ }
+
+ /**
+ * See if Versions are Equal
+ *
+ * @param ver1 Version to Compare
+ * @param ver2 Version to Compare
+ * @return
+ */
+ public static boolean equals(Version ver1, Version ver2) {
+ return compare(ver1, ver2) == 0;
+ }
+
+ /*
+ * Returns 1 if Greater than
+ * Returns 0 if Equal
+ * Returns -1 if Less than
+ *//**
+ * Compare Versions
+ *
+ * @param ver1 Version to Compare
+ * @param ver2 Version to Compare
+ */
+ public static int compare(Version ver1, Version ver2) {
+ LinkedList stack1 = new LinkedList(), stack2 = new LinkedList();
+ if (ver1 != null) {
+ stack1.add(ver1);
+ while (ver1.parent != null) {
+ ver1 = ver1.parent;
+ stack1.add(ver1);
+ }
+ Collections.reverse(stack1);
+ }
+ if (ver2 != null) {
+ stack2.add(ver2);
+ while (ver2.parent != null) {
+ ver2 = ver2.parent;
+ stack2.add(ver2);
+ }
+ Collections.reverse(stack2);
}
- if (this.parent != null && version.parent == null) {
- // Version one has a parent version and version two does not, making version two the official version
- return -1;
- }
+ int id;
+ for (id = 0; id < stack1.size(); id++) {
+ if (id >= stack2.size()) {
+ // Version one still has children when version two does not, making version two the official version
+ return -1;
+ }
- if (this.parent == null && version.parent != null) {
- // Version one does not have a parent version and version two does, making version one the official version
+ int result = stack1.get(id).compare(stack2.get(id));
+ if (result != 0) {
+ // Versions are not the same, return the result
+ return result;
+ }
+ }
+ if (id < stack2.size()) {
+ // Version one does not children when version two still does, making version one the official version
return 1;
}
+ return 0;
+ }
+
+ /*
+ * Compares versions ignoring parent/child relationships
+ */
+ private int compare(Version version) {
+ if (this.type.stageid > version.type.stageid) {
+ // Version one has a type of a later stage than version two
+ return 1;
+ }
+
+ if (this.type.stageid < version.type.stageid) {
+ // Version one has a type of an earlier stage than version two
+ return -1;
+ }
VersionTokenizer tokenizer1 = new VersionTokenizer(string);
VersionTokenizer tokenizer2 = new VersionTokenizer(version.string);
@@ -292,29 +393,4 @@ public class Version implements Serializable, Comparable {
}
return 0;
}
-
- /**
- * See if Versions are Equal
- *
- * @param ver1 Version to Compare
- * @param ver2 Version to Compare
- * @return
- */
- public static boolean equals(Version ver1, Version ver2) {
- return compare(ver1, ver2) == 0;
- }
-
- /*
- * Returns 1 if Greater than
- * Returns 0 if Equal
- * Returns -1 if Less than
- *//**
- * Compare Versions
- *
- * @param ver1 Version to Compare
- * @param ver2 Version to Compare
- */
- public static int compare(Version ver1, Version ver2) {
- return ver1.compareTo(ver2);
- }
}
\ No newline at end of file
diff --git a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/SubCommand.java b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/SubCommand.java
index 12bba391..f88a2efa 100644
--- a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/SubCommand.java
+++ b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/SubCommand.java
@@ -59,8 +59,8 @@ public final class SubCommand implements CommandExecutor {
for (int i = 0; i < updnodeList.getLength(); i++) {
Node node = updnodeList.item(i);
if (node.getNodeType() == Node.ELEMENT_NODE) {
- if (!node.getTextContent().startsWith("-") && !node.getTextContent().equals(plugin.version.toString()) && new Version(node.getTextContent()).compareTo(updversion) > 0) {
- updversion = new Version(node.getTextContent());
+ if (!node.getTextContent().startsWith("-") && !node.getTextContent().equals(plugin.version.toString()) && Version.fromString(node.getTextContent()).compareTo(updversion) > 0) {
+ updversion = Version.fromString(node.getTextContent());
updcount++;
}
}
@@ -68,7 +68,7 @@ public final class SubCommand implements CommandExecutor {
if (updcount == 0) {
sender.sendMessage(plugin.api.getLang("SubServers", "Command.Version.Latest"));
} else {
- sender.sendMessage(plugin.api.getLang("SubServers", "Command.Version.Outdated").replace("$int$", Integer.toString(updcount)));
+ sender.sendMessage(plugin.api.getLang("SubServers", "Command.Version.Outdated").replace("$name$", "SubServers.Client.Bukkit").replace("$str$", updversion.toString()).replace("$int$", Integer.toString(updcount)));
}
} catch (Exception e) {}
});
diff --git a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/SubPlugin.java b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/SubPlugin.java
index ebce8284..b212990b 100644
--- a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/SubPlugin.java
+++ b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/SubPlugin.java
@@ -45,7 +45,8 @@ public final class SubPlugin extends JavaPlugin {
public SubPlugin() {
super();
//version = new Version(getDescription().getVersion());
- version = new Version(new Version(getDescription().getVersion()), Version.VersionType.PRE_RELEASE, 1);
+ //version = new Version(new Version(getDescription().getVersion()), Version.VersionType.BETA, 1); // TODO Beta Version Setting
+ version = new Version(new Version(new Version(getDescription().getVersion()), Version.VersionType.PRE_RELEASE, 2), Version.VersionType.BETA, 1); // TODO Beta Version Setting
}
/**
@@ -98,8 +99,8 @@ public final class SubPlugin extends JavaPlugin {
for (int i = 0; i < updnodeList.getLength(); i++) {
Node node = updnodeList.item(i);
if (node.getNodeType() == Node.ELEMENT_NODE) {
- if (!node.getTextContent().startsWith("-") && !node.getTextContent().equals(version.toString()) && new Version(node.getTextContent()).compareTo(updversion) > 0) {
- updversion = new Version(node.getTextContent());
+ if (!node.getTextContent().startsWith("-") && !node.getTextContent().equals(version.toString()) && Version.fromString(node.getTextContent()).compareTo(updversion) > 0) {
+ updversion = Version.fromString(node.getTextContent());
updcount++;
}
}
diff --git a/SubServers.Host/src.jar b/SubServers.Host/src.jar
index 8cd9f63b..a5b3f156 100644
Binary files a/SubServers.Host/src.jar and b/SubServers.Host/src.jar differ
diff --git a/SubServers.Host/src/net/ME1312/SubServers/Host/ExHost.java b/SubServers.Host/src/net/ME1312/SubServers/Host/ExHost.java
index f4ace10d..197a4d0a 100644
--- a/SubServers.Host/src/net/ME1312/SubServers/Host/ExHost.java
+++ b/SubServers.Host/src/net/ME1312/SubServers/Host/ExHost.java
@@ -58,7 +58,8 @@ public final class ExHost {
public SubDataClient subdata = null;
//public final Version version = new Version("2.13a");
- public final Version version = new Version(new Version("2.13a"), Version.VersionType.PRE_RELEASE, 1);
+ //public final Version version = new Version(new Version("2.13a"), Version.VersionType.BETA, 1); // TODO Beta Version Setting
+ public final Version version = new Version(new Version(new Version("2.13a"), Version.VersionType.PRE_RELEASE, 2), Version.VersionType.BETA, 1); // TODO Beta Version Setting
public final SubAPI api = new SubAPI(this);
private ConsoleReader jline;
@@ -391,8 +392,8 @@ public final class ExHost {
for (int i = 0; i < updnodeList.getLength(); i++) {
Node node = updnodeList.item(i);
if (node.getNodeType() == Node.ELEMENT_NODE) {
- if (!node.getTextContent().startsWith("-") && !node.getTextContent().equals(version.toString()) && new Version(node.getTextContent()).compareTo(updversion) > 0) {
- updversion = new Version(node.getTextContent());
+ if (!node.getTextContent().startsWith("-") && !node.getTextContent().equals(version.toString()) && Version.fromString(node.getTextContent()).compareTo(updversion) > 0) {
+ updversion = Version.fromString(node.getTextContent());
updcount++;
}
}
diff --git a/SubServers.Host/src/net/ME1312/SubServers/Host/Library/Version/Version.java b/SubServers.Host/src/net/ME1312/SubServers/Host/Library/Version/Version.java
index 44aff088..10b42721 100644
--- a/SubServers.Host/src/net/ME1312/SubServers/Host/Library/Version/Version.java
+++ b/SubServers.Host/src/net/ME1312/SubServers/Host/Library/Version/Version.java
@@ -3,6 +3,10 @@ package net.ME1312.SubServers.Host.Library.Version;
import net.ME1312.SubServers.Host.Library.Util;
import java.io.Serializable;
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
/**
* Version Class
@@ -11,10 +15,10 @@ import java.io.Serializable;
public class Version implements Serializable, Comparable {
private final Version parent;
private final VersionType type;
- private final String string;
+ private final String string;
- public enum VersionType {
- PRE_ALPHA(0, "pa", "pre-alpha"),
+ public enum VersionType {
+ PRE_ALPHA(0, "pa", "pre-alpha"),
ALPHA(1, "a", "alpha"),
PREVIEW(2, "pb", "preview"),
PRE_BETA(2, "pb", "pre-beta"),
@@ -22,12 +26,12 @@ public class Version implements Serializable, Comparable {
PRE_RELEASE(4, "pr", "pre-release"),
RELEASE(5, "r", "release");
- private final int id;
- private final String shortname, longname;
- VersionType(int id, String shortname, String longname) {
- this.id = id;
- this.shortname = shortname;
- this.longname = longname;
+ private final short stageid;
+ private final String shortname, longname;
+ VersionType(int stageid, String shortname, String longname) {
+ this.stageid = (short) stageid;
+ this.shortname = shortname;
+ this.longname = longname;
}
}
@@ -36,9 +40,9 @@ public class Version implements Serializable, Comparable {
*
* @param string Version String
*/
- public Version(String string) {
- this(VersionType.RELEASE, string);
- }
+ public Version(String string) {
+ this(VersionType.RELEASE, string);
+ }
/**
* Creates a Version
@@ -46,8 +50,8 @@ public class Version implements Serializable, Comparable {
* @param type Version Type
* @param string Version String
*/
- public Version(VersionType type, String string) {
- this(null, type, string);
+ public Version(VersionType type, String string) {
+ this(null, type, string);
}
/**
@@ -125,6 +129,42 @@ public class Version implements Serializable, Comparable {
this.string = string;
}
+ /**
+ * Parse a Version from a string
+ *
+ * @param string String to parse
+ * @see #toFullString() for a valid string value
+ */
+ public static Version fromString(String string) {
+ Matcher regex = Pattern.compile("(p?[abr])?([^/]+)").matcher(string);
+ Version current = null;
+ while (regex.find()) {
+ try {
+ VersionType type = VersionType.RELEASE;
+ if (regex.group(1) != null) switch (regex.group(1).toLowerCase()) {
+ case "pa":
+ type = VersionType.PRE_ALPHA;
+ break;
+ case "a":
+ type = VersionType.ALPHA;
+ break;
+ case "pb":
+ type = VersionType.PRE_BETA;
+ break;
+ case "b":
+ type = VersionType.BETA;
+ break;
+ case "pr":
+ type = VersionType.PRE_RELEASE;
+ break;
+ }
+ current = new Version(current, type, regex.group(2));
+ } catch (Throwable e) {}
+ }
+ if (current == null) throw new IllegalArgumentException("Could not find version in string: " + string);
+ return current;
+ }
+
/**
* The default toString() method
*
@@ -212,21 +252,82 @@ public class Version implements Serializable, Comparable {
* @param version The version to compare to
*/
public int compareTo(Version version) {
- // Compare parent versions first
- if (this.parent != null || version.parent != null) {
- int parent = ((this.parent == null)?this:this.parent).compareTo((version.parent == null)?version:version.parent);
- if (parent != 0) return parent;
+ return compare(this, version);
+ }
+
+ /**
+ * See if Versions are Equal
+ *
+ * @param ver1 Version to Compare
+ * @param ver2 Version to Compare
+ * @return
+ */
+ public static boolean equals(Version ver1, Version ver2) {
+ return compare(ver1, ver2) == 0;
+ }
+
+ /*
+ * Returns 1 if Greater than
+ * Returns 0 if Equal
+ * Returns -1 if Less than
+ *//**
+ * Compare Versions
+ *
+ * @param ver1 Version to Compare
+ * @param ver2 Version to Compare
+ */
+ public static int compare(Version ver1, Version ver2) {
+ LinkedList stack1 = new LinkedList(), stack2 = new LinkedList();
+ if (ver1 != null) {
+ stack1.add(ver1);
+ while (ver1.parent != null) {
+ ver1 = ver1.parent;
+ stack1.add(ver1);
+ }
+ Collections.reverse(stack1);
+ }
+ if (ver2 != null) {
+ stack2.add(ver2);
+ while (ver2.parent != null) {
+ ver2 = ver2.parent;
+ stack2.add(ver2);
+ }
+ Collections.reverse(stack2);
}
- if (this.parent != null && version.parent == null) {
- // Version one has a parent version and version two does not, making version two the official version
- return -1;
- }
+ int id;
+ for (id = 0; id < stack1.size(); id++) {
+ if (id >= stack2.size()) {
+ // Version one still has children when version two does not, making version two the official version
+ return -1;
+ }
- if (this.parent == null && version.parent != null) {
- // Version one does not have a parent version and version two does, making version one the official version
+ int result = stack1.get(id).compare(stack2.get(id));
+ if (result != 0) {
+ // Versions are not the same, return the result
+ return result;
+ }
+ }
+ if (id < stack2.size()) {
+ // Version one does not children when version two still does, making version one the official version
return 1;
}
+ return 0;
+ }
+
+ /*
+ * Compares versions ignoring parent/child relationships
+ */
+ private int compare(Version version) {
+ if (this.type.stageid > version.type.stageid) {
+ // Version one has a type of a later stage than version two
+ return 1;
+ }
+
+ if (this.type.stageid < version.type.stageid) {
+ // Version one has a type of an earlier stage than version two
+ return -1;
+ }
VersionTokenizer tokenizer1 = new VersionTokenizer(string);
VersionTokenizer tokenizer2 = new VersionTokenizer(version.string);
@@ -292,29 +393,4 @@ public class Version implements Serializable, Comparable {
}
return 0;
}
-
- /**
- * See if Versions are Equal
- *
- * @param ver1 Version to Compare
- * @param ver2 Version to Compare
- * @return
- */
- public static boolean equals(Version ver1, Version ver2) {
- return compare(ver1, ver2) == 0;
- }
-
- /*
- * Returns 1 if Greater than
- * Returns 0 if Equal
- * Returns -1 if Less than
- *//**
- * Compare Versions
- *
- * @param ver1 Version to Compare
- * @param ver2 Version to Compare
- */
- public static int compare(Version ver1, Version ver2) {
- return ver1.compareTo(ver2);
- }
}
\ No newline at end of file
diff --git a/SubServers.Host/src/net/ME1312/SubServers/Host/SubCommand.java b/SubServers.Host/src/net/ME1312/SubServers/Host/SubCommand.java
index 5e5b0d71..f7b390a6 100644
--- a/SubServers.Host/src/net/ME1312/SubServers/Host/SubCommand.java
+++ b/SubServers.Host/src/net/ME1312/SubServers/Host/SubCommand.java
@@ -44,8 +44,8 @@ public class SubCommand {
for (int i = 0; i < updnodeList.getLength(); i++) {
Node node = updnodeList.item(i);
if (node.getNodeType() == Node.ELEMENT_NODE) {
- if (!node.getTextContent().startsWith("-") && !node.getTextContent().equals(host.version.toString()) && new Version(node.getTextContent()).compareTo(updversion) > 0) {
- updversion = new Version(node.getTextContent());
+ if (!node.getTextContent().startsWith("-") && !node.getTextContent().equals(host.version.toString()) && Version.fromString(node.getTextContent()).compareTo(updversion) > 0) {
+ updversion = Version.fromString(node.getTextContent());
updcount++;
}
}
@@ -53,7 +53,7 @@ public class SubCommand {
if (updcount == 0) {
host.log.message.println("You are on the latest version.");
} else {
- host.log.message.println("You are " + updcount + " version" + ((updcount == 1) ? "" : "s") + " behind.");
+ host.log.message.println("SubServers.Host v" + updversion + " is available. You are " + updcount + " version" + ((updcount == 1)?"":"s") + " behind.");
}
} catch (Exception e) {
}
diff --git a/SubServers.Sync/src.jar b/SubServers.Sync/src.jar
index bb02781e..5e7f9b92 100644
Binary files a/SubServers.Sync/src.jar and b/SubServers.Sync/src.jar differ
diff --git a/SubServers.Sync/src/net/ME1312/SubServers/Sync/Library/Version/Version.java b/SubServers.Sync/src/net/ME1312/SubServers/Sync/Library/Version/Version.java
index e052520e..5759724f 100644
--- a/SubServers.Sync/src/net/ME1312/SubServers/Sync/Library/Version/Version.java
+++ b/SubServers.Sync/src/net/ME1312/SubServers/Sync/Library/Version/Version.java
@@ -3,6 +3,10 @@ package net.ME1312.SubServers.Sync.Library.Version;
import net.ME1312.SubServers.Sync.Library.Util;
import java.io.Serializable;
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
/**
* Version Class
@@ -11,10 +15,10 @@ import java.io.Serializable;
public class Version implements Serializable, Comparable {
private final Version parent;
private final VersionType type;
- private final String string;
+ private final String string;
- public enum VersionType {
- PRE_ALPHA(0, "pa", "pre-alpha"),
+ public enum VersionType {
+ PRE_ALPHA(0, "pa", "pre-alpha"),
ALPHA(1, "a", "alpha"),
PREVIEW(2, "pb", "preview"),
PRE_BETA(2, "pb", "pre-beta"),
@@ -22,12 +26,12 @@ public class Version implements Serializable, Comparable {
PRE_RELEASE(4, "pr", "pre-release"),
RELEASE(5, "r", "release");
- private final int id;
- private final String shortname, longname;
- VersionType(int id, String shortname, String longname) {
- this.id = id;
- this.shortname = shortname;
- this.longname = longname;
+ private final short stageid;
+ private final String shortname, longname;
+ VersionType(int stageid, String shortname, String longname) {
+ this.stageid = (short) stageid;
+ this.shortname = shortname;
+ this.longname = longname;
}
}
@@ -36,9 +40,9 @@ public class Version implements Serializable, Comparable {
*
* @param string Version String
*/
- public Version(String string) {
- this(VersionType.RELEASE, string);
- }
+ public Version(String string) {
+ this(VersionType.RELEASE, string);
+ }
/**
* Creates a Version
@@ -46,8 +50,8 @@ public class Version implements Serializable, Comparable {
* @param type Version Type
* @param string Version String
*/
- public Version(VersionType type, String string) {
- this(null, type, string);
+ public Version(VersionType type, String string) {
+ this(null, type, string);
}
/**
@@ -125,6 +129,42 @@ public class Version implements Serializable, Comparable {
this.string = string;
}
+ /**
+ * Parse a Version from a string
+ *
+ * @param string String to parse
+ * @see #toFullString() for a valid string value
+ */
+ public static Version fromString(String string) {
+ Matcher regex = Pattern.compile("(p?[abr])?([^/]+)").matcher(string);
+ Version current = null;
+ while (regex.find()) {
+ try {
+ VersionType type = VersionType.RELEASE;
+ if (regex.group(1) != null) switch (regex.group(1).toLowerCase()) {
+ case "pa":
+ type = VersionType.PRE_ALPHA;
+ break;
+ case "a":
+ type = VersionType.ALPHA;
+ break;
+ case "pb":
+ type = VersionType.PRE_BETA;
+ break;
+ case "b":
+ type = VersionType.BETA;
+ break;
+ case "pr":
+ type = VersionType.PRE_RELEASE;
+ break;
+ }
+ current = new Version(current, type, regex.group(2));
+ } catch (Throwable e) {}
+ }
+ if (current == null) throw new IllegalArgumentException("Could not find version in string: " + string);
+ return current;
+ }
+
/**
* The default toString() method
*
@@ -212,21 +252,82 @@ public class Version implements Serializable, Comparable {
* @param version The version to compare to
*/
public int compareTo(Version version) {
- // Compare parent versions first
- if (this.parent != null || version.parent != null) {
- int parent = ((this.parent == null)?this:this.parent).compareTo((version.parent == null)?version:version.parent);
- if (parent != 0) return parent;
+ return compare(this, version);
+ }
+
+ /**
+ * See if Versions are Equal
+ *
+ * @param ver1 Version to Compare
+ * @param ver2 Version to Compare
+ * @return
+ */
+ public static boolean equals(Version ver1, Version ver2) {
+ return compare(ver1, ver2) == 0;
+ }
+
+ /*
+ * Returns 1 if Greater than
+ * Returns 0 if Equal
+ * Returns -1 if Less than
+ *//**
+ * Compare Versions
+ *
+ * @param ver1 Version to Compare
+ * @param ver2 Version to Compare
+ */
+ public static int compare(Version ver1, Version ver2) {
+ LinkedList stack1 = new LinkedList(), stack2 = new LinkedList();
+ if (ver1 != null) {
+ stack1.add(ver1);
+ while (ver1.parent != null) {
+ ver1 = ver1.parent;
+ stack1.add(ver1);
+ }
+ Collections.reverse(stack1);
+ }
+ if (ver2 != null) {
+ stack2.add(ver2);
+ while (ver2.parent != null) {
+ ver2 = ver2.parent;
+ stack2.add(ver2);
+ }
+ Collections.reverse(stack2);
}
- if (this.parent != null && version.parent == null) {
- // Version one has a parent version and version two does not, making version two the official version
- return -1;
- }
+ int id;
+ for (id = 0; id < stack1.size(); id++) {
+ if (id >= stack2.size()) {
+ // Version one still has children when version two does not, making version two the official version
+ return -1;
+ }
- if (this.parent == null && version.parent != null) {
- // Version one does not have a parent version and version two does, making version one the official version
+ int result = stack1.get(id).compare(stack2.get(id));
+ if (result != 0) {
+ // Versions are not the same, return the result
+ return result;
+ }
+ }
+ if (id < stack2.size()) {
+ // Version one does not children when version two still does, making version one the official version
return 1;
}
+ return 0;
+ }
+
+ /*
+ * Compares versions ignoring parent/child relationships
+ */
+ private int compare(Version version) {
+ if (this.type.stageid > version.type.stageid) {
+ // Version one has a type of a later stage than version two
+ return 1;
+ }
+
+ if (this.type.stageid < version.type.stageid) {
+ // Version one has a type of an earlier stage than version two
+ return -1;
+ }
VersionTokenizer tokenizer1 = new VersionTokenizer(string);
VersionTokenizer tokenizer2 = new VersionTokenizer(version.string);
@@ -292,29 +393,4 @@ public class Version implements Serializable, Comparable {
}
return 0;
}
-
- /**
- * See if Versions are Equal
- *
- * @param ver1 Version to Compare
- * @param ver2 Version to Compare
- * @return
- */
- public static boolean equals(Version ver1, Version ver2) {
- return compare(ver1, ver2) == 0;
- }
-
- /*
- * Returns 1 if Greater than
- * Returns 0 if Equal
- * Returns -1 if Less than
- *//**
- * Compare Versions
- *
- * @param ver1 Version to Compare
- * @param ver2 Version to Compare
- */
- public static int compare(Version ver1, Version ver2) {
- return ver1.compareTo(ver2);
- }
}
\ No newline at end of file
diff --git a/SubServers.Sync/src/net/ME1312/SubServers/Sync/SubCommand.java b/SubServers.Sync/src/net/ME1312/SubServers/Sync/SubCommand.java
index 32aa1669..2db195c7 100644
--- a/SubServers.Sync/src/net/ME1312/SubServers/Sync/SubCommand.java
+++ b/SubServers.Sync/src/net/ME1312/SubServers/Sync/SubCommand.java
@@ -77,8 +77,8 @@ public final class SubCommand extends CommandX {
for (int i = 0; i < updnodeList.getLength(); i++) {
Node node = updnodeList.item(i);
if (node.getNodeType() == Node.ELEMENT_NODE) {
- if (!node.getTextContent().startsWith("-") && !node.getTextContent().equals(plugin.version.toString()) && new Version(node.getTextContent()).compareTo(updversion) > 0) {
- updversion = new Version(node.getTextContent());
+ if (!node.getTextContent().startsWith("-") && !node.getTextContent().equals(plugin.version.toString()) && Version.fromString(node.getTextContent()).compareTo(updversion) > 0) {
+ updversion = Version.fromString(node.getTextContent());
updcount++;
}
}
@@ -86,7 +86,7 @@ public final class SubCommand extends CommandX {
if (updcount == 0) {
sender.sendMessage("You are on the latest version.");
} else {
- sender.sendMessage("You are " + updcount + " version" + ((updcount == 1) ? "" : "s") + " behind.");
+ sender.sendMessage("SubServers.Sync v" + updversion + " is available. You are " + updcount + " version" + ((updcount == 1)?"":"s") + " behind.");
}
} catch (Exception e) {
}
diff --git a/SubServers.Sync/src/net/ME1312/SubServers/Sync/SubPlugin.java b/SubServers.Sync/src/net/ME1312/SubServers/Sync/SubPlugin.java
index 9ede4c73..03a3fe2a 100644
--- a/SubServers.Sync/src/net/ME1312/SubServers/Sync/SubPlugin.java
+++ b/SubServers.Sync/src/net/ME1312/SubServers/Sync/SubPlugin.java
@@ -49,7 +49,8 @@ public final class SubPlugin extends BungeeCord implements Listener {
public final SubAPI api = new SubAPI(this);
public SubDataClient subdata = null;
//public static final Version version = new Version("2.13a");
- public static final Version version = new Version(new Version("2.13a"), Version.VersionType.PRE_RELEASE, 1);
+ //public static final Version version = new Version(new Version("2.13a"), Version.VersionType.BETA, 1); // TODO Beta Version Setting
+ public static final Version version = new Version(new Version(new Version("2.13a"), Version.VersionType.PRE_RELEASE, 2), Version.VersionType.BETA, 1); // TODO Beta Version Setting
public long lastReload = -1;
@@ -139,8 +140,8 @@ public final class SubPlugin extends BungeeCord implements Listener {
for (int i = 0; i < updnodeList.getLength(); i++) {
Node node = updnodeList.item(i);
if (node.getNodeType() == Node.ELEMENT_NODE) {
- if (!node.getTextContent().startsWith("-") && !node.getTextContent().equals(version.toString()) && new Version(node.getTextContent()).compareTo(updversion) > 0) {
- updversion = new Version(node.getTextContent());
+ if (!node.getTextContent().startsWith("-") && !node.getTextContent().equals(version.toString()) && Version.fromString(node.getTextContent()).compareTo(updversion) > 0) {
+ updversion = Version.fromString(node.getTextContent());
updcount++;
}
}
|