Merge branch 'racecommittee_integrated' of ssh://sapsailing.com/home/trac/git into racecommittee_integrated

This commit is contained in:
Lukas Niemeier committed 2013-02-09 20:01:56 +01:00
commit 0a220b4e22
12 files changed
+54 -58

No files matched your search

@@ -12,6 +12,7 @@ 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.tracking.TrackedRegattaRegistry;
import com.sap.sailing.domain.tracking.WindTrack;
@@ -84,5 +85,5 @@ public interface DomainObjectFactory {
Map<String, Regatta> loadRaceIDToRegattaAssociations(RegattaRegistry regattaRegistry);
RaceLog loadRaceLog(Regatta regatta, RaceDefinition race);
RaceLog loadRaceLog(RaceColumnIdentifier identifier);
}
@@ -26,13 +26,6 @@ public interface MongoObjectFactory {
* the {@link RaceDefinition#getName() race name} and the {@link Regatta#getName() regatta name}.
*/
void addWindTrackDumper(TrackedRegatta trackedRegatta, TrackedRace trackedRace, WindSource windSource);
/**
* Registers for new race log events on the <code>trackedRace</code>. Each
* update received will be appended to the MongoDB and can later be retrieved. The key used to identify the race is
* the {@link RaceDefinition#getName() race name} and the {@link Regatta#getName() regatta name}.
*/
void addRaceLogDumper(TrackedRegatta trackedRegatta, TrackedRace trackedRace);
/**
* Stores the configuration data of <code>leaderboard</code> in the Mongo DB associated with this
@@ -74,6 +74,7 @@ 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.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;
@@ -895,12 +896,11 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
}
@Override
public RaceLog loadRaceLog(Regatta regatta, RaceDefinition race) {
public RaceLog loadRaceLog(RaceColumnIdentifier identifier) {
RaceLog result = new RaceLogImpl(RaceLogImpl.class.getSimpleName());
try {
BasicDBObject query = new BasicDBObject();
query.put(FieldNames.REGATTA_NAME.name(), regatta.getName());
query.put(FieldNames.RACE_NAME.name(), race.getName());
query.put(FieldNames.RACE_COLUMN_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,6 +65,7 @@ public enum FieldNames {
RACE_ID_AS_STRING,
// race log
RACE_COLUMN_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;
}
@@ -1,7 +1,7 @@
package com.sap.sailing.domain.persistence.impl;
import java.io.Serializable;
import java.util.List;
import java.io.Serializable;
import java.util.logging.Logger;
import org.bson.types.ObjectId;
@@ -37,7 +37,7 @@ 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.RaceLog;
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.RaceLogStartTimeEvent;
@@ -478,31 +478,25 @@ public class MongoObjectFactoryImpl implements MongoObjectFactory {
public DBCollection getRaceLogCollection() {
DBCollection result = database.getCollection(CollectionNames.RACE_LOGS.name());
result.ensureIndex(new BasicDBObject(FieldNames.RACE_NAME.name(), null));
//TODO: Clarify which field shall be the index/ which fields identifies a race uniquely over all events and regattas
result.ensureIndex(new BasicDBObject(FieldNames.RACE_COLUMN_IDENTIFIER.name(), null));
return result;
}
public DBObject storeRaceLogEntry(Regatta regatta, RaceDefinition race, RaceLogFlagEvent flagEvent) {
public DBObject storeRaceLogEntry(RaceColumnIdentifier raceColumnIdentifier, RaceLogFlagEvent flagEvent) {
BasicDBObject result = new BasicDBObject();
storeRegattaAndRaceForRaceLogEvent(regatta, race, result);
result.put(FieldNames.RACE_COLUMN_IDENTIFIER.name(), raceColumnIdentifier.getIdentifier());
result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogFlagEvent(flagEvent));
return result;
}
public DBObject storeRaceLogEntry(Regatta regatta, RaceDefinition race, RaceLogStartTimeEvent startTimeEvent) {
public DBObject storeRaceLogEntry(RaceColumnIdentifier raceColumnIdentifier, RaceLogStartTimeEvent startTimeEvent) {
BasicDBObject result = new BasicDBObject();
storeRegattaAndRaceForRaceLogEvent(regatta, race, result);
result.put(FieldNames.RACE_COLUMN_IDENTIFIER.name(), raceColumnIdentifier.getIdentifier());
result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogStartTimeEvent(startTimeEvent));
return result;
}
private void storeRegattaAndRaceForRaceLogEvent(Regatta regatta, RaceDefinition race, DBObject result) {
result.put(FieldNames.REGATTA_NAME.name(), regatta.getName());
result.put(FieldNames.RACE_NAME.name(), race.getName());
}
private Object storeRaceLogStartTimeEvent(RaceLogStartTimeEvent startTimeEvent) {
DBObject result = new BasicDBObject();
@@ -542,10 +536,4 @@ public class MongoObjectFactoryImpl implements MongoObjectFactory {
}
return dbInvolvedCompetitorNames;
}
@Override
public void addRaceLogDumper(TrackedRegatta trackedRegatta, TrackedRace trackedRace) {
RaceLog rcEventTrack = trackedRace.getRaceLog();
rcEventTrack.addListener(new MongoRaceLogListener(trackedRegatta, trackedRace, this, database));
}
}
@@ -4,40 +4,35 @@ import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;
import com.sap.sailing.domain.persistence.MongoObjectFactory;
import com.sap.sailing.domain.racelog.RaceColumnIdentifier;
import com.sap.sailing.domain.racelog.RaceLogFlagEvent;
import com.sap.sailing.domain.racelog.RaceLogListener;
import com.sap.sailing.domain.racelog.RaceLogStartTimeEvent;
import com.sap.sailing.domain.tracking.TrackedRace;
import com.sap.sailing.domain.tracking.TrackedRegatta;
public class MongoRaceLogListener implements RaceLogListener {
private final TrackedRegatta trackedRegatta;
private final TrackedRace trackedRace;
private final RaceColumnIdentifier raceColumnIdentifier;
private final MongoObjectFactoryImpl mongoObjectFactory;
private final DBCollection raceLogsCollection;
public MongoRaceLogListener(TrackedRegatta trackedRegatta, TrackedRace trackedRace,
public MongoRaceLogListener(RaceColumnIdentifier identifier,
MongoObjectFactory mongoObjectFactory, DB database) {
super();
this.trackedRegatta = trackedRegatta;
this.trackedRace = trackedRace;
this.raceColumnIdentifier = identifier;
this.mongoObjectFactory = (MongoObjectFactoryImpl) mongoObjectFactory;
this.raceLogsCollection = this.mongoObjectFactory.getRaceLogCollection();
}
@Override
public void flagEventReceived(RaceLogFlagEvent flagEvent) {
DBObject flagEventTrackEntry = mongoObjectFactory.storeRaceLogEntry(trackedRegatta.getRegatta(),
trackedRace.getRace(), flagEvent);
DBObject flagEventTrackEntry = mongoObjectFactory.storeRaceLogEntry(raceColumnIdentifier, flagEvent);
raceLogsCollection.insert(flagEventTrackEntry);
}
@Override
public void startTimeEventReceived(
RaceLogStartTimeEvent startTimeEvent) {
DBObject startTimeEventTrackEntry = mongoObjectFactory.storeRaceLogEntry(trackedRegatta.getRegatta(),
trackedRace.getRace(), startTimeEvent);
DBObject startTimeEventTrackEntry = mongoObjectFactory.storeRaceLogEntry(raceColumnIdentifier, startTimeEvent);
raceLogsCollection.insert(startTimeEventTrackEntry);
}
@@ -7,10 +7,9 @@ import com.mongodb.MongoException;
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.impl.EmptyRaceLogStore;
import com.sap.sailing.domain.tracking.TrackedRace;
import com.sap.sailing.domain.tracking.TrackedRegatta;
public class MongoRaceLogStoreImpl extends EmptyRaceLogStore implements MongoRaceLogStore {
private transient final DB db;
@@ -25,10 +24,10 @@ public class MongoRaceLogStoreImpl extends EmptyRaceLogStore implements MongoRac
}
@Override
public RaceLog getRaceLog(TrackedRegatta trackedRegatta, TrackedRace trackedRace) {
public RaceLog getRaceLog(RaceColumnIdentifier identifier) {
RaceLog track;
track = domainObjectFactory.loadRaceLog(trackedRegatta.getRegatta(), trackedRace.getRace());
track.addListener(new MongoRaceLogListener(trackedRegatta, trackedRace, mongoObjectFactory, db));
track = domainObjectFactory.loadRaceLog(identifier);
track.addListener(new MongoRaceLogListener(identifier, mongoObjectFactory, db));
return track;
}
@@ -0,0 +1,7 @@
package com.sap.sailing.domain.racelog;
public interface RaceColumnIdentifier {
String getIdentifier();
}
@@ -1,13 +1,9 @@
package com.sap.sailing.domain.racelog;
import com.sap.sailing.domain.tracking.TrackedRace;
import com.sap.sailing.domain.tracking.TrackedRegatta;
/**
* Capsulating store interface providing a {@link RaceLog} for a given regatta / race combination.
*
*/
public interface RaceLogStore {
RaceLog getRaceLog(TrackedRegatta trackedRegatta, TrackedRace trackedRace);
RaceLog getRaceLog(RaceColumnIdentifier identifier);
}
@@ -1,9 +1,8 @@
package com.sap.sailing.domain.racelog.impl;
import com.sap.sailing.domain.racelog.RaceColumnIdentifier;
import com.sap.sailing.domain.racelog.RaceLog;
import com.sap.sailing.domain.racelog.RaceLogStore;
import com.sap.sailing.domain.tracking.TrackedRace;
import com.sap.sailing.domain.tracking.TrackedRegatta;
/**
* Since the RaceLogStore is part of the TrackedRace constructor and not all TrackedRace instances need a RaceLogStore (e.g. tests)
@@ -14,7 +13,7 @@ public class EmptyRaceLogStore implements RaceLogStore {
public static EmptyRaceLogStore INSTANCE = new EmptyRaceLogStore();
@Override
public RaceLog getRaceLog(TrackedRegatta trackedRegatta, TrackedRace trackedRace) {
return new RaceLogImpl("Lock for " + trackedRace.toString());
public RaceLog getRaceLog(RaceColumnIdentifier identifier) {
return new RaceLogImpl("Lock for " + identifier.getIdentifier().toString());
}
}
@@ -0,0 +1,13 @@
package com.sap.sailing.domain.racelog.impl;
import com.sap.sailing.domain.racelog.RaceColumnIdentifier;
public class RaceColumnIdentifierImpl implements RaceColumnIdentifier {
@Override
public String getIdentifier() {
// TODO Auto-generated method stub
return "lukas";
}
}
@@ -18,11 +18,12 @@ import com.sap.sailing.domain.base.Regatta;
import com.sap.sailing.domain.base.impl.MillisecondsTimePoint;
import com.sap.sailing.domain.common.TimePoint;
import com.sap.sailing.domain.persistence.impl.DomainObjectFactoryImpl;
import com.sap.sailing.domain.persistence.impl.MongoObjectFactoryImpl;
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.RaceLogStartTimeEvent;
import com.sap.sailing.domain.racelog.impl.RaceColumnIdentifierImpl;
import com.sap.sailing.domain.test.AbstractTracTracLiveTest;
import com.sap.sailing.domain.tracking.DynamicRaceDefinitionSet;
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
@@ -84,7 +85,8 @@ public class TestStoringAndRetrievingRaceLogsTest extends AbstractTracTracLiveTe
Mongo myFirstMongo = newMongo();
DB firstDatabase = myFirstMongo.getDB(dbConfiguration.getDatabaseName());
new MongoObjectFactoryImpl(firstDatabase).addRaceLogDumper(trackedRegatta, trackedRace);
//new MongoObjectFactoryImpl(firstDatabase).addRaceLogDumper(trackedRegatta, trackedRace);
//TODO load race log from race column
RaceLog raceLog = trackedRace.getRaceLog();
TimePoint timePoint = MillisecondsTimePoint.now();
@@ -100,7 +102,9 @@ public class TestStoringAndRetrievingRaceLogsTest extends AbstractTracTracLiveTe
Mongo mySecondMongo = newMongo();
DB secondDatabase = mySecondMongo.getDB(dbConfiguration.getDatabaseName());
RaceLog result = new DomainObjectFactoryImpl(secondDatabase).loadRaceLog(domainEvent, race);
RaceColumnIdentifier identifier = new RaceColumnIdentifierImpl();
//TODO work on correct identifier
RaceLog result = new DomainObjectFactoryImpl(secondDatabase).loadRaceLog(identifier);
int resultingPassId = 0;
timePointStartTime = initialTimePointStartTime;