Implemented improvements from branch bug_298, but avoided additional bugs

This commit is contained in:
Lennart Hensler committed 2012-02-17 10:45:08 +01:00
1 parent 2719712031
commit a99c13914c
1 file changed
+51 -51
@@ -120,7 +120,6 @@ implements CompetitorSelectionChangeListener, RaceSelectionChangeListener, TimeL
}
});
setWidget(busyIndicatorPanel);
List<RaceIdentifier> selectedRaces = raceSelectionProvider.getSelectedRaces();
if(!selectedRaces.isEmpty()) {
loadData();
@@ -191,56 +190,57 @@ implements CompetitorSelectionChangeListener, RaceSelectionChangeListener, TimeL
}
private void doLoadData() {
final List<CompetitorDTO> competitorsToLoad = new ArrayList<CompetitorDTO>();
// Assumption: for those competitors shown in chart we already have all data that's needed (TODO: what to do in live mode?)
// Therefore, we only need to load race data for those to be shown but not yet in the chart. Find them:
for (CompetitorDTO competitor : competitorSelectionProvider.getAllCompetitors()) {
if (isCompetitorVisible(competitor) && !seriesByCompetitor.keySet().contains(competitor)) {
competitorsToLoad.add(competitor);
}
}
if (competitorsToLoad != null && !competitorsToLoad.isEmpty()) {
final CompetitorsAndTimePointsDTO competitorsAndTimePointsToLoad = new CompetitorsAndTimePointsDTO(
getStepSize());
competitorsAndTimePointsToLoad.setStartTime(getCompetitorsAndTimePointsDTO().getStartTime());
competitorsAndTimePointsToLoad.setTimePointOfNewestEvent(getCompetitorsAndTimePointsDTO()
.getTimePointOfNewestEvent());
for (CompetitorDTO competitor : competitorsToLoad) {
competitorsAndTimePointsToLoad.setMarkPassings(competitor, getCompetitorsAndTimePointsDTO()
.getMarkPassings(competitor));
}
competitorsAndTimePointsToLoad.setCompetitors(competitorsToLoad);
AbstractChartPanel.this.sailingService.getCompetitorRaceData(getSelectedRace(),
competitorsAndTimePointsToLoad, getDataToShow(), new AsyncCallback<CompetitorInRaceDTO>() {
@Override
public void onFailure(Throwable caught) {
errorReporter.reportError(getStringMessages().failedToLoadRaceData() + ": "
+ caught.toString());
}
@Override
public void onSuccess(CompetitorInRaceDTO result) {
fireEvent(new DataLoadedEvent());
for (CompetitorDTO competitor : competitorsToLoad) {
chartData.setRaceData(competitor, result.getRaceData(competitor));
chartData.setMarkPassingData(competitor, result.getMarkPassings(competitor));
}
updateTableData(competitorsAndTimePointsToLoad.getCompetitors());
setWidget(chart);
}
});
} else {
//No data is needed to load, so display the selected competitors
//This wouldn't be done by the AsyncCallbacks, because it never reaches the onSuccess-Method
if (competitorSelectionProvider.getSelectedCompetitors().iterator().hasNext()) {
final List<CompetitorDTO> competitorsToLoad = new ArrayList<CompetitorDTO>();
List<CompetitorDTO> competitorsWhoseAlreadyLoadedDataNeedsToBeAdded = new ArrayList<CompetitorDTO>();
// Assumption: for those competitors shown in chart we already have all data that's needed (TODO: what to do in live mode?)
// Therefore, we only need to load race data for those to be shown but not yet in the chart. Find them:
for (CompetitorDTO competitor : competitorSelectionProvider.getSelectedCompetitors()) {
competitorsToLoad.add(competitor);
if (!seriesByCompetitor.keySet().contains(competitor)) {
competitorsToLoad.add(competitor);
} else {
competitorsWhoseAlreadyLoadedDataNeedsToBeAdded.add(competitor);
}
}
if (!competitorsToLoad.isEmpty()) {
setWidget(chart);
updateTableData(competitorsToLoad);
} else {
setWidget(noCompetitorsSelectedLabel);
if (competitorsToLoad != null && !competitorsToLoad.isEmpty()) {
final CompetitorsAndTimePointsDTO competitorsAndTimePointsToLoad = new CompetitorsAndTimePointsDTO(
getStepSize());
competitorsAndTimePointsToLoad.setStartTime(getCompetitorsAndTimePointsDTO().getStartTime());
competitorsAndTimePointsToLoad.setTimePointOfNewestEvent(getCompetitorsAndTimePointsDTO()
.getTimePointOfNewestEvent());
for (CompetitorDTO competitor : competitorsToLoad) {
competitorsAndTimePointsToLoad.setMarkPassings(competitor, getCompetitorsAndTimePointsDTO()
.getMarkPassings(competitor));
}
competitorsAndTimePointsToLoad.setCompetitors(competitorsToLoad);
AbstractChartPanel.this.sailingService.getCompetitorRaceData(getSelectedRace(),
competitorsAndTimePointsToLoad, getDataToShow(), new AsyncCallback<CompetitorInRaceDTO>() {
@Override
public void onFailure(Throwable caught) {
errorReporter.reportError(getStringMessages().failedToLoadRaceData() + ": "
+ caught.toString());
}
@Override
public void onSuccess(CompetitorInRaceDTO result) {
fireEvent(new DataLoadedEvent());
for (CompetitorDTO competitor : competitorsToLoad) {
chartData.setRaceData(competitor, result.getRaceData(competitor));
chartData.setMarkPassingData(competitor, result.getMarkPassings(competitor));
}
updateTableData(competitorsAndTimePointsToLoad.getCompetitors());
setWidget(chart);
}
});
}
if (competitorsWhoseAlreadyLoadedDataNeedsToBeAdded != null
&& !competitorsWhoseAlreadyLoadedDataNeedsToBeAdded.isEmpty()) {
updateTableData(competitorsWhoseAlreadyLoadedDataNeedsToBeAdded);
}
} else {
setWidget(noCompetitorsSelectedLabel);
}
}
@@ -268,8 +268,7 @@ implements CompetitorSelectionChangeListener, RaceSelectionChangeListener, TimeL
if (competitorMarkPassingSeries != null) {
chart.removeSeries(competitorMarkPassingSeries);
}
if (competitorSelectionProvider.getSelectedCompetitors() == null
|| !competitorSelectionProvider.getSelectedCompetitors().iterator().hasNext()) {
if (!competitorSelectionProvider.getSelectedCompetitors().iterator().hasNext()) {
setWidget(noCompetitorsSelectedLabel);
}
}
@@ -277,7 +276,8 @@ implements CompetitorSelectionChangeListener, RaceSelectionChangeListener, TimeL
private synchronized void updateTableData(List<CompetitorDTO> competitors) {
//Make sure the busy indicator is removed at this point, or plotting the data results in an exception
setWidget(chart);
if (getCompetitorsAndTimePointsDTO() != null && chartData != null) {
if (getCompetitorsAndTimePointsDTO() != null && chartData != null
&& competitors != null && !competitors.isEmpty()) {
//Clearing the series to keep the chart clean
chart.removeAllSeries();
for (CompetitorDTO competitor : competitors) {