mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-11-13 22:15:26 +00:00
bug5264: use the *current* leg's SOG for info overlay update
This commit is contained in:
1 parent
6430c99c40
commit
55e9f62cac
3 files changed
+61
-40
No files matched your search
+38
@@ -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);
|
||||
}
|
||||
+3
-26
@@ -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> {
|
||||
|
||||
+20
-14
@@ -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;
|
||||
|
||||
Reference in new issue
Block a user