diff --git a/pom.xml b/pom.xml
index 11d9713..ab2e992 100644
--- a/pom.xml
+++ b/pom.xml
@@ -68,6 +68,7 @@
6.2.0
0.10.2
1.8.2
+ 3.1.0
2.0.3
@@ -220,6 +221,11 @@
junit-jupiter-api
${version.junit}
+
+ com.vdurmont
+ semver4j
+ ${version.semver4j}
+
@@ -341,6 +347,10 @@
junit-jupiter-api
test
+
+ com.vdurmont
+ semver4j
+
diff --git a/src/main/java/eu/europa/ted/eforms/sdk/SdkVersion.java b/src/main/java/eu/europa/ted/eforms/sdk/SdkVersion.java
index 40befdb..b7af329 100644
--- a/src/main/java/eu/europa/ted/eforms/sdk/SdkVersion.java
+++ b/src/main/java/eu/europa/ted/eforms/sdk/SdkVersion.java
@@ -1,79 +1,60 @@
package eu.europa.ted.eforms.sdk;
-import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
-import java.util.Optional;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.Validate;
-public class SdkVersion implements Comparable {
- private static final String FORMAT_PATTERN = "{0}.{1}.{2}";
-
- private String major = "0";
-
- private String minor = "0";
+import com.vdurmont.semver4j.Semver;
+import com.vdurmont.semver4j.Semver.SemverType;
- private String patch = "0";
-
- private boolean isPatch = false;
+public class SdkVersion implements Comparable {
- @SuppressWarnings("unused")
- private SdkVersion() {}
+ private final Semver version;
public SdkVersion(final String version) {
Validate.notBlank(version, "Undefined version");
- Validate.matchesPattern(version, "[0-9]+(\\.[0-9]+)*(-SNAPSHOT)?", "Invalid version format");
-
- String[] versionParts = version.split("\\.");
- this.major = versionParts[0];
+ // LOOSE because we need to accept MAJOR.MINOR
+ this.version = new Semver(version, SemverType.LOOSE);
- if (versionParts.length > 1) {
- this.minor = versionParts[1];
- }
-
- if (versionParts.length > 2) {
- this.isPatch = true;
- this.patch = versionParts[2];
- }
+ // Check that we did get a MINOR part
+ Validate.notNull(this.version.getMinor());
}
public String getMajor() {
- return major;
+ return version.getMajor().toString();
}
public String getMinor() {
- return minor;
+ return version.getMinor().toString();
}
public String getPatch() {
- return patch;
+ return version.getPatch() == null ? "0" : version.getPatch().toString();
}
public String getNextMajor() {
- return new SdkVersion(MessageFormat.format(FORMAT_PATTERN, getAsInt(major) + 1, minor, patch))
- .toString();
+ return version.withIncMajor().toString();
}
public String getNextMinor() {
- return new SdkVersion(MessageFormat.format(FORMAT_PATTERN, major, getAsInt(minor) + 1, patch))
- .toString();
+ return version.withIncMinor().toString();
}
public boolean isPatch() {
- return isPatch;
+ return version.getPatch() != null;
}
public String toNormalisedString(boolean withPatch) {
List parts = new ArrayList<>();
- parts.add(major);
- parts.add(minor);
+ parts.add(getMajor());
+ parts.add(getMinor());
if (withPatch) {
- parts.add(patch);
+ parts.add(getPatch());
}
return StringUtils.join(parts, ".");
@@ -85,7 +66,7 @@ public String toStringWithoutPatch() {
@Override
public String toString() {
- return toNormalisedString(true);
+ return version.toString();
}
@Override
@@ -98,24 +79,12 @@ public int compareTo(SdkVersion that) {
return 0;
}
- if (getAsInt(this.getMajor()) == getAsInt(that.getMajor())) {
- if (getAsInt(this.getMinor()) == getAsInt(that.getMinor())) {
- return getAsInt(this.getPatch()) < getAsInt(that.getPatch()) ? -1 : 1;
- } else {
- return getAsInt(this.getMinor()) < getAsInt(that.getMinor()) ? -1 : 1;
- }
- } else {
- return getAsInt(this.getMajor()) < getAsInt(that.getMajor()) ? -1 : 1;
- }
- }
-
- private int getAsInt(String versionPart) {
- return Integer.parseInt(Optional.ofNullable(versionPart).orElse("0").replace("-SNAPSHOT", ""));
+ return version.compareTo(that.version);
}
@Override
public int hashCode() {
- return Objects.hash(major, minor, patch);
+ return Objects.hash(version);
}
@Override
@@ -127,7 +96,6 @@ public boolean equals(Object obj) {
if (getClass() != obj.getClass())
return false;
SdkVersion other = (SdkVersion) obj;
- return Objects.equals(major, other.major) && Objects.equals(minor, other.minor)
- && Objects.equals(patch, other.patch);
+ return Objects.equals(version, other.version);
}
}
diff --git a/src/test/java/eu/europa/ted/eforms/sdk/SdkVersionTest.java b/src/test/java/eu/europa/ted/eforms/sdk/SdkVersionTest.java
new file mode 100644
index 0000000..e707893
--- /dev/null
+++ b/src/test/java/eu/europa/ted/eforms/sdk/SdkVersionTest.java
@@ -0,0 +1,63 @@
+package eu.europa.ted.eforms.sdk;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import org.junit.jupiter.api.Test;
+
+public class SdkVersionTest {
+ @Test
+ void testGetMajor() {
+ assertEquals("1", new SdkVersion("1.2.3").getMajor());
+ }
+
+ @Test
+ void testGetMinor() {
+ assertEquals("2", new SdkVersion("1.2.3").getMinor());
+ }
+
+ @Test
+ void testGetPatch() {
+ assertEquals("3", new SdkVersion("1.2.3").getPatch());
+ }
+
+ @Test
+ void testGetNextMajor() {
+ assertEquals("2.2.3", new SdkVersion("1.2.3").getNextMajor());
+ }
+
+ @Test
+ void testGetNextMinor() {
+ assertEquals("1.3.3", new SdkVersion("1.2.3").getNextMinor());
+ }
+
+ @Test
+ void testIsPatch() {
+ assertEquals(false, new SdkVersion("1.2").isPatch());
+
+ assertEquals(true, new SdkVersion("1.2.3").isPatch());
+ assertEquals(true, new SdkVersion("1.2.3-rc.4").isPatch());
+ }
+
+ @Test
+ void testToNormalisedStringWithPatch() {
+ assertEquals("1.2.3", new SdkVersion("1.2.3").toNormalisedString(true));
+ assertEquals("1.2.3", new SdkVersion("1.2.3-SNAPSHOT").toNormalisedString(true));
+ assertEquals("1.2.3", new SdkVersion("1.2.3-rc.4").toNormalisedString(true));
+ }
+
+ @Test
+ void testToStringWithoutPatch() {
+ assertEquals("1.2", new SdkVersion("1.2.3").toStringWithoutPatch());
+ assertEquals("1.2", new SdkVersion("1.2.3-SNAPSHOT").toStringWithoutPatch());
+ assertEquals("1.2", new SdkVersion("1.2.3-rc.4").toStringWithoutPatch());
+ }
+
+ @Test
+ void testCompare() {
+ assert(new SdkVersion("1.2.3").compareTo(new SdkVersion("1.2.2")) > 0);
+ assert(new SdkVersion("1.2.3").compareTo(new SdkVersion("1.2")) > 0);
+ assert(new SdkVersion("1.2.3").compareTo(new SdkVersion("1.2.3-SNAPSHOT")) > 0);
+ assert(new SdkVersion("1.2.3").compareTo(new SdkVersion("1.2.3-rc.3")) > 0);
+ assert(new SdkVersion("2.0.0").compareTo(new SdkVersion("2.0.0-alpha.1")) > 0);
+ }
+}