Added loadLeaderboardGroup-Functions to DomainObjectFactory

This commit is contained in:
Lennart Hensler
2012-01-26 13:46:41 +01:00
parent 699d5c0eaf
commit ac8366e0dc
3 changed files with 61 additions and 1 deletions
@@ -6,6 +6,7 @@ import com.sap.sailing.domain.base.RaceDefinition;
import com.sap.sailing.domain.common.RaceIdentifier;
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.persistence.impl.DomainObjectFactoryImpl;
import com.sap.sailing.domain.tracking.WindTrack;
import com.sap.sailing.mongodb.MongoDBService;
@@ -26,5 +27,9 @@ public interface DomainObjectFactory {
Iterable<Leaderboard> getAllLeaderboards();
RaceIdentifier loadRaceIdentifier(DBObject dbObject);
LeaderboardGroup loadLeaderboardGroup(String name);
Iterable<LeaderboardGroup> getAllLeaderboardGroups();
}
@@ -1,5 +1,6 @@
package com.sap.sailing.domain.persistence.impl;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
import java.util.logging.Level;
@@ -10,6 +11,7 @@ import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;
import com.mongodb.DBRef;
import com.sap.sailing.domain.base.Event;
import com.sap.sailing.domain.base.RaceDefinition;
import com.sap.sailing.domain.base.SpeedWithBearing;
@@ -23,10 +25,12 @@ import com.sap.sailing.domain.common.WindSource;
import com.sap.sailing.domain.common.impl.DegreeBearingImpl;
import com.sap.sailing.domain.common.impl.DegreePosition;
import com.sap.sailing.domain.leaderboard.Leaderboard;
import com.sap.sailing.domain.leaderboard.LeaderboardGroup;
import com.sap.sailing.domain.leaderboard.RaceInLeaderboard;
import com.sap.sailing.domain.leaderboard.ScoreCorrection.MaxPointsReason;
import com.sap.sailing.domain.leaderboard.SettableScoreCorrection;
import com.sap.sailing.domain.leaderboard.ThresholdBasedResultDiscardingRule;
import com.sap.sailing.domain.leaderboard.impl.LeaderboardGroupImpl;
import com.sap.sailing.domain.leaderboard.impl.ResultDiscardingRuleImpl;
import com.sap.sailing.domain.leaderboard.impl.ScoreCorrectionImpl;
import com.sap.sailing.domain.persistence.DomainObjectFactory;
@@ -117,6 +121,57 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
}
return result;
}
@Override
public LeaderboardGroup loadLeaderboardGroup(String name) {
DBCollection leaderboardGroupCollection = database.getCollection(CollectionNames.LEADERBOARD_GROUPS.name());
LeaderboardGroup leaderboardGroup = null;
try {
BasicDBObject query = new BasicDBObject();
query.put(FieldNames.LEADERBOARD_GROUP_NAME.name(), name);
leaderboardGroup = loadLeaderboardGroup(leaderboardGroupCollection.findOne(query));
} catch (Throwable t) {
logger.log(Level.SEVERE, "Error connecting to MongoDB, unable to load leaderboard group "+name+".");
logger.throwing(DomainObjectFactoryImpl.class.getName(), "loadLeaderboardGroup", t);
}
return leaderboardGroup;
}
@Override
public Iterable<LeaderboardGroup> getAllLeaderboardGroups() {
DBCollection leaderboardGroupCollection = database.getCollection(CollectionNames.LEADERBOARD_GROUPS.name());
ArrayList<LeaderboardGroup> leaderboardGroups = new ArrayList<LeaderboardGroup>();
try {
for (DBObject o : leaderboardGroupCollection.find()) {
leaderboardGroups.add(loadLeaderboardGroup(o));
}
} catch (Throwable t) {
logger.log(Level.SEVERE, "Error connecting to MongoDB, unable to load leaderboard groups.");
logger.throwing(DomainObjectFactoryImpl.class.getName(), "loadLeaderboardGroup", t);
}
return leaderboardGroups;
}
private LeaderboardGroup loadLeaderboardGroup(DBObject o) {
DBCollection leaderboardCollection = database.getCollection(CollectionNames.LEADERBOARDS.name());
String name = (String) o.get(FieldNames.LEADERBOARD_GROUP_NAME.name());
String description = (String) o.get(FieldNames.LEADERBOARD_GROUP_DESCRIPTION.name());
ArrayList<Leaderboard> leaderboards = new ArrayList<>();
BasicDBList dbLeaderboardRefs = (BasicDBList) o.get(FieldNames.LEADERBOARD_GROUP_LEADERBOARDS.name());
for (Object object : dbLeaderboardRefs) {
DBRef dbLeaderboardRef = (DBRef) object;
DBObject dbLeaderboard = leaderboardCollection.findOne(dbLeaderboardRef);
leaderboards.add(loadLeaderboard(dbLeaderboard));
}
return new LeaderboardGroupImpl(name, description, leaderboards);
}
@Override
public Iterable<Leaderboard> getAllLeaderboards() {
@@ -201,7 +201,7 @@ public class MongoObjectFactoryImpl implements MongoObjectFactory {
BasicDBList dbLeaderboardRefs = new BasicDBList();
for (Leaderboard leaderboard : leaderboardGroup.getLeaderboards()) {
BasicDBObject leaderboardQuery = new BasicDBObject(FieldNames.LEADERBOARD_NAME.name(), leaderboard.getName());
DBObject dbLeaderboard = leaderboardCollection.find(leaderboardQuery).getQuery();
DBObject dbLeaderboard = leaderboardCollection.findOne(leaderboardQuery);
DBRef dbLeaderboardRef = new DBRef(database, dbLeaderboard);
dbLeaderboardRefs.add(dbLeaderboardRef);
}