diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/AbstractLastLegDetailField.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/AbstractLastLegDetailField.java new file mode 100644 index 00000000000..1ab847006f8 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/AbstractLastLegDetailField.java @@ -0,0 +1,38 @@ +package com.sap.sailing.gwt.ui.leaderboard; + +import com.sap.sailing.domain.common.dto.LeaderboardEntryDTO; +import com.sap.sailing.domain.common.dto.LeaderboardRowDTO; +import com.sap.sailing.domain.common.dto.LegEntryDTO; +import com.sap.sailing.gwt.ui.leaderboard.DetailTypeColumn.DataExtractor; + +public abstract class AbstractLastLegDetailField> implements DataExtractor { + @Override + public final T get(LeaderboardRowDTO row) { + T result = null; + LeaderboardEntryDTO fieldsForRace = row.fieldsByRaceColumnName.get(getRaceColumnName()); + if (fieldsForRace != null && fieldsForRace.legDetails != null) { + int lastLegIndex = fieldsForRace.legDetails.size() - 1; + if (lastLegIndex >= 0) { + LegEntryDTO lastLegDetail = fieldsForRace.legDetails.get(lastLegIndex); + // competitor may be in leg prior to the one the leader is in; find competitors current leg + while (lastLegDetail == null && lastLegIndex > 0) { + lastLegDetail = fieldsForRace.legDetails.get(--lastLegIndex); + } + if (lastLegDetail != null) { + if (lastLegDetail.finished) { + result = getAfterLastLegFinished(row); + } else { + result = getBeforeLastLegFinished(lastLegDetail); + } + } + } + } + return result; + } + + protected abstract String getRaceColumnName(); + + protected abstract T getBeforeLastLegFinished(LegEntryDTO currentLegDetail); + + protected abstract T getAfterLastLegFinished(LeaderboardRowDTO row); +} \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/LeaderboardPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/LeaderboardPanel.java index 7ba12fbda10..30a02309a94 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/LeaderboardPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/LeaderboardPanel.java @@ -1904,34 +1904,11 @@ public abstract class LeaderboardPanel extends A } } - private abstract class AbstractLastLegDetailField> implements DataExtractor { + private abstract class AbstractLastLegDetailField> extends com.sap.sailing.gwt.ui.leaderboard.AbstractLastLegDetailField { @Override - public final T get(LeaderboardRowDTO row) { - T result = null; - LeaderboardEntryDTO fieldsForRace = row.fieldsByRaceColumnName.get(getRaceColumnName()); - if (fieldsForRace != null && fieldsForRace.legDetails != null) { - int lastLegIndex = fieldsForRace.legDetails.size() - 1; - if (lastLegIndex >= 0) { - LegEntryDTO lastLegDetail = fieldsForRace.legDetails.get(lastLegIndex); - // competitor may be in leg prior to the one the leader is in; find competitors current leg - while (lastLegDetail == null && lastLegIndex > 0) { - lastLegDetail = fieldsForRace.legDetails.get(--lastLegIndex); - } - if (lastLegDetail != null) { - if (lastLegDetail.finished) { - result = getAfterLastLegFinished(row); - } else { - result = getBeforeLastLegFinished(lastLegDetail); - } - } - } - } - return result; + public String getRaceColumnName() { + return TextRaceColumn.this.getRaceColumnName(); } - - protected abstract T getBeforeLastLegFinished(LegEntryDTO currentLegDetail); - - protected abstract T getAfterLastLegFinished(LeaderboardRowDTO row); } private class RaceCurrentSpeedOverGroundInKnots extends AbstractLastLegDetailField { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/QuickFlagDataFromLeaderboardDTOProvider.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/QuickFlagDataFromLeaderboardDTOProvider.java index 119b743b08b..ace33471efd 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/QuickFlagDataFromLeaderboardDTOProvider.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/QuickFlagDataFromLeaderboardDTOProvider.java @@ -13,6 +13,7 @@ import com.sap.sailing.domain.common.dto.LeaderboardRowDTO; import com.sap.sailing.domain.common.dto.LegEntryDTO; import com.sap.sailing.domain.common.dto.RaceColumnDTO; import com.sap.sailing.gwt.ui.client.shared.racemap.RaceCompetitorSet; +import com.sap.sailing.gwt.ui.leaderboard.AbstractLastLegDetailField; import com.sap.sailing.gwt.ui.shared.QuickRankDTO; import com.sap.sse.common.Util; @@ -56,8 +57,8 @@ public class QuickFlagDataFromLeaderboardDTOProvider extends AbstractQuickFlagDa public void quickRanksReceivedFromServer(Map quickRanksFromServer) { if (quickRanks.isEmpty() || leaderboardNotCurrentlyUpdating) { for (final Entry e : quickRanksFromServer.entrySet()) { - quickRanks.put(e.getKey(), e.getValue()); - notifyListenersRankChanged(e.getKey(), /* oldQuickRank */ null, e.getValue()); + final QuickRankDTO oldQuickRank = quickRanks.put(e.getKey(), e.getValue()); + notifyListenersRankChanged(e.getKey(), oldQuickRank, e.getValue()); } } else if (!lastLeaderboardProvidedLegNumbers) { // extract at least the leg numbers and update existing quick ranks accordingly in place @@ -86,6 +87,22 @@ public class QuickFlagDataFromLeaderboardDTOProvider extends AbstractQuickFlagDa } } else { int oneBasedRank = 1; + final AbstractLastLegDetailField sogProvider = new AbstractLastLegDetailField() { + @Override + protected String getRaceColumnName() { + return raceColumnName; + } + + @Override + protected Double getBeforeLastLegFinished(LegEntryDTO currentLegDetail) { + return currentLegDetail.currentSpeedOverGroundInKnots; + } + + @Override + protected Double getAfterLastLegFinished(LeaderboardRowDTO row) { + return 0.0; + } + }; for (final CompetitorDTO c : competitorsFromBestToWorst) { if (Util.contains(raceCompetitorSet.getIdsOfCompetitorsParticipatingInRaceAsStrings(), c.getIdAsString())) { @@ -99,7 +116,7 @@ public class QuickFlagDataFromLeaderboardDTOProvider extends AbstractQuickFlagDa if (raceEntryForCompetitor != null && legDetailsList != null) { oneBasedLegNumber = raceEntryForCompetitor.getOneBasedCurrentLegNumber(); lastLeaderboardProvidedLegNumbers = true; - speedInKnots = getQuickSpeedInKnots(speedInKnots, legDetailsList); + speedInKnots = sogProvider.get(row); } else { oneBasedLegNumber = 0; lastLeaderboardProvidedLegNumbers = false; @@ -122,7 +139,6 @@ public class QuickFlagDataFromLeaderboardDTOProvider extends AbstractQuickFlagDa notifyListenersRankChanged(c.getIdAsString(), oldQuickRank, quickRankToUpdate); } oneBasedRank++; - if (speedInKnots != null) { quickSpeedsInKnots.put(c, speedInKnots); notifyListenersSpeedInKnotsChanged(c, speedInKnots); @@ -133,16 +149,6 @@ public class QuickFlagDataFromLeaderboardDTOProvider extends AbstractQuickFlagDa } } - private Double getQuickSpeedInKnots(Double speedInKnots, List legDetailsList) { - if (!legDetailsList.isEmpty()) { - LegEntryDTO legEntryDTO = legDetailsList.get(0); - if (legEntryDTO != null) { - speedInKnots = legEntryDTO.currentSpeedOverGroundInKnots; - } - } - return speedInKnots; - } - @Override public Map getQuickRanks() { return quickRanks;