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

changeset 265
6a21bb926e02
parent 263
aa22103809cd
child 267
d8ec2d8ffa82
equal deleted inserted replaced
264:7d67245e5121 265:6a21bb926e02
35 import de.uapcore.lightpit.types.* 35 import de.uapcore.lightpit.types.*
36 import kotlin.math.roundToInt 36 import kotlin.math.roundToInt
37 37
38 class IssueSorter(private vararg val criteria: Criteria) : Comparator<Issue> { 38 class IssueSorter(private vararg val criteria: Criteria) : Comparator<Issue> {
39 enum class Field { 39 enum class Field {
40 PHASE, ETA, UPDATED 40 STATUS, CATEGORY, ETA, UPDATED, CREATED
41 } 41 }
42 42
43 data class Criteria(val field: Field, val asc: Boolean = true) 43 data class Criteria(val field: Field, val asc: Boolean = true)
44 44
45 override fun compare(left: Issue, right: Issue): Int { 45 override fun compare(left: Issue, right: Issue): Int {
46 if (left == right) { 46 if (left == right) {
47 return 0 47 return 0
48 } 48 }
49 for (c in criteria) { 49 for (c in criteria) {
50 val result = when (c.field) { 50 val result = when (c.field) {
51 Field.PHASE -> left.status.phase.compareTo(right.status.phase) 51 Field.STATUS -> left.status.compareTo(right.status)
52 Field.ETA -> { 52 Field.CATEGORY -> left.category.compareTo(right.category)
53 val l = left.eta 53 Field.ETA -> left.compareEtaTo(right.eta)
54 val r = right.eta
55 if (l == null && r == null) 0
56 else if (l == null) 1
57 else if (r == null) -1
58 else l.compareTo(r)
59 }
60 Field.UPDATED -> left.updated.compareTo(right.updated) 54 Field.UPDATED -> left.updated.compareTo(right.updated)
55 Field.CREATED -> left.created.compareTo(right.created)
61 } 56 }
62 if (result != 0) { 57 if (result != 0) {
63 return if (c.asc) result else -result 58 return if (c.asc) result else -result
64 } 59 }
65 } 60 }

mercurial