mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-05 20:03:52 +00:00
Merge branch 'race-identifiers' into gwt
This commit is contained in:
commit
bfa7204edc
18 files changed
+444
-281
No files matched your search
@@ -1,22 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<launchConfiguration type="com.google.gwt.eclipse.core.launch.gwtJUnit">
|
||||
<stringAttribute key="com.google.gwt.eclipse.core.LOG_LEVEL" value="INFO"/>
|
||||
<booleanAttribute key="com.google.gwt.eclipse.core.NOT_HEADLESS" value="false"/>
|
||||
<stringAttribute key="com.google.gwt.eclipse.core.OUT_DIR" value="www-test"/>
|
||||
<booleanAttribute key="com.google.gwt.eclipse.core.STANDARDS_MODE" value="false"/>
|
||||
<stringAttribute key="com.google.gwt.eclipse.core.STYLE" value="OBFUSCATED"/>
|
||||
<stringAttribute key="com.google.gwt.eclipse.core.WEB_MODE" value="false"/>
|
||||
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
|
||||
<listEntry value="/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/GwtTestCaseColumnToggling.java"/>
|
||||
</listAttribute>
|
||||
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
|
||||
<listEntry value="1"/>
|
||||
</listAttribute>
|
||||
<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/>
|
||||
<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
|
||||
<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/>
|
||||
<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="com.google.gwt.eclipse.core.moduleClasspathProvider"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.sap.sailing.gwt.ui.test.GwtTestCaseColumnToggling"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="com.sap.sailing.gwt.ui.test"/>
|
||||
</launchConfiguration>
|
||||
+3
-2
@@ -10,6 +10,7 @@ import com.google.gwt.user.cellview.client.Column;
|
||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
import com.sap.sailing.gwt.ui.client.ExpandableSortableColumn;
|
||||
import com.sap.sailing.gwt.ui.client.StringConstants;
|
||||
import com.sap.sailing.gwt.ui.shared.EventNameAndRaceName;
|
||||
import com.sap.sailing.gwt.ui.shared.LeaderboardDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.LeaderboardRowDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.Pair;
|
||||
@@ -133,8 +134,8 @@ public class GwtTestCaseColumnToggling extends GWTTestCase {
|
||||
}
|
||||
|
||||
private void linkTrackedRace(){
|
||||
service.connectTrackedRaceToLeaderboardColumn(LEADERBOARD_NAME, COLUMN1_NAME, EVENT_NAME, TRACKED_RACE, new AsyncCallback<Void>() {
|
||||
|
||||
service.connectTrackedRaceToLeaderboardColumn(LEADERBOARD_NAME, COLUMN1_NAME, new EventNameAndRaceName(EVENT_NAME, TRACKED_RACE),
|
||||
new AsyncCallback<Void>() {
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
fail("Failed to link race.");
|
||||
|
||||
+2
-1
@@ -23,6 +23,7 @@ import com.google.gwt.user.client.ui.TextBox;
|
||||
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||
import com.sap.sailing.gwt.ui.client.DataEntryDialog.Validator;
|
||||
import com.sap.sailing.gwt.ui.shared.EventDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.EventNameAndRaceName;
|
||||
import com.sap.sailing.gwt.ui.shared.LeaderboardDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.Pair;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceDAO;
|
||||
@@ -747,7 +748,7 @@ public class LeaderboardConfigPanel extends FormPanel implements EventDisplayer,
|
||||
|
||||
private void linkTrackedRaceForRaceColumn(final Triple<EventDAO, RegattaDAO, RaceDAO> selectedRace) {
|
||||
sailingService.connectTrackedRaceToLeaderboardColumn(getSelectedLeaderboardName(), getSelectedRaceColumnName(),
|
||||
selectedRace.getA().name, selectedRace.getC().name, new AsyncCallback<Void>() {
|
||||
new EventNameAndRaceName(selectedRace.getA().name, selectedRace.getC().name), new AsyncCallback<Void>() {
|
||||
@Override
|
||||
public void onFailure(Throwable t) {
|
||||
errorReporter.reportError("Error trying to link tracked race " + selectedRace.getC().name
|
||||
|
||||
+5
-4
@@ -53,6 +53,7 @@ import com.google.gwt.user.client.ui.VerticalPanel;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
import com.sap.sailing.gwt.ui.shared.CompetitorDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.EventDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.EventNameAndRaceName;
|
||||
import com.sap.sailing.gwt.ui.shared.GPSFixDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.ManeuverDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.MarkDAO;
|
||||
@@ -367,7 +368,7 @@ public class RaceMapPanel extends FormPanel implements EventDisplayer, TimeListe
|
||||
RaceDAO race = selection.get(selection.size() - 1).getC();
|
||||
if (event != null && race != null) {
|
||||
final Triple<Map<CompetitorDAO, Date>, Map<CompetitorDAO, Date>, Map<CompetitorDAO, Boolean>> fromAndToAndOverlap = computeFromAndTo(date);
|
||||
sailingService.getBoatPositions(event.name, race.name, fromAndToAndOverlap.getA(),
|
||||
sailingService.getBoatPositions(new EventNameAndRaceName(event.name, race.name), fromAndToAndOverlap.getA(),
|
||||
fromAndToAndOverlap.getB(), true, new AsyncCallback<Map<CompetitorDAO, List<GPSFixDAO>>>() {
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
@@ -387,7 +388,7 @@ public class RaceMapPanel extends FormPanel implements EventDisplayer, TimeListe
|
||||
}
|
||||
}
|
||||
});
|
||||
sailingService.getMarkPositions(event.name, race.name, date, new AsyncCallback<List<MarkDAO>>() {
|
||||
sailingService.getMarkPositions(new EventNameAndRaceName(event.name, race.name), date, new AsyncCallback<List<MarkDAO>>() {
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
errorReporter.reportError("Error trying to obtain mark positions: " + caught.getMessage());
|
||||
@@ -398,7 +399,7 @@ public class RaceMapPanel extends FormPanel implements EventDisplayer, TimeListe
|
||||
showMarksOnMap(result);
|
||||
}
|
||||
});
|
||||
sailingService.getQuickRanks(event.name, race.name, date, new AsyncCallback<List<QuickRankDAO>>() {
|
||||
sailingService.getQuickRanks(new EventNameAndRaceName(event.name, race.name), date, new AsyncCallback<List<QuickRankDAO>>() {
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
errorReporter.reportError("Error obtaining quick rankings: " + caught.getMessage());
|
||||
@@ -832,7 +833,7 @@ public class RaceMapPanel extends FormPanel implements EventDisplayer, TimeListe
|
||||
}
|
||||
});
|
||||
*/
|
||||
sailingService.getManeuvers(event.name, race.name, from, to,
|
||||
sailingService.getManeuvers(new EventNameAndRaceName(event.name, race.name), from, to,
|
||||
new AsyncCallback<Map<CompetitorDAO, List<ManeuverDAO>>>() {
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
|
||||
+17
-14
@@ -8,7 +8,9 @@ import java.util.Map;
|
||||
import com.google.gwt.user.client.rpc.RemoteService;
|
||||
import com.google.gwt.user.client.rpc.RemoteServiceRelativePath;
|
||||
import com.sap.sailing.gwt.ui.shared.CompetitorDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.EventAndRaceIdentifier;
|
||||
import com.sap.sailing.gwt.ui.shared.EventDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.EventIdentifier;
|
||||
import com.sap.sailing.gwt.ui.shared.GPSFixDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.LeaderboardDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.LeaderboardEntryDAO;
|
||||
@@ -16,6 +18,7 @@ import com.sap.sailing.gwt.ui.shared.ManeuverDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.MarkDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.Pair;
|
||||
import com.sap.sailing.gwt.ui.shared.QuickRankDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceIdentifier;
|
||||
import com.sap.sailing.gwt.ui.shared.SwissTimingConfigurationDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.SwissTimingRaceRecordDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.TracTracConfigurationDAO;
|
||||
@@ -39,28 +42,28 @@ public interface SailingService extends RemoteService {
|
||||
|
||||
void storeTracTracConfiguration(String name, String jsonURL, String liveDataURI, String storedDataURI) throws Exception;
|
||||
|
||||
void stopTrackingEvent(String eventName) throws Exception;
|
||||
void stopTrackingEvent(EventIdentifier eventIdentifier) throws Exception;
|
||||
|
||||
void stopTrackingRace(String eventName, String raceName) throws Exception;
|
||||
void stopTrackingRace(EventAndRaceIdentifier eventAndRaceIdentifier) throws Exception;
|
||||
|
||||
WindInfoForRaceDAO getWindInfo(String eventName, String raceName, Date from, Date to,
|
||||
WindInfoForRaceDAO getWindInfo(RaceIdentifier raceIdentifier, Date from, Date to,
|
||||
boolean includeTrackBasedWindEstimation);
|
||||
|
||||
void setWind(String eventName, String raceName, WindDAO wind);
|
||||
void setWind(RaceIdentifier raceIdentifier, WindDAO wind);
|
||||
|
||||
Map<CompetitorDAO, List<GPSFixDAO>> getBoatPositions(String eventName, String raceName,
|
||||
Map<CompetitorDAO, Date> from, Map<CompetitorDAO, Date> to, boolean extrapolate);
|
||||
Map<CompetitorDAO, List<GPSFixDAO>> getBoatPositions(RaceIdentifier raceIdentifier, Map<CompetitorDAO, Date> from,
|
||||
Map<CompetitorDAO, Date> to, boolean extrapolate);
|
||||
|
||||
List<MarkDAO> getMarkPositions(String eventName, String raceName, Date date);
|
||||
List<MarkDAO> getMarkPositions(RaceIdentifier raceIdentifier, Date date);
|
||||
|
||||
List<QuickRankDAO> getQuickRanks(String eventName, String raceName, Date date) throws Exception;
|
||||
List<QuickRankDAO> getQuickRanks(RaceIdentifier raceIdentifier, Date date) throws Exception;
|
||||
|
||||
WindInfoForRaceDAO getWindInfo(String eventName, String raceName, Date from, long millisecondsStepWidth,
|
||||
WindInfoForRaceDAO getWindInfo(RaceIdentifier raceIdentifier, Date from, long millisecondsStepWidth,
|
||||
int numberOfFixes, double latDeg, double lngDeg, boolean includeTrackBasedWindEstimation) throws Exception;
|
||||
|
||||
void setWindSource(String eventName, String raceName, String windSourceName);
|
||||
void setWindSource(RaceIdentifier raceIdentifier, String windSourceName);
|
||||
|
||||
void removeWind(String eventName, String raceName, WindDAO windDAO);
|
||||
void removeWind(RaceIdentifier raceIdentifier, WindDAO windDAO);
|
||||
|
||||
public List<String> getLeaderboardNames() throws Exception;
|
||||
|
||||
@@ -84,7 +87,7 @@ public interface SailingService extends RemoteService {
|
||||
void moveLeaderboardColumnDown(String leaderboardName, String columnName);
|
||||
|
||||
void connectTrackedRaceToLeaderboardColumn(String leaderboardName, String raceColumnName,
|
||||
String eventName, String raceName);
|
||||
RaceIdentifier raceIdentifier);
|
||||
|
||||
void disconnectLeaderboardColumnFromTrackedRace(String leaderboardName, String raceColumnName);
|
||||
|
||||
@@ -122,9 +125,9 @@ public interface SailingService extends RemoteService {
|
||||
|
||||
String[] getCountryCodes();
|
||||
|
||||
Map<CompetitorDAO, List<GPSFixDAO>> getDouglasPoints(String eventName, String raceName,
|
||||
Map<CompetitorDAO, List<GPSFixDAO>> getDouglasPoints(RaceIdentifier raceIdentifier,
|
||||
Map<CompetitorDAO, Date> from, Map<CompetitorDAO, Date> to, double meters);
|
||||
|
||||
Map<CompetitorDAO, List<ManeuverDAO>> getManeuvers(String eventName, String raceName,
|
||||
Map<CompetitorDAO, List<ManeuverDAO>> getManeuvers(RaceIdentifier raceIdentifier,
|
||||
Map<CompetitorDAO, Date> from, Map<CompetitorDAO, Date> to) throws Exception;
|
||||
}
|
||||
+22
-44
@@ -8,8 +8,8 @@ import java.util.Map;
|
||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
import com.sap.sailing.domain.base.Course;
|
||||
import com.sap.sailing.domain.leaderboard.RaceInLeaderboard;
|
||||
import com.sap.sailing.domain.tracking.WindSource;
|
||||
import com.sap.sailing.gwt.ui.shared.CompetitorDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.EventAndRaceIdentifier;
|
||||
import com.sap.sailing.gwt.ui.shared.EventDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.GPSFixDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.LeaderboardDAO;
|
||||
@@ -18,6 +18,8 @@ import com.sap.sailing.gwt.ui.shared.ManeuverDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.MarkDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.Pair;
|
||||
import com.sap.sailing.gwt.ui.shared.QuickRankDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.EventIdentifier;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceIdentifier;
|
||||
import com.sap.sailing.gwt.ui.shared.SwissTimingConfigurationDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.SwissTimingRaceRecordDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.TracTracConfigurationDAO;
|
||||
@@ -50,36 +52,20 @@ public interface SailingServiceAsync {
|
||||
void storeTracTracConfiguration(String name, String jsonURL, String liveDataURI, String storedDataURI,
|
||||
AsyncCallback<Void> callback);
|
||||
|
||||
void stopTrackingEvent(String eventName, AsyncCallback<Void> callback);
|
||||
void stopTrackingEvent(EventIdentifier eventIdentifier, AsyncCallback<Void> callback);
|
||||
|
||||
void stopTrackingRace(String eventName, String raceName, AsyncCallback<Void> asyncCallback);
|
||||
void stopTrackingRace(EventAndRaceIdentifier raceIdentifier, AsyncCallback<Void> asyncCallback);
|
||||
|
||||
/**
|
||||
* Obtains wind data for an event/race based on the wind data as recorded in the currently
|
||||
* selected wind track for the race, with raw and dampened numbers, for the time stamps as
|
||||
* provided by the recording. The interval for which to retrieve wind data must be specified
|
||||
* using <code>from</code> and <code>to</code>.
|
||||
*
|
||||
* @param includeTrackBasedWindEstimation if <code>true</code>, for each time point for which an
|
||||
* {@link WindSource#EXPEDITION} estimation exists for the event/race requested, a wind estimation
|
||||
* based on the GPS tracks will be performed and included in the result. In this case, the
|
||||
* result will contain a so far non-existing wind source name "ESTIMATION".
|
||||
*/
|
||||
void getWindInfo(String eventName, String raceName, Date from, Date to,
|
||||
boolean includeTrackBasedWindEstimation, AsyncCallback<WindInfoForRaceDAO> callback);
|
||||
void getWindInfo(RaceIdentifier raceIdentifier, Date from, Date to, boolean includeTrackBasedWindEstimation,
|
||||
AsyncCallback<WindInfoForRaceDAO> callback);
|
||||
|
||||
/**
|
||||
* Obtains wind information starting at <code>from</code> and stepping in intervals as specified by
|
||||
* <code>millisecondsStepWidth</code>, delivering <code>numberOfFixes</code> fixes. Those don't have to
|
||||
* correspond exactly with when wind measurements were taken; instead, the selected race's selected wind
|
||||
* source is interpolated to estimate the wind for the time/position requested.
|
||||
*/
|
||||
void getWindInfo(String eventName, String raceName, Date from, long millisecondsStepWidth, int numberOfFixes,
|
||||
double latDeg, double lngDeg, boolean includeTrackBasedWindEstimation, AsyncCallback<WindInfoForRaceDAO> callback);
|
||||
void getWindInfo(RaceIdentifier raceIdentifier, Date from, long millisecondsStepWidth, int numberOfFixes,
|
||||
double latDeg, double lngDeg, boolean includeTrackBasedWindEstimation,
|
||||
AsyncCallback<WindInfoForRaceDAO> callback);
|
||||
|
||||
void setWind(String eventName, String raceName, WindDAO wind, AsyncCallback<Void> callback);
|
||||
void setWind(RaceIdentifier raceIdentifier, WindDAO wind, AsyncCallback<Void> callback);
|
||||
|
||||
void removeWind(String eventName, String raceName, WindDAO wind, AsyncCallback<Void> callback);
|
||||
void removeWind(RaceIdentifier raceIdentifier, WindDAO windDAO, AsyncCallback<Void> callback);
|
||||
|
||||
/**
|
||||
* @param from
|
||||
@@ -96,15 +82,15 @@ public interface SailingServiceAsync {
|
||||
* @return a map where for each competitor participating in the race the list of GPS fixes in increasing
|
||||
* chronological order is provided. The last one is the last position at or before <code>date</code>.
|
||||
*/
|
||||
void getBoatPositions(String eventName, String raceName,
|
||||
void getBoatPositions(RaceIdentifier raceIdentifier,
|
||||
Map<CompetitorDAO, Date> from, Map<CompetitorDAO, Date> to,
|
||||
boolean extrapolate, AsyncCallback<Map<CompetitorDAO, List<GPSFixDAO>>> callback);
|
||||
|
||||
void getMarkPositions(String eventName, String raceName, Date date, AsyncCallback<List<MarkDAO>> asyncCallback);
|
||||
void getMarkPositions(RaceIdentifier raceIdentifier, Date date, AsyncCallback<List<MarkDAO>> asyncCallback);
|
||||
|
||||
void getQuickRanks(String eventName, String raceName, Date date, AsyncCallback<List<QuickRankDAO>> callback);
|
||||
void getQuickRanks(RaceIdentifier raceIdentifier, Date date, AsyncCallback<List<QuickRankDAO>> callback);
|
||||
|
||||
void setWindSource(String eventName, String raceName, String windSourceName, AsyncCallback<Void> callback);
|
||||
void setWindSource(RaceIdentifier raceIdentifier, String windSourceName, AsyncCallback<Void> callback);
|
||||
|
||||
/**
|
||||
* @param namesOfRacesForWhichToLoadLegDetails
|
||||
@@ -133,8 +119,8 @@ public interface SailingServiceAsync {
|
||||
|
||||
void removeLeaderboardColumn(String leaderboardName, String columnName, AsyncCallback<Void> callback);
|
||||
|
||||
void connectTrackedRaceToLeaderboardColumn(String selectedLeaderboardName, String selectedRaceColumnName,
|
||||
String name, String name2, AsyncCallback<Void> asyncCallback);
|
||||
void connectTrackedRaceToLeaderboardColumn(String leaderboardName, String raceColumnName,
|
||||
RaceIdentifier raceIdentifier, AsyncCallback<Void> asyncCallback);
|
||||
|
||||
void getEventAndRaceNameOfTrackedRaceConnectedToLeaderboardColumn(String leaderboardName, String raceColumnName,
|
||||
AsyncCallback<Pair<String, String>> callback);
|
||||
@@ -185,17 +171,9 @@ public interface SailingServiceAsync {
|
||||
|
||||
void getCountryCodes(AsyncCallback<String[]> callback);
|
||||
|
||||
/**
|
||||
* Approximates pieces of GPS tracks using a Douglas-Peucker algorithm and returns the approximation as a
|
||||
* sequence of {@link GPSFixDAO}s for each competitors for which approximation was requested.
|
||||
*/
|
||||
void getDouglasPoints(String eventName, String raceName, Map<CompetitorDAO, Date> from,
|
||||
Map<CompetitorDAO, Date> to, double meters, AsyncCallback<Map<CompetitorDAO, List<GPSFixDAO>>> callback);
|
||||
void getDouglasPoints(RaceIdentifier raceIdentifier, Map<CompetitorDAO, Date> from, Map<CompetitorDAO, Date> to,
|
||||
double meters, AsyncCallback<Map<CompetitorDAO, List<GPSFixDAO>>> callback);
|
||||
|
||||
/**
|
||||
* Approximates pieces of GPS tracks using a Douglas-Peucker algorithm and returns the approximation as a
|
||||
* sequence of {@link GPSFixDAO}s for each competitors for which approximation was requested.
|
||||
*/
|
||||
void getManeuvers(String eventName, String raceName, Map<CompetitorDAO, Date> from,
|
||||
Map<CompetitorDAO, Date> to, AsyncCallback<Map<CompetitorDAO, List<ManeuverDAO>>> callback);
|
||||
void getManeuvers(RaceIdentifier raceIdentifier, Map<CompetitorDAO, Date> from, Map<CompetitorDAO, Date> to,
|
||||
AsyncCallback<Map<CompetitorDAO, List<ManeuverDAO>>> callback);
|
||||
}
|
||||
+2
-1
@@ -9,6 +9,7 @@ import com.google.gwt.user.client.ui.Grid;
|
||||
import com.google.gwt.user.client.ui.Label;
|
||||
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||
import com.sap.sailing.gwt.ui.shared.EventDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.EventNameAndRaceName;
|
||||
import com.sap.sailing.gwt.ui.shared.PositionDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.RegattaDAO;
|
||||
@@ -68,7 +69,7 @@ public class SmallWindHistoryPanel extends FormPanel implements TimeListener, Ra
|
||||
if (date != null) {
|
||||
Date from = new Date(date.getTime() - windIndicators.length * millisecondStepsPerLabel);
|
||||
if (event != null && race != null) {
|
||||
sailingService.getWindInfo(event.name, race.name, from, millisecondStepsPerLabel,
|
||||
sailingService.getWindInfo(new EventNameAndRaceName(event.name, race.name), from, millisecondStepsPerLabel,
|
||||
windIndicators.length, position.latDeg, position.lngDeg, /* includeTrackBasedWindEstimation */ true,
|
||||
new AsyncCallback<WindInfoForRaceDAO>() {
|
||||
@Override
|
||||
|
||||
+2
-1
@@ -26,6 +26,7 @@ import com.google.gwt.view.client.SelectionChangeEvent.Handler;
|
||||
import com.google.gwt.view.client.SelectionModel;
|
||||
import com.google.gwt.view.client.SingleSelectionModel;
|
||||
import com.sap.sailing.gwt.ui.shared.EventDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.EventNameAndRaceName;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.RegattaDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.Triple;
|
||||
@@ -257,7 +258,7 @@ public class TrackedEventsComposite extends FormPanel implements EventDisplayer,
|
||||
}
|
||||
|
||||
private void stopTrackingRace(final EventDAO event, final RaceDAO race) {
|
||||
sailingService.stopTrackingRace(event.name, race.name, new AsyncCallback<Void>() {
|
||||
sailingService.stopTrackingRace(new EventNameAndRaceName(event.name, race.name), new AsyncCallback<Void>() {
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
errorReporter.reportError("Exception trying to stop tracking race " + race.name + "in event "+event.name+": "
|
||||
|
||||
+4
-3
@@ -37,6 +37,7 @@ import com.google.gwt.user.client.ui.ListBox;
|
||||
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||
import com.google.gwt.view.client.ListDataProvider;
|
||||
import com.sap.sailing.gwt.ui.shared.EventDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.EventNameAndRaceName;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.RegattaDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.Triple;
|
||||
@@ -84,7 +85,7 @@ public class WindPanel extends FormPanel implements EventDisplayer, RaceSelectio
|
||||
public void execute(final WindDAO wind) {
|
||||
List<Triple<EventDAO, RegattaDAO, RaceDAO>> eventAndRaces = getSelectedEventAndRace();
|
||||
final Triple<EventDAO, RegattaDAO, RaceDAO> eventAndRace = eventAndRaces.get(eventAndRaces.size()-1);
|
||||
sailingService.removeWind(eventAndRace.getA().name, eventAndRace.getC().name, wind, new AsyncCallback<Void>() {
|
||||
sailingService.removeWind(new EventNameAndRaceName(eventAndRace.getA().name, eventAndRace.getC().name), wind, new AsyncCallback<Void>() {
|
||||
@Override
|
||||
public void onSuccess(Void result) {
|
||||
// remove row from underlying list:
|
||||
@@ -183,7 +184,7 @@ public class WindPanel extends FormPanel implements EventDisplayer, RaceSelectio
|
||||
@Override
|
||||
public void showWind(final EventDAO event, final RaceDAO race) {
|
||||
Date now = new Date();
|
||||
sailingService.getWindInfo(event.name, race.name,
|
||||
sailingService.getWindInfo(new EventNameAndRaceName(event.name, race.name),
|
||||
// TODO what about the time interval?
|
||||
new Date(now.getTime()-60000 /* one minute */), new Date(/* toAsMilliseconds */),
|
||||
showEstimatedWindBox.getValue(), new AsyncCallback<WindInfoForRaceDAO>() {
|
||||
@@ -349,7 +350,7 @@ public class WindPanel extends FormPanel implements EventDisplayer, RaceSelectio
|
||||
if (selection != null && !selection.isEmpty()) {
|
||||
final Triple<EventDAO, RegattaDAO, RaceDAO> selectedRace = selection.get(0);
|
||||
final String windSourceName = windSourceSelection.getItemText(windSourceSelection.getSelectedIndex());
|
||||
sailingService.setWindSource(selectedRace.getA().name, selectedRace.getC().name,
|
||||
sailingService.setWindSource(new EventNameAndRaceName(selectedRace.getA().name, selectedRace.getC().name),
|
||||
windSourceName, new AsyncCallback<Void>() {
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
|
||||
+2
-1
@@ -11,6 +11,7 @@ import com.google.gwt.user.client.ui.FormPanel;
|
||||
import com.google.gwt.user.client.ui.Grid;
|
||||
import com.google.gwt.user.client.ui.Label;
|
||||
import com.sap.sailing.gwt.ui.shared.EventDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.EventNameAndRaceName;
|
||||
import com.sap.sailing.gwt.ui.shared.PositionDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.RegattaDAO;
|
||||
@@ -53,7 +54,7 @@ public class WindSettingPanel extends FormPanel {
|
||||
List<Triple<EventDAO, RegattaDAO, RaceDAO>> eventAndRaces = raceSelectionProvider.getSelectedEventAndRace();
|
||||
// TODO can we be sure of single selection?
|
||||
final Triple<EventDAO, RegattaDAO, RaceDAO> eventAndRace = eventAndRaces.get(eventAndRaces.size()-1);
|
||||
sailingService.setWind(eventAndRace.getA().name, eventAndRace.getC().name, wind, new AsyncCallback<Void>() {
|
||||
sailingService.setWind(new EventNameAndRaceName(eventAndRace.getA().name, eventAndRace.getC().name), wind, new AsyncCallback<Void>() {
|
||||
@Override
|
||||
public void onSuccess(Void result) {
|
||||
windShower.showWind(eventAndRace.getA(), eventAndRace.getC());
|
||||
|
||||
+257
-188
@@ -55,6 +55,7 @@ import com.sap.sailing.domain.persistence.MongoWindStoreFactory;
|
||||
import com.sap.sailing.domain.swisstimingadapter.SwissTimingConfiguration;
|
||||
import com.sap.sailing.domain.swisstimingadapter.SwissTimingFactory;
|
||||
import com.sap.sailing.domain.swisstimingadapter.persistence.SwissTimingAdapterPersistence;
|
||||
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
|
||||
import com.sap.sailing.domain.tracking.GPSFix;
|
||||
import com.sap.sailing.domain.tracking.GPSFixMoving;
|
||||
import com.sap.sailing.domain.tracking.GPSFixTrack;
|
||||
@@ -74,10 +75,15 @@ import com.sap.sailing.domain.tractracadapter.TracTracConfiguration;
|
||||
import com.sap.sailing.gwt.ui.client.SailingService;
|
||||
import com.sap.sailing.gwt.ui.shared.BoatClassDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.CompetitorDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.EventAndRaceIdentifier;
|
||||
import com.sap.sailing.gwt.ui.shared.EventDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.EventFetcher;
|
||||
import com.sap.sailing.gwt.ui.shared.EventIdentifier;
|
||||
import com.sap.sailing.gwt.ui.shared.EventNameAndRaceName;
|
||||
import com.sap.sailing.gwt.ui.shared.GPSFixDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.LeaderboardDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.LeaderboardEntryDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.LeaderboardNameAndRaceColumnName;
|
||||
import com.sap.sailing.gwt.ui.shared.LeaderboardRowDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.LegEntryDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.ManeuverDAO;
|
||||
@@ -86,6 +92,8 @@ import com.sap.sailing.gwt.ui.shared.Pair;
|
||||
import com.sap.sailing.gwt.ui.shared.PositionDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.QuickRankDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceFetcher;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceIdentifier;
|
||||
import com.sap.sailing.gwt.ui.shared.RegattaDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.SpeedWithBearingDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.SwissTimingConfigurationDAO;
|
||||
@@ -101,7 +109,7 @@ import com.sap.sailing.util.CountryCode;
|
||||
/**
|
||||
* The server side implementation of the RPC service.
|
||||
*/
|
||||
public class SailingServiceImpl extends RemoteServiceServlet implements SailingService {
|
||||
public class SailingServiceImpl extends RemoteServiceServlet implements SailingService, RaceFetcher, EventFetcher {
|
||||
private static final Logger logger = Logger.getLogger(SailingServiceImpl.class.getName());
|
||||
|
||||
private static final long serialVersionUID = 9031688830194537489L;
|
||||
@@ -423,8 +431,11 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
|
||||
}
|
||||
|
||||
@Override
|
||||
public void stopTrackingEvent(String eventName) throws Exception {
|
||||
getService().stopTracking(getService().getEventByName(eventName));
|
||||
public void stopTrackingEvent(EventIdentifier eventIdentifier) throws Exception {
|
||||
Event event = getEvent(eventIdentifier);
|
||||
if (event != null) {
|
||||
getService().stopTracking(event);
|
||||
}
|
||||
}
|
||||
|
||||
private RaceDefinition getRaceByName(Event event, String raceName) {
|
||||
@@ -439,11 +450,13 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
|
||||
}
|
||||
|
||||
@Override
|
||||
public void stopTrackingRace(String eventName, String raceName) throws Exception {
|
||||
Event event = getService().getEventByName(eventName);
|
||||
RaceDefinition r = getRaceByName(event, raceName);
|
||||
if (r != null) {
|
||||
getService().stopTracking(event, r);
|
||||
public void stopTrackingRace(EventAndRaceIdentifier eventAndRaceIdentifier) throws Exception {
|
||||
Event event = getEvent(eventAndRaceIdentifier);
|
||||
if (event != null) {
|
||||
RaceDefinition r = getRace(eventAndRaceIdentifier);
|
||||
if (r != null) {
|
||||
getService().stopTracking(event, r);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -465,21 +478,10 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
|
||||
}
|
||||
}
|
||||
|
||||
private TrackedRace getTrackedRace(String eventName, String raceName) {
|
||||
TrackedRace result = null;
|
||||
Event event = getService().getEventByName(eventName);
|
||||
if (event != null) {
|
||||
RaceDefinition race = getRaceByName(event, raceName);
|
||||
if (race != null) {
|
||||
result = getService().getOrCreateTrackedEvent(event).getExistingTrackedRace(race);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@Override
|
||||
public WindInfoForRaceDAO getWindInfo(String eventName, String raceName, Date fromDate, Date toDate, boolean includeTrackBasedWindEstimation) {
|
||||
public WindInfoForRaceDAO getWindInfo(RaceIdentifier raceIdentifier, Date fromDate, Date toDate, boolean includeTrackBasedWindEstimation) {
|
||||
WindInfoForRaceDAO result = null;
|
||||
TrackedRace trackedRace = getTrackedRace(eventName, raceName);
|
||||
TrackedRace trackedRace = getTrackedRace(raceIdentifier);
|
||||
if (trackedRace != null) {
|
||||
MillisecondsTimePoint now = MillisecondsTimePoint.now();
|
||||
result = new WindInfoForRaceDAO();
|
||||
@@ -580,121 +582,108 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
|
||||
}
|
||||
|
||||
@Override
|
||||
public WindInfoForRaceDAO getWindInfo(String eventName, String raceName, Date from, long millisecondsStepWidth,
|
||||
public WindInfoForRaceDAO getWindInfo(RaceIdentifier raceIdentifier, Date from, long millisecondsStepWidth,
|
||||
int numberOfFixes, double latDeg, double lngDeg, boolean includeTrackBasedWindEstimation)
|
||||
throws NoWindException {
|
||||
Position position = new DegreePosition(latDeg, lngDeg);
|
||||
WindInfoForRaceDAO result = null;
|
||||
Event event = getService().getEventByName(eventName);
|
||||
if (event != null) {
|
||||
RaceDefinition race = getRaceByName(event, raceName);
|
||||
if (race != null) {
|
||||
TrackedRace trackedRace = getService().getOrCreateTrackedEvent(event)
|
||||
.getExistingTrackedRace(race);
|
||||
if (trackedRace != null) {
|
||||
WindTrack estimatedTrack = null;
|
||||
result = new WindInfoForRaceDAO();
|
||||
WindSource windSource = trackedRace.getWindSource();
|
||||
result.selectedWindSourceName = windSource.name();
|
||||
TimePoint fromTimePoint = new MillisecondsTimePoint(from);
|
||||
Map<String, WindTrackInfoDAO> windTrackInfoDAOs = new HashMap<String, WindTrackInfoDAO>();
|
||||
result.windTrackInfoByWindSourceName = windTrackInfoDAOs;
|
||||
WindTrackInfoDAO windTrackInfoDAO = new WindTrackInfoDAO();
|
||||
windTrackInfoDAO.windFixes = new ArrayList<WindDAO>();
|
||||
WindTrack windTrack = trackedRace.getWindTrack(windSource);
|
||||
if (includeTrackBasedWindEstimation && windSource == WindSource.EXPEDITION) {
|
||||
estimatedTrack = new WindTrackImpl(windTrack.getMillisecondsOverWhichToAverageWind());
|
||||
}
|
||||
windTrackInfoDAOs.put(windSource.name(), windTrackInfoDAO);
|
||||
windTrackInfoDAO.dampeningIntervalInMilliseconds = windTrack
|
||||
.getMillisecondsOverWhichToAverageWind();
|
||||
TimePoint timePoint = fromTimePoint;
|
||||
for (int i=0; i<numberOfFixes; i++) {
|
||||
Wind wind = windTrack.getEstimatedWind(position, timePoint);
|
||||
if (wind != null) {
|
||||
WindDAO windDAO = createWindDAO(wind, windTrack);
|
||||
windTrackInfoDAO.windFixes.add(windDAO);
|
||||
}
|
||||
if (includeTrackBasedWindEstimation && windSource == WindSource.EXPEDITION && wind != null) {
|
||||
try {
|
||||
Wind estimatedWindDirection = trackedRace.getEstimatedWindDirection(wind.getPosition(),
|
||||
wind.getTimePoint());
|
||||
estimatedTrack.add(estimatedWindDirection);
|
||||
} catch (NoWindException e) {
|
||||
// no show-stopper; it would just mean that the wind estimation isn't complete which we
|
||||
// can tolerate
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
timePoint = new MillisecondsTimePoint(timePoint.asMillis() + millisecondsStepWidth);
|
||||
}
|
||||
if (includeTrackBasedWindEstimation && estimatedTrack != null) {
|
||||
WindTrackInfoDAO windEstimations = createWindTrackInfoDAO(estimatedTrack);
|
||||
windTrackInfoDAOs.put("ESTIMATION", windEstimations);
|
||||
TrackedRace trackedRace = getExistingTrackedRace(raceIdentifier);
|
||||
if (trackedRace != null) {
|
||||
WindTrack estimatedTrack = null;
|
||||
result = new WindInfoForRaceDAO();
|
||||
WindSource windSource = trackedRace.getWindSource();
|
||||
result.selectedWindSourceName = windSource.name();
|
||||
TimePoint fromTimePoint = new MillisecondsTimePoint(from);
|
||||
Map<String, WindTrackInfoDAO> windTrackInfoDAOs = new HashMap<String, WindTrackInfoDAO>();
|
||||
result.windTrackInfoByWindSourceName = windTrackInfoDAOs;
|
||||
WindTrackInfoDAO windTrackInfoDAO = new WindTrackInfoDAO();
|
||||
windTrackInfoDAO.windFixes = new ArrayList<WindDAO>();
|
||||
WindTrack windTrack = trackedRace.getWindTrack(windSource);
|
||||
if (includeTrackBasedWindEstimation && windSource == WindSource.EXPEDITION) {
|
||||
estimatedTrack = new WindTrackImpl(windTrack.getMillisecondsOverWhichToAverageWind());
|
||||
}
|
||||
windTrackInfoDAOs.put(windSource.name(), windTrackInfoDAO);
|
||||
windTrackInfoDAO.dampeningIntervalInMilliseconds = windTrack.getMillisecondsOverWhichToAverageWind();
|
||||
TimePoint timePoint = fromTimePoint;
|
||||
for (int i = 0; i < numberOfFixes; i++) {
|
||||
Wind wind = windTrack.getEstimatedWind(position, timePoint);
|
||||
if (wind != null) {
|
||||
WindDAO windDAO = createWindDAO(wind, windTrack);
|
||||
windTrackInfoDAO.windFixes.add(windDAO);
|
||||
}
|
||||
if (includeTrackBasedWindEstimation && windSource == WindSource.EXPEDITION && wind != null) {
|
||||
try {
|
||||
Wind estimatedWindDirection = trackedRace.getEstimatedWindDirection(wind.getPosition(),
|
||||
wind.getTimePoint());
|
||||
estimatedTrack.add(estimatedWindDirection);
|
||||
} catch (NoWindException e) {
|
||||
// no show-stopper; it would just mean that the wind estimation isn't complete which we
|
||||
// can tolerate
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
timePoint = new MillisecondsTimePoint(timePoint.asMillis() + millisecondsStepWidth);
|
||||
}
|
||||
if (includeTrackBasedWindEstimation && estimatedTrack != null) {
|
||||
WindTrackInfoDAO windEstimations = createWindTrackInfoDAO(estimatedTrack);
|
||||
windTrackInfoDAOs.put("ESTIMATION", windEstimations);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setWind(String eventName, String raceName, WindDAO windDAO) {
|
||||
Event event = getService().getEventByName(eventName);
|
||||
RaceDefinition race = getRaceByName(event, raceName);
|
||||
Position p = null;
|
||||
if (windDAO.position != null) {
|
||||
p = new DegreePosition(windDAO.position.latDeg, windDAO.position.lngDeg);
|
||||
}
|
||||
TimePoint at = null;
|
||||
if (windDAO.timepoint != null) {
|
||||
at = new MillisecondsTimePoint(windDAO.timepoint);
|
||||
}
|
||||
SpeedWithBearing speedWithBearing = null;
|
||||
Speed speed = null;
|
||||
if (windDAO.trueWindSpeedInKnots != null) {
|
||||
speed = new KnotSpeedImpl(windDAO.trueWindSpeedInKnots);
|
||||
} else if (windDAO.trueWindSpeedInMetersPerSecond != null) {
|
||||
speed = new KilometersPerHourSpeedImpl(windDAO.trueWindSpeedInMetersPerSecond * 3600. / 1000.);
|
||||
} else if (windDAO.dampenedTrueWindSpeedInKnots != null) {
|
||||
speed = new KnotSpeedImpl(windDAO.dampenedTrueWindSpeedInKnots);
|
||||
} else if (windDAO.dampenedTrueWindSpeedInMetersPerSecond != null) {
|
||||
speed = new KilometersPerHourSpeedImpl(windDAO.dampenedTrueWindSpeedInMetersPerSecond * 3600. / 1000.);
|
||||
}
|
||||
if (speed != null) {
|
||||
if (windDAO.trueWindBearingDeg != null) {
|
||||
speedWithBearing = new KnotSpeedWithBearingImpl(speed.getKnots(), new DegreeBearingImpl(windDAO.trueWindBearingDeg));
|
||||
} else if (windDAO.trueWindFromDeg != null) {
|
||||
speedWithBearing = new KnotSpeedWithBearingImpl(speed.getKnots(), new DegreeBearingImpl(windDAO.trueWindFromDeg).reverse());
|
||||
public void setWind(RaceIdentifier raceIdentifier, WindDAO windDAO) {
|
||||
DynamicTrackedRace trackedRace = (DynamicTrackedRace) getTrackedRace(raceIdentifier);
|
||||
if (trackedRace != null) {
|
||||
Position p = null;
|
||||
if (windDAO.position != null) {
|
||||
p = new DegreePosition(windDAO.position.latDeg, windDAO.position.lngDeg);
|
||||
}
|
||||
TimePoint at = null;
|
||||
if (windDAO.timepoint != null) {
|
||||
at = new MillisecondsTimePoint(windDAO.timepoint);
|
||||
}
|
||||
SpeedWithBearing speedWithBearing = null;
|
||||
Speed speed = null;
|
||||
if (windDAO.trueWindSpeedInKnots != null) {
|
||||
speed = new KnotSpeedImpl(windDAO.trueWindSpeedInKnots);
|
||||
} else if (windDAO.trueWindSpeedInMetersPerSecond != null) {
|
||||
speed = new KilometersPerHourSpeedImpl(windDAO.trueWindSpeedInMetersPerSecond * 3600. / 1000.);
|
||||
} else if (windDAO.dampenedTrueWindSpeedInKnots != null) {
|
||||
speed = new KnotSpeedImpl(windDAO.dampenedTrueWindSpeedInKnots);
|
||||
} else if (windDAO.dampenedTrueWindSpeedInMetersPerSecond != null) {
|
||||
speed = new KilometersPerHourSpeedImpl(windDAO.dampenedTrueWindSpeedInMetersPerSecond * 3600. / 1000.);
|
||||
}
|
||||
if (speed != null) {
|
||||
if (windDAO.trueWindBearingDeg != null) {
|
||||
speedWithBearing = new KnotSpeedWithBearingImpl(speed.getKnots(), new DegreeBearingImpl(
|
||||
windDAO.trueWindBearingDeg));
|
||||
} else if (windDAO.trueWindFromDeg != null) {
|
||||
speedWithBearing = new KnotSpeedWithBearingImpl(speed.getKnots(), new DegreeBearingImpl(
|
||||
windDAO.trueWindFromDeg).reverse());
|
||||
}
|
||||
}
|
||||
Wind wind = new WindImpl(p, at, speedWithBearing);
|
||||
trackedRace.recordWind(wind, WindSource.WEB);
|
||||
}
|
||||
Wind wind = new WindImpl(p, at, speedWithBearing);
|
||||
getService().getOrCreateTrackedEvent(event).getTrackedRace(race).recordWind(wind, WindSource.WEB);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setWindSource(String eventName, String raceName, String windSourceName) {
|
||||
Event event = getService().getEventByName(eventName);
|
||||
if (event != null) {
|
||||
RaceDefinition race = getRaceByName(event, raceName);
|
||||
if (race != null) {
|
||||
TrackedRace trackedRace = getService().getOrCreateTrackedEvent(event).getTrackedRace(race);
|
||||
if (trackedRace != null) {
|
||||
trackedRace.setWindSource(WindSource.valueOf(windSourceName));
|
||||
}
|
||||
}
|
||||
public void setWindSource(RaceIdentifier raceIdentifier, String windSourceName) {
|
||||
TrackedRace trackedRace = getTrackedRace(raceIdentifier);
|
||||
if (trackedRace != null) {
|
||||
trackedRace.setWindSource(WindSource.valueOf(windSourceName));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<CompetitorDAO, List<GPSFixDAO>> getBoatPositions(String eventName, String raceName,
|
||||
public Map<CompetitorDAO, List<GPSFixDAO>> getBoatPositions(RaceIdentifier raceIdentifier,
|
||||
Map<CompetitorDAO, Date> from, Map<CompetitorDAO, Date> to,
|
||||
boolean extrapolate) {
|
||||
Map<CompetitorDAO, List<GPSFixDAO>> result = new HashMap<CompetitorDAO, List<GPSFixDAO>>();
|
||||
Event event = getService().getEventByName(eventName);
|
||||
if (event != null) {
|
||||
RaceDefinition race = getRaceByName(event, raceName);
|
||||
TrackedRace trackedRace = getService().getOrCreateTrackedEvent(event).getTrackedRace(race);
|
||||
TrackedRace trackedRace = getTrackedRace(raceIdentifier);
|
||||
if (trackedRace != null) {
|
||||
for (Competitor competitor : trackedRace.getRace().getCompetitors()) {
|
||||
CompetitorDAO competitorDAO = getCompetitorDAO(competitor);
|
||||
if (from.containsKey(competitorDAO)) {
|
||||
@@ -710,7 +699,7 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
|
||||
GPSFixMoving fix = fixIter.next();
|
||||
while (fix != null && fix.getTimePoint().compareTo(toTimePointExcluding) < 0) {
|
||||
Tack tack = trackedRace.getTack(competitor, fix.getTimePoint());
|
||||
GPSFixDAO fixDAO = createGPSFixDAO(fix, fix.getSpeed(), tack, /* extrapolate */ false);
|
||||
GPSFixDAO fixDAO = createGPSFixDAO(fix, fix.getSpeed(), tack, /* extrapolate */false);
|
||||
fixesForCompetitor.add(fixDAO);
|
||||
if (fixIter.hasNext()) {
|
||||
fix = fixIter.next();
|
||||
@@ -751,14 +740,12 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<MarkDAO> getMarkPositions(String eventName, String raceName, Date date) {
|
||||
public List<MarkDAO> getMarkPositions(RaceIdentifier raceIdentifier, Date date) {
|
||||
List<MarkDAO> result = new ArrayList<MarkDAO>();
|
||||
if (date != null) {
|
||||
Event event = getService().getEventByName(eventName);
|
||||
if (event != null) {
|
||||
RaceDefinition race = getRaceByName(event, raceName);
|
||||
TimePoint dateAsTimePoint = new MillisecondsTimePoint(date);
|
||||
TrackedRace trackedRace = getService().getOrCreateTrackedEvent(event).getTrackedRace(race);
|
||||
TimePoint dateAsTimePoint = new MillisecondsTimePoint(date);
|
||||
TrackedRace trackedRace = getTrackedRace(raceIdentifier);
|
||||
if (trackedRace != null) {
|
||||
Set<Buoy> buoys = new HashSet<Buoy>();
|
||||
for (Waypoint waypoint : trackedRace.getRace().getCourse().getWaypoints()) {
|
||||
for (Buoy b : waypoint.getBuoys()) {
|
||||
@@ -780,14 +767,13 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<QuickRankDAO> getQuickRanks(String eventName, String raceName, Date date) throws Exception {
|
||||
Event event = getService().getEventByName(eventName);
|
||||
public List<QuickRankDAO> getQuickRanks(RaceIdentifier raceIdentifier, Date date) throws NoWindException {
|
||||
List<QuickRankDAO> result = new ArrayList<QuickRankDAO>();
|
||||
if (date != null && event != null) {
|
||||
RaceDefinition race = getRaceByName(event, raceName);
|
||||
if (race != null) {
|
||||
TimePoint dateAsTimePoint = new MillisecondsTimePoint(date);
|
||||
TrackedRace trackedRace = getService().getOrCreateTrackedEvent(event).getTrackedRace(race);
|
||||
if (date != null) {
|
||||
TimePoint dateAsTimePoint = new MillisecondsTimePoint(date);
|
||||
TrackedRace trackedRace = getTrackedRace(raceIdentifier);
|
||||
if (trackedRace != null) {
|
||||
RaceDefinition race = trackedRace.getRace();
|
||||
for (Competitor competitor : race.getCompetitors()) {
|
||||
int rank = trackedRace.getRank(competitor, dateAsTimePoint);
|
||||
TrackedLegOfCompetitor trackedLeg = trackedRace.getTrackedLeg(competitor, dateAsTimePoint);
|
||||
@@ -809,37 +795,40 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeWind(String eventName, String raceName, WindDAO windDAO) {
|
||||
Event event = getService().getEventByName(eventName);
|
||||
RaceDefinition race = getRaceByName(event, raceName);
|
||||
Position p = null;
|
||||
if (windDAO.position != null) {
|
||||
p = new DegreePosition(windDAO.position.latDeg, windDAO.position.lngDeg);
|
||||
}
|
||||
TimePoint at = null;
|
||||
if (windDAO.timepoint != null) {
|
||||
at = new MillisecondsTimePoint(windDAO.timepoint);
|
||||
}
|
||||
SpeedWithBearing speedWithBearing = null;
|
||||
Speed speed = null;
|
||||
if (windDAO.trueWindSpeedInKnots != null) {
|
||||
speed = new KnotSpeedImpl(windDAO.trueWindSpeedInKnots);
|
||||
} else if (windDAO.trueWindSpeedInMetersPerSecond != null) {
|
||||
speed = new KilometersPerHourSpeedImpl(windDAO.trueWindSpeedInMetersPerSecond * 3600. / 1000.);
|
||||
} else if (windDAO.dampenedTrueWindSpeedInKnots != null) {
|
||||
speed = new KnotSpeedImpl(windDAO.dampenedTrueWindSpeedInKnots);
|
||||
} else if (windDAO.dampenedTrueWindSpeedInMetersPerSecond != null) {
|
||||
speed = new KilometersPerHourSpeedImpl(windDAO.dampenedTrueWindSpeedInMetersPerSecond * 3600. / 1000.);
|
||||
}
|
||||
if (speed != null) {
|
||||
if (windDAO.trueWindBearingDeg != null) {
|
||||
speedWithBearing = new KnotSpeedWithBearingImpl(speed.getKnots(), new DegreeBearingImpl(windDAO.trueWindBearingDeg));
|
||||
} else if (windDAO.trueWindFromDeg != null) {
|
||||
speedWithBearing = new KnotSpeedWithBearingImpl(speed.getKnots(), new DegreeBearingImpl(windDAO.trueWindFromDeg).reverse());
|
||||
public void removeWind(RaceIdentifier raceIdentifier, WindDAO windDAO) {
|
||||
TrackedRace trackedRace = getTrackedRace(raceIdentifier);
|
||||
if (trackedRace != null) {
|
||||
Position p = null;
|
||||
if (windDAO.position != null) {
|
||||
p = new DegreePosition(windDAO.position.latDeg, windDAO.position.lngDeg);
|
||||
}
|
||||
TimePoint at = null;
|
||||
if (windDAO.timepoint != null) {
|
||||
at = new MillisecondsTimePoint(windDAO.timepoint);
|
||||
}
|
||||
SpeedWithBearing speedWithBearing = null;
|
||||
Speed speed = null;
|
||||
if (windDAO.trueWindSpeedInKnots != null) {
|
||||
speed = new KnotSpeedImpl(windDAO.trueWindSpeedInKnots);
|
||||
} else if (windDAO.trueWindSpeedInMetersPerSecond != null) {
|
||||
speed = new KilometersPerHourSpeedImpl(windDAO.trueWindSpeedInMetersPerSecond * 3600. / 1000.);
|
||||
} else if (windDAO.dampenedTrueWindSpeedInKnots != null) {
|
||||
speed = new KnotSpeedImpl(windDAO.dampenedTrueWindSpeedInKnots);
|
||||
} else if (windDAO.dampenedTrueWindSpeedInMetersPerSecond != null) {
|
||||
speed = new KilometersPerHourSpeedImpl(windDAO.dampenedTrueWindSpeedInMetersPerSecond * 3600. / 1000.);
|
||||
}
|
||||
if (speed != null) {
|
||||
if (windDAO.trueWindBearingDeg != null) {
|
||||
speedWithBearing = new KnotSpeedWithBearingImpl(speed.getKnots(), new DegreeBearingImpl(
|
||||
windDAO.trueWindBearingDeg));
|
||||
} else if (windDAO.trueWindFromDeg != null) {
|
||||
speedWithBearing = new KnotSpeedWithBearingImpl(speed.getKnots(), new DegreeBearingImpl(
|
||||
windDAO.trueWindFromDeg).reverse());
|
||||
}
|
||||
}
|
||||
Wind wind = new WindImpl(p, at, speedWithBearing);
|
||||
trackedRace.removeWind(wind, WindSource.WEB);
|
||||
}
|
||||
Wind wind = new WindImpl(p, at, speedWithBearing);
|
||||
getService().getOrCreateTrackedEvent(event).getTrackedRace(race).removeWind(wind, WindSource.WEB);
|
||||
}
|
||||
|
||||
protected RacingEventService getService() {
|
||||
@@ -905,9 +894,8 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
|
||||
}
|
||||
|
||||
@Override
|
||||
public void connectTrackedRaceToLeaderboardColumn(String leaderboardName, String raceColumnName, String eventName,
|
||||
String raceName) {
|
||||
TrackedRace trackedRace = getTrackedRace(eventName, raceName);
|
||||
public void connectTrackedRaceToLeaderboardColumn(String leaderboardName, String raceColumnName, RaceIdentifier raceIdentifier) {
|
||||
TrackedRace trackedRace = getTrackedRace(raceIdentifier);
|
||||
if (trackedRace != null) {
|
||||
Leaderboard leaderboard = getService().getLeaderboardByName(leaderboardName);
|
||||
if (leaderboard != null) {
|
||||
@@ -1140,49 +1128,52 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<CompetitorDAO, List<GPSFixDAO>> getDouglasPoints(String eventName, String raceName,
|
||||
public Map<CompetitorDAO, List<GPSFixDAO>> getDouglasPoints(RaceIdentifier raceIdentifier,
|
||||
Map<CompetitorDAO, Date> from, Map<CompetitorDAO, Date> to,
|
||||
double meters) {
|
||||
Map<CompetitorDAO, List<GPSFixDAO>> result = new HashMap<CompetitorDAO, List<GPSFixDAO>>();
|
||||
TrackedRace trackedRace = getTrackedRace(eventName, raceName);
|
||||
MeterDistance maxDistance = new MeterDistance(meters);
|
||||
for (Competitor competitor : trackedRace.getRace().getCompetitors()) {
|
||||
CompetitorDAO competitorDAO = getCompetitorDAO(competitor);
|
||||
if (from.containsKey(competitorDAO)) {
|
||||
// get Track of competitor
|
||||
GPSFixTrack<Competitor, GPSFixMoving> gpsFixTrack = trackedRace.getTrack(competitor);
|
||||
// Distance for DouglasPeucker
|
||||
TimePoint timePointFrom = new MillisecondsTimePoint(from.get(competitorDAO));
|
||||
TimePoint timePointTo = new MillisecondsTimePoint(to.get(competitorDAO));
|
||||
List<GPSFixMoving> gpsFixApproximation = trackedRace.approximate(competitor, maxDistance, timePointFrom, timePointTo);
|
||||
List<GPSFixDAO> gpsFixDouglasList = new ArrayList<GPSFixDAO>();
|
||||
for (int i = 0; i < gpsFixApproximation.size(); i++) {
|
||||
GPSFix fix = gpsFixApproximation.get(i);
|
||||
SpeedWithBearing speedWithBearing;
|
||||
if (i<gpsFixApproximation.size()-1) {
|
||||
GPSFix next = gpsFixApproximation.get(i+1);
|
||||
Bearing bearing = fix.getPosition().getBearingGreatCircle(next.getPosition());
|
||||
Speed speed = fix.getPosition().getDistance(next.getPosition()).inTime(
|
||||
next.getTimePoint().asMillis()-fix.getTimePoint().asMillis());
|
||||
speedWithBearing = new KnotSpeedWithBearingImpl(speed.getKnots(), bearing);
|
||||
} else {
|
||||
speedWithBearing = gpsFixTrack.getEstimatedSpeed(fix.getTimePoint());
|
||||
TrackedRace trackedRace = getTrackedRace(raceIdentifier);
|
||||
if (trackedRace != null) {
|
||||
MeterDistance maxDistance = new MeterDistance(meters);
|
||||
for (Competitor competitor : trackedRace.getRace().getCompetitors()) {
|
||||
CompetitorDAO competitorDAO = getCompetitorDAO(competitor);
|
||||
if (from.containsKey(competitorDAO)) {
|
||||
// get Track of competitor
|
||||
GPSFixTrack<Competitor, GPSFixMoving> gpsFixTrack = trackedRace.getTrack(competitor);
|
||||
// Distance for DouglasPeucker
|
||||
TimePoint timePointFrom = new MillisecondsTimePoint(from.get(competitorDAO));
|
||||
TimePoint timePointTo = new MillisecondsTimePoint(to.get(competitorDAO));
|
||||
List<GPSFixMoving> gpsFixApproximation = trackedRace.approximate(competitor, maxDistance,
|
||||
timePointFrom, timePointTo);
|
||||
List<GPSFixDAO> gpsFixDouglasList = new ArrayList<GPSFixDAO>();
|
||||
for (int i = 0; i < gpsFixApproximation.size(); i++) {
|
||||
GPSFix fix = gpsFixApproximation.get(i);
|
||||
SpeedWithBearing speedWithBearing;
|
||||
if (i < gpsFixApproximation.size() - 1) {
|
||||
GPSFix next = gpsFixApproximation.get(i + 1);
|
||||
Bearing bearing = fix.getPosition().getBearingGreatCircle(next.getPosition());
|
||||
Speed speed = fix.getPosition().getDistance(next.getPosition())
|
||||
.inTime(next.getTimePoint().asMillis() - fix.getTimePoint().asMillis());
|
||||
speedWithBearing = new KnotSpeedWithBearingImpl(speed.getKnots(), bearing);
|
||||
} else {
|
||||
speedWithBearing = gpsFixTrack.getEstimatedSpeed(fix.getTimePoint());
|
||||
}
|
||||
Tack tack = trackedRace.getTack(competitor, fix.getTimePoint());
|
||||
GPSFixDAO fixDAO = createGPSFixDAO(fix, speedWithBearing, tack, /* extrapolated */false);
|
||||
gpsFixDouglasList.add(fixDAO);
|
||||
}
|
||||
Tack tack = trackedRace.getTack(competitor, fix.getTimePoint());
|
||||
GPSFixDAO fixDAO = createGPSFixDAO(fix, speedWithBearing, tack, /* extrapolated */ false);
|
||||
gpsFixDouglasList.add(fixDAO);
|
||||
result.put(competitorDAO, gpsFixDouglasList);
|
||||
}
|
||||
result.put(competitorDAO, gpsFixDouglasList);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<CompetitorDAO, List<ManeuverDAO>> getManeuvers(String eventName, String raceName,
|
||||
public Map<CompetitorDAO, List<ManeuverDAO>> getManeuvers(RaceIdentifier raceIdentifier,
|
||||
Map<CompetitorDAO, Date> from, Map<CompetitorDAO, Date> to) throws NoWindException {
|
||||
Map<CompetitorDAO, List<ManeuverDAO>> result = new HashMap<CompetitorDAO, List<ManeuverDAO>>();
|
||||
TrackedRace trackedRace = getTrackedRace(eventName, raceName);
|
||||
TrackedRace trackedRace = getTrackedRace(raceIdentifier);
|
||||
for (Competitor competitor : trackedRace.getRace().getCompetitors()) {
|
||||
CompetitorDAO competitorDAO = getCompetitorDAO(competitor);
|
||||
if (from.containsKey(competitorDAO)) {
|
||||
@@ -1209,4 +1200,82 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public RaceDefinition getRace(EventNameAndRaceName eventNameAndRaceName) {
|
||||
Event event = getService().getEventByName(eventNameAndRaceName.getEventName());
|
||||
RaceDefinition race = getRaceByName(event, eventNameAndRaceName.getRaceName());
|
||||
return race;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TrackedRace getTrackedRace(EventNameAndRaceName eventNameAndRaceName) {
|
||||
Event event = getService().getEventByName(eventNameAndRaceName.getEventName());
|
||||
RaceDefinition race = getRaceByName(event, eventNameAndRaceName.getRaceName());
|
||||
TrackedRace trackedRace = getService().getOrCreateTrackedEvent(event).getTrackedRace(race);
|
||||
return trackedRace;
|
||||
}
|
||||
|
||||
@Override
|
||||
public RaceDefinition getRace(LeaderboardNameAndRaceColumnName leaderboardNameAndRaceColumnName) {
|
||||
RaceDefinition result = null;
|
||||
Leaderboard leaderboard = getService().getLeaderboardByName(leaderboardNameAndRaceColumnName.getLeaderboardName());
|
||||
if (leaderboard != null) {
|
||||
RaceInLeaderboard raceColumn = leaderboard.getRaceColumnByName(leaderboardNameAndRaceColumnName
|
||||
.getRaceColumnName());
|
||||
if (raceColumn != null && raceColumn.getTrackedRace() != null) {
|
||||
result = raceColumn.getTrackedRace().getRace();
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TrackedRace getTrackedRace(LeaderboardNameAndRaceColumnName leaderboardNameAndRaceColumnName) {
|
||||
TrackedRace result = null;
|
||||
Leaderboard leaderboard = getService().getLeaderboardByName(
|
||||
leaderboardNameAndRaceColumnName.getLeaderboardName());
|
||||
if (leaderboard != null) {
|
||||
RaceInLeaderboard raceColumn = leaderboard.getRaceColumnByName(leaderboardNameAndRaceColumnName
|
||||
.getRaceColumnName());
|
||||
if (raceColumn != null) {
|
||||
result = raceColumn.getTrackedRace();
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TrackedRace getExistingTrackedRace(LeaderboardNameAndRaceColumnName leaderboardNameAndRaceColumnName) {
|
||||
return getTrackedRace(leaderboardNameAndRaceColumnName);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TrackedRace getExistingTrackedRace(EventNameAndRaceName eventNameAndRaceName) {
|
||||
Event event = getService().getEventByName(eventNameAndRaceName.getEventName());
|
||||
RaceDefinition race = getRaceByName(event, eventNameAndRaceName.getRaceName());
|
||||
TrackedRace trackedRace = getService().getOrCreateTrackedEvent(event).getExistingTrackedRace(race);
|
||||
return trackedRace;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Event getEvent(EventNameAndRaceName eventIdentifier) {
|
||||
return getService().getEventByName(eventIdentifier.getEventName());
|
||||
}
|
||||
|
||||
private RaceDefinition getRace(RaceIdentifier raceIdentifier) {
|
||||
return (RaceDefinition) raceIdentifier.getRace(this);
|
||||
}
|
||||
|
||||
private TrackedRace getTrackedRace(RaceIdentifier raceIdentifier) {
|
||||
return (TrackedRace) raceIdentifier.getTrackedRace(this);
|
||||
}
|
||||
|
||||
private TrackedRace getExistingTrackedRace(RaceIdentifier raceIdentifier) {
|
||||
return (TrackedRace) raceIdentifier.getExistingTrackedRace(this);
|
||||
}
|
||||
|
||||
private Event getEvent(EventIdentifier eventIdentifier) {
|
||||
return (Event) eventIdentifier.getEvent(this);
|
||||
}
|
||||
}
|
||||
Executable
+4
@@ -0,0 +1,4 @@
|
||||
package com.sap.sailing.gwt.ui.shared;
|
||||
|
||||
public interface EventAndRaceIdentifier extends EventIdentifier, RaceIdentifier {
|
||||
}
|
||||
Executable
+9
@@ -0,0 +1,9 @@
|
||||
package com.sap.sailing.gwt.ui.shared;
|
||||
|
||||
public interface EventFetcher {
|
||||
/**
|
||||
* Not to be executed on the client; when executed on the server, returns an object of type <code>Event</code>
|
||||
*/
|
||||
Object getEvent(EventNameAndRaceName eventIdentifier);
|
||||
|
||||
}
|
||||
Executable
+5
@@ -0,0 +1,5 @@
|
||||
package com.sap.sailing.gwt.ui.shared;
|
||||
|
||||
public interface EventIdentifier {
|
||||
Object getEvent(EventFetcher eventFetcher);
|
||||
}
|
||||
Executable
+37
@@ -0,0 +1,37 @@
|
||||
package com.sap.sailing.gwt.ui.shared;
|
||||
|
||||
public class EventNameAndRaceName implements EventAndRaceIdentifier {
|
||||
private String eventName;
|
||||
private String raceName;
|
||||
|
||||
EventNameAndRaceName() {}
|
||||
|
||||
public EventNameAndRaceName(String eventName, String raceName) {
|
||||
super();
|
||||
this.eventName = eventName;
|
||||
this.raceName = raceName;
|
||||
}
|
||||
public String getEventName() {
|
||||
return eventName;
|
||||
}
|
||||
public String getRaceName() {
|
||||
return raceName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getRace(RaceFetcher raceFetcher) {
|
||||
return raceFetcher.getRace(this);
|
||||
}
|
||||
@Override
|
||||
public Object getTrackedRace(RaceFetcher raceFetcher) {
|
||||
return raceFetcher.getTrackedRace(this);
|
||||
}
|
||||
@Override
|
||||
public Object getExistingTrackedRace(RaceFetcher raceFetcher) {
|
||||
return raceFetcher.getExistingTrackedRace(this);
|
||||
}
|
||||
@Override
|
||||
public Object getEvent(EventFetcher eventFetcher) {
|
||||
return eventFetcher.getEvent(this);
|
||||
}
|
||||
}
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
package com.sap.sailing.gwt.ui.shared;
|
||||
|
||||
|
||||
|
||||
public class LeaderboardNameAndRaceColumnName implements RaceIdentifier {
|
||||
private String leaderboardName;
|
||||
private String raceColumnName;
|
||||
|
||||
LeaderboardNameAndRaceColumnName() {}
|
||||
|
||||
public LeaderboardNameAndRaceColumnName(String leaderboardName, String raceColumnName) {
|
||||
super();
|
||||
this.leaderboardName = leaderboardName;
|
||||
this.raceColumnName = raceColumnName;
|
||||
}
|
||||
public String getLeaderboardName() {
|
||||
return leaderboardName;
|
||||
}
|
||||
public String getRaceColumnName() {
|
||||
return raceColumnName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getRace(RaceFetcher raceFetcher) {
|
||||
return raceFetcher.getRace(this);
|
||||
}
|
||||
@Override
|
||||
public Object getTrackedRace(RaceFetcher raceFetcher) {
|
||||
return raceFetcher.getTrackedRace(this);
|
||||
}
|
||||
@Override
|
||||
public Object getExistingTrackedRace(RaceFetcher raceFetcher) {
|
||||
return raceFetcher.getExistingTrackedRace(this);
|
||||
}
|
||||
}
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
package com.sap.sailing.gwt.ui.shared;
|
||||
|
||||
public interface RaceFetcher {
|
||||
/**
|
||||
* Not for execution on the client; on the server, returns a <code>RaceDefinition</code> object.
|
||||
*/
|
||||
Object getRace(EventNameAndRaceName eventNameAndRaceName);
|
||||
|
||||
/**
|
||||
* Not for execution on the client; on the server, returns a <code>TrackedRace</code> object.
|
||||
*/
|
||||
Object getTrackedRace(EventNameAndRaceName eventNameAndRaceName);
|
||||
|
||||
Object getRace(LeaderboardNameAndRaceColumnName leaderboardNameAndRaceColumnName);
|
||||
|
||||
Object getTrackedRace(LeaderboardNameAndRaceColumnName leaderboardNameAndRaceColumnName);
|
||||
|
||||
Object getExistingTrackedRace(LeaderboardNameAndRaceColumnName leaderboardNameAndRaceColumnName);
|
||||
|
||||
Object getExistingTrackedRace(EventNameAndRaceName eventNameAndRaceName);
|
||||
}
|
||||
Executable
+17
@@ -0,0 +1,17 @@
|
||||
package com.sap.sailing.gwt.ui.shared;
|
||||
|
||||
import com.google.gwt.user.client.rpc.IsSerializable;
|
||||
|
||||
public interface RaceIdentifier extends IsSerializable {
|
||||
Object getRace(RaceFetcher raceFetcher);
|
||||
|
||||
/**
|
||||
* Blocks and waits if the tracked race for this race identifier doesn't exist yet.
|
||||
*/
|
||||
Object getTrackedRace(RaceFetcher raceFetcher);
|
||||
|
||||
/**
|
||||
* Immediately returns <code>null</code> if the tracked race for this race identifier doesn't exist yet.
|
||||
*/
|
||||
Object getExistingTrackedRace(RaceFetcher sailingServiceImpl);
|
||||
}
|
||||
Reference in new issue
Block a user