diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AbstractTrackedRacesListComposite.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AbstractTrackedRacesListComposite.java index ffbfc751e8c..2156abc175e 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AbstractTrackedRacesListComposite.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AbstractTrackedRacesListComposite.java @@ -517,23 +517,17 @@ public abstract class AbstractTrackedRacesListComposite extends SimplePanel @Override public void fillRegattas(Iterable regattas) { makeControlsReactToFillRegattas(regattas); - if (Util.isEmpty(regattas)) { - raceTable.setVisible(false); - noTrackedRacesLabel.setVisible(true); - } else { - raceTable.setVisible(true); - noTrackedRacesLabel.setVisible(false); - } + displayRaceTableUI(regattas); + List newAllRaces = new ArrayList(); - List newAllRegattas = new ArrayList(); List regattaNames = new ArrayList<>(); + for (RegattaDTO regatta : regattas) { - newAllRegattas.add(regatta); for (RaceDTO race : regatta.races) { if (race != null) { if (raceIsToBeAddedToList(race)) { - //We need only those regatta names which are available - //at tracking table + // We need only those regatta names which are available + // at tracking table if (!regattaNames.contains(regatta.getName())) { regattaNames.add(regatta.getName()); } @@ -543,13 +537,45 @@ public abstract class AbstractTrackedRacesListComposite extends SimplePanel } } - listBoxRegattas.clear(); - listBoxRegattas.addItem(stringMessages.all(), ""); - regattaNames.stream().sorted().forEach(regatta->listBoxRegattas.addItem(regatta, regatta)); + refreshListBoxRegattas(regattaNames); allRaces = newAllRaces; filterablePanelRaces.updateAll(allRaces); } + private void refreshListBoxRegattas(List regattaNames) { + String lastSelectedRegatta = listBoxRegattas.getSelectedItemText(); + listBoxRegattas.clear(); + listBoxRegattas.addItem(stringMessages.all(), ""); + regattaNames.stream().sorted().forEach(regatta -> listBoxRegattas.addItem(regatta, regatta)); + restoreListBoxRegattasSelection(lastSelectedRegatta); + } + + private void restoreListBoxRegattasSelection(String lastSelectedRegatta) { + for (int i = 0; i < listBoxRegattas.getItemCount(); i++) { + if (listBoxRegattas.getItemText(i).equals(lastSelectedRegatta)) { + listBoxRegattas.setSelectedIndex(i); + } + } + } + + private void displayRaceTableUI(Iterable regattas) { + if (Util.isEmpty(regattas)) { + hideRaceTable(); + } else { + showRaceTable(); + } + } + + private void showRaceTable() { + raceTable.setVisible(true); + noTrackedRacesLabel.setVisible(false); + } + + private void hideRaceTable() { + raceTable.setVisible(false); + noTrackedRacesLabel.setVisible(true); + } + /** * Allows applying some sort of filter to the process of adding races. Defaults to true in standard implementation. * Override for custom behavior