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

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

mercurial