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

changeset 249
6bded7090719
parent 234
d71bc6db42ef
child 250
ce6d539bb970
equal deleted inserted replaced
248:90dc13c78b5d 249:6bded7090719
35 import de.uapcore.lightpit.types.IssueCategory 35 import de.uapcore.lightpit.types.IssueCategory
36 import de.uapcore.lightpit.types.IssueStatus 36 import de.uapcore.lightpit.types.IssueStatus
37 import de.uapcore.lightpit.types.IssueStatusPhase 37 import de.uapcore.lightpit.types.IssueStatusPhase
38 import de.uapcore.lightpit.types.VersionStatus 38 import de.uapcore.lightpit.types.VersionStatus
39 import kotlin.math.roundToInt 39 import kotlin.math.roundToInt
40
41 class IssueSorter(private vararg val criteria: Criteria) : Comparator<Issue> {
42 enum class Field {
43 DONE, ETA, UPDATED
44 }
45
46 data class Criteria(val field: Field, val asc: Boolean = true)
47
48 override fun compare(left: Issue, right: Issue): Int {
49 if (left == right) {
50 return 0;
51 }
52 for (c in criteria) {
53 val result = when (c.field) {
54 Field.DONE -> (left.status.phase == IssueStatusPhase.Done).compareTo(right.status.phase == IssueStatusPhase.Done)
55 Field.ETA -> {
56 val l = left.eta
57 val r = right.eta
58 if (l == null && r == null) 0
59 else if (l == null) 1
60 else if (r == null) -1
61 else l.compareTo(r)
62 }
63 Field.UPDATED -> left.updated.compareTo(right.updated)
64 }
65 if (result != 0) {
66 return if (c.asc) result else -result
67 }
68 }
69 return 0
70 }
71 }
40 72
41 class IssueSummary { 73 class IssueSummary {
42 var open = 0 74 var open = 0
43 var active = 0 75 var active = 0
44 var done = 0 76 var done = 0

mercurial