Merge remote-tracking branch 'origin/master'

This commit is contained in:
fmittag
2012-02-17 10:48:20 +01:00
5 changed files with 76 additions and 68 deletions
@@ -120,7 +120,6 @@ implements CompetitorSelectionChangeListener, RaceSelectionChangeListener, TimeL
}
});
setWidget(busyIndicatorPanel);
List<RaceIdentifier> selectedRaces = raceSelectionProvider.getSelectedRaces();
if(!selectedRaces.isEmpty()) {
loadData();
@@ -191,46 +190,58 @@ 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 (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()) {
if (!seriesByCompetitor.keySet().contains(competitor)) {
competitorsToLoad.add(competitor);
} else {
competitorsWhoseAlreadyLoadedDataNeedsToBeAdded.add(competitor);
}
}
}
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.toArray(new CompetitorDTO[0]));
AbstractChartPanel.this.sailingService.getCompetitorRaceData(getSelectedRace(), competitorsAndTimePointsToLoad,
getDataToShow(), new AsyncCallback<CompetitorInRaceDTO>() {
@Override
public void onFailure(Throwable caught) {
errorReporter.reportError(getStringMessages().failedToLoadRaceData() + ": " + caught.toString());
}
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());
if (competitorSelectionProvider.getSelectedCompetitors() != null
&& competitorSelectionProvider.getSelectedCompetitors().iterator().hasNext()) {
setWidget(chart);
} else {
setWidget(noCompetitorsSelectedLabel);
}
}
});
@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);
}
}
private RaceIdentifier getSelectedRace() {
@@ -257,30 +268,32 @@ 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);
}
}
private synchronized void updateTableData(CompetitorDTO[] competitorDTOs) {
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) {
for (CompetitorDTO competitor : competitorDTOs) {
if (getCompetitorsAndTimePointsDTO() != null && chartData != null
&& competitors != null && !competitors.isEmpty()) {
//Clearing the series to keep the chart clean
chart.removeAllSeries();
for (CompetitorDTO competitor : competitors) {
Series compSeries = getCompetitorSeries(competitor);
seriesIsUsed.add(compSeries);
Series markSeries = getCompetitorMarkPassingSeries(competitor);
seriesIsUsed.add(markSeries);
if (isCompetitorVisible(competitor) && chartData.getRaceData(competitor) != null) {
long starttime = System.currentTimeMillis();
Pair<String, Long>[] markPassingTimes = getCompetitorsAndTimePointsDTO().getMarkPassings(competitor);
List<Pair<String, Long>> markPassingTimes = getCompetitorsAndTimePointsDTO().getMarkPassings(competitor);
List<Point> markPassingPoints = new ArrayList<Point>();
Double[] markPassingValues = chartData.getMarkPassings(competitor);
for (int j = 0; j < markPassingTimes.length; j++) {
if (markPassingValues[j] != null && markPassingTimes[j].getB() != null) {
Point markPassingPoint = new Point(markPassingTimes[j].getB(), markPassingValues[j]);
markPassingPoint.setName(markPassingTimes[j].getA());
for (int j = 0; j < markPassingTimes.size(); j++) {
if (markPassingValues[j] != null && markPassingTimes.get(j).getB() != null) {
Point markPassingPoint = new Point(markPassingTimes.get(j).getB(), markPassingValues[j]);
markPassingPoint.setName(markPassingTimes.get(j).getA());
markPassingPoints.add(markPassingPoint);
}
}
@@ -303,9 +316,6 @@ implements CompetitorSelectionChangeListener, RaceSelectionChangeListener, TimeL
if (isCompetitorVisible(competitor)) {
chart.addSeries(compSeries);
chart.addSeries(markSeries);
} else {
chart.removeSeries(compSeries);
chart.removeSeries(markSeries);
}
}
}
@@ -58,7 +58,7 @@ public class LeaderboardEntryPoint extends AbstractEntryPoint {
LeaderboardPanel leaderboardPanel = new LeaderboardPanel(sailingService,
LeaderboardSettingsFactory.getInstance().createNewDefaultSettings(/* autoExpandFirstRace */ false),
/* preSelectedRace */ null, new CompetitorSelectionModel(/* hasMultiSelection */ true),
new Timer(PlayModes.Live, /* delayBetweenAutoAdvancesInMilliseconds */3000l),
new Timer(PlayModes.Replay, /* delayBetweenAutoAdvancesInMilliseconds */3000l),
leaderboardName, leaderboardGroupName,
LeaderboardEntryPoint.this, stringMessages, userAgentType);
RootPanel.get().add(logoAndTitlePanel);
@@ -160,7 +160,7 @@ public class RaceBoardPanel extends FormPanel implements EventDisplayer, RaceSel
// ChartPanel competitorCharts = new ChartPanel(sailingService, competitorSelectionModel, raceSelectionProvider,
// timer, DetailType.WINDWARD_DISTANCE_TO_OVERALL_LEADER, stringMessages, errorReporter);
// CollapsableComponentViewer<ChartSettings> chartViewer = new CollapsableComponentViewer<ChartSettings>(
// competitorCharts, "auto", "500px", stringMessages);
// competitorCharts, "auto", "400px", stringMessages);
MultiChartPanel competitorCharts = new MultiChartPanel(sailingService, competitorSelectionModel, raceSelectionProvider,
timer, stringMessages, errorReporter);
@@ -1357,10 +1357,10 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
entries[i] = getCompetitorRaceDataEntry(dataType, trackedRace, competitor, time);
}
competitorData.setRaceData(competitorDTO, entries);
entries = new Double[competitorAndTimePointsDTO.getMarkPassings(competitorDTO).length];
for (int i = 0; i < competitorAndTimePointsDTO.getMarkPassings(competitorDTO).length; i++) {
entries = new Double[competitorAndTimePointsDTO.getMarkPassings(competitorDTO).size()];
for (int i = 0; i < competitorAndTimePointsDTO.getMarkPassings(competitorDTO).size(); i++) {
MillisecondsTimePoint time = new MillisecondsTimePoint(
competitorAndTimePointsDTO.getMarkPassings(competitorDTO)[i].getB());
competitorAndTimePointsDTO.getMarkPassings(competitorDTO).get(i).getB());
entries[i] = getCompetitorRaceDataEntry(dataType, trackedRace, competitor, time);
}
competitorData.setMarkPassingData(competitorDTO, entries);
@@ -1504,7 +1504,6 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
return (Event) eventIdentifier.getEvent(this);
}
@SuppressWarnings("unchecked")
@Override
public CompetitorsAndTimePointsDTO getCompetitorsAndTimePoints(RaceIdentifier race, long stepSize) {
CompetitorsAndTimePointsDTO competitorAndTimePointsDTO = new CompetitorsAndTimePointsDTO(stepSize);
@@ -1521,10 +1520,9 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
competitors.add(getCompetitorDTO(competitor));
// The following line will create a "Unchecked type safety warning".
// There is no way to solve this, so it is okay to suppress this warning.
competitorAndTimePointsDTO.setMarkPassings(getCompetitorDTO(competitor),
markPassingTimes.toArray(new Pair[0]));
competitorAndTimePointsDTO.setMarkPassings(getCompetitorDTO(competitor), markPassingTimes);
}
competitorAndTimePointsDTO.setCompetitors(competitors.toArray(new CompetitorDTO[0]));
competitorAndTimePointsDTO.setCompetitors(competitors);
competitorAndTimePointsDTO.setStartTime(trackedRace.getStart().asMillis());
competitorAndTimePointsDTO.setTimePointOfNewestEvent(trackedRace.getTimePointOfNewestEvent().asMillis());
}
@@ -25,8 +25,8 @@ import com.sap.sailing.gwt.ui.client.SailingService;
public class CompetitorsAndTimePointsDTO implements IsSerializable {
private static final long MILLISECONDS_BEFORE_RACE_TO_INCLUDE = 20000;
private CompetitorDTO[] competitors;
private HashMap<String, Pair<String, Long>[]> markPassings;
private List<CompetitorDTO> competitors;
private HashMap<String, List<Pair<String, Long>>> markPassings;
private long startTime;
private long timePointOfNewestEvent;
private long stepSize;
@@ -34,7 +34,7 @@ public class CompetitorsAndTimePointsDTO implements IsSerializable {
CompetitorsAndTimePointsDTO() {}
public CompetitorsAndTimePointsDTO(long stepSize) {
markPassings = new HashMap<String, Pair<String, Long>[]>();
markPassings = new HashMap<String, List<Pair<String, Long>>>();
this.stepSize = stepSize;
}
@@ -46,11 +46,11 @@ public class CompetitorsAndTimePointsDTO implements IsSerializable {
return result;
}
public CompetitorDTO[] getCompetitors() {
public List<CompetitorDTO> getCompetitors() {
return competitors;
}
public void setCompetitors(CompetitorDTO[] competitors) {
public void setCompetitors(List<CompetitorDTO> competitors) {
this.competitors = competitors;
}
@@ -62,11 +62,11 @@ public class CompetitorsAndTimePointsDTO implements IsSerializable {
this.startTime = startTime;
}
public Pair<String, Long>[] getMarkPassings(CompetitorDTO competitor) {
public List<Pair<String, Long>> getMarkPassings(CompetitorDTO competitor) {
return markPassings.get(competitor.id);
}
public void setMarkPassings(CompetitorDTO competitor, Pair<String, Long>[] markPassings) {
public void setMarkPassings(CompetitorDTO competitor, List<Pair<String, Long>> markPassings) {
this.markPassings.put(competitor.id, markPassings);
}