bug5264: use the *current* leg's SOG for info overlay update

This commit is contained in:
Axel Uhl committed 2020-05-01 11:29:46 +02:00
1 parent 6430c99c40
commit 55e9f62cac
3 files changed
+61 -40

No files matched your search

@@ -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<T extends Comparable<?>> implements DataExtractor<T, LeaderboardRowDTO> {
@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);
}
@@ -1904,34 +1904,11 @@ public abstract class LeaderboardPanel<LS extends LeaderboardSettings> extends A
}
}
private abstract class AbstractLastLegDetailField<T extends Comparable<?>> implements DataExtractor<T, LeaderboardRowDTO> {
private abstract class AbstractLastLegDetailField<T extends Comparable<?>> extends com.sap.sailing.gwt.ui.leaderboard.AbstractLastLegDetailField<T> {
@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<Double> {
@@ -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<String, QuickRankDTO> quickRanksFromServer) {
if (quickRanks.isEmpty() || leaderboardNotCurrentlyUpdating) {
for (final Entry<String, QuickRankDTO> 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<Double> sogProvider = new AbstractLastLegDetailField<Double>() {
@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<LegEntryDTO> legDetailsList) {
if (!legDetailsList.isEmpty()) {
LegEntryDTO legEntryDTO = legDetailsList.get(0);
if (legEntryDTO != null) {
speedInKnots = legEntryDTO.currentSpeedOverGroundInKnots;
}
}
return speedInKnots;
}
@Override
public Map<String, QuickRankDTO> getQuickRanks() {
return quickRanks;