copy the settings collections to avoid them overwriting themselves during LeaderboardPanel.updateSettings

Change-Id: Iad76b1fafafb5f39391744a276ee0ed95af43f95
This commit is contained in:
Axel Uhl committed 2016-07-24 00:15:09 +02:00
1 parent 55e5c77d7e
commit e062301155
9 files changed
+70 -32

No files matched your search

@@ -68,7 +68,7 @@ public abstract class AbstractLeaderboardConfigPanel extends FormPanel implement
protected final SailingServiceAsync sailingService;
protected final ListDataProvider<StrippedLeaderboardDTO> leaderboardList;
protected final ListDataProvider<StrippedLeaderboardDTO> filteredLeaderboardList;
protected final ErrorReporter errorReporter;
@@ -139,7 +139,7 @@ public abstract class AbstractLeaderboardConfigPanel extends FormPanel implement
StringMessages theStringConstants, boolean multiSelection) {
this.stringMessages = theStringConstants;
this.sailingService = sailingService;
leaderboardList = new ListDataProvider<StrippedLeaderboardDTO>();
filteredLeaderboardList = new ListDataProvider<StrippedLeaderboardDTO>();
allRegattas = new ArrayList<RegattaDTO>();
this.errorReporter = errorReporter;
this.leaderboardsRefresher = leaderboardsRefresher;
@@ -165,7 +165,7 @@ public abstract class AbstractLeaderboardConfigPanel extends FormPanel implement
AdminConsoleTableResources tableRes = GWT.create(AdminConsoleTableResources.class);
leaderboardTable = new FlushableCellTable<StrippedLeaderboardDTO>(/* pageSize */10000, tableRes);
filterLeaderboardPanel = new LabeledAbstractFilterablePanel<StrippedLeaderboardDTO>(lblFilterEvents,
availableLeaderboardList, leaderboardTable, leaderboardList) {
availableLeaderboardList, leaderboardTable, filteredLeaderboardList) {
@Override
public List<String> getSearchableStrings(StrippedLeaderboardDTO t) {
List<String> strings = new ArrayList<String>();
@@ -191,7 +191,7 @@ public abstract class AbstractLeaderboardConfigPanel extends FormPanel implement
raceColumnTable.setSelectedLeaderboardName(getSelectedLeaderboardName());
}
});
leaderboardList.addDataDisplay(leaderboardTable);
filteredLeaderboardList.addDataDisplay(leaderboardTable);
leaderboardsPanel.add(leaderboardTable);
mainPanel.add(new Grid(1, 1));
@@ -351,7 +351,7 @@ public abstract class AbstractLeaderboardConfigPanel extends FormPanel implement
filterLeaderboardPanel.updateAll(availableLeaderboardList); // also updates leaderboardList provider
leaderboardSelectionModel.setSelected(leaderboard, true);
leaderboardSelectionChanged();
getLeaderboardsRefresher().updateLeaderboards(leaderboardList.getList(), AbstractLeaderboardConfigPanel.this);
getLeaderboardsRefresher().updateLeaderboards(filteredLeaderboardList.getList(), AbstractLeaderboardConfigPanel.this);
}
@Override
@@ -499,7 +499,7 @@ public abstract class AbstractLeaderboardConfigPanel extends FormPanel implement
@Override
public void racesRemoved(Iterable<? extends RegattaAndRaceIdentifier> regattaAndRaceIdentifiers) {
for (RegattaAndRaceIdentifier regattaAndRaceIdentifier : regattaAndRaceIdentifiers) {
for (StrippedLeaderboardDTO leaderboard : leaderboardList.getList()) {
for (StrippedLeaderboardDTO leaderboard : filteredLeaderboardList.getList()) {
for (RaceColumnDTO raceColumn : leaderboard.getRaceList()) {
for (FleetDTO fleet : raceColumn.getFleets()) {
if (Util.equalsWithNull(raceColumn.getRaceIdentifier(fleet), regattaAndRaceIdentifier)) {
@@ -130,7 +130,7 @@ TrackedRaceChangedListener, LeaderboardsDisplayer {
protected void addColumnsToLeaderboardTableAndSetSelectionModel(final FlushableCellTable<StrippedLeaderboardDTO> leaderboardTable,
AdminConsoleTableResources tableResources, ListDataProvider<StrippedLeaderboardDTO> listDataProvider) {
ListHandler<StrippedLeaderboardDTO> leaderboardColumnListHandler = new ListHandler<StrippedLeaderboardDTO>(
leaderboardList.getList());
filteredLeaderboardList.getList());
SelectionCheckboxColumn<StrippedLeaderboardDTO> selectionCheckboxColumn = createSortableSelectionCheckboxColumn(
leaderboardTable, tableResources, leaderboardColumnListHandler, listDataProvider);
AnchorCell anchorCell = new AnchorCell();
@@ -778,7 +778,7 @@ TrackedRaceChangedListener, LeaderboardsDisplayer {
}
private void addLeaderboard(StrippedLeaderboardDTO result) {
leaderboardList.getList().add(result);
filteredLeaderboardList.getList().add(result);
availableLeaderboardList.add(result);
leaderboardSelectionModel.clear();
leaderboardSelectionModel.setSelected(result, true);
@@ -796,15 +796,15 @@ TrackedRaceChangedListener, LeaderboardsDisplayer {
@Override
public void onSuccess(StrippedLeaderboardDTO updatedLeaderboard) {
int indexOfLeaderboard = 0;
for (int i = 0; i < leaderboardList.getList().size(); i++) {
StrippedLeaderboardDTO dao = leaderboardList.getList().get(i);
for (int i = 0; i < filteredLeaderboardList.getList().size(); i++) {
StrippedLeaderboardDTO dao = filteredLeaderboardList.getList().get(i);
if (dao.name.equals(oldLeaderboardName)) {
indexOfLeaderboard = i;
break;
}
}
leaderboardList.getList().set(indexOfLeaderboard, updatedLeaderboard);
leaderboardList.refresh();
filteredLeaderboardList.getList().set(indexOfLeaderboard, updatedLeaderboard);
filteredLeaderboardList.refresh();
}
});
}
@@ -850,7 +850,7 @@ TrackedRaceChangedListener, LeaderboardsDisplayer {
}
private void removeLeaderboardFromTable(final StrippedLeaderboardDTO leaderBoard) {
leaderboardList.getList().remove(leaderBoard);
filteredLeaderboardList.getList().remove(leaderBoard);
availableLeaderboardList.remove(leaderBoard);
leaderboardSelectionModel.setSelected(leaderBoard, false);
}
@@ -110,7 +110,7 @@ public class SmartphoneTrackingEventManagementPanel extends AbstractLeaderboardC
protected void addColumnsToLeaderboardTableAndSetSelectionModel(FlushableCellTable<StrippedLeaderboardDTO> leaderboardTable,
AdminConsoleTableResources tableResources, ListDataProvider<StrippedLeaderboardDTO> listDataProvider) {
ListHandler<StrippedLeaderboardDTO> leaderboardColumnListHandler = new ListHandler<StrippedLeaderboardDTO>(
leaderboardList.getList());
filteredLeaderboardList.getList());
SelectionCheckboxColumn<StrippedLeaderboardDTO> selectionCheckboxColumn = createSortableSelectionCheckboxColumn(
leaderboardTable, tableResources, leaderboardColumnListHandler, listDataProvider);
TextColumn<StrippedLeaderboardDTO> leaderboardNameColumn = new TextColumn<StrippedLeaderboardDTO>() {
@@ -137,25 +137,38 @@ public class LeaderboardSettings extends AbstractSettings {
this.showOverallColumnWithNumberOfRacesCompletedPerCompetitor = showOverallColumnWithNumberOfRacesCompletedPerCompetitor;
}
/**
* A live collection that reflects the current state of the settings of a leaderboard panel
*/
public List<DetailType> getManeuverDetailsToShow() {
return maneuverDetailsToShow;
}
/**
* A live collection that reflects the current state of the settings of a leaderboard panel
*/
public List<DetailType> getLegDetailsToShow() {
return legDetailsToShow;
}
/**
* A live collection that reflects the current state of the settings of a leaderboard panel
*/
public List<DetailType> getRaceDetailsToShow() {
return raceDetailsToShow;
}
/**
* A live collection that reflects the current state of the settings of a leaderboard panel
*/
public List<DetailType> getOverallDetailsToShow() {
return overallDetailsToShow;
}
/**
* If <code>null</code>, this is to mean that the race columns should not be modified by
* {@link LeaderboardPanel#updateSettings(LeaderboardSettings)}.
* {@link LeaderboardPanel#updateSettings(LeaderboardSettings)}. Otherwise a
* live collection that reflects the current state of the settings of a leaderboard panel
*/
public List<String> getNamesOfRaceColumnsToShow() {
return activeRaceColumnSelectionStrategy == RaceColumnSelectionStrategies.EXPLICIT ? namesOfRaceColumnsToShow : null;
@@ -163,7 +176,8 @@ public class LeaderboardSettings extends AbstractSettings {
/**
* If <code>null</code>, this is to mean that the race columns should not be modified by
* {@link LeaderboardPanel#updateSettings(LeaderboardSettings)}.
* {@link LeaderboardPanel#updateSettings(LeaderboardSettings)}. Otherwise
* a live collection that reflects the current state of the settings of a leaderboard panel
*/
public List<String> getNamesOfRacesToShow() {
return activeRaceColumnSelectionStrategy == RaceColumnSelectionStrategies.EXPLICIT ? namesOfRacesToShow : null;
@@ -5,6 +5,7 @@ import java.util.List;
import com.sap.sailing.domain.common.DetailType;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardSettings;
import com.sap.sse.common.Util;
import com.sap.sse.gwt.client.player.Timer.PlayModes;
import com.sap.sse.gwt.client.player.Timer.PlayStates;
@@ -48,10 +49,12 @@ public class FullAnalysisMode extends AbstractRaceBoardMode {
raceDetailsToShow.add(DetailType.RACE_AVERAGE_SPEED_OVER_GROUND_IN_KNOTS);
raceDetailsToShow.add(DetailType.RACE_DISTANCE_TRAVELED);
raceDetailsToShow.add(DetailType.RACE_GAP_TO_LEADER_IN_SECONDS);
final LeaderboardSettings newSettings = new LeaderboardSettings(existingSettings.getManeuverDetailsToShow(),
existingSettings.getLegDetailsToShow(),
raceDetailsToShow, existingSettings.getOverallDetailsToShow(), existingSettings.getNamesOfRaceColumnsToShow(),
existingSettings.getNamesOfRacesToShow(),
final LeaderboardSettings newSettings = new LeaderboardSettings(
Util.cloneListOrNull(existingSettings.getManeuverDetailsToShow()),
Util.cloneListOrNull(existingSettings.getLegDetailsToShow()),
raceDetailsToShow, Util.cloneListOrNull(existingSettings.getOverallDetailsToShow()),
Util.cloneListOrNull(existingSettings.getNamesOfRaceColumnsToShow()),
Util.cloneListOrNull(existingSettings.getNamesOfRacesToShow()),
existingSettings.getNumberOfLastRacesToShow(), /* auto-expand pre-selected race */ true,
existingSettings.getDelayBetweenAutoAdvancesInMilliseconds(),
existingSettings.getNameOfRaceToSort(), existingSettings.isSortAscending(),
@@ -6,6 +6,7 @@ import java.util.List;
import com.sap.sailing.domain.common.DetailType;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardSettings;
import com.sap.sse.common.Duration;
import com.sap.sse.common.Util;
import com.sap.sse.common.impl.MillisecondsTimePoint;
import com.sap.sse.gwt.client.player.Timer.PlayModes;
import com.sap.sse.gwt.client.player.Timer.PlayStates;
@@ -29,10 +30,13 @@ public class PlayerMode extends AbstractRaceBoardMode {
final List<DetailType> raceDetailsToShow = new ArrayList<>(existingSettings.getRaceDetailsToShow());
raceDetailsToShow.add(DetailType.RACE_CURRENT_SPEED_OVER_GROUND_IN_KNOTS);
raceDetailsToShow.add(DetailType.RACE_GAP_TO_LEADER_IN_SECONDS);
final LeaderboardSettings newSettings = new LeaderboardSettings(existingSettings.getManeuverDetailsToShow(),
existingSettings.getLegDetailsToShow(),
raceDetailsToShow, existingSettings.getOverallDetailsToShow(), existingSettings.getNamesOfRaceColumnsToShow(),
existingSettings.getNamesOfRacesToShow(),
final LeaderboardSettings newSettings = new LeaderboardSettings(
Util.cloneListOrNull(existingSettings.getManeuverDetailsToShow()),
Util.cloneListOrNull(existingSettings.getLegDetailsToShow()),
raceDetailsToShow,
Util.cloneListOrNull(existingSettings.getOverallDetailsToShow()),
Util.cloneListOrNull(existingSettings.getNamesOfRaceColumnsToShow()),
Util.cloneListOrNull(existingSettings.getNamesOfRacesToShow()),
existingSettings.getNumberOfLastRacesToShow(), /* auto-expand pre-selected race */ true,
existingSettings.getDelayBetweenAutoAdvancesInMilliseconds(),
existingSettings.getNameOfRaceToSort(), existingSettings.isSortAscending(),
@@ -19,6 +19,7 @@ import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMapZoomSettings;
import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMapZoomSettings.ZoomTypes;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardSettings;
import com.sap.sse.common.Duration;
import com.sap.sse.common.Util;
import com.sap.sse.common.impl.MillisecondsTimePoint;
import com.sap.sse.gwt.client.player.Timer.PlayModes;
import com.sap.sse.gwt.client.player.Timer.PlayStates;
@@ -167,10 +168,13 @@ public class StartAnalysisMode extends RaceBoardModeWithPerRaceCompetitors {
raceDetailsToShow.add(DetailType.START_TACK);
raceDetailsToShow.add(DetailType.RACE_GAP_TO_LEADER_IN_SECONDS);
raceDetailsToShow.remove(DetailType.DISPLAY_LEGS);
final LeaderboardSettings newSettings = new LeaderboardSettings(existingSettings.getManeuverDetailsToShow(),
existingSettings.getLegDetailsToShow(),
raceDetailsToShow, existingSettings.getOverallDetailsToShow(), existingSettings.getNamesOfRaceColumnsToShow(),
existingSettings.getNamesOfRacesToShow(),
final LeaderboardSettings newSettings = new LeaderboardSettings(
Util.cloneListOrNull(existingSettings.getManeuverDetailsToShow()),
Util.cloneListOrNull(existingSettings.getLegDetailsToShow()),
Util.cloneListOrNull(raceDetailsToShow),
Util.cloneListOrNull(existingSettings.getOverallDetailsToShow()),
Util.cloneListOrNull(existingSettings.getNamesOfRaceColumnsToShow()),
Util.cloneListOrNull(existingSettings.getNamesOfRacesToShow()),
existingSettings.getNumberOfLastRacesToShow(), /* auto-expand pre-selected race */ true,
existingSettings.getDelayBetweenAutoAdvancesInMilliseconds(),
existingSettings.getNameOfRaceToSort(), existingSettings.isSortAscending(),
@@ -44,10 +44,13 @@ public class WinningLanesMode extends RaceBoardModeWithPerRaceCompetitors {
raceDetailsToShow.add(DetailType.RACE_DISTANCE_TRAVELED);
raceDetailsToShow.add(DetailType.RACE_TIME_TRAVELED);
raceDetailsToShow.remove(DetailType.DISPLAY_LEGS);
final LeaderboardSettings newSettings = new LeaderboardSettings(existingSettings.getManeuverDetailsToShow(),
existingSettings.getLegDetailsToShow(),
raceDetailsToShow, existingSettings.getOverallDetailsToShow(), existingSettings.getNamesOfRaceColumnsToShow(),
existingSettings.getNamesOfRacesToShow(),
final LeaderboardSettings newSettings = new LeaderboardSettings(
Util.cloneListOrNull(existingSettings.getManeuverDetailsToShow()),
Util.cloneListOrNull(existingSettings.getLegDetailsToShow()),
raceDetailsToShow,
Util.cloneListOrNull(existingSettings.getOverallDetailsToShow()),
Util.cloneListOrNull(existingSettings.getNamesOfRaceColumnsToShow()),
Util.cloneListOrNull(existingSettings.getNamesOfRacesToShow()),
existingSettings.getNumberOfLastRacesToShow(), /* auto-expand pre-selected race */ true,
existingSettings.getDelayBetweenAutoAdvancesInMilliseconds(),
existingSettings.getNameOfRaceToSort(), existingSettings.isSortAscending(),
@@ -504,4 +504,14 @@ public class Util {
addAll(visibleCourseAreas, list);
return list;
}
public static <T> List<T> cloneListOrNull(List<T> list) {
final List<T> result;
if (list == null) {
result = null;
} else {
result = new ArrayList<T>(list);
}
return result;
}
}