compact the competitor in LeaderboardRowDTO

This commit is contained in:
Axel Uhl committed 2013-06-10 20:53:09 +02:00
1 parent 6aeaecd4fc
commit 38e7b14ac3
2 files changed
+23 -3

No files matched your search

@@ -440,10 +440,12 @@ public class IncrementalLeaderboardDTO extends LeaderboardDTO implements Increme
if (rows == null) {
rows = new HashMap<CompetitorDTO, LeaderboardRowDTO>();
}
// expand all keys and remove values from compact keys and re-enter with expanded keys
// expand all keys and remove values from compact keys and re-enter with expanded keys; expand their competitor field
for (CompetitorDTO compactCompetitor : new ArrayList<CompetitorDTO>(rows.keySet())) {
final CompetitorDTO expandedCompetitor = compactCompetitor.getCompetitorFromPrevious(previousVersion);
rows.put(expandedCompetitor, rows.remove(compactCompetitor));
final LeaderboardRowDTO row = rows.remove(compactCompetitor);
row.competitor = expandedCompetitor;
rows.put(expandedCompetitor, row);
}
for (Pair<CompetitorDTO, Void> rowUnchanged : rowsUnchanged.getAllUnchangedCompetitorsAndKeys(previousVersion)) {
rowsUnchangedForCompetitors.add(rowUnchanged.getA());
@@ -595,7 +597,9 @@ public class IncrementalLeaderboardDTO extends LeaderboardDTO implements Increme
} else {
LeaderboardRowDTO newRowDTO = new LeaderboardRowDTO();
cloner.clone(competitorAndRow.getValue(), newRowDTO);
newRows.put(compactCompetitorMap.get(competitorAndRow.getKey()), newRowDTO);
CompetitorDTO compactCompetitor = compactCompetitorMap.get(competitorAndRow.getKey());
newRowDTO.competitor = compactCompetitor;
newRows.put(compactCompetitor, newRowDTO);
HashMap<String, LeaderboardEntryDTO> newFieldsByRaceColumnName = new HashMap<String, LeaderboardEntryDTO>();
for (Map.Entry<String, LeaderboardEntryDTO> raceColumnNameAndLeaderboardEntry : newRowDTO.fieldsByRaceColumnName.entrySet()) {
LeaderboardEntryDTO previousEntryDTO = null;
@@ -5,6 +5,7 @@ import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertSame;
import java.io.FileNotFoundException;
import java.io.IOException;
@@ -82,6 +83,7 @@ public class LeaderboardDTODiffingTest {
@Test
public void testTotalStripping() {
newVersion.strip(previousVersion);
assertAllRowsKeysAreIdenticalToAllLeaderboardRowDTOCompetitors(newVersion);
assertNull(newVersion.rows);
}
@@ -96,6 +98,7 @@ public class LeaderboardDTODiffingTest {
wolfgangsRow.totalDistanceTraveledInMeters += 1;
Map<CompetitorDTO, LeaderboardRowDTO> rowsBeforeStripping = newVersion.rows;
newVersion.strip(previousVersion);
assertAllRowsKeysAreIdenticalToAllLeaderboardRowDTOCompetitors(newVersion);
assertNotNull(newVersion.rows);
assertEquals(1, newVersion.rows.size()); // only wolfgang's row should show
assertEquals(wolfgang, newVersion.rows.keySet().iterator().next().getCompetitorFromPrevious(previousVersion));
@@ -132,6 +135,7 @@ public class LeaderboardDTODiffingTest {
newVersion.rows = newRows;
Map<CompetitorDTO, LeaderboardRowDTO> rowsBeforeStripping = newVersion.rows;
newVersion.strip(previousVersion);
assertAllRowsKeysAreIdenticalToAllLeaderboardRowDTOCompetitors(newVersion);
assertNotNull(newVersion.rows);
assertEquals(previousVersion.rows.size()-17, newVersion.rows.size()); // all rows have changed except for 17 that have no leg details in leg 8
// now assert that for all rows there is no leaderboard entry for all races but R9 and
@@ -173,6 +177,7 @@ public class LeaderboardDTODiffingTest {
newVersion.rows.remove(wolfgang); // remove another competitor
List<CompetitorDTO> newCompetitorsBeforeStripping = new ArrayList<CompetitorDTO>(newVersion.competitors);
newVersion.strip(previousVersion);
assertAllRowsKeysAreIdenticalToAllLeaderboardRowDTOCompetitors(newVersion);
assertNull(newVersion.competitors); // but there should be an added competitor that we can't see through the public interface
LeaderboardDTO applied = newVersion.getLeaderboardDTO(previousVersion);
assertEquals(newCompetitorsBeforeStripping, applied.competitors);
@@ -192,6 +197,7 @@ public class LeaderboardDTODiffingTest {
Set<CompetitorDTO> newSuppressedCompetitorsBeforeStripping = new HashSet<CompetitorDTO>();
Util.addAll(newVersion.getSuppressedCompetitors(), newSuppressedCompetitorsBeforeStripping);
newVersion.strip(previousVersion);
assertAllRowsKeysAreIdenticalToAllLeaderboardRowDTOCompetitors(newVersion);
assertEquals(2, Util.size(newVersion.getSuppressedCompetitors()));
assertTrue(Util.contains(newVersion.getSuppressedCompetitors(), somebodyNew));
for (CompetitorDTO compactSuppressedCompetitor : newVersion.getSuppressedCompetitors()) {
@@ -215,6 +221,7 @@ public class LeaderboardDTODiffingTest {
final HashMap<CompetitorDTO, String> newDisplayNamesBeforeStripping = new HashMap<CompetitorDTO, String>();
newDisplayNamesBeforeStripping.putAll(newVersion.competitorDisplayNames);
newVersion.strip(previousVersion);
assertAllRowsKeysAreIdenticalToAllLeaderboardRowDTOCompetitors(newVersion);
assertEquals(2, newVersion.competitorDisplayNames.size());
assertTrue(newVersion.competitorDisplayNames.keySet().contains(somebodyNew));
for (CompetitorDTO compactSuppressedCompetitor : newVersion.competitorDisplayNames.keySet()) {
@@ -242,6 +249,7 @@ public class LeaderboardDTODiffingTest {
newOrdering.add(12, formerRank13);
List<CompetitorDTO> newOrderBeforeStripping = new ArrayList<CompetitorDTO>(newOrdering);
newVersion.strip(previousVersion);
assertAllRowsKeysAreIdenticalToAllLeaderboardRowDTOCompetitors(newVersion);
for (RaceColumnDTO raceColumn : newVersion.getRaceList()) {
if (!raceColumn.getName().equals("R9")) {
assertNull(newVersion.getCompetitorsFromBestToWorst(raceColumn));
@@ -256,4 +264,12 @@ public class LeaderboardDTODiffingTest {
LeaderboardDTO applied = newVersion.getLeaderboardDTO(previousVersion);
assertEquals(newOrderBeforeStripping, applied.getCompetitorsFromBestToWorst(applied.getRaceColumnByName("R9")));
}
private void assertAllRowsKeysAreIdenticalToAllLeaderboardRowDTOCompetitors(LeaderboardDTO leaderboard) {
if (leaderboard.rows != null) {
for (Map.Entry<CompetitorDTO, LeaderboardRowDTO> e : leaderboard.rows.entrySet()) {
assertSame(e.getKey(), e.getValue().competitor);
}
}
}
}