mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-09 13:50:57 +00:00
Quick fix for bug 1310: return null as leaderboard loading result when trying to load an overall leaderboard as a flexible leaderboard
This commit is contained in:
1 parent
5327e42c1b
commit
6bef155bc5
2 files changed
+58
-54
No files matched your search
+58
-52
@@ -341,58 +341,58 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
|
||||
|
||||
private FlexibleLeaderboard loadFlexibleLeaderboard(DBObject dbLeaderboard,
|
||||
SettableScoreCorrection scoreCorrection, ThresholdBasedResultDiscardingRule resultDiscardingRule) {
|
||||
final ScoringScheme scoringScheme = loadScoringScheme(dbLeaderboard);
|
||||
|
||||
RaceLogStore raceLogStore = MongoRaceLogStoreFactory.INSTANCE.getMongoRaceLogStore(
|
||||
new MongoObjectFactoryImpl(database),
|
||||
this);
|
||||
CourseArea courseArea = loadCourseAreaFromEvents(dbLeaderboard);
|
||||
FlexibleLeaderboardImpl result = new FlexibleLeaderboardImpl(
|
||||
raceLogStore,
|
||||
(String) dbLeaderboard.get(FieldNames.LEADERBOARD_NAME.name()),
|
||||
scoreCorrection,
|
||||
resultDiscardingRule,
|
||||
scoringScheme,
|
||||
courseArea);
|
||||
final FlexibleLeaderboardImpl result;
|
||||
BasicDBList dbRaceColumns = (BasicDBList) dbLeaderboard.get(FieldNames.LEADERBOARD_COLUMNS.name());
|
||||
// For a FlexibleLeaderboard, fleets are owned by the leaderboard's RaceColumn objects. We need to manage them here:
|
||||
Map<String, Fleet> fleetsByName = new HashMap<String, Fleet>();
|
||||
for (Object dbRaceColumnAsObject : dbRaceColumns) {
|
||||
BasicDBObject dbRaceColumn = (BasicDBObject) dbRaceColumnAsObject;
|
||||
Map<String, RaceIdentifier> raceIdentifiers = loadRaceIdentifiers(dbRaceColumn);
|
||||
RaceIdentifier defaultFleetRaceIdentifier = raceIdentifiers.get(null);
|
||||
if (defaultFleetRaceIdentifier != null) {
|
||||
Fleet defaultFleet = result.getFleet(null);
|
||||
if (defaultFleet != null) {
|
||||
raceIdentifiers.put(defaultFleet.getName(), defaultFleetRaceIdentifier);
|
||||
} else {
|
||||
// leaderboard has no default fleet; don't know what to do with default RaceIdentifier
|
||||
logger.warning("Discarding RaceIdentifier "+defaultFleetRaceIdentifier+" for default fleet for leaderboard "+result.getName()+
|
||||
" because no default fleet was found in leaderboard");
|
||||
if (dbRaceColumns == null) {
|
||||
result = null;
|
||||
} else {
|
||||
final ScoringScheme scoringScheme = loadScoringScheme(dbLeaderboard);
|
||||
RaceLogStore raceLogStore = MongoRaceLogStoreFactory.INSTANCE.getMongoRaceLogStore(
|
||||
new MongoObjectFactoryImpl(database), this);
|
||||
CourseArea courseArea = loadCourseAreaFromEvents(dbLeaderboard);
|
||||
result = new FlexibleLeaderboardImpl(raceLogStore, (String) dbLeaderboard.get(FieldNames.LEADERBOARD_NAME
|
||||
.name()), scoreCorrection, resultDiscardingRule, scoringScheme, courseArea);
|
||||
// For a FlexibleLeaderboard, fleets are owned by the leaderboard's RaceColumn objects. We need to manage
|
||||
// them here:
|
||||
Map<String, Fleet> fleetsByName = new HashMap<String, Fleet>();
|
||||
for (Object dbRaceColumnAsObject : dbRaceColumns) {
|
||||
BasicDBObject dbRaceColumn = (BasicDBObject) dbRaceColumnAsObject;
|
||||
Map<String, RaceIdentifier> raceIdentifiers = loadRaceIdentifiers(dbRaceColumn);
|
||||
RaceIdentifier defaultFleetRaceIdentifier = raceIdentifiers.get(null);
|
||||
if (defaultFleetRaceIdentifier != null) {
|
||||
Fleet defaultFleet = result.getFleet(null);
|
||||
if (defaultFleet != null) {
|
||||
raceIdentifiers.put(defaultFleet.getName(), defaultFleetRaceIdentifier);
|
||||
} else {
|
||||
// leaderboard has no default fleet; don't know what to do with default RaceIdentifier
|
||||
logger.warning("Discarding RaceIdentifier " + defaultFleetRaceIdentifier
|
||||
+ " for default fleet for leaderboard " + result.getName()
|
||||
+ " because no default fleet was found in leaderboard");
|
||||
}
|
||||
raceIdentifiers.remove(null);
|
||||
}
|
||||
raceIdentifiers.remove(null);
|
||||
}
|
||||
List<Fleet> fleets = new ArrayList<Fleet>();
|
||||
for (String fleetName : raceIdentifiers.keySet()) {
|
||||
Fleet fleet = fleetsByName.get(fleetName);
|
||||
if (fleet == null) {
|
||||
fleet = new FleetImpl(fleetName);
|
||||
fleetsByName.put(fleetName, fleet);
|
||||
List<Fleet> fleets = new ArrayList<Fleet>();
|
||||
for (String fleetName : raceIdentifiers.keySet()) {
|
||||
Fleet fleet = fleetsByName.get(fleetName);
|
||||
if (fleet == null) {
|
||||
fleet = new FleetImpl(fleetName);
|
||||
fleetsByName.put(fleetName, fleet);
|
||||
}
|
||||
fleets.add(fleet);
|
||||
}
|
||||
fleets.add(fleet);
|
||||
}
|
||||
if (fleets.isEmpty()) {
|
||||
fleets.add(result.getFleet(null));
|
||||
}
|
||||
String columnName = (String) dbRaceColumn.get(FieldNames.LEADERBOARD_COLUMN_NAME.name());
|
||||
if (fleets.isEmpty()) {
|
||||
fleets.add(result.getFleet(null));
|
||||
}
|
||||
String columnName = (String) dbRaceColumn.get(FieldNames.LEADERBOARD_COLUMN_NAME.name());
|
||||
|
||||
RaceColumn raceColumn = result.addRaceColumn(columnName,
|
||||
(Boolean) dbRaceColumn.get(FieldNames.LEADERBOARD_IS_MEDAL_RACE_COLUMN.name()),
|
||||
fleets.toArray(new Fleet[0]));
|
||||
for (Map.Entry<String, RaceIdentifier> e : raceIdentifiers.entrySet()) {
|
||||
raceColumn.setRaceIdentifier(fleetsByName.get(e.getKey()), e.getValue());
|
||||
}
|
||||
RaceColumn raceColumn = result.addRaceColumn(columnName,
|
||||
(Boolean) dbRaceColumn.get(FieldNames.LEADERBOARD_IS_MEDAL_RACE_COLUMN.name()),
|
||||
fleets.toArray(new Fleet[0]));
|
||||
for (Map.Entry<String, RaceIdentifier> e : raceIdentifiers.entrySet()) {
|
||||
raceColumn.setRaceIdentifier(fleetsByName.get(e.getKey()), e.getValue());
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@@ -575,10 +575,14 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
|
||||
for (Object object : dbLeaderboardIds) {
|
||||
ObjectId dbLeaderboardId = (ObjectId) object;
|
||||
DBObject dbLeaderboard = leaderboardCollection.findOne(dbLeaderboardId);
|
||||
final Leaderboard loadedLeaderboard = loadLeaderboard(dbLeaderboard, regattaRegistry,
|
||||
leaderboardRegistry, /* groupForMetaLeaderboard */ null);
|
||||
if (loadedLeaderboard != null) {
|
||||
leaderboards.add(loadedLeaderboard);
|
||||
if (dbLeaderboard != null) {
|
||||
final Leaderboard loadedLeaderboard = loadLeaderboard(dbLeaderboard, regattaRegistry,
|
||||
leaderboardRegistry, /* groupForMetaLeaderboard */null);
|
||||
if (loadedLeaderboard != null) {
|
||||
leaderboards.add(loadedLeaderboard);
|
||||
}
|
||||
} else {
|
||||
logger.warning("couldn't find leaderboard with ID "+dbLeaderboardId+" referenced by leaderboard group "+name);
|
||||
}
|
||||
}
|
||||
logger.info("loaded leaderboard group "+name);
|
||||
@@ -605,7 +609,9 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
|
||||
DBCollection leaderboardCollection = database.getCollection(CollectionNames.LEADERBOARDS.name());
|
||||
Set<Leaderboard> result = new HashSet<Leaderboard>();
|
||||
try {
|
||||
// Don't change the query object, unless you know what you're doing
|
||||
// Don't change the query object, unless you know what you're doing.
|
||||
// It queries all leaderboards not referenced to be part of a leaderboard group
|
||||
// and in particular not being an overall leaderboard of a leaderboard group.
|
||||
BasicDBObject query = new BasicDBObject("$where", "function() { return db." + CollectionNames.LEADERBOARD_GROUPS.name() + ".find({ "
|
||||
+ FieldNames.LEADERBOARD_GROUP_LEADERBOARDS.name() + ": this._id }).count() == 0 && "
|
||||
+ "db."+CollectionNames.LEADERBOARD_GROUPS.name()+".find({ "+FieldNames.LEADERBOARD_GROUP_OVERALL_LEADERBOARD.name() + ": this._id }).count() == 0 && "
|
||||
|
||||
-2
@@ -320,8 +320,6 @@ public class RacingEventServiceImpl implements RacingEventService, RegattaListen
|
||||
public FlexibleLeaderboard addFlexibleLeaderboard(String leaderboardName, String leaderboardDisplayName, int[] discardThresholds, ScoringScheme scoringScheme,
|
||||
Serializable courseAreaId) {
|
||||
logger.info("adding flexible leaderboard " + leaderboardName);
|
||||
|
||||
|
||||
RaceLogStore raceLogStore = MongoRaceLogStoreFactory.INSTANCE.getMongoRaceLogStore(
|
||||
mongoObjectFactory,
|
||||
domainObjectFactory);
|
||||
|
||||
Reference in new issue
Block a user