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

Fri, 23 Oct 2020 11:44:02 +0200

author
Mike Becker <universe@uap-core.de>
date
Fri, 23 Oct 2020 11:44:02 +0200
changeset 143
4a391ffa30d3
parent 141
8160dfc4dbc3
child 150
822b7e3d064d
permissions
-rw-r--r--

fixes bug in IssueSorter where ETA did not get sorted correctly

universe@121 1 package de.uapcore.lightpit.viewmodel.util;
universe@121 2
universe@121 3 import de.uapcore.lightpit.entities.Issue;
universe@121 4 import de.uapcore.lightpit.entities.IssueStatus;
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@121 40 int result;
universe@121 41 switch (criteria.field) {
universe@141 42 case DONE:
universe@121 43 result = Boolean.compare(
universe@121 44 left.getPhase() == IssueStatus.PHASE_DONE,
universe@121 45 right.getPhase() == IssueStatus.PHASE_DONE);
universe@121 46 break;
universe@121 47 case ETA:
universe@121 48 if (left.getEta() != null && right.getEta() != null)
universe@121 49 result = left.getEta().compareTo(right.getEta());
universe@121 50 else
universe@143 51 result = left.getEta() != null ? -1 : 1;
universe@121 52 break;
universe@121 53 case UPDATED:
universe@121 54 result = left.getUpdated().compareTo(right.getUpdated());
universe@121 55 break;
universe@121 56 default:
universe@121 57 throw new UnsupportedOperationException();
universe@121 58 }
universe@121 59 return criteria.asc ? result : -result;
universe@121 60 }
universe@121 61
universe@121 62 @Override
universe@121 63 public int compare(Issue left, Issue right) {
universe@121 64 for (var c : criteria) {
universe@121 65 int r = compare(left, right, c);
universe@121 66 if (r != 0) return r;
universe@121 67 }
universe@121 68 return 0;
universe@121 69 }
universe@121 70
universe@121 71 @Override
universe@121 72 public boolean equals(Object o) {
universe@121 73 if (o == null || !o.getClass().equals(IssueSorter.class))
universe@121 74 return false;
universe@121 75 final var other = (IssueSorter) o;
universe@121 76 return Arrays.equals(criteria, other.criteria);
universe@121 77 }
universe@121 78 }

mercurial