src/main/java/de/uapcore/lightpit/viewmodel/util/IssueSorter.java

Fri, 18 Dec 2020 16:16:54 +0100

author
Mike Becker <universe@uap-core.de>
date
Fri, 18 Dec 2020 16:16:54 +0100
changeset 165
b1fc8aed5969
parent 155
3ace475224f7
child 167
3f30adba1c63
permissions
-rw-r--r--

Add mailto link to the display name above comments - fixes #112

universe@121 1 package de.uapcore.lightpit.viewmodel.util;
universe@121 2
universe@121 3 import de.uapcore.lightpit.entities.Issue;
universe@150 4 import de.uapcore.lightpit.entities.IssueStatusPhase;
universe@121 5
universe@121 6 import java.util.Arrays;
universe@121 7 import java.util.Comparator;
universe@121 8
universe@121 9 public class IssueSorter implements Comparator<Issue> {
universe@121 10
universe@121 11 public enum Field {
universe@141 12 DONE, ETA, UPDATED
universe@121 13 }
universe@121 14
universe@121 15 public static class Criteria {
universe@121 16 private Field field;
universe@121 17 private boolean asc;
universe@121 18
universe@121 19 public Criteria(Field field, boolean asc) {
universe@121 20 this.field = field;
universe@121 21 this.asc = asc;
universe@121 22 }
universe@121 23
universe@121 24 @Override
universe@121 25 public boolean equals(Object obj) {
universe@121 26 if (obj == null || !obj.getClass().equals(Criteria.class))
universe@121 27 return false;
universe@121 28 final var other = (Criteria)obj;
universe@121 29 return other.field.equals(field) && other.asc == asc;
universe@121 30 }
universe@121 31 }
universe@121 32
universe@121 33 private final Criteria[] criteria;
universe@121 34
universe@121 35 public IssueSorter(Criteria ... criteria) {
universe@121 36 this.criteria = criteria;
universe@121 37 }
universe@121 38
universe@121 39 private int compare(Issue left, Issue right, Criteria criteria) {
universe@155 40 if (left.equals(right))
universe@155 41 return 0;
universe@155 42
universe@121 43 int result;
universe@121 44 switch (criteria.field) {
universe@141 45 case DONE:
universe@121 46 result = Boolean.compare(
universe@150 47 left.getStatus().getPhase().equals(IssueStatusPhase.Companion.getDone()),
universe@150 48 right.getStatus().getPhase().equals(IssueStatusPhase.Companion.getDone()));
universe@121 49 break;
universe@121 50 case ETA:
universe@121 51 if (left.getEta() != null && right.getEta() != null)
universe@121 52 result = left.getEta().compareTo(right.getEta());
universe@155 53 else if (left.getEta() == null && right.getEta() == null)
universe@155 54 result = 0;
universe@121 55 else
universe@143 56 result = left.getEta() != null ? -1 : 1;
universe@121 57 break;
universe@121 58 case UPDATED:
universe@121 59 result = left.getUpdated().compareTo(right.getUpdated());
universe@121 60 break;
universe@121 61 default:
universe@121 62 throw new UnsupportedOperationException();
universe@121 63 }
universe@121 64 return criteria.asc ? result : -result;
universe@121 65 }
universe@121 66
universe@121 67 @Override
universe@121 68 public int compare(Issue left, Issue right) {
universe@121 69 for (var c : criteria) {
universe@121 70 int r = compare(left, right, c);
universe@121 71 if (r != 0) return r;
universe@121 72 }
universe@121 73 return 0;
universe@121 74 }
universe@121 75
universe@121 76 @Override
universe@121 77 public boolean equals(Object o) {
universe@121 78 if (o == null || !o.getClass().equals(IssueSorter.class))
universe@121 79 return false;
universe@121 80 final var other = (IssueSorter) o;
universe@121 81 return Arrays.equals(criteria, other.criteria);
universe@121 82 }
universe@121 83 }

mercurial