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 STATUS, CATEGORY, ETA, UPDATED, CREATED |
40 DONE, PHASE, 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) |
|
52 Field.DONE -> (left.status.phase == IssueStatusPhase.Done).compareTo(right.status.phase == IssueStatusPhase.Done) |
51 Field.STATUS -> left.status.compareTo(right.status) |
53 Field.STATUS -> left.status.compareTo(right.status) |
52 Field.CATEGORY -> left.category.compareTo(right.category) |
54 Field.CATEGORY -> left.category.compareTo(right.category) |
53 Field.ETA -> left.compareEtaTo(right.eta) |
55 Field.ETA -> left.compareEtaTo(right.eta) |
54 Field.UPDATED -> left.updated.compareTo(right.updated) |
56 Field.UPDATED -> left.updated.compareTo(right.updated) |
55 Field.CREATED -> left.created.compareTo(right.created) |
57 Field.CREATED -> left.created.compareTo(right.created) |