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

changeset 249
6bded7090719
parent 228
d68b08c8f6d0
equal deleted inserted replaced
248:90dc13c78b5d 249:6bded7090719
1 /*
2 * Copyright 2021 Mike Becker. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are met:
6 *
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 *
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 *
14 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
15 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
17 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
20 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
21 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
22 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 */
25
26 package de.uapcore.lightpit.util
27
28 import de.uapcore.lightpit.entities.Issue
29 import de.uapcore.lightpit.types.IssueStatusPhase
30
31 data class IssueSorter(val criteria: List<Criteria>) : Comparator<Issue> {
32 enum class Field {
33 DONE, ETA, UPDATED
34 }
35
36 data class Criteria(val field: Field, val asc: Boolean = true)
37
38 companion object {
39 val DEFAULT_ISSUE_SORTER = IssueSorter(listOf(
40 Criteria(Field.DONE),
41 Criteria(Field.ETA),
42 Criteria(Field.UPDATED, false)
43 ))
44 }
45
46 override fun compare(left: Issue, right: Issue): Int {
47 if (left == right) {
48 return 0;
49 }
50 for (c in criteria) {
51 val result = when (c.field) {
52 Field.DONE -> (left.status.phase == IssueStatusPhase.Done).compareTo(right.status.phase == IssueStatusPhase.Done)
53 Field.ETA -> {
54 val l = left.eta
55 val r = right.eta
56 if (l == null && r == null) 0
57 else if (l == null) 1
58 else if (r == null) -1
59 else l.compareTo(r)
60 }
61 Field.UPDATED -> left.updated.compareTo(right.updated)
62 }
63 if (result != 0) {
64 return if (c.asc) result else -result
65 }
66 }
67 return 0
68 }
69 }
70

mercurial