mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-11-14 22:43:57 +00:00
Merge branch 'bug5275'
This commit is contained in:
commit
a97388fcbc
17 files changed
+277
-70
No files matched your search
@@ -57,6 +57,10 @@ public class BoatDTO extends NamedSecuredObjectDTO implements WithID, Serializab
|
||||
return boatClass;
|
||||
}
|
||||
|
||||
public void setBoatClass(BoatClassDTO boatClass) {
|
||||
this.boatClass = boatClass;
|
||||
}
|
||||
|
||||
public String getDisplayName() {
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
final boolean hasSailId = sailId != null && !sailId.isEmpty();
|
||||
|
||||
+44
-18
@@ -3,12 +3,15 @@ package com.sap.sailing.gwt.ui.adminconsole;
|
||||
import com.google.gwt.user.client.ui.FocusWidget;
|
||||
import com.google.gwt.user.client.ui.SuggestBox;
|
||||
import com.google.gwt.user.client.ui.TextBox;
|
||||
import com.sap.sailing.domain.common.dto.BoatClassDTO;
|
||||
import com.sap.sailing.domain.common.dto.BoatDTO;
|
||||
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
||||
import com.sap.sailing.domain.common.dto.CompetitorWithBoatDTO;
|
||||
import com.sap.sailing.domain.common.dto.CompetitorWithBoatDTOImpl;
|
||||
import com.sap.sailing.gwt.common.client.suggestion.BoatClassMasterdataSuggestOracle;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sse.common.Color;
|
||||
import com.sap.sse.common.Distance;
|
||||
import com.sap.sse.gwt.client.ColorTextBox;
|
||||
|
||||
/**
|
||||
@@ -76,45 +79,64 @@ public abstract class AbstractCompetitorWithBoatDialog extends CompetitorEditDia
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* The class creates the UI-dialog to type in the Data about a competitor.
|
||||
*
|
||||
* @param competitorToEdit
|
||||
* The 'competitorToEdit' parameter contains the competitor which should be changed or initialized.
|
||||
* @param competitorWithBoat
|
||||
* The 'competitorWithBoat' parameter contains the competitor which should be changed or initialized.
|
||||
* @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.
|
||||
* @param The
|
||||
* {@link Validator} for competitor with boat
|
||||
*/
|
||||
public AbstractCompetitorWithBoatDialog(String dialogTitle, StringMessages stringMessages, CompetitorWithBoatDTO competitorToEdit,
|
||||
DialogCallback<CompetitorWithBoatDTO> callback, String boatClass) {
|
||||
super(dialogTitle, stringMessages, competitorToEdit,
|
||||
new AbstractCompetitorWithBoatDialog.CompetitorWithBoatValidator(stringMessages,
|
||||
competitorToEdit.getBoat()),
|
||||
callback);
|
||||
|
||||
final BoatDTO boatToEdit = competitorToEdit.getBoat();
|
||||
public AbstractCompetitorWithBoatDialog(String dialogTitle, StringMessages stringMessages,
|
||||
CompetitorWithBoatDTO competitorWithBoat, DialogCallback<CompetitorWithBoatDTO> callback, String boatClass,
|
||||
CompetitorWithoutBoatValidator<CompetitorWithBoatDTO> validator) {
|
||||
super(dialogTitle, stringMessages, competitorWithBoat, validator, callback);
|
||||
final BoatDTO boat = competitorWithBoat.getBoat();
|
||||
this.boatClassNameTextBox = createSuggestBox(new BoatClassMasterdataSuggestOracle());
|
||||
boatClassNameTextBox.ensureDebugId("BoatClassNameSuggestBox");
|
||||
if (boatToEdit.getBoatClass() != null) {
|
||||
boatClassNameTextBox.setValue(boatToEdit.getBoatClass().getName());
|
||||
boatClassNameTextBox.setEnabled(false);
|
||||
if (boat.getBoatClass() != null) {
|
||||
boatClassNameTextBox.setValue(boat.getBoatClass().getName());
|
||||
setBoatClassNameEnabled(boatClassNameTextBox, false);
|
||||
} else {
|
||||
boatClassNameTextBox.setValue(boatClass); // widgets have to accept null values here
|
||||
}
|
||||
this.boatNameTextBox = createTextBox(boatToEdit.getName());
|
||||
this.boatNameTextBox = createTextBox(boat.getName());
|
||||
boatNameTextBox.ensureDebugId("BoatNameTextBox");
|
||||
this.boatDisplayColorTextBox = createColorTextBox(boatToEdit.getColor());
|
||||
this.sailIdTextBox = createTextBox(boatToEdit.getSailId());
|
||||
this.boatDisplayColorTextBox = createColorTextBox(boat.getColor());
|
||||
this.sailIdTextBox = createTextBox(boat.getSailId());
|
||||
sailIdTextBox.ensureDebugId("SailIdTextBox");
|
||||
}
|
||||
|
||||
public AbstractCompetitorWithBoatDialog(String dialogTitle, StringMessages stringMessages,
|
||||
CompetitorWithBoatDTO competitorWithBoat, DialogCallback<CompetitorWithBoatDTO> callback,
|
||||
String boatClass) {
|
||||
this(dialogTitle, stringMessages, competitorWithBoat, callback, boatClass,
|
||||
new AbstractCompetitorWithBoatDialog.CompetitorWithBoatValidator(stringMessages,
|
||||
competitorWithBoat.getBoat()));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected FocusWidget getInitialFocusWidget() {
|
||||
return super.getInitialFocusWidget();
|
||||
}
|
||||
|
||||
protected abstract BoatDTO getBoat();
|
||||
protected BoatDTO getBoat() {
|
||||
BoatDTO result = null;
|
||||
Color boatColor;
|
||||
if (boatDisplayColorTextBox.isValid()) {
|
||||
boatColor = boatDisplayColorTextBox.getColor();
|
||||
} else {
|
||||
boatColor = new InvalidColor(new IllegalArgumentException(boatDisplayColorTextBox.getValue()),
|
||||
getStringMessages());
|
||||
}
|
||||
BoatClassDTO boatClass = new BoatClassDTO(boatClassNameTextBox.getValue(), Distance.NULL, Distance.NULL);
|
||||
result = new BoatDTO(getCompetitorToEdit().getBoat().getIdAsString(), boatNameTextBox.getValue(), boatClass,
|
||||
sailIdTextBox.getValue(), boatColor);
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CompetitorWithBoatDTO getResult() {
|
||||
@@ -129,4 +151,8 @@ public abstract class AbstractCompetitorWithBoatDialog extends CompetitorEditDia
|
||||
return result;
|
||||
}
|
||||
|
||||
protected void setBoatClassNameEnabled(SuggestBox boatClassNameTextBox, boolean enabled) {
|
||||
boatClassNameTextBox.setEnabled(enabled);
|
||||
}
|
||||
|
||||
}
|
||||
-1
@@ -102,7 +102,6 @@ public abstract class CompetitorEditDialog<CompetitorType extends CompetitorDTO>
|
||||
this.ensureDebugId("CompetitorEditDialog");
|
||||
this.stringMessages = stringMessages;
|
||||
this.competitorToEdit = competitorToEdit;
|
||||
|
||||
this.name = createTextBox(competitorToEdit.getName());
|
||||
name.ensureDebugId("NameTextBox");
|
||||
this.shortName = createTextBox(competitorToEdit.getShortName());
|
||||
|
||||
+14
-15
@@ -9,6 +9,8 @@ import com.google.gwt.user.client.ui.Button;
|
||||
import com.google.gwt.user.client.ui.SimplePanel;
|
||||
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||
import com.sap.sailing.domain.common.CompetitorDescriptor;
|
||||
import com.sap.sailing.domain.common.dto.BoatClassDTO;
|
||||
import com.sap.sailing.domain.common.dto.BoatDTO;
|
||||
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
||||
import com.sap.sailing.domain.common.dto.CompetitorWithBoatDTOImpl;
|
||||
import com.sap.sailing.gwt.ui.adminconsole.CompetitorImportProviderSelectionDialog.MatchImportedCompetitorsDialogFactory;
|
||||
@@ -32,18 +34,20 @@ public class CompetitorPanel extends SimplePanel implements BusyDisplay {
|
||||
private final CompetitorTableWrapper<RefreshableMultiSelectionModel<CompetitorDTO>> competitorTable;
|
||||
private final RefreshableMultiSelectionModel<CompetitorDTO> refreshableCompetitorSelectionModel;
|
||||
private final String leaderboardName;
|
||||
|
||||
private final String boatClassName;
|
||||
private final BusyIndicator busyIndicator;
|
||||
|
||||
public CompetitorPanel(final SailingServiceWriteAsync sailingServiceWrite, final UserService userService, final StringMessages stringMessages,
|
||||
final ErrorReporter errorReporter) {
|
||||
this(sailingServiceWrite, userService, 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,
|
||||
final StringMessages stringMessages, final ErrorReporter errorReporter) {
|
||||
String boatClassName, boolean createWithBoatByDefault, final StringMessages stringMessages, final ErrorReporter errorReporter) {
|
||||
super();
|
||||
this.leaderboardName = leaderboardName;
|
||||
this.boatClassName = boatClassName;
|
||||
this.competitorTable = new CompetitorTableWrapper<>(sailingServiceWrite, userService, stringMessages, errorReporter, /* multiSelection */ true, /* enablePager */ true,
|
||||
/* filterCompetitorWithBoat */ false, /* filterCompetitorsWithoutBoat */ false);
|
||||
this.refreshableCompetitorSelectionModel = (RefreshableMultiSelectionModel<CompetitorDTO>) competitorTable.getSelectionModel();
|
||||
@@ -53,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
|
||||
@@ -93,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(), () -> {
|
||||
@@ -103,10 +101,8 @@ public class CompetitorPanel extends SimplePanel implements BusyDisplay {
|
||||
helper.inviteCompetitors(competitors, leaderboardName);
|
||||
});
|
||||
}
|
||||
|
||||
mainPanel.add(busyIndicator);
|
||||
mainPanel.add(competitorTable);
|
||||
|
||||
if (leaderboardName != null) {
|
||||
refreshCompetitorList();
|
||||
}
|
||||
@@ -133,10 +129,13 @@ public class CompetitorPanel extends SimplePanel implements BusyDisplay {
|
||||
};
|
||||
}
|
||||
|
||||
private void openAddCompetitorDialog() {
|
||||
private void openAddCompetitorDialog(boolean createWithBoatByDefault) {
|
||||
CompetitorWithBoatDTOImpl competitorDTO = new CompetitorWithBoatDTOImpl();
|
||||
competitorDTO.setBoat(null);
|
||||
competitorTable.openEditCompetitorWithoutBoatDialog(competitorDTO);
|
||||
BoatClassDTO boatClassDTO = new BoatClassDTO(boatClassName, /* hullLength */ null, /* hullBeam */ null);
|
||||
BoatDTO boatDTO = new BoatDTO();
|
||||
boatDTO.setBoatClass(boatClassDTO);
|
||||
competitorDTO.setBoat(boatDTO);
|
||||
competitorTable.openCompetitorWithBoatAddDialog(competitorDTO, createWithBoatByDefault);
|
||||
}
|
||||
|
||||
public void refreshCompetitorList() {
|
||||
|
||||
+35
@@ -459,6 +459,26 @@ public class CompetitorTableWrapper<S extends RefreshableSelectionModel<Competit
|
||||
dialog.show();
|
||||
}
|
||||
|
||||
void openCompetitorWithBoatAddDialog(final CompetitorWithBoatDTO newCompetitor, boolean createWithBoatByDefault) {
|
||||
final CompetitorWithOptionalBoatAddDialog dialog = new CompetitorWithOptionalBoatAddDialog(getStringMessages(),
|
||||
newCompetitor, createWithBoatByDefault, new DialogCallback<CompetitorWithBoatDTO>() {
|
||||
@Override
|
||||
public void ok(final CompetitorWithBoatDTO competitor) {
|
||||
if (competitor.hasBoat()) {
|
||||
sailingServiceWrite.addOrUpdateCompetitorWithBoat(competitor, createAddCompetitorCallback());
|
||||
} else {
|
||||
sailingServiceWrite.addOrUpdateCompetitorWithoutBoat(competitor, createAddCompetitorCallback());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancel() {
|
||||
}
|
||||
});
|
||||
dialog.show();
|
||||
|
||||
}
|
||||
|
||||
void openEditCompetitorWithoutBoatDialog(final CompetitorDTO originalCompetitor) {
|
||||
final CompetitorEditDialog<CompetitorDTO> dialog = CompetitorEditDialog.create(getStringMessages(), originalCompetitor, new DialogCallback<CompetitorDTO>() {
|
||||
@Override
|
||||
@@ -534,4 +554,19 @@ public class CompetitorTableWrapper<S extends RefreshableSelectionModel<Competit
|
||||
return "";
|
||||
});
|
||||
}
|
||||
|
||||
private <T extends CompetitorDTO> AsyncCallback<T> createAddCompetitorCallback() {
|
||||
return new AsyncCallback<T>() {
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
errorReporter.reportError("Error trying to add competitor: " + caught.getMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess(T addedCompetitor) {
|
||||
getFilterField().add(addedCompetitor);
|
||||
getDataProvider().refresh();
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
+1
-19
@@ -4,12 +4,8 @@ import com.google.gwt.user.client.ui.Grid;
|
||||
import com.google.gwt.user.client.ui.Label;
|
||||
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
import com.sap.sailing.domain.common.dto.BoatClassDTO;
|
||||
import com.sap.sailing.domain.common.dto.BoatDTO;
|
||||
import com.sap.sailing.domain.common.dto.CompetitorWithBoatDTO;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sse.common.Color;
|
||||
import com.sap.sse.common.Distance;
|
||||
|
||||
/**
|
||||
* An edit for a competitor with a boat
|
||||
@@ -27,24 +23,10 @@ public class CompetitorWithBoatEditDialog extends AbstractCompetitorWithBoatDial
|
||||
*/
|
||||
public CompetitorWithBoatEditDialog(StringMessages stringMessages, CompetitorWithBoatDTO competitorToEdit,
|
||||
DialogCallback<CompetitorWithBoatDTO> callback, String boatClass) {
|
||||
super("Edit competitor with boat", stringMessages, competitorToEdit, callback, boatClass);
|
||||
super(stringMessages.editCompetitorWithBoat(), stringMessages, competitorToEdit, callback, boatClass);
|
||||
this.ensureDebugId("CompetitorWithBoatEditDialog");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected BoatDTO getBoat() {
|
||||
BoatDTO result = null;
|
||||
Color boatColor;
|
||||
if (boatDisplayColorTextBox.isValid()) {
|
||||
boatColor = boatDisplayColorTextBox.getColor();
|
||||
} else {
|
||||
boatColor = new InvalidColor(new IllegalArgumentException(boatDisplayColorTextBox.getValue()), getStringMessages());
|
||||
}
|
||||
BoatClassDTO boatClass = new BoatClassDTO(boatClassNameTextBox.getValue(), Distance.NULL, Distance.NULL);
|
||||
result = new BoatDTO(getCompetitorToEdit().getBoat().getIdAsString(), boatNameTextBox.getValue(), boatClass, sailIdTextBox.getValue(), boatColor);
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Widget getAdditionalWidget() {
|
||||
VerticalPanel result = new VerticalPanel();
|
||||
|
||||
+134
@@ -0,0 +1,134 @@
|
||||
package com.sap.sailing.gwt.ui.adminconsole;
|
||||
|
||||
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.Label;
|
||||
import com.google.gwt.user.client.ui.SuggestBox;
|
||||
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
import com.sap.sailing.domain.common.dto.BoatDTO;
|
||||
import com.sap.sailing.domain.common.dto.CompetitorWithBoatDTO;
|
||||
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. 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 final CheckBox withBoatCheckBox;
|
||||
private final VerticalPanel boatDataPanel;
|
||||
|
||||
/**
|
||||
* The class creates the UI-dialog to type in the Data about a competitor.
|
||||
*
|
||||
* @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,
|
||||
boolean createWithBoatByDefault, DialogCallback<CompetitorWithBoatDTO> callback) {
|
||||
this(stringMessages, competitorToAdd, new CheckBox(stringMessages.withBoat()), createWithBoatByDefault, callback);
|
||||
}
|
||||
|
||||
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.ensureDebugId("WithBoatCheckBox");
|
||||
this.withBoatCheckBox.addClickHandler(new ClickHandler() {
|
||||
@Override
|
||||
public void onClick(ClickEvent event) {
|
||||
boatDataPanel.setVisible(withBoatCheckBox.getValue());
|
||||
validateAndUpdate();
|
||||
}
|
||||
});
|
||||
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(withBoatCheckBox);
|
||||
boatDataPanel.add(createHeadlineLabel(getStringMessages().boat()));
|
||||
Grid grid = new Grid(5, 2);
|
||||
grid.setWidget(0, 0, new Label(getStringMessages().name()));
|
||||
grid.setWidget(0, 1, boatNameTextBox);
|
||||
grid.setWidget(1, 0, new Label(getStringMessages().sailNumber()));
|
||||
grid.setWidget(1, 1, sailIdTextBox);
|
||||
grid.setWidget(2, 0, new Label(getStringMessages().boatClass()));
|
||||
grid.setWidget(2, 1, boatClassNameTextBox);
|
||||
grid.setWidget(3, 0, new Label(getStringMessages().color()));
|
||||
grid.setWidget(3, 1, boatDisplayColorTextBox);
|
||||
boatDataPanel.add(grid);
|
||||
result.add(boatDataPanel);
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CompetitorWithBoatDTO getResult() {
|
||||
CompetitorWithBoatDTO competitorWithOptionalBoat = super.getResult();
|
||||
if (!withBoatCheckBox.getValue()) {
|
||||
competitorWithOptionalBoat.setBoat(null);
|
||||
}
|
||||
return competitorWithOptionalBoat;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void setBoatClassNameEnabled(SuggestBox boatClassNameTextBox, boolean enabled) {
|
||||
super.setBoatClassNameEnabled(boatClassNameTextBox, true);
|
||||
}
|
||||
|
||||
protected static class CompetitorWithOptionalBoatValidator
|
||||
extends CompetitorWithoutBoatValidator<CompetitorWithBoatDTO> {
|
||||
private final StringMessages stringMessages;
|
||||
private final CheckBox withBoatCheckBox;
|
||||
|
||||
public CompetitorWithOptionalBoatValidator(CheckBox withBoatCheckBox, StringMessages stringMessages) {
|
||||
super(stringMessages);
|
||||
this.withBoatCheckBox = withBoatCheckBox;
|
||||
this.stringMessages = stringMessages;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getErrorMessage(CompetitorWithBoatDTO competitorToValidate) {
|
||||
String result = super.getErrorMessage(competitorToValidate);
|
||||
if (withBoatCheckBox.getValue()) {
|
||||
if (result == null) {
|
||||
BoatDTO boatToValidate = competitorToValidate.getBoat();
|
||||
boolean invalidSailId = boatToValidate.getSailId() == null || boatToValidate.getSailId().isEmpty();
|
||||
boolean invalidName = boatToValidate.getName() == null || boatToValidate.getName().isEmpty();
|
||||
if (invalidSailId && invalidName) {
|
||||
result = stringMessages.pleaseEnterASailNumberOrABoatName();
|
||||
} else if (boatToValidate.getColor() != null && boatToValidate.getColor() instanceof InvalidColor) {
|
||||
result = boatToValidate.getColor().getAsHtml();
|
||||
} else if (isBoatClassInvalid(boatToValidate)) {
|
||||
result = stringMessages.pleaseEnterABoatClass();
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private boolean isBoatClassInvalid(BoatDTO boatToValidate) {
|
||||
return boatToValidate.getBoatClass().getName() == null || boatToValidate.getBoatClass().getName().isEmpty();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Regular → Executable
+12
-5
@@ -16,6 +16,8 @@ public class EditCompetitorsDialog extends DataEntryDialog<List<CompetitorWithBo
|
||||
private final StringMessages stringMessages;
|
||||
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() {
|
||||
@@ -28,14 +30,18 @@ public class EditCompetitorsDialog extends DataEntryDialog<List<CompetitorWithBo
|
||||
}
|
||||
}
|
||||
|
||||
public EditCompetitorsDialog(final SailingServiceWriteAsync sailingServiceWrite, final UserService userService, String leaderboardName, final StringMessages stringMessages,
|
||||
final ErrorReporter errorReporter, DialogCallback<List<CompetitorWithBoatDTO>> callback) {
|
||||
super(stringMessages.actionEditCompetitors(), null, stringMessages.ok(), stringMessages.cancel(), new CompetitorsValidator(), callback);
|
||||
public EditCompetitorsDialog(final SailingServiceWriteAsync sailingServiceWrite, final UserService userService,
|
||||
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;
|
||||
this.userService = userService;
|
||||
this.stringMessages = stringMessages;
|
||||
this.errorReporter = errorReporter;
|
||||
this.leaderboardName = leaderboardName;
|
||||
this.boatClassName = boatClassName;
|
||||
this.createWithBoatByDefault = createWithBoatByDefault;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -45,7 +51,8 @@ public class EditCompetitorsDialog extends DataEntryDialog<List<CompetitorWithBo
|
||||
|
||||
@Override
|
||||
protected Widget getAdditionalWidget() {
|
||||
CompetitorPanel competitorPanel = new CompetitorPanel(sailingServiceWrite, userService, leaderboardName, stringMessages, errorReporter);
|
||||
return competitorPanel;
|
||||
CompetitorPanel competitorPanel = new CompetitorPanel(sailingServiceWrite, userService, leaderboardName,
|
||||
boatClassName, createWithBoatByDefault, stringMessages, errorReporter);
|
||||
return competitorPanel;
|
||||
}
|
||||
}
|
||||
Regular → Executable
+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(), stringMessages, errorReporter,
|
||||
new DialogCallback<List<CompetitorWithBoatDTO>>() {
|
||||
leaderboardDTO.getName(), leaderboardDTO.boatClassName,
|
||||
/* createWithBoatByDefault */ !leaderboardDTO.canBoatsOfCompetitorsChangePerRace,
|
||||
stringMessages, errorReporter, new DialogCallback<List<CompetitorWithBoatDTO>>() {
|
||||
@Override
|
||||
public void cancel() {
|
||||
}
|
||||
|
||||
+3
@@ -976,6 +976,9 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
|
||||
String editCompetitor();
|
||||
String pleaseEnterASailNumber();
|
||||
String pleaseEnterASailNumberOrABoatName();
|
||||
String addCompetitor();
|
||||
String editCompetitorWithBoat();
|
||||
String withBoat();
|
||||
String successfullyAllowedCompetitorReset(String names);
|
||||
String successfullyAllowedBoatReset(String names);
|
||||
String allowReload();
|
||||
|
||||
+3
@@ -966,6 +966,9 @@ filterBoats=Filter boats by name, boat class, sail number or ID
|
||||
editCompetitor=Edit Competitor
|
||||
pleaseEnterASailNumber=Please enter a sail number
|
||||
pleaseEnterASailNumberOrABoatName=Please enter a sail number or a boat name
|
||||
addCompetitor=Add Competitor
|
||||
editCompetitorWithBoat=Edit competitor with boat
|
||||
withBoat=With Boat
|
||||
successfullyAllowedCompetitorReset=Successfully allowed reload of competitor(s) {0}.
|
||||
successfullyAllowedBoatReset=Successfully allowed reload of boats(s) {0}.
|
||||
id=ID
|
||||
|
||||
+3
@@ -950,6 +950,9 @@ filterBoats=Filtere Boote nach Name, Bootsklasse, Segelnummer oder ID
|
||||
editCompetitor=Teilnehmer bearbeiten
|
||||
pleaseEnterASailNumber=Bitte die Segelnummer eingeben
|
||||
pleaseEnterASailNumberOrABoatName=Bitte die Segelnummer oder den Bootsnamen eingeben
|
||||
addCompetitor=Teilnehmer hinzufügen
|
||||
editCompetitorWithBoat=Teilnehmer mit Boot bearbeiten
|
||||
withBoat=Mit Boot
|
||||
successfullyAllowedCompetitorReset=Aktualisierung der Daten zu Teilnehmer(n) {0} erfolgreich ermöglicht.id=ID
|
||||
successfullyAllowedBoatReset=Aktualisierung der Daten zu Boot(en) {0} erfolgreich ermöglicht.id=ID
|
||||
allowReload=Aktualisierung ermöglichen
|
||||
|
||||
@@ -210,7 +210,6 @@ public class PageObject {
|
||||
public PageObject(WebDriver driver, SearchContext context) {
|
||||
this.driver = driver;
|
||||
this.context = context;
|
||||
|
||||
verify();
|
||||
initElements();
|
||||
}
|
||||
|
||||
+17
@@ -1,11 +1,14 @@
|
||||
package com.sap.sailing.selenium.pages.adminconsole.tracking;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.openqa.selenium.WebDriver;
|
||||
import org.openqa.selenium.WebElement;
|
||||
|
||||
import com.sap.sailing.selenium.core.BySeleniumId;
|
||||
import com.sap.sailing.selenium.core.FindBy;
|
||||
import com.sap.sailing.selenium.pages.common.DataEntryDialogPO;
|
||||
import com.sap.sailing.selenium.pages.gwt.CheckBoxPO;
|
||||
|
||||
public class TrackedRacesCompetitorEditDialogPO extends DataEntryDialogPO {
|
||||
@FindBy(how = BySeleniumId.class, using = "NameTextBox")
|
||||
@@ -17,8 +20,16 @@ public class TrackedRacesCompetitorEditDialogPO extends DataEntryDialogPO {
|
||||
@FindBy(how = BySeleniumId.class, using = "OkButton")
|
||||
private WebElement okButton;
|
||||
|
||||
private final CheckBoxPO withBoatCheckBox;
|
||||
|
||||
public TrackedRacesCompetitorEditDialogPO(WebDriver driver, WebElement element) {
|
||||
super(driver, element);
|
||||
final List<WebElement> withBoatCheckBoxElement = driver.findElements(new BySeleniumId("WithBoatCheckBox"));
|
||||
if (withBoatCheckBoxElement.isEmpty()) {
|
||||
withBoatCheckBox = null;
|
||||
} else {
|
||||
withBoatCheckBox = CheckBoxPO.create(driver, withBoatCheckBoxElement.get(0));
|
||||
}
|
||||
}
|
||||
|
||||
public void setNameTextBox(String name) {
|
||||
@@ -30,4 +41,10 @@ public class TrackedRacesCompetitorEditDialogPO extends DataEntryDialogPO {
|
||||
this.shortNameTextBox.clear();
|
||||
this.shortNameTextBox.sendKeys(name);
|
||||
}
|
||||
|
||||
public void setWithBoat(boolean withBoat) {
|
||||
if (withBoatCheckBox != null) {
|
||||
this.withBoatCheckBox.setSelected(withBoat);
|
||||
}
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -27,7 +27,7 @@ public class TrackedRacesCompetitorsPanelPO extends PageArea {
|
||||
public TrackedRacesCompetitorEditDialogPO pushAddCompetitorButton() {
|
||||
this.addCompetitorButton.click();
|
||||
waitForAjaxRequests();
|
||||
WebElement dialog = findElementBySeleniumId(this.driver, "CompetitorEditDialog");
|
||||
WebElement dialog = findElementBySeleniumId(this.driver, "CompetitorWithBoatAddDialog");
|
||||
return new TrackedRacesCompetitorEditDialogPO(this.driver, dialog);
|
||||
}
|
||||
|
||||
|
||||
+1
@@ -42,6 +42,7 @@ public class TestCompetitorCreation extends AbstractSeleniumTest {
|
||||
final String shortName = "NRV";
|
||||
dialog.setNameTextBox(name);
|
||||
dialog.setShortNameTextBox(shortName);
|
||||
dialog.setWithBoat(false);
|
||||
dialog.pressOk();
|
||||
boolean found = false;
|
||||
for (final CompetitorEntry it : competitorsPanel.getCompetitorTable().getEntries()) {
|
||||
|
||||
+2
-8
@@ -76,21 +76,20 @@ public class TestRefreshableSelectionModel extends AbstractSeleniumTest {
|
||||
setUpAuthenticatedSession(windowForEditDriver);
|
||||
final TrackedRacesCompetitorsPanelPO competitorsPanel = goToCompetitorsPanel(
|
||||
windowForEditDriver);
|
||||
|
||||
for (int i = 0; i < 2; i++) {
|
||||
TrackedRacesCompetitorEditDialogPO dialog = competitorsPanel.pushAddCompetitorButton();
|
||||
dialog.setNameTextBox("" + System.currentTimeMillis());
|
||||
dialog.setShortNameTextBox("" + System.currentTimeMillis());
|
||||
dialog.setWithBoat(false);
|
||||
dialog.pressOk();
|
||||
}
|
||||
|
||||
TrackedRacesCompetitorEditDialogPO dialog = competitorsPanel.pushAddCompetitorButton();
|
||||
final String name = "" + System.currentTimeMillis();
|
||||
dialog.setNameTextBox(name);
|
||||
final String shortName = "" + System.currentTimeMillis();
|
||||
dialog.setShortNameTextBox(shortName);
|
||||
dialog.setWithBoat(false);
|
||||
dialog.pressOk();
|
||||
|
||||
boolean found = false;
|
||||
for (final CompetitorEntry it : competitorsPanel.getCompetitorTable().getEntries()) {
|
||||
String itName = it.getName();
|
||||
@@ -101,7 +100,6 @@ public class TestRefreshableSelectionModel extends AbstractSeleniumTest {
|
||||
}
|
||||
}
|
||||
assertTrue(found);
|
||||
|
||||
TrackedRacesCompetitorsPanelPO competitorPanelForSelection = goToCompetitorsPanel(
|
||||
windowForSelection.switchToWindow());
|
||||
found = false;
|
||||
@@ -115,7 +113,6 @@ public class TestRefreshableSelectionModel extends AbstractSeleniumTest {
|
||||
}
|
||||
assertTrue(found);
|
||||
competitorPanelForSelection.getCompetitorTable().selectEntry(competitorEntryToSelect);
|
||||
|
||||
assertEquals(1, competitorPanelForSelection.getCompetitorTable().getSelectedEntries().size());
|
||||
assertEquals(name, competitorPanelForSelection.getCompetitorTable().getSelectedEntries().get(0).getName());
|
||||
assertEquals(shortName, competitorPanelForSelection.getCompetitorTable().getSelectedEntries().get(0).getShortName());
|
||||
@@ -127,10 +124,8 @@ public class TestRefreshableSelectionModel extends AbstractSeleniumTest {
|
||||
final String changedShortName = "" + System.currentTimeMillis();
|
||||
dialog.setShortNameTextBox(changedShortName);
|
||||
dialog.pressOk();
|
||||
|
||||
// assert selection
|
||||
windowForSelection.switchToWindow();
|
||||
|
||||
competitorPanelForSelection.pushRefreshButton();
|
||||
WebDriverWait waitTimer = new WebDriverWait(competitorPanelForSelection.driver, 10);
|
||||
ExpectedCondition<Boolean> condition = new ExpectedCondition<Boolean>() {
|
||||
@@ -140,7 +135,6 @@ public class TestRefreshableSelectionModel extends AbstractSeleniumTest {
|
||||
}
|
||||
};
|
||||
waitTimer.until(condition);
|
||||
|
||||
assertEquals(1, competitorPanelForSelection.getCompetitorTable().getSelectedEntries().size());
|
||||
for (final CompetitorEntry it : competitorPanelForSelection.getCompetitorTable().getEntries()) {
|
||||
String itName = it.getName();
|
||||
|
||||
Reference in new issue
Block a user