first time showing a rank chart

This commit is contained in:
Axel Uhl
2012-11-16 22:35:13 +01:00
parent 86de8211b7
commit ca65ea55f6
10 changed files with 47 additions and 13 deletions
@@ -344,5 +344,7 @@ public interface Leaderboard extends Named {
*/
Double getTotalPoints(Competitor competitor, RaceColumn raceColumn, Iterable<RaceColumn> raceColumnsToConsider,
TimePoint timePoint) throws NoWindException;
TimePoint getNowMinusDelay();
}
@@ -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;
}
}
@@ -435,4 +435,5 @@ public interface StringMessages extends Messages {
String live();
String afterRace();
String errorFetchingRankingChartData(String message);
String loadingCompetitorData();
}
@@ -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...
@@ -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
@@ -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));
}
}
@@ -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();
@@ -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));
@@ -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());
@@ -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()));
}
});