New page objects and corresponding debug-ids added as well as some

refactoring of old ones for better maintainability.
This commit is contained in:
D049941 committed 2013-12-23 12:50:51 +01:00
1 parent 218a7b28d7
commit 818de01c3f
53 files changed
+2201 -397

No files matched your search

@@ -23,11 +23,14 @@ public abstract class AbstractEventManagementPanel extends AbstractRegattaPanel
ErrorReporter errorReporter, RaceSelectionProvider raceSelectionProvider, StringMessages stringMessages) {
super(sailingService, regattaRefresher, errorReporter, stringMessages);
this.availableRegattas = new ArrayList<RegattaDTO>();
this.availableRegattasListBox = new ListBox();
this.availableRegattasListBox.ensureDebugId("AvailableRegattas");
this.availableRegattasListBox.ensureDebugId("AvailableRegattasListBox");
// TrackedEventsComposite should exist in every *ManagementPanel.
trackedRacesListComposite = new TrackedRacesListComposite(sailingService, errorReporter, regattaRefresher,
raceSelectionProvider, stringMessages, /* multiselection */ true);
trackedRacesListComposite.ensureDebugId("TrackedRacesListComposite");
}
@Override
@@ -126,7 +126,7 @@ public abstract class AbstractTrackedRacesListComposite extends SimplePanel impl
AdminConsoleTableResources tableRes = GWT.create(AdminConsoleTableResources.class);
raceTable = new CellTable<RaceDTO>(/* pageSize */10000, tableRes);
raceTable.ensureDebugId("TrackedRaces");
raceTable.ensureDebugId("TrackedRacesCellTable");
ListHandler<RaceDTO> columnSortHandler = setupTableColumns(stringMessages);
raceTable.setWidth("300px");
raceTable.setSelectionModel(selectionModel);
@@ -163,13 +163,14 @@ public abstract class AbstractTrackedRacesListComposite extends SimplePanel impl
return strings;
}
};
filterablePanelRaces.getTextBox().ensureDebugId("TrackedRacesFilterTextBox");
filterPanel.add(filterablePanelRaces);
HorizontalPanel trackedRacesButtonPanel = new HorizontalPanel();
trackedRacesButtonPanel.setSpacing(10);
panel.add(trackedRacesButtonPanel);
btnRefresh = new Button(stringMessages.refresh());
btnRefresh.ensureDebugId("Refresh");
btnRefresh.ensureDebugId("RefreshButton");
btnRefresh.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
@@ -62,7 +62,7 @@ public class AdminConsoleEntryPoint extends AbstractEntryPoint implements Regatt
RegattaStructureManagementPanel eventStructureManagementPanel = new RegattaStructureManagementPanel(
sailingService, this, stringMessages, this);
// eventStructureManagementPanel.ensureDebugId("RegattaStructureManagement");
eventStructureManagementPanel.ensureDebugId("RegattaStructureManagement");
eventStructureManagementPanel.setSize("90%", "90%");
addScrollableTab(tabPanel, eventStructureManagementPanel, stringMessages.regattas());
regattaDisplayers.add(eventStructureManagementPanel);
@@ -100,7 +100,7 @@ public class AdminConsoleEntryPoint extends AbstractEntryPoint implements Regatt
TrackedRacesManagementPanel trackedRacesManagementPanel = new TrackedRacesManagementPanel(sailingService, this,
this, stringMessages);
// trackedRacesManagementPanel.ensureDebugId("TrackedRacesManagement");
trackedRacesManagementPanel.ensureDebugId("TrackedRacesManagement");
trackedRacesManagementPanel.setSize("90%", "90%");
addScrollableTab(tabPanel, trackedRacesManagementPanel, stringMessages.trackedRaces());
regattaDisplayers.add(trackedRacesManagementPanel);
@@ -127,7 +127,7 @@ public class AdminConsoleEntryPoint extends AbstractEntryPoint implements Regatt
final LeaderboardGroupConfigPanel leaderboardGroupConfigPanel = new LeaderboardGroupConfigPanel(sailingService,
this, this, stringMessages);
// leaderboardGroupConfigPanel.ensureDebugId("LeaderboardGroupConfiguration");
leaderboardGroupConfigPanel.ensureDebugId("LeaderboardGroupConfiguration");
leaderboardGroupConfigPanel.setSize("90%", "90%");
addScrollableTab(tabPanel, leaderboardGroupConfigPanel, stringMessages.leaderboardGroupConfiguration());
regattaDisplayers.add(leaderboardGroupConfigPanel);
@@ -46,9 +46,16 @@ public class FleetListEditorComposite extends ListEditorComposite<FleetDTO> {
panel.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE);
final TextBox nameBox = createNameBox();
nameBox.ensureDebugId("NameTextBox");
final IntegerBox orderNoBox = createOrderNoBox();
orderNoBox.ensureDebugId("OrderNoIntegerBox");
final ListBox colorListBox = createColorListBox(nameBox, orderNoBox);
colorListBox.ensureDebugId("ColorListBox");
final Button addButton = new Button(stringMessages.add());
addButton.ensureDebugId("AddButton");
addButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
@@ -14,9 +14,11 @@ public class FlexibleLeaderboardCreateDialog extends FlexibleLeaderboardDialog {
super(stringMessages.createFlexibleLeaderboard(), new LeaderboardDescriptor(), stringMessages, existingEvents,
errorReporter, new FlexibleLeaderboardDialog.LeaderboardParameterValidator(stringMessages, existingLeaderboards), callback);
nameTextBox = createTextBox(null);
nameTextBox.ensureDebugId("LeaderboardNameField");
displayNameTextBox = createTextBox(null);
nameTextBox.ensureDebugId("NameTextBox");
nameTextBox.setVisibleLength(50);
displayNameTextBox = createTextBox(null);
displayNameTextBox.ensureDebugId("DisplayNameTextBox");
displayNameTextBox.setVisibleLength(50);
scoringSchemeListBox = createScoringSchemeListBox(this, stringMessages);
@@ -197,6 +197,7 @@ public class LeaderboardConfigPanel extends FormPanel implements SelectedLeaderb
AdminConsoleTableResources tableRes = GWT.create(AdminConsoleTableResources.class);
leaderboardTable = new CellTable<StrippedLeaderboardDTO>(/* pageSize */10000, tableRes);
leaderboardTable.ensureDebugId("LeaderboardsCellTable");
filterLeaderboardPanel = new AbstractFilterablePanel<StrippedLeaderboardDTO>(lblFilterEvents, availableLeaderboardList, leaderboardTable, leaderboardList) {
@Override
public List<String> getSearchableStrings(StrippedLeaderboardDTO t) {
@@ -206,7 +207,10 @@ public class LeaderboardConfigPanel extends FormPanel implements SelectedLeaderb
return strings;
}
};
filterLeaderboardPanel.getTextBox().ensureDebugId("LeaderboardsFilterTextBox");
leaderboardRemoveButton = new Button(stringMessages.remove());
leaderboardRemoveButton.ensureDebugId("LeaderboardsRemoveButton");
leaderboardRemoveButton.setEnabled(false);
leaderboardRemoveButton.addClickHandler(new ClickHandler() {
@Override
@@ -219,7 +223,6 @@ public class LeaderboardConfigPanel extends FormPanel implements SelectedLeaderb
leaderboardConfigControlsPanel.add(filterLeaderboardPanel);
leaderboardConfigControlsPanel.add(leaderboardRemoveButton);
leaderboardsPanel.add(leaderboardConfigControlsPanel);
leaderboardTable.ensureDebugId("AvailableLeaderboardsTable");
ListHandler<StrippedLeaderboardDTO> leaderboardColumnListHandler = new ListHandler<StrippedLeaderboardDTO>(
leaderboardList.getList());
@@ -384,6 +387,7 @@ public class LeaderboardConfigPanel extends FormPanel implements SelectedLeaderb
});
leaderboardList.addDataDisplay(leaderboardTable);
leaderboardsPanel.add(leaderboardTable);
HorizontalPanel leaderboardButtonPanel = new HorizontalPanel();
leaderboardButtonPanel.setSpacing(5);
leaderboardsPanel.add(leaderboardButtonPanel);
@@ -411,6 +415,7 @@ public class LeaderboardConfigPanel extends FormPanel implements SelectedLeaderb
// caption panels for the selected leaderboard and tracked races
HorizontalPanel splitPanel = new HorizontalPanel();
splitPanel.ensureDebugId("LeaderboardDetailsPanel");
mainPanel.add(splitPanel);
selectedLeaderBoardPanel = new CaptionPanel(stringMessages.leaderboard());
@@ -433,11 +438,13 @@ public class LeaderboardConfigPanel extends FormPanel implements SelectedLeaderb
raceSelectionProvider = new RaceSelectionModel();
trackedRacesListComposite = new TrackedRacesListComposite(sailingService, errorReporter, adminConsole,
raceSelectionProvider, stringMessages, /* multiselection */false);
trackedRacesListComposite.ensureDebugId("TrackedRacesListComposite");
trackedRacesPanel.add(trackedRacesListComposite);
trackedRacesListComposite.addTrackedRaceChangeListener(this);
raceSelectionProvider.addRaceSelectionChangeListener(this);
Button reloadAllRaceLogs = new Button(stringMessages.reloadAllRaceLogs());
reloadAllRaceLogs.ensureDebugId("ReloadAllRaceLogsButton");
reloadAllRaceLogs.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
@@ -537,6 +544,7 @@ public class LeaderboardConfigPanel extends FormPanel implements SelectedLeaderb
Label lblRaceNamesIn = new Label(stringMessages.races());
vPanel.add(lblRaceNamesIn);
raceColumnTable = new CellTable<RaceColumnDTOAndFleetDTOWithNameBasedEquality>(/* pageSize */200, tableRes);
raceColumnTable.ensureDebugId("RacesCellTable");
raceColumnTable.addColumn(raceLinkColumn, stringMessages.name());
raceColumnTable.addColumn(fleetNameColumn, stringMessages.fleet());
raceColumnTable.addColumn(isMedalRaceCheckboxColumn, stringMessages.medalRace());
@@ -559,7 +567,7 @@ public class LeaderboardConfigPanel extends FormPanel implements SelectedLeaderb
vPanel.add(selectedLeaderboardRaceButtonPanel);
addRaceColumnsButton = new Button(stringMessages.actionAddRaces() + "...");
selectedLeaderboardRaceButtonPanel.add(addRaceColumnsButton);
addRaceColumnsButton.ensureDebugId("AddRacesButton");
addRaceColumnsButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
@@ -570,23 +578,27 @@ public class LeaderboardConfigPanel extends FormPanel implements SelectedLeaderb
}
}
});
selectedLeaderboardRaceButtonPanel.add(addRaceColumnsButton);
columnMoveUpButton = new Button(stringMessages.columnMoveUp());
selectedLeaderboardRaceButtonPanel.add(columnMoveUpButton);
columnMoveUpButton.ensureDebugId("MoveRaceUpButton");
columnMoveUpButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
moveSelectedRaceColumnUp();
}
});
selectedLeaderboardRaceButtonPanel.add(columnMoveUpButton);
columnMoveDownButton = new Button(stringMessages.columnMoveDown());
selectedLeaderboardRaceButtonPanel.add(columnMoveDownButton);
columnMoveDownButton.ensureDebugId("MoveRaceDownButton");
columnMoveDownButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
moveSelectedRaceColumnDown();
}
});
selectedLeaderboardRaceButtonPanel.add(columnMoveDownButton);
loadLeaderboards();
}
@@ -637,9 +649,9 @@ public class LeaderboardConfigPanel extends FormPanel implements SelectedLeaderb
}
public void loadLeaderboards() {
sailingService.getLeaderboards(new AsyncCallback<List<StrippedLeaderboardDTO>>() {
sailingService.getLeaderboards(new MarkedAsyncCallback<List<StrippedLeaderboardDTO>>() {
@Override
public void onSuccess(List<StrippedLeaderboardDTO> leaderboards) {
public void handleSuccess(List<StrippedLeaderboardDTO> leaderboards) {
leaderboardList.getList().clear();
availableLeaderboardList.clear();
leaderboardList.getList().addAll(leaderboards);
@@ -650,7 +662,7 @@ public class LeaderboardConfigPanel extends FormPanel implements SelectedLeaderb
}
@Override
public void onFailure(Throwable t) {
public void handleFailure(Throwable t) {
LeaderboardConfigPanel.this.errorReporter.reportError("Error trying to obtain list of leaderboards: "
+ t.getMessage());
}
@@ -663,9 +675,9 @@ public class LeaderboardConfigPanel extends FormPanel implements SelectedLeaderb
* after the refresh has successfully completed. See {@link #selectRaceColumn(String)}.
*/
public void loadAndRefreshLeaderboard(final String leaderboardName, final String nameOfRaceColumnToSelect) {
sailingService.getLeaderboard(leaderboardName, new AsyncCallback<StrippedLeaderboardDTO>() {
sailingService.getLeaderboard(leaderboardName, new MarkedAsyncCallback<StrippedLeaderboardDTO>() {
@Override
public void onSuccess(StrippedLeaderboardDTO leaderboard) {
public void handleSuccess(StrippedLeaderboardDTO leaderboard) {
for (StrippedLeaderboardDTO leaderboardDTO : leaderboardSelectionModel.getSelectedSet()) {
if (leaderboardDTO.name.equals(leaderboardName)) {
leaderboardSelectionModel.setSelected(leaderboardDTO, false);
@@ -683,7 +695,7 @@ public class LeaderboardConfigPanel extends FormPanel implements SelectedLeaderb
}
@Override
public void onFailure(Throwable t) {
public void handleFailure(Throwable t) {
LeaderboardConfigPanel.this.errorReporter.reportError("Error trying to update leaderboard with name " + leaderboardName + " : "
+ t.getMessage());
}
@@ -706,15 +718,15 @@ public class LeaderboardConfigPanel extends FormPanel implements SelectedLeaderb
private void unlinkRaceColumnFromTrackedRace(final String raceColumnName, final FleetDTO fleet) {
final String selectedLeaderboardName = getSelectedLeaderboardName();
sailingService.disconnectLeaderboardColumnFromTrackedRace(selectedLeaderboardName, raceColumnName, fleet.getName(),
new AsyncCallback<Void>() {
new MarkedAsyncCallback<Void>() {
@Override
public void onFailure(Throwable t) {
public void handleFailure(Throwable t) {
errorReporter.reportError("Error trying to unlink tracked race from column " + raceColumnName
+ " from leaderboard " + selectedLeaderboardName + ": " + t.getMessage());
}
@Override
public void onSuccess(Void arg0) {
public void handleSuccess(Void arg0) {
trackedRacesListComposite.clearSelection();
getSelectedRaceColumnWithFleet().getA().setRaceIdentifier(fleet, null);
raceColumnAndFleetList.refresh();
@@ -749,15 +761,15 @@ public class LeaderboardConfigPanel extends FormPanel implements SelectedLeaderb
private void refreshRaceLog(final RaceColumnDTO raceColumnDTO, final FleetDTO fleet, final boolean showAlerts) {
final String selectedLeaderboardName = getSelectedLeaderboardName();
sailingService.reloadRaceLog(selectedLeaderboardName, raceColumnDTO, fleet, new AsyncCallback<Void>() {
sailingService.reloadRaceLog(selectedLeaderboardName, raceColumnDTO, fleet, new MarkedAsyncCallback<Void>() {
@Override
public void onFailure(Throwable caught) {
public void handleFailure(Throwable caught) {
if (showAlerts) {
errorReporter.reportError(caught.getMessage());
}
}
@Override
public void onSuccess(Void result) {
public void handleSuccess(Void result) {
if (showAlerts) {
Window.alert(stringMessages.raceLogReloaded());
}
@@ -769,15 +781,15 @@ public class LeaderboardConfigPanel extends FormPanel implements SelectedLeaderb
final String selectedLeaderboardName = getSelectedLeaderboardName();
final String raceColumnString = raceColumnDTO.getRaceColumnName();
sailingService.removeLeaderboardColumn(getSelectedLeaderboardName(), raceColumnString,
new AsyncCallback<Void>() {
new MarkedAsyncCallback<Void>() {
@Override
public void onFailure(Throwable t) {
public void handleFailure(Throwable t) {
errorReporter.reportError("Error trying to remove leaderboard race column " + raceColumnDTO
+ " in leaderboard " + getSelectedLeaderboardName() + ": " + t.getMessage());
}
@Override
public void onSuccess(Void arg0) {
public void handleSuccess(Void arg0) {
loadAndRefreshLeaderboard(selectedLeaderboardName, /* raceColumnNameToSelect */ null);
}
});
@@ -791,16 +803,16 @@ public class LeaderboardConfigPanel extends FormPanel implements SelectedLeaderb
final String selectedLeaderboardName = getSelectedLeaderboardName();
final String selectedRaceColumnName = raceColumnTableSelectionModel.getSelectedObject().getA().getRaceColumnName();
sailingService.moveLeaderboardColumnDown(getSelectedLeaderboardName(), selectedRaceColumnName,
new AsyncCallback<Void>() {
new MarkedAsyncCallback<Void>() {
@Override
public void onFailure(Throwable caught) {
public void handleFailure(Throwable caught) {
errorReporter.reportError("Error trying to move leaderboard race column "
+ selectedRaceColumnName + " in leaderboard " + getSelectedLeaderboardName()
+ " down: " + caught.getMessage());
}
@Override
public void onSuccess(Void result) {
public void handleSuccess(Void result) {
loadAndRefreshLeaderboard(selectedLeaderboardName, selectedRaceColumnName);
}
});
@@ -814,16 +826,16 @@ public class LeaderboardConfigPanel extends FormPanel implements SelectedLeaderb
final String selectedLeaderboardName = getSelectedLeaderboardName();
final String selectedRaceColumnName = raceColumnTableSelectionModel.getSelectedObject().getA().getRaceColumnName();
sailingService.moveLeaderboardColumnUp(getSelectedLeaderboardName(), selectedRaceColumnName,
new AsyncCallback<Void>() {
new MarkedAsyncCallback<Void>() {
@Override
public void onFailure(Throwable caught) {
public void handleFailure(Throwable caught) {
errorReporter.reportError("Error trying to move leaderboard race column "
+ selectedRaceColumnName + " in leaderboard " + getSelectedLeaderboardName() + " up: "
+ caught.getMessage());
}
@Override
public void onSuccess(Void result) {
public void handleSuccess(Void result) {
loadAndRefreshLeaderboard(selectedLeaderboardName, selectedRaceColumnName);
}
});
@@ -859,16 +871,16 @@ public class LeaderboardConfigPanel extends FormPanel implements SelectedLeaderb
final String selectedRaceColumnName = selectedRaceColumnAndFleetNameInLeaderboard.getA().getRaceColumnName();
final String selectedFleetName = selectedRaceColumnAndFleetNameInLeaderboard.getB().getName();
sailingService.getRegattaAndRaceNameOfTrackedRaceConnectedToLeaderboardColumn(selectedLeaderboardName,
selectedRaceColumnName, new AsyncCallback<Map<String, RegattaAndRaceIdentifier>>() {
selectedRaceColumnName, new MarkedAsyncCallback<Map<String, RegattaAndRaceIdentifier>>() {
@Override
public void onFailure(Throwable t) {
public void handleFailure(Throwable t) {
errorReporter.reportError("Error trying to determine tracked race linked to race column "
+ selectedRaceColumnName + " in leaderboard " + selectedLeaderboardName + ": "
+ t.getMessage());
}
@Override
public void onSuccess(Map<String, RegattaAndRaceIdentifier> regattaAndRaceNamesPerFleet) {
public void handleSuccess(Map<String, RegattaAndRaceIdentifier> regattaAndRaceNamesPerFleet) {
if (regattaAndRaceNamesPerFleet != null && !regattaAndRaceNamesPerFleet.isEmpty()) {
RegattaAndRaceIdentifier raceIdentifier = regattaAndRaceNamesPerFleet
.get(selectedFleetName);
@@ -962,14 +974,14 @@ public class LeaderboardConfigPanel extends FormPanel implements SelectedLeaderb
private void setIsMedalRace(String leaderboardName, final RaceColumnDTO raceInLeaderboard,
final boolean isMedalRace) {
sailingService.updateIsMedalRace(leaderboardName, raceInLeaderboard.getRaceColumnName(), isMedalRace,
new AsyncCallback<Void>() {
new MarkedAsyncCallback<Void>() {
@Override
public void onFailure(Throwable caught) {
public void handleFailure(Throwable caught) {
errorReporter.reportError(stringMessages.errorUpdatingIsMedalRace(caught.getMessage()));
}
@Override
public void onSuccess(Void result) {
public void handleSuccess(Void result) {
getSelectedLeaderboard().setIsMedalRace(raceInLeaderboard.getRaceColumnName(), isMedalRace);
}
});
@@ -1004,15 +1016,15 @@ public class LeaderboardConfigPanel extends FormPanel implements SelectedLeaderb
}
}
sailingService.addColumnsToLeaderboard(leaderboardName, raceColumnsToAdd, new AsyncCallback<Void>() {
sailingService.addColumnsToLeaderboard(leaderboardName, raceColumnsToAdd, new MarkedAsyncCallback<Void>() {
@Override
public void onFailure(Throwable caught) {
public void handleFailure(Throwable caught) {
errorReporter.reportError("Error trying to add race columns to leaderboard " + leaderboardName
+ ": " + caught.getMessage());
}
@Override
public void onSuccess(Void v) {
public void handleSuccess(Void v) {
loadAndRefreshLeaderboard(leaderboardName, /* nameOfRaceColumnToSelect */ null);
}
});
@@ -1120,7 +1132,7 @@ public class LeaderboardConfigPanel extends FormPanel implements SelectedLeaderb
});
}
});
dialog.ensureDebugId("CreateFlexibleLeaderboardDialog");
dialog.ensureDebugId("FlexibleLeaderboardCreateDialog");
dialog.show();
}
@@ -1149,6 +1161,7 @@ public class LeaderboardConfigPanel extends FormPanel implements SelectedLeaderb
});
}
});
dialog.ensureDebugId("RegattaLeaderboardCreateDialog");
dialog.show();
}
@@ -1161,15 +1174,15 @@ public class LeaderboardConfigPanel extends FormPanel implements SelectedLeaderb
private void updateLeaderboard(final String oldLeaderboardName, final LeaderboardDescriptor leaderboardToUpdate) {
sailingService.updateLeaderboard(oldLeaderboardName, leaderboardToUpdate.getName(), leaderboardToUpdate.getDisplayName(),
leaderboardToUpdate.getDiscardThresholds(), leaderboardToUpdate.getCourseAreaIdAsString(), new AsyncCallback<StrippedLeaderboardDTO>() {
leaderboardToUpdate.getDiscardThresholds(), leaderboardToUpdate.getCourseAreaIdAsString(), new MarkedAsyncCallback<StrippedLeaderboardDTO>() {
@Override
public void onFailure(Throwable t) {
public void handleFailure(Throwable t) {
errorReporter.reportError("Error trying to update leaderboard " + oldLeaderboardName + ": "
+ t.getMessage());
}
@Override
public void onSuccess(StrippedLeaderboardDTO updatedLeaderboard) {
public void handleSuccess(StrippedLeaderboardDTO updatedLeaderboard) {
int indexOfLeaderboard = 0;
for (int i = 0; i < leaderboardList.getList().size(); i++) {
StrippedLeaderboardDTO dao = leaderboardList.getList().get(i);
@@ -1190,17 +1203,17 @@ public class LeaderboardConfigPanel extends FormPanel implements SelectedLeaderb
for (StrippedLeaderboardDTO leaderboard : leaderboards) {
leaderboardNames.add(leaderboard.name);
}
sailingService.removeLeaderboards(leaderboardNames, new AsyncCallback<Void>() {
sailingService.removeLeaderboards(leaderboardNames, new MarkedAsyncCallback<Void>() {
@Override
public void onFailure(Throwable caught) {
public void handleFailure(Throwable caught) {
errorReporter.reportError("Error trying to remove the leaderboards:" + caught.getMessage());
}
@Override
public void onSuccess(Void result) {
public void handleSuccess(Void result) {
for (StrippedLeaderboardDTO leaderboard : leaderboards) {
removeLeaderboardFromTable(leaderboard);
}
@@ -1210,15 +1223,15 @@ public class LeaderboardConfigPanel extends FormPanel implements SelectedLeaderb
}
private void removeLeaderboard(final StrippedLeaderboardDTO leaderBoard) {
sailingService.removeLeaderboard(leaderBoard.name, new AsyncCallback<Void>() {
sailingService.removeLeaderboard(leaderBoard.name, new MarkedAsyncCallback<Void>() {
@Override
public void onFailure(Throwable caught) {
public void handleFailure(Throwable caught) {
errorReporter.reportError("Error trying to remove leaderboard " + leaderBoard.name + ": "
+ caught.getMessage());
}
@Override
public void onSuccess(Void result) {
public void handleSuccess(Void result) {
removeLeaderboardFromTable(leaderBoard);
}
});
@@ -1250,9 +1263,9 @@ public class LeaderboardConfigPanel extends FormPanel implements SelectedLeaderb
final FleetDTO fleet, final RegattaAndRaceIdentifier selectedRace) {
sailingService.connectTrackedRaceToLeaderboardColumn(getSelectedLeaderboardName(), selectedRaceInLeaderboard
.getRaceColumnName(), fleet.getName(), selectedRace,
new AsyncCallback<Boolean>() {
new MarkedAsyncCallback<Boolean>() {
@Override
public void onFailure(Throwable t) {
public void handleFailure(Throwable t) {
errorReporter.reportError("Error trying to link tracked race " + selectedRace + " to race column named "
+ selectedRaceInLeaderboard.getRaceColumnName() + " of leaderboard "
+ getSelectedLeaderboardName() + ": " + t.getMessage());
@@ -1260,7 +1273,7 @@ public class LeaderboardConfigPanel extends FormPanel implements SelectedLeaderb
}
@Override
public void onSuccess(Boolean success) {
public void handleSuccess(Boolean success) {
if (success) {
// TODO consider enabling the Unlink button
selectedRaceInLeaderboard.setRaceIdentifier(fleet, selectedRace);
@@ -20,7 +20,6 @@ import com.google.gwt.user.cellview.client.Column;
import com.google.gwt.user.cellview.client.ColumnSortEvent.ListHandler;
import com.google.gwt.user.cellview.client.TextColumn;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.CaptionPanel;
import com.google.gwt.user.client.ui.HorizontalPanel;
@@ -40,6 +39,7 @@ import com.sap.sailing.gwt.ui.client.AbstractRegattaPanel;
import com.sap.sailing.gwt.ui.client.DataEntryDialog.DialogCallback;
import com.sap.sailing.gwt.ui.client.ErrorReporter;
import com.sap.sailing.gwt.ui.client.LeaderboardGroupRefresher;
import com.sap.sailing.gwt.ui.client.MarkedAsyncCallback;
import com.sap.sailing.gwt.ui.client.RegattaRefresher;
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
import com.sap.sailing.gwt.ui.client.StringMessages;
@@ -111,6 +111,7 @@ public class LeaderboardGroupConfigPanel extends AbstractRegattaPanel implements
mainPanel.add(createLeaderboardGroupsGUI(tableRes));
splitPanel = new HorizontalPanel();
splitPanel.ensureDebugId("LeaderboardGroupDetailsPanel");
splitPanel.setSpacing(5);
splitPanel.setWidth("100%");
splitPanel.setVisible(false);
@@ -132,6 +133,7 @@ public class LeaderboardGroupConfigPanel extends AbstractRegattaPanel implements
switchLeaderboardsPanel.setWidth("5%");
moveToGroupButton = new Button("<-");
moveToGroupButton.ensureDebugId("AddLeaderboardButton");
moveToGroupButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
@@ -142,6 +144,7 @@ public class LeaderboardGroupConfigPanel extends AbstractRegattaPanel implements
switchLeaderboardsPanel.add(moveToGroupButton);
moveToLeaderboardsButton = new Button("->");
moveToLeaderboardsButton.ensureDebugId("RemoveLeaderboardButton");
moveToLeaderboardsButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
@@ -167,10 +170,12 @@ public class LeaderboardGroupConfigPanel extends AbstractRegattaPanel implements
leaderboardsPanel.add(leaderboardsFunctionPanel);
Label filterLeaderboardsLabel = new Label(stringMessages.filterLeaderboardsByName() + ":");
leaderboardsFunctionPanel.add(filterLeaderboardsLabel);
// Create leaderboards table
leaderboardsProvider = new ListDataProvider<StrippedLeaderboardDTO>();
ListHandler<StrippedLeaderboardDTO> leaderboardsListHandler = new ListHandler<StrippedLeaderboardDTO>(leaderboardsProvider.getList());
leaderboardsTable = new CellTable<StrippedLeaderboardDTO>(10000, tableRes);
leaderboardsTable.ensureDebugId("LeaderboardsCellTable");
leaderboardsFilterablePanel = new AbstractFilterablePanel<StrippedLeaderboardDTO>(filterLeaderboardsLabel, availableLeaderboards, leaderboardsTable, leaderboardsProvider) {
@Override
public Iterable<String> getSearchableStrings(StrippedLeaderboardDTO t) {
@@ -180,8 +185,11 @@ public class LeaderboardGroupConfigPanel extends AbstractRegattaPanel implements
return strings;
}
};
leaderboardsFilterablePanel.getTextBox().ensureDebugId("LeaderboardsFilterTextBox");
leaderboardsFunctionPanel.add(leaderboardsFilterablePanel);
Button refreshLeaderboardsButton = new Button(stringMessages.refresh());
refreshLeaderboardsButton.ensureDebugId("RefreshLeaderboardsButton");
refreshLeaderboardsButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
@@ -189,6 +197,7 @@ public class LeaderboardGroupConfigPanel extends AbstractRegattaPanel implements
}
});
leaderboardsFunctionPanel.add(refreshLeaderboardsButton);
TextColumn<StrippedLeaderboardDTO> leaderboardsNameColumn = new TextColumn<StrippedLeaderboardDTO>() {
@Override
public String getValue(StrippedLeaderboardDTO leaderboard) {
@@ -256,6 +265,7 @@ public class LeaderboardGroupConfigPanel extends AbstractRegattaPanel implements
descriptionCaptionPanel.add(descriptionPanel);
descriptionTextArea = new TextArea();
descriptionTextArea.ensureDebugId("DescriptionTextArea");
descriptionTextArea.setCharacterWidth(60);
descriptionTextArea.setVisibleLines(8);
descriptionTextArea.getElement().getStyle().setProperty("resize", "none");
@@ -267,6 +277,7 @@ public class LeaderboardGroupConfigPanel extends AbstractRegattaPanel implements
descriptionPanel.add(descriptionFunctionsPanel);
editDescriptionButton = new Button(stringMessages.edit());
editDescriptionButton.ensureDebugId("EditDescriptionButton");
editDescriptionButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
@@ -276,6 +287,7 @@ public class LeaderboardGroupConfigPanel extends AbstractRegattaPanel implements
descriptionFunctionsPanel.add(editDescriptionButton);
abortDescriptionButton = new Button(stringMessages.abort());
abortDescriptionButton.ensureDebugId("AbortButton");
abortDescriptionButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
@@ -291,6 +303,7 @@ public class LeaderboardGroupConfigPanel extends AbstractRegattaPanel implements
descriptionFunctionsPanel.add(abortDescriptionButton);
saveDescriptionButton = new Button(stringMessages.save());
saveDescriptionButton.ensureDebugId("SaveButton");
saveDescriptionButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
@@ -326,6 +339,7 @@ public class LeaderboardGroupConfigPanel extends AbstractRegattaPanel implements
};
groupDetailsTable = new CellTable<StrippedLeaderboardDTO>(10000, tableRes);
groupDetailsTable.ensureDebugId("LeaderboardGroupsCellTable");
groupDetailsTable.setWidth("100%");
groupDetailsTable.addColumn(groupDetailsNameColumn, stringMessages.leaderboardName());
groupDetailsTable.addColumn(groupDetailsRacesColumn, stringMessages.races());
@@ -352,6 +366,7 @@ public class LeaderboardGroupConfigPanel extends AbstractRegattaPanel implements
groupDetailsPanel.add(groupDetailsFunctionPanel);
leaderboardUpButton = new Button(stringMessages.columnMoveUp());
leaderboardUpButton.ensureDebugId("MoveLeaderboardGroupUpButton");
leaderboardUpButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
@@ -362,6 +377,7 @@ public class LeaderboardGroupConfigPanel extends AbstractRegattaPanel implements
groupDetailsFunctionPanel.add(leaderboardUpButton);
leaderboardDownButton = new Button(stringMessages.columnMoveDown());
leaderboardDownButton.ensureDebugId("MoveLeaderboardGroupDownButton");
leaderboardDownButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
@@ -392,6 +408,7 @@ public class LeaderboardGroupConfigPanel extends AbstractRegattaPanel implements
groupsProvider = new ListDataProvider<LeaderboardGroupDTO>();
ListHandler<LeaderboardGroupDTO> leaderboardGroupsListHandler = new ListHandler<LeaderboardGroupDTO>(groupsProvider.getList());
groupsTable = new CellTable<LeaderboardGroupDTO>(10000, tableRes);
groupsTable.ensureDebugId("LeaderboardGroupsCellTable");
groupsFilterablePanel = new AbstractFilterablePanel<LeaderboardGroupDTO>(filterLeaderboardGroupsLbl, availableLeaderboardGroups, groupsTable, groupsProvider) {
@Override
public Iterable<String> getSearchableStrings(LeaderboardGroupDTO t) {
@@ -400,8 +417,11 @@ public class LeaderboardGroupConfigPanel extends AbstractRegattaPanel implements
return string;
}
};
groupsFilterablePanel.getTextBox().ensureDebugId("LeaderboardGroupsFilterTextBox");
leaderboardGroupsFunctionPanel.add(groupsFilterablePanel);
Button createGroupButton = new Button(stringMessages.createNewLeaderboardGroup());
createGroupButton.ensureDebugId("CreateLeaderboardGroupButton");
createGroupButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
@@ -411,6 +431,7 @@ public class LeaderboardGroupConfigPanel extends AbstractRegattaPanel implements
leaderboardGroupsFunctionPanel.add(createGroupButton);
removeButton = new Button(stringMessages.remove());
removeButton.ensureDebugId("RemoveLeaderboardButton");
removeButton.setEnabled(false);
removeButton.addClickHandler(new ClickHandler() {
@Override
@@ -519,9 +540,9 @@ public class LeaderboardGroupConfigPanel extends AbstractRegattaPanel implements
}
public void fillLeaderboardGroups() {
sailingService.getLeaderboardGroups(false /*withGeoLocationData*/, new AsyncCallback<List<LeaderboardGroupDTO>>() {
sailingService.getLeaderboardGroups(false /*withGeoLocationData*/, new MarkedAsyncCallback<List<LeaderboardGroupDTO>>() {
@Override
public void onSuccess(List<LeaderboardGroupDTO> groups) {
public void handleSuccess(List<LeaderboardGroupDTO> groups) {
availableLeaderboardGroups.clear();
if (groups != null) {
availableLeaderboardGroups.addAll(groups);
@@ -530,20 +551,20 @@ public class LeaderboardGroupConfigPanel extends AbstractRegattaPanel implements
groupsProvider.getList().addAll(availableLeaderboardGroups);
}
@Override
public void onFailure(Throwable t) {
public void handleFailure(Throwable t) {
errorReporter.reportError("Error trying to obtain list of leaderboard groups: " + t.getMessage());
}
});
}
private void loadLeaderboards() {
sailingService.getLeaderboards(new AsyncCallback<List<StrippedLeaderboardDTO>>() {
sailingService.getLeaderboards(new MarkedAsyncCallback<List<StrippedLeaderboardDTO>>() {
@Override
public void onFailure(Throwable t) {
public void handleFailure(Throwable t) {
errorReporter.reportError("Error trying to obtain list of leaderboards: " + t.getMessage());
}
@Override
public void onSuccess(List<StrippedLeaderboardDTO> leaderboards) {
public void handleSuccess(List<StrippedLeaderboardDTO> leaderboards) {
availableLeaderboards.clear();
if (leaderboards != null) {
availableLeaderboards.addAll(leaderboards);
@@ -564,14 +585,14 @@ public class LeaderboardGroupConfigPanel extends AbstractRegattaPanel implements
final LeaderboardGroupDTO selectedGroup = getSelectedGroup();
final Set<StrippedLeaderboardDTO> selectedLeaderboards = leaderboardsSelectionModel.getSelectedSet();
if (isSingleGroupSelected && selectedGroup != null) {
sailingService.getLeaderboards(new AsyncCallback<List<StrippedLeaderboardDTO>>() {
sailingService.getLeaderboards(new MarkedAsyncCallback<List<StrippedLeaderboardDTO>>() {
@Override
public void onFailure(Throwable t) {
public void handleFailure(Throwable t) {
errorReporter.reportError("Error trying to obtain list of leaderboards: " + t.getMessage());
}
@Override
public void onSuccess(List<StrippedLeaderboardDTO> leaderboards) {
public void handleSuccess(List<StrippedLeaderboardDTO> leaderboards) {
availableLeaderboards.clear();
if (leaderboards != null) {
availableLeaderboards.addAll(leaderboards);
@@ -600,20 +621,21 @@ public class LeaderboardGroupConfigPanel extends AbstractRegattaPanel implements
createNewGroup(newGroup);
}
});
dialog.ensureDebugId("LeaderboardGroupCreateDialog");
dialog.show();
}
private void createNewGroup(final LeaderboardGroupDescriptor newGroup) {
sailingService.createLeaderboardGroup(newGroup.getName(), newGroup.getDescription(), newGroup.isDisplayLeaderboardsInReverseOrder(),
newGroup.getOverallLeaderboardDiscardThresholds(),
newGroup.getOverallLeaderboardScoringSchemeType(), new AsyncCallback<LeaderboardGroupDTO>() {
newGroup.getOverallLeaderboardScoringSchemeType(), new MarkedAsyncCallback<LeaderboardGroupDTO>() {
@Override
public void onFailure(Throwable t) {
public void handleFailure(Throwable t) {
errorReporter.reportError("Error trying to create new leaderboard group" + newGroup.getName()
+ ": " + t.getMessage());
}
@Override
public void onSuccess(LeaderboardGroupDTO newGroup) {
public void handleSuccess(LeaderboardGroupDTO newGroup) {
availableLeaderboardGroups.add(newGroup);
groupsProvider.getList().add(newGroup);
groupsSelectionModel.clear();
@@ -629,14 +651,14 @@ public class LeaderboardGroupConfigPanel extends AbstractRegattaPanel implements
}
sailingService.updateLeaderboardGroup(oldGroupName, updateDescriptor.getName(), updateDescriptor.getDescription(),
leaderboardNames, updateDescriptor.getOverallLeaderboardDiscardThresholds(),
updateDescriptor.getOverallLeaderboardScoringSchemeType(), new AsyncCallback<Void>() {
updateDescriptor.getOverallLeaderboardScoringSchemeType(), new MarkedAsyncCallback<Void>() {
@Override
public void onFailure(Throwable t) {
public void handleFailure(Throwable t) {
errorReporter.reportError("Error trying to update leaderboard group " + oldGroupName + ": "
+ t.getMessage());
}
@Override
public void onSuccess(Void v) {
public void handleSuccess(Void v) {
// Update the availableLeaderboardGroups and the list of displayed groups
for (int i = 0; i < availableLeaderboardGroups.size(); i++) {
LeaderboardGroupDTO group = availableLeaderboardGroups.get(i);
@@ -668,14 +690,14 @@ public class LeaderboardGroupConfigPanel extends AbstractRegattaPanel implements
}
sailingService.updateLeaderboardGroup(group.getName(), group.getName(), group.description,
leaderboardNames, group.getOverallLeaderboardDiscardThresholds(),
group.getOverallLeaderboardScoringSchemeType(), new AsyncCallback<Void>() {
group.getOverallLeaderboardScoringSchemeType(), new MarkedAsyncCallback<Void>() {
@Override
public void onFailure(Throwable t) {
public void handleFailure(Throwable t) {
errorReporter.reportError("Error trying to update leaderboard group " + group.getName() + ": "
+ t.getMessage());
}
@Override
public void onSuccess(Void v) {
public void handleSuccess(Void v) {
}
});
}
@@ -686,14 +708,14 @@ public class LeaderboardGroupConfigPanel extends AbstractRegattaPanel implements
for (LeaderboardGroupDTO group : groups) {
groupNames.add(group.getName());
}
sailingService.removeLeaderboardGroups(groupNames, new AsyncCallback<Void>() {
sailingService.removeLeaderboardGroups(groupNames, new MarkedAsyncCallback<Void>() {
@Override
public void onFailure(Throwable t) {
public void handleFailure(Throwable t) {
errorReporter.reportError("Error trying to remove the leaderboard groups: "
+ t.getMessage());
}
@Override
public void onSuccess(Void result) {
public void handleSuccess(Void result) {
for (LeaderboardGroupDTO group : groups) {
removeGroupFromTable(group);
}
@@ -705,14 +727,14 @@ public class LeaderboardGroupConfigPanel extends AbstractRegattaPanel implements
private void removeLeaderboardGroup(final LeaderboardGroupDTO group) {
Set<String> groups = new HashSet<String>();
groups.add(group.getName());
sailingService.removeLeaderboardGroups(groups, new AsyncCallback<Void>() {
sailingService.removeLeaderboardGroups(groups, new MarkedAsyncCallback<Void>() {
@Override
public void onFailure(Throwable t) {
public void handleFailure(Throwable t) {
errorReporter.reportError("Error trying to remove leaderboard group " + group.getName() + ": "
+ t.getMessage());
}
@Override
public void onSuccess(Void v) {
public void handleSuccess(Void v) {
removeGroupFromTable(group);
}
});
@@ -12,8 +12,12 @@ public class LeaderboardGroupCreateDialog extends LeaderboardGroupDialog {
super(new LeaderboardGroupDTO(), stringMessages,
callback, existingGroups);
nameEntryField = createTextBox(null, 50);
descriptionEntryField = createTextArea(null);
nameEntryField.ensureDebugId("NameTextBox");
descriptionEntryField = createTextArea(null);
descriptionEntryField.ensureDebugId("DescriptionTextArea");
displayLeaderboardsInReverseOrderCheckBox.setValue(false);
useOverallLeaderboardCheckBox.setValue(false);
useOverallLeaderboardCheckBox.setValue(false);
}
}
@@ -123,8 +123,14 @@ public class LeaderboardGroupDialog extends DataEntryDialog<LeaderboardGroupDial
super(stringMessages.leaderboardGroup(), null, stringMessages.ok(), stringMessages.cancel(),
new LeaderboardGroupParameterValidator(stringMessages, existingLeaderboardGroups), callback);
this.stringMessages = stringMessages;
displayLeaderboardsInReverseOrderCheckBox = createCheckbox(stringMessages.displayGroupsInReverseOrder());
// QUESTION [Riccardo]: Are this groups or leaderboards?
displayLeaderboardsInReverseOrderCheckBox.ensureDebugId("DisplayGroupsInReverseOrderCheckBox");
useOverallLeaderboardCheckBox = createCheckbox(stringMessages.useOverallLeaderboard());
useOverallLeaderboardCheckBox.ensureDebugId("UseOverallLeaderboardCheckBox");
Grid formGrid = new Grid(3,2);
formGrid.setCellSpacing(3);
formGrid.setWidget(0, 0, new Label(stringMessages.scoringSystem() + ":"));
@@ -69,22 +69,34 @@ public class RegattaDetailsComposite extends Composite {
mainPanel.add(vPanel);
Grid grid = new Grid(5, 2);
vPanel.add(grid);
regattaName = new Label();
regattaName.ensureDebugId("NameLabel");
grid.setWidget(0 , 0, new Label(stringMessages.regattaName() + ":"));
grid.setWidget(0 , 1, regattaName);
boatClassName = new Label();
boatClassName.ensureDebugId("BoatClassLabel");
grid.setWidget(1 , 0, new Label(stringMessages.boatClass() + ":"));
grid.setWidget(1 , 1, boatClassName);
defaultCourseArea = new Label();
defaultCourseArea.ensureDebugId("CourseAreaLabel");
grid.setWidget(2 , 0, new Label(stringMessages.courseArea() + ":"));
grid.setWidget(2 , 1, defaultCourseArea);
configuration = new Label();
configuration.ensureDebugId("RacingProcedureLabel");
grid.setWidget(3, 0, new Label(stringMessages.racingProcedureConfiguration() + ":"));
grid.setWidget(3, 1, configuration);;
grid.setWidget(3, 1, configuration);
scoringSystem = new Label();
scoringSystem.ensureDebugId("ScoringSystemLabel");
grid.setWidget(4 , 0, new Label(stringMessages.scoringSystem() + ":"));
grid.setWidget(4 , 1, scoringSystem);
seriesTable = createRegattaSeriesTable();
seriesTable.ensureDebugId("SeriesCellTable");
seriesSelectionModel = new SingleSelectionModel<SeriesDTO>();
seriesSelectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
@Override
@@ -95,6 +107,7 @@ public class RegattaDetailsComposite extends Composite {
seriesListDataProvider = new ListDataProvider<SeriesDTO>();
seriesListDataProvider.addDataDisplay(seriesTable);
vPanel.add(seriesTable);
initWidget(mainPanel);
}
@@ -239,6 +252,7 @@ public class RegattaDetailsComposite extends Composite {
updateRacesOfRegattaSeries(regatta, result);
}
});
raceDialog.ensureDebugId("SeriesEditDialog");
raceDialog.show();
}
@@ -16,14 +16,17 @@ public class RegattaLeaderboardCreateDialog extends RegattaLeaderboardDialog {
super(stringMessages.createRegattaLeaderboard(), new LeaderboardDescriptor(), existingRegattas, stringMessages, errorReporter, new RegattaLeaderboardDialog.LeaderboardParameterValidator(stringMessages, existingLeaderboards), callback);
nameTextBox = createTextBox(null);
displayNameTextBox = createTextBox(null);
nameTextBox.ensureDebugId("NameTextBox");
nameTextBox.setVisibleLength(50);
// the name of the regatta leaderboard will be derived from the selected regatta
nameTextBox.setEnabled(false);
nameTextBox.setVisibleLength(50);
displayNameTextBox = createTextBox(null);
displayNameTextBox.ensureDebugId("DisplayNameTextBox");
displayNameTextBox.setVisibleLength(50);
regattaListBox = createSortedRegattaListBox(existingRegattas, null);
regattaListBox.ensureDebugId("RegattaListBox");
regattaListBox.addChangeHandler(new ChangeHandler() {
public void onChange(ChangeEvent event) {
int selectedIndex = regattaListBox.getSelectedIndex();
@@ -29,6 +29,7 @@ import com.sap.sailing.domain.common.RegattaName;
import com.sap.sailing.domain.common.impl.NaturalComparator;
import com.sap.sailing.gwt.ui.client.DataEntryDialog.DialogCallback;
import com.sap.sailing.gwt.ui.client.ErrorReporter;
import com.sap.sailing.gwt.ui.client.MarkedAsyncCallback;
import com.sap.sailing.gwt.ui.client.RegattaDisplayer;
import com.sap.sailing.gwt.ui.client.RegattaRefresher;
import com.sap.sailing.gwt.ui.client.RegattaSelectionProvider;
@@ -77,14 +78,18 @@ public class RegattaListComposite extends Composite implements RegattaDisplayer
mainPanel = new SimplePanel();
panel = new VerticalPanel();
mainPanel.setWidget(panel);
Label filterRegattasLabel = new Label(stringMessages.filterRegattasByName() + ":");
filterRegattasLabel.setWordWrap(false);
noRegattasLabel = new Label(stringMessages.noRegattasYet());
noRegattasLabel.ensureDebugId("NoRegattasLabel");
noRegattasLabel.setWordWrap(false);
panel.add(noRegattasLabel);
regattaListDataProvider = new ListDataProvider<RegattaDTO>();
regattaTable = createRegattaTable();
regattaTable.ensureDebugId("RegattasCellTable");
regattaTable.setVisible(false);
Label filterRegattasLabel = new Label(stringMessages.filterRegattasByName() + ":");
filterRegattasLabel.setWordWrap(false);
filterablePanelRegattas = new AbstractFilterablePanel<RegattaDTO>(filterRegattasLabel, allRegattas,
regattaTable, regattaListDataProvider) {
@Override
@@ -95,7 +100,9 @@ public class RegattaListComposite extends Composite implements RegattaDisplayer
return string;
}
};
filterablePanelRegattas.getTextBox().ensureDebugId("ReggatasFilterTextBox");
panel.add(filterablePanelRegattas);
regattaSelectionModel = new MultiSelectionModel<RegattaDTO>();
regattaSelectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
@Override
@@ -190,14 +197,14 @@ public class RegattaListComposite extends Composite implements RegattaDisplayer
private void editRegatta(final RegattaDTO toBeEdited) {
final Collection<RegattaDTO> existingRegattas = getAllRegattas();
sailingService.getEvents(new AsyncCallback<List<EventDTO>>() {
sailingService.getEvents(new MarkedAsyncCallback<List<EventDTO>>() {
@Override
public void onFailure(Throwable caught) {
public void handleFailure(Throwable caught) {
openEditRegattaDialog(toBeEdited, existingRegattas, Collections.<EventDTO> emptyList());
}
@Override
public void onSuccess(List<EventDTO> events) {
public void handleSuccess(List<EventDTO> events) {
openEditRegattaDialog(toBeEdited, existingRegattas, Collections.unmodifiableList(events));
}
});
@@ -222,15 +229,14 @@ public class RegattaListComposite extends Composite implements RegattaDisplayer
final RegattaIdentifier regattaName = new RegattaName(editedRegatta.getName());
sailingService.updateRegatta(regattaName, editedRegatta.defaultCourseAreaUuidAsString,
editedRegatta.configuration,
new AsyncCallback<Void>() {
editedRegatta.configuration, new MarkedAsyncCallback<Void>() {
@Override
public void onFailure(Throwable caught) {
public void handleFailure(Throwable caught) {
errorReporter.reportError("Error trying to update regatta " + editedRegatta.getName() + ": " + caught.getMessage());
}
@Override
public void onSuccess(Void result) {
public void handleSuccess(Void result) {
regattaRefresher.fillRegattas();
}
});
@@ -65,7 +65,9 @@ public class RegattaStructureManagementPanel extends SimplePanel implements Rega
HorizontalPanel regattaManagementControlsPanel = new HorizontalPanel();
regattaManagementControlsPanel.setSpacing(5);
Button addRegattaBtn = new Button(stringMessages.addRegatta());
addRegattaBtn.ensureDebugId("AddRegattaButton");
addRegattaBtn.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
@@ -75,6 +77,7 @@ public class RegattaStructureManagementPanel extends SimplePanel implements Rega
regattaManagementControlsPanel.add(addRegattaBtn);
removeRegattaButton = new Button(stringMessages.remove());
removeRegattaButton.ensureDebugId("RemoveRegattaButton");
removeRegattaButton.setEnabled(false);
removeRegattaButton.addClickHandler(new ClickHandler() {
@Override
@@ -100,10 +103,12 @@ public class RegattaStructureManagementPanel extends SimplePanel implements Rega
regattaSelectionProvider.addRegattaSelectionChangeListener(this);
regattaListComposite = new RegattaListComposite(sailingService, regattaSelectionProvider, regattaRefresher, errorReporter, stringMessages);
regattaListComposite.ensureDebugId("RegattaListComposite");
grid.setWidget(0, 0, regattaListComposite);
grid.getRowFormatter().setVerticalAlign(0, HasVerticalAlignment.ALIGN_TOP);
grid.getColumnFormatter().getElement(1).getStyle().setPaddingTop(2.0, Unit.EM);
regattaDetailsComposite = new RegattaDetailsComposite(sailingService, regattaRefresher, errorReporter, stringMessages);
regattaDetailsComposite.ensureDebugId("RegattaDetailsComposite");
regattaDetailsComposite.setVisible(false);
grid.setWidget(0, 1, regattaDetailsComposite);
}
@@ -152,6 +157,7 @@ public class RegattaStructureManagementPanel extends SimplePanel implements Rega
createNewRegatta(newRegatta);
}
});
dialog.ensureDebugId("RegattaCreateDialog");
dialog.show();
}
@@ -45,16 +45,19 @@ public abstract class RegattaWithSeriesAndFleetsDialog extends DataEntryDialog<R
this.existingEvents = existingEvents;
nameEntryField = createTextBox(null);
nameEntryField.ensureDebugId("NameTextBox");
nameEntryField.setVisibleLength(40);
nameEntryField.setText(regatta.getName());
boatClassEntryField = createTextBox(null);
boatClassEntryField.ensureDebugId("BoatClassTextBox");
boatClassEntryField.setVisibleLength(20);
if (regatta.boatClass != null) {
boatClassEntryField.setText(regatta.boatClass.getName());
}
scoringSchemeListBox = createListBox(false);
scoringSchemeListBox.ensureDebugId("ScoringSchemeListBox");
for (ScoringSchemeType scoringSchemeType : ScoringSchemeType.values()) {
scoringSchemeListBox.addItem(ScoringSchemeTypeFormatter.format(scoringSchemeType, stringMessages),
String.valueOf(scoringSchemeType.ordinal()));
@@ -64,10 +67,13 @@ public abstract class RegattaWithSeriesAndFleetsDialog extends DataEntryDialog<R
}
sailingEventsListBox = createListBox(false);
courseAreaListBox = createListBox(false);
setupEventAndCourseAreaListBoxes(stringMessages);
sailingEventsListBox.ensureDebugId("EventListBox");
courseAreaListBox = createListBox(false);
courseAreaListBox.ensureDebugId("CourseAreaListBox");
courseAreaListBox.setEnabled(false);
setupEventAndCourseAreaListBoxes(stringMessages);
}
@Override
@@ -37,6 +37,7 @@ public class RegattaWithSeriesAndFleetsEditDialog extends RegattaWithSeriesAndFl
courseAreaListBox.setEnabled(true);
regattaConfigurationCheckbox = createCheckbox(stringMessages.setRacingProcedureConfiguration());
regattaConfigurationCheckbox.ensureDebugId("RacingProcedureConfigurationCheckBox");
regattaConfigurationCheckbox.addValueChangeHandler(new ValueChangeHandler<Boolean>() {
@Override
public void onValueChange(ValueChangeEvent<Boolean> event) {
@@ -44,6 +45,7 @@ public class RegattaWithSeriesAndFleetsEditDialog extends RegattaWithSeriesAndFl
}
});
regattaConfigurationButton = new Button(stringMessages.edit());
regattaConfigurationButton.ensureDebugId("RacingProcedureConfigurationEditButton");
regattaConfigurationButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
@@ -57,7 +59,7 @@ public class RegattaWithSeriesAndFleetsEditDialog extends RegattaWithSeriesAndFl
@Override
public void cancel() {
}
}).show();;
}).show();
}
});
regattaConfigurationCheckbox.setValue(regatta.configuration != null);
@@ -153,16 +153,24 @@ public class SeriesEditDialog extends DataEntryDialog<SeriesDescriptor> {
String seriesName = getSelectedSeries().getName();
seriesPanel.add(new Label(stringMessages.series() + ": " + seriesName));
additionalWidgetPanel.add(seriesPanel);
isMedalCheckbox = createCheckbox(stringMessages.medalSeries());
isMedalCheckbox.ensureDebugId("MedalSeriesCheckbox");
isMedalCheckbox.setValue(selectedSeries.isMedal());
additionalWidgetPanel.add(isMedalCheckbox);
startWithZeroScoreCheckbox = createCheckbox(stringMessages.startsWithZeroScore());
startWithZeroScoreCheckbox.ensureDebugId("StartsWithZeroScoreCheckbox");
startWithZeroScoreCheckbox.setValue(selectedSeries.isStartsWithZeroScore());
additionalWidgetPanel.add(startWithZeroScoreCheckbox);
firstColumnIsNonDiscardableCarryForwardCheckbox = createCheckbox(stringMessages.firstRaceIsNonDiscardableCarryForward());
firstColumnIsNonDiscardableCarryForwardCheckbox.ensureDebugId("StartsWithNonDiscardableCarryForwardCheckbox");
firstColumnIsNonDiscardableCarryForwardCheckbox.setValue(selectedSeries.isFirstColumnIsNonDiscardableCarryForward());
additionalWidgetPanel.add(firstColumnIsNonDiscardableCarryForwardCheckbox);
useSeriesResultDiscardingThresholdsCheckbox = createCheckbox(stringMessages.seriesDefinesResultDiscardingRule());
useSeriesResultDiscardingThresholdsCheckbox.ensureDebugId("DefinesResultDiscardingRulesCheckbox");
useSeriesResultDiscardingThresholdsCheckbox.setValue(selectedSeries.getDiscardThresholds() != null);
useSeriesResultDiscardingThresholdsCheckbox.addValueChangeHandler(new ValueChangeHandler<Boolean>() {
@Override
@@ -171,10 +179,16 @@ public class SeriesEditDialog extends DataEntryDialog<SeriesDescriptor> {
}
});
additionalWidgetPanel.add(useSeriesResultDiscardingThresholdsCheckbox);
additionalWidgetPanel.add(discardThresholdBoxes.getWidget());
discardThresholdBoxes.getWidget().setVisible(useSeriesResultDiscardingThresholdsCheckbox.getValue());
Widget discardThresholdBoxesWidget = discardThresholdBoxes.getWidget();
discardThresholdBoxesWidget.ensureDebugId("");
discardThresholdBoxesWidget.setVisible(useSeriesResultDiscardingThresholdsCheckbox.getValue());
additionalWidgetPanel.add(discardThresholdBoxesWidget);
raceNamesEditor = new StringListEditorComposite(getExistingRacesOfSeries(), new RaceNamesEditorUi(stringMessages, resources.removeIcon(), seriesName));
raceNamesEditor.ensureDebugId("RaceNamesStringListEditorComposite");
additionalWidgetPanel.add(raceNamesEditor);
return additionalWidgetPanel;
}
@@ -205,10 +219,17 @@ public class SeriesEditDialog extends DataEntryDialog<SeriesDescriptor> {
public RaceNamesEditorUi(StringMessages stringMessages, ImageResource removeImage, String seriesName) {
super(stringMessages, removeImage, Collections.<String>emptyList());
this.addRacesListBox = createListBox(false);
this.raceNamePrefixTextBox = createTextBox(null);
this.addRacesBtn = new Button(stringMessages.add());
this.seriesName = seriesName;
this.addRacesListBox = createListBox(false);
this.addRacesListBox.ensureDebugId("NumberOfRacesListBox");
this.raceNamePrefixTextBox = createTextBox(null);
this.raceNamePrefixTextBox.ensureDebugId("RaceNamePrefixTextBox");
this.addRacesBtn = new Button(stringMessages.add());
this.addRacesBtn.ensureDebugId("AddRacesButton");
}
@Override
@@ -100,21 +100,36 @@ public class SeriesWithFleetsCreateDialog extends DataEntryDialog<SeriesDTO> {
new SeriesParameterValidator(stringMessages, existingSeries), callback);
this.stringMessages = stringMessages;
this.series = new SeriesDTO();
nameEntryField = createTextBox(null);
nameEntryField.ensureDebugId("NameTextBox");
nameEntryField.setVisibleLength(40);
isMedalSeriesCheckbox = createCheckbox(stringMessages.medalSeries());
isMedalSeriesCheckbox.ensureDebugId("MedalSeriesCheckbox");
startsWithZeroScoreCheckbox = createCheckbox(stringMessages.startsWithZeroScore());
startsWithZeroScoreCheckbox.ensureDebugId("StartsWithZeroScoreCheckbox");
firstColumnIsNonDiscardableCarryForwardCheckbox = createCheckbox(stringMessages.firstRaceIsNonDiscardableCarryForward());
firstColumnIsNonDiscardableCarryForwardCheckbox.ensureDebugId("StartsWithNonDiscardableCarryForwardCheckbox");
useSeriesResultDiscardingThresholdsCheckbox = createCheckbox(stringMessages.seriesDefinesResultDiscardingRule());
useSeriesResultDiscardingThresholdsCheckbox.ensureDebugId("DefinesResultDiscardingRulesCheckbox");
useSeriesResultDiscardingThresholdsCheckbox.addValueChangeHandler(new ValueChangeHandler<Boolean>() {
@Override
public void onValueChange(ValueChangeEvent<Boolean> event) {
discardThresholdBoxes.getWidget().setVisible(event.getValue());
}
});
discardThresholdBoxes = new DiscardThresholdBoxes(this, stringMessages);
discardThresholdBoxes.getWidget().setVisible(false);
Widget widget = discardThresholdBoxes.getWidget();
widget.ensureDebugId("DiscardThresholdBoxes");
widget.setVisible(false);
fleetListComposite = FleetListEditorComposite.createExpanded(Arrays.asList(new FleetDTO("Default", 0, null)), stringMessages, resources.removeIcon());
fleetListComposite.ensureDebugId("FleetListEditorComposite");
fleetListComposite.addValueChangeHandler(new ValueChangeHandler<List<FleetDTO>>() {
@Override
@@ -35,6 +35,7 @@ public class SeriesWithFleetsListEditor extends ListEditorComposite<SeriesDTO> {
@Override
protected Widget createAddWidget() {
Button addSeriesButton = new Button(stringMessages.addSeries());
addSeriesButton.ensureDebugId("AddSeriesButton");
addSeriesButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
@@ -49,6 +50,7 @@ public class SeriesWithFleetsListEditor extends ListEditorComposite<SeriesDTO> {
addValue(newSeries);
}
});
dialog.ensureDebugId("SeriesCreateDialog");
dialog.show();
}
});
@@ -149,7 +149,7 @@ public class TracTracEventManagementPanel extends AbstractEventManagementPanel {
liveURILabel.setTitle(stringMessages.leaveEmptyForDefault());
liveURITextBox = new TextBox();
liveURITextBox.ensureDebugId("LiveURI");
liveURITextBox.ensureDebugId("LiveURITextBox");
liveURITextBox.setVisibleLength(40);
liveURITextBox.setTitle(stringMessages.leaveEmptyForDefault());
@@ -160,7 +160,7 @@ public class TracTracEventManagementPanel extends AbstractEventManagementPanel {
storedURILabel.setTitle(stringMessages.leaveEmptyForDefault());
storedURITextBox = new TextBox();
storedURITextBox.ensureDebugId("StoredURI");
storedURITextBox.ensureDebugId("StoredURITextBox");
storedURITextBox.setVisibleLength(40);
storedURITextBox.setTitle(stringMessages.leaveEmptyForDefault());
@@ -171,7 +171,7 @@ public class TracTracEventManagementPanel extends AbstractEventManagementPanel {
Label jsonURLLabel = new Label(stringMessages.jsonUrl() + ":");
jsonURLTextBox = new TextBox();
jsonURLTextBox.ensureDebugId("JSONURL");
jsonURLTextBox.ensureDebugId("JsonURLTextBox");
jsonURLTextBox.setVisibleLength(100);
grid.setWidget(4, 0, jsonURLLabel);
@@ -181,7 +181,7 @@ public class TracTracEventManagementPanel extends AbstractEventManagementPanel {
Label tracTracUpdateURLLabel = new Label(stringMessages.tracTracUpdateUrl() + ":");
tracTracUpdateURITextBox = new TextBox();
tracTracUpdateURITextBox.ensureDebugId("TRACTRACUPDATEURI");
tracTracUpdateURITextBox.ensureDebugId("TracTracUpdateURITextBox");
tracTracUpdateURITextBox.setVisibleLength(100);
grid.setWidget(5, 0, tracTracUpdateURLLabel);
@@ -189,7 +189,7 @@ public class TracTracEventManagementPanel extends AbstractEventManagementPanel {
// TracTrac Username
tractracUsernameTextBox = new TextBox();
tractracUsernameTextBox.ensureDebugId("tractracUsername");
tractracUsernameTextBox.ensureDebugId("TracTracUsernameTextBox");
tractracUsernameTextBox.setVisibleLength(40);
grid.setWidget(6, 0, new Label(stringMessages.tractracUsername() + ":"));
@@ -197,7 +197,7 @@ public class TracTracEventManagementPanel extends AbstractEventManagementPanel {
// TracTrac Password
tractracPasswordTextBox = new TextBox();
tractracPasswordTextBox.ensureDebugId("tractracPassword");
tractracPasswordTextBox.ensureDebugId("TracTracPasswordTextBox");
tractracPasswordTextBox.setVisibleLength(40);
grid.setWidget(7, 0, new Label(stringMessages.tractracPassword() + ":"));
@@ -205,11 +205,12 @@ public class TracTracEventManagementPanel extends AbstractEventManagementPanel {
grid.setWidget(8, 0, new Label(stringMessages.racesWithHiddenState() + ":"));
final CheckBox showHiddenRacesCheckbox = new CheckBox(stringMessages.show());
showHiddenRacesCheckbox.ensureDebugId("ShowHiddenRacesCheckBox");
grid.setWidget(8, 1, showHiddenRacesCheckbox);
// List Races
Button listRacesButton = new Button(stringMessages.listRaces());
listRacesButton.ensureDebugId("ListRaces");
listRacesButton.ensureDebugId("ListRacesButton");
listRacesButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
@@ -265,17 +266,17 @@ public class TracTracEventManagementPanel extends AbstractEventManagementPanel {
Label trackSettingsLabel = new Label(stringMessages.trackSettings() + ":");
final CheckBox trackWindCheckBox = new CheckBox(stringMessages.trackWind());
trackWindCheckBox.ensureDebugId("TrackWind");
trackWindCheckBox.ensureDebugId("TrackWindCheckBox");
trackWindCheckBox.setWordWrap(false);
trackWindCheckBox.setValue(Boolean.TRUE);
final CheckBox correctWindCheckBox = new CheckBox(stringMessages.declinationCheckbox());
correctWindCheckBox.ensureDebugId("CorrectWind");
correctWindCheckBox.ensureDebugId("CorrectWindCheckBox");
correctWindCheckBox.setWordWrap(false);
correctWindCheckBox.setValue(Boolean.TRUE);
final CheckBox simulateWithStartTimeNowCheckBox = new CheckBox(stringMessages.simulateWithStartTimeNow());
simulateWithStartTimeNowCheckBox.ensureDebugId("SimulateWithStartTimeNow");
simulateWithStartTimeNowCheckBox.ensureDebugId("SimulateWithStartTimeNowCheckBox");
simulateWithStartTimeNowCheckBox.setWordWrap(false);
simulateWithStartTimeNowCheckBox.setValue(Boolean.FALSE);
@@ -288,6 +289,7 @@ public class TracTracEventManagementPanel extends AbstractEventManagementPanel {
Label racesFilterLabel = new Label(stringMessages.filterRacesByName() + ":");
AdminConsoleTableResources tableResources = GWT.create(AdminConsoleTableResources.class);
racesTable = new CellTable<TracTracRaceRecordDTO>(10000, tableResources);
racesTable.ensureDebugId("TrackableRacesCellTable");
this.racesFilterablePanel = new AbstractFilterablePanel<TracTracRaceRecordDTO>(racesFilterLabel, availableTracTracRaces, racesTable, raceList) {
@Override
public List<String> getSearchableStrings(TracTracRaceRecordDTO t) {
@@ -297,7 +299,7 @@ public class TracTracEventManagementPanel extends AbstractEventManagementPanel {
return strings;
}
};
racesFilterablePanel.getTextBox().ensureDebugId("FilterRaces");
racesFilterablePanel.getTextBox().ensureDebugId("TrackableRacesFilterTextBox");
layoutTable.setWidget(4, 0, racesFilterLabel);
layoutTable.setWidget(4, 1, racesFilterablePanel);
@@ -339,7 +341,6 @@ public class TracTracEventManagementPanel extends AbstractEventManagementPanel {
};
raceStatusColumn.setSortable(true);
racesTable.ensureDebugId("RacesTable");
racesTable.addColumn(regattaNameColumn, stringMessages.event());
racesTable.addColumn(raceNameColumn, stringMessages.race());
racesTable.addColumn(boatClassColumn, stringMessages.boatClass());
@@ -356,7 +357,7 @@ public class TracTracEventManagementPanel extends AbstractEventManagementPanel {
cellFormatter.setColSpan(5, 0, 2);
Button startTrackingButton = new Button(stringMessages.startTracking());
startTrackingButton.ensureDebugId("StartTracking");
startTrackingButton.ensureDebugId("StartTrackingButton");
startTrackingButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
@@ -102,7 +102,7 @@ public class TrackedRacesListComposite extends AbstractTrackedRacesListComposite
@Override
protected void addControlButtons(HorizontalPanel trackedRacesButtonPanel) {
btnRemoveRace = new Button(stringMessages.remove());
btnRemoveRace.ensureDebugId("RemoveRave");
btnRemoveRace.ensureDebugId("RemoveRaceButton");
btnRemoveRace.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
@@ -111,8 +111,9 @@ public class TrackedRacesListComposite extends AbstractTrackedRacesListComposite
});
btnRemoveRace.setEnabled(false);
trackedRacesButtonPanel.add(btnRemoveRace);
btnUntrack = new Button(stringMessages.stopTracking());
btnUntrack.ensureDebugId("UntrackRace");
btnUntrack.ensureDebugId("StopTrackingButton");
btnUntrack.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent click) {
@@ -121,10 +122,9 @@ public class TrackedRacesListComposite extends AbstractTrackedRacesListComposite
});
btnUntrack.setEnabled(false);
trackedRacesButtonPanel.add(btnUntrack);
btnSetDelayToLive = new Button(stringMessages.setDelayToLive() + "...");
btnSetDelayToLive.ensureDebugId("SetDelayToLive");
btnSetDelayToLive.ensureDebugId("SetDelayToLiveButton");
btnSetDelayToLive.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
@@ -135,6 +135,7 @@ public class TrackedRacesListComposite extends AbstractTrackedRacesListComposite
exportPopup = new ExportPopup(stringMessages);
btnExport = new Button(stringMessages.export());
btnExport.ensureDebugId("ExportButton");
btnExport.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
@@ -42,6 +42,7 @@ public abstract class AbstractFilterablePanel<T> extends HorizontalPanel {
this.display = display;
this.filtered = filtered;
this.textBox = new TextBox();
this.textBox.ensureDebugId("FilterTextBox");
this.all = all;
add(label);
add(getTextBox());
@@ -75,10 +75,14 @@ public class ListEditorComposite<ValueType> extends Composite implements HasValu
@Override
public Widget initWidget() {
HorizontalPanel panel = new HorizontalPanel();
panel.ensureDebugId("CollapsedListEditorWidget");
collapsedValuesBox = new TextBox();
collapsedValuesBox.ensureDebugId("CollapsedValuesTextBox");
collapsedValuesBox.setReadOnly(true);
collapsedEditButton = new Button(stringMessages.edit());
collapsedEditButton.ensureDebugId("CollapsedEditButton");
collapsedEditButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
@@ -131,6 +135,7 @@ public class ListEditorComposite<ValueType> extends Composite implements HasValu
DataEntryDialog.DialogCallback<List<ValueType>> callback) {
super(dialogTitle, "", stringMessages.save(), stringMessages.cancel(), null, callback);
expandedComposite = createExpandedUi(initialValues, ui);
expandedComposite.ensureDebugId("ExpandedListEditorComposite");
}
@Override
@@ -158,11 +163,16 @@ public class ListEditorComposite<ValueType> extends Composite implements HasValu
@Override
public Widget initWidget() {
expandedValuesGrid = new Grid(0, 2);
VerticalPanel panel = new VerticalPanel();
panel.add(createAddWidget());
Widget addWidget = createAddWidget();
addWidget.ensureDebugId("AddWidget");
panel.add(addWidget);
expandedValuesGrid = new Grid(0, 2);
expandedValuesGrid.ensureDebugId("ExpandedValuesGrid");
panel.add(expandedValuesGrid);
return panel;
}
@@ -183,6 +193,7 @@ public class ListEditorComposite<ValueType> extends Composite implements HasValu
int rowIndex = expandedValuesGrid.insertRow(expandedValuesGrid.getRowCount());
PushButton removeButton = new PushButton(new Image(removeImage));
removeButton.ensureDebugId("RemoveButton");
removeButton.setTitle(stringMessages.remove());
removeButton.addClickHandler(new ClickHandler() {
@@ -194,8 +205,11 @@ public class ListEditorComposite<ValueType> extends Composite implements HasValu
context.onChange();
}
});
expandedValuesGrid.setWidget(rowIndex, 0, createValueWidget(newValue));
Widget widget = createValueWidget(newValue);
widget.ensureDebugId("ValueWidget");
expandedValuesGrid.setWidget(rowIndex, 0, widget);
expandedValuesGrid.setWidget(rowIndex, 1, removeButton);
}
@@ -74,7 +74,10 @@ public class StringListEditorComposite extends ListEditorComposite<String> {
@Override
protected Widget createAddWidget() {
final SuggestBox inputBox = new SuggestBox(inputOracle);
inputBox.ensureDebugId("InputSuggestBox");
final Button addButton = new Button(stringMessages.add());
addButton.ensureDebugId("AddButton");
addButton.setEnabled(false);
addButton.addClickHandler(new ClickHandler() {
@@ -49,4 +49,10 @@ public class BySeleniumId extends By {
public List<WebElement> findElements(SearchContext context) {
return context.findElements(By.xpath(BY_SELENIUM_ID.format(new Object[] {this.id})));
}
@Override
public String toString() {
return "BySeleniumId: " + this.id;
}
}
@@ -0,0 +1,78 @@
package com.sap.sailing.selenium.pages.adminconsole;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.NoAlertPresentException;
import org.openqa.selenium.SearchContext;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebDriver.TargetLocator;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.FluentWait;
import com.google.common.base.Function;
import com.sap.sailing.selenium.pages.PageObject;
public class Actions {
private static final String ACTION_XPATH = ".//descendant::div[@name='%s']/img";
public static final String EDIT_ACTION = "ACTION_EDIT";
public static final String REMOVE_ACTION = "ACTION_REMOVE";
public static final String EDIT_SCORES_ACTION = "ACTION_EDIT_SCORES";
public static final String CONFIGURE_URL_ACTION = "ACTION_CONFIGURE_URL";
public static final String UNLINK_RACE_ACTION = "ACTION_UNLINK";
public static final String REFRESH_RACE_ACTION = "ACTION_REFRESH_RACE";
public static WebElement findEditAction(SearchContext context) {
return context.findElement(By.xpath(String.format(ACTION_XPATH, EDIT_ACTION)));
}
public static WebElement findRemoveAction(SearchContext context) {
return context.findElement(By.xpath(String.format(ACTION_XPATH, REMOVE_ACTION)));
}
public static WebElement findEditScoresAction(SearchContext context) {
return context.findElement(By.xpath(String.format(ACTION_XPATH, EDIT_SCORES_ACTION)));
}
public static WebElement findConfigureUrlAction(SearchContext context) {
return context.findElement(By.xpath(String.format(ACTION_XPATH, CONFIGURE_URL_ACTION)));
}
public static WebElement findUnlinkRaceAction(SearchContext context) {
return context.findElement(By.xpath(String.format(ACTION_XPATH, UNLINK_RACE_ACTION)));
}
public static WebElement findRefreshAction(SearchContext context) {
return context.findElement(By.xpath(String.format(ACTION_XPATH, REFRESH_RACE_ACTION)));
}
public static void acceptAlert(WebDriver driver) {
Alert alert = getAlert(driver);
alert.accept();
}
public static void dismissAlert(WebDriver driver) {
Alert alert = getAlert(driver);
alert.dismiss();
}
public static Alert getAlert(WebDriver driver) {
FluentWait<WebDriver> wait = PageObject.createFluentWait(driver, NoAlertPresentException.class);
Alert alert = wait.until(new Function<WebDriver, Alert>() {
@Override
public Alert apply(WebDriver driver) {
TargetLocator locator = driver.switchTo();
return locator.alert();
}
});
return alert;
}
}
@@ -184,6 +184,7 @@ public class AdminConsolePage extends HostPage {
}
// We have to determine the location where we have to click at the tab for the case its not completely visible.
// NOTE: We assume that the browser window is big enough to display at least 2 tabs!
org.openqa.selenium.interactions.Actions actions = new Actions(this.driver);
actions.moveToElement(tab, determineOffsetForClick(tab), 5);
actions.click();
@@ -5,43 +5,27 @@ 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.PageArea;
public class FlexibleLeaderboardCreateDialog extends PageArea {
@FindBy(how = BySeleniumId.class, using = "OkButton")
private WebElement okButton;
@FindBy(how = BySeleniumId.class, using = "CancelButton")
private WebElement cancelButton;
@FindBy(how = BySeleniumId.class, using = "LeaderboardNameField")
private WebElement nameField;
@FindBy(how = BySeleniumId.class, using = "StatusLabel")
private WebElement statusLabel;
import com.sap.sailing.selenium.pages.common.DataEntryDialog;
public class FlexibleLeaderboardCreateDialog extends DataEntryDialog {
@FindBy(how = BySeleniumId.class, using = "NameTextBox")
private WebElement nameTextBox;
@FindBy(how = BySeleniumId.class, using = "DisplayNameTextBox")
private WebElement displayNameTextBox;
public FlexibleLeaderboardCreateDialog(WebDriver driver, WebElement element) {
super(driver, element);
}
public void setName(String name) {
this.nameField.clear();
this.nameField.sendKeys(name);
this.nameTextBox.clear();
this.nameTextBox.sendKeys(name);
}
public boolean isOkEnabled() {
return this.okButton.isEnabled();
}
public String getErrorMessage() {
return this.statusLabel.getText();
}
public void pressOk() {
this.okButton.click();
// Wait, since we create the flexible leader board
waitForAjaxRequests();
}
public void pressCancel() {
this.cancelButton.click();
public void setDisplayName(String name) {
this.displayNameTextBox.clear();
this.displayNameTextBox.sendKeys(name);
}
}
@@ -9,8 +9,16 @@ 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.PageArea;
import com.sap.sailing.selenium.test.gwt.widgets.CellTable;
import com.sap.sailing.selenium.pages.adminconsole.Actions;
import com.sap.sailing.selenium.pages.adminconsole.regatta.RegattaListComposite.RegattaDescriptor;
import com.sap.sailing.selenium.pages.gwt.CellTable;
import com.sap.sailing.selenium.pages.gwt.DataEntry;
import com.sap.sailing.selenium.pages.gwt.GenericCellTable;
public class LeaderboardConfigurationPanel extends PageArea {
@FindBy(how = BySeleniumId.class, using = "CreateFlexibleLeaderboardButton")
@@ -19,62 +27,123 @@ public class LeaderboardConfigurationPanel extends PageArea {
@FindBy(how = BySeleniumId.class, using = "CreateRegattaLeaderboardButton")
private WebElement createRegattaLeaderboardButton;
@FindBy(how = BySeleniumId.class, using = "AvailableLeaderboardsTable")
private WebElement availableLeaderboardsTable;
@FindBy(how = BySeleniumId.class, using = "RemoveLeaderboardsButton")
private WebElement removeLeaderboardsButton;
@FindBy(how = BySeleniumId.class, using = "LeaderboardsFilterTextBox")
private WebElement leaderboardsFilterTextBox;
@FindBy(how = BySeleniumId.class, using = "LeaderboardsCellTable")
private WebElement leaderboardsCellTable;
@FindBy(how = BySeleniumId.class, using = "LeaderboardDetailsPanel")
private WebElement leaderboardDetailsPanel;
public LeaderboardConfigurationPanel(WebDriver driver, WebElement element) {
super(driver, element);
}
public List<String> getAvailableLeaderboards() {
List<String> leaderboards = new ArrayList<>();
CellTable table = getLeaderboardTable();
List<WebElement> rows = table.getRows();
for(WebElement row : rows) {
WebElement name = row.findElement(By.xpath(".//td/div/a"));
leaderboards.add(name.getText());
}
return leaderboards;
}
public void deleteLeaderboard(String leaderboard) {
CellTable table = getLeaderboardTable();
List<WebElement> rows = table.getRows();
for(WebElement row : rows) {
WebElement name = row.findElement(By.xpath(".//td/div/a"));
if(!leaderboard.equals(name.getText()))
continue;
WebElement removeAction = row.findElement(By.xpath(".//td/div/div[@title='Remove']/img"));
removeAction.click();
this.driver.switchTo().alert().accept();
}
}
public FlexibleLeaderboardCreateDialog startCreatingFlexibleLeaderboard() {
this.createFlexibleLeaderboardButton.click();
// Wait, since we trigger an AJAX-request to get the available events
waitForAjaxRequests();
WebElement dialog = findElementBySeleniumId(this.driver, "CreateFlexibleLeaderboardDialog");
WebElement dialog = findElementBySeleniumId(this.driver, "FlexibleLeaderboardCreateDialog");
return new FlexibleLeaderboardCreateDialog(this.driver, dialog);
}
private CellTable getLeaderboardTable() {
return new CellTable(this.driver, this.availableLeaderboardsTable);
// TODO: Extend with display name, scoring system, event, course area and discars
public void createFlexibleLeaderboard(String name) {
FlexibleLeaderboardCreateDialog dialog = startCreatingFlexibleLeaderboard();
dialog.setName(name);
dialog.pressOk();
}
protected void initElements() {
super.initElements();
public RegattaLeaderboardCreateDialog startCreatingRegattaLeaderboard() {
this.createRegattaLeaderboardButton.click();
//this.availableLeaderboardsTable = new CellTable(this.driver, findElementBySeleniumId("AvailableLeaderboardsTable"));
WebElement dialog = findElementBySeleniumId(this.driver, "RegattaLeaderboardCreateDialog");
return new RegattaLeaderboardCreateDialog(this.driver, dialog);
}
public void createRegattaLeaderboard(RegattaDescriptor regatta) {
RegattaLeaderboardCreateDialog dialog = startCreatingRegattaLeaderboard();
dialog.selectRegatta(regatta);
dialog.pressOk();
}
public void deleteLeaderboard(String leaderboard) {
DataEntry entry = findLeaderboard(leaderboard);
if(entry != null) {
WebElement removeAction = Actions.findRemoveAction(entry.getWebElement());
removeAction.click();
Actions.acceptAlert(this.driver);
waitForAjaxRequests();
}
}
public String getLeaderboardURL(String leaderboard) {
DataEntry entry = findLeaderboard(leaderboard);
if(entry != null) {
WebElement link = entry.getWebElement().findElement(By.xpath(".//td/div/a"));
return link.getAttribute("href");
}
return null;
}
public List<String> getAvailableLeaderboards() {
List<String> leaderboards = new ArrayList<>();
CellTable<DataEntry> table = getLeaderboardTable();
List<DataEntry> entries = table.getEntries();
for(DataEntry entry : entries) {
leaderboards.add(entry.getColumnContent(0));
}
return leaderboards;
}
public LeaderboardDetailsPanel getLeaderboardDetails(String leaderboard) {
CellTable<DataEntry> table = getLeaderboardTable();
List<DataEntry> entries = table.getEntries();
for(DataEntry entry : entries) {
String name = entry.getColumnContent(0);
if(leaderboard.equals(name)) {
entry.select();
return new LeaderboardDetailsPanel(this.driver, this.leaderboardDetailsPanel);
}
}
return null;
}
private CellTable<DataEntry> getLeaderboardTable() {
return new GenericCellTable<>(this.driver, this.leaderboardsCellTable, DataEntry.class);
}
private DataEntry findLeaderboard(String leaderboard) {
CellTable<DataEntry> table = getLeaderboardTable();
for(DataEntry entry : table.getEntries()) {
String name = entry.getColumnContent(0);
if(leaderboard.equals(name)) {
return entry;
}
}
return null;
}
}
@@ -0,0 +1,203 @@
package com.sap.sailing.selenium.pages.adminconsole.leaderboard;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
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.PageArea;
import com.sap.sailing.selenium.pages.adminconsole.Actions;
import com.sap.sailing.selenium.pages.adminconsole.tracking.TrackedRacesList.TrackedRaceDescriptor;
import com.sap.sailing.selenium.pages.gwt.CellTable;
import com.sap.sailing.selenium.pages.gwt.DataEntry;
import com.sap.sailing.selenium.pages.gwt.GenericCellTable;
public class LeaderboardDetailsPanel extends PageArea {
public static class RaceDescriptor {
private final String name;
private final String fleet;
private final boolean medalRace;
private final boolean linked;
private final double factor;
public RaceDescriptor(String name, String fleet, boolean medalRace, boolean linked, double factor) {
this.name = name;
this.fleet = fleet;
this.medalRace = medalRace;
this.linked = linked;
this.factor = factor;
}
public String getName() {
return this.name;
}
public String getFleet() {
return this.fleet;
}
public boolean isMedalRace() {
return this.medalRace;
}
public boolean isLinked() {
return this.linked;
}
public double getFactor() {
return this.factor;
}
@Override
public int hashCode() {
return Objects.hash(this.name, this.fleet);
}
@Override
public boolean equals(Object object) {
if (this == object)
return true;
if (object == null)
return false;
if (getClass() != object.getClass())
return false;
RaceDescriptor other = (RaceDescriptor) object;
if(!Objects.equals(this.name, other.name))
return false;
if(!Objects.equals(this.fleet, other.fleet))
return false;
return true;
}
}
@FindBy(how = BySeleniumId.class, using = "RacesCellTable")
private WebElement racesCellTable;
@FindBy(how = BySeleniumId.class, using = "TrackedRacesListComposite")
private WebElement trackedRacesListComposite;
public LeaderboardDetailsPanel(WebDriver driver, WebElement element) {
super(driver, element);
}
public List<RaceDescriptor> getRaces() {
List<RaceDescriptor> result = new ArrayList<>();
CellTable<DataEntry> racesTable = getRacesTable();
for(DataEntry entry : racesTable.getEntries()) {
String name = entry.getColumnContent(0);
String fleet = entry.getColumnContent(1);
//String medalRace = entry.getColumnContent(2);
//String linked = entry.getColumnContent(3);
//String factor = entry.getColumnContent(4);
result.add(new RaceDescriptor(name, fleet, false, false, 0.0));
}
return result;
}
// public RaceEditDialog editRace(RaceDescriptor race) {
//
// WebElement action = Actions.findEditAction(findRace(race));
//
// action.click();
// }
public void unlinkRace(RaceDescriptor race) {
DataEntry entry = findRace(race);
if(entry != null) {
WebElement action = Actions.findUnlinkRaceAction(entry.getWebElement());
action.click();
}
}
public void refreshRaceLog(RaceDescriptor race) {
DataEntry entry = findRace(race);
if(entry != null) {
WebElement action = Actions.findRefreshAction(entry.getWebElement());
action.click();
// QUESTION [D049941]: What else can happen?
Actions.acceptAlert(this.driver);
}
}
public void linkRace(RaceDescriptor race, TrackedRaceDescriptor tracking) {
DataEntry raceRow = findRace(race);
DataEntry trackingRow = findTracking(tracking);
if(raceRow == null || trackingRow == null) {
}
raceRow.select();
trackingRow.select();
}
private DataEntry findRace(RaceDescriptor race) {
CellTable<DataEntry> racesTable = getRacesTable();
for(DataEntry entry : racesTable.getEntries()) {
String name = entry.getColumnContent(0);
String fleet = entry.getColumnContent(1);
//String medalRace = entry.getColumnContent(2);
//String linked = entry.getColumnContent(3);
//String factor = entry.getColumnContent(4);
RaceDescriptor descriptor = new RaceDescriptor(name, fleet, false, false, 0.0);
if(descriptor.equals(race))
return entry;
}
return null;
}
private DataEntry findTracking(TrackedRaceDescriptor tracking) {
CellTable<DataEntry> trackingTable = getTrackedRacesTable();
for(DataEntry entry : trackingTable.getEntries()) {
String regatta = entry.getColumnContent(0);
String boatClass = entry.getColumnContent(1);
String raceName = entry.getColumnContent(2);
TrackedRaceDescriptor descriptor = new TrackedRaceDescriptor(regatta, boatClass, raceName);
if(descriptor.equals(tracking))
return entry;
}
return null;
}
private CellTable<DataEntry> getRacesTable() {
return new GenericCellTable<>(this.driver, this.racesCellTable, DataEntry.class);
}
private CellTable<DataEntry> getTrackedRacesTable() {
WebElement table = findElementBySeleniumId(this.trackedRacesListComposite, "TrackedRacesCellTable");
return new GenericCellTable<>(this.driver, table, DataEntry.class);
}
}
@@ -0,0 +1,94 @@
package com.sap.sailing.selenium.pages.adminconsole.leaderboard;
import static com.sap.sailing.selenium.pages.gwt.query.Alias.$;
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.PageArea;
import com.sap.sailing.selenium.pages.adminconsole.Actions;
import com.sap.sailing.selenium.pages.gwt.CellTable;
import com.sap.sailing.selenium.pages.gwt.DataEntry;
import com.sap.sailing.selenium.pages.gwt.GenericCellTable;
import com.sap.sailing.selenium.pages.gwt.query.Alias;
import com.sap.sailing.selenium.pages.gwt.query.TableQuery;
public class LeaderboardGroupConfigurationPanel extends PageArea {
@FindBy(how = BySeleniumId.class, using = "CreateLeaderboardGroupButton")
private WebElement createLeaderboardGroupButton;
@FindBy(how = BySeleniumId.class, using = "RemoveLeaderboardsButton")
private WebElement removeButton;
@FindBy(how = BySeleniumId.class, using = "LeaderboardGroupsCellTable")
private WebElement leaderboardGroupsTable;
@FindBy(how = BySeleniumId.class, using = "LeaderboardGroupDetailsPanel")
private WebElement leaderboardGroupDetailsPanel;
public LeaderboardGroupConfigurationPanel(WebDriver driver, WebElement element) {
super(driver, element);
}
public LeaderboardGroupCreateDialog startCreatingLeaderboardGroup() {
this.createLeaderboardGroupButton.click();
WebElement dialog = findElementBySeleniumId(this.driver, "LeaderboardGroupCreateDialog");
return new LeaderboardGroupCreateDialog(this.driver, dialog);
}
public void createLeaderboardGroup(String name, String description) {
LeaderboardGroupCreateDialog dialog = startCreatingLeaderboardGroup();
dialog.setName(name);
dialog.setDescription(description);
dialog.pressOk();
}
public CellTable<DataEntry> getLeaderboardGroupsTable() {
return new GenericCellTable<DataEntry>(this.driver, this.leaderboardGroupsTable, DataEntry.class);
}
public void deleteLeaderboardGroup(String name) {
DataEntry result = findLeaderboardGroup(name);
if (result != null) {
Actions.findRemoveAction(result.getWebElement()).click();
Actions.acceptAlert(this.driver);
waitForAjaxRequests();
}
}
public LeaderboardGroupDetailsPanel getLeaderboardGroupDetails(String name) {
DataEntry result = findLeaderboardGroup(name);
if (result != null) {
result.select();
}
return getLeaderboardGroupDetails();
}
public LeaderboardGroupDetailsPanel getLeaderboardGroupDetails() {
if(!this.leaderboardGroupDetailsPanel.isDisplayed()) {
return null;
}
return new LeaderboardGroupDetailsPanel(this.driver, this.leaderboardGroupDetailsPanel);
}
private DataEntry findLeaderboardGroup(String name) {
CellTable<DataEntry> table = getLeaderboardGroupsTable();
final DataEntry alias = Alias.alias(DataEntry.class);
TableQuery<DataEntry> query = new TableQuery<>();
query.from(table)
.where(
$(alias.getColumnContent("Name")).eq(name)
);
return query.firstResult();
}
}
@@ -0,0 +1,32 @@
package com.sap.sailing.selenium.pages.adminconsole.leaderboard;
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.DataEntryDialog;
public class LeaderboardGroupCreateDialog extends DataEntryDialog {
@FindBy(how = BySeleniumId.class, using = "NameTextBox")
private WebElement nameField;
@FindBy(how = BySeleniumId.class, using = "DescriptionTextArea")
private WebElement descriptionField;
public LeaderboardGroupCreateDialog(WebDriver driver, WebElement element) {
super(driver, element);
}
public void setName(String name) {
this.nameField.clear();
this.nameField.sendKeys(name);
}
public void setDescription(String description) {
this.descriptionField.clear();
this.descriptionField.sendKeys(description);
}
}
@@ -0,0 +1,57 @@
package com.sap.sailing.selenium.pages.adminconsole.leaderboard;
import static com.sap.sailing.selenium.pages.gwt.query.Alias.$;
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.PageArea;
import com.sap.sailing.selenium.pages.gwt.CellTable;
import com.sap.sailing.selenium.pages.gwt.DataEntry;
import com.sap.sailing.selenium.pages.gwt.GenericCellTable;
import com.sap.sailing.selenium.pages.gwt.query.Alias;
import com.sap.sailing.selenium.pages.gwt.query.TableQuery;
public class LeaderboardGroupDetailsPanel extends PageArea {
@FindBy(how = BySeleniumId.class, using = "LeaderboardsFilterTextBox")
private WebElement leaderboardsFilterTextBox;
@FindBy(how = BySeleniumId.class, using = "LeaderboardsCellTable")
private WebElement leaderboardsCellTable;
@FindBy(how = BySeleniumId.class, using = "RefreshLeaderboardsButton")
private WebElement refreshLeaderboardsButton;
public LeaderboardGroupDetailsPanel(WebDriver driver, WebElement element) {
super(driver, element);
}
public void refreshLeaderboards() {
this.refreshLeaderboardsButton.click();
}
public CellTable<DataEntry> getLeaderboardsTable() {
return new GenericCellTable<DataEntry>(this.driver, this.leaderboardsCellTable, DataEntry.class);
}
public DataEntry findLeaderboardEntry(String name) {
CellTable<DataEntry> table = getLeaderboardsTable();
DataEntry alias = Alias.alias(DataEntry.class);
TableQuery<DataEntry> query = new TableQuery<>();
query.from(table).
where($(alias.getColumnContent("Leaderboard Name")).eq(name));
return query.firstResult();
}
public void filterLeaderboards(String filterText) {
this.leaderboardsFilterTextBox.clear();
this.leaderboardsFilterTextBox.sendKeys(filterText);
}
}
@@ -0,0 +1,29 @@
package com.sap.sailing.selenium.pages.adminconsole.leaderboard;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.Select;
import com.sap.sailing.selenium.core.BySeleniumId;
import com.sap.sailing.selenium.core.FindBy;
import com.sap.sailing.selenium.pages.adminconsole.regatta.RegattaListComposite.RegattaDescriptor;
import com.sap.sailing.selenium.pages.common.DataEntryDialog;
public class RegattaLeaderboardCreateDialog extends DataEntryDialog {
@FindBy(how = BySeleniumId.class, using = "NameTextBox")
private WebElement nameTextField;
@FindBy(how = BySeleniumId.class, using = "RegattaListBox")
private WebElement regattaDropDown;
public RegattaLeaderboardCreateDialog(WebDriver driver, WebElement element) {
super(driver, element);
}
public void selectRegatta(RegattaDescriptor regatta) {
Select dropDown = new Select(this.regattaDropDown);
dropDown.selectByValue(regatta.toString());
}
}
@@ -0,0 +1,51 @@
package com.sap.sailing.selenium.pages.adminconsole.regatta;
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.DataEntryDialog;
public class RegattaCreateDialog extends DataEntryDialog {
@FindBy(how = BySeleniumId.class, using = "RegattaNameTextField")
private WebElement regattaNameTextField;
@FindBy(how = BySeleniumId.class, using = "BoatClassTextField")
private WebElement boatClassTextField;
// @FindBy(how = BySeleniumId.class, using = "ScoringSchemeListBox")
// private WebElement scoringSystemDropDown;
// @FindBy(how = BySeleniumId.class, using = "EventListBox")
// private WebElement eventDropDown;
// @FindBy(how = BySeleniumId.class, using = "CourseAreaListBox")
// private WebElement courseAreaDropDown;
@FindBy(how = BySeleniumId.class, using = "AddSeriesButton")
private WebElement addSeriesButton;
public RegattaCreateDialog(WebDriver driver, WebElement element) {
super(driver, element);
}
public void setRegattaName(String name) {
this.regattaNameTextField.clear();
this.regattaNameTextField.sendKeys(name);
}
public void setBoatClass(String boatClass) {
this.boatClassTextField.clear();
this.boatClassTextField.sendKeys(boatClass);
}
// TODO: Scoring System, Event and Course Area
public SeriesCreateDialog addSeries() {
this.addSeriesButton.click();
WebElement dialog = findElementBySeleniumId(this.driver, "SeriesCreateDialog");
return new SeriesCreateDialog(this.driver, dialog);
}
}
@@ -0,0 +1,102 @@
package com.sap.sailing.selenium.pages.adminconsole.regatta;
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.PageArea;
import com.sap.sailing.selenium.pages.adminconsole.Actions;
import com.sap.sailing.selenium.pages.gwt.CellTable;
import com.sap.sailing.selenium.pages.gwt.DataEntry;
import com.sap.sailing.selenium.pages.gwt.GenericCellTable;
// TODO: Implement if needed
public class RegattaDetailsComposite extends PageArea {
@FindBy(how = BySeleniumId.class, using = "NameLabel")
private WebElement regattaNameLabel;
@FindBy(how = BySeleniumId.class, using = "BoatClassLabel")
private WebElement boatClassLabel;
@FindBy(how = BySeleniumId.class, using = "CourseAreaLabel")
private WebElement courseAreaLabel;
@FindBy(how = BySeleniumId.class, using = "ScoringSystemLabel")
private WebElement scoringSystemLabel;
@FindBy(how = BySeleniumId.class, using = "SeriesCellTable")
private WebElement seriesTable;
public RegattaDetailsComposite(WebDriver driver, WebElement element) {
super(driver, element);
}
public String getRegattaName() {
return this.regattaNameLabel.getText();
}
public String getBoatClass() {
return this.boatClassLabel.getText();
}
public String getCouresArea() {
return this.courseAreaLabel.getText();
}
public String getScoringSystem() {
return this.scoringSystemLabel.getText();
}
// public void getSeries() {
//
// }
public SeriesEditDialog editSeries(String series) {
DataEntry entry = findSeries(series);
if(entry != null) {
WebElement action = Actions.findEditAction(entry.getWebElement());
action.click();
WebElement dialog = findElementBySeleniumId(this.driver, "SeriesEditDialog");
return new SeriesEditDialog(this.driver, dialog);
}
return null;
}
public void deleteSeries(String series) {
DataEntry entry = findSeries(series);
if(entry != null) {
WebElement removeAction = Actions.findRemoveAction(entry.getWebElement());
removeAction.click();
Actions.acceptAlert(this.driver);
//waitForAjaxRequests();
}
}
private DataEntry findSeries(String series) {
CellTable<DataEntry> table = getSeriesTable();
for(DataEntry entry : table.getEntries()) {
String name = entry.getColumnContent(0);
if(series.equals(name))
return entry;
}
return null;
}
private CellTable<DataEntry> getSeriesTable() {
return new GenericCellTable<>(this.driver, this.seriesTable, DataEntry.class);
}
}
@@ -0,0 +1,14 @@
package com.sap.sailing.selenium.pages.adminconsole.regatta;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import com.sap.sailing.selenium.pages.PageArea;
public class RegattaEditDialog extends PageArea {
public RegattaEditDialog(WebDriver driver, WebElement element) {
super(driver, element);
}
}
@@ -0,0 +1,168 @@
package com.sap.sailing.selenium.pages.adminconsole.regatta;
import java.util.LinkedList;
import java.util.List;
import java.util.Objects;
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.PageArea;
import com.sap.sailing.selenium.pages.adminconsole.Actions;
import com.sap.sailing.selenium.pages.gwt.CellTable;
import com.sap.sailing.selenium.pages.gwt.CellTable.SortingOrder;
import com.sap.sailing.selenium.pages.gwt.DataEntry;
import com.sap.sailing.selenium.pages.gwt.GenericCellTable;
public class RegattaListComposite extends PageArea {
public static class RegattaDescriptor {
private final String name;
private final String boatClass;
// TODO [D049941]: Mark as a bug and remove this method as soon as possible
public static RegattaDescriptor fromString(String name) {
if(name == null || name.isEmpty())
return null;
int openingBrace = name.lastIndexOf('(');
int closingBrace = name.lastIndexOf(')');
return new RegattaDescriptor(name.substring(0, openingBrace - 1),
name.substring(openingBrace + 1, closingBrace));
}
public RegattaDescriptor(String name, String boatClass) {
this.name = name;
this.boatClass = boatClass;
}
public String getName() {
return this.name;
}
public String getBoatClass() {
return this.boatClass;
}
public String toString() {
return this.name + " (" + this.boatClass + ")";
}
@Override
public int hashCode() {
return Objects.hash(this.name, this.boatClass);
}
@Override
public boolean equals(Object object) {
if (this == object)
return true;
if (object == null)
return false;
if (getClass() != object.getClass())
return false;
RegattaDescriptor other = (RegattaDescriptor) object;
if (!Objects.equals(this.boatClass, other.boatClass))
return false;
if (!Objects.equals(this.name, other.name))
return false;
return true;
}
}
@FindBy(how = BySeleniumId.class, using = "FilterRegattasTextField")
private WebElement RegattasFilterTextField;
@FindBy(how = BySeleniumId.class, using = "NoRegattasLabel")
private WebElement noRegattasLabel;
@FindBy(how = BySeleniumId.class, using = "RegattasCellTable")
private WebElement regattasTable;
public RegattaListComposite(WebDriver driver, WebElement element) {
super(driver, element);
}
public void sortByRegattaName(SortingOrder order) {
sortRegattaList(0, order);
}
public void sortByBoatClass(SortingOrder order) {
sortRegattaList(1, order);
}
public List<RegattaDescriptor> getRegattas() {
List<RegattaDescriptor> descriptors = new LinkedList<>();
CellTable<DataEntry> table = getRegattasTable();
for(DataEntry entry : table.getEntries()) {
String name = entry.getColumnContent(0);
String boatClass = entry.getColumnContent(1);
descriptors.add(new RegattaDescriptor(name, boatClass));
}
return descriptors;
}
public void selectRegatta(RegattaDescriptor regatta) {
DataEntry entry = findRegatta(regatta);
if(entry != null) {
entry.select();
}
}
// public EditRegattaDialog editRegatta(RegattaDescriptor regatta) {
//
// }
public void removeRegatta(RegattaDescriptor regatta) {
DataEntry entry = findRegatta(regatta);
if(entry != null) {
WebElement action = Actions.findRemoveAction(entry.getWebElement());
action.click();
waitForAjaxRequests();
Actions.acceptAlert(this.driver);
}
}
private DataEntry findRegatta(RegattaDescriptor regatta) {
CellTable<DataEntry> table = getRegattasTable();
for(DataEntry entry : table.getEntries()) {
String name = entry.getColumnContent(0);
// String boatClass = columns.getColumnContent(1);
//
// if(regatta.equals(new RegattaDescriptor(name, boatClass)))
// return row;
if(regatta.equals(RegattaDescriptor.fromString(name)))
return entry;
}
return null;
}
private void sortRegattaList(int column, SortingOrder order) {
CellTable<DataEntry> table = getRegattasTable();
table.sortByColumn(column, order);
}
private CellTable<DataEntry> getRegattasTable() {
return new GenericCellTable<>(this.driver, this.regattasTable, DataEntry.class);
}
}
@@ -0,0 +1,89 @@
package com.sap.sailing.selenium.pages.adminconsole.regatta;
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.PageArea;
import com.sap.sailing.selenium.pages.adminconsole.regatta.RegattaListComposite.RegattaDescriptor;
public class RegattaStructureManagementPanel extends PageArea {
public static final String DEFAULT_SERIES_NAME = "Default"; //$NON-NLS-1$
@FindBy(how = BySeleniumId.class, using = "AddRegattaButton")
WebElement addRegattaButton;
@FindBy(how = BySeleniumId.class, using = "RemoveRegattaButton")
WebElement removeRegattaButton;
@FindBy(how = BySeleniumId.class, using = "RegattaListComposite")
WebElement regattaList;
@FindBy(how = BySeleniumId.class, using = "RegattaDetailsComposite")
WebElement regattaDetails;
public RegattaStructureManagementPanel(WebDriver driver, WebElement element) {
super(driver, element);
}
public RegattaCreateDialog startRegattaCreation() {
this.addRegattaButton.click();
WebElement dialog = findElementBySeleniumId(this.driver, "RegattaCreateDialog"); //$NON-NLS-1$
return new RegattaCreateDialog(this.driver, dialog);
}
/**
* <p>Creates a regatta with 1 series (named "Default").</p>
*
* @param regatta
*/
public void createRegatta(RegattaDescriptor regatta) {
RegattaCreateDialog createRegattaDialog = startRegattaCreation();
createRegattaDialog.setRegattaName(regatta.getName());
createRegattaDialog.setBoatClass(regatta.getBoatClass());
SeriesCreateDialog addSeriesDialog = createRegattaDialog.addSeries();
addSeriesDialog.setSeriesName(DEFAULT_SERIES_NAME);
addSeriesDialog.pressOk();
// QUESTION: How do we handle an error (here or in the dialog)?
createRegattaDialog.pressOk();
}
public void removeRegatta(RegattaDescriptor regatta) {
// Select the regatta and click the remove button
}
public void removeRegattas(List<RegattaDescriptor> regattas) {
// Select all regattas and click the remove button
}
public RegattaListComposite getRegattaList() {
return new RegattaListComposite(this.driver, this.regattaList);
}
public void selectRegatta(RegattaDescriptor regatta) {
}
public RegattaDetailsComposite getRegattaDetails(RegattaDescriptor regatta) {
RegattaListComposite regattaList = getRegattaList();
regattaList.selectRegatta(regatta);
return getRegattaDetails();
}
public RegattaDetailsComposite getRegattaDetails() {
if(this.regattaDetails.isDisplayed())
return new RegattaDetailsComposite(this.driver, this.regattaDetails);
return null;
}
}
@@ -0,0 +1,40 @@
package com.sap.sailing.selenium.pages.adminconsole.regatta;
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.DataEntryDialog;
public class SeriesCreateDialog extends DataEntryDialog {
@FindBy(how = BySeleniumId.class, using = "NameTextField")
private WebElement seriesNameTextField;
// @FindBy(how = BySeleniumId.class, using = "MedalSeriesCheckbox")
// private WebElement medalSeriesCheckbox;
// @FindBy(how = BySeleniumId.class, using = "StartsWithZeroScoreCheckbox")
// private WebElement startsWithZeroScoreCheckbox;
// @FindBy(how = BySeleniumId.class, using = "StartsWithNonDiscardableCarryForwardCheckbox")
// private WebElement startsWithNonDiscardableCarryForwardCheckbox;
// @FindBy(how = BySeleniumId.class, using = "DefinesResultDiscardingRulesCheckbox")
// private WebElement definesResultDiscardingRulesCheckbox;
// @FindBy(how = BySeleniumId.class, using = "FleetListEditorComposite")
// private WebElement fleetsPanel;
public SeriesCreateDialog(WebDriver driver, WebElement element) {
super(driver, element);
}
public void setSeriesName(String name) {
this.seriesNameTextField.clear();
this.seriesNameTextField.sendKeys(name);
}
// TODO: Checkboxes and Fleets
}
@@ -0,0 +1,74 @@
package com.sap.sailing.selenium.pages.adminconsole.regatta;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.Select;
import com.sap.sailing.selenium.core.BySeleniumId;
import com.sap.sailing.selenium.core.FindBy;
import com.sap.sailing.selenium.pages.common.DataEntryDialog;
public class SeriesEditDialog extends DataEntryDialog {
@FindBy(how = BySeleniumId.class, using = "MedalSeriesCheckbox")
private WebElement medalSeriesCheckbox;
@FindBy(how = BySeleniumId.class, using = "StartsWithZeroScoreCheckbox")
private WebElement startsWithZeroScoreCheckbox;
@FindBy(how = BySeleniumId.class, using = "StartsWithNonDiscardableCarryForwardCheckbox")
private WebElement startsWithNonDiscardableCarryForwardCheckbox;
@FindBy(how = BySeleniumId.class, using = "DefinesResultDiscardingRulesCheckbox")
private WebElement definesResultDiscardingRulesCheckbox;
@FindBy(how = BySeleniumId.class, using = "NumberOfRacesListBox")
private WebElement numberOfRacesDropDown;
@FindBy(how = BySeleniumId.class, using = "RaceNamePrefixTextBox")
private WebElement raceNamePrefixTextField;
@FindBy(how = BySeleniumId.class, using = "AddRacesButton")
private WebElement addRacesButton;
public SeriesEditDialog(WebDriver driver, WebElement element) {
super(driver, element);
}
public int getSetNumberOfRacesToAdd() {
Select select = new Select(this.numberOfRacesDropDown);
WebElement option = select.getFirstSelectedOption();
return Integer.parseInt(option.getAttribute("value"));
}
public void setSetNumberOfRacesToAdd(int races) {
Select select = new Select(this.numberOfRacesDropDown);
select.selectByValue(Integer.toString(races));
}
public String getRaceNamePrefix() {
return this.raceNamePrefixTextField.getText();
}
public void setRaceNamePrefix(String prefix) {
this.raceNamePrefixTextField.clear();
this.raceNamePrefixTextField.sendKeys(prefix);
}
public void pressAddRaces() {
this.addRacesButton.click();
}
public void addRaces(int races) {
setSetNumberOfRacesToAdd(races);
pressAddRaces();
}
public void addRaces(int races, String prefix) {
setSetNumberOfRacesToAdd(races);
setRaceNamePrefix(prefix);
pressAddRaces();
}
}
@@ -0,0 +1,201 @@
package com.sap.sailing.selenium.pages.adminconsole.tracking;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Objects;
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.PageArea;
import com.sap.sailing.selenium.pages.gwt.CellTable;
import com.sap.sailing.selenium.pages.gwt.DataEntry;
import com.sap.sailing.selenium.pages.gwt.GenericCellTable;
public class TrackedRacesList extends PageArea {
public enum Status {
LOADING,
TRACKING,
FINISHED,
UNKOWN;
public static Status fromString(String string) {
if (string != null && !string.isEmpty()) {
for (Status status : Status.values()) {
if (string.startsWith(status.name())) {
return status;
}
}
}
return UNKOWN;
}
}
public static class TrackedRaceDescriptor {
public String regatta;
public String boatClass;
public String race;
public TrackedRaceDescriptor(String regatta, String boatClass, String race) {
this.regatta = regatta;
this.boatClass = boatClass;
this.race = race;
}
@Override
public int hashCode() {
return Objects.hash(this.regatta, this.boatClass, this.race);
}
@Override
public boolean equals(Object object) {
if (this == object)
return true;
if (object == null)
return false;
if (getClass() != object.getClass())
return false;
TrackedRaceDescriptor other = (TrackedRaceDescriptor) object;
if(!Objects.equals(this.regatta, other.regatta))
return false;
if(!Objects.equals(this.boatClass, other.boatClass))
return false;
if(!Objects.equals(this.race, other.race))
return false;
return true;
}
}
@FindBy(how = BySeleniumId.class, using = "TrackedRacesFilterTextBox")
private WebElement trackedRacesFilterTextBox;
//@FindBy(how = BySeleniumId.class, using = "NoTrackedRacesLabel")
@FindBy(how = BySeleniumId.class, using = "TrackedRacesCellTable")
private WebElement trackedRacesTable;
@FindBy(how = BySeleniumId.class, using = "RefreshButton")
private WebElement refreshButton;
@FindBy(how = BySeleniumId.class, using = "RemoveRaceButton")
private WebElement removeButton;
@FindBy(how = BySeleniumId.class, using = "StopTrackingButton")
private WebElement stopTrackingButton;
@FindBy(how = BySeleniumId.class, using = "SetDelayToLiveButton")
private WebElement setDelayToLiveButton;
@FindBy(how = BySeleniumId.class, using = "ExportButton")
private WebElement exportButton;
//@FindBy(how = BySeleniumId.class, using = "ExportPopup")
protected TrackedRacesList(WebDriver driver, WebElement element) {
super(driver, element);
}
public void setFilterForTrackedRaces(String filter) {
this.trackedRacesFilterTextBox.clear();
this.trackedRacesFilterTextBox.sendKeys(filter);
}
public List<TrackedRaceDescriptor> getTrackedRaces() {
List<TrackedRaceDescriptor> descriptors = new LinkedList<>();
CellTable<DataEntry> table = getTrackedRacesTable();
for(DataEntry entry : table.getEntries()) {
String regatta = entry.getColumnContent(0);
String boatClass = entry.getColumnContent(1);
String race = entry.getColumnContent(2);
descriptors.add(new TrackedRaceDescriptor(regatta, boatClass, race));
}
return descriptors;
}
public Object getStatus(TrackedRaceDescriptor race) {
List<Status> status = getStatus(Arrays.asList(race));
return status.get(0);
}
public List<Status> getStatus(List<TrackedRaceDescriptor> races) {
List<Status> result = new ArrayList<>(Collections.<Status>nCopies(races.size(), null));
CellTable<DataEntry> table = getTrackedRacesTable();
for(DataEntry entry : table.getEntries()) {
String regatta = entry.getColumnContent(0);
String boatClass = entry.getColumnContent(1);
String race = entry.getColumnContent(2);
String status = entry.getColumnContent(6);
TrackedRaceDescriptor descriptor = new TrackedRaceDescriptor(regatta, boatClass, race);
if(races.contains(descriptor)) {
result.set(races.indexOf(descriptor), Status.fromString(status));
}
}
return result;
}
public void stopTracking(List<TrackedRaceDescriptor> races) {
}
public void remove(List<TrackedRaceDescriptor> races) {
}
public void refresh() {
this.refreshButton.click();
waitForAjaxRequests();
}
private CellTable<DataEntry> getTrackedRacesTable() {
return new GenericCellTable<>(this.driver, this.trackedRacesTable, DataEntry.class);
}
// private List<WebElement> getTrackedRaces(List<TrackedRaceDescriptor> races) {
// List<WebElement> result = new ArrayList<>(Collections.<WebElement>nCopies(races.size(), null));
//
// CellTable table = new CellTable(this.driver, this.trackedRacesTable);
// List<WebElement> rows = table.getRows();
// Iterator<WebElement> iterator = rows.iterator();
//
// while(iterator.hasNext()) {
// WebElement row = iterator.next();
//
// List<WebElement> columns = row.findElements(By.tagName("td"));
// String regatta = columns.get(0).getText();
// String boatClass = columns.get(1).getText();
// String race = columns.get(2).getText();
//
// TrackedRaceDescriptor descriptor = new TrackedRaceDescriptor(regatta, boatClass, race);
//
// if(races.contains(descriptor)) {
// result.add(row);
// }
// }
//
// return result;
// }
}
@@ -0,0 +1,21 @@
package com.sap.sailing.selenium.pages.adminconsole.tracking;
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.PageArea;
public class TrackedRacesManagementPanel extends PageArea {
@FindBy(how = BySeleniumId.class, using = "TrackedRacesListComposite")
private WebElement trackedRacesListCoposite;
public TrackedRacesManagementPanel(WebDriver driver, WebElement element) {
super(driver, element);
}
public TrackedRacesList getTrackedRacesList() {
return new TrackedRacesList(this.driver, this.trackedRacesListCoposite);
}
}
@@ -1,20 +1,28 @@
package com.sap.sailing.selenium.pages.adminconsole.tractrac;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Objects;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
//import org.openqa.selenium.support.FindBy;
//import org.openqa.selenium.support.How;
import org.openqa.selenium.support.ui.Select;
import com.sap.sailing.selenium.core.FindBy;
import com.sap.sailing.selenium.core.BySeleniumId;
import com.sap.sailing.selenium.pages.PageArea;
import com.sap.sailing.selenium.pages.adminconsole.regatta.RegattaListComposite.RegattaDescriptor;
import com.sap.sailing.selenium.pages.gwt.DataEntry;
import com.sap.sailing.selenium.pages.gwt.CellTable;
import com.sap.sailing.selenium.pages.gwt.GenericCellTable;
/**
* <p>The page object representing the TracTrac Events tab.</p>
*
@@ -22,24 +30,83 @@ import com.sap.sailing.selenium.pages.PageArea;
* D049941
*/
public class TracTracEventManagementPanel extends PageArea {
@FindBy(how = BySeleniumId.class, using = "JSONURL")
private WebElement jsonURLField;
public static class TrackableRaceDescriptor {
public final String eventName;
public final String raceName;
public final String boatClass;
//public Object startTime;
//public Object raceStatus;
public TrackableRaceDescriptor(String eventName, String raceName, String boatClass) {
this.eventName = eventName;
this.raceName = raceName;
this.boatClass = boatClass;
}
@Override
public int hashCode() {
return Objects.hash(this.boatClass, this.eventName, this.raceName);
}
@FindBy(how = BySeleniumId.class, using = "LiveURI")
private WebElement liveURIField;
@FindBy(how = BySeleniumId.class, using = "StoredURI")
private WebElement storedURIField;
@Override
public boolean equals(Object object) {
if (this == object)
return true;
if (object == null)
return false;
if (getClass() != object.getClass())
return false;
TrackableRaceDescriptor other = (TrackableRaceDescriptor) object;
if(!Objects.equals(this.boatClass, other.boatClass))
return false;
if(!Objects.equals(this.eventName, other.eventName))
return false;
if(!Objects.equals(this.raceName, other.raceName))
return false;
return true;
}
}
@FindBy(how = BySeleniumId.class, using = "ListRaces")
// TODO [D049941]: Prefix the Ids with the component (e.g. "Button")
@FindBy(how = BySeleniumId.class, using = "LiveURITextBox")
private WebElement liveURITextBox;
@FindBy(how = BySeleniumId.class, using = "StoredURITextBox")
private WebElement storedURITextBox;
@FindBy(how = BySeleniumId.class, using = "JsonURLTextBox")
private WebElement jsonURLTextBox;
@FindBy(how = BySeleniumId.class, using = "ListRacesButton")
private WebElement listRacesButton;
@FindBy(how = BySeleniumId.class, using = "FilterRaces")
private WebElement filterTrackableRacesField;
@FindBy(how = BySeleniumId.class, using = "AvailableRegattasListBox")
private WebElement availableRegattasListBox;
// private WebElement trackWindCheckBox;
// private WebElement correctWindCheckbox;
// private WebElement simulateWithNowCheckbox;
@FindBy(how = BySeleniumId.class, using = "TrackWindCheckBox")
private WebElement trackWindCheckBox;
@FindBy(how = BySeleniumId.class, using = "CorrectWindCheckBox")
private WebElement correctWindCheckBox;
@FindBy(how = BySeleniumId.class, using = "SimulateWithStartTimeNowCheckBox")
private WebElement simulateWithStartTimeNowCheckBox;
@FindBy(how = BySeleniumId.class, using = "TrackableRacesFilterTextBox")
private WebElement trackableRacesFilterTextBox;
@FindBy(how = BySeleniumId.class, using = "TrackableRacesCellTable")
private WebElement trackableRacesCellTable;
@FindBy(how = BySeleniumId.class, using = "StartTracking")
private WebElement startTrackingButton;
/**
* <p></p>
@@ -53,6 +120,7 @@ public class TracTracEventManagementPanel extends PageArea {
super(driver, element);
}
/**
* <p>Lists all available trackable races for the given URL. The list of the races can be obtained via
* {@link #getTrackableRaces()}.</p>
@@ -60,12 +128,28 @@ public class TracTracEventManagementPanel extends PageArea {
* @param url
* The URL for which the races are to list.
*/
public void listRaces(String url) {
liveURIField.clear();
storedURIField.clear();
jsonURLField.clear();
jsonURLField.sendKeys(url);
listRacesButton.click();
public void listTrackableRaces(String url) {
listTrackableRaces("", "", url); //$NON-NLS-1$//$NON-NLS-2$
}
/**
* <p>Lists all available trackable races for the given URL. The list of the races can be obtained via
* {@link #getTrackableRaces()}.</p>
*
* @param url
* The URL for which the races are to list.
*/
public void listTrackableRaces(String liveURI, String storedURI, String jsonURL) {
this.liveURITextBox.clear();
this.liveURITextBox.sendKeys(liveURI);
this.storedURITextBox.clear();
this.storedURITextBox.sendKeys(storedURI);
this.jsonURLTextBox.clear();
this.jsonURLTextBox.sendKeys(jsonURL);
this.listRacesButton.click();
waitForAjaxRequests();
}
@@ -77,33 +161,48 @@ public class TracTracEventManagementPanel extends PageArea {
* @return
* The list of all available trackable races.
*/
// QUESTION: Should we return something different instead of WebElements since it is not recommended to do so?
public List<WebElement> getTrackableRaces() {
WebElement availableRacesTabel = findElementBySeleniumId(this.context, "RacesTable"); //$NON-NLS-1$
List<WebElement> elements = availableRacesTabel.findElements(By.xpath("./tbody/tr")); //$NON-NLS-1$
Iterator<WebElement> iterator = elements.iterator();
public List<TrackableRaceDescriptor> getTrackableRaces() {
List<TrackableRaceDescriptor> descriptors = new LinkedList<>();
CellTable<DataEntry> table = getTrackableRacesTable();
while(iterator.hasNext()) {
WebElement element = iterator.next();
for(DataEntry entry : table.getEntries()) {
String event = entry.getColumnContent(0);
String race = entry.getColumnContent(1);
String boatClass = entry.getColumnContent(2);
if(!element.isDisplayed())
iterator.remove();
descriptors.add(new TrackableRaceDescriptor(event, race, boatClass));
}
return elements;
return descriptors;
}
// public List<String> getAvailableReggatasForTracking() {
//
// }
//
// public String getReggataForTracking() {
//
// }
//
// public void setReggataForTracking(String regatta) {
//
// }
public List<RegattaDescriptor> getAvailableReggatasForTracking() {
List<RegattaDescriptor> result = new ArrayList<>();
Select select = new Select(this.availableRegattasListBox);
for(WebElement option : select.getOptions()) {
RegattaDescriptor regatta = RegattaDescriptor.fromString(option.getAttribute("value"));
result.add(regatta);
}
return result;
}
public RegattaDescriptor getReggataForTracking() {
Select select = new Select(this.availableRegattasListBox);
WebElement option = select.getFirstSelectedOption();
RegattaDescriptor regatta = RegattaDescriptor.fromString(option.getAttribute("value"));
return regatta;
}
public void setReggataForTracking(RegattaDescriptor regatta) {
Select select = new Select(this.availableRegattasListBox);
select.selectByValue(regatta.toString());
}
/**
* <p>Sets the filter for the trackable races. After the filter is set you can obtain the new resulting list via
@@ -113,27 +212,49 @@ public class TracTracEventManagementPanel extends PageArea {
* The filter to apply to the trackable races.
*/
public void setFilterForTrackableRaces(String filter) {
this.filterTrackableRacesField.clear();
this.filterTrackableRacesField.sendKeys(filter);
this.trackableRacesFilterTextBox.clear();
this.trackableRacesFilterTextBox.sendKeys(filter);
}
// public void setTrackSettings(boolean trackWind, boolean correctWind, boolean simulateWithNow) {
// setSelection(this.trackWindCheckBox, trackWind);
// setSelection(this.correctWindCheckbox, correctWind);
// setSelection(this.simulateWithNowCheckbox, simulateWithNow);
// }
//
// public void startTrackingForRace() {
//
// }
//
// public void startTrackingForRaces() {
//
// }
//
// private void setSelection(WebElement checkbox, boolean selected) {
// WebElement input = checkbox.findElement(By.tagName("input"));
// if(input.isSelected() != selected)
// input.click();
// }
public void setTrackSettings(boolean trackWind, boolean correctWind, boolean simulateWithNow) {
setSelection(this.trackWindCheckBox, trackWind);
setSelection(this.correctWindCheckBox, correctWind);
setSelection(this.simulateWithStartTimeNowCheckBox, simulateWithNow);
}
public void startTrackingForRaces(List<TrackableRaceDescriptor> races) {
CellTable<DataEntry> table = getTrackableRacesTable();
List<DataEntry> entries = table.getEntries();
Iterator<DataEntry> iterator = entries.iterator();
while(iterator.hasNext()) {
DataEntry entry = iterator.next();
String event = entry.getColumnContent(0);
String race = entry.getColumnContent(1);
String boatClass = entry.getColumnContent(2);
TrackableRaceDescriptor descriptor = new TrackableRaceDescriptor(event, race, boatClass);
if(!races.contains(descriptor))
iterator.remove();
}
table.selectEntries(entries);
this.startTrackingButton.click();
waitForAjaxRequests();
}
private CellTable<DataEntry> getTrackableRacesTable() {
return new GenericCellTable<>(this.driver, this.trackableRacesCellTable, DataEntry.class);
}
private void setSelection(WebElement checkbox, boolean selected) {
WebElement input = checkbox.findElement(By.tagName("input"));
if(input.isSelected() != selected)
input.click();
}
}
@@ -0,0 +1,60 @@
package com.sap.sailing.selenium.pages.common;
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.PageArea;
public abstract class DataEntryDialog extends PageArea {
@FindBy(how = BySeleniumId.class, using = "StatusLabel")
private WebElement statusLabel;
@FindBy(how = BySeleniumId.class, using = "OkButton")
private WebElement okButton;
@FindBy(how = BySeleniumId.class, using = "CancelButton")
private WebElement cancelButton;
public DataEntryDialog(WebDriver driver, WebElement element) {
super(driver, element);
}
@Override
protected void verify() {
WebElement element = (WebElement) this.context;
String cssClasses = element.getAttribute("class");
if(!cssClasses.contains("gwt-DialogBox"))
throw new IllegalStateException("This is not a dialog");
}
public String getStatusMessage() {
if(this.statusLabel.isDisplayed())
return this.statusLabel.getText();
return null;
}
public boolean isOkButtonEnabled() {
return this.okButton.isEnabled();
}
public boolean isCancelButtonEnabled() {
return this.cancelButton.isEnabled();
}
// QUESTION: What should we do, if the button is not enabled?
public void pressOk() {
this.okButton.click();
// Wait, since we do a callback usually
waitForAjaxRequests();
}
public void pressCancel() {
this.cancelButton.click();
}
}
@@ -50,9 +50,9 @@ public abstract class CellTable<T extends DataEntry> extends PageArea {
private static final String SORTING_INDICATOR_XPATH = ".//div/div/img";
private static final String CELL_TABLE_CSS_CLASS = "GCKY0V4BDK"; //$NON-NLS-1$
private static final String CELL_TABLE_CSS_CLASS = "GJTB2DRDFQ"; //$NON-NLS-1$
protected static final String SELECTED_ROW_CSS_CLASS = "GCKY0V4BNJ"; //$NON-NLS-1$
protected static final String SELECTED_ROW_CSS_CLASS = "GJTB2DRDPP"; //$NON-NLS-1$
private static final String LOADING_ANIMATION_XPATH = ".//td/div/div/div/img";
@@ -0,0 +1,52 @@
package com.sap.sailing.selenium.pages.gwt;
import org.openqa.selenium.By.ByTagName;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import com.sap.sailing.selenium.core.FindBy;
import com.sap.sailing.selenium.pages.PageArea;
import com.sap.sailing.selenium.pages.common.CSSHelper;
public class CheckBox extends PageArea {
protected static final String CHECKBOX_TAG_NAME = "span"; //$NON-NLS-1$
private static final String CHECKBOX_CSS_CLASS = "gwt-CheckBox";
@FindBy(how = ByTagName.class, using = "input")
private WebElement checkbox;
@FindBy(how = ByTagName.class, using = "label")
private WebElement label;
public CheckBox(WebDriver driver, WebElement element) {
super(driver, element);
}
@Override
protected void verify() {
WebElement element = (WebElement) this.context;
String tagName = element.getTagName();
if(!CHECKBOX_TAG_NAME.equalsIgnoreCase(tagName) || !CSSHelper.hasCSSClass(element, CHECKBOX_CSS_CLASS))
throw new IllegalArgumentException("WebElement does not represent a CheckBox");
}
public boolean isEnabled() {
return this.checkbox.isEnabled();
}
public String getLabel() {
return this.label.getText();
}
public boolean isSelected() {
return this.checkbox.isSelected();
}
public void setSelected(boolean selected) {
if(selected != isSelected())
this.checkbox.click();
}
}
@@ -0,0 +1,95 @@
package com.sap.sailing.selenium.pages.leaderboard;
import org.openqa.selenium.By;
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.HostPage;
import com.sap.sailing.selenium.pages.common.CSSConstants;
import com.sap.sailing.selenium.pages.common.HTMLConstants;
/**
* <p>The page object representing the leaderboard.</p>
*
* @author
* D049941
*/
public class LeaderboardPage extends HostPage {
private static final String PAGE_TITLE = "SAP Sailing Analytics Leaderboard"; //$NON-NLS-1$
private static final String LEADERBOAR_PARAMTER_NAME = "name"; //$NON-NLS-1$
private static final String AUTO_REFRESH_ENABLED_IMAGE = "url(\"data:image/png;base64," + //$NON-NLS-1$
"iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAAR0lEQVR42mOoqan5T2vMMGoJxZZUV1fPB9IOWDC" + //$NON-NLS-1$
"ymgJ0eagY0T5pYMAC0NQ4YJF3GLVk1JJRS0YtGbVkSFhCr/pktI4fOEsA89uCDGg41QoAAAAASUVORK5CYII=\")"; //$NON-NLS-1$
private static final String AUTO_REFRESH_DISABLED_IMAGE = "url(\"data:image/png;base64," + //$NON-NLS-1$
"iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAAhElEQVR42mOoqan5T2vMMGoJVSyprq6eD6TX09o" + //$NON-NLS-1$
"nDQxAAKQDgBbep6klIFBfXy9QW1vbT1NLYKCqqsoAKH6eppbAADD4CoDy72lqCTQIFYhNGGRbAgPEJAyKLSEmYV" + //$NON-NLS-1$
"DFEhgAWpQwdH1C0ziheeqiaT6haY6nedlF01KYXvXJaB0/MJYAANIIBwANoTb3AAAAAElFTkSuQmCC\")"; //$NON-NLS-1$
/**
* <p>Goes to the specified leaderboard and returns the representing page object.</p>
*
* @param driver
* The web driver to use.
* @param root
* The context root of the application.
* @param leaderboard
* The name of the leaderboard.
* @return
* The page object for the administration console.
*/
public static LeaderboardPage goToPage(WebDriver driver, String root, String leaderboard) {
driver.get(root + "gwt/Leaderboard.html?" + getLeaderboard(leaderboard) + //$NON-NLS-1$
"&" + getGWTCodeServer()); //$NON-NLS-1$
return new LeaderboardPage(driver);
}
private static String getLeaderboard(String leaderboard) {
return LEADERBOAR_PARAMTER_NAME + "=" + leaderboard; //$NON-NLS-1$
}
@FindBy(how = BySeleniumId.class, using = "AutoRefreshToggleButton")
private WebElement autoRefreshToggleButton;
@FindBy(how = BySeleniumId.class, using = "LeaderboardTable")
private WebElement leaderboardTable;
private LeaderboardPage(WebDriver driver) {
super(driver);
}
public boolean isAutoRefreshEnabled() {
WebElement image = this.autoRefreshToggleButton.findElement(By.tagName(HTMLConstants.IMAGE_TAG_NAME));
String background = image.getCssValue(CSSConstants.CSS_BACKGROUND_IMAGE);
if(AUTO_REFRESH_ENABLED_IMAGE.equals(background))
return true;
if(AUTO_REFRESH_DISABLED_IMAGE.equals(background))
return false;
throw new RuntimeException("Can not determine auto refresh state"); //$NON-NLS-1$
}
public void setAutoRefreshEnabled(boolean enabled) {
if(isAutoRefreshEnabled() != enabled)
this.autoRefreshToggleButton.click();
}
/**
* <p>Verifies that the current page is the leaderboard by checking the title of the page.</p>
*/
@Override
protected void verify() {
if(!PAGE_TITLE.equals(this.driver.getTitle())) {
throw new IllegalStateException("This is not the leaderboard"); //$NON-NLS-1$
}
}
}
@@ -0,0 +1,65 @@
package com.sap.sailing.selenium.pages.leaderboard;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import com.sap.sailing.selenium.pages.gwt.CellTable;
import com.sap.sailing.selenium.pages.gwt.DataEntry;
import com.sap.sailing.selenium.pages.leaderboard.LeaderboardTable.LeaderboardEntry;
public class LeaderboardTable extends CellTable<LeaderboardEntry> {
public class LeaderboardEntry extends DataEntry {
private static final String TOTAL_RANK = "Total rank";
private static final String COMPETITOR = "Competitor";
private static final String NAME = "Name";
protected LeaderboardEntry(WebElement element) {
super(LeaderboardTable.this, element);
}
public String getDescriptor() {
return getCompetitor();
}
public int getTotalRank() {
return Integer.parseInt(getColumnContent(TOTAL_RANK));
}
public String getCompetitor() {
return getColumnContent(COMPETITOR);
}
public String getName() {
return getColumnContent(NAME);
}
// public int getTotalSailedDistance() {
// }
// public void getAverageSpeedOverGround() {
// }
// public void getMaximumSpeedOverGround() {
// }
// public int getTotalDownwindTime() {
// }
// public int getTotalUpwindTime() {
// }
// public int getTotalReachingLegsTime() {
// }
// public int getTotalSailingTime() {
// }
// public int getTotalPoints() {
// }
}
public LeaderboardTable(WebDriver driver, WebElement element) {
super(driver, element);
}
@Override
protected LeaderboardEntry createDataEntry(WebElement element) {
return new LeaderboardEntry(element);
}
}
@@ -3,6 +3,7 @@ package com.sap.sailing.selenium.test.adminconsole;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import org.junit.Before;
import org.junit.Test;
import com.sap.sailing.selenium.pages.adminconsole.AdminConsolePage;
@@ -17,28 +18,27 @@ import com.sap.sailing.selenium.test.AbstractSeleniumTest;
* D049941
*/
public class TestLeaderboardCreation extends AbstractSeleniumTest {
// @Before
// public void clearDatabase() {
// DatabaseHelper.dropDatabase();
// }
@Before
public void clearDatabase() {
clearState(getContextRoot());
}
@Test
public void testCreateFlexibleLeaderboardWithDuplicateName() {
FlexibleLeaderboardCreateDialog dialog;
AdminConsolePage adminConsole = AdminConsolePage.goToPage(getWebDriver(), getContextRoot());
LeaderboardConfigurationPanel leaderboardConfiguration = adminConsole.goToLeaderboardConfiguration();
leaderboardConfiguration.deleteLeaderboard("Humba Humba");
{
FlexibleLeaderboardCreateDialog dialog = leaderboardConfiguration.startCreatingFlexibleLeaderboard();
dialog.setName("Humba Humba");
assertTrue(dialog.isOkEnabled());
dialog.pressOk();
}
{
FlexibleLeaderboardCreateDialog dialog = leaderboardConfiguration.startCreatingFlexibleLeaderboard();
dialog.setName("Humba Humba");
assertFalse(dialog.isOkEnabled());
String errorMessage = dialog.getErrorMessage();
assertTrue(errorMessage.length() > 0);
}
dialog = leaderboardConfiguration.startCreatingFlexibleLeaderboard();
dialog.setName("Humba Humba");
assertTrue(dialog.isOkButtonEnabled());
dialog.pressOk();
dialog = leaderboardConfiguration.startCreatingFlexibleLeaderboard();
dialog.setName("Humba Humba");
assertFalse(dialog.isOkButtonEnabled());
String errorMessage = dialog.getStatusMessage();
assertTrue(errorMessage.length() > 0);
}
}
@@ -0,0 +1,45 @@
package com.sap.sailing.selenium.test.adminconsole;
import static org.junit.Assert.*;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import com.sap.sailing.selenium.pages.adminconsole.AdminConsolePage;
import com.sap.sailing.selenium.pages.adminconsole.leaderboard.LeaderboardConfigurationPanel;
import com.sap.sailing.selenium.pages.adminconsole.leaderboard.LeaderboardGroupConfigurationPanel;
import com.sap.sailing.selenium.pages.adminconsole.leaderboard.LeaderboardGroupDetailsPanel;
import com.sap.sailing.selenium.pages.gwt.DataEntry;
import com.sap.sailing.selenium.test.AbstractSeleniumTest;
public class TestLeaderboardFilterInLeaderboardGroupConfig extends AbstractSeleniumTest {
@Before
public void clearDatabase() {
clearState(getContextRoot());
}
@Test
public void testLeaderboardFilterInLeaderboardGroupConfig() {
AdminConsolePage adminConsole = AdminConsolePage.goToPage(getWebDriver(), getContextRoot());
LeaderboardGroupConfigurationPanel leaderboardGroupConfiguration = adminConsole.goToLeaderboardGroupConfiguration();
leaderboardGroupConfiguration.createLeaderboardGroup("Test", "Test");
List<DataEntry> selectedEntries = leaderboardGroupConfiguration.getLeaderboardGroupsTable().getSelectedEntries();
assertEquals(1, selectedEntries.size());
assertEquals("Test", selectedEntries.get(0).getColumnContent("Name"));
LeaderboardConfigurationPanel leaderboardConfiguration = adminConsole.goToLeaderboardConfiguration();
leaderboardConfiguration.createFlexibleLeaderboard("Test");
leaderboardGroupConfiguration = adminConsole.goToLeaderboardGroupConfiguration();
LeaderboardGroupDetailsPanel leaderboardGroupDetails = leaderboardGroupConfiguration.getLeaderboardGroupDetails();
leaderboardGroupDetails.refreshLeaderboards();
DataEntry leaderboardEntry = leaderboardGroupDetails.findLeaderboardEntry("Test");
assertNotNull(leaderboardEntry);
leaderboardGroupDetails.filterLeaderboards("Test");
assertNotNull(leaderboardGroupDetails.findLeaderboardEntry("Test"));
}
}
@@ -28,7 +28,7 @@ public class TestRaceFilterForTracTracEvents extends AbstractSeleniumTest {
AdminConsolePage adminConsole = AdminConsolePage.goToPage(getWebDriver(), getContextRoot());
TracTracEventManagementPanel tracTracEvents = adminConsole.goToTracTracEvents();
tracTracEvents.listRaces(BMW_CUP_JSON_URL);
tracTracEvents.listTrackableRaces(BMW_CUP_JSON_URL);
assertThat(tracTracEvents.getTrackableRaces().size(), is(12));
@@ -43,7 +43,7 @@ public class TestRaceFilterForTracTracEvents extends AbstractSeleniumTest {
AdminConsolePage adminConsole = AdminConsolePage.goToPage(getWebDriver(), getContextRoot());
TracTracEventManagementPanel tracTracEvents = adminConsole.goToTracTracEvents();
tracTracEvents.listRaces(BMW_CUP_JSON_URL);
tracTracEvents.listTrackableRaces(BMW_CUP_JSON_URL);
tracTracEvents.setFilterForTrackableRaces("BMW Cup Race 1"); //$NON-NLS-1$
assertThat(tracTracEvents.getTrackableRaces().size(), is(5));
@@ -58,7 +58,7 @@ public class TestRaceFilterForTracTracEvents extends AbstractSeleniumTest {
AdminConsolePage adminConsole = AdminConsolePage.goToPage(getWebDriver(), getContextRoot());
TracTracEventManagementPanel tracTracEvents = adminConsole.goToTracTracEvents();
tracTracEvents.listRaces(BMW_CUP_JSON_URL);
tracTracEvents.listTrackableRaces(BMW_CUP_JSON_URL);
tracTracEvents.setFilterForTrackableRaces("BMW Cup Race 12"); //$NON-NLS-1$
assertThat(tracTracEvents.getTrackableRaces().size(), is(1));
@@ -67,17 +67,15 @@ public class TestRaceFilterForTracTracEvents extends AbstractSeleniumTest {
/**
* <p>Test with filter which does not match anything.</p>
*/
// TODO: This test fails at the moment, because of an incorrect result returned by the page object! If the table is
// empty GWT uses a table body with one row as spacer, which is not filtered out correctly by the page object.
// @Test
// @SuppressWarnings("boxing")
// public void testNoneExisingFilter() {
// AdminConsolePage adminConsole = AdminConsolePage.goToPage(getWebDriver(), getContextRoot());
//
// TracTracEventManagementPanel tracTracEvents = adminConsole.goToTracTracEvents();
// tracTracEvents.listRaces(BMW_CUP_JSON_URL);
// tracTracEvents.setFilterForTrackableRaces("BMW Cup Race 18"); //$NON-NLS-1$
//
// assertThat(tracTracEvents.getTrackableRaces().size(), is(0));
// }
@Test
@SuppressWarnings("boxing")
public void testNoneMatchingFilter() {
AdminConsolePage adminConsole = AdminConsolePage.goToPage(getWebDriver(), getContextRoot());
TracTracEventManagementPanel tracTracEvents = adminConsole.goToTracTracEvents();
tracTracEvents.listTrackableRaces(BMW_CUP_JSON_URL);
tracTracEvents.setFilterForTrackableRaces("BMW Cup Race 18"); //$NON-NLS-1$
assertThat(tracTracEvents.getTrackableRaces().size(), is(0));
}
}
@@ -29,7 +29,7 @@ public class TestStartAndStopTrackingForTracTracEvents extends AbstractSeleniumT
AdminConsolePage adminConsole = AdminConsolePage.goToPage(getWebDriver(), getContextRoot());
TracTracEventManagementPanel tracTracEvents = adminConsole.goToTracTracEvents();
tracTracEvents.listRaces(BMW_CUP_JSON_URL);
tracTracEvents.listTrackableRaces(BMW_CUP_JSON_URL);
// TODO: Complete the test case!
//tracTracEvents.startTracking(BMW_CUP_RACE_8, BMW_CUP_REGATTA, false, false, false);
@@ -1,98 +0,0 @@
package com.sap.sailing.selenium.test.gwt.widgets;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import com.sap.sailing.selenium.pages.PageObject;
/**
* <p></p>
*
* @author
* D049941
*/
public class CellTable extends PageObject {
/**
* <p></p>
*
* @param driver
*
* @param element
*
*/
public CellTable(WebDriver driver, WebElement element) {
super(driver, element);
}
public List<String> getHeaders() {
List<String> headers = new ArrayList<>();
for(WebElement header : findHeaders()) {
headers.add(header.getText());
}
return headers;
}
public void clickHeader(String name) {
for(WebElement header : findHeaders()) {
if(name.equals(header.getText()))
header.click();
}
}
public List<WebElement> getRows() {
List<WebElement> bodies = this.context.findElements(By.tagName("tbody"));
for(WebElement body : bodies) {
if(!body.isDisplayed())
continue;
List<WebElement> rows = body.findElements(By.tagName("tr"));
Iterator<WebElement> iterator = rows.iterator();
while(iterator.hasNext()) {
WebElement row = iterator.next();
if(isRowForLoadingAnimation(row))
iterator.remove();
}
return rows;
}
return Collections.emptyList();
}
@Override
protected void verify() {
// TODO: Verify that the context represents a GWT CellTable
String tagName = ((WebElement) this.context).getTagName();
if(!tagName.equalsIgnoreCase("table"))
throw new IllegalArgumentException("WebElement does not represent a table");
}
private List<WebElement> findHeaders() {
return this.context.findElements(By.tagName("th"));
}
private boolean isRowForLoadingAnimation(WebElement row) {
List<WebElement> images = row.findElements(By.xpath(".//td/div/div/div/img"));
if(images.isEmpty() || images.size() > 1)
return false;
WebElement image = images.get(0);
System.out.println(image.getCssValue("background-image"));
return true;
}
}