diff --git a/multiapps-mta/pom.xml b/multiapps-mta/pom.xml
index 631d608e..8493326c 100644
--- a/multiapps-mta/pom.xml
+++ b/multiapps-mta/pom.xml
@@ -21,7 +21,7 @@
commons-collections4
- com.vdurmont
+ org.semver4j
semver4j
diff --git a/multiapps-mta/src/main/java/module-info.java b/multiapps-mta/src/main/java/module-info.java
index 3ab88054..44aec965 100644
--- a/multiapps-mta/src/main/java/module-info.java
+++ b/multiapps-mta/src/main/java/module-info.java
@@ -29,7 +29,7 @@
requires org.apache.commons.collections4;
requires org.apache.commons.io;
requires org.apache.commons.lang3;
- requires semver4j;
+ requires org.semver4j;
requires static java.compiler;
requires static org.immutables.value;
diff --git a/multiapps-mta/src/main/java/org/cloudfoundry/multiapps/mta/model/Version.java b/multiapps-mta/src/main/java/org/cloudfoundry/multiapps/mta/model/Version.java
index f8f2efc3..2b1aee7b 100644
--- a/multiapps-mta/src/main/java/org/cloudfoundry/multiapps/mta/model/Version.java
+++ b/multiapps-mta/src/main/java/org/cloudfoundry/multiapps/mta/model/Version.java
@@ -4,16 +4,11 @@
import org.cloudfoundry.multiapps.common.ParsingException;
import org.cloudfoundry.multiapps.mta.Messages;
-import org.cloudfoundry.multiapps.mta.parsers.PartialVersionConverter;
-
-import com.vdurmont.semver4j.Semver;
-import com.vdurmont.semver4j.Semver.SemverType;
-import com.vdurmont.semver4j.SemverException;
+import org.semver4j.Semver;
+import org.semver4j.SemverException;
public class Version implements Comparable {
- private static final PartialVersionConverter PARTIAL_VERSION_CONVERTER = new PartialVersionConverter();
-
private final Semver version;
private Version(Semver version) {
@@ -32,21 +27,12 @@ public int getPatch() {
return version.getPatch();
}
- public String getBuild() {
- return version.getBuild();
- }
-
- public String[] getSuffixTokens() {
- return version.getSuffixTokens();
- }
-
public static Version parseVersion(String versionString) {
- try {
- String fullVersionString = PARTIAL_VERSION_CONVERTER.convertToFullVersionString(versionString);
- return new Version(new Semver(fullVersionString, SemverType.NPM));
- } catch (SemverException e) {
- throw new ParsingException(e, Messages.UNABLE_TO_PARSE_VERSION, versionString);
+ var version = Semver.coerce(versionString); //allows incomplete version strings like "3" or "3.0"
+ if (version == null) {
+ throw new ParsingException(Messages.UNABLE_TO_PARSE_VERSION, versionString);
}
+ return new Version(version);
}
@Override
@@ -56,7 +42,7 @@ public int hashCode() {
@Override
public String toString() {
- return version.getValue();
+ return version.toString();
}
@Override
diff --git a/multiapps-mta/src/main/java/org/cloudfoundry/multiapps/mta/model/VersionRule.java b/multiapps-mta/src/main/java/org/cloudfoundry/multiapps/mta/model/VersionRule.java
index 35c5208f..649719e6 100644
--- a/multiapps-mta/src/main/java/org/cloudfoundry/multiapps/mta/model/VersionRule.java
+++ b/multiapps-mta/src/main/java/org/cloudfoundry/multiapps/mta/model/VersionRule.java
@@ -1,5 +1,7 @@
package org.cloudfoundry.multiapps.mta.model;
+import java.util.function.Predicate;
+
public enum VersionRule {
SAME_HIGHER(VersionRule::isNotDowngrade),
@@ -8,22 +10,14 @@ public enum VersionRule {
ALL(VersionRule::isAny);
- private interface VersionRuleValidator {
- boolean allows(DeploymentType deploymentType);
- }
-
- private VersionRuleValidator versionRuleValidator;
+ private final Predicate versionRuleValidator;
- VersionRule(VersionRuleValidator versionRuleValidator) {
+ VersionRule(Predicate versionRuleValidator) {
this.versionRuleValidator = versionRuleValidator;
}
public boolean allows(DeploymentType deploymentType) {
- return versionRuleValidator.allows(deploymentType);
- }
-
- public static VersionRule value(String caseInsensitiveValue) {
- return VersionRule.valueOf(caseInsensitiveValue.toUpperCase());
+ return versionRuleValidator.test(deploymentType);
}
private static boolean isNotDowngrade(DeploymentType deploymentType) {
diff --git a/multiapps-mta/src/main/java/org/cloudfoundry/multiapps/mta/parsers/PartialVersionConverter.java b/multiapps-mta/src/main/java/org/cloudfoundry/multiapps/mta/parsers/PartialVersionConverter.java
deleted file mode 100644
index 22059356..00000000
--- a/multiapps-mta/src/main/java/org/cloudfoundry/multiapps/mta/parsers/PartialVersionConverter.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package org.cloudfoundry.multiapps.mta.parsers;
-
-import com.vdurmont.semver4j.Semver;
-import com.vdurmont.semver4j.Semver.SemverType;
-
-public class PartialVersionConverter {
-
- private static final String VERSION_STRING_TEMPLATE = "%s.%s.%s%s%s";
- private static final String VERSION_SUFFIX_STRING_TEMPLATE = "-%s";
- private static final String VERSION_BUILD_STRING_TEMPLATE = "+%s";
- private static final String DEFAULT_VERSION_SUFFIX = "";
-
- public String convertToFullVersionString(String partialVersionString) {
- Semver partialVersion = new Semver(partialVersionString, SemverType.LOOSE);
- Integer majorVersion = partialVersion.getMajor();
- Integer minorVersion = partialVersion.getMinor();
- Integer patchVersion = partialVersion.getPatch();
-
- if (minorVersion == null) {
- minorVersion = 0;
- }
- if (patchVersion == null) {
- patchVersion = 0;
- }
- return buildVersionString(majorVersion, minorVersion, patchVersion, partialVersion.getSuffixTokens(), partialVersion.getBuild());
- }
-
- private String buildVersionString(int major, int minor, int patch, String[] suffixTokens, String buildVersion) {
- String formattedSuffixTokens = formatSuffixTokens(suffixTokens);
- String formattedBuildVersion = formatBuildVersion(buildVersion);
- return String.format(VERSION_STRING_TEMPLATE, major, minor, patch, formattedSuffixTokens, formattedBuildVersion);
- }
-
- private String formatSuffixTokens(String[] suffixTokens) {
- if (suffixTokens.length == 0) {
- return DEFAULT_VERSION_SUFFIX;
- }
- return String.format(VERSION_SUFFIX_STRING_TEMPLATE, String.join(".", suffixTokens));
- }
-
- private String formatBuildVersion(String buildVersion) {
- if (buildVersion == null) {
- return DEFAULT_VERSION_SUFFIX;
- }
- return String.format(VERSION_BUILD_STRING_TEMPLATE, buildVersion);
- }
-
-}
diff --git a/multiapps-mta/src/test/java/org/cloudfoundry/multiapps/mta/parsers/PartialVersionConverterTest.java b/multiapps-mta/src/test/java/org/cloudfoundry/multiapps/mta/parsers/PartialVersionConverterTest.java
deleted file mode 100644
index 5a539d72..00000000
--- a/multiapps-mta/src/test/java/org/cloudfoundry/multiapps/mta/parsers/PartialVersionConverterTest.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package org.cloudfoundry.multiapps.mta.parsers;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertThrows;
-
-import java.util.stream.Stream;
-
-import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.Arguments;
-import org.junit.jupiter.params.provider.MethodSource;
-
-import com.vdurmont.semver4j.SemverException;
-
-class PartialVersionConverterTest {
-
- private final PartialVersionConverter partialVersionConverter = new PartialVersionConverter();
-
- @ParameterizedTest
- @MethodSource
- void testConvertWithInvalidVersions(String versionString, String expectedExceptionMessage) {
- SemverException exception = assertThrows(SemverException.class,
- () -> partialVersionConverter.convertToFullVersionString(versionString));
-
- assertEquals(expectedExceptionMessage, exception.getMessage());
- }
-
- static Stream testConvertWithInvalidVersions() {
- return Stream.of(
-// @formatter:off
- Arguments.of("1.0.0-beta+", "The build cannot be empty."),
- Arguments.of("3.a", "Invalid version (no minor version): 3.a"),
- Arguments.of("a.b.c", "Invalid version (no major version): a.b.c"),
- Arguments.of( "", "Invalid version (no major version): "),
- Arguments.of("[ 2.0, 2.1 ]", "Invalid version (no major version): [ 2.0, 2.1 ]")
-// @formatter:on
- );
- }
-
- @ParameterizedTest
- @MethodSource
- void testConvertWithValidVersions(String versionString, String expectedResult) {
- String fullVersionString = partialVersionConverter.convertToFullVersionString(versionString);
-
- assertEquals(expectedResult, fullVersionString);
- }
-
- static Stream testConvertWithValidVersions() {
- return Stream.of(
-// @formatter:off
- // Full version:
- Arguments.of("1.0.0", "1.0.0"),
- // Partial version with minor version:
- Arguments.of("2.1", "2.1.0"),
- // Partial version with patch version:
- Arguments.of("2", "2.0.0"),
- // Full version with suffix tokens:
- Arguments.of("1.9.0-SHAPSHOT", "1.9.0-SHAPSHOT"),
- // Partial version with suffix tokens:
- Arguments.of("1.9-SHAPSHOT", "1.9.0-SHAPSHOT"),
- // Partial version with suffix tokens:
- Arguments.of("1-SHAPSHOT", "1.0.0-SHAPSHOT"),
- // Full version with suffix tokens and build information:
- Arguments.of("1.2.0-beta+exp.sha.5114f85", "1.2.0-beta+exp.sha.5114f85"),
- // Partial version with suffix tokens and build information:
- Arguments.of("1.2-beta+exp.sha.5114f85", "1.2.0-beta+exp.sha.5114f85"),
- // Partial version with suffix tokens and build information:
- Arguments.of("1-beta+exp.sha.5114f85", "1.0.0-beta+exp.sha.5114f85")
-// @formatter:on
- );
- }
-
-}
diff --git a/pom.xml b/pom.xml
index fb7cd43b..fa4fe9a4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -25,7 +25,7 @@
2.11.0
2.0.6
2.0
- 3.1.0
+ 5.2.2
2.8.8
2.3.3
2.3.0.1
@@ -292,9 +292,9 @@
snakeyaml
${snakeyaml.version}
-
+
- com.vdurmont
+ org.semver4j
semver4j
${semver4j.version}