diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/Version.java b/jetty-start/src/main/java/org/eclipse/jetty/start/Version.java index c9fceee34a1..fa808587d22 100644 --- a/jetty-start/src/main/java/org/eclipse/jetty/start/Version.java +++ b/jetty-start/src/main/java/org/eclipse/jetty/start/Version.java @@ -25,6 +25,17 @@ package org.eclipse.jetty.start; */ public class Version implements Comparable { + + /** + * Original String version + */ + private String string = null; + + /** + * Short String version + */ + private String shortString = null; + /** * The major version for java is always "1" (per * legacy versioning history) @@ -45,6 +56,12 @@ public class Version implements Comparable * The update (where bug fixes are placed) */ private int update = -1; + + /** + * Update strings may be zero padded! + */ + private String updateString = null; + /** * Extra versioning information present on the version string, but not relevant for version comparison reason. * (eg: with "1.8.0_45-internal", the suffix would be "-internal") @@ -181,6 +198,7 @@ public class Version implements Comparable */ private void parse(String versionStr) { + string = versionStr; legacyMajor = 0; major = -1; revision = -1; @@ -194,6 +212,8 @@ public class Version implements Comparable while (offset < len) { char c = versionStr.charAt(offset); + if (c=='-') + shortString=versionStr.substring(0,offset); boolean isSeparator = !Character.isLetterOrDigit(c); if (isSeparator) { @@ -206,7 +226,7 @@ public class Version implements Comparable else if (Character.isLetter(c)) { suffix = versionStr.substring(offset); - return; + break; } switch (state) @@ -231,12 +251,16 @@ public class Version implements Comparable break; case UPDATE: if (!isSeparator) + { update = val; + } break; } offset++; } + if (shortString==null) + shortString=versionStr; } /** @@ -245,25 +269,7 @@ public class Version implements Comparable @Override public String toString() { - StringBuffer sb = new StringBuffer(10); - sb.append(legacyMajor); - if (major >= 0) - { - sb.append('.').append(major); - if (revision >= 0) - { - sb.append('.').append(revision); - if (update >= 0) - { - sb.append('_').append(update); - } - } - } - if (Utils.isNotBlank(suffix)) - { - sb.append('-').append(suffix); - } - return sb.toString(); + return string; } /** @@ -272,20 +278,6 @@ public class Version implements Comparable */ public String toShortString() { - StringBuffer sb = new StringBuffer(10); - sb.append(legacyMajor); - if (major >= 0) - { - sb.append('.').append(major); - if (revision >= 0) - { - sb.append('.').append(revision); - if (update >= 0) - { - sb.append('_').append(update); - } - } - } - return sb.toString(); + return shortString; } } diff --git a/jetty-start/src/test/java/org/eclipse/jetty/start/VersionTest.java b/jetty-start/src/test/java/org/eclipse/jetty/start/VersionTest.java index 4fa8065d748..63ebe0a774e 100644 --- a/jetty-start/src/test/java/org/eclipse/jetty/start/VersionTest.java +++ b/jetty-start/src/test/java/org/eclipse/jetty/start/VersionTest.java @@ -49,6 +49,8 @@ public class VersionTest { assertToShortString("1.8","1.8"); assertToShortString("1.8.0","1.8.0"); + assertToShortString("1.8.0_3","1.8.0_3"); + assertToShortString("1.8.0_03","1.8.0_03"); assertToShortString("1.8.0_45","1.8.0_45"); assertToShortString("1.8.0_45-internal","1.8.0_45"); assertToShortString("1.8.0-debug","1.8.0"); @@ -60,6 +62,22 @@ public class VersionTest assertThat("Version [" + verStr + "].toShortString", ver.toShortString(), is(expectedShortString)); } + @Test + public void testToString() + { + assertToString("1.8"); + assertToString("1.8.0"); + assertToString("1.8.0_0"); + assertToString("1.8.0_3"); + assertToString("1.8.0_03"); + } + + private void assertToString(String verStr) + { + Version ver = new Version(verStr); + assertThat("Version [" + verStr + "].toString", ver.toString(), is(verStr)); + } + @Test public void testNewerVersion() { assertIsNewer("0.0.0", "0.0.1"); @@ -90,7 +108,7 @@ public class VersionTest assertThat("9.2 >= 9.3",new Version("9.2").isNewerThanOrEqualTo(new Version("9.3")),is(false)); assertThat("9.3 >= 9.2",new Version("9.3").isNewerThanOrEqualTo(new Version("9.2")),is(true)); } - + private void assertIsOlder(String basever, String testver) { Version vbase = new Version(basever); @@ -104,4 +122,6 @@ public class VersionTest Version vtest = new Version(testver); assertTrue("Version [" + testver + "] should be newer than [" + basever + "]", vtest.isNewerThan(vbase)); } + + }