mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-28 00:16:46 +00:00
Merge remote-tracking branch 'origin/master'
This commit is contained in:
+62
-52
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -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);
|
||||
|
||||
+1
-1
@@ -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);
|
||||
|
||||
+5
-7
@@ -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());
|
||||
}
|
||||
|
||||
+7
-7
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user