Completed Bug 986 - Replace use of AsyncCallback<> in DataEntryDialog<> by dedicated Ok/Cancel callback interface

This commit is contained in:
Jens Rommel committed 2012-09-28 13:49:11 +02:00
1 parent ce3a533909
commit eee0fef97e
32 files changed
+2802 -2812

No files matched your search

@@ -1,108 +1,107 @@
package com.sap.sailing.gwt.ui.adminconsole;
import java.util.ArrayList;
import java.util.List;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.LongBox;
import com.google.gwt.user.client.ui.TextBox;
import com.sap.sailing.domain.common.ScoringSchemeType;
import com.sap.sailing.gwt.ui.client.DataEntryDialog;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.leaderboard.ScoringSchemeTypeFormatter;
public abstract class AbstractLeaderboardDialog extends DataEntryDialog<LeaderboardDescriptor> {
protected final StringMessages stringMessages;
protected TextBox nameTextBox;
protected LeaderboardDescriptor leaderboard;
protected LongBox[] discardThresholdBoxes;
protected static final int MAX_NUMBER_OF_DISCARDED_RESULTS = 4;
public AbstractLeaderboardDialog(String title, LeaderboardDescriptor leaderboardDTO, StringMessages stringConstants,
Validator<LeaderboardDescriptor> validator, AsyncCallback<LeaderboardDescriptor> callback) {
super(title, null, stringConstants.ok(), stringConstants.cancel(), validator, callback);
this.stringMessages = stringConstants;
this.leaderboard = leaderboardDTO;
}
@Override
protected LeaderboardDescriptor getResult() {
int[] discardThresholdsBoxContents = getDiscardThresholds(discardThresholdBoxes);
leaderboard.setName(nameTextBox.getValue());
leaderboard.setDiscardThresholds(discardThresholdsBoxContents);
return leaderboard;
}
protected static int[] getDiscardThresholds(LongBox[] discardThresholdBoxes) {
List<Integer> discardThresholds = new ArrayList<Integer>();
// go backwards; starting from first non-zero element, add them; take over leading zeroes which validator shall discard
for (int i = discardThresholdBoxes.length-1; i>=0; i--) {
if ((discardThresholdBoxes[i].getValue() != null
&& discardThresholdBoxes[i].getValue().toString().length() > 0) || !discardThresholds.isEmpty()) {
if (discardThresholdBoxes[i].getValue() == null) {
discardThresholds.add(0, 0);
} else {
discardThresholds.add(0, discardThresholdBoxes[i].getValue().intValue());
}
}
}
int[] discardThresholdsBoxContents = new int[discardThresholds.size()];
for (int i = 0; i < discardThresholds.size(); i++) {
discardThresholdsBoxContents[i] = discardThresholds.get(i);
}
return discardThresholdsBoxContents;
}
@Override
public void show() {
super.show();
nameTextBox.setFocus(true);
}
protected static LongBox[] initEmptyDiscardThresholdBoxes(DataEntryDialog<?> dialog) {
LongBox[] result = new LongBox[MAX_NUMBER_OF_DISCARDED_RESULTS];
for (int i = 0; i < result.length; i++) {
result[i] = dialog.createLongBoxWithOptionalValue(null, 2);
result[i].setVisibleLength(2);
}
return result;
}
protected static LongBox[] initPrefilledDiscardThresholdBoxes(int[] valuesToShow, DataEntryDialog<?> dialog) {
LongBox[] result = new LongBox[MAX_NUMBER_OF_DISCARDED_RESULTS];
for (int i = 0; i < result.length; i++) {
if (i < valuesToShow.length) {
result[i] = dialog.createLongBox(valuesToShow[i], 2);
} else {
result[i] = dialog.createLongBoxWithOptionalValue(null, 2);
}
result[i].setVisibleLength(2);
}
return result;
}
protected static ListBox createScoringSchemeListBox(DataEntryDialog<?> dialog, StringMessages stringMessages) {
ListBox scoringSchemeListBox2 = dialog.createListBox(false);
for (ScoringSchemeType scoringSchemeType: ScoringSchemeType.values()) {
scoringSchemeListBox2.addItem(ScoringSchemeTypeFormatter.format(scoringSchemeType, stringMessages));
}
return scoringSchemeListBox2;
}
protected static ScoringSchemeType getSelectedScoringSchemeType(ListBox scoringSchemeListBox, StringMessages stringMessages) {
ScoringSchemeType result = null;
int selIndex = scoringSchemeListBox.getSelectedIndex();
if (selIndex >= 0) {
String itemText = scoringSchemeListBox.getItemText(selIndex);
for (ScoringSchemeType scoringSchemeType : ScoringSchemeType.values()) {
if (ScoringSchemeTypeFormatter.format(scoringSchemeType, stringMessages).equals(itemText)) {
result = scoringSchemeType;
break;
}
}
}
return result;
}
}
package com.sap.sailing.gwt.ui.adminconsole;
import java.util.ArrayList;
import java.util.List;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.LongBox;
import com.google.gwt.user.client.ui.TextBox;
import com.sap.sailing.domain.common.ScoringSchemeType;
import com.sap.sailing.gwt.ui.client.DataEntryDialog;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.leaderboard.ScoringSchemeTypeFormatter;
public abstract class AbstractLeaderboardDialog extends DataEntryDialog<LeaderboardDescriptor> {
protected final StringMessages stringMessages;
protected TextBox nameTextBox;
protected LeaderboardDescriptor leaderboard;
protected LongBox[] discardThresholdBoxes;
protected static final int MAX_NUMBER_OF_DISCARDED_RESULTS = 4;
public AbstractLeaderboardDialog(String title, LeaderboardDescriptor leaderboardDTO, StringMessages stringConstants,
Validator<LeaderboardDescriptor> validator, DialogCallback<LeaderboardDescriptor> callback) {
super(title, null, stringConstants.ok(), stringConstants.cancel(), validator, callback);
this.stringMessages = stringConstants;
this.leaderboard = leaderboardDTO;
}
@Override
protected LeaderboardDescriptor getResult() {
int[] discardThresholdsBoxContents = getDiscardThresholds(discardThresholdBoxes);
leaderboard.setName(nameTextBox.getValue());
leaderboard.setDiscardThresholds(discardThresholdsBoxContents);
return leaderboard;
}
protected static int[] getDiscardThresholds(LongBox[] discardThresholdBoxes) {
List<Integer> discardThresholds = new ArrayList<Integer>();
// go backwards; starting from first non-zero element, add them; take over leading zeroes which validator shall discard
for (int i = discardThresholdBoxes.length-1; i>=0; i--) {
if ((discardThresholdBoxes[i].getValue() != null
&& discardThresholdBoxes[i].getValue().toString().length() > 0) || !discardThresholds.isEmpty()) {
if (discardThresholdBoxes[i].getValue() == null) {
discardThresholds.add(0, 0);
} else {
discardThresholds.add(0, discardThresholdBoxes[i].getValue().intValue());
}
}
}
int[] discardThresholdsBoxContents = new int[discardThresholds.size()];
for (int i = 0; i < discardThresholds.size(); i++) {
discardThresholdsBoxContents[i] = discardThresholds.get(i);
}
return discardThresholdsBoxContents;
}
@Override
public void show() {
super.show();
nameTextBox.setFocus(true);
}
protected static LongBox[] initEmptyDiscardThresholdBoxes(DataEntryDialog<?> dialog) {
LongBox[] result = new LongBox[MAX_NUMBER_OF_DISCARDED_RESULTS];
for (int i = 0; i < result.length; i++) {
result[i] = dialog.createLongBoxWithOptionalValue(null, 2);
result[i].setVisibleLength(2);
}
return result;
}
protected static LongBox[] initPrefilledDiscardThresholdBoxes(int[] valuesToShow, DataEntryDialog<?> dialog) {
LongBox[] result = new LongBox[MAX_NUMBER_OF_DISCARDED_RESULTS];
for (int i = 0; i < result.length; i++) {
if (i < valuesToShow.length) {
result[i] = dialog.createLongBox(valuesToShow[i], 2);
} else {
result[i] = dialog.createLongBoxWithOptionalValue(null, 2);
}
result[i].setVisibleLength(2);
}
return result;
}
protected static ListBox createScoringSchemeListBox(DataEntryDialog<?> dialog, StringMessages stringMessages) {
ListBox scoringSchemeListBox2 = dialog.createListBox(false);
for (ScoringSchemeType scoringSchemeType: ScoringSchemeType.values()) {
scoringSchemeListBox2.addItem(ScoringSchemeTypeFormatter.format(scoringSchemeType, stringMessages));
}
return scoringSchemeListBox2;
}
protected static ScoringSchemeType getSelectedScoringSchemeType(ListBox scoringSchemeListBox, StringMessages stringMessages) {
ScoringSchemeType result = null;
int selIndex = scoringSchemeListBox.getSelectedIndex();
if (selIndex >= 0) {
String itemText = scoringSchemeListBox.getItemText(selIndex);
for (ScoringSchemeType scoringSchemeType : ScoringSchemeType.values()) {
if (ScoringSchemeTypeFormatter.format(scoringSchemeType, stringMessages).equals(itemText)) {
result = scoringSchemeType;
break;
}
}
}
return result;
}
}
@@ -1,22 +1,21 @@
package com.sap.sailing.gwt.ui.adminconsole;
import java.util.Collection;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.shared.EventDTO;
public class EventCreateDialog extends EventDialog {
public EventCreateDialog(Collection<EventDTO> existingEvents,
StringMessages stringConstants, AsyncCallback<EventDTO> callback) {
super(new EventDTO(), new EventParameterValidator(stringConstants, existingEvents),
stringConstants, callback);
nameEntryField = createTextBox(null);
nameEntryField.setWidth("200px");
venueEntryField = createTextBox(null);
venueEntryField.setWidth("200px");
}
}
package com.sap.sailing.gwt.ui.adminconsole;
import java.util.Collection;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.shared.EventDTO;
public class EventCreateDialog extends EventDialog {
public EventCreateDialog(Collection<EventDTO> existingEvents,
StringMessages stringConstants, DialogCallback<EventDTO> callback) {
super(new EventDTO(), new EventParameterValidator(stringConstants, existingEvents),
stringConstants, callback);
nameEntryField = createTextBox(null);
nameEntryField.setWidth("200px");
venueEntryField = createTextBox(null);
venueEntryField.setWidth("200px");
}
}
@@ -1,102 +1,101 @@
package com.sap.sailing.gwt.ui.adminconsole;
import java.util.ArrayList;
import java.util.Collection;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Grid;
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.client.DataEntryDialog;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.shared.EventDTO;
import com.sap.sailing.gwt.ui.shared.VenueDTO;
public class EventDialog extends DataEntryDialog<EventDTO> {
protected StringMessages stringConstants;
protected EventDTO event;
protected TextBox nameEntryField;
protected TextBox venueEntryField;
protected static class EventParameterValidator implements Validator<EventDTO> {
private StringMessages stringConstants;
private ArrayList<EventDTO> existingEvents;
public EventParameterValidator(StringMessages stringConstants, Collection<EventDTO> existingEvents) {
this.stringConstants = stringConstants;
this.existingEvents = new ArrayList<EventDTO>(existingEvents);
}
@Override
public String getErrorMessage(EventDTO eventToValidate) {
String errorMessage = null;
boolean nameNotEmpty = eventToValidate.name != null && eventToValidate.name.length() > 0;
boolean venueNotEmpty = eventToValidate.venue.name != null && eventToValidate.venue.name.length() > 0;
boolean unique = true;
for (EventDTO event : existingEvents) {
if (event.name.equals(eventToValidate.name)) {
unique = false;
break;
}
}
if (!nameNotEmpty) {
errorMessage = stringConstants.pleaseEnterAName();
} else if (!venueNotEmpty) {
errorMessage = stringConstants.pleaseEnterNonEmptyVenue();
} else if (!unique) {
errorMessage = stringConstants.eventWithThisNameAlreadyExists();
}
return errorMessage;
}
}
public EventDialog(EventDTO event, EventParameterValidator validator, StringMessages stringConstants,
AsyncCallback<EventDTO> callback) {
super(stringConstants.event(), null, stringConstants.ok(), stringConstants.cancel(), validator,
callback);
this.stringConstants = stringConstants;
this.event = event;
}
@Override
protected EventDTO getResult() {
event.name = nameEntryField.getText();
event.venue = new VenueDTO();
event.venue.name = venueEntryField.getText();
return event;
}
@Override
protected Widget getAdditionalWidget() {
VerticalPanel panel = new VerticalPanel();
Widget additionalWidget = super.getAdditionalWidget();
if (additionalWidget != null) {
panel.add(additionalWidget);
}
Grid formGrid = new Grid(2, 2);
panel.add(formGrid);
formGrid.setWidget(0, 0, new Label(stringConstants.name() + ":"));
formGrid.setWidget(0, 1, nameEntryField);
formGrid.setWidget(1, 0, new Label(stringConstants.venue() + ":"));
formGrid.setWidget(1, 1, venueEntryField);
return panel;
}
@Override
public void show() {
super.show();
nameEntryField.setFocus(true);
}
}
package com.sap.sailing.gwt.ui.adminconsole;
import java.util.ArrayList;
import java.util.Collection;
import com.google.gwt.user.client.ui.Grid;
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.client.DataEntryDialog;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.shared.EventDTO;
import com.sap.sailing.gwt.ui.shared.VenueDTO;
public class EventDialog extends DataEntryDialog<EventDTO> {
protected StringMessages stringConstants;
protected EventDTO event;
protected TextBox nameEntryField;
protected TextBox venueEntryField;
protected static class EventParameterValidator implements Validator<EventDTO> {
private StringMessages stringConstants;
private ArrayList<EventDTO> existingEvents;
public EventParameterValidator(StringMessages stringConstants, Collection<EventDTO> existingEvents) {
this.stringConstants = stringConstants;
this.existingEvents = new ArrayList<EventDTO>(existingEvents);
}
@Override
public String getErrorMessage(EventDTO eventToValidate) {
String errorMessage = null;
boolean nameNotEmpty = eventToValidate.name != null && eventToValidate.name.length() > 0;
boolean venueNotEmpty = eventToValidate.venue.name != null && eventToValidate.venue.name.length() > 0;
boolean unique = true;
for (EventDTO event : existingEvents) {
if (event.name.equals(eventToValidate.name)) {
unique = false;
break;
}
}
if (!nameNotEmpty) {
errorMessage = stringConstants.pleaseEnterAName();
} else if (!venueNotEmpty) {
errorMessage = stringConstants.pleaseEnterNonEmptyVenue();
} else if (!unique) {
errorMessage = stringConstants.eventWithThisNameAlreadyExists();
}
return errorMessage;
}
}
public EventDialog(EventDTO event, EventParameterValidator validator, StringMessages stringConstants,
DialogCallback<EventDTO> callback) {
super(stringConstants.event(), null, stringConstants.ok(), stringConstants.cancel(), validator,
callback);
this.stringConstants = stringConstants;
this.event = event;
}
@Override
protected EventDTO getResult() {
event.name = nameEntryField.getText();
event.venue = new VenueDTO();
event.venue.name = venueEntryField.getText();
return event;
}
@Override
protected Widget getAdditionalWidget() {
VerticalPanel panel = new VerticalPanel();
Widget additionalWidget = super.getAdditionalWidget();
if (additionalWidget != null) {
panel.add(additionalWidget);
}
Grid formGrid = new Grid(2, 2);
panel.add(formGrid);
formGrid.setWidget(0, 0, new Label(stringConstants.name() + ":"));
formGrid.setWidget(0, 1, nameEntryField);
formGrid.setWidget(1, 0, new Label(stringConstants.venue() + ":"));
formGrid.setWidget(1, 1, venueEntryField);
return panel;
}
@Override
public void show() {
super.show();
nameEntryField.setFocus(true);
}
}
@@ -1,21 +1,20 @@
package com.sap.sailing.gwt.ui.adminconsole;
import java.util.Collection;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.shared.EventDTO;
public class EventEditDialog extends EventDialog {
public EventEditDialog(EventDTO event, Collection<EventDTO> otherExistingEvents,
StringMessages stringConstants, AsyncCallback<EventDTO> callback) {
super(event, new EventParameterValidator(stringConstants, otherExistingEvents), stringConstants, callback);
nameEntryField = createTextBox(event.name);
nameEntryField.setWidth("200px");
venueEntryField = createTextBox(event.venue.name);
venueEntryField.setWidth("200px");
}
}
package com.sap.sailing.gwt.ui.adminconsole;
import java.util.Collection;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.shared.EventDTO;
public class EventEditDialog extends EventDialog {
public EventEditDialog(EventDTO event, Collection<EventDTO> otherExistingEvents,
StringMessages stringConstants, DialogCallback<EventDTO> callback) {
super(event, new EventParameterValidator(stringConstants, otherExistingEvents), stringConstants, callback);
nameEntryField = createTextBox(event.name);
nameEntryField.setWidth("200px");
venueEntryField = createTextBox(event.venue.name);
venueEntryField.setWidth("200px");
}
}
@@ -1,19 +1,18 @@
package com.sap.sailing.gwt.ui.adminconsole;
import java.util.Collection;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.sap.sailing.gwt.ui.client.ErrorReporter;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.shared.StrippedLeaderboardDTO;
public class FlexibleLeaderboardCreateDialog extends FlexibleLeaderboardDialog {
public FlexibleLeaderboardCreateDialog(Collection<StrippedLeaderboardDTO> existingLeaderboards, StringMessages stringMessages,
ErrorReporter errorReporter, AsyncCallback<LeaderboardDescriptor> callback) {
super(stringMessages.createFlexibleLeaderboard(), new LeaderboardDescriptor(), stringMessages, errorReporter, new FlexibleLeaderboardDialog.LeaderboardParameterValidator(stringMessages, existingLeaderboards), callback);
nameTextBox = createTextBox(null);
scoringSchemeListBox = createScoringSchemeListBox(this, stringMessages);
discardThresholdBoxes = initEmptyDiscardThresholdBoxes(this);
}
}
package com.sap.sailing.gwt.ui.adminconsole;
import java.util.Collection;
import com.sap.sailing.gwt.ui.client.ErrorReporter;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.shared.StrippedLeaderboardDTO;
public class FlexibleLeaderboardCreateDialog extends FlexibleLeaderboardDialog {
public FlexibleLeaderboardCreateDialog(Collection<StrippedLeaderboardDTO> existingLeaderboards, StringMessages stringMessages,
ErrorReporter errorReporter, DialogCallback<LeaderboardDescriptor> callback) {
super(stringMessages.createFlexibleLeaderboard(), new LeaderboardDescriptor(), stringMessages, errorReporter, new FlexibleLeaderboardDialog.LeaderboardParameterValidator(stringMessages, existingLeaderboards), callback);
nameTextBox = createTextBox(null);
scoringSchemeListBox = createScoringSchemeListBox(this, stringMessages);
discardThresholdBoxes = initEmptyDiscardThresholdBoxes(this);
}
}
@@ -1,98 +1,97 @@
package com.sap.sailing.gwt.ui.adminconsole;
import java.util.Collection;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.gwt.ui.client.ErrorReporter;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.shared.StrippedLeaderboardDTO;
public abstract class FlexibleLeaderboardDialog extends AbstractLeaderboardDialog {
protected ListBox scoringSchemeListBox;
protected static class LeaderboardParameterValidator implements Validator<LeaderboardDescriptor> {
protected final StringMessages stringConstants;
protected final Collection<StrippedLeaderboardDTO> existingLeaderboards;
public LeaderboardParameterValidator(StringMessages stringConstants, Collection<StrippedLeaderboardDTO> existingLeaderboards){
super();
this.stringConstants = stringConstants;
this.existingLeaderboards = existingLeaderboards;
}
@Override
public String getErrorMessage(LeaderboardDescriptor leaderboardToValidate) {
String errorMessage;
boolean nonEmpty = leaderboardToValidate.getName() != null && leaderboardToValidate.getName().length() > 0;
boolean discardThresholdsAscending = true;
for (int i = 1; i < leaderboardToValidate.getDiscardThresholds().length; i++) {
// TODO what are correct values for discarding Thresholds?
if (0 < leaderboardToValidate.getDiscardThresholds().length){
discardThresholdsAscending = discardThresholdsAscending
&& leaderboardToValidate.getDiscardThresholds()[i - 1] < leaderboardToValidate.getDiscardThresholds()[i]
// and if one box is empty, all subsequent boxes need to be empty too
&& (leaderboardToValidate.getDiscardThresholds()[i] == 0 || leaderboardToValidate.getDiscardThresholds()[i-1] > 0);
}
}
boolean unique = true;
for (StrippedLeaderboardDTO dao : existingLeaderboards) {
if(dao.name.equals(leaderboardToValidate.getName())){
unique = false;
}
}
if (!nonEmpty) {
errorMessage = stringConstants.pleaseEnterAName();
} else if(!unique){
errorMessage = stringConstants.leaderboardWithThisNameAlreadyExists();
} else if (!discardThresholdsAscending) {
errorMessage = stringConstants.discardThresholdsMustBeAscending();
} else {
errorMessage = null;
}
return errorMessage;
}
}
public FlexibleLeaderboardDialog(String title, LeaderboardDescriptor leaderboardDTO, StringMessages stringMessages,
ErrorReporter errorReporter, LeaderboardParameterValidator validator, AsyncCallback<LeaderboardDescriptor> callback) {
super(title, leaderboardDTO, stringMessages, validator, callback);
}
@Override
protected LeaderboardDescriptor getResult() {
LeaderboardDescriptor leaderboard = super.getResult();
leaderboard.setRegattaName(null);
leaderboard.setScoringScheme(getSelectedScoringSchemeType(scoringSchemeListBox, stringMessages));
return leaderboard;
}
@Override
protected Widget getAdditionalWidget() {
VerticalPanel mainPanel = new VerticalPanel();
Grid formGrid = new Grid(3,2);
formGrid.setCellSpacing(3);
formGrid.setWidget(0, 0, new Label(stringMessages.name() + ":"));
formGrid.setWidget(0, 1, nameTextBox);
formGrid.setWidget(1, 0, new Label(stringMessages.scoringSystem() + ":"));
formGrid.setWidget(1, 1, scoringSchemeListBox);
mainPanel.add(formGrid);
mainPanel.add(new Label(stringMessages.discardRacesFromHowManyStartedRacesOn()));
HorizontalPanel hp = new HorizontalPanel();
hp.setSpacing(3);
for (int i = 0; i < discardThresholdBoxes.length; i++) {
hp.add(new Label("" + (i + 1) + "."));
hp.add(discardThresholdBoxes[i]);
}
mainPanel.add(hp);
return mainPanel;
}
}
package com.sap.sailing.gwt.ui.adminconsole;
import java.util.Collection;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.gwt.ui.client.ErrorReporter;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.shared.StrippedLeaderboardDTO;
public abstract class FlexibleLeaderboardDialog extends AbstractLeaderboardDialog {
protected ListBox scoringSchemeListBox;
protected static class LeaderboardParameterValidator implements Validator<LeaderboardDescriptor> {
protected final StringMessages stringConstants;
protected final Collection<StrippedLeaderboardDTO> existingLeaderboards;
public LeaderboardParameterValidator(StringMessages stringConstants, Collection<StrippedLeaderboardDTO> existingLeaderboards){
super();
this.stringConstants = stringConstants;
this.existingLeaderboards = existingLeaderboards;
}
@Override
public String getErrorMessage(LeaderboardDescriptor leaderboardToValidate) {
String errorMessage;
boolean nonEmpty = leaderboardToValidate.getName() != null && leaderboardToValidate.getName().length() > 0;
boolean discardThresholdsAscending = true;
for (int i = 1; i < leaderboardToValidate.getDiscardThresholds().length; i++) {
// TODO what are correct values for discarding Thresholds?
if (0 < leaderboardToValidate.getDiscardThresholds().length){
discardThresholdsAscending = discardThresholdsAscending
&& leaderboardToValidate.getDiscardThresholds()[i - 1] < leaderboardToValidate.getDiscardThresholds()[i]
// and if one box is empty, all subsequent boxes need to be empty too
&& (leaderboardToValidate.getDiscardThresholds()[i] == 0 || leaderboardToValidate.getDiscardThresholds()[i-1] > 0);
}
}
boolean unique = true;
for (StrippedLeaderboardDTO dao : existingLeaderboards) {
if(dao.name.equals(leaderboardToValidate.getName())){
unique = false;
}
}
if (!nonEmpty) {
errorMessage = stringConstants.pleaseEnterAName();
} else if(!unique){
errorMessage = stringConstants.leaderboardWithThisNameAlreadyExists();
} else if (!discardThresholdsAscending) {
errorMessage = stringConstants.discardThresholdsMustBeAscending();
} else {
errorMessage = null;
}
return errorMessage;
}
}
public FlexibleLeaderboardDialog(String title, LeaderboardDescriptor leaderboardDTO, StringMessages stringMessages,
ErrorReporter errorReporter, LeaderboardParameterValidator validator, DialogCallback<LeaderboardDescriptor> callback) {
super(title, leaderboardDTO, stringMessages, validator, callback);
}
@Override
protected LeaderboardDescriptor getResult() {
LeaderboardDescriptor leaderboard = super.getResult();
leaderboard.setRegattaName(null);
leaderboard.setScoringScheme(getSelectedScoringSchemeType(scoringSchemeListBox, stringMessages));
return leaderboard;
}
@Override
protected Widget getAdditionalWidget() {
VerticalPanel mainPanel = new VerticalPanel();
Grid formGrid = new Grid(3,2);
formGrid.setCellSpacing(3);
formGrid.setWidget(0, 0, new Label(stringMessages.name() + ":"));
formGrid.setWidget(0, 1, nameTextBox);
formGrid.setWidget(1, 0, new Label(stringMessages.scoringSystem() + ":"));
formGrid.setWidget(1, 1, scoringSchemeListBox);
mainPanel.add(formGrid);
mainPanel.add(new Label(stringMessages.discardRacesFromHowManyStartedRacesOn()));
HorizontalPanel hp = new HorizontalPanel();
hp.setSpacing(3);
for (int i = 0; i < discardThresholdBoxes.length; i++) {
hp.add(new Label("" + (i + 1) + "."));
hp.add(discardThresholdBoxes[i]);
}
mainPanel.add(hp);
return mainPanel;
}
}
@@ -1,34 +1,33 @@
package com.sap.sailing.gwt.ui.adminconsole;
import java.util.Collection;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.sap.sailing.domain.common.ScoringSchemeType;
import com.sap.sailing.gwt.ui.client.ErrorReporter;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.leaderboard.ScoringSchemeTypeFormatter;
import com.sap.sailing.gwt.ui.shared.StrippedLeaderboardDTO;
public class FlexibleLeaderboardEditDialog extends FlexibleLeaderboardDialog {
public FlexibleLeaderboardEditDialog(Collection<StrippedLeaderboardDTO> otherExistingLeaderboards,
LeaderboardDescriptor leaderboard, StringMessages stringConstants, ErrorReporter errorReporter,
AsyncCallback<LeaderboardDescriptor> callback) {
super(stringConstants.editFlexibleLeaderboard(), leaderboard, stringConstants, errorReporter, new FlexibleLeaderboardDialog.LeaderboardParameterValidator(
stringConstants, otherExistingLeaderboards), callback);
nameTextBox = createTextBox(leaderboard.getName());
scoringSchemeListBox = createListBox(false);
int j = 0;
for (ScoringSchemeType scoringSchemeType: ScoringSchemeType.values()) {
scoringSchemeListBox.addItem(ScoringSchemeTypeFormatter.format(scoringSchemeType, stringConstants));
if(leaderboard.getScoringScheme() == scoringSchemeType) {
scoringSchemeListBox.setSelectedIndex(j);
}
j++;
}
scoringSchemeListBox.setEnabled(false);
discardThresholdBoxes = initPrefilledDiscardThresholdBoxes(leaderboard.getDiscardThresholds(), this);
}
}
package com.sap.sailing.gwt.ui.adminconsole;
import java.util.Collection;
import com.sap.sailing.domain.common.ScoringSchemeType;
import com.sap.sailing.gwt.ui.client.ErrorReporter;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.leaderboard.ScoringSchemeTypeFormatter;
import com.sap.sailing.gwt.ui.shared.StrippedLeaderboardDTO;
public class FlexibleLeaderboardEditDialog extends FlexibleLeaderboardDialog {
public FlexibleLeaderboardEditDialog(Collection<StrippedLeaderboardDTO> otherExistingLeaderboards,
LeaderboardDescriptor leaderboard, StringMessages stringConstants, ErrorReporter errorReporter,
DialogCallback<LeaderboardDescriptor> callback) {
super(stringConstants.editFlexibleLeaderboard(), leaderboard, stringConstants, errorReporter, new FlexibleLeaderboardDialog.LeaderboardParameterValidator(
stringConstants, otherExistingLeaderboards), callback);
nameTextBox = createTextBox(leaderboard.getName());
scoringSchemeListBox = createListBox(false);
int j = 0;
for (ScoringSchemeType scoringSchemeType: ScoringSchemeType.values()) {
scoringSchemeListBox.addItem(ScoringSchemeTypeFormatter.format(scoringSchemeType, stringConstants));
if(leaderboard.getScoringScheme() == scoringSchemeType) {
scoringSchemeListBox.setSelectedIndex(j);
}
j++;
}
scoringSchemeListBox.setEnabled(false);
discardThresholdBoxes = initPrefilledDiscardThresholdBoxes(leaderboard.getDiscardThresholds(), this);
}
}
@@ -14,6 +14,7 @@ import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.sap.sailing.gwt.ui.client.DataEntryDialog;
import com.sap.sailing.gwt.ui.client.DataEntryDialog.DialogCallback;
import com.sap.sailing.gwt.ui.client.ErrorReporter;
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
import com.sap.sailing.gwt.ui.client.StringMessages;
@@ -114,14 +115,14 @@ public class FregResultImportUrlPanel extends FlowPanel {
}
return result;
}
}, new AsyncCallback<String>() {
}, new DialogCallback<String>() {
@Override
public void onFailure(Throwable caught) {
public void cancel() {
// user cancelled; just don't add
}
@Override
public void onSuccess(String result) {
public void ok(String result) {
urlListBox.addItem(result);
sailingService.addFragUrl(result, new AsyncCallback<Void>() {
@Override
@@ -47,6 +47,7 @@ import com.sap.sailing.domain.common.RegattaIdentifier;
import com.sap.sailing.domain.common.RegattaName;
import com.sap.sailing.domain.common.RegattaNameAndRaceName;
import com.sap.sailing.domain.common.impl.Util.Pair;
import com.sap.sailing.gwt.ui.client.DataEntryDialog.DialogCallback;
import com.sap.sailing.gwt.ui.client.ErrorReporter;
import com.sap.sailing.gwt.ui.client.ParallelExecutionCallback;
import com.sap.sailing.gwt.ui.client.ParallelExecutionHolder;
@@ -248,13 +249,13 @@ public class LeaderboardConfigPanel extends FormPanel implements RegattaDisplaye
AbstractLeaderboardDialog dialog = new RegattaLeaderboardEditDialog(Collections
.unmodifiableCollection(otherExistingLeaderboard), Collections.unmodifiableCollection(allRegattas),
descriptor, stringMessages, errorReporter,
new AsyncCallback<LeaderboardDescriptor>() {
new DialogCallback<LeaderboardDescriptor>() {
@Override
public void onFailure(Throwable arg0) {
public void cancel() {
}
@Override
public void onSuccess(LeaderboardDescriptor result) {
public void ok(LeaderboardDescriptor result) {
updateLeaderboard(oldLeaderboardName, result);
}
});
@@ -264,13 +265,13 @@ public class LeaderboardConfigPanel extends FormPanel implements RegattaDisplaye
FlexibleLeaderboardEditDialog dialog = new FlexibleLeaderboardEditDialog(Collections
.unmodifiableCollection(otherExistingLeaderboard),
descriptor, stringMessages, errorReporter,
new AsyncCallback<LeaderboardDescriptor>() {
new DialogCallback<LeaderboardDescriptor>() {
@Override
public void onFailure(Throwable arg0) {
public void cancel() {
}
@Override
public void onSuccess(LeaderboardDescriptor result) {
public void ok(LeaderboardDescriptor result) {
updateLeaderboard(oldLeaderboardName, result);
}
});
@@ -693,13 +694,13 @@ public class LeaderboardConfigPanel extends FormPanel implements RegattaDisplaye
}
existingRacesWithoutThisRace.remove(raceColumnWithFleet.getA());
final RaceColumnInLeaderboardDialog raceDialog = new RaceColumnInLeaderboardDialog(existingRacesWithoutThisRace,
raceColumnWithFleet.getA(), stringMessages, new AsyncCallback<RaceColumnDTO>() {
raceColumnWithFleet.getA(), stringMessages, new DialogCallback<RaceColumnDTO>() {
@Override
public void onFailure(Throwable caught) {
public void cancel() {
}
@Override
public void onSuccess(final RaceColumnDTO result) {
public void ok(final RaceColumnDTO result) {
final ParallelExecutionCallback<Void> renameLeaderboardColumnCallback = new ParallelExecutionCallback<Void>();
final ParallelExecutionCallback<Void> updateIsMedalRaceCallback = new ParallelExecutionCallback<Void>();
new ParallelExecutionHolder(renameLeaderboardColumnCallback, updateIsMedalRaceCallback) {
@@ -748,13 +749,13 @@ public class LeaderboardConfigPanel extends FormPanel implements RegattaDisplaye
}
final RaceColumnsInLeaderboardDialog raceDialog = new RaceColumnsInLeaderboardDialog(existingRaceColumns,
stringMessages, new AsyncCallback<List<RaceColumnDTO>>() {
stringMessages, new DialogCallback<List<RaceColumnDTO>>() {
@Override
public void onFailure(Throwable caught) {
public void cancel() {
}
@Override
public void onSuccess(final List<RaceColumnDTO> result) {
public void ok(final List<RaceColumnDTO> result) {
updateRaceColumnsOfLeaderboard(leaderboardName, existingRaceColumns, result);
}
});
@@ -838,13 +839,13 @@ public class LeaderboardConfigPanel extends FormPanel implements RegattaDisplaye
private void createFlexibleLeaderboard() {
AbstractLeaderboardDialog dialog = new FlexibleLeaderboardCreateDialog(Collections.unmodifiableCollection(availableLeaderboardList),
stringMessages, errorReporter, new AsyncCallback<LeaderboardDescriptor>() {
stringMessages, errorReporter, new DialogCallback<LeaderboardDescriptor>() {
@Override
public void onFailure(Throwable arg0) {
public void cancel() {
}
@Override
public void onSuccess(final LeaderboardDescriptor newLeaderboard) {
public void ok(final LeaderboardDescriptor newLeaderboard) {
sailingService.createFlexibleLeaderboard(newLeaderboard.getName(), newLeaderboard.getDiscardThresholds(),
newLeaderboard.getScoringScheme(),
new AsyncCallback<StrippedLeaderboardDTO>() {
@@ -866,13 +867,13 @@ public class LeaderboardConfigPanel extends FormPanel implements RegattaDisplaye
private void createRegattaLeaderboard() {
RegattaLeaderboardCreateDialog dialog = new RegattaLeaderboardCreateDialog(Collections.unmodifiableCollection(availableLeaderboardList),
Collections.unmodifiableCollection(allRegattas), stringMessages, errorReporter, new AsyncCallback<LeaderboardDescriptor>() {
Collections.unmodifiableCollection(allRegattas), stringMessages, errorReporter, new DialogCallback<LeaderboardDescriptor>() {
@Override
public void onFailure(Throwable arg0) {
public void cancel() {
}
@Override
public void onSuccess(final LeaderboardDescriptor newLeaderboard) {
public void ok(final LeaderboardDescriptor newLeaderboard) {
RegattaIdentifier regattaIdentifier = new RegattaName(newLeaderboard.getRegattaName());
sailingService.createRegattaLeaderboard(regattaIdentifier, newLeaderboard.getDiscardThresholds(),
new AsyncCallback<StrippedLeaderboardDTO>() {
@@ -37,6 +37,7 @@ import com.google.gwt.view.client.SelectionChangeEvent;
import com.google.gwt.view.client.SingleSelectionModel;
import com.sap.sailing.gwt.ui.adminconsole.LeaderboardConfigPanel.AnchorCell;
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.RegattaRefresher;
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
@@ -450,11 +451,11 @@ public class LeaderboardGroupConfigPanel extends AbstractRegattaPanel {
final String oldGroupName = group.name;
ArrayList<LeaderboardGroupDTO> otherExistingGroups = new ArrayList<LeaderboardGroupDTO>(availableLeaderboardGroups);
otherExistingGroups.remove(group);
LeaderboardGroupEditDialog dialog = new LeaderboardGroupEditDialog(group, otherExistingGroups, stringMessages, new AsyncCallback<LeaderboardGroupDTO>() {
LeaderboardGroupEditDialog dialog = new LeaderboardGroupEditDialog(group, otherExistingGroups, stringMessages, new DialogCallback<LeaderboardGroupDTO>() {
@Override
public void onFailure(Throwable t) {}
public void cancel() {}
@Override
public void onSuccess(LeaderboardGroupDTO group) {
public void ok(LeaderboardGroupDTO group) {
updateGroup(oldGroupName, group);
}
});
@@ -557,11 +558,11 @@ public class LeaderboardGroupConfigPanel extends AbstractRegattaPanel {
private void addNewGroup() {
LeaderboardGroupCreateDialog dialog = new LeaderboardGroupCreateDialog(
Collections.unmodifiableCollection(availableLeaderboardGroups), stringMessages,
new AsyncCallback<LeaderboardGroupDTO>() {
new DialogCallback<LeaderboardGroupDTO>() {
@Override
public void onFailure(Throwable t) {}
public void cancel() {}
@Override
public void onSuccess(LeaderboardGroupDTO newGroup) {
public void ok(LeaderboardGroupDTO newGroup) {
createNewGroup(newGroup);
}
});
@@ -2,14 +2,13 @@ package com.sap.sailing.gwt.ui.adminconsole;
import java.util.Collection;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.shared.LeaderboardGroupDTO;
public class LeaderboardGroupCreateDialog extends LeaderboardGroupDialog {
public LeaderboardGroupCreateDialog(Collection<LeaderboardGroupDTO> existingGroups,
StringMessages stringMessages, AsyncCallback<LeaderboardGroupDTO> callback) {
StringMessages stringMessages, DialogCallback<LeaderboardGroupDTO> callback) {
super(new LeaderboardGroupDTO(), stringMessages,
callback, existingGroups);
nameEntryField = createTextBox(null);
@@ -8,7 +8,6 @@ import java.util.List;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.HorizontalPanel;
@@ -94,7 +93,7 @@ public class LeaderboardGroupDialog extends DataEntryDialog<LeaderboardGroupDTO>
}
public LeaderboardGroupDialog(LeaderboardGroupDTO group, StringMessages stringMessages,
AsyncCallback<LeaderboardGroupDTO> callback, Collection<LeaderboardGroupDTO> existingLeaderboardGroups) {
DialogCallback<LeaderboardGroupDTO> callback, Collection<LeaderboardGroupDTO> existingLeaderboardGroups) {
super(stringMessages.leaderboardGroup(), null, stringMessages.ok(), stringMessages.cancel(),
new LeaderboardGroupParameterValidator(stringMessages, existingLeaderboardGroups), callback);
this.stringMessages = stringMessages;
@@ -2,14 +2,13 @@ package com.sap.sailing.gwt.ui.adminconsole;
import java.util.Collection;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.shared.LeaderboardGroupDTO;
public class LeaderboardGroupEditDialog extends LeaderboardGroupDialog {
public LeaderboardGroupEditDialog(LeaderboardGroupDTO group, Collection<LeaderboardGroupDTO> otherExistingGroups,
StringMessages stringMessages, AsyncCallback<LeaderboardGroupDTO> callback) {
StringMessages stringMessages, DialogCallback<LeaderboardGroupDTO> callback) {
super(group, stringMessages, callback, otherExistingGroups);
// don't allow editing the overall leaderboard's scoring scheme if the group already uses an overall leaderboard
getOverallLeaderboardScoringSchemeListBox().setEnabled(!group.hasOverallLeaderboard());
@@ -1,105 +1,104 @@
package com.sap.sailing.gwt.ui.adminconsole;
import java.util.List;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.HasVerticalAlignment;
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.client.DataEntryDialog;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.shared.RaceColumnDTO;
/**
* Fills a {@link RaceColumnDTO} object by setting its {@link RaceColumnDTO#setMedalRace(boolean) medal race} property and its name.
* @author Axel Uhl (D043530)
*
*/
public class RaceColumnInLeaderboardDialog extends DataEntryDialog<RaceColumnDTO> {
private final TextBox raceNameBox;
private final CheckBox isMedalRace;
private final StringMessages stringConstants;
private RaceColumnDTO raceColumnToEdit;
private static class RaceDialogValidator implements Validator<RaceColumnDTO> {
private StringMessages stringConstants;
private List<RaceColumnDTO> existingRaces;
public RaceDialogValidator(StringMessages stringConstants, List<RaceColumnDTO> existingRaceColumnsAndFleetNames) {
this.stringConstants = stringConstants;
this.existingRaces = existingRaceColumnsAndFleetNames;
}
@Override
public String getErrorMessage(RaceColumnDTO valueToValidate) {
String errorMessage;
String racename = valueToValidate.getRaceColumnName();
Boolean isMedalRace = valueToValidate.isMedalRace();
boolean isNameNotEmpty = racename != null & racename != "";
boolean medalRaceNotNull = isMedalRace != null;
boolean unique = true;
for (RaceColumnDTO raceColumn : existingRaces) {
if (raceColumn.getRaceColumnName().equals(valueToValidate.getRaceColumnName())) {
unique = false;
}
}
if (!isNameNotEmpty) {
errorMessage = stringConstants.pleaseEnterAName();
} else if (!medalRaceNotNull) {
errorMessage = stringConstants.medalRaceIsNull();
} else if (!unique) {
errorMessage = stringConstants.raceWithThisNameAlreadyExists();
} else {
return errorMessage = null;
}
return errorMessage;
}
}
public RaceColumnInLeaderboardDialog(List<RaceColumnDTO> existingRaces, RaceColumnDTO raceColumnToEdit,
StringMessages stringConstants, AsyncCallback<RaceColumnDTO> callback) {
super(stringConstants.actionRaceEdit(), null, stringConstants.ok(), stringConstants.cancel(),
new RaceDialogValidator(stringConstants, existingRaces), callback);
this.raceColumnToEdit = raceColumnToEdit;
this.stringConstants = stringConstants;
raceNameBox = createTextBox(raceColumnToEdit.getRaceColumnName());
isMedalRace = createCheckbox(stringConstants.medalRace());
isMedalRace.setValue(raceColumnToEdit.isMedalRace());
}
@Override
protected RaceColumnDTO getResult() {
raceColumnToEdit.name = raceNameBox.getValue();
raceColumnToEdit.setMedalRace(isMedalRace.getValue());
return raceColumnToEdit;
}
@Override
protected Widget getAdditionalWidget() {
VerticalPanel mainPanel = new VerticalPanel();
HorizontalPanel raceNamePanel = new HorizontalPanel();
raceNamePanel.setSpacing(3);
mainPanel.add(raceNamePanel);
raceNamePanel.add(new Label(stringConstants.name() + ":"));
raceNamePanel.add(raceNameBox);
alignAllPanelWidgetsVertically(raceNamePanel, HasVerticalAlignment.ALIGN_MIDDLE);
mainPanel.add(isMedalRace);
return mainPanel;
}
@Override
public void show() {
super.show();
raceNameBox.setFocus(true);
}
}
package com.sap.sailing.gwt.ui.adminconsole;
import java.util.List;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.HasVerticalAlignment;
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.client.DataEntryDialog;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.shared.RaceColumnDTO;
/**
* Fills a {@link RaceColumnDTO} object by setting its {@link RaceColumnDTO#setMedalRace(boolean) medal race} property and its name.
* @author Axel Uhl (D043530)
*
*/
public class RaceColumnInLeaderboardDialog extends DataEntryDialog<RaceColumnDTO> {
private final TextBox raceNameBox;
private final CheckBox isMedalRace;
private final StringMessages stringConstants;
private RaceColumnDTO raceColumnToEdit;
private static class RaceDialogValidator implements Validator<RaceColumnDTO> {
private StringMessages stringConstants;
private List<RaceColumnDTO> existingRaces;
public RaceDialogValidator(StringMessages stringConstants, List<RaceColumnDTO> existingRaceColumnsAndFleetNames) {
this.stringConstants = stringConstants;
this.existingRaces = existingRaceColumnsAndFleetNames;
}
@Override
public String getErrorMessage(RaceColumnDTO valueToValidate) {
String errorMessage;
String racename = valueToValidate.getRaceColumnName();
Boolean isMedalRace = valueToValidate.isMedalRace();
boolean isNameNotEmpty = racename != null & racename != "";
boolean medalRaceNotNull = isMedalRace != null;
boolean unique = true;
for (RaceColumnDTO raceColumn : existingRaces) {
if (raceColumn.getRaceColumnName().equals(valueToValidate.getRaceColumnName())) {
unique = false;
}
}
if (!isNameNotEmpty) {
errorMessage = stringConstants.pleaseEnterAName();
} else if (!medalRaceNotNull) {
errorMessage = stringConstants.medalRaceIsNull();
} else if (!unique) {
errorMessage = stringConstants.raceWithThisNameAlreadyExists();
} else {
return errorMessage = null;
}
return errorMessage;
}
}
public RaceColumnInLeaderboardDialog(List<RaceColumnDTO> existingRaces, RaceColumnDTO raceColumnToEdit,
StringMessages stringConstants, DialogCallback<RaceColumnDTO> callback) {
super(stringConstants.actionRaceEdit(), null, stringConstants.ok(), stringConstants.cancel(),
new RaceDialogValidator(stringConstants, existingRaces), callback);
this.raceColumnToEdit = raceColumnToEdit;
this.stringConstants = stringConstants;
raceNameBox = createTextBox(raceColumnToEdit.getRaceColumnName());
isMedalRace = createCheckbox(stringConstants.medalRace());
isMedalRace.setValue(raceColumnToEdit.isMedalRace());
}
@Override
protected RaceColumnDTO getResult() {
raceColumnToEdit.name = raceNameBox.getValue();
raceColumnToEdit.setMedalRace(isMedalRace.getValue());
return raceColumnToEdit;
}
@Override
protected Widget getAdditionalWidget() {
VerticalPanel mainPanel = new VerticalPanel();
HorizontalPanel raceNamePanel = new HorizontalPanel();
raceNamePanel.setSpacing(3);
mainPanel.add(raceNamePanel);
raceNamePanel.add(new Label(stringConstants.name() + ":"));
raceNamePanel.add(raceNameBox);
alignAllPanelWidgetsVertically(raceNamePanel, HasVerticalAlignment.ALIGN_MIDDLE);
mainPanel.add(isMedalRace);
return mainPanel;
}
@Override
public void show() {
super.show();
raceNameBox.setFocus(true);
}
}
@@ -1,313 +1,312 @@
package com.sap.sailing.gwt.ui.adminconsole;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
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.Grid;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ListBox;
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.domain.common.impl.Util.Pair;
import com.sap.sailing.gwt.ui.client.DataEntryDialog;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.shared.RaceColumnDTO;
import com.sap.sailing.gwt.ui.shared.RegattaDTO;
import com.sap.sailing.gwt.ui.shared.SeriesDTO;
public class RaceColumnInRegattaSeriesDialog extends DataEntryDialog<Pair<SeriesDTO, List<RaceColumnDTO>>> {
private final RegattaDTO regatta;
private final ListBox seriesListBox;
private final ListBox addRacesListBox;
private Button addRacesBtn;
private final List<TextBox> raceNameEntryFields;
private final List<Button> raceNameDeleteButtons;
private final StringMessages stringMessages;
private final TextBox raceNamePrefixTextBox;
private final boolean hasOneSeries;
private Grid raceColumnsGrid;
private VerticalPanel additionalWidgetPanel;
private static class RaceDialogValidator implements Validator<Pair<SeriesDTO, List<RaceColumnDTO>>> {
private StringMessages stringConstants;
public RaceDialogValidator(RegattaDTO regatta, StringMessages stringConstants) {
this.stringConstants = stringConstants;
}
@Override
public String getErrorMessage(Pair<SeriesDTO, List<RaceColumnDTO>> valueToValidate) {
String errorMessage = null;
SeriesDTO series = valueToValidate.getA();
if(series == null) {
errorMessage = "You must select a series";
}
if(errorMessage == null) {
List<RaceColumnDTO> raceColumnsToValidate = valueToValidate.getB();
int index = 0;
boolean raceColumnNameNotEmpty = true;
for (RaceColumnDTO raceColumn : raceColumnsToValidate) {
raceColumnNameNotEmpty = raceColumn.name != null && raceColumn.name.length() > 0;
if (!raceColumnNameNotEmpty) {
break;
}
index++;
}
int index2 = 0;
boolean raceColumnUnique = true;
HashSet<String> setToFindDuplicates = new HashSet<String>();
for (RaceColumnDTO raceColumn : raceColumnsToValidate) {
if (!setToFindDuplicates.add(raceColumn.name)) {
raceColumnUnique = false;
break;
}
index2++;
}
if (!raceColumnNameNotEmpty) {
errorMessage = stringConstants.race() + " " + (index + 1) + ": "
+ stringConstants.pleaseEnterAName();
} else if (!raceColumnUnique) {
errorMessage = stringConstants.race() + " " + (index2 + 1) + ": "
+ stringConstants.raceWithThisNameAlreadyExists();
}
}
return errorMessage;
}
}
public RaceColumnInRegattaSeriesDialog(RegattaDTO regatta, StringMessages stringConstants,
AsyncCallback<Pair<SeriesDTO, List<RaceColumnDTO>>> callback) {
super(stringConstants.actionEditRaces(), null, stringConstants.ok(), stringConstants.cancel(),
new RaceDialogValidator(regatta, stringConstants), callback);
this.regatta = regatta;
this.stringMessages = stringConstants;
this.hasOneSeries = regatta.series.size() == 1;
seriesListBox = createListBox(false);
addRacesListBox = createListBox(false);
raceNamePrefixTextBox = createTextBox(null);
raceNameEntryFields = new ArrayList<TextBox>();
raceNameDeleteButtons = new ArrayList<Button>();
raceColumnsGrid = new Grid(0, 0);
}
private Widget createRaceNameWidget(String defaultName, boolean enabled) {
TextBox textBox = createTextBox(defaultName);
textBox.setVisibleLength(40);
textBox.setEnabled(enabled);
raceNameEntryFields.add(textBox);
return textBox;
}
private Widget createRaceNameDeleteButtonWidget() {
final Button raceNameDeleteBtn = new Button(stringMessages.delete());
raceNameDeleteBtn.addStyleName("inlineButton");
raceNameDeleteButtons.add(raceNameDeleteBtn);
raceNameDeleteBtn.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
int index = 0;
for(Button btn: raceNameDeleteButtons) {
if(raceNameDeleteBtn == btn) {
break;
}
index++;
}
raceNameEntryFields.remove(index);
raceNameDeleteButtons.remove(index);
updateRaceColumnsGrid(additionalWidgetPanel);
}
});
return raceNameDeleteBtn;
}
@Override
protected Pair<SeriesDTO, List<RaceColumnDTO>> getResult() {
SeriesDTO selectedSeries = getSelectedSeries();
List<RaceColumnDTO> races = new ArrayList<RaceColumnDTO>();
int racesCount = raceNameEntryFields.size();
for(int i = 0; i < racesCount; i++) {
String raceColumnName = raceNameEntryFields.get(i).getValue();
RaceColumnDTO raceColumnDTO = findRaceColumnInSeriesByName(selectedSeries, raceColumnName);
if(raceColumnDTO == null) {
raceColumnDTO = new RaceColumnDTO();
raceColumnDTO.name = raceColumnName;
}
races.add(raceColumnDTO);
}
return new Pair<SeriesDTO, List<RaceColumnDTO>>(selectedSeries, races);
}
private RaceColumnDTO findRaceColumnInSeriesByName(SeriesDTO series, String raceColumnName) {
RaceColumnDTO result = null;
if(series != null) {
for(RaceColumnDTO raceColumn: series.getRaceColumns()) {
if(raceColumn.name.equals(raceColumnName)) {
result = raceColumn;
break;
}
}
}
return result;
}
@Override
protected Widget getAdditionalWidget() {
additionalWidgetPanel = new VerticalPanel();
Widget additionalWidget = super.getAdditionalWidget();
if (additionalWidget != null) {
additionalWidgetPanel.add(additionalWidget);
}
HorizontalPanel seriesPanel = new HorizontalPanel();
seriesPanel.setSpacing(3);
seriesPanel.add(new Label(stringMessages.series() + ":"));
if(hasOneSeries) {
String seriesName = regatta.series.get(0).name;
seriesListBox.addItem(seriesName);
seriesListBox.setSelectedIndex(0);
if("Default".equals(seriesName)) {
raceNamePrefixTextBox.setText("R");
} else {
raceNamePrefixTextBox.setText(seriesName.substring(0, 1).toUpperCase());
}
} else {
seriesListBox.addItem("Please select a series");
for (SeriesDTO series : regatta.series) {
seriesListBox.addItem(series.name);
}
}
seriesListBox.addChangeHandler(new ChangeHandler() {
@Override
public void onChange(ChangeEvent event) {
SeriesDTO selectedSeries = getSelectedSeries();
if(selectedSeries == null) {
raceNamePrefixTextBox.setText("");
} else {
raceNamePrefixTextBox.setText(selectedSeries.name.substring(0, 1).toUpperCase());
}
fillExistingRacesOfSeries();
}
});
seriesPanel.add(seriesListBox);
additionalWidgetPanel.add(seriesPanel);
// add races controls
HorizontalPanel addRacesPanel = new HorizontalPanel();
addRacesPanel.setSpacing(3);
addRacesPanel.add(new Label(stringMessages.add()));
addRacesPanel.add(addRacesListBox);
for(int i = 1; i <= 10; i++) {
addRacesListBox.addItem("" + i);
}
addRacesListBox.setSelectedIndex(0);
raceNamePrefixTextBox.setWidth("20px");
addRacesPanel.add(raceNamePrefixTextBox);
addRacesBtn = new Button(stringMessages.add());
addRacesBtn.addStyleName("inlineButton");
addRacesBtn.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
SeriesDTO selectedSeries = getSelectedSeries();
if(selectedSeries != null) {
String racePrefix = raceNamePrefixTextBox.getText();
int racesCountToCreate = addRacesListBox.getSelectedIndex()+1;
int currentSize = raceNameEntryFields.size();
for(int i = 1; i <= racesCountToCreate; i++) {
String raceName = racePrefix;
if(racesCountToCreate != 1 || selectedSeries.getRaceColumns().size() > 0) {
raceName += (currentSize + i);
}
createRaceNameWidget(raceName, true);
createRaceNameDeleteButtonWidget();
}
updateRaceColumnsGrid(additionalWidgetPanel);
} else {
Window.alert("Please select a series first.");
}
}
});
addRacesPanel.add(addRacesBtn);
additionalWidgetPanel.add(addRacesPanel);
additionalWidgetPanel.add(createHeadlineLabel(stringMessages.races()));
additionalWidgetPanel.add(raceColumnsGrid);
if(hasOneSeries) {
fillExistingRacesOfSeries();
}
return additionalWidgetPanel;
}
private void fillExistingRacesOfSeries() {
SeriesDTO selectedSeries = getSelectedSeries();
raceNameEntryFields.clear();
raceNameDeleteButtons.clear();
if(selectedSeries != null && !selectedSeries.getRaceColumns().isEmpty()) {
for(RaceColumnDTO raceColumn: selectedSeries.getRaceColumns()) {
createRaceNameWidget(raceColumn.name, false);
createRaceNameDeleteButtonWidget();
}
}
updateRaceColumnsGrid(additionalWidgetPanel);
}
private void updateRaceColumnsGrid(VerticalPanel parentPanel) {
int widgetIndex = parentPanel.getWidgetIndex(raceColumnsGrid);
parentPanel.remove(raceColumnsGrid);
int raceNamesCount = raceNameEntryFields.size();
if(raceNamesCount > 0) {
raceColumnsGrid = new Grid(raceNamesCount + 1, 3);
raceColumnsGrid.setCellSpacing(4);
raceColumnsGrid.setHTML(0, 0, stringMessages.name());
for(int i = 0; i < raceNamesCount; i++) {
raceColumnsGrid.setWidget(i+1, 0, raceNameEntryFields.get(i));
raceColumnsGrid.setWidget(i+1, 1, raceNameDeleteButtons.get(i));
}
} else {
raceColumnsGrid = new Grid(0, 0);
}
parentPanel.insert(raceColumnsGrid, widgetIndex);
}
private SeriesDTO getSelectedSeries() {
SeriesDTO result = null;
int selIndex = seriesListBox.getSelectedIndex();
if(selIndex > 0 || hasOneSeries) { // the zero index represents the 'no selection' text
String itemText = seriesListBox.getItemText(selIndex);
for(SeriesDTO seriesDTO: regatta.series) {
if(seriesDTO.name.equals(itemText)) {
result = seriesDTO;
break;
}
}
}
return result;
}
@Override
public void show() {
super.show();
}
}
package com.sap.sailing.gwt.ui.adminconsole;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ListBox;
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.domain.common.impl.Util.Pair;
import com.sap.sailing.gwt.ui.client.DataEntryDialog;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.shared.RaceColumnDTO;
import com.sap.sailing.gwt.ui.shared.RegattaDTO;
import com.sap.sailing.gwt.ui.shared.SeriesDTO;
public class RaceColumnInRegattaSeriesDialog extends DataEntryDialog<Pair<SeriesDTO, List<RaceColumnDTO>>> {
private final RegattaDTO regatta;
private final ListBox seriesListBox;
private final ListBox addRacesListBox;
private Button addRacesBtn;
private final List<TextBox> raceNameEntryFields;
private final List<Button> raceNameDeleteButtons;
private final StringMessages stringMessages;
private final TextBox raceNamePrefixTextBox;
private final boolean hasOneSeries;
private Grid raceColumnsGrid;
private VerticalPanel additionalWidgetPanel;
private static class RaceDialogValidator implements Validator<Pair<SeriesDTO, List<RaceColumnDTO>>> {
private StringMessages stringConstants;
public RaceDialogValidator(RegattaDTO regatta, StringMessages stringConstants) {
this.stringConstants = stringConstants;
}
@Override
public String getErrorMessage(Pair<SeriesDTO, List<RaceColumnDTO>> valueToValidate) {
String errorMessage = null;
SeriesDTO series = valueToValidate.getA();
if(series == null) {
errorMessage = "You must select a series";
}
if(errorMessage == null) {
List<RaceColumnDTO> raceColumnsToValidate = valueToValidate.getB();
int index = 0;
boolean raceColumnNameNotEmpty = true;
for (RaceColumnDTO raceColumn : raceColumnsToValidate) {
raceColumnNameNotEmpty = raceColumn.name != null && raceColumn.name.length() > 0;
if (!raceColumnNameNotEmpty) {
break;
}
index++;
}
int index2 = 0;
boolean raceColumnUnique = true;
HashSet<String> setToFindDuplicates = new HashSet<String>();
for (RaceColumnDTO raceColumn : raceColumnsToValidate) {
if (!setToFindDuplicates.add(raceColumn.name)) {
raceColumnUnique = false;
break;
}
index2++;
}
if (!raceColumnNameNotEmpty) {
errorMessage = stringConstants.race() + " " + (index + 1) + ": "
+ stringConstants.pleaseEnterAName();
} else if (!raceColumnUnique) {
errorMessage = stringConstants.race() + " " + (index2 + 1) + ": "
+ stringConstants.raceWithThisNameAlreadyExists();
}
}
return errorMessage;
}
}
public RaceColumnInRegattaSeriesDialog(RegattaDTO regatta, StringMessages stringConstants,
DialogCallback<Pair<SeriesDTO, List<RaceColumnDTO>>> callback) {
super(stringConstants.actionEditRaces(), null, stringConstants.ok(), stringConstants.cancel(),
new RaceDialogValidator(regatta, stringConstants), callback);
this.regatta = regatta;
this.stringMessages = stringConstants;
this.hasOneSeries = regatta.series.size() == 1;
seriesListBox = createListBox(false);
addRacesListBox = createListBox(false);
raceNamePrefixTextBox = createTextBox(null);
raceNameEntryFields = new ArrayList<TextBox>();
raceNameDeleteButtons = new ArrayList<Button>();
raceColumnsGrid = new Grid(0, 0);
}
private Widget createRaceNameWidget(String defaultName, boolean enabled) {
TextBox textBox = createTextBox(defaultName);
textBox.setVisibleLength(40);
textBox.setEnabled(enabled);
raceNameEntryFields.add(textBox);
return textBox;
}
private Widget createRaceNameDeleteButtonWidget() {
final Button raceNameDeleteBtn = new Button(stringMessages.delete());
raceNameDeleteBtn.addStyleName("inlineButton");
raceNameDeleteButtons.add(raceNameDeleteBtn);
raceNameDeleteBtn.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
int index = 0;
for(Button btn: raceNameDeleteButtons) {
if(raceNameDeleteBtn == btn) {
break;
}
index++;
}
raceNameEntryFields.remove(index);
raceNameDeleteButtons.remove(index);
updateRaceColumnsGrid(additionalWidgetPanel);
}
});
return raceNameDeleteBtn;
}
@Override
protected Pair<SeriesDTO, List<RaceColumnDTO>> getResult() {
SeriesDTO selectedSeries = getSelectedSeries();
List<RaceColumnDTO> races = new ArrayList<RaceColumnDTO>();
int racesCount = raceNameEntryFields.size();
for(int i = 0; i < racesCount; i++) {
String raceColumnName = raceNameEntryFields.get(i).getValue();
RaceColumnDTO raceColumnDTO = findRaceColumnInSeriesByName(selectedSeries, raceColumnName);
if(raceColumnDTO == null) {
raceColumnDTO = new RaceColumnDTO();
raceColumnDTO.name = raceColumnName;
}
races.add(raceColumnDTO);
}
return new Pair<SeriesDTO, List<RaceColumnDTO>>(selectedSeries, races);
}
private RaceColumnDTO findRaceColumnInSeriesByName(SeriesDTO series, String raceColumnName) {
RaceColumnDTO result = null;
if(series != null) {
for(RaceColumnDTO raceColumn: series.getRaceColumns()) {
if(raceColumn.name.equals(raceColumnName)) {
result = raceColumn;
break;
}
}
}
return result;
}
@Override
protected Widget getAdditionalWidget() {
additionalWidgetPanel = new VerticalPanel();
Widget additionalWidget = super.getAdditionalWidget();
if (additionalWidget != null) {
additionalWidgetPanel.add(additionalWidget);
}
HorizontalPanel seriesPanel = new HorizontalPanel();
seriesPanel.setSpacing(3);
seriesPanel.add(new Label(stringMessages.series() + ":"));
if(hasOneSeries) {
String seriesName = regatta.series.get(0).name;
seriesListBox.addItem(seriesName);
seriesListBox.setSelectedIndex(0);
if("Default".equals(seriesName)) {
raceNamePrefixTextBox.setText("R");
} else {
raceNamePrefixTextBox.setText(seriesName.substring(0, 1).toUpperCase());
}
} else {
seriesListBox.addItem("Please select a series");
for (SeriesDTO series : regatta.series) {
seriesListBox.addItem(series.name);
}
}
seriesListBox.addChangeHandler(new ChangeHandler() {
@Override
public void onChange(ChangeEvent event) {
SeriesDTO selectedSeries = getSelectedSeries();
if(selectedSeries == null) {
raceNamePrefixTextBox.setText("");
} else {
raceNamePrefixTextBox.setText(selectedSeries.name.substring(0, 1).toUpperCase());
}
fillExistingRacesOfSeries();
}
});
seriesPanel.add(seriesListBox);
additionalWidgetPanel.add(seriesPanel);
// add races controls
HorizontalPanel addRacesPanel = new HorizontalPanel();
addRacesPanel.setSpacing(3);
addRacesPanel.add(new Label(stringMessages.add()));
addRacesPanel.add(addRacesListBox);
for(int i = 1; i <= 10; i++) {
addRacesListBox.addItem("" + i);
}
addRacesListBox.setSelectedIndex(0);
raceNamePrefixTextBox.setWidth("20px");
addRacesPanel.add(raceNamePrefixTextBox);
addRacesBtn = new Button(stringMessages.add());
addRacesBtn.addStyleName("inlineButton");
addRacesBtn.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
SeriesDTO selectedSeries = getSelectedSeries();
if(selectedSeries != null) {
String racePrefix = raceNamePrefixTextBox.getText();
int racesCountToCreate = addRacesListBox.getSelectedIndex()+1;
int currentSize = raceNameEntryFields.size();
for(int i = 1; i <= racesCountToCreate; i++) {
String raceName = racePrefix;
if(racesCountToCreate != 1 || selectedSeries.getRaceColumns().size() > 0) {
raceName += (currentSize + i);
}
createRaceNameWidget(raceName, true);
createRaceNameDeleteButtonWidget();
}
updateRaceColumnsGrid(additionalWidgetPanel);
} else {
Window.alert("Please select a series first.");
}
}
});
addRacesPanel.add(addRacesBtn);
additionalWidgetPanel.add(addRacesPanel);
additionalWidgetPanel.add(createHeadlineLabel(stringMessages.races()));
additionalWidgetPanel.add(raceColumnsGrid);
if(hasOneSeries) {
fillExistingRacesOfSeries();
}
return additionalWidgetPanel;
}
private void fillExistingRacesOfSeries() {
SeriesDTO selectedSeries = getSelectedSeries();
raceNameEntryFields.clear();
raceNameDeleteButtons.clear();
if(selectedSeries != null && !selectedSeries.getRaceColumns().isEmpty()) {
for(RaceColumnDTO raceColumn: selectedSeries.getRaceColumns()) {
createRaceNameWidget(raceColumn.name, false);
createRaceNameDeleteButtonWidget();
}
}
updateRaceColumnsGrid(additionalWidgetPanel);
}
private void updateRaceColumnsGrid(VerticalPanel parentPanel) {
int widgetIndex = parentPanel.getWidgetIndex(raceColumnsGrid);
parentPanel.remove(raceColumnsGrid);
int raceNamesCount = raceNameEntryFields.size();
if(raceNamesCount > 0) {
raceColumnsGrid = new Grid(raceNamesCount + 1, 3);
raceColumnsGrid.setCellSpacing(4);
raceColumnsGrid.setHTML(0, 0, stringMessages.name());
for(int i = 0; i < raceNamesCount; i++) {
raceColumnsGrid.setWidget(i+1, 0, raceNameEntryFields.get(i));
raceColumnsGrid.setWidget(i+1, 1, raceNameDeleteButtons.get(i));
}
} else {
raceColumnsGrid = new Grid(0, 0);
}
parentPanel.insert(raceColumnsGrid, widgetIndex);
}
private SeriesDTO getSelectedSeries() {
SeriesDTO result = null;
int selIndex = seriesListBox.getSelectedIndex();
if(selIndex > 0 || hasOneSeries) { // the zero index represents the 'no selection' text
String itemText = seriesListBox.getItemText(selIndex);
for(SeriesDTO seriesDTO: regatta.series) {
if(seriesDTO.name.equals(itemText)) {
result = seriesDTO;
break;
}
}
}
return result;
}
@Override
public void show() {
super.show();
}
}
@@ -1,207 +1,206 @@
package com.sap.sailing.gwt.ui.adminconsole;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.HasVerticalAlignment;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ListBox;
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.client.DataEntryDialog;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.shared.RaceColumnDTO;
public class RaceColumnsInLeaderboardDialog extends DataEntryDialog<List<RaceColumnDTO>> {
private final ListBox addRacesListBox;
private Button addRacesBtn;
private final List<TextBox> raceNameEntryFields;
private final List<CheckBox> isMedalRaceCheckboxes;
private final StringMessages stringMessages;
private final TextBox raceNamePrefixTextBox;
private Grid raceColumnsGrid;
private VerticalPanel additionalWidget;
private List<RaceColumnDTO> existingRaces;
private static class RaceDialogValidator implements Validator<List<RaceColumnDTO>> {
private StringMessages stringConstants;
public RaceDialogValidator(StringMessages stringConstants) {
this.stringConstants = stringConstants;
}
@Override
public String getErrorMessage(List<RaceColumnDTO> raceColumnsWithFleetToValidate) {
String errorMessage = null;
List<RaceColumnDTO> raceColumnsToValidate = new ArrayList<RaceColumnDTO>();
for (RaceColumnDTO raceColumnDTO : raceColumnsToValidate) {
raceColumnsToValidate.add(raceColumnDTO);
}
if(errorMessage == null) {
int index = 0;
boolean raceColumnNameNotEmpty = true;
for (RaceColumnDTO raceColumn : raceColumnsToValidate) {
raceColumnNameNotEmpty = raceColumn.name != null && raceColumn.name.length() > 0;
if (!raceColumnNameNotEmpty) {
break;
}
index++;
}
int index2 = 0;
boolean raceColumnUnique = true;
HashSet<String> setToFindDuplicates = new HashSet<String>();
for (RaceColumnDTO raceColumn : raceColumnsToValidate) {
if (!setToFindDuplicates.add(raceColumn.name)) {
raceColumnUnique = false;
break;
}
index2++;
}
if (!raceColumnNameNotEmpty) {
errorMessage = stringConstants.race() + " " + (index + 1) + ": "
+ stringConstants.pleaseEnterAName();
} else if (!raceColumnUnique) {
errorMessage = stringConstants.race() + " " + (index2 + 1) + ": "
+ stringConstants.raceWithThisNameAlreadyExists();
}
}
return errorMessage;
}
}
public RaceColumnsInLeaderboardDialog(List<RaceColumnDTO> existingRaces, StringMessages stringConstants,
AsyncCallback<List<RaceColumnDTO>> callback) {
super(stringConstants.actionAddRaces(), null, stringConstants.ok(), stringConstants.cancel(),
new RaceDialogValidator(stringConstants), callback);
this.existingRaces = existingRaces;
this.stringMessages = stringConstants;
addRacesListBox = createListBox(false);
raceNamePrefixTextBox = createTextBox(null);
raceNameEntryFields = new ArrayList<TextBox>();
isMedalRaceCheckboxes = new ArrayList<CheckBox>();
raceColumnsGrid = new Grid(0, 0);
}
private Widget createRaceNameWidget(String defaultName, boolean enabled) {
TextBox textBox = createTextBox(defaultName);
textBox.setVisibleLength(25);
textBox.setEnabled(enabled);
raceNameEntryFields.add(textBox);
return textBox;
}
private Widget createMedalRaceWidget(boolean isMedalRace, boolean enabled) {
CheckBox checkBox = createCheckbox(stringMessages.medalRace());
checkBox.setEnabled(enabled);
isMedalRaceCheckboxes.add(checkBox);
return checkBox;
}
@Override
protected List<RaceColumnDTO> getResult() {
List<RaceColumnDTO> racesWithFleet = new ArrayList<RaceColumnDTO>();
int racesCount = raceNameEntryFields.size();
for(int i = 0; i < racesCount; i++) {
String raceColumnName = raceNameEntryFields.get(i).getValue();
RaceColumnDTO raceColumnDTO = new RaceColumnDTO();
raceColumnDTO.name = raceColumnName;
raceColumnDTO.setMedalRace(false);
racesWithFleet.add(raceColumnDTO);
}
return racesWithFleet;
}
@Override
protected Widget getAdditionalWidget() {
additionalWidget = new VerticalPanel();
raceNamePrefixTextBox.setText("R");
// add races controls
HorizontalPanel addRacesPanel = new HorizontalPanel();
addRacesPanel.setSpacing(5);
addRacesPanel.add(new Label(stringMessages.add()));
addRacesPanel.add(addRacesListBox);
for(int i = 1; i <= 20; i++) {
addRacesListBox.addItem("" + i);
}
addRacesListBox.setSelectedIndex(0);
addRacesPanel.add(new Label(stringMessages.racesWithNamePrefix()+" "));
raceNamePrefixTextBox.setWidth("20px");
addRacesPanel.add(raceNamePrefixTextBox);
addRacesBtn = new Button(stringMessages.add());
addRacesBtn.addStyleName("inlineButton");
addRacesBtn.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
String racePrefix = raceNamePrefixTextBox.getText();
int racesCountToCreate = addRacesListBox.getSelectedIndex()+1;
int currentSize = raceNameEntryFields.size();
for(int i = 1; i <= racesCountToCreate; i++) {
String raceName = racePrefix;
if(racesCountToCreate != 1 || existingRaces.size() > 0) {
raceName += (currentSize + i);
}
createRaceNameWidget(raceName, true);
createMedalRaceWidget(false, true);
}
updateRaceColumnsGrid(additionalWidget);
}
});
addRacesPanel.add(addRacesBtn);
additionalWidget.add(addRacesPanel);
alignAllPanelWidgetsVertically(addRacesPanel, HasVerticalAlignment.ALIGN_MIDDLE);
additionalWidget.add(createHeadlineLabel(stringMessages.races()));
additionalWidget.add(raceColumnsGrid);
for(RaceColumnDTO raceColumn: existingRaces) {
createRaceNameWidget(raceColumn.getRaceColumnName(), false);
createMedalRaceWidget(raceColumn.isMedalRace(), false);
}
updateRaceColumnsGrid(additionalWidget);
return additionalWidget;
}
private void updateRaceColumnsGrid(VerticalPanel parentPanel) {
int widgetIndex = parentPanel.getWidgetIndex(raceColumnsGrid);
parentPanel.remove(raceColumnsGrid);
int raceNamesCount = raceNameEntryFields.size();
if(raceNamesCount > 0) {
raceColumnsGrid = new Grid(raceNamesCount, 3);
raceColumnsGrid.setCellSpacing(4);
for(int i = 0; i < raceNamesCount; i++) {
raceColumnsGrid.setWidget(i, 0, raceNameEntryFields.get(i));
raceColumnsGrid.setWidget(i, 1, isMedalRaceCheckboxes.get(i));
}
} else {
raceColumnsGrid = new Grid(0, 0);
}
parentPanel.insert(raceColumnsGrid, widgetIndex);
}
@Override
public void show() {
super.show();
}
}
package com.sap.sailing.gwt.ui.adminconsole;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.HasVerticalAlignment;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ListBox;
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.client.DataEntryDialog;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.shared.RaceColumnDTO;
public class RaceColumnsInLeaderboardDialog extends DataEntryDialog<List<RaceColumnDTO>> {
private final ListBox addRacesListBox;
private Button addRacesBtn;
private final List<TextBox> raceNameEntryFields;
private final List<CheckBox> isMedalRaceCheckboxes;
private final StringMessages stringMessages;
private final TextBox raceNamePrefixTextBox;
private Grid raceColumnsGrid;
private VerticalPanel additionalWidget;
private List<RaceColumnDTO> existingRaces;
private static class RaceDialogValidator implements Validator<List<RaceColumnDTO>> {
private StringMessages stringConstants;
public RaceDialogValidator(StringMessages stringConstants) {
this.stringConstants = stringConstants;
}
@Override
public String getErrorMessage(List<RaceColumnDTO> raceColumnsWithFleetToValidate) {
String errorMessage = null;
List<RaceColumnDTO> raceColumnsToValidate = new ArrayList<RaceColumnDTO>();
for (RaceColumnDTO raceColumnDTO : raceColumnsToValidate) {
raceColumnsToValidate.add(raceColumnDTO);
}
if(errorMessage == null) {
int index = 0;
boolean raceColumnNameNotEmpty = true;
for (RaceColumnDTO raceColumn : raceColumnsToValidate) {
raceColumnNameNotEmpty = raceColumn.name != null && raceColumn.name.length() > 0;
if (!raceColumnNameNotEmpty) {
break;
}
index++;
}
int index2 = 0;
boolean raceColumnUnique = true;
HashSet<String> setToFindDuplicates = new HashSet<String>();
for (RaceColumnDTO raceColumn : raceColumnsToValidate) {
if (!setToFindDuplicates.add(raceColumn.name)) {
raceColumnUnique = false;
break;
}
index2++;
}
if (!raceColumnNameNotEmpty) {
errorMessage = stringConstants.race() + " " + (index + 1) + ": "
+ stringConstants.pleaseEnterAName();
} else if (!raceColumnUnique) {
errorMessage = stringConstants.race() + " " + (index2 + 1) + ": "
+ stringConstants.raceWithThisNameAlreadyExists();
}
}
return errorMessage;
}
}
public RaceColumnsInLeaderboardDialog(List<RaceColumnDTO> existingRaces, StringMessages stringConstants,
DialogCallback<List<RaceColumnDTO>> callback) {
super(stringConstants.actionAddRaces(), null, stringConstants.ok(), stringConstants.cancel(),
new RaceDialogValidator(stringConstants), callback);
this.existingRaces = existingRaces;
this.stringMessages = stringConstants;
addRacesListBox = createListBox(false);
raceNamePrefixTextBox = createTextBox(null);
raceNameEntryFields = new ArrayList<TextBox>();
isMedalRaceCheckboxes = new ArrayList<CheckBox>();
raceColumnsGrid = new Grid(0, 0);
}
private Widget createRaceNameWidget(String defaultName, boolean enabled) {
TextBox textBox = createTextBox(defaultName);
textBox.setVisibleLength(25);
textBox.setEnabled(enabled);
raceNameEntryFields.add(textBox);
return textBox;
}
private Widget createMedalRaceWidget(boolean isMedalRace, boolean enabled) {
CheckBox checkBox = createCheckbox(stringMessages.medalRace());
checkBox.setEnabled(enabled);
isMedalRaceCheckboxes.add(checkBox);
return checkBox;
}
@Override
protected List<RaceColumnDTO> getResult() {
List<RaceColumnDTO> racesWithFleet = new ArrayList<RaceColumnDTO>();
int racesCount = raceNameEntryFields.size();
for(int i = 0; i < racesCount; i++) {
String raceColumnName = raceNameEntryFields.get(i).getValue();
RaceColumnDTO raceColumnDTO = new RaceColumnDTO();
raceColumnDTO.name = raceColumnName;
raceColumnDTO.setMedalRace(false);
racesWithFleet.add(raceColumnDTO);
}
return racesWithFleet;
}
@Override
protected Widget getAdditionalWidget() {
additionalWidget = new VerticalPanel();
raceNamePrefixTextBox.setText("R");
// add races controls
HorizontalPanel addRacesPanel = new HorizontalPanel();
addRacesPanel.setSpacing(5);
addRacesPanel.add(new Label(stringMessages.add()));
addRacesPanel.add(addRacesListBox);
for(int i = 1; i <= 20; i++) {
addRacesListBox.addItem("" + i);
}
addRacesListBox.setSelectedIndex(0);
addRacesPanel.add(new Label(stringMessages.racesWithNamePrefix()+" "));
raceNamePrefixTextBox.setWidth("20px");
addRacesPanel.add(raceNamePrefixTextBox);
addRacesBtn = new Button(stringMessages.add());
addRacesBtn.addStyleName("inlineButton");
addRacesBtn.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
String racePrefix = raceNamePrefixTextBox.getText();
int racesCountToCreate = addRacesListBox.getSelectedIndex()+1;
int currentSize = raceNameEntryFields.size();
for(int i = 1; i <= racesCountToCreate; i++) {
String raceName = racePrefix;
if(racesCountToCreate != 1 || existingRaces.size() > 0) {
raceName += (currentSize + i);
}
createRaceNameWidget(raceName, true);
createMedalRaceWidget(false, true);
}
updateRaceColumnsGrid(additionalWidget);
}
});
addRacesPanel.add(addRacesBtn);
additionalWidget.add(addRacesPanel);
alignAllPanelWidgetsVertically(addRacesPanel, HasVerticalAlignment.ALIGN_MIDDLE);
additionalWidget.add(createHeadlineLabel(stringMessages.races()));
additionalWidget.add(raceColumnsGrid);
for(RaceColumnDTO raceColumn: existingRaces) {
createRaceNameWidget(raceColumn.getRaceColumnName(), false);
createMedalRaceWidget(raceColumn.isMedalRace(), false);
}
updateRaceColumnsGrid(additionalWidget);
return additionalWidget;
}
private void updateRaceColumnsGrid(VerticalPanel parentPanel) {
int widgetIndex = parentPanel.getWidgetIndex(raceColumnsGrid);
parentPanel.remove(raceColumnsGrid);
int raceNamesCount = raceNameEntryFields.size();
if(raceNamesCount > 0) {
raceColumnsGrid = new Grid(raceNamesCount, 3);
raceColumnsGrid.setCellSpacing(4);
for(int i = 0; i < raceNamesCount; i++) {
raceColumnsGrid.setWidget(i, 0, raceNameEntryFields.get(i));
raceColumnsGrid.setWidget(i, 1, isMedalRaceCheckboxes.get(i));
}
} else {
raceColumnsGrid = new Grid(0, 0);
}
parentPanel.insert(raceColumnsGrid, widgetIndex);
}
@Override
public void show() {
super.show();
}
}
@@ -1,27 +1,26 @@
package com.sap.sailing.gwt.ui.adminconsole;
import java.util.Collection;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.sap.sailing.gwt.ui.client.ErrorReporter;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.shared.RegattaDTO;
import com.sap.sailing.gwt.ui.shared.StrippedLeaderboardDTO;
public class RegattaLeaderboardCreateDialog extends RegattaLeaderboardDialog {
public RegattaLeaderboardCreateDialog(Collection<StrippedLeaderboardDTO> existingLeaderboards, Collection<RegattaDTO> existingRegattas, StringMessages stringConstants,
ErrorReporter errorReporter, AsyncCallback<LeaderboardDescriptor> callback) {
super(stringConstants.createRegattaLeaderboard(), new LeaderboardDescriptor(), existingRegattas, stringConstants, errorReporter, new RegattaLeaderboardDialog.LeaderboardParameterValidator(stringConstants, existingLeaderboards), callback);
nameTextBox = createTextBox(null);
regattaListBox = createListBox(false);
regattaListBox.addItem(stringConstants.pleaseSelectARegatta());
for (RegattaDTO regatta : existingRegattas) {
regattaListBox.addItem(regatta.name);
}
discardThresholdBoxes = initEmptyDiscardThresholdBoxes(this);
}
}
package com.sap.sailing.gwt.ui.adminconsole;
import java.util.Collection;
import com.sap.sailing.gwt.ui.client.ErrorReporter;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.shared.RegattaDTO;
import com.sap.sailing.gwt.ui.shared.StrippedLeaderboardDTO;
public class RegattaLeaderboardCreateDialog extends RegattaLeaderboardDialog {
public RegattaLeaderboardCreateDialog(Collection<StrippedLeaderboardDTO> existingLeaderboards, Collection<RegattaDTO> existingRegattas, StringMessages stringConstants,
ErrorReporter errorReporter, DialogCallback<LeaderboardDescriptor> callback) {
super(stringConstants.createRegattaLeaderboard(), new LeaderboardDescriptor(), existingRegattas, stringConstants, errorReporter, new RegattaLeaderboardDialog.LeaderboardParameterValidator(stringConstants, existingLeaderboards), callback);
nameTextBox = createTextBox(null);
regattaListBox = createListBox(false);
regattaListBox.addItem(stringConstants.pleaseSelectARegatta());
for (RegattaDTO regatta : existingRegattas) {
regattaListBox.addItem(regatta.name);
}
discardThresholdBoxes = initEmptyDiscardThresholdBoxes(this);
}
}
@@ -1,124 +1,123 @@
package com.sap.sailing.gwt.ui.adminconsole;
import java.util.Collection;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.gwt.ui.client.ErrorReporter;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.shared.RegattaDTO;
import com.sap.sailing.gwt.ui.shared.StrippedLeaderboardDTO;
public abstract class RegattaLeaderboardDialog extends AbstractLeaderboardDialog {
protected ListBox regattaListBox;
protected Collection<RegattaDTO> existingRegattas;
protected static class LeaderboardParameterValidator implements Validator<LeaderboardDescriptor> {
protected final StringMessages stringConstants;
protected final Collection<StrippedLeaderboardDTO> existingLeaderboards;
public LeaderboardParameterValidator(StringMessages stringConstants, Collection<StrippedLeaderboardDTO> existingLeaderboards){
super();
this.stringConstants = stringConstants;
this.existingLeaderboards = existingLeaderboards;
}
@Override
public String getErrorMessage(LeaderboardDescriptor leaderboardToValidate) {
String errorMessage;
boolean nonEmpty = leaderboardToValidate.getName() != null && leaderboardToValidate.getName().length() > 0;
boolean discardThresholdsAscending = true;
for (int i = 1; i < leaderboardToValidate.getDiscardThresholds().length; i++) {
// TODO what are correct values for discarding Thresholds?
if (0 < leaderboardToValidate.getDiscardThresholds().length){
discardThresholdsAscending = discardThresholdsAscending
&& leaderboardToValidate.getDiscardThresholds()[i - 1] < leaderboardToValidate.getDiscardThresholds()[i]
// and if one box is empty, all subsequent boxes need to be empty too
&& (leaderboardToValidate.getDiscardThresholds()[i] == 0 || leaderboardToValidate.getDiscardThresholds()[i-1] > 0);
}
}
boolean unique = true;
for (StrippedLeaderboardDTO dao : existingLeaderboards) {
if(dao.name.equals(leaderboardToValidate.getName())){
unique = false;
}
}
boolean regattaSelected = leaderboardToValidate.getRegattaName() != null ? true : false;
if (!nonEmpty) {
errorMessage = stringConstants.pleaseEnterAName();
} else if(!regattaSelected){
errorMessage = stringConstants.pleaseSelectARegatta();
} else if(!unique){
errorMessage = stringConstants.leaderboardWithThisNameAlreadyExists();
} else if (!discardThresholdsAscending) {
errorMessage = stringConstants.discardThresholdsMustBeAscending();
} else {
errorMessage = null;
}
return errorMessage;
}
}
public RegattaLeaderboardDialog(String title, LeaderboardDescriptor leaderboardDTO, Collection<RegattaDTO> existingRegattas, StringMessages stringConstants,
ErrorReporter errorReporter, LeaderboardParameterValidator validator, AsyncCallback<LeaderboardDescriptor> callback) {
super(title, leaderboardDTO, stringConstants, validator, callback);
this.existingRegattas = existingRegattas;
}
@Override
protected LeaderboardDescriptor getResult() {
LeaderboardDescriptor leaderboard = super.getResult();
leaderboard.setRegattaName(getSelectedRegatta() != null ? getSelectedRegatta().name : null);
return leaderboard;
}
@Override
protected Widget getAdditionalWidget() {
VerticalPanel mainPanel = new VerticalPanel();
Grid formGrid = new Grid(3,2);
formGrid.setCellSpacing(3);
formGrid.setWidget(0, 0, new Label(stringMessages.name() + ":"));
formGrid.setWidget(0, 1, nameTextBox);
formGrid.setWidget(1, 0, new Label(stringMessages.regatta() + ":"));
formGrid.setWidget(1, 1, regattaListBox);
mainPanel.add(formGrid);
mainPanel.add(new Label(stringMessages.discardRacesFromHowManyStartedRacesOn()));
HorizontalPanel hp = new HorizontalPanel();
hp.setSpacing(3);
for (int i = 0; i < discardThresholdBoxes.length; i++) {
hp.add(new Label("" + (i + 1) + "."));
hp.add(discardThresholdBoxes[i]);
}
mainPanel.add(hp);
return mainPanel;
}
public RegattaDTO getSelectedRegatta() {
RegattaDTO result = null;
int selIndex = regattaListBox.getSelectedIndex();
if(selIndex > 0) { // the zero index represents the 'no selection' text
String itemText = regattaListBox.getItemText(selIndex);
for(RegattaDTO regattaDTO: existingRegattas) {
if(regattaDTO.name.equals(itemText)) {
result = regattaDTO;
break;
}
}
}
return result;
}
}
package com.sap.sailing.gwt.ui.adminconsole;
import java.util.Collection;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.gwt.ui.client.ErrorReporter;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.shared.RegattaDTO;
import com.sap.sailing.gwt.ui.shared.StrippedLeaderboardDTO;
public abstract class RegattaLeaderboardDialog extends AbstractLeaderboardDialog {
protected ListBox regattaListBox;
protected Collection<RegattaDTO> existingRegattas;
protected static class LeaderboardParameterValidator implements Validator<LeaderboardDescriptor> {
protected final StringMessages stringConstants;
protected final Collection<StrippedLeaderboardDTO> existingLeaderboards;
public LeaderboardParameterValidator(StringMessages stringConstants, Collection<StrippedLeaderboardDTO> existingLeaderboards){
super();
this.stringConstants = stringConstants;
this.existingLeaderboards = existingLeaderboards;
}
@Override
public String getErrorMessage(LeaderboardDescriptor leaderboardToValidate) {
String errorMessage;
boolean nonEmpty = leaderboardToValidate.getName() != null && leaderboardToValidate.getName().length() > 0;
boolean discardThresholdsAscending = true;
for (int i = 1; i < leaderboardToValidate.getDiscardThresholds().length; i++) {
// TODO what are correct values for discarding Thresholds?
if (0 < leaderboardToValidate.getDiscardThresholds().length){
discardThresholdsAscending = discardThresholdsAscending
&& leaderboardToValidate.getDiscardThresholds()[i - 1] < leaderboardToValidate.getDiscardThresholds()[i]
// and if one box is empty, all subsequent boxes need to be empty too
&& (leaderboardToValidate.getDiscardThresholds()[i] == 0 || leaderboardToValidate.getDiscardThresholds()[i-1] > 0);
}
}
boolean unique = true;
for (StrippedLeaderboardDTO dao : existingLeaderboards) {
if(dao.name.equals(leaderboardToValidate.getName())){
unique = false;
}
}
boolean regattaSelected = leaderboardToValidate.getRegattaName() != null ? true : false;
if (!nonEmpty) {
errorMessage = stringConstants.pleaseEnterAName();
} else if(!regattaSelected){
errorMessage = stringConstants.pleaseSelectARegatta();
} else if(!unique){
errorMessage = stringConstants.leaderboardWithThisNameAlreadyExists();
} else if (!discardThresholdsAscending) {
errorMessage = stringConstants.discardThresholdsMustBeAscending();
} else {
errorMessage = null;
}
return errorMessage;
}
}
public RegattaLeaderboardDialog(String title, LeaderboardDescriptor leaderboardDTO, Collection<RegattaDTO> existingRegattas, StringMessages stringConstants,
ErrorReporter errorReporter, LeaderboardParameterValidator validator, DialogCallback<LeaderboardDescriptor> callback) {
super(title, leaderboardDTO, stringConstants, validator, callback);
this.existingRegattas = existingRegattas;
}
@Override
protected LeaderboardDescriptor getResult() {
LeaderboardDescriptor leaderboard = super.getResult();
leaderboard.setRegattaName(getSelectedRegatta() != null ? getSelectedRegatta().name : null);
return leaderboard;
}
@Override
protected Widget getAdditionalWidget() {
VerticalPanel mainPanel = new VerticalPanel();
Grid formGrid = new Grid(3,2);
formGrid.setCellSpacing(3);
formGrid.setWidget(0, 0, new Label(stringMessages.name() + ":"));
formGrid.setWidget(0, 1, nameTextBox);
formGrid.setWidget(1, 0, new Label(stringMessages.regatta() + ":"));
formGrid.setWidget(1, 1, regattaListBox);
mainPanel.add(formGrid);
mainPanel.add(new Label(stringMessages.discardRacesFromHowManyStartedRacesOn()));
HorizontalPanel hp = new HorizontalPanel();
hp.setSpacing(3);
for (int i = 0; i < discardThresholdBoxes.length; i++) {
hp.add(new Label("" + (i + 1) + "."));
hp.add(discardThresholdBoxes[i]);
}
mainPanel.add(hp);
return mainPanel;
}
public RegattaDTO getSelectedRegatta() {
RegattaDTO result = null;
int selIndex = regattaListBox.getSelectedIndex();
if(selIndex > 0) { // the zero index represents the 'no selection' text
String itemText = regattaListBox.getItemText(selIndex);
for(RegattaDTO regattaDTO: existingRegattas) {
if(regattaDTO.name.equals(itemText)) {
result = regattaDTO;
break;
}
}
}
return result;
}
}
@@ -1,34 +1,33 @@
package com.sap.sailing.gwt.ui.adminconsole;
import java.util.Collection;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.sap.sailing.gwt.ui.client.ErrorReporter;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.shared.RegattaDTO;
import com.sap.sailing.gwt.ui.shared.StrippedLeaderboardDTO;
public class RegattaLeaderboardEditDialog extends RegattaLeaderboardDialog {
public RegattaLeaderboardEditDialog(Collection<StrippedLeaderboardDTO> otherExistingLeaderboards, Collection<RegattaDTO> existingRegattas,
LeaderboardDescriptor leaderboard, StringMessages stringConstants, ErrorReporter errorReporter,
AsyncCallback<LeaderboardDescriptor> callback) {
super(stringConstants.editRegattaLeaderboard(), leaderboard, existingRegattas, stringConstants, errorReporter, new RegattaLeaderboardDialog.LeaderboardParameterValidator(
stringConstants, otherExistingLeaderboards), callback);
nameTextBox = createTextBox(leaderboard.getName());
regattaListBox = createListBox(false);
regattaListBox.addItem(stringConstants.pleaseSelectARegatta());
int i=1;
for (RegattaDTO regatta : existingRegattas) {
regattaListBox.addItem(regatta.name);
if (regatta.name.equals(leaderboard.getRegattaName())) {
regattaListBox.setSelectedIndex(i);
}
i++;
}
regattaListBox.setEnabled(false);
discardThresholdBoxes = initPrefilledDiscardThresholdBoxes(leaderboard.getDiscardThresholds(), this);
}
}
package com.sap.sailing.gwt.ui.adminconsole;
import java.util.Collection;
import com.sap.sailing.gwt.ui.client.ErrorReporter;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.shared.RegattaDTO;
import com.sap.sailing.gwt.ui.shared.StrippedLeaderboardDTO;
public class RegattaLeaderboardEditDialog extends RegattaLeaderboardDialog {
public RegattaLeaderboardEditDialog(Collection<StrippedLeaderboardDTO> otherExistingLeaderboards, Collection<RegattaDTO> existingRegattas,
LeaderboardDescriptor leaderboard, StringMessages stringConstants, ErrorReporter errorReporter,
DialogCallback<LeaderboardDescriptor> callback) {
super(stringConstants.editRegattaLeaderboard(), leaderboard, existingRegattas, stringConstants, errorReporter, new RegattaLeaderboardDialog.LeaderboardParameterValidator(
stringConstants, otherExistingLeaderboards), callback);
nameTextBox = createTextBox(leaderboard.getName());
regattaListBox = createListBox(false);
regattaListBox.addItem(stringConstants.pleaseSelectARegatta());
int i=1;
for (RegattaDTO regatta : existingRegattas) {
regattaListBox.addItem(regatta.name);
if (regatta.name.equals(leaderboard.getRegattaName())) {
regattaListBox.setSelectedIndex(i);
}
i++;
}
regattaListBox.setEnabled(false);
discardThresholdBoxes = initPrefilledDiscardThresholdBoxes(leaderboard.getDiscardThresholds(), this);
}
}
@@ -1,233 +1,232 @@
package com.sap.sailing.gwt.ui.adminconsole;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import com.google.gwt.dom.client.Style.FontWeight;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ListBox;
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.domain.common.ScoringSchemeType;
import com.sap.sailing.gwt.ui.client.DataEntryDialog;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.leaderboard.ScoringSchemeTypeFormatter;
import com.sap.sailing.gwt.ui.shared.BoatClassDTO;
import com.sap.sailing.gwt.ui.shared.RegattaDTO;
import com.sap.sailing.gwt.ui.shared.SeriesDTO;
public class RegattaWithSeriesAndFleetsCreateDialog extends DataEntryDialog<RegattaDTO> {
private StringMessages stringConstants;
private RegattaDTO regatta;
private TextBox nameEntryField;
private TextBox boatClassEntryField;
private ListBox scoringSchemeListBox;
private List<SeriesDTO> createdSeries;
private Grid seriesGrid;
protected static class RegattaParameterValidator implements Validator<RegattaDTO> {
private StringMessages stringConstants;
private ArrayList<RegattaDTO> existingRegattas;
public RegattaParameterValidator(StringMessages stringConstants, Collection<RegattaDTO> existingRegattas) {
this.stringConstants = stringConstants;
this.existingRegattas = new ArrayList<RegattaDTO>(existingRegattas);
}
@Override
public String getErrorMessage(RegattaDTO regattaToValidate) {
String errorMessage = null;
boolean nameNotEmpty = regattaToValidate.name != null && regattaToValidate.name.length() > 0;
boolean boatClassNotEmpty = regattaToValidate.boatClass != null
&& regattaToValidate.boatClass.name.length() > 0;
boolean unique = true;
for (RegattaDTO regatta : existingRegattas) {
if (regatta.name.equals(regattaToValidate.name)) {
unique = false;
break;
}
}
if (!nameNotEmpty) {
errorMessage = stringConstants.pleaseEnterAName();
} else if (!boatClassNotEmpty) {
errorMessage = stringConstants.pleaseEnterAName();
} else if (!unique) {
errorMessage = stringConstants.regattaWithThisNameAlreadyExists();
}
if (errorMessage == null) {
List<SeriesDTO> seriesToValidate = regattaToValidate.series;
int index = 0;
boolean seriesNameNotEmpty = true;
for (SeriesDTO series : seriesToValidate) {
seriesNameNotEmpty = series.name != null && series.name.length() > 0;
if (!seriesNameNotEmpty) {
break;
}
index++;
}
int index2 = 0;
boolean seriesUnique = true;
HashSet<String> setToFindDuplicates = new HashSet<String>();
for (SeriesDTO series : seriesToValidate) {
if (!setToFindDuplicates.add(series.name)) {
seriesUnique = false;
break;
}
index2++;
}
if (!seriesNameNotEmpty) {
errorMessage = stringConstants.series() + " " + (index + 1) + ": "
+ stringConstants.pleaseEnterAName();
} else if (!seriesUnique) {
errorMessage = stringConstants.series() + " " + (index2 + 1) + ": "
+ stringConstants.seriesWithThisNameAlreadyExists();
}
}
return errorMessage;
}
}
public RegattaWithSeriesAndFleetsCreateDialog(Collection<RegattaDTO> existingRegattas,
StringMessages stringConstants, AsyncCallback<RegattaDTO> callback) {
super(stringConstants.regatta(), null, stringConstants.ok(), stringConstants.cancel(),
new RegattaParameterValidator(stringConstants, existingRegattas), callback);
this.stringConstants = stringConstants;
this.regatta = new RegattaDTO();
nameEntryField = createTextBox(null);
nameEntryField.setVisibleLength(40);
boatClassEntryField = createTextBox(null);
boatClassEntryField.setVisibleLength(20);
scoringSchemeListBox = createListBox(false);
for (ScoringSchemeType scoringSchemeType: ScoringSchemeType.values()) {
scoringSchemeListBox.addItem(ScoringSchemeTypeFormatter.format(scoringSchemeType, stringConstants));
}
createdSeries = new ArrayList<SeriesDTO>();
seriesGrid = new Grid(0, 0);
}
@Override
protected RegattaDTO getResult() {
regatta.name = nameEntryField.getText();
regatta.boatClass = new BoatClassDTO(boatClassEntryField.getText(), 0.0);
regatta.scoringScheme = getSelectedScoringSchemeType();
regatta.series = new ArrayList<SeriesDTO>();
regatta.series.addAll(createdSeries);
return regatta;
}
public ScoringSchemeType getSelectedScoringSchemeType() {
ScoringSchemeType result = null;
int selIndex = scoringSchemeListBox.getSelectedIndex();
if(selIndex >= 0) {
String itemText = scoringSchemeListBox.getItemText(selIndex);
for(ScoringSchemeType scoringSchemeType: ScoringSchemeType.values()) {
if(ScoringSchemeTypeFormatter.format(scoringSchemeType, stringConstants).equals(itemText)) {
result = scoringSchemeType;
break;
}
}
}
return result;
}
@Override
protected Widget getAdditionalWidget() {
final VerticalPanel panel = new VerticalPanel();
Widget additionalWidget = super.getAdditionalWidget();
if (additionalWidget != null) {
panel.add(additionalWidget);
}
Grid formGrid = new Grid(3, 2);
panel.add(formGrid);
formGrid.setWidget(0, 0, new Label(stringConstants.name() + ":"));
formGrid.setWidget(0, 1, nameEntryField);
formGrid.setWidget(1, 0, new Label(stringConstants.boatClass() + ":"));
formGrid.setWidget(1, 1, boatClassEntryField);
formGrid.setWidget(2, 0, new Label(stringConstants.scoringSystem() + ":"));
formGrid.setWidget(2, 1, scoringSchemeListBox);
panel.add(createHeadlineLabel(stringConstants.series()));
panel.add(seriesGrid);
Button addSeriesButton = new Button("Add series");
addSeriesButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
RegattaDTO result = getResult();
SeriesWithFleetsCreateDialog dialog = new SeriesWithFleetsCreateDialog(Collections
.unmodifiableCollection(result.series), stringConstants, new AsyncCallback<SeriesDTO>() {
@Override
public void onFailure(Throwable t) {
}
@Override
public void onSuccess(SeriesDTO newSeries) {
createdSeries.add(newSeries);
updateSeriesGrid(panel);
}
});
dialog.show();
}
});
panel.add(addSeriesButton);
return panel;
}
private void updateSeriesGrid(VerticalPanel parentPanel) {
int widgetIndex = parentPanel.getWidgetIndex(seriesGrid);
parentPanel.remove(seriesGrid);
int seriesCount = createdSeries.size();
seriesGrid = new Grid(seriesCount * 2, 3);
seriesGrid.setCellSpacing(3);
for (int i = 0; i < seriesCount; i++) {
SeriesDTO seriesDTO = createdSeries.get(i);
Label seriesLabel = new Label((i + 1) + ". " + stringConstants.series() + ":");
seriesLabel.setWordWrap(false);
seriesLabel.getElement().getStyle().setFontWeight(FontWeight.BOLD);
seriesGrid.setWidget(i * 2, 0, seriesLabel);
seriesGrid.setHTML(i * 2, 1, seriesDTO.name);
if (seriesDTO.getFleets() != null && seriesDTO.getFleets().size() > 0) {
seriesGrid.setHTML(i * 2 + 1, 1, seriesDTO.getFleets().size() + " fleets: "
+ seriesDTO.getFleets().toString());
} else {
seriesGrid.setHTML(i * 2 + 1, 1, seriesDTO.getFleets().size() + " No fleets defined.");
}
}
parentPanel.insert(seriesGrid, widgetIndex);
}
@Override
public void show() {
super.show();
nameEntryField.setFocus(true);
}
}
package com.sap.sailing.gwt.ui.adminconsole;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import com.google.gwt.dom.client.Style.FontWeight;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ListBox;
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.domain.common.ScoringSchemeType;
import com.sap.sailing.gwt.ui.client.DataEntryDialog;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.leaderboard.ScoringSchemeTypeFormatter;
import com.sap.sailing.gwt.ui.shared.BoatClassDTO;
import com.sap.sailing.gwt.ui.shared.RegattaDTO;
import com.sap.sailing.gwt.ui.shared.SeriesDTO;
public class RegattaWithSeriesAndFleetsCreateDialog extends DataEntryDialog<RegattaDTO> {
private StringMessages stringConstants;
private RegattaDTO regatta;
private TextBox nameEntryField;
private TextBox boatClassEntryField;
private ListBox scoringSchemeListBox;
private List<SeriesDTO> createdSeries;
private Grid seriesGrid;
protected static class RegattaParameterValidator implements Validator<RegattaDTO> {
private StringMessages stringConstants;
private ArrayList<RegattaDTO> existingRegattas;
public RegattaParameterValidator(StringMessages stringConstants, Collection<RegattaDTO> existingRegattas) {
this.stringConstants = stringConstants;
this.existingRegattas = new ArrayList<RegattaDTO>(existingRegattas);
}
@Override
public String getErrorMessage(RegattaDTO regattaToValidate) {
String errorMessage = null;
boolean nameNotEmpty = regattaToValidate.name != null && regattaToValidate.name.length() > 0;
boolean boatClassNotEmpty = regattaToValidate.boatClass != null
&& regattaToValidate.boatClass.name.length() > 0;
boolean unique = true;
for (RegattaDTO regatta : existingRegattas) {
if (regatta.name.equals(regattaToValidate.name)) {
unique = false;
break;
}
}
if (!nameNotEmpty) {
errorMessage = stringConstants.pleaseEnterAName();
} else if (!boatClassNotEmpty) {
errorMessage = stringConstants.pleaseEnterAName();
} else if (!unique) {
errorMessage = stringConstants.regattaWithThisNameAlreadyExists();
}
if (errorMessage == null) {
List<SeriesDTO> seriesToValidate = regattaToValidate.series;
int index = 0;
boolean seriesNameNotEmpty = true;
for (SeriesDTO series : seriesToValidate) {
seriesNameNotEmpty = series.name != null && series.name.length() > 0;
if (!seriesNameNotEmpty) {
break;
}
index++;
}
int index2 = 0;
boolean seriesUnique = true;
HashSet<String> setToFindDuplicates = new HashSet<String>();
for (SeriesDTO series : seriesToValidate) {
if (!setToFindDuplicates.add(series.name)) {
seriesUnique = false;
break;
}
index2++;
}
if (!seriesNameNotEmpty) {
errorMessage = stringConstants.series() + " " + (index + 1) + ": "
+ stringConstants.pleaseEnterAName();
} else if (!seriesUnique) {
errorMessage = stringConstants.series() + " " + (index2 + 1) + ": "
+ stringConstants.seriesWithThisNameAlreadyExists();
}
}
return errorMessage;
}
}
public RegattaWithSeriesAndFleetsCreateDialog(Collection<RegattaDTO> existingRegattas,
StringMessages stringConstants, DialogCallback<RegattaDTO> callback) {
super(stringConstants.regatta(), null, stringConstants.ok(), stringConstants.cancel(),
new RegattaParameterValidator(stringConstants, existingRegattas), callback);
this.stringConstants = stringConstants;
this.regatta = new RegattaDTO();
nameEntryField = createTextBox(null);
nameEntryField.setVisibleLength(40);
boatClassEntryField = createTextBox(null);
boatClassEntryField.setVisibleLength(20);
scoringSchemeListBox = createListBox(false);
for (ScoringSchemeType scoringSchemeType: ScoringSchemeType.values()) {
scoringSchemeListBox.addItem(ScoringSchemeTypeFormatter.format(scoringSchemeType, stringConstants));
}
createdSeries = new ArrayList<SeriesDTO>();
seriesGrid = new Grid(0, 0);
}
@Override
protected RegattaDTO getResult() {
regatta.name = nameEntryField.getText();
regatta.boatClass = new BoatClassDTO(boatClassEntryField.getText(), 0.0);
regatta.scoringScheme = getSelectedScoringSchemeType();
regatta.series = new ArrayList<SeriesDTO>();
regatta.series.addAll(createdSeries);
return regatta;
}
public ScoringSchemeType getSelectedScoringSchemeType() {
ScoringSchemeType result = null;
int selIndex = scoringSchemeListBox.getSelectedIndex();
if(selIndex >= 0) {
String itemText = scoringSchemeListBox.getItemText(selIndex);
for(ScoringSchemeType scoringSchemeType: ScoringSchemeType.values()) {
if(ScoringSchemeTypeFormatter.format(scoringSchemeType, stringConstants).equals(itemText)) {
result = scoringSchemeType;
break;
}
}
}
return result;
}
@Override
protected Widget getAdditionalWidget() {
final VerticalPanel panel = new VerticalPanel();
Widget additionalWidget = super.getAdditionalWidget();
if (additionalWidget != null) {
panel.add(additionalWidget);
}
Grid formGrid = new Grid(3, 2);
panel.add(formGrid);
formGrid.setWidget(0, 0, new Label(stringConstants.name() + ":"));
formGrid.setWidget(0, 1, nameEntryField);
formGrid.setWidget(1, 0, new Label(stringConstants.boatClass() + ":"));
formGrid.setWidget(1, 1, boatClassEntryField);
formGrid.setWidget(2, 0, new Label(stringConstants.scoringSystem() + ":"));
formGrid.setWidget(2, 1, scoringSchemeListBox);
panel.add(createHeadlineLabel(stringConstants.series()));
panel.add(seriesGrid);
Button addSeriesButton = new Button("Add series");
addSeriesButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
RegattaDTO result = getResult();
SeriesWithFleetsCreateDialog dialog = new SeriesWithFleetsCreateDialog(Collections
.unmodifiableCollection(result.series), stringConstants, new DialogCallback<SeriesDTO>() {
@Override
public void cancel() {
}
@Override
public void ok(SeriesDTO newSeries) {
createdSeries.add(newSeries);
updateSeriesGrid(panel);
}
});
dialog.show();
}
});
panel.add(addSeriesButton);
return panel;
}
private void updateSeriesGrid(VerticalPanel parentPanel) {
int widgetIndex = parentPanel.getWidgetIndex(seriesGrid);
parentPanel.remove(seriesGrid);
int seriesCount = createdSeries.size();
seriesGrid = new Grid(seriesCount * 2, 3);
seriesGrid.setCellSpacing(3);
for (int i = 0; i < seriesCount; i++) {
SeriesDTO seriesDTO = createdSeries.get(i);
Label seriesLabel = new Label((i + 1) + ". " + stringConstants.series() + ":");
seriesLabel.setWordWrap(false);
seriesLabel.getElement().getStyle().setFontWeight(FontWeight.BOLD);
seriesGrid.setWidget(i * 2, 0, seriesLabel);
seriesGrid.setHTML(i * 2, 1, seriesDTO.name);
if (seriesDTO.getFleets() != null && seriesDTO.getFleets().size() > 0) {
seriesGrid.setHTML(i * 2 + 1, 1, seriesDTO.getFleets().size() + " fleets: "
+ seriesDTO.getFleets().toString());
} else {
seriesGrid.setHTML(i * 2 + 1, 1, seriesDTO.getFleets().size() + " No fleets defined.");
}
}
parentPanel.insert(seriesGrid, widgetIndex);
}
@Override
public void show() {
super.show();
nameEntryField.setFocus(true);
}
}
@@ -15,6 +15,7 @@ import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.domain.common.impl.Util.Pair;
import com.sap.sailing.domain.common.impl.Util.Triple;
import com.sap.sailing.gwt.ui.client.DataEntryDialog;
import com.sap.sailing.gwt.ui.client.DataEntryDialog.DialogCallback;
import com.sap.sailing.gwt.ui.client.ErrorReporter;
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
import com.sap.sailing.gwt.ui.client.StringMessages;
@@ -62,9 +63,9 @@ public class ReplicationPanel extends FlowPanel {
private void addReplication() {
AddReplicationDialog dialog = new AddReplicationDialog(null,
new AsyncCallback<Triple<Pair<String, String>, Integer, Integer>>() {
new DialogCallback<Triple<Pair<String, String>, Integer, Integer>>() {
@Override
public void onSuccess(final Triple<Pair<String, String>, Integer, Integer> masterNameAndExchangeNameAndMessagingPortNumberAndServletPortNumber) {
public void ok(final Triple<Pair<String, String>, Integer, Integer> masterNameAndExchangeNameAndMessagingPortNumberAndServletPortNumber) {
sailingService.startReplicatingFromMaster(masterNameAndExchangeNameAndMessagingPortNumberAndServletPortNumber.getA().getA(),
masterNameAndExchangeNameAndMessagingPortNumberAndServletPortNumber.getA().getB(),
masterNameAndExchangeNameAndMessagingPortNumberAndServletPortNumber.getC(),
@@ -84,7 +85,7 @@ public class ReplicationPanel extends FlowPanel {
}
@Override
public void onFailure(Throwable arg0) {
public void cancel() {
// simply don't add replication
}
});
@@ -141,7 +142,7 @@ public class ReplicationPanel extends FlowPanel {
private final IntegerBox servletPortField;
public AddReplicationDialog(final Validator<Triple<Pair<String, String>, Integer, Integer>> validator,
final AsyncCallback<Triple<Pair<String, String>, Integer, Integer>> callback) {
final DialogCallback<Triple<Pair<String, String>, Integer, Integer>> callback) {
super(stringMessages.add(), stringMessages.enterMaster(),
stringMessages.ok(), stringMessages.cancel(), validator, callback);
hostnameEntryField = createTextBox("localhost");
@@ -1,257 +1,256 @@
package com.sap.sailing.gwt.ui.adminconsole;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.IntegerBox;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ListBox;
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.domain.common.Color;
import com.sap.sailing.gwt.ui.client.DataEntryDialog;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.shared.FleetDTO;
import com.sap.sailing.gwt.ui.shared.SeriesDTO;
public class SeriesWithFleetsCreateDialog extends DataEntryDialog<SeriesDTO> {
private StringMessages stringConstants;
private SeriesDTO series;
private TextBox nameEntryField;
private CheckBox isMedalSeriesCheckbox;
private List<TextBox> fleetNameEntryFields;
private List<ListBox> fleetColorEntryFields;
private List<IntegerBox> fleetOrderNoEntryFields;
private Grid fleetsGrid;
protected static class SeriesParameterValidator implements Validator<SeriesDTO> {
private StringMessages stringConstants;
private ArrayList<SeriesDTO> existingSeries;
public SeriesParameterValidator(StringMessages stringConstants, Collection<SeriesDTO> existingSeries) {
this.stringConstants = stringConstants;
this.existingSeries = new ArrayList<SeriesDTO>(existingSeries);
}
@Override
public String getErrorMessage(SeriesDTO seriesToValidate) {
String errorMessage = null;
boolean nameNotEmpty = seriesToValidate.name != null && seriesToValidate.name.length() > 0;
boolean unique = true;
for (SeriesDTO series : existingSeries) {
if (series.name.equals(seriesToValidate.name)) {
unique = false;
break;
}
}
if (!nameNotEmpty) {
errorMessage = stringConstants.pleaseEnterAName();
} else if (!unique) {
errorMessage = stringConstants.seriesWithThisNameAlreadyExists();
}
if (errorMessage == null) {
List<FleetDTO> fleetsToValidate = seriesToValidate.getFleets();
int index = 0;
boolean fleetNameNotEmpty = true;
for (FleetDTO fleet : fleetsToValidate) {
fleetNameNotEmpty = fleet.name != null && fleet.name.length() > 0;
if (!fleetNameNotEmpty) {
break;
}
index++;
}
int index2 = 0;
boolean fleetUnique = true;
HashSet<String> setToFindDuplicates = new HashSet<String>();
for (FleetDTO fleet: fleetsToValidate) {
if(!setToFindDuplicates.add(fleet.name)) {
fleetUnique = false;
break;
}
index2++;
}
if (!fleetNameNotEmpty) {
errorMessage = stringConstants.fleet() + " " + (index + 1) + ": " + stringConstants.pleaseEnterAName();
} else if (!fleetUnique) {
errorMessage = stringConstants.fleet() + " " + (index2 + 1) + ": " + stringConstants.fleetWithThisNameAlreadyExists();
}
}
return errorMessage;
}
}
public SeriesWithFleetsCreateDialog(Collection<SeriesDTO> existingSeries, StringMessages stringConstants,
AsyncCallback<SeriesDTO> callback) {
super(stringConstants.series(), null, stringConstants.ok(), stringConstants.cancel(),
new SeriesParameterValidator(stringConstants, existingSeries), callback);
this.stringConstants = stringConstants;
this.series = new SeriesDTO();
nameEntryField = createTextBox(null);
nameEntryField.setVisibleLength(40);
isMedalSeriesCheckbox = createCheckbox(stringConstants.medalSeries());
fleetNameEntryFields = new ArrayList<TextBox>();
fleetColorEntryFields = new ArrayList<ListBox>();
fleetOrderNoEntryFields = new ArrayList<IntegerBox>();
fleetsGrid = new Grid(0, 0);
// create at least one fleet
addFleetWidget("Default", 0, null);
}
private Widget createFleetNameWidget(String defaultName) {
TextBox textBox = createTextBox(defaultName);
textBox.setVisibleLength(40);
textBox.setWidth("175px");
fleetNameEntryFields.add(textBox);
return textBox;
}
private Widget createFleetColorWidget(Color defaultColor) {
final ListBox listBox = createListBox(false);
final int fleetIndex = fleetNameEntryFields.size()-1;
listBox.addChangeHandler(new ChangeHandler() {
@Override
public void onChange(ChangeEvent event) {
// set default order no of the selected color
int selIndex = listBox.getSelectedIndex();
IntegerBox orderNoBox = fleetOrderNoEntryFields.get(fleetIndex);
TextBox nameBox = fleetNameEntryFields.get(fleetIndex);
if (selIndex == 0) {
orderNoBox.setValue(0);
} else {
String value = listBox.getValue(selIndex);
final FleetColors color = FleetColors.valueOf(value);
if (color != null) {
orderNoBox.setValue(color.getDefaultOrderNo());
nameBox.setValue(""+color.name().charAt(0)+color.name().toLowerCase().substring(1));
}
}
validate();
}
});
listBox.addItem(stringConstants.noColor());
for(FleetColors value: FleetColors.values()) {
listBox.addItem(value.name());
}
if(defaultColor == null) {
listBox.setSelectedIndex(0);
}
fleetColorEntryFields.add(listBox);
return listBox;
}
private Widget createFleetOrderNoWidget(int defaultValue) {
IntegerBox intBox = createIntegerBox(defaultValue, 3);
fleetOrderNoEntryFields.add(intBox);
return intBox;
}
@Override
protected SeriesDTO getResult() {
series.name = nameEntryField.getText();
series.setMedal(isMedalSeriesCheckbox.getValue());
List<FleetDTO> fleets = new ArrayList<FleetDTO>();
int fleetsCount = fleetNameEntryFields.size();
for(int i = 0; i < fleetsCount; i++) {
FleetDTO fleetDTO = new FleetDTO();
fleetDTO.name = fleetNameEntryFields.get(i).getValue();
fleetDTO.setColor(getSelectedColor(fleetColorEntryFields.get(i)));
int orderNo = -1;
if(fleetOrderNoEntryFields.get(i).getValue() != null) {
orderNo = fleetOrderNoEntryFields.get(i).getValue();
}
fleetDTO.setOrderNo(orderNo);
fleets.add(fleetDTO);
}
series.setFleets(fleets);
return series;
}
private Color getSelectedColor(ListBox colorListBox) {
Color result = null;
int selIndex = colorListBox.getSelectedIndex();
// the zero index represents the 'no color' option
if(selIndex > 0) {
String value = colorListBox.getValue(selIndex);
for(FleetColors color: FleetColors.values()) {
if(color.name().equals(value)) {
result = color.getColor();
break;
}
}
}
return result;
}
@Override
protected Widget getAdditionalWidget() {
final VerticalPanel panel = new VerticalPanel();
Widget additionalWidget = super.getAdditionalWidget();
if (additionalWidget != null) {
panel.add(additionalWidget);
}
Grid formGrid = new Grid(2, 2);
panel.add(formGrid);
formGrid.setWidget(0, 0, new Label(stringConstants.name() + ":"));
formGrid.setWidget(0, 1, nameEntryField);
formGrid.setWidget(1, 1, isMedalSeriesCheckbox);
panel.add(createHeadlineLabel(stringConstants.fleets()));
panel.add(fleetsGrid);
Button addFleetButton = new Button(stringConstants.addFleet());
addFleetButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
addFleetWidget(null, 0, null);
updateFleetsGrid(panel);
}
});
panel.add(addFleetButton);
updateFleetsGrid(panel);
return panel;
}
private void addFleetWidget(String fleetName, int ordering, Color color) {
createFleetNameWidget(fleetName);
createFleetOrderNoWidget(ordering);
createFleetColorWidget(color);
}
private void updateFleetsGrid(VerticalPanel parentPanel) {
int widgetIndex = parentPanel.getWidgetIndex(fleetsGrid);
parentPanel.remove(fleetsGrid);
int fleetCount = fleetNameEntryFields.size();
fleetsGrid = new Grid(fleetCount + 1, 3);
fleetsGrid.setCellSpacing(4);
fleetsGrid.setHTML(0, 0, stringConstants.color());
fleetsGrid.setHTML(0, 1, stringConstants.name());
fleetsGrid.setHTML(0, 2, stringConstants.rank());
for(int i = 0; i < fleetCount; i++) {
fleetsGrid.setWidget(i+1, 0, fleetColorEntryFields.get(i));
fleetsGrid.setWidget(i+1, 1, fleetNameEntryFields.get(i));
fleetsGrid.setWidget(i+1, 2, fleetOrderNoEntryFields.get(i));
}
parentPanel.insert(fleetsGrid, widgetIndex);
}
@Override
public void show() {
super.show();
nameEntryField.setFocus(true);
}
}
package com.sap.sailing.gwt.ui.adminconsole;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.IntegerBox;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ListBox;
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.domain.common.Color;
import com.sap.sailing.gwt.ui.client.DataEntryDialog;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.shared.FleetDTO;
import com.sap.sailing.gwt.ui.shared.SeriesDTO;
public class SeriesWithFleetsCreateDialog extends DataEntryDialog<SeriesDTO> {
private StringMessages stringConstants;
private SeriesDTO series;
private TextBox nameEntryField;
private CheckBox isMedalSeriesCheckbox;
private List<TextBox> fleetNameEntryFields;
private List<ListBox> fleetColorEntryFields;
private List<IntegerBox> fleetOrderNoEntryFields;
private Grid fleetsGrid;
protected static class SeriesParameterValidator implements Validator<SeriesDTO> {
private StringMessages stringConstants;
private ArrayList<SeriesDTO> existingSeries;
public SeriesParameterValidator(StringMessages stringConstants, Collection<SeriesDTO> existingSeries) {
this.stringConstants = stringConstants;
this.existingSeries = new ArrayList<SeriesDTO>(existingSeries);
}
@Override
public String getErrorMessage(SeriesDTO seriesToValidate) {
String errorMessage = null;
boolean nameNotEmpty = seriesToValidate.name != null && seriesToValidate.name.length() > 0;
boolean unique = true;
for (SeriesDTO series : existingSeries) {
if (series.name.equals(seriesToValidate.name)) {
unique = false;
break;
}
}
if (!nameNotEmpty) {
errorMessage = stringConstants.pleaseEnterAName();
} else if (!unique) {
errorMessage = stringConstants.seriesWithThisNameAlreadyExists();
}
if (errorMessage == null) {
List<FleetDTO> fleetsToValidate = seriesToValidate.getFleets();
int index = 0;
boolean fleetNameNotEmpty = true;
for (FleetDTO fleet : fleetsToValidate) {
fleetNameNotEmpty = fleet.name != null && fleet.name.length() > 0;
if (!fleetNameNotEmpty) {
break;
}
index++;
}
int index2 = 0;
boolean fleetUnique = true;
HashSet<String> setToFindDuplicates = new HashSet<String>();
for (FleetDTO fleet: fleetsToValidate) {
if(!setToFindDuplicates.add(fleet.name)) {
fleetUnique = false;
break;
}
index2++;
}
if (!fleetNameNotEmpty) {
errorMessage = stringConstants.fleet() + " " + (index + 1) + ": " + stringConstants.pleaseEnterAName();
} else if (!fleetUnique) {
errorMessage = stringConstants.fleet() + " " + (index2 + 1) + ": " + stringConstants.fleetWithThisNameAlreadyExists();
}
}
return errorMessage;
}
}
public SeriesWithFleetsCreateDialog(Collection<SeriesDTO> existingSeries, StringMessages stringConstants,
DialogCallback<SeriesDTO> callback) {
super(stringConstants.series(), null, stringConstants.ok(), stringConstants.cancel(),
new SeriesParameterValidator(stringConstants, existingSeries), callback);
this.stringConstants = stringConstants;
this.series = new SeriesDTO();
nameEntryField = createTextBox(null);
nameEntryField.setVisibleLength(40);
isMedalSeriesCheckbox = createCheckbox(stringConstants.medalSeries());
fleetNameEntryFields = new ArrayList<TextBox>();
fleetColorEntryFields = new ArrayList<ListBox>();
fleetOrderNoEntryFields = new ArrayList<IntegerBox>();
fleetsGrid = new Grid(0, 0);
// create at least one fleet
addFleetWidget("Default", 0, null);
}
private Widget createFleetNameWidget(String defaultName) {
TextBox textBox = createTextBox(defaultName);
textBox.setVisibleLength(40);
textBox.setWidth("175px");
fleetNameEntryFields.add(textBox);
return textBox;
}
private Widget createFleetColorWidget(Color defaultColor) {
final ListBox listBox = createListBox(false);
final int fleetIndex = fleetNameEntryFields.size()-1;
listBox.addChangeHandler(new ChangeHandler() {
@Override
public void onChange(ChangeEvent event) {
// set default order no of the selected color
int selIndex = listBox.getSelectedIndex();
IntegerBox orderNoBox = fleetOrderNoEntryFields.get(fleetIndex);
TextBox nameBox = fleetNameEntryFields.get(fleetIndex);
if (selIndex == 0) {
orderNoBox.setValue(0);
} else {
String value = listBox.getValue(selIndex);
final FleetColors color = FleetColors.valueOf(value);
if (color != null) {
orderNoBox.setValue(color.getDefaultOrderNo());
nameBox.setValue(""+color.name().charAt(0)+color.name().toLowerCase().substring(1));
}
}
validate();
}
});
listBox.addItem(stringConstants.noColor());
for(FleetColors value: FleetColors.values()) {
listBox.addItem(value.name());
}
if(defaultColor == null) {
listBox.setSelectedIndex(0);
}
fleetColorEntryFields.add(listBox);
return listBox;
}
private Widget createFleetOrderNoWidget(int defaultValue) {
IntegerBox intBox = createIntegerBox(defaultValue, 3);
fleetOrderNoEntryFields.add(intBox);
return intBox;
}
@Override
protected SeriesDTO getResult() {
series.name = nameEntryField.getText();
series.setMedal(isMedalSeriesCheckbox.getValue());
List<FleetDTO> fleets = new ArrayList<FleetDTO>();
int fleetsCount = fleetNameEntryFields.size();
for(int i = 0; i < fleetsCount; i++) {
FleetDTO fleetDTO = new FleetDTO();
fleetDTO.name = fleetNameEntryFields.get(i).getValue();
fleetDTO.setColor(getSelectedColor(fleetColorEntryFields.get(i)));
int orderNo = -1;
if(fleetOrderNoEntryFields.get(i).getValue() != null) {
orderNo = fleetOrderNoEntryFields.get(i).getValue();
}
fleetDTO.setOrderNo(orderNo);
fleets.add(fleetDTO);
}
series.setFleets(fleets);
return series;
}
private Color getSelectedColor(ListBox colorListBox) {
Color result = null;
int selIndex = colorListBox.getSelectedIndex();
// the zero index represents the 'no color' option
if(selIndex > 0) {
String value = colorListBox.getValue(selIndex);
for(FleetColors color: FleetColors.values()) {
if(color.name().equals(value)) {
result = color.getColor();
break;
}
}
}
return result;
}
@Override
protected Widget getAdditionalWidget() {
final VerticalPanel panel = new VerticalPanel();
Widget additionalWidget = super.getAdditionalWidget();
if (additionalWidget != null) {
panel.add(additionalWidget);
}
Grid formGrid = new Grid(2, 2);
panel.add(formGrid);
formGrid.setWidget(0, 0, new Label(stringConstants.name() + ":"));
formGrid.setWidget(0, 1, nameEntryField);
formGrid.setWidget(1, 1, isMedalSeriesCheckbox);
panel.add(createHeadlineLabel(stringConstants.fleets()));
panel.add(fleetsGrid);
Button addFleetButton = new Button(stringConstants.addFleet());
addFleetButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
addFleetWidget(null, 0, null);
updateFleetsGrid(panel);
}
});
panel.add(addFleetButton);
updateFleetsGrid(panel);
return panel;
}
private void addFleetWidget(String fleetName, int ordering, Color color) {
createFleetNameWidget(fleetName);
createFleetOrderNoWidget(ordering);
createFleetColorWidget(color);
}
private void updateFleetsGrid(VerticalPanel parentPanel) {
int widgetIndex = parentPanel.getWidgetIndex(fleetsGrid);
parentPanel.remove(fleetsGrid);
int fleetCount = fleetNameEntryFields.size();
fleetsGrid = new Grid(fleetCount + 1, 3);
fleetsGrid.setCellSpacing(4);
fleetsGrid.setHTML(0, 0, stringConstants.color());
fleetsGrid.setHTML(0, 1, stringConstants.name());
fleetsGrid.setHTML(0, 2, stringConstants.rank());
for(int i = 0; i < fleetCount; i++) {
fleetsGrid.setWidget(i+1, 0, fleetColorEntryFields.get(i));
fleetsGrid.setWidget(i+1, 1, fleetNameEntryFields.get(i));
fleetsGrid.setWidget(i+1, 2, fleetOrderNoEntryFields.get(i));
}
parentPanel.insert(fleetsGrid, widgetIndex);
}
@Override
public void show() {
super.show();
nameEntryField.setFocus(true);
}
}
@@ -32,6 +32,7 @@ import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
import com.sap.sailing.domain.common.WindSource;
import com.sap.sailing.domain.common.WindSourceType;
import com.sap.sailing.gwt.ui.actions.AsyncActionsExecutor;
import com.sap.sailing.gwt.ui.client.DataEntryDialog.DialogCallback;
import com.sap.sailing.gwt.ui.client.ErrorReporter;
import com.sap.sailing.gwt.ui.client.RaceSelectionChangeListener;
import com.sap.sailing.gwt.ui.client.RaceSelectionModel;
@@ -215,13 +216,13 @@ public class WindPanel extends FormPanel implements RegattaDisplayer, WindShower
private void showWindSettingDialog(RaceDTO race, CourseDTO course) {
WindSettingDialog windSettingDialog = new WindSettingDialog(race, course, stringMessages,
new AsyncCallback<WindDTO>() {
new DialogCallback<WindDTO>() {
@Override
public void onFailure(Throwable caught) {
public void cancel() {
}
@Override
public void onSuccess(final WindDTO result) {
public void ok(final WindDTO result) {
addWindFix(result);
}
});
@@ -1,6 +1,5 @@
package com.sap.sailing.gwt.ui.adminconsole;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.DoubleBox;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.Label;
@@ -55,7 +54,7 @@ public class WindSettingDialog extends DataEntryDialog<WindDTO> {
}
}
public WindSettingDialog(RaceDTO race, CourseDTO courseDTO, StringMessages stringMessages, AsyncCallback<WindDTO> callback) {
public WindSettingDialog(RaceDTO race, CourseDTO courseDTO, StringMessages stringMessages, DialogCallback<WindDTO> callback) {
super(stringMessages.actionAddWindData(), null, stringMessages.ok(), stringMessages.cancel(), new WindDataValidator(stringMessages), callback);
this.stringMessages = stringMessages;
speedInKnotsBox = createDoubleBox(5);
@@ -49,6 +49,11 @@ public abstract class DataEntryDialog<T> {
*/
String getErrorMessage(T valueToValidate);
}
public static interface DialogCallback<T> {
void ok(T editedObject);
void cancel();
}
/**
* @param validator
@@ -60,7 +65,7 @@ public abstract class DataEntryDialog<T> {
* {@link AsyncCallback#onSuccess(Object) confirmed}
*/
public DataEntryDialog(String title, String message, String okButtonName, String cancelButtonName,
Validator<T> validator, final AsyncCallback<T> callback) {
Validator<T> validator, final DialogCallback<T> callback) {
this(title, message, okButtonName, cancelButtonName, validator, /* animationEnabled */ true, callback);
}
@@ -74,7 +79,7 @@ public abstract class DataEntryDialog<T> {
* {@link AsyncCallback#onSuccess(Object) confirmed}
*/
public DataEntryDialog(String title, String message, String okButtonName, String cancelButtonName,
Validator<T> validator, boolean animationEnabled, final AsyncCallback<T> callback) {
Validator<T> validator, boolean animationEnabled, final DialogCallback<T> callback) {
dateEntryDialog = new DialogBox();
dateEntryDialog.setText(title);
dateEntryDialog.setAnimationEnabled(animationEnabled);
@@ -103,14 +108,14 @@ public abstract class DataEntryDialog<T> {
@Override
public void onClick(ClickEvent event) {
dateEntryDialog.hide();
callback.onFailure(null);
callback.cancel();
}
});
dateEntryDialog.setWidget(dialogFPanel);
okButton.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
dateEntryDialog.hide();
callback.onSuccess(getResult());
callback.ok(getResult());
}
});
}
@@ -1,6 +1,5 @@
package com.sap.sailing.gwt.ui.client;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Widget;
@@ -15,7 +14,7 @@ public class TextfieldEntryDialog extends DataEntryDialog<String> {
private final TextBox entryField;
public TextfieldEntryDialog(String title, String message, String okButtonName, String cancelButtonName,
String initialValue, final Validator<String> validator, final AsyncCallback<String> callback) {
String initialValue, final Validator<String> validator, final DialogCallback<String> callback) {
super(title, message, okButtonName, cancelButtonName, validator, callback);
entryField = createTextBox(initialValue);
}
@@ -1,6 +1,5 @@
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;
@@ -12,7 +11,7 @@ public class TextfieldEntryDialogWithCheckbox extends DataEntryDialog<Pair<Strin
private final TextBox entryField;
public TextfieldEntryDialogWithCheckbox(String title, String message, String okButtonName, String cancelButtonName,
String checkboxLabel, String initialValue, Validator<Pair<String, Boolean>> validator, AsyncCallback<Pair<String, Boolean>> callback) {
String checkboxLabel, String initialValue, Validator<Pair<String, Boolean>> validator, DialogCallback<Pair<String, Boolean>> callback) {
super(title, message, okButtonName, cancelButtonName, validator, callback);
checkbox = createCheckbox(checkboxLabel);
entryField = createTextBox(initialValue);
@@ -378,7 +378,7 @@ public class MatchAndApplyScoreCorrectionsDialog extends DataEntryDialog<BulkSco
}
}
private static class Callback implements AsyncCallback<BulkScoreCorrectionDTO> {
private static class Callback implements DialogCallback<BulkScoreCorrectionDTO> {
private final SailingServiceAsync sailingService;
private final StringMessages stringMessages;
private final ErrorReporter errorReporter;
@@ -393,12 +393,12 @@ public class MatchAndApplyScoreCorrectionsDialog extends DataEntryDialog<BulkSco
}
@Override
public void onFailure(Throwable caught) {
public void cancel() {
// user has canceled the dialog
}
@Override
public void onSuccess(final BulkScoreCorrectionDTO result) {
public void ok(final BulkScoreCorrectionDTO result) {
leaderboardPanel.getBusyIndicator().setBusy(true);
sailingService.updateLeaderboardScoreCorrectionsAndMaxPointsReasons(result, new AsyncCallback<Void>() {
@Override
@@ -43,7 +43,7 @@ public class ResultSelectionAndApplyDialog extends DataEntryDialog<Triple<String
}
}
private static class Callback implements AsyncCallback<Triple<String, String, Pair<String, Date>>> {
private static class Callback implements DialogCallback<Triple<String, String, Pair<String, Date>>> {
private final EditableLeaderboardPanel leaderboardPanel;
private final SailingServiceAsync sailingService;
private final StringMessages stringMessages;
@@ -58,12 +58,12 @@ public class ResultSelectionAndApplyDialog extends DataEntryDialog<Triple<String
}
@Override
public void onFailure(Throwable caught) {
public void cancel() {
// don't do anything; dialog was canceled
}
@Override
public void onSuccess(Triple<String, String, Pair<String, Date>> result) {
public void ok(Triple<String, String, Pair<String, Date>> result) {
final String scoreCorrectionProviderName = result.getA();
final String eventName = result.getB();
final String boatClassName = result.getC().getA();
@@ -1,6 +1,5 @@
package com.sap.sailing.gwt.ui.shared.components;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.FocusWidget;
import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.gwt.ui.client.DataEntryDialog;
@@ -12,13 +11,13 @@ public class SettingsDialog<SettingsType> extends DataEntryDialog<SettingsType>
public SettingsDialog(final Component<SettingsType> component, StringMessages stringConstants) {
super(stringConstants.settingsForComponent(component.getLocalizedShortName()), null, stringConstants.ok(),
stringConstants.cancel(), component.getSettingsDialogComponent().getValidator(),
new AsyncCallback<SettingsType>() {
new DialogCallback<SettingsType>() {
@Override
public void onFailure(Throwable t) {
public void cancel() {
}
@Override
public void onSuccess(SettingsType newSettings) {
public void ok(SettingsType newSettings) {
component.updateSettings(newSettings);
}
});