From ee72ee271feee20e0b0890bbf6891c3f69d0acf6 Mon Sep 17 00:00:00 2001 From: shroffk Date: Tue, 28 Apr 2026 13:25:10 -0400 Subject: [PATCH] Adding support for the deprecated version number elements to be parsed correctly --- src/core/gov/aps/jca/Version.java | 55 ++++++++++++++++++++++++++++++- test/gov/aps/jca/VersionTest.java | 48 +++++++++++++++++++++++++++ 2 files changed, 102 insertions(+), 1 deletion(-) create mode 100644 test/gov/aps/jca/VersionTest.java diff --git a/src/core/gov/aps/jca/Version.java b/src/core/gov/aps/jca/Version.java index 1b15bcc..69373d9 100644 --- a/src/core/gov/aps/jca/Version.java +++ b/src/core/gov/aps/jca/Version.java @@ -21,6 +21,9 @@ package gov.aps.jca; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + /** * Administrative class to keep track of the version number of the context * implementations. @@ -103,6 +106,56 @@ public Version(String productName, String implementationLangugage, String versio this.productName = productName; this.implementationLanguage = implementationLangugage; this.version = version; + parseDeprecatedVersionFields(version); + } + + private static final Pattern LEGACY_DEV_WITH_MAINT_PATTERN = + Pattern.compile("^\\s*[vV]?(\\d+)\\.(\\d+)\\.(\\d+)[dD](\\d+).*$"); + + private static final Pattern LEGACY_DEV_PATTERN = + Pattern.compile("^\\s*[vV]?(\\d+)\\.(\\d+)[dD](\\d+).*$"); + + private static final Pattern NUMERIC_CORE_PATTERN = + Pattern.compile("^\\s*[vV]?(\\d+)(?:\\.(\\d+))?(?:\\.(\\d+))?.*$"); + + private void parseDeprecatedVersionFields(String rawVersion) + { + majorVersion = 0; + minorVersion = 0; + maintenanceVersion = 0; + developmentVersion = 0; + + if (rawVersion == null) + return; + + Matcher matcher = LEGACY_DEV_WITH_MAINT_PATTERN.matcher(rawVersion); + if (matcher.matches()) + { + majorVersion = Integer.parseInt(matcher.group(1)); + minorVersion = Integer.parseInt(matcher.group(2)); + maintenanceVersion = Integer.parseInt(matcher.group(3)); + developmentVersion = Integer.parseInt(matcher.group(4)); + return; + } + + matcher = LEGACY_DEV_PATTERN.matcher(rawVersion); + if (matcher.matches()) + { + majorVersion = Integer.parseInt(matcher.group(1)); + minorVersion = Integer.parseInt(matcher.group(2)); + developmentVersion = Integer.parseInt(matcher.group(3)); + return; + } + + matcher = NUMERIC_CORE_PATTERN.matcher(rawVersion); + if (matcher.matches()) + { + majorVersion = Integer.parseInt(matcher.group(1)); + if (matcher.group(2) != null) + minorVersion = Integer.parseInt(matcher.group(2)); + if (matcher.group(3) != null) + maintenanceVersion = Integer.parseInt(matcher.group(3)); + } } @@ -232,4 +285,4 @@ public String toString() { return getLongVersionString(); } -} \ No newline at end of file +} diff --git a/test/gov/aps/jca/VersionTest.java b/test/gov/aps/jca/VersionTest.java new file mode 100644 index 0000000..f540e24 --- /dev/null +++ b/test/gov/aps/jca/VersionTest.java @@ -0,0 +1,48 @@ +package gov.aps.jca; + +import org.junit.Assert; +import org.junit.Test; + +public class VersionTest { + + @Test + public void parsesNumericVersionWithQualifier() { + Version version = new Version("JCA", "Java", "2.4.12-SNAPSHOT"); + + Assert.assertEquals(2, version.getMajorVersion()); + Assert.assertEquals(4, version.getMinorVersion()); + Assert.assertEquals(12, version.getMaintenanceVersion()); + Assert.assertEquals(0, version.getDevelopmentVersion()); + } + + @Test + public void parsesLegacyDevelopmentVersion() { + Version version = new Version("JCA", "Java", "1.2D3"); + + Assert.assertEquals(1, version.getMajorVersion()); + Assert.assertEquals(2, version.getMinorVersion()); + Assert.assertEquals(0, version.getMaintenanceVersion()); + Assert.assertEquals(3, version.getDevelopmentVersion()); + } + + @Test + public void parsesLegacyDevelopmentVersionWithMaintenance() { + Version version = new Version("JCA", "Java", "1.2.3D4"); + + Assert.assertEquals(1, version.getMajorVersion()); + Assert.assertEquals(2, version.getMinorVersion()); + Assert.assertEquals(3, version.getMaintenanceVersion()); + Assert.assertEquals(4, version.getDevelopmentVersion()); + } + + @Test + public void defaultsToZerosOnInvalidVersion() { + Version version = new Version("JCA", "Java", "abc"); + + Assert.assertEquals(0, version.getMajorVersion()); + Assert.assertEquals(0, version.getMinorVersion()); + Assert.assertEquals(0, version.getMaintenanceVersion()); + Assert.assertEquals(0, version.getDevelopmentVersion()); + } +} +