diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/DomainObjectFactoryImpl.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/DomainObjectFactoryImpl.java
index a3c0963188f..e01ed924f7e 100755
--- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/DomainObjectFactoryImpl.java
+++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/DomainObjectFactoryImpl.java
@@ -207,6 +207,8 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
}
if (result != null) {
final Leaderboard finalResult = result;
+ finalResult.setDisplayName((String) dbLeaderboard.get(FieldNames.LEADERBOARD_DISPLAY_NAME.name()));
+
DelayedLeaderboardCorrections loadedLeaderboardCorrections = new DelayedLeaderboardCorrectionsImpl(result);
final boolean[] needsMigration = new boolean[1];
loadedLeaderboardCorrections.addLeaderboardCorrectionsResolvedListener(new LeaderboardCorrectionsResolvedListener() {
diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/FieldNames.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/FieldNames.java
index b8b9892cf33..0dbba6e4664 100755
--- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/FieldNames.java
+++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/FieldNames.java
@@ -49,7 +49,7 @@ public enum FieldNames {
COMPETITOR_ID, COMPETITOR_DISPLAY_NAME,
// leaderboard:
- LEADERBOARD_NAME, LEADERBOARD_SUPPRESSED_COMPETITORS, LEADERBOARD_SUPPRESSED_COMPETITOR_IDS,
+ LEADERBOARD_NAME, LEADERBOARD_DISPLAY_NAME, LEADERBOARD_SUPPRESSED_COMPETITORS, LEADERBOARD_SUPPRESSED_COMPETITOR_IDS,
LEADERBOARD_COLUMNS, LEADERBOARD_COLUMN_NAME, LEADERBOARD_COMPETITOR_DISPLAY_NAMES,
LEADERBOARD_IS_MEDAL_RACE_COLUMN, LEADERBOARD_CARRIED_POINTS, LEADERBOARD_CARRIED_POINTS_BY_ID,
LEADERBOARD_SCORE_CORRECTIONS, LEADERBOARD_DISCARDING_THRESHOLDS,
diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoObjectFactoryImpl.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoObjectFactoryImpl.java
index 04586316fc8..8467eac8c96 100755
--- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoObjectFactoryImpl.java
+++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoObjectFactoryImpl.java
@@ -145,6 +145,9 @@ public class MongoObjectFactoryImpl implements MongoObjectFactory {
BasicDBObject query = new BasicDBObject(FieldNames.LEADERBOARD_NAME.name(), leaderboard.getName());
BasicDBObject dbLeaderboard = new BasicDBObject();
dbLeaderboard.put(FieldNames.LEADERBOARD_NAME.name(), leaderboard.getName());
+ if(leaderboard.getDisplayName() != null) {
+ dbLeaderboard.put(FieldNames.LEADERBOARD_DISPLAY_NAME.name(), leaderboard.getDisplayName());
+ }
BasicDBList dbSuppressedCompetitorIds = new BasicDBList();
for (Competitor suppressedCompetitor : leaderboard.getSuppressedCompetitors()) {
dbSuppressedCompetitorIds.add(suppressedCompetitor.getId());
diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/Leaderboard.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/Leaderboard.java
index b87402b9d56..fafd0e48846 100644
--- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/Leaderboard.java
+++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/Leaderboard.java
@@ -276,12 +276,20 @@ public interface Leaderboard extends Named {
void setDisplayName(Competitor competitor, String displayName);
+ /**
+ * If a display name for the leaderboard has been defined,
+ * this method returns it; otherwise, null is returned.
+ */
+ String getDisplayName();
+
+ void setDisplayName(String displayName);
+
/**
* If a display name different from the competitor's {@link Competitor#getName() name} has been defined,
* this method returns it; otherwise, null is returned.
*/
String getDisplayName(Competitor competitor);
-
+
/**
* Tells if the column represented by raceColumn shall be considered when counting the number of "races
* so far" for discarding. Although medal races are never discarded themselves, they still count in determining the
diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/AbstractSimpleLeaderboardImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/AbstractSimpleLeaderboardImpl.java
index 28fec213561..b0235bd3ee5 100755
--- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/AbstractSimpleLeaderboardImpl.java
+++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/AbstractSimpleLeaderboardImpl.java
@@ -57,7 +57,10 @@ public abstract class AbstractSimpleLeaderboardImpl implements Leaderboard, Race
* competitor names for display in a leaderboard.
*/
private final Map displayNames;
-
+
+ /** the display name of the leaderboard */
+ private String displayName;
+
/**
* Backs the {@link #getCarriedPoints(Competitor)} API with data. Can be used to prime this leaderboard
* with aggregated results of races not tracked / displayed by this leaderboard in detail. The points
@@ -151,7 +154,17 @@ public abstract class AbstractSimpleLeaderboardImpl implements Leaderboard, Race
public String getDisplayName(Competitor competitor) {
return displayNames.get(competitor);
}
-
+
+ @Override
+ public String getDisplayName() {
+ return displayName;
+ }
+
+ @Override
+ public void setDisplayName(String displayName) {
+ this.displayName = displayName;
+ }
+
@Override
public ThresholdBasedResultDiscardingRule getResultDiscardingRule() {
return resultDiscardingRule;
diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/meta/MetaLeaderboardColumn.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/meta/MetaLeaderboardColumn.java
index 599cc62a650..74f8479f06b 100755
--- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/meta/MetaLeaderboardColumn.java
+++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/meta/MetaLeaderboardColumn.java
@@ -37,7 +37,7 @@ public class MetaLeaderboardColumn extends SimpleAbstractRaceColumn implements R
@Override
public String getName() {
- return leaderboard.getName();
+ return leaderboard.getDisplayName() != null ? leaderboard.getDisplayName() : leaderboard.getName();
}
@Override
diff --git a/java/com.sap.sailing.gwt.ui/AdminConsole.css b/java/com.sap.sailing.gwt.ui/AdminConsole.css
index 41b6b9e0ad0..d45e78a2c5b 100644
--- a/java/com.sap.sailing.gwt.ui/AdminConsole.css
+++ b/java/com.sap.sailing.gwt.ui/AdminConsole.css
@@ -32,10 +32,6 @@ h1 {
}
/** Most GWT widgets already have a style name defined */
-.gwt-DialogBox {
- width: 400px;
- z-index: 20;
-}
.dialogVPanel {
margin: 5px;
@@ -96,6 +92,10 @@ h1 {
font-weight: bold;
}
+.gwt-DialogBox {
+ z-index: 20;
+}
+
.gwt-DialogBox .Caption {
background: none repeat scroll 0 0 #e5e5e5;
}
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AbstractLeaderboardDialog.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AbstractLeaderboardDialog.java
index 31f1bbb9ddc..6c02da95bfa 100644
--- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AbstractLeaderboardDialog.java
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AbstractLeaderboardDialog.java
@@ -14,6 +14,7 @@ import com.sap.sailing.gwt.ui.leaderboard.ScoringSchemeTypeFormatter;
public abstract class AbstractLeaderboardDialog extends DataEntryDialog {
protected final StringMessages stringMessages;
protected TextBox nameTextBox;
+ protected TextBox displayNameTextBox;
protected LeaderboardDescriptor leaderboard;
protected LongBox[] discardThresholdBoxes;
@@ -30,6 +31,7 @@ public abstract class AbstractLeaderboardDialog extends DataEntryDialog callback) {
super(stringMessages.createFlexibleLeaderboard(), new LeaderboardDescriptor(), stringMessages, errorReporter, new FlexibleLeaderboardDialog.LeaderboardParameterValidator(stringMessages, existingLeaderboards), callback);
nameTextBox = createTextBox(null);
+ displayNameTextBox = createTextBox(null);
scoringSchemeListBox = createScoringSchemeListBox(this, stringMessages);
discardThresholdBoxes = initEmptyDiscardThresholdBoxes(this);
}
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/FlexibleLeaderboardDialog.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/FlexibleLeaderboardDialog.java
index 3a6c3e5ea38..d23d3445462 100644
--- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/FlexibleLeaderboardDialog.java
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/FlexibleLeaderboardDialog.java
@@ -2,11 +2,12 @@ package com.sap.sailing.gwt.ui.adminconsole;
import java.util.Collection;
+import com.google.gwt.user.client.ui.FlowPanel;
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.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;
@@ -76,13 +77,15 @@ public abstract class FlexibleLeaderboardDialog extends AbstractLeaderboardDialo
@Override
protected Widget getAdditionalWidget() {
- VerticalPanel mainPanel = new VerticalPanel();
- Grid formGrid = new Grid(3,2);
+ FlowPanel mainPanel = new FlowPanel();
+ Grid formGrid = new Grid(3,3);
formGrid.setCellSpacing(3);
- formGrid.setWidget(0, 0, new Label(stringMessages.name() + ":"));
+ formGrid.setWidget(0, 0, createLabel(stringMessages.name()));
formGrid.setWidget(0, 1, nameTextBox);
- formGrid.setWidget(1, 0, new Label(stringMessages.scoringSystem() + ":"));
- formGrid.setWidget(1, 1, scoringSchemeListBox);
+ formGrid.setWidget(1, 0, createLabel(stringMessages.displayName()));
+ formGrid.setWidget(1, 1, displayNameTextBox);
+ formGrid.setWidget(2, 0, createLabel(stringMessages.scoringSystem()));
+ formGrid.setWidget(2, 1, scoringSchemeListBox);
mainPanel.add(formGrid);
mainPanel.add(new Label(stringMessages.discardRacesFromHowManyStartedRacesOn()));
HorizontalPanel hp = new HorizontalPanel();
@@ -91,7 +94,9 @@ public abstract class FlexibleLeaderboardDialog extends AbstractLeaderboardDialo
hp.add(new Label("" + (i + 1) + "."));
hp.add(discardThresholdBoxes[i]);
}
+ alignAllPanelWidgetsVertically(hp, HasVerticalAlignment.ALIGN_MIDDLE);
mainPanel.add(hp);
+
return mainPanel;
}
}
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/FlexibleLeaderboardEditDialog.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/FlexibleLeaderboardEditDialog.java
index dba8487bed0..e0696176e72 100644
--- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/FlexibleLeaderboardEditDialog.java
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/FlexibleLeaderboardEditDialog.java
@@ -17,7 +17,7 @@ public class FlexibleLeaderboardEditDialog extends FlexibleLeaderboardDialog {
stringConstants, otherExistingLeaderboards), callback);
nameTextBox = createTextBox(leaderboard.getName());
-
+ displayNameTextBox = createTextBox(leaderboard.getDisplayName());
scoringSchemeListBox = createListBox(false);
int j = 0;
for (ScoringSchemeType scoringSchemeType: ScoringSchemeType.values()) {
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/LeaderboardConfigPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/LeaderboardConfigPanel.java
index 8c751a352f3..979d553a688 100644
--- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/LeaderboardConfigPanel.java
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/LeaderboardConfigPanel.java
@@ -198,6 +198,14 @@ public class LeaderboardConfigPanel extends FormPanel implements RegattaDisplaye
return sortList.size() > 0 & sortList.get(0).isAscending();
}
});
+
+ TextColumn leaderboardDisplayNameColumn = new TextColumn() {
+ @Override
+ public String getValue(StrippedLeaderboardDTO leaderboard) {
+ return leaderboard.getDisplayName() !=null ? leaderboard.getDisplayName() : "";
+ }
+ };
+
TextColumn discardingOptionsColumn = new TextColumn() {
@Override
public String getValue(StrippedLeaderboardDTO leaderboard) {
@@ -291,6 +299,7 @@ public class LeaderboardConfigPanel extends FormPanel implements RegattaDisplaye
}
});
leaderboardTable.addColumn(linkColumn, stringMessages.name());
+ leaderboardTable.addColumn(leaderboardDisplayNameColumn, stringMessages.displayName());
leaderboardTable.addColumn(discardingOptionsColumn, stringMessages.discarding());
leaderboardTable.addColumn(leaderboardTypeColumn, stringMessages.type());
leaderboardTable.addColumn(scoringSystemColumn, stringMessages.scoringSystem());
@@ -946,7 +955,7 @@ public class LeaderboardConfigPanel extends FormPanel implements RegattaDisplaye
}
private void updateLeaderboard(final String oldLeaderboardName, final LeaderboardDescriptor leaderboardToUdate) {
- sailingService.updateLeaderboard(oldLeaderboardName, leaderboardToUdate.getName(),
+ sailingService.updateLeaderboard(oldLeaderboardName, leaderboardToUdate.getName(), leaderboardToUdate.getDisplayName(),
leaderboardToUdate.getDiscardThresholds(), new AsyncCallback() {
@Override
public void onFailure(Throwable t) {
@@ -960,6 +969,7 @@ public class LeaderboardConfigPanel extends FormPanel implements RegattaDisplaye
StrippedLeaderboardDTO dao = leaderboardList.getList().get(i);
if (dao.name.equals(oldLeaderboardName)) {
dao.name = leaderboardToUdate.getName();
+ dao.displayName = leaderboardToUdate.getDisplayName();
dao.discardThresholds = leaderboardToUdate.getDiscardThresholds();
break;
}
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/LeaderboardDescriptor.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/LeaderboardDescriptor.java
index 0ed525521a8..dbbaf7f1149 100644
--- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/LeaderboardDescriptor.java
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/LeaderboardDescriptor.java
@@ -9,6 +9,15 @@ import com.sap.sailing.domain.common.ScoringSchemeType;
*/
public class LeaderboardDescriptor {
private String name;
+ private String displayName;
+ public String getDisplayName() {
+ return displayName;
+ }
+
+ public void setDisplayName(String displayName) {
+ this.displayName = displayName;
+ }
+
private ScoringSchemeType scoringScheme;
private int[] discardThresholds;
private String regattaName;
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaLeaderboardCreateDialog.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaLeaderboardCreateDialog.java
index cf7cb5ee287..a74caf10ab7 100644
--- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaLeaderboardCreateDialog.java
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaLeaderboardCreateDialog.java
@@ -14,6 +14,7 @@ public class RegattaLeaderboardCreateDialog extends RegattaLeaderboardDialog {
super(stringConstants.createRegattaLeaderboard(), new LeaderboardDescriptor(), existingRegattas, stringConstants, errorReporter, new RegattaLeaderboardDialog.LeaderboardParameterValidator(stringConstants, existingLeaderboards), callback);
nameTextBox = createTextBox(null);
+ displayNameTextBox = createTextBox(null);
regattaListBox = createListBox(false);
regattaListBox.addItem(stringConstants.pleaseSelectARegatta());
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaLeaderboardDialog.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaLeaderboardDialog.java
index d2c213b9658..b66c0e7c9c8 100644
--- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaLeaderboardDialog.java
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaLeaderboardDialog.java
@@ -3,6 +3,7 @@ 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.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;
@@ -85,12 +86,14 @@ public abstract class RegattaLeaderboardDialog extends AbstractLeaderboardDialog
protected Widget getAdditionalWidget() {
VerticalPanel mainPanel = new VerticalPanel();
- Grid formGrid = new Grid(3,2);
+ Grid formGrid = new Grid(3,3);
formGrid.setCellSpacing(3);
- formGrid.setWidget(0, 0, new Label(stringMessages.name() + ":"));
+ formGrid.setWidget(0, 0, createLabel(stringMessages.name()));
formGrid.setWidget(0, 1, nameTextBox);
- formGrid.setWidget(1, 0, new Label(stringMessages.regatta() + ":"));
- formGrid.setWidget(1, 1, regattaListBox);
+ formGrid.setWidget(1, 0, createLabel(stringMessages.displayName()));
+ formGrid.setWidget(1, 1, displayNameTextBox);
+ formGrid.setWidget(2, 0, createLabel(stringMessages.regatta()));
+ formGrid.setWidget(2, 1, regattaListBox);
mainPanel.add(formGrid);
@@ -101,6 +104,7 @@ public abstract class RegattaLeaderboardDialog extends AbstractLeaderboardDialog
hp.add(new Label("" + (i + 1) + "."));
hp.add(discardThresholdBoxes[i]);
}
+ alignAllPanelWidgetsVertically(hp, HasVerticalAlignment.ALIGN_MIDDLE);
mainPanel.add(hp);
return mainPanel;
}
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaLeaderboardEditDialog.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaLeaderboardEditDialog.java
index 5608026d888..1d81fafdddb 100644
--- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaLeaderboardEditDialog.java
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaLeaderboardEditDialog.java
@@ -16,6 +16,7 @@ public class RegattaLeaderboardEditDialog extends RegattaLeaderboardDialog {
stringConstants, otherExistingLeaderboards), callback);
nameTextBox = createTextBox(leaderboard.getName());
+ displayNameTextBox = createTextBox(leaderboard.getDisplayName());
regattaListBox = createListBox(false);
regattaListBox.addItem(stringConstants.pleaseSelectARegatta());
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/DataEntryDialog.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/DataEntryDialog.java
index 65caa378028..54a06017b15 100755
--- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/DataEntryDialog.java
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/DataEntryDialog.java
@@ -89,6 +89,7 @@ public abstract class DataEntryDialog {
okButton = new Button(okButtonName);
okButton.getElement().getStyle().setMargin(3, Unit.PX);
FlowPanel dialogFPanel = new FlowPanel();
+ dialogFPanel.setWidth("100%");
statusLabel = new Label();
dialogFPanel.add(statusLabel);
if (message != null) {
@@ -98,6 +99,7 @@ public abstract class DataEntryDialog {
}
panelForAdditionalWidget = new FlowPanel();
+ panelForAdditionalWidget.setWidth("100%");
dialogFPanel.add(panelForAdditionalWidget);
FlowPanel buttonPanel = new FlowPanel();
dialogFPanel.add(buttonPanel);
@@ -139,7 +141,7 @@ public abstract class DataEntryDialog {
}
protected abstract T getResult();
-
+
/**
* Creates a text box with a key-up listener attached which ensures the value is updated after each
* key-up event and the entire dialog is {@link #validate() validated} in this case.
@@ -335,6 +337,18 @@ public abstract class DataEntryDialog {
AbstractEntryPoint.linkEscapeToButton(getCancelButton(), result);
return result;
}
+
+ /**
+ * Creates a standard label for input fields.
+ * The label has some default formatting like "no wrap" and a colon right after the label text
+ * @param name
+ * @return
+ */
+ public Label createLabel(String name) {
+ Label result = new Label(name + ":");
+ result.setWordWrap(false);
+ return result;
+ }
public ListBox createListBox(boolean isMultipleSelect) {
ListBox result = new ListBox(isMultipleSelect);
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java
index 37ab1f8585e..d5e5e451ff8 100644
--- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java
@@ -122,7 +122,7 @@ public interface SailingService extends RemoteService {
List getLeaderboardsByEvent(RegattaDTO regatta);
- void updateLeaderboard(String leaderboardName, String newLeaderboardName, int[] newDiscardingThreasholds);
+ void updateLeaderboard(String leaderboardName, String newLeaderboardName, String newLeaderboardDisplayName, int[] newDiscardingThreasholds);
StrippedLeaderboardDTO createFlexibleLeaderboard(String leaderboardName, int[] discardThresholds, ScoringSchemeType scoringSchemeType);
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java
index 5027d571421..5db3ff2da99 100644
--- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java
@@ -204,8 +204,8 @@ public interface SailingServiceAsync {
void getLeaderboardsByRace(RaceDTO race, AsyncCallback> callback);
- void updateLeaderboard(String leaderboardName, String newLeaderboardName, int[] newDiscardingThreasholds,
- AsyncCallback callback);
+ void updateLeaderboard(String leaderboardName, String newLeaderboardName, String newLeaderboardDisplayName,
+ int[] newDiscardingThreasholds, AsyncCallback callback);
void createFlexibleLeaderboard(String leaderboardName, int[] discardThresholds, ScoringSchemeType scoringSchemeType,
AsyncCallback asyncCallback);
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.java
index 61d774641fb..d71af87d130 100755
--- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.java
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.java
@@ -496,4 +496,5 @@ public interface StringMessages extends Messages {
String overallRank();
String overallRankTooltip();
String noDataFound();
+ String displayName();
}
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties
index 28dd67cc04d..87764b4ce5f 100755
--- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties
@@ -496,4 +496,5 @@ totalsColumnTooltip=The total of all points of a competitor in the regatta.
windData=Wind data
gpsData=GPS data
status=Status
-noDataFound=No data found
\ No newline at end of file
+noDataFound=No data found
+displayName=Display name
\ No newline at end of file
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_de.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_de.properties
index cb8325f17e6..6c274cb4c6c 100755
--- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_de.properties
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_de.properties
@@ -497,4 +497,5 @@ totalsColumnTooltip=Summe aller Punkte eines Teilnehmers in der Regatta
windData=Winddaten
gpsData=GPS-Daten
status=Status
-noDataFound=Keine Daten gefunden
\ No newline at end of file
+noDataFound=Keine Daten gefunden
+displayName=Anzeigename
\ No newline at end of file
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/LeaderboardPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/LeaderboardPanel.java
index 62326be37e9..e1ac2935d8c 100755
--- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/LeaderboardPanel.java
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/LeaderboardPanel.java
@@ -106,7 +106,7 @@ public class LeaderboardPanel extends FormPanel implements TimeListener, PlaySta
private static final int CARRY_COLUMN_INDEX = 3;
- protected static final NumberFormat scoreFormat = NumberFormat.getFormat("0.00");
+ protected static final NumberFormat scoreFormat = NumberFormat.getFormat("0.##");
private final SailingServiceAsync sailingService;
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java
index 1f2cc39b93b..05b3af4e9df 100755
--- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java
@@ -2055,6 +2055,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
TimePoint now = MillisecondsTimePoint.now();
Long delayToLiveInMillisForLatestRace = null;
leaderboardDTO.name = leaderboard.getName();
+ leaderboardDTO.displayName = leaderboard.getDisplayName();
leaderboardDTO.competitorDisplayNames = new HashMap();
leaderboardDTO.isMetaLeaderboard = leaderboard instanceof MetaLeaderboard ? true : false;
if (leaderboard instanceof RegattaLeaderboard) {
@@ -2189,8 +2190,8 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
}
@Override
- public void updateLeaderboard(String leaderboardName, String newLeaderboardName, int[] newDiscardingThresholds) {
- getService().apply(new UpdateLeaderboard(leaderboardName, newLeaderboardName, newDiscardingThresholds));
+ public void updateLeaderboard(String leaderboardName, String newLeaderboardName, String newLeaderboardDisplayName, int[] newDiscardingThresholds) {
+ getService().apply(new UpdateLeaderboard(leaderboardName, newLeaderboardName, newLeaderboardDisplayName, newDiscardingThresholds));
}
@Override
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/AbstractLeaderboardDTO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/AbstractLeaderboardDTO.java
index b1b9fbcac48..1b0d414c8ca 100755
--- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/AbstractLeaderboardDTO.java
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/AbstractLeaderboardDTO.java
@@ -22,6 +22,7 @@ public abstract class AbstractLeaderboardDTO implements IsSerializable {
public boolean hasCarriedPoints;
public int[] discardThresholds;
public String regattaName;
+ public String displayName;
public ScoringSchemeType scoringScheme;
public boolean isMetaLeaderboard;
public boolean isRegattaLeaderboard;
@@ -40,6 +41,10 @@ public abstract class AbstractLeaderboardDTO implements IsSerializable {
return result;
}
+ public String getDisplayName() {
+ return displayName;
+ }
+
public String getDisplayName(CompetitorDTO competitor) {
if (competitorDisplayNames == null || competitorDisplayNames.get(competitor) == null) {
return competitor.name;
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/spectator/LeaderboardGroupPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/spectator/LeaderboardGroupPanel.java
index ded729ffd1c..b05ce7691ab 100755
--- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/spectator/LeaderboardGroupPanel.java
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/spectator/LeaderboardGroupPanel.java
@@ -97,7 +97,6 @@ public class LeaderboardGroupPanel extends FormPanel implements HasWelcomeWidget
private VerticalPanel mainPanel;
private Widget welcomeWidget = null;
- private boolean allLeaderboardNamesStartWithGroupName = false;
private final boolean isEmbedded;
private final boolean showRaceDetails;
@@ -124,16 +123,6 @@ public class LeaderboardGroupPanel extends FormPanel implements HasWelcomeWidget
public void onSuccess(final LeaderboardGroupDTO leaderboardGroupDTO) {
if (leaderboardGroupDTO != null) {
LeaderboardGroupPanel.this.leaderboardGroup = leaderboardGroupDTO;
- if(leaderboardGroupDTO.leaderboards.size() > 1) {
- allLeaderboardNamesStartWithGroupName = true;
- String groupName = leaderboardGroupDTO.name;
- for(StrippedLeaderboardDTO leaderboard: leaderboardGroupDTO.leaderboards) {
- if(!leaderboard.name.startsWith(groupName)) {
- allLeaderboardNamesStartWithGroupName = false;
- break;
- }
- }
- }
// in case there is a regatta leaderboard in the leaderboard group
// we need to know the corresponding regatta structure
if(leaderboardGroup.containsRegattaLeaderboard()) {
@@ -207,12 +196,7 @@ public class LeaderboardGroupPanel extends FormPanel implements HasWelcomeWidget
leaderboardNameCell) {
@Override
public SafeHtml getValue(StrippedLeaderboardDTO strippedLeaderboardDTO) {
- String text = "";
- if (allLeaderboardNamesStartWithGroupName) {
- text = shortenLeaderboardName(leaderboardGroup.name, strippedLeaderboardDTO.name);
- } else {
- text = strippedLeaderboardDTO.name;
- }
+ String text = strippedLeaderboardDTO.displayName != null ? strippedLeaderboardDTO.displayName : strippedLeaderboardDTO.name;
SafeHtmlBuilder b = new SafeHtmlBuilder();
b.append(TEXTTEMPLATE.textWithClass(text, STYLE_BOATCLASS));
return b.toSafeHtml();
@@ -284,15 +268,6 @@ public class LeaderboardGroupPanel extends FormPanel implements HasWelcomeWidget
return legendPanel;
}
- private String shortenLeaderboardName(String prefixToCut, String leaderboardName) {
- String result = leaderboardName.substring(prefixToCut.length(), leaderboardName.length());
- result = result.trim();
- if(result.startsWith("(") && result.endsWith(")")) {
- result = result.substring(1, result.length()-1);
- }
- return result.trim();
- }
-
private SafeHtml leaderboardRacesToHtml(StrippedLeaderboardDTO leaderboard) {
SafeHtmlBuilder b = new SafeHtmlBuilder();
if (leaderboard.isRegattaLeaderboard && leaderboard.regattaName != null) {
diff --git a/java/com.sap.sailing.server.gateway.ess40/src/com/sap/sailing/server/gateway/ess40/ESS40ResultsAsCSVServlet.java b/java/com.sap.sailing.server.gateway.ess40/src/com/sap/sailing/server/gateway/ess40/ESS40ResultsAsCSVServlet.java
index 1162540d719..5c0b310441e 100644
--- a/java/com.sap.sailing.server.gateway.ess40/src/com/sap/sailing/server/gateway/ess40/ESS40ResultsAsCSVServlet.java
+++ b/java/com.sap.sailing.server.gateway.ess40/src/com/sap/sailing/server/gateway/ess40/ESS40ResultsAsCSVServlet.java
@@ -1,8 +1,13 @@
package com.sap.sailing.server.gateway.ess40;
+import java.io.BufferedWriter;
import java.io.IOException;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -125,5 +130,32 @@ public class ESS40ResultsAsCSVServlet extends AbstractCSVHttpServlet {
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Error during leaderboard export");
}
}
+
+ @Override
+ protected void writeCsv (List> csv, char separator, boolean quoteStrings, OutputStream output) throws IOException {
+ DecimalFormat df = new DecimalFormat("0.##");
+ BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(output, "UTF-8"));
+ for (List row : csv) {
+ StringBuilder line = new StringBuilder();
+ int column = 1;
+ for (Iterator iter = row.iterator(); iter.hasNext();) {
+ T fieldObject = iter.next();
+ String field = String.valueOf(fieldObject).replace("\"", "\"\"");
+ if(fieldObject instanceof String && column == 1) {
+ field = '"' + field + '"';
+ } else if(fieldObject instanceof Double) {
+ field = df.format(fieldObject);
+ }
+ line.append(field);
+ if (iter.hasNext()) {
+ line.append(separator);
+ }
+ column++;
+ }
+ writer.write(line.toString());
+ writer.newLine();
+ }
+ writer.flush();
+ }
}
diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/UpdateLeaderboard.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/UpdateLeaderboard.java
index cbbc6e9b19b..40c855573bf 100755
--- a/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/UpdateLeaderboard.java
+++ b/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/UpdateLeaderboard.java
@@ -10,11 +10,13 @@ import com.sap.sailing.server.RacingEventServiceOperation;
public class UpdateLeaderboard extends AbstractLeaderboardOperation {
private static final long serialVersionUID = -8040361040050151768L;
private final String newLeaderboardName;
+ private final String newLeaderboardDisplayName;
private final int[] newDiscardingThresholds;
- public UpdateLeaderboard(String leaderboardName, String newLeaderboardName, int[] newDiscardingThresholds) {
+ public UpdateLeaderboard(String leaderboardName, String newLeaderboardName, String newLeaderboardDisplayName, int[] newDiscardingThresholds) {
super(leaderboardName);
this.newLeaderboardName = newLeaderboardName;
+ this.newLeaderboardDisplayName = newLeaderboardDisplayName;
this.newDiscardingThresholds = newDiscardingThresholds;
}
@@ -39,6 +41,7 @@ public class UpdateLeaderboard extends AbstractLeaderboardOperation {
if (!Arrays.equals(leaderboard.getResultDiscardingRule().getDiscardIndexResultsStartingWithHowManyRaces(), newDiscardingThresholds)) {
leaderboard.setResultDiscardingRule(new ResultDiscardingRuleImpl(newDiscardingThresholds));
}
+ leaderboard.setDisplayName(newLeaderboardDisplayName);
updateStoredLeaderboard(toState, leaderboard);
return null;
}