diff -r 61669abf277f -r e8eecee6aadf src/main/java/de/uapcore/lightpit/viewmodel/util/IssueSorter.java --- a/src/main/java/de/uapcore/lightpit/viewmodel/util/IssueSorter.java Sat Jan 23 14:47:59 2021 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,83 +0,0 @@ -package de.uapcore.lightpit.viewmodel.util; - -import de.uapcore.lightpit.entities.Issue; -import de.uapcore.lightpit.types.IssueStatusPhase; - -import java.util.Arrays; -import java.util.Comparator; - -public class IssueSorter implements Comparator { - - public enum Field { - DONE, ETA, UPDATED - } - - public static class Criteria { - private Field field; - private boolean asc; - - public Criteria(Field field, boolean asc) { - this.field = field; - this.asc = asc; - } - - @Override - public boolean equals(Object obj) { - if (obj == null || !obj.getClass().equals(Criteria.class)) - return false; - final var other = (Criteria)obj; - return other.field.equals(field) && other.asc == asc; - } - } - - private final Criteria[] criteria; - - public IssueSorter(Criteria ... criteria) { - this.criteria = criteria; - } - - private int compare(Issue left, Issue right, Criteria criteria) { - if (left.equals(right)) - return 0; - - int result; - switch (criteria.field) { - case DONE: - result = Boolean.compare( - left.getStatus().getPhase().equals(IssueStatusPhase.Companion.getDone()), - right.getStatus().getPhase().equals(IssueStatusPhase.Companion.getDone())); - break; - case ETA: - if (left.getEta() != null && right.getEta() != null) - result = left.getEta().compareTo(right.getEta()); - else if (left.getEta() == null && right.getEta() == null) - result = 0; - else - result = left.getEta() != null ? -1 : 1; - break; - case UPDATED: - result = left.getUpdated().compareTo(right.getUpdated()); - break; - default: - throw new UnsupportedOperationException(); - } - return criteria.asc ? result : -result; - } - - @Override - public int compare(Issue left, Issue right) { - for (var c : criteria) { - int r = compare(left, right, c); - if (r != 0) return r; - } - return 0; - } - - @Override - public boolean equals(Object o) { - if (o == null || !o.getClass().equals(IssueSorter.class)) - return false; - final var other = (IssueSorter) o; - return Arrays.equals(criteria, other.criteria); - } -}