Fri, 23 Oct 2020 18:40:50 +0200
migrate WebColor
package de.uapcore.lightpit.viewmodel.util; import de.uapcore.lightpit.entities.Issue; import de.uapcore.lightpit.entities.IssueStatus; import java.util.Arrays; import java.util.Comparator; public class IssueSorter implements Comparator<Issue> { 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) { int result; switch (criteria.field) { case DONE: result = Boolean.compare( left.getPhase() == IssueStatus.PHASE_DONE, right.getPhase() == IssueStatus.PHASE_DONE); break; case ETA: if (left.getEta() != null && right.getEta() != null) result = left.getEta().compareTo(right.getEta()); 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); } }