Moved central windstore into racingeventservice

also removed addRace and addEvent services from legacy adminapp
This commit is contained in:
Frederik Petersen committed 2013-11-20 09:02:55 +01:00
1 parent 4e9b9ee333
commit a988003d15
34 files changed
+113 -213

No files matched your search

-18
View File
@@ -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
@@ -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<RacesHandle>();
}
@@ -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",
@@ -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);
@@ -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<com.sap.sailing.domain.swisstimingadapter.RaceRecord> 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();
@@ -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;
@@ -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);
}
}
@@ -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);
}
@@ -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;
@@ -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);
@@ -247,7 +247,7 @@ public interface DomainFactory {
Pair<Iterable<com.sap.sailing.domain.base.Competitor>, 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 <code>tractracRace</code> which includes removing it from the race cache, from the
@@ -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;
@@ -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
@@ -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);
@@ -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;
}
@@ -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}
@@ -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 <code>null</code>, 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;
}
@@ -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) {
@@ -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()));
@@ -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);
@@ -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) {
@@ -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);
@@ -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;
@@ -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 {
@@ -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 {
@@ -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);
@@ -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<RaceDefinition> 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
@@ -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,
@@ -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) {
@@ -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<RaceDefinition> races = raceHandle.getRaces(); // wait for RaceDefinition to be completely wired in Regatta
@@ -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.");
@@ -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<RaceDefinition> races = raceHandle.getRaces();
@@ -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<RaceDefinition> races = raceHandle.getRaces();
@@ -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());
@@ -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;
}