begin adding RegattaLogStore

This commit is contained in:
Fredrik Teschke committed 2014-12-01 23:39:08 +01:00
1 parent 26cab55e3c
commit f2bbda6fd9
63 files changed
+604 -462

No files matched your search

@@ -17,6 +17,8 @@ import org.osgi.util.tracker.ServiceTracker;
import com.sap.sailing.domain.base.Regatta;
import com.sap.sailing.domain.common.RegattaIdentifier;
import com.sap.sailing.domain.persistence.MongoRaceLogStoreFactory;
import com.sap.sailing.domain.racelog.RaceLogStore;
import com.sap.sailing.domain.regattalog.RegattaLogStore;
import com.sap.sailing.domain.tracking.RaceTracker;
import com.sap.sailing.domain.tracking.TrackerManager;
import com.sap.sailing.domain.tractracadapter.RaceRecord;
@@ -77,17 +79,27 @@ public class TracTrac {
regattaForRaceRecord = regatta.getRegattaIdentifier();
}
}
getTracTracAdapter().addTracTracRace((TrackerManager)getService(), regattaForRaceRecord,
record.getParamURL(), /*effectiveLiveURI*/ null,
record.getStoredURI(), new URI(""),
new MillisecondsTimePoint(record.getTrackingStartTime().asMillis()),
new MillisecondsTimePoint(record.getTrackingEndTime().asMillis()),
MongoRaceLogStoreFactory.INSTANCE.getMongoRaceLogStore(getService().getMongoObjectFactory(), getService().getDomainObjectFactory()),
RaceTracker.TIMEOUT_FOR_RECEIVING_RACE_DEFINITION_IN_MILLISECONDS, /*simulateWithStartTimeNow*/false,
/*tracTracUsername*/"", /*tracTracPassword*/"",
record.getRaceStatus(), record.getRaceVisibility());
RaceLogStore raceLogStore = MongoRaceLogStoreFactory.INSTANCE.getMongoRaceLogStore(getService()
.getMongoObjectFactory(), getService().getDomainObjectFactory());
RegattaLogStore regattaLogStore = MongoRegattaLogStoreFactory.INSTANCE.getMongoRegattaLogStore(
getService().getMongoObjectFactory(), getService().getDomainObjectFactory());
getTracTracAdapter().addTracTracRace(
(TrackerManager) getService(),
regattaForRaceRecord,
record.getParamURL(), /* effectiveLiveURI */
null,
record.getStoredURI(),
new URI(""),
new MillisecondsTimePoint(record.getTrackingStartTime().asMillis()),
new MillisecondsTimePoint(record.getTrackingEndTime().asMillis()),
raceLogStore, regattaLogStore,
RaceTracker.TIMEOUT_FOR_RECEIVING_RACE_DEFINITION_IN_MILLISECONDS, /* simulateWithStartTimeNow */
false,
/* tracTracUsername */"", /* tracTracPassword */"", record.getRaceStatus(),
record.getRaceVisibility());
} else {
logger.info("Ignoring race " + record.getName() + " because it is in status " + record.getRaceStatus() + " and visibility " + record.getRaceVisibility());
logger.info("Ignoring race " + record.getName() + " because it is in status "
+ record.getRaceStatus() + " and visibility " + record.getRaceVisibility());
}
}
}
@@ -145,6 +145,7 @@ import com.sap.sailing.domain.racelog.RaceLogIdentifier;
import com.sap.sailing.domain.racelog.RaceLogStore;
import com.sap.sailing.domain.racelogtracking.DeviceIdentifier;
import com.sap.sailing.domain.racelogtracking.impl.PlaceHolderDeviceIdentifierSerializationHandler;
import com.sap.sailing.domain.regattalog.RegattaLogStore;
import com.sap.sailing.domain.tracking.TrackedRegattaRegistry;
import com.sap.sailing.domain.tracking.Wind;
import com.sap.sailing.domain.tracking.WindTrack;
@@ -356,7 +357,8 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
ThresholdBasedResultDiscardingRule resultDiscardingRule = loadResultDiscardingRule(dbLeaderboard, FieldNames.LEADERBOARD_DISCARDING_THRESHOLDS);
String regattaName = (String) dbLeaderboard.get(FieldNames.REGATTA_NAME.name());
if (groupForMetaLeaderboard != null) {
result = new LeaderboardGroupMetaLeaderboard(groupForMetaLeaderboard, loadScoringScheme(dbLeaderboard), resultDiscardingRule);
result = new LeaderboardGroupMetaLeaderboard(groupForMetaLeaderboard,
loadScoringScheme(dbLeaderboard), resultDiscardingRule, getRegattaLogStore());
groupForMetaLeaderboard.setOverallLeaderboard(result);
} else if (regattaName == null) {
result = loadFlexibleLeaderboard(dbLeaderboard, resultDiscardingRule);
@@ -463,6 +465,16 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
}
return result;
}
private RaceLogStore getRaceLogStore() {
return MongoRaceLogStoreFactory.INSTANCE.getMongoRaceLogStore(
new MongoObjectFactoryImpl(database, serviceFinderFactory), this);
}
private RegattaLogStore getRegattaLogStore() {
return MongoRegattaLogStoreFactory.INSTANCE.getMongoRegattaLogStore(
new MongoObjectFactoryImpl(database, serviceFinderFactory), this);
}
private FlexibleLeaderboard loadFlexibleLeaderboard(DBObject dbLeaderboard,
ThresholdBasedResultDiscardingRule resultDiscardingRule) {
@@ -475,8 +487,6 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
result = null;
} else {
final ScoringScheme scoringScheme = loadScoringScheme(dbLeaderboard);
RaceLogStore raceLogStore = MongoRaceLogStoreFactory.INSTANCE.getMongoRaceLogStore(
new MongoObjectFactoryImpl(database), this);
Serializable courseAreaId = (Serializable) dbLeaderboard.get(FieldNames.COURSE_AREA_ID.name());
CourseArea courseArea = null;
@@ -485,8 +495,9 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
courseArea = baseDomainFactory.getExistingCourseAreaById(courseAreaUuid);
}
result = new FlexibleLeaderboardImpl(raceLogStore, (String) dbLeaderboard.get(FieldNames.LEADERBOARD_NAME
.name()), resultDiscardingRule, scoringScheme, courseArea);
result = new FlexibleLeaderboardImpl(getRaceLogStore(), getRegattaLogStore(),
(String) dbLeaderboard.get(FieldNames.LEADERBOARD_NAME.name()),
resultDiscardingRule, scoringScheme, courseArea);
// For a FlexibleLeaderboard, there should be only the default fleet for any race column
for (Object dbRaceColumnAsObject : dbRaceColumns) {
BasicDBObject dbRaceColumn = (BasicDBObject) dbRaceColumnAsObject;
@@ -1086,9 +1097,6 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
}
BasicDBList dbSeries = (BasicDBList) dbRegatta.get(FieldNames.REGATTA_SERIES.name());
Iterable<Series> series = loadSeries(dbSeries, trackedRegattaRegistry);
RaceLogStore raceLogStore = MongoRaceLogStoreFactory.INSTANCE.getMongoRaceLogStore(
new MongoObjectFactoryImpl(database, serviceFinderFactory),
this);
Serializable courseAreaId = (Serializable) dbRegatta.get(FieldNames.COURSE_AREA_ID.name());
CourseArea courseArea = null;
if (courseAreaId != null) {
@@ -1105,7 +1113,7 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
}
}
Boolean useStartTimeInference = (Boolean) dbRegatta.get(FieldNames.REGATTA_USE_START_TIME_INFERENCE.name());
result = new RegattaImpl(raceLogStore, name, boatClass, series, /* persistent */true,
result = new RegattaImpl(getRaceLogStore(), getRegattaLogStore(), name, boatClass, series, /* persistent */true,
loadScoringScheme(dbRegatta), id, courseArea, useStartTimeInference == null ? true
: useStartTimeInference);
result.setRegattaConfiguration(configuration);
@@ -28,6 +28,7 @@ import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
import com.sap.sailing.domain.racelog.tracking.test.mock.SmartphoneImeiIdentifier;
import com.sap.sailing.domain.racelogtracking.DeviceIdentifier;
import com.sap.sailing.domain.racelogtracking.test.AbstractGPSFixStoreTest;
import com.sap.sailing.domain.regattalog.impl.EmptyRegattaLogStore;
import com.sap.sailing.domain.tracking.GPSFixMoving;
import com.sap.sailing.domain.tracking.TrackedRegatta;
import com.sap.sailing.domain.tracking.impl.AbstractRaceChangeListener;
@@ -68,7 +69,9 @@ public class TrackedRaceLoadsFixesTest extends AbstractGPSFixStoreTest {
store.storeFix(device, createFix(i+1000, 10, 20, 30, 40));
}
TrackedRegatta regatta = new DynamicTrackedRegattaImpl(new RegattaImpl(EmptyRaceLogStore.INSTANCE, RegattaImpl.getDefaultName("regatta", boatClass.getName()), boatClass, null, null, "a", null));
TrackedRegatta regatta = new DynamicTrackedRegattaImpl(new RegattaImpl(EmptyRaceLogStore.INSTANCE,
EmptyRegattaLogStore.INSTANCE, RegattaImpl.getDefaultName("regatta", boatClass.getName()),
boatClass, null, null, "a", null));
DynamicTrackedRaceImpl trackedRace = new DynamicTrackedRaceImpl(regatta, race, Collections.<Sideline>emptyList(),
EmptyWindStore.INSTANCE, store, 0, 0, 0);
@@ -110,7 +113,9 @@ public class TrackedRaceLoadsFixesTest extends AbstractGPSFixStoreTest {
store.storeFix(device, createFix(i, 10, 20, 30, 40));
}
TrackedRegatta regatta = new DynamicTrackedRegattaImpl(new RegattaImpl(EmptyRaceLogStore.INSTANCE, RegattaImpl.getDefaultName("regatta", boatClass.getName()), boatClass, null, null, "a", null));
TrackedRegatta regatta = new DynamicTrackedRegattaImpl(new RegattaImpl(EmptyRaceLogStore.INSTANCE,
EmptyRegattaLogStore.INSTANCE, RegattaImpl.getDefaultName("regatta", boatClass.getName()),
boatClass, null, null, "a", null));
DynamicTrackedRaceImpl trackedRace = new DynamicTrackedRaceImpl(regatta, race, Collections.<Sideline>emptyList(),
EmptyWindStore.INSTANCE, store, 0, 0, 0);
@@ -2,7 +2,12 @@ package com.sap.sailing.domain.abstractlog.regatta;
import com.sap.sailing.domain.abstractlog.AbstractLog;
import com.sap.sse.common.WithID;
/**
* This log gathers information for regattas. {@link FlexibleLeaderboard}s are considered
* workarounds for regattas in special cases. To expose a uniform interface, every {@link Leaderboard}
* therefore can be asked for its {@link Leaderboard#getRegattaLog RegattaLog}. A {@link RegattaLeaderboard}
* uses the log supplied by its {@code Regatta}, whereas a {@link FlexibleLeaderboard} manages the log itself.
*/
public interface RegattaLog extends AbstractLog<RegattaLogEvent, RegattaLogEventVisitor>, WithID {
}
@@ -17,6 +17,7 @@ import com.sap.sailing.domain.base.Waypoint;
import com.sap.sailing.domain.base.impl.RegattaImpl;
import com.sap.sailing.domain.common.ScoringSchemeType;
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
import com.sap.sailing.domain.regattalog.impl.EmptyRegattaLogStore;
import com.sap.sailing.domain.swisstimingadapter.Competitor;
import com.sap.sailing.domain.swisstimingadapter.Course;
import com.sap.sailing.domain.swisstimingadapter.DomainFactory;
@@ -57,7 +58,8 @@ public class SimpleDomainFactoryTest {
DomainFactory domainFactory = DomainFactory.INSTANCE;
final String raceID = "SAX920103";
RaceDefinition raceDefinition = domainFactory.createRaceDefinition(domainFactory.getOrCreateDefaultRegatta(
EmptyRaceLogStore.INSTANCE, raceID, null /* boat class */, new RacingEventServiceImpl()), new Race() {
EmptyRaceLogStore.INSTANCE, EmptyRegattaLogStore.INSTANCE, raceID,
null /* boat class */, new RacingEventServiceImpl()), new Race() {
@Override
public String getDescription() {
return null;
@@ -106,7 +108,8 @@ public class SimpleDomainFactoryTest {
@Test
public void testCourseConfigForMark() throws PatchFailedException {
DomainFactory domainFactory = DomainFactory.INSTANCE;
Regatta regatta = new RegattaImpl(EmptyRaceLogStore.INSTANCE, "TestEvent", /* boatClass */ null, new RacingEventServiceImpl(),
Regatta regatta = new RegattaImpl(EmptyRaceLogStore.INSTANCE, EmptyRegattaLogStore.INSTANCE, "TestEvent",
/* boatClass */ null, new RacingEventServiceImpl(),
com.sap.sailing.domain.base.DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), "123", null);
Race race = new RaceImpl("1234", "R1", "Race 1234");
Iterable<Competitor> competitors = Collections.emptyList();
@@ -131,7 +134,8 @@ public class SimpleDomainFactoryTest {
@Test
public void testCourseConfigForGate() throws PatchFailedException {
DomainFactory domainFactory = DomainFactory.INSTANCE;
Regatta regatta = new RegattaImpl(EmptyRaceLogStore.INSTANCE, "TestEvent", /* boatClass */ null, new RacingEventServiceImpl(),
Regatta regatta = new RegattaImpl(EmptyRaceLogStore.INSTANCE, EmptyRegattaLogStore.INSTANCE,
"TestEvent", /* boatClass */ null, new RacingEventServiceImpl(),
com.sap.sailing.domain.base.DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), "123", null);
Race race = new RaceImpl("1234", "R1", "Race 1234");
Iterable<Competitor> competitors = Collections.emptyList();
@@ -11,6 +11,7 @@ import com.sap.sailing.domain.base.RaceDefinition;
import com.sap.sailing.domain.base.Regatta;
import com.sap.sailing.domain.base.Waypoint;
import com.sap.sailing.domain.racelog.RaceLogStore;
import com.sap.sailing.domain.regattalog.RegattaLogStore;
import com.sap.sailing.domain.swisstimingadapter.impl.DomainFactoryImpl;
import com.sap.sailing.domain.tracking.GPSFixMoving;
import com.sap.sailing.domain.tracking.MarkPassing;
@@ -30,7 +31,7 @@ public interface DomainFactory {
com.sap.sailing.domain.base.DomainFactory getBaseDomainFactory();
Regatta getOrCreateDefaultRegatta(RaceLogStore raceLogStore, String raceID, BoatClass boatClass, TrackedRegattaRegistry trackedRegattaRegistry);
Regatta getOrCreateDefaultRegatta(RaceLogStore raceLogStore, RegattaLogStore regattaLogStore, String raceID, BoatClass boatClass, TrackedRegattaRegistry trackedRegattaRegistry);
Nationality getOrCreateNationality(String threeLetterIOCCode);
@@ -58,9 +59,10 @@ public interface DomainFactory {
RaceType getRaceTypeFromRaceID(String raceID);
RaceTrackingConnectivityParameters createTrackingConnectivityParameters(String hostname, int port, String raceID, String raceName,
String raceDescription, BoatClass boatClass, StartList startList, long delayToLiveInMillis,
SwissTimingFactory swissTimingFactory, DomainFactory domainFactory, RaceLogStore raceLogStore);
RaceTrackingConnectivityParameters createTrackingConnectivityParameters(String hostname, int port, String raceID,
String raceName, String raceDescription, BoatClass boatClass, StartList startList,
long delayToLiveInMillis, SwissTimingFactory swissTimingFactory, DomainFactory domainFactory,
RaceLogStore raceLogStore, RegattaLogStore regattaLogStore);
ControlPoint getOrCreateControlPoint(Iterable<String> devices);
@@ -10,6 +10,7 @@ import javax.xml.bind.JAXBException;
import com.sap.sailing.domain.base.BoatClass;
import com.sap.sailing.domain.common.RegattaIdentifier;
import com.sap.sailing.domain.racelog.RaceLogStore;
import com.sap.sailing.domain.regattalog.RegattaLogStore;
import com.sap.sailing.domain.tracking.RaceHandle;
import com.sap.sailing.domain.tracking.TrackerManager;
import com.sap.sailing.xrr.resultimport.schema.RegattaResults;
@@ -24,10 +25,12 @@ public interface SwissTimingAdapter {
* created, with a single default series and a single default fleet. If a valid {@link RegattaIdentifier}
* is specified, a regatta lookup is performed with that identifier; if the regatta is found, it is used
* to add the races to. Otherwise, a default regatta as described above will be created and used.
* @param raceDescription TODO
* @param raceDescription
* TODO
*/
RaceHandle addSwissTimingRace(TrackerManager trackerManager, RegattaIdentifier regattaToAddTo, String raceID, String raceName, String raceDescription,
BoatClass boatClass, String hostname, int port, StartList startList, RaceLogStore logStore, long timeoutInMilliseconds)
RaceHandle addSwissTimingRace(TrackerManager trackerManager, RegattaIdentifier regattaToAddTo, String raceID,
String raceName, String raceDescription, BoatClass boatClass, String hostname, int port,
StartList startList, RaceLogStore logStore, RegattaLogStore regattaLogStore, long timeoutInMilliseconds)
throws InterruptedException, UnknownHostException, IOException, ParseException, Exception;
StartList readStartListForRace(String raceId, RegattaResults regattaResults);
@@ -8,6 +8,7 @@ import com.sap.sailing.domain.base.BoatClass;
import com.sap.sailing.domain.base.Regatta;
import com.sap.sailing.domain.racelog.RaceLogStore;
import com.sap.sailing.domain.racelog.tracking.GPSFixStore;
import com.sap.sailing.domain.regattalog.RegattaLogStore;
import com.sap.sailing.domain.swisstimingadapter.impl.SwissTimingFactoryImpl;
import com.sap.sailing.domain.tracking.RaceTracker;
import com.sap.sailing.domain.tracking.TrackedRegattaRegistry;
@@ -50,7 +51,8 @@ public interface SwissTimingFactory {
SwissTimingConfiguration createSwissTimingConfiguration(String name, String jsonURL, String hostname, int port);
SwissTimingRaceTracker createRaceTracker(String raceID, String raceName, String raceDescription, BoatClass boatClass, String hostname, int port,
StartList startList, long delayToLiveInMillis, RaceLogStore raceLogStore, WindStore windStore, GPSFixStore gpsFixStore,
StartList startList, long delayToLiveInMillis, RaceLogStore raceLogStore, RegattaLogStore regattaLogStore,
WindStore windStore, GPSFixStore gpsFixStore,
DomainFactory domainFactory, TrackedRegattaRegistry trackedRegattaRegistry) throws InterruptedException, UnknownHostException,
IOException, ParseException;
@@ -30,6 +30,7 @@ import com.sap.sailing.domain.base.impl.TeamImpl;
import com.sap.sailing.domain.common.PassingInstruction;
import com.sap.sailing.domain.common.ScoringSchemeType;
import com.sap.sailing.domain.racelog.RaceLogStore;
import com.sap.sailing.domain.regattalog.RegattaLogStore;
import com.sap.sailing.domain.swisstimingadapter.Course;
import com.sap.sailing.domain.swisstimingadapter.CrewMember;
import com.sap.sailing.domain.swisstimingadapter.DomainFactory;
@@ -91,7 +92,8 @@ public class DomainFactoryImpl implements DomainFactory {
}
@Override
public Regatta getOrCreateDefaultRegatta(RaceLogStore raceLogStore, String raceID, BoatClass boatClass, TrackedRegattaRegistry trackedRegattaRegistry) {
public Regatta getOrCreateDefaultRegatta(RaceLogStore raceLogStore, RegattaLogStore regattaLogStore,
String raceID, BoatClass boatClass, TrackedRegattaRegistry trackedRegattaRegistry) {
Regatta result = trackedRegattaRegistry.getRememberedRegattaForRace(raceID);
if (result == null) {
result = raceIDToRegattaCache.get(raceID);
@@ -99,7 +101,7 @@ public class DomainFactoryImpl implements DomainFactory {
if (result == null) {
BoatClass regattaBoatClass = boatClass != null ? boatClass : getRaceTypeFromRaceID(raceID).getBoatClass();
Calendar calendar = Calendar.getInstance();
result = new RegattaImpl(raceLogStore, RegattaImpl.getDefaultName(
result = new RegattaImpl(raceLogStore, regattaLogStore, RegattaImpl.getDefaultName(
"ST Regatta " + calendar.get(Calendar.YEAR) + " for race " + raceID, regattaBoatClass.getName()),
regattaBoatClass, trackedRegattaRegistry, getBaseDomainFactory().createScoringScheme(
ScoringSchemeType.LOW_POINT), raceID, null);
@@ -352,11 +354,13 @@ public class DomainFactoryImpl implements DomainFactory {
}
@Override
public RaceTrackingConnectivityParameters createTrackingConnectivityParameters(String hostname, int port, String raceID, String raceName,
String raceDescription, BoatClass boatClass, StartList startList, long delayToLiveInMillis,
SwissTimingFactory swissTimingFactory, DomainFactory domainFactory, RaceLogStore raceLogStore) {
return new SwissTimingTrackingConnectivityParameters(hostname, port, raceID, raceName, raceDescription, boatClass, startList, delayToLiveInMillis,
swissTimingFactory, domainFactory, raceLogStore);
public RaceTrackingConnectivityParameters createTrackingConnectivityParameters(String hostname, int port,
String raceID, String raceName, String raceDescription, BoatClass boatClass, StartList startList,
long delayToLiveInMillis, SwissTimingFactory swissTimingFactory, DomainFactory domainFactory,
RaceLogStore raceLogStore, RegattaLogStore regattaLogStore) {
return new SwissTimingTrackingConnectivityParameters(hostname, port, raceID, raceName, raceDescription,
boatClass, startList, delayToLiveInMillis, swissTimingFactory, domainFactory, raceLogStore,
regattaLogStore);
}
}
@@ -17,6 +17,7 @@ import com.sap.sailing.domain.base.BoatClass;
import com.sap.sailing.domain.base.DomainFactory;
import com.sap.sailing.domain.common.RegattaIdentifier;
import com.sap.sailing.domain.racelog.RaceLogStore;
import com.sap.sailing.domain.regattalog.RegattaLogStore;
import com.sap.sailing.domain.swisstimingadapter.Competitor;
import com.sap.sailing.domain.swisstimingadapter.CrewMember;
import com.sap.sailing.domain.swisstimingadapter.StartList;
@@ -66,13 +67,14 @@ public class SwissTimingAdapterImpl implements SwissTimingAdapter {
}
@Override
public RaceHandle addSwissTimingRace(TrackerManager trackerManager, RegattaIdentifier regattaToAddTo, String raceID, String raceName, String raceDescription,
BoatClass boatClass, String hostname, int port, StartList startList, RaceLogStore logStore, long timeoutInMilliseconds)
public RaceHandle addSwissTimingRace(TrackerManager trackerManager, RegattaIdentifier regattaToAddTo,
String raceID, String raceName, String raceDescription, BoatClass boatClass, String hostname, int port,
StartList startList, RaceLogStore raceLogStore, RegattaLogStore regattaLogStore, long timeoutInMilliseconds)
throws Exception {
return trackerManager.addRace(regattaToAddTo, swissTimingDomainFactory.createTrackingConnectivityParameters(hostname, port,
raceID, raceName, raceDescription, boatClass, startList, DEFAULT_SWISSTIMING_LIVE_DELAY_IN_MILLISECONDS, swissTimingFactory,
swissTimingDomainFactory, logStore),
timeoutInMilliseconds);
return trackerManager.addRace(regattaToAddTo, swissTimingDomainFactory.createTrackingConnectivityParameters(
hostname, port, raceID, raceName, raceDescription, boatClass, startList,
DEFAULT_SWISSTIMING_LIVE_DELAY_IN_MILLISECONDS, swissTimingFactory, swissTimingDomainFactory,
raceLogStore, regattaLogStore), timeoutInMilliseconds);
}
@Override
@@ -11,6 +11,7 @@ import com.sap.sailing.domain.base.BoatClass;
import com.sap.sailing.domain.base.Regatta;
import com.sap.sailing.domain.racelog.RaceLogStore;
import com.sap.sailing.domain.racelog.tracking.GPSFixStore;
import com.sap.sailing.domain.regattalog.RegattaLogStore;
import com.sap.sailing.domain.swisstimingadapter.DomainFactory;
import com.sap.sailing.domain.swisstimingadapter.Race;
import com.sap.sailing.domain.swisstimingadapter.SailMasterConnector;
@@ -87,11 +88,14 @@ public class SwissTimingFactoryImpl implements SwissTimingFactory {
}
@Override
public SwissTimingRaceTracker createRaceTracker(String raceID, String raceName, String raceDescription, BoatClass boatClass, String hostname, int port,
StartList startList, long delayToLiveInMillis, RaceLogStore raceLogStore, WindStore windStore, GPSFixStore gpsFixStore, DomainFactory domainFactory,
public SwissTimingRaceTracker createRaceTracker(String raceID, String raceName, String raceDescription,
BoatClass boatClass, String hostname, int port,
StartList startList, long delayToLiveInMillis, RaceLogStore raceLogStore, RegattaLogStore regattaLogStore,
WindStore windStore, GPSFixStore gpsFixStore, DomainFactory domainFactory,
TrackedRegattaRegistry trackedRegattaRegistry) throws InterruptedException,
UnknownHostException, IOException, ParseException {
return new SwissTimingRaceTrackerImpl(raceID, raceName, raceDescription, boatClass, hostname, port, startList, raceLogStore, windStore, gpsFixStore, domainFactory, this,
return new SwissTimingRaceTrackerImpl(raceID, raceName, raceDescription, boatClass, hostname, port, startList,
raceLogStore, regattaLogStore, windStore, gpsFixStore, domainFactory, this,
trackedRegattaRegistry, delayToLiveInMillis);
}
@@ -33,6 +33,7 @@ import com.sap.sailing.domain.common.impl.KnotSpeedWithBearingImpl;
import com.sap.sailing.domain.common.impl.WindSourceWithAdditionalID;
import com.sap.sailing.domain.racelog.RaceLogStore;
import com.sap.sailing.domain.racelog.tracking.GPSFixStore;
import com.sap.sailing.domain.regattalog.RegattaLogStore;
import com.sap.sailing.domain.swisstimingadapter.Course;
import com.sap.sailing.domain.swisstimingadapter.DomainFactory;
import com.sap.sailing.domain.swisstimingadapter.Fix;
@@ -51,8 +52,8 @@ import com.sap.sailing.domain.tracking.DynamicTrackedRace;
import com.sap.sailing.domain.tracking.DynamicTrackedRegatta;
import com.sap.sailing.domain.tracking.GPSFixMoving;
import com.sap.sailing.domain.tracking.MarkPassing;
import com.sap.sailing.domain.tracking.RaceTracker;
import com.sap.sailing.domain.tracking.RaceHandle;
import com.sap.sailing.domain.tracking.RaceTracker;
import com.sap.sailing.domain.tracking.TrackedRace;
import com.sap.sailing.domain.tracking.TrackedRaceStatus;
import com.sap.sailing.domain.tracking.TrackedRegattaRegistry;
@@ -104,11 +105,13 @@ public class SwissTimingRaceTrackerImpl extends AbstractRaceTrackerImpl implemen
*/
private final TMDMessageQueue tmdMessageQueue;
protected SwissTimingRaceTrackerImpl(String raceID, String raceName, String raceDescription, BoatClass boatClass, String hostname, int port, StartList startList, RaceLogStore raceLogStore,
protected SwissTimingRaceTrackerImpl(String raceID, String raceName, String raceDescription, BoatClass boatClass,
String hostname, int port, StartList startList, RaceLogStore raceLogStore, RegattaLogStore regattaLogStore,
WindStore windStore, GPSFixStore gpsFixStore, DomainFactory domainFactory, SwissTimingFactory factory,
TrackedRegattaRegistry trackedRegattaRegistry, long delayToLiveInMillis) throws InterruptedException,
UnknownHostException, IOException, ParseException {
this(domainFactory.getOrCreateDefaultRegatta(raceLogStore, raceID, boatClass, trackedRegattaRegistry), raceID, raceName,
this(domainFactory.getOrCreateDefaultRegatta(raceLogStore, regattaLogStore, raceID,
boatClass, trackedRegattaRegistry), raceID, raceName,
raceDescription, boatClass, hostname, port, startList, windStore, gpsFixStore, domainFactory, factory, trackedRegattaRegistry,
delayToLiveInMillis);
}
@@ -5,6 +5,7 @@ import com.sap.sailing.domain.base.BoatClass;
import com.sap.sailing.domain.base.Regatta;
import com.sap.sailing.domain.racelog.RaceLogStore;
import com.sap.sailing.domain.racelog.tracking.GPSFixStore;
import com.sap.sailing.domain.regattalog.RegattaLogStore;
import com.sap.sailing.domain.swisstimingadapter.DomainFactory;
import com.sap.sailing.domain.swisstimingadapter.StartList;
import com.sap.sailing.domain.swisstimingadapter.SwissTimingFactory;
@@ -23,12 +24,13 @@ public class SwissTimingTrackingConnectivityParameters implements RaceTrackingCo
private final SwissTimingFactory swissTimingFactory;
private final DomainFactory domainFactory;
private final RaceLogStore raceLogStore;
private final RegattaLogStore regattaLogStore;
private final long delayToLiveInMillis;
private final StartList startList;
public SwissTimingTrackingConnectivityParameters(String hostname, int port, String raceID, String raceName, String raceDescription, BoatClass boatClass,
StartList startList, long delayToLiveInMillis, SwissTimingFactory swissTimingFactory, DomainFactory domainFactory,
RaceLogStore raceLogStore) {
public SwissTimingTrackingConnectivityParameters(String hostname, int port, String raceID, String raceName,
String raceDescription, BoatClass boatClass, StartList startList, long delayToLiveInMillis,
SwissTimingFactory swissTimingFactory, DomainFactory domainFactory, RaceLogStore raceLogStore, RegattaLogStore regattaLogStore) {
super();
this.hostname = hostname;
this.port = port;
@@ -41,11 +43,14 @@ public class SwissTimingTrackingConnectivityParameters implements RaceTrackingCo
this.swissTimingFactory = swissTimingFactory;
this.domainFactory = domainFactory;
this.raceLogStore = raceLogStore;
this.regattaLogStore = regattaLogStore;
}
@Override
public RaceTracker createRaceTracker(TrackedRegattaRegistry trackedRegattaRegistry, WindStore windStore, GPSFixStore gpsFixStore) throws Exception {
return swissTimingFactory.createRaceTracker(raceID, raceName, raceDescription, boatClass, hostname, port, startList, delayToLiveInMillis, raceLogStore, windStore, gpsFixStore, domainFactory,
public RaceTracker createRaceTracker(TrackedRegattaRegistry trackedRegattaRegistry, WindStore windStore,
GPSFixStore gpsFixStore) throws Exception {
return swissTimingFactory.createRaceTracker(raceID, raceName, raceDescription, boatClass, hostname, port,
startList, delayToLiveInMillis, raceLogStore, regattaLogStore, windStore, gpsFixStore, domainFactory,
trackedRegattaRegistry);
}
@@ -35,6 +35,7 @@ import com.sap.sailing.domain.common.impl.KnotSpeedWithBearingImpl;
import com.sap.sailing.domain.common.impl.WindSourceWithAdditionalID;
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
import com.sap.sailing.domain.racelog.tracking.EmptyGPSFixStore;
import com.sap.sailing.domain.regattalog.impl.EmptyRegattaLogStore;
import com.sap.sailing.domain.swisstimingadapter.DomainFactory;
import com.sap.sailing.domain.swisstimingreplayadapter.CompetitorStatus;
import com.sap.sailing.domain.swisstimingreplayadapter.SwissTimingReplayListener;
@@ -304,7 +305,8 @@ public class SwissTimingReplayToDomainAdapter extends SwissTimingReplayAdapter {
}
private void createRace() {
final Regatta myRegatta = regatta != null ? regatta : domainFactory.getOrCreateDefaultRegatta(EmptyRaceLogStore.INSTANCE,
final Regatta myRegatta = regatta != null ? regatta : domainFactory.getOrCreateDefaultRegatta(
EmptyRaceLogStore.INSTANCE, EmptyRegattaLogStore.INSTANCE,
currentRaceID, domainFactory.getRaceTypeFromRaceID(currentRaceID).getBoatClass(), trackedRegattaRegistry);
RaceDefinition race = domainFactory.createRaceDefinition(myRegatta,
currentRaceID, competitorsPerRaceID.get(currentRaceID), currentCourseDefinition);
@@ -36,6 +36,7 @@ import com.sap.sailing.domain.common.BoatClassMasterdata;
import com.sap.sailing.domain.leaderboard.impl.LowPoint;
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
import com.sap.sailing.domain.racelog.tracking.EmptyGPSFixStore;
import com.sap.sailing.domain.regattalog.impl.EmptyRegattaLogStore;
import com.sap.sailing.domain.tracking.TrackedRegatta;
import com.sap.sailing.domain.tracking.impl.DynamicTrackedRaceImpl;
import com.sap.sailing.domain.tracking.impl.EmptyWindStore;
@@ -71,7 +72,7 @@ public class CourseUpdateDuringNonAtomicSerializationTest implements Serializabl
addCalls = new HashMap<>();
removeCalls = new HashMap<>();
course = new CourseImpl("Test Course", waypoints);
Regatta regatta = new RegattaImpl(EmptyRaceLogStore.INSTANCE, "Test Regatta",
Regatta regatta = new RegattaImpl(EmptyRaceLogStore.INSTANCE, EmptyRegattaLogStore.INSTANCE, "Test Regatta",
new BoatClassImpl("505", BoatClassMasterdata._5O5), /* trackedRegattaRegistry */ null,
new LowPoint(), UUID.randomUUID(), new CourseAreaImpl("Alpha", UUID.randomUUID()));
TrackedRegatta trackedRegatta = new TrackedRegattaImpl(regatta);
@@ -32,6 +32,7 @@ import com.sap.sailing.domain.base.impl.CourseImpl;
import com.sap.sailing.domain.base.impl.MarkImpl;
import com.sap.sailing.domain.base.impl.WaypointImpl;
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
import com.sap.sailing.domain.regattalog.impl.EmptyRegattaLogStore;
import com.sap.sailing.domain.tracking.DynamicRaceDefinitionSet;
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
import com.sap.sailing.domain.tracking.DynamicTrackedRegatta;
@@ -75,7 +76,8 @@ public class CourseUpdateTest extends AbstractTracTracLiveTest {
public void setUp() throws MalformedURLException, IOException, InterruptedException, URISyntaxException, SubscriberInitializationException, ParseException, CreateModelException {
super.setUp();
domainFactory = new DomainFactoryImpl(new com.sap.sailing.domain.base.impl.DomainFactoryImpl());
domainRegatta = domainFactory.getOrCreateDefaultRegatta(EmptyRaceLogStore.INSTANCE, getTracTracRace(), /* trackedRegattaRegistry */ null);
domainRegatta = domainFactory.getOrCreateDefaultRegatta(EmptyRaceLogStore.INSTANCE, EmptyRegattaLogStore.INSTANCE,
getTracTracRace(), /* trackedRegattaRegistry */ null);
trackedRegatta = new DynamicTrackedRegattaImpl(domainRegatta);
IRace tractracRace = getTracTracEvent().getRaces().iterator().next();
ArrayList<Receiver> receivers = new ArrayList<Receiver>();
@@ -24,8 +24,8 @@ import org.junit.Test;
import com.sap.sailing.domain.abstractlog.impl.LogEventAuthorImpl;
import com.sap.sailing.domain.abstractlog.race.RaceLog;
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.AdditionalScoringInformationFinder;
import com.sap.sailing.domain.abstractlog.race.scoring.RaceLogAdditionalScoringInformationEvent;
import com.sap.sailing.domain.abstractlog.race.scoring.AdditionalScoringInformationType;
import com.sap.sailing.domain.abstractlog.race.scoring.RaceLogAdditionalScoringInformationEvent;
import com.sap.sailing.domain.abstractlog.race.scoring.impl.RaceLogAdditionalScoringInformationEventImpl;
import com.sap.sailing.domain.abstractlog.race.state.RaceState;
import com.sap.sailing.domain.abstractlog.race.state.impl.RaceStateImpl;
@@ -65,6 +65,7 @@ import com.sap.sailing.domain.leaderboard.impl.RegattaLeaderboardImpl;
import com.sap.sailing.domain.leaderboard.impl.ThresholdBasedResultDiscardingRuleImpl;
import com.sap.sailing.domain.leaderboard.meta.LeaderboardGroupMetaLeaderboard;
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
import com.sap.sailing.domain.regattalog.impl.EmptyRegattaLogStore;
import com.sap.sailing.domain.test.mock.MockedTrackedRaceWithStartTimeAndRanks;
import com.sap.sailing.domain.tracking.MarkPassing;
import com.sap.sailing.domain.tracking.TrackedRace;
@@ -812,7 +813,10 @@ public class LeaderboardScoringAndRankingTest extends AbstractLeaderboardTest {
@Test
public void testAdditionalScoreInformationLeadsToChangedScoreForOneColumn() throws NoWindException {
TrackedRegattaRegistry trackedRegattaRegistry = mock(TrackedRegattaRegistry.class);
Regatta dummyRegatta = new RegattaImpl(EmptyRaceLogStore.INSTANCE , "Dummy", new BoatClassImpl("Extreme40", false), trackedRegattaRegistry, new HighPointFirstGets10Or8AndLastBreaksTie(), "578876345345", new CourseAreaImpl("Humba", UUID.randomUUID()));
Regatta dummyRegatta = new RegattaImpl(EmptyRaceLogStore.INSTANCE, EmptyRegattaLogStore.INSTANCE, "Dummy",
new BoatClassImpl("Extreme40", false), trackedRegattaRegistry,
new HighPointFirstGets10Or8AndLastBreaksTie(), "578876345345",
new CourseAreaImpl("Humba", UUID.randomUUID()));
trackedRegattaRegistry.getOrCreateTrackedRegatta(dummyRegatta);
Competitor[] competitors = createCompetitors(10).toArray(new Competitor[0]);
TimePoint now = MillisecondsTimePoint.now();
@@ -912,7 +916,9 @@ public class LeaderboardScoringAndRankingTest extends AbstractLeaderboardTest {
LeaderboardGroup leaderboardGroup = new LeaderboardGroupImpl("ESS", "ESS", /* displayName */ null,
/* displayGroupsInReverseOrder */ false, Arrays.asList(new Leaderboard[] { leaderboardHighPoint10LastBreaksTie }));
LeaderboardGroupMetaLeaderboard leaderboardHighPointESSOverall = new LeaderboardGroupMetaLeaderboard(
leaderboardGroup, new HighPointExtremeSailingSeriesOverall(), new ThresholdBasedResultDiscardingRuleImpl(/* discarding thresholds */ new int[0]));
leaderboardGroup, new HighPointExtremeSailingSeriesOverall(),
new ThresholdBasedResultDiscardingRuleImpl(/* discarding thresholds */ new int[0]),
EmptyRegattaLogStore.INSTANCE);
assertEquals(16, leaderboardHighPointESSOverall.getCompetitorsFromBestToWorst(later).size());
assertEquals(new Double(10), leaderboardHighPointESSOverall.getTotalPoints(competitors[0], later));
assertEquals(new Double(9), leaderboardHighPointESSOverall.getTotalPoints(competitors[1], later));
@@ -969,7 +975,7 @@ public class LeaderboardScoringAndRankingTest extends AbstractLeaderboardTest {
LeaderboardGroup leaderboardGroup = new LeaderboardGroupImpl("Leaderboard Group", "Leaderboard Group", /* displayName */ null, false, Arrays.asList(leaderboard1,
leaderboard2, leaderboard3));
leaderboardGroup.setOverallLeaderboard(new LeaderboardGroupMetaLeaderboard(leaderboardGroup, new HighPointExtremeSailingSeriesOverall(),
new ThresholdBasedResultDiscardingRuleImpl(new int[0])));
new ThresholdBasedResultDiscardingRuleImpl(new int[0]), EmptyRegattaLogStore.INSTANCE));
leaderboardGroup.getOverallLeaderboard().setSuppressed(c[1], true);
leaderboardGroup.getOverallLeaderboard().setSuppressed(c[2], true);
List<Competitor> rankedCompetitors = leaderboardGroup.getOverallLeaderboard().getCompetitorsFromBestToWorst(later);
@@ -1090,7 +1096,7 @@ public class LeaderboardScoringAndRankingTest extends AbstractLeaderboardTest {
LeaderboardGroup leaderboardGroup = new LeaderboardGroupImpl("Leaderboard Group ESS Overall", "Leaderboard Group", /* displayName */ null,
false, Arrays.asList(leaderboard1, leaderboard2));
leaderboardGroup.setOverallLeaderboard(new LeaderboardGroupMetaLeaderboard(leaderboardGroup, new HighPointExtremeSailingSeriesOverall(),
new ThresholdBasedResultDiscardingRuleImpl(new int[0])));
new ThresholdBasedResultDiscardingRuleImpl(new int[0]), EmptyRegattaLogStore.INSTANCE));
leaderboardGroup.getOverallLeaderboard().setSuppressed(c[c.length-1], true);
// ranking must match the regatta ranks - as for 11 competitors the ranking is random
// in the faulty implementation we test with many iterations to make sure that
@@ -16,6 +16,7 @@ import org.junit.Test;
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
import com.sap.sailing.domain.racelog.tracking.EmptyGPSFixStore;
import com.sap.sailing.domain.regattalog.impl.EmptyRegattaLogStore;
import com.sap.sailing.domain.tracking.impl.EmptyWindStore;
import com.sap.sailing.domain.tractracadapter.DomainFactory;
import com.sap.sailing.domain.tractracadapter.TracTracConnectionConstants;
@@ -53,29 +54,48 @@ public class MultipleClassesInRegattaTest {
kiwotest1 = domainFactory
.createRaceTracker(
new URL(
httpAndHost+"/events/event_20110505_SailingTea/clientparams.php?event=event_20110505_SailingTea&race=cce678c8-97e6-11e0-9aed-406186cbf87c"),
httpAndHost
+ "/events/event_20110505_SailingTea/clientparams.php?event=event_20110505_SailingTea&race=cce678c8-97e6-11e0-9aed-406186cbf87c"),
new URI(liveURI), new URI(storedURI), new URI(courseDesignUpdateURI),
/* startOfTracking */ null, /* endOfTracking */ null, /* delayToLiveInMillis */ 0l, /* simulateWithStartTimeNow */ false,
EmptyRaceLogStore.INSTANCE, EmptyWindStore.INSTANCE, EmptyGPSFixStore.INSTANCE, tracTracUsername, tracTracPassword, TracTracConnectionConstants.ONLINE_STATUS, TracTracConnectionConstants.ONLINE_VISIBILITY, new DummyTrackedRegattaRegistry());
/* startOfTracking */null, /* endOfTracking */null, /* delayToLiveInMillis */0l, /* simulateWithStartTimeNow */
false, EmptyRaceLogStore.INSTANCE, EmptyRegattaLogStore.INSTANCE, EmptyWindStore.INSTANCE,
EmptyGPSFixStore.INSTANCE, tracTracUsername, tracTracPassword,
TracTracConnectionConstants.ONLINE_STATUS, TracTracConnectionConstants.ONLINE_VISIBILITY,
new DummyTrackedRegattaRegistry());
kiwotest2 = domainFactory
.createRaceTracker(
new URL(
httpAndHost+"/events/event_20110505_SailingTea/clientparams.php?event=event_20110505_SailingTea&race=11290bd6-97e7-11e0-9aed-406186cbf87c"),
httpAndHost
+ "/events/event_20110505_SailingTea/clientparams.php?event=event_20110505_SailingTea&race=11290bd6-97e7-11e0-9aed-406186cbf87c"),
new URI(liveURI), new URI(storedURI), new URI(courseDesignUpdateURI),
/* startOfTracking */ null, /* endOfTracking */ null, /* delayToLiveInMillis */ 0l, /* simulateWithStartTimeNow */ false, EmptyRaceLogStore.INSTANCE, EmptyWindStore.INSTANCE, EmptyGPSFixStore.INSTANCE, tracTracUsername, tracTracPassword, TracTracConnectionConstants.ONLINE_STATUS, TracTracConnectionConstants.ONLINE_VISIBILITY, new DummyTrackedRegattaRegistry());
/* startOfTracking */null, /* endOfTracking */null, /* delayToLiveInMillis */0l, /* simulateWithStartTimeNow */
false, EmptyRaceLogStore.INSTANCE, EmptyRegattaLogStore.INSTANCE, EmptyWindStore.INSTANCE,
EmptyGPSFixStore.INSTANCE, tracTracUsername, tracTracPassword,
TracTracConnectionConstants.ONLINE_STATUS, TracTracConnectionConstants.ONLINE_VISIBILITY,
new DummyTrackedRegattaRegistry());
kiwotest3 = domainFactory
.createRaceTracker(
new URL(
httpAndHost+"/events/event_20110505_SailingTea/clientparams.php?event=event_20110505_SailingTea&race=39635b24-97e7-11e0-9aed-406186cbf87c"),
httpAndHost
+ "/events/event_20110505_SailingTea/clientparams.php?event=event_20110505_SailingTea&race=39635b24-97e7-11e0-9aed-406186cbf87c"),
new URI(liveURI), new URI(storedURI), new URI(courseDesignUpdateURI),
/* startOfTracking */ null, /* endOfTracking */ null, /* delayToLiveInMillis */ 0l, /* simulateWithStartTimeNow */ false, EmptyRaceLogStore.INSTANCE, EmptyWindStore.INSTANCE, EmptyGPSFixStore.INSTANCE, tracTracUsername, tracTracPassword, TracTracConnectionConstants.ONLINE_STATUS, TracTracConnectionConstants.ONLINE_VISIBILITY, new DummyTrackedRegattaRegistry());
/* startOfTracking */null, /* endOfTracking */null, /* delayToLiveInMillis */0l, /* simulateWithStartTimeNow */
false, EmptyRaceLogStore.INSTANCE, EmptyRegattaLogStore.INSTANCE, EmptyWindStore.INSTANCE,
EmptyGPSFixStore.INSTANCE, tracTracUsername, tracTracPassword,
TracTracConnectionConstants.ONLINE_STATUS, TracTracConnectionConstants.ONLINE_VISIBILITY,
new DummyTrackedRegattaRegistry());
weym470may112014_2 = domainFactory
.createRaceTracker(
new URL(
httpAndHost+"/events/event_20110505_SailingTea/clientparams.php?event=event_20110505_SailingTea&race=04498426-7dfd-11e0-8236-406186cbf87c"),
httpAndHost
+ "/events/event_20110505_SailingTea/clientparams.php?event=event_20110505_SailingTea&race=04498426-7dfd-11e0-8236-406186cbf87c"),
new URI(liveURI), new URI(storedURI), new URI(courseDesignUpdateURI),
/* startOfTracking */ null, /* endOfTracking */ null, /* delayToLiveInMillis */ 0l, /* simulateWithStartTimeNow */ false, EmptyRaceLogStore.INSTANCE, EmptyWindStore.INSTANCE, EmptyGPSFixStore.INSTANCE, tracTracUsername, tracTracPassword, TracTracConnectionConstants.ONLINE_STATUS, TracTracConnectionConstants.ONLINE_VISIBILITY, new DummyTrackedRegattaRegistry());
/* startOfTracking */null, /* endOfTracking */null, /* delayToLiveInMillis */0l, /* simulateWithStartTimeNow */
false, EmptyRaceLogStore.INSTANCE, EmptyRegattaLogStore.INSTANCE, EmptyWindStore.INSTANCE,
EmptyGPSFixStore.INSTANCE, tracTracUsername, tracTracPassword,
TracTracConnectionConstants.ONLINE_STATUS, TracTracConnectionConstants.ONLINE_VISIBILITY,
new DummyTrackedRegattaRegistry());
assertEquals("STG", kiwotest1.getRegatta().getBoatClass().getName());
assertEquals("505", kiwotest2.getRegatta().getBoatClass().getName());
assertEquals("49er", kiwotest3.getRegatta().getBoatClass().getName());
@@ -36,6 +36,7 @@ import com.sap.sailing.domain.leaderboard.impl.HighPoint;
import com.sap.sailing.domain.leaderboard.impl.LeaderboardGroupImpl;
import com.sap.sailing.domain.leaderboard.impl.ThresholdBasedResultDiscardingRuleImpl;
import com.sap.sailing.domain.leaderboard.meta.LeaderboardGroupMetaLeaderboard;
import com.sap.sailing.domain.regattalog.impl.EmptyRegattaLogStore;
import com.sap.sse.common.Duration;
import com.sap.sse.common.Util;
import com.sap.sse.common.impl.MillisecondsTimePoint;
@@ -119,7 +120,9 @@ public class OfflineSerializationTest extends AbstractSerializationTest {
public void testSerializingOverallLeaderboardWithFactorOnColumn() throws ClassNotFoundException, IOException {
Leaderboard leaderboard = new FlexibleLeaderboardImpl("Test Leaderboard", new ThresholdBasedResultDiscardingRuleImpl(new int[] { 3, 5 }), new HighPoint(), new CourseAreaImpl("Alpha", UUID.randomUUID()));
LeaderboardGroup leaderboardGroup = new LeaderboardGroupImpl("LeaderboardGroup", "Test Leaderboard Group", /* displayName */ null, /* displayGroupsInReverseOrder */ false, Arrays.asList(new Leaderboard[] { leaderboard }));
final LeaderboardGroupMetaLeaderboard overallLeaderboard = new LeaderboardGroupMetaLeaderboard(leaderboardGroup, new HighPoint(), new ThresholdBasedResultDiscardingRuleImpl(new int[0]));
final LeaderboardGroupMetaLeaderboard overallLeaderboard =
new LeaderboardGroupMetaLeaderboard(leaderboardGroup, new HighPoint(),
new ThresholdBasedResultDiscardingRuleImpl(new int[0]), EmptyRegattaLogStore.INSTANCE);
leaderboardGroup.setOverallLeaderboard(overallLeaderboard);
final double FACTOR = 2.0;
overallLeaderboard.getRaceColumnByName("Test Leaderboard").setFactor(FACTOR);
@@ -26,6 +26,7 @@ import com.sap.sailing.domain.base.Waypoint;
import com.sap.sailing.domain.common.Position;
import com.sap.sailing.domain.common.impl.DegreePosition;
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
import com.sap.sailing.domain.regattalog.impl.EmptyRegattaLogStore;
import com.sap.sailing.domain.tracking.DynamicRaceDefinitionSet;
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
import com.sap.sailing.domain.tracking.DynamicTrackedRegatta;
@@ -183,7 +184,8 @@ public abstract class OnlineTracTracBasedTest extends AbstractTracTracLiveTest {
if (domainFactory == null) {
domainFactory = new DomainFactoryImpl(new com.sap.sailing.domain.base.impl.DomainFactoryImpl());
}
domainEvent = domainFactory.getOrCreateDefaultRegatta(EmptyRaceLogStore.INSTANCE, getTracTracRace(), /* trackedRegattaRegistry */ null);
domainEvent = domainFactory.getOrCreateDefaultRegatta(EmptyRaceLogStore.INSTANCE, EmptyRegattaLogStore.INSTANCE,
getTracTracRace(), /* trackedRegattaRegistry */ null);
trackedRegatta = new DynamicTrackedRegattaImpl(domainEvent);
}
@@ -42,6 +42,7 @@ import com.sap.sailing.domain.common.impl.KnotSpeedWithBearingImpl;
import com.sap.sailing.domain.common.impl.WindSourceImpl;
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
import com.sap.sailing.domain.racelog.tracking.EmptyGPSFixStore;
import com.sap.sailing.domain.regattalog.impl.EmptyRegattaLogStore;
import com.sap.sailing.domain.tracking.MarkPassing;
import com.sap.sailing.domain.tracking.TrackedLeg;
import com.sap.sailing.domain.tracking.TrackedRegatta;
@@ -86,7 +87,8 @@ public class ReachingLegTest extends TrackBasedTest {
protected DynamicTrackedRaceImpl createTrackedRace(String regattaName, String raceName, String boatClassName,
Iterable<Competitor> competitors, TimePoint timePointForFixes) {
BoatClassImpl boatClass = new BoatClassImpl(boatClassName, /* typicallyStartsUpwind */ true);
Regatta regatta = new RegattaImpl(EmptyRaceLogStore.INSTANCE, RegattaImpl.getDefaultName(regattaName, boatClass.getName()), boatClass, /* trackedRegattaRegistry */ null,
Regatta regatta = new RegattaImpl(EmptyRaceLogStore.INSTANCE, EmptyRegattaLogStore.INSTANCE,
RegattaImpl.getDefaultName(regattaName, boatClass.getName()), boatClass, /* trackedRegattaRegistry */ null,
DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), "123", null);
TrackedRegatta trackedRegatta = new DynamicTrackedRegattaImpl(regatta);
List<Waypoint> waypoints = new ArrayList<Waypoint>();
@@ -14,6 +14,7 @@ import org.junit.Test;
import com.sap.sailing.domain.base.RaceDefinition;
import com.sap.sailing.domain.base.Waypoint;
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
import com.sap.sailing.domain.regattalog.impl.EmptyRegattaLogStore;
import com.sap.sailing.domain.tracking.DynamicRaceDefinitionSet;
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
import com.sap.sailing.domain.tracking.impl.DynamicTrackedRegattaImpl;
@@ -92,7 +93,7 @@ public class ReceiveMarkPassingDataTest extends AbstractTracTracLiveTest {
receivers.add(receiver);
for (Receiver r : DomainFactory.INSTANCE.getUpdateReceivers(
new DynamicTrackedRegattaImpl(DomainFactory.INSTANCE.getOrCreateDefaultRegatta(
EmptyRaceLogStore.INSTANCE, getTracTracRace(), /* trackedRegattaRegistry */null)),
EmptyRaceLogStore.INSTANCE, EmptyRegattaLogStore.INSTANCE, getTracTracRace(), /* trackedRegattaRegistry */null)),
getTracTracEvent().getRaces().iterator().next(), EmptyWindStore.INSTANCE, /* delayToLiveInMillis */ 0l,
/* simulator */null,
new DynamicRaceDefinitionSet() {
@@ -12,6 +12,7 @@ import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.RaceDefinition;
import com.sap.sailing.domain.base.Regatta;
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
import com.sap.sailing.domain.regattalog.impl.EmptyRegattaLogStore;
import com.sap.sailing.domain.tracking.DynamicRaceDefinitionSet;
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
import com.sap.sailing.domain.tracking.DynamicTrackedRegatta;
@@ -62,7 +63,8 @@ public class ReceiveTrackingDataTest extends AbstractTracTracLiveTest {
}
}
};
Regatta regatta = domainFactory.getOrCreateDefaultRegatta(EmptyRaceLogStore.INSTANCE, getTracTracRace(), /* trackedRegattaRegistry */ null);
Regatta regatta = domainFactory.getOrCreateDefaultRegatta(EmptyRaceLogStore.INSTANCE, EmptyRegattaLogStore.INSTANCE,
getTracTracRace(), /* trackedRegattaRegistry */ null);
DynamicTrackedRegatta trackedRegatta = new DynamicTrackedRegattaImpl(regatta);
trackedRegatta.addRaceListener(new RaceListener() {
@Override
@@ -36,6 +36,7 @@ import com.sap.sailing.domain.common.impl.KnotSpeedWithBearingImpl;
import com.sap.sailing.domain.common.impl.WindSourceImpl;
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
import com.sap.sailing.domain.racelog.tracking.EmptyGPSFixStore;
import com.sap.sailing.domain.regattalog.impl.EmptyRegattaLogStore;
import com.sap.sailing.domain.tracking.MarkPassing;
import com.sap.sailing.domain.tracking.TrackedRegatta;
import com.sap.sailing.domain.tracking.impl.DynamicTrackedRaceImpl;
@@ -96,7 +97,8 @@ public abstract class TrackBasedTest {
public static DynamicTrackedRaceImpl createTestTrackedRace(String regattaName, String raceName, String boatClassName,
Iterable<Competitor> competitors, TimePoint timePointForFixes) {
BoatClassImpl boatClass = new BoatClassImpl(boatClassName, /* typicallyStartsUpwind */ true);
Regatta regatta = new RegattaImpl(EmptyRaceLogStore.INSTANCE, RegattaImpl.getDefaultName(regattaName, boatClass.getName()), boatClass, /* trackedRegattaRegistry */ null,
Regatta regatta = new RegattaImpl(EmptyRaceLogStore.INSTANCE, EmptyRegattaLogStore.INSTANCE,
RegattaImpl.getDefaultName(regattaName, boatClass.getName()), boatClass, /* trackedRegattaRegistry */ null,
DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), "123", null);
TrackedRegatta trackedRegatta = new DynamicTrackedRegattaImpl(regatta);
List<Waypoint> waypoints = new ArrayList<Waypoint>();
@@ -18,6 +18,7 @@ import org.junit.rules.Timeout;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
import com.sap.sailing.domain.racelog.tracking.EmptyGPSFixStore;
import com.sap.sailing.domain.regattalog.impl.EmptyRegattaLogStore;
import com.sap.sailing.domain.tracking.impl.EmptyWindStore;
import com.sap.sailing.domain.tractracadapter.DomainFactory;
import com.sap.sailing.domain.tractracadapter.TracTracConnectionConstants;
@@ -46,7 +47,9 @@ public class UnicodeCharactersInCompetitorNamesTest {
}
@Test
public void testFindUnicodeCharactersInCompetitorNames() throws MalformedURLException, FileNotFoundException, URISyntaxException, IOException, InterruptedException, CreateModelException, SubscriberInitializationException {
public void testFindUnicodeCharactersInCompetitorNames() throws MalformedURLException, FileNotFoundException,
URISyntaxException, IOException, InterruptedException, CreateModelException,
SubscriberInitializationException {
TracTracRaceTracker fourtyninerYellow_2 = domainFactory
.createRaceTracker(
new URL(
@@ -59,10 +62,11 @@ public class UnicodeCharactersInCompetitorNamesTest {
tractracTunnel ? new URI("tcp://" + tractracTunnelHost + ":"
+ TracTracConnectionConstants.PORT_TUNNEL_STORED)
: new URI("tcp://" + TracTracConnectionConstants.HOST_NAME + ":"
+ TracTracConnectionConstants.PORT_STORED),
new URI("http://tracms.traclive.dk/update_course"),
+ TracTracConnectionConstants.PORT_STORED), new URI(
"http://tracms.traclive.dk/update_course"),
/* startOfTracking */null, /* endOfTracking */null, /* delayToLiveInMillis */0l,
/* simulateWithStartTimeNow */ false, EmptyRaceLogStore.INSTANCE, EmptyWindStore.INSTANCE, EmptyGPSFixStore.INSTANCE, "tracTest", "tracTest", "", "",
/* simulateWithStartTimeNow */false, EmptyRaceLogStore.INSTANCE, EmptyRegattaLogStore.INSTANCE,
EmptyWindStore.INSTANCE, EmptyGPSFixStore.INSTANCE, "tracTest", "tracTest", "", "",
new DummyTrackedRegattaRegistry());
Iterable<Competitor> competitors = fourtyninerYellow_2.getRacesHandle().getRace().getCompetitors();
@@ -36,7 +36,6 @@ import com.sap.sailing.domain.common.Bearing;
import com.sap.sailing.domain.common.Color;
import com.sap.sailing.domain.common.Position;
import com.sap.sailing.domain.common.ScoringSchemeType;
import com.sap.sailing.domain.confidence.ConfidenceFactory;
import com.sap.sailing.domain.common.confidence.Weigher;
import com.sap.sailing.domain.common.confidence.impl.PositionAndTimePointWeigher;
import com.sap.sailing.domain.common.impl.DegreeBearingImpl;
@@ -44,8 +43,10 @@ import com.sap.sailing.domain.common.impl.DegreePosition;
import com.sap.sailing.domain.common.impl.KnotSpeedWithBearingImpl;
import com.sap.sailing.domain.common.impl.MeterDistance;
import com.sap.sailing.domain.confidence.ConfidenceBasedWindAverager;
import com.sap.sailing.domain.confidence.ConfidenceFactory;
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
import com.sap.sailing.domain.racelog.tracking.EmptyGPSFixStore;
import com.sap.sailing.domain.regattalog.impl.EmptyRegattaLogStore;
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
import com.sap.sailing.domain.tracking.MarkPassing;
import com.sap.sailing.domain.tracking.Wind;
@@ -277,7 +278,8 @@ public class WindTest {
new BoatClassImpl("505", /* typicallyStartsUpwind */true), null));
final BoatClass boatClass = domainFactory.getOrCreateBoatClass("ESS40");
DynamicTrackedRace trackedRace = new DynamicTrackedRaceImpl(new DynamicTrackedRegattaImpl(
new RegattaImpl(EmptyRaceLogStore.INSTANCE, RegattaImpl.getDefaultName("Test Regatta", boatClass.getName()), boatClass,
new RegattaImpl(EmptyRaceLogStore.INSTANCE, EmptyRegattaLogStore.INSTANCE,
RegattaImpl.getDefaultName("Test Regatta", boatClass.getName()), boatClass,
/* trackedRegattaRegistry */ null, domainFactory.createScoringScheme(ScoringSchemeType.LOW_POINT), "123", null)),
new RaceDefinitionImpl("Test Race",
new CourseImpl("Test Course", Arrays.asList(new Waypoint[] { w1, w2, w3 })),
@@ -6,8 +6,8 @@ import java.util.List;
import java.util.NavigableSet;
import java.util.Set;
import java.util.TreeSet;
import com.sap.sailing.domain.abstractlog.race.RaceLog;
import com.sap.sailing.domain.abstractlog.regatta.RegattaLog;
import com.sap.sailing.domain.base.BoatClass;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.CourseArea;
@@ -67,7 +67,8 @@ import com.sap.sse.common.Util;
public class MockedTrackedRace implements DynamicTrackedRace {
private static final long serialVersionUID = 5827912985564121181L;
private final WindTrack windTrack = new WindTrackImpl(/* millisecondsOverWhichToAverage */ 30000, /* useSpeed */ true, "TestWindTrack");
private final WindTrack windTrack = new WindTrackImpl(/* millisecondsOverWhichToAverage */30000, /* useSpeed */
true, "TestWindTrack");
public WindTrack getWindTrack() {
return windTrack;
@@ -75,127 +76,105 @@ public class MockedTrackedRace implements DynamicTrackedRace {
@Override
public RaceDefinition getRace() {
// TODO Auto-generated method stub
return null;
}
@Override
public TimePoint getStartOfRace() {
// TODO Auto-generated method stub
return null;
}
@Override
public Iterable<TrackedLeg> getTrackedLegs() {
// TODO Auto-generated method stub
return null;
}
@Override
public TrackedLeg getTrackedLeg(Leg leg) {
// TODO Auto-generated method stub
return null;
}
@Override
public TrackedLegOfCompetitor getCurrentLeg(Competitor competitor, TimePoint timePoint) {
// TODO Auto-generated method stub
return null;
}
@Override
public TrackedLeg getCurrentLeg(TimePoint timePoint) {
// TODO Auto-generated method stub
return null;
}
@Override
public TrackedLeg getTrackedLegFinishingAt(Waypoint endOfLeg) {
// TODO Auto-generated method stub
return null;
}
@Override
public TrackedLeg getTrackedLegStartingAt(Waypoint startOfLeg) {
// TODO Auto-generated method stub
return null;
}
@Override
public TrackedLegOfCompetitor getTrackedLeg(Competitor competitor, TimePoint at) {
// TODO Auto-generated method stub
return null;
}
@Override
public TrackedLegOfCompetitor getTrackedLeg(Competitor competitor, Leg leg) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getUpdateCount() {
// TODO Auto-generated method stub
return 0;
}
@Override
public int getRankDifference(Competitor competitor, Leg leg, TimePoint timePoint) {
// TODO Auto-generated method stub
return 0;
}
@Override
public int getRank(Competitor competitor) throws NoWindException {
// TODO Auto-generated method stub
return 0;
}
@Override
public int getRank(Competitor competitor, TimePoint timePoint) throws NoWindException {
// TODO Auto-generated method stub
return 0;
}
@Override
public Iterable<MarkPassing> getMarkPassingsInOrder(Waypoint waypoint) {
// TODO Auto-generated method stub
return null;
}
@Override
public MarkPassing getMarkPassing(Competitor competitor, Waypoint waypoint) {
// TODO Auto-generated method stub
return null;
}
@Override
public DynamicGPSFixTrack<Mark, GPSFix> getOrCreateTrack(Mark mark) {
// TODO Auto-generated method stub
return null;
}
@Override
public WindTrack getOrCreateWindTrack(WindSource windSource, long delayForWindEstimationCacheInvalidation) {
// TODO Auto-generated method stub
return null;
}
@Override
public void waitForNextUpdate(int sinceUpdate) throws InterruptedException {
// TODO Auto-generated method stub
}
@Override
public TimePoint getStartOfTracking() {
// TODO Auto-generated method stub
return null;
}
@Override
public TimePoint getTimePointOfNewestEvent() {
// TODO Auto-generated method stub
return null;
}
@@ -206,8 +185,6 @@ public class MockedTrackedRace implements DynamicTrackedRace {
@Override
public void recordFix(Competitor competitor, GPSFixMoving fix) {
// TODO Auto-generated method stub
}
@Override
@@ -216,86 +193,66 @@ public class MockedTrackedRace implements DynamicTrackedRace {
windTrack.add(wind);
return true;
} else {
return false;
return false;
}
}
@Override
public void addListener(RaceChangeListener listener) {
// TODO Auto-generated method stub
}
@Override
public void addListener(RaceChangeListener listener, boolean notifyAboutWindFixesAlreadyLoaded,
boolean notifyAboutGPSFixesAlreadyLoaded) {
// TODO Auto-generated method stub
}
@Override
public void updateMarkPassings(Competitor competitor, Iterable<MarkPassing> markPassings) {
// TODO Auto-generated method stub
}
@Override
public void setStartTimeReceived(TimePoint start) {
// TODO Auto-generated method stub
}
@Override
public DynamicGPSFixTrack<Competitor, GPSFixMoving> getTrack(Competitor competitor) {
// TODO Auto-generated method stub
return null;
}
@Override
public void removeWind(Wind wind, WindSource windSource) {
// TODO Auto-generated method stub
}
@Override
public TimePoint getTimePointOfLastEvent() {
// TODO Auto-generated method stub
return null;
}
@Override
public void setMillisecondsOverWhichToAverageSpeed(long millisecondsOverWhichToAverageSpeed) {
// TODO Auto-generated method stub
}
@Override
public void setMillisecondsOverWhichToAverageWind(long millisecondsOverWhichToAverageWind) {
// TODO Auto-generated method stub
}
@Override
public long getMillisecondsOverWhichToAverageSpeed() {
// TODO Auto-generated method stub
return 0;
}
@Override
public long getMillisecondsOverWhichToAverageWind() {
// TODO Auto-generated method stub
return 0;
}
@Override
public Wind getEstimatedWindDirection(TimePoint timePoint) {
// TODO Auto-generated method stub
return null;
}
@Override
public boolean hasStarted(TimePoint at) {
// TODO Auto-generated method stub
return false;
}
@@ -316,218 +273,176 @@ public class MockedTrackedRace implements DynamicTrackedRace {
@Override
public Serializable getId() {
// TODO Auto-generated method stub
return null;
}
@Override
public Iterable<RaceDefinition> getAllRaces() {
// TODO Auto-generated method stub
return null;
}
@Override
public BoatClass getBoatClass() {
// TODO Auto-generated method stub
return null;
}
@Override
public Iterable<Competitor> getCompetitors() {
// TODO Auto-generated method stub
return null;
}
@Override
public void addRace(RaceDefinition race) {
// TODO Auto-generated method stub
}
@Override
public void removeRace(RaceDefinition raceDefinition) {
// TODO Auto-generated method stub
}
@Override
public RaceDefinition getRaceByName(String raceName) {
// TODO Auto-generated method stub
return null;
}
@Override
public void addRegattaListener(RegattaListener listener) {
// TODO Auto-generated method stub
}
@Override
public void removeRegattaListener(RegattaListener listener) {
// TODO Auto-generated method stub
}
@Override
public RegattaIdentifier getRegattaIdentifier() {
// TODO Auto-generated method stub
return null;
}
@Override
public Iterable<? extends Series> getSeries() {
// TODO Auto-generated method stub
return null;
}
@Override
public Series getSeriesByName(String seriesName) {
// TODO Auto-generated method stub
return null;
}
@Override
public boolean isPersistent() {
// TODO Auto-generated method stub
return false;
}
@Override
public void addRaceColumnListener(RaceColumnListener listener) {
// TODO Auto-generated method stub
}
@Override
public void removeRaceColumnListener(RaceColumnListener listener) {
// TODO Auto-generated method stub
}
@Override
public ScoringScheme getScoringScheme() {
// TODO Auto-generated method stub
return null;
}
@Override
public CourseArea getDefaultCourseArea() {
// TODO Auto-generated method stub
return null;
}
@Override
public void setDefaultCourseArea(CourseArea newCourseArea) {
// TODO Auto-generated method stub
}
@Override
public boolean definesSeriesDiscardThresholds() {
// TODO Auto-generated method stub
return false;
}
@Override
public RegattaAndRaceIdentifier getRaceIdentifier(RaceDefinition race) {
// TODO Auto-generated method stub
return null;
}
@Override
public RegattaConfiguration getRegattaConfiguration() {
// TODO Auto-generated method stub
return null;
}
@Override
public void setRegattaConfiguration(RegattaConfiguration configuration) {
// TODO Auto-generated method stub
}
@Override
public void addSeries(Series series) {
// TODO Auto-generated method stub
}
@Override
public boolean useStartTimeInference() {
// TODO Auto-generated method stub
return false;
}
@Override
public void removeSeries(Series series) {
// TODO Auto-generated method stub
}
@Override
public void setUseStartTimeInference(boolean useStartTimeInference) {
// TODO Auto-generated method stub
}
@Override
public RegattaLog getRegattaLog() {
return null;
}
};
}
@Override
public Iterable<DynamicTrackedRace> getTrackedRaces() {
// TODO Auto-generated method stub
return null;
}
@Override
public Iterable<TrackedRace> getTrackedRaces(BoatClass boatClass) {
// TODO Auto-generated method stub
return null;
}
@Override
public void addTrackedRace(TrackedRace trackedRace) {
// TODO Auto-generated method stub
}
@Override
public void removeTrackedRace(TrackedRace trackedRace) {
// TODO Auto-generated method stub
}
@Override
public void addRaceListener(RaceListener listener) {
// TODO Auto-generated method stub
}
@Override
public int getNetPoints(Competitor competitor, TimePoint timePoint) throws NoWindException {
// TODO Auto-generated method stub
return 0;
}
@Override
public DynamicTrackedRace getTrackedRace(RaceDefinition race) {
// TODO Auto-generated method stub
return null;
}
@Override
public DynamicTrackedRace getExistingTrackedRace(RaceDefinition race) {
// TODO Auto-generated method stub
return null;
}
@Override
public void removeTrackedRace(RaceDefinition raceDefinition) {
// TODO Auto-generated method stub
}
@Override
public DynamicTrackedRace createTrackedRace(RaceDefinition raceDefinition, Iterable<Sideline> sidelines, WindStore windStore,
GPSFixStore gpsFixStore, long delayToLiveInMillis, long millisecondsOverWhichToAverageWind, long millisecondsOverWhichToAverageSpeed,
public DynamicTrackedRace createTrackedRace(RaceDefinition raceDefinition, Iterable<Sideline> sidelines,
WindStore windStore, GPSFixStore gpsFixStore, long delayToLiveInMillis,
long millisecondsOverWhichToAverageWind, long millisecondsOverWhichToAverageSpeed,
DynamicRaceDefinitionSet raceDefinitionSetToUpdate) {
// TODO Auto-generated method stub
return null;
}
};
@@ -535,85 +450,71 @@ public class MockedTrackedRace implements DynamicTrackedRace {
@Override
public Position getApproximatePosition(Waypoint waypoint, TimePoint timePoint) {
// TODO Auto-generated method stub
return null;
}
@Override
public Tack getTack(Competitor competitor, TimePoint timePoint) {
// TODO Auto-generated method stub
return null;
}
@Override
public Tack getTack(SpeedWithBearing speedWithBearing, Wind wind, TimePoint timePoint) {
// TODO Auto-generated method stub
return null;
}
@Override
public Wind getDirectionFromStartToNextMark(TimePoint at) {
// TODO Auto-generated method stub
return null;
}
@Override
public List<GPSFixMoving> approximate(Competitor competitor, Distance maxDistance, TimePoint from, TimePoint to) {
// TODO Auto-generated method stub
return null;
}
@Override
public List<Maneuver> getManeuvers(Competitor competitor, TimePoint from, TimePoint to, boolean waitForLatest) {
// TODO Auto-generated method stub
return null;
}
@Override
public boolean raceIsKnownToStartUpwind() {
// TODO Auto-generated method stub
return false;
}
@Override
public void setRaceIsKnownToStartUpwind(boolean raceIsKnownToStartUpwind) {
// TODO Auto-generated method stub
}
@Override
public RegattaAndRaceIdentifier getRaceIdentifier() {
// TODO Auto-generated method stub
return null;
}
@Override
public TimePoint getEndOfRace() {
// TODO Auto-generated method stub
return null;
}
@Override
public Distance getDistanceTraveled(Competitor competitor, TimePoint timePoint) {
// TODO Auto-generated method stub
return null;
}
@Override
public Distance getWindwardDistanceToOverallLeader(Competitor competitor, TimePoint timePoint, WindPositionMode windPositionMode)
throws NoWindException {
// TODO Auto-generated method stub
public Distance getWindwardDistanceToOverallLeader(Competitor competitor, TimePoint timePoint,
WindPositionMode windPositionMode) throws NoWindException {
return null;
}
@Override
public Wind getWind(Position p, TimePoint at) {
// TODO Auto-generated method stub
return null;
}
@Override
public Wind getWind(Position p, TimePoint at, Set<WindSource> windSourcesToExclude) {
// TODO Auto-generated method stub
return null;
}
@@ -630,386 +531,302 @@ public class MockedTrackedRace implements DynamicTrackedRace {
@Override
public WindWithConfidence<Util.Pair<Position, TimePoint>> getWindWithConfidence(Position p, TimePoint at,
Set<WindSource> windSourcesToExclude) {
// TODO Auto-generated method stub
return null;
}
@Override
public WindWithConfidence<TimePoint> getEstimatedWindDirectionWithConfidence(TimePoint timePoint) {
// TODO Auto-generated method stub
return null;
}
@Override
public WindWithConfidence<Util.Pair<Position, TimePoint>> getWindWithConfidence(Position p, TimePoint at) {
// TODO Auto-generated method stub
return null;
}
@Override
public Set<WindSource> getWindSourcesToExclude() {
// TODO Auto-generated method stub
return null;
}
@Override
public TimePoint getEndOfTracking() {
// TODO Auto-generated method stub
return null;
}
@Override
public TimePoint getTimePointOfOldestEvent() {
// TODO Auto-generated method stub
return null;
}
@Override
public void setStartOfTrackingReceived(TimePoint startOfTrackingReceived) {
// TODO Auto-generated method stub
}
@Override
public void setEndOfTrackingReceived(TimePoint endOfTrackingReceived) {
// TODO Auto-generated method stub
}
@Override
public Iterable<Util.Pair<Waypoint, Util.Pair<TimePoint, TimePoint>>> getMarkPassingsTimes() {
// TODO Auto-generated method stub
return null;
}
@Override
public Distance getAverageAbsoluteCrossTrackError(Competitor competitor, TimePoint timePoint, boolean waitForLatestAnalysis) throws NoWindException {
// TODO Auto-generated method stub
public Distance getAverageAbsoluteCrossTrackError(Competitor competitor, TimePoint timePoint,
boolean waitForLatestAnalysis) throws NoWindException {
return null;
}
@Override
public Distance getAverageAbsoluteCrossTrackError(Competitor competitor, TimePoint timePoint,
boolean waitForLatestAnalyses, WindLegTypeAndLegBearingCache cache) {
// TODO Auto-generated method stub
return null;
}
@Override
public WindTrack getOrCreateWindTrack(WindSource windSource) {
// TODO Auto-generated method stub
return null;
}
@Override
public void recordFix(Mark mark, GPSFix fix) {
// TODO Auto-generated method stub
}
@Override
public void removeListener(RaceChangeListener listener) {
// TODO Auto-generated method stub
}
@Override
public WindStore getWindStore() {
// TODO Auto-generated method stub
return null;
}
@Override
public void setWindSourcesToExclude(Iterable<? extends WindSource> windSourcesToExclude) {
// TODO Auto-generated method stub
}
@Override
public Competitor getOverallLeader(TimePoint timePoint) throws NoWindException {
// TODO Auto-generated method stub
return null;
}
@Override
public long getDelayToLiveInMillis() {
// TODO Auto-generated method stub
return 0;
}
@Override
public void setDelayToLiveInMillis(long delayToLiveInMillis) {
// TODO Auto-generated method stub
}
@Override
public void setAndFixDelayToLiveInMillis(long delayToLiveInMillis) {
// TODO Auto-generated method stub
}
@Override
public List<Competitor> getCompetitorsFromBestToWorst(TimePoint timePoint) {
// TODO Auto-generated method stub
return null;
}
@Override
public Distance getAverageAbsoluteCrossTrackError(Competitor competitor, TimePoint from, TimePoint to, boolean upwindOnly, boolean waitForLatestAnalyses)
throws NoWindException {
// TODO Auto-generated method stub
public Distance getAverageAbsoluteCrossTrackError(Competitor competitor, TimePoint from, TimePoint to,
boolean upwindOnly, boolean waitForLatestAnalyses) throws NoWindException {
return null;
}
@Override
public void waitUntilLoadingFromWindStoreComplete() throws InterruptedException {
// TODO Auto-generated method stub
}
@Override
public Iterable<Mark> getMarks() {
// TODO Auto-generated method stub
return null;
}
@Override
public boolean hasWindData() {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean hasGPSData() {
// TODO Auto-generated method stub
return false;
}
@Override
public void lockForRead(Iterable<MarkPassing> markPassings) {
// TODO Auto-generated method stub
}
@Override
public void unlockAfterRead(Iterable<MarkPassing> markPassings) {
// TODO Auto-generated method stub
}
@Override
public TrackedRaceStatus getStatus() {
// TODO Auto-generated method stub
return null;
}
@Override
public void setStatus(TrackedRaceStatus newStatus) {
// TODO Auto-generated method stub
}
@Override
public void waitUntilNotLoading() {
// TODO Auto-generated method stub
}
@Override
public void detachRaceLog(Serializable identifier) {
// TODO Auto-generated method stub
}
@Override
public void attachRaceLog(RaceLog raceLog) {
// TODO Auto-generated method stub
}
@Override
public RaceLog getRaceLog(Serializable identifier) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCourseDesignChangedByRaceCommittee(CourseBase courseDesign) {
// TODO Auto-generated method stub
}
@Override
public void addCourseDesignChangedListener(CourseDesignChangedListener listener) {
// TODO Auto-generated method stub
}
@Override
public Distance getDistanceToStartLine(Competitor competitor, TimePoint timePoint) {
// TODO Auto-generated method stub
return null;
}
@Override
public Distance getDistanceFromStarboardSideOfStartLineWhenPassingStart(Competitor competitor) {
// TODO Auto-generated method stub
return null;
}
@Override
public void detachAllRaceLogs() {
// TODO Auto-generated method stub
}
@Override
public void invalidateStartTime() {
// TODO Auto-generated method stub
}
@Override
public void invalidateEndTime() {
// TODO Auto-generated method stub
}
@Override
public boolean isLive(TimePoint at) {
// TODO Auto-generated method stub
return false;
}
@Override
public Iterable<Sideline> getCourseSidelines() {
// TODO Auto-generated method stub
return null;
}
@Override
public Distance getDistanceToStartLine(Competitor competitor, long millisecondsBeforeRaceStart) {
// TODO Auto-generated method stub
return null;
}
@Override
public Speed getSpeed(Competitor competitor, long millisecondsBeforeRaceStart) {
// TODO Auto-generated method stub
return null;
}
public void onStartTimeChangedByRaceCommittee(TimePoint newStartTime) {
// TODO Auto-generated method stub
}
@Override
public void addStartTimeChangedListener(StartTimeChangedListener listener) {
// TODO Auto-generated method stub
}
@Override
public TimePoint getStartTimeReceived() {
// TODO Auto-generated method stub
return null;
}
@Override
public LineDetails getStartLine(TimePoint at) {
// TODO Auto-generated method stub
return null;
}
@Override
public LineDetails getFinishLine(TimePoint at) {
// TODO Auto-generated method stub
return null;
}
@Override
public SpeedWithConfidence<TimePoint> getAverageWindSpeedWithConfidence(long resolutionInMillis) {
// TODO Auto-generated method stub
return null;
}
@Override
public Distance getCourseLength() {
// TODO Auto-generated method stub
return null;
}
@Override
public Speed getSpeedWhenCrossingStartLine(Competitor competitor) {
// TODO Auto-generated method stub
return null;
}
@Override
public Distance getDistanceFromStarboardSideOfStartLine(Competitor competitor, TimePoint timePoint) {
// TODO Auto-generated method stub
return null;
}
@Override
public GPSFixStore getGPSFixStore() {
// TODO Auto-generated method stub
return null;
}
@Override
public Bearing getCrossingBearing(Waypoint w, TimePoint t) {
// TODO Auto-generated method stub
return null;
}
@Override
public Util.Pair<Mark, Mark> getPortAndStarboardMarks(TimePoint t, Waypoint w) {
// TODO Auto-generated method stub
return null;
}
@Override
public Distance getAverageSignedCrossTrackError(Competitor competitor, TimePoint timePoint,
boolean waitForLatestAnalysis) throws NoWindException {
// TODO Auto-generated method stub
return null;
}
@Override
public Distance getAverageSignedCrossTrackError(Competitor competitor, TimePoint timePoint,
boolean waitForLatestAnalyses, WindLegTypeAndLegBearingCache cache) {
// TODO Auto-generated method stub
return null;
}
@Override
public Distance getAverageSignedCrossTrackError(Competitor competitor, TimePoint from, TimePoint to,
boolean upwindOnly, boolean waitForLatestAnalysis) throws NoWindException {
// TODO Auto-generated method stub
return null;
}
@Override
public void waitForLoadingFromGPSFixStoreToFinishRunning(RaceLog forRaceLog) throws InterruptedException {
// TODO Auto-generated method stub
}
@Override
public void addRaceAbortedListener(RaceAbortedListener listener) {
// TODO Auto-generated method stub
}
@Override
public void onAbortedByRaceCommittee(Flags flag) {
// TODO Auto-generated method stub
}
@Override
public Position getCenterOfCourse(TimePoint at) {
// TODO Auto-generated method stub
return null;
}
}
@@ -23,6 +23,7 @@ import com.sap.sailing.domain.base.Waypoint;
import com.sap.sailing.domain.common.PassingInstruction;
import com.sap.sailing.domain.racelog.RaceLogStore;
import com.sap.sailing.domain.racelog.tracking.GPSFixStore;
import com.sap.sailing.domain.regattalog.RegattaLogStore;
import com.sap.sailing.domain.tracking.DynamicRaceDefinitionSet;
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
import com.sap.sailing.domain.tracking.DynamicTrackedRegatta;
@@ -101,7 +102,8 @@ public interface DomainFactory {
* boat class exists yet.
* @param trackedRegattaRegistry TODO
*/
com.sap.sailing.domain.base.Regatta getOrCreateDefaultRegatta(RaceLogStore raceLogStore, IRace race, TrackedRegattaRegistry trackedRegattaRegistry);
com.sap.sailing.domain.base.Regatta getOrCreateDefaultRegatta(RaceLogStore raceLogStore, RegattaLogStore regattaLogStore,
IRace race, TrackedRegattaRegistry trackedRegattaRegistry);
/**
* Creates a race tracked for the specified URL/URIs and starts receiving all available existing and future push
@@ -132,20 +134,24 @@ public interface DomainFactory {
* implementation is {@link EmptyWindStore} which simply provides new, empty tracks. This is always
* available but loses track of the wind, e.g., during server restarts.
*/
TracTracRaceTracker createRaceTracker(URL paramURL, URI liveURI, URI storedURI, URI courseDesignUpdateURI, TimePoint startOfTracking,
TimePoint endOfTracking, long delayToLiveInMillis, boolean simulateWithStartTimeNow, RaceLogStore raceLogStore,
WindStore windStore, GPSFixStore gpsFixStore, String tracTracUsername, String tracTracPassword,
String raceStatus, String raceVisibility, TrackedRegattaRegistry trackedRegattaRegistry) throws MalformedURLException, FileNotFoundException,
URISyntaxException, CreateModelException, SubscriberInitializationException;
TracTracRaceTracker createRaceTracker(URL paramURL, URI liveURI, URI storedURI, URI courseDesignUpdateURI,
TimePoint startOfTracking, TimePoint endOfTracking, long delayToLiveInMillis,
boolean simulateWithStartTimeNow, RaceLogStore raceLogStore, RegattaLogStore regattaLogStore,
WindStore windStore, GPSFixStore gpsFixStore, String tracTracUsername, String tracTracPassword,
String raceStatus, String raceVisibility, TrackedRegattaRegistry trackedRegattaRegistry)
throws MalformedURLException, FileNotFoundException, URISyntaxException, CreateModelException, SubscriberInitializationException;
/**
* Same as {@link #createRaceTracker(URL, URI, URI, URI, TimePoint, TimePoint, WindStore, TrackedRegattaRegistry)}, only that
* a predefined {@link Regatta} is used to hold the resulting races.
*/
RaceTracker createRaceTracker(Regatta regatta, URL paramURL, URI liveURI, URI storedURI, URI courseDesignUpdateURI, TimePoint startOfTracking,
TimePoint endOfTracking, long delayToLiveInMillis, boolean simulateWithStartTimeNow, RaceLogStore raceLogStore,
WindStore windStore, GPSFixStore gpsFixStore, String tracTracUsername, String tracTracPassword, String raceStatus, String raceVisibility, TrackedRegattaRegistry trackedRegattaRegistry) throws MalformedURLException, FileNotFoundException,
URISyntaxException, CreateModelException, SubscriberInitializationException;
RaceTracker createRaceTracker(Regatta regatta, URL paramURL, URI liveURI, URI storedURI, URI courseDesignUpdateURI,
TimePoint startOfTracking, TimePoint endOfTracking, long delayToLiveInMillis,
boolean simulateWithStartTimeNow, RaceLogStore raceLogStore, RegattaLogStore regattaLogStore,
WindStore windStore, GPSFixStore gpsFixStore, String tracTracUsername, String tracTracPassword,
String raceStatus, String raceVisibility, TrackedRegattaRegistry trackedRegattaRegistry)
throws MalformedURLException, FileNotFoundException, URISyntaxException, CreateModelException,
SubscriberInitializationException;
BoatClass getOrCreateBoatClass(String competitorClassName);
@@ -244,8 +250,9 @@ public interface DomainFactory {
Util.Pair<Iterable<com.sap.sailing.domain.base.Competitor>, BoatClass> getCompetitorsAndDominantBoatClass(IRace race);
RaceTrackingConnectivityParameters createTrackingConnectivityParameters(URL paramURL, URI liveURI, URI storedURI, URI courseDesignUpdateURI,
TimePoint startOfTracking, TimePoint endOfTracking, long delayToLiveInMillis, boolean simulateWithStartTimeNow, RaceLogStore raceLogStore,
RaceTrackingConnectivityParameters createTrackingConnectivityParameters(URL paramURL, URI liveURI, URI storedURI,
URI courseDesignUpdateURI, TimePoint startOfTracking, TimePoint endOfTracking, long delayToLiveInMillis,
boolean simulateWithStartTimeNow, RaceLogStore raceLogStore, RegattaLogStore regattaLogStore,
String tracTracUsername, String tracTracPassword, String raceStatus, String raceVisibility);
/**
* Removes all knowledge about <code>tractracRace</code> which includes removing it from the race cache, from the
@@ -13,6 +13,7 @@ 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.racelog.RaceLogStore;
import com.sap.sailing.domain.regattalog.RegattaLogStore;
import com.sap.sailing.domain.tracking.RaceHandle;
import com.sap.sailing.domain.tracking.TrackerManager;
import com.sap.sailing.domain.tracking.WindStore;
@@ -47,8 +48,9 @@ public interface TracTracAdapter {
* is stopped; use -1 to wait forever
*/
RaceHandle addTracTracRace(TrackerManager trackerManager, URL paramURL, URI liveURI, URI storedURI,
URI courseDesignUpdateURI, RaceLogStore raceLogStore, long timeoutInMilliseconds,
String tracTracUsername, String tracTracPassword, String raceStatus, String raceVisibility) throws MalformedURLException, FileNotFoundException, URISyntaxException, Exception;
URI courseDesignUpdateURI, RaceLogStore raceLogStore, RegattaLogStore regattaLogStore,
long timeoutInMilliseconds, String tracTracUsername, String tracTracPassword, String raceStatus,
String raceVisibility) throws MalformedURLException, FileNotFoundException, URISyntaxException, Exception;
/**
* Same as {@link #addTracTracRace(URL, URI, URI, WindStore, long)}, only that start and end of tracking are
@@ -65,12 +67,11 @@ public interface TracTracAdapter {
* to add the races to. Otherwise, a default regatta as described above will be created and used.
* @param raceStatus
*/
RaceHandle addTracTracRace(TrackerManager trackerManager, RegattaIdentifier regattaToAddTo, URL paramURL, URI liveURI,
URI storedURI, URI courseDesignUpdateURI, TimePoint trackingStartTime,
TimePoint trackingEndTime, RaceLogStore raceLogStore,
long timeoutForReceivingRaceDefinitionInMilliseconds, boolean simulateWithStartTimeNow,
String tracTracUsername, String tracTracPassword,
String raceStatus, String raceVisibility)
RaceHandle addTracTracRace(TrackerManager trackerManager, RegattaIdentifier regattaToAddTo, URL paramURL,
URI liveURI, URI storedURI, URI courseDesignUpdateURI, TimePoint trackingStartTime,
TimePoint trackingEndTime, RaceLogStore raceLogStore, RegattaLogStore regattaLogStore,
long timeoutForReceivingRaceDefinitionInMilliseconds, boolean simulateWithStartTimeNow,
String tracTracUsername, String tracTracPassword, String raceStatus, String raceVisibility)
throws MalformedURLException, FileNotFoundException, URISyntaxException, Exception;
/**
@@ -89,8 +90,9 @@ public interface TracTracAdapter {
* that race is stopped; use -1 to wait forever
* @param raceLogStore TODO
*/
Regatta addRegatta(TrackerManager trackerManager, URL jsonURL, URI liveURI, URI storedURI, URI courseDesignUpdateURI, WindStore windStore,
long timeoutInMilliseconds, String tracTracUsername, String tracTracPassword, RaceLogStore raceLogStore)
Regatta addRegatta(TrackerManager trackerManager, URL jsonURL, URI liveURI, URI storedURI,
URI courseDesignUpdateURI, WindStore windStore, long timeoutInMilliseconds, String tracTracUsername,
String tracTracPassword, RaceLogStore raceLogStore, RegattaLogStore regattaLogStore)
throws MalformedURLException, FileNotFoundException, URISyntaxException, IOException, ParseException,
org.json.simple.parser.ParseException, Exception;
@@ -51,6 +51,7 @@ import com.sap.sailing.domain.markpassingcalculation.MarkPassingCalculator;
import com.sap.sailing.domain.racelog.RaceLogStore;
import com.sap.sailing.domain.racelog.tracking.EmptyGPSFixStore;
import com.sap.sailing.domain.racelog.tracking.GPSFixStore;
import com.sap.sailing.domain.regattalog.RegattaLogStore;
import com.sap.sailing.domain.tracking.DynamicRaceDefinitionSet;
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
import com.sap.sailing.domain.tracking.DynamicTrackedRegatta;
@@ -73,11 +74,11 @@ import com.sap.sailing.domain.tractracadapter.TracTracConfiguration;
import com.sap.sailing.domain.tractracadapter.TracTracControlPoint;
import com.sap.sailing.domain.tractracadapter.TracTracRaceTracker;
import com.sap.sailing.util.WeakIdentityHashMap;
import com.tractrac.model.lib.api.data.IPosition;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.Util;
import com.sap.sse.common.Util.Pair;
import com.sap.sse.common.impl.MillisecondsTimePoint;
import com.tractrac.model.lib.api.data.IPosition;
import com.tractrac.model.lib.api.event.CreateModelException;
import com.tractrac.model.lib.api.event.ICompetitor;
import com.tractrac.model.lib.api.event.ICompetitorClass;
@@ -345,7 +346,8 @@ public class DomainFactoryImpl implements DomainFactory {
}
@Override
public Regatta getOrCreateDefaultRegatta(RaceLogStore raceLogStore, IRace race, TrackedRegattaRegistry trackedRegattaRegistry) {
public Regatta getOrCreateDefaultRegatta(RaceLogStore raceLogStore, RegattaLogStore regattaLogStore,
IRace race, TrackedRegattaRegistry trackedRegattaRegistry) {
synchronized (regattaCache) {
// FIXME Dialog with Lasse by Skype on 2011-06-17:
// [6:20:04 PM] Axel Uhl: Lasse, can Event.getCompetitorClassList() ever produce more than one result?
@@ -371,7 +373,9 @@ public class DomainFactoryImpl implements DomainFactory {
// This is particularly bad if a persistent regatta was loaded but a default regatta was accidentally created.
// Then, there is no way but restart the server to get rid of this stale cache entry here.
if (result == null) {
result = new RegattaImpl(raceLogStore, RegattaImpl.getDefaultName(defaultRegattaNameAndBoatClass.getA(), boatClass.getName()), boatClass, trackedRegattaRegistry,
result = new RegattaImpl(raceLogStore, regattaLogStore, RegattaImpl.getDefaultName(
defaultRegattaNameAndBoatClass.getA(), boatClass.getName()), boatClass,
trackedRegattaRegistry,
// use the low-point system as the default scoring scheme
getBaseDomainFactory().createScoringScheme(ScoringSchemeType.LOW_POINT), race.getId(), null);
regattaCache.put(key, result);
@@ -632,23 +636,30 @@ public class DomainFactoryImpl implements DomainFactory {
}
@Override
public TracTracRaceTracker createRaceTracker(URL paramURL, URI liveURI, URI storedURI, URI courseDesignUpdateURI, TimePoint startOfTracking,
TimePoint endOfTracking, long delayToLiveInMillis, boolean simulateWithStartTimeNow,
RaceLogStore raceLogStore, WindStore windStore, GPSFixStore gpsFixStore, String tracTracUsername,
String tracTracPassword, String raceStatus, String raceVisibility,
TrackedRegattaRegistry trackedRegattaRegistry) throws MalformedURLException, FileNotFoundException,
URISyntaxException, CreateModelException, SubscriberInitializationException {
return new TracTracRaceTrackerImpl(this, paramURL, liveURI, storedURI, courseDesignUpdateURI, startOfTracking, endOfTracking, delayToLiveInMillis,
simulateWithStartTimeNow, raceLogStore, windStore, gpsFixStore, tracTracUsername, tracTracPassword, raceStatus, raceVisibility, trackedRegattaRegistry);
public TracTracRaceTracker createRaceTracker(URL paramURL, URI liveURI, URI storedURI, URI courseDesignUpdateURI,
TimePoint startOfTracking, TimePoint endOfTracking, long delayToLiveInMillis,
boolean simulateWithStartTimeNow, RaceLogStore raceLogStore, RegattaLogStore regattaLogStore,
WindStore windStore, GPSFixStore gpsFixStore, String tracTracUsername, String tracTracPassword,
String raceStatus, String raceVisibility, TrackedRegattaRegistry trackedRegattaRegistry)
throws MalformedURLException, FileNotFoundException, URISyntaxException, CreateModelException,
SubscriberInitializationException {
return new TracTracRaceTrackerImpl(this, paramURL, liveURI, storedURI, courseDesignUpdateURI, startOfTracking,
endOfTracking, delayToLiveInMillis, simulateWithStartTimeNow, raceLogStore, regattaLogStore, windStore,
gpsFixStore, tracTracUsername, tracTracPassword, raceStatus, raceVisibility, trackedRegattaRegistry);
}
@Override
public RaceTracker createRaceTracker(Regatta regatta, URL paramURL, URI liveURI, URI storedURI, URI courseDesignUpdateURI,
TimePoint startOfTracking, TimePoint endOfTracking, long delayToLiveInMillis,
boolean simulateWithStartTimeNow, RaceLogStore raceLogStore, WindStore windStore, GPSFixStore gpsFixStore, String tracTracUsername, String tracTracPassword, String raceStatus, String raceVisibility, TrackedRegattaRegistry trackedRegattaRegistry)
throws MalformedURLException, FileNotFoundException, URISyntaxException, CreateModelException, SubscriberInitializationException {
return new TracTracRaceTrackerImpl(regatta, this, paramURL, liveURI, storedURI, courseDesignUpdateURI, startOfTracking, endOfTracking, delayToLiveInMillis,
simulateWithStartTimeNow, raceLogStore, windStore, gpsFixStore, tracTracUsername, tracTracPassword, raceStatus, raceVisibility, trackedRegattaRegistry);
public RaceTracker createRaceTracker(Regatta regatta, URL paramURL, URI liveURI, URI storedURI,
URI courseDesignUpdateURI, TimePoint startOfTracking, TimePoint endOfTracking, long delayToLiveInMillis,
boolean simulateWithStartTimeNow, RaceLogStore raceLogStore, RegattaLogStore regattaLogStore,
WindStore windStore, GPSFixStore gpsFixStore, String tracTracUsername, String tracTracPassword,
String raceStatus, String raceVisibility, TrackedRegattaRegistry trackedRegattaRegistry)
throws MalformedURLException, FileNotFoundException, URISyntaxException, CreateModelException,
SubscriberInitializationException {
return new TracTracRaceTrackerImpl(regatta, this, paramURL, liveURI, storedURI, courseDesignUpdateURI,
startOfTracking, endOfTracking, delayToLiveInMillis, simulateWithStartTimeNow, raceLogStore,
regattaLogStore, windStore, gpsFixStore, tracTracUsername, tracTracPassword, raceStatus,
raceVisibility, trackedRegattaRegistry);
}
@Override
@@ -663,11 +674,13 @@ 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, String tracTracUsername,
String tracTracPassword, String raceStatus, String raceVisibility) {
return new RaceTrackingConnectivityParametersImpl(paramURL, liveURI, storedURI, courseDesignUpdateURI, startOfTracking, endOfTracking,
delayToLiveInMillis, simulateWithStartTimeNow, raceLogStore, this, tracTracUsername, tracTracPassword, raceStatus, raceVisibility);
URI storedURI, URI courseDesignUpdateURI, TimePoint startOfTracking, TimePoint endOfTracking,
long delayToLiveInMillis, boolean simulateWithStartTimeNow, RaceLogStore raceLogStore,
RegattaLogStore regattaLogStore, String tracTracUsername, String tracTracPassword, String raceStatus,
String raceVisibility) {
return new RaceTrackingConnectivityParametersImpl(paramURL, liveURI, storedURI, courseDesignUpdateURI,
startOfTracking, endOfTracking, delayToLiveInMillis, simulateWithStartTimeNow, raceLogStore,
regattaLogStore, this, tracTracUsername, tracTracPassword, raceStatus, raceVisibility);
}
@Override
@@ -9,6 +9,7 @@ import java.net.URL;
import com.sap.sailing.domain.base.Regatta;
import com.sap.sailing.domain.racelog.RaceLogStore;
import com.sap.sailing.domain.racelog.tracking.GPSFixStore;
import com.sap.sailing.domain.regattalog.RegattaLogStore;
import com.sap.sailing.domain.tracking.RaceTracker;
import com.sap.sailing.domain.tracking.RaceTrackingConnectivityParameters;
import com.sap.sailing.domain.tracking.TrackedRegattaRegistry;
@@ -26,6 +27,7 @@ public class RaceTrackingConnectivityParametersImpl implements RaceTrackingConne
private final TimePoint startOfTracking;
private final TimePoint endOfTracking;
private final RaceLogStore raceLogStore;
private final RegattaLogStore regattaLogStore;
private final DomainFactory domainFactory;
private final long delayToLiveInMillis;
private final boolean simulateWithStartTimeNow;
@@ -34,10 +36,11 @@ public class RaceTrackingConnectivityParametersImpl implements RaceTrackingConne
private final String raceStatus;
private final String raceVisibility;
public RaceTrackingConnectivityParametersImpl(URL paramURL, URI liveURI, URI storedURI, URI courseDesignUpdateURI, TimePoint startOfTracking,
TimePoint endOfTracking, long delayToLiveInMillis, boolean simulateWithStartTimeNow,
RaceLogStore raceLogStore, DomainFactory domainFactory, String tracTracUsername, String tracTracPassword,
String raceStatus, String raceVisibility) {
public RaceTrackingConnectivityParametersImpl(URL paramURL, URI liveURI, URI storedURI, URI courseDesignUpdateURI,
TimePoint startOfTracking, TimePoint endOfTracking, long delayToLiveInMillis,
boolean simulateWithStartTimeNow, RaceLogStore raceLogStore, RegattaLogStore regattaLogStore,
DomainFactory domainFactory, String tracTracUsername, String tracTracPassword, String raceStatus,
String raceVisibility) {
super();
this.paramURL = paramURL;
this.liveURI = liveURI;
@@ -49,6 +52,7 @@ public class RaceTrackingConnectivityParametersImpl implements RaceTrackingConne
this.domainFactory = domainFactory;
this.simulateWithStartTimeNow = simulateWithStartTimeNow;
this.raceLogStore = raceLogStore;
this.regattaLogStore = regattaLogStore;
this.tracTracUsername = tracTracUsername;
this.tracTracPassword = tracTracPassword;
this.raceStatus = raceStatus;
@@ -56,18 +60,23 @@ public class RaceTrackingConnectivityParametersImpl implements RaceTrackingConne
}
@Override
public RaceTracker createRaceTracker(TrackedRegattaRegistry trackedRegattaRegistry, WindStore windStore, GPSFixStore gpsFixStore) throws MalformedURLException,
FileNotFoundException, URISyntaxException, CreateModelException, SubscriberInitializationException {
RaceTracker tracker = domainFactory.createRaceTracker(paramURL, liveURI, storedURI, courseDesignUpdateURI, startOfTracking,
endOfTracking, delayToLiveInMillis, simulateWithStartTimeNow, raceLogStore, windStore, gpsFixStore, tracTracUsername, tracTracPassword, raceStatus, raceVisibility, trackedRegattaRegistry);
public RaceTracker createRaceTracker(TrackedRegattaRegistry trackedRegattaRegistry, WindStore windStore,
GPSFixStore gpsFixStore) throws MalformedURLException, FileNotFoundException, URISyntaxException,
CreateModelException, SubscriberInitializationException {
RaceTracker tracker = domainFactory.createRaceTracker(paramURL, liveURI, storedURI, courseDesignUpdateURI,
startOfTracking, endOfTracking, delayToLiveInMillis, simulateWithStartTimeNow, raceLogStore,
regattaLogStore, windStore, gpsFixStore, tracTracUsername, tracTracPassword, raceStatus,
raceVisibility, trackedRegattaRegistry);
return tracker;
}
@Override
public RaceTracker createRaceTracker(Regatta regatta, TrackedRegattaRegistry trackedRegattaRegistry, WindStore windStore, GPSFixStore gpsFixStore)
throws Exception {
RaceTracker tracker = domainFactory.createRaceTracker(regatta, paramURL, liveURI, storedURI, courseDesignUpdateURI, startOfTracking,
endOfTracking, delayToLiveInMillis, simulateWithStartTimeNow, raceLogStore, windStore, gpsFixStore, tracTracUsername, tracTracPassword, raceStatus, raceVisibility, trackedRegattaRegistry);
public RaceTracker createRaceTracker(Regatta regatta, TrackedRegattaRegistry trackedRegattaRegistry,
WindStore windStore, GPSFixStore gpsFixStore) throws Exception {
RaceTracker tracker = domainFactory.createRaceTracker(regatta, paramURL, liveURI, storedURI,
courseDesignUpdateURI, startOfTracking, endOfTracking, delayToLiveInMillis, simulateWithStartTimeNow,
raceLogStore, regattaLogStore, windStore, gpsFixStore, tracTracUsername, tracTracPassword, raceStatus,
raceVisibility, trackedRegattaRegistry);
return tracker;
}
@@ -11,6 +11,7 @@ import java.util.logging.Logger;
import com.sap.sailing.domain.base.Regatta;
import com.sap.sailing.domain.common.RegattaIdentifier;
import com.sap.sailing.domain.racelog.RaceLogStore;
import com.sap.sailing.domain.regattalog.RegattaLogStore;
import com.sap.sailing.domain.tracking.RaceHandle;
import com.sap.sailing.domain.tracking.TrackedRace;
import com.sap.sailing.domain.tracking.TrackerManager;
@@ -47,29 +48,31 @@ public class TracTracAdapterImpl implements TracTracAdapter {
@Override
public RaceHandle addTracTracRace(TrackerManager trackerManager, URL paramURL, URI liveURI, URI storedURI,
URI courseDesignUpdateURI, RaceLogStore raceLogStore, long timeoutInMilliseconds,
String tracTracUsername, String tracTracPassword, String raceStatus, String raceVisibility) throws Exception {
URI courseDesignUpdateURI, RaceLogStore raceLogStore, RegattaLogStore regattaLogStore,
long timeoutInMilliseconds, String tracTracUsername, String tracTracPassword, String raceStatus,
String raceVisibility) throws Exception {
return trackerManager.addRace(
/* regattaToAddTo */null,
getTracTracDomainFactory().createTrackingConnectivityParameters(paramURL, liveURI, storedURI,
courseDesignUpdateURI,
/* startOfTracking */null,
/* endOfTracking */null, delayToLiveInMillis, /* simulateWithStartTimeNow */false,
raceLogStore, tracTracUsername, tracTracPassword, raceStatus, raceVisibility), timeoutInMilliseconds);
raceLogStore, regattaLogStore, tracTracUsername, tracTracPassword, raceStatus, raceVisibility),
timeoutInMilliseconds);
}
@Override
public RaceHandle addTracTracRace(TrackerManager trackerManager, RegattaIdentifier regattaToAddTo,
URL paramURL, URI liveURI, URI storedURI, URI courseDesignUpdateURI, TimePoint startOfTracking,
TimePoint endOfTracking, RaceLogStore raceLogStore,
long timeoutInMilliseconds, boolean simulateWithStartTimeNow, String tracTracUsername,
String tracTracPassword, String raceStatus, String raceVisibility) throws Exception {
public RaceHandle addTracTracRace(TrackerManager trackerManager, RegattaIdentifier regattaToAddTo, URL paramURL,
URI liveURI, URI storedURI, URI courseDesignUpdateURI, TimePoint startOfTracking, TimePoint endOfTracking,
RaceLogStore raceLogStore, RegattaLogStore regattaLogStore, long timeoutInMilliseconds,
boolean simulateWithStartTimeNow, String tracTracUsername, String tracTracPassword, String raceStatus,
String raceVisibility) throws Exception {
return trackerManager.addRace(
regattaToAddTo,
getTracTracDomainFactory().createTrackingConnectivityParameters(paramURL, liveURI, storedURI,
courseDesignUpdateURI, startOfTracking, endOfTracking, delayToLiveInMillis,
simulateWithStartTimeNow, raceLogStore, tracTracUsername, tracTracPassword, raceStatus, raceVisibility),
timeoutInMilliseconds);
simulateWithStartTimeNow, raceLogStore, regattaLogStore, tracTracUsername, tracTracPassword,
raceStatus, raceVisibility), timeoutInMilliseconds);
}
@Override
@@ -82,14 +85,16 @@ public class TracTracAdapterImpl implements TracTracAdapter {
}
@Override
public Regatta addRegatta(TrackerManager trackerManager, URL jsonURL, URI liveURI, URI storedURI, URI courseDesignUpdateURI,
WindStore windStore, long timeoutInMilliseconds, String tracTracUsername, String tracTracPassword, RaceLogStore raceLogStore) throws Exception {
public Regatta addRegatta(TrackerManager trackerManager, URL jsonURL, URI liveURI, URI storedURI,
URI courseDesignUpdateURI, WindStore windStore, long timeoutInMilliseconds, String tracTracUsername,
String tracTracPassword, RaceLogStore raceLogStore, RegattaLogStore regattaLogStore) throws Exception {
JSONService jsonService = getTracTracDomainFactory().parseJSONURLWithRaceRecords(jsonURL, true);
Regatta regatta = null;
for (RaceRecord rr : jsonService.getRaceRecords()) {
URL paramURL = rr.getParamURL();
regatta = addTracTracRace(trackerManager, paramURL, liveURI, storedURI, courseDesignUpdateURI, raceLogStore,
timeoutInMilliseconds, tracTracUsername, "", "", tracTracPassword).getRegatta();
regatta = addTracTracRace(trackerManager, paramURL, liveURI, storedURI, courseDesignUpdateURI,
raceLogStore, regattaLogStore, timeoutInMilliseconds, tracTracUsername, "", "",
tracTracPassword).getRegatta();
}
return regatta;
}
@@ -28,6 +28,7 @@ import com.sap.sailing.domain.base.Series;
import com.sap.sailing.domain.common.TrackedRaceStatusEnum;
import com.sap.sailing.domain.racelog.RaceLogStore;
import com.sap.sailing.domain.racelog.tracking.GPSFixStore;
import com.sap.sailing.domain.regattalog.RegattaLogStore;
import com.sap.sailing.domain.tracking.AbstractRaceTrackerImpl;
import com.sap.sailing.domain.tracking.DynamicRaceDefinitionSet;
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
@@ -245,23 +246,29 @@ public class TracTracRaceTrackerImpl extends AbstractRaceTrackerImpl implements
* @param trackedRegattaRegistry
* used to create the {@link TrackedRegatta} for the domain event
*/
protected TracTracRaceTrackerImpl(DomainFactory domainFactory, URL paramURL, URI liveURI, URI storedURI, URI courseDesignUpdateURI,
TimePoint startOfTracking, TimePoint endOfTracking, long delayToLiveInMillis,
boolean simulateWithStartTimeNow, RaceLogStore raceLogStore, WindStore windStore, GPSFixStore gpsFixStore, String tracTracUsername, String tracTracPassword, String raceStatus, String raceVisibility, TrackedRegattaRegistry trackedRegattaRegistry)
throws URISyntaxException, MalformedURLException, FileNotFoundException, CreateModelException, SubscriberInitializationException {
this(ModelLocator.getEventFactory().createRace(new URI(paramURL.toString())), domainFactory,
paramURL, liveURI, storedURI, courseDesignUpdateURI, startOfTracking, endOfTracking,
delayToLiveInMillis, simulateWithStartTimeNow, raceLogStore, windStore, gpsFixStore, tracTracUsername,
protected TracTracRaceTrackerImpl(DomainFactory domainFactory, URL paramURL, URI liveURI, URI storedURI,
URI courseDesignUpdateURI, TimePoint startOfTracking, TimePoint endOfTracking, long delayToLiveInMillis,
boolean simulateWithStartTimeNow, RaceLogStore raceLogStore, RegattaLogStore regattaLogStore,
WindStore windStore, GPSFixStore gpsFixStore, String tracTracUsername, String tracTracPassword,
String raceStatus, String raceVisibility, TrackedRegattaRegistry trackedRegattaRegistry)
throws URISyntaxException, MalformedURLException, FileNotFoundException, CreateModelException,
SubscriberInitializationException {
this(ModelLocator.getEventFactory().createRace(new URI(paramURL.toString())), domainFactory, paramURL, liveURI,
storedURI, courseDesignUpdateURI, startOfTracking, endOfTracking, delayToLiveInMillis,
simulateWithStartTimeNow, raceLogStore, regattaLogStore, windStore, gpsFixStore, tracTracUsername,
tracTracPassword, raceStatus, raceVisibility, trackedRegattaRegistry);
}
private TracTracRaceTrackerImpl(IRace tractracRace, DomainFactory domainFactory, URL paramURL, URI liveURI, URI storedURI, URI courseDesignUpdateURI,
TimePoint startOfTracking, TimePoint endOfTracking, long delayToLiveInMillis, boolean simulateWithStartTimeNow,
RaceLogStore raceLogStore, WindStore windStore, GPSFixStore gpsFixStore, String tracTracUsername, String tracTracPassword, String raceStatus, String raceVisibility, TrackedRegattaRegistry trackedRegattaRegistry)
throws URISyntaxException, MalformedURLException, FileNotFoundException, SubscriberInitializationException {
this(tractracRace, null, domainFactory, paramURL, liveURI, storedURI, courseDesignUpdateURI,
startOfTracking, endOfTracking, delayToLiveInMillis, simulateWithStartTimeNow, raceLogStore, windStore, gpsFixStore,
tracTracUsername, tracTracPassword, raceStatus, raceVisibility, trackedRegattaRegistry);
private TracTracRaceTrackerImpl(IRace tractracRace, DomainFactory domainFactory, URL paramURL, URI liveURI,
URI storedURI, URI courseDesignUpdateURI, TimePoint startOfTracking, TimePoint endOfTracking,
long delayToLiveInMillis, boolean simulateWithStartTimeNow, RaceLogStore raceLogStore,
RegattaLogStore regattaLogStore, WindStore windStore, GPSFixStore gpsFixStore, String tracTracUsername,
String tracTracPassword, String raceStatus, String raceVisibility,
TrackedRegattaRegistry trackedRegattaRegistry) throws URISyntaxException, MalformedURLException,
FileNotFoundException, SubscriberInitializationException {
this(tractracRace, null, domainFactory, paramURL, liveURI, storedURI, courseDesignUpdateURI, startOfTracking,
endOfTracking, delayToLiveInMillis, simulateWithStartTimeNow, raceLogStore, regattaLogStore, windStore,
gpsFixStore, tracTracUsername, tracTracPassword, raceStatus, raceVisibility, trackedRegattaRegistry);
}
/**
@@ -270,13 +277,16 @@ public class TracTracRaceTrackerImpl extends AbstractRaceTrackerImpl implements
* may create a default {@link Regatta} with only a single default {@link Series} and {@link Fleet} which may not
* always be what you want.
*/
protected TracTracRaceTrackerImpl(Regatta regatta, DomainFactory domainFactory, URL paramURL, URI liveURI, URI storedURI, URI courseDesignUpdateURI,
TimePoint startOfTracking, TimePoint endOfTracking, long delayToLiveInMillis, boolean simulateWithStartTimeNow,
RaceLogStore raceLogStore, WindStore windStore, GPSFixStore gpsFixStore, String tracTracUsername, String tracTracPassword, String raceStatus, String raceVisibility, TrackedRegattaRegistry trackedRegattaRegistry)
throws URISyntaxException, MalformedURLException, FileNotFoundException, CreateModelException, SubscriberInitializationException {
this(ModelLocator.getEventFactory().createRace(new URI(paramURL.toString())), regatta,
domainFactory, paramURL, liveURI, storedURI, courseDesignUpdateURI, startOfTracking, endOfTracking,
delayToLiveInMillis, simulateWithStartTimeNow, raceLogStore, windStore, gpsFixStore, tracTracUsername,
protected TracTracRaceTrackerImpl(Regatta regatta, DomainFactory domainFactory, URL paramURL, URI liveURI,
URI storedURI, URI courseDesignUpdateURI, TimePoint startOfTracking, TimePoint endOfTracking,
long delayToLiveInMillis, boolean simulateWithStartTimeNow, RaceLogStore raceLogStore,
RegattaLogStore regattaLogStore, WindStore windStore, GPSFixStore gpsFixStore, String tracTracUsername,
String tracTracPassword, String raceStatus, String raceVisibility,
TrackedRegattaRegistry trackedRegattaRegistry) throws URISyntaxException,
MalformedURLException, FileNotFoundException, CreateModelException, SubscriberInitializationException {
this(ModelLocator.getEventFactory().createRace(new URI(paramURL.toString())), regatta, domainFactory, paramURL,
liveURI, storedURI, courseDesignUpdateURI, startOfTracking, endOfTracking, delayToLiveInMillis,
simulateWithStartTimeNow, raceLogStore, regattaLogStore, windStore, gpsFixStore, tracTracUsername,
tracTracPassword, raceStatus, raceVisibility, trackedRegattaRegistry);
}
@@ -292,10 +302,12 @@ public class TracTracRaceTrackerImpl extends AbstractRaceTrackerImpl implements
* attached to the events sent to the receivers will again approximate the wall time.
*/
private TracTracRaceTrackerImpl(IRace tractracRace, final Regatta regatta, DomainFactory domainFactory,
URL paramURL, URI liveURI, URI storedURI, URI tracTracUpdateURI, TimePoint startOfTracking, TimePoint endOfTracking,
long delayToLiveInMillis, boolean simulateWithStartTimeNow, RaceLogStore raceLogStore,
WindStore windStore, GPSFixStore gpsFixStore, String tracTracUsername, String tracTracPassword, String raceStatus, String raceVisibility, TrackedRegattaRegistry trackedRegattaRegistry)
throws URISyntaxException, MalformedURLException, FileNotFoundException, SubscriberInitializationException {
URL paramURL, URI liveURI, URI storedURI, URI tracTracUpdateURI, TimePoint startOfTracking,
TimePoint endOfTracking, long delayToLiveInMillis, boolean simulateWithStartTimeNow,
RaceLogStore raceLogStore, RegattaLogStore regattaLogStore, WindStore windStore, GPSFixStore gpsFixStore,
String tracTracUsername, String tracTracPassword, String raceStatus, String raceVisibility,
TrackedRegattaRegistry trackedRegattaRegistry) throws URISyntaxException, MalformedURLException,
FileNotFoundException, SubscriberInitializationException {
super();
this.trackedRegattaRegistry = trackedRegattaRegistry;
this.tractracRace = tractracRace;
@@ -380,7 +392,8 @@ public class TracTracRaceTrackerImpl extends AbstractRaceTrackerImpl implements
// if regatta is still null, no previous assignment of any of the races in this TracTrac event to a Regatta was
// found;
// in this case, create a default regatta based on the TracTrac event data
this.regatta = effectiveRegatta == null ? domainFactory.getOrCreateDefaultRegatta(raceLogStore, tractracRace, trackedRegattaRegistry) : effectiveRegatta;
this.regatta = effectiveRegatta == null ? domainFactory.getOrCreateDefaultRegatta(
raceLogStore, regattaLogStore, tractracRace, trackedRegattaRegistry) : effectiveRegatta;
trackedRegatta = trackedRegattaRegistry.getOrCreateTrackedRegatta(this.regatta);
receivers = new HashSet<Receiver>();
for (Receiver receiver : domainFactory.getUpdateReceivers(getTrackedRegatta(), delayToLiveInMillis,
@@ -20,6 +20,8 @@ Export-Package: com.sap.sailing.domain.base,
com.sap.sailing.domain.racelog,
com.sap.sailing.domain.racelog.impl,
com.sap.sailing.domain.racelog.tracking,
com.sap.sailing.domain.regattalog,
com.sap.sailing.domain.regattalog.impl,
com.sap.sailing.domain.trackfiles,
com.sap.sailing.domain.trackimport,
com.sap.sailing.domain.tracking,
@@ -1,5 +1,6 @@
package com.sap.sailing.domain.base;
import com.sap.sailing.domain.abstractlog.regatta.RegattaLog;
import com.sap.sailing.domain.base.configuration.RegattaConfiguration;
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
import com.sap.sailing.domain.common.RegattaIdentifier;
@@ -148,4 +149,8 @@ public interface Regatta extends Named, WithID {
*/
void setUseStartTimeInference(boolean useStartTimeInference);
/**
* @return The RegattaLog associated with this regatta.
*/
RegattaLog getRegattaLog();
}
@@ -11,6 +11,7 @@ import java.util.Set;
import java.util.logging.Logger;
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
import com.sap.sailing.domain.abstractlog.regatta.RegattaLog;
import com.sap.sailing.domain.base.BoatClass;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.CourseArea;
@@ -36,6 +37,8 @@ import com.sap.sailing.domain.racelog.RaceLogStore;
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
import com.sap.sailing.domain.racelog.impl.RaceLogInformationImpl;
import com.sap.sailing.domain.racelog.impl.RaceLogOnRegattaIdentifier;
import com.sap.sailing.domain.regattalog.RegattaLogStore;
import com.sap.sailing.domain.regattalog.impl.EmptyRegattaLogStore;
import com.sap.sailing.domain.tracking.TrackedRace;
import com.sap.sailing.domain.tracking.TrackedRegatta;
import com.sap.sailing.domain.tracking.TrackedRegattaRegistry;
@@ -69,6 +72,7 @@ public class RegattaImpl extends NamedImpl implements Regatta, RaceColumnListene
private final ScoringScheme scoringScheme;
private final Serializable id;
private transient RaceLogStore raceLogStore;
private final RegattaLog regattaLog;
private CourseArea defaultCourseArea;
private RegattaConfiguration configuration;
@@ -91,8 +95,10 @@ public class RegattaImpl extends NamedImpl implements Regatta, RaceColumnListene
/**
* Constructs a regatta with an empty {@link RaceLogStore}.
*/
public RegattaImpl(String name, BoatClass boatClass, Iterable<? extends Series> series, boolean persistent, ScoringScheme scoringScheme, Serializable id, CourseArea courseArea) {
this(EmptyRaceLogStore.INSTANCE, name, boatClass, series, persistent, scoringScheme, id, courseArea, /* useStartTimeInference */ true);
public RegattaImpl(String name, BoatClass boatClass, Iterable<? extends Series> series, boolean persistent,
ScoringScheme scoringScheme, Serializable id, CourseArea courseArea) {
this(EmptyRaceLogStore.INSTANCE, EmptyRegattaLogStore.INSTANCE, name, boatClass, series, persistent,
scoringScheme, id, courseArea, /* useStartTimeInference */ true);
}
/**
@@ -105,11 +111,14 @@ public class RegattaImpl extends NamedImpl implements Regatta, RaceColumnListene
* this column's series {@link Regatta}, respectively. If <code>null</code>, the re-association won't be
* carried out.
*/
public RegattaImpl(RaceLogStore raceLogStore, String name, BoatClass boatClass, TrackedRegattaRegistry trackedRegattaRegistry, ScoringScheme scoringScheme, Serializable id, CourseArea courseArea) {
this(raceLogStore, name, boatClass, Collections.singletonList(new SeriesImpl(LeaderboardNameConstants.DEFAULT_SERIES_NAME,
/* isMedal */false, Collections
.singletonList(new FleetImpl(LeaderboardNameConstants.DEFAULT_FLEET_NAME)), /* race column names */new ArrayList<String>(),
trackedRegattaRegistry)), /* persistent */false, scoringScheme, id, courseArea, /* useStartTimeInference */ true);
public RegattaImpl(RaceLogStore raceLogStore, RegattaLogStore regattaLogStore, String name, BoatClass boatClass,
TrackedRegattaRegistry trackedRegattaRegistry, ScoringScheme scoringScheme, Serializable id,
CourseArea courseArea) {
this(raceLogStore, regattaLogStore, name, boatClass, Collections.singletonList(
new SeriesImpl(LeaderboardNameConstants.DEFAULT_SERIES_NAME,
/* isMedal */false, Collections.singletonList(new FleetImpl(LeaderboardNameConstants.DEFAULT_FLEET_NAME)),
/* race column names */new ArrayList<String>(), trackedRegattaRegistry)), /* persistent */false,
scoringScheme, id, courseArea, /* useStartTimeInference */ true);
}
/**
@@ -117,7 +126,9 @@ public class RegattaImpl extends NamedImpl implements Regatta, RaceColumnListene
* all {@link Series} in this iterable will have their {@link Series#setRegatta(Regatta) regatta set} to
* this new regatta.
*/
public <S extends Series> RegattaImpl(RaceLogStore raceLogStore, String name, BoatClass boatClass, Iterable<S> series, boolean persistent, ScoringScheme scoringScheme, Serializable id, CourseArea courseArea, boolean useStartTimeInference) {
public <S extends Series> RegattaImpl(RaceLogStore raceLogStore, RegattaLogStore regattaLogStore,
String name, BoatClass boatClass, Iterable<S> series, boolean persistent, ScoringScheme scoringScheme,
Serializable id, CourseArea courseArea, boolean useStartTimeInference) {
super(name);
this.useStartTimeInference = useStartTimeInference;
this.id = id;
@@ -138,6 +149,7 @@ public class RegattaImpl extends NamedImpl implements Regatta, RaceColumnListene
this.scoringScheme = scoringScheme;
this.defaultCourseArea = courseArea;
this.configuration = null;
this.regattaLog = regattaLogStore.getRegattaLog(name, /*ignoreCache*/ true);
}
private void registerRaceLogsOnRaceColumns(Series series) {
@@ -497,4 +509,8 @@ public class RegattaImpl extends NamedImpl implements Regatta, RaceColumnListene
return useStartTimeInference;
}
@Override
public RegattaLog getRegattaLog() {
return regattaLog;
}
}
@@ -6,6 +6,7 @@ import java.util.Map;
import java.util.Set;
import java.util.concurrent.ExecutionException;
import com.sap.sailing.domain.abstractlog.regatta.RegattaLog;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.CourseArea;
import com.sap.sailing.domain.base.DomainFactory;
@@ -13,6 +14,7 @@ import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.LeaderboardBase;
import com.sap.sailing.domain.base.RaceColumn;
import com.sap.sailing.domain.base.RaceColumnListener;
import com.sap.sailing.domain.base.Regatta;
import com.sap.sailing.domain.base.Series;
import com.sap.sailing.domain.common.Distance;
import com.sap.sailing.domain.common.LegType;
@@ -509,4 +511,10 @@ public interface Leaderboard extends LeaderboardBase {
NumberOfCompetitorsInLeaderboardFetcher getNumberOfCompetitorsInLeaderboardFetcher();
/**
* @return The RegattaLog associated with this {@code Leaderboard}. Where this log actually lives may be different
* for different {@code Leaderboard} implementations (i.e. a {@link RegattaLeaderboard} returns the {@code RegattaLog}
* of its {@link Regatta#getRegattaLog Regatta}, whereas a {@link FlexibleLeaderboard} creates its own {@code RegattaLog}).
*/
RegattaLog getRegattaLog();
}
@@ -7,7 +7,7 @@ import com.sap.sailing.domain.base.LeaderboardGroupBase;
import com.sap.sse.common.WithID;
/**
* A leaderboard group is used to group one or more {@link Leaderboard}s. If can be used to represent all or part of the
* A leaderboard group is used to group one or more {@link Leaderboard}s. It can be used to represent all or part of the
* regattas of an event or to establish a collection of regattas or leaderboards otherwise belonging together according
* to some context. This could, for example, be a leaderboard group of all the interesting races in a particular boat
* class or races at a particular event over time.<p>
@@ -16,7 +16,7 @@ import com.sap.sse.common.WithID;
* cases where a user interface shall display the leaderboards in reverse insertion order. This behavior is described
* by {@link #isDisplayGroupsInReverseOrder()}.<p>
*
* Optionally, a leaderboard group can specify an "Overall Leaderboard." The typical use case for this is a regatta series
* Optionally, a leaderboard group can specify an "Overall Leaderboard". The typical use case for this is a regatta series
* such as the Extreme Sailing Series or the German Sailing League ("Bundesliga") where several regatta results are
* combined into a series score. The overall leaderboard, if defined, has its own scoring scheme and obtains its
* "tracked results" from the results of the respective leaderboard. Each leaderboard in this group then represents
@@ -9,6 +9,7 @@ import java.util.Collections;
import java.util.List;
import java.util.logging.Logger;
import com.sap.sailing.domain.abstractlog.regatta.RegattaLog;
import com.sap.sailing.domain.base.CourseArea;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.RaceColumn;
@@ -22,6 +23,8 @@ import com.sap.sailing.domain.racelog.RaceLogStore;
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
import com.sap.sailing.domain.racelog.impl.RaceLogInformationImpl;
import com.sap.sailing.domain.racelog.impl.RaceLogOnLeaderboardIdentifier;
import com.sap.sailing.domain.regattalog.RegattaLogStore;
import com.sap.sailing.domain.regattalog.impl.EmptyRegattaLogStore;
import com.sap.sailing.domain.tracking.TrackedRace;
/**
@@ -44,13 +47,20 @@ public class FlexibleLeaderboardImpl extends AbstractLeaderboardImpl implements
private String name;
private transient RaceLogStore raceLogStore;
private CourseArea courseArea;
/**
* @see RegattaLog for the reason why the leaderboard manages a {@code RegattaLog}
*/
private final RegattaLog regattaLog;
public FlexibleLeaderboardImpl(String name, ThresholdBasedResultDiscardingRule resultDiscardingRule,
ScoringScheme scoringScheme, CourseArea courseArea) {
this(EmptyRaceLogStore.INSTANCE, name, resultDiscardingRule, scoringScheme, courseArea);
this(EmptyRaceLogStore.INSTANCE, EmptyRegattaLogStore.INSTANCE,
name, resultDiscardingRule, scoringScheme, courseArea);
}
public FlexibleLeaderboardImpl(RaceLogStore raceLogStore, String name, ThresholdBasedResultDiscardingRule resultDiscardingRule,
public FlexibleLeaderboardImpl(RaceLogStore raceLogStore, RegattaLogStore regattaLogStore,
String name, ThresholdBasedResultDiscardingRule resultDiscardingRule,
ScoringScheme scoringScheme, CourseArea courseArea) {
super(resultDiscardingRule);
this.scoringScheme = scoringScheme;
@@ -61,6 +71,7 @@ public class FlexibleLeaderboardImpl extends AbstractLeaderboardImpl implements
this.races = new ArrayList<FlexibleRaceColumn>();
this.raceLogStore = raceLogStore;
this.courseArea = courseArea;
this.regattaLog = regattaLogStore.getRegattaLog(name, /*ignoreCache*/ true);
}
/**
@@ -242,4 +253,8 @@ public class FlexibleLeaderboardImpl extends AbstractLeaderboardImpl implements
this.courseArea = newCourseArea;
}
@Override
public RegattaLog getRegattaLog() {
return regattaLog;
}
}
@@ -3,6 +3,7 @@ package com.sap.sailing.domain.leaderboard.impl;
import java.util.ArrayList;
import java.util.List;
import com.sap.sailing.domain.abstractlog.regatta.RegattaLog;
import com.sap.sailing.domain.base.CourseArea;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.RaceColumn;
@@ -95,6 +96,9 @@ public class RegattaLeaderboardImpl extends AbstractLeaderboardImpl implements R
}
}
@Override
public RegattaLog getRegattaLog() {
return regatta.getRegattaLog();
}
}
@@ -12,6 +12,7 @@ import java.util.Map;
import java.util.Set;
import java.util.WeakHashMap;
import com.sap.sailing.domain.abstractlog.regatta.RegattaLog;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.RaceColumn;
@@ -25,6 +26,7 @@ import com.sap.sailing.domain.leaderboard.ScoringScheme;
import com.sap.sailing.domain.leaderboard.SettableScoreCorrection;
import com.sap.sailing.domain.leaderboard.ThresholdBasedResultDiscardingRule;
import com.sap.sailing.domain.leaderboard.impl.AbstractSimpleLeaderboardImpl;
import com.sap.sailing.domain.regattalog.RegattaLogStore;
import com.sap.sailing.domain.tracking.TrackedRace;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.Util;
@@ -52,6 +54,7 @@ public abstract class AbstractMetaLeaderboard extends AbstractSimpleLeaderboardI
private final Fleet metaFleet;
private final ScoringScheme scoringScheme;
private final String name;
private final RegattaLog regattaLog;
/**
* Weak hash maps cannot be serialized. Therefore, this field is serialized as a {@link HashMap} in {@link #writeObject(ObjectOutputStream)}
@@ -90,13 +93,15 @@ public abstract class AbstractMetaLeaderboard extends AbstractSimpleLeaderboardI
}
}
public AbstractMetaLeaderboard(String name, ScoringScheme scoringScheme, ThresholdBasedResultDiscardingRule resultDiscardingRule) {
public AbstractMetaLeaderboard(String name, ScoringScheme scoringScheme,
ThresholdBasedResultDiscardingRule resultDiscardingRule, RegattaLogStore regattaLogStore) {
super(resultDiscardingRule);
metaFleet = new FleetImpl("MetaFleet");
this.scoringScheme = scoringScheme;
this.name = name;
columnsForLeaderboards = new WeakHashMap<>();
scoreCorrectionChangeForwardersByLeaderboard = new WeakHashMap<Leaderboard, ScoreCorrectionListener>();
regattaLog = regattaLogStore.getRegattaLog(name, /*ignoreCache*/ true);
}
@Override
@@ -223,5 +228,10 @@ public abstract class AbstractMetaLeaderboard extends AbstractSimpleLeaderboardI
public String getName() {
return name;
}
@Override
public RegattaLog getRegattaLog() {
return regattaLog;
}
}
@@ -7,6 +7,7 @@ import com.sap.sailing.domain.base.CourseArea;
import com.sap.sailing.domain.leaderboard.Leaderboard;
import com.sap.sailing.domain.leaderboard.ScoringScheme;
import com.sap.sailing.domain.leaderboard.ThresholdBasedResultDiscardingRule;
import com.sap.sailing.domain.regattalog.RegattaLogStore;
import com.sap.sailing.util.impl.LockUtil;
import com.sap.sailing.util.impl.NamedReentrantReadWriteLock;
@@ -18,8 +19,8 @@ public class FlexibleMetaLeaderboard extends AbstractMetaLeaderboard {
private final NamedReentrantReadWriteLock leaderboardsLock;
public FlexibleMetaLeaderboard(String name, ScoringScheme scoringScheme,
ThresholdBasedResultDiscardingRule resultDiscardingRule) {
super(name, scoringScheme, resultDiscardingRule);
ThresholdBasedResultDiscardingRule resultDiscardingRule, RegattaLogStore regattaLogStore) {
super(name, scoringScheme, resultDiscardingRule, regattaLogStore);
leaderboards = new ArrayList<Leaderboard>();
leaderboardsLock = new NamedReentrantReadWriteLock("leaderboards collection of "+FlexibleMetaLeaderboard.class.getSimpleName()+" "+getName(),
/* fair */ false);
@@ -11,6 +11,7 @@ import com.sap.sailing.domain.leaderboard.LeaderboardGroup;
import com.sap.sailing.domain.leaderboard.LeaderboardGroupListener;
import com.sap.sailing.domain.leaderboard.ScoringScheme;
import com.sap.sailing.domain.leaderboard.ThresholdBasedResultDiscardingRule;
import com.sap.sailing.domain.regattalog.RegattaLogStore;
import com.sap.sailing.domain.tracking.TrackedRace;
/**
@@ -38,8 +39,9 @@ public class LeaderboardGroupMetaLeaderboard extends AbstractMetaLeaderboard imp
private final LeaderboardGroup leaderboardGroup;
public LeaderboardGroupMetaLeaderboard(LeaderboardGroup leaderboardGroup, ScoringScheme scoringScheme,
ThresholdBasedResultDiscardingRule resultDiscardingRule) {
super(leaderboardGroup.getName()+" "+LeaderboardNameConstants.OVERALL, scoringScheme, resultDiscardingRule);
ThresholdBasedResultDiscardingRule resultDiscardingRule, RegattaLogStore regattaLogStore) {
super(leaderboardGroup.getName() + " " + LeaderboardNameConstants.OVERALL, scoringScheme, resultDiscardingRule,
regattaLogStore);
this.leaderboardGroup = leaderboardGroup;
leaderboardGroup.addLeaderboardGroupListener(this);
registerAsScoreCorrectionChangeForwarderAndRaceColumnListenerOnAllLeaderboards();
@@ -0,0 +1,29 @@
package com.sap.sailing.domain.regattalog;
import com.sap.sailing.domain.abstractlog.regatta.RegattaLog;
import com.sap.sailing.domain.base.Regatta;
import com.sap.sailing.domain.leaderboard.FlexibleLeaderboard;
import com.sap.sailing.domain.racelog.RaceLogIdentifierTemplate;
import com.sap.sse.common.Named;
public interface RegattaLogStore {
/**
* @param parentObjectName This is the {@link Named#getName name} of the domain object
* that manages the {@code RegattaLog} - either a {@link Regatta} or {@link FlexibleLeaderboard}.
* The {@link RaceLogIdentifierTemplate} internally also only uses the name of these elements to
* identify them.
* Clashes are avoided only on UI level, where unique leaderboard names are enforced. As a RegattaLeaderboard
* always carries the name of its Regatta this is somewhat safe.
*/
RegattaLog getRegattaLog(String parentObjectName, boolean ignoreCache);
/**
* Removes all events stored for the log identified by {@code parentObjectName} from the database and
* from the cache.
*/
void removeRegattaLog(String parentObjectName);
void removeListenersAddedByStoreFrom(RegattaLog regattaLog);
}
@@ -0,0 +1,25 @@
package com.sap.sailing.domain.regattalog.impl;
import java.util.UUID;
import com.sap.sailing.domain.abstractlog.regatta.RegattaLog;
import com.sap.sailing.domain.abstractlog.regatta.impl.RegattaLogImpl;
import com.sap.sailing.domain.regattalog.RegattaLogStore;
public enum EmptyRegattaLogStore implements RegattaLogStore {
INSTANCE;
@Override
public RegattaLog getRegattaLog(String parentObjectName, boolean ignoreCache) {
return new RegattaLogImpl(parentObjectName, UUID.randomUUID());
}
@Override
public void removeRegattaLog(String parentObjectName) {
}
@Override
public void removeListenersAddedByStoreFrom(RegattaLog regattaLog) {
}
}
@@ -6,6 +6,7 @@ import java.util.NavigableSet;
import java.util.Set;
import com.sap.sailing.domain.abstractlog.race.RaceLog;
import com.sap.sailing.domain.abstractlog.regatta.RegattaLog;
import com.sap.sailing.domain.base.BoatClass;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.CourseArea;
@@ -466,6 +467,12 @@ public class MockedTrackedRace implements DynamicTrackedRace {
// TODO Auto-generated method stub
}
@Override
public RegattaLog getRegattaLog() {
// TODO Auto-generated method stub
return null;
}
};
}
@@ -22,6 +22,7 @@ import com.sap.sailing.domain.racelog.RaceLogStore;
import com.sap.sailing.domain.racelog.tracking.test.mock.MockSmartphoneImeiServiceFinderFactory;
import com.sap.sailing.domain.racelogtracking.RaceLogTrackingAdapterFactory;
import com.sap.sailing.domain.racelogtracking.impl.RaceLogTrackingAdapterFactoryImpl;
import com.sap.sailing.domain.regattalog.RegattaLogStore;
import com.sap.sailing.domain.swisstimingadapter.StartList;
import com.sap.sailing.domain.swisstimingadapter.SwissTimingAdapter;
import com.sap.sailing.domain.swisstimingadapter.SwissTimingAdapterFactory;
@@ -115,10 +116,10 @@ public class SailingServiceImplMock extends SailingServiceImpl {
@Override
public RaceHandle addSwissTimingRace(TrackerManager trackerManager,
RegattaIdentifier regattaToAddTo, String raceID, String raceName, String raceDescription, BoatClass boatClass, String hostname,
int port, StartList startList, RaceLogStore logStore, long timeoutInMilliseconds)
throws InterruptedException, UnknownHostException, IOException, ParseException,
Exception {
RegattaIdentifier regattaToAddTo, String raceID, String raceName, String raceDescription,
BoatClass boatClass, String hostname, int port, StartList startList, RaceLogStore logStore,
RegattaLogStore regattaLogStore, long timeoutInMilliseconds) throws InterruptedException,
UnknownHostException, IOException, ParseException, Exception {
// TODO Auto-generated method stub
return null;
}
@@ -209,6 +209,7 @@ 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.polarsheets.PolarSheetGenerationWorker;
import com.sap.sailing.domain.racelog.RaceLogStore;
import com.sap.sailing.domain.racelog.RaceStateOfSameDayHelper;
import com.sap.sailing.domain.racelogtracking.DeviceIdentifier;
import com.sap.sailing.domain.racelogtracking.DeviceIdentifierStringSerializationHandler;
@@ -216,6 +217,7 @@ import com.sap.sailing.domain.racelogtracking.DeviceMapping;
import com.sap.sailing.domain.racelogtracking.RaceLogTrackingAdapter;
import com.sap.sailing.domain.racelogtracking.RaceLogTrackingAdapterFactory;
import com.sap.sailing.domain.racelogtracking.impl.DeviceMappingImpl;
import com.sap.sailing.domain.regattalog.RegattaLogStore;
import com.sap.sailing.domain.swisstimingadapter.StartList;
import com.sap.sailing.domain.swisstimingadapter.SwissTimingAdapter;
import com.sap.sailing.domain.swisstimingadapter.SwissTimingAdapterFactory;
@@ -1073,7 +1075,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
new URI(effectiveStoredURI), new URI(courseDesignUpdateURI),
new MillisecondsTimePoint(record.getTrackingStartTime().asMillis()),
new MillisecondsTimePoint(record.getTrackingEndTime().asMillis()),
MongoRaceLogStoreFactory.INSTANCE.getMongoRaceLogStore(mongoObjectFactory, domainObjectFactory),
getRaceLogStore(), getRegattaLogStore(),
RaceTracker.TIMEOUT_FOR_RECEIVING_RACE_DEFINITION_IN_MILLISECONDS, simulateWithStartTimeNow,
tracTracUsername, tracTracPassword,
record.getRaceStatus(), record.getRaceVisibility());
@@ -2615,6 +2617,16 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
swissTimingAdapterPersistence.storeSwissTimingConfiguration(swissTimingFactory.createSwissTimingConfiguration(configName, jsonURL, hostname, port));
}
}
private RaceLogStore getRaceLogStore() {
return MongoRaceLogStoreFactory.INSTANCE.getMongoRaceLogStore(mongoObjectFactory,
domainObjectFactory);
}
private RegattaLogStore getRegattaLogStore() {
return MongoRegattaLogStoreFactory.INSTANCE.getMongoRegattaLogStore(
mongoObjectFactory, domainObjectFactory);
}
@Override
public void trackWithSwissTiming(RegattaIdentifier regattaToAddTo, Iterable<SwissTimingRaceRecordDTO> rrs, String hostname, int port,
@@ -2640,9 +2652,10 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
startList = getSwissTimingAdapter().readStartListForRace(rr.raceId, regattaResults);
}
// now read the entry list for the race from the result
final RaceHandle raceHandle = getSwissTimingAdapter().addSwissTimingRace(getService(), regattaToAddTo, rr.raceId, rr.getName(), raceDescription,
boatClass, hostname, port, startList,
MongoRaceLogStoreFactory.INSTANCE.getMongoRaceLogStore(mongoObjectFactory, domainObjectFactory), RaceTracker.TIMEOUT_FOR_RECEIVING_RACE_DEFINITION_IN_MILLISECONDS);
final RaceHandle raceHandle = getSwissTimingAdapter().addSwissTimingRace(getService(), regattaToAddTo,
rr.raceId, rr.getName(), raceDescription, boatClass, hostname, port, startList,
getRaceLogStore(), getRegattaLogStore(),
RaceTracker.TIMEOUT_FOR_RECEIVING_RACE_DEFINITION_IN_MILLISECONDS);
if (trackWind) {
new Thread("Wind tracking starter for race " + rr.raceId + "/" + rr.getName()) {
public void run() {
@@ -22,9 +22,7 @@ import com.sap.sailing.domain.common.ScoringSchemeType;
import com.sap.sailing.domain.leaderboard.ScoringScheme;
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.PersistenceFactory;
import com.sap.sailing.domain.racelog.RaceLogStore;
import com.sap.sse.common.impl.MillisecondsTimePoint;
public abstract class AbstractTestStoringAndRetrievingRaceLogInRegatta extends RaceLogMongoDBTest {
@@ -61,9 +59,7 @@ public abstract class AbstractTestStoringAndRetrievingRaceLogInRegatta extends R
private Regatta createRegattaWithoutRaceColumns(final String regattaBaseName, BoatClass boatClass,
boolean persistent, ScoringScheme scoringScheme, CourseArea courseArea) {
List<Series> series = createSeriesForTestRegatta();
RaceLogStore raceLogStore = MongoRaceLogStoreFactory.INSTANCE.getMongoRaceLogStore(mongoObjectFactory,
domainObjectFactory);
Regatta regatta = new RegattaImpl(raceLogStore, RegattaImpl.getDefaultName(regattaBaseName,
Regatta regatta = new RegattaImpl(getRaceLogStore(), getRegattaLogStore(), RegattaImpl.getDefaultName(regattaBaseName,
boatClass == null ? null : boatClass.getName()), boatClass, series, persistent, scoringScheme, "123",
courseArea, /* useStartTimeInference */true);
return regatta;
@@ -26,6 +26,9 @@ import com.sap.sailing.domain.common.impl.DegreePosition;
import com.sap.sailing.domain.common.impl.KnotSpeedWithBearingImpl;
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.racelog.RaceLogStore;
import com.sap.sailing.domain.regattalog.RegattaLogStore;
import com.sap.sailing.domain.tracking.Wind;
import com.sap.sailing.domain.tracking.impl.WindImpl;
import com.sap.sse.common.TimePoint;
@@ -106,5 +109,13 @@ public abstract class RaceLogMongoDBTest extends AbstractMongoDBTest {
SpeedWithBearing speedBearing = new KnotSpeedWithBearingImpl(10.4, bearing);
return new WindImpl(position, now, speedBearing);
}
protected RaceLogStore getRaceLogStore() {
return MongoRaceLogStoreFactory.INSTANCE.getMongoRaceLogStore(mongoObjectFactory, domainObjectFactory);
}
protected RegattaLogStore getRegattaLogStore() {
return MongoRegattaLogStoreFactory.INSTANCE.getMongoRegattaLogStore(mongoObjectFactory, domainObjectFactory);
}
}
@@ -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.racelog.tracking.EmptyGPSFixStore;
import com.sap.sailing.domain.regattalog.impl.EmptyRegattaLogStore;
import com.sap.sailing.domain.test.mock.MockedTrackedRaceWithFixedRankAndManyCompetitors;
import com.sap.sailing.domain.tracking.impl.EmptyWindStore;
import com.sap.sailing.server.RacingEventService;
@@ -98,7 +99,8 @@ public class TestStoringAndRetrievingLeaderboardGroups extends AbstractMongoDBTe
final LeaderboardGroup leaderboardGroup = new LeaderboardGroupImpl(groupName, groupDescription, /* displayName */ null, false, leaderboards);
final Leaderboard overallLeaderboard = new LeaderboardGroupMetaLeaderboard(leaderboardGroup,
new HighPointExtremeSailingSeriesOverall(), new ThresholdBasedResultDiscardingRuleImpl(new int[0]));
new HighPointExtremeSailingSeriesOverall(), new ThresholdBasedResultDiscardingRuleImpl(new int[0]),
EmptyRegattaLogStore.INSTANCE);
leaderboardGroup.setOverallLeaderboard(overallLeaderboard);
mongoObjectFactory.storeLeaderboardGroup(leaderboardGroup);
@@ -205,7 +207,8 @@ public class TestStoringAndRetrievingLeaderboardGroups extends AbstractMongoDBTe
final LeaderboardGroup leaderboardGroup = new LeaderboardGroupImpl(groupName, groupDescription, /* displayName */ null, false, leaderboards);
final Leaderboard overallLeaderboard = new LeaderboardGroupMetaLeaderboard(leaderboardGroup,
new HighPointExtremeSailingSeriesOverall(), new ThresholdBasedResultDiscardingRuleImpl(new int[0]));
new HighPointExtremeSailingSeriesOverall(), new ThresholdBasedResultDiscardingRuleImpl(new int[0]),
EmptyRegattaLogStore.INSTANCE);
leaderboardGroup.setOverallLeaderboard(overallLeaderboard);
overallLeaderboard.setSuppressed(wolfgang, true);
mongoObjectFactory.storeLeaderboardGroup(leaderboardGroup);
@@ -261,7 +264,8 @@ public class TestStoringAndRetrievingLeaderboardGroups extends AbstractMongoDBTe
final LeaderboardGroup leaderboardGroup = new LeaderboardGroupImpl(groupName, groupDescription, /* displayName */ null, false, leaderboards);
final Leaderboard overallLeaderboard = new LeaderboardGroupMetaLeaderboard(leaderboardGroup,
new HighPointExtremeSailingSeriesOverall(), new ThresholdBasedResultDiscardingRuleImpl(new int[0]));
new HighPointExtremeSailingSeriesOverall(), new ThresholdBasedResultDiscardingRuleImpl(new int[0]),
EmptyRegattaLogStore.INSTANCE);
leaderboardGroup.setOverallLeaderboard(overallLeaderboard);
overallLeaderboard.setSuppressed(wolfgang, true);
overallLeaderboard.setSuppressed(hasso, true);
@@ -55,12 +55,10 @@ import com.sap.sailing.domain.leaderboard.Leaderboard;
import com.sap.sailing.domain.leaderboard.impl.FlexibleLeaderboardImpl;
import com.sap.sailing.domain.leaderboard.impl.LowPoint;
import com.sap.sailing.domain.leaderboard.impl.ThresholdBasedResultDiscardingRuleImpl;
import com.sap.sailing.domain.persistence.MongoRaceLogStoreFactory;
import com.sap.sailing.domain.persistence.PersistenceFactory;
import com.sap.sailing.domain.persistence.impl.FieldNames;
import com.sap.sailing.domain.persistence.impl.MongoObjectFactoryImpl;
import com.sap.sailing.domain.persistence.impl.MongoUtils;
import com.sap.sailing.domain.racelog.RaceLogStore;
import com.sap.sailing.domain.tracking.Wind;
import com.sap.sailing.server.impl.RacingEventServiceImpl;
import com.sap.sse.common.Util;
@@ -81,9 +79,10 @@ public class TestStoringAndRetrievingRaceLogInLeaderboards extends RaceLogMongoD
public void setUp() {
now = MillisecondsTimePoint.now();
mongoObjectFactory = PersistenceFactory.INSTANCE.getMongoObjectFactory(getMongoService());
domainObjectFactory = PersistenceFactory.INSTANCE.getDomainObjectFactory(getMongoService(), DomainFactory.INSTANCE);
RaceLogStore raceLogStore = MongoRaceLogStoreFactory.INSTANCE.getMongoRaceLogStore(mongoObjectFactory, domainObjectFactory);
leaderboard = new FlexibleLeaderboardImpl(raceLogStore, leaderboardName, new ThresholdBasedResultDiscardingRuleImpl(discardIndexResultsStartingWithHowManyRaces),
domainObjectFactory = PersistenceFactory.INSTANCE.getDomainObjectFactory(getMongoService(),
DomainFactory.INSTANCE);
leaderboard = new FlexibleLeaderboardImpl(getRaceLogStore(), getRegattaLogStore(), leaderboardName,
new ThresholdBasedResultDiscardingRuleImpl(discardIndexResultsStartingWithHowManyRaces),
new LowPoint(), null);
leaderboard.addRaceColumn(raceColumnName, /* medalRace */false);
}
@@ -29,6 +29,7 @@ import com.sap.sailing.domain.persistence.impl.DomainObjectFactoryImpl;
import com.sap.sailing.domain.persistence.impl.MongoObjectFactoryImpl;
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
import com.sap.sailing.domain.racelog.tracking.EmptyGPSFixStore;
import com.sap.sailing.domain.regattalog.impl.EmptyRegattaLogStore;
import com.sap.sailing.domain.test.AbstractTracTracLiveTest;
import com.sap.sailing.domain.tracking.DynamicRaceDefinitionSet;
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
@@ -75,10 +76,11 @@ public class TestStoringAndRetrievingWindTracksTest extends AbstractTracTracLive
@Test
public void testStoreAFewWindEntries() throws UnknownHostException, MongoException, InterruptedException {
DomainFactory domainFactory = DomainFactory.INSTANCE;
Regatta domainEvent = domainFactory.getOrCreateDefaultRegatta(EmptyRaceLogStore.INSTANCE, getTracTracRace(), /* trackedRegattaRegistry */ null);
Regatta domainEvent = domainFactory.getOrCreateDefaultRegatta(EmptyRaceLogStore.INSTANCE,
EmptyRegattaLogStore.INSTANCE, getTracTracRace(), /* trackedRegattaRegistry */null);
DynamicTrackedRegatta trackedRegatta = new RacingEventServiceImpl().getOrCreateTrackedRegatta(domainEvent);
Iterable<Receiver> typeControllers = domainFactory.getUpdateReceivers(trackedRegatta, Util.get(getTracTracEvent().getRaces(), 0),
EmptyWindStore.INSTANCE,
Iterable<Receiver> typeControllers = domainFactory.getUpdateReceivers(trackedRegatta,
Util.get(getTracTracEvent().getRaces(), 0), EmptyWindStore.INSTANCE,
0l, /* simulator */ null, /* delayToLiveInMillis */
new DynamicRaceDefinitionSet() {
@Override
@@ -28,6 +28,7 @@ import com.sap.sailing.domain.common.impl.WindSourceImpl;
import com.sap.sailing.domain.leaderboard.Leaderboard;
import com.sap.sailing.domain.leaderboard.impl.LowPoint;
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
import com.sap.sailing.domain.regattalog.impl.EmptyRegattaLogStore;
import com.sap.sailing.domain.test.AbstractTracTracLiveTest;
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
import com.sap.sailing.domain.tracking.RaceHandle;
@@ -84,9 +85,11 @@ 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, tracTracUsername, tracTracPassword, "", "");
trackingParams = com.sap.sailing.domain.tractracadapter.DomainFactory.INSTANCE
.createTrackingConnectivityParameters(paramURL, liveURI, storedURI, courseDesignUpdateURI,
startOfTracking, endOfTracking, /* delayToLiveInMillis */
0l, /* simulateWithStartTimeNow */false, EmptyRaceLogStore.INSTANCE,
EmptyRegattaLogStore.INSTANCE, tracTracUsername, tracTracPassword, "", "");
}
private void startTracking() throws Exception, InterruptedException {
@@ -34,6 +34,7 @@ import com.sap.sailing.domain.base.impl.RegattaImpl;
import com.sap.sailing.domain.common.ScoringSchemeType;
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
import com.sap.sailing.domain.racelog.tracking.EmptyGPSFixStore;
import com.sap.sailing.domain.regattalog.impl.EmptyRegattaLogStore;
import com.sap.sailing.domain.tracking.RaceTracker;
import com.sap.sailing.domain.tracking.TrackedRace;
import com.sap.sailing.domain.tracking.TrackedRegatta;
@@ -65,8 +66,9 @@ public class RaceTrackerStartStopTest {
public void setUp() {
racingEventService = new RacingEventServiceImplMock();
boatClass = new BoatClassImpl(BOATCLASSNAME, /* typicallyStartsUpwind */ true);
regatta = new RegattaImpl(EmptyRaceLogStore.INSTANCE, RegattaImpl.getDefaultName(EVENTNAME, boatClass.getName()), boatClass, /* trackedRegattaRegistry */ null,
DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), UUID.randomUUID(), null);
regatta = new RegattaImpl(EmptyRaceLogStore.INSTANCE, EmptyRegattaLogStore.INSTANCE,
RegattaImpl.getDefaultName(EVENTNAME, boatClass.getName()), boatClass, /* trackedRegattaRegistry */
null, DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), UUID.randomUUID(), null);
racingEventService.getRegattasByName().put(EVENTNAME, regatta);
TrackedRegatta trackedRegatta1 = racingEventService.getOrCreateTrackedRegatta(regatta);
racingEventService.getRegattasByName().put(EVENTNAME, regatta);
@@ -18,6 +18,7 @@ import org.junit.Test;
import com.sap.sailing.domain.base.RaceDefinition;
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
import com.sap.sailing.domain.regattalog.impl.EmptyRegattaLogStore;
import com.sap.sailing.domain.tracking.RaceHandle;
import com.sap.sailing.domain.tracking.RaceListener;
import com.sap.sailing.domain.tracking.TrackedRace;
@@ -68,9 +69,11 @@ public class RaceTrackerTest {
service = new RacingEventServiceImpl();
logger.info("Calling service.addTracTracRace");
tracTracAdapterFactory = new TracTracAdapterFactoryImpl();
raceHandle = tracTracAdapterFactory.getOrCreateTracTracAdapter(service.getBaseDomainFactory())
.addTracTracRace(service, paramUrl, liveUri, storedUri, courseDesignUpdateUri, EmptyRaceLogStore.INSTANCE,
/* timeoutInMilliseconds */60000, tracTracUsername, tracTracPassword, TracTracConnectionConstants.ONLINE_STATUS, TracTracConnectionConstants.ONLINE_VISIBILITY);
raceHandle = tracTracAdapterFactory.getOrCreateTracTracAdapter(service.getBaseDomainFactory()).addTracTracRace(
service, paramUrl, liveUri, storedUri, courseDesignUpdateUri, EmptyRaceLogStore.INSTANCE,
EmptyRegattaLogStore.INSTANCE,
/* timeoutInMilliseconds */60000, tracTracUsername, tracTracPassword,
TracTracConnectionConstants.ONLINE_STATUS, TracTracConnectionConstants.ONLINE_VISIBILITY);
logger.info("Calling raceHandle.getRaces()");
RaceDefinition race = raceHandle.getRace(); // wait for RaceDefinition to be completely wired in Regatta
logger.info("Obtained race: "+race);
@@ -126,9 +129,10 @@ public class RaceTrackerTest {
assertTrue(!Util.isEmpty(raceHandle.getRegatta().getAllRaces()));
service.removeRegatta(raceHandle.getRegatta());
RaceHandle myRaceHandle = tracTracAdapterFactory.getOrCreateTracTracAdapter(service.getBaseDomainFactory())
.addTracTracRace(service, paramUrl, liveUri, storedUri, courseDesignUpdateUri, EmptyRaceLogStore.INSTANCE,
/* timeoutInMilliseconds */60000, tracTracUsername, tracTracPassword, TracTracConnectionConstants.ONLINE_STATUS,
TracTracConnectionConstants.ONLINE_VISIBILITY);
.addTracTracRace(service, paramUrl, liveUri, storedUri, courseDesignUpdateUri,
EmptyRaceLogStore.INSTANCE, EmptyRegattaLogStore.INSTANCE,
/* timeoutInMilliseconds */60000, tracTracUsername, tracTracPassword,
TracTracConnectionConstants.ONLINE_STATUS, TracTracConnectionConstants.ONLINE_VISIBILITY);
TrackedRegatta newTrackedRegatta = myRaceHandle.getTrackedRegatta();
assertNotSame(oldTrackedRegatta, newTrackedRegatta);
TrackedRace newTrackedRace = getTrackedRace(newTrackedRegatta);
@@ -153,9 +157,10 @@ public class RaceTrackerTest {
TrackedRegatta oldTrackedRegatta = raceHandle.getTrackedRegatta();
TrackedRace oldTrackedRace = getTrackedRace(oldTrackedRegatta);
RaceHandle myRaceHandle = tracTracAdapterFactory.getOrCreateTracTracAdapter(service.getBaseDomainFactory())
.addTracTracRace(service, paramUrl, liveUri, storedUri, courseDesignUpdateUri, EmptyRaceLogStore.INSTANCE,
/* timeoutInMilliseconds */60000, tracTracUsername, tracTracPassword, TracTracConnectionConstants.ONLINE_STATUS,
TracTracConnectionConstants.ONLINE_VISIBILITY);
.addTracTracRace(service, paramUrl, liveUri, storedUri, courseDesignUpdateUri,
EmptyRaceLogStore.INSTANCE, EmptyRegattaLogStore.INSTANCE,
/* timeoutInMilliseconds */60000, tracTracUsername, tracTracPassword,
TracTracConnectionConstants.ONLINE_STATUS, TracTracConnectionConstants.ONLINE_VISIBILITY);
TrackedRegatta newTrackedEvent = myRaceHandle.getTrackedRegatta();
TrackedRace newTrackedRace = getTrackedRace(newTrackedEvent);
// expecting a new tracked race to be created when starting over with tracking
@@ -118,6 +118,7 @@ import com.sap.sailing.domain.racelog.RaceLogIdentifier;
import com.sap.sailing.domain.racelog.RaceLogStore;
import com.sap.sailing.domain.racelog.tracking.GPSFixStore;
import com.sap.sailing.domain.racelogtracking.DeviceIdentifier;
import com.sap.sailing.domain.regattalog.RegattaLogStore;
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
import com.sap.sailing.domain.tracking.DynamicTrackedRegatta;
import com.sap.sailing.domain.tracking.GPSFix;
@@ -628,10 +629,8 @@ public class RacingEventServiceImpl implements RacingEventServiceWithTestSupport
public FlexibleLeaderboard addFlexibleLeaderboard(String leaderboardName, String leaderboardDisplayName,
int[] discardThresholds, ScoringScheme scoringScheme, Serializable courseAreaId) {
logger.info("adding flexible leaderboard " + leaderboardName);
RaceLogStore raceLogStore = MongoRaceLogStoreFactory.INSTANCE.getMongoRaceLogStore(mongoObjectFactory,
domainObjectFactory);
CourseArea courseArea = getCourseArea(courseAreaId);
FlexibleLeaderboard result = new FlexibleLeaderboardImpl(raceLogStore, leaderboardName,
FlexibleLeaderboard result = new FlexibleLeaderboardImpl(getRaceLogStore(), getRegattaLogStore(), leaderboardName,
new ThresholdBasedResultDiscardingRuleImpl(discardThresholds), scoringScheme, courseArea);
result.setDisplayName(leaderboardDisplayName);
if (getLeaderboardByName(leaderboardName) != null) {
@@ -991,10 +990,9 @@ public class RacingEventServiceImpl implements RacingEventServiceWithTestSupport
public Regatta getOrCreateDefaultRegatta(String name, String boatClassName, Serializable id) {
Regatta result = regattasByName.get(name);
if (result == null) {
RaceLogStore raceLogStore = MongoRaceLogStoreFactory.INSTANCE.getMongoRaceLogStore(mongoObjectFactory,
domainObjectFactory);
result = new RegattaImpl(raceLogStore, name, getBaseDomainFactory().getOrCreateBoatClass(boatClassName),
this, getBaseDomainFactory().createScoringScheme(ScoringSchemeType.LOW_POINT), id, null);
result = new RegattaImpl(getRaceLogStore(), getRegattaLogStore(), name, getBaseDomainFactory().getOrCreateBoatClass(
boatClassName), this, getBaseDomainFactory().createScoringScheme(ScoringSchemeType.LOW_POINT), id,
null);
logger.info("Created default regatta " + result.getName() + " (" + hashCode() + ") on " + this);
cacheAndReplicateDefaultRegatta(result);
}
@@ -1026,15 +1024,21 @@ public class RacingEventServiceImpl implements RacingEventServiceWithTestSupport
logger.info("Regatta with name " + regatta.getName() + " already existed, so it hasn't been added.");
}
}
private RaceLogStore getRaceLogStore() {
return MongoRaceLogStoreFactory.INSTANCE.getMongoRaceLogStore(mongoObjectFactory, domainObjectFactory);
}
private RegattaLogStore getRegattaLogStore() {
return MongoRegattaLogStoreFactory.INSTANCE.getMongoRegattaLogStore(mongoObjectFactory, domainObjectFactory);
}
@Override
public com.sap.sse.common.Util.Pair<Regatta, Boolean> getOrCreateRegattaWithoutReplication(String fullRegattaName,
String boatClassName, Serializable id, Iterable<? extends Series> series, boolean persistent,
ScoringScheme scoringScheme, Serializable defaultCourseAreaId, boolean useStartTimeInference) {
RaceLogStore raceLogStore = MongoRaceLogStoreFactory.INSTANCE.getMongoRaceLogStore(mongoObjectFactory,
domainObjectFactory);
CourseArea courseArea = getCourseArea(defaultCourseAreaId);
Regatta regatta = new RegattaImpl(raceLogStore, fullRegattaName, getBaseDomainFactory().getOrCreateBoatClass(
Regatta regatta = new RegattaImpl(getRaceLogStore(), getRegattaLogStore(), fullRegattaName, getBaseDomainFactory().getOrCreateBoatClass(
boatClassName), series, persistent, scoringScheme, id, courseArea, useStartTimeInference);
boolean wasCreated = addAndConnectRegatta(persistent, defaultCourseAreaId, regatta);
if (wasCreated) {
@@ -2073,7 +2077,7 @@ public class RacingEventServiceImpl implements RacingEventServiceWithTestSupport
private void addOverallLeaderboardToLeaderboardGroup(LeaderboardGroup leaderboardGroup,
ScoringScheme scoringScheme, int[] discardThresholds) {
Leaderboard overallLeaderboard = new LeaderboardGroupMetaLeaderboard(leaderboardGroup, scoringScheme,
new ThresholdBasedResultDiscardingRuleImpl(discardThresholds));
new ThresholdBasedResultDiscardingRuleImpl(discardThresholds), getRegattaLogStore());
leaderboardGroup.setOverallLeaderboard(overallLeaderboard);
addLeaderboard(overallLeaderboard);
updateStoredLeaderboard(overallLeaderboard);
@@ -102,7 +102,8 @@ public class RaceDataAccessEval {
service = new RacingEventServiceImpl();
tracTracAdapterFactory = new TracTracAdapterFactoryImpl();
logger.info("Calling service.addTracTracRace");
raceHandle = SimulatorUtils.loadRace(service, tracTracAdapterFactory, paramUrl, liveUri, storedUri, null, 60000);
raceHandle = SimulatorUtils.loadRace(service, tracTracAdapterFactory, paramUrl, liveUri, storedUri, null, null,
60000);
logger.info("Calling raceHandle.getRaces(): " + raceHandle);
RaceDefinition race = raceHandle.getRace(); // wait for RaceDefinition to be completely wired in Regatta
logger.info("Obtained race: " + race);
@@ -52,7 +52,7 @@ public class RacingEventPersistence {
URI liveURI = new URI(liveURIStr);
URI storedURI = new URI(storedURIStr);
raceHandle = SimulatorUtils.loadRace(service, tracTracAdapterFactory, paramURL, liveURI, storedURI, null,
raceHandle = SimulatorUtils.loadRace(service, tracTracAdapterFactory, paramURL, liveURI, storedURI, null, null,
60000);
System.out.println("Done loading race.");
@@ -64,7 +64,7 @@ public class TracTracReaderFromURLs implements TracTracReader {
for (String paramURLStr : tracTracParamURLs) {
URL paramURL = new URL(paramURLStr);
RaceHandle raceHandle = SimulatorUtils.loadRace(service, tracTracAdapterFactory, paramURL, liveURI, storedURI,
null, 60000);
null, null, 60000);
String regatta = raceHandle.getRegatta().getName();
RaceDefinition r = raceHandle.getRace();
RegattaAndRaceIdentifier raceIdentifier = new RegattaNameAndRaceName(regatta, r.getName());
@@ -42,7 +42,7 @@ public class TracTracWriter {
for (String paramURLStr : sources) {
URL paramURL = new URL(paramURLStr);
RaceHandle raceHandle = SimulatorUtils.loadRace(service, tracTracAdapterFactory, paramURL, liveURI, storedURI,
null, 60000);
null, null, 60000);
String regatta = raceHandle.getRegatta().getName();
RaceDefinition r = raceHandle.getRace();
List<TrackedRace> racesList = new ArrayList<TrackedRace>();
@@ -74,7 +74,8 @@ public class PathGeneratorTracTrac extends PathGeneratorBase {
LOGGER.info("Calling service.addTracTracRace");
try {
this.raceHandle = SimulatorUtils.loadRace(service, tracTracAdapterFactory, raceURL, liveURI, storedURI, null, DEFAULT_TIMEOUT_MILLISECONDS);
this.raceHandle = SimulatorUtils.loadRace(service, tracTracAdapterFactory, raceURL, liveURI, storedURI,
null, null, DEFAULT_TIMEOUT_MILLISECONDS);
} catch (Exception error) {
LOGGER.severe(error.getMessage());
@@ -23,6 +23,7 @@ import org.osgi.framework.FrameworkUtil;
import com.sap.sailing.domain.common.Position;
import com.sap.sailing.domain.racelog.RaceLogStore;
import com.sap.sailing.domain.regattalog.RegattaLogStore;
import com.sap.sailing.domain.tracking.RaceHandle;
import com.sap.sailing.domain.tractracadapter.TracTracAdapterFactory;
import com.sap.sailing.domain.tractracadapter.TracTracConnectionConstants;
@@ -75,13 +76,14 @@ public class SimulatorUtils {
return prependedBundlePath;
}
public static RaceHandle loadRace(RacingEventServiceImpl service, TracTracAdapterFactory tracTracAdapterFactory, URL paramURL, URI liveURI,
URI storedURI, RaceLogStore raceLogStore, long timeoutInMilliseconds) throws Exception {
//TODO: TracTrac Username / Password
public static RaceHandle loadRace(RacingEventServiceImpl service, TracTracAdapterFactory tracTracAdapterFactory,
URL paramURL, URI liveURI, URI storedURI, RaceLogStore raceLogStore, RegattaLogStore regattaLogStore,
long timeoutInMilliseconds) throws Exception {
// TODO: TracTrac Username / Password
String tractracUsername = "";
String tractracPassword = "";
RaceHandle raceHandle = tracTracAdapterFactory.getOrCreateTracTracAdapter(service.getBaseDomainFactory())
.addTracTracRace(service, paramURL, liveURI, storedURI, null, raceLogStore,
.addTracTracRace(service, paramURL, liveURI, storedURI, null, raceLogStore, regattaLogStore,
timeoutInMilliseconds, tractracUsername, tractracPassword, TracTracConnectionConstants.ONLINE_STATUS,
TracTracConnectionConstants.ONLINE_VISIBILITY);
return raceHandle;