mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-28 08:26:44 +00:00
bug5275: make checkbox instance instead of class scoped; pass through leaderboard's canBoatsChange
This commit is contained in:
+7
-14
@@ -39,11 +39,12 @@ public class CompetitorPanel extends SimplePanel implements BusyDisplay {
|
||||
|
||||
public CompetitorPanel(final SailingServiceWriteAsync sailingServiceWrite, final UserService userService, final StringMessages stringMessages,
|
||||
final ErrorReporter errorReporter) {
|
||||
this(sailingServiceWrite, userService, null, null, stringMessages, errorReporter);
|
||||
this(sailingServiceWrite, userService, /* leaderboardName */ null, /* boatClassName */ null, /* createWithBoatByDefault */ true,
|
||||
stringMessages, errorReporter);
|
||||
}
|
||||
|
||||
public CompetitorPanel(final SailingServiceWriteAsync sailingServiceWrite, final UserService userService, final String leaderboardName,
|
||||
String boatClassName, final StringMessages stringMessages, final ErrorReporter errorReporter) {
|
||||
String boatClassName, boolean createWithBoatByDefault, final StringMessages stringMessages, final ErrorReporter errorReporter) {
|
||||
super();
|
||||
this.leaderboardName = leaderboardName;
|
||||
this.boatClassName = boatClassName;
|
||||
@@ -56,27 +57,22 @@ public class CompetitorPanel extends SimplePanel implements BusyDisplay {
|
||||
this.setWidget(mainPanel);
|
||||
final AccessControlledButtonPanel buttonPanel = new AccessControlledButtonPanel(userService, COMPETITOR);
|
||||
mainPanel.add(buttonPanel);
|
||||
|
||||
final Button refreshButton = buttonPanel.addUnsecuredAction(stringMessages.refresh(),
|
||||
this::refreshCompetitorList);
|
||||
refreshButton.ensureDebugId("RefreshButton");
|
||||
|
||||
final Button allowReloadButton = buttonPanel.addUnsecuredAction(stringMessages.allowReload(),
|
||||
() -> competitorTable.allowUpdate(refreshableCompetitorSelectionModel.getSelectedSet()));
|
||||
refreshableCompetitorSelectionModel.addSelectionChangeHandler(
|
||||
event -> allowReloadButton.setEnabled(!refreshableCompetitorSelectionModel.getSelectedSet().isEmpty()));
|
||||
allowReloadButton.setEnabled(!refreshableCompetitorSelectionModel.getSelectedSet().isEmpty());
|
||||
|
||||
final Button addCompetitorButton = buttonPanel.addCreateAction(stringMessages.add(),
|
||||
this::openAddCompetitorDialog);
|
||||
()->openAddCompetitorDialog(createWithBoatByDefault));
|
||||
addCompetitorButton.ensureDebugId("AddCompetitorButton");
|
||||
|
||||
buttonPanel.addUnsecuredAction(stringMessages.selectAll(), () -> {
|
||||
for (CompetitorDTO c : competitorTable.getDataProvider().getList()) {
|
||||
refreshableCompetitorSelectionModel.setSelected(c, true);
|
||||
}
|
||||
});
|
||||
|
||||
buttonPanel.addCreateAction(stringMessages.importCompetitors(), () -> {
|
||||
sailingServiceWrite.getCompetitorProviderNames(new AsyncCallback<Iterable<String>>() {
|
||||
@Override
|
||||
@@ -96,7 +92,6 @@ public class CompetitorPanel extends SimplePanel implements BusyDisplay {
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// only if this competitor panel is connected to a leaderboard, we want to enable invitations
|
||||
if (leaderboardName != null) {
|
||||
buttonPanel.addCreateAction(stringMessages.inviteSelectedCompetitors(), () -> {
|
||||
@@ -106,10 +101,8 @@ public class CompetitorPanel extends SimplePanel implements BusyDisplay {
|
||||
helper.inviteCompetitors(competitors, leaderboardName);
|
||||
});
|
||||
}
|
||||
|
||||
mainPanel.add(busyIndicator);
|
||||
mainPanel.add(competitorTable);
|
||||
|
||||
if (leaderboardName != null) {
|
||||
refreshCompetitorList();
|
||||
}
|
||||
@@ -136,13 +129,13 @@ public class CompetitorPanel extends SimplePanel implements BusyDisplay {
|
||||
};
|
||||
}
|
||||
|
||||
private void openAddCompetitorDialog() {
|
||||
private void openAddCompetitorDialog(boolean createWithBoatByDefault) {
|
||||
CompetitorWithBoatDTOImpl competitorDTO = new CompetitorWithBoatDTOImpl();
|
||||
BoatClassDTO boatClassDTO = new BoatClassDTO(boatClassName, null, null);
|
||||
BoatClassDTO boatClassDTO = new BoatClassDTO(boatClassName, /* hullLength */ null, /* hullBeam */ null);
|
||||
BoatDTO boatDTO = new BoatDTO();
|
||||
boatDTO.setBoatClass(boatClassDTO);
|
||||
competitorDTO.setBoat(boatDTO);
|
||||
competitorTable.openCompetitorWithBoatAddDialog(competitorDTO);
|
||||
competitorTable.openCompetitorWithBoatAddDialog(competitorDTO, createWithBoatByDefault);
|
||||
}
|
||||
|
||||
public void refreshCompetitorList() {
|
||||
|
||||
+2
-2
@@ -459,9 +459,9 @@ public class CompetitorTableWrapper<S extends RefreshableSelectionModel<Competit
|
||||
dialog.show();
|
||||
}
|
||||
|
||||
void openCompetitorWithBoatAddDialog(final CompetitorWithBoatDTO newCompetitor) {
|
||||
void openCompetitorWithBoatAddDialog(final CompetitorWithBoatDTO newCompetitor, boolean createWithBoatByDefault) {
|
||||
final CompetitorWithOptionalBoatAddDialog dialog = new CompetitorWithOptionalBoatAddDialog(getStringMessages(),
|
||||
newCompetitor, new DialogCallback<CompetitorWithBoatDTO>() {
|
||||
newCompetitor, createWithBoatByDefault, new DialogCallback<CompetitorWithBoatDTO>() {
|
||||
@Override
|
||||
public void ok(final CompetitorWithBoatDTO competitor) {
|
||||
if (competitor.hasBoat()) {
|
||||
|
||||
+24
-30
@@ -1,11 +1,9 @@
|
||||
package com.sap.sailing.gwt.ui.adminconsole;
|
||||
|
||||
import com.google.gwt.dom.client.Style.Unit;
|
||||
import com.google.gwt.event.dom.client.ClickEvent;
|
||||
import com.google.gwt.event.dom.client.ClickHandler;
|
||||
import com.google.gwt.user.client.ui.CheckBox;
|
||||
import com.google.gwt.user.client.ui.Grid;
|
||||
import com.google.gwt.user.client.ui.HorizontalPanel;
|
||||
import com.google.gwt.user.client.ui.Label;
|
||||
import com.google.gwt.user.client.ui.SuggestBox;
|
||||
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||
@@ -16,14 +14,16 @@ import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
|
||||
/**
|
||||
* An Add dialog for a competitor with an optional boat. If {@link #withBoatCheckBox} is checked the
|
||||
* {@link #boatDataPanel} is visible and validated
|
||||
* {@link #boatDataPanel} is visible and validated. While the dialog always returns a
|
||||
* {@link CompetitorWithBoatDTO}, the resulting object may still have {@link CompetitorWithBoatDTO#hasBoat() hasBoat()==false}
|
||||
* in which case the {@link #withBoatCheckBox} was not ticked.
|
||||
*
|
||||
* @author Dmitry Bilyk
|
||||
*/
|
||||
|
||||
public class CompetitorWithOptionalBoatAddDialog extends AbstractCompetitorWithBoatDialog {
|
||||
|
||||
private static CheckBox withBoatCheckBox;
|
||||
private final CheckBox withBoatCheckBox;
|
||||
private final VerticalPanel boatDataPanel;
|
||||
|
||||
/**
|
||||
@@ -31,37 +31,40 @@ public class CompetitorWithOptionalBoatAddDialog extends AbstractCompetitorWithB
|
||||
*
|
||||
* @param competitorToAdd
|
||||
* The 'competitorToAdd' parameter contains the competitor which should be initialized.
|
||||
* @param createWithBoatByDefault
|
||||
* decides the default setting of the {@link #withBoatCheckBox}.
|
||||
* @param boatClass
|
||||
* The boat class is the default shown boat class for new boats. Set <code>null</code> if your boat is
|
||||
* already initialized or you don't want a default boat class.
|
||||
*/
|
||||
public CompetitorWithOptionalBoatAddDialog(StringMessages stringMessages, CompetitorWithBoatDTO competitorToAdd,
|
||||
DialogCallback<CompetitorWithBoatDTO> callback) {
|
||||
super(stringMessages.addCompetitor(), stringMessages, competitorToAdd, callback, null,
|
||||
new CompetitorWithOptionalBoatAddDialog.CompetitorWithOptionalBoatValidator(stringMessages));
|
||||
initWithBoatCheckBox();
|
||||
boatDataPanel = new VerticalPanel();
|
||||
boatDataPanel.setVisible(false);
|
||||
this.ensureDebugId("CompetitorWithBoatAddDialog");
|
||||
boolean createWithBoatByDefault, DialogCallback<CompetitorWithBoatDTO> callback) {
|
||||
this(stringMessages, competitorToAdd, new CheckBox(stringMessages.withBoat()), createWithBoatByDefault, callback);
|
||||
}
|
||||
|
||||
private void initWithBoatCheckBox() {
|
||||
withBoatCheckBox = new CheckBox();
|
||||
withBoatCheckBox.addClickHandler(new ClickHandler() {
|
||||
|
||||
public CompetitorWithOptionalBoatAddDialog(StringMessages stringMessages, CompetitorWithBoatDTO competitorToAdd,
|
||||
CheckBox withBoatCheckBox, boolean createWithBoatByDefault, DialogCallback<CompetitorWithBoatDTO> callback) {
|
||||
super(stringMessages.addCompetitor(), stringMessages, competitorToAdd, callback, null,
|
||||
new CompetitorWithOptionalBoatAddDialog.CompetitorWithOptionalBoatValidator(withBoatCheckBox, stringMessages));
|
||||
this.withBoatCheckBox = withBoatCheckBox;
|
||||
this.withBoatCheckBox.addClickHandler(new ClickHandler() {
|
||||
@Override
|
||||
public void onClick(ClickEvent event) {
|
||||
boatDataPanel.setVisible(withBoatCheckBox.getValue());
|
||||
validateAndUpdate();
|
||||
}
|
||||
});
|
||||
withBoatCheckBox.setValue(false);
|
||||
this.withBoatCheckBox.setValue(createWithBoatByDefault);
|
||||
boatDataPanel = new VerticalPanel();
|
||||
boatDataPanel.setVisible(createWithBoatByDefault);
|
||||
this.ensureDebugId("CompetitorWithBoatAddDialog");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Widget getAdditionalWidget() {
|
||||
VerticalPanel result = new VerticalPanel();
|
||||
result.add(super.getAdditionalWidget());
|
||||
result.add(createWithBoatCheckBoxPanel());
|
||||
result.add(withBoatCheckBox);
|
||||
boatDataPanel.add(createHeadlineLabel(getStringMessages().boat()));
|
||||
Grid grid = new Grid(5, 2);
|
||||
grid.setWidget(0, 0, new Label(getStringMessages().name()));
|
||||
@@ -86,16 +89,6 @@ public class CompetitorWithOptionalBoatAddDialog extends AbstractCompetitorWithB
|
||||
return competitorWithOptionalBoat;
|
||||
}
|
||||
|
||||
private HorizontalPanel createWithBoatCheckBoxPanel() {
|
||||
HorizontalPanel withBoatCheckBoxPanel = new HorizontalPanel();
|
||||
withBoatCheckBoxPanel.add(new Label(getStringMessages().withBoat()));
|
||||
withBoatCheckBoxPanel.getElement().getStyle().setMarginTop(10, Unit.PX);
|
||||
withBoatCheckBoxPanel.getElement().getStyle().setMarginLeft(20, Unit.PX);
|
||||
withBoatCheckBoxPanel.getElement().getStyle().setMarginBottom(10, Unit.PX);
|
||||
withBoatCheckBoxPanel.add(withBoatCheckBox);
|
||||
return withBoatCheckBoxPanel;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void setBoatClassNameEnabled(SuggestBox boatClassNameTextBox, boolean enabled) {
|
||||
super.setBoatClassNameEnabled(boatClassNameTextBox, true);
|
||||
@@ -103,10 +96,12 @@ public class CompetitorWithOptionalBoatAddDialog extends AbstractCompetitorWithB
|
||||
|
||||
protected static class CompetitorWithOptionalBoatValidator
|
||||
extends CompetitorWithoutBoatValidator<CompetitorWithBoatDTO> {
|
||||
protected final StringMessages stringMessages;
|
||||
private final StringMessages stringMessages;
|
||||
private final CheckBox withBoatCheckBox;
|
||||
|
||||
public CompetitorWithOptionalBoatValidator(StringMessages stringMessages) {
|
||||
public CompetitorWithOptionalBoatValidator(CheckBox withBoatCheckBox, StringMessages stringMessages) {
|
||||
super(stringMessages);
|
||||
this.withBoatCheckBox = withBoatCheckBox;
|
||||
this.stringMessages = stringMessages;
|
||||
}
|
||||
|
||||
@@ -133,7 +128,6 @@ public class CompetitorWithOptionalBoatAddDialog extends AbstractCompetitorWithB
|
||||
private boolean isBoatClassInvalid(BoatDTO boatToValidate) {
|
||||
return boatToValidate.getBoatClass().getName() == null || boatToValidate.getBoatClass().getName().isEmpty();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+5
-3
@@ -17,6 +17,7 @@ public class EditCompetitorsDialog extends DataEntryDialog<List<CompetitorWithBo
|
||||
private final ErrorReporter errorReporter;
|
||||
private final String leaderboardName;
|
||||
private final String boatClassName;
|
||||
private final boolean createWithBoatByDefault;
|
||||
|
||||
protected static class CompetitorsValidator implements Validator<List<CompetitorWithBoatDTO>> {
|
||||
public CompetitorsValidator() {
|
||||
@@ -30,8 +31,8 @@ public class EditCompetitorsDialog extends DataEntryDialog<List<CompetitorWithBo
|
||||
}
|
||||
|
||||
public EditCompetitorsDialog(final SailingServiceWriteAsync sailingServiceWrite, final UserService userService,
|
||||
final String leaderboardName, final String boatClassName, final StringMessages stringMessages,
|
||||
final ErrorReporter errorReporter, DialogCallback<List<CompetitorWithBoatDTO>> callback) {
|
||||
final String leaderboardName, final String boatClassName, boolean createWithBoatByDefault,
|
||||
final StringMessages stringMessages, final ErrorReporter errorReporter, DialogCallback<List<CompetitorWithBoatDTO>> callback) {
|
||||
super(stringMessages.actionEditCompetitors(), null, stringMessages.ok(), stringMessages.cancel(),
|
||||
new CompetitorsValidator(), callback);
|
||||
this.sailingServiceWrite = sailingServiceWrite;
|
||||
@@ -40,6 +41,7 @@ public class EditCompetitorsDialog extends DataEntryDialog<List<CompetitorWithBo
|
||||
this.errorReporter = errorReporter;
|
||||
this.leaderboardName = leaderboardName;
|
||||
this.boatClassName = boatClassName;
|
||||
this.createWithBoatByDefault = createWithBoatByDefault;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -50,7 +52,7 @@ public class EditCompetitorsDialog extends DataEntryDialog<List<CompetitorWithBo
|
||||
@Override
|
||||
protected Widget getAdditionalWidget() {
|
||||
CompetitorPanel competitorPanel = new CompetitorPanel(sailingServiceWrite, userService, leaderboardName,
|
||||
boatClassName, stringMessages, errorReporter);
|
||||
boatClassName, createWithBoatByDefault, stringMessages, errorReporter);
|
||||
return competitorPanel;
|
||||
}
|
||||
}
|
||||
|
||||
+3
-2
@@ -313,8 +313,9 @@ public class LeaderboardConfigPanel extends AbstractLeaderboardConfigPanel
|
||||
leaderboardActionColumn.addAction(LeaderboardConfigImagesBarCell.ACTION_EDIT_COMPETITORS, UPDATE,
|
||||
leaderboardDTO -> {
|
||||
EditCompetitorsDialog editCompetitorsDialog = new EditCompetitorsDialog(sailingServiceWrite, userService,
|
||||
leaderboardDTO.getName(), leaderboardDTO.boatClassName, stringMessages, errorReporter,
|
||||
new DialogCallback<List<CompetitorWithBoatDTO>>() {
|
||||
leaderboardDTO.getName(), leaderboardDTO.boatClassName,
|
||||
/* createWithBoatByDefault */ !leaderboardDTO.canBoatsOfCompetitorsChangePerRace,
|
||||
stringMessages, errorReporter, new DialogCallback<List<CompetitorWithBoatDTO>>() {
|
||||
@Override
|
||||
public void cancel() {
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user