mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-27 16:06:39 +00:00
first time showing a rank chart
This commit is contained in:
@@ -344,5 +344,7 @@ public interface Leaderboard extends Named {
|
||||
*/
|
||||
Double getTotalPoints(Competitor competitor, RaceColumn raceColumn, Iterable<RaceColumn> raceColumnsToConsider,
|
||||
TimePoint timePoint) throws NoWindException;
|
||||
|
||||
TimePoint getNowMinusDelay();
|
||||
|
||||
}
|
||||
|
||||
+9
@@ -16,6 +16,7 @@ import com.sap.sailing.domain.base.Fleet;
|
||||
import com.sap.sailing.domain.base.Leg;
|
||||
import com.sap.sailing.domain.base.RaceColumn;
|
||||
import com.sap.sailing.domain.base.RaceColumnListener;
|
||||
import com.sap.sailing.domain.base.impl.MillisecondsTimePoint;
|
||||
import com.sap.sailing.domain.common.LegType;
|
||||
import com.sap.sailing.domain.common.MaxPointsReason;
|
||||
import com.sap.sailing.domain.common.NoWindException;
|
||||
@@ -673,4 +674,12 @@ public abstract class AbstractSimpleLeaderboardImpl implements Leaderboard, Race
|
||||
}
|
||||
getScoreCorrection().notifyListenersAboutIsSuppressedChange(competitor, suppressed);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TimePoint getNowMinusDelay() {
|
||||
final MillisecondsTimePoint now = MillisecondsTimePoint.now();
|
||||
final Long delayToLiveInMillis = getDelayToLiveInMillis();
|
||||
TimePoint timePoint = delayToLiveInMillis == null ? now : now.minus(delayToLiveInMillis);
|
||||
return timePoint;
|
||||
}
|
||||
}
|
||||
|
||||
+1
@@ -435,4 +435,5 @@ public interface StringMessages extends Messages {
|
||||
String live();
|
||||
String afterRace();
|
||||
String errorFetchingRankingChartData(String message);
|
||||
String loadingCompetitorData();
|
||||
}
|
||||
|
||||
+2
-1
@@ -435,4 +435,5 @@ pattern=Pattern
|
||||
legend=Legend
|
||||
live=live
|
||||
afterRace=after race
|
||||
errorFetchingRankingChartData=Error fetching ranking chart data: {0}
|
||||
errorFetchingRankingChartData=Error fetching ranking chart data: {0}
|
||||
loadingCompetitorData=Loading competitor data...
|
||||
+2
-1
@@ -436,4 +436,5 @@ pattern=Muster
|
||||
legend=Legende
|
||||
live=live
|
||||
afterRace=nach Rennen
|
||||
errorFetchingRankingChartData=Fehler beim Laden der Daten für das Ranglisten-Chart: {0}
|
||||
errorFetchingRankingChartData=Fehler beim Laden der Daten für das Ranglisten-Chart: {0}
|
||||
loadingCompetitorData=Lade Teilnehmer-Daten
|
||||
+5
@@ -1,5 +1,6 @@
|
||||
package com.sap.sailing.gwt.ui.leaderboard;
|
||||
|
||||
import com.google.gwt.user.client.Window;
|
||||
import com.google.gwt.user.client.ui.Label;
|
||||
import com.sap.sailing.gwt.ui.client.CompetitorSelectionProvider;
|
||||
import com.sap.sailing.gwt.ui.client.ErrorReporter;
|
||||
@@ -11,6 +12,10 @@ public class RankChartDialog extends DialogBoxExt {
|
||||
public RankChartDialog(SailingServiceAsync sailingService, String leaderboardName, CompetitorSelectionProvider competitorSelectionProvider,
|
||||
StringMessages stringMessages, ErrorReporter errorReporter, boolean compactChart) {
|
||||
super(new Label(stringMessages.close()));
|
||||
this.setPopupPosition(15, 15);
|
||||
this.setHTML(stringMessages.compareCompetitors());
|
||||
this.setWidth(Window.getClientWidth() - 250 + "px");
|
||||
this.setAnimationEnabled(true);
|
||||
setWidget(new LeaderboardRankChart(sailingService, leaderboardName, competitorSelectionProvider, stringMessages, errorReporter, compactChart));
|
||||
}
|
||||
}
|
||||
|
||||
-7
@@ -139,13 +139,6 @@ public class LiveLeaderboardUpdater implements Runnable {
|
||||
return result;
|
||||
}
|
||||
|
||||
TimePoint getNowMinusDelay() {
|
||||
final MillisecondsTimePoint now = MillisecondsTimePoint.now();
|
||||
final Long delayToLiveInMillis = getLeaderboard().getDelayToLiveInMillis();
|
||||
TimePoint timePoint = delayToLiveInMillis == null ? now : now.minus(delayToLiveInMillis);
|
||||
return timePoint;
|
||||
}
|
||||
|
||||
private synchronized void ensureRunning() {
|
||||
if (!running) {
|
||||
start();
|
||||
|
||||
+15
-2
@@ -417,7 +417,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
|
||||
leaderboardByNameLiveUpdaters.put(leaderboardName, liveLeaderboardUpdater);
|
||||
}
|
||||
}
|
||||
final TimePoint nowMinusDelay = liveLeaderboardUpdater.getNowMinusDelay();
|
||||
final TimePoint nowMinusDelay = leaderboard.getNowMinusDelay();
|
||||
final TimePoint timePointOfLatestModification = leaderboard.getTimePointOfLatestModification();
|
||||
if (timePointOfLatestModification != null && !nowMinusDelay.before(timePointOfLatestModification)) {
|
||||
timePoint = timePointOfLatestModification;
|
||||
@@ -2802,7 +2802,20 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
|
||||
@Override
|
||||
public List<Pair<String, List<CompetitorDTO>>> getRankedCompetitorsFromBestToWorstAfterEachRaceColumn(String leaderboardName, Date date) throws NoWindException {
|
||||
Leaderboard leaderboard = getService().getLeaderboardByName(leaderboardName);
|
||||
Map<RaceColumn, List<Competitor>> preResult = leaderboard.getRankedCompetitorsFromBestToWorstAfterEachRaceColumn(new MillisecondsTimePoint(date));
|
||||
final TimePoint timePoint;
|
||||
if (date == null) {
|
||||
final TimePoint nowMinusDelay = leaderboard.getNowMinusDelay();
|
||||
final TimePoint timePointOfLatestModification = leaderboard.getTimePointOfLatestModification();
|
||||
if (timePointOfLatestModification != null && !nowMinusDelay.before(timePointOfLatestModification)) {
|
||||
timePoint = timePointOfLatestModification;
|
||||
} else {
|
||||
timePoint = nowMinusDelay;
|
||||
}
|
||||
} else {
|
||||
timePoint = new MillisecondsTimePoint(date);
|
||||
}
|
||||
Map<RaceColumn, List<Competitor>> preResult = leaderboard
|
||||
.getRankedCompetitorsFromBestToWorstAfterEachRaceColumn(timePoint);
|
||||
List<Pair<String, List<CompetitorDTO>>> result = new ArrayList<Util.Pair<String,List<CompetitorDTO>>>();
|
||||
for (RaceColumn raceColumn : leaderboard.getRaceColumns()) {
|
||||
List<CompetitorDTO> competitorList = getCompetitorDTOList(preResult.get(raceColumn));
|
||||
|
||||
+1
-1
@@ -229,7 +229,7 @@ implements CompetitorSelectionChangeListener, RequiresResize {
|
||||
needToLoadWhenMadeVisible = false; // we're loading it now
|
||||
if (showBusyIndicator) {
|
||||
setWidget(chart);
|
||||
showLoading("Loading competitor data...");
|
||||
showLoading(stringMessages.loadingCompetitorData());
|
||||
}
|
||||
if (chartData == null || chartData.getDetailType() != getDataToShow()) {
|
||||
chartData = new MultiCompetitorRaceDataDTO(getDataToShow());
|
||||
|
||||
+10
-1
@@ -1,6 +1,7 @@
|
||||
package com.sap.sailing.gwt.ui.shared.charts;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -73,7 +74,7 @@ public class LeaderboardRankChart extends SimplePanel {
|
||||
}
|
||||
}));
|
||||
chart.getYAxis(0).setAxisTitleText(stringMessages.rank()).setStartOnTick(true).setShowFirstLabel(false)
|
||||
/* TODO is a custom formatter required if it only returns the axis label data again?
|
||||
/* TODO do we need a specific formatter if we don't really format anything?
|
||||
.setLabels(new YAxisLabels().setFormatter(new AxisLabelsFormatter() {
|
||||
@Override
|
||||
public String format(AxisLabelsData axisLabelsData) {
|
||||
@@ -88,15 +89,19 @@ public class LeaderboardRankChart extends SimplePanel {
|
||||
.getXAxis().setAxisTitle(null);
|
||||
}
|
||||
setSize("100%", "100%");
|
||||
setWidget(chart);
|
||||
loadChartData(leaderboardName, stringMessages, errorReporter, sailingService);
|
||||
}
|
||||
|
||||
private void loadChartData(String leaderboardName, final StringMessages stringMessages,
|
||||
final ErrorReporter errorReporter, SailingServiceAsync sailingService) {
|
||||
chart.showLoading(stringMessages.loadingCompetitorData());
|
||||
sailingService.getRankedCompetitorsFromBestToWorstAfterEachRaceColumn(leaderboardName,
|
||||
/* date: null means "now" or "live" */ null, new AsyncCallback<List<Pair<String,List<CompetitorDTO>>>>() {
|
||||
@Override
|
||||
public void onSuccess(List<Pair<String, List<CompetitorDTO>>> result) {
|
||||
List<Series> chartSeries = Arrays.asList(chart.getSeries());
|
||||
chart.hideLoading();
|
||||
raceColumnNames.clear();
|
||||
int raceNumber = 0;
|
||||
for (Pair<String, List<CompetitorDTO>> entry : result) {
|
||||
@@ -104,6 +109,9 @@ public class LeaderboardRankChart extends SimplePanel {
|
||||
int rank = 1;
|
||||
for (CompetitorDTO competitor : entry.getB()) {
|
||||
Series series = getOrCreateSeries(competitor);
|
||||
if (!chartSeries.contains(series)) {
|
||||
chart.addSeries(series);
|
||||
}
|
||||
series.addPoint(raceNumber, rank);
|
||||
rank++;
|
||||
}
|
||||
@@ -113,6 +121,7 @@ public class LeaderboardRankChart extends SimplePanel {
|
||||
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
chart.hideLoading();
|
||||
errorReporter.reportError(stringMessages.errorFetchingRankingChartData(caught.getMessage()));
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user