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);
+    }
 }

Reply via email to