From a988003d152e39ecb0817d25017f62fe1b0ecd0f Mon Sep 17 00:00:00 2001 From: Frederik Petersen Date: Wed, 13 Nov 2013 11:50:32 +0100 Subject: [PATCH] Moved central windstore into racingeventservice also removed addRace and addEvent services from legacy adminapp --- doc/README | 18 ---- .../EndToEndListeningStoreAndFowardTest.java | 17 ++-- .../swisstimingadapter/DomainFactory.java | 3 +- .../SwissTimingAdapter.java | 3 +- .../SwissTimingFactory.java | 1 - .../impl/DomainFactoryImpl.java | 5 +- .../impl/SwissTimingAdapterImpl.java | 5 +- .../impl/SwissTimingFactoryImpl.java | 1 - ...sTimingTrackingConnectivityParameters.java | 8 +- .../domain/tractracadapter/DomainFactory.java | 2 +- .../tractracadapter/TracTracAdapter.java | 4 +- .../impl/DomainFactoryImpl.java | 4 +- ...aceTrackingConnectivityParametersImpl.java | 9 +- .../impl/TracTracAdapterImpl.java | 12 +-- .../RaceTrackingConnectivityParameters.java | 4 +- .../domain/tracking/TrackerManager.java | 7 +- .../gwt/ui/server/SailingServiceImpl.java | 4 +- ...estStoringAndLoadingEventsAndRegattas.java | 19 ++-- ...StoringAndRetrievingLeaderboardGroups.java | 3 +- .../sailing/server/gateway/impl/AdminApp.java | 95 +------------------ .../test/AbstractServerReplicationTest.java | 5 +- ...LeaderboardCorrectionsReplicationTest.java | 9 +- ...tialLoadReplicationObjectIdentityTest.java | 7 +- .../test/TrackRaceReplicationTest.java | 7 +- .../server/test/MasterDataImportTest.java | 3 +- .../sailing/server/test/RaceTrackerTest.java | 7 +- .../META-INF/MANIFEST.MF | 1 + .../server/impl/RacingEventServiceImpl.java | 40 ++++++-- .../test/util/RaceDataAccessEval.java | 3 +- .../test/util/RacingEventPersistence.java | 3 +- .../test/util/TracTracReaderFromURLs.java | 3 +- .../simulator/test/util/TracTracWriter.java | 3 +- .../simulator/impl/PathGeneratorTracTrac.java | 6 +- .../simulator/impl/SimulatorUtils.java | 5 +- 34 files changed, 113 insertions(+), 213 deletions(-) diff --git a/doc/README b/doc/README index 77b91298b93..8c15debeb90 100755 --- a/doc/README +++ b/doc/README @@ -265,28 +265,10 @@ into one in the future. can be obtained; the resulting document includes the parameter and simulation URLs for the individual races that are part of the event/regatta. - action=addevent: starts tracking all races described in the document received - from the eventJSONURL to the server instance. - eventJSONURL: the URL from where metadata about the entire regatta - can be obtained; the resulting document includes the - parameter and simulation URLs for the individual - races that are part of the event/regatta. - liveURI: the live data URI for the TracTrac server - storedURI: the stored data URI for the TracTrac server; usually - the port number of this URI is that of liveURI + 1 action=stopregatta: stops tracking of all races of the regatta; this also stops all wind tracking for the races of the regatta regattaname: name of the regatta, as returned by the "listevents" action on the /moderator servlet - action=addrace: starts tracking a single race; if other races of - the same event/regatta are already being tracked, - the race is added to the regatta - paramURL: the URL from where metadata about the race - can be obtained; the resulting document includes - UUIDs of waypoints, competitors, etc. - liveURI: the live data URI for the TracTrac server - storedURI: the stored data URI for the TracTrac server; usually - the port number of this URI is that of liveURI + 1 action=stoprace: stops tracking of a single race, also stopping the wind trackers that were started for this race; other races of the same regatta that were being tracked will diff --git a/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/test/EndToEndListeningStoreAndFowardTest.java b/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/test/EndToEndListeningStoreAndFowardTest.java index c4c07080eb8..9796ca53f42 100755 --- a/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/test/EndToEndListeningStoreAndFowardTest.java +++ b/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/test/EndToEndListeningStoreAndFowardTest.java @@ -1,5 +1,10 @@ package com.sap.sailing.domain.swisstimingadapter.test; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @@ -57,11 +62,6 @@ import com.sap.sailing.mongodb.MongoDBService; import com.sap.sailing.server.RacingEventService; import com.sap.sailing.server.impl.RacingEventServiceImpl; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - public class EndToEndListeningStoreAndFowardTest { private static final Logger logger = Logger.getLogger(EndToEndListeningStoreAndFowardTest.class.getName()); @@ -77,7 +77,6 @@ public class EndToEndListeningStoreAndFowardTest { private SwissTimingAdapterPersistence swissTimingAdapterPersistence; private SwissTimingFactory swissTimingFactory; - private EmptyWindStore emptyWindStore; private EmptyRaceLogStore emptyRaceLogStore; private RacingEventService racingEventService; private SwissTimingAdapter swissTimingAdapter; @@ -111,7 +110,7 @@ public class EndToEndListeningStoreAndFowardTest { sendingSocket = new Socket("localhost", RECEIVE_PORT); sendingStream = sendingSocket.getOutputStream(); swissTimingFactory = SwissTimingFactory.INSTANCE; - emptyWindStore = EmptyWindStore.INSTANCE; + EmptyWindStore emptyWindStore = EmptyWindStore.INSTANCE; emptyRaceLogStore = EmptyRaceLogStore.INSTANCE; transceiver = swissTimingFactory.createSailMasterTransceiver(); DBCollection lastMessageCountCollection = db.getCollection(CollectionNames.LAST_MESSAGE_COUNT.name()); @@ -122,7 +121,7 @@ public class EndToEndListeningStoreAndFowardTest { final com.sap.sailing.domain.base.impl.DomainFactoryImpl baseDomainFactory = new com.sap.sailing.domain.base.impl.DomainFactoryImpl(); swissTimingAdapter = new SwissTimingAdapterFactoryImpl().getOrCreateSwissTimingAdapter(baseDomainFactory, swissTimingAdapterPersistence); racingEventService = new RacingEventServiceImpl(PersistenceFactory.INSTANCE.getDomainObjectFactory( - mongoDBService, baseDomainFactory), PersistenceFactory.INSTANCE.getMongoObjectFactory(mongoDBService), MediaDB.TEST_STUB); + mongoDBService, baseDomainFactory), PersistenceFactory.INSTANCE.getMongoObjectFactory(mongoDBService), MediaDB.TEST_STUB, emptyWindStore); raceHandles = new ArrayList(); } @@ -371,7 +370,7 @@ public class EndToEndListeningStoreAndFowardTest { for (String raceToTrack : racesToTrack) { RacesHandle raceHandle = swissTimingAdapter.addSwissTimingRace(racingEventService, /* regattaToAddTo */ null /* use a default regatta */, raceToTrack, /* canSendRequests */ - "localhost", CLIENT_PORT, false, emptyWindStore, emptyRaceLogStore, -1); + "localhost", CLIENT_PORT, false, emptyRaceLogStore, -1); raceHandles.add(raceHandle); if (connector == null) { connector = swissTimingAdapter.getSwissTimingFactory().getOrCreateSailMasterConnector("localhost", diff --git a/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/DomainFactory.java b/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/DomainFactory.java index 241e13202e2..f7deeaa8c03 100755 --- a/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/DomainFactory.java +++ b/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/DomainFactory.java @@ -16,7 +16,6 @@ import com.sap.sailing.domain.tracking.GPSFixMoving; import com.sap.sailing.domain.tracking.MarkPassing; import com.sap.sailing.domain.tracking.RaceTrackingConnectivityParameters; import com.sap.sailing.domain.tracking.TrackedRegattaRegistry; -import com.sap.sailing.domain.tracking.WindStore; import difflib.PatchFailedException; @@ -56,7 +55,7 @@ public interface DomainFactory { RaceTrackingConnectivityParameters createTrackingConnectivityParameters(String hostname, int port, String raceID, boolean canSendRequests, long delayToLiveInMillis, - SwissTimingFactory swissTimingFactory, DomainFactory domainFactory, RaceLogStore raceLogStore, WindStore windStore, + SwissTimingFactory swissTimingFactory, DomainFactory domainFactory, RaceLogStore raceLogStore, RaceSpecificMessageLoader messageLoader); RaceType getRaceTypeFromRaceID(String raceID); diff --git a/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/SwissTimingAdapter.java b/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/SwissTimingAdapter.java index 72ed2ccf839..1c5c34203bb 100755 --- a/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/SwissTimingAdapter.java +++ b/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/SwissTimingAdapter.java @@ -9,7 +9,6 @@ import com.sap.sailing.domain.common.RegattaIdentifier; import com.sap.sailing.domain.racelog.RaceLogStore; import com.sap.sailing.domain.tracking.RacesHandle; import com.sap.sailing.domain.tracking.TrackerManager; -import com.sap.sailing.domain.tracking.WindStore; public interface SwissTimingAdapter { List getSwissTimingRaceRecords(String hostname, int port, @@ -25,7 +24,7 @@ public interface SwissTimingAdapter { * to add the races to. Otherwise, a default regatta as described above will be created and used. */ RacesHandle addSwissTimingRace(TrackerManager trackerManager, RegattaIdentifier regattaToAddTo, String raceID, String hostname, - int port, boolean canSendRequests, WindStore windStore, RaceLogStore logStore, long timeoutInMilliseconds) + int port, boolean canSendRequests, RaceLogStore logStore, long timeoutInMilliseconds) throws InterruptedException, UnknownHostException, IOException, ParseException, Exception; SwissTimingFactory getSwissTimingFactory(); diff --git a/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/SwissTimingFactory.java b/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/SwissTimingFactory.java index 97b2bd1c44c..4114fbb0b2d 100755 --- a/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/SwissTimingFactory.java +++ b/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/SwissTimingFactory.java @@ -4,7 +4,6 @@ import java.io.IOException; import java.net.UnknownHostException; import java.text.ParseException; - import com.sap.sailing.domain.base.Regatta; import com.sap.sailing.domain.common.TimePoint; import com.sap.sailing.domain.racelog.RaceLogStore; diff --git a/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/DomainFactoryImpl.java b/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/DomainFactoryImpl.java index 734e68c8d1c..32a12eea7be 100755 --- a/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/DomainFactoryImpl.java +++ b/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/DomainFactoryImpl.java @@ -49,7 +49,6 @@ import com.sap.sailing.domain.tracking.GPSFixMoving; import com.sap.sailing.domain.tracking.MarkPassing; import com.sap.sailing.domain.tracking.RaceTrackingConnectivityParameters; import com.sap.sailing.domain.tracking.TrackedRegattaRegistry; -import com.sap.sailing.domain.tracking.WindStore; import com.sap.sailing.domain.tracking.impl.GPSFixMovingImpl; import difflib.PatchFailedException; @@ -327,10 +326,10 @@ public class DomainFactoryImpl implements DomainFactory { @Override public RaceTrackingConnectivityParameters createTrackingConnectivityParameters(String hostname, int port, String raceID, boolean canSendRequests, long delayToLiveInMillis, - SwissTimingFactory swissTimingFactory, DomainFactory domainFactory, RaceLogStore raceLogStore, WindStore windStore, + SwissTimingFactory swissTimingFactory, DomainFactory domainFactory, RaceLogStore raceLogStore, RaceSpecificMessageLoader messageLoader) { return new SwissTimingTrackingConnectivityParameters(hostname, port, raceID, canSendRequests, delayToLiveInMillis, - swissTimingFactory, domainFactory, raceLogStore, windStore, messageLoader); + swissTimingFactory, domainFactory, raceLogStore, messageLoader); } } diff --git a/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/SwissTimingAdapterImpl.java b/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/SwissTimingAdapterImpl.java index 74b25cf52a8..278547abdc2 100755 --- a/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/SwissTimingAdapterImpl.java +++ b/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/SwissTimingAdapterImpl.java @@ -19,7 +19,6 @@ import com.sap.sailing.domain.swisstimingadapter.SwissTimingFactory; import com.sap.sailing.domain.tracking.RacesHandle; import com.sap.sailing.domain.tracking.TrackedRace; import com.sap.sailing.domain.tracking.TrackerManager; -import com.sap.sailing.domain.tracking.WindStore; public class SwissTimingAdapterImpl implements SwissTimingAdapter { private final SwissTimingFactory swissTimingFactory; @@ -65,11 +64,11 @@ public class SwissTimingAdapterImpl implements SwissTimingAdapter { @Override public RacesHandle addSwissTimingRace(TrackerManager trackerManager, RegattaIdentifier regattaToAddTo, String raceID, String hostname, - int port, boolean canSendRequests, WindStore windStore, RaceLogStore logStore, long timeoutInMilliseconds) + int port, boolean canSendRequests, RaceLogStore logStore, long timeoutInMilliseconds) throws Exception { return trackerManager.addRace(regattaToAddTo, swissTimingDomainFactory.createTrackingConnectivityParameters(hostname, port, raceID, canSendRequests, TrackedRace.DEFAULT_LIVE_DELAY_IN_MILLISECONDS, swissTimingFactory, - swissTimingDomainFactory, logStore, windStore, raceSpecificMessageLoader), windStore, + swissTimingDomainFactory, logStore, raceSpecificMessageLoader), timeoutInMilliseconds); } diff --git a/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/SwissTimingFactoryImpl.java b/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/SwissTimingFactoryImpl.java index 7512100ecd8..227be66faf2 100755 --- a/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/SwissTimingFactoryImpl.java +++ b/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/SwissTimingFactoryImpl.java @@ -6,7 +6,6 @@ import java.text.ParseException; import java.util.HashMap; import java.util.Map; - import com.sap.sailing.domain.base.Regatta; import com.sap.sailing.domain.common.TimePoint; import com.sap.sailing.domain.common.impl.Util.Triple; diff --git a/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/SwissTimingTrackingConnectivityParameters.java b/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/SwissTimingTrackingConnectivityParameters.java index d0632d73933..a48bdc61eea 100755 --- a/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/SwissTimingTrackingConnectivityParameters.java +++ b/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/SwissTimingTrackingConnectivityParameters.java @@ -19,12 +19,11 @@ public class SwissTimingTrackingConnectivityParameters implements RaceTrackingCo private final SwissTimingFactory swissTimingFactory; private final DomainFactory domainFactory; private final RaceLogStore raceLogStore; - private final WindStore windStore; private final RaceSpecificMessageLoader messageLoader; private final long delayToLiveInMillis; public SwissTimingTrackingConnectivityParameters(String hostname, int port, String raceID, boolean canSendRequests, long delayToLiveInMillis, - SwissTimingFactory swissTimingFactory, DomainFactory domainFactory, RaceLogStore raceLogStore, WindStore windStore, + SwissTimingFactory swissTimingFactory, DomainFactory domainFactory, RaceLogStore raceLogStore, RaceSpecificMessageLoader messageLoader) { super(); this.hostname = hostname; @@ -35,18 +34,17 @@ public class SwissTimingTrackingConnectivityParameters implements RaceTrackingCo this.swissTimingFactory = swissTimingFactory; this.domainFactory = domainFactory; this.raceLogStore = raceLogStore; - this.windStore = windStore; this.messageLoader = messageLoader; } @Override - public RaceTracker createRaceTracker(TrackedRegattaRegistry trackedRegattaRegistry) throws Exception { + public RaceTracker createRaceTracker(TrackedRegattaRegistry trackedRegattaRegistry, WindStore windStore) throws Exception { return swissTimingFactory.createRaceTracker(raceID, hostname, port, canSendRequests, delayToLiveInMillis, raceLogStore, windStore, messageLoader, domainFactory, trackedRegattaRegistry); } @Override - public RaceTracker createRaceTracker(Regatta regatta, TrackedRegattaRegistry trackedRegattaRegistry) + public RaceTracker createRaceTracker(Regatta regatta, TrackedRegattaRegistry trackedRegattaRegistry, WindStore windStore) throws Exception { return swissTimingFactory.createRaceTracker(regatta, raceID, hostname, port, canSendRequests, delayToLiveInMillis, windStore, messageLoader, domainFactory, trackedRegattaRegistry); diff --git a/java/com.sap.sailing.domain.tractracadapter/src/com/sap/sailing/domain/tractracadapter/DomainFactory.java b/java/com.sap.sailing.domain.tractracadapter/src/com/sap/sailing/domain/tractracadapter/DomainFactory.java index c56540f8fb8..4ccb31ab73b 100755 --- a/java/com.sap.sailing.domain.tractracadapter/src/com/sap/sailing/domain/tractracadapter/DomainFactory.java +++ b/java/com.sap.sailing.domain.tractracadapter/src/com/sap/sailing/domain/tractracadapter/DomainFactory.java @@ -247,7 +247,7 @@ public interface DomainFactory { Pair, BoatClass> getCompetitorsAndDominantBoatClass(Race race); RaceTrackingConnectivityParameters createTrackingConnectivityParameters(URL paramURL, URI liveURI, URI storedURI, URI courseDesignUpdateURI, - TimePoint startOfTracking, TimePoint endOfTracking, long delayToLiveInMillis, boolean simulateWithStartTimeNow, RaceLogStore raceLogStore, WindStore windStore, + TimePoint startOfTracking, TimePoint endOfTracking, long delayToLiveInMillis, boolean simulateWithStartTimeNow, RaceLogStore raceLogStore, String tracTracUsername, String tracTracPassword); /** * Removes all knowledge about tractracRace which includes removing it from the race cache, from the diff --git a/java/com.sap.sailing.domain.tractracadapter/src/com/sap/sailing/domain/tractracadapter/TracTracAdapter.java b/java/com.sap.sailing.domain.tractracadapter/src/com/sap/sailing/domain/tractracadapter/TracTracAdapter.java index ab9765d6453..0b3f2864b12 100755 --- a/java/com.sap.sailing.domain.tractracadapter/src/com/sap/sailing/domain/tractracadapter/TracTracAdapter.java +++ b/java/com.sap.sailing.domain.tractracadapter/src/com/sap/sailing/domain/tractracadapter/TracTracAdapter.java @@ -47,7 +47,7 @@ public interface TracTracAdapter { * is stopped; use -1 to wait forever */ RacesHandle addTracTracRace(TrackerManager trackerManager, URL paramURL, URI liveURI, URI storedURI, - URI courseDesignUpdateURI, RaceLogStore raceLogStore, WindStore windStore, long timeoutInMilliseconds, + URI courseDesignUpdateURI, RaceLogStore raceLogStore, long timeoutInMilliseconds, String tracTracUsername, String tracTracPassword) throws MalformedURLException, FileNotFoundException, URISyntaxException, Exception; /** @@ -66,7 +66,7 @@ public interface TracTracAdapter { */ RacesHandle addTracTracRace(TrackerManager trackerManager, RegattaIdentifier regattaToAddTo, URL paramURL, URI liveURI, URI storedURI, URI courseDesignUpdateURI, TimePoint trackingStartTime, - TimePoint trackingEndTime, RaceLogStore raceLogStore, WindStore windStore, + TimePoint trackingEndTime, RaceLogStore raceLogStore, long timeoutForReceivingRaceDefinitionInMilliseconds, boolean simulateWithStartTimeNow, String tracTracUsername, String tracTracPassword) throws MalformedURLException, FileNotFoundException, URISyntaxException, Exception; diff --git a/java/com.sap.sailing.domain.tractracadapter/src/com/sap/sailing/domain/tractracadapter/impl/DomainFactoryImpl.java b/java/com.sap.sailing.domain.tractracadapter/src/com/sap/sailing/domain/tractracadapter/impl/DomainFactoryImpl.java index 3ed6f4520d2..ec3b721af78 100644 --- a/java/com.sap.sailing.domain.tractracadapter/src/com/sap/sailing/domain/tractracadapter/impl/DomainFactoryImpl.java +++ b/java/com.sap.sailing.domain.tractracadapter/src/com/sap/sailing/domain/tractracadapter/impl/DomainFactoryImpl.java @@ -630,9 +630,9 @@ public class DomainFactoryImpl implements DomainFactory { @Override public RaceTrackingConnectivityParameters createTrackingConnectivityParameters(URL paramURL, URI liveURI, URI storedURI, URI courseDesignUpdateURI, TimePoint startOfTracking, TimePoint endOfTracking, long delayToLiveInMillis, - boolean simulateWithStartTimeNow, RaceLogStore raceLogStore, WindStore windStore, String tracTracUsername, String tracTracPassword) { + boolean simulateWithStartTimeNow, RaceLogStore raceLogStore, String tracTracUsername, String tracTracPassword) { return new RaceTrackingConnectivityParametersImpl(paramURL, liveURI, storedURI, courseDesignUpdateURI, startOfTracking, endOfTracking, - delayToLiveInMillis, simulateWithStartTimeNow, raceLogStore, windStore, this, tracTracUsername, tracTracPassword); + delayToLiveInMillis, simulateWithStartTimeNow, raceLogStore, this, tracTracUsername, tracTracPassword); } @Override diff --git a/java/com.sap.sailing.domain.tractracadapter/src/com/sap/sailing/domain/tractracadapter/impl/RaceTrackingConnectivityParametersImpl.java b/java/com.sap.sailing.domain.tractracadapter/src/com/sap/sailing/domain/tractracadapter/impl/RaceTrackingConnectivityParametersImpl.java index 503e48be910..d5b5118ac0b 100755 --- a/java/com.sap.sailing.domain.tractracadapter/src/com/sap/sailing/domain/tractracadapter/impl/RaceTrackingConnectivityParametersImpl.java +++ b/java/com.sap.sailing.domain.tractracadapter/src/com/sap/sailing/domain/tractracadapter/impl/RaceTrackingConnectivityParametersImpl.java @@ -6,7 +6,6 @@ import java.net.URI; import java.net.URISyntaxException; import java.net.URL; - import com.sap.sailing.domain.base.Regatta; import com.sap.sailing.domain.common.TimePoint; import com.sap.sailing.domain.common.impl.Util; @@ -25,7 +24,6 @@ public class RaceTrackingConnectivityParametersImpl implements RaceTrackingConne private final TimePoint startOfTracking; private final TimePoint endOfTracking; private final RaceLogStore raceLogStore; - private final WindStore windStore; private final DomainFactory domainFactory; private final long delayToLiveInMillis; private final boolean simulateWithStartTimeNow; @@ -34,7 +32,7 @@ public class RaceTrackingConnectivityParametersImpl implements RaceTrackingConne public RaceTrackingConnectivityParametersImpl(URL paramURL, URI liveURI, URI storedURI, URI courseDesignUpdateURI, TimePoint startOfTracking, TimePoint endOfTracking, long delayToLiveInMillis, boolean simulateWithStartTimeNow, - RaceLogStore raceLogStore, WindStore windStore, DomainFactory domainFactory, String tracTracUsername, String tracTracPassword) { + RaceLogStore raceLogStore, DomainFactory domainFactory, String tracTracUsername, String tracTracPassword) { super(); this.paramURL = paramURL; this.liveURI = liveURI; @@ -43,7 +41,6 @@ public class RaceTrackingConnectivityParametersImpl implements RaceTrackingConne this.startOfTracking = startOfTracking; this.endOfTracking = endOfTracking; this.delayToLiveInMillis = delayToLiveInMillis; - this.windStore = windStore; this.domainFactory = domainFactory; this.simulateWithStartTimeNow = simulateWithStartTimeNow; this.raceLogStore = raceLogStore; @@ -52,7 +49,7 @@ public class RaceTrackingConnectivityParametersImpl implements RaceTrackingConne } @Override - public RaceTracker createRaceTracker(TrackedRegattaRegistry trackedRegattaRegistry) throws MalformedURLException, + public RaceTracker createRaceTracker(TrackedRegattaRegistry trackedRegattaRegistry, WindStore windStore) throws MalformedURLException, FileNotFoundException, URISyntaxException { RaceTracker tracker = domainFactory.createRaceTracker(paramURL, liveURI, storedURI, courseDesignUpdateURI, startOfTracking, endOfTracking, delayToLiveInMillis, simulateWithStartTimeNow, raceLogStore, windStore, tracTracUsername, tracTracPassword, trackedRegattaRegistry); @@ -60,7 +57,7 @@ public class RaceTrackingConnectivityParametersImpl implements RaceTrackingConne } @Override - public RaceTracker createRaceTracker(Regatta regatta, TrackedRegattaRegistry trackedRegattaRegistry) + public RaceTracker createRaceTracker(Regatta regatta, TrackedRegattaRegistry trackedRegattaRegistry, WindStore windStore) throws Exception { RaceTracker tracker = domainFactory.createRaceTracker(regatta, paramURL, liveURI, storedURI, courseDesignUpdateURI, startOfTracking, endOfTracking, delayToLiveInMillis, simulateWithStartTimeNow, raceLogStore, windStore, tracTracUsername, tracTracPassword, trackedRegattaRegistry); diff --git a/java/com.sap.sailing.domain.tractracadapter/src/com/sap/sailing/domain/tractracadapter/impl/TracTracAdapterImpl.java b/java/com.sap.sailing.domain.tractracadapter/src/com/sap/sailing/domain/tractracadapter/impl/TracTracAdapterImpl.java index b465422c8a2..81b075a0300 100755 --- a/java/com.sap.sailing.domain.tractracadapter/src/com/sap/sailing/domain/tractracadapter/impl/TracTracAdapterImpl.java +++ b/java/com.sap.sailing.domain.tractracadapter/src/com/sap/sailing/domain/tractracadapter/impl/TracTracAdapterImpl.java @@ -47,7 +47,7 @@ public class TracTracAdapterImpl implements TracTracAdapter { @Override public RacesHandle addTracTracRace(TrackerManager trackerManager, URL paramURL, URI liveURI, URI storedURI, - URI courseDesignUpdateURI, RaceLogStore raceLogStore, WindStore windStore, long timeoutInMilliseconds, + URI courseDesignUpdateURI, RaceLogStore raceLogStore, long timeoutInMilliseconds, String tracTracUsername, String tracTracPassword) throws Exception { return trackerManager.addRace( /* regattaToAddTo */null, @@ -55,20 +55,20 @@ public class TracTracAdapterImpl implements TracTracAdapter { courseDesignUpdateURI, /* startOfTracking */null, /* endOfTracking */null, delayToLiveInMillis, /* simulateWithStartTimeNow */false, - raceLogStore, windStore, tracTracUsername, tracTracPassword), windStore, timeoutInMilliseconds); + raceLogStore, tracTracUsername, tracTracPassword), timeoutInMilliseconds); } @Override public RacesHandle addTracTracRace(TrackerManager trackerManager, RegattaIdentifier regattaToAddTo, URL paramURL, URI liveURI, URI storedURI, URI courseDesignUpdateURI, TimePoint startOfTracking, - TimePoint endOfTracking, RaceLogStore raceLogStore, WindStore windStore, + TimePoint endOfTracking, RaceLogStore raceLogStore, long timeoutInMilliseconds, boolean simulateWithStartTimeNow, String tracTracUsername, String tracTracPassword) throws Exception { return trackerManager.addRace( regattaToAddTo, getTracTracDomainFactory().createTrackingConnectivityParameters(paramURL, liveURI, storedURI, courseDesignUpdateURI, startOfTracking, endOfTracking, delayToLiveInMillis, - simulateWithStartTimeNow, raceLogStore, windStore, tracTracUsername, tracTracPassword), - windStore, timeoutInMilliseconds); + simulateWithStartTimeNow, raceLogStore, tracTracUsername, tracTracPassword), + timeoutInMilliseconds); } @Override @@ -88,7 +88,7 @@ public class TracTracAdapterImpl implements TracTracAdapter { for (RaceRecord rr : jsonService.getRaceRecords()) { URL paramURL = rr.getParamURL(); regatta = addTracTracRace(trackerManager, paramURL, liveURI, storedURI, courseDesignUpdateURI, raceLogStore, - windStore, timeoutInMilliseconds, tracTracUsername, tracTracPassword).getRegatta(); + timeoutInMilliseconds, tracTracUsername, tracTracPassword).getRegatta(); } return regatta; } diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/RaceTrackingConnectivityParameters.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/RaceTrackingConnectivityParameters.java index 06280d3c6a1..db26b99d6ad 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/RaceTrackingConnectivityParameters.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/RaceTrackingConnectivityParameters.java @@ -20,7 +20,7 @@ public interface RaceTrackingConnectivityParameters { /** * Starts a {@link RaceTracker} using the connectivity parameters provided by this object. */ - RaceTracker createRaceTracker(TrackedRegattaRegistry trackedRegattaRegistry) throws Exception; + RaceTracker createRaceTracker(TrackedRegattaRegistry trackedRegattaRegistry, WindStore windStore) throws Exception; /** * Starts a {@link RaceTracker}, associating the resulting races with the {@link Regatta} passed as argument @@ -28,7 +28,7 @@ public interface RaceTrackingConnectivityParameters { * parameters. This is particularly useful if a predefined regatta with {@link Series} and {@link Fleet}s * is to be used. */ - RaceTracker createRaceTracker(Regatta regatta, TrackedRegattaRegistry trackedRegattaRegistry) throws Exception; + RaceTracker createRaceTracker(Regatta regatta, TrackedRegattaRegistry trackedRegattaRegistry, WindStore windStore) throws Exception; /** * Deliver an ID object equal to that of the {@link RaceTracker#getID()} delivered by the {@link RaceTracker} diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackerManager.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackerManager.java index 0b1258fec58..95ebb0d35eb 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackerManager.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackerManager.java @@ -4,8 +4,9 @@ import java.io.FileNotFoundException; import java.net.MalformedURLException; import java.net.URISyntaxException; +import com.sap.sailing.domain.base.RaceDefinition; +import com.sap.sailing.domain.base.Regatta; import com.sap.sailing.domain.common.RegattaIdentifier; -import com.sap.sailing.domain.tracking.impl.EmptyWindStore; public interface TrackerManager { @@ -18,10 +19,8 @@ public interface TrackerManager { * identifier; if the regatta is found, it is used to add the races to, and * {@link #setRegattaForRace(Regatta, RaceDefinition)} is called to remember the association * persistently. Otherwise, a default regatta as described above will be created and used. - * @param windStore - * must not be null, but can, e.g., be an {@link EmptyWindStore} */ - RacesHandle addRace(RegattaIdentifier regattaToAddTo, RaceTrackingConnectivityParameters params, WindStore windStore, long timeoutInMilliseconds) + RacesHandle addRace(RegattaIdentifier regattaToAddTo, RaceTrackingConnectivityParameters params, long timeoutInMilliseconds) throws MalformedURLException, FileNotFoundException, URISyntaxException, Exception; } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java index 2249135b76e..e037c579466 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java @@ -140,7 +140,6 @@ import com.sap.sailing.domain.leaderboard.caching.LiveLeaderboardUpdater; import com.sap.sailing.domain.persistence.DomainObjectFactory; import com.sap.sailing.domain.persistence.MongoObjectFactory; import com.sap.sailing.domain.persistence.MongoRaceLogStoreFactory; -import com.sap.sailing.domain.persistence.MongoWindStoreFactory; import com.sap.sailing.domain.polarsheets.PolarSheetGenerationWorker; import com.sap.sailing.domain.racelog.RaceLog; import com.sap.sailing.domain.racelog.RaceLogFlagEvent; @@ -857,7 +856,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S new MillisecondsTimePoint(record.getTrackingStartTime().asMillis()), new MillisecondsTimePoint(record.getTrackingEndTime().asMillis()), MongoRaceLogStoreFactory.INSTANCE.getMongoRaceLogStore(mongoObjectFactory, domainObjectFactory), - MongoWindStoreFactory.INSTANCE.getMongoWindStore(mongoObjectFactory, domainObjectFactory), RaceTracker.TIMEOUT_FOR_RECEIVING_RACE_DEFINITION_IN_MILLISECONDS, simulateWithStartTimeNow, tracTracUsername, tracTracPassword); + RaceTracker.TIMEOUT_FOR_RECEIVING_RACE_DEFINITION_IN_MILLISECONDS, simulateWithStartTimeNow, tracTracUsername, tracTracPassword); if (trackWind) { new Thread("Wind tracking starter for race " + record.getEventName() + "/" + record.getName()) { public void run() { @@ -2135,7 +2134,6 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S final RacesHandle raceHandle = getSwissTimingAdapter().addSwissTimingRace(getService(), regattaToAddTo, rr.ID, hostname, port, canSendRequests, - MongoWindStoreFactory.INSTANCE.getMongoWindStore(mongoObjectFactory, domainObjectFactory), MongoRaceLogStoreFactory.INSTANCE.getMongoRaceLogStore(mongoObjectFactory, domainObjectFactory), RaceTracker.TIMEOUT_FOR_RECEIVING_RACE_DEFINITION_IN_MILLISECONDS); if (trackWind) { new Thread("Wind tracking starter for race " + rr.ID + "/" + rr.description) { diff --git a/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestStoringAndLoadingEventsAndRegattas.java b/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestStoringAndLoadingEventsAndRegattas.java index 82551de9204..fd8766f4e1d 100755 --- a/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestStoringAndLoadingEventsAndRegattas.java +++ b/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestStoringAndLoadingEventsAndRegattas.java @@ -1,5 +1,13 @@ package com.sap.sailing.mongodb.test; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNotSame; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertTrue; + import java.net.UnknownHostException; import java.util.ArrayList; import java.util.Arrays; @@ -50,8 +58,8 @@ import com.sap.sailing.domain.leaderboard.impl.HighPoint; import com.sap.sailing.domain.leaderboard.impl.LowPoint; import com.sap.sailing.domain.leaderboard.impl.ThresholdBasedResultDiscardingRuleImpl; import com.sap.sailing.domain.persistence.DomainObjectFactory; -import com.sap.sailing.domain.persistence.PersistenceFactory; import com.sap.sailing.domain.persistence.MongoObjectFactory; +import com.sap.sailing.domain.persistence.PersistenceFactory; import com.sap.sailing.domain.persistence.impl.CollectionNames; import com.sap.sailing.domain.persistence.media.MediaDBFactory; import com.sap.sailing.domain.test.AbstractLeaderboardTest; @@ -59,13 +67,12 @@ import com.sap.sailing.domain.test.mock.MockedTrackedRaceWithFixedRank; import com.sap.sailing.domain.tracking.DynamicTrackedRace; import com.sap.sailing.domain.tracking.DynamicTrackedRegatta; import com.sap.sailing.domain.tracking.impl.DynamicTrackedRegattaImpl; +import com.sap.sailing.domain.tracking.impl.EmptyWindStore; import com.sap.sailing.server.RacingEventService; import com.sap.sailing.server.impl.RacingEventServiceImpl; import com.sap.sailing.server.operationaltransformation.ConnectTrackedRaceToLeaderboardColumn; import com.sap.sailing.server.operationaltransformation.UpdateLeaderboardMaxPointsReason; -import static org.junit.Assert.*; - public class TestStoringAndLoadingEventsAndRegattas extends AbstractMongoDBTest { private static final Logger logger = Logger.getLogger(TestStoringAndLoadingEventsAndRegattas.class.getName()); @@ -134,7 +141,7 @@ public class TestStoringAndLoadingEventsAndRegattas extends AbstractMongoDBTest @Test public void testLoadStoreSimpleRegattaLeaderboard() { RacingEventService res = new RacingEventServiceImpl(PersistenceFactory.INSTANCE.getDomainObjectFactory(getMongoService(), DomainFactory.INSTANCE), PersistenceFactory.INSTANCE - .getMongoObjectFactory(getMongoService()), MediaDBFactory.INSTANCE.getMediaDB(getMongoService())); + .getMongoObjectFactory(getMongoService()), MediaDBFactory.INSTANCE.getMediaDB(getMongoService()), EmptyWindStore.INSTANCE); final int numberOfQualifyingRaces = 5; final int numberOfFinalRaces = 7; final String regattaBaseName = "Kieler Woche"; @@ -248,7 +255,7 @@ public class TestStoringAndLoadingEventsAndRegattas extends AbstractMongoDBTest private RacingEventServiceImpl createRacingEventServiceWithOneMockedTrackedRace(final DynamicTrackedRace q2YellowTrackedRace) { return new RacingEventServiceImpl(PersistenceFactory.INSTANCE.getDomainObjectFactory(getMongoService(), DomainFactory.INSTANCE), PersistenceFactory.INSTANCE - .getMongoObjectFactory(getMongoService()), MediaDBFactory.INSTANCE.getMediaDB(getMongoService())) { + .getMongoObjectFactory(getMongoService()), MediaDBFactory.INSTANCE.getMediaDB(getMongoService()), EmptyWindStore.INSTANCE) { @Override public DynamicTrackedRace getExistingTrackedRace(RegattaAndRaceIdentifier raceIdentifier) { return q2YellowTrackedRace; @@ -470,7 +477,7 @@ public class TestStoringAndLoadingEventsAndRegattas extends AbstractMongoDBTest regatta.addRace(racedef); RacingEventServiceImpl evs = new RacingEventServiceImpl(PersistenceFactory.INSTANCE.getDomainObjectFactory(getMongoService(), DomainFactory.INSTANCE), PersistenceFactory.INSTANCE - .getMongoObjectFactory(getMongoService()), MediaDBFactory.INSTANCE.getMediaDB(getMongoService())); + .getMongoObjectFactory(getMongoService()), MediaDBFactory.INSTANCE.getMediaDB(getMongoService()), EmptyWindStore.INSTANCE); assertNull(evs.getRememberedRegattaForRace(racedef.getId())); evs.raceAdded(regatta, racedef); assertNotNull(evs.getRememberedRegattaForRace(racedef.getId())); diff --git a/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestStoringAndRetrievingLeaderboardGroups.java b/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestStoringAndRetrievingLeaderboardGroups.java index 7a905971efa..ee21289cf1c 100755 --- a/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestStoringAndRetrievingLeaderboardGroups.java +++ b/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestStoringAndRetrievingLeaderboardGroups.java @@ -49,6 +49,7 @@ import com.sap.sailing.domain.persistence.impl.DomainObjectFactoryImpl; import com.sap.sailing.domain.persistence.impl.MongoObjectFactoryImpl; import com.sap.sailing.domain.persistence.media.MediaDBFactory; import com.sap.sailing.domain.test.mock.MockedTrackedRaceWithFixedRankAndManyCompetitors; +import com.sap.sailing.domain.tracking.impl.EmptyWindStore; import com.sap.sailing.mongodb.MongoDBService; import com.sap.sailing.server.RacingEventService; import com.sap.sailing.server.impl.RacingEventServiceImpl; @@ -314,7 +315,7 @@ public class TestStoringAndRetrievingLeaderboardGroups extends AbstractMongoDBTe // the leaderboard named leaderboardNames[2] occurs in both groups RacingEventService racingEventService = new RacingEventServiceImpl(PersistenceFactory.INSTANCE.getDomainObjectFactory(MongoDBService.INSTANCE, DomainFactory.INSTANCE), PersistenceFactory.INSTANCE - .getMongoObjectFactory(MongoDBService.INSTANCE), MediaDBFactory.INSTANCE.getMediaDB(MongoDBService.INSTANCE)); // expected to load leaderboard groups + .getMongoObjectFactory(MongoDBService.INSTANCE), MediaDBFactory.INSTANCE.getMediaDB(MongoDBService.INSTANCE), EmptyWindStore.INSTANCE); // expected to load leaderboard groups final LeaderboardGroup loadedLeaderboardGroup1 = racingEventService.getLeaderboardGroupByName(groupName1); final LeaderboardGroup loadedLeaderboardGroup2 = racingEventService.getLeaderboardGroupByName(groupName2); diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/impl/AdminApp.java b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/impl/AdminApp.java index f95e414a104..531dec51730 100755 --- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/impl/AdminApp.java +++ b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/impl/AdminApp.java @@ -3,10 +3,8 @@ package com.sap.sailing.server.gateway.impl; import java.io.IOException; import java.net.MalformedURLException; import java.net.SocketException; -import java.net.URI; import java.net.URISyntaxException; import java.net.URL; -import java.net.UnknownHostException; import java.text.ParseException; import java.util.ArrayList; import java.util.Collections; @@ -20,7 +18,6 @@ import javax.servlet.http.HttpServletResponse; import org.json.simple.JSONArray; import org.json.simple.JSONObject; -import com.mongodb.MongoException; import com.sap.sailing.domain.base.RaceDefinition; import com.sap.sailing.domain.base.Regatta; import com.sap.sailing.domain.common.Bearing; @@ -37,20 +34,12 @@ import com.sap.sailing.domain.common.impl.KnotSpeedWithBearingImpl; import com.sap.sailing.domain.common.impl.MillisecondsTimePoint; import com.sap.sailing.domain.common.impl.Util.Triple; import com.sap.sailing.domain.common.impl.WindSourceImpl; -import com.sap.sailing.domain.persistence.PersistenceFactory; -import com.sap.sailing.domain.persistence.MongoRaceLogStoreFactory; -import com.sap.sailing.domain.persistence.MongoWindStoreFactory; -import com.sap.sailing.domain.racelog.RaceLogStore; -import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore; import com.sap.sailing.domain.tracking.DynamicTrackedRace; import com.sap.sailing.domain.tracking.TrackedRace; import com.sap.sailing.domain.tracking.Wind; -import com.sap.sailing.domain.tracking.WindStore; import com.sap.sailing.domain.tracking.WindTrack; -import com.sap.sailing.domain.tracking.impl.EmptyWindStore; import com.sap.sailing.domain.tracking.impl.WindImpl; import com.sap.sailing.domain.tractracadapter.RaceRecord; -import com.sap.sailing.mongodb.MongoDBService; import com.sap.sailing.server.gateway.SailingServerHttpServlet; import com.sap.sailing.util.InvalidDateException; @@ -59,10 +48,6 @@ public class AdminApp extends SailingServerHttpServlet { private static final String ACTION_NAME_ADD_WIND_TO_MARKS = "addwindtomarksforonehour"; - private static final String ACTION_NAME_ADD_EVENT = "addevent"; - - private static final String ACTION_NAME_ADD_RACE = "addrace"; - private static final String ACTION_NAME_LIST_RACES_IN_REGATTA = "listracesinregatta"; private static final String ACTION_NAME_STOP_REGATTA = "stopregatta"; @@ -83,12 +68,6 @@ public class AdminApp extends SailingServerHttpServlet { private static final String PARAM_NAME_EVENT_JSON_URL = "eventJSONURL"; - private static final String PARAM_NAME_PARAM_URL = "paramURL"; - - private static final String PARAM_NAME_LIVE_URI = "liveURI"; - - private static final String PARAM_NAME_STORED_URI = "storedURI"; - private static final String PARAM_NAME_FROM_TIME = "fromtime"; private static final String PARAM_NAME_FROM_TIME_MILLIS = "fromtimeasmillis"; @@ -116,15 +95,7 @@ public class AdminApp extends SailingServerHttpServlet { private static final String PARAM_NAME_PORT = "port"; private static final String PARAM_NAME_CORRECT_EXPEDITION_WIND_BEARING_BY_DECLINATION = "correctexpeditionwindbearingbydeclination"; - - private static final String PARAM_NAME_WINDSTORE = "windstore"; - private static final String PARAM_NAME_RACELOGSTORE = "racelogstore"; - - private static final String STORE_EMPTY = "empty"; - - private static final String STORE_MONGO = "mongo"; - public AdminApp() { } @@ -133,13 +104,9 @@ public class AdminApp extends SailingServerHttpServlet { try { String action = req.getParameter(PARAM_ACTION); if (action != null) { - if (ACTION_NAME_ADD_EVENT.equals(action)) { - addEvent(req, resp); - } else if (ACTION_NAME_STOP_REGATTA.equals(action)) { + if (ACTION_NAME_STOP_REGATTA.equals(action)) { stopRegatta(req, resp); - } else if (ACTION_NAME_ADD_RACE.equals(action)) { - addRace(req, resp); - } else if (ACTION_NAME_LIST_RACES_IN_REGATTA.equals(action)) { + } else if (ACTION_NAME_LIST_RACES_IN_REGATTA.equals(action)) { listRacesInEvent(req, resp); } else if (ACTION_NAME_STOP_RACE.equals(action)) { stopRace(req, resp); @@ -470,64 +437,6 @@ public class AdminApp extends SailingServerHttpServlet { } } - private void addEvent(HttpServletRequest req, HttpServletResponse resp) throws MongoException, Exception { - URL jsonURL = new URL(req.getParameter(PARAM_NAME_EVENT_JSON_URL)); - URI liveURI = new URI(req.getParameter(PARAM_NAME_LIVE_URI)); - URI storedURI = new URI(req.getParameter(PARAM_NAME_STORED_URI)); - - //The course design update URI is not available at this place - getTracTracAdapterFactory().getOrCreateTracTracAdapter(getService().getBaseDomainFactory()).addRegatta(getService(), - jsonURL, liveURI, storedURI, /* courseDesignUpdateURI */null, /* timeoutInMilliseconds */ - getWindStore(req), - 60000, /* tracTracUsername */null, /* tracTracPassword */null, getRaceLogStore(req)); - } - - private WindStore getWindStore(HttpServletRequest req) throws UnknownHostException, MongoException { - String windStore = req.getParameter(PARAM_NAME_WINDSTORE); - if (windStore != null) { - if (windStore.equals(STORE_EMPTY)) { - return EmptyWindStore.INSTANCE; - } else if (windStore.equals(STORE_MONGO)) { - return MongoWindStoreFactory.INSTANCE.getMongoWindStore( - PersistenceFactory.INSTANCE.getDefaultMongoObjectFactory(), - PersistenceFactory.INSTANCE.getDomainObjectFactory(MongoDBService.INSTANCE, getService().getBaseDomainFactory())); - } else { - log("Couldn't find wind store "+windStore+". Using EmptyWindStore instead."); - return EmptyWindStore.INSTANCE; - } - } - return EmptyWindStore.INSTANCE; - } - - private RaceLogStore getRaceLogStore(HttpServletRequest req) throws UnknownHostException, MongoException { - String raceLogStore = req.getParameter(PARAM_NAME_RACELOGSTORE); - if (raceLogStore != null) { - if (raceLogStore.equals(STORE_EMPTY)) { - return EmptyRaceLogStore.INSTANCE; - } else if (raceLogStore.equals(STORE_MONGO)) { - return MongoRaceLogStoreFactory.INSTANCE.getMongoRaceLogStore( - PersistenceFactory.INSTANCE.getDefaultMongoObjectFactory(), - PersistenceFactory.INSTANCE.getDomainObjectFactory(MongoDBService.INSTANCE, getService().getBaseDomainFactory())); - } else { - log("Couldn't find race log store "+raceLogStore+". Using EmptyRaceLogStore instead."); - return EmptyRaceLogStore.INSTANCE; - } - } - return EmptyRaceLogStore.INSTANCE; - } - - private void addRace(HttpServletRequest req, HttpServletResponse resp) throws MongoException, Exception { - URL paramURL = new URL(req.getParameter(PARAM_NAME_PARAM_URL)); - URI liveURI = new URI(req.getParameter(PARAM_NAME_LIVE_URI)); - URI storedURI = new URI(req.getParameter(PARAM_NAME_STORED_URI)); - //The course design update URI is not available at this place - getTracTracAdapterFactory().getOrCreateTracTracAdapter(getService().getBaseDomainFactory()).addTracTracRace(getService(), paramURL, liveURI, storedURI, - /*courseDesignUpdateURI*/ null, - MongoRaceLogStoreFactory.INSTANCE.getMongoRaceLogStore(PersistenceFactory.INSTANCE.getDefaultMongoObjectFactory(), - PersistenceFactory.INSTANCE.getDomainObjectFactory(MongoDBService.INSTANCE, getService().getBaseDomainFactory())), getWindStore(req), - /* timeoutInMilliseconds */ 60000l, /*tracTracUsername*/ null, /*tracTracPassword*/ null); - } - private void stopRace(HttpServletRequest req, HttpServletResponse resp) throws MalformedURLException, IOException, InterruptedException { Regatta regatta = getRegatta(req); if (regatta != null) { diff --git a/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/AbstractServerReplicationTest.java b/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/AbstractServerReplicationTest.java index 89ad053c3ac..224a8a4c7c3 100755 --- a/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/AbstractServerReplicationTest.java +++ b/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/AbstractServerReplicationTest.java @@ -27,6 +27,7 @@ import com.sap.sailing.domain.base.impl.DomainFactoryImpl; import com.sap.sailing.domain.common.impl.Util.Pair; import com.sap.sailing.domain.persistence.PersistenceFactory; import com.sap.sailing.domain.persistence.media.MediaDBFactory; +import com.sap.sailing.domain.tracking.impl.EmptyWindStore; import com.sap.sailing.mongodb.MongoDBService; import com.sap.sailing.server.RacingEventService; import com.sap.sailing.server.impl.RacingEventServiceImpl; @@ -92,7 +93,7 @@ public abstract class AbstractServerReplicationTest { this.master = master; } else { this.master = new RacingEventServiceImpl(PersistenceFactory.INSTANCE.getDomainObjectFactory(mongoDBService, DomainFactory.INSTANCE), PersistenceFactory.INSTANCE - .getMongoObjectFactory(mongoDBService), MediaDBFactory.INSTANCE.getMediaDB(mongoDBService)); + .getMongoObjectFactory(mongoDBService), MediaDBFactory.INSTANCE.getMediaDB(mongoDBService), EmptyWindStore.INSTANCE); } if (replica != null) { this.replica = replica; @@ -100,7 +101,7 @@ public abstract class AbstractServerReplicationTest { this.replica = new RacingEventServiceImpl(PersistenceFactory.INSTANCE.getDomainObjectFactory(mongoDBService, // replica gets its own base DomainFactory: new DomainFactoryImpl()), PersistenceFactory.INSTANCE - .getMongoObjectFactory(mongoDBService), MediaDBFactory.INSTANCE.getMediaDB(mongoDBService)); + .getMongoObjectFactory(mongoDBService), MediaDBFactory.INSTANCE.getMediaDB(mongoDBService), EmptyWindStore.INSTANCE); } ReplicationInstancesManager rim = new ReplicationInstancesManager(); masterReplicator = new ReplicationServiceImpl(exchangeName, exchangeHost, rim, this.master); diff --git a/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/DelayedLeaderboardCorrectionsReplicationTest.java b/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/DelayedLeaderboardCorrectionsReplicationTest.java index bc241e9a714..b4c68d84c15 100755 --- a/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/DelayedLeaderboardCorrectionsReplicationTest.java +++ b/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/DelayedLeaderboardCorrectionsReplicationTest.java @@ -1,5 +1,9 @@ package com.sap.sailing.server.replication.test; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; + import java.io.FileNotFoundException; import java.net.UnknownHostException; @@ -25,6 +29,7 @@ import com.sap.sailing.domain.test.AbstractLeaderboardTest; import com.sap.sailing.domain.test.mock.MockedTrackedRaceWithFixedRank; import com.sap.sailing.domain.tracking.DynamicTrackedRace; import com.sap.sailing.domain.tracking.TrackedRace; +import com.sap.sailing.domain.tracking.impl.EmptyWindStore; import com.sap.sailing.mongodb.MongoDBService; import com.sap.sailing.server.impl.RacingEventServiceImpl; import com.sap.sailing.server.operationaltransformation.AddColumnToLeaderboard; @@ -34,8 +39,6 @@ import com.sap.sailing.server.operationaltransformation.UpdateLeaderboardMaxPoin import com.sap.sailing.server.replication.ReplicationMasterDescriptor; import com.sap.sailing.server.replication.ReplicationService; -import static org.junit.Assert.*; - public class DelayedLeaderboardCorrectionsReplicationTest extends AbstractServerReplicationTest { private static final String Q2 = "Q2"; private ReplicationService replicaReplicator; @@ -125,7 +128,7 @@ public class DelayedLeaderboardCorrectionsReplicationTest extends AbstractServer private RacingEventServiceImpl createRacingEventServiceWithOneMockedTrackedRace(final DynamicTrackedRace q2YellowTrackedRace) { return new RacingEventServiceImpl(PersistenceFactory.INSTANCE.getDomainObjectFactory(MongoDBService.INSTANCE, DomainFactory.INSTANCE), PersistenceFactory.INSTANCE - .getMongoObjectFactory(MongoDBService.INSTANCE), MediaDBFactory.INSTANCE.getMediaDB(MongoDBService.INSTANCE)) { + .getMongoObjectFactory(MongoDBService.INSTANCE), MediaDBFactory.INSTANCE.getMediaDB(MongoDBService.INSTANCE), EmptyWindStore.INSTANCE) { @Override public DynamicTrackedRace getExistingTrackedRace(RegattaAndRaceIdentifier raceIdentifier) { return q2YellowTrackedRace; diff --git a/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/InitialLoadReplicationObjectIdentityTest.java b/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/InitialLoadReplicationObjectIdentityTest.java index d9b0dbc255a..599fdae433b 100755 --- a/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/InitialLoadReplicationObjectIdentityTest.java +++ b/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/InitialLoadReplicationObjectIdentityTest.java @@ -1,11 +1,11 @@ package com.sap.sailing.server.replication.test; +import static org.hamcrest.core.Is.is; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; -import static org.hamcrest.core.Is.is; import java.util.ArrayList; import java.util.Collections; @@ -34,6 +34,7 @@ import com.sap.sailing.domain.leaderboard.impl.LowPoint; import com.sap.sailing.domain.persistence.PersistenceFactory; import com.sap.sailing.domain.persistence.media.MediaDBFactory; import com.sap.sailing.domain.test.TrackBasedTest; +import com.sap.sailing.domain.tracking.impl.EmptyWindStore; import com.sap.sailing.mongodb.MongoDBService; import com.sap.sailing.server.impl.RacingEventServiceImpl; import com.sap.sailing.server.operationaltransformation.AddDefaultRegatta; @@ -53,9 +54,9 @@ public class InitialLoadReplicationObjectIdentityTest extends AbstractServerRepl final MongoDBService mongoDBService = MongoDBService.INSTANCE; mongoDBService.getDB().dropDatabase(); this.master = new RacingEventServiceImpl(PersistenceFactory.INSTANCE.getDomainObjectFactory(mongoDBService, DomainFactory.INSTANCE), PersistenceFactory.INSTANCE - .getMongoObjectFactory(mongoDBService), MediaDBFactory.INSTANCE.getMediaDB(mongoDBService)); + .getMongoObjectFactory(mongoDBService), MediaDBFactory.INSTANCE.getMediaDB(mongoDBService), EmptyWindStore.INSTANCE); this.replica = new RacingEventServiceImpl(PersistenceFactory.INSTANCE.getDomainObjectFactory(mongoDBService, DomainFactory.INSTANCE), PersistenceFactory.INSTANCE - .getMongoObjectFactory(mongoDBService), MediaDBFactory.INSTANCE.getMediaDB(mongoDBService)); + .getMongoObjectFactory(mongoDBService), MediaDBFactory.INSTANCE.getMediaDB(mongoDBService), EmptyWindStore.INSTANCE); } public void performReplicationSetup() throws Exception { diff --git a/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/TrackRaceReplicationTest.java b/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/TrackRaceReplicationTest.java index ec69866319a..efb743e863f 100755 --- a/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/TrackRaceReplicationTest.java +++ b/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/TrackRaceReplicationTest.java @@ -17,8 +17,6 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; - - import com.sap.sailing.domain.base.Fleet; import com.sap.sailing.domain.base.RaceColumn; import com.sap.sailing.domain.common.LeaderboardNameConstants; @@ -36,7 +34,6 @@ import com.sap.sailing.domain.tracking.DynamicTrackedRace; import com.sap.sailing.domain.tracking.RaceTrackingConnectivityParameters; import com.sap.sailing.domain.tracking.RacesHandle; import com.sap.sailing.domain.tracking.TrackedRace; -import com.sap.sailing.domain.tracking.impl.EmptyWindStore; import com.sap.sailing.server.OperationExecutionListener; import com.sap.sailing.server.RacingEventServiceOperation; import com.sap.sailing.server.operationaltransformation.AddColumnToLeaderboard; @@ -86,7 +83,7 @@ public class TrackRaceReplicationTest extends AbstractServerReplicationTest { }); trackingParams = com.sap.sailing.domain.tractracadapter.DomainFactory.INSTANCE.createTrackingConnectivityParameters(paramURL, liveURI, storedURI, courseDesignUpdateURI, startOfTracking, endOfTracking, /* delayToLiveInMillis */ - 0l, /* simulateWithStartTimeNow */false, EmptyRaceLogStore.INSTANCE, EmptyWindStore.INSTANCE, tracTracUsername, tracTracPassword); + 0l, /* simulateWithStartTimeNow */false, EmptyRaceLogStore.INSTANCE, tracTracUsername, tracTracPassword); } private void startTracking() throws Exception, InterruptedException { @@ -97,7 +94,7 @@ public class TrackRaceReplicationTest extends AbstractServerReplicationTest { } private void startTrackingOnMaster() throws Exception { - racesHandle = master.addRace(/* regattaToAddTo */ null, trackingParams, EmptyWindStore.INSTANCE, /* timeoutInMilliseconds */ 60000); + racesHandle = master.addRace(/* regattaToAddTo */ null, trackingParams, /* timeoutInMilliseconds */ 60000); } private void waitForTrackRaceReplicationTrigger() throws InterruptedException { diff --git a/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/MasterDataImportTest.java b/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/MasterDataImportTest.java index 9efa1624970..09b88e1ef44 100644 --- a/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/MasterDataImportTest.java +++ b/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/MasterDataImportTest.java @@ -66,6 +66,7 @@ import com.sap.sailing.domain.racelog.RaceLogFinishPositioningConfirmedEvent; import com.sap.sailing.domain.racelog.RaceLogStartTimeEvent; import com.sap.sailing.domain.racelog.impl.RaceLogEventFactoryImpl; import com.sap.sailing.domain.tracking.TrackedRace; +import com.sap.sailing.domain.tracking.impl.EmptyWindStore; import com.sap.sailing.mongodb.MongoDBService; import com.sap.sailing.server.RacingEventService; import com.sap.sailing.server.gateway.serialization.masterdata.impl.TopLevelMasterDataSerializer; @@ -576,7 +577,7 @@ public class MasterDataImportTest { // Setup source service DomainFactory sourceDomainFactory = new DomainFactoryImpl(); RacingEventService sourceService = new RacingEventServiceImpl(PersistenceFactory.INSTANCE.getDomainObjectFactory(MongoDBService.INSTANCE, sourceDomainFactory), - PersistenceFactory.INSTANCE.getMongoObjectFactory(MongoDBService.INSTANCE), MediaDBFactory.INSTANCE.getDefaultMediaDB()); + PersistenceFactory.INSTANCE.getMongoObjectFactory(MongoDBService.INSTANCE), MediaDBFactory.INSTANCE.getDefaultMediaDB(), EmptyWindStore.INSTANCE); Event event = sourceService.addEvent(TEST_EVENT_NAME, "testVenue", "", false, eventUUID); UUID courseAreaUUID = UUID.randomUUID(); CourseArea courseArea = new CourseAreaImpl("testArea", courseAreaUUID); diff --git a/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/RaceTrackerTest.java b/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/RaceTrackerTest.java index 9df2f92bd84..2b6a666e2c9 100755 --- a/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/RaceTrackerTest.java +++ b/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/RaceTrackerTest.java @@ -25,7 +25,6 @@ import com.sap.sailing.domain.tracking.RaceListener; import com.sap.sailing.domain.tracking.RacesHandle; 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.domain.tractracadapter.impl.TracTracAdapterFactoryImpl; import com.sap.sailing.server.impl.RacingEventServiceImpl; @@ -73,7 +72,7 @@ public class RaceTrackerTest { tracTracAdapterFactory = new TracTracAdapterFactoryImpl(); raceHandle = tracTracAdapterFactory.getOrCreateTracTracAdapter(service.getBaseDomainFactory()) .addTracTracRace(service, paramUrl, liveUri, storedUri, courseDesignUpdateUri, EmptyRaceLogStore.INSTANCE, - EmptyWindStore.INSTANCE, /* timeoutInMilliseconds */60000, tracTracUsername, tracTracPassword); + /* timeoutInMilliseconds */60000, tracTracUsername, tracTracPassword); logger.info("Calling raceHandle.getRaces()"); Set races = raceHandle.getRaces(); // wait for RaceDefinition to be completely wired in Regatta logger.info("Obtained races: "+races); @@ -131,7 +130,7 @@ public class RaceTrackerTest { service.removeRegatta(raceHandle.getRegatta()); RacesHandle myRaceHandle = tracTracAdapterFactory.getOrCreateTracTracAdapter(service.getBaseDomainFactory()) .addTracTracRace(service, paramUrl, liveUri, storedUri, courseDesignUpdateUri, EmptyRaceLogStore.INSTANCE, - EmptyWindStore.INSTANCE, /* timeoutInMilliseconds */60000, tracTracUsername, tracTracPassword); + /* timeoutInMilliseconds */60000, tracTracUsername, tracTracPassword); TrackedRegatta newTrackedRegatta = myRaceHandle.getTrackedRegatta(); assertNotSame(oldTrackedRegatta, newTrackedRegatta); TrackedRace newTrackedRace = getTrackedRace(newTrackedRegatta); @@ -157,7 +156,7 @@ public class RaceTrackerTest { TrackedRace oldTrackedRace = getTrackedRace(oldTrackedRegatta); RacesHandle myRaceHandle = tracTracAdapterFactory.getOrCreateTracTracAdapter(service.getBaseDomainFactory()) .addTracTracRace(service, paramUrl, liveUri, storedUri, courseDesignUpdateUri, EmptyRaceLogStore.INSTANCE, - EmptyWindStore.INSTANCE, /* timeoutInMilliseconds */60000, tracTracUsername, tracTracPassword); + /* timeoutInMilliseconds */60000, tracTracUsername, tracTracPassword); TrackedRegatta newTrackedEvent = myRaceHandle.getTrackedRegatta(); TrackedRace newTrackedRace = getTrackedRace(newTrackedEvent); // expecting a new tracked race to be created when starting over with tracking diff --git a/java/com.sap.sailing.server/META-INF/MANIFEST.MF b/java/com.sap.sailing.server/META-INF/MANIFEST.MF index 197956998cf..b25247faa94 100755 --- a/java/com.sap.sailing.server/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.server/META-INF/MANIFEST.MF @@ -18,6 +18,7 @@ Require-Bundle: com.sap.sailing.domain, com.sap.sailing.expeditionconnector, com.sap.sailing.declination, com.sap.sailing.mongodb, + com.mongodb.driver;bundle-version="2.6.2", com.sap.sailing.domain.persistence, com.sap.sailing.domain.common, com.sap.sailing.udpconnector, diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RacingEventServiceImpl.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RacingEventServiceImpl.java index 9691d843f85..6c66ff75fa4 100755 --- a/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RacingEventServiceImpl.java +++ b/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RacingEventServiceImpl.java @@ -77,6 +77,7 @@ import com.sap.sailing.domain.leaderboard.meta.LeaderboardGroupMetaLeaderboard; import com.sap.sailing.domain.persistence.DomainObjectFactory; import com.sap.sailing.domain.persistence.MongoObjectFactory; import com.sap.sailing.domain.persistence.MongoRaceLogStoreFactory; +import com.sap.sailing.domain.persistence.MongoWindStoreFactory; import com.sap.sailing.domain.persistence.PersistenceFactory; import com.sap.sailing.domain.persistence.media.DBMediaTrack; import com.sap.sailing.domain.persistence.media.MediaDB; @@ -205,6 +206,8 @@ public class RacingEventServiceImpl implements RacingEventService, RegattaListen private final MediaLibrary mediaLibrary; + private final WindStore windStore; + /** * Constructs a {@link DomainFactory base domain factory} that uses this object's {@link #competitorStore * competitor store} for competitor management. This base domain factory is then also used for the construction of @@ -213,7 +216,11 @@ public class RacingEventServiceImpl implements RacingEventService, RegattaListen * prior releases that did not support a persistent competitor collection. */ public RacingEventServiceImpl() { - this(true); + this(true, null); + } + + public RacingEventServiceImpl(WindStore windStore) { + this(true, windStore); } /** @@ -226,11 +233,15 @@ public class RacingEventServiceImpl implements RacingEventService, RegattaListen * created and stored during previous service executions will initially be loaded. */ public RacingEventServiceImpl(boolean clearPersistentCompetitorStore) { - this(new PersistentCompetitorStore(PersistenceFactory.INSTANCE.getDefaultMongoObjectFactory(), clearPersistentCompetitorStore)); + this(new PersistentCompetitorStore(PersistenceFactory.INSTANCE.getDefaultMongoObjectFactory(), clearPersistentCompetitorStore), null); } - private RacingEventServiceImpl(PersistentCompetitorStore persistentCompetitorStore) { - this(persistentCompetitorStore.getDomainObjectFactory(), persistentCompetitorStore.getMongoObjectFactory(), persistentCompetitorStore.getBaseDomainFactory(), MediaDBFactory.INSTANCE.getDefaultMediaDB(), persistentCompetitorStore); + private RacingEventServiceImpl(boolean clearPersistentCompetitorStore, WindStore windStore) { + this(new PersistentCompetitorStore(PersistenceFactory.INSTANCE.getDefaultMongoObjectFactory(), clearPersistentCompetitorStore), windStore); + } + + private RacingEventServiceImpl(PersistentCompetitorStore persistentCompetitorStore, WindStore windStore) { + this(persistentCompetitorStore.getDomainObjectFactory(), persistentCompetitorStore.getMongoObjectFactory(), persistentCompetitorStore.getBaseDomainFactory(), MediaDBFactory.INSTANCE.getDefaultMediaDB(), persistentCompetitorStore, windStore); } /** @@ -238,12 +249,12 @@ public class RacingEventServiceImpl implements RacingEventService, RegattaListen * {@link PersistenceFactory#getDefaultDomainObjectFactory() default domain object factory}. This constructor should * be used for testing because it provides a transient {@link CompetitorStore} as required for competitor persistence. */ - public RacingEventServiceImpl(DomainObjectFactory domainObjectFactory, MongoObjectFactory mongoObjectFactory, MediaDB mediaDB) { - this(domainObjectFactory, mongoObjectFactory, domainObjectFactory.getBaseDomainFactory(), mediaDB, domainObjectFactory.getBaseDomainFactory().getCompetitorStore()); + public RacingEventServiceImpl(DomainObjectFactory domainObjectFactory, MongoObjectFactory mongoObjectFactory, MediaDB mediaDB, WindStore windStore) { + this(domainObjectFactory, mongoObjectFactory, domainObjectFactory.getBaseDomainFactory(), mediaDB, domainObjectFactory.getBaseDomainFactory().getCompetitorStore(), windStore); } private RacingEventServiceImpl(DomainObjectFactory domainObjectFactory, MongoObjectFactory mongoObjectFactory, - com.sap.sailing.domain.base.DomainFactory baseDomainFactory, MediaDB mediaDb, CompetitorStore competitorStore) { + com.sap.sailing.domain.base.DomainFactory baseDomainFactory, MediaDB mediaDb, CompetitorStore competitorStore, WindStore windStore) { logger.info("Created " + this); this.baseDomainFactory = baseDomainFactory; this.domainObjectFactory = domainObjectFactory; @@ -263,6 +274,15 @@ public class RacingEventServiceImpl implements RacingEventService, RegattaListen this.raceLogScoringReplicator = new RaceLogScoringReplicator(this); this.mediaDB = mediaDb; this.mediaLibrary = new MediaLibrary(); + + if (windStore == null) { + try { + windStore = MongoWindStoreFactory.INSTANCE.getMongoWindStore(mongoObjectFactory, domainObjectFactory); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + this.windStore = windStore; // Add one default leaderboard that aggregates all races currently tracked by this service. // This is more for debugging purposes than for anything else. @@ -747,16 +767,16 @@ public class RacingEventServiceImpl implements RacingEventService, RegattaListen @Override public RacesHandle addRace(RegattaIdentifier regattaToAddTo, RaceTrackingConnectivityParameters params, - WindStore windStore, long timeoutInMilliseconds) throws Exception { + long timeoutInMilliseconds) throws Exception { RaceTracker tracker = raceTrackersByID.get(params.getTrackerID()); if (tracker == null) { Regatta regatta = regattaToAddTo == null ? null : getRegatta(regattaToAddTo); if (regatta == null) { // create tracker and use an existing or create a default regatta - tracker = params.createRaceTracker(this); + tracker = params.createRaceTracker(this, windStore); } else { // use the regatta selected by the RaceIdentifier regattaToAddTo - tracker = params.createRaceTracker(regatta, this); + tracker = params.createRaceTracker(regatta, this, windStore); assert tracker.getRegatta() == regatta; } synchronized (raceTrackersByRegatta) { diff --git a/java/com.sap.sailing.simulator.test/src/com/sap/sailing/simulator/test/util/RaceDataAccessEval.java b/java/com.sap.sailing.simulator.test/src/com/sap/sailing/simulator/test/util/RaceDataAccessEval.java index 6bf667f3d05..4788310902b 100644 --- a/java/com.sap.sailing.simulator.test/src/com/sap/sailing/simulator/test/util/RaceDataAccessEval.java +++ b/java/com.sap.sailing.simulator.test/src/com/sap/sailing/simulator/test/util/RaceDataAccessEval.java @@ -16,7 +16,6 @@ import com.sap.sailing.domain.tracking.GPSFixMoving; import com.sap.sailing.domain.tracking.GPSFixTrack; import com.sap.sailing.domain.tracking.RacesHandle; import com.sap.sailing.domain.tracking.TrackedRace; -import com.sap.sailing.domain.tracking.impl.EmptyWindStore; import com.sap.sailing.domain.tractracadapter.TracTracAdapterFactory; import com.sap.sailing.domain.tractracadapter.impl.TracTracAdapterFactoryImpl; import com.sap.sailing.server.impl.RacingEventServiceImpl; @@ -105,7 +104,7 @@ public class RaceDataAccessEval { tracTracAdapterFactory = new TracTracAdapterFactoryImpl(); logger.info("Calling service.addTracTracRace"); raceHandle = SimulatorUtils.loadRace(service, tracTracAdapterFactory, paramUrl, liveUri, storedUri, null, - EmptyWindStore.INSTANCE, 60000); + 60000); logger.info("Calling raceHandle.getRaces(): " + raceHandle); Set races = raceHandle.getRaces(); // wait for RaceDefinition to be completely wired in Regatta diff --git a/java/com.sap.sailing.simulator.test/src/com/sap/sailing/simulator/test/util/RacingEventPersistence.java b/java/com.sap.sailing.simulator.test/src/com/sap/sailing/simulator/test/util/RacingEventPersistence.java index 5cd35ef79ac..ce132aca5aa 100644 --- a/java/com.sap.sailing.simulator.test/src/com/sap/sailing/simulator/test/util/RacingEventPersistence.java +++ b/java/com.sap.sailing.simulator.test/src/com/sap/sailing/simulator/test/util/RacingEventPersistence.java @@ -19,7 +19,6 @@ import com.sap.sailing.domain.tracking.GPSFixMoving; import com.sap.sailing.domain.tracking.GPSFixTrack; import com.sap.sailing.domain.tracking.RacesHandle; import com.sap.sailing.domain.tracking.TrackedRace; -import com.sap.sailing.domain.tracking.impl.EmptyWindStore; import com.sap.sailing.domain.tractracadapter.TracTracAdapterFactory; import com.sap.sailing.domain.tractracadapter.impl.TracTracAdapterFactoryImpl; import com.sap.sailing.server.impl.RacingEventServiceImpl; @@ -55,7 +54,7 @@ public class RacingEventPersistence { URI storedURI = new URI(storedURIStr); raceHandle = SimulatorUtils.loadRace(service, tracTracAdapterFactory, paramURL, liveURI, storedURI, null, - EmptyWindStore.INSTANCE, 60000); + 60000); System.out.println("Done loading race."); diff --git a/java/com.sap.sailing.simulator.test/src/com/sap/sailing/simulator/test/util/TracTracReaderFromURLs.java b/java/com.sap.sailing.simulator.test/src/com/sap/sailing/simulator/test/util/TracTracReaderFromURLs.java index 21cd094f477..1663afc5ee8 100644 --- a/java/com.sap.sailing.simulator.test/src/com/sap/sailing/simulator/test/util/TracTracReaderFromURLs.java +++ b/java/com.sap.sailing.simulator.test/src/com/sap/sailing/simulator/test/util/TracTracReaderFromURLs.java @@ -11,7 +11,6 @@ import com.sap.sailing.domain.common.RegattaAndRaceIdentifier; import com.sap.sailing.domain.common.RegattaNameAndRaceName; import com.sap.sailing.domain.tracking.RacesHandle; import com.sap.sailing.domain.tracking.TrackedRace; -import com.sap.sailing.domain.tracking.impl.EmptyWindStore; import com.sap.sailing.domain.tractracadapter.TracTracAdapterFactory; import com.sap.sailing.domain.tractracadapter.impl.TracTracAdapterFactoryImpl; import com.sap.sailing.server.impl.RacingEventServiceImpl; @@ -69,7 +68,7 @@ public class TracTracReaderFromURLs implements TracTracReader { for (String paramURLStr : tracTracParamURLs) { URL paramURL = new URL(paramURLStr); RacesHandle raceHandle = SimulatorUtils.loadRace(service, tracTracAdapterFactory, paramURL, liveURI, storedURI, - null, EmptyWindStore.INSTANCE, 60000); + null, 60000); String regatta = raceHandle.getRegatta().getName(); Set races = raceHandle.getRaces(); diff --git a/java/com.sap.sailing.simulator.test/src/com/sap/sailing/simulator/test/util/TracTracWriter.java b/java/com.sap.sailing.simulator.test/src/com/sap/sailing/simulator/test/util/TracTracWriter.java index 8b2a7701333..dce78ddf1a0 100644 --- a/java/com.sap.sailing.simulator.test/src/com/sap/sailing/simulator/test/util/TracTracWriter.java +++ b/java/com.sap.sailing.simulator.test/src/com/sap/sailing/simulator/test/util/TracTracWriter.java @@ -13,7 +13,6 @@ import com.sap.sailing.domain.common.RegattaAndRaceIdentifier; import com.sap.sailing.domain.common.RegattaNameAndRaceName; import com.sap.sailing.domain.tracking.RacesHandle; import com.sap.sailing.domain.tracking.TrackedRace; -import com.sap.sailing.domain.tracking.impl.EmptyWindStore; import com.sap.sailing.domain.tractracadapter.TracTracAdapterFactory; import com.sap.sailing.domain.tractracadapter.impl.TracTracAdapterFactoryImpl; import com.sap.sailing.server.impl.RacingEventServiceImpl; @@ -44,7 +43,7 @@ public class TracTracWriter { for (String paramURLStr : sources) { URL paramURL = new URL(paramURLStr); RacesHandle raceHandle = SimulatorUtils.loadRace(service, tracTracAdapterFactory, paramURL, liveURI, storedURI, - null, EmptyWindStore.INSTANCE, 60000); + null, 60000); String regatta = raceHandle.getRegatta().getName(); Set races = raceHandle.getRaces(); diff --git a/java/com.sap.sailing.simulator/src/com/sap/sailing/simulator/impl/PathGeneratorTracTrac.java b/java/com.sap.sailing.simulator/src/com/sap/sailing/simulator/impl/PathGeneratorTracTrac.java index 152e3cf1995..edce093580c 100644 --- a/java/com.sap.sailing.simulator/src/com/sap/sailing/simulator/impl/PathGeneratorTracTrac.java +++ b/java/com.sap.sailing.simulator/src/com/sap/sailing/simulator/impl/PathGeneratorTracTrac.java @@ -25,7 +25,6 @@ import com.sap.sailing.domain.tracking.GPSFixTrack; import com.sap.sailing.domain.tracking.RacesHandle; import com.sap.sailing.domain.tracking.TrackedRace; import com.sap.sailing.domain.tracking.Wind; -import com.sap.sailing.domain.tracking.WindStore; import com.sap.sailing.domain.tracking.impl.EmptyWindStore; import com.sap.sailing.domain.tractracadapter.TracTracAdapterFactory; import com.sap.sailing.domain.tractracadapter.impl.TracTracAdapterFactoryImpl; @@ -39,7 +38,6 @@ public class PathGeneratorTracTrac extends PathGeneratorBase { private static final Logger LOGGER = Logger.getLogger("com.sap.sailing.simulator"); private static final long DEFAULT_TIMEOUT_MILLISECONDS = 60000; - private static final WindStore DEFAULT_WINDSTORE = EmptyWindStore.INSTANCE; private RacingEventServiceImpl service = null; private TracTracAdapterFactory tracTracAdapterFactory; @@ -55,7 +53,7 @@ public class PathGeneratorTracTrac extends PathGeneratorBase { public PathGeneratorTracTrac(SimulationParameters parameters) { this.parameters = parameters; - this.service = new RacingEventServiceImpl(); + this.service = new RacingEventServiceImpl(EmptyWindStore.INSTANCE); this.tracTracAdapterFactory = new TracTracAdapterFactoryImpl(); this.legIndex = 0; @@ -75,7 +73,7 @@ public class PathGeneratorTracTrac extends PathGeneratorBase { LOGGER.info("Calling service.addTracTracRace"); try { - this.raceHandle = SimulatorUtils.loadRace(service, tracTracAdapterFactory, raceURL, liveURI, storedURI, null, DEFAULT_WINDSTORE, DEFAULT_TIMEOUT_MILLISECONDS); + this.raceHandle = SimulatorUtils.loadRace(service, tracTracAdapterFactory, raceURL, liveURI, storedURI, null, DEFAULT_TIMEOUT_MILLISECONDS); } catch (Exception error) { LOGGER.severe(error.getMessage()); diff --git a/java/com.sap.sailing.simulator/src/com/sap/sailing/simulator/impl/SimulatorUtils.java b/java/com.sap.sailing.simulator/src/com/sap/sailing/simulator/impl/SimulatorUtils.java index d7fefff79f5..0a2f1ab47e5 100644 --- a/java/com.sap.sailing.simulator/src/com/sap/sailing/simulator/impl/SimulatorUtils.java +++ b/java/com.sap.sailing.simulator/src/com/sap/sailing/simulator/impl/SimulatorUtils.java @@ -25,7 +25,6 @@ import com.sap.sailing.domain.common.Position; import com.sap.sailing.domain.common.impl.Util.Pair; import com.sap.sailing.domain.racelog.RaceLogStore; import com.sap.sailing.domain.tracking.RacesHandle; -import com.sap.sailing.domain.tracking.WindStore; import com.sap.sailing.domain.tractracadapter.TracTracAdapterFactory; import com.sap.sailing.server.impl.RacingEventServiceImpl; import com.sap.sailing.simulator.Path; @@ -76,12 +75,12 @@ public class SimulatorUtils { } public static RacesHandle loadRace(RacingEventServiceImpl service, TracTracAdapterFactory tracTracAdapterFactory, URL paramURL, URI liveURI, - URI storedURI, RaceLogStore raceLogStore, WindStore windStore, long timeoutInMilliseconds) throws Exception { + URI storedURI, RaceLogStore raceLogStore, long timeoutInMilliseconds) throws Exception { //TODO: TracTrac Username / Password String tractracUsername = ""; String tractracPassword = ""; RacesHandle raceHandle = tracTracAdapterFactory.getOrCreateTracTracAdapter(service.getBaseDomainFactory()) - .addTracTracRace(service, paramURL, liveURI, storedURI, null, raceLogStore, windStore, + .addTracTracRace(service, paramURL, liveURI, storedURI, null, raceLogStore, timeoutInMilliseconds, tractracUsername, tractracPassword); return raceHandle; }