diff --git a/appng-core/pom.xml b/appng-core/pom.xml
index 1cb27ffbd..b3ccd03c1 100644
--- a/appng-core/pom.xml
+++ b/appng-core/pom.xml
@@ -360,6 +360,11 @@
appng-rest-api
provided
+
+ de.skuzzle
+ semantic-version
+ 1.2.0
+
diff --git a/appng-core/src/main/java/org/appng/core/model/RepositoryUtils.java b/appng-core/src/main/java/org/appng/core/model/RepositoryUtils.java
index a0da86fbb..70c11a8d8 100644
--- a/appng-core/src/main/java/org/appng/core/model/RepositoryUtils.java
+++ b/appng-core/src/main/java/org/appng/core/model/RepositoryUtils.java
@@ -20,10 +20,11 @@
import java.text.SimpleDateFormat;
import java.util.Date;
-import org.apache.commons.lang3.StringUtils;
import org.appng.core.domain.PackageArchiveImpl;
import org.appng.xml.application.PackageInfo;
+import de.skuzzle.semantic.Version;
+
/**
* Utility class offering methods that help dealing with {@link PackageVersion}s and {@link PackageInfo}rmations.
*
@@ -73,10 +74,10 @@ public static boolean isNewer(PackageInfo packageA, PackageInfo packageB) {
if (null == packageB) {
return true;
} else {
- Long timestampA = getDate(packageA).getTime();
- Long timestampB = getDate(packageB).getTime();
- int isVersionNewer = StringUtils.compare(packageA.getVersion(), packageB.getVersion());
- return (0 == isVersionNewer) ? (timestampA > timestampB) : (0 > isVersionNewer ? false : true);
+ Version versionA = Version.parseVersion(packageA.getVersion() + "-" + packageA.getTimestamp(), true);
+ Version versionB = Version.parseVersion(packageB.getVersion() + "-" + packageB.getTimestamp(), true);
+ int isVersionNewer = versionB.compareTo(versionA);
+ return 0 > isVersionNewer ? true : false;
}
}
diff --git a/appng-core/src/test/java/org/appng/core/model/RepositoryUtilsTest.java b/appng-core/src/test/java/org/appng/core/model/RepositoryUtilsTest.java
index b598ff83d..d9c3445a6 100644
--- a/appng-core/src/test/java/org/appng/core/model/RepositoryUtilsTest.java
+++ b/appng-core/src/test/java/org/appng/core/model/RepositoryUtilsTest.java
@@ -22,9 +22,9 @@
import org.junit.Test;
public class RepositoryUtilsTest {
-
+
@Test
- public void testIsSnapshot(){
+ public void testIsSnapshot() {
Assert.assertFalse(RepositoryUtils.isSnapshot("snapshot"));
Assert.assertFalse(RepositoryUtils.isSnapshot("SNAPSHOT"));
Assert.assertFalse(RepositoryUtils.isSnapshot("sNaPsHoT"));
@@ -32,7 +32,7 @@ public void testIsSnapshot(){
}
@Test
- public void testGetDate(){
+ public void testGetDate() {
ApplicationInfo app = new ApplicationInfo();
app.setTimestamp("19700101-0100");
Date date = RepositoryUtils.getDate(app);
@@ -69,6 +69,15 @@ public void testIsNewer() {
Assert.assertTrue(RepositoryUtils.isNewer(v2_0_0, v1_0_0_a));
Assert.assertTrue(RepositoryUtils.isNewer(v2_0_0, v1_0_0_b));
Assert.assertTrue(RepositoryUtils.isNewer(v2_0_0, v1_1_0));
+
+ ApplicationInfo v0_9_0 = new ApplicationInfo();
+ v0_9_0.setVersion("0.9.0");
+ ApplicationInfo v0_40_0 = new ApplicationInfo();
+ v0_40_0.setVersion("0.40.0");
+
+ Assert.assertTrue(RepositoryUtils.isNewer(v0_40_0, v0_9_0));
+ Assert.assertTrue(RepositoryUtils.isNewer(v0_40_0, v0_9_0));
+ Assert.assertTrue(RepositoryUtils.isNewer(v0_40_0, v0_9_0));
}
}