Removed RaceLogStore from RaceColumn implementations and all subsequent

classes
This commit is contained in:
Armin Zamani committed 2013-02-18 01:34:14 +01:00
1 parent e03d4cfe0c
commit ddea60f570
68 files changed
+331 -594

No files matched your search

@@ -4,7 +4,6 @@ import java.util.Map;
import com.mongodb.DBObject;
import com.sap.sailing.domain.base.Event;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.RaceDefinition;
import com.sap.sailing.domain.base.Regatta;
import com.sap.sailing.domain.base.RegattaRegistry;
@@ -13,8 +12,8 @@ import com.sap.sailing.domain.common.WindSource;
import com.sap.sailing.domain.leaderboard.Leaderboard;
import com.sap.sailing.domain.leaderboard.LeaderboardGroup;
import com.sap.sailing.domain.leaderboard.LeaderboardRegistry;
import com.sap.sailing.domain.racelog.RaceColumnIdentifier;
import com.sap.sailing.domain.racelog.RaceLog;
import com.sap.sailing.domain.racelog.RaceLogIdentifier;
import com.sap.sailing.domain.tracking.TrackedRegattaRegistry;
import com.sap.sailing.domain.tracking.WindTrack;
@@ -86,5 +85,5 @@ public interface DomainObjectFactory {
Map<String, Regatta> loadRaceIDToRegattaAssociations(RegattaRegistry regattaRegistry);
RaceLog loadRaceLog(RaceColumnIdentifier identifier, Fleet fleet);
RaceLog loadRaceLog(RaceLogIdentifier identifier);
}
@@ -1,7 +1,6 @@
package com.sap.sailing.domain.persistence;
import com.sap.sailing.domain.persistence.impl.MongoRaceLogStoreFactoryImpl;
import com.sap.sailing.domain.racelog.RaceColumnIdentifier;
import com.sap.sailing.mongodb.MongoDBService;
public interface MongoRaceLogStoreFactory {
@@ -11,8 +10,5 @@ public interface MongoRaceLogStoreFactory {
* Gets the default Mongo store based on the properties mongo.hostname[=localhost], mongo.port[=27017]
* and mongo.dbName[=&lt;contents of constant {@link #DEFAULT_DB_NAME}&gt;] specified in the bundle context
*/
MongoRaceLogStore getMongoRaceLogStore(MongoObjectFactory mongoObjectFactory, DomainObjectFactory domainObjectFactory,
RaceColumnIdentifier raceColumnIdentifier);
MongoRaceLogStore getMongoRaceLogStore(MongoObjectFactory mongoObjectFactory, DomainObjectFactory domainObjectFactory);
}
@@ -73,18 +73,15 @@ import com.sap.sailing.domain.leaderboard.impl.ResultDiscardingRuleImpl;
import com.sap.sailing.domain.leaderboard.impl.ScoreCorrectionImpl;
import com.sap.sailing.domain.leaderboard.meta.LeaderboardGroupMetaLeaderboard;
import com.sap.sailing.domain.persistence.DomainObjectFactory;
import com.sap.sailing.domain.persistence.MongoFactory;
import com.sap.sailing.domain.persistence.MongoRaceLogStoreFactory;
import com.sap.sailing.domain.racelog.Flags;
import com.sap.sailing.domain.racelog.RaceColumnIdentifier;
import com.sap.sailing.domain.racelog.RaceLog;
import com.sap.sailing.domain.racelog.RaceLogEvent;
import com.sap.sailing.domain.racelog.RaceLogEventFactory;
import com.sap.sailing.domain.racelog.RaceLogFlagEvent;
import com.sap.sailing.domain.racelog.RaceLogIdentifier;
import com.sap.sailing.domain.racelog.RaceLogRaceStatus;
import com.sap.sailing.domain.racelog.RaceLogRaceStatusEvent;
import com.sap.sailing.domain.racelog.RaceLogStartTimeEvent;
import com.sap.sailing.domain.racelog.impl.RaceColumnIdentifierImpl;
import com.sap.sailing.domain.racelog.impl.RaceLogImpl;
import com.sap.sailing.domain.tracking.TrackedRegattaRegistry;
import com.sap.sailing.domain.tracking.Wind;
@@ -364,12 +361,9 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
fleets.add(result.getFleet(null));
}
String columnName = (String) dbRaceColumn.get(FieldNames.LEADERBOARD_COLUMN_NAME.name());
RaceColumnIdentifier columnIdentifier = new RaceColumnIdentifierImpl(result.getName(), columnName);
RaceColumn raceColumn = result.addRaceColumn(columnName,
(Boolean) dbRaceColumn.get(FieldNames.LEADERBOARD_IS_MEDAL_RACE_COLUMN.name()),
MongoRaceLogStoreFactory.INSTANCE.getMongoRaceLogStore(MongoFactory.INSTANCE.getDefaultMongoObjectFactory(),
MongoFactory.INSTANCE.getDefaultDomainObjectFactory(), columnIdentifier),
fleets.toArray(new Fleet[0]));
for (Map.Entry<String, RaceIdentifier> e : raceIdentifiers.entrySet()) {
raceColumn.setRaceIdentifier(fleetsByName.get(e.getKey()), e.getValue());
@@ -828,9 +822,7 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
Map<String, Fleet> fleetsByName = loadFleets(dbFleets);
BasicDBList dbRaceColumns = (BasicDBList) dbSeries.get(FieldNames.SERIES_RACE_COLUMNS.name());
Iterable<String> raceColumnNames = loadRaceColumnNames(dbRaceColumns, fleetsByName);
Series series = new SeriesImpl(name, isMedal, fleetsByName.values(), raceColumnNames, trackedRegattaRegistry,
MongoRaceLogStoreFactory.INSTANCE.getMongoRaceLogStore(
MongoFactory.INSTANCE.getDefaultMongoObjectFactory(), this));
Series series = new SeriesImpl(name, isMedal, fleetsByName.values(), raceColumnNames, trackedRegattaRegistry);
loadRaceColumnRaceLinks(dbRaceColumns, series);
return series;
}
@@ -910,12 +902,11 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
}
@Override
public RaceLog loadRaceLog(RaceColumnIdentifier identifier, Fleet fleet) {
public RaceLog loadRaceLog(RaceLogIdentifier identifier) {
RaceLog result = new RaceLogImpl(RaceLogImpl.class.getSimpleName());
try {
BasicDBObject query = new BasicDBObject();
query.put(FieldNames.RACE_COLUMN_IDENTIFIER.name(), identifier.getIdentifier());
query.put(FieldNames.FLEET_NAME.name(), fleet.getName());
query.put(FieldNames.RACE_LOG_IDENTIFIER.name(), identifier.getIdentifier());
DBCollection raceLog = database.getCollection(CollectionNames.RACE_LOGS.name());
for (DBObject o : raceLog.find(query)) {
RaceLogEvent raceLogEvent = loadRaceLogEvent((DBObject) o.get(FieldNames.RACE_LOG_EVENT.name()));
@@ -65,7 +65,7 @@ public enum FieldNames {
RACE_ID_AS_STRING,
// race log
RACE_COLUMN_IDENTIFIER,
RACE_LOG_IDENTIFIER,
RACE_LOG_EVENT, RACE_LOG_EVENT_PASS_ID, RACE_LOG_EVENT_ID, RACE_LOG_EVENT_INVOLVED_BOATS, RACE_LOG_EVENT_FLAG_UPPER, RACE_LOG_EVENT_FLAG_LOWER,
RACE_LOG_EVENT_FLAG_DISPLAYED, RACE_LOG_EVENT_START_TIME, RACE_LOG_EVENT_CLASS, RACE_LOG_EVENT_NEXT_STATUS;
}
@@ -37,9 +37,9 @@ import com.sap.sailing.domain.leaderboard.RegattaLeaderboard;
import com.sap.sailing.domain.leaderboard.SettableScoreCorrection;
import com.sap.sailing.domain.leaderboard.ThresholdBasedResultDiscardingRule;
import com.sap.sailing.domain.persistence.MongoObjectFactory;
import com.sap.sailing.domain.racelog.RaceColumnIdentifier;
import com.sap.sailing.domain.racelog.RaceLogEvent;
import com.sap.sailing.domain.racelog.RaceLogFlagEvent;
import com.sap.sailing.domain.racelog.RaceLogIdentifier;
import com.sap.sailing.domain.racelog.RaceLogStartTimeEvent;
import com.sap.sailing.domain.tracking.Positioned;
import com.sap.sailing.domain.tracking.TrackedRace;
@@ -478,31 +478,26 @@ public class MongoObjectFactoryImpl implements MongoObjectFactory {
public DBCollection getRaceLogCollection() {
DBCollection result = database.getCollection(CollectionNames.RACE_LOGS.name());
result.ensureIndex(new BasicDBObject(FieldNames.RACE_COLUMN_IDENTIFIER.name(), null));
result.ensureIndex(new BasicDBObject(FieldNames.RACE_LOG_IDENTIFIER.name(), null));
return result;
}
public DBObject storeRaceLogEntry(RaceColumnIdentifier raceColumnIdentifier, Fleet fleet, RaceLogFlagEvent flagEvent) {
public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogFlagEvent flagEvent) {
BasicDBObject result = new BasicDBObject();
storeRaceColumnIdentifierAndFleetName(raceColumnIdentifier, fleet, result);
result.put(FieldNames.RACE_LOG_IDENTIFIER.name(), raceLogIdentifier.getIdentifier());
result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogFlagEvent(flagEvent));
return result;
}
public DBObject storeRaceLogEntry(RaceColumnIdentifier raceColumnIdentifier, Fleet fleet, RaceLogStartTimeEvent startTimeEvent) {
public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogStartTimeEvent startTimeEvent) {
BasicDBObject result = new BasicDBObject();
storeRaceColumnIdentifierAndFleetName(raceColumnIdentifier, fleet, result);
result.put(FieldNames.RACE_LOG_IDENTIFIER.name(), raceLogIdentifier.getIdentifier());
result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogStartTimeEvent(startTimeEvent));
return result;
}
private void storeRaceColumnIdentifierAndFleetName(RaceColumnIdentifier raceColumnIdentifier, Fleet fleet, BasicDBObject result) {
result.put(FieldNames.RACE_COLUMN_IDENTIFIER.name(), raceColumnIdentifier.getIdentifier());
result.put(FieldNames.FLEET_NAME.name(), fleet.getName());
}
private Object storeRaceLogStartTimeEvent(RaceLogStartTimeEvent startTimeEvent) {
DBObject result = new BasicDBObject();
storeTimed(startTimeEvent, result);
@@ -3,35 +3,31 @@ package com.sap.sailing.domain.persistence.impl;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.persistence.MongoObjectFactory;
import com.sap.sailing.domain.racelog.RaceColumnIdentifier;
import com.sap.sailing.domain.racelog.RaceLogCourseAreaChangedEvent;
import com.sap.sailing.domain.racelog.RaceLogEventVisitor;
import com.sap.sailing.domain.racelog.RaceLogFlagEvent;
import com.sap.sailing.domain.racelog.RaceLogIdentifier;
import com.sap.sailing.domain.racelog.RaceLogPassChangeEvent;
import com.sap.sailing.domain.racelog.RaceLogRaceStatusEvent;
import com.sap.sailing.domain.racelog.RaceLogStartTimeEvent;
public class MongoRaceLogListener implements RaceLogEventVisitor {
private final RaceColumnIdentifier raceColumnIdentifier;
private final Fleet fleet;
private final RaceLogIdentifier raceLogIdentifier;
private final MongoObjectFactoryImpl mongoObjectFactory;
private final DBCollection raceLogsCollection;
public MongoRaceLogListener(RaceColumnIdentifier identifier, Fleet fleet,
MongoObjectFactory mongoObjectFactory, DB database) {
public MongoRaceLogListener(RaceLogIdentifier identifier, MongoObjectFactory mongoObjectFactory, DB database) {
super();
this.raceColumnIdentifier = identifier;
this.raceLogIdentifier = identifier;
this.mongoObjectFactory = (MongoObjectFactoryImpl) mongoObjectFactory;
this.raceLogsCollection = this.mongoObjectFactory.getRaceLogCollection();
this.fleet = fleet;
}
@Override
public void visit(RaceLogFlagEvent event) {
DBObject flagEventTrackEntry = mongoObjectFactory.storeRaceLogEntry(raceColumnIdentifier, fleet, event);
DBObject flagEventTrackEntry = mongoObjectFactory.storeRaceLogEntry(raceLogIdentifier, event);
raceLogsCollection.insert(flagEventTrackEntry);
}
@@ -47,7 +43,7 @@ public class MongoRaceLogListener implements RaceLogEventVisitor {
@Override
public void visit(RaceLogStartTimeEvent event) {
DBObject startTimeEventTrackEntry = mongoObjectFactory.storeRaceLogEntry(raceColumnIdentifier, fleet, event);
DBObject startTimeEventTrackEntry = mongoObjectFactory.storeRaceLogEntry(raceLogIdentifier, event);
raceLogsCollection.insert(startTimeEventTrackEntry);
}
@@ -5,7 +5,6 @@ import com.sap.sailing.domain.persistence.DomainObjectFactory;
import com.sap.sailing.domain.persistence.MongoObjectFactory;
import com.sap.sailing.domain.persistence.MongoRaceLogStore;
import com.sap.sailing.domain.persistence.MongoRaceLogStoreFactory;
import com.sap.sailing.domain.racelog.RaceColumnIdentifier;
public class MongoRaceLogStoreFactoryImpl implements MongoRaceLogStoreFactory {
private final DB db;
@@ -14,15 +13,9 @@ public class MongoRaceLogStoreFactoryImpl implements MongoRaceLogStoreFactory {
this.db = db;
}
@Override
public MongoRaceLogStore getMongoRaceLogStore(MongoObjectFactory mongoObjectFactory,DomainObjectFactory domainObjectFactory,
RaceColumnIdentifier raceColumnIdentifier) {
return new MongoRaceLogStoreImpl(db, mongoObjectFactory, domainObjectFactory, raceColumnIdentifier);
}
@Override
public MongoRaceLogStore getMongoRaceLogStore(MongoObjectFactory mongoObjectFactory, DomainObjectFactory domainObjectFactory) {
return new MongoRaceLogStoreImpl(db, mongoObjectFactory, domainObjectFactory, null);
return new MongoRaceLogStoreImpl(db, mongoObjectFactory, domainObjectFactory);
}
}
@@ -4,47 +4,31 @@ import java.util.HashMap;
import java.util.Map;
import com.mongodb.DB;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.persistence.DomainObjectFactory;
import com.sap.sailing.domain.persistence.MongoObjectFactory;
import com.sap.sailing.domain.persistence.MongoRaceLogStore;
import com.sap.sailing.domain.racelog.RaceColumnIdentifier;
import com.sap.sailing.domain.racelog.RaceLog;
import com.sap.sailing.domain.racelog.RaceLogIdentifier;
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
public class MongoRaceLogStoreImpl extends EmptyRaceLogStore implements MongoRaceLogStore {
private transient final DB db;
private final MongoObjectFactory mongoObjectFactory;
private final DomainObjectFactory domainObjectFactory;
private final RaceColumnIdentifier identifier;
private final Map<Fleet, RaceLog> raceLogCache;
private final Map<RaceLogIdentifier, RaceLog> raceLogCache;
public MongoRaceLogStoreImpl(DB db, MongoObjectFactory mongoObjectFactory, DomainObjectFactory domainObjectFactory,
RaceColumnIdentifier identifier) {
public MongoRaceLogStoreImpl(DB db, MongoObjectFactory mongoObjectFactory, DomainObjectFactory domainObjectFactory) {
this.db = db;
this.mongoObjectFactory = mongoObjectFactory;
this.domainObjectFactory = domainObjectFactory;
this.identifier = identifier;
this.raceLogCache = new HashMap<Fleet, RaceLog>();
}
@Override
public RaceLog getRaceLog(Fleet fleet) {
return getRaceLog(identifier, fleet);
this.raceLogCache = new HashMap<RaceLogIdentifier, RaceLog>();
}
@Override
public RaceLog getRaceLog(RaceColumnIdentifier identifier, Fleet fleet) {
if (identifier == null)
return null;
public RaceLog getRaceLog(RaceLogIdentifier identifier) {
RaceLog log;
if (!raceLogCache.containsKey(fleet)) {
log = domainObjectFactory.loadRaceLog(identifier, fleet);
log.addListener(new MongoRaceLogListener(identifier, fleet, mongoObjectFactory, db));
raceLogCache.put(fleet, log);
} else {
log = raceLogCache.get(fleet);
}
log = domainObjectFactory.loadRaceLog(identifier);
log.addListener(new MongoRaceLogListener(identifier, mongoObjectFactory, db));
return log;
}
@@ -28,7 +28,6 @@ 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.common.impl.Util;
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
import com.sap.sailing.domain.swisstimingadapter.MessageType;
import com.sap.sailing.domain.swisstimingadapter.SailMasterConnector;
import com.sap.sailing.domain.swisstimingadapter.SailMasterTransceiver;
@@ -337,7 +336,7 @@ public class EndToEndListeningStoreAndFowardTest {
for (String raceToTrack : racesToTrack) {
RacesHandle raceHandle = racingEventService.addSwissTimingRace(/* regattaToAddTo */ null /* use a default regatta */,
raceToTrack, "localhost", /* canSendRequests */
CLIENT_PORT, false, emptyWindStore, -1, EmptyRaceLogStore.INSTANCE);
CLIENT_PORT, false, emptyWindStore, -1);
raceHandles.add(raceHandle);
if (connector == null) {
connector = racingEventService.getSwissTimingFactory().getOrCreateSailMasterConnector("localhost",
@@ -17,7 +17,6 @@ import com.sap.sailing.domain.base.impl.RegattaImpl;
import com.sap.sailing.domain.common.ScoringSchemeType;
import com.sap.sailing.domain.common.TimePoint;
import com.sap.sailing.domain.common.impl.Util;
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
import com.sap.sailing.domain.swisstimingadapter.Competitor;
import com.sap.sailing.domain.swisstimingadapter.Course;
import com.sap.sailing.domain.swisstimingadapter.DomainFactory;
@@ -42,7 +41,7 @@ public class SimpleDomainFactoryTest {
DomainFactory domainFactory = DomainFactory.INSTANCE;
final String raceID = "SAX920103";
RaceDefinition raceDefinition = domainFactory.createRaceDefinition(domainFactory.getOrCreateDefaultRegatta(raceID,
new RacingEventServiceImpl(), EmptyRaceLogStore.INSTANCE),
new RacingEventServiceImpl()),
new Race() {
@Override
public String getDescription() {
@@ -93,8 +92,7 @@ public class SimpleDomainFactoryTest {
public void testCourseConfigForMark() throws PatchFailedException {
DomainFactory domainFactory = DomainFactory.INSTANCE;
Regatta regatta = new RegattaImpl("TestEvent", /* boatClass */ null, new RacingEventServiceImpl(),
com.sap.sailing.domain.base.DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), "123",
EmptyRaceLogStore.INSTANCE);
com.sap.sailing.domain.base.DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), "123");
Race race = new RaceImpl("1234", "Race 1234");
Iterable<Competitor> competitors = Collections.emptyList();
StartList startList = new StartListImpl("1234", competitors);
@@ -119,8 +117,7 @@ public class SimpleDomainFactoryTest {
public void testCourseConfigForGate() throws PatchFailedException {
DomainFactory domainFactory = DomainFactory.INSTANCE;
Regatta regatta = new RegattaImpl("TestEvent", /* boatClass */ null, new RacingEventServiceImpl(),
com.sap.sailing.domain.base.DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), "123",
EmptyRaceLogStore.INSTANCE);
com.sap.sailing.domain.base.DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), "123");
Race race = new RaceImpl("1234", "Race 1234");
Iterable<Competitor> competitors = Collections.emptyList();
StartList startList = new StartListImpl("1234", competitors);
@@ -11,7 +11,6 @@ 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.common.TimePoint;
import com.sap.sailing.domain.racelog.RaceLogStore;
import com.sap.sailing.domain.swisstimingadapter.impl.DomainFactoryImpl;
import com.sap.sailing.domain.tracking.GPSFixMoving;
import com.sap.sailing.domain.tracking.MarkPassing;
@@ -26,7 +25,7 @@ public interface DomainFactory {
com.sap.sailing.domain.base.DomainFactory getBaseDomainFactory();
Regatta getOrCreateDefaultRegatta(String raceID, TrackedRegattaRegistry trackedRegattaRegistry, RaceLogStore raceLogStore);
Regatta getOrCreateDefaultRegatta(String raceID, TrackedRegattaRegistry trackedRegattaRegistry);
Nationality getOrCreateNationality(String threeLetterIOCCode);
@@ -51,7 +50,7 @@ public interface DomainFactory {
RaceTrackingConnectivityParameters createTrackingConnectivityParameters(String hostname, int port, String raceID,
boolean canSendRequests, long delayToLiveInMillis,
SwissTimingFactory swissTimingFactory, DomainFactory domainFactory, WindStore windStore,
RaceSpecificMessageLoader messageLoader, RaceLogStore raceLogStore);
RaceSpecificMessageLoader messageLoader);
BoatClass getOrCreateBoatClassFromRaceID(String raceID);
@@ -6,7 +6,6 @@ import java.text.ParseException;
import com.sap.sailing.domain.base.Regatta;
import com.sap.sailing.domain.common.TimePoint;
import com.sap.sailing.domain.racelog.RaceLogStore;
import com.sap.sailing.domain.swisstimingadapter.impl.SwissTimingFactoryImpl;
import com.sap.sailing.domain.tracking.RaceTracker;
import com.sap.sailing.domain.tracking.TrackedRegattaRegistry;
@@ -52,8 +51,7 @@ public interface SwissTimingFactory {
SwissTimingConfiguration createSwissTimingConfiguration(String name, String hostname, int port, boolean canSendRequests);
SwissTimingRaceTracker createRaceTracker(String raceID, String hostname, int port, boolean canSendRequests, long delayToLiveInMillis, WindStore windStore, RaceSpecificMessageLoader messageLoader, DomainFactory domainFactory, TrackedRegattaRegistry trackedRegattaRegistry,
RaceLogStore raceLogStore) throws InterruptedException, UnknownHostException, IOException, ParseException;
SwissTimingRaceTracker createRaceTracker(String raceID, String hostname, int port, boolean canSendRequests, long delayToLiveInMillis, WindStore windStore, RaceSpecificMessageLoader messageLoader, DomainFactory domainFactory, TrackedRegattaRegistry trackedRegattaRegistry) throws InterruptedException, UnknownHostException, IOException, ParseException;
RaceTracker createRaceTracker(Regatta regatta, String raceID, String hostname, int port, boolean canSendRequests, long delayToLiveInMillis,
WindStore windStore, RaceSpecificMessageLoader messageLoader, DomainFactory domainFactory,
@@ -30,7 +30,6 @@ import com.sap.sailing.domain.common.ScoringSchemeType;
import com.sap.sailing.domain.common.TimePoint;
import com.sap.sailing.domain.common.impl.Util;
import com.sap.sailing.domain.common.impl.Util.Pair;
import com.sap.sailing.domain.racelog.RaceLogStore;
import com.sap.sailing.domain.swisstimingadapter.Course;
import com.sap.sailing.domain.swisstimingadapter.DomainFactory;
import com.sap.sailing.domain.swisstimingadapter.Fix;
@@ -99,14 +98,14 @@ public class DomainFactoryImpl implements DomainFactory {
}
@Override
public Regatta getOrCreateDefaultRegatta(String raceID, TrackedRegattaRegistry trackedRegattaRegistry, RaceLogStore raceLogStore) {
public Regatta getOrCreateDefaultRegatta(String raceID, TrackedRegattaRegistry trackedRegattaRegistry) {
Regatta result = trackedRegattaRegistry.getRememberedRegattaForRace(raceID);
if (result == null) {
result = raceIDToRegattaCache.get(raceID);
}
if (result == null) {
result = new RegattaImpl(raceID, getOrCreateBoatClassFromRaceID(raceID), trackedRegattaRegistry,
getBaseDomainFactory().createScoringScheme(ScoringSchemeType.LOW_POINT), raceID, raceLogStore);
getBaseDomainFactory().createScoringScheme(ScoringSchemeType.LOW_POINT), raceID);
logger.info("Created regatta "+result.getName()+" ("+result.hashCode()+")");
raceIDToRegattaCache.put(raceID, result);
}
@@ -309,9 +308,9 @@ public class DomainFactoryImpl implements DomainFactory {
public RaceTrackingConnectivityParameters createTrackingConnectivityParameters(String hostname, int port, String raceID,
boolean canSendRequests, long delayToLiveInMillis,
SwissTimingFactory swissTimingFactory, DomainFactory domainFactory, WindStore windStore,
RaceSpecificMessageLoader messageLoader, RaceLogStore raceLogStore) {
RaceSpecificMessageLoader messageLoader) {
return new SwissTimingTrackingConnectivityParameters(hostname, port, raceID, canSendRequests, delayToLiveInMillis,
swissTimingFactory, domainFactory, windStore, messageLoader, raceLogStore);
swissTimingFactory, domainFactory, windStore, messageLoader);
}
}
@@ -9,7 +9,6 @@ import java.util.Map;
import com.sap.sailing.domain.base.Regatta;
import com.sap.sailing.domain.common.TimePoint;
import com.sap.sailing.domain.common.impl.Util.Triple;
import com.sap.sailing.domain.racelog.RaceLogStore;
import com.sap.sailing.domain.swisstimingadapter.DomainFactory;
import com.sap.sailing.domain.swisstimingadapter.Race;
import com.sap.sailing.domain.swisstimingadapter.RaceSpecificMessageLoader;
@@ -81,10 +80,10 @@ public class SwissTimingFactoryImpl implements SwissTimingFactory {
@Override
public SwissTimingRaceTracker createRaceTracker(String raceID, String hostname, int port, boolean canSendRequests, long delayToLiveInMillis,
WindStore windStore, RaceSpecificMessageLoader messageLoader, DomainFactory domainFactory,
TrackedRegattaRegistry trackedRegattaRegistry, RaceLogStore raceLogStore) throws InterruptedException, UnknownHostException, IOException,
TrackedRegattaRegistry trackedRegattaRegistry) throws InterruptedException, UnknownHostException, IOException,
ParseException {
return new SwissTimingRaceTrackerImpl(raceID, hostname, port, windStore, domainFactory, this, messageLoader,
trackedRegattaRegistry, canSendRequests, delayToLiveInMillis, raceLogStore);
trackedRegattaRegistry, canSendRequests, delayToLiveInMillis);
}
@Override
@@ -24,7 +24,6 @@ import com.sap.sailing.domain.common.TimePoint;
import com.sap.sailing.domain.common.TrackedRaceStatusEnum;
import com.sap.sailing.domain.common.impl.Util;
import com.sap.sailing.domain.common.impl.Util.Triple;
import com.sap.sailing.domain.racelog.RaceLogStore;
import com.sap.sailing.domain.swisstimingadapter.Course;
import com.sap.sailing.domain.swisstimingadapter.DomainFactory;
import com.sap.sailing.domain.swisstimingadapter.Fix;
@@ -75,9 +74,9 @@ public class SwissTimingRaceTrackerImpl extends AbstractRaceTrackerImpl implemen
protected SwissTimingRaceTrackerImpl(String raceID, String hostname, int port, WindStore windStore,
DomainFactory domainFactory, SwissTimingFactory factory, RaceSpecificMessageLoader messageLoader,
TrackedRegattaRegistry trackedRegattaRegistry, boolean canSendRequests, long delayToLiveInMillis, RaceLogStore raceLogStore) throws InterruptedException,
TrackedRegattaRegistry trackedRegattaRegistry, boolean canSendRequests, long delayToLiveInMillis) throws InterruptedException,
UnknownHostException, IOException, ParseException {
this(domainFactory.getOrCreateDefaultRegatta(raceID, trackedRegattaRegistry, raceLogStore), raceID, hostname, port, windStore, domainFactory, factory,
this(domainFactory.getOrCreateDefaultRegatta(raceID, trackedRegattaRegistry), raceID, hostname, port, windStore, domainFactory, factory,
messageLoader, trackedRegattaRegistry, canSendRequests, delayToLiveInMillis);
}
@@ -1,7 +1,6 @@
package com.sap.sailing.domain.swisstimingadapter.impl;
import com.sap.sailing.domain.base.Regatta;
import com.sap.sailing.domain.racelog.RaceLogStore;
import com.sap.sailing.domain.swisstimingadapter.DomainFactory;
import com.sap.sailing.domain.swisstimingadapter.RaceSpecificMessageLoader;
import com.sap.sailing.domain.swisstimingadapter.SwissTimingFactory;
@@ -18,13 +17,12 @@ public class SwissTimingTrackingConnectivityParameters implements RaceTrackingCo
private final SwissTimingFactory swissTimingFactory;
private final DomainFactory domainFactory;
private final WindStore windStore;
private final RaceLogStore raceLogStore;
private final RaceSpecificMessageLoader messageLoader;
private final long delayToLiveInMillis;
public SwissTimingTrackingConnectivityParameters(String hostname, int port, String raceID, boolean canSendRequests, long delayToLiveInMillis,
SwissTimingFactory swissTimingFactory, DomainFactory domainFactory, WindStore windStore,
RaceSpecificMessageLoader messageLoader, RaceLogStore raceLogStore) {
RaceSpecificMessageLoader messageLoader) {
super();
this.hostname = hostname;
this.port = port;
@@ -34,14 +32,13 @@ public class SwissTimingTrackingConnectivityParameters implements RaceTrackingCo
this.swissTimingFactory = swissTimingFactory;
this.domainFactory = domainFactory;
this.windStore = windStore;
this.raceLogStore = raceLogStore;
this.messageLoader = messageLoader;
}
@Override
public RaceTracker createRaceTracker(TrackedRegattaRegistry trackedRegattaRegistry) throws Exception {
return swissTimingFactory.createRaceTracker(raceID, hostname, port, canSendRequests, delayToLiveInMillis, windStore, messageLoader,
domainFactory, trackedRegattaRegistry, raceLogStore);
domainFactory, trackedRegattaRegistry);
}
@Override
@@ -35,7 +35,6 @@ import com.sap.sailing.domain.common.impl.DegreeBearingImpl;
import com.sap.sailing.domain.common.impl.DegreePosition;
import com.sap.sailing.domain.common.impl.Util;
import com.sap.sailing.domain.common.impl.WindSourceWithAdditionalID;
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
import com.sap.sailing.domain.swisstimingadapter.DomainFactory;
import com.sap.sailing.domain.swisstimingreplayadapter.CompetitorStatus;
import com.sap.sailing.domain.swisstimingreplayadapter.SwissTimingReplayListener;
@@ -301,7 +300,7 @@ public class SwissTimingReplayToDomainAdapter extends SwissTimingReplayAdapter {
}
private void createRace() {
final Regatta myRegatta = regatta != null ? regatta : domainFactory.getOrCreateDefaultRegatta(currentRaceID, trackedRegattaRegistry, EmptyRaceLogStore.INSTANCE);
final Regatta myRegatta = regatta != null ? regatta : domainFactory.getOrCreateDefaultRegatta(currentRaceID, trackedRegattaRegistry);
RaceDefinition race = domainFactory.createRaceDefinition(myRegatta,
currentRaceID, competitorsPerRaceID.get(currentRaceID), currentCourseDefinition);
racePerRaceID.put(currentRaceID, race);
@@ -31,7 +31,6 @@ import com.sap.sailing.domain.base.impl.MarkImpl;
import com.sap.sailing.domain.base.impl.WaypointImpl;
import com.sap.sailing.domain.common.impl.Util;
import com.sap.sailing.domain.common.impl.Util.Triple;
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
import com.sap.sailing.domain.tracking.DynamicRaceDefinitionSet;
import com.sap.sailing.domain.tracking.DynamicTrackedRegatta;
import com.sap.sailing.domain.tracking.TrackedLeg;
@@ -70,7 +69,7 @@ public class CourseUpdateTest extends AbstractTracTracLiveTest {
public void setUp() throws MalformedURLException, IOException, InterruptedException, URISyntaxException {
super.setUp();
domainFactory = new DomainFactoryImpl(new com.sap.sailing.domain.base.impl.DomainFactoryImpl());
domainRegatta = domainFactory.getOrCreateDefaultRegatta(getTracTracEvent(), /* trackedRegattaRegistry */ null, EmptyRaceLogStore.INSTANCE);
domainRegatta = domainFactory.getOrCreateDefaultRegatta(getTracTracEvent(), /* trackedRegattaRegistry */ null);
trackedRegatta = new DynamicTrackedRegattaImpl(domainRegatta);
ArrayList<Receiver> receivers = new ArrayList<Receiver>();
receivers.add(new RaceCourseReceiver(domainFactory, trackedRegatta, getTracTracEvent(),
@@ -23,7 +23,6 @@ import com.sap.sailing.domain.leaderboard.impl.FlexibleLeaderboardImpl;
import com.sap.sailing.domain.leaderboard.impl.LowPoint;
import com.sap.sailing.domain.leaderboard.impl.ResultDiscardingRuleImpl;
import com.sap.sailing.domain.leaderboard.impl.ScoreCorrectionImpl;
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
import com.sap.sailing.domain.tracking.impl.WindImpl;
import com.sap.sailing.domain.tractracadapter.ReceiverType;
@@ -43,20 +42,20 @@ public class LeaderboardForKielWeekTest extends OnlineTracTracBasedTest {
MillisecondsTimePoint now = MillisecondsTimePoint.now();
loadRace("357c700a-9d9a-11e0-85be-406186cbf87c"); // 505 Race 2
Competitor hasso = getCompetitorByName("Dr.Plattner");
RaceColumn column = leaderboard.addRace(getTrackedRace(), "Test Race 1", /* medalRace */ false, EmptyRaceLogStore.INSTANCE, defaultFleet);
RaceColumn column = leaderboard.addRace(getTrackedRace(), "Test Race 1", /* medalRace */ false, defaultFleet);
assertEquals(21, leaderboard.getTotalPoints(hasso, now), 0.000000001);
Pair<Competitor, RaceColumn> key = new Pair<Competitor, RaceColumn>(hasso, column);
assertEquals(21, leaderboard.getContent(now).get(key).getTotalPoints(), 0.000000001);
assertEquals(21, leaderboard.getEntry(hasso, column, now).getTotalPoints(), 0.000000001);
loadRace("e876c3a0-9da8-11e0-85be-406186cbf87c"); // 505 Race 3
column = leaderboard.addRace(getTrackedRace(), "Test Race 2", /* medalRace */ false, EmptyRaceLogStore.INSTANCE, defaultFleet);
column = leaderboard.addRace(getTrackedRace(), "Test Race 2", /* medalRace */ false, defaultFleet);
key = new Pair<Competitor, RaceColumn>(hasso, column);
// In Race 3, Hasso ranked 31st
assertEquals(52, leaderboard.getTotalPoints(hasso, now), 0.000000001);
assertEquals(31, leaderboard.getContent(now).get(key).getTotalPoints(), 0.000000001);
assertEquals(31, leaderboard.getEntry(hasso, column, now).getTotalPoints(), 0.000000001);
loadRace("7c666e50-9dde-11e0-85be-406186cbf87c"); // 505 Race 4
column = leaderboard.addRace(getTrackedRace(), "Test Race 3", /* medalRace */ false, EmptyRaceLogStore.INSTANCE, defaultFleet);
column = leaderboard.addRace(getTrackedRace(), "Test Race 3", /* medalRace */ false, defaultFleet);
key = new Pair<Competitor, RaceColumn>(hasso, column);
// now the second race is discarded because Hasso ranked worst compared to the other two; in race 4 he ranked 11th
assertEquals(32, leaderboard.getTotalPoints(hasso, now), 0.000000001);
@@ -31,7 +31,6 @@ import com.sap.sailing.domain.leaderboard.impl.FlexibleLeaderboardImpl;
import com.sap.sailing.domain.leaderboard.impl.LowPoint;
import com.sap.sailing.domain.leaderboard.impl.ResultDiscardingRuleImpl;
import com.sap.sailing.domain.leaderboard.impl.ScoreCorrectionImpl;
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
import com.sap.sailing.domain.test.mock.MockedTrackedRaceWithFixedRank;
import com.sap.sailing.domain.test.mock.MockedTrackedRaceWithFixedRankAndManyCompetitors;
import com.sap.sailing.domain.tracking.TrackedRace;
@@ -97,8 +96,8 @@ public class LeaderboardOfflineTest extends AbstractLeaderboardTest {
final String columnName = "abc";
setupRaces(1, 0);
leaderboard.addRaceColumn(columnName, /* medalRace */ true, EmptyRaceLogStore.INSTANCE);
leaderboard.addRace(testRaces.iterator().next(), columnName, /* medalRace */ false, EmptyRaceLogStore.INSTANCE, defaultFleet);
leaderboard.addRaceColumn(columnName, /* medalRace */ true);
leaderboard.addRace(testRaces.iterator().next(), columnName, /* medalRace */ false, defaultFleet);
assertTrue(leaderboard.getRaceColumnByName(columnName).isMedalRace());
}
@@ -123,7 +122,7 @@ public class LeaderboardOfflineTest extends AbstractLeaderboardTest {
RaceColumn bestScoringRaceColumn = null;
for (TrackedRace race : testRaces) {
i++;
RaceColumn raceColumn = leaderboard.addRace(race, "Test Race " + i, /* medalRace */ false, EmptyRaceLogStore.INSTANCE, defaultFleet);
RaceColumn raceColumn = leaderboard.addRace(race, "Test Race " + i, /* medalRace */ false, defaultFleet);
raceColumnsInLeaderboard.put(race, raceColumn);
if (race.getRank(competitor) < bestScore) {
bestScore = race.getRank(competitor);
@@ -152,7 +151,7 @@ public class LeaderboardOfflineTest extends AbstractLeaderboardTest {
FlexibleLeaderboard leaderboard = new FlexibleLeaderboardImpl("Test Leaderboard", scoreCorrection, new ResultDiscardingRuleImpl(
new int[] { 2 }), new LowPoint(), null);
Fleet defaultFleet = leaderboard.getFleet(null);
leaderboard.addRace(testRace, "R1", /* medalRace */ false, EmptyRaceLogStore.INSTANCE, defaultFleet);
leaderboard.addRace(testRace, "R1", /* medalRace */ false, defaultFleet);
assertEquals(1., leaderboard.getTotalPoints(competitor, now), 0.00000001);
assertEquals(1., leaderboard.getTotalPoints(c2, now), 0.00000001);
assertEquals(1., leaderboard.getTotalPoints(c3, now), 0.00000001);
@@ -181,9 +180,9 @@ public class LeaderboardOfflineTest extends AbstractLeaderboardTest {
FlexibleLeaderboard leaderboard = new FlexibleLeaderboardImpl("Test Leaderboard", scoreCorrection, new ResultDiscardingRuleImpl(
new int[] { 2 }), new LowPoint(), null);
Fleet defaultFleet = leaderboard.getFleet(null);
RaceColumn r1 = leaderboard.addRace(testRace, "R1", /* medalRace */ false, EmptyRaceLogStore.INSTANCE, defaultFleet);
RaceColumn r1 = leaderboard.addRace(testRace, "R1", /* medalRace */ false, defaultFleet);
raceColumnsInLeaderboard.put(testRace, r1);
RaceColumn r2 = leaderboard.addRaceColumn("R2", /* medalRace */ false, EmptyRaceLogStore.INSTANCE, defaultFleet);
RaceColumn r2 = leaderboard.addRaceColumn("R2", /* medalRace */ false, defaultFleet);
scoreCorrection.setMaxPointsReason(competitor, r2, MaxPointsReason.DND); // non-discardable disqualification
// assert that max points were given before discarding...
assertEquals(4.0, leaderboard.getEntry(competitor, r2, MillisecondsTimePoint.now()).getNetPoints(), 0.000000001);
@@ -214,7 +213,7 @@ public class LeaderboardOfflineTest extends AbstractLeaderboardTest {
RaceColumn bestScoringRaceColumn = null;
for (TrackedRace race : testRaces) {
i++;
RaceColumn raceColumn = leaderboard.addRace(race, "Test Race " + i, /* medalRace */ false, EmptyRaceLogStore.INSTANCE, defaultFleet);
RaceColumn raceColumn = leaderboard.addRace(race, "Test Race " + i, /* medalRace */ false, defaultFleet);
raceColumnsInLeaderboard.put(race, raceColumn);
if (race.getRank(competitor) < bestScore) {
bestScore = race.getRank(competitor);
@@ -241,12 +240,12 @@ public class LeaderboardOfflineTest extends AbstractLeaderboardTest {
i++;
raceColumnsInLeaderboard.put(race, leaderboard.addRace(race, "Test Race "+i,
/* medalRace */ numberOfUntrackedRaces == 0 && addOneMedalRace && i == testRaces.size(),
EmptyRaceLogStore.INSTANCE, defaultFleet));
defaultFleet));
}
// add a few race columns not yet connected to a tracked race
for (int j=0; j<numberOfUntrackedRaces; j++) {
i++;
leaderboard.addRaceColumn("Test Race "+i, /* medalRace */ addOneMedalRace && j == numberOfUntrackedRaces-1, EmptyRaceLogStore.INSTANCE);
leaderboard.addRaceColumn("Test Race "+i, /* medalRace */ addOneMedalRace && j == numberOfUntrackedRaces-1);
}
if (carry != null) {
leaderboard.setCarriedPoints(competitor, carry);
@@ -48,7 +48,6 @@ import com.sap.sailing.domain.leaderboard.impl.RegattaLeaderboardImpl;
import com.sap.sailing.domain.leaderboard.impl.ResultDiscardingRuleImpl;
import com.sap.sailing.domain.leaderboard.impl.ScoreCorrectionImpl;
import com.sap.sailing.domain.leaderboard.meta.LeaderboardGroupMetaLeaderboard;
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
import com.sap.sailing.domain.test.mock.MockedTrackedRaceWithStartTimeAndRanks;
import com.sap.sailing.domain.tracking.MarkPassing;
import com.sap.sailing.domain.tracking.TrackedRace;
@@ -760,25 +759,25 @@ public class LeaderboardScoringAndRankingTest extends AbstractLeaderboardTest {
FlexibleLeaderboard leaderboard1 = new FlexibleLeaderboardImpl("Leaderboard 1", new ScoreCorrectionImpl(),
new ResultDiscardingRuleImpl(/* discarding thresholds */ new int[0]), new HighPoint(), null);
leaderboard1.addRace(new MockedTrackedRaceWithStartTimeAndRanks(now, Arrays.asList(f1)), "R1", /* medalRace */ false,
EmptyRaceLogStore.INSTANCE, leaderboard1.getFleet(null));
leaderboard1.getFleet(null));
leaderboard1.addRace(new MockedTrackedRaceWithStartTimeAndRanks(now, Arrays.asList(f2)), "R2", /* medalRace */ false,
EmptyRaceLogStore.INSTANCE, leaderboard1.getFleet(null));
leaderboard1.getFleet(null));
assertTrue(leaderboard1.getScoringScheme().getScoreComparator(/* nullScoresAreBetter */ false).compare(
leaderboard1.getTotalPoints(c[0], later), leaderboard1.getTotalPoints(c[3], later)) < 0); // c0 better than c3
FlexibleLeaderboard leaderboard2 = new FlexibleLeaderboardImpl("Leaderboard 3", new ScoreCorrectionImpl(),
new ResultDiscardingRuleImpl(/* discarding thresholds */ new int[0]), new HighPoint(), null);
leaderboard2.addRace(new MockedTrackedRaceWithStartTimeAndRanks(now, Arrays.asList(f3)), "R1", /* medalRace */ false,
EmptyRaceLogStore.INSTANCE, leaderboard1.getFleet(null));
leaderboard1.getFleet(null));
leaderboard2.addRace(new MockedTrackedRaceWithStartTimeAndRanks(now, Arrays.asList(f4)), "R2", /* medalRace */ false,
EmptyRaceLogStore.INSTANCE, leaderboard1.getFleet(null));
leaderboard1.getFleet(null));
assertTrue(leaderboard2.getScoringScheme().getScoreComparator(/* nullScoresAreBetter */ false).compare(
leaderboard2.getTotalPoints(c[3], later), leaderboard2.getTotalPoints(c[0], later)) < 0); // c3 better than c0
FlexibleLeaderboard leaderboard3 = new FlexibleLeaderboardImpl("Leaderboard 3", new ScoreCorrectionImpl(),
new ResultDiscardingRuleImpl(/* discarding thresholds */ new int[0]), new HighPoint(), null);
leaderboard3.addRace(new MockedTrackedRaceWithStartTimeAndRanks(now, Arrays.asList(f5)), "R1", /* medalRace */ false,
EmptyRaceLogStore.INSTANCE, leaderboard1.getFleet(null));
leaderboard1.getFleet(null));
leaderboard3.addRace(new MockedTrackedRaceWithStartTimeAndRanks(now, Arrays.asList(f6)), "R2", /* medalRace */ false,
EmptyRaceLogStore.INSTANCE, leaderboard1.getFleet(null));
leaderboard1.getFleet(null));
assertTrue(leaderboard3.getCompetitorsFromBestToWorst(later).indexOf(c[3]) <
leaderboard3.getCompetitorsFromBestToWorst(later).indexOf(c[0])); // c3 better than c0; won last race
LeaderboardGroup leaderboardGroup = new LeaderboardGroupImpl("Leaderboard Group", "Leaderboard Group", false, Arrays.asList(leaderboard1,
@@ -856,7 +855,7 @@ public class LeaderboardScoringAndRankingTest extends AbstractLeaderboardTest {
qualifyingRaceColumnNames.add("Q" + i);
}
Series qualifyingSeries = new SeriesImpl("Qualifying", /* isMedal */false, qualifyingFleets,
qualifyingRaceColumnNames, /* trackedRegattaRegistry */null, EmptyRaceLogStore.INSTANCE);
qualifyingRaceColumnNames, /* trackedRegattaRegistry */null);
series.add(qualifyingSeries);
}
@@ -871,8 +870,7 @@ public class LeaderboardScoringAndRankingTest extends AbstractLeaderboardTest {
for (int i = 1; i <= numberOfFinalRaces; i++) {
finalRaceColumnNames.add("F" + i);
}
Series finalSeries = new SeriesImpl("Final", /* isMedal */false, finalFleets, finalRaceColumnNames, /* trackedRegattaRegistry */ null,
EmptyRaceLogStore.INSTANCE);
Series finalSeries = new SeriesImpl("Final", /* isMedal */false, finalFleets, finalRaceColumnNames, /* trackedRegattaRegistry */ null);
series.add(finalSeries);
}
@@ -882,8 +880,7 @@ public class LeaderboardScoringAndRankingTest extends AbstractLeaderboardTest {
medalFleets.add(new FleetImpl("Medal"));
List<String> medalRaceColumnNames = new ArrayList<String>();
medalRaceColumnNames.add("M");
Series medalSeries = new SeriesImpl("Medal", /* isMedal */true, medalFleets, medalRaceColumnNames, /* trackedRegattaRegistry */ null,
EmptyRaceLogStore.INSTANCE);
Series medalSeries = new SeriesImpl("Medal", /* isMedal */true, medalFleets, medalRaceColumnNames, /* trackedRegattaRegistry */ null);
series.add(medalSeries);
}
@@ -15,7 +15,6 @@ import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
import com.sap.sailing.domain.tracking.impl.EmptyWindStore;
import com.sap.sailing.domain.tractracadapter.DomainFactory;
import com.sap.sailing.domain.tractracadapter.TracTracConnectionConstants;
@@ -51,28 +50,25 @@ public class MultipleClassesInRegattaTest {
httpAndHost+"/events/event_20110505_SailingTea/clientparams.php?event=event_20110505_SailingTea&race=cce678c8-97e6-11e0-9aed-406186cbf87c"),
new URI(liveURI), new URI(storedURI),
/* startOfTracking */ null, /* endOfTracking */ null, /* delayToLiveInMillis */ 0l, /* simulateWithStartTimeNow */ false,
EmptyWindStore.INSTANCE, new DummyTrackedRegattaRegistry(), EmptyRaceLogStore.INSTANCE);
EmptyWindStore.INSTANCE, new DummyTrackedRegattaRegistry());
kiwotest2 = domainFactory
.createRaceTracker(
new URL(
httpAndHost+"/events/event_20110505_SailingTea/clientparams.php?event=event_20110505_SailingTea&race=11290bd6-97e7-11e0-9aed-406186cbf87c"),
new URI(liveURI), new URI(storedURI),
/* startOfTracking */ null, /* endOfTracking */ null, /* delayToLiveInMillis */ 0l, /* simulateWithStartTimeNow */ false, EmptyWindStore.INSTANCE, new DummyTrackedRegattaRegistry(),
EmptyRaceLogStore.INSTANCE);
/* startOfTracking */ null, /* endOfTracking */ null, /* delayToLiveInMillis */ 0l, /* simulateWithStartTimeNow */ false, EmptyWindStore.INSTANCE, new DummyTrackedRegattaRegistry());
kiwotest3 = domainFactory
.createRaceTracker(
new URL(
httpAndHost+"/events/event_20110505_SailingTea/clientparams.php?event=event_20110505_SailingTea&race=39635b24-97e7-11e0-9aed-406186cbf87c"),
new URI(liveURI), new URI(storedURI),
/* startOfTracking */ null, /* endOfTracking */ null, /* delayToLiveInMillis */ 0l, /* simulateWithStartTimeNow */ false, EmptyWindStore.INSTANCE, new DummyTrackedRegattaRegistry(),
EmptyRaceLogStore.INSTANCE);
/* startOfTracking */ null, /* endOfTracking */ null, /* delayToLiveInMillis */ 0l, /* simulateWithStartTimeNow */ false, EmptyWindStore.INSTANCE, 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"),
new URI(liveURI), new URI(storedURI),
/* startOfTracking */ null, /* endOfTracking */ null, /* delayToLiveInMillis */ 0l, /* simulateWithStartTimeNow */ false, EmptyWindStore.INSTANCE, new DummyTrackedRegattaRegistry(),
EmptyRaceLogStore.INSTANCE);
/* startOfTracking */ null, /* endOfTracking */ null, /* delayToLiveInMillis */ 0l, /* simulateWithStartTimeNow */ false, EmptyWindStore.INSTANCE, new DummyTrackedRegattaRegistry());
assertEquals("STG", kiwotest1.getRegatta().getBoatClass().getName());
assertEquals("505", kiwotest2.getRegatta().getBoatClass().getName());
@@ -26,7 +26,6 @@ import com.sap.sailing.domain.base.impl.MillisecondsTimePoint;
import com.sap.sailing.domain.common.Position;
import com.sap.sailing.domain.common.TimePoint;
import com.sap.sailing.domain.common.impl.DegreePosition;
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
import com.sap.sailing.domain.tracking.DynamicRaceDefinitionSet;
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
import com.sap.sailing.domain.tracking.DynamicTrackedRegatta;
@@ -133,7 +132,7 @@ public abstract class OnlineTracTracBasedTest extends AbstractTracTracLiveTest {
if (domainFactory == null) {
domainFactory = new DomainFactoryImpl(new com.sap.sailing.domain.base.impl.DomainFactoryImpl());
}
domainEvent = domainFactory.getOrCreateDefaultRegatta(getTracTracEvent(), /* trackedRegattaRegistry */ null, EmptyRaceLogStore.INSTANCE);
domainEvent = domainFactory.getOrCreateDefaultRegatta(getTracTracEvent(), /* trackedRegattaRegistry */ null);
trackedRegatta = new DynamicTrackedRegattaImpl(domainEvent);
}
@@ -11,20 +11,20 @@ import java.util.List;
import org.junit.Before;
import org.junit.Test;
import com.sap.sailing.domain.base.Mark;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.ControlPoint;
import com.sap.sailing.domain.base.Course;
import com.sap.sailing.domain.base.DomainFactory;
import com.sap.sailing.domain.base.Mark;
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.base.impl.BoatClassImpl;
import com.sap.sailing.domain.base.impl.MarkImpl;
import com.sap.sailing.domain.base.impl.CompetitorImpl;
import com.sap.sailing.domain.base.impl.CourseImpl;
import com.sap.sailing.domain.base.impl.GateImpl;
import com.sap.sailing.domain.base.impl.KnotSpeedWithBearingImpl;
import com.sap.sailing.domain.base.impl.MarkImpl;
import com.sap.sailing.domain.base.impl.MillisecondsTimePoint;
import com.sap.sailing.domain.base.impl.RaceDefinitionImpl;
import com.sap.sailing.domain.base.impl.RegattaImpl;
@@ -40,7 +40,6 @@ import com.sap.sailing.domain.common.WindSourceType;
import com.sap.sailing.domain.common.impl.DegreeBearingImpl;
import com.sap.sailing.domain.common.impl.DegreePosition;
import com.sap.sailing.domain.common.impl.WindSourceImpl;
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
import com.sap.sailing.domain.tracking.MarkPassing;
import com.sap.sailing.domain.tracking.TrackedLeg;
@@ -84,7 +83,7 @@ public class ReachingLegTest extends TrackBasedTest {
Iterable<Competitor> competitors, TimePoint timePointForFixes) {
BoatClassImpl boatClass = new BoatClassImpl(boatClassName, /* typicallyStartsUpwind */ true);
Regatta regatta = new RegattaImpl(regattaName, boatClass, /* trackedRegattaRegistry */ null,
DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), "123", EmptyRaceLogStore.INSTANCE);
DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), "123");
TrackedRegatta trackedRegatta = new TrackedRegattaImpl(regatta);
List<Waypoint> waypoints = new ArrayList<Waypoint>();
// create a two-lap upwind/downwind course:
@@ -15,7 +15,6 @@ import org.junit.Test;
import com.maptrack.client.io.TypeController;
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.tracking.DynamicRaceDefinitionSet;
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
import com.sap.sailing.domain.tracking.impl.DynamicTrackedRegattaImpl;
@@ -95,8 +94,7 @@ public class ReceiveMarkPassingDataTest extends AbstractTracTracLiveTest {
List<Receiver> receivers = new ArrayList<Receiver>();
receivers.add(receiver);
for (Receiver r : DomainFactory.INSTANCE.getUpdateReceivers(
new DynamicTrackedRegattaImpl(DomainFactory.INSTANCE.getOrCreateDefaultRegatta(getTracTracEvent(), /* trackedRegattaRegistry */ null,
EmptyRaceLogStore.INSTANCE)),
new DynamicTrackedRegattaImpl(DomainFactory.INSTANCE.getOrCreateDefaultRegatta(getTracTracEvent(), /* trackedRegattaRegistry */ null)),
getTracTracEvent(), EmptyWindStore.INSTANCE, /* startOfTracking */ null, /* endOfTracking */ null, /* delayToLiveInMillis */ 0l,
/* simulator */ null, new DynamicRaceDefinitionSet() {
@Override
@@ -14,7 +14,6 @@ import com.maptrack.client.io.TypeController;
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.tracking.DynamicRaceDefinitionSet;
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
import com.sap.sailing.domain.tracking.DynamicTrackedRegatta;
@@ -66,8 +65,7 @@ public class ReceiveTrackingDataTest extends AbstractTracTracLiveTest {
}
};
List<TypeController> listeners = new ArrayList<TypeController>();
Regatta regatta = domainFactory.getOrCreateDefaultRegatta(getTracTracEvent(), /* trackedRegattaRegistry */ null,
EmptyRaceLogStore.INSTANCE);
Regatta regatta = domainFactory.getOrCreateDefaultRegatta(getTracTracEvent(), /* trackedRegattaRegistry */ null);
DynamicTrackedRegatta trackedRegatta = new DynamicTrackedRegattaImpl(regatta);
trackedRegatta.addRaceListener(new RaceListener() {
@Override
@@ -5,21 +5,21 @@ import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import com.sap.sailing.domain.base.Mark;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.ControlPoint;
import com.sap.sailing.domain.base.Course;
import com.sap.sailing.domain.base.DomainFactory;
import com.sap.sailing.domain.base.Mark;
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.base.impl.BoatClassImpl;
import com.sap.sailing.domain.base.impl.BoatImpl;
import com.sap.sailing.domain.base.impl.MarkImpl;
import com.sap.sailing.domain.base.impl.CompetitorImpl;
import com.sap.sailing.domain.base.impl.CourseImpl;
import com.sap.sailing.domain.base.impl.GateImpl;
import com.sap.sailing.domain.base.impl.KnotSpeedWithBearingImpl;
import com.sap.sailing.domain.base.impl.MarkImpl;
import com.sap.sailing.domain.base.impl.MillisecondsTimePoint;
import com.sap.sailing.domain.base.impl.NationalityImpl;
import com.sap.sailing.domain.base.impl.PersonImpl;
@@ -33,7 +33,6 @@ import com.sap.sailing.domain.common.WindSourceType;
import com.sap.sailing.domain.common.impl.DegreeBearingImpl;
import com.sap.sailing.domain.common.impl.DegreePosition;
import com.sap.sailing.domain.common.impl.WindSourceImpl;
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
import com.sap.sailing.domain.tracking.MarkPassing;
import com.sap.sailing.domain.tracking.TrackedRegatta;
@@ -94,7 +93,7 @@ public abstract class TrackBasedTest {
Iterable<Competitor> competitors, TimePoint timePointForFixes) {
BoatClassImpl boatClass = new BoatClassImpl(boatClassName, /* typicallyStartsUpwind */ true);
Regatta regatta = new RegattaImpl(regattaName, boatClass, /* trackedRegattaRegistry */ null,
DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), "123", EmptyRaceLogStore.INSTANCE);
DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), "123");
TrackedRegatta trackedRegatta = new TrackedRegattaImpl(regatta);
List<Waypoint> waypoints = new ArrayList<Waypoint>();
// create a two-lap upwind/downwind course:
@@ -14,7 +14,6 @@ import org.junit.Before;
import org.junit.Test;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
import com.sap.sailing.domain.tracking.impl.EmptyWindStore;
import com.sap.sailing.domain.tractracadapter.DomainFactory;
import com.sap.sailing.domain.tractracadapter.TracTracConnectionConstants;
@@ -55,7 +54,7 @@ public class UnicodeCharactersInCompetitorNamesTest {
+ TracTracConnectionConstants.PORT_STORED),
/* startOfTracking */null, /* endOfTracking */null, /* delayToLiveInMillis */0l,
/* simulateWithStartTimeNow */ false, EmptyWindStore.INSTANCE,
new DummyTrackedRegattaRegistry(), EmptyRaceLogStore.INSTANCE);
new DummyTrackedRegattaRegistry());
Iterable<Competitor> competitors = fourtyninerYellow_2.getRacesHandle().getRaces().iterator().next()
.getCompetitors();
@@ -15,10 +15,10 @@ import java.util.Set;
import org.junit.Test;
import com.sap.sailing.domain.base.BoatClass;
import com.sap.sailing.domain.base.Mark;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.ControlPoint;
import com.sap.sailing.domain.base.DomainFactory;
import com.sap.sailing.domain.base.Mark;
import com.sap.sailing.domain.base.Waypoint;
import com.sap.sailing.domain.base.impl.BoatClassImpl;
import com.sap.sailing.domain.base.impl.BoatImpl;
@@ -36,7 +36,6 @@ import com.sap.sailing.domain.common.TimePoint;
import com.sap.sailing.domain.common.impl.DegreeBearingImpl;
import com.sap.sailing.domain.common.impl.DegreePosition;
import com.sap.sailing.domain.common.impl.Util;
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
import com.sap.sailing.domain.tracking.MarkPassing;
import com.sap.sailing.domain.tracking.Wind;
@@ -263,8 +262,7 @@ public class WindTest {
final BoatClass boatClass = domainFactory.getOrCreateBoatClass("ESS40");
DynamicTrackedRace trackedRace = new DynamicTrackedRaceImpl(new DynamicTrackedRegattaImpl(
new RegattaImpl("Test Regatta", boatClass,
/* trackedRegattaRegistry */ null, domainFactory.createScoringScheme(ScoringSchemeType.LOW_POINT), "123",
EmptyRaceLogStore.INSTANCE)),
/* trackedRegattaRegistry */ null, domainFactory.createScoringScheme(ScoringSchemeType.LOW_POINT), "123")),
new RaceDefinitionImpl("Test Race",
new CourseImpl("Test Course", Arrays.asList(new Waypoint[] { w1, w2, w3 })),
boatClass, Collections.singleton(competitor)),
@@ -22,7 +22,6 @@ import com.sap.sailing.domain.base.Team;
import com.sap.sailing.domain.base.Waypoint;
import com.sap.sailing.domain.common.TimePoint;
import com.sap.sailing.domain.common.impl.Util.Pair;
import com.sap.sailing.domain.racelog.RaceLogStore;
import com.sap.sailing.domain.tracking.DynamicRaceDefinitionSet;
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
import com.sap.sailing.domain.tracking.DynamicTrackedRegatta;
@@ -93,8 +92,7 @@ public interface DomainFactory {
* boat class exists yet.
* @param trackedRegattaRegistry TODO
*/
com.sap.sailing.domain.base.Regatta getOrCreateDefaultRegatta(Event event, TrackedRegattaRegistry trackedRegattaRegistry,
RaceLogStore raceLogStore);
com.sap.sailing.domain.base.Regatta getOrCreateDefaultRegatta(Event event, TrackedRegattaRegistry trackedRegattaRegistry);
/**
* Creates a race tracked for the specified URL/URIs and starts receiving all available existing and future push
@@ -127,7 +125,7 @@ public interface DomainFactory {
*/
TracTracRaceTracker createRaceTracker(URL paramURL, URI liveURI, URI storedURI, TimePoint startOfTracking,
TimePoint endOfTracking, long delayToLiveInMillis, boolean simulateWithStartTimeNow, WindStore windStore,
TrackedRegattaRegistry trackedRegattaRegistry, RaceLogStore raceLogStore) throws MalformedURLException, FileNotFoundException,
TrackedRegattaRegistry trackedRegattaRegistry) throws MalformedURLException, FileNotFoundException,
URISyntaxException;
/**
@@ -136,7 +134,7 @@ public interface DomainFactory {
*/
RaceTracker createRaceTracker(Regatta regatta, URL paramURL, URI liveURI, URI storedURI, TimePoint startOfTracking,
TimePoint endOfTracking, long delayToLiveInMillis, boolean simulateWithStartTimeNow, WindStore windStore,
TrackedRegattaRegistry trackedRegattaRegistry, RaceLogStore raceLogStore) throws MalformedURLException, FileNotFoundException,
TrackedRegattaRegistry trackedRegattaRegistry) throws MalformedURLException, FileNotFoundException,
URISyntaxException;
BoatClass getOrCreateBoatClass(CompetitorClass competitorClass);
@@ -237,8 +235,7 @@ public interface DomainFactory {
Pair<List<com.sap.sailing.domain.base.Competitor>, BoatClass> getCompetitorsAndDominantBoatClass(Race race);
RaceTrackingConnectivityParameters createTrackingConnectivityParameters(URL paramURL, URI liveURI, URI storedURI,
TimePoint startOfTracking, TimePoint endOfTracking, long delayToLiveInMillis, boolean simulateWithStartTimeNow, WindStore windStore,
RaceLogStore raceLogStore);
TimePoint startOfTracking, TimePoint endOfTracking, long delayToLiveInMillis, boolean simulateWithStartTimeNow, WindStore windStore);
/**
* Removes all knowledge about <code>tractracRace</code> which includes removing it from the race cache, from the
* {@link com.sap.sailing.domain.base.Regatta} and, if a {@link TrackedRace} for the corresponding
@@ -46,7 +46,6 @@ import com.sap.sailing.domain.common.impl.DegreeBearingImpl;
import com.sap.sailing.domain.common.impl.DegreePosition;
import com.sap.sailing.domain.common.impl.Util;
import com.sap.sailing.domain.common.impl.Util.Pair;
import com.sap.sailing.domain.racelog.RaceLogStore;
import com.sap.sailing.domain.tracking.DynamicRaceDefinitionSet;
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
import com.sap.sailing.domain.tracking.DynamicTrackedRegatta;
@@ -306,8 +305,7 @@ public class DomainFactoryImpl implements DomainFactory {
}
@Override
public Regatta getOrCreateDefaultRegatta(com.tractrac.clientmodule.Event event, TrackedRegattaRegistry trackedRegattaRegistry,
RaceLogStore raceLogStore) {
public Regatta getOrCreateDefaultRegatta(com.tractrac.clientmodule.Event event, 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?
@@ -338,7 +336,7 @@ public class DomainFactoryImpl implements DomainFactory {
if (result == null) {
result = new RegattaImpl(event.getName(), boatClass, trackedRegattaRegistry,
// use the low-point system as the default scoring scheme
com.sap.sailing.domain.base.DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), event.getId(), raceLogStore);
com.sap.sailing.domain.base.DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), event.getId());
regattaCache.put(key, result);
weakRegattaCache.put(event, result);
logger.info("Created regatta "+result.getName()+" ("+result.hashCode()+") because none found for key "+key);
@@ -550,19 +548,19 @@ public class DomainFactoryImpl implements DomainFactory {
@Override
public TracTracRaceTracker createRaceTracker(URL paramURL, URI liveURI, URI storedURI, TimePoint startOfTracking,
TimePoint endOfTracking, long delayToLiveInMillis, boolean simulateWithStartTimeNow, WindStore windStore,
TrackedRegattaRegistry trackedRegattaRegistry, RaceLogStore raceLogStore) throws MalformedURLException, FileNotFoundException,
TrackedRegattaRegistry trackedRegattaRegistry) throws MalformedURLException, FileNotFoundException,
URISyntaxException {
return new TracTracRaceTrackerImpl(this, paramURL, liveURI, storedURI, startOfTracking, endOfTracking, delayToLiveInMillis,
simulateWithStartTimeNow, windStore, trackedRegattaRegistry, raceLogStore);
simulateWithStartTimeNow, windStore, trackedRegattaRegistry);
}
@Override
public RaceTracker createRaceTracker(Regatta regatta, URL paramURL, URI liveURI, URI storedURI,
TimePoint startOfTracking, TimePoint endOfTracking, long delayToLiveInMillis,
boolean simulateWithStartTimeNow, WindStore windStore, TrackedRegattaRegistry trackedRegattaRegistry, RaceLogStore raceLogStore)
boolean simulateWithStartTimeNow, WindStore windStore, TrackedRegattaRegistry trackedRegattaRegistry)
throws MalformedURLException, FileNotFoundException, URISyntaxException {
return new TracTracRaceTrackerImpl(regatta, this, paramURL, liveURI, storedURI, startOfTracking, endOfTracking, delayToLiveInMillis,
simulateWithStartTimeNow, windStore, trackedRegattaRegistry, raceLogStore);
simulateWithStartTimeNow, windStore, trackedRegattaRegistry);
}
@Override
@@ -578,9 +576,9 @@ public class DomainFactoryImpl implements DomainFactory {
@Override
public RaceTrackingConnectivityParameters createTrackingConnectivityParameters(URL paramURL, URI liveURI,
URI storedURI, TimePoint startOfTracking, TimePoint endOfTracking, long delayToLiveInMillis,
boolean simulateWithStartTimeNow, WindStore windStore, RaceLogStore raceLogStore) {
boolean simulateWithStartTimeNow, WindStore windStore) {
return new RaceTrackingConnectivityParametersImpl(paramURL, liveURI, storedURI, startOfTracking, endOfTracking,
delayToLiveInMillis, simulateWithStartTimeNow, windStore, this, raceLogStore);
delayToLiveInMillis, simulateWithStartTimeNow, windStore, this);
}
}
@@ -9,7 +9,6 @@ import java.net.URL;
import com.sap.sailing.domain.base.Regatta;
import com.sap.sailing.domain.common.TimePoint;
import com.sap.sailing.domain.common.impl.Util;
import com.sap.sailing.domain.racelog.RaceLogStore;
import com.sap.sailing.domain.tracking.RaceTracker;
import com.sap.sailing.domain.tracking.RaceTrackingConnectivityParameters;
import com.sap.sailing.domain.tracking.TrackedRegattaRegistry;
@@ -23,14 +22,13 @@ public class RaceTrackingConnectivityParametersImpl implements RaceTrackingConne
private final TimePoint startOfTracking;
private final TimePoint endOfTracking;
private final WindStore windStore;
private final RaceLogStore raceLogStore;
private final DomainFactory domainFactory;
private final long delayToLiveInMillis;
private final boolean simulateWithStartTimeNow;
public RaceTrackingConnectivityParametersImpl(URL paramURL, URI liveURI, URI storedURI, TimePoint startOfTracking,
TimePoint endOfTracking, long delayToLiveInMillis, boolean simulateWithStartTimeNow, WindStore windStore,
DomainFactory domainFactory, RaceLogStore raceLogStore) {
DomainFactory domainFactory) {
super();
this.paramURL = paramURL;
this.liveURI = liveURI;
@@ -39,7 +37,6 @@ public class RaceTrackingConnectivityParametersImpl implements RaceTrackingConne
this.endOfTracking = endOfTracking;
this.delayToLiveInMillis = delayToLiveInMillis;
this.windStore = windStore;
this.raceLogStore = raceLogStore;
this.domainFactory = domainFactory;
this.simulateWithStartTimeNow = simulateWithStartTimeNow;
}
@@ -48,7 +45,7 @@ public class RaceTrackingConnectivityParametersImpl implements RaceTrackingConne
public RaceTracker createRaceTracker(TrackedRegattaRegistry trackedRegattaRegistry) throws MalformedURLException,
FileNotFoundException, URISyntaxException {
RaceTracker tracker = domainFactory.createRaceTracker(paramURL, liveURI, storedURI, startOfTracking,
endOfTracking, delayToLiveInMillis, simulateWithStartTimeNow, windStore, trackedRegattaRegistry, raceLogStore);
endOfTracking, delayToLiveInMillis, simulateWithStartTimeNow, windStore, trackedRegattaRegistry);
return tracker;
}
@@ -56,7 +53,7 @@ public class RaceTrackingConnectivityParametersImpl implements RaceTrackingConne
public RaceTracker createRaceTracker(Regatta regatta, TrackedRegattaRegistry trackedRegattaRegistry)
throws Exception {
RaceTracker tracker = domainFactory.createRaceTracker(regatta, paramURL, liveURI, storedURI, startOfTracking,
endOfTracking, delayToLiveInMillis, simulateWithStartTimeNow, windStore, trackedRegattaRegistry, raceLogStore);
endOfTracking, delayToLiveInMillis, simulateWithStartTimeNow, windStore, trackedRegattaRegistry);
return tracker;
}
@@ -32,7 +32,6 @@ import com.sap.sailing.domain.common.Position;
import com.sap.sailing.domain.common.TimePoint;
import com.sap.sailing.domain.common.TrackedRaceStatusEnum;
import com.sap.sailing.domain.common.impl.Util.Triple;
import com.sap.sailing.domain.racelog.RaceLogStore;
import com.sap.sailing.domain.tracking.AbstractRaceTrackerImpl;
import com.sap.sailing.domain.tracking.DynamicGPSFixTrack;
import com.sap.sailing.domain.tracking.DynamicRaceDefinitionSet;
@@ -122,19 +121,18 @@ public class TracTracRaceTrackerImpl extends AbstractRaceTrackerImpl implements
*/
protected TracTracRaceTrackerImpl(DomainFactory domainFactory, URL paramURL, URI liveURI, URI storedURI,
TimePoint startOfTracking, TimePoint endOfTracking, long delayToLiveInMillis,
boolean simulateWithStartTimeNow, WindStore windStore, TrackedRegattaRegistry trackedRegattaRegistry, RaceLogStore raceLogStore)
boolean simulateWithStartTimeNow, WindStore windStore, TrackedRegattaRegistry trackedRegattaRegistry)
throws URISyntaxException, MalformedURLException, FileNotFoundException {
this(KeyValue.setup(paramURL), domainFactory, paramURL, liveURI, storedURI, startOfTracking, endOfTracking,
delayToLiveInMillis, simulateWithStartTimeNow, windStore, trackedRegattaRegistry, raceLogStore);
delayToLiveInMillis, simulateWithStartTimeNow, windStore, trackedRegattaRegistry);
}
private TracTracRaceTrackerImpl(Event tractracEvent, DomainFactory domainFactory, URL paramURL, URI liveURI, URI storedURI,
TimePoint startOfTracking, TimePoint endOfTracking, long delayToLiveInMillis, boolean simulateWithStartTimeNow,
WindStore windStore, TrackedRegattaRegistry trackedRegattaRegistry, RaceLogStore raceLogStore)
WindStore windStore, TrackedRegattaRegistry trackedRegattaRegistry)
throws URISyntaxException, MalformedURLException, FileNotFoundException {
this(tractracEvent, null, domainFactory, paramURL, liveURI, storedURI,
startOfTracking, endOfTracking, delayToLiveInMillis, simulateWithStartTimeNow, windStore, trackedRegattaRegistry,
raceLogStore);
startOfTracking, endOfTracking, delayToLiveInMillis, simulateWithStartTimeNow, windStore, trackedRegattaRegistry);
}
/**
@@ -145,10 +143,10 @@ public class TracTracRaceTrackerImpl extends AbstractRaceTrackerImpl implements
*/
protected TracTracRaceTrackerImpl(Regatta regatta, DomainFactory domainFactory, URL paramURL, URI liveURI, URI storedURI,
TimePoint startOfTracking, TimePoint endOfTracking, long delayToLiveInMillis, boolean simulateWithStartTimeNow,
WindStore windStore, TrackedRegattaRegistry trackedRegattaRegistry, RaceLogStore raceLogStore)
WindStore windStore, TrackedRegattaRegistry trackedRegattaRegistry)
throws URISyntaxException, MalformedURLException, FileNotFoundException {
this(KeyValue.setup(paramURL), regatta, domainFactory, paramURL, liveURI, storedURI, startOfTracking,
endOfTracking, delayToLiveInMillis, simulateWithStartTimeNow, windStore, trackedRegattaRegistry, raceLogStore);
endOfTracking, delayToLiveInMillis, simulateWithStartTimeNow, windStore, trackedRegattaRegistry);
}
/**
@@ -164,8 +162,7 @@ public class TracTracRaceTrackerImpl extends AbstractRaceTrackerImpl implements
*/
private TracTracRaceTrackerImpl(Event tractracEvent, final Regatta regatta, DomainFactory domainFactory,
URL paramURL, URI liveURI, URI storedURI, TimePoint startOfTracking, TimePoint endOfTracking,
long delayToLiveInMillis, boolean simulateWithStartTimeNow, WindStore windStore, TrackedRegattaRegistry trackedRegattaRegistry,
RaceLogStore raceLogStore)
long delayToLiveInMillis, boolean simulateWithStartTimeNow, WindStore windStore, TrackedRegattaRegistry trackedRegattaRegistry)
throws URISyntaxException, MalformedURLException, FileNotFoundException {
super();
this.tractracEvent = tractracEvent;
@@ -205,7 +202,7 @@ 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(tractracEvent, trackedRegattaRegistry, raceLogStore) : effectiveRegatta;
this.regatta = effectiveRegatta == null ? domainFactory.getOrCreateDefaultRegatta(tractracEvent, trackedRegattaRegistry) : effectiveRegatta;
trackedRegatta = trackedRegattaRegistry.getOrCreateTrackedRegatta(this.regatta);
receivers = new HashSet<Receiver>();
Set<TypeController> typeControllers = new HashSet<TypeController>();
@@ -5,8 +5,6 @@ import com.sap.sailing.domain.common.RaceIdentifier;
import com.sap.sailing.domain.common.impl.Util;
import com.sap.sailing.domain.common.impl.Util.Pair;
import com.sap.sailing.domain.leaderboard.Leaderboard;
import com.sap.sailing.domain.racelog.RaceLog;
import com.sap.sailing.domain.racelog.RaceLogEvent;
import com.sap.sailing.domain.tracking.TrackedRace;
import com.sap.sailing.util.impl.RaceColumnListeners;
@@ -144,10 +142,5 @@ public interface RaceColumn extends Named {
* If <code>null</code>, the {@link #getFactor() factor} defaults to 1 for non-medal and {@link #DEFAULT_MEDAL_RACE_FACTOR} for
* medal races. Otherwise, the explicit factor is used.
*/
Double getExplicitFactor();
RaceLog getRaceLog(String leaderboardName, Fleet fleet);
void recordRaceLogEvent(String leaderboardName, Fleet fleet, RaceLogEvent event);
Double getExplicitFactor();
}
@@ -1,14 +1,8 @@
package com.sap.sailing.domain.base;
import com.sap.sailing.domain.racelog.RaceColumnIdentifier;
import com.sap.sailing.domain.racelog.RaceLogEvent;
public interface RaceColumnInSeries extends RaceColumn {
Series getSeries();
Regatta getRegatta();
RaceColumnIdentifier getRaceColumnIdentifier(String leaderboardName);
void recordRaceLogEvent(String leaderboardName, Fleet fleet, RaceLogEvent event);
}
@@ -1,6 +1,5 @@
package com.sap.sailing.domain.base;
import com.sap.sailing.domain.racelog.RaceLogStore;
import com.sap.sailing.domain.tracking.TrackedRace;
import com.sap.sailing.domain.tracking.TrackedRegattaRegistry;
@@ -27,7 +26,7 @@ public interface Series extends SeriesData {
Fleet getFleetByName(String fleetName);
RaceColumnInSeries addRaceColumn(String raceColumnName, TrackedRegattaRegistry trackedRegattaRegistry, RaceLogStore raceLogStore);
RaceColumnInSeries addRaceColumn(String raceColumnName, TrackedRegattaRegistry trackedRegattaRegistry);
void moveRaceColumnUp(String raceColumnName);
@@ -8,7 +8,6 @@ import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.RaceColumn;
import com.sap.sailing.domain.common.RaceIdentifier;
import com.sap.sailing.domain.common.impl.Util;
import com.sap.sailing.domain.racelog.RaceLogStore;
import com.sap.sailing.domain.tracking.TrackedRace;
public abstract class AbstractRaceColumn extends SimpleAbstractRaceColumn implements RaceColumn {
@@ -16,13 +15,11 @@ public abstract class AbstractRaceColumn extends SimpleAbstractRaceColumn implem
private final Map<Fleet, TrackedRace> trackedRaces;
private final Map<Fleet, RaceIdentifier> raceIdentifiers;
protected RaceLogStore raceLogStore;
public AbstractRaceColumn(RaceLogStore raceLogStore) {
public AbstractRaceColumn() {
this.trackedRaces = new HashMap<Fleet, TrackedRace>();
this.raceIdentifiers = new HashMap<Fleet, RaceIdentifier>();
this.raceLogStore = raceLogStore;
}
@@ -5,11 +5,6 @@ import com.sap.sailing.domain.base.RaceColumnInSeries;
import com.sap.sailing.domain.base.RaceDefinition;
import com.sap.sailing.domain.base.Regatta;
import com.sap.sailing.domain.base.Series;
import com.sap.sailing.domain.racelog.RaceColumnIdentifier;
import com.sap.sailing.domain.racelog.RaceLog;
import com.sap.sailing.domain.racelog.RaceLogEvent;
import com.sap.sailing.domain.racelog.RaceLogStore;
import com.sap.sailing.domain.racelog.impl.RaceColumnIdentifierImpl;
import com.sap.sailing.domain.tracking.TrackedRace;
import com.sap.sailing.domain.tracking.TrackedRegatta;
import com.sap.sailing.domain.tracking.TrackedRegattaRegistry;
@@ -39,8 +34,8 @@ public class RaceColumnInSeriesImpl extends AbstractRaceColumn implements RaceCo
* this column's series {@link Regatta}, respectively. If <code>null</code>, the re-association won't be
* carried out.
*/
public RaceColumnInSeriesImpl(String name, Series series, TrackedRegattaRegistry trackedRegattaRegistry, RaceLogStore raceLogStore) {
super(raceLogStore);
public RaceColumnInSeriesImpl(String name, Series series, TrackedRegattaRegistry trackedRegattaRegistry) {
super();
this.name = name;
this.series = series;
this.trackedRegattaRegistry = trackedRegattaRegistry;
@@ -94,20 +89,4 @@ public class RaceColumnInSeriesImpl extends AbstractRaceColumn implements RaceCo
super.setTrackedRace(fleet, trackedRace);
}
@Override
public RaceLog getRaceLog(String leaderboardName, Fleet fleet) {
return raceLogStore.getRaceLog(getRaceColumnIdentifier(leaderboardName), fleet);
}
@Override
public RaceColumnIdentifier getRaceColumnIdentifier(String leaderboardName) {
return new RaceColumnIdentifierImpl(leaderboardName, getName());
}
@Override
public void recordRaceLogEvent(String leaderboardName, Fleet fleet, RaceLogEvent event) {
raceLogStore.getRaceLog(getRaceColumnIdentifier(leaderboardName), fleet).add(event);
}
}
@@ -23,7 +23,6 @@ import com.sap.sailing.domain.common.RegattaName;
import com.sap.sailing.domain.common.impl.NamedImpl;
import com.sap.sailing.domain.leaderboard.ScoringScheme;
import com.sap.sailing.domain.leaderboard.ThresholdBasedResultDiscardingRule;
import com.sap.sailing.domain.racelog.RaceLogStore;
import com.sap.sailing.domain.tracking.TrackedRace;
import com.sap.sailing.domain.tracking.TrackedRegatta;
import com.sap.sailing.domain.tracking.TrackedRegattaRegistry;
@@ -60,10 +59,10 @@ 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(String baseName, BoatClass boatClass, TrackedRegattaRegistry trackedRegattaRegistry, ScoringScheme scoringScheme, Serializable id, RaceLogStore raceLogStore) {
public RegattaImpl(String baseName, BoatClass boatClass, TrackedRegattaRegistry trackedRegattaRegistry, ScoringScheme scoringScheme, Serializable id) {
this(baseName, boatClass, Collections.singletonList(new SeriesImpl("Default", /* isMedal */false, Collections
.singletonList(new FleetImpl("Default")), /* race column names */new ArrayList<String>(),
trackedRegattaRegistry, raceLogStore)), /* persistent */false, scoringScheme, id);
trackedRegattaRegistry)), /* persistent */false, scoringScheme, id);
}
/**
@@ -17,7 +17,6 @@ import com.sap.sailing.domain.base.Series;
import com.sap.sailing.domain.common.impl.NamedImpl;
import com.sap.sailing.domain.common.impl.Util;
import com.sap.sailing.domain.leaderboard.ThresholdBasedResultDiscardingRule;
import com.sap.sailing.domain.racelog.RaceLogStore;
import com.sap.sailing.domain.tracking.TrackedRace;
import com.sap.sailing.domain.tracking.TrackedRegatta;
import com.sap.sailing.domain.tracking.TrackedRegattaRegistry;
@@ -43,7 +42,7 @@ public class SeriesImpl extends NamedImpl implements Series, RaceColumnListener
* carried out.
*/
public SeriesImpl(String name, boolean isMedal, Iterable<? extends Fleet> fleets, Iterable<String> raceColumnNames,
TrackedRegattaRegistry trackedRegattaRegistry, RaceLogStore raceLogStore) {
TrackedRegattaRegistry trackedRegattaRegistry) {
super(name);
if (fleets == null || Util.isEmpty(fleets)) {
throw new IllegalArgumentException("Series must have at least one fleet");
@@ -59,7 +58,7 @@ public class SeriesImpl extends NamedImpl implements Series, RaceColumnListener
this.isMedal = isMedal;
this.raceColumnListeners = new RaceColumnListeners();
for (String raceColumnName : raceColumnNames) {
addRaceColumn(raceColumnName, trackedRegattaRegistry, raceLogStore);
addRaceColumn(raceColumnName, trackedRegattaRegistry);
}
}
@@ -106,9 +105,8 @@ public class SeriesImpl extends NamedImpl implements Series, RaceColumnListener
* carried out.
*/
@Override
public RaceColumnInSeries addRaceColumn(String raceColumnName, TrackedRegattaRegistry trackedRegattaRegistry,
RaceLogStore raceLogStore) {
RaceColumnInSeriesImpl result = createRaceColumn(raceColumnName, trackedRegattaRegistry, raceLogStore);
public RaceColumnInSeries addRaceColumn(String raceColumnName, TrackedRegattaRegistry trackedRegattaRegistry) {
RaceColumnInSeriesImpl result = createRaceColumn(raceColumnName, trackedRegattaRegistry);
if (raceColumnListeners.canAddRaceColumnToContainer(result)) {
result.addRaceColumnListener(this);
raceColumns.add(result);
@@ -127,9 +125,8 @@ public class SeriesImpl extends NamedImpl implements Series, RaceColumnListener
* this column's series {@link Regatta}, respectively. If <code>null</code>, the re-association won't be
* carried out.
*/
private RaceColumnInSeriesImpl createRaceColumn(String raceColumnName, TrackedRegattaRegistry trackedRegattaRegistry,
RaceLogStore raceLogStore) {
RaceColumnInSeriesImpl result = new RaceColumnInSeriesImpl(raceColumnName, this, trackedRegattaRegistry, raceLogStore);
private RaceColumnInSeriesImpl createRaceColumn(String raceColumnName, TrackedRegattaRegistry trackedRegattaRegistry) {
RaceColumnInSeriesImpl result = new RaceColumnInSeriesImpl(raceColumnName, this, trackedRegattaRegistry);
return result;
}
@@ -5,7 +5,6 @@ import com.sap.sailing.domain.base.RaceColumn;
import com.sap.sailing.domain.base.Regatta;
import com.sap.sailing.domain.base.Series;
import com.sap.sailing.domain.common.Renamable;
import com.sap.sailing.domain.racelog.RaceLogStore;
import com.sap.sailing.domain.tracking.TrackedRace;
/**
@@ -46,28 +45,25 @@ public interface FlexibleLeaderboard extends Leaderboard, Renamable {
* @param fleets
* the fleets to add to the {@link RaceColumn} created. If no fleets are specified, a single default
* fleet will be assigned to the race column created.
*
* @return the race column in the leaderboard used to represent the tracked <code>race</code>
*/
RaceColumn addRaceColumn(String name, boolean medalRace, RaceLogStore raceLogStore, Fleet... fleets);
RaceColumn addRaceColumn(String name, boolean medalRace, Fleet... fleets);
/**
* Adds a tracked race to this leaderboard. If a {@link RaceColumn} with name <code>columnName</code> already exists
* in this leaderboard, <code>race</code> is {@link RaceColumn#setTrackedRace(Fleet, TrackedRace) set as its tracked
* race} and <code>medalRace</code> is ignored. Otherwise, a new {@link RaceColumn} column, with <code>race</code>
* as its tracked race, is created and added to this leaderboard.
*
* @param medalRace
* tells if the column to add represents a medal race which has double score and cannot be discarded;
* ignored if the column named <code>columnName</code> already exists
*
* @param fleets
* the fleets to add to the {@link RaceColumn} created. If no fleets are specified, a single default
* fleet will be assigned to the race column created.
*
* @return the race column in the leaderboard used to represent the tracked <code>race</code>
*/
RaceColumn addRace(TrackedRace race, String columnName, boolean medalRace, RaceLogStore raceLogStore, Fleet fleet);
RaceColumn addRace(TrackedRace race, String columnName, boolean medalRace, Fleet fleet);
void removeRaceColumn(String columnName);
@@ -1,12 +1,8 @@
package com.sap.sailing.domain.leaderboard;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.RaceColumn;
import com.sap.sailing.domain.racelog.RaceLogEvent;
public interface FlexibleRaceColumn extends RaceColumn {
void setName(String newName);
void setIsMedalRace(boolean isMedalRace);
void recordRaceLogEvent(Fleet fleet, RaceLogEvent event);
}
@@ -16,7 +16,6 @@ import com.sap.sailing.domain.leaderboard.FlexibleRaceColumn;
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.racelog.RaceLogStore;
import com.sap.sailing.domain.tracking.TrackedRace;
/**
@@ -65,13 +64,13 @@ public class FlexibleLeaderboardImpl extends AbstractLeaderboardImpl implements
}
@Override
public RaceColumn addRaceColumn(String name, boolean medalRace, RaceLogStore raceLogStore, Fleet... fleets) {
public RaceColumn addRaceColumn(String name, boolean medalRace, Fleet... fleets) {
FlexibleRaceColumn column = getRaceColumnByName(name);
if (column != null) {
final String msg = "Trying to create race column with duplicate name "+name+" in leaderboard +"+getName();
logger.severe(msg);
} else {
column = createRaceColumn(name, medalRace, raceLogStore, fleets);
column = createRaceColumn(name, medalRace, fleets);
column.addRaceColumnListener(this);
races.add(column);
getRaceColumnListeners().notifyListenersAboutRaceColumnAddedToContainer(column);
@@ -109,10 +108,10 @@ public class FlexibleLeaderboardImpl extends AbstractLeaderboardImpl implements
}
@Override
public RaceColumn addRace(TrackedRace race, String columnName, boolean medalRace, RaceLogStore raceLogStore, Fleet fleet) {
public RaceColumn addRace(TrackedRace race, String columnName, boolean medalRace, Fleet fleet) {
FlexibleRaceColumn column = getRaceColumnByName(columnName);
if (column == null) {
column = createRaceColumn(columnName, medalRace, raceLogStore, fleet);
column = createRaceColumn(columnName, medalRace, fleet);
column.addRaceColumnListener(this);
races.add(column);
}
@@ -120,8 +119,8 @@ public class FlexibleLeaderboardImpl extends AbstractLeaderboardImpl implements
return column;
}
protected RaceColumnImpl createRaceColumn(String columnName, boolean medalRace, RaceLogStore raceLogStore, Fleet... fleets) {
return new RaceColumnImpl(columnName, medalRace, raceLogStore, turnNullOrEmptyFleetsIntoDefaultFleet(fleets));
protected RaceColumnImpl createRaceColumn(String columnName, boolean medalRace, Fleet... fleets) {
return new RaceColumnImpl(columnName, medalRace, turnNullOrEmptyFleetsIntoDefaultFleet(fleets));
}
protected Iterable<Fleet> turnNullOrEmptyFleetsIntoDefaultFleet(Fleet... fleets) {
@@ -6,11 +6,7 @@ import java.util.List;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.impl.AbstractRaceColumn;
import com.sap.sailing.domain.common.impl.Util;
import com.sap.sailing.domain.leaderboard.FlexibleRaceColumn;
import com.sap.sailing.domain.racelog.RaceLog;
import com.sap.sailing.domain.racelog.RaceLogEvent;
import com.sap.sailing.domain.racelog.RaceLogStore;
public class RaceColumnImpl extends AbstractRaceColumn implements FlexibleRaceColumn {
private static final long serialVersionUID = -7801617988982540470L;
@@ -23,8 +19,8 @@ public class RaceColumnImpl extends AbstractRaceColumn implements FlexibleRaceCo
private final Iterable<Fleet> fleets;
private boolean medalRace;
public RaceColumnImpl(String name, boolean medalRace, RaceLogStore raceLogStore, Iterable<Fleet> fleets) {
super(raceLogStore);
public RaceColumnImpl(String name, boolean medalRace, Iterable<Fleet> fleets) {
super();
this.name = name;
this.medalRace = medalRace;
List<Fleet> myFleets = new ArrayList<Fleet>();
@@ -60,25 +56,4 @@ public class RaceColumnImpl extends AbstractRaceColumn implements FlexibleRaceCo
public Iterable<Fleet> getFleets() {
return fleets;
}
@Override
public RaceLog getRaceLog(String leaderboardName, Fleet fleet) {
return raceLogStore.getRaceLog(fleet);
}
public RaceLog getRaceLog(Fleet fleet) {
return getRaceLog("", fleet);
}
@Override
public void recordRaceLogEvent(Fleet fleet, RaceLogEvent event) {
if (!Util.contains(fleets, fleet))
return;
raceLogStore.getRaceLog(fleet).add(event);
}
@Override
public void recordRaceLogEvent(String leaderboardName, Fleet fleet, RaceLogEvent event) {
recordRaceLogEvent(fleet, event);
}
}
@@ -10,8 +10,6 @@ import com.sap.sailing.domain.base.impl.SimpleAbstractRaceColumn;
import com.sap.sailing.domain.common.RaceIdentifier;
import com.sap.sailing.domain.leaderboard.Leaderboard;
import com.sap.sailing.domain.leaderboard.ThresholdBasedResultDiscardingRule;
import com.sap.sailing.domain.racelog.RaceLog;
import com.sap.sailing.domain.racelog.RaceLogEvent;
import com.sap.sailing.domain.tracking.TrackedRace;
/**
@@ -149,15 +147,4 @@ public class MetaLeaderboardColumn extends SimpleAbstractRaceColumn implements R
public boolean isTransient() {
return false;
}
@Override
public RaceLog getRaceLog(String leaderboardName, Fleet fleet) {
return null;
}
@Override
public void recordRaceLogEvent(String leaderboardName, Fleet fleet,
RaceLogEvent event) {
}
}
@@ -1,6 +1,6 @@
package com.sap.sailing.domain.racelog;
public interface RaceColumnIdentifier {
public interface RaceLogIdentifier {
String getIdentifier();
@@ -1,13 +1,10 @@
package com.sap.sailing.domain.racelog;
import com.sap.sailing.domain.base.Fleet;
/**
* Capsulating store interface providing a {@link RaceLog} for a given regatta / race combination.
*
*/
public interface RaceLogStore {
RaceLog getRaceLog(Fleet fleet);
RaceLog getRaceLog(RaceColumnIdentifier identifier, Fleet fleet);
RaceLog getRaceLog(RaceLogIdentifier identifier);
}
@@ -1,8 +1,7 @@
package com.sap.sailing.domain.racelog.impl;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.racelog.RaceColumnIdentifier;
import com.sap.sailing.domain.racelog.RaceLog;
import com.sap.sailing.domain.racelog.RaceLogIdentifier;
import com.sap.sailing.domain.racelog.RaceLogStore;
/**
@@ -12,14 +11,9 @@ import com.sap.sailing.domain.racelog.RaceLogStore;
*/
public class EmptyRaceLogStore implements RaceLogStore {
public static EmptyRaceLogStore INSTANCE = new EmptyRaceLogStore();
@Override
public RaceLog getRaceLog(Fleet fleet) {
return new RaceLogImpl("Lock for " + fleet.toString());
}
@Override
public RaceLog getRaceLog(RaceColumnIdentifier identifier, Fleet fleet) {
return new RaceLogImpl("Lock for " + identifier.getIdentifier() + "-" + fleet.toString());
public RaceLog getRaceLog(RaceLogIdentifier identifier) {
return new RaceLogImpl("Lock for " + identifier.getIdentifier());
}
}
@@ -1,20 +0,0 @@
package com.sap.sailing.domain.racelog.impl;
import com.sap.sailing.domain.racelog.RaceColumnIdentifier;
public class RaceColumnIdentifierImpl implements RaceColumnIdentifier {
private String leaderboardName;
private String columnName;
public RaceColumnIdentifierImpl(String leaderboardName, String columnName) {
this.leaderboardName = leaderboardName;
this.columnName = columnName;
}
@Override
public String getIdentifier() {
return String.format("%s-%s", leaderboardName, columnName);
}
}
@@ -0,0 +1,30 @@
package com.sap.sailing.domain.racelog.impl;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.RaceColumn;
import com.sap.sailing.domain.leaderboard.Leaderboard;
import com.sap.sailing.domain.racelog.RaceLogIdentifier;
public class RaceLogIdentifierImpl implements RaceLogIdentifier {
private final Leaderboard leaderboard;
private final RaceColumn raceColumn;
private final Fleet fleet;
public RaceLogIdentifierImpl(Leaderboard leaderboard, RaceColumn raceColumn, Fleet fleet) {
this.leaderboard = leaderboard;
this.raceColumn = raceColumn;
this.fleet = fleet;
}
@Override
public String getIdentifier() {
return String.format("%s-%s-%s", leaderboard.getName(), raceColumn.getName(), fleet.getName());
}
@Override
public String toString() {
return getIdentifier();
}
}
@@ -109,7 +109,6 @@ import com.sap.sailing.domain.leaderboard.RegattaLeaderboard;
import com.sap.sailing.domain.persistence.DomainObjectFactory;
import com.sap.sailing.domain.persistence.MongoFactory;
import com.sap.sailing.domain.persistence.MongoObjectFactory;
import com.sap.sailing.domain.persistence.MongoRaceLogStoreFactory;
import com.sap.sailing.domain.persistence.MongoWindStoreFactory;
import com.sap.sailing.domain.swisstimingadapter.SwissTimingArchiveConfiguration;
import com.sap.sailing.domain.swisstimingadapter.SwissTimingConfiguration;
@@ -1142,8 +1141,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
new URI(liveURI), new URI(storedURI), new MillisecondsTimePoint(rr.trackingStartTime),
new MillisecondsTimePoint(rr.trackingEndTime),
MongoWindStoreFactory.INSTANCE.getMongoWindStore(mongoObjectFactory, domainObjectFactory),
RaceTracker.TIMEOUT_FOR_RECEIVING_RACE_DEFINITION_IN_MILLISECONDS, simulateWithStartTimeNow,
MongoRaceLogStoreFactory.INSTANCE.getMongoRaceLogStore(mongoObjectFactory, domainObjectFactory));
RaceTracker.TIMEOUT_FOR_RECEIVING_RACE_DEFINITION_IN_MILLISECONDS, simulateWithStartTimeNow);
if (trackWind) {
new Thread("Wind tracking starter for race " + rr.regattaName + "/" + rr.name) {
public void run() {
@@ -2385,8 +2383,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
final RacesHandle raceHandle = getService().addSwissTimingRace(regattaToAddTo, rr.ID, hostname, port,
canSendRequests,
MongoWindStoreFactory.INSTANCE.getMongoWindStore(mongoObjectFactory, domainObjectFactory),
RaceTracker.TIMEOUT_FOR_RECEIVING_RACE_DEFINITION_IN_MILLISECONDS,
MongoRaceLogStoreFactory.INSTANCE.getMongoRaceLogStore(mongoObjectFactory, domainObjectFactory));
RaceTracker.TIMEOUT_FOR_RECEIVING_RACE_DEFINITION_IN_MILLISECONDS);
if (trackWind) {
new Thread("Wind tracking starter for race " + rr.ID + "/" + rr.description) {
public void run() {
@@ -2439,10 +2436,8 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
RegattaImpl.getFullName(replayRaceDTO.rsc, replayRaceDTO.boat_class),
Collections.singletonList(new SeriesImpl("Default", /* isMedal */false, Collections
.singletonList(new FleetImpl("Default")), /* race column names */
new ArrayList<String>(), getService(),
MongoRaceLogStoreFactory.INSTANCE.getMongoRaceLogStore(mongoObjectFactory, domainObjectFactory))), false,
baseDomainFactory.createScoringScheme(ScoringSchemeType.LOW_POINT),
MongoRaceLogStoreFactory.INSTANCE.getMongoRaceLogStore(mongoObjectFactory, domainObjectFactory));
new ArrayList<String>(), getService())), false,
baseDomainFactory.createScoringScheme(ScoringSchemeType.LOW_POINT));
} else {
regatta = getService().getRegatta(regattaIdentifier);
}
@@ -2932,8 +2927,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
public List<RaceColumnInSeriesDTO> addRaceColumnsToSeries(RegattaIdentifier regattaIdentifier, String seriesName, List<String> columnNames) {
List<RaceColumnInSeriesDTO> result = new ArrayList<RaceColumnInSeriesDTO>();
for(String columnName: columnNames) {
RaceColumnInSeries raceColumnInSeries = getService().apply(new AddColumnToSeries(regattaIdentifier, seriesName, columnName,
MongoRaceLogStoreFactory.INSTANCE.getMongoRaceLogStore(mongoObjectFactory, domainObjectFactory)));
RaceColumnInSeries raceColumnInSeries = getService().apply(new AddColumnToSeries(regattaIdentifier, seriesName, columnName));
if(raceColumnInSeries != null) {
result.add(convertToRaceColumnInSeriesDTO(raceColumnInSeries));
}
@@ -2944,8 +2938,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
@Override
public RaceColumnInSeriesDTO addRaceColumnToSeries(RegattaIdentifier regattaIdentifier, String seriesName, String columnName) {
RaceColumnInSeriesDTO result = null;
RaceColumnInSeries raceColumnInSeries = getService().apply(new AddColumnToSeries(regattaIdentifier, seriesName, columnName,
MongoRaceLogStoreFactory.INSTANCE.getMongoRaceLogStore(mongoObjectFactory, domainObjectFactory)));
RaceColumnInSeries raceColumnInSeries = getService().apply(new AddColumnToSeries(regattaIdentifier, seriesName, columnName));
if(raceColumnInSeries != null) {
result = convertToRaceColumnInSeriesDTO(raceColumnInSeries);
}
@@ -2981,8 +2974,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
Regatta regatta = getService().apply(
new AddSpecificRegatta(regattaName, boatClassName, UUID.randomUUID(),
seriesNamesWithFleetNamesAndFleetOrderingAndMedal,
persistent, baseDomainFactory.createScoringScheme(scoringSchemeType),
MongoRaceLogStoreFactory.INSTANCE.getMongoRaceLogStore(mongoObjectFactory, domainObjectFactory)));
persistent, baseDomainFactory.createScoringScheme(scoringSchemeType)));
return convertToRegattaDTO(regatta);
}
@@ -53,7 +53,6 @@ import com.sap.sailing.domain.persistence.DomainObjectFactory;
import com.sap.sailing.domain.persistence.MongoFactory;
import com.sap.sailing.domain.persistence.MongoObjectFactory;
import com.sap.sailing.domain.persistence.impl.CollectionNames;
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
import com.sap.sailing.domain.test.AbstractLeaderboardTest;
import com.sap.sailing.domain.test.mock.MockedTrackedRaceWithFixedRank;
import com.sap.sailing.domain.tracking.DynamicTrackedRegatta;
@@ -109,8 +108,7 @@ public class TestStoringAndLoadingEventsAndRegattas extends AbstractMongoDBTest
BoatClass boatClass = DomainFactory.INSTANCE.getOrCreateBoatClass("29erXX", /* typicallyStartsUpwind */ true);
Regatta regattaProxy = createRegatta(regattaBaseName, boatClass, /* persistent */ true, DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT));
Regatta regatta = res.createRegatta(regattaProxy.getBaseName(), regattaProxy.getBoatClass().getName(),
"123", regattaProxy.getSeries(), regattaProxy.isPersistent(), DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT),
EmptyRaceLogStore.INSTANCE);
"123", regattaProxy.getSeries(), regattaProxy.isPersistent(), DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT));
addRaceColumns(numberOfQualifyingRaces, numberOfFinalRaces, regatta);
res.addRegattaLeaderboard(regatta.getRegattaIdentifier(), new int[] { 3, 5 }, null);
DomainObjectFactory dof = MongoFactory.INSTANCE.getDomainObjectFactory(getMongoService());
@@ -151,8 +149,7 @@ public class TestStoringAndLoadingEventsAndRegattas extends AbstractMongoDBTest
final String regattaBaseName = "Kieler Woche";
Regatta regattaProxy = createRegatta(regattaBaseName, boatClass, /* persistent */ true, DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT));
Regatta regatta = res.createRegatta(regattaProxy.getBaseName(), regattaProxy.getBoatClass().getName(),
"123", regattaProxy.getSeries(), regattaProxy.isPersistent(), DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT),
EmptyRaceLogStore.INSTANCE);
"123", regattaProxy.getSeries(), regattaProxy.isPersistent(), DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT));
trackedRegatta[0] = new DynamicTrackedRegattaImpl(regatta);
addRaceColumns(numberOfQualifyingRaces, numberOfFinalRaces, regatta);
logColumnsInRegatta(regatta);
@@ -364,22 +361,20 @@ public class TestStoringAndLoadingEventsAndRegattas extends AbstractMongoDBTest
qualifyingFleets.add(new FleetImpl("Yellow"));
qualifyingFleets.add(new FleetImpl("Blue"));
Series qualifyingSeries = new SeriesImpl("Qualifying", /* isMedal */false, qualifyingFleets,
emptyRaceColumnNames, /* trackedRegattaRegistry */ null, EmptyRaceLogStore.INSTANCE);
emptyRaceColumnNames, /* trackedRegattaRegistry */ null);
series.add(qualifyingSeries);
// -------- final series ------------
List<Fleet> finalFleets = new ArrayList<Fleet>();
finalFleets.add(new FleetImpl("Gold", 1));
finalFleets.add(new FleetImpl("Silver", 2));
Series finalSeries = new SeriesImpl("Final", /* isMedal */ false, finalFleets, emptyRaceColumnNames, /* trackedRegattaRegistry */ null,
EmptyRaceLogStore.INSTANCE);
Series finalSeries = new SeriesImpl("Final", /* isMedal */ false, finalFleets, emptyRaceColumnNames, /* trackedRegattaRegistry */ null);
series.add(finalSeries);
// ------------ medal --------------
List<Fleet> medalFleets = new ArrayList<Fleet>();
medalFleets.add(new FleetImpl("Medal"));
Series medalSeries = new SeriesImpl("Medal", /* isMedal */ true, medalFleets, emptyRaceColumnNames, /* trackedRegattaRegistry */ null,
EmptyRaceLogStore.INSTANCE);
Series medalSeries = new SeriesImpl("Medal", /* isMedal */ true, medalFleets, emptyRaceColumnNames, /* trackedRegattaRegistry */ null);
series.add(medalSeries);
Regatta regatta = new RegattaImpl(regattaBaseName, boatClass, series, persistent, scoringScheme, "123");
return regatta;
@@ -387,7 +382,7 @@ public class TestStoringAndLoadingEventsAndRegattas extends AbstractMongoDBTest
private void addRaceColumnsToSeries(List<String> finalRaceColumnNames, Series finalSeries) {
for (String raceColumnName : finalRaceColumnNames) {
finalSeries.addRaceColumn(raceColumnName, /* trackedRegattaRegistry */ null, EmptyRaceLogStore.INSTANCE);
finalSeries.addRaceColumn(raceColumnName, /* trackedRegattaRegistry */ null);
}
}
@@ -46,7 +46,6 @@ import com.sap.sailing.domain.persistence.DomainObjectFactory;
import com.sap.sailing.domain.persistence.MongoObjectFactory;
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.test.mock.MockedTrackedRaceWithFixedRankAndManyCompetitors;
import com.sap.sailing.mongodb.MongoDBService;
import com.sap.sailing.server.RacingEventService;
@@ -129,7 +128,7 @@ public class TestStoringAndRetrievingLeaderboardGroups extends AbstractMongoDBTe
new ResultDiscardingRuleImpl(discardIndexResultsStartingWithHowManyRaces), new LowPoint(), null);
racingEventService.addLeaderboard(leaderboard);
leaderboard.addRace(raceWithTwoCompetitors, raceColumnName1, /* medalRace */ false,
EmptyRaceLogStore.INSTANCE, leaderboard.getFleet(null));
leaderboard.getFleet(null));
leaderboard = new FlexibleLeaderboardImpl(leaderboardNames[1], new ScoreCorrectionImpl(),
new ResultDiscardingRuleImpl(discardIndexResultsStartingWithHowManyRaces), new LowPoint(), null);
racingEventService.addLeaderboard(leaderboard);
@@ -186,7 +185,7 @@ public class TestStoringAndRetrievingLeaderboardGroups extends AbstractMongoDBTe
new ResultDiscardingRuleImpl(discardIndexResultsStartingWithHowManyRaces), new LowPoint(), null);
leaderboards.add(leaderboard);
leaderboard.addRace(raceWithTwoCompetitors, raceColumnName1, /* medalRace */ false,
EmptyRaceLogStore.INSTANCE, leaderboard.getFleet(null));
leaderboard.getFleet(null));
leaderboard = new FlexibleLeaderboardImpl(leaderboardNames[1], new ScoreCorrectionImpl(),
new ResultDiscardingRuleImpl(discardIndexResultsStartingWithHowManyRaces), new LowPoint(), null);
leaderboards.add(leaderboard);
@@ -243,7 +242,7 @@ public class TestStoringAndRetrievingLeaderboardGroups extends AbstractMongoDBTe
new ResultDiscardingRuleImpl(discardIndexResultsStartingWithHowManyRaces), new LowPoint(), null);
leaderboards.add(leaderboard);
leaderboard.addRace(raceWithTwoCompetitors, raceColumnName1, /* medalRace */ false,
EmptyRaceLogStore.INSTANCE, leaderboard.getFleet(null));
leaderboard.getFleet(null));
leaderboard = new FlexibleLeaderboardImpl(leaderboardNames[1], new ScoreCorrectionImpl(),
new ResultDiscardingRuleImpl(discardIndexResultsStartingWithHowManyRaces), new LowPoint(), null);
leaderboards.add(leaderboard);
@@ -427,7 +426,7 @@ public class TestStoringAndRetrievingLeaderboardGroups extends AbstractMongoDBTe
final FlexibleLeaderboard leaderboard = new FlexibleLeaderboardImpl(leaderboardName, new ScoreCorrectionImpl(), new ResultDiscardingRuleImpl(discardIndexResultsStartingWithHowManyRaces), new LowPoint(), null);
final Fleet fleet = leaderboard.getFleet(null);
final RaceColumn race = leaderboard.addRaceColumn(columnName, false, EmptyRaceLogStore.INSTANCE, fleet);
final RaceColumn race = leaderboard.addRaceColumn(columnName, false, fleet);
leaderboards.add(leaderboard);
final LeaderboardGroup group = new LeaderboardGroupImpl(groupName, groupDescription, false, leaderboards);
@@ -34,7 +34,6 @@ import com.sap.sailing.domain.leaderboard.impl.ResultDiscardingRuleImpl;
import com.sap.sailing.domain.leaderboard.impl.ScoreCorrectionImpl;
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.test.mock.MockedTrackedRaceWithFixedRank;
import com.sap.sailing.domain.test.mock.MockedTrackedRaceWithFixedRankAndManyCompetitors;
import com.sap.sailing.domain.tracking.TrackedRace;
@@ -50,10 +49,10 @@ public class TestStoringAndRetrievingLeaderboards extends AbstractMongoDBTest {
final int[] discardIndexResultsStartingWithHowManyRaces = new int[] { 5, 8 };
FlexibleLeaderboardImpl leaderboard = new FlexibleLeaderboardImpl(leaderboardName, new ScoreCorrectionImpl(),
new ResultDiscardingRuleImpl(discardIndexResultsStartingWithHowManyRaces), new LowPoint(), null);
leaderboard.addRaceColumn("R1", /* medalRace */ false, EmptyRaceLogStore.INSTANCE);
RaceColumn r2 = leaderboard.addRaceColumn("R2", /* medalRace */ false, EmptyRaceLogStore.INSTANCE);
leaderboard.addRaceColumn("R1", /* medalRace */ false);
RaceColumn r2 = leaderboard.addRaceColumn("R2", /* medalRace */ false);
r2.setFactor(1.5);
RaceColumn r3 = leaderboard.addRaceColumn("R3", /* medalRace */ false, EmptyRaceLogStore.INSTANCE);
RaceColumn r3 = leaderboard.addRaceColumn("R3", /* medalRace */ false);
r3.setFactor(2.5);
new MongoObjectFactoryImpl(db).storeLeaderboard(leaderboard);
Leaderboard loadedLeaderboard = new DomainObjectFactoryImpl(db).loadLeaderboard(leaderboardName, /* regattaRegistry */ null);
@@ -77,8 +76,7 @@ public class TestStoringAndRetrievingLeaderboards extends AbstractMongoDBTest {
final String raceColumnName1 = "My First Race 1";
MockedTrackedRaceWithFixedRankAndManyCompetitors raceWithTwoCompetitors = new MockedTrackedRaceWithFixedRankAndManyCompetitors(wolfgang, /* rank */ 1, /* started */ true);
raceWithTwoCompetitors.addCompetitor(hasso);
leaderboard.addRace(raceWithTwoCompetitors, raceColumnName1, /* medalRace */ false, EmptyRaceLogStore.INSTANCE,
leaderboard.getFleet(null));
leaderboard.addRace(raceWithTwoCompetitors, raceColumnName1, /* medalRace */ false, leaderboard.getFleet(null));
leaderboard.setSuppressed(wolfgang, true);
assertTrue(Util.contains(leaderboard.getSuppressedCompetitors(), wolfgang));
assertFalse(Util.contains(leaderboard.getSuppressedCompetitors(), hasso));
@@ -117,16 +115,14 @@ public class TestStoringAndRetrievingLeaderboards extends AbstractMongoDBTest {
Competitor competitor = createCompetitor();
TrackedRace raceWithOneCompetitor1 = new MockedTrackedRaceWithFixedRank(competitor, /* rank */ 1, /* started */ true);
final String raceColumnName1 = "My First Race 1";
leaderboard.addRace(raceWithOneCompetitor1, raceColumnName1, /* medalRace */ false, EmptyRaceLogStore.INSTANCE,
leaderboard.getFleet(null));
leaderboard.addRace(raceWithOneCompetitor1, raceColumnName1, /* medalRace */ false, leaderboard.getFleet(null));
final String displayName = "$$$ ... The Renamed Competitor ... $$$";
leaderboard.setDisplayName(competitor, displayName);
new MongoObjectFactoryImpl(db).storeLeaderboard(leaderboard);
FlexibleLeaderboard loadedLeaderboard = (FlexibleLeaderboard) new DomainObjectFactoryImpl(db).loadLeaderboard(
leaderboardName, /* regattaRegistry */null);
// attach tracked race to leaderboard to ensure that competitor object is assigned properly
loadedLeaderboard.addRace(raceWithOneCompetitor1, raceColumnName1, /* medalRace, ignored */ false, EmptyRaceLogStore.INSTANCE,
leaderboard.getFleet(null));
loadedLeaderboard.addRace(raceWithOneCompetitor1, raceColumnName1, /* medalRace, ignored */ false, leaderboard.getFleet(null));
Competitor loadedCompetitor = loadedLeaderboard.getCompetitorByName(competitor.getName());
assertEquals(displayName, loadedLeaderboard.getDisplayName(loadedCompetitor));
}
@@ -166,14 +162,12 @@ public class TestStoringAndRetrievingLeaderboards extends AbstractMongoDBTest {
new ResultDiscardingRuleImpl(discardIndexResultsStartingWithHowManyRaces), new LowPoint(), null);
Competitor competitor = createCompetitor();
TrackedRace raceWithOneCompetitor = new MockedTrackedRaceWithFixedRank(competitor, /* rank */ 1, /* started */ true);
leaderboard.addRace(raceWithOneCompetitor, raceColumnName, /* medalRace */ false, EmptyRaceLogStore.INSTANCE,
leaderboard.getFleet(null));
leaderboard.addRace(raceWithOneCompetitor, raceColumnName, /* medalRace */ false, leaderboard.getFleet(null));
leaderboard.setCarriedPoints(competitor, carriedPointsForWolfgangHunger);
new MongoObjectFactoryImpl(db).storeLeaderboard(leaderboard);
FlexibleLeaderboard loadedLeaderboard = (FlexibleLeaderboard) new DomainObjectFactoryImpl(db).loadLeaderboard(leaderboardName, /* regattaRegistry */ null);
// attach tracked race to leaderboard to ensure that competitor object is assigned properly
loadedLeaderboard.addRace(raceWithOneCompetitor, raceColumnName, /* medalRace, ignored */ false, EmptyRaceLogStore.INSTANCE,
leaderboard.getFleet(null));
loadedLeaderboard.addRace(raceWithOneCompetitor, raceColumnName, /* medalRace, ignored */ false, leaderboard.getFleet(null));
assertEquals(leaderboardName, loadedLeaderboard.getName());
assertTrue(Arrays.equals(discardIndexResultsStartingWithHowManyRaces, loadedLeaderboard.getResultDiscardingRule()
.getDiscardIndexResultsStartingWithHowManyRaces()));
@@ -194,18 +188,16 @@ public class TestStoringAndRetrievingLeaderboards extends AbstractMongoDBTest {
Competitor competitor = createCompetitor();
TrackedRace raceWithOneCompetitor1 = new MockedTrackedRaceWithFixedRank(competitor, /* rank */ 1, /* started */ true);
TrackedRace raceWithOneCompetitor2 = new MockedTrackedRaceWithFixedRank(competitor, /* rank */ 2, /* started */ true);
leaderboard.addRace(raceWithOneCompetitor1, raceColumnName1, /* medalRace */ false, EmptyRaceLogStore.INSTANCE,
leaderboard.getFleet(null));
leaderboard.addRace(raceWithOneCompetitor2, raceColumnName2, /* medalRace */ true, EmptyRaceLogStore.INSTANCE,
leaderboard.getFleet(null));
leaderboard.addRace(raceWithOneCompetitor1, raceColumnName1, /* medalRace */ false, leaderboard.getFleet(null));
leaderboard.addRace(raceWithOneCompetitor2, raceColumnName2, /* medalRace */ true, leaderboard.getFleet(null));
leaderboard.getScoreCorrection().correctScore(competitor, leaderboard.getRaceColumnByName(raceColumnName1), correctedPoints);
new MongoObjectFactoryImpl(db).storeLeaderboard(leaderboard);
FlexibleLeaderboard loadedLeaderboard = (FlexibleLeaderboard) new DomainObjectFactoryImpl(db).loadLeaderboard(leaderboardName, /* regattaRegistry */ null);
// attach tracked race to leaderboard to ensure that competitor object is assigned properly
RaceColumn loadedColumn1 = loadedLeaderboard.addRace(raceWithOneCompetitor1, raceColumnName1, /* medalRace, ignored */ false,
EmptyRaceLogStore.INSTANCE, leaderboard.getFleet(null));
leaderboard.getFleet(null));
RaceColumn loadedColumn2 = loadedLeaderboard.addRace(raceWithOneCompetitor2, raceColumnName2, /* medalRace, ignored */ false,
EmptyRaceLogStore.INSTANCE, leaderboard.getFleet(null));
leaderboard.getFleet(null));
assertEquals(leaderboardName, loadedLeaderboard.getName());
assertTrue(loadedLeaderboard.getScoreCorrection().isScoreCorrected(competitor, loadedColumn1));
assertEquals(correctedPoints, (double) loadedLeaderboard.getScoreCorrection().getExplicitScoreCorrection(competitor, loadedColumn1), 0.00000001);
@@ -224,18 +216,16 @@ public class TestStoringAndRetrievingLeaderboards extends AbstractMongoDBTest {
Competitor competitor = createCompetitor();
TrackedRace raceWithOneCompetitor1 = new MockedTrackedRaceWithFixedRank(competitor, /* rank */ 1, /* started */ true);
TrackedRace raceWithOneCompetitor2 = new MockedTrackedRaceWithFixedRank(competitor, /* rank */ 2, /* started */ true);
leaderboard.addRace(raceWithOneCompetitor1, raceColumnName1, /* medalRace */ false, EmptyRaceLogStore.INSTANCE,
leaderboard.getFleet(null));
leaderboard.addRace(raceWithOneCompetitor2, raceColumnName2, /* medalRace */ true, EmptyRaceLogStore.INSTANCE,
leaderboard.getFleet(null));
leaderboard.addRace(raceWithOneCompetitor1, raceColumnName1, /* medalRace */ false, leaderboard.getFleet(null));
leaderboard.addRace(raceWithOneCompetitor2, raceColumnName2, /* medalRace */ true, leaderboard.getFleet(null));
leaderboard.getScoreCorrection().setMaxPointsReason(competitor, leaderboard.getRaceColumnByName(raceColumnName2), maxPointsReason);
new MongoObjectFactoryImpl(db).storeLeaderboard(leaderboard);
FlexibleLeaderboard loadedLeaderboard = (FlexibleLeaderboard) new DomainObjectFactoryImpl(db).loadLeaderboard(leaderboardName, /* regattaRegistry */ null);
// attach tracked race to leaderboard to ensure that competitor object is assigned properly
RaceColumn loadedColumn1 = loadedLeaderboard.addRace(raceWithOneCompetitor1, raceColumnName1, /* medalRace, ignored */ false,
EmptyRaceLogStore.INSTANCE, leaderboard.getFleet(null));
leaderboard.getFleet(null));
RaceColumn loadedColumn2 = loadedLeaderboard.addRace(raceWithOneCompetitor2, raceColumnName2, /* medalRace, ignored */ false,
EmptyRaceLogStore.INSTANCE, leaderboard.getFleet(null));
leaderboard.getFleet(null));
assertEquals(leaderboardName, loadedLeaderboard.getName());
assertFalse(loadedLeaderboard.getScoreCorrection().isScoreCorrected(competitor, loadedColumn1));
assertTrue(loadedLeaderboard.getScoreCorrection().isScoreCorrected(competitor, loadedColumn2));
@@ -256,18 +246,18 @@ public class TestStoringAndRetrievingLeaderboards extends AbstractMongoDBTest {
TrackedRace raceWithOneCompetitor1 = new MockedTrackedRaceWithFixedRank(competitor, /* rank */ 1, /* started */ true);
TrackedRace raceWithOneCompetitor2 = new MockedTrackedRaceWithFixedRank(competitor, /* rank */ 2, /* started */ true);
leaderboard.addRace(raceWithOneCompetitor1, raceColumnName1, /* medalRace */ false,
EmptyRaceLogStore.INSTANCE, leaderboard.getFleet(null));
leaderboard.getFleet(null));
leaderboard.addRace(raceWithOneCompetitor2, raceColumnName2, /* medalRace */ true,
EmptyRaceLogStore.INSTANCE, leaderboard.getFleet(null));
leaderboard.getFleet(null));
leaderboard.getScoreCorrection().correctScore(competitor, leaderboard.getRaceColumnByName(raceColumnName1), correctedPoints);
leaderboard.getScoreCorrection().setMaxPointsReason(competitor, leaderboard.getRaceColumnByName(raceColumnName2), maxPointsReason);
new MongoObjectFactoryImpl(db).storeLeaderboard(leaderboard);
FlexibleLeaderboard loadedLeaderboard = (FlexibleLeaderboard) new DomainObjectFactoryImpl(db).loadLeaderboard(leaderboardName, /* regattaRegistry */ null);
// attach tracked race to leaderboard to ensure that competitor object is assigned properly
RaceColumn loadedColumn1 = loadedLeaderboard.addRace(raceWithOneCompetitor1, raceColumnName1, /* medalRace, ignored */ false,
EmptyRaceLogStore.INSTANCE, leaderboard.getFleet(null));
leaderboard.getFleet(null));
RaceColumn loadedColumn2 = loadedLeaderboard.addRace(raceWithOneCompetitor2, raceColumnName2, /* medalRace, ignored */ false,
EmptyRaceLogStore.INSTANCE, leaderboard.getFleet(null));
leaderboard.getFleet(null));
assertEquals(leaderboardName, loadedLeaderboard.getName());
assertTrue(loadedLeaderboard.getScoreCorrection().isScoreCorrected(competitor, loadedColumn1));
assertEquals(correctedPoints, (double) loadedLeaderboard.getScoreCorrection().getExplicitScoreCorrection(competitor, loadedColumn1), 0.000000001);
@@ -19,7 +19,6 @@ import com.sap.sailing.domain.common.TimePoint;
import com.sap.sailing.domain.racelog.RaceLog;
import com.sap.sailing.domain.racelog.RaceLogEventFactory;
import com.sap.sailing.domain.racelog.RaceLogRaceStatus;
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
import com.sap.sailing.domain.test.AbstractTracTracLiveTest;
import com.sap.sailing.domain.tracking.DynamicRaceDefinitionSet;
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
@@ -60,8 +59,7 @@ public class TestStoringAndRetrievingRaceLogsTest extends AbstractTracTracLiveTe
@Test
public void testStoreAFewRaceLogEntries() throws UnknownHostException, MongoException, InterruptedException {
DomainFactory domainFactory = DomainFactory.INSTANCE;
Regatta domainEvent = domainFactory.getOrCreateDefaultRegatta(getTracTracEvent(), /* trackedRegattaRegistry */ null,
EmptyRaceLogStore.INSTANCE);
Regatta domainEvent = domainFactory.getOrCreateDefaultRegatta(getTracTracEvent(), /* trackedRegattaRegistry */ null);
DynamicTrackedRegatta trackedRegatta = new RacingEventServiceImpl().getOrCreateTrackedRegatta(domainEvent);
Iterable<Receiver> typeControllers = domainFactory.getUpdateReceivers(trackedRegatta, getTracTracEvent(),
EmptyWindStore.INSTANCE,
@@ -27,7 +27,6 @@ import com.sap.sailing.domain.common.impl.DegreePosition;
import com.sap.sailing.domain.common.impl.WindSourceImpl;
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.test.AbstractTracTracLiveTest;
import com.sap.sailing.domain.tracking.DynamicRaceDefinitionSet;
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
@@ -71,8 +70,7 @@ public class TestStoringAndRetrievingWindTracksTest extends AbstractTracTracLive
@Test
public void testStoreAFewWindEntries() throws UnknownHostException, MongoException, InterruptedException {
DomainFactory domainFactory = DomainFactory.INSTANCE;
Regatta domainEvent = domainFactory.getOrCreateDefaultRegatta(getTracTracEvent(), /* trackedRegattaRegistry */ null,
EmptyRaceLogStore.INSTANCE);
Regatta domainEvent = domainFactory.getOrCreateDefaultRegatta(getTracTracEvent(), /* trackedRegattaRegistry */ null);
DynamicTrackedRegatta trackedRegatta = new RacingEventServiceImpl().getOrCreateTrackedRegatta(domainEvent);
Iterable<Receiver> typeControllers = domainFactory.getUpdateReceivers(trackedRegatta, getTracTracEvent(),
EmptyWindStore.INSTANCE,
@@ -1,73 +1,72 @@
package com.sap.sailing.server.gateway.serialization.impl.leaderboard;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.json.simple.JSONArray;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.RaceColumn;
import com.sap.sailing.domain.base.RaceColumnInSeries;
import com.sap.sailing.domain.base.Series;
import com.sap.sailing.domain.base.SeriesData;
import com.sap.sailing.domain.base.impl.FleetImpl;
import com.sap.sailing.domain.base.impl.SeriesImpl;
import com.sap.sailing.domain.leaderboard.Leaderboard;
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
import com.sap.sailing.server.gateway.serialization.ExtensionJsonSerializer;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class SeriesDataOfLeaderboardExtensionSerializer extends ExtensionJsonSerializer<Leaderboard, SeriesData> {
public static final String FIELD_SERIES = "series";
public SeriesDataOfLeaderboardExtensionSerializer(JsonSerializer<SeriesData> extensionSerializer) {
super(extensionSerializer);
}
@Override
public String getExtensionFieldName() {
return FIELD_SERIES;
}
@Override
public Object serializeExtension(Leaderboard parent) {
Map<Series, List<RaceColumn>> seriesToRaceColumns = new HashMap<Series, List<RaceColumn>>();
Series defaultSeries = null;
for (RaceColumn raceColumn : parent.getRaceColumns()) {
if (raceColumn instanceof RaceColumnInSeries) {
RaceColumnInSeries raceColumnInSeries = (RaceColumnInSeries) raceColumn;
insertSeriesIfNew(seriesToRaceColumns, raceColumnInSeries.getSeries()).add(raceColumnInSeries);
} else {
if (defaultSeries == null) {
defaultSeries = new SeriesImpl(
"Default Series",
false,
Collections.<Fleet>singleton(new FleetImpl("Default Fleet")),
Collections.<String>emptyList(),
null, EmptyRaceLogStore.INSTANCE);
insertSeriesIfNew(seriesToRaceColumns, defaultSeries);
}
seriesToRaceColumns.get(defaultSeries).add(raceColumn);
}
}
JSONArray result = new JSONArray();
for (Series series : seriesToRaceColumns.keySet()) {
result.add(serialize(series));
}
return result;
}
private List<RaceColumn> insertSeriesIfNew(Map<Series, List<RaceColumn>> target, Series newSeries) {
if (!target.containsKey(newSeries)) {
target.put(newSeries, new ArrayList<RaceColumn>());
}
return target.get(newSeries);
}
}
package com.sap.sailing.server.gateway.serialization.impl.leaderboard;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.json.simple.JSONArray;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.RaceColumn;
import com.sap.sailing.domain.base.RaceColumnInSeries;
import com.sap.sailing.domain.base.Series;
import com.sap.sailing.domain.base.SeriesData;
import com.sap.sailing.domain.base.impl.FleetImpl;
import com.sap.sailing.domain.base.impl.SeriesImpl;
import com.sap.sailing.domain.leaderboard.Leaderboard;
import com.sap.sailing.server.gateway.serialization.ExtensionJsonSerializer;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class SeriesDataOfLeaderboardExtensionSerializer extends ExtensionJsonSerializer<Leaderboard, SeriesData> {
public static final String FIELD_SERIES = "series";
public SeriesDataOfLeaderboardExtensionSerializer(JsonSerializer<SeriesData> extensionSerializer) {
super(extensionSerializer);
}
@Override
public String getExtensionFieldName() {
return FIELD_SERIES;
}
@Override
public Object serializeExtension(Leaderboard parent) {
Map<Series, List<RaceColumn>> seriesToRaceColumns = new HashMap<Series, List<RaceColumn>>();
Series defaultSeries = null;
for (RaceColumn raceColumn : parent.getRaceColumns()) {
if (raceColumn instanceof RaceColumnInSeries) {
RaceColumnInSeries raceColumnInSeries = (RaceColumnInSeries) raceColumn;
insertSeriesIfNew(seriesToRaceColumns, raceColumnInSeries.getSeries()).add(raceColumnInSeries);
} else {
if (defaultSeries == null) {
defaultSeries = new SeriesImpl(
"Default Series",
false,
Collections.<Fleet>singleton(new FleetImpl("Default Fleet")),
Collections.<String>emptyList(),
null);
insertSeriesIfNew(seriesToRaceColumns, defaultSeries);
}
seriesToRaceColumns.get(defaultSeries).add(raceColumn);
}
}
JSONArray result = new JSONArray();
for (Series series : seriesToRaceColumns.keySet()) {
result.add(serialize(series));
}
return result;
}
private List<RaceColumn> insertSeriesIfNew(Map<Series, List<RaceColumn>> target, Series newSeries) {
if (!target.containsKey(newSeries)) {
target.put(newSeries, new ArrayList<RaceColumn>());
}
return target.get(newSeries);
}
}
@@ -38,10 +38,7 @@ import com.sap.sailing.domain.common.impl.DegreePosition;
import com.sap.sailing.domain.common.impl.Util.Triple;
import com.sap.sailing.domain.common.impl.WindSourceImpl;
import com.sap.sailing.domain.persistence.MongoFactory;
import com.sap.sailing.domain.persistence.MongoRaceLogStoreFactory;
import com.sap.sailing.domain.persistence.MongoWindStoreFactory;
import com.sap.sailing.domain.racelog.RaceLogStore;
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
import com.sap.sailing.domain.tracking.TrackedRace;
import com.sap.sailing.domain.tracking.Wind;
@@ -118,8 +115,6 @@ public class AdminApp extends SailingServerHttpServlet {
private static final String PARAM_NAME_WINDSTORE = "windstore";
private static final String PARAM_NAME_RACELOGSTORE = "racelogstore";
private static final String STORE_EMPTY = "empty";
private static final String STORE_MONGO = "mongo";
@@ -471,7 +466,7 @@ public class AdminApp extends SailingServerHttpServlet {
URL jsonURL = new URL(req.getParameter(PARAM_NAME_EVENT_JSON_URL));
URI liveURI = new URI(req.getParameter(PARAM_NAME_LIVE_URI));
URI storedURI = new URI(req.getParameter(PARAM_NAME_STORED_URI));
getService().addRegatta(jsonURL, liveURI, storedURI, getWindStore(req), /* timeoutInMilliseconds */ 60000, getRaceLogStore(req));
getService().addRegatta(jsonURL, liveURI, storedURI, getWindStore(req), /* timeoutInMilliseconds */ 60000);
}
private WindStore getWindStore(HttpServletRequest req) throws UnknownHostException, MongoException {
@@ -490,29 +485,12 @@ public class AdminApp extends SailingServerHttpServlet {
}
return EmptyWindStore.INSTANCE;
}
private RaceLogStore getRaceLogStore(HttpServletRequest req) throws UnknownHostException, MongoException {
String raceLogStore = req.getParameter(PARAM_NAME_RACELOGSTORE);
if (raceLogStore != null) {
if (raceLogStore.equals(STORE_EMPTY)) {
return EmptyRaceLogStore.INSTANCE;
} else if (raceLogStore.equals(STORE_MONGO)) {
return MongoRaceLogStoreFactory.INSTANCE.getMongoRaceLogStore(
MongoFactory.INSTANCE.getDefaultMongoObjectFactory(),
MongoFactory.INSTANCE.getDefaultDomainObjectFactory());
} else {
log("Couldn't find wind store "+raceLogStore+". Using EmptyWindStore instead.");
return EmptyRaceLogStore.INSTANCE;
}
}
return EmptyRaceLogStore.INSTANCE;
}
private void addRace(HttpServletRequest req, HttpServletResponse resp) throws MongoException, Exception {
URL paramURL = new URL(req.getParameter(PARAM_NAME_PARAM_URL));
URI liveURI = new URI(req.getParameter(PARAM_NAME_LIVE_URI));
URI storedURI = new URI(req.getParameter(PARAM_NAME_STORED_URI));
getService().addTracTracRace(paramURL, liveURI, storedURI, getWindStore(req), /* timeoutInMilliseconds */ 60000, getRaceLogStore(req));
getService().addTracTracRace(paramURL, liveURI, storedURI, getWindStore(req), /* timeoutInMilliseconds */ 60000);
}
private void stopRace(HttpServletRequest req, HttpServletResponse resp) throws MalformedURLException, IOException, InterruptedException {
@@ -22,7 +22,6 @@ import com.sap.sailing.domain.base.impl.SeriesImpl;
import com.sap.sailing.domain.common.RegattaName;
import com.sap.sailing.domain.common.ScoringSchemeType;
import com.sap.sailing.domain.common.impl.Util;
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
public class RegattaReplicationTest extends AbstractServerReplicationTest {
@Test
@@ -31,8 +30,7 @@ public class RegattaReplicationTest extends AbstractServerReplicationTest {
final String boatClassName = "49er";
final Iterable<Series> series = Collections.emptyList();
Regatta masterRegatta = master.createRegatta(baseEventName, boatClassName, UUID.randomUUID(), series,
/* persistent */ true, DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT),
EmptyRaceLogStore.INSTANCE);
/* persistent */ true, DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT));
Thread.sleep(1000);
Regatta replicatedRegatta = replica.getRegatta(new RegattaName(masterRegatta.getName()));
assertNotNull(replicatedRegatta);
@@ -46,17 +44,13 @@ public class RegattaReplicationTest extends AbstractServerReplicationTest {
final String boatClassName = "49er";
final List<String> emptyRaceColumnNamesList = Collections.emptyList();
Series qualification = new SeriesImpl("Qualification", /* isMedal */ false,
Arrays.asList(new Fleet[] { new FleetImpl("Yellow"), new FleetImpl("Blue") }), emptyRaceColumnNamesList, /* trackedRegattaRegistry */ null,
EmptyRaceLogStore.INSTANCE);
Arrays.asList(new Fleet[] { new FleetImpl("Yellow"), new FleetImpl("Blue") }), emptyRaceColumnNamesList, /* trackedRegattaRegistry */ null);
Series finals = new SeriesImpl("Finals", /* isMedal */ false,
Arrays.asList(new Fleet[] { new FleetImpl("Gold", 1), new FleetImpl("Silver", 2) }), emptyRaceColumnNamesList, /* trackedRegattaRegistry */ null,
EmptyRaceLogStore.INSTANCE);
Arrays.asList(new Fleet[] { new FleetImpl("Gold", 1), new FleetImpl("Silver", 2) }), emptyRaceColumnNamesList, /* trackedRegattaRegistry */ null);
Series medal = new SeriesImpl("Medal", /* isMedal */ true,
Arrays.asList(new Fleet[] { new FleetImpl("Medal") }), emptyRaceColumnNamesList, /* trackedRegattaRegistry */ null,
EmptyRaceLogStore.INSTANCE);
Arrays.asList(new Fleet[] { new FleetImpl("Medal") }), emptyRaceColumnNamesList, /* trackedRegattaRegistry */ null);
Regatta masterRegatta = master.createRegatta(baseEventName, boatClassName,
UUID.randomUUID(), Arrays.asList(new Series[] { qualification, finals, medal }), /* persistent */ true, DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT),
EmptyRaceLogStore.INSTANCE);
UUID.randomUUID(), Arrays.asList(new Series[] { qualification, finals, medal }), /* persistent */ true, DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT));
Thread.sleep(1000);
Regatta replicatedRegatta = replica.getRegatta(new RegattaName(masterRegatta.getName()));
assertNotNull(replicatedRegatta);
@@ -28,7 +28,6 @@ import com.sap.sailing.domain.common.impl.Util;
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.test.AbstractTracTracLiveTest;
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
import com.sap.sailing.domain.tracking.RaceTrackingConnectivityParameters;
@@ -81,7 +80,7 @@ public class TrackRaceReplicationTest extends AbstractServerReplicationTest {
});
trackingParams = com.sap.sailing.domain.tractracadapter.DomainFactory.INSTANCE.createTrackingConnectivityParameters(paramURL,
liveURI, storedURI, startOfTracking, endOfTracking, /* delayToLiveInMillis */
0l, /* simulateWithStartTimeNow */false, EmptyWindStore.INSTANCE, EmptyRaceLogStore.INSTANCE);
0l, /* simulateWithStartTimeNow */false, EmptyWindStore.INSTANCE);
}
private void startTracking() throws Exception, InterruptedException {
@@ -22,7 +22,6 @@ import com.sap.sailing.domain.leaderboard.Leaderboard;
import com.sap.sailing.domain.leaderboard.impl.HighPoint;
import com.sap.sailing.domain.leaderboard.impl.LowPoint;
import com.sap.sailing.domain.leaderboard.impl.ResultDiscardingRuleImpl;
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
import com.sap.sailing.domain.test.AbstractLeaderboardTest;
import com.sap.sailing.domain.test.mock.MockedTrackedRaceWithFixedRank;
import com.sap.sailing.domain.tracking.TrackedRace;
@@ -71,15 +70,15 @@ public class LeaderboardDiscardingRulesTest {
Competitor hasso = AbstractLeaderboardTest.createCompetitor("Dr. Hasso Plattner");
final TrackedRace race1 = new MockedTrackedRaceWithFixedRank(hasso, /* rank */ 123, /* started */ true, boatClass);
leaderboard.addRace(race1, "R1", /* medalRace */ false, EmptyRaceLogStore.INSTANCE, fleet);
leaderboard.addRace(race1, "R1", /* medalRace */ false, fleet);
final TrackedRace race2 = new MockedTrackedRaceWithFixedRank(hasso, /* rank */ 123, /* started */ true, boatClass);
leaderboard.addRace(race2, "R2", /* medalRace */ false, EmptyRaceLogStore.INSTANCE, fleet);
leaderboard.addRace(race2, "R2", /* medalRace */ false, fleet);
Competitor wolfgang = AbstractLeaderboardTest.createCompetitor("Wolfgang Hunger");
final TrackedRace race3 = new MockedTrackedRaceWithFixedRank(wolfgang, /* rank */ 123, /* started */ true, boatClass);
leaderboard.addRace(race3, "R3", /* medalRace */ false, EmptyRaceLogStore.INSTANCE, fleet);
leaderboard.addRace(race3, "R3", /* medalRace */ false, fleet);
final TrackedRace race4 = new MockedTrackedRaceWithFixedRank(wolfgang, /* rank */ 124, /* started */ true, boatClass);
leaderboard.addRace(race4, "R4", /* medalRace */ false, EmptyRaceLogStore.INSTANCE, fleet);
leaderboard.addRace(race4, "R4", /* medalRace */ false, fleet);
leaderboard.getScoreCorrection().correctScore(hasso, leaderboard.getRaceColumnByName("R3"), 123.);
leaderboard.getScoreCorrection().correctScore(hasso, leaderboard.getRaceColumnByName("R4"), 123.);
@@ -111,19 +110,19 @@ public class LeaderboardDiscardingRulesTest {
Competitor rasmus = AbstractLeaderboardTest.createCompetitor("Rasmus");
final TrackedRace race1 = new MockedTrackedRaceWithFixedRank(rasmus, /* rank */ 2, /* started */ true, boatClass); // score 2.0
leaderboard.addRace(race1, "R1", /* medalRace */ false, EmptyRaceLogStore.INSTANCE, fleet);
leaderboard.addRace(race1, "R1", /* medalRace */ false, fleet);
final TrackedRace race2 = new MockedTrackedRaceWithFixedRank(rasmus, /* rank */ 2, /* started */ true, boatClass); // score 2.0
leaderboard.addRace(race2, "R2", /* medalRace */ false, EmptyRaceLogStore.INSTANCE, fleet);
leaderboard.addRace(race2, "R2", /* medalRace */ false, fleet);
Competitor jes = AbstractLeaderboardTest.createCompetitor("Jes");
final TrackedRace race3 = new MockedTrackedRaceWithFixedRank(jes, /* rank */ 2, /* started */ true, boatClass); // score 2.0
leaderboard.addRace(race3, "R3", /* medalRace */ false, EmptyRaceLogStore.INSTANCE, fleet);
leaderboard.addRace(race3, "R3", /* medalRace */ false, fleet);
final TrackedRace race4 = new MockedTrackedRaceWithFixedRank(jes, /* rank */ 3, /* started */ true, boatClass); // score 1.0
leaderboard.addRace(race4, "R4", /* medalRace */ false, EmptyRaceLogStore.INSTANCE, fleet);
leaderboard.addRace(race4, "R4", /* medalRace */ false, fleet);
Competitor nobody = AbstractLeaderboardTest.createCompetitor("Nobody");
final TrackedRace race5 = new MockedTrackedRaceWithFixedRank(nobody, /* rank */ 3, /* started */ true, boatClass); // score 1.0
leaderboard.addRace(race5, "R5", /* medalRace */ false, EmptyRaceLogStore.INSTANCE, fleet);
leaderboard.addRace(race5, "R5", /* medalRace */ false, fleet);
leaderboard.getScoreCorrection().correctScore(rasmus, leaderboard.getRaceColumnByName("R3"), 2.0);
leaderboard.getScoreCorrection().correctScore(rasmus, leaderboard.getRaceColumnByName("R4"), 2.0);
@@ -156,15 +155,15 @@ public class LeaderboardDiscardingRulesTest {
Competitor hasso = AbstractLeaderboardTest.createCompetitor("Dr. Hasso Plattner");
final TrackedRace race1 = new MockedTrackedRaceWithFixedRank(hasso, /* rank */ 123, /* started */ true, boatClass);
leaderboard.addRace(race1, "R1", /* medalRace */ false, EmptyRaceLogStore.INSTANCE, fleet);
leaderboard.addRace(race1, "R1", /* medalRace */ false, fleet);
final TrackedRace race2 = new MockedTrackedRaceWithFixedRank(hasso, /* rank */ 123, /* started */ true, boatClass);
leaderboard.addRace(race2, "R2", /* medalRace */ false, EmptyRaceLogStore.INSTANCE, fleet);
leaderboard.addRace(race2, "R2", /* medalRace */ false, fleet);
Competitor wolfgang = AbstractLeaderboardTest.createCompetitor("Wolfgang Hunger");
final TrackedRace race3 = new MockedTrackedRaceWithFixedRank(wolfgang, /* rank */ 123, /* started */ true, boatClass);
leaderboard.addRace(race3, "R3", /* medalRace */ false, EmptyRaceLogStore.INSTANCE, fleet);
leaderboard.addRace(race3, "R3", /* medalRace */ false, fleet);
final TrackedRace race4 = new MockedTrackedRaceWithFixedRank(wolfgang, /* rank */ 124, /* started */ true, boatClass);
leaderboard.addRace(race4, "R4", /* medalRace */ false, EmptyRaceLogStore.INSTANCE, fleet);
leaderboard.addRace(race4, "R4", /* medalRace */ false, fleet);
leaderboard.getScoreCorrection().correctScore(hasso, leaderboard.getRaceColumnByName("R3"), 123.);
leaderboard.getScoreCorrection().correctScore(hasso, leaderboard.getRaceColumnByName("R4"), 123.);
@@ -29,7 +29,6 @@ import com.sap.sailing.domain.base.impl.CourseImpl;
import com.sap.sailing.domain.base.impl.RaceDefinitionImpl;
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.tracking.RaceTracker;
import com.sap.sailing.domain.tracking.TrackedRace;
import com.sap.sailing.domain.tracking.TrackedRegatta;
@@ -62,8 +61,7 @@ public class RaceTrackerStartStopTest {
racingEventService = new RacingEventServiceImplMock();
boatClass = new BoatClassImpl(BOATCLASSNAME, /* typicallyStartsUpwind */ true);
regatta = new RegattaImpl(EVENTNAME, boatClass, /* trackedRegattaRegistry */ null,
DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), UUID.randomUUID(),
EmptyRaceLogStore.INSTANCE);
DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), UUID.randomUUID());
racingEventService.getEventsByName().put(EVENTNAME, regatta);
TrackedRegatta trackedRegatta1 = racingEventService.getOrCreateTrackedRegatta(regatta);
racingEventService.getEventsByNameMap().put(EVENTNAME, regatta);
@@ -20,7 +20,6 @@ import org.junit.Test;
import com.sap.sailing.domain.base.RaceDefinition;
import com.sap.sailing.domain.common.impl.Util;
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
import com.sap.sailing.domain.tracking.RaceListener;
import com.sap.sailing.domain.tracking.RacesHandle;
import com.sap.sailing.domain.tracking.TrackedRace;
@@ -61,8 +60,7 @@ public class RaceTrackerTest {
public void setUp() throws Exception {
service = new RacingEventServiceImpl();
logger.info("Calling service.addTracTracRace");
raceHandle = service.addTracTracRace(paramUrl, liveUri, storedUri, EmptyWindStore.INSTANCE, /* timeoutInMilliseconds */ 60000,
EmptyRaceLogStore.INSTANCE);
raceHandle = service.addTracTracRace(paramUrl, liveUri, storedUri, EmptyWindStore.INSTANCE, /* timeoutInMilliseconds */ 60000);
logger.info("Calling raceHandle.getRaces()");
Set<RaceDefinition> races = raceHandle.getRaces(); // wait for RaceDefinition to be completely wired in Regatta
logger.info("Obtained races: "+races);
@@ -118,8 +116,7 @@ public class RaceTrackerTest {
RaceDefinition oldRaceDefinition = oldTrackedRace.getRace();
assertTrue(!Util.isEmpty(raceHandle.getRegatta().getAllRaces()));
service.removeRegatta(raceHandle.getRegatta());
RacesHandle myRaceHandle = service.addTracTracRace(paramUrl, liveUri, storedUri, EmptyWindStore.INSTANCE, /* timeoutInMilliseconds */ 60000,
EmptyRaceLogStore.INSTANCE);
RacesHandle myRaceHandle = service.addTracTracRace(paramUrl, liveUri, storedUri, EmptyWindStore.INSTANCE, /* timeoutInMilliseconds */ 60000);
TrackedRegatta newTrackedRegatta = myRaceHandle.getTrackedRegatta();
assertNotSame(oldTrackedRegatta, newTrackedRegatta);
TrackedRace newTrackedRace = getTrackedRace(newTrackedRegatta);
@@ -143,8 +140,7 @@ public class RaceTrackerTest {
logger.entering(getClass().getName(), "testTrackingSameRaceWithoutStopping");
TrackedRegatta oldTrackedRegatta = raceHandle.getTrackedRegatta();
TrackedRace oldTrackedRace = getTrackedRace(oldTrackedRegatta);
RacesHandle myRaceHandle = service.addTracTracRace(paramUrl, liveUri, storedUri, EmptyWindStore.INSTANCE, /* timeoutInMilliseconds */ 60000,
EmptyRaceLogStore.INSTANCE);
RacesHandle myRaceHandle = service.addTracTracRace(paramUrl, liveUri, storedUri, EmptyWindStore.INSTANCE, /* timeoutInMilliseconds */ 60000);
TrackedRegatta newTrackedEvent = myRaceHandle.getTrackedRegatta();
TrackedRace newTrackedRace = getTrackedRace(newTrackedEvent);
// expecting a new tracked race to be created when starting over with tracking
@@ -40,7 +40,7 @@ import com.sap.sailing.domain.leaderboard.LeaderboardRegistry;
import com.sap.sailing.domain.leaderboard.RegattaLeaderboard;
import com.sap.sailing.domain.leaderboard.ScoringScheme;
import com.sap.sailing.domain.racelog.RaceLogEvent;
import com.sap.sailing.domain.racelog.RaceLogStore;
import com.sap.sailing.domain.racelog.RaceLogIdentifier;
import com.sap.sailing.domain.swisstimingadapter.SwissTimingFactory;
import com.sap.sailing.domain.tracking.RaceListener;
import com.sap.sailing.domain.tracking.RaceTracker;
@@ -111,7 +111,7 @@ public interface RacingEventService extends TrackedRegattaRegistry, RegattaFetch
* if a race definition is not received for a race of this event within this time, the race tracker for
* that race is stopped; use -1 to wait forever
*/
Regatta addRegatta(URL jsonURL, URI liveURI, URI storedURI, WindStore windStore, long timeoutInMilliseconds, RaceLogStore raceLogStore)
Regatta addRegatta(URL jsonURL, URI liveURI, URI storedURI, WindStore windStore, long timeoutInMilliseconds)
throws MalformedURLException, FileNotFoundException, URISyntaxException, IOException, ParseException,
org.json.simple.parser.ParseException, Exception;
@@ -132,12 +132,11 @@ public interface RacingEventService extends TrackedRegattaRegistry, RegattaFetch
* already being tracked, then regardless of the <code>windStore</code> selection the existing tracker will be used
* and its race handle will be returned. A log message will indicate a potential wind store mismatch (based on
* {@link WindStore#equals(Object)}).
*
* @param timeoutInMilliseconds
* if the race definition is not received for the race within this time, the race tracker for
* that race is stopped; use -1 to wait forever
*/
RacesHandle addTracTracRace(URL paramURL, URI liveURI, URI storedURI, WindStore windStore, long timeoutInMilliseconds, RaceLogStore raceLogStore)
RacesHandle addTracTracRace(URL paramURL, URI liveURI, URI storedURI, WindStore windStore, long timeoutInMilliseconds)
throws MalformedURLException, FileNotFoundException, URISyntaxException, Exception;
/**
@@ -154,7 +153,7 @@ public interface RacingEventService extends TrackedRegattaRegistry, RegattaFetch
*/
RacesHandle addTracTracRace(RegattaIdentifier regattaToAddTo, URL paramURL, URI liveURI, URI storedURI,
TimePoint trackingStartTime, TimePoint trackingEndTime, WindStore windStore,
long timeoutForReceivingRaceDefinitionInMilliseconds, boolean simulateWithStartTimeNow, RaceLogStore raceLogStore)
long timeoutForReceivingRaceDefinitionInMilliseconds, boolean simulateWithStartTimeNow)
throws MalformedURLException, FileNotFoundException, URISyntaxException, Exception;
/**
@@ -289,7 +288,7 @@ public interface RacingEventService extends TrackedRegattaRegistry, RegattaFetch
* to add the races to. Otherwise, a default regatta as described above will be created and used.
*/
RacesHandle addSwissTimingRace(RegattaIdentifier regattaToAddTo, String raceID, String hostname, int port,
boolean canSendRequests, WindStore windStore, long timeoutInMilliseconds, RaceLogStore raceLogStore)
boolean canSendRequests, WindStore windStore, long timeoutInMilliseconds)
throws InterruptedException, UnknownHostException,
IOException, ParseException, Exception;
@@ -376,7 +375,7 @@ public interface RacingEventService extends TrackedRegattaRegistry, RegattaFetch
Regatta getOrCreateRegatta(String regattaName, String boatClassName, Serializable id);
Regatta createRegatta(String baseName, String boatClassName, Serializable id, Iterable<? extends Series> series, boolean persistent, ScoringScheme scoringScheme, RaceLogStore raceLogStore);
Regatta createRegatta(String baseName, String boatClassName, Serializable id, Iterable<? extends Series> series, boolean persistent, ScoringScheme scoringScheme);
/**
* Adds <code>raceDefinition</code> to the {@link Regatta} such that it will appear in {@link Regatta#getAllRaces()}
@@ -497,6 +496,6 @@ public interface RacingEventService extends TrackedRegattaRegistry, RegattaFetch
CourseArea getCourseArea(Serializable courseAreaId);
void recordRaceLogEvent(String leaderboardName, String raceColumnName, String fleetName, RaceLogEvent event);
void recordRaceLogEvent(RaceLogIdentifier identifier, RaceLogEvent event);
}
@@ -71,11 +71,8 @@ import com.sap.sailing.domain.leaderboard.meta.LeaderboardGroupMetaLeaderboard;
import com.sap.sailing.domain.persistence.DomainObjectFactory;
import com.sap.sailing.domain.persistence.MongoFactory;
import com.sap.sailing.domain.persistence.MongoObjectFactory;
import com.sap.sailing.domain.persistence.MongoRaceLogStoreFactory;
import com.sap.sailing.domain.racelog.RaceColumnIdentifier;
import com.sap.sailing.domain.racelog.RaceLogEvent;
import com.sap.sailing.domain.racelog.RaceLogStore;
import com.sap.sailing.domain.racelog.impl.RaceColumnIdentifierImpl;
import com.sap.sailing.domain.racelog.RaceLogIdentifier;
import com.sap.sailing.domain.swisstimingadapter.Race;
import com.sap.sailing.domain.swisstimingadapter.SailMasterConnector;
import com.sap.sailing.domain.swisstimingadapter.SailMasterMessage;
@@ -118,7 +115,6 @@ import com.sap.sailing.server.operationaltransformation.CreateEvent;
import com.sap.sailing.server.operationaltransformation.CreateTrackedRace;
import com.sap.sailing.server.operationaltransformation.RecordCompetitorGPSFix;
import com.sap.sailing.server.operationaltransformation.RecordMarkGPSFix;
import com.sap.sailing.server.operationaltransformation.RecordRaceLogEvent;
import com.sap.sailing.server.operationaltransformation.RecordWindFix;
import com.sap.sailing.server.operationaltransformation.RemoveEvent;
import com.sap.sailing.server.operationaltransformation.RemoveWindFix;
@@ -364,10 +360,8 @@ public class RacingEventServiceImpl implements RacingEventService, RegattaListen
if (leaderboard != null) {
if (leaderboard instanceof FlexibleLeaderboard) {
// uses the default fleet as the single fleet for the new column
RaceColumnIdentifier columnIdentifier = new RaceColumnIdentifierImpl(leaderboardName, columnName);
RaceColumn result = ((FlexibleLeaderboard) leaderboard).addRaceColumn(columnName, medalRace,
MongoRaceLogStoreFactory.INSTANCE.getMongoRaceLogStore(mongoObjectFactory, domainObjectFactory, columnIdentifier),
leaderboard.getFleet(null));
leaderboard.getFleet(null));
updateStoredLeaderboard((FlexibleLeaderboard) leaderboard);
return result;
} else {
@@ -605,13 +599,12 @@ public class RacingEventServiceImpl implements RacingEventService, RegattaListen
}
@Override
public Regatta addRegatta(URL jsonURL, URI liveURI, URI storedURI, WindStore windStore, long timeoutInMilliseconds,
RaceLogStore raceLogStore) throws Exception {
public Regatta addRegatta(URL jsonURL, URI liveURI, URI storedURI, WindStore windStore, long timeoutInMilliseconds) throws Exception {
JSONService jsonService = getTracTracDomainFactory().parseJSONURL(jsonURL);
Regatta regatta = null;
for (RaceRecord rr : jsonService.getRaceRecords()) {
URL paramURL = rr.getParamURL();
regatta = addTracTracRace(paramURL, liveURI, storedURI, windStore, timeoutInMilliseconds, raceLogStore).getRegatta();
regatta = addTracTracRace(paramURL, liveURI, storedURI, windStore, timeoutInMilliseconds).getRegatta();
}
return regatta;
}
@@ -620,8 +613,7 @@ public class RacingEventServiceImpl implements RacingEventService, RegattaListen
public Regatta getOrCreateRegatta(String baseEventName, String boatClassName, Serializable id) {
Regatta regatta = new RegattaImpl(baseEventName, getBaseDomainFactory().getOrCreateBoatClass(
boatClassName), this, com.sap.sailing.domain.base.DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT),
RegattaImpl.getFullName(baseEventName, boatClassName),
MongoRaceLogStoreFactory.INSTANCE.getMongoRaceLogStore(mongoObjectFactory, domainObjectFactory));
RegattaImpl.getFullName(baseEventName, boatClassName));
Regatta result = regattasByName.get(regatta.getName());
if (result == null) {
result = regatta;
@@ -633,11 +625,11 @@ public class RacingEventServiceImpl implements RacingEventService, RegattaListen
@Override
public Regatta createRegatta(String baseEventName, String boatClassName,
Serializable id, Iterable<? extends Series> series, boolean persistent, ScoringScheme scoringScheme, RaceLogStore raceLogStore) {
Serializable id, Iterable<? extends Series> series, boolean persistent, ScoringScheme scoringScheme) {
Regatta regatta = new RegattaImpl(baseEventName,
getBaseDomainFactory().getOrCreateBoatClass(boatClassName), series, persistent, scoringScheme, id);
logger.info("Created regatta " + regatta.getName() + " (" + hashCode() + ") on "+this);
cacheAndReplicateSpecificRegattaWithoutRaceColumns(regatta, raceLogStore);
cacheAndReplicateSpecificRegattaWithoutRaceColumns(regatta);
if (persistent) {
updateStoredRegatta(regatta);
}
@@ -667,20 +659,20 @@ public class RacingEventServiceImpl implements RacingEventService, RegattaListen
@Override
public RacesHandle addSwissTimingRace(RegattaIdentifier regattaToAddTo, String raceID, String hostname,
int port, boolean canSendRequests, WindStore windStore, long timeoutInMilliseconds, RaceLogStore raceLogStore) throws Exception {
int port, boolean canSendRequests, WindStore windStore, long timeoutInMilliseconds) throws Exception {
return addRace(
regattaToAddTo,
swissTimingDomainFactory.createTrackingConnectivityParameters(hostname, port, raceID, canSendRequests, delayToLiveInMillis,
swissTimingFactory, swissTimingDomainFactory, windStore, swissTimingAdapterPersistence, raceLogStore), windStore, timeoutInMilliseconds);
swissTimingFactory, swissTimingDomainFactory, windStore, swissTimingAdapterPersistence), windStore, timeoutInMilliseconds);
}
@Override
public RacesHandle addTracTracRace(URL paramURL, URI liveURI, URI storedURI, WindStore windStore,
long timeoutInMilliseconds, RaceLogStore raceLogStore) throws Exception {
long timeoutInMilliseconds) throws Exception {
return addRace(
/* regattaToAddTo */null, getTracTracDomainFactory().createTrackingConnectivityParameters(paramURL, liveURI, storedURI,
/* startOfTracking */null,
/* endOfTracking */null, delayToLiveInMillis, /* simulateWithStartTimeNow */false, windStore, raceLogStore), windStore,
/* endOfTracking */null, delayToLiveInMillis, /* simulateWithStartTimeNow */false, windStore), windStore,
timeoutInMilliseconds);
}
@@ -771,14 +763,14 @@ public class RacingEventServiceImpl implements RacingEventService, RegattaListen
* the series of this regatta must not have any {@link Series#getRaceColumns() race columns associated
* (yet)}.
*/
private void cacheAndReplicateSpecificRegattaWithoutRaceColumns(Regatta regatta, RaceLogStore raceLogStore) {
private void cacheAndReplicateSpecificRegattaWithoutRaceColumns(Regatta regatta) {
if (!regattasByName.containsKey(regatta.getName())) {
logger.info("putting regatta "+regatta.getName()+" ("+regatta.hashCode()+") into regattasByName of "+this);
regattasByName.put(regatta.getName(), regatta);
regatta.addRegattaListener(this);
replicate(new AddSpecificRegatta(regatta.getBaseName(), regatta.getBoatClass() == null ? null : regatta
.getBoatClass().getName(), regatta.getId(), getSeriesWithoutRaceColumnsConstructionParametersAsMap(regatta),
regatta.isPersistent(), regatta.getScoringScheme(), raceLogStore));
regatta.isPersistent(), regatta.getScoringScheme()));
RegattaIdentifier regattaIdentifier = regatta.getRegattaIdentifier();
for (RaceDefinition race : regatta.getAllRaces()) {
replicate(new AddRaceDefinition(regattaIdentifier, race));
@@ -831,9 +823,9 @@ public class RacingEventServiceImpl implements RacingEventService, RegattaListen
@Override
public RacesHandle addTracTracRace(RegattaIdentifier regattaToAddTo, URL paramURL, URI liveURI,
URI storedURI, TimePoint startOfTracking, TimePoint endOfTracking,
WindStore windStore, long timeoutInMilliseconds, boolean simulateWithStartTimeNow, RaceLogStore raceLogStore) throws Exception {
WindStore windStore, long timeoutInMilliseconds, boolean simulateWithStartTimeNow) throws Exception {
return addRace(regattaToAddTo, getTracTracDomainFactory().createTrackingConnectivityParameters(paramURL, liveURI, storedURI, startOfTracking,
endOfTracking, delayToLiveInMillis, simulateWithStartTimeNow, windStore, raceLogStore), windStore, timeoutInMilliseconds);
endOfTracking, delayToLiveInMillis, simulateWithStartTimeNow, windStore), windStore, timeoutInMilliseconds);
}
private void ensureRegattaIsObservedForDefaultLeaderboardAndAutoLeaderboardLinking(DynamicTrackedRegatta trackedRegatta) {
@@ -889,10 +881,8 @@ public class RacingEventServiceImpl implements RacingEventService, RegattaListen
final FlexibleLeaderboard defaultLeaderboard = (FlexibleLeaderboard) leaderboardsByName.get(LeaderboardNameConstants.DEFAULT_LEADERBOARD_NAME);
if (defaultLeaderboard != null) {
String columnName = trackedRace.getRace().getName();
RaceColumnIdentifier columnIdentifier = new RaceColumnIdentifierImpl(defaultLeaderboard.getName(), columnName);
defaultLeaderboard.addRace(trackedRace, columnName, /* medalRace */false,
MongoRaceLogStoreFactory.INSTANCE.getMongoRaceLogStore(mongoObjectFactory, domainObjectFactory, columnIdentifier),
defaultLeaderboard.getFleet(null));
defaultLeaderboard.getFleet(null));
}
TrackedRaceReplicator trackedRaceReplicator = new TrackedRaceReplicator(trackedRace);
trackedRaceReplicators.put(trackedRace, trackedRaceReplicator);
@@ -1654,9 +1644,9 @@ public class RacingEventServiceImpl implements RacingEventService, RegattaListen
}
@Override
public void recordRaceLogEvent(String leaderboardName, String raceColumnName, String fleetName, RaceLogEvent event) {
RecordRaceLogEvent command = new RecordRaceLogEvent(leaderboardName, raceColumnName, fleetName, event);
apply(command);
public void recordRaceLogEvent(RaceLogIdentifier identifier, RaceLogEvent event) {
//RaceLog raceLog = getRaceLog(identifier);
//raceLog.add(event);
}
}
@@ -3,18 +3,14 @@ package com.sap.sailing.server.operationaltransformation;
import com.sap.sailing.domain.base.RaceColumnInSeries;
import com.sap.sailing.domain.base.Series;
import com.sap.sailing.domain.common.RegattaIdentifier;
import com.sap.sailing.domain.racelog.RaceLogStore;
import com.sap.sailing.server.RacingEventService;
import com.sap.sailing.server.RacingEventServiceOperation;
public class AddColumnToSeries extends AbstractColumnInSeriesOperation<RaceColumnInSeries> {
private static final long serialVersionUID = 8987540636040301063L;
private RaceLogStore raceLogStore;
public AddColumnToSeries(RegattaIdentifier regattaIdentifier, String seriesName, String columnName, RaceLogStore raceLogStore) {
public AddColumnToSeries(RegattaIdentifier regattaIdentifier, String seriesName, String columnName) {
super(regattaIdentifier, seriesName, columnName);
this.raceLogStore = raceLogStore;
}
@Override
@@ -22,7 +18,7 @@ public class AddColumnToSeries extends AbstractColumnInSeriesOperation<RaceColum
RaceColumnInSeries result = null;
Series series = getSeries(toState);
if (series != null) {
result = series.addRaceColumn(getColumnName(), toState, raceLogStore);
result = series.addRaceColumn(getColumnName(), toState);
if(result != null && series.getRegatta().isPersistent()) {
toState.updateStoredRegatta(series.getRegatta());
}
@@ -15,7 +15,6 @@ import com.sap.sailing.domain.common.Color;
import com.sap.sailing.domain.common.impl.Util.Pair;
import com.sap.sailing.domain.common.impl.Util.Triple;
import com.sap.sailing.domain.leaderboard.ScoringScheme;
import com.sap.sailing.domain.racelog.RaceLogStore;
import com.sap.sailing.domain.tracking.TrackedRegattaRegistry;
import com.sap.sailing.server.RacingEventService;
import com.sap.sailing.server.RacingEventServiceOperation;
@@ -25,22 +24,20 @@ public class AddSpecificRegatta extends AbstractAddRegattaOperation {
private final Map<String, Pair<List<Triple<String, Integer, Color>>, Boolean>> seriesNamesWithFleetNamesAndFleetOrderingAndMedal;
private final boolean persistent;
private final ScoringScheme scoringScheme;
private final RaceLogStore raceLogStore;
public AddSpecificRegatta(String regattaName, String boatClassName, Serializable id,
Map<String, Pair<List<Triple<String, Integer, Color>>, Boolean>> seriesNamesWithFleetNamesAndFleetOrdering,
boolean persistent, ScoringScheme scoringScheme, RaceLogStore raceLogStore) {
boolean persistent, ScoringScheme scoringScheme) {
super(regattaName, boatClassName, id);
this.seriesNamesWithFleetNamesAndFleetOrderingAndMedal = seriesNamesWithFleetNamesAndFleetOrdering;
this.persistent = persistent;
this.scoringScheme = scoringScheme;
this.raceLogStore = raceLogStore;
}
@Override
public Regatta internalApplyTo(RacingEventService toState) throws Exception {
return toState.createRegatta(getBaseEventName(), getBoatClassName(), getId(), createSeries(toState),
persistent, scoringScheme, raceLogStore);
persistent, scoringScheme);
}
private Iterable<? extends Series> createSeries(TrackedRegattaRegistry trackedRegattaRegistry) {
@@ -48,7 +45,7 @@ public class AddSpecificRegatta extends AbstractAddRegattaOperation {
for (Map.Entry<String, Pair<List<Triple<String, Integer, Color>>, Boolean>> e : seriesNamesWithFleetNamesAndFleetOrderingAndMedal.entrySet()) {
final List<String> emptyRaceColumnNamesList = Collections.emptyList();
Series s = new SeriesImpl(e.getKey(), /* isMedal */e.getValue().getB(), createFleets(e.getValue().getA()),
emptyRaceColumnNamesList, trackedRegattaRegistry, raceLogStore);
emptyRaceColumnNamesList, trackedRegattaRegistry);
result.add(s);
}
return result;
@@ -28,7 +28,6 @@ public class RecordRaceLogEvent extends AbstractRacingEventServiceOperation<Void
Leaderboard leaderboard = toState.getLeaderboardByName(leaderboardName);
RaceColumn raceColumn = leaderboard.getRaceColumnByName(raceColumnName);
Fleet fleet = raceColumn.getFleetByName(fleetName);
raceColumn.recordRaceLogEvent(leaderboardName, fleet, event);
return null;
}