From c88d42bf617a07cd91004eae2d5e53a343008ff0 Mon Sep 17 00:00:00 2001 From: fmittag Date: Tue, 12 Feb 2013 16:12:34 +0100 Subject: [PATCH 1/3] - added new attribute "displayName" to a leaderboard. The display name is used so far for overall leaderboards to make it possible to display a different name if used in MetaLeaderboardColumns. Furthermore the display name is used in the leaderboardgrouppanel which finally kills an old hack to shorten ugly leaderboard names. - Changed formatting of totalPoints in leaderboards to hide useless zeros (e.g. 2 instead of 2.00) --- .../impl/DomainObjectFactoryImpl.java | 2 ++ .../domain/persistence/impl/FieldNames.java | 2 +- .../impl/MongoObjectFactoryImpl.java | 3 +++ .../domain/leaderboard/Leaderboard.java | 10 ++++++- .../impl/AbstractSimpleLeaderboardImpl.java | 17 ++++++++++-- .../meta/MetaLeaderboardColumn.java | 2 +- java/com.sap.sailing.gwt.ui/AdminConsole.css | 8 +++--- .../AbstractLeaderboardDialog.java | 2 ++ .../FlexibleLeaderboardCreateDialog.java | 1 + .../FlexibleLeaderboardDialog.java | 17 +++++++----- .../FlexibleLeaderboardEditDialog.java | 2 +- .../adminconsole/LeaderboardConfigPanel.java | 12 ++++++++- .../adminconsole/LeaderboardDescriptor.java | 9 +++++++ .../RegattaLeaderboardCreateDialog.java | 1 + .../RegattaLeaderboardEditDialog.java | 1 + .../gwt/ui/client/DataEntryDialog.java | 16 ++++++++++- .../sailing/gwt/ui/client/SailingService.java | 2 +- .../gwt/ui/client/SailingServiceAsync.java | 4 +-- .../sailing/gwt/ui/client/StringMessages.java | 1 + .../gwt/ui/client/StringMessages.properties | 3 ++- .../ui/client/StringMessages_de.properties | 3 ++- .../gwt/ui/leaderboard/LeaderboardPanel.java | 2 +- .../gwt/ui/server/SailingServiceImpl.java | 5 ++-- .../gwt/ui/shared/AbstractLeaderboardDTO.java | 5 ++++ .../ui/spectator/LeaderboardGroupPanel.java | 27 +------------------ .../UpdateLeaderboard.java | 5 +++- 26 files changed, 109 insertions(+), 53 deletions(-) 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/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/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; } From af41e094e26a9baebb2748d93e023d68b6c17c2a Mon Sep 17 00:00:00 2001 From: fmittag Date: Tue, 12 Feb 2013 16:19:02 +0100 Subject: [PATCH 2/3] added editing of the leaderboard display name also for a regatta leaderboard --- .../ui/adminconsole/RegattaLeaderboardDialog.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) 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; } From 9ae18d448cd23eeb71056e3f9b63973f4ae9eb79 Mon Sep 17 00:00:00 2001 From: fmittag Date: Tue, 12 Feb 2013 18:14:17 +0100 Subject: [PATCH 3/3] fixed csv export format --- .../ess40/ESS40ResultsAsCSVServlet.java | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) 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(); + } }