1.1 --- a/src/main/kotlin/de/uapcore/lightpit/viewmodel/Issues.kt Sat Jun 04 18:02:25 2022 +0200 1.2 +++ b/src/main/kotlin/de/uapcore/lightpit/viewmodel/Issues.kt Sat Jun 04 18:29:58 2022 +0200 1.3 @@ -38,6 +38,38 @@ 1.4 import de.uapcore.lightpit.types.VersionStatus 1.5 import kotlin.math.roundToInt 1.6 1.7 +class IssueSorter(private vararg val criteria: Criteria) : Comparator<Issue> { 1.8 + enum class Field { 1.9 + DONE, ETA, UPDATED 1.10 + } 1.11 + 1.12 + data class Criteria(val field: Field, val asc: Boolean = true) 1.13 + 1.14 + override fun compare(left: Issue, right: Issue): Int { 1.15 + if (left == right) { 1.16 + return 0; 1.17 + } 1.18 + for (c in criteria) { 1.19 + val result = when (c.field) { 1.20 + Field.DONE -> (left.status.phase == IssueStatusPhase.Done).compareTo(right.status.phase == IssueStatusPhase.Done) 1.21 + Field.ETA -> { 1.22 + val l = left.eta 1.23 + val r = right.eta 1.24 + if (l == null && r == null) 0 1.25 + else if (l == null) 1 1.26 + else if (r == null) -1 1.27 + else l.compareTo(r) 1.28 + } 1.29 + Field.UPDATED -> left.updated.compareTo(right.updated) 1.30 + } 1.31 + if (result != 0) { 1.32 + return if (c.asc) result else -result 1.33 + } 1.34 + } 1.35 + return 0 1.36 + } 1.37 +} 1.38 + 1.39 class IssueSummary { 1.40 var open = 0 1.41 var active = 0