From 9d5536703cdab6ee3753da2c4bf1ce7e41bd14f3 Mon Sep 17 00:00:00 2001 From: Robert Benedikt Date: Tue, 17 Mar 2020 11:31:52 +0100 Subject: [PATCH] fix: NPE when sorting competitors by tracked position --- .../CompetitorGoalPassingComparator.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/comparators/CompetitorGoalPassingComparator.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/comparators/CompetitorGoalPassingComparator.java index b5e26d1a89a..4f8d01071d4 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/comparators/CompetitorGoalPassingComparator.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/comparators/CompetitorGoalPassingComparator.java @@ -10,13 +10,16 @@ import java.util.concurrent.ConcurrentMap; import com.sap.sailing.domain.base.Boat; import com.sap.sailing.domain.base.Competitor; import com.sap.sse.common.Util; +import com.sap.sse.common.util.NaturalComparator; public class CompetitorGoalPassingComparator implements Comparator> { private ConcurrentMap ranking; + private final NaturalComparator naturalComparator; public CompetitorGoalPassingComparator() { this.ranking = new ConcurrentHashMap<>(); + this.naturalComparator = new NaturalComparator(); } public ConcurrentMap updateWith(List> sortedList) { @@ -34,6 +37,26 @@ public class CompetitorGoalPassingComparator implements Comparator leftCompetitor, Map.Entry rightCompetitor) { Integer leftRank = this.ranking.get(leftCompetitor.getKey().getId()); Integer rightRank = this.ranking.get(rightCompetitor.getKey().getId()); + if (leftRank == null && rightRank == null) { + //Compare further properties + //Sail ID + int result = CompetitorSailIdComparator.compare(leftCompetitor.getValue().getSailID(), rightCompetitor.getValue().getSailID(), naturalComparator); + if (result == 0) { + //Short name + result = CompetitorShortNameComparator.compare(leftCompetitor.getKey().getShortName(), rightCompetitor.getKey().getShortName(), naturalComparator); + } + if (result == 0) { + //Competitor name + result = naturalComparator.compare(leftCompetitor.getKey().getName(), rightCompetitor.getKey().getName()); + } + return result; + } + if (leftRank == null) { + return 1; + } + if (rightRank == null) { + return -1; + } return leftRank - rightRank; } }