From 1c49ec0e2488f4114907a56d3fe48ab00033cb7c Mon Sep 17 00:00:00 2001 From: Armin Zamani Date: Sat, 9 Feb 2013 19:55:10 +0100 Subject: [PATCH] Changed persistence for racelog to store using the new RaceColumnIdentifier instead of Regatta and RaceDefinition --- .../persistence/DomainObjectFactory.java | 3 ++- .../persistence/MongoObjectFactory.java | 7 ----- .../impl/DomainObjectFactoryImpl.java | 6 ++--- .../domain/persistence/impl/FieldNames.java | 1 + .../impl/MongoObjectFactoryImpl.java | 26 +++++-------------- .../impl/MongoRaceLogListener.java | 17 +++++------- .../impl/MongoRaceLogStoreImpl.java | 9 +++---- .../domain/racelog/RaceColumnIdentifier.java | 7 +++++ .../sailing/domain/racelog/RaceLogStore.java | 6 +---- .../racelog/impl/EmptyRaceLogStore.java | 7 +++-- .../impl/RaceColumnIdentifierImpl.java | 13 ++++++++++ .../TestStoringAndRetrievingRaceLogsTest.java | 10 ++++--- 12 files changed, 54 insertions(+), 58 deletions(-) create mode 100644 java/com.sap.sailing.domain/src/com/sap/sailing/domain/racelog/RaceColumnIdentifier.java create mode 100644 java/com.sap.sailing.domain/src/com/sap/sailing/domain/racelog/impl/RaceColumnIdentifierImpl.java diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/DomainObjectFactory.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/DomainObjectFactory.java index 082cbd4364a..dbd58893756 100755 --- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/DomainObjectFactory.java +++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/DomainObjectFactory.java @@ -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 loadRaceIDToRegattaAssociations(RegattaRegistry regattaRegistry); - RaceLog loadRaceLog(Regatta regatta, RaceDefinition race); + RaceLog loadRaceLog(RaceColumnIdentifier identifier); } diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/MongoObjectFactory.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/MongoObjectFactory.java index c9e4e5b4737..912dc8d8dde 100755 --- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/MongoObjectFactory.java +++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/MongoObjectFactory.java @@ -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 trackedRace. 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 leaderboard in the Mongo DB associated with this diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/DomainObjectFactoryImpl.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/DomainObjectFactoryImpl.java index 75a50d2f513..adec567b430 100755 --- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/DomainObjectFactoryImpl.java +++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/DomainObjectFactoryImpl.java @@ -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())); diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/FieldNames.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/FieldNames.java index 78c79ff784d..587becc5195 100755 --- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/FieldNames.java +++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/FieldNames.java @@ -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; } diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoObjectFactoryImpl.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoObjectFactoryImpl.java index 1cc3349861a..893e7c9d77a 100755 --- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoObjectFactoryImpl.java +++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoObjectFactoryImpl.java @@ -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)); - } } diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoRaceLogListener.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoRaceLogListener.java index 5b5ee5b40d8..2730582bb82 100644 --- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoRaceLogListener.java +++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoRaceLogListener.java @@ -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); } diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoRaceLogStoreImpl.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoRaceLogStoreImpl.java index 72b50dd7a29..eda70d542ce 100644 --- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoRaceLogStoreImpl.java +++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoRaceLogStoreImpl.java @@ -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; } diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/racelog/RaceColumnIdentifier.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/racelog/RaceColumnIdentifier.java new file mode 100644 index 00000000000..35810f9476f --- /dev/null +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/racelog/RaceColumnIdentifier.java @@ -0,0 +1,7 @@ +package com.sap.sailing.domain.racelog; + +public interface RaceColumnIdentifier { + + String getIdentifier(); + +} diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/racelog/RaceLogStore.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/racelog/RaceLogStore.java index 5df35d332be..9b9bda3b643 100644 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/racelog/RaceLogStore.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/racelog/RaceLogStore.java @@ -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); } diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/racelog/impl/EmptyRaceLogStore.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/racelog/impl/EmptyRaceLogStore.java index 2a8c666e05b..4e976940b9a 100644 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/racelog/impl/EmptyRaceLogStore.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/racelog/impl/EmptyRaceLogStore.java @@ -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()); } } diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/racelog/impl/RaceColumnIdentifierImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/racelog/impl/RaceColumnIdentifierImpl.java new file mode 100644 index 00000000000..7bb7bf6685b --- /dev/null +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/racelog/impl/RaceColumnIdentifierImpl.java @@ -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"; + } + +} diff --git a/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestStoringAndRetrievingRaceLogsTest.java b/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestStoringAndRetrievingRaceLogsTest.java index 4b43566c7f5..5e68a49e6b1 100644 --- a/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestStoringAndRetrievingRaceLogsTest.java +++ b/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestStoringAndRetrievingRaceLogsTest.java @@ -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;