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 |