Configured LeaderboardConfigPanel and RaceDialog. The dialog does appear

not.
This commit is contained in:
Fabian Schwarz-Fritz committed 2011-12-01 16:38:57 +01:00
1 parent 27762bee79
commit 875f14ec4a
3 files changed
+277 -370

No files matched your search

@@ -24,7 +24,6 @@ import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.view.client.ListDataProvider;
import com.google.gwt.view.client.SelectionChangeEvent;
import com.google.gwt.view.client.SingleSelectionModel;
import com.sap.sailing.gwt.ui.client.DataEntryDialog.Validator;
import com.sap.sailing.gwt.ui.shared.EventDAO;
import com.sap.sailing.gwt.ui.shared.EventNameAndRaceName;
import com.sap.sailing.gwt.ui.shared.LeaderboardDAO;
@@ -35,15 +34,15 @@ import com.sap.sailing.gwt.ui.shared.Triple;
public class LeaderboardConfigPanel extends FormPanel implements EventDisplayer, RaceSelectionChangeListener {
// AXEL: DON'T DELETE!!!
// private static final int MAX_NUMBER_OF_DISCARDED_RESULTS = 4;
// AXEL: DON'T DELETE!!!
// private static final int MAX_NUMBER_OF_DISCARDED_RESULTS = 4;
private final TrackedEventsComposite trackedEventsComposite;
private final StringConstants stringConstants;
private final SailingServiceAsync sailingService;
private final ListDataProvider<LeaderboardDAO> leaderboardList;
private final ListDataProvider<String> raceColumnList;
@@ -59,16 +58,16 @@ public class LeaderboardConfigPanel extends FormPanel implements EventDisplayer,
private final Button addColumnButton;
private final Button columnMoveUpButton;
private final Button columnMoveDownButton;
private final Anchor editLeaderboardScoresLink;
private final CaptionPanel selectedLeaderBoardPanel;
private final CaptionPanel trackedRacesCaptionPanel;
final SingleSelectionModel<String> raceTableSelectionModel;
public LeaderboardConfigPanel(SailingServiceAsync sailingService, AdminConsole adminConsole,
final ErrorReporter errorReporter, StringConstants theStringConstants) {
this.stringConstants = theStringConstants;
@@ -97,7 +96,7 @@ public class LeaderboardConfigPanel extends FormPanel implements EventDisplayer,
@Override
public String getValue(LeaderboardDAO leaderboard) {
String result = "";
if(leaderboard.discardThresholds != null) {
if (leaderboard.discardThresholds != null) {
for (int discardThreshold : leaderboard.discardThresholds) {
result += discardThreshold + " ";
}
@@ -106,25 +105,28 @@ public class LeaderboardConfigPanel extends FormPanel implements EventDisplayer,
}
};
ImagesBarColumn<LeaderboardDAO, LeaderboardConfigImagesBarCell> leaderboardActionColumn = new ImagesBarColumn<LeaderboardDAO, LeaderboardConfigImagesBarCell>(new LeaderboardConfigImagesBarCell());
ImagesBarColumn<LeaderboardDAO, LeaderboardConfigImagesBarCell> leaderboardActionColumn = new ImagesBarColumn<LeaderboardDAO, LeaderboardConfigImagesBarCell>(
new LeaderboardConfigImagesBarCell());
leaderboardActionColumn.setFieldUpdater(new FieldUpdater<LeaderboardDAO, String>() {
@Override
public void update(int index, LeaderboardDAO object, String value) {
if("ACTION_REMOVE".equals(value)) {
if(Window.confirm("Do you really want to remove the leaderboard: '" + object.name + "' ?")) {
if ("ACTION_REMOVE".equals(value)) {
if (Window.confirm("Do you really want to remove the leaderboard: '" + object.name + "' ?")) {
removeLeaderboard(object);
}
} else if("ACTION_OPEN_BROWSER".equals(value)) {
Window.open("/Leaderboard.html?name="+object.name, "Leaderboard", null);
} else if("ACTION_EDIT".equals(value)) {
} else if ("ACTION_OPEN_BROWSER".equals(value)) {
Window.open("/Leaderboard.html?name=" + object.name, "Leaderboard", null);
} else if ("ACTION_EDIT".equals(value)) {
final String oldLeaderboardName = object.name;
LeaderboardEditDialog dialog = new LeaderboardEditDialog(object, stringConstants,
errorReporter, new AsyncCallback<LeaderboardDAO>() {
LeaderboardEditDialog dialog = new LeaderboardEditDialog(object, stringConstants, errorReporter,
new AsyncCallback<LeaderboardDAO>() {
@Override
public void onFailure(Throwable arg0) {}
public void onFailure(Throwable arg0) {
}
@Override
public void onSuccess(LeaderboardDAO result) {
updateLeaderboard(oldLeaderboardName, result);
@@ -134,9 +136,9 @@ public class LeaderboardConfigPanel extends FormPanel implements EventDisplayer,
}
}
});
AdminConsoleTableResources tableRes = GWT.create(AdminConsoleTableResources.class);
leaderboardTable = new CellTable<LeaderboardDAO>(/* pageSize */ 200, tableRes);
leaderboardTable = new CellTable<LeaderboardDAO>(/* pageSize */200, tableRes);
leaderboardTable.addColumn(leaderboardNameColumn, "Name");
leaderboardTable.addColumn(discardingOptionsColumn, "Discarding");
leaderboardTable.addColumn(leaderboardActionColumn, "Actions");
@@ -149,16 +151,16 @@ public class LeaderboardConfigPanel extends FormPanel implements EventDisplayer,
selectedLeaderboard = tableSelectionModel.getSelectedObject();
leaderboardSelectionChanged();
}
});
});
leaderboardList.addDataDisplay(leaderboardTable);
mainPanel.add(leaderboardTable);
HorizontalPanel leaderboardButtonPanel = new HorizontalPanel();
leaderboardButtonPanel.setSpacing(5);
mainPanel.add(leaderboardButtonPanel);
Button btnNew = new Button("Create Leaderboard..");
leaderboardButtonPanel.add(btnNew);
btnNew.addClickHandler(new ClickHandler() {
@@ -168,8 +170,8 @@ public class LeaderboardConfigPanel extends FormPanel implements EventDisplayer,
}
});
mainPanel.add(new Grid(1,1));
mainPanel.add(new Grid(1, 1));
// caption panels for the selected leaderboard and tracked races
HorizontalPanel splitPanel = new HorizontalPanel();
mainPanel.add(splitPanel);
@@ -191,31 +193,27 @@ public class LeaderboardConfigPanel extends FormPanel implements EventDisplayer,
trackedRacesCaptionPanel.setContentWidget(trackedRacesPanel);
trackedRacesCaptionPanel.setStyleName("bold");
trackedEventsComposite = new TrackedEventsComposite(sailingService, errorReporter, adminConsole,
stringConstants, /* multiselection */ false);
stringConstants, /* multiselection */false);
trackedRacesPanel.add(trackedEventsComposite);
trackedEventsComposite.addRaceSelectionChangeListener(this);
/*
discardThresholdLabelsForSelectedLeaderboard = new Label[MAX_NUMBER_OF_DISCARDED_RESULTS];
discardThresholdsGrid.setWidget(0, 0, new Label(stringConstants.discarding() + ":"));
discardThresholdsGrid.setWidget(1, 0, new Label(stringConstants.startingFromNumberOfRaces() + ":"));
for (int i=0; i<MAX_NUMBER_OF_DISCARDED_RESULTS; i++) {
discardThresholdsGrid.setWidget(0, i+1, new Label(""+(i+1)));
discardThresholdLabelsForSelectedLeaderboard[i] = new Label();
discardThresholdsGrid.setWidget(1, i+1, discardThresholdLabelsForSelectedLeaderboard[i]);
}
*/
/*
* discardThresholdLabelsForSelectedLeaderboard = new Label[MAX_NUMBER_OF_DISCARDED_RESULTS];
* discardThresholdsGrid.setWidget(0, 0, new Label(stringConstants.discarding() + ":"));
* discardThresholdsGrid.setWidget(1, 0, new Label(stringConstants.startingFromNumberOfRaces() + ":")); for (int
* i=0; i<MAX_NUMBER_OF_DISCARDED_RESULTS; i++) { discardThresholdsGrid.setWidget(0, i+1, new Label(""+(i+1)));
* discardThresholdLabelsForSelectedLeaderboard[i] = new Label(); discardThresholdsGrid.setWidget(1, i+1,
* discardThresholdLabelsForSelectedLeaderboard[i]); }
*/
editLeaderboardScoresLink = new Anchor(stringConstants.editScores());
editLeaderboardScoresLink.setEnabled(false);
vPanel.add(editLeaderboardScoresLink);
HorizontalPanel hPanel = new HorizontalPanel();
hPanel.setSpacing(5);
vPanel.add(hPanel);
Button stressTestButton = new Button(stringConstants.stressTest());
hPanel.add(stressTestButton);
stressTestButton.addClickHandler(new ClickHandler() {
@@ -224,7 +222,7 @@ public class LeaderboardConfigPanel extends FormPanel implements EventDisplayer,
performStressTestForSelectedLeaderboard();
}
});
// ------------ races of the selected leaderboard ----------------
TextColumn<String> raceNameColumn = new TextColumn<String>() {
@Override
@@ -236,7 +234,7 @@ public class LeaderboardConfigPanel extends FormPanel implements EventDisplayer,
TextColumn<String> isMedalRaceColumn = new TextColumn<String>() {
@Override
public String getValue(String race) {
boolean isMedalRace = selectedLeaderboard.raceIsMedalRace(race);
return isMedalRace ? "Yes" : "No";
}
@@ -245,32 +243,34 @@ public class LeaderboardConfigPanel extends FormPanel implements EventDisplayer,
TextColumn<String> isTrackedRaceColumn = new TextColumn<String>() {
@Override
public String getValue(String race) {
boolean isTrackedRace = selectedLeaderboard.raceIsTracked(race);
return isTrackedRace ? "Yes" : "No";
}
};
ImagesBarColumn<String, LeaderboardRaceConfigImagesBarCell> raceActionColumn = new ImagesBarColumn<String, LeaderboardRaceConfigImagesBarCell>(new LeaderboardRaceConfigImagesBarCell());
ImagesBarColumn<String, LeaderboardRaceConfigImagesBarCell> raceActionColumn = new ImagesBarColumn<String, LeaderboardRaceConfigImagesBarCell>(
new LeaderboardRaceConfigImagesBarCell());
raceActionColumn.setFieldUpdater(new FieldUpdater<String, String>() {
@Override
public void update(int index, String object, String value) {
if("ACTION_REMOVE".equals(value)) {
if(Window.confirm("Do you really want to remove the race: '" + object + "' ?")) {
if ("ACTION_REMOVE".equals(value)) {
if (Window.confirm("Do you really want to remove the race: '" + object + "' ?")) {
removeRaceColumn(object);
}
} else if("ACTION_EDIT".equals(value)) {
} else if ("ACTION_EDIT".equals(value)) {
Window.alert("Edit clicked");
} else if("ACTION_UNLINK".equals(value)) {
unlinkRaceColumnFromTrackedRace(object); }
} else if ("ACTION_UNLINK".equals(value)) {
unlinkRaceColumnFromTrackedRace(object);
}
}
});
Label lblRaceNamesIn = new Label(stringConstants.races());
vPanel.add(lblRaceNamesIn);
raceColumnTable = new CellTable<String>(/* pageSize */ 200, tableRes);
raceColumnTable = new CellTable<String>(/* pageSize */200, tableRes);
raceColumnTable.addColumn(raceNameColumn, "Name");
raceColumnTable.addColumn(isMedalRaceColumn, "Medal race");
raceColumnTable.addColumn(isTrackedRaceColumn, "Tracked");
@@ -283,25 +283,25 @@ public class LeaderboardConfigPanel extends FormPanel implements EventDisplayer,
public void onSelectionChange(SelectionChangeEvent event) {
leaderboardRaceColumnSelectionChanged();
}
});
});
raceColumnList.addDataDisplay(raceColumnTable);
vPanel.add(raceColumnTable);
HorizontalPanel selectedLeaderboardRaceButtonPanel = new HorizontalPanel();
selectedLeaderboardRaceButtonPanel.setSpacing(5);
vPanel.add(selectedLeaderboardRaceButtonPanel);
addColumnButton = new Button("Add race...");
selectedLeaderboardRaceButtonPanel.add(addColumnButton);
addColumnButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
addColumnToSelectedLeaderboard();
addRaceColumnToLeaderboard();
}
});
columnMoveUpButton = new Button(stringConstants.columnMoveUp());
selectedLeaderboardRaceButtonPanel.add(columnMoveUpButton);
columnMoveUpButton.addClickHandler(new ClickHandler() {
@@ -318,7 +318,7 @@ public class LeaderboardConfigPanel extends FormPanel implements EventDisplayer,
moveSelectedRaceColumnDown();
}
});
leaderboardSelectionChanged();
leaderboardRaceColumnSelectionChanged();
}
@@ -330,16 +330,18 @@ public class LeaderboardConfigPanel extends FormPanel implements EventDisplayer,
leaderboardList.getList().clear();
leaderboardList.getList().addAll(leaderboards);
}
@Override
public void onFailure(Throwable t) {
LeaderboardConfigPanel.this.errorReporter.reportError("Error trying to obtain list of leaderboards: "+t.getMessage());
LeaderboardConfigPanel.this.errorReporter.reportError("Error trying to obtain list of leaderboards: "
+ t.getMessage());
}
});
}
private void performStressTestForSelectedLeaderboard() {
if(selectedLeaderboard != null) {
final String leaderboardName = selectedLeaderboard.name;
if (selectedLeaderboard != null) {
final String leaderboardName = selectedLeaderboard.name;
sailingService.stressTestLeaderboardByName(leaderboardName, 100, new AsyncCallback<Void>() {
@Override
public void onFailure(Throwable caught) {
@@ -357,73 +359,70 @@ public class LeaderboardConfigPanel extends FormPanel implements EventDisplayer,
private void unlinkRaceColumnFromTrackedRace(final String raceColumn) {
final String selectedLeaderboardName = getSelectedLeaderboardName();
sailingService.disconnectLeaderboardColumnFromTrackedRace(selectedLeaderboardName, raceColumn, new AsyncCallback<Void>() {
@Override
public void onFailure(Throwable t) {
errorReporter.reportError("Error trying to unlink tracked race from column "+raceColumn+
" from leaderboard "+selectedLeaderboardName+": "+t.getMessage());
}
sailingService.disconnectLeaderboardColumnFromTrackedRace(selectedLeaderboardName, raceColumn,
new AsyncCallback<Void>() {
@Override
public void onFailure(Throwable t) {
errorReporter.reportError("Error trying to unlink tracked race from column " + raceColumn
+ " from leaderboard " + selectedLeaderboardName + ": " + t.getMessage());
}
@Override
public void onSuccess(Void arg0) {
trackedEventsComposite.clearSelection();
}
});
@Override
public void onSuccess(Void arg0) {
trackedEventsComposite.clearSelection();
}
});
}
private void removeRaceColumn(final String raceColumn) {
sailingService.removeLeaderboardColumn(getSelectedLeaderboardName(), raceColumn, new AsyncCallback<Void>() {
@Override
public void onFailure(Throwable t) {
errorReporter
.reportError("Error trying to remove leaderboard race column "
+ raceColumn + " in leaderboard "
+ getSelectedLeaderboardName()+": "+
t.getMessage());
errorReporter.reportError("Error trying to remove leaderboard race column " + raceColumn
+ " in leaderboard " + getSelectedLeaderboardName() + ": " + t.getMessage());
}
@Override
public void onSuccess(Void arg0) {
raceColumnList.getList().remove(raceColumn);
//selectedLeaderboard.raceNamesAndMedalRaceAndTracked.remove(raceColumn);
// selectedLeaderboard.raceNamesAndMedalRaceAndTracked.remove(raceColumn);
selectedLeaderboard.removeRace(raceColumn);
selectedLeaderboard.invalidateCompetitorOrdering();
}
});
}
private void moveSelectedRaceColumnDown(){
final String selectedRaceColumnName = raceTableSelectionModel.getSelectedObject();
sailingService.moveLeaderboardColumnDown(getSelectedLeaderboardName(), selectedRaceColumnName, new AsyncCallback<Void>() {
@Override
public void onFailure(Throwable caught) {
errorReporter.reportError("Error trying to move leaderboard race column "
+ selectedRaceColumnName + " in leaderboard "
+ getSelectedLeaderboardName() + " down: "+
caught.getMessage());
}
@Override
public void onSuccess(Void result) {
int rowIndex = getRowIndexOfSelectedRaceColumn();
if(rowIndex < raceColumnList.getList().size()-1) {
Collections.swap(raceColumnList.getList(), rowIndex, rowIndex+1);
selectedLeaderboard.moveRaceDown(selectedRaceColumnName);
}
}
});
private void moveSelectedRaceColumnDown() {
final String selectedRaceColumnName = raceTableSelectionModel.getSelectedObject();
sailingService.moveLeaderboardColumnDown(getSelectedLeaderboardName(), selectedRaceColumnName,
new AsyncCallback<Void>() {
@Override
public void onFailure(Throwable caught) {
errorReporter.reportError("Error trying to move leaderboard race column "
+ selectedRaceColumnName + " in leaderboard " + getSelectedLeaderboardName()
+ " down: " + caught.getMessage());
}
@Override
public void onSuccess(Void result) {
int rowIndex = getRowIndexOfSelectedRaceColumn();
if (rowIndex < raceColumnList.getList().size() - 1) {
Collections.swap(raceColumnList.getList(), rowIndex, rowIndex + 1);
selectedLeaderboard.moveRaceDown(selectedRaceColumnName);
}
}
});
}
private int getRowIndexOfSelectedRaceColumn()
{
private int getRowIndexOfSelectedRaceColumn() {
final String selectedRaceColumnName = raceTableSelectionModel.getSelectedObject();
int rowIndex = -1;
if(selectedRaceColumnName != null) {
if (selectedRaceColumnName != null) {
int listSize = raceColumnList.getList().size();
for(int i = 0; i < listSize; i++) {
if(selectedRaceColumnName.equals(raceColumnList.getList().get(i))) {
for (int i = 0; i < listSize; i++) {
if (selectedRaceColumnName.equals(raceColumnList.getList().get(i))) {
rowIndex = i;
break;
}
@@ -431,29 +430,30 @@ public class LeaderboardConfigPanel extends FormPanel implements EventDisplayer,
}
return rowIndex;
}
private void moveSelectedRaceColumnUp(){
final String selectedRaceColumnName = raceTableSelectionModel.getSelectedObject();
sailingService.moveLeaderboardColumnUp(getSelectedLeaderboardName(), selectedRaceColumnName, new AsyncCallback<Void>() {
@Override
public void onFailure(Throwable caught) {
errorReporter.reportError("Error trying to move leaderboard race column "
+ selectedRaceColumnName + " in leaderboard "
+ getSelectedLeaderboardName() + " up: "+
caught.getMessage());
}
@Override
public void onSuccess(Void result) {
int rowIndex = getRowIndexOfSelectedRaceColumn();
if(rowIndex > 0) {
Collections.swap(raceColumnList.getList(), rowIndex, rowIndex-1);
selectedLeaderboard.moveRaceUp(selectedRaceColumnName);
}
}
});
private void moveSelectedRaceColumnUp() {
final String selectedRaceColumnName = raceTableSelectionModel.getSelectedObject();
sailingService.moveLeaderboardColumnUp(getSelectedLeaderboardName(), selectedRaceColumnName,
new AsyncCallback<Void>() {
@Override
public void onFailure(Throwable caught) {
errorReporter.reportError("Error trying to move leaderboard race column "
+ selectedRaceColumnName + " in leaderboard " + getSelectedLeaderboardName() + " up: "
+ caught.getMessage());
}
@Override
public void onSuccess(Void result) {
int rowIndex = getRowIndexOfSelectedRaceColumn();
if (rowIndex > 0) {
Collections.swap(raceColumnList.getList(), rowIndex, rowIndex - 1);
selectedLeaderboard.moveRaceUp(selectedRaceColumnName);
}
}
});
}
private void leaderboardRaceColumnSelectionChanged() {
String selectedRaceColumnName = getSelectedRaceColumnName();
if (selectedRaceColumnName != null) {
@@ -466,17 +466,17 @@ public class LeaderboardConfigPanel extends FormPanel implements EventDisplayer,
trackedEventsComposite.clearSelection();
}
}
private void selectTrackedRaceInRaceTree() {
final String selectedLeaderboardName = getSelectedLeaderboardName();
final String selectedRaceColumnName = getSelectedRaceColumnName();
sailingService.getEventAndRaceNameOfTrackedRaceConnectedToLeaderboardColumn(
selectedLeaderboardName, selectedRaceColumnName, new AsyncCallback<Pair<String,String>>() {
sailingService.getEventAndRaceNameOfTrackedRaceConnectedToLeaderboardColumn(selectedLeaderboardName,
selectedRaceColumnName, new AsyncCallback<Pair<String, String>>() {
@Override
public void onFailure(Throwable t) {
errorReporter.reportError("Error trying to determine tracked race linked to race column "+
selectedRaceColumnName+" in leaderboard "+selectedLeaderboardName+": "+
t.getMessage());
errorReporter.reportError("Error trying to determine tracked race linked to race column "
+ selectedRaceColumnName + " in leaderboard " + selectedLeaderboardName + ": "
+ t.getMessage());
}
@Override
@@ -495,51 +495,51 @@ public class LeaderboardConfigPanel extends FormPanel implements EventDisplayer,
}
private String getSelectedRaceColumnName() {
return raceTableSelectionModel.getSelectedObject();
return raceTableSelectionModel.getSelectedObject();
}
private void addColumnToSelectedLeaderboard() {
private void addRaceColumnToLeaderboard() {
final String leaderboardName = getSelectedLeaderboardName();
final TextfieldEntryDialogWithCheckbox box = new TextfieldEntryDialogWithCheckbox(
stringConstants.addColumnToLeaderboard(), stringConstants.pleaseEnterNameForNewRaceColumn(),
stringConstants.ok(), stringConstants.cancel(), stringConstants.medalRace(), /* initialValue */"",
new Validator<Pair<String, Boolean>>() {
String raceName = getSelectedLeaderboardName();
boolean raceIsMedalRace = false;
if(selectedLeaderboard.getRaceList().contains(raceName)){
raceIsMedalRace = selectedLeaderboard.raceIsMedalRace(raceName);
}
Pair<String, Boolean> raceDaoAndIsMedalRace = new Pair<String, Boolean>(raceName,
raceIsMedalRace);
final RaceDialog raceDialog = new RaceDialog(raceDaoAndIsMedalRace, stringConstants,
new AsyncCallback<Pair<String, Boolean>>() {
@Override
public String getErrorMessage(Pair<String, Boolean> valueToValidate) {
if (valueToValidate.getA() == null || valueToValidate.getA().trim().length() == 0) {
return stringConstants.pleaseEnterNonEmptyName();
} else {
return null;
}
public void onFailure(Throwable caught) {
}
}, new AsyncCallback<Pair<String, Boolean>>() {
@Override
public void onFailure(Throwable t) {}
@Override
public void onSuccess(final Pair<String, Boolean> columnNameAndMedalRace) {
sailingService.addColumnToLeaderboard(columnNameAndMedalRace.getA(), leaderboardName, /* medalRace */ columnNameAndMedalRace.getB(),
public void onSuccess(final Pair<String, Boolean> result) {
sailingService.addColumnToLeaderboard(result.getA(), leaderboardName, result.getB(),
new AsyncCallback<Void>() {
@Override
public void onFailure(Throwable t) {
errorReporter.reportError("Error trying to add column "
+ columnNameAndMedalRace.getA() + " to leaderboard " + leaderboardName
+ ": " + t.getMessage());
@Override
public void onFailure(Throwable caught) {
errorReporter.reportError("Error trying to add column " + result.getA()
+ " to leaderboard " + leaderboardName + ": " + caught.getMessage());
}
@Override
public void onSuccess(Void v) {
//columnNamesInSelectedLeaderboardListBox.addItem(columnNameAndMedalRace.getA());
raceColumnList.getList().add(columnNameAndMedalRace.getA());
//selectedLeaderboard.raceNamesAndMedalRaceAndTracked.put(columnNameAndMedalRace.getA(),
// new Pair<Boolean, Boolean>(/* medal race */ columnNameAndMedalRace.getB(),
// /* tracked */ false));
selectedLeaderboard.addRace(columnNameAndMedalRace.getA(), columnNameAndMedalRace.getB(), false);
selectedLeaderboard.invalidateCompetitorOrdering();
}
});
@Override
public void onSuccess(Void v) {
// columnNamesInSelectedLeaderboardListBox.addItem(columnNameAndMedalRace.getA());
raceColumnList.getList().add(result.getA());
// selectedLeaderboard.raceNamesAndMedalRaceAndTracked.put(columnNameAndMedalRace.getA(),
// new Pair<Boolean, Boolean>(/* medal race */ columnNameAndMedalRace.getB(),
// /* tracked */ false));
selectedLeaderboard.addRace(result.getA(), result.getB(), false);
selectedLeaderboard.invalidateCompetitorOrdering();
}
});
}
});
box.show();
raceDialog.show();
}
private String getSelectedLeaderboardName() {
@@ -550,7 +550,7 @@ public class LeaderboardConfigPanel extends FormPanel implements EventDisplayer,
final String leaderboardName = getSelectedLeaderboardName();
if (leaderboardName != null) {
sailingService.getLeaderboardByName(leaderboardName, new Date(),
/* namesOfRacesForWhichToLoadLegDetails */ null, new AsyncCallback<LeaderboardDAO>() {
/* namesOfRacesForWhichToLoadLegDetails */null, new AsyncCallback<LeaderboardDAO>() {
@Override
public void onFailure(Throwable caught) {
errorReporter.reportError("Error trying to fetch leaderboard " + leaderboardName
@@ -562,9 +562,9 @@ public class LeaderboardConfigPanel extends FormPanel implements EventDisplayer,
selectedLeaderboard = result;
raceColumnList.getList().clear();
for(String race: result.getRaceList())
raceColumnList.getList().add(race);
for (String race : result.getRaceList())
raceColumnList.getList().add(race);
selectedLeaderBoardPanel.setVisible(true);
trackedRacesCaptionPanel.setVisible(true);
selectedLeaderBoardPanel.setCaptionText("Details of leaderboard '" + result.name + "'");
@@ -588,15 +588,18 @@ public class LeaderboardConfigPanel extends FormPanel implements EventDisplayer,
}
private void addNewLeaderboard() {
List<String> leaderboardNames = new ArrayList<String>();
for(LeaderboardDAO dao: leaderboardList.getList())
for (LeaderboardDAO dao : leaderboardList.getList())
leaderboardNames.add(dao.name);
LeaderboardCreateDialog dialog = new LeaderboardCreateDialog(Collections.unmodifiableCollection(leaderboardNames),
stringConstants, errorReporter, new AsyncCallback<LeaderboardDAO>() {
LeaderboardCreateDialog dialog = new LeaderboardCreateDialog(
Collections.unmodifiableCollection(leaderboardNames), stringConstants, errorReporter,
new AsyncCallback<LeaderboardDAO>() {
@Override
public void onFailure(Throwable arg0) {}
public void onFailure(Throwable arg0) {
}
@Override
public void onSuccess(LeaderboardDAO result) {
createNewLeaderboard(result);
@@ -606,75 +609,82 @@ public class LeaderboardConfigPanel extends FormPanel implements EventDisplayer,
}
private void createNewLeaderboard(final LeaderboardDAO newLeaderboard) {
sailingService.createLeaderboard(newLeaderboard.name, newLeaderboard.discardThresholds, new AsyncCallback<Void>() {
@Override
public void onFailure(Throwable t) {
errorReporter.reportError("Error trying to create new leaderboard "+newLeaderboard.name+": "+t.getMessage());
}
@Override
public void onSuccess(Void result) {
sailingService.getLeaderboardByName(newLeaderboard.name, new Date(),
/* namesOfRacesForWhichToLoadLegDetails */ null, new AsyncCallback<LeaderboardDAO>() {
sailingService.createLeaderboard(newLeaderboard.name, newLeaderboard.discardThresholds,
new AsyncCallback<Void>() {
@Override
public void onFailure(Throwable caught) {
errorReporter.reportError("Error trying to fetch the new leaderboard " + newLeaderboard.name
+ " from the server: " + caught.getMessage());
public void onFailure(Throwable t) {
errorReporter.reportError("Error trying to create new leaderboard " + newLeaderboard.name
+ ": " + t.getMessage());
}
@Override
public void onSuccess(LeaderboardDAO result) {
leaderboardList.getList().add(result);
selectedLeaderboard = result;
leaderboardSelectionChanged();
public void onSuccess(Void result) {
sailingService.getLeaderboardByName(newLeaderboard.name, new Date(),
/* namesOfRacesForWhichToLoadLegDetails */null, new AsyncCallback<LeaderboardDAO>() {
@Override
public void onFailure(Throwable caught) {
errorReporter.reportError("Error trying to fetch the new leaderboard "
+ newLeaderboard.name + " from the server: " + caught.getMessage());
}
@Override
public void onSuccess(LeaderboardDAO result) {
leaderboardList.getList().add(result);
selectedLeaderboard = result;
leaderboardSelectionChanged();
}
});
}
});
}
});
}
private void updateLeaderboard(final String oldLeaderboardName, final LeaderboardDAO leaderboardToUdate) {
sailingService.updateLeaderboard(oldLeaderboardName, leaderboardToUdate.name, leaderboardToUdate.discardThresholds, new AsyncCallback<Void>() {
@Override
public void onFailure(Throwable t) {
errorReporter.reportError("Error trying to update leaderboard "+oldLeaderboardName+": "+t.getMessage());
}
@Override
public void onSuccess(Void result) {
final int[] index = new int[1];
index[0] = 0;
for(LeaderboardDAO dao: leaderboardList.getList()) {
if(dao.name.equals(oldLeaderboardName)) {
sailingService.getLeaderboardByName(leaderboardToUdate.name, new Date(),
/* namesOfRacesForWhichToLoadLegDetails */ null, new AsyncCallback<LeaderboardDAO>() {
@Override
public void onFailure(Throwable caught) {
errorReporter.reportError("Error trying to fetch the new leaderboard " + leaderboardToUdate.name
+ " from the server: " + caught.getMessage());
}
@Override
public void onSuccess(LeaderboardDAO result) {
leaderboardList.getList().set(index[0], result);
}
});
sailingService.updateLeaderboard(oldLeaderboardName, leaderboardToUdate.name,
leaderboardToUdate.discardThresholds, new AsyncCallback<Void>() {
@Override
public void onFailure(Throwable t) {
errorReporter.reportError("Error trying to update leaderboard " + oldLeaderboardName + ": "
+ t.getMessage());
}
index[0] = index[0]+1;
}
}
});
@Override
public void onSuccess(Void result) {
final int[] index = new int[1];
index[0] = 0;
for (LeaderboardDAO dao : leaderboardList.getList()) {
if (dao.name.equals(oldLeaderboardName)) {
sailingService.getLeaderboardByName(leaderboardToUdate.name, new Date(),
/* namesOfRacesForWhichToLoadLegDetails */null, new AsyncCallback<LeaderboardDAO>() {
@Override
public void onFailure(Throwable caught) {
errorReporter.reportError("Error trying to fetch the new leaderboard "
+ leaderboardToUdate.name + " from the server: " + caught.getMessage());
}
@Override
public void onSuccess(LeaderboardDAO result) {
leaderboardList.getList().set(index[0], result);
}
});
}
index[0] = index[0] + 1;
}
}
});
}
private void removeLeaderboard(final LeaderboardDAO leaderBoard) {
sailingService.removeLeaderboard(leaderBoard.name, new AsyncCallback<Void>() {
@Override
public void onFailure(Throwable caught) {
errorReporter.reportError("Error trying to remove leaderboard "+leaderBoard.name+": "+caught.getMessage());
errorReporter.reportError("Error trying to remove leaderboard " + leaderBoard.name + ": "
+ caught.getMessage());
}
@Override
@@ -682,7 +692,7 @@ public class LeaderboardConfigPanel extends FormPanel implements EventDisplayer,
// check if the removed leaderboard was the selected one
leaderboardList.getList().remove(leaderBoard);
if(selectedLeaderboard != null && selectedLeaderboard.name.equals(leaderBoard.name)) {
if (selectedLeaderboard != null && selectedLeaderboard.name.equals(leaderBoard.name)) {
selectedLeaderboard = null;
leaderboardSelectionChanged();
}
@@ -693,19 +703,20 @@ public class LeaderboardConfigPanel extends FormPanel implements EventDisplayer,
@Override
public void onRaceSelectionChange(List<Triple<EventDAO, RegattaDAO, RaceDAO>> selectedRaces) {
if (selectedRaces.isEmpty()) {
// unlinkRaceColumnFromTrackedRaceButton.setEnabled(false);
// unlinkRaceColumnFromTrackedRaceButton.setEnabled(false);
} else {
if (getSelectedRaceColumnName() != null) {
linkTrackedRaceForRaceColumn(selectedRaces.iterator().next());
} else {
// unlinkRaceColumnFromTrackedRaceButton.setEnabled(false);
// unlinkRaceColumnFromTrackedRaceButton.setEnabled(false);
}
}
}
private void linkTrackedRaceForRaceColumn(final Triple<EventDAO, RegattaDAO, RaceDAO> selectedRace) {
sailingService.connectTrackedRaceToLeaderboardColumn(getSelectedLeaderboardName(), getSelectedRaceColumnName(),
new EventNameAndRaceName(selectedRace.getA().name, selectedRace.getC().name), new AsyncCallback<Void>() {
new EventNameAndRaceName(selectedRace.getA().name, selectedRace.getC().name),
new AsyncCallback<Void>() {
@Override
public void onFailure(Throwable t) {
errorReporter.reportError("Error trying to link tracked race " + selectedRace.getC().name
@@ -717,7 +728,7 @@ public class LeaderboardConfigPanel extends FormPanel implements EventDisplayer,
@Override
public void onSuccess(Void arg0) {
// unlinkRaceColumnFromTrackedRaceButton.setEnabled(true);
// unlinkRaceColumnFromTrackedRaceButton.setEnabled(true);
}
});
}
@@ -1,122 +0,0 @@
package com.sap.sailing.gwt.ui.client;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.gwt.ui.shared.Pair;
public class LeaderboardCreationDialog extends DataEntryDialog<Pair<String, String[]>> {
private static final int MAX_NUMBER_OF_DISCARDED_RESULTS = 4;
private final TextBox entryField;
private final TextBox[] discardThresholdBoxes;
private final ErrorReporter errorReporter;
private final StringConstants stringConstants;
private static class LeaderboardParameterValidator implements Validator<Pair<String, String[]>> {
private final StringConstants stringConstants;
private final Collection<String> existingLeaderboardNames;
public LeaderboardParameterValidator(Collection<String> existingLeaderboardNames, StringConstants stringConstants) {
super();
this.existingLeaderboardNames = existingLeaderboardNames;
this.stringConstants = stringConstants;
}
@Override
public String getErrorMessage(Pair<String, String[]> valueToValidate) {
String errorMessage;
boolean nonEmpty = valueToValidate.getA() != null && valueToValidate.getA().trim().length() > 0;
boolean unique = !existingLeaderboardNames.contains(valueToValidate.getA());
boolean discardThresholdsAscending = true;
boolean discardThresholdsAreNumeric = valueToValidate.getB().length == 0 || valueToValidate.getB()[0] == null ||
valueToValidate.getB()[0].matches("[0-9]*");
for (int i=1; i<valueToValidate.getB().length; i++) {
if (valueToValidate.getB()[i] != null && valueToValidate.getB()[i].trim().length() > 0) {
try {
discardThresholdsAscending = discardThresholdsAscending &&
valueToValidate.getB()[i-1] != null && valueToValidate.getB()[i-1].trim().length() > 0 &&
Integer.valueOf(valueToValidate.getB()[i-1].trim()) < Integer.valueOf(valueToValidate.getB()[i].trim());
} catch (NumberFormatException e) {
discardThresholdsAreNumeric = false;
}
}
}
if (!nonEmpty) {
errorMessage = stringConstants.pleaseEnterNonEmptyName();
} else if (!unique) {
errorMessage = stringConstants.leaderboardWithThisNameAlreadyExists();
} else if (!discardThresholdsAreNumeric) {
errorMessage = stringConstants.discardThresholdsMustBeNumeric();
} else if (!discardThresholdsAscending) {
errorMessage = stringConstants.discardThresholdsMustBeAscending();
} else {
errorMessage = null;
}
return errorMessage;
}
}
public LeaderboardCreationDialog(Collection<String> existingLeaderboardNames, StringConstants stringConstants,
ErrorReporter errorReporter, AsyncCallback<Pair<String, String[]>> callback) {
super(stringConstants.leaderboardName(), stringConstants.leaderboardName(), stringConstants.ok(),
stringConstants.cancel(), new LeaderboardParameterValidator(existingLeaderboardNames, stringConstants), callback);
this.errorReporter = errorReporter;
this.stringConstants = stringConstants;
entryField = createTextBox(/* initial value */null);
discardThresholdBoxes = new TextBox[MAX_NUMBER_OF_DISCARDED_RESULTS];
for (int i=0; i<discardThresholdBoxes.length; i++) {
discardThresholdBoxes[i] = createTextBox(/* initialValue */ null);
discardThresholdBoxes[i].setVisibleLength(2);
}
}
@Override
protected Pair<String, String[]> getResult() {
List<String> discardThresholds = new ArrayList<String>();
for (int i=0; i<discardThresholdBoxes.length; i++) {
if (discardThresholdBoxes[i].getValue() != null && discardThresholdBoxes[i].getValue().trim().length() > 0) {
try {
Integer.valueOf(discardThresholdBoxes[i].getValue().trim()); // ensure there is no exception
discardThresholds.add(discardThresholdBoxes[i].getValue().trim());
} catch (NumberFormatException e) {
errorReporter.reportError("Internal error; NumberFormatException for "+discardThresholdBoxes[i].getValue()+
" which should have been caught by validation before");
}
}
}
String[] discardThresholdBoxesContents = discardThresholds.toArray(new String[discardThresholds.size()]);
return new Pair<String, String[]>(entryField.getValue(), discardThresholdBoxesContents);
}
@Override
protected Widget getAdditionalWidget() {
VerticalPanel panel = new VerticalPanel();
Widget additionalWidget = super.getAdditionalWidget();
if (additionalWidget != null) {
panel.add(additionalWidget);
}
panel.add(entryField);
panel.add(new Label(stringConstants.discardRacesFromHowManyStartedRacesOn()));
HorizontalPanel hp = new HorizontalPanel();
for (int i=0; i<discardThresholdBoxes.length; i++) {
hp.add(new Label(""+(i+1)+"."));
hp.add(discardThresholdBoxes[i]);
}
panel.add(hp);
return panel;
}
@Override
public void show() {
super.show();
entryField.setFocus(true);
}
}
@@ -3,17 +3,20 @@ package com.sap.sailing.gwt.ui.client;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.gwt.ui.shared.Pair;
import com.sap.sailing.gwt.ui.shared.RaceDAO;
public class RaceDialog extends DataEntryDialog<Pair<RaceDAO, Boolean>>{
public class RaceDialog extends DataEntryDialog<Pair<String, Boolean>>{
private final TextBox raceNameBox;
private final CheckBox isMedalRace;
private Pair<RaceDAO, Boolean> raceDaoAndIsMedalRace;
private final StringConstants stringConstants;
private static class RaceDialogValidator implements Validator<Pair<RaceDAO, Boolean>>{
private Pair<String, Boolean> raceDaoAndIsMedalRace;
private static class RaceDialogValidator implements Validator<Pair<String, Boolean>>{
private StringConstants stringConstants;
@@ -22,11 +25,11 @@ public class RaceDialog extends DataEntryDialog<Pair<RaceDAO, Boolean>>{
}
@Override
public String getErrorMessage(Pair<RaceDAO, Boolean> valueToValidate) {
public String getErrorMessage(Pair<String, Boolean> valueToValidate) {
String errorMessage;
RaceDAO race = valueToValidate.getA();
String racename = valueToValidate.getA();
Boolean isMedalRace = valueToValidate.getB();
boolean isNameNotEmpty = race!=null & race.name!=null & race.name!="";
boolean isNameNotEmpty =racename!=null & racename!="";
boolean medalRaceNotNull = isMedalRace!=null;
if(!isNameNotEmpty){
@@ -42,21 +45,36 @@ public class RaceDialog extends DataEntryDialog<Pair<RaceDAO, Boolean>>{
}
public RaceDialog(Pair<RaceDAO, Boolean> raceDaoAndIsMedalRace, StringConstants stringConstants,
AsyncCallback<Pair<RaceDAO, Boolean>> callback) {
public RaceDialog(Pair<String, Boolean> raceDaoAndIsMedalRace, StringConstants stringConstants,
AsyncCallback<Pair<String, Boolean>> callback) {
super(stringConstants.name(), stringConstants.name(), stringConstants.ok(), stringConstants.cancel(), new RaceDialogValidator(stringConstants), callback);
this.raceDaoAndIsMedalRace = raceDaoAndIsMedalRace;
raceNameBox = createTextBox(raceDaoAndIsMedalRace.getA().name);
raceNameBox = createTextBox(raceDaoAndIsMedalRace.getA());
isMedalRace = createCheckbox(stringConstants.medalRace());
isMedalRace.setValue(raceDaoAndIsMedalRace.getB().booleanValue());
this.stringConstants = stringConstants;
}
@Override
protected Pair<RaceDAO, Boolean> getResult() {
raceDaoAndIsMedalRace.getA().name = raceNameBox.getValue();
protected Pair<String, Boolean> getResult() {
raceDaoAndIsMedalRace.setA(raceNameBox.getValue());
raceDaoAndIsMedalRace.setB(isMedalRace.getValue());
return raceDaoAndIsMedalRace;
}
@Override
protected Widget getAdditionalWidget() {
VerticalPanel panel = new VerticalPanel();
Widget additionalWidget = super.getAdditionalWidget();
if (additionalWidget != null) {
panel.add(additionalWidget);
}
panel.add(raceNameBox);
panel.add(isMedalRace);
return panel;
}
@Override
public void show() {