mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-21 03:30:12 +00:00
Merge branch 'racecommittee_integrated' of ssh://sapsailing.com/home/trac/git into racecommittee_integrated
This commit is contained in:
commit
0a220b4e22
12 files changed
+54
-58
No files matched your search
+2
-1
@@ -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);
|
||||
}
|
||||
-7
@@ -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
|
||||
|
||||
+3
-3
@@ -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()));
|
||||
|
||||
+1
@@ -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;
|
||||
}
|
||||
+7
-19
@@ -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));
|
||||
}
|
||||
}
|
||||
+6
-11
@@ -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);
|
||||
|
||||
}
|
||||
|
||||
+4
-5
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
+7
@@ -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);
|
||||
}
|
||||
+3
-4
@@ -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());
|
||||
}
|
||||
}
|
||||
+13
@@ -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";
|
||||
}
|
||||
|
||||
}
|
||||
+7
-3
@@ -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;
|
||||
|
||||
|
||||
Reference in new issue
Block a user