Merge branch 'bug5275'

This commit is contained in:
dmitry committed 2020-05-15 17:52:16 +03:00
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();
@@ -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);
}
}
@@ -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());
@@ -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() {
@@ -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();
}
};
}
}
@@ -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();
@@ -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();
}
}
}
@@ -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;
}
}
@@ -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() {
}
@@ -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();
@@ -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
@@ -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();
}
@@ -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);
}
}
}
@@ -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);
}
@@ -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()) {
@@ -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();