mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-11-15 06:49:56 +00:00
bug 4247: don't manipulate operation before replicating it
Change-Id: I718a8210f9abfe9b375ae105614b6c59c934d2a1
This commit is contained in:
1 parent
9f61d9a834
commit
6635c974e8
1 file changed
+5
-2
+5
-2
@@ -1,5 +1,6 @@
|
||||
package com.sap.sailing.server.operationaltransformation;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
@@ -19,13 +20,15 @@ public class UpdateEliminatedCompetitorsInLeaderboard extends AbstractLeaderboar
|
||||
|
||||
@Override
|
||||
public Void internalApplyTo(RacingEventService toState) throws Exception {
|
||||
// important not to manipulate the operation; create a local copy of the competitors before alterint it; see bug 4247
|
||||
final Set<Competitor> myNewEliminatedCompetitors = new HashSet<>(newEliminatedCompetitors);
|
||||
RegattaLeaderboardWithEliminations leaderboard = (RegattaLeaderboardWithEliminations) toState.getLeaderboardByName(getLeaderboardName());
|
||||
// first un-eliminate those currently eliminated and no longer in newEliminatedCompetitors
|
||||
for (final Competitor c : leaderboard.getEliminatedCompetitors()) {
|
||||
leaderboard.setEliminated(c, newEliminatedCompetitors.remove(c));
|
||||
leaderboard.setEliminated(c, myNewEliminatedCompetitors.remove(c));
|
||||
}
|
||||
// then eliminated the remaining ones from newEliminatedCompetitors
|
||||
for (final Competitor c : newEliminatedCompetitors) {
|
||||
for (final Competitor c : myNewEliminatedCompetitors) {
|
||||
leaderboard.setEliminated(c, true);
|
||||
}
|
||||
updateStoredLeaderboard(toState, leaderboard);
|
||||
|
||||
Reference in new issue
Block a user