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 } |