fix for bug 1242 by escaping race column names as well as fleet names

This commit is contained in:
Axel Uhl
2013-02-26 18:59:08 -10:00
parent ba6f2bc165
commit f667db3864
2 changed files with 11 additions and 10 deletions
@@ -353,10 +353,10 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
DBObject carriedPoints = (DBObject) dbLeaderboard.get(FieldNames.LEADERBOARD_CARRIED_POINTS.name());
if (carriedPoints != null) {
needsMigration = true;
for (String competitorName : carriedPoints.keySet()) {
Double carriedPointsForCompetitor = ((Number) carriedPoints.get(competitorName)).doubleValue();
for (String escapedCompetitorName : carriedPoints.keySet()) {
Double carriedPointsForCompetitor = ((Number) carriedPoints.get(escapedCompetitorName)).doubleValue();
if (carriedPointsForCompetitor != null) {
correctionsToUpdate.setCarriedPointsByName(MongoUtils.unescapeDollarAndDot(competitorName), carriedPointsForCompetitor);
correctionsToUpdate.setCarriedPointsByName(MongoUtils.unescapeDollarAndDot(escapedCompetitorName), carriedPointsForCompetitor);
}
}
}
@@ -382,12 +382,12 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
scoreCorrectionToUpdate.setComment((String) dbScoreCorrection.get(FieldNames.LEADERBOARD_SCORE_CORRECTION_COMMENT.name()));
dbScoreCorrection.removeField(FieldNames.LEADERBOARD_SCORE_CORRECTION_COMMENT.name());
}
for (String raceName : dbScoreCorrection.keySet()) {
for (String escapedRaceColumnName : dbScoreCorrection.keySet()) {
// deprecated style: a DBObject per race where the keys are the escaped competitor names
// new style: a BasicDBList per race where each entry is a DBObject with COMPETITOR_ID and
// LEADERBOARD_SCORE_CORRECTION_MAX_POINTS_REASON and LEADERBOARD_CORRECTED_SCORE fields each
DBObject dbScoreCorrectionForRace = (DBObject) dbScoreCorrection.get(raceName);
final RaceColumn raceColumn = correctionsToUpdate.getLeaderboard().getRaceColumnByName(raceName);
DBObject dbScoreCorrectionForRace = (DBObject) dbScoreCorrection.get(escapedRaceColumnName);
final RaceColumn raceColumn = correctionsToUpdate.getLeaderboard().getRaceColumnByName(MongoUtils.unescapeDollarAndDot(escapedRaceColumnName));
if (dbScoreCorrectionForRace instanceof BasicDBList) {
for (Object o : (BasicDBList) dbScoreCorrectionForRace) {
DBObject dbScoreCorrectionForCompetitorInRace = (DBObject) o;
@@ -465,7 +465,8 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
}
DBObject raceIdentifiersPerFleet = (DBObject) dbRaceColumn.get(FieldNames.RACE_IDENTIFIERS.name());
if (raceIdentifiersPerFleet != null) {
for (String fleetName : raceIdentifiersPerFleet.keySet()) {
for (String escapedFleetName : raceIdentifiersPerFleet.keySet()) {
String fleetName = MongoUtils.unescapeDollarAndDot(escapedFleetName);
result.put(fleetName, loadRaceIdentifier((DBObject) raceIdentifiersPerFleet.get(fleetName)));
}
}
@@ -120,7 +120,7 @@ public class MongoObjectFactoryImpl implements MongoObjectFactory {
if (raceIdentifier != null) {
DBObject raceIdentifierForFleet = new BasicDBObject();
storeRaceIdentifier(raceIdentifierForFleet, raceIdentifier);
raceIdentifiersPerFleet.put(fleet.getName(), raceIdentifierForFleet);
raceIdentifiersPerFleet.put(MongoUtils.escapeDollarAndDot(fleet.getName()), raceIdentifierForFleet);
}
}
dbObject.put(FieldNames.RACE_IDENTIFIERS.name(), raceIdentifiersPerFleet);
@@ -145,7 +145,7 @@ public class MongoObjectFactoryImpl implements MongoObjectFactory {
BasicDBObject query = new BasicDBObject(FieldNames.LEADERBOARD_NAME.name(), leaderboard.getName());
BasicDBObject dbLeaderboard = new BasicDBObject();
dbLeaderboard.put(FieldNames.LEADERBOARD_NAME.name(), leaderboard.getName());
if(leaderboard.getDisplayName() != null) {
if (leaderboard.getDisplayName() != null) {
dbLeaderboard.put(FieldNames.LEADERBOARD_DISPLAY_NAME.name(), leaderboard.getDisplayName());
}
BasicDBList dbSuppressedCompetitorIds = new BasicDBList();
@@ -264,7 +264,7 @@ public class MongoObjectFactoryImpl implements MongoObjectFactory {
if (!dbCorrectionForRace.isEmpty()) {
// using the column name as the key for the score corrections requires re-writing the score corrections
// of a meta-leaderboard if the name of one of its leaderboards changes
dbScoreCorrections.put(raceColumn.getName(), dbCorrectionForRace);
dbScoreCorrections.put(MongoUtils.escapeDollarAndDot(raceColumn.getName()), dbCorrectionForRace);
}
}
final TimePoint timePointOfLastCorrectionsValidity = scoreCorrection.getTimePointOfLastCorrectionsValidity();