src/main/kotlin/de/uapcore/lightpit/viewmodel/Issues.kt

changeset 249
6bded7090719
parent 234
d71bc6db42ef
child 250
ce6d539bb970
--- a/src/main/kotlin/de/uapcore/lightpit/viewmodel/Issues.kt	Sat Jun 04 18:02:25 2022 +0200
+++ b/src/main/kotlin/de/uapcore/lightpit/viewmodel/Issues.kt	Sat Jun 04 18:29:58 2022 +0200
@@ -38,6 +38,38 @@
 import de.uapcore.lightpit.types.VersionStatus
 import kotlin.math.roundToInt
 
+class IssueSorter(private vararg val criteria: Criteria) : Comparator<Issue> {
+    enum class Field {
+        DONE, ETA, UPDATED
+    }
+
+    data class Criteria(val field: Field, val asc: Boolean = true)
+
+    override fun compare(left: Issue, right: Issue): Int {
+        if (left == right) {
+            return 0;
+        }
+        for (c in criteria) {
+            val result = when (c.field) {
+                Field.DONE -> (left.status.phase == IssueStatusPhase.Done).compareTo(right.status.phase == IssueStatusPhase.Done)
+                Field.ETA -> {
+                    val l = left.eta
+                    val r = right.eta
+                    if (l == null && r == null) 0
+                    else if (l == null) 1
+                    else if (r == null) -1
+                    else l.compareTo(r)
+                }
+                Field.UPDATED -> left.updated.compareTo(right.updated)
+            }
+            if (result != 0) {
+                return if (c.asc) result else -result
+            }
+        }
+        return 0
+    }
+}
+
 class IssueSummary {
     var open = 0
     var active = 0

mercurial