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

changeset 249
6bded7090719
parent 234
d71bc6db42ef
child 250
ce6d539bb970
     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

mercurial