mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-11-02 17:19:37 +00:00
Merge remote-tracking branch 'origin/master' into simulator
Conflicts: java/com.sap.sailing.domain.common/META-INF/MANIFEST.MF java/com.sap.sailing.domain.persistence/META-INF/MANIFEST.MF java/com.sap.sailing.domain.swisstimingadapter.test/META-INF/MANIFEST.MF java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/test/EndToEndListeningStoreAndFowardTest.java java/com.sap.sailing.domain.tractracadapter/META-INF/MANIFEST.MF java/com.sap.sailing.domain/META-INF/MANIFEST.MF java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/GwtTestCaseColumnToggling.java java/com.sap.sailing.gwt.ui/AdminConsole.css java/com.sap.sailing.gwt.ui/CommonControls.css java/com.sap.sailing.gwt.ui/META-INF/MANIFEST.MF java/com.sap.sailing.gwt.ui/RaceBoard.css java/com.sap.sailing.gwt.ui/highcharts/js/adapters/mootools-adapter.js java/com.sap.sailing.gwt.ui/highcharts/js/adapters/prototype-adapter.js java/com.sap.sailing.gwt.ui/highcharts/js/highcharts.js java/com.sap.sailing.gwt.ui/highcharts/js/modules/exporting.js java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/actions/GetWindInfoAction.java java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/ImagesBarCell.java java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/LeaderboardConfigImagesBarCell.java java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/LeaderboardCreateDialog.java java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/LeaderboardDialog.java java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/LeaderboardEditDialog.java java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/LeaderboardRaceConfigImagesBarCell.java java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceColumnInLeaderboardDialog.java java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/TrackedRacesListComposite.java java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompetitorSelectionProvider.java java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LogoAndTitlePanel.java java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/RaceTimePanel.java java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/RaceTimePanelSettingsDialogComponent.java java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.java java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_de.properties java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/TimePanelSettingsDialogComponent.java java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/LeaderboardResources.java java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/LeaderboardSettingsFactory.java java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardEntryPoint.java java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardViewModes.java java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/CourseDTO.java java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/MarkPassingTimesDTO.java java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RaceTimesInfoDTO.java java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/components/ComponentResources.java java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/controls/slider/SliderBar.css java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/controls/slider/SliderBar.java java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/racemap/BoatCanvasOverlay.java java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/racemap/RaceMap.java java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/racemap/RaceMapSettings.java java/com.sap.sailing.gwt.ui/src/main/resources/com/sap/sailing/gwt/ui/Leaderboard.gwt.xml java/com.sap.sailing.gwt.ui/src/main/resources/com/sap/sailing/gwt/ui/RaceBoard.gwt.xml java/com.sap.sailing.kiworesultimport.test/.project java/com.sap.sailing.kiworesultimport/.project java/com.sap.sailing.kiworesultimport/pom.xml java/com.sap.sailing.mongodb.test/META-INF/MANIFEST.MF java/com.sap.sailing.mongodb/src/com/sap/sailing/mongodb/MongoDBConfiguration.java java/com.sap.sailing.server/SailingServer (No Proxy).launch java/com.sap.sailing.server/SailingServer (Proxy).launch java/com.sap.sailing.server/WEB-INF/web.xml java/com.sap.sailing.server/src/com/sap/sailing/server/RacingEventService.java java/com.sap.sailing.server/src/com/sap/sailing/server/impl/Activator.java java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RacingEventServiceImpl.java java/com.sap.sailing.targetplatform.base/site.xml java/com.sap.sailing.targetplatform/scripts/createLocalBaseP2repository.sh java/com.sap.sailing.xcelsiusadapter/META-INF/MANIFEST.MF java/com.sap.sailing.xcelsiusadapter/src/com/sap/sailing/xcelsiusadapter/Action.java java/com.sap.sailing.xcelsiusadapter/src/com/sap/sailing/xcelsiusadapter/GPSPerRace.java java/com.sap.sailing.xcelsiusadapter/src/com/sap/sailing/xcelsiusadapter/ListEvents.java java/com.sap.sailing.xcelsiusadapter/src/com/sap/sailing/xcelsiusadapter/RankPerLeg.java java/com.sap.sailing.xcelsiusadapter/src/com/sap/sailing/xcelsiusadapter/RankPerLeg2.java java/com.sap.sailing.xcelsiusadapter/src/com/sap/sailing/xcelsiusadapter/RankPerRace.java java/com.sap.sailing.xcelsiusadapter/src/com/sap/sailing/xcelsiusadapter/XcelsiusApp.java java/com.tractrac.resultapi/META-INF/MANIFEST.MF java/com.tractrac.resultapi/javadoc/allclasses-frame.html java/com.tractrac.resultapi/javadoc/allclasses-noframe.html java/com.tractrac.resultapi/javadoc/com/tractrac/ResultAPI/LiveResult.html java/com.tractrac.resultapi/javadoc/com/tractrac/ResultAPI/LiveResultItem.html java/com.tractrac.resultapi/javadoc/com/tractrac/ResultAPI/MarkResult.html java/com.tractrac.resultapi/javadoc/com/tractrac/ResultAPI/MarkResultItem.html java/com.tractrac.resultapi/javadoc/com/tractrac/ResultAPI/PerLegResult.html java/com.tractrac.resultapi/javadoc/com/tractrac/ResultAPI/ResultGenerator.html java/com.tractrac.resultapi/javadoc/com/tractrac/ResultAPI/class-use/LiveResult.html java/com.tractrac.resultapi/javadoc/com/tractrac/ResultAPI/class-use/LiveResultItem.html java/com.tractrac.resultapi/javadoc/com/tractrac/ResultAPI/class-use/MarkResult.html java/com.tractrac.resultapi/javadoc/com/tractrac/ResultAPI/class-use/MarkResultItem.html java/com.tractrac.resultapi/javadoc/com/tractrac/ResultAPI/class-use/PerLegResult.html java/com.tractrac.resultapi/javadoc/com/tractrac/ResultAPI/class-use/ResultGenerator.html java/com.tractrac.resultapi/javadoc/com/tractrac/ResultAPI/package-frame.html java/com.tractrac.resultapi/javadoc/com/tractrac/ResultAPI/package-summary.html java/com.tractrac.resultapi/javadoc/com/tractrac/ResultAPI/package-tree.html java/com.tractrac.resultapi/javadoc/com/tractrac/ResultAPI/package-use.html java/com.tractrac.resultapi/javadoc/constant-values.html java/com.tractrac.resultapi/javadoc/deprecated-list.html java/com.tractrac.resultapi/javadoc/help-doc.html java/com.tractrac.resultapi/javadoc/index-files/index-1.html java/com.tractrac.resultapi/javadoc/index-files/index-2.html java/com.tractrac.resultapi/javadoc/index-files/index-3.html java/com.tractrac.resultapi/javadoc/index-files/index-4.html java/com.tractrac.resultapi/javadoc/index-files/index-5.html java/com.tractrac.resultapi/javadoc/index-files/index-6.html java/com.tractrac.resultapi/javadoc/index-files/index-7.html java/com.tractrac.resultapi/javadoc/index-files/index-8.html java/com.tractrac.resultapi/javadoc/index-files/index-9.html java/com.tractrac.resultapi/javadoc/index.html java/com.tractrac.resultapi/javadoc/overview-tree.html java/com.tractrac.resultapi/javadoc/package-list java/com.tractrac.resultapi/javadoc/stylesheet.css java/com.tractrac.resultapi/src/com/tractrac/ResultAPITester.java java/org.moxieapps.gwt.highcharts/META-INF/MANIFEST.MF java/org.moxieapps.gwt.highcharts/pom.xml java/pom.xml java/target/configuration/jetty/etc/jetty.xml java/target/configuration/logging.properties java/target/configuration/logging_debug.properties java/target/install python/.gitignore python/bootstrap.py python/buildout.cfg python/dev.cfg python/prod.cfg python/src/sailing.connector/README.txt python/src/sailing.connector/docs/HISTORY.txt python/src/sailing.connector/sailing/__init__.py python/src/sailing.connector/sailing/connector/__init__.py python/src/sailing.connector/sailing/connector/provider.py python/src/sailing.connector/setup.py python/src/sailing.db/README.txt python/src/sailing.db/docs/HISTORY.txt python/src/sailing.db/sailing/__init__.py python/src/sailing.db/sailing/db/__init__.py python/src/sailing.db/sailing/db/config.py python/src/sailing.db/sailing/db/database.py python/src/sailing.db/sailing/db/model/__init__.py python/src/sailing.db/sailing/db/model/base.py python/src/sailing.db/sailing/db/model/entities.py python/src/sailing.db/sailing/db/model/util.py python/src/sailing.db/sailing/db/monitoring.py python/src/sailing.db/setup.py python/src/sailing.web/MANIFEST.in python/src/sailing.web/README.txt python/src/sailing.web/docs/HISTORY.txt python/src/sailing.web/sailing/__init__.py python/src/sailing.web/sailing/web/__init__.py python/src/sailing.web/sailing/web/adapter/configure.zcml python/src/sailing.web/sailing/web/browser/configure.zcml python/src/sailing.web/sailing/web/browser/core.py python/src/sailing.web/sailing/web/browser/functions.py python/src/sailing.web/sailing/web/browser/moderator-static/app.js python/src/sailing.web/sailing/web/browser/moderator-static/index.html python/src/sailing.web/sailing/web/browser/moderator-static/iphone.html python/src/sailing.web/sailing/web/browser/moderator-static/jquery.js python/src/sailing.web/sailing/web/browser/moderator-static/mobile.css python/src/sailing.web/sailing/web/browser/moderator-static/overall.html python/src/sailing.web/sailing/web/browser/moderator-static/screen.css python/src/sailing.web/sailing/web/browser/static/core.js python/src/sailing.web/sailing/web/browser/static/css/jquery-ui-1.8.11.custom.css.txt python/src/sailing.web/sailing/web/browser/static/css/jquery.timeslider.css.txt python/src/sailing.web/sailing/web/browser/static/css/styles.css.txt python/src/sailing.web/sailing/web/browser/static/js/jquery-1.4.4.min.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui-timepicker-addon.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery-ui-i18n.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-af.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-ar-DZ.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-ar.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-az.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-bg.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-bs.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-ca.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-cs.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-da.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-de.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-el.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-en-AU.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-en-GB.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-en-NZ.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-eo.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-es.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-et.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-eu.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-fa.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-fi.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-fo.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-fr-CH.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-fr.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-gl.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-he.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-hr.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-hu.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-hy.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-id.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-is.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-it.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-ja.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-ko.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-kz.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-lt.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-lv.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-ml.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-ms.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-nl.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-no.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-pl.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-pt-BR.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-pt.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-rm.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-ro.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-ru.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-sk.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-sl.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-sq.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-sr-SR.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-sr.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-sv.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-ta.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-th.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-tj.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-tr.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-uk.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-vi.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-zh-CN.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-zh-HK.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/i18n/jquery.ui.datepicker-zh-TW.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/jquery.effects.core.min.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/jquery.ui.accordion.min.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/jquery.ui.autocomplete.min.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/jquery.ui.core.min.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/jquery.ui.datepicker.min.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/jquery.ui.dialog.min.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/jquery.ui.mouse.min.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/jquery.ui.position.min.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/jquery.ui.resizable.min.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/jquery.ui.selectable.min.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/jquery.ui.slider.min.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/jquery.ui.sortable.min.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/jquery.ui.tabs.min.js python/src/sailing.web/sailing/web/browser/static/js/jquery-ui/jquery.ui.widget.min.js python/src/sailing.web/sailing/web/browser/static/js/jquery.form.js python/src/sailing.web/sailing/web/browser/static/js/jquery.googlemaps1.01.js python/src/sailing.web/sailing/web/browser/static/js/jquery.timeslider.js python/src/sailing.web/sailing/web/browser/static/js/mapmarker.js python/src/sailing.web/sailing/web/browser/static/maps.js python/src/sailing.web/sailing/web/browser/templates/database-stats.pt python/src/sailing.web/sailing/web/browser/templates/general-competitor-info.pt python/src/sailing.web/sailing/web/browser/templates/general-race-info.pt python/src/sailing.web/sailing/web/browser/templates/iphone-status.pt python/src/sailing.web/sailing/web/browser/templates/java-connector-custom-race.pt python/src/sailing.web/sailing/web/browser/templates/java-connector-select-races.pt python/src/sailing.web/sailing/web/browser/templates/java-connector.pt python/src/sailing.web/sailing/web/browser/templates/leaderboard-info.pt python/src/sailing.web/sailing/web/browser/templates/leaderboard-live.pt python/src/sailing.web/sailing/web/browser/templates/leaderboard.pt python/src/sailing.web/sailing/web/browser/templates/live-info-view.pt python/src/sailing.web/sailing/web/browser/templates/live-info.pt python/src/sailing.web/sailing/web/browser/templates/maintemplate.pt python/src/sailing.web/sailing/web/browser/templates/map-overview-details.pt python/src/sailing.web/sailing/web/browser/templates/map-overview.pt python/src/sailing.web/sailing/web/browser/templates/udp-configurator.pt python/src/sailing.web/sailing/web/browser/templates/waypoint-info.pt python/src/sailing.web/sailing/web/browser/templates/wind-settings-info.pt python/src/sailing.web/sailing/web/browser/templates/wind-settings.pt python/src/sailing.web/sailing/web/config.py python/src/sailing.web/sailing/web/configure.zcml python/src/sailing.web/sailing/web/interfaces.py python/src/sailing.web/sailing/web/tests/data/events.txt python/src/sailing.web/sailing/web/tests/data/events2.txt python/src/sailing.web/sailing/web/tests/data/events2updated.txt python/src/sailing.web/sailing/web/tests/data/fixes.txt python/src/sailing.web/sailing/web/tests/data/race.txt python/src/sailing.web/sailing/web/tests/data/race_t1.txt python/src/sailing.web/sailing/web/tests/data/waypoints.txt python/src/sailing.web/sailing/web/tests/test_base.py python/src/sailing.web/sailing/web/tests/utils.py python/src/sailing.web/sailing/web/util.py python/src/sailing.web/setup.py python/templates/app_debug.sh python/templates/app_production_start.sh python/templates/app_production_stop.sh python/templates/db-dev.ini python/templates/db.ini python/templates/mongodb-master.cfg python/templates/webserver-dev.ini python/templates/webserver-prod.ini
This commit is contained in:
commit
fc208742ce
1168 files changed
+45145
-47043
No files matched your search
+3
-3
@@ -10,13 +10,13 @@ import junit.framework.Assert;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import com.sap.sailing.domain.common.EventNameAndRaceName;
|
||||
import com.sap.sailing.domain.common.RegattaNameAndRaceName;
|
||||
|
||||
public class IdentifierSerializationTest {
|
||||
|
||||
@Test
|
||||
public void identifierSerializationTest() throws IOException, ClassNotFoundException {
|
||||
EventNameAndRaceName original = new EventNameAndRaceName("TestEvent", "Test Race");
|
||||
RegattaNameAndRaceName original = new RegattaNameAndRaceName("TestEvent", "Test Race");
|
||||
PipedInputStream pis = new PipedInputStream();
|
||||
PipedOutputStream pos = new PipedOutputStream(pis);
|
||||
|
||||
@@ -27,7 +27,7 @@ public class IdentifierSerializationTest {
|
||||
oos.writeObject(original);
|
||||
oos.flush();
|
||||
|
||||
EventNameAndRaceName streamed = (EventNameAndRaceName) ois.readObject();
|
||||
RegattaNameAndRaceName streamed = (RegattaNameAndRaceName) ois.readObject();
|
||||
|
||||
ois.close();
|
||||
oos.close();
|
||||
|
||||
+4
-3
@@ -6,6 +6,7 @@ import static org.junit.Assert.assertNotNull;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.sap.sailing.domain.leaderboard.FlexibleLeaderboard;
|
||||
import com.sap.sailing.domain.leaderboard.Leaderboard;
|
||||
import com.sap.sailing.domain.leaderboard.impl.ResultDiscardingRuleImpl;
|
||||
import com.sap.sailing.server.RacingEventService;
|
||||
@@ -25,12 +26,12 @@ public class LeaderboardDiscardingRulesTest {
|
||||
@Test
|
||||
public void testDiscardingRoules() {
|
||||
racingEventService.removeLeaderboard(LEADERBOARDNAME);
|
||||
racingEventService.addLeaderboard(LEADERBOARDNAME, new int[] { 1, 4 });
|
||||
Leaderboard leaderboard = racingEventService.getLeaderboardByName(LEADERBOARDNAME);
|
||||
racingEventService.addFlexibleLeaderboard(LEADERBOARDNAME, new int[] { 1, 4 });
|
||||
FlexibleLeaderboard leaderboard = (FlexibleLeaderboard) racingEventService.getLeaderboardByName(LEADERBOARDNAME);
|
||||
assertNotNull(leaderboard);
|
||||
int[] discardingRoulesNew = new int[] { 1, 5 };
|
||||
leaderboard.setResultDiscardingRule(new ResultDiscardingRuleImpl(discardingRoulesNew));
|
||||
racingEventService.updateStoredLeaderboard(leaderboard);
|
||||
racingEventService.updateStoredFlexibleLeaderboard(leaderboard);
|
||||
Leaderboard leaderboardNew = racingEventService.getLeaderboardByName(LEADERBOARDNAME);
|
||||
assertNotNull(leaderboardNew);
|
||||
int[] result = leaderboardNew.getResultDiscardingRule().getDiscardIndexResultsStartingWithHowManyRaces();
|
||||
|
||||
+7
-5
@@ -9,7 +9,9 @@ import java.util.Map;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.sap.sailing.domain.base.RaceColumn;
|
||||
import com.sap.sailing.domain.common.DefaultLeaderboardName;
|
||||
import com.sap.sailing.domain.leaderboard.FlexibleLeaderboard;
|
||||
import com.sap.sailing.domain.leaderboard.Leaderboard;
|
||||
import com.sap.sailing.mongodb.MongoDBService;
|
||||
import com.sap.sailing.operationaltransformation.Peer;
|
||||
@@ -19,7 +21,7 @@ import com.sap.sailing.server.RacingEventService;
|
||||
import com.sap.sailing.server.RacingEventServiceOperation;
|
||||
import com.sap.sailing.server.impl.RacingEventServiceImpl;
|
||||
import com.sap.sailing.server.operationaltransformation.AddColumnToLeaderboard;
|
||||
import com.sap.sailing.server.operationaltransformation.CreateLeaderboard;
|
||||
import com.sap.sailing.server.operationaltransformation.CreateFlexibleLeaderboard;
|
||||
import com.sap.sailing.server.operationaltransformation.MoveLeaderboardColumnUp;
|
||||
import com.sap.sailing.server.operationaltransformation.OperationalTransformer;
|
||||
import com.sap.sailing.server.operationaltransformation.RemoveLeaderboard;
|
||||
@@ -48,7 +50,7 @@ public class OperationalTransformationTest {
|
||||
|
||||
@Test
|
||||
public void testAddLeaderboard() {
|
||||
RacingEventServiceOperation<Leaderboard> addLeaderboardOp = new CreateLeaderboard(LEADERBOARDNAME, new int[] { 5 });
|
||||
RacingEventServiceOperation<FlexibleLeaderboard> addLeaderboardOp = new CreateFlexibleLeaderboard(LEADERBOARDNAME, new int[] { 5 });
|
||||
server.apply(addLeaderboardOp);
|
||||
server.waitForNotRunning();
|
||||
replica.waitForNotRunning();
|
||||
@@ -61,7 +63,7 @@ public class OperationalTransformationTest {
|
||||
|
||||
@Test
|
||||
public void testAddColumnToLeaderboardOnClientAndRemoveLeaderboardOnServer() throws InterruptedException {
|
||||
RacingEventServiceOperation<Void> addLeaderboardColumn = new AddColumnToLeaderboard(
|
||||
RacingEventServiceOperation<RaceColumn> addLeaderboardColumn = new AddColumnToLeaderboard(
|
||||
"newColumn", DefaultLeaderboardName.DEFAULT_LEADERBOARD_NAME, /* medalRace */ true);
|
||||
server.apply(addLeaderboardColumn);
|
||||
RacingEventServiceOperation<Void> removeDefaultLeaderboard = new RemoveLeaderboard(DefaultLeaderboardName.DEFAULT_LEADERBOARD_NAME);
|
||||
@@ -74,10 +76,10 @@ public class OperationalTransformationTest {
|
||||
|
||||
@Test
|
||||
public void testAddOneColumnOnEachSideThenMoveOneUpOnServerAndRemoveLeaderboardOnClient() throws InterruptedException {
|
||||
RacingEventServiceOperation<Void> addLeaderboardColumnOnServer = new AddColumnToLeaderboard(
|
||||
RacingEventServiceOperation<RaceColumn> addLeaderboardColumnOnServer = new AddColumnToLeaderboard(
|
||||
"newColumn1", DefaultLeaderboardName.DEFAULT_LEADERBOARD_NAME, /* medalRace */ true);
|
||||
server.apply(addLeaderboardColumnOnServer);
|
||||
RacingEventServiceOperation<Void> addLeaderboardColumnOnReplica = new AddColumnToLeaderboard(
|
||||
RacingEventServiceOperation<RaceColumn> addLeaderboardColumnOnReplica = new AddColumnToLeaderboard(
|
||||
"newColumn2", DefaultLeaderboardName.DEFAULT_LEADERBOARD_NAME, /* medalRace */ true);
|
||||
replica.apply(addLeaderboardColumnOnReplica);
|
||||
replica.waitForNotRunning();
|
||||
|
||||
+15
-8
@@ -4,9 +4,10 @@ import java.io.IOException;
|
||||
import java.net.MalformedURLException;
|
||||
import java.util.Set;
|
||||
|
||||
import com.sap.sailing.domain.base.Event;
|
||||
import com.sap.sailing.domain.base.Regatta;
|
||||
import com.sap.sailing.domain.base.RaceDefinition;
|
||||
import com.sap.sailing.domain.tracking.DynamicTrackedEvent;
|
||||
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
||||
import com.sap.sailing.domain.tracking.DynamicTrackedRegatta;
|
||||
import com.sap.sailing.domain.tracking.RaceTracker;
|
||||
import com.sap.sailing.domain.tracking.RacesHandle;
|
||||
import com.sap.sailing.domain.tracking.WindStore;
|
||||
@@ -14,7 +15,7 @@ import com.sap.sailing.domain.tracking.WindStore;
|
||||
public class RaceTrackerMock implements RaceTracker{
|
||||
|
||||
private Long id;
|
||||
private Event event;
|
||||
private Regatta regatta;
|
||||
private Set<RaceDefinition> raceDefinitions;
|
||||
private boolean isTracking;
|
||||
|
||||
@@ -24,10 +25,10 @@ public class RaceTrackerMock implements RaceTracker{
|
||||
|
||||
|
||||
|
||||
public RaceTrackerMock(Long id, Event event, Set<RaceDefinition> raceDefinitions, boolean isTracking) {
|
||||
public RaceTrackerMock(Long id, Regatta regatta, Set<RaceDefinition> raceDefinitions, boolean isTracking) {
|
||||
super();
|
||||
this.id = id;
|
||||
this.event = event;
|
||||
this.regatta = regatta;
|
||||
this.raceDefinitions = raceDefinitions;
|
||||
this.isTracking = isTracking;
|
||||
}
|
||||
@@ -50,8 +51,8 @@ public class RaceTrackerMock implements RaceTracker{
|
||||
}
|
||||
|
||||
@Override
|
||||
public Event getEvent() {
|
||||
return event;
|
||||
public Regatta getRegatta() {
|
||||
return regatta;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -65,7 +66,7 @@ public class RaceTrackerMock implements RaceTracker{
|
||||
}
|
||||
|
||||
@Override
|
||||
public DynamicTrackedEvent getTrackedEvent() {
|
||||
public DynamicTrackedRegatta getTrackedRegatta() {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
@@ -80,4 +81,10 @@ public class RaceTrackerMock implements RaceTracker{
|
||||
return id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<RegattaAndRaceIdentifier> getRaceIdentifiers() {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
+45
-44
@@ -19,15 +19,15 @@ import org.junit.Test;
|
||||
|
||||
import com.sap.sailing.domain.base.BoatClass;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.Event;
|
||||
import com.sap.sailing.domain.base.Regatta;
|
||||
import com.sap.sailing.domain.base.RaceDefinition;
|
||||
import com.sap.sailing.domain.base.Waypoint;
|
||||
import com.sap.sailing.domain.base.impl.BoatClassImpl;
|
||||
import com.sap.sailing.domain.base.impl.CourseImpl;
|
||||
import com.sap.sailing.domain.base.impl.EventImpl;
|
||||
import com.sap.sailing.domain.base.impl.RegattaImpl;
|
||||
import com.sap.sailing.domain.base.impl.RaceDefinitionImpl;
|
||||
import com.sap.sailing.domain.tracking.RaceTracker;
|
||||
import com.sap.sailing.domain.tracking.TrackedEvent;
|
||||
import com.sap.sailing.domain.tracking.TrackedRegatta;
|
||||
import com.sap.sailing.domain.tracking.TrackedRace;
|
||||
import com.sap.sailing.domain.tracking.impl.EmptyWindStore;
|
||||
import com.sap.sailing.server.RacingEventService;
|
||||
@@ -41,7 +41,7 @@ public class RaceTrackerStartStopTest {
|
||||
private final static String BOATCLASSNAME = "HAPPYBOATCLASS";
|
||||
|
||||
private RacingEventServiceImplMock racingEventService;
|
||||
private Event event;
|
||||
private Regatta regatta;
|
||||
private BoatClass boatClass;
|
||||
private Set<RaceTracker> raceTrackerSet = new HashSet<RaceTracker>();
|
||||
|
||||
@@ -57,22 +57,22 @@ public class RaceTrackerStartStopTest {
|
||||
public void setUp() {
|
||||
racingEventService = new RacingEventServiceImplMock();
|
||||
boatClass = new BoatClassImpl(BOATCLASSNAME, /* typicallyStartsUpwind */ true);
|
||||
event = new EventImpl(EVENTNAME, boatClass);
|
||||
racingEventService.getEventsByName().put(EVENTNAME, event);
|
||||
TrackedEvent trackedEvent1 = racingEventService.getOrCreateTrackedEvent(event);
|
||||
racingEventService.getEventsByNameMap().put(EVENTNAME, event);
|
||||
regatta = new RegattaImpl(EVENTNAME, boatClass, /* trackedRegattaRegistry */ null);
|
||||
racingEventService.getEventsByName().put(EVENTNAME, regatta);
|
||||
TrackedRegatta trackedRegatta1 = racingEventService.getOrCreateTrackedRegatta(regatta);
|
||||
racingEventService.getEventsByNameMap().put(EVENTNAME, regatta);
|
||||
raceTrackerSet = new HashSet<RaceTracker>();
|
||||
raceDef1 = new RaceDefinitionImpl(RACENAME1, new CourseImpl("Course1", new ArrayList<Waypoint>()), boatClass, new ArrayList<Competitor>());
|
||||
raceDef2 = new RaceDefinitionImpl(RACENAME2, new CourseImpl("Course2", new ArrayList<Waypoint>()), boatClass, new ArrayList<Competitor>());
|
||||
raceDef3 = new RaceDefinitionImpl(RACENAME3, new CourseImpl("Course3", new ArrayList<Waypoint>()), boatClass, new ArrayList<Competitor>());
|
||||
event.addRace(raceDef1);
|
||||
trackedEvent1.createTrackedRace(raceDef1, /* windStore */ EmptyWindStore.INSTANCE, /* millisecondsOverWhichToAverageWind */ 0l,
|
||||
regatta.addRace(raceDef1);
|
||||
trackedRegatta1.createTrackedRace(raceDef1, /* windStore */ EmptyWindStore.INSTANCE, /* delayToLiveInMillis */ 0l, /* millisecondsOverWhichToAverageWind */ 0l,
|
||||
/* millisecondsOverWhichToAverageSpeed */ 0l, /* raceDefinitionSetToUpdate */ null);
|
||||
event.addRace(raceDef2);
|
||||
trackedEvent1.createTrackedRace(raceDef2, /* windStore */ EmptyWindStore.INSTANCE, /* millisecondsOverWhichToAverageWind */ 0l,
|
||||
regatta.addRace(raceDef2);
|
||||
trackedRegatta1.createTrackedRace(raceDef2, /* windStore */ EmptyWindStore.INSTANCE, /* delayToLiveInMillis */ 0l, /* millisecondsOverWhichToAverageWind */ 0l,
|
||||
/* millisecondsOverWhichToAverageSpeed */ 0l, /* raceDefinitionSetToUpdate */ null);
|
||||
event.addRace(raceDef3);
|
||||
trackedEvent1.createTrackedRace(raceDef3, /* windStore */ EmptyWindStore.INSTANCE, /* millisecondsOverWhichToAverageWind */ 0l,
|
||||
regatta.addRace(raceDef3);
|
||||
trackedRegatta1.createTrackedRace(raceDef3, /* windStore */ EmptyWindStore.INSTANCE, /* delayToLiveInMillis */ 0l, /* millisecondsOverWhichToAverageWind */ 0l,
|
||||
/* millisecondsOverWhichToAverageSpeed */ 0l, /* raceDefinitionSetToUpdate */ null);
|
||||
Set<RaceDefinition> raceDefinitionSetRace1 = new HashSet<RaceDefinition>();
|
||||
raceDefinitionSetRace1.add(raceDef1);
|
||||
@@ -86,33 +86,33 @@ public class RaceTrackerStartStopTest {
|
||||
Long trackerID1 = new Long(1);
|
||||
Long trackerID2 = new Long(2);
|
||||
Long trackerID3 = new Long(3);
|
||||
raceTracker1 = new RaceTrackerMock(new Long(1), event, raceDefinitionSetRace1, true);
|
||||
raceTracker2 = new RaceTrackerMock(new Long(2), event, raceDefinitionSetRace2, true);
|
||||
raceTracker3 = new RaceTrackerMock(new Long(3), event, raceDefinitionSetRace3, true);
|
||||
raceTracker1 = new RaceTrackerMock(new Long(1), regatta, raceDefinitionSetRace1, true);
|
||||
raceTracker2 = new RaceTrackerMock(new Long(2), regatta, raceDefinitionSetRace2, true);
|
||||
raceTracker3 = new RaceTrackerMock(new Long(3), regatta, raceDefinitionSetRace3, true);
|
||||
raceTrackerSet.add(raceTracker1);
|
||||
raceTrackerSet.add(raceTracker2);
|
||||
raceTrackerSet.add(raceTracker3);
|
||||
racingEventService.getRaceTrackersByEventMap().put(event, raceTrackerSet);
|
||||
racingEventService.getRaceTrackersByEventMap().put(regatta, raceTrackerSet);
|
||||
racingEventService.getRaceTrackersByIDMap().put(trackerID1, raceTracker1);
|
||||
racingEventService.getRaceTrackersByIDMap().put(trackerID2, raceTracker2);
|
||||
racingEventService.getRaceTrackersByIDMap().put(trackerID3, raceTracker3);
|
||||
}
|
||||
|
||||
/**
|
||||
* This test method tests, if the {@link RacingEventService#stopTracking(Event, RaceDefinition) stopTracking} method works correctly.
|
||||
* This test method tests, if the {@link RacingEventService#stopTracking(Regatta, RaceDefinition) stopTracking} method works correctly.
|
||||
*/
|
||||
@Test
|
||||
public void testStopTrackingRace() throws MalformedURLException, IOException, InterruptedException {
|
||||
Event event = racingEventService.getEventByName(EVENTNAME);
|
||||
TrackedEvent trackedEvent = racingEventService.getTrackedEvent(event);
|
||||
assertNotNull(event.getRaceByName(RACENAME2));
|
||||
assertNotNull(trackedEvent.getExistingTrackedRace(event.getRaceByName(RACENAME2)));
|
||||
racingEventService.stopTracking(event, raceDef2);
|
||||
Regatta regatta = racingEventService.getRegattaByName(EVENTNAME);
|
||||
TrackedRegatta trackedRegatta = racingEventService.getTrackedRegatta(regatta);
|
||||
assertNotNull(regatta.getRaceByName(RACENAME2));
|
||||
assertNotNull(trackedRegatta.getExistingTrackedRace(regatta.getRaceByName(RACENAME2)));
|
||||
racingEventService.stopTracking(regatta, raceDef2);
|
||||
// the raceDef2 should still be part of the event, and the corresponding tracked race should still be part
|
||||
// of the tracked event
|
||||
assertNotNull(event.getRaceByName(RACENAME2));
|
||||
assertNotNull(regatta.getRaceByName(RACENAME2));
|
||||
boolean foundTrackedRaceForRaceDef2 = false;
|
||||
for (TrackedRace trackedRace : trackedEvent.getTrackedRaces()) {
|
||||
for (TrackedRace trackedRace : trackedRegatta.getTrackedRaces()) {
|
||||
if (trackedRace.getRace().getName().equals(RACENAME2)) {
|
||||
foundTrackedRaceForRaceDef2 = true;
|
||||
}
|
||||
@@ -129,36 +129,37 @@ public class RaceTrackerStartStopTest {
|
||||
// The RaceTrakcersByEvent map should contain a tracker with a set of RaceDefinitions, containing the
|
||||
// raceDefinition1
|
||||
assertEquals(1, racingEventService.getRaceTrackersByEventMap().size());
|
||||
Iterator<RaceTracker> raceTrackerIter = racingEventService.getRaceTrackersByEventMap().get(event).iterator();
|
||||
Iterator<RaceTracker> raceTrackerIter = racingEventService.getRaceTrackersByEventMap().get(regatta).iterator();
|
||||
while (raceTrackerIter.hasNext()) {
|
||||
RaceTracker currentTracker = raceTrackerIter.next();
|
||||
assertSame(raceTracker1, currentTracker);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This test methods checks if the {@link RacingEventService#removeRace(Event, RaceDefinition) removeRace} method works correctly
|
||||
* This test methods checks if the {@link RacingEventService#removeRace(Regatta, RaceDefinition) removeRace} method works correctly
|
||||
*/
|
||||
@Test
|
||||
public void testRemoveRace() throws MalformedURLException, IOException, InterruptedException {
|
||||
Event event = racingEventService.getEventByName(EVENTNAME);
|
||||
TrackedEvent trackedEvent = racingEventService.getTrackedEvent(event);
|
||||
assertNotNull(event.getRaceByName(RACENAME2));
|
||||
assertNotNull(trackedEvent.getExistingTrackedRace(event.getRaceByName(RACENAME2)));
|
||||
racingEventService.removeRace(event, raceDef2);
|
||||
Regatta regatta = racingEventService.getRegattaByName(EVENTNAME);
|
||||
TrackedRegatta trackedRegatta = racingEventService.getTrackedRegatta(regatta);
|
||||
assertNotNull(regatta.getRaceByName(RACENAME2));
|
||||
assertNotNull(trackedRegatta.getExistingTrackedRace(regatta.getRaceByName(RACENAME2)));
|
||||
racingEventService.removeRace(regatta, raceDef2);
|
||||
// the raceDef2 should be removed from the event, and the corresponding tracked race should be removed
|
||||
// from the tracked event
|
||||
assertNull(event.getRaceByName(RACENAME2));
|
||||
assertNull(regatta.getRaceByName(RACENAME2));
|
||||
boolean foundTrackedRaceForRaceDef2 = false;
|
||||
for (TrackedRace trackedRace : trackedEvent.getTrackedRaces()) {
|
||||
for (TrackedRace trackedRace : trackedRegatta.getTrackedRaces()) {
|
||||
if (trackedRace.getRace().getName().equals(RACENAME2)) {
|
||||
foundTrackedRaceForRaceDef2 = true;
|
||||
}
|
||||
}
|
||||
assertFalse(foundTrackedRaceForRaceDef2);
|
||||
// The trackers map should still contain the raceTrackers
|
||||
assertTrue(racingEventService.getRaceTrackersByEventMap().get(event).contains(raceTracker1));
|
||||
assertTrue(racingEventService.getRaceTrackersByEventMap().get(event).contains(raceTracker2));
|
||||
assertTrue(racingEventService.getRaceTrackersByEventMap().get(event).contains(raceTracker3));
|
||||
assertTrue(racingEventService.getRaceTrackersByEventMap().get(regatta).contains(raceTracker1));
|
||||
assertTrue(racingEventService.getRaceTrackersByEventMap().get(regatta).contains(raceTracker2));
|
||||
assertTrue(racingEventService.getRaceTrackersByEventMap().get(regatta).contains(raceTracker3));
|
||||
// The raceTrackerMap should still contain the raceTrackers. These raceTracker should not contain the raceDefinition raceDef2 anymore
|
||||
assertTrue(racingEventService.getRaceTrackersByIDMap().containsValue(raceTracker1));
|
||||
assertTrue(racingEventService.getRaceTrackersByIDMap().containsValue(raceTracker2));
|
||||
@@ -176,17 +177,17 @@ public class RaceTrackerStartStopTest {
|
||||
}
|
||||
|
||||
/**
|
||||
* This test methods checks if the {@link RacingEventService#removeRace(Event, RaceDefinition) removeRace} method works correctly if the
|
||||
* This test methods checks if the {@link RacingEventService#removeRace(Regatta, RaceDefinition) removeRace} method works correctly if the
|
||||
* race to be stopped is the last race of a tracker
|
||||
*/
|
||||
@Test
|
||||
public void testRemoveLastRaceOfTracker() throws MalformedURLException, IOException, InterruptedException {
|
||||
racingEventService.removeRace(event, raceDef1);
|
||||
racingEventService.removeRace(event, raceDef2);
|
||||
racingEventService.removeRace(regatta, raceDef1);
|
||||
racingEventService.removeRace(regatta, raceDef2);
|
||||
// The event map should still contain the raceTrackers except of raceTracker1 and raceTracker2
|
||||
assertFalse(racingEventService.getRaceTrackersByEventMap().get(event).contains(raceTracker1));
|
||||
assertFalse(racingEventService.getRaceTrackersByEventMap().get(event).contains(raceTracker2));
|
||||
assertTrue(racingEventService.getRaceTrackersByEventMap().get(event).contains(raceTracker3));
|
||||
assertFalse(racingEventService.getRaceTrackersByEventMap().get(regatta).contains(raceTracker1));
|
||||
assertFalse(racingEventService.getRaceTrackersByEventMap().get(regatta).contains(raceTracker2));
|
||||
assertTrue(racingEventService.getRaceTrackersByEventMap().get(regatta).contains(raceTracker3));
|
||||
// The RaceTrackerByID map should still contain raceTracker3, but not raceTracker1 and raceTracker2 anymore
|
||||
assertFalse(racingEventService.getRaceTrackersByIDMap().containsValue(raceTracker1));
|
||||
assertFalse(racingEventService.getRaceTrackersByIDMap().containsValue(raceTracker2));
|
||||
|
||||
+37
-18
@@ -4,6 +4,7 @@ import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertNotSame;
|
||||
import static org.junit.Assert.assertSame;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.MalformedURLException;
|
||||
@@ -11,21 +12,24 @@ import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.net.URL;
|
||||
import java.util.Set;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.sap.sailing.domain.base.RaceDefinition;
|
||||
import com.sap.sailing.domain.common.impl.Util;
|
||||
import com.sap.sailing.domain.tracking.RaceListener;
|
||||
import com.sap.sailing.domain.tracking.RacesHandle;
|
||||
import com.sap.sailing.domain.tracking.TrackedEvent;
|
||||
import com.sap.sailing.domain.tracking.TrackedRace;
|
||||
import com.sap.sailing.domain.tracking.TrackedRegatta;
|
||||
import com.sap.sailing.domain.tracking.impl.EmptyWindStore;
|
||||
import com.sap.sailing.domain.tractracadapter.TracTracConnectionConstants;
|
||||
import com.sap.sailing.server.impl.RacingEventServiceImpl;
|
||||
|
||||
public class RaceTrackerTest {
|
||||
private static final Logger logger = Logger.getLogger(RaceTrackerTest.class.getName());
|
||||
protected static final boolean tractracTunnel = Boolean.valueOf(System.getProperty("tractrac.tunnel", "false"));
|
||||
protected static final String tractracTunnelHost = System.getProperty("tractrac.tunnel.host", "localhost");
|
||||
private final URL paramUrl;
|
||||
@@ -55,18 +59,25 @@ public class RaceTrackerTest {
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
service = new RacingEventServiceImpl();
|
||||
logger.info("Calling service.addTracTracRace");
|
||||
raceHandle = service.addTracTracRace(paramUrl, liveUri, storedUri, EmptyWindStore.INSTANCE, /* timeoutInMilliseconds */ 60000);
|
||||
raceHandle.getRaces(); // wait for RaceDefinition to be completely wired in Event
|
||||
logger.info("Calling raceHandle.getRaces()");
|
||||
Set<RaceDefinition> races = raceHandle.getRaces(); // wait for RaceDefinition to be completely wired in Regatta
|
||||
logger.info("Obtained races: "+races);
|
||||
assertTrue(!races.isEmpty());
|
||||
// TODO the following assertion fails; this suggests that the race obtained above hasn't properly been entered into the regatta. Why???
|
||||
assertTrue(!Util.isEmpty(raceHandle.getRegatta().getAllRaces()));
|
||||
}
|
||||
|
||||
@After
|
||||
public void tearDown() throws MalformedURLException, IOException, InterruptedException {
|
||||
service.stopTracking(raceHandle.getEvent());
|
||||
logger.info("calling stopTrackingAndRemove("+raceHandle.getRegatta().getName()+" ("+raceHandle.getRegatta().hashCode()+"))");
|
||||
service.stopTrackingAndRemove(raceHandle.getRegatta());
|
||||
}
|
||||
|
||||
private TrackedRace getTrackedRace(TrackedEvent trackedEvent) throws InterruptedException {
|
||||
private TrackedRace getTrackedRace(TrackedRegatta trackedRegatta) throws InterruptedException {
|
||||
final TrackedRace[] trackedRaces = new TrackedRace[1];
|
||||
trackedEvent.addRaceListener(new RaceListener() {
|
||||
trackedRegatta.addRaceListener(new RaceListener() {
|
||||
@Override
|
||||
public void raceAdded(TrackedRace trackedRace) {
|
||||
synchronized (trackedRaces) {
|
||||
@@ -88,49 +99,57 @@ public class RaceTrackerTest {
|
||||
|
||||
@Test
|
||||
public void testInitialization() throws InterruptedException {
|
||||
logger.entering(getClass().getName(), "testInitialization");
|
||||
Set<RaceDefinition> races = raceHandle.getRaces();
|
||||
assertNotNull(races);
|
||||
assertFalse(races.isEmpty());
|
||||
assertNotNull(getTrackedRace(raceHandle.getTrackedEvent()));
|
||||
assertNotNull(getTrackedRace(raceHandle.getTrackedRegatta()));
|
||||
logger.exiting(getClass().getName(), "testInitialization");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testStopTracking() throws Exception {
|
||||
TrackedEvent oldTrackedEvent = raceHandle.getTrackedEvent();
|
||||
TrackedRace oldTrackedRace = getTrackedRace(oldTrackedEvent);
|
||||
logger.entering(getClass().getName(), "testStopTracking");
|
||||
assertTrue(!Util.isEmpty(raceHandle.getRegatta().getAllRaces()));
|
||||
TrackedRegatta oldTrackedRegatta = raceHandle.getTrackedRegatta();
|
||||
TrackedRace oldTrackedRace = getTrackedRace(oldTrackedRegatta);
|
||||
RaceDefinition oldRaceDefinition = oldTrackedRace.getRace();
|
||||
service.removeEvent(raceHandle.getEvent());
|
||||
assertTrue(!Util.isEmpty(raceHandle.getRegatta().getAllRaces()));
|
||||
service.removeRegatta(raceHandle.getRegatta());
|
||||
RacesHandle myRaceHandle = service.addTracTracRace(paramUrl, liveUri, storedUri, EmptyWindStore.INSTANCE, /* timeoutInMilliseconds */ 60000);
|
||||
TrackedEvent newTrackedEvent = myRaceHandle.getTrackedEvent();
|
||||
assertNotSame(oldTrackedEvent, newTrackedEvent);
|
||||
TrackedRace newTrackedRace = getTrackedRace(newTrackedEvent);
|
||||
TrackedRegatta newTrackedRegatta = myRaceHandle.getTrackedRegatta();
|
||||
assertNotSame(oldTrackedRegatta, newTrackedRegatta);
|
||||
TrackedRace newTrackedRace = getTrackedRace(newTrackedRegatta);
|
||||
// expecting a new tracked race to be created when starting over with tracking
|
||||
try {
|
||||
assertNotSame(oldTrackedRace, newTrackedRace);
|
||||
assertNotSame(oldRaceDefinition, newTrackedRace.getRace());
|
||||
} finally {
|
||||
service.stopTracking(myRaceHandle.getEvent());
|
||||
service.stopTracking(myRaceHandle.getRegatta());
|
||||
}
|
||||
logger.exiting(getClass().getName(), "testStopTracking");
|
||||
}
|
||||
|
||||
/**
|
||||
* This test asserts that tracking the same race twice doesn't create another tracker and in particular no
|
||||
* new tracked event / tracked race.
|
||||
* new tracked regatta / tracked race.
|
||||
* @throws Exception
|
||||
*/
|
||||
@Test
|
||||
public void testTrackingSameRaceWithoutStopping() throws Exception {
|
||||
TrackedEvent oldTrackedEvent = raceHandle.getTrackedEvent();
|
||||
TrackedRace oldTrackedRace = getTrackedRace(oldTrackedEvent);
|
||||
logger.entering(getClass().getName(), "testTrackingSameRaceWithoutStopping");
|
||||
TrackedRegatta oldTrackedRegatta = raceHandle.getTrackedRegatta();
|
||||
TrackedRace oldTrackedRace = getTrackedRace(oldTrackedRegatta);
|
||||
RacesHandle myRaceHandle = service.addTracTracRace(paramUrl, liveUri, storedUri, EmptyWindStore.INSTANCE, /* timeoutInMilliseconds */ 60000);
|
||||
TrackedEvent newTrackedEvent = myRaceHandle.getTrackedEvent();
|
||||
TrackedRegatta newTrackedEvent = myRaceHandle.getTrackedRegatta();
|
||||
TrackedRace newTrackedRace = getTrackedRace(newTrackedEvent);
|
||||
// expecting a new tracked race to be created when starting over with tracking
|
||||
try {
|
||||
assertSame(oldTrackedRace, newTrackedRace);
|
||||
assertSame(raceHandle.getRaceTracker(), myRaceHandle.getRaceTracker());
|
||||
} finally {
|
||||
service.stopTracking(myRaceHandle.getEvent());
|
||||
service.stopTracking(myRaceHandle.getRegatta());
|
||||
}
|
||||
logger.exiting(getClass().getName(), "testStopTracking");
|
||||
}
|
||||
}
|
||||
+7
-7
@@ -3,7 +3,7 @@ package com.sap.sailing.server.test;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import com.sap.sailing.domain.base.Event;
|
||||
import com.sap.sailing.domain.base.Regatta;
|
||||
import com.sap.sailing.domain.tracking.RaceTracker;
|
||||
import com.sap.sailing.server.impl.RacingEventServiceImpl;
|
||||
|
||||
@@ -13,19 +13,19 @@ public class RacingEventServiceImplMock extends RacingEventServiceImpl {
|
||||
super();
|
||||
}
|
||||
|
||||
public Map<String, Event> getEventsByNameMap() {
|
||||
return eventsByName;
|
||||
public Map<String, Regatta> getEventsByNameMap() {
|
||||
return regattasByName;
|
||||
}
|
||||
|
||||
public Map<Event, Set<RaceTracker>> getRaceTrackersByEventMap() {
|
||||
return raceTrackersByEvent;
|
||||
public Map<Regatta, Set<RaceTracker>> getRaceTrackersByEventMap() {
|
||||
return raceTrackersByRegatta;
|
||||
}
|
||||
|
||||
public Map<Object, RaceTracker> getRaceTrackersByIDMap() {
|
||||
return raceTrackersByID;
|
||||
}
|
||||
|
||||
public Map<String, Event> getEventsByName() {
|
||||
return eventsByName;
|
||||
public Map<String, Regatta> getEventsByName() {
|
||||
return regattasByName;
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user