mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-08 21:30:57 +00:00
added competitor compression for competitor ordering per race
This commit is contained in:
1 parent
0ac0dbcaa3
commit
38083faedd
3 files changed
+53
-4
No files matched your search
+18
-2
@@ -420,11 +420,20 @@ public class IncrementalLeaderboardDTO extends LeaderboardDTO implements Increme
|
||||
competitorDisplayNames = expandedCompetitorDisplayNames;
|
||||
}
|
||||
// TODO ensure that the races collection has all the necessary RaceColumnDTO objects before looking them up by name
|
||||
Set<RaceColumnDTO> columnsForWhichToExpandCompetitorOrderingPerRace = new HashSet<RaceColumnDTO>(getCompetitorOrderingPerRace().keySet());
|
||||
for (String raceColumnNameForWhichCompetitorOrderingPerRaceUnchanged : raceColumnNamesForWhichCompetitorOrderingPerRaceUnchanged) {
|
||||
RaceColumnDTO raceColumn = getRaceColumnByName(raceColumnNameForWhichCompetitorOrderingPerRaceUnchanged);
|
||||
// be on the safe side regarding the equals/hashCode implementation of RaceColumnDTO and look it up by name for old and new version
|
||||
RaceColumnDTO previousRaceColumn = previousVersion.getRaceColumnByName(raceColumnNameForWhichCompetitorOrderingPerRaceUnchanged);
|
||||
setCompetitorsFromBestToWorst(raceColumn, previousVersion.getCompetitorsFromBestToWorst(previousRaceColumn));
|
||||
columnsForWhichToExpandCompetitorOrderingPerRace.remove(raceColumn);
|
||||
}
|
||||
// expand all other ordered competitor lists for all races where it changed
|
||||
for (RaceColumnDTO columnForWhichToExpandCompetitorOrderingPerRace : columnsForWhichToExpandCompetitorOrderingPerRace) {
|
||||
List<CompetitorDTO> competitorsFromBestToWorstForRace = getCompetitorsFromBestToWorst(columnForWhichToExpandCompetitorOrderingPerRace);
|
||||
for (int i=competitorsFromBestToWorstForRace.size()-1; i>=0; i--) {
|
||||
competitorsFromBestToWorstForRace.set(i, competitorsFromBestToWorstForRace.get(i).getCompetitorFromPrevious(previousVersion));
|
||||
}
|
||||
}
|
||||
final Set<CompetitorDTO> rowsUnchangedForCompetitors = new HashSet<CompetitorDTO>();
|
||||
if (rowsUnchanged != null) {
|
||||
@@ -557,10 +566,17 @@ public class IncrementalLeaderboardDTO extends LeaderboardDTO implements Increme
|
||||
final HashMap<RaceColumnDTO, List<CompetitorDTO>> competitorOrderingPerRace = new HashMap<RaceColumnDTO, List<CompetitorDTO>>(getCompetitorOrderingPerRace());
|
||||
for (RaceColumnDTO raceColumn : this.getRaceList()) {
|
||||
List<CompetitorDTO> competitorsFromBestToWorstForRaceColumn = getCompetitorsFromBestToWorst(raceColumn);
|
||||
List<CompetitorDTO> previousCompetitorsFrombestToWorstForRaceColumn = previousVersion.getCompetitorsFromBestToWorst(raceColumn);
|
||||
if (Util.equalsWithNull(competitorsFromBestToWorstForRaceColumn, previousCompetitorsFrombestToWorstForRaceColumn)) {
|
||||
List<CompetitorDTO> previousCompetitorsFromBestToWorstForRaceColumn = previousVersion.getCompetitorsFromBestToWorst(raceColumn);
|
||||
if (Util.equalsWithNull(competitorsFromBestToWorstForRaceColumn, previousCompetitorsFromBestToWorstForRaceColumn)) {
|
||||
raceColumnNamesForWhichCompetitorOrderingPerRaceUnchanged.add(raceColumn.getName());
|
||||
competitorOrderingPerRace.remove(raceColumn);
|
||||
} else {
|
||||
// try at least partial compaction
|
||||
List<CompetitorDTO> compactedCompetitorsFromBestToWorstForRaceColumn = new ArrayList<CompetitorDTO>();
|
||||
for (CompetitorDTO competitor : competitorsFromBestToWorstForRaceColumn) {
|
||||
compactedCompetitorsFromBestToWorstForRaceColumn.add(compactCompetitorMap.get(competitor));
|
||||
}
|
||||
competitorOrderingPerRace.put(raceColumn, compactedCompetitorsFromBestToWorstForRaceColumn);
|
||||
}
|
||||
}
|
||||
setCompetitorOrderingPerRace(competitorOrderingPerRace);
|
||||
|
||||
+2
-2
@@ -99,11 +99,11 @@ public class LeaderboardDTO extends AbstractLeaderboardDTO implements Serializab
|
||||
competitorOrderingPerRace.put(raceColumn, orderedCompetitors);
|
||||
}
|
||||
|
||||
protected void setCompetitorOrderingPerRace(Map<RaceColumnDTO, List<CompetitorDTO>> competitorOrderingPerRace) {
|
||||
public void setCompetitorOrderingPerRace(Map<RaceColumnDTO, List<CompetitorDTO>> competitorOrderingPerRace) {
|
||||
this.competitorOrderingPerRace = competitorOrderingPerRace;
|
||||
}
|
||||
|
||||
protected Map<RaceColumnDTO, List<CompetitorDTO>> getCompetitorOrderingPerRace() {
|
||||
public Map<RaceColumnDTO, List<CompetitorDTO>> getCompetitorOrderingPerRace() {
|
||||
return competitorOrderingPerRace;
|
||||
}
|
||||
|
||||
|
||||
+33
@@ -28,6 +28,7 @@ import com.sap.sailing.domain.common.dto.LeaderboardDTO;
|
||||
import com.sap.sailing.domain.common.dto.LeaderboardEntryDTO;
|
||||
import com.sap.sailing.domain.common.dto.LeaderboardRowDTO;
|
||||
import com.sap.sailing.domain.common.dto.LegEntryDTO;
|
||||
import com.sap.sailing.domain.common.dto.RaceColumnDTO;
|
||||
import com.sap.sailing.domain.common.impl.Util;
|
||||
import com.sap.sailing.domain.test.StoredTrackBasedTest;
|
||||
import com.sap.sailing.util.ClonerImpl;
|
||||
@@ -223,4 +224,36 @@ public class LeaderboardDTODiffingTest {
|
||||
LeaderboardDTO applied = newVersion.getLeaderboardDTO(previousVersion);
|
||||
assertEquals(newDisplayNamesBeforeStripping, applied.competitorDisplayNames);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCompetitorOrderingInRaceChange() {
|
||||
RaceColumnDTO r9 = newVersion.getRaceColumnByName("R9");
|
||||
Map<RaceColumnDTO, List<CompetitorDTO>> newCompetitorOrderingPerRace = new HashMap<RaceColumnDTO, List<CompetitorDTO>>(newVersion.getCompetitorOrderingPerRace());
|
||||
newVersion.setCompetitorOrderingPerRace(newCompetitorOrderingPerRace);
|
||||
List<CompetitorDTO> newOrdering = new ArrayList<CompetitorDTO>(newVersion.getCompetitorsFromBestToWorst(r9));
|
||||
newVersion.setCompetitorsFromBestToWorst(r9, newOrdering);
|
||||
newVersion.competitors = new ArrayList<CompetitorDTO>(newVersion.competitors); // clone competitor list so it's not identical to that of previous version
|
||||
CompetitorDTO somebodyNew = new CompetitorDTOImpl("Someone New", "DE", "GER", "Germany", "GER 1234", "912p09871203987",
|
||||
new BoatClassDTO("505", 5.05));
|
||||
newVersion.competitors.add(somebodyNew);
|
||||
newOrdering.add(somebodyNew);
|
||||
CompetitorDTO formerRank13 = newOrdering.remove(13);
|
||||
newOrdering.add(12, formerRank13);
|
||||
List<CompetitorDTO> newOrderBeforeStripping = new ArrayList<CompetitorDTO>(newOrdering);
|
||||
newVersion.strip(previousVersion);
|
||||
for (RaceColumnDTO raceColumn : newVersion.getRaceList()) {
|
||||
if (!raceColumn.getName().equals("R9")) {
|
||||
assertNull(newVersion.getCompetitorsFromBestToWorst(raceColumn));
|
||||
}
|
||||
}
|
||||
assertEquals(newVersion.getCompetitorsFromBestToWorst(r9).size()-1, newVersion.getCompetitorsFromBestToWorst(r9).indexOf(somebodyNew));
|
||||
for (CompetitorDTO compactSuppressedCompetitor : newVersion.getCompetitorsFromBestToWorst(r9)) {
|
||||
if (compactSuppressedCompetitor != somebodyNew) {
|
||||
assertFalse(compactSuppressedCompetitor instanceof CompetitorDTOImpl); // assert that the existing competitor was compacted
|
||||
}
|
||||
}
|
||||
LeaderboardDTO applied = newVersion.getLeaderboardDTO(previousVersion);
|
||||
assertEquals(newOrderBeforeStripping, applied.getCompetitorsFromBestToWorst(applied.getRaceColumnByName("R9")));
|
||||
}
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user