mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-07 21:01:03 +00:00
avoid NPEs during asynchronous leaderboard selection change and race column (re-)selection
This commit is contained in:
1 parent
dec37d6572
commit
aa08a4d646
4 files changed
+29
-19
No files matched your search
+19
-16
@@ -398,7 +398,7 @@ public class LeaderboardConfigPanel extends FormPanel implements SelectedLeaderb
|
||||
new DisablableCheckboxCell(new IsEnabled() {
|
||||
@Override
|
||||
public boolean isEnabled() {
|
||||
return !getSelectedLeaderboard().isRegattaLeaderboard;
|
||||
return getSelectedLeaderboard() != null && !getSelectedLeaderboard().isRegattaLeaderboard;
|
||||
}
|
||||
})) {
|
||||
@Override
|
||||
@@ -561,16 +561,22 @@ public class LeaderboardConfigPanel extends FormPanel implements SelectedLeaderb
|
||||
});
|
||||
}
|
||||
|
||||
public void loadAndRefreshLeaderboard(final String leaderboardName) {
|
||||
/**
|
||||
* @param nameOfRaceColumnToSelect
|
||||
* if not <code>null</code>, selects the first race column name with this name found in the leaderboard
|
||||
* after the refresh has successfully completed. See {@link #selectRaceColumn(String)}.
|
||||
*/
|
||||
public void loadAndRefreshLeaderboard(final String leaderboardName, final String nameOfRaceColumnToSelect) {
|
||||
leaderboardSelectionModel.setSelected(null, true);
|
||||
|
||||
sailingService.getLeaderboard(leaderboardName, new AsyncCallback<StrippedLeaderboardDTO>() {
|
||||
@Override
|
||||
public void onSuccess(StrippedLeaderboardDTO leaderboard) {
|
||||
replaceLeaderboardInList(leaderboardList.getList(), leaderboardName, leaderboard);
|
||||
replaceLeaderboardInList(availableLeaderboardList, leaderboardName, leaderboard);
|
||||
|
||||
leaderboardSelectionModel.setSelected(leaderboard, true);
|
||||
if (nameOfRaceColumnToSelect != null) {
|
||||
selectRaceColumn(nameOfRaceColumnToSelect);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -583,13 +589,13 @@ public class LeaderboardConfigPanel extends FormPanel implements SelectedLeaderb
|
||||
|
||||
private void replaceLeaderboardInList(List<StrippedLeaderboardDTO> leaderboardList, String leaderboardToReplace, StrippedLeaderboardDTO newLeaderboard) {
|
||||
int index = -1;
|
||||
for(StrippedLeaderboardDTO existingLeaderboard: leaderboardList) {
|
||||
for (StrippedLeaderboardDTO existingLeaderboard : leaderboardList) {
|
||||
index++;
|
||||
if(existingLeaderboard.name.equals(leaderboardToReplace)) {
|
||||
if (existingLeaderboard.name.equals(leaderboardToReplace)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(index >= 0) {
|
||||
if (index >= 0) {
|
||||
leaderboardList.set(index, newLeaderboard);
|
||||
}
|
||||
}
|
||||
@@ -626,7 +632,7 @@ public class LeaderboardConfigPanel extends FormPanel implements SelectedLeaderb
|
||||
|
||||
@Override
|
||||
public void onSuccess(Void arg0) {
|
||||
loadAndRefreshLeaderboard(selectedLeaderboardName);
|
||||
loadAndRefreshLeaderboard(selectedLeaderboardName, /* raceColumnNameToSelect */ null);
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -649,8 +655,7 @@ public class LeaderboardConfigPanel extends FormPanel implements SelectedLeaderb
|
||||
|
||||
@Override
|
||||
public void onSuccess(Void result) {
|
||||
loadAndRefreshLeaderboard(selectedLeaderboardName);
|
||||
selectRaceColumn(selectedRaceColumnName);
|
||||
loadAndRefreshLeaderboard(selectedLeaderboardName, selectedRaceColumnName);
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -673,8 +678,7 @@ public class LeaderboardConfigPanel extends FormPanel implements SelectedLeaderb
|
||||
|
||||
@Override
|
||||
public void onSuccess(Void result) {
|
||||
loadAndRefreshLeaderboard(selectedLeaderboardName);
|
||||
selectRaceColumn(selectedRaceColumnName);
|
||||
loadAndRefreshLeaderboard(selectedLeaderboardName, selectedRaceColumnName);
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -695,7 +699,7 @@ public class LeaderboardConfigPanel extends FormPanel implements SelectedLeaderb
|
||||
private void selectRaceColumn(String raceCoumnName) {
|
||||
List<Pair<RaceColumnDTO, FleetDTO>> list = raceColumnAndFleetList.getList();
|
||||
for (Pair<RaceColumnDTO, FleetDTO> pair : list) {
|
||||
if(pair.getA().name.equals(raceCoumnName)) {
|
||||
if (pair.getA().name.equals(raceCoumnName)) {
|
||||
raceColumnTableSelectionModel.setSelected(pair, true);
|
||||
break;
|
||||
}
|
||||
@@ -780,8 +784,7 @@ public class LeaderboardConfigPanel extends FormPanel implements SelectedLeaderb
|
||||
new ParallelExecutionHolder(callbacks.toArray(new ParallelExecutionCallback<?>[0])) {
|
||||
@Override
|
||||
public void handleSuccess() {
|
||||
loadAndRefreshLeaderboard(selectedLeaderboardName);
|
||||
selectRaceColumn(result.getName());
|
||||
loadAndRefreshLeaderboard(selectedLeaderboardName, result.getName());
|
||||
}
|
||||
@Override
|
||||
public void handleFailure(Throwable t) {
|
||||
@@ -860,7 +863,7 @@ public class LeaderboardConfigPanel extends FormPanel implements SelectedLeaderb
|
||||
|
||||
@Override
|
||||
public void onSuccess(Void v) {
|
||||
loadAndRefreshLeaderboard(leaderboardName);
|
||||
loadAndRefreshLeaderboard(leaderboardName, /* nameOfRaceColumnToSelect */ null);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
+2
-1
@@ -25,7 +25,8 @@ public class LeaderboardRaceConfigImagesBarCell extends ImagesBarCell {
|
||||
List<ImageSpec> result = new ArrayList<ImageSpec>();
|
||||
result.add(new ImageSpec(ACTION_EDIT, stringMessages.actionEdit(), makeImagePrototype(resources.editIcon())));
|
||||
result.add(new ImageSpec(ACTION_UNLINK, stringMessages.actionRaceUnlink(), makeImagePrototype(resources.unlinkIcon())));
|
||||
if (!selectedLeaderboardProvider.getSelectedLeaderboard().isRegattaLeaderboard) {
|
||||
if (selectedLeaderboardProvider.getSelectedLeaderboard() != null &&
|
||||
!selectedLeaderboardProvider.getSelectedLeaderboard().isRegattaLeaderboard) {
|
||||
// race columns cannot be removed from a regatta leaderboard; they need to be removed from the regatta instead
|
||||
result.add(new ImageSpec(ACTION_REMOVE, stringMessages.actionRaceRemove(), makeImagePrototype(resources.removeIcon())));
|
||||
}
|
||||
|
||||
+8
-1
@@ -24,6 +24,7 @@ public class RaceColumnInLeaderboardDialog extends DataEntryDialog<RaceColumnInL
|
||||
private final DoubleBox explicitFactorBox;
|
||||
private final CheckBox isMedalRace;
|
||||
private final StringMessages stringMessages;
|
||||
private final boolean isRegattaLeaderboard;
|
||||
|
||||
public static class RaceColumnDescriptor {
|
||||
private String name;
|
||||
@@ -96,6 +97,7 @@ public class RaceColumnInLeaderboardDialog extends DataEntryDialog<RaceColumnInL
|
||||
boolean isRegattaLeaderboard, StringMessages stringMessages, DialogCallback<RaceColumnDescriptor> callback) {
|
||||
super(stringMessages.actionRaceEdit(), null, stringMessages.ok(), stringMessages.cancel(),
|
||||
new RaceDialogValidator(stringMessages, existingRaces), callback);
|
||||
this.isRegattaLeaderboard = isRegattaLeaderboard;
|
||||
this.stringMessages = stringMessages;
|
||||
raceNameBox = createTextBox(raceColumnToEdit.getRaceColumnName());
|
||||
raceNameBox.setEnabled(!isRegattaLeaderboard);
|
||||
@@ -134,6 +136,11 @@ public class RaceColumnInLeaderboardDialog extends DataEntryDialog<RaceColumnInL
|
||||
@Override
|
||||
public void show() {
|
||||
super.show();
|
||||
raceNameBox.setFocus(true);
|
||||
if (isRegattaLeaderboard) {
|
||||
explicitFactorBox.setFocus(true);
|
||||
explicitFactorBox.setSelectionRange(0, explicitFactorBox.getText().length());
|
||||
} else {
|
||||
raceNameBox.setFocus(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
-1
@@ -69,7 +69,6 @@ public class RaceColumnsInLeaderboardDialog extends DataEntryDialog<List<RaceCol
|
||||
+ stringConstants.raceWithThisNameAlreadyExists();
|
||||
}
|
||||
}
|
||||
|
||||
return errorMessage;
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user