This is an automated email from the ASF dual-hosted git repository.
cziegeler pushed a commit to branch master
in repository
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-feature.git
The following commit(s) were added to refs/heads/master by this push:
new ecec4f8 SLING-9614 : ArtifactId.compareTo is using simple string
compare
ecec4f8 is described below
commit ecec4f853f36df390e9f6dd61fea80eea9a32be0
Author: Carsten Ziegeler <[email protected]>
AuthorDate: Tue Jul 28 07:53:25 2020 +0200
SLING-9614 : ArtifactId.compareTo is using simple string compare
---
.../java/org/apache/sling/feature/ArtifactId.java | 38 +++++++++++++++++++++-
.../org/apache/sling/feature/ArtifactIdTest.java | 10 ++++++
2 files changed, 47 insertions(+), 1 deletion(-)
diff --git a/src/main/java/org/apache/sling/feature/ArtifactId.java
b/src/main/java/org/apache/sling/feature/ArtifactId.java
index 855e785..489f109 100644
--- a/src/main/java/org/apache/sling/feature/ArtifactId.java
+++ b/src/main/java/org/apache/sling/feature/ArtifactId.java
@@ -492,7 +492,43 @@ public class ArtifactId implements Comparable<ArtifactId> {
@Override
public int compareTo(final ArtifactId o) {
if(o == null) return 1;
- return toMvnUrl().compareTo(o.toMvnUrl());
+ // group id
+ int result = this.getGroupId().compareTo(o.getGroupId());
+ if ( result == 0 ) {
+ // artifact id
+ result = this.getArtifactId().compareTo(o.getArtifactId());
+ if ( result == 0 ) {
+ // version
+ Version v1 = null;
+ Version v2 = null;
+ try {
+ v1 = this.getOSGiVersion();
+ v2 = o.getOSGiVersion();
+ } catch (final IllegalArgumentException ignore) {
+ // ignore
+ }
+ if ( v1 != null && v2 != null ) {
+ result = v1.compareTo(v2);
+ } else {
+ // we need to revert to string compare
+ result = this.getVersion().compareTo(o.getVersion());
+ }
+
+ if ( result == 0 ) {
+ // classifier
+ if ( this.getClassifier() == null ) {
+ result = o.getClassifier() == null ? 0 : -1;
+ } else {
+ result = o.getClassifier() == null ? 1 :
this.getClassifier().compareTo(o.getClassifier());
+ }
+ if ( result == 0 ) {
+ // type
+ result = this.getType().compareTo(o.getType());
+ }
+ }
+ }
+ }
+ return result;
}
@Override
diff --git a/src/test/java/org/apache/sling/feature/ArtifactIdTest.java
b/src/test/java/org/apache/sling/feature/ArtifactIdTest.java
index 81fd1e3..f445987 100644
--- a/src/test/java/org/apache/sling/feature/ArtifactIdTest.java
+++ b/src/test/java/org/apache/sling/feature/ArtifactIdTest.java
@@ -273,4 +273,14 @@ public class ArtifactIdTest {
assertEquals(a1, ArtifactId.parse(a1.toMvnId()));
assertEquals(a1, ArtifactId.parse(a1.toMvnUrl()));
}
+
+ @Test
+ public void testCompareTo() {
+ final ArtifactId a1 = ArtifactId.parse("g:a:1.7");
+ final ArtifactId a2 = ArtifactId.parse("g:a:1.11");
+
+ assertTrue(a1.compareTo(a2) < 0);
+ assertTrue(a2.compareTo(a1) > 0);
+ assertTrue(a1.compareTo(a1) == 0);
+ }
}