trying to load persistent wind tracks during construction of TrackedRaceImpl; untested

This commit is contained in:
Axel Uhl
2012-03-06 18:01:47 +01:00
parent e741563593
commit cc009ff5c1
16 changed files with 95 additions and 20 deletions
@@ -1,5 +1,7 @@
package com.sap.sailing.domain.persistence;
import java.util.Map;
import com.mongodb.DBObject;
import com.sap.sailing.domain.base.Event;
import com.sap.sailing.domain.base.RaceDefinition;
@@ -43,4 +45,7 @@ public interface DomainObjectFactory {
*/
Iterable<Leaderboard> getLeaderboardsNotInGroup();
Map<? extends WindSource, ? extends WindTrack> loadWindTracks(Event event, RaceDefinition race,
long millisecondsOverWhichToAverageWind);
}
@@ -1,7 +1,9 @@
package com.sap.sailing.domain.persistence.impl;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -23,8 +25,10 @@ import com.sap.sailing.domain.common.Position;
import com.sap.sailing.domain.common.RaceIdentifier;
import com.sap.sailing.domain.common.TimePoint;
import com.sap.sailing.domain.common.WindSource;
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.leaderboard.Leaderboard;
import com.sap.sailing.domain.leaderboard.LeaderboardGroup;
import com.sap.sailing.domain.leaderboard.RaceInLeaderboard;
@@ -264,4 +268,34 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
return result;
}
@Override
public Map<? extends WindSource, ? extends WindTrack> loadWindTracks(Event event, RaceDefinition race,
long millisecondsOverWhichToAverageWind) {
Map<WindSource, WindTrack> result = new HashMap<WindSource, WindTrack>();
try {
BasicDBObject query = new BasicDBObject();
query.put(FieldNames.EVENT_NAME.name(), event.getName());
query.put(FieldNames.RACE_NAME.name(), race.getName());
DBCollection windTracks = database.getCollection(CollectionNames.WIND_TRACKS.name());
for (DBObject o : windTracks.find(query)) {
Wind wind = loadWind((DBObject) o.get(FieldNames.WIND.name()));
WindSourceType windSourceType = WindSourceType.valueOf((String) o.get(FieldNames.WIND_SOURCE_NAME.name()));
// TODO bug #374: consider optional additional wind store ID
// WindSource windSource = new WindSourceWithAdditionalID(windSourceType, null);
WindSource windSource = new WindSourceImpl(windSourceType);
WindTrack track = result.get(windSource);
if (track == null) {
track = new WindTrackImpl(millisecondsOverWhichToAverageWind);
result.put(windSource, track);
}
track.add(wind);
}
} catch (Throwable t) {
// something went wrong during DB access; report, then use empty new wind track
logger.log(Level.SEVERE, "Error connecting to MongoDB, unable to load recorded wind data. Check MongoDB settings.");
logger.throwing(DomainObjectFactoryImpl.class.getName(), "loadWindTrack", t);
}
return result;
}
}
@@ -74,7 +74,7 @@ public class MongoObjectFactoryImpl implements MongoObjectFactory {
@Override
public void addWindTrackDumper(TrackedEvent trackedEvent, TrackedRace trackedRace, WindSource windSource) {
WindTrack windTrack = trackedRace.getWindTrack(windSource);
WindTrack windTrack = trackedRace.getOrCreateWindTrack(windSource);
windTrack.addListener(new MongoWindListener(trackedEvent, trackedRace, windSource, this, database));
}
@@ -1,6 +1,8 @@
package com.sap.sailing.domain.persistence.impl;
import java.net.UnknownHostException;
import java.util.Map;
import java.util.Map.Entry;
import com.mongodb.DB;
import com.mongodb.MongoException;
@@ -49,4 +51,15 @@ public class MongoWindStoreImpl extends EmptyWindStore implements MongoWindStore
}
return result;
}
@Override
public Map<? extends WindSource, ? extends WindTrack> loadWindTracks(TrackedEvent trackedEvent,
TrackedRace trackedRace, long millisecondsOverWhichToAverageWind) {
Map<? extends WindSource, ? extends WindTrack> result = domainObjectFactory.loadWindTracks(
trackedEvent.getEvent(), trackedRace.getRace(), millisecondsOverWhichToAverageWind);
for (Entry<? extends WindSource, ? extends WindTrack> e : result.entrySet()) {
e.getValue().addListener(new MongoWindListener(trackedEvent, trackedRace, e.getKey(), mongoObjectFactory, db));
}
return result;
}
}