avoid NPEs during asynchronous leaderboard selection change and race column (re-)selection

This commit is contained in:
Axel Uhl committed 2013-03-04 13:56:18 +01:00
1 parent dec37d6572
commit aa08a4d646
4 files changed
+29 -19

No files matched your search

@@ -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);
}
});
}
@@ -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())));
}
@@ -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);
}
}
}
@@ -69,7 +69,6 @@ public class RaceColumnsInLeaderboardDialog extends DataEntryDialog<List<RaceCol
+ stringConstants.raceWithThisNameAlreadyExists();
}
}
return errorMessage;
}