Merge branch 'master' into 60_inch

Conflicts:
	java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/LeaderboardPanelMock.java
	java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/place/player/AutoPlayController.java
	java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/shared/leaderboard/LeaderboardWithHeaderPerspective.java
	java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/event/regatta/RegattaAnalyticsDataManager.java
	java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/event/regatta/SharedLeaderboardRegattaTabView.java
	java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/fakeseries/EventSeriesAnalyticsDataManager.java
	java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/whatsnew/resources/SailingAnalyticsNotes.html
	java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/settings/client/leaderboard/LeaderboardPanelLifecycle.java
	java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/settings/client/leaderboard/LeaderboardSettingsDialogComponent.java
	java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_de.properties
	java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/LeaderboardPanel.java
	java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/LeaderboardViewer.java
	java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/LegColumn.java
	java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/MultiLeaderboardPanel.java
	java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/OverallTimeTraveledColumn.java
	java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/SortableExpandableColumnHeader.java
	java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/TimeTraveledRaceColumn.java
This commit is contained in:
Kai Boernert committed 2017-08-01 12:31:17 +02:00
commit 937b142da7
106 files changed
+2200 -1416

No files matched your search

@@ -3,23 +3,23 @@ package com.sap.sailing.gwt.ui.test;
import com.sap.sailing.domain.common.dto.LeaderboardDTO; import com.sap.sailing.domain.common.dto.LeaderboardDTO;
import com.sap.sailing.domain.common.dto.LeaderboardRowDTO; import com.sap.sailing.domain.common.dto.LeaderboardRowDTO;
import com.sap.sailing.domain.common.dto.RaceColumnDTO; import com.sap.sailing.domain.common.dto.RaceColumnDTO;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettings; import com.sap.sailing.gwt.settings.client.leaderboard.MultiRaceLeaderboardSettings;
import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel; import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel;
import com.sap.sailing.gwt.ui.client.SailingServiceAsync; import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.client.shared.controls.AbstractSortableColumnWithMinMax; import com.sap.sailing.gwt.ui.client.shared.controls.AbstractSortableColumnWithMinMax;
import com.sap.sailing.gwt.ui.leaderboard.ClassicLeaderboardStyle; import com.sap.sailing.gwt.ui.leaderboard.ClassicLeaderboardStyle;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel; import com.sap.sailing.gwt.ui.leaderboard.MultiRaceLeaderboardPanel;
import com.sap.sailing.gwt.ui.leaderboard.SortedCellTable; import com.sap.sailing.gwt.ui.leaderboard.SortedCellTable;
import com.sap.sse.gwt.client.ErrorReporter; import com.sap.sse.gwt.client.ErrorReporter;
import com.sap.sse.gwt.client.async.AsyncActionsExecutor; import com.sap.sse.gwt.client.async.AsyncActionsExecutor;
public class LeaderboardPanelMock extends LeaderboardPanel { public class LeaderboardPanelMock extends MultiRaceLeaderboardPanel {
public LeaderboardPanelMock(SailingServiceAsync sailingService, public LeaderboardPanelMock(SailingServiceAsync sailingService,
String leaderboardName, ErrorReporter errorReporter, String leaderboardName, ErrorReporter errorReporter,
StringMessages stringMessages) { StringMessages stringMessages) {
super(null, null, sailingService, new AsyncActionsExecutor(), new LeaderboardSettings(), super(null, null, sailingService, new AsyncActionsExecutor(), new MultiRaceLeaderboardSettings(),
new CompetitorSelectionModel( new CompetitorSelectionModel(
/* hasMultiSelection */true), /* hasMultiSelection */true),
leaderboardName, errorReporter, stringMessages, /* showRaceDetails */ true,new ClassicLeaderboardStyle()); leaderboardName, errorReporter, stringMessages, /* showRaceDetails */ true,new ClassicLeaderboardStyle());
@@ -18,6 +18,6 @@ encoding//src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/AbstractR
encoding//src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/PlainResultsPresenter.java=utf-8 encoding//src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/PlainResultsPresenter.java=utf-8
encoding//src/main/java/com/sap/sailing/gwt/ui/leaderboard/CompetitorFilterPanel.java=utf-8 encoding//src/main/java/com/sap/sailing/gwt/ui/leaderboard/CompetitorFilterPanel.java=utf-8
encoding//src/main/java/com/sap/sailing/gwt/ui/leaderboard/LeaderboardEntryPoint.java=utf-8 encoding//src/main/java/com/sap/sailing/gwt/ui/leaderboard/LeaderboardEntryPoint.java=utf-8
encoding//src/main/java/com/sap/sailing/gwt/ui/leaderboard/MultiLeaderboardPanel.java=utf-8 encoding//src/main/java/com/sap/sailing/gwt/ui/leaderboard/MultiMultiRaceLeaderboardPanel.java=utf-8
encoding//src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardPanel.java=utf-8 encoding//src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardPanel.java=utf-8
encoding//src/main/java/com/sap/sailing/gwt/ui/spectator/LeaderboardGroupPanel.java=utf-8 encoding//src/main/java/com/sap/sailing/gwt/ui/spectator/LeaderboardGroupPanel.java=utf-8
@@ -10,13 +10,12 @@ import com.sap.sailing.gwt.autoplay.client.app.AutoPlayClientFactory;
import com.sap.sailing.gwt.autoplay.client.events.AutoPlayHeaderEvent; import com.sap.sailing.gwt.autoplay.client.events.AutoPlayHeaderEvent;
import com.sap.sailing.gwt.autoplay.client.nodes.base.FiresPlaceNode; import com.sap.sailing.gwt.autoplay.client.nodes.base.FiresPlaceNode;
import com.sap.sailing.gwt.autoplay.client.places.screens.idleloop.leaderboardsixty.IdleOverallLeaderBoardPlace; import com.sap.sailing.gwt.autoplay.client.places.screens.idleloop.leaderboardsixty.IdleOverallLeaderBoardPlace;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettings; import com.sap.sailing.gwt.settings.client.leaderboard.MultiRaceLeaderboardSettings;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettings.RaceColumnSelectionStrategies;
import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel; import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel;
import com.sap.sailing.gwt.ui.client.CompetitorSelectionProvider; import com.sap.sailing.gwt.ui.client.CompetitorSelectionProvider;
import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardEntryPoint; import com.sap.sailing.gwt.ui.leaderboard.LeaderboardEntryPoint;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel; import com.sap.sailing.gwt.ui.leaderboard.MultiRaceLeaderboardPanel;
import com.sap.sailing.gwt.ui.leaderboard.SixtyInchLeaderBoardStyle; import com.sap.sailing.gwt.ui.leaderboard.SixtyInchLeaderBoardStyle;
import com.sap.sse.gwt.client.async.AsyncActionsExecutor; import com.sap.sse.gwt.client.async.AsyncActionsExecutor;
import com.sap.sse.gwt.client.async.MarkedAsyncCallback; import com.sap.sse.gwt.client.async.MarkedAsyncCallback;
@@ -42,10 +41,10 @@ public class IdleOverallLeaderBoardNode extends FiresPlaceNode {
List<DetailType> raceDetails = new ArrayList<>(); List<DetailType> raceDetails = new ArrayList<>();
// raceDetails.add(DetailType.RACE_RANK); // raceDetails.add(DetailType.RACE_RANK);
final LeaderboardSettings leaderboardSettings = new LeaderboardSettings(null, null, raceDetails, overallDetails, final MultiRaceLeaderboardSettings leaderboardSettings = new MultiRaceLeaderboardSettings(null, null, raceDetails, overallDetails,
null, null, null, false, null, null, /* ascending */ true, /* updateUponPlayStateChange */ true, null, null, null, null, /* ascending */ true, /* updateUponPlayStateChange */ true,
RaceColumnSelectionStrategies.EXPLICIT, /* showAddedScores */ true, /* showAddedScores */ true,
/* showOverallRacesCompleted */ false, true, false, false, true); /* showOverallRacesCompleted */ false, true);
timer = new com.sap.sse.gwt.client.player.Timer( timer = new com.sap.sse.gwt.client.player.Timer(
// perform the first request as "live" but don't by default auto-play // perform the first request as "live" but don't by default auto-play
@@ -60,11 +59,9 @@ public class IdleOverallLeaderBoardNode extends FiresPlaceNode {
if (result.size() == 1) { if (result.size() == 1) {
String overallLeaderboardName = result.get(0); String overallLeaderboardName = result.get(0);
CompetitorSelectionProvider provider = new CompetitorSelectionModel(true); CompetitorSelectionProvider provider = new CompetitorSelectionModel(true);
LeaderboardPanel leaderboardPanel = new LeaderboardPanel(null,null,cf.getSailingService(), MultiRaceLeaderboardPanel leaderboardPanel = new MultiRaceLeaderboardPanel(null,null,cf.getSailingService(),
new AsyncActionsExecutor(), leaderboardSettings, true, null, provider, timer, new AsyncActionsExecutor(), leaderboardSettings, provider, overallLeaderboardName, cf.getErrorReporter(),
null, overallLeaderboardName, cf.getErrorReporter(), StringMessages.INSTANCE, false,new SixtyInchLeaderBoardStyle(true));
StringMessages.INSTANCE, false, null, false, null, false, true, false, false,
false,new SixtyInchLeaderBoardStyle(true));
IdleOverallLeaderBoardPlace place = new IdleOverallLeaderBoardPlace(leaderboardPanel); IdleOverallLeaderBoardPlace place = new IdleOverallLeaderBoardPlace(leaderboardPanel);
@@ -6,8 +6,8 @@ import com.sap.sailing.gwt.autoplay.client.app.AutoplayPerspectiveOwnSettings;
import com.sap.sailing.gwt.autoplay.client.events.AutoPlayHeaderEvent; import com.sap.sailing.gwt.autoplay.client.events.AutoPlayHeaderEvent;
import com.sap.sailing.gwt.autoplay.client.nodes.base.FiresPlaceNode; import com.sap.sailing.gwt.autoplay.client.nodes.base.FiresPlaceNode;
import com.sap.sailing.gwt.autoplay.client.places.screens.idleloop.leaderboard.LeaderboardPlace; import com.sap.sailing.gwt.autoplay.client.places.screens.idleloop.leaderboard.LeaderboardPlace;
import com.sap.sailing.gwt.autoplay.client.shared.leaderboard.LeaderboardWithHeaderPerspective;
import com.sap.sailing.gwt.autoplay.client.shared.leaderboard.LeaderboardWithHeaderPerspectiveSettings; import com.sap.sailing.gwt.autoplay.client.shared.leaderboard.LeaderboardWithHeaderPerspectiveSettings;
import com.sap.sailing.gwt.autoplay.client.shared.leaderboard.MultiRaceLeaderboardWithHeaderPerspective;
import com.sap.sailing.gwt.autoplay.client.utils.AutoplayHelper; import com.sap.sailing.gwt.autoplay.client.utils.AutoplayHelper;
import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel; import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel;
import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sailing.gwt.ui.client.StringMessages;
@@ -45,7 +45,7 @@ public class IdleRaceLeaderboard extends FiresPlaceNode {
StringMessages stringMessages = StringMessages.INSTANCE; StringMessages stringMessages = StringMessages.INSTANCE;
LeaderboardWithHeaderPerspective leaderboardPerspective = new LeaderboardWithHeaderPerspective(null, null, MultiRaceLeaderboardWithHeaderPerspective leaderboardPerspective = new MultiRaceLeaderboardWithHeaderPerspective(null, null,
autoplayLifecycle.getLeaderboardLifecycle(), leaderboardSettings, cf.getSailingService(), autoplayLifecycle.getLeaderboardLifecycle(), leaderboardSettings, cf.getSailingService(),
cf.getUserService(), AutoplayHelper.asyncActionsExecutor, cf.getUserService(), AutoplayHelper.asyncActionsExecutor,
new CompetitorSelectionModel(/* hasMultiSelection */ true), leaderboardTimer, new CompetitorSelectionModel(/* hasMultiSelection */ true), leaderboardTimer,
@@ -14,14 +14,13 @@ import com.sap.sailing.domain.common.dto.RaceColumnDTO;
import com.sap.sailing.gwt.autoplay.client.app.AutoPlayClientFactory; import com.sap.sailing.gwt.autoplay.client.app.AutoPlayClientFactory;
import com.sap.sailing.gwt.autoplay.client.app.AutoPlayPresenterConfigured; import com.sap.sailing.gwt.autoplay.client.app.AutoPlayPresenterConfigured;
import com.sap.sailing.gwt.autoplay.client.events.AutoPlayHeaderEvent; import com.sap.sailing.gwt.autoplay.client.events.AutoPlayHeaderEvent;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettings; import com.sap.sailing.gwt.settings.client.leaderboard.SingleRaceLeaderboardSettings;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettings.RaceColumnSelectionStrategies;
import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel; import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel;
import com.sap.sailing.gwt.ui.client.LeaderboardUpdateListener; import com.sap.sailing.gwt.ui.client.LeaderboardUpdateListener;
import com.sap.sailing.gwt.ui.client.SailingServiceAsync; import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardEntryPoint; import com.sap.sailing.gwt.ui.leaderboard.LeaderboardEntryPoint;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel; import com.sap.sailing.gwt.ui.leaderboard.SingleRaceLeaderboardPanel;
import com.sap.sailing.gwt.ui.leaderboard.SixtyInchLeaderBoardStyle; import com.sap.sailing.gwt.ui.leaderboard.SixtyInchLeaderBoardStyle;
import com.sap.sse.common.Duration; import com.sap.sse.common.Duration;
import com.sap.sse.gwt.client.ErrorReporter; import com.sap.sse.gwt.client.ErrorReporter;
@@ -34,7 +33,7 @@ public class RaceEndWithBoatsPresenterImpl extends AutoPlayPresenterConfigured<A
implements RaceEndWithBoatsView.NextRaceWithBoatsPresenter { implements RaceEndWithBoatsView.NextRaceWithBoatsPresenter {
protected static final int SWITCH_COMPETITOR_DELAY = 2000; protected static final int SWITCH_COMPETITOR_DELAY = 2000;
private RaceEndWithBoatsView view; private RaceEndWithBoatsView view;
private LeaderboardPanel leaderboardPanel; private SingleRaceLeaderboardPanel leaderboardPanel;
private CompetitorSelectionModel competitorSelectionProvider; private CompetitorSelectionModel competitorSelectionProvider;
private Timer timer; private Timer timer;
@@ -59,17 +58,16 @@ public class RaceEndWithBoatsPresenterImpl extends AutoPlayPresenterConfigured<A
getEventBus().fireEvent(new AutoPlayHeaderEvent(getSlideCtx().getContextDefinition().getLeaderboardName(), getEventBus().fireEvent(new AutoPlayHeaderEvent(getSlideCtx().getContextDefinition().getLeaderboardName(),
getPlace().getLastRace().getRaceName())); getPlace().getLastRace().getRaceName()));
final LeaderboardSettings leaderboardSettings = new LeaderboardSettings(null, null, null, null, null, null, final SingleRaceLeaderboardSettings leaderboardSettings = new SingleRaceLeaderboardSettings(null, null, null, null, null, false, true, true,
null, false, null, liveRace.getRaceName(), /* ascending */ true, /* updateUponPlayStateChange */ true, false,
RaceColumnSelectionStrategies.EXPLICIT, /* showAddedScores */ false, false, true);
/* showOverallRacesCompleted */ false, true, false, true, true);
competitorSelectionProvider = new CompetitorSelectionModel(/* hasMultiSelection */ false); competitorSelectionProvider = new CompetitorSelectionModel(/* hasMultiSelection */ false);
timer = new com.sap.sse.gwt.client.player.Timer(PlayModes.Live, timer = new com.sap.sse.gwt.client.player.Timer(PlayModes.Live,
PlayStates.Paused, PlayStates.Paused,
/* delayBetweenAutoAdvancesInMilliseconds */ LeaderboardEntryPoint.DEFAULT_REFRESH_INTERVAL_MILLIS); /* delayBetweenAutoAdvancesInMilliseconds */ LeaderboardEntryPoint.DEFAULT_REFRESH_INTERVAL_MILLIS);
leaderboardPanel = new LeaderboardPanel(null,null,sailingService, new AsyncActionsExecutor(), leaderboardSettings, leaderboardPanel = new SingleRaceLeaderboardPanel(null,null,sailingService, new AsyncActionsExecutor(), leaderboardSettings,
true, liveRace, competitorSelectionProvider, timer, null, true, liveRace, competitorSelectionProvider, timer, null,
getSlideCtx().getContextDefinition().getLeaderboardName(), errorReporter, StringMessages.INSTANCE, getSlideCtx().getContextDefinition().getLeaderboardName(), errorReporter, StringMessages.INSTANCE,
false, null, false, null, false, true, false, false, false,new SixtyInchLeaderBoardStyle(true)); false, null, false, null, false, true, false, false, false,new SixtyInchLeaderBoardStyle(true));
@@ -3,7 +3,7 @@ package com.sap.sailing.gwt.autoplay.client.places.screens.afterliveraceloop.boa
import com.google.gwt.user.client.ui.AcceptsOneWidget; import com.google.gwt.user.client.ui.AcceptsOneWidget;
import com.sap.sailing.domain.common.Distance; import com.sap.sailing.domain.common.Distance;
import com.sap.sailing.domain.common.dto.CompetitorDTO; import com.sap.sailing.domain.common.dto.CompetitorDTO;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel; import com.sap.sailing.gwt.ui.leaderboard.SingleRaceLeaderboardPanel;
import com.sap.sse.common.Duration; import com.sap.sse.common.Duration;
public interface RaceEndWithBoatsView { public interface RaceEndWithBoatsView {
@@ -11,7 +11,7 @@ public interface RaceEndWithBoatsView {
public interface NextRaceWithBoatsPresenter { public interface NextRaceWithBoatsPresenter {
} }
void setLeaderBoard(LeaderboardPanel leaderboardPanel); void setLeaderBoard(SingleRaceLeaderboardPanel leaderboardPanel);
void setFirst(CompetitorDTO c); void setFirst(CompetitorDTO c);
@@ -14,7 +14,7 @@ import com.sap.sailing.domain.common.Distance;
import com.sap.sailing.domain.common.dto.CompetitorDTO; import com.sap.sailing.domain.common.dto.CompetitorDTO;
import com.sap.sailing.gwt.autoplay.client.places.screens.preliveraceloop.leaderboard.PreLiveRaceLeaderBoardWithImageViewImpl.ImageProvider; import com.sap.sailing.gwt.autoplay.client.places.screens.preliveraceloop.leaderboard.PreLiveRaceLeaderBoardWithImageViewImpl.ImageProvider;
import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel; import com.sap.sailing.gwt.ui.leaderboard.SingleRaceLeaderboardPanel;
import com.sap.sse.common.Duration; import com.sap.sse.common.Duration;
import com.sap.sse.gwt.client.panels.ResizableFlowPanel; import com.sap.sse.gwt.client.panels.ResizableFlowPanel;
@@ -70,7 +70,7 @@ public class RaceEndWithBoatsViewImpl extends ResizeComposite implements RaceEnd
} }
@Override @Override
public void setLeaderBoard(LeaderboardPanel leaderboardPanel) { public void setLeaderBoard(SingleRaceLeaderboardPanel leaderboardPanel) {
leaderBoardHolder.add(leaderboardPanel); leaderBoardHolder.add(leaderboardPanel);
} }
@@ -2,7 +2,7 @@ package com.sap.sailing.gwt.autoplay.client.places.screens.idleloop.leaderboard;
import com.google.gwt.place.shared.Place; import com.google.gwt.place.shared.Place;
import com.google.gwt.place.shared.PlaceTokenizer; import com.google.gwt.place.shared.PlaceTokenizer;
import com.sap.sailing.gwt.autoplay.client.shared.leaderboard.LeaderboardWithHeaderPerspective; import com.sap.sailing.gwt.autoplay.client.shared.leaderboard.MultiRaceLeaderboardWithHeaderPerspective;
public class LeaderboardPlace extends Place { public class LeaderboardPlace extends Place {
public static class Tokenizer implements PlaceTokenizer<LeaderboardPlace> { public static class Tokenizer implements PlaceTokenizer<LeaderboardPlace> {
@@ -17,16 +17,16 @@ public class LeaderboardPlace extends Place {
} }
} }
private LeaderboardWithHeaderPerspective leaderboardPerspective; private MultiRaceLeaderboardWithHeaderPerspective leaderboardPerspective;
public LeaderboardPlace(LeaderboardWithHeaderPerspective leaderboardPerspective) { public LeaderboardPlace(MultiRaceLeaderboardWithHeaderPerspective leaderboardPerspective) {
this.leaderboardPerspective = leaderboardPerspective; this.leaderboardPerspective = leaderboardPerspective;
} }
private LeaderboardPlace() { private LeaderboardPlace() {
} }
public LeaderboardWithHeaderPerspective getLeaderboardPerspective() { public MultiRaceLeaderboardWithHeaderPerspective getLeaderboardPerspective() {
return leaderboardPerspective; return leaderboardPerspective;
} }
@@ -3,7 +3,7 @@ package com.sap.sailing.gwt.autoplay.client.places.screens.idleloop.leaderboard;
import com.google.gwt.user.client.ui.AcceptsOneWidget; import com.google.gwt.user.client.ui.AcceptsOneWidget;
import com.sap.sailing.gwt.autoplay.client.app.AutoPlayClientFactory; import com.sap.sailing.gwt.autoplay.client.app.AutoPlayClientFactory;
import com.sap.sailing.gwt.autoplay.client.app.AutoPlayPresenterConfigured; import com.sap.sailing.gwt.autoplay.client.app.AutoPlayPresenterConfigured;
import com.sap.sailing.gwt.autoplay.client.shared.leaderboard.LeaderboardWithHeaderPerspective; import com.sap.sailing.gwt.autoplay.client.shared.leaderboard.MultiRaceLeaderboardWithHeaderPerspective;
public class LeaderboardPresenterImpl extends AutoPlayPresenterConfigured<LeaderboardPlace> public class LeaderboardPresenterImpl extends AutoPlayPresenterConfigured<LeaderboardPlace>
implements LeaderboardView.Presenter { implements LeaderboardView.Presenter {
@@ -19,7 +19,7 @@ public class LeaderboardPresenterImpl extends AutoPlayPresenterConfigured<Leader
@Override @Override
public void startConfigured(AcceptsOneWidget panel) { public void startConfigured(AcceptsOneWidget panel) {
LeaderboardWithHeaderPerspective leaderboardWithHeaderPerspective = getPlace().getLeaderboardPerspective(); MultiRaceLeaderboardWithHeaderPerspective leaderboardWithHeaderPerspective = getPlace().getLeaderboardPerspective();
view.startingWith(this, panel, leaderboardWithHeaderPerspective); view.startingWith(this, panel, leaderboardWithHeaderPerspective);
} }
@@ -1,7 +1,7 @@
package com.sap.sailing.gwt.autoplay.client.places.screens.idleloop.leaderboard; package com.sap.sailing.gwt.autoplay.client.places.screens.idleloop.leaderboard;
import com.google.gwt.user.client.ui.AcceptsOneWidget; import com.google.gwt.user.client.ui.AcceptsOneWidget;
import com.sap.sailing.gwt.autoplay.client.shared.leaderboard.LeaderboardWithHeaderPerspective; import com.sap.sailing.gwt.autoplay.client.shared.leaderboard.MultiRaceLeaderboardWithHeaderPerspective;
public interface LeaderboardView { public interface LeaderboardView {
@@ -9,7 +9,7 @@ public interface LeaderboardView {
} }
void startingWith(Presenter p, AcceptsOneWidget panel, void startingWith(Presenter p, AcceptsOneWidget panel,
LeaderboardWithHeaderPerspective leaderboardWithHeaderPerspective); MultiRaceLeaderboardWithHeaderPerspective leaderboardWithHeaderPerspective);
void onStop(); void onStop();
} }
@@ -7,7 +7,7 @@ import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.AcceptsOneWidget; import com.google.gwt.user.client.ui.AcceptsOneWidget;
import com.google.gwt.user.client.ui.ResizeComposite; import com.google.gwt.user.client.ui.ResizeComposite;
import com.google.gwt.user.client.ui.Widget; import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.gwt.autoplay.client.shared.leaderboard.LeaderboardWithHeaderPerspective; import com.sap.sailing.gwt.autoplay.client.shared.leaderboard.MultiRaceLeaderboardWithHeaderPerspective;
import com.sap.sse.gwt.client.panels.ResizableFlowPanel; import com.sap.sse.gwt.client.panels.ResizableFlowPanel;
public class LeaderboardViewImpl extends ResizeComposite implements LeaderboardView { public class LeaderboardViewImpl extends ResizeComposite implements LeaderboardView {
@@ -31,7 +31,7 @@ public class LeaderboardViewImpl extends ResizeComposite implements LeaderboardV
@Override @Override
public void startingWith(Presenter p, AcceptsOneWidget panel, public void startingWith(Presenter p, AcceptsOneWidget panel,
LeaderboardWithHeaderPerspective leaderboardWithHeaderPerspective) { MultiRaceLeaderboardWithHeaderPerspective leaderboardWithHeaderPerspective) {
holderUi.add(leaderboardWithHeaderPerspective); holderUi.add(leaderboardWithHeaderPerspective);
leaderboardWithHeaderPerspective.getElement().getStyle().setHeight(100, Unit.PCT); leaderboardWithHeaderPerspective.getElement().getStyle().setHeight(100, Unit.PCT);
panel.setWidget(this); panel.setWidget(this);
@@ -2,7 +2,7 @@ package com.sap.sailing.gwt.autoplay.client.places.screens.idleloop.leaderboards
import com.google.gwt.place.shared.Place; import com.google.gwt.place.shared.Place;
import com.google.gwt.place.shared.PlaceTokenizer; import com.google.gwt.place.shared.PlaceTokenizer;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel; import com.sap.sailing.gwt.ui.leaderboard.MultiRaceLeaderboardPanel;
public class IdleOverallLeaderBoardPlace extends Place { public class IdleOverallLeaderBoardPlace extends Place {
public static class Tokenizer implements PlaceTokenizer<IdleOverallLeaderBoardPlace> { public static class Tokenizer implements PlaceTokenizer<IdleOverallLeaderBoardPlace> {
@@ -18,18 +18,18 @@ public class IdleOverallLeaderBoardPlace extends Place {
} }
private LeaderboardPanel leaderboardPanel; private MultiRaceLeaderboardPanel leaderboardPanel;
public IdleOverallLeaderBoardPlace() { public IdleOverallLeaderBoardPlace() {
} }
public IdleOverallLeaderBoardPlace(LeaderboardPanel leaderboardPanel) { public IdleOverallLeaderBoardPlace(MultiRaceLeaderboardPanel leaderboardPanel) {
this.leaderboardPanel = leaderboardPanel; this.leaderboardPanel = leaderboardPanel;
} }
public LeaderboardPanel getLeaderboardPanel() { public MultiRaceLeaderboardPanel getLeaderboardPanel() {
return leaderboardPanel; return leaderboardPanel;
} }
} }
@@ -1,10 +1,10 @@
package com.sap.sailing.gwt.autoplay.client.places.screens.idleloop.leaderboardsixty; package com.sap.sailing.gwt.autoplay.client.places.screens.idleloop.leaderboardsixty;
import com.google.gwt.user.client.ui.AcceptsOneWidget; import com.google.gwt.user.client.ui.AcceptsOneWidget;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel; import com.sap.sailing.gwt.ui.leaderboard.MultiRaceLeaderboardPanel;
public interface IdleOverallLeaderBoardView { public interface IdleOverallLeaderBoardView {
void startingWith(Slide7Presenter p, AcceptsOneWidget panel, LeaderboardPanel leaderboardPanel); void startingWith(Slide7Presenter p, AcceptsOneWidget panel, MultiRaceLeaderboardPanel leaderboardPanel);
public interface Slide7Presenter { public interface Slide7Presenter {
} }
@@ -10,7 +10,7 @@ import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.domain.common.dto.LeaderboardRowDTO; import com.sap.sailing.domain.common.dto.LeaderboardRowDTO;
import com.sap.sailing.gwt.autoplay.client.app.AutoPlayMainViewImpl; import com.sap.sailing.gwt.autoplay.client.app.AutoPlayMainViewImpl;
import com.sap.sailing.gwt.autoplay.client.utils.LeaderBoardScaleHelper; import com.sap.sailing.gwt.autoplay.client.utils.LeaderBoardScaleHelper;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel; import com.sap.sailing.gwt.ui.leaderboard.MultiRaceLeaderboardPanel;
import com.sap.sailing.gwt.ui.leaderboard.SortedCellTable; import com.sap.sailing.gwt.ui.leaderboard.SortedCellTable;
import com.sap.sse.gwt.client.panels.ResizableFlowPanel; import com.sap.sse.gwt.client.panels.ResizableFlowPanel;
@@ -37,7 +37,7 @@ public class IdleOverallLeaderBoardViewImpl extends ResizeComposite implements I
} }
@Override @Override
public void startingWith(Slide7Presenter p, AcceptsOneWidget panel, LeaderboardPanel leaderboardPanel) { public void startingWith(Slide7Presenter p, AcceptsOneWidget panel, MultiRaceLeaderboardPanel leaderboardPanel) {
panel.setWidget(this); panel.setWidget(this);
leaderBoardHolder.add(leaderboardPanel); leaderBoardHolder.add(leaderboardPanel);
resizer = new Timer() { resizer = new Timer() {
@@ -15,13 +15,12 @@ import com.sap.sailing.domain.common.dto.LeaderboardRowDTO;
import com.sap.sailing.gwt.autoplay.client.app.AutoPlayClientFactory; import com.sap.sailing.gwt.autoplay.client.app.AutoPlayClientFactory;
import com.sap.sailing.gwt.autoplay.client.app.AutoPlayPresenterConfigured; import com.sap.sailing.gwt.autoplay.client.app.AutoPlayPresenterConfigured;
import com.sap.sailing.gwt.autoplay.client.utils.AutoplayHelper; import com.sap.sailing.gwt.autoplay.client.utils.AutoplayHelper;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettings; import com.sap.sailing.gwt.settings.client.leaderboard.SingleRaceLeaderboardSettings;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettings.RaceColumnSelectionStrategies;
import com.sap.sailing.gwt.ui.client.SailingServiceAsync; import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.client.shared.racemap.RaceCompetitorSet; import com.sap.sailing.gwt.ui.client.shared.racemap.RaceCompetitorSet;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardEntryPoint; import com.sap.sailing.gwt.ui.leaderboard.LeaderboardEntryPoint;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel; import com.sap.sailing.gwt.ui.leaderboard.SingleRaceLeaderboardPanel;
import com.sap.sailing.gwt.ui.leaderboard.SixtyInchLeaderBoardStyle; import com.sap.sailing.gwt.ui.leaderboard.SixtyInchLeaderBoardStyle;
import com.sap.sailing.gwt.ui.raceboard.QuickRanksDTOFromLeaderboardDTOProvider; import com.sap.sailing.gwt.ui.raceboard.QuickRanksDTOFromLeaderboardDTOProvider;
import com.sap.sailing.gwt.ui.shared.WindDTO; import com.sap.sailing.gwt.ui.shared.WindDTO;
@@ -37,7 +36,7 @@ public class LiveRaceWithRacemapAndLeaderBoardPresenterImpl
protected static final int SWITCH_COMPETITOR_DELAY = 2000; protected static final int SWITCH_COMPETITOR_DELAY = 2000;
private LiveRaceWithRacemapAndLeaderBoardView view; private LiveRaceWithRacemapAndLeaderBoardView view;
private Timer selectionTimer; private Timer selectionTimer;
private LeaderboardPanel leaderboardPanel; private SingleRaceLeaderboardPanel leaderboardPanel;
private int selected = -1; private int selected = -1;
ArrayList<CompetitorDTO> compList = new ArrayList<>(); ArrayList<CompetitorDTO> compList = new ArrayList<>();
private com.sap.sse.gwt.client.player.Timer timer; private com.sap.sse.gwt.client.player.Timer timer;
@@ -149,15 +148,14 @@ public class LiveRaceWithRacemapAndLeaderBoardPresenterImpl
view.showErrorNoLive(this, panel, new IllegalStateException("No race is live")); view.showErrorNoLive(this, panel, new IllegalStateException("No race is live"));
return; return;
} }
final LeaderboardSettings leaderboardSettings = new LeaderboardSettings(null, null, null, null, null, final SingleRaceLeaderboardSettings leaderboardSettings = new SingleRaceLeaderboardSettings(null, null, null, null, null,
racesToShow, null, false, null, lifeRace.getRaceName(), /* ascending */ true, false, /* ascending */ true,
/* updateUponPlayStateChange */ true, RaceColumnSelectionStrategies.EXPLICIT, /* updateUponPlayStateChange */ true, /* showAddedScores */ false, /* showOverallRacesCompleted */ false, true);
/* showAddedScores */ false, /* showOverallRacesCompleted */ false, true, false, true, true);
timer = new com.sap.sse.gwt.client.player.Timer( timer = new com.sap.sse.gwt.client.player.Timer(
// perform the first request as "live" but don't by default auto-play // perform the first request as "live" but don't by default auto-play
PlayModes.Live, PlayStates.Playing, PlayModes.Live, PlayStates.Playing,
/* delayBetweenAutoAdvancesInMilliseconds */ LeaderboardEntryPoint.DEFAULT_REFRESH_INTERVAL_MILLIS); /* delayBetweenAutoAdvancesInMilliseconds */ LeaderboardEntryPoint.DEFAULT_REFRESH_INTERVAL_MILLIS);
leaderboardPanel = new LeaderboardPanel(null,null,sailingService, new AsyncActionsExecutor(), leaderboardSettings, leaderboardPanel = new SingleRaceLeaderboardPanel(null,null,sailingService, new AsyncActionsExecutor(), leaderboardSettings,
true, lifeRace, getPlace().getRaceMapSelectionProvider(), timer, null, true, lifeRace, getPlace().getRaceMapSelectionProvider(), timer, null,
getSlideCtx().getContextDefinition().getLeaderboardName(), errorReporter, StringMessages.INSTANCE, getSlideCtx().getContextDefinition().getLeaderboardName(), errorReporter, StringMessages.INSTANCE,
false, null, false, null, false, true, false, false, false,new SixtyInchLeaderBoardStyle(true)); false, null, false, null, false, true, false, false, false,new SixtyInchLeaderBoardStyle(true));
@@ -4,11 +4,11 @@ import com.google.gwt.user.client.ui.AcceptsOneWidget;
import com.sap.sailing.domain.common.Distance; import com.sap.sailing.domain.common.Distance;
import com.sap.sailing.domain.common.dto.CompetitorDTO; import com.sap.sailing.domain.common.dto.CompetitorDTO;
import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMap; import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMap;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel; import com.sap.sailing.gwt.ui.leaderboard.SingleRaceLeaderboardPanel;
public interface LiveRaceWithRacemapAndLeaderBoardView { public interface LiveRaceWithRacemapAndLeaderBoardView {
void startingWith(Slide7Presenter p, AcceptsOneWidget panel, RaceMap raceMap, void startingWith(Slide7Presenter p, AcceptsOneWidget panel, RaceMap raceMap,
LeaderboardPanel leaderboardPanel); SingleRaceLeaderboardPanel leaderboardPanel);
public interface Slide7Presenter { public interface Slide7Presenter {
} }
@@ -13,7 +13,7 @@ import com.sap.sailing.domain.common.Distance;
import com.sap.sailing.domain.common.dto.CompetitorDTO; import com.sap.sailing.domain.common.dto.CompetitorDTO;
import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMap; import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMap;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel; import com.sap.sailing.gwt.ui.leaderboard.SingleRaceLeaderboardPanel;
import com.sap.sse.gwt.client.panels.ResizableFlowPanel; import com.sap.sse.gwt.client.panels.ResizableFlowPanel;
public class LiveRaceWithRacemapAndLeaderBoardViewImpl extends ResizeComposite implements LiveRaceWithRacemapAndLeaderBoardView { public class LiveRaceWithRacemapAndLeaderBoardViewImpl extends ResizeComposite implements LiveRaceWithRacemapAndLeaderBoardView {
@@ -71,7 +71,7 @@ public class LiveRaceWithRacemapAndLeaderBoardViewImpl extends ResizeComposite i
@Override @Override
public void startingWith(Slide7Presenter p, AcceptsOneWidget panel, RaceMap raceMap, public void startingWith(Slide7Presenter p, AcceptsOneWidget panel, RaceMap raceMap,
LeaderboardPanel leaderboardPanel) { SingleRaceLeaderboardPanel leaderboardPanel) {
panel.setWidget(this); panel.setWidget(this);
rawRaceMap = raceMap; rawRaceMap = raceMap;
racemap.add(raceMap); racemap.add(raceMap);
@@ -3,14 +3,14 @@ package com.sap.sailing.gwt.autoplay.client.places.screens.preliveraceloop.leade
import com.google.gwt.user.client.ui.AcceptsOneWidget; import com.google.gwt.user.client.ui.AcceptsOneWidget;
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier; import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
import com.sap.sailing.domain.common.dto.CompetitorDTO; import com.sap.sailing.domain.common.dto.CompetitorDTO;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel; import com.sap.sailing.gwt.ui.leaderboard.SingleRaceLeaderboardPanel;
public interface PreLeaderboardWithImageView { public interface PreLeaderboardWithImageView {
void startingWith(Slide1Presenter p, AcceptsOneWidget panel); void startingWith(Slide1Presenter p, AcceptsOneWidget panel);
public interface Slide1Presenter { public interface Slide1Presenter {
} }
void setLeaderBoard(LeaderboardPanel leaderboardPanel); void setLeaderBoard(SingleRaceLeaderboardPanel leaderboardPanel);
void onCompetitorSelect(CompetitorDTO marked); void onCompetitorSelect(CompetitorDTO marked);
@@ -13,13 +13,12 @@ import com.sap.sailing.domain.common.dto.LeaderboardRowDTO;
import com.sap.sailing.gwt.autoplay.client.app.AnimationPanel; import com.sap.sailing.gwt.autoplay.client.app.AnimationPanel;
import com.sap.sailing.gwt.autoplay.client.app.AutoPlayClientFactory; import com.sap.sailing.gwt.autoplay.client.app.AutoPlayClientFactory;
import com.sap.sailing.gwt.autoplay.client.app.AutoPlayPresenterConfigured; import com.sap.sailing.gwt.autoplay.client.app.AutoPlayPresenterConfigured;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettings; import com.sap.sailing.gwt.settings.client.leaderboard.SingleRaceLeaderboardSettings;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettings.RaceColumnSelectionStrategies;
import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel; import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel;
import com.sap.sailing.gwt.ui.client.SailingServiceAsync; import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardEntryPoint; import com.sap.sailing.gwt.ui.leaderboard.LeaderboardEntryPoint;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel; import com.sap.sailing.gwt.ui.leaderboard.SingleRaceLeaderboardPanel;
import com.sap.sailing.gwt.ui.leaderboard.SixtyInchLeaderBoardStyle; import com.sap.sailing.gwt.ui.leaderboard.SixtyInchLeaderBoardStyle;
import com.sap.sse.gwt.client.ErrorReporter; import com.sap.sse.gwt.client.ErrorReporter;
import com.sap.sse.gwt.client.async.AsyncActionsExecutor; import com.sap.sse.gwt.client.async.AsyncActionsExecutor;
@@ -32,7 +31,7 @@ public class PreLiveRaceLeaderBoardWithImagePresenterImpl
protected static final int SWITCH_COMPETITOR_DELAY = 2000; protected static final int SWITCH_COMPETITOR_DELAY = 2000;
private int selected = -1; private int selected = -1;
private PreLeaderboardWithImageView view; private PreLeaderboardWithImageView view;
private LeaderboardPanel leaderboardPanel; private SingleRaceLeaderboardPanel leaderboardPanel;
private Timer selectionTimer; private Timer selectionTimer;
private CompetitorSelectionModel competitorSelectionProvider; private CompetitorSelectionModel competitorSelectionProvider;
ArrayList<CompetitorDTO> compList = new ArrayList<>(); ArrayList<CompetitorDTO> compList = new ArrayList<>();
@@ -93,18 +92,10 @@ public class PreLiveRaceLeaderBoardWithImagePresenterImpl
view.nextRace(getSlideCtx().getPreLiveRace()); view.nextRace(getSlideCtx().getPreLiveRace());
RegattaAndRaceIdentifier liveRace = getSlideCtx().getPreLiveRace(); RegattaAndRaceIdentifier liveRace = getSlideCtx().getPreLiveRace();
ArrayList<String> racesToShow = null;
if (liveRace != null) {
racesToShow = new ArrayList<>();
// racesToShow.add(lifeRace.getRaceName());
} else {
return;
}
final LeaderboardSettings leaderboardSettings = new LeaderboardSettings(null, null, null, null, null, final SingleRaceLeaderboardSettings leaderboardSettings = new SingleRaceLeaderboardSettings(null, null, null, null, null,
racesToShow, null, false, null, liveRace.getRaceName(), /* ascending */ true, false, /* ascending */ true,
/* updateUponPlayStateChange */ true, RaceColumnSelectionStrategies.EXPLICIT, /* updateUponPlayStateChange */ true, /* showAddedScores */ false, /* showOverallRacesCompleted */ false, true);
/* showAddedScores */ false, /* showOverallRacesCompleted */ false, true, false, false, true);
GWT.log("event " + getSlideCtx().getEvent()); GWT.log("event " + getSlideCtx().getEvent());
competitorSelectionProvider = new CompetitorSelectionModel(/* hasMultiSelection */ false); competitorSelectionProvider = new CompetitorSelectionModel(/* hasMultiSelection */ false);
@@ -113,7 +104,7 @@ public class PreLiveRaceLeaderBoardWithImagePresenterImpl
// perform the first request as "live" but don't by default auto-play // perform the first request as "live" but don't by default auto-play
PlayModes.Live, PlayStates.Playing, PlayModes.Live, PlayStates.Playing,
/* delayBetweenAutoAdvancesInMilliseconds */ LeaderboardEntryPoint.DEFAULT_REFRESH_INTERVAL_MILLIS); /* delayBetweenAutoAdvancesInMilliseconds */ LeaderboardEntryPoint.DEFAULT_REFRESH_INTERVAL_MILLIS);
leaderboardPanel = new LeaderboardPanel(null,null,sailingService, new AsyncActionsExecutor(), leaderboardPanel = new SingleRaceLeaderboardPanel(null,null,sailingService, new AsyncActionsExecutor(),
leaderboardSettings, true, liveRace, competitorSelectionProvider, timer, null, leaderboardSettings, true, liveRace, competitorSelectionProvider, timer, null,
getSlideCtx().getContextDefinition().getLeaderboardName(), errorReporter, StringMessages.INSTANCE, getSlideCtx().getContextDefinition().getLeaderboardName(), errorReporter, StringMessages.INSTANCE,
false, null, false, null, false, true, false, false, false,new SixtyInchLeaderBoardStyle(false)); false, null, false, null, false, true, false, false, false,new SixtyInchLeaderBoardStyle(false));
@@ -11,7 +11,7 @@ import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier; import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
import com.sap.sailing.domain.common.dto.CompetitorDTO; import com.sap.sailing.domain.common.dto.CompetitorDTO;
import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel; import com.sap.sailing.gwt.ui.leaderboard.SingleRaceLeaderboardPanel;
import com.sap.sse.gwt.client.panels.ResizableFlowPanel; import com.sap.sse.gwt.client.panels.ResizableFlowPanel;
public class PreLiveRaceLeaderBoardWithImageViewImpl extends ResizeComposite implements PreLeaderboardWithImageView { public class PreLiveRaceLeaderBoardWithImageViewImpl extends ResizeComposite implements PreLeaderboardWithImageView {
@@ -58,7 +58,7 @@ public class PreLiveRaceLeaderBoardWithImageViewImpl extends ResizeComposite imp
} }
@Override @Override
public void setLeaderBoard(LeaderboardPanel leaderboardPanel) { public void setLeaderBoard(SingleRaceLeaderboardPanel leaderboardPanel) {
leaderBoardHolder.add(leaderboardPanel); leaderBoardHolder.add(leaderboardPanel);
} }
@@ -2,7 +2,7 @@ package com.sap.sailing.gwt.autoplay.client.shared.leaderboard;
import com.sap.sailing.domain.common.dto.AbstractLeaderboardDTO; import com.sap.sailing.domain.common.dto.AbstractLeaderboardDTO;
import com.sap.sailing.gwt.autoplay.client.shared.header.SAPHeaderComponentLifecycle; import com.sap.sailing.gwt.autoplay.client.shared.header.SAPHeaderComponentLifecycle;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardPanelLifecycle; import com.sap.sailing.gwt.settings.client.leaderboard.MultiRaceLeaderboardPanelLifecycle;
import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sse.gwt.client.shared.components.SettingsDialogComponent; import com.sap.sse.gwt.client.shared.components.SettingsDialogComponent;
import com.sap.sse.gwt.client.shared.perspective.AbstractPerspectiveLifecycle; import com.sap.sse.gwt.client.shared.perspective.AbstractPerspectiveLifecycle;
@@ -14,14 +14,14 @@ import com.sap.sse.gwt.client.shared.perspective.AbstractPerspectiveLifecycle;
public class LeaderboardWithHeaderPerspectiveLifecycle extends AbstractPerspectiveLifecycle<LeaderboardWithHeaderPerspectiveSettings> { public class LeaderboardWithHeaderPerspectiveLifecycle extends AbstractPerspectiveLifecycle<LeaderboardWithHeaderPerspectiveSettings> {
private final SAPHeaderComponentLifecycle sapHeaderLifecycle; private final SAPHeaderComponentLifecycle sapHeaderLifecycle;
private final LeaderboardPanelLifecycle leaderboardPanelLifecycle; private final MultiRaceLeaderboardPanelLifecycle leaderboardPanelLifecycle;
private final StringMessages stringMessages; private final StringMessages stringMessages;
public static final String ID = "lbwh"; public static final String ID = "lbwh";
public LeaderboardWithHeaderPerspectiveLifecycle(AbstractLeaderboardDTO leaderboard, StringMessages stringMessages) { public LeaderboardWithHeaderPerspectiveLifecycle(AbstractLeaderboardDTO leaderboard, StringMessages stringMessages) {
this.stringMessages = stringMessages; this.stringMessages = stringMessages;
this.leaderboardPanelLifecycle = new LeaderboardPanelLifecycle(leaderboard, stringMessages); this.leaderboardPanelLifecycle = new MultiRaceLeaderboardPanelLifecycle(leaderboard, stringMessages);
this.sapHeaderLifecycle = new SAPHeaderComponentLifecycle(stringMessages.leaderboard() + ": " + this.sapHeaderLifecycle = new SAPHeaderComponentLifecycle(stringMessages.leaderboard() + ": " +
(leaderboard.getDisplayName() == null ? leaderboard.name : leaderboard.getDisplayName()), (leaderboard.getDisplayName() == null ? leaderboard.name : leaderboard.getDisplayName()),
stringMessages); stringMessages);
@@ -54,7 +54,7 @@ public class LeaderboardWithHeaderPerspectiveLifecycle extends AbstractPerspecti
return sapHeaderLifecycle; return sapHeaderLifecycle;
} }
public LeaderboardPanelLifecycle getLeaderboardPanelLifecycle() { public MultiRaceLeaderboardPanelLifecycle getLeaderboardPanelLifecycle() {
return leaderboardPanelLifecycle; return leaderboardPanelLifecycle;
} }
@@ -9,18 +9,21 @@ import com.google.gwt.event.logical.shared.ResizeHandler;
import com.google.gwt.user.client.Window; import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.DockLayoutPanel; import com.google.gwt.user.client.ui.DockLayoutPanel;
import com.google.gwt.user.client.ui.Widget; import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.gwt.autoplay.client.shared.header.SAPHeaderComponent;
import com.sap.sailing.gwt.autoplay.client.shared.header.SAPHeaderComponentLifecycle;
import com.sap.sailing.gwt.autoplay.client.shared.header.SAPHeaderComponentSettings;
import com.sap.sailing.gwt.autoplay.client.shared.oldleaderboard.OldLeaderboard; import com.sap.sailing.gwt.autoplay.client.shared.oldleaderboard.OldLeaderboard;
import com.sap.sailing.gwt.common.client.CSS3Util; import com.sap.sailing.gwt.common.client.CSS3Util;
import com.sap.sailing.gwt.common.client.FullscreenUtil; import com.sap.sailing.gwt.common.client.FullscreenUtil;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardPanelLifecycle; import com.sap.sailing.gwt.settings.client.leaderboard.MultiRaceLeaderboardPanelLifecycle;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettings; import com.sap.sailing.gwt.settings.client.leaderboard.MultiRaceLeaderboardSettings;
import com.sap.sailing.gwt.ui.client.CompetitorSelectionProvider; import com.sap.sailing.gwt.ui.client.CompetitorSelectionProvider;
import com.sap.sailing.gwt.ui.client.LeaderboardUpdateListener; import com.sap.sailing.gwt.ui.client.LeaderboardUpdateListener;
import com.sap.sailing.gwt.ui.client.LeaderboardUpdateProvider; import com.sap.sailing.gwt.ui.client.LeaderboardUpdateProvider;
import com.sap.sailing.gwt.ui.client.SailingServiceAsync; import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.leaderboard.ClassicLeaderboardStyle; import com.sap.sailing.gwt.ui.leaderboard.ClassicLeaderboardStyle;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel; import com.sap.sailing.gwt.ui.leaderboard.MultiRaceLeaderboardPanel;
import com.sap.sse.gwt.client.ErrorReporter; import com.sap.sse.gwt.client.ErrorReporter;
import com.sap.sse.gwt.client.async.AsyncActionsExecutor; import com.sap.sse.gwt.client.async.AsyncActionsExecutor;
import com.sap.sse.gwt.client.player.Timer; import com.sap.sse.gwt.client.player.Timer;
@@ -37,15 +40,15 @@ import com.sap.sse.security.ui.settings.ComponentContextWithSettingsStorage;
* @author Frank Mittag * @author Frank Mittag
* *
*/ */
public class LeaderboardWithHeaderPerspective extends AbstractPerspectiveComposite<LeaderboardWithHeaderPerspectiveLifecycle, public class MultiRaceLeaderboardWithHeaderPerspective extends AbstractPerspectiveComposite<LeaderboardWithHeaderPerspectiveLifecycle,
LeaderboardWithHeaderPerspectiveSettings> implements LeaderboardUpdateProvider { LeaderboardWithHeaderPerspectiveSettings> implements LeaderboardUpdateProvider {
private final DockLayoutPanel dockPanel; private final DockLayoutPanel dockPanel;
private final static int SAP_HEADER_HEIGHT = 75; private final static int SAP_HEADER_HEIGHT = 75;
private final Widget currentContentWidget; private final Widget currentContentWidget;
private final LeaderboardPanel leaderboardPanel; private final MultiRaceLeaderboardPanel leaderboardPanel;
private final StringMessages stringMessages; private final StringMessages stringMessages;
public LeaderboardWithHeaderPerspective(Component<?> parent, public MultiRaceLeaderboardWithHeaderPerspective(Component<?> parent,
ComponentContextWithSettingsStorage<PerspectiveCompositeSettings<LeaderboardWithHeaderPerspectiveSettings>> componentContext, ComponentContextWithSettingsStorage<PerspectiveCompositeSettings<LeaderboardWithHeaderPerspectiveSettings>> componentContext,
LeaderboardWithHeaderPerspectiveLifecycle lifecycle, LeaderboardWithHeaderPerspectiveLifecycle lifecycle,
PerspectiveCompositeSettings<LeaderboardWithHeaderPerspectiveSettings> settings, PerspectiveCompositeSettings<LeaderboardWithHeaderPerspectiveSettings> settings,
@@ -58,18 +61,22 @@ public class LeaderboardWithHeaderPerspective extends AbstractPerspectiveComposi
Window.addResizeHandler(new ResizeHandler() { Window.addResizeHandler(new ResizeHandler() {
@Override @Override
public void onResize(ResizeEvent event) { public void onResize(ResizeEvent event) {
if (LeaderboardWithHeaderPerspective.this.getPerspectiveSettings().isLeaderboardAutoZoom()) { if (MultiRaceLeaderboardWithHeaderPerspective.this.getPerspectiveSettings().isLeaderboardAutoZoom()) {
autoZoomContentWidget(SAP_HEADER_HEIGHT, currentContentWidget); autoZoomContentWidget(SAP_HEADER_HEIGHT, currentContentWidget);
} }
} }
}); });
SAPHeaderComponentLifecycle sapHeaderLifecycle = getPerspectiveLifecycle().getSapHeaderLifecycle();
SAPHeaderComponent sapHeader = createSAPHeader(sapHeaderLifecycle, userService,
settings.findSettingsByComponentId(sapHeaderLifecycle.getComponentId()),
stringMessages, startInFullScreenMode);
leaderboardPanel = createLeaderboardPanel(lifecycle, settings, sailingService, asyncActionsExecutor, leaderboardPanel = createLeaderboardPanel(lifecycle, settings, sailingService, asyncActionsExecutor,
competitorSelectionProvider, timer, leaderboardName, errorReporter, stringMessages); competitorSelectionProvider, timer, leaderboardName, errorReporter, stringMessages);
leaderboardPanel.getContentWidget().getElement().getStyle().setFontWeight(FontWeight.BOLD); leaderboardPanel.getContentWidget().getElement().getStyle().setFontWeight(FontWeight.BOLD);
addChildComponent(sapHeader);
addChildComponent(leaderboardPanel); addChildComponent(leaderboardPanel);
dockPanel = new DockLayoutPanel(Unit.PX); dockPanel = new DockLayoutPanel(Unit.PX);
dockPanel.addNorth(sapHeader, SAP_HEADER_HEIGHT);
OldLeaderboard oldLeaderboard = new OldLeaderboard(leaderboardPanel, stringMessages); OldLeaderboard oldLeaderboard = new OldLeaderboard(leaderboardPanel, stringMessages);
leaderboardPanel.addLeaderboardUpdateListener(oldLeaderboard); leaderboardPanel.addLeaderboardUpdateListener(oldLeaderboard);
currentContentWidget = oldLeaderboard.getContentWidget(); currentContentWidget = oldLeaderboard.getContentWidget();
@@ -179,18 +186,25 @@ public class LeaderboardWithHeaderPerspective extends AbstractPerspectiveComposi
leaderboardPanel.removeLeaderboardUpdateListener(listener); leaderboardPanel.removeLeaderboardUpdateListener(listener);
} }
private LeaderboardPanel createLeaderboardPanel(LeaderboardWithHeaderPerspectiveLifecycle lifecycle, private SAPHeaderComponent createSAPHeader(SAPHeaderComponentLifecycle componentLifecycle, UserService userService, SAPHeaderComponentSettings settings,
final StringMessages stringMessages, boolean withFullscreenButton) {
return new SAPHeaderComponent(this, getComponentContext(), componentLifecycle, userService, settings,
stringMessages,
withFullscreenButton);
}
private MultiRaceLeaderboardPanel createLeaderboardPanel(LeaderboardWithHeaderPerspectiveLifecycle lifecycle,
PerspectiveCompositeSettings<LeaderboardWithHeaderPerspectiveSettings> settings, PerspectiveCompositeSettings<LeaderboardWithHeaderPerspectiveSettings> settings,
SailingServiceAsync sailingService, AsyncActionsExecutor asyncActionsExecutor, SailingServiceAsync sailingService, AsyncActionsExecutor asyncActionsExecutor,
CompetitorSelectionProvider competitorSelectionProvider, Timer timer, CompetitorSelectionProvider competitorSelectionProvider, Timer timer,
String leaderboardName, final ErrorReporter errorReporter, final StringMessages stringMessages) { String leaderboardName, final ErrorReporter errorReporter, final StringMessages stringMessages) {
LeaderboardPanelLifecycle leaderboardPanelLifecycle = getPerspectiveLifecycle().getLeaderboardPanelLifecycle(); MultiRaceLeaderboardPanelLifecycle leaderboardPanelLifecycle = getPerspectiveLifecycle().getLeaderboardPanelLifecycle();
LeaderboardSettings leaderboardSettings = settings MultiRaceLeaderboardSettings leaderboardSettings = settings
.findSettingsByComponentId(leaderboardPanelLifecycle.getComponentId()); .findSettingsByComponentId(leaderboardPanelLifecycle.getComponentId());
LeaderboardPanel leaderboardPanel = new LeaderboardPanel(this, getComponentContext(), sailingService, MultiRaceLeaderboardPanel leaderboardPanel = new MultiRaceLeaderboardPanel(this, getComponentContext(), sailingService,
asyncActionsExecutor, asyncActionsExecutor,
leaderboardSettings, /*isEmbedded*/true, /* preSelectedRace */null, leaderboardSettings, /*isEmbedded*/true,
competitorSelectionProvider, timer, /* leaderboardGroupName */"", competitorSelectionProvider, timer, /* leaderboardGroupName */"",
leaderboardName, errorReporter, stringMessages, leaderboardName, errorReporter, stringMessages,
/* showRaceDetails */false, /* competitorSearchTextBox */ null, /* showRegattaRank */ /* showRaceDetails */false, /* competitorSearchTextBox */ null, /* showRegattaRank */
@@ -210,7 +224,6 @@ public class LeaderboardWithHeaderPerspective extends AbstractPerspectiveComposi
return true; return true;
} }
@Override @Override
public String getId() { public String getId() {
return LeaderboardWithHeaderPerspectiveLifecycle.ID; return LeaderboardWithHeaderPerspectiveLifecycle.ID;
@@ -15,7 +15,7 @@ import com.sap.sailing.domain.common.dto.RaceColumnDTO;
import com.sap.sailing.gwt.ui.client.LeaderboardUpdateListener; import com.sap.sailing.gwt.ui.client.LeaderboardUpdateListener;
import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.common.client.DateAndTimeFormatterUtil; import com.sap.sailing.gwt.ui.common.client.DateAndTimeFormatterUtil;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel; import com.sap.sailing.gwt.ui.leaderboard.MultiRaceLeaderboardPanel;
import com.sap.sailing.gwt.ui.leaderboard.ScoringSchemeTypeFormatter; import com.sap.sailing.gwt.ui.leaderboard.ScoringSchemeTypeFormatter;
public class OldLeaderboard extends Composite implements LeaderboardUpdateListener { public class OldLeaderboard extends Composite implements LeaderboardUpdateListener {
@@ -32,10 +32,10 @@ public class OldLeaderboard extends Composite implements LeaderboardUpdateListen
@UiField DivElement lastScoringCommentDiv; @UiField DivElement lastScoringCommentDiv;
@UiField DivElement scoringSchemeDiv; @UiField DivElement scoringSchemeDiv;
private LeaderboardPanel leaderboardPanel; private MultiRaceLeaderboardPanel leaderboardPanel;
private final StringMessages stringmessages; private final StringMessages stringmessages;
public OldLeaderboard(LeaderboardPanel leaderboardPanel, StringMessages stringmessages) { public OldLeaderboard(MultiRaceLeaderboardPanel leaderboardPanel, StringMessages stringmessages) {
this.stringmessages = stringmessages; this.stringmessages = stringmessages;
this.leaderboardPanel = leaderboardPanel; this.leaderboardPanel = leaderboardPanel;
@@ -43,7 +43,7 @@ public class EventsOverviewUpcomingEvent extends Composite {
eventName.setInnerText(event.getDisplayName()); eventName.setInnerText(event.getDisplayName());
venueName.setInnerText(event.getVenue()); venueName.setInnerText(event.getVenue());
eventStartDate.setInnerText(EventDatesFormatterUtil.formatDateRangeWithoutYear(event.getStartDate(), event.getEndDate())); eventStartDate.setInnerText(EventDatesFormatterUtil.formatDateRangeWithoutYear(event.getStartDate(), event.getEndDate()));
days.setInnerText(StringMessages.INSTANCE.upcommingEventStartsInDays(DateUtil.daysFromNow(event.getStartDate()))); days.setInnerText(StringMessages.INSTANCE.upcomingEventStartsInDays(DateUtil.daysFromNow(event.getStartDate())));
} }
@UiHandler("eventOverviewLink") @UiHandler("eventOverviewLink")
@@ -29,12 +29,12 @@ import com.sap.sailing.domain.common.dto.LeaderboardDTO;
import com.sap.sailing.domain.common.dto.RaceColumnDTO; import com.sap.sailing.domain.common.dto.RaceColumnDTO;
import com.sap.sailing.gwt.home.desktop.partials.old.EventRegattaLeaderboardResources; import com.sap.sailing.gwt.home.desktop.partials.old.EventRegattaLeaderboardResources;
import com.sap.sailing.gwt.home.desktop.partials.old.LeaderboardDelegate; import com.sap.sailing.gwt.home.desktop.partials.old.LeaderboardDelegate;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettings; import com.sap.sailing.gwt.settings.client.leaderboard.MultiRaceLeaderboardSettings;
import com.sap.sailing.gwt.ui.client.DebugIdHelper; import com.sap.sailing.gwt.ui.client.DebugIdHelper;
import com.sap.sailing.gwt.ui.client.LeaderboardUpdateListener; import com.sap.sailing.gwt.ui.client.LeaderboardUpdateListener;
import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.common.client.DateAndTimeFormatterUtil; import com.sap.sailing.gwt.ui.common.client.DateAndTimeFormatterUtil;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel; import com.sap.sailing.gwt.ui.leaderboard.MultiRaceLeaderboardPanel;
import com.sap.sailing.gwt.ui.leaderboard.ScoringSchemeTypeFormatter; import com.sap.sailing.gwt.ui.leaderboard.ScoringSchemeTypeFormatter;
import com.sap.sse.gwt.client.controls.busyindicator.BusyIndicator; import com.sap.sse.gwt.client.controls.busyindicator.BusyIndicator;
import com.sap.sse.gwt.client.controls.busyindicator.BusyStateChangeListener; import com.sap.sse.gwt.client.controls.busyindicator.BusyStateChangeListener;
@@ -63,7 +63,7 @@ public class OldLeaderboard extends Composite implements BusyStateChangeListener
@UiField BusyIndicator busyIndicator; @UiField BusyIndicator busyIndicator;
@UiField EventRegattaLeaderboardResources local_res; @UiField EventRegattaLeaderboardResources local_res;
private LeaderboardPanel leaderboardPanel; private MultiRaceLeaderboardPanel leaderboardPanel;
private Timer autoRefreshTimer; private Timer autoRefreshTimer;
private final OldLeaderboardDelegate delegate; private final OldLeaderboardDelegate delegate;
@@ -186,7 +186,7 @@ public class OldLeaderboard extends Composite implements BusyStateChangeListener
final String componentName = leaderboardPanel.getLocalizedShortName(); final String componentName = leaderboardPanel.getLocalizedShortName();
final String debugIdPrefix = DebugIdHelper.createDebugId(componentName); final String debugIdPrefix = DebugIdHelper.createDebugId(componentName);
SettingsDialog<?> dialog = new SettingsDialog<LeaderboardSettings>(leaderboardPanel, StringMessages.INSTANCE) { SettingsDialog<MultiRaceLeaderboardSettings> dialog = new SettingsDialog<MultiRaceLeaderboardSettings>(leaderboardPanel, StringMessages.INSTANCE) {
protected Widget getAdditionalWidget() { protected Widget getAdditionalWidget() {
Widget additionalWidget = super.getAdditionalWidget(); Widget additionalWidget = super.getAdditionalWidget();
if (!oldLeaderboardPanel.getElement().isOrHasChild(leaderboardPanel.getElement())) { if (!oldLeaderboardPanel.getElement().isOrHasChild(leaderboardPanel.getElement())) {
@@ -227,7 +227,7 @@ public class OldLeaderboard extends Composite implements BusyStateChangeListener
return fullscreenAnchor; return fullscreenAnchor;
} }
public void setLeaderboard(LeaderboardPanel leaderboardPanel, final Timer timer) { public void setLeaderboard(MultiRaceLeaderboardPanel leaderboardPanel, final Timer timer) {
this.autoRefreshTimer = timer; this.autoRefreshTimer = timer;
this.leaderboardPanel = leaderboardPanel; this.leaderboardPanel = leaderboardPanel;
if (leaderboardPanel.getComponentContext() == null) { if (leaderboardPanel.getComponentContext() == null) {
@@ -23,12 +23,12 @@ import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.domain.common.dto.LeaderboardDTO; import com.sap.sailing.domain.common.dto.LeaderboardDTO;
import com.sap.sailing.gwt.home.desktop.partials.old.EventRegattaLeaderboardResources; import com.sap.sailing.gwt.home.desktop.partials.old.EventRegattaLeaderboardResources;
import com.sap.sailing.gwt.home.desktop.partials.old.LeaderboardDelegate; import com.sap.sailing.gwt.home.desktop.partials.old.LeaderboardDelegate;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettings; import com.sap.sailing.gwt.settings.client.leaderboard.MultiRaceLeaderboardSettings;
import com.sap.sailing.gwt.ui.client.DebugIdHelper; import com.sap.sailing.gwt.ui.client.DebugIdHelper;
import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.common.client.DateAndTimeFormatterUtil; import com.sap.sailing.gwt.ui.common.client.DateAndTimeFormatterUtil;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel;
import com.sap.sailing.gwt.ui.leaderboard.MultiLeaderboardProxyPanel; import com.sap.sailing.gwt.ui.leaderboard.MultiLeaderboardProxyPanel;
import com.sap.sailing.gwt.ui.leaderboard.MultiRaceLeaderboardPanel;
import com.sap.sailing.gwt.ui.leaderboard.ScoringSchemeTypeFormatter; import com.sap.sailing.gwt.ui.leaderboard.ScoringSchemeTypeFormatter;
import com.sap.sailing.gwt.ui.leaderboard.SelectedLeaderboardChangeListener; import com.sap.sailing.gwt.ui.leaderboard.SelectedLeaderboardChangeListener;
import com.sap.sse.gwt.client.controls.busyindicator.BusyIndicator; import com.sap.sse.gwt.client.controls.busyindicator.BusyIndicator;
@@ -38,7 +38,7 @@ import com.sap.sse.gwt.client.player.Timer.PlayModes;
import com.sap.sse.gwt.client.player.Timer.PlayStates; import com.sap.sse.gwt.client.player.Timer.PlayStates;
import com.sap.sse.gwt.client.shared.components.SettingsDialog; import com.sap.sse.gwt.client.shared.components.SettingsDialog;
public class OldMultiLeaderboard extends Composite implements SelectedLeaderboardChangeListener, BusyStateChangeListener { public class OldMultiLeaderboard extends Composite implements SelectedLeaderboardChangeListener<MultiRaceLeaderboardPanel>, BusyStateChangeListener {
private static OldMultiLeaderboardUiBinder uiBinder = GWT.create(OldMultiLeaderboardUiBinder.class); private static OldMultiLeaderboardUiBinder uiBinder = GWT.create(OldMultiLeaderboardUiBinder.class);
interface OldMultiLeaderboardUiBinder extends UiBinder<Widget, OldMultiLeaderboard> { interface OldMultiLeaderboardUiBinder extends UiBinder<Widget, OldMultiLeaderboard> {
@@ -59,7 +59,7 @@ public class OldMultiLeaderboard extends Composite implements SelectedLeaderboar
private MultiLeaderboardProxyPanel multiLeaderboardPanel; private MultiLeaderboardProxyPanel multiLeaderboardPanel;
private Timer autoRefreshTimer; private Timer autoRefreshTimer;
private final OldMultiLeaderboardDelegate delegate; private final OldMultiLeaderboardDelegate delegate;
private LeaderboardPanel lastSelectedLeaderboardPanel; private MultiRaceLeaderboardPanel lastSelectedLeaderboardPanel;
public OldMultiLeaderboard() { public OldMultiLeaderboard() {
this(null); this(null);
@@ -160,7 +160,7 @@ public class OldMultiLeaderboard extends Composite implements SelectedLeaderboar
final String componentName = multiLeaderboardPanel.getLocalizedShortName(); final String componentName = multiLeaderboardPanel.getLocalizedShortName();
final String debugIdPrefix = DebugIdHelper.createDebugId(componentName); final String debugIdPrefix = DebugIdHelper.createDebugId(componentName);
SettingsDialog<?> dialog = new SettingsDialog<LeaderboardSettings>(multiLeaderboardPanel, StringMessages.INSTANCE) { SettingsDialog<?> dialog = new SettingsDialog<MultiRaceLeaderboardSettings>(multiLeaderboardPanel, StringMessages.INSTANCE) {
protected Widget getAdditionalWidget() { protected Widget getAdditionalWidget() {
Widget additionalWidget = super.getAdditionalWidget(); Widget additionalWidget = super.getAdditionalWidget();
if (!oldMultiLeaderboardPanel.getElement().isOrHasChild(multiLeaderboardPanel.getElement())) { if (!oldMultiLeaderboardPanel.getElement().isOrHasChild(multiLeaderboardPanel.getElement())) {
@@ -232,7 +232,7 @@ public class OldMultiLeaderboard extends Composite implements SelectedLeaderboar
} }
@Override @Override
public void onSelectedLeaderboardChanged(LeaderboardPanel selectedLeaderboard) { public void onSelectedLeaderboardChanged(MultiRaceLeaderboardPanel selectedLeaderboard) {
if(lastSelectedLeaderboardPanel != null) { if(lastSelectedLeaderboardPanel != null) {
lastSelectedLeaderboardPanel.removeBusyStateChangeListener(this); lastSelectedLeaderboardPanel.removeBusyStateChangeListener(this);
} }
@@ -1,16 +1,15 @@
package com.sap.sailing.gwt.home.desktop.places.event.regatta; package com.sap.sailing.gwt.home.desktop.places.event.regatta;
import com.sap.sailing.domain.common.DetailType; import com.sap.sailing.domain.common.DetailType;
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettings;
import com.sap.sailing.gwt.settings.client.leaderboard.MultiCompetitorLeaderboardChartSettings; import com.sap.sailing.gwt.settings.client.leaderboard.MultiCompetitorLeaderboardChartSettings;
import com.sap.sailing.gwt.settings.client.leaderboard.MultiRaceLeaderboardSettings;
import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel; import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel;
import com.sap.sailing.gwt.ui.client.DebugIdHelper; import com.sap.sailing.gwt.ui.client.DebugIdHelper;
import com.sap.sailing.gwt.ui.client.SailingServiceAsync; import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.client.shared.charts.MultiCompetitorLeaderboardChart; import com.sap.sailing.gwt.ui.client.shared.charts.MultiCompetitorLeaderboardChart;
import com.sap.sailing.gwt.ui.leaderboard.ClassicLeaderboardStyle; import com.sap.sailing.gwt.ui.leaderboard.ClassicLeaderboardStyle;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel; import com.sap.sailing.gwt.ui.leaderboard.MultiRaceLeaderboardPanel;
import com.sap.sse.common.settings.Settings; import com.sap.sse.common.settings.Settings;
import com.sap.sse.gwt.client.ErrorReporter; import com.sap.sse.gwt.client.ErrorReporter;
import com.sap.sse.gwt.client.async.AsyncActionsExecutor; import com.sap.sse.gwt.client.async.AsyncActionsExecutor;
@@ -25,7 +24,7 @@ import com.sap.sse.gwt.client.shared.settings.ComponentContext;
* @author Frank Mittag (c163874) * @author Frank Mittag (c163874)
*/ */
public class RegattaAnalyticsDataManager { public class RegattaAnalyticsDataManager {
private LeaderboardPanel leaderboardPanel; private MultiRaceLeaderboardPanel leaderboardPanel;
private MultiCompetitorLeaderboardChart multiCompetitorChart; private MultiCompetitorLeaderboardChart multiCompetitorChart;
private final CompetitorSelectionModel competitorSelectionProvider; private final CompetitorSelectionModel competitorSelectionProvider;
@@ -45,15 +44,15 @@ public class RegattaAnalyticsDataManager {
this.multiCompetitorChart = null; this.multiCompetitorChart = null;
} }
public LeaderboardPanel createLeaderboardPanel(Component<?> parent, ComponentContext<?> context, public MultiRaceLeaderboardPanel createMultiRaceLeaderboardPanel(Component<?> parent, ComponentContext<?> context,
final LeaderboardSettings leaderboardSettings, final RegattaAndRaceIdentifier preselectedRace, final MultiRaceLeaderboardSettings leaderboardSettings,
final String leaderboardGroupName, String leaderboardName, boolean showRaceDetails, final String leaderboardGroupName, String leaderboardName, boolean showRaceDetails,
boolean autoExpandLastRaceColumn) { boolean autoExpandLastRaceColumn) {
if (leaderboardPanel == null) { if (leaderboardPanel == null) {
leaderboardPanel = new LeaderboardPanel(parent, context, sailingService, leaderboardPanel = new MultiRaceLeaderboardPanel(parent, context, sailingService,
asyncActionsExecutor, asyncActionsExecutor,
leaderboardSettings, leaderboardSettings,
true, preselectedRace, true,
competitorSelectionProvider, timer, leaderboardGroupName, leaderboardName, errorReporter, competitorSelectionProvider, timer, leaderboardGroupName, leaderboardName, errorReporter,
StringMessages.INSTANCE, showRaceDetails, /* competitorSearchTextBox */ null, StringMessages.INSTANCE, showRaceDetails, /* competitorSearchTextBox */ null,
/* showSelectionCheckbox */ true, /* raceTimesInfoProvider */ null, autoExpandLastRaceColumn, /* showSelectionCheckbox */ true, /* raceTimesInfoProvider */ null, autoExpandLastRaceColumn,
@@ -72,7 +71,7 @@ public class RegattaAnalyticsDataManager {
return multiCompetitorChart; return multiCompetitorChart;
} }
public LeaderboardPanel getLeaderboardPanel() { public MultiRaceLeaderboardPanel getLeaderboardPanel() {
return leaderboardPanel; return leaderboardPanel;
} }
@@ -5,14 +5,14 @@ import com.google.gwt.event.logical.shared.AttachEvent;
import com.google.gwt.event.logical.shared.AttachEvent.Handler; import com.google.gwt.event.logical.shared.AttachEvent.Handler;
import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.Composite;
import com.sap.sailing.gwt.home.desktop.places.Consumer; import com.sap.sailing.gwt.home.desktop.places.Consumer;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardPanelLifecycle;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettings;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettingsFactory; import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettingsFactory;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardUrlSettings; import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardUrlSettings;
import com.sap.sailing.gwt.settings.client.leaderboard.MultiRaceLeaderboardPanelLifecycle;
import com.sap.sailing.gwt.settings.client.leaderboard.MultiRaceLeaderboardSettings;
import com.sap.sailing.gwt.settings.client.utils.StoredSettingsLocationFactory; import com.sap.sailing.gwt.settings.client.utils.StoredSettingsLocationFactory;
import com.sap.sailing.gwt.ui.client.LeaderboardUpdateListener; import com.sap.sailing.gwt.ui.client.LeaderboardUpdateListener;
import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel; import com.sap.sailing.gwt.ui.leaderboard.MultiRaceLeaderboardPanel;
import com.sap.sse.gwt.client.mutationobserver.ElementSizeMutationObserver; import com.sap.sse.gwt.client.mutationobserver.ElementSizeMutationObserver;
import com.sap.sse.gwt.client.mutationobserver.ElementSizeMutationObserver.DomMutationCallback; import com.sap.sse.gwt.client.mutationobserver.ElementSizeMutationObserver.DomMutationCallback;
import com.sap.sse.gwt.client.shared.settings.DefaultOnSettingsLoadedCallback; import com.sap.sse.gwt.client.shared.settings.DefaultOnSettingsLoadedCallback;
@@ -34,20 +34,19 @@ public abstract class SharedLeaderboardRegattaTabView<T extends AbstractEventReg
} }
public void createSharedLeaderboardPanel(String leaderboardName, RegattaAnalyticsDataManager regattaAnalyticsManager, UserService userService, public void createSharedLeaderboardPanel(String leaderboardName, RegattaAnalyticsDataManager regattaAnalyticsManager, UserService userService,
String placeToken, final Consumer<LeaderboardPanel> leaderboardConsumer) { String placeToken, final Consumer<MultiRaceLeaderboardPanel> consumer) {
// FIXME remove // FIXME remove
boolean autoExpandLastRaceColumn = GwtHttpRequestUtils.getBooleanParameter( boolean autoExpandLastRaceColumn = GwtHttpRequestUtils.getBooleanParameter(
LeaderboardUrlSettings.PARAM_AUTO_EXPAND_LAST_RACE_COLUMN, false); LeaderboardUrlSettings.PARAM_AUTO_EXPAND_LAST_RACE_COLUMN, false);
final PlaceBasedComponentContextWithSettingsStorage<LeaderboardSettings> componentContext = createLeaderboardComponentContext(leaderboardName, userService, final PlaceBasedComponentContextWithSettingsStorage<MultiRaceLeaderboardSettings> componentContext = createLeaderboardComponentContext(leaderboardName, userService,
placeToken); placeToken);
componentContext.getInitialSettings(new DefaultOnSettingsLoadedCallback<LeaderboardSettings>() { componentContext.getInitialSettings(new DefaultOnSettingsLoadedCallback<MultiRaceLeaderboardSettings>() {
@Override @Override
public void onSuccess(LeaderboardSettings leaderboardSettings) { public void onSuccess(MultiRaceLeaderboardSettings leaderboardSettings) {
final LeaderboardPanel leaderboardPanel = regattaAnalyticsManager.createLeaderboardPanel(null, componentContext, // final MultiRaceLeaderboardPanel leaderboardPanel = regattaAnalyticsManager.createMultiRaceLeaderboardPanel(null, componentContext, //
leaderboardSettings, // leaderboardSettings, //
null, //
"leaderboardGroupName", // TODO: keep using magic string? ask frank! "leaderboardGroupName", // TODO: keep using magic string? ask frank!
leaderboardName, // leaderboardName, //
true, true,
@@ -71,14 +70,14 @@ public abstract class SharedLeaderboardRegattaTabView<T extends AbstractEventReg
initialLeaderboardSizeCalculated = true; initialLeaderboardSizeCalculated = true;
if (newWidth > 0 && newHeight > 0 && newWidth > 1500) { if (newWidth > 0 && newHeight > 0 && newWidth > 1500) {
final int numberOfLastRacesToShow = (1500 - 600) / 50; final int numberOfLastRacesToShow = (1500 - 600) / 50;
final LeaderboardSettings newSettings = LeaderboardSettingsFactory.getInstance() final MultiRaceLeaderboardSettings newSettings = LeaderboardSettingsFactory.getInstance()
.createNewDefaultSettingsWithLastN(numberOfLastRacesToShow); .createNewDefaultSettingsWithLastN(numberOfLastRacesToShow);
componentContext.addAdditionalSettingsLayerForComponent(leaderboardPanel, componentContext.addAdditionalSettingsLayerForComponent(leaderboardPanel,
PipelineLevel.SYSTEM_DEFAULTS, newSettings, PipelineLevel.SYSTEM_DEFAULTS, newSettings,
new OnSettingsReloadedCallback<LeaderboardSettings>() { new OnSettingsReloadedCallback<MultiRaceLeaderboardSettings>() {
@Override @Override
public void onSettingsReloaded(LeaderboardSettings patchedSettings) { public void onSettingsReloaded(MultiRaceLeaderboardSettings patchedSettings) {
GWT.log("Switching to last_n mode with settings" + patchedSettings); GWT.log("Switching to last_n mode with settings" + patchedSettings);
leaderboardPanel.updateSettings(patchedSettings); leaderboardPanel.updateSettings(patchedSettings);
} }
@@ -89,17 +88,17 @@ public abstract class SharedLeaderboardRegattaTabView<T extends AbstractEventReg
}); });
observer.observe(leaderboardPanel.getLeaderboardTable().getElement()); observer.observe(leaderboardPanel.getLeaderboardTable().getElement());
} }
leaderboardConsumer.consume(leaderboardPanel); consumer.consume(leaderboardPanel);
} }
}); });
} }
protected PlaceBasedComponentContextWithSettingsStorage<LeaderboardSettings> createLeaderboardComponentContext(String leaderboardName, UserService userService, protected PlaceBasedComponentContextWithSettingsStorage<MultiRaceLeaderboardSettings> createLeaderboardComponentContext(String leaderboardName, UserService userService,
String placeToken) { String placeToken) {
final LeaderboardPanelLifecycle lifecycle = new LeaderboardPanelLifecycle(null, StringMessages.INSTANCE); final MultiRaceLeaderboardPanelLifecycle lifecycle = new MultiRaceLeaderboardPanelLifecycle(null, StringMessages.INSTANCE);
final StoredSettingsLocation storageDefinition = StoredSettingsLocationFactory.createStoredSettingsLocatorForEventRegattaLeaderboard(leaderboardName); final StoredSettingsLocation storageDefinition = StoredSettingsLocationFactory.createStoredSettingsLocatorForEventRegattaLeaderboard(leaderboardName);
final PlaceBasedComponentContextWithSettingsStorage<LeaderboardSettings> componentContext = new PlaceBasedComponentContextWithSettingsStorage<>( final PlaceBasedComponentContextWithSettingsStorage<MultiRaceLeaderboardSettings> componentContext = new PlaceBasedComponentContextWithSettingsStorage<>(
lifecycle, userService, storageDefinition, placeToken); lifecycle, userService, storageDefinition, placeToken);
return componentContext; return componentContext;
} }
@@ -29,7 +29,7 @@ import com.sap.sailing.gwt.ui.client.CompetitorSelectionChangeListener;
import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel; import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel;
import com.sap.sailing.gwt.ui.client.LeaderboardUpdateProvider; import com.sap.sailing.gwt.ui.client.LeaderboardUpdateProvider;
import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel; import com.sap.sailing.gwt.ui.leaderboard.MultiRaceLeaderboardPanel;
import com.sap.sse.common.Util; import com.sap.sse.common.Util;
/** /**
@@ -96,9 +96,9 @@ public class RegattaCompetitorAnalyticsTabView extends SharedLeaderboardRegattaT
} }
}; };
if(regattaAnalyticsManager.getLeaderboardPanel() == null) { if(regattaAnalyticsManager.getLeaderboardPanel() == null) {
createSharedLeaderboardPanel(leaderboardName, regattaAnalyticsManager, currentPresenter.getUserService(), null, new Consumer<LeaderboardPanel>() { createSharedLeaderboardPanel(leaderboardName, regattaAnalyticsManager, currentPresenter.getUserService(), null, new Consumer<MultiRaceLeaderboardPanel>() {
@Override @Override
public void consume(LeaderboardPanel object) { public void consume(MultiRaceLeaderboardPanel object) {
callback.run(); callback.run();
} }
}); });
@@ -29,10 +29,10 @@ import com.sap.sailing.gwt.home.shared.partials.placeholder.InfoPlaceholder;
import com.sap.sailing.gwt.home.shared.refresh.RefreshManager; import com.sap.sailing.gwt.home.shared.refresh.RefreshManager;
import com.sap.sailing.gwt.home.shared.refresh.RefreshManagerWithErrorAndBusy; import com.sap.sailing.gwt.home.shared.refresh.RefreshManagerWithErrorAndBusy;
import com.sap.sailing.gwt.home.shared.refresh.RefreshableWidget; import com.sap.sailing.gwt.home.shared.refresh.RefreshableWidget;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettings; import com.sap.sailing.gwt.settings.client.leaderboard.MultiRaceLeaderboardSettings;
import com.sap.sailing.gwt.ui.client.LeaderboardUpdateProvider; import com.sap.sailing.gwt.ui.client.LeaderboardUpdateProvider;
import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel; import com.sap.sailing.gwt.ui.leaderboard.MultiRaceLeaderboardPanel;
import com.sap.sse.gwt.client.shared.settings.DefaultOnSettingsLoadedCallback; import com.sap.sse.gwt.client.shared.settings.DefaultOnSettingsLoadedCallback;
import com.sap.sse.gwt.dispatch.shared.commands.CollectionResult; import com.sap.sse.gwt.dispatch.shared.commands.CollectionResult;
@@ -88,10 +88,10 @@ public class RegattaLeaderboardTabView extends SharedLeaderboardRegattaTabView<R
if (regattaId != null && !regattaId.isEmpty()) { if (regattaId != null && !regattaId.isEmpty()) {
String leaderboardName = regattaId; String leaderboardName = regattaId;
RegattaAnalyticsDataManager regattaAnalyticsManager = currentPresenter.getCtx().getRegattaAnalyticsManager(); RegattaAnalyticsDataManager regattaAnalyticsManager = currentPresenter.getCtx().getRegattaAnalyticsManager();
LeaderboardPanel leaderboardPanel = regattaAnalyticsManager.getLeaderboardPanel(); MultiRaceLeaderboardPanel leaderboardPanel = regattaAnalyticsManager.getLeaderboardPanel();
final Consumer<LeaderboardPanel> leaderboardConsumer = new Consumer<LeaderboardPanel>() { final Consumer<MultiRaceLeaderboardPanel> leaderboardConsumer = new Consumer<MultiRaceLeaderboardPanel>() {
@Override @Override
public void consume(LeaderboardPanel leaderboardPanel) { public void consume(MultiRaceLeaderboardPanel leaderboardPanel) {
leaderboardUpdateProvider = leaderboardPanel; leaderboardUpdateProvider = leaderboardPanel;
leaderboardUpdateProvider.addLeaderboardUpdateListener(RegattaLeaderboardTabView.this); leaderboardUpdateProvider.addLeaderboardUpdateListener(RegattaLeaderboardTabView.this);
OldLeaderboardDelegateFullscreenViewer leaderboardDelegate = new OldLeaderboardDelegateFullscreenViewer(); OldLeaderboardDelegateFullscreenViewer leaderboardDelegate = new OldLeaderboardDelegateFullscreenViewer();
@@ -123,9 +123,9 @@ public class RegattaLeaderboardTabView extends SharedLeaderboardRegattaTabView<R
} else if( /*FIXME placeToken not empty */ false) { } else if( /*FIXME placeToken not empty */ false) {
createLeaderboardComponentContext(leaderboardName, currentPresenter.getUserService(), createLeaderboardComponentContext(leaderboardName, currentPresenter.getUserService(),
/* FIXME placeToken */ null) /* FIXME placeToken */ null)
.getInitialSettings(new DefaultOnSettingsLoadedCallback<LeaderboardSettings>() { .getInitialSettings(new DefaultOnSettingsLoadedCallback<MultiRaceLeaderboardSettings>() {
@Override @Override
public void onSuccess(LeaderboardSettings settings) { public void onSuccess(MultiRaceLeaderboardSettings settings) {
leaderboardPanel.updateSettings(settings); leaderboardPanel.updateSettings(settings);
leaderboardConsumer.consume(leaderboardPanel); leaderboardConsumer.consume(leaderboardPanel);
} }
@@ -5,11 +5,9 @@ import java.util.Iterator;
import java.util.List; import java.util.List;
import com.sap.sailing.domain.common.DetailType; import com.sap.sailing.domain.common.DetailType;
import com.sap.sailing.domain.common.RaceIdentifier;
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
import com.sap.sailing.domain.common.dto.CompetitorDTO; import com.sap.sailing.domain.common.dto.CompetitorDTO;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettings;
import com.sap.sailing.gwt.settings.client.leaderboard.MultiCompetitorLeaderboardChartSettings; import com.sap.sailing.gwt.settings.client.leaderboard.MultiCompetitorLeaderboardChartSettings;
import com.sap.sailing.gwt.settings.client.leaderboard.MultiRaceLeaderboardSettings;
import com.sap.sailing.gwt.ui.client.CompetitorSelectionChangeListener; import com.sap.sailing.gwt.ui.client.CompetitorSelectionChangeListener;
import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel; import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel;
import com.sap.sailing.gwt.ui.client.DebugIdHelper; import com.sap.sailing.gwt.ui.client.DebugIdHelper;
@@ -17,8 +15,8 @@ import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.client.shared.charts.MultiCompetitorLeaderboardChart; import com.sap.sailing.gwt.ui.client.shared.charts.MultiCompetitorLeaderboardChart;
import com.sap.sailing.gwt.ui.leaderboard.ClassicLeaderboardStyle; import com.sap.sailing.gwt.ui.leaderboard.ClassicLeaderboardStyle;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel;
import com.sap.sailing.gwt.ui.leaderboard.MultiLeaderboardProxyPanel; import com.sap.sailing.gwt.ui.leaderboard.MultiLeaderboardProxyPanel;
import com.sap.sailing.gwt.ui.leaderboard.MultiRaceLeaderboardPanel;
import com.sap.sse.common.Util; import com.sap.sse.common.Util;
import com.sap.sse.common.settings.Settings; import com.sap.sse.common.settings.Settings;
import com.sap.sse.gwt.client.ErrorReporter; import com.sap.sse.gwt.client.ErrorReporter;
@@ -36,7 +34,7 @@ import com.sap.sse.gwt.client.shared.settings.ComponentContext;
* @author Axel Uhl (d043530) * @author Axel Uhl (d043530)
*/ */
public class EventSeriesAnalyticsDataManager { public class EventSeriesAnalyticsDataManager {
private LeaderboardPanel overallLeaderboardPanel; private MultiRaceLeaderboardPanel overallLeaderboardPanel;
private MultiCompetitorLeaderboardChart multiCompetitorChart; private MultiCompetitorLeaderboardChart multiCompetitorChart;
private MultiLeaderboardProxyPanel multiLeaderboardPanel; private MultiLeaderboardProxyPanel multiLeaderboardPanel;
@@ -58,13 +56,13 @@ public class EventSeriesAnalyticsDataManager {
this.multiCompetitorChart = null; this.multiCompetitorChart = null;
} }
public LeaderboardPanel createOverallLeaderboardPanel(Component<?> parent, ComponentContext<?> context, public MultiRaceLeaderboardPanel createMultiRaceOverallLeaderboardPanel(Component<?> parent, ComponentContext<?> context,
final LeaderboardSettings leaderboardSettings, final RegattaAndRaceIdentifier preselectedRace, final MultiRaceLeaderboardSettings leaderboardSettings,
final String leaderboardGroupName, String leaderboardName, boolean showRaceDetails, final String leaderboardGroupName, String leaderboardName, boolean showRaceDetails,
boolean autoExpandLastRaceColumn) { boolean autoExpandLastRaceColumn) {
if(overallLeaderboardPanel == null) { if(overallLeaderboardPanel == null) {
overallLeaderboardPanel = new LeaderboardPanel(parent, context, sailingService, asyncActionsExecutor, overallLeaderboardPanel = new MultiRaceLeaderboardPanel(parent, context, sailingService, asyncActionsExecutor,
leaderboardSettings, true, preselectedRace, leaderboardSettings, true,
competitorSelectionProvider, timer, leaderboardGroupName, leaderboardName, errorReporter, competitorSelectionProvider, timer, leaderboardGroupName, leaderboardName, errorReporter,
StringMessages.INSTANCE, showRaceDetails, /* competitorSearchTextBox */ null, StringMessages.INSTANCE, showRaceDetails, /* competitorSearchTextBox */ null,
/* showSelectionCheckbox */ true, /* showSelectionCheckbox */ true,
@@ -88,13 +86,13 @@ public class EventSeriesAnalyticsDataManager {
} }
public MultiLeaderboardProxyPanel createMultiLeaderboardPanel(Component<?> parent, ComponentContext<?> context, public MultiLeaderboardProxyPanel createMultiLeaderboardPanel(Component<?> parent, ComponentContext<?> context,
LeaderboardSettings leaderboardSettings, MultiRaceLeaderboardSettings leaderboardSettings,
String preselectedLeaderboardName, RaceIdentifier preselectedRace, String leaderboardGroupName, String preselectedLeaderboardName, String leaderboardGroupName,
String metaLeaderboardName, boolean showRaceDetails, boolean autoExpandLastRaceColumn) { String metaLeaderboardName, boolean showRaceDetails, boolean autoExpandLastRaceColumn) {
if(multiLeaderboardPanel == null) { if(multiLeaderboardPanel == null) {
multiLeaderboardPanel = new MultiLeaderboardProxyPanel(parent, context, sailingService, metaLeaderboardName, multiLeaderboardPanel = new MultiLeaderboardProxyPanel(parent, context, sailingService, metaLeaderboardName,
asyncActionsExecutor, timer, true /* isEmbedded */, asyncActionsExecutor, timer, true /* isEmbedded */,
preselectedLeaderboardName, preselectedRace, errorReporter, StringMessages.INSTANCE, preselectedLeaderboardName, errorReporter, StringMessages.INSTANCE,
showRaceDetails, autoExpandLastRaceColumn, leaderboardSettings); showRaceDetails, autoExpandLastRaceColumn, leaderboardSettings);
} }
return multiLeaderboardPanel; return multiLeaderboardPanel;
@@ -104,7 +102,7 @@ public class EventSeriesAnalyticsDataManager {
return multiLeaderboardPanel; return multiLeaderboardPanel;
} }
public LeaderboardPanel getLeaderboardPanel() { public MultiRaceLeaderboardPanel getLeaderboardPanel() {
return overallLeaderboardPanel; return overallLeaderboardPanel;
} }
@@ -4,13 +4,13 @@ import com.google.gwt.event.logical.shared.AttachEvent;
import com.google.gwt.event.logical.shared.AttachEvent.Handler; import com.google.gwt.event.logical.shared.AttachEvent.Handler;
import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.Composite;
import com.sap.sailing.gwt.home.desktop.places.Consumer; import com.sap.sailing.gwt.home.desktop.places.Consumer;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardPanelLifecycle;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettings;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardUrlSettings; import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardUrlSettings;
import com.sap.sailing.gwt.settings.client.leaderboard.MultiRaceLeaderboardPanelLifecycle;
import com.sap.sailing.gwt.settings.client.leaderboard.MultiRaceLeaderboardSettings;
import com.sap.sailing.gwt.settings.client.utils.StoredSettingsLocationFactory; import com.sap.sailing.gwt.settings.client.utils.StoredSettingsLocationFactory;
import com.sap.sailing.gwt.ui.client.LeaderboardUpdateListener; import com.sap.sailing.gwt.ui.client.LeaderboardUpdateListener;
import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel; import com.sap.sailing.gwt.ui.leaderboard.MultiRaceLeaderboardPanel;
import com.sap.sse.gwt.client.shared.settings.ComponentContext; import com.sap.sse.gwt.client.shared.settings.ComponentContext;
import com.sap.sse.gwt.client.shared.settings.DefaultOnSettingsLoadedCallback; import com.sap.sse.gwt.client.shared.settings.DefaultOnSettingsLoadedCallback;
import com.sap.sse.gwt.shared.GwtHttpRequestUtils; import com.sap.sse.gwt.shared.GwtHttpRequestUtils;
@@ -29,19 +29,19 @@ public abstract class SharedLeaderboardEventSeriesTabView<T extends AbstractSeri
protected void createSharedLeaderboardPanel(String leaderboardName, protected void createSharedLeaderboardPanel(String leaderboardName,
EventSeriesAnalyticsDataManager eventSeriesAnalyticsManager, UserService userService, EventSeriesAnalyticsDataManager eventSeriesAnalyticsManager, UserService userService,
String placeToken, final Consumer<LeaderboardPanel> consumer) { String placeToken, final Consumer<MultiRaceLeaderboardPanel> consumer) {
// FIXME remove // FIXME remove
boolean autoExpandLastRaceColumn = GwtHttpRequestUtils boolean autoExpandLastRaceColumn = GwtHttpRequestUtils
.getBooleanParameter(LeaderboardUrlSettings.PARAM_AUTO_EXPAND_LAST_RACE_COLUMN, false); .getBooleanParameter(LeaderboardUrlSettings.PARAM_AUTO_EXPAND_LAST_RACE_COLUMN, false);
final ComponentContext<LeaderboardSettings> componentContext = createLeaderboardComponentContext(leaderboardName, userService, final ComponentContext<MultiRaceLeaderboardSettings> componentContext = createLeaderboardComponentContext(leaderboardName, userService,
placeToken); placeToken);
componentContext.getInitialSettings(new DefaultOnSettingsLoadedCallback<LeaderboardSettings>() { componentContext.getInitialSettings(new DefaultOnSettingsLoadedCallback<MultiRaceLeaderboardSettings>() {
@Override @Override
public void onSuccess(LeaderboardSettings leaderboardSettings) { public void onSuccess(MultiRaceLeaderboardSettings leaderboardSettings) {
LeaderboardPanel leaderboardPanel = eventSeriesAnalyticsManager.createOverallLeaderboardPanel(null, MultiRaceLeaderboardPanel leaderboardPanel = eventSeriesAnalyticsManager.createMultiRaceOverallLeaderboardPanel(null,
componentContext, leaderboardSettings, null, "leaderboardGroupName", componentContext, leaderboardSettings, "leaderboardGroupName",
leaderboardName, true, // this information came from place, now hard coded. check with frank leaderboardName, true, // this information came from place, now hard coded. check with frank
autoExpandLastRaceColumn); autoExpandLastRaceColumn);
leaderboardPanel.addAttachHandler(new Handler() { leaderboardPanel.addAttachHandler(new Handler() {
@@ -60,12 +60,12 @@ public abstract class SharedLeaderboardEventSeriesTabView<T extends AbstractSeri
}); });
} }
protected ComponentContext<LeaderboardSettings> createLeaderboardComponentContext(String leaderboardName, UserService userService, protected ComponentContext<MultiRaceLeaderboardSettings> createLeaderboardComponentContext(String leaderboardName, UserService userService,
String placeToken) { String placeToken) {
final LeaderboardPanelLifecycle lifecycle = new LeaderboardPanelLifecycle(null, StringMessages.INSTANCE); final MultiRaceLeaderboardPanelLifecycle lifecycle = new MultiRaceLeaderboardPanelLifecycle(null, StringMessages.INSTANCE);
final StoredSettingsLocation storageDefinition = StoredSettingsLocationFactory.createStoredSettingsLocatorForSeriesOverallLeaderboard(leaderboardName); final StoredSettingsLocation storageDefinition = StoredSettingsLocationFactory.createStoredSettingsLocatorForSeriesOverallLeaderboard(leaderboardName);
final ComponentContext<LeaderboardSettings> componentContext = new PlaceBasedComponentContextWithSettingsStorage<>( final ComponentContext<MultiRaceLeaderboardSettings> componentContext = new PlaceBasedComponentContextWithSettingsStorage<>(
lifecycle, userService, storageDefinition, placeToken); lifecycle, userService, storageDefinition, placeToken);
return componentContext; return componentContext;
} }
@@ -25,7 +25,7 @@ import com.sap.sailing.gwt.home.desktop.places.fakeseries.SharedLeaderboardEvent
import com.sap.sailing.gwt.home.shared.ExperimentalFeatures; import com.sap.sailing.gwt.home.shared.ExperimentalFeatures;
import com.sap.sailing.gwt.ui.client.CompetitorSelectionChangeListener; import com.sap.sailing.gwt.ui.client.CompetitorSelectionChangeListener;
import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel; import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel; import com.sap.sailing.gwt.ui.leaderboard.MultiRaceLeaderboardPanel;
import com.sap.sse.common.Util; import com.sap.sse.common.Util;
/** /**
@@ -78,9 +78,9 @@ public class EventSeriesCompetitorAnalyticsTabView extends SharedLeaderboardEven
} }
}; };
if(eventSeriesAnalyticsManager.getLeaderboardPanel() == null) { if(eventSeriesAnalyticsManager.getLeaderboardPanel() == null) {
createSharedLeaderboardPanel(leaderboardName, eventSeriesAnalyticsManager, currentPresenter.getUserService(), null, new Consumer<LeaderboardPanel>() { createSharedLeaderboardPanel(leaderboardName, eventSeriesAnalyticsManager, currentPresenter.getUserService(), null, new Consumer<MultiRaceLeaderboardPanel>() {
@Override @Override
public void consume(LeaderboardPanel object) { public void consume(MultiRaceLeaderboardPanel object) {
callback.run(); callback.run();
} }
}); });
@@ -19,9 +19,9 @@ import com.sap.sailing.gwt.home.desktop.partials.old.multileaderboard.OldMultiLe
import com.sap.sailing.gwt.home.desktop.places.fakeseries.EventSeriesAnalyticsDataManager; import com.sap.sailing.gwt.home.desktop.places.fakeseries.EventSeriesAnalyticsDataManager;
import com.sap.sailing.gwt.home.desktop.places.fakeseries.SeriesTabView; import com.sap.sailing.gwt.home.desktop.places.fakeseries.SeriesTabView;
import com.sap.sailing.gwt.home.desktop.places.fakeseries.SeriesView; import com.sap.sailing.gwt.home.desktop.places.fakeseries.SeriesView;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettings;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardUrlSettings; import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardUrlSettings;
import com.sap.sailing.gwt.settings.client.leaderboard.MultiLeaderboardPanelLifecycle; import com.sap.sailing.gwt.settings.client.leaderboard.MultiRaceLeaderboardSettings;
import com.sap.sailing.gwt.settings.client.leaderboard.MultipleMultiLeaderboardPanelLifecycle;
import com.sap.sailing.gwt.settings.client.utils.StoredSettingsLocationFactory; import com.sap.sailing.gwt.settings.client.utils.StoredSettingsLocationFactory;
import com.sap.sailing.gwt.ui.client.LeaderboardUpdateListener; import com.sap.sailing.gwt.ui.client.LeaderboardUpdateListener;
import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sailing.gwt.ui.client.StringMessages;
@@ -74,14 +74,14 @@ public class EventSeriesLeaderboardsTabView extends Composite implements SeriesT
final EventSeriesAnalyticsDataManager regattaAnalyticsManager = currentPresenter.getCtx().getAnalyticsManager(); final EventSeriesAnalyticsDataManager regattaAnalyticsManager = currentPresenter.getCtx().getAnalyticsManager();
final boolean autoExpandLastRaceColumn = GwtHttpRequestUtils.getBooleanParameter(LeaderboardUrlSettings.PARAM_AUTO_EXPAND_LAST_RACE_COLUMN, false); final boolean autoExpandLastRaceColumn = GwtHttpRequestUtils.getBooleanParameter(LeaderboardUrlSettings.PARAM_AUTO_EXPAND_LAST_RACE_COLUMN, false);
final ComponentContext<LeaderboardSettings> componentContext = createLeaderboardComponentContext(leaderboardName, currentPresenter.getUserService(), /*FIXME placeToken */ null); final ComponentContext<MultiRaceLeaderboardSettings> componentContext = createLeaderboardComponentContext(leaderboardName, currentPresenter.getUserService(), /*FIXME placeToken */ null);
componentContext.getInitialSettings(new DefaultOnSettingsLoadedCallback<LeaderboardSettings>() { componentContext.getInitialSettings(new DefaultOnSettingsLoadedCallback<MultiRaceLeaderboardSettings>() {
@Override @Override
public void onSuccess(LeaderboardSettings settings) { public void onSuccess(MultiRaceLeaderboardSettings settings) {
MultiLeaderboardProxyPanel leaderboardPanel = regattaAnalyticsManager.createMultiLeaderboardPanel(null, componentContext, MultiLeaderboardProxyPanel leaderboardPanel = regattaAnalyticsManager.createMultiLeaderboardPanel(null, componentContext,
settings, settings,
null, // TODO: preselectedLeaderboardName null, // TODO: preselectedLeaderboardName
null,
"leaderboardGroupName", "leaderboardGroupName",
leaderboardName, leaderboardName,
true, // TODO @FM this information came from place, now hard coded. check with frank true, // TODO @FM this information came from place, now hard coded. check with frank
@@ -124,12 +124,12 @@ public class EventSeriesLeaderboardsTabView extends Composite implements SeriesT
} }
} }
private ComponentContext<LeaderboardSettings> createLeaderboardComponentContext(String leaderboardName, UserService userService, private ComponentContext<MultiRaceLeaderboardSettings> createLeaderboardComponentContext(String leaderboardName, UserService userService,
String placeToken) { String placeToken) {
final MultiLeaderboardPanelLifecycle lifecycle = new MultiLeaderboardPanelLifecycle(null, StringMessages.INSTANCE); final MultipleMultiLeaderboardPanelLifecycle lifecycle = new MultipleMultiLeaderboardPanelLifecycle(null, StringMessages.INSTANCE);
final StoredSettingsLocation storageDefinition = StoredSettingsLocationFactory.createStoredSettingsLocatorForSeriesRegattaLeaderboards(leaderboardName); final StoredSettingsLocation storageDefinition = StoredSettingsLocationFactory.createStoredSettingsLocatorForSeriesRegattaLeaderboards(leaderboardName);
final ComponentContext<LeaderboardSettings> componentContext = new PlaceBasedComponentContextWithSettingsStorage<>( final ComponentContext<MultiRaceLeaderboardSettings> componentContext = new PlaceBasedComponentContextWithSettingsStorage<>(
lifecycle, userService, storageDefinition, placeToken); lifecycle, userService, storageDefinition, placeToken);
return componentContext; return componentContext;
} }
@@ -16,8 +16,8 @@ import com.sap.sailing.gwt.home.desktop.places.Consumer;
import com.sap.sailing.gwt.home.desktop.places.fakeseries.EventSeriesAnalyticsDataManager; import com.sap.sailing.gwt.home.desktop.places.fakeseries.EventSeriesAnalyticsDataManager;
import com.sap.sailing.gwt.home.desktop.places.fakeseries.SeriesView; import com.sap.sailing.gwt.home.desktop.places.fakeseries.SeriesView;
import com.sap.sailing.gwt.home.desktop.places.fakeseries.SharedLeaderboardEventSeriesTabView; import com.sap.sailing.gwt.home.desktop.places.fakeseries.SharedLeaderboardEventSeriesTabView;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettings; import com.sap.sailing.gwt.settings.client.leaderboard.MultiRaceLeaderboardSettings;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel; import com.sap.sailing.gwt.ui.leaderboard.MultiRaceLeaderboardPanel;
import com.sap.sse.gwt.client.shared.settings.DefaultOnSettingsLoadedCallback; import com.sap.sse.gwt.client.shared.settings.DefaultOnSettingsLoadedCallback;
/** /**
@@ -62,9 +62,9 @@ public class EventSeriesOverallLeaderboardTabView extends SharedLeaderboardEvent
String leaderboardName = currentPresenter.getSeriesDTO().getLeaderboardId(); String leaderboardName = currentPresenter.getSeriesDTO().getLeaderboardId();
if (leaderboardName != null && !leaderboardName.isEmpty()) { if (leaderboardName != null && !leaderboardName.isEmpty()) {
EventSeriesAnalyticsDataManager eventSeriesAnalyticsManager = currentPresenter.getCtx().getAnalyticsManager(); EventSeriesAnalyticsDataManager eventSeriesAnalyticsManager = currentPresenter.getCtx().getAnalyticsManager();
final Consumer<LeaderboardPanel> leaderboardConsumer = new Consumer<LeaderboardPanel>() { final Consumer<MultiRaceLeaderboardPanel> leaderboardConsumer = new Consumer<MultiRaceLeaderboardPanel>() {
@Override @Override
public void consume(LeaderboardPanel leaderboardPanel) { public void consume(MultiRaceLeaderboardPanel leaderboardPanel) {
initWidget(ourUiBinder.createAndBindUi(EventSeriesOverallLeaderboardTabView.this)); initWidget(ourUiBinder.createAndBindUi(EventSeriesOverallLeaderboardTabView.this));
leaderboard.setLeaderboard(leaderboardPanel, currentPresenter.getAutoRefreshTimer()); leaderboard.setLeaderboard(leaderboardPanel, currentPresenter.getAutoRefreshTimer());
eventSeriesAnalyticsManager.hideCompetitorChart(); eventSeriesAnalyticsManager.hideCompetitorChart();
@@ -74,13 +74,13 @@ public class EventSeriesOverallLeaderboardTabView extends SharedLeaderboardEvent
} }
} }
}; };
LeaderboardPanel leaderboardPanel = eventSeriesAnalyticsManager.getLeaderboardPanel(); MultiRaceLeaderboardPanel leaderboardPanel = eventSeriesAnalyticsManager.getLeaderboardPanel();
if(leaderboardPanel == null) { if(leaderboardPanel == null) {
createSharedLeaderboardPanel(leaderboardName, eventSeriesAnalyticsManager, currentPresenter.getUserService(), /*FIXME placeToken */ null, leaderboardConsumer); createSharedLeaderboardPanel(leaderboardName, eventSeriesAnalyticsManager, currentPresenter.getUserService(), /*FIXME placeToken */ null, leaderboardConsumer);
} else if( /*FIXME placeToken not empty */ false) { } else if( /*FIXME placeToken not empty */ false) {
createLeaderboardComponentContext(leaderboardName, currentPresenter.getUserService(), /*FIXME placeToken */ null).getInitialSettings(new DefaultOnSettingsLoadedCallback<LeaderboardSettings>() { createLeaderboardComponentContext(leaderboardName, currentPresenter.getUserService(), /*FIXME placeToken */ null).getInitialSettings(new DefaultOnSettingsLoadedCallback<MultiRaceLeaderboardSettings>() {
@Override @Override
public void onSuccess(LeaderboardSettings settings) { public void onSuccess(MultiRaceLeaderboardSettings settings) {
leaderboardPanel.updateSettings(settings); leaderboardPanel.updateSettings(settings);
leaderboardConsumer.consume(leaderboardPanel); leaderboardConsumer.consume(leaderboardPanel);
} }
@@ -16,6 +16,9 @@
you need to select the respective option in the map's settings dialog. The option's visibility you need to select the respective option in the map's settings dialog. The option's visibility
depends on the availability of sufficient polar data for the boat class. depends on the availability of sufficient polar data for the boat class.
</li> </li>
<li>In <code>/gwt/RaceBoard.html</code> it isn't possible anymore to select other races to be shown in the embedded leaderboard.
This possibility caused several problems in the past. The leaderboard will now always stick to the single race for which the raceboard was opened.
</li>
<li>The autoplay sites have been re-implemented from ground up: <li>The autoplay sites have been re-implemented from ground up:
<ul> <ul>
<li>Autoplay now uses the new settings framework</li> <li>Autoplay now uses the new settings framework</li>
@@ -41,6 +44,7 @@
</ul> </ul>
</li> </li>
</ul> </ul>
<h5 class="articleSubheadline">May 2017</h5> <h5 class="articleSubheadline">May 2017</h5>
<ul class="bulletList"> <ul class="bulletList">
<li>It's now possible to show nationality flags in addition to competitor images in leaderboards if both are available. <li>It's now possible to show nationality flags in addition to competitor images in leaderboards if both are available.
@@ -9,7 +9,7 @@ public abstract class AbstractLeaderboardPerspectiveLifecycle extends AbstractPe
protected AbstractLeaderboardPerspectiveLifecycle(StringMessages stringMessages, protected AbstractLeaderboardPerspectiveLifecycle(StringMessages stringMessages,
AbstractLeaderboardDTO leaderboard, boolean isOverall) { AbstractLeaderboardDTO leaderboard, boolean isOverall) {
addLifeCycle(new LeaderboardPanelLifecycle(leaderboard, stringMessages)); addLifeCycle(new MultiRaceLeaderboardPanelLifecycle(leaderboard, stringMessages));
addLifeCycle(new MultiCompetitorLeaderboardChartLifecycle(isOverall)); addLifeCycle(new MultiCompetitorLeaderboardChartLifecycle(isOverall));
} }
@@ -1,34 +1,16 @@
package com.sap.sailing.gwt.settings.client.leaderboard; package com.sap.sailing.gwt.settings.client.leaderboard;
import java.util.ArrayList;
import java.util.List;
import com.sap.sailing.domain.common.dto.AbstractLeaderboardDTO;
import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sse.common.settings.generic.support.SettingsUtil;
import com.sap.sse.gwt.client.shared.components.ComponentLifecycle; import com.sap.sse.gwt.client.shared.components.ComponentLifecycle;
public class LeaderboardPanelLifecycle public abstract class LeaderboardPanelLifecycle<T extends LeaderboardSettings>
implements ComponentLifecycle<LeaderboardSettings> { implements ComponentLifecycle<T> {
public static final String ID = "lb"; public static final String ID = "lb";
protected final StringMessages stringMessages; protected final StringMessages stringMessages;
protected final List<String> namesOfRaceColumns;
public LeaderboardPanelLifecycle(AbstractLeaderboardDTO leaderboard, StringMessages stringMessages) { public LeaderboardPanelLifecycle(StringMessages stringMessages) {
this.stringMessages = stringMessages; this.stringMessages = stringMessages;
this.namesOfRaceColumns = leaderboard != null ? leaderboard.getNamesOfRaceColumns() : new ArrayList<String>();
}
@Override
public LeaderboardSettingsDialogComponent getSettingsDialogComponent(LeaderboardSettings settings) {
return new LeaderboardSettingsDialogComponent(settings, namesOfRaceColumns, stringMessages);
}
@Override
public LeaderboardSettings createDefaultSettings() {
return LeaderboardSettingsFactory.getInstance()
.createNewDefaultSettingsWithRaceColumns(namesOfRaceColumns);
} }
@Override @Override
@@ -45,33 +27,4 @@ public class LeaderboardPanelLifecycle
public boolean hasSettings() { public boolean hasSettings() {
return true; return true;
} }
@Override
public LeaderboardSettings extractUserSettings(LeaderboardSettings currentLeaderboardSettings) {
LeaderboardSettings defaultLeaderboardSettings = createDefaultSettings();
LeaderboardSettings globalLeaderboardSettings = new LeaderboardSettings(
currentLeaderboardSettings.getManeuverDetailsToShow(), currentLeaderboardSettings.getLegDetailsToShow(),
currentLeaderboardSettings.getRaceDetailsToShow(), currentLeaderboardSettings.getOverallDetailsToShow(),
defaultLeaderboardSettings.getNamesOfRaceColumnsToShow(),
defaultLeaderboardSettings.getNamesOfRacesToShow(),
currentLeaderboardSettings.getNumberOfLastRacesToShow(),
defaultLeaderboardSettings.isAutoExpandPreSelectedRace(),
currentLeaderboardSettings.getDelayBetweenAutoAdvancesInMilliseconds(),
defaultLeaderboardSettings.getNameOfRaceToSort(), defaultLeaderboardSettings.isSortAscending(),
currentLeaderboardSettings.isUpdateUponPlayStateChange(),
currentLeaderboardSettings.getActiveRaceColumnSelectionStrategy(),
currentLeaderboardSettings.isShowAddedScores(),
currentLeaderboardSettings.isShowOverallColumnWithNumberOfRacesCompletedPerCompetitor(),
currentLeaderboardSettings.isShowCompetitorSailIdColumn(),
currentLeaderboardSettings.isShowCompetitorFullNameColumn(),
defaultLeaderboardSettings.isShowRaceRankColumn(),
currentLeaderboardSettings.isShowCompetitorNationality());
return SettingsUtil.copyValues(globalLeaderboardSettings, defaultLeaderboardSettings);
}
@Override
public LeaderboardSettings extractDocumentSettings(LeaderboardSettings leaderboardSettings) {
return leaderboardSettings;
}
} }
@@ -11,12 +11,7 @@ import com.sap.sse.common.Util;
import com.sap.sse.common.settings.generic.AbstractGenericSerializableSettings; import com.sap.sse.common.settings.generic.AbstractGenericSerializableSettings;
import com.sap.sse.common.settings.generic.BooleanSetting; import com.sap.sse.common.settings.generic.BooleanSetting;
import com.sap.sse.common.settings.generic.EnumSetSetting; import com.sap.sse.common.settings.generic.EnumSetSetting;
import com.sap.sse.common.settings.generic.EnumSetting;
import com.sap.sse.common.settings.generic.IntegerSetting;
import com.sap.sse.common.settings.generic.LongSetting; import com.sap.sse.common.settings.generic.LongSetting;
import com.sap.sse.common.settings.generic.StringSetSetting;
import com.sap.sse.common.settings.generic.StringSetting;
import com.sap.sse.common.settings.util.SettingsDefaultValuesUtils;
/** /**
* Settings for the {@link LeaderboardPanel} component. If you change here, please also visit * Settings for the {@link LeaderboardPanel} component. If you change here, please also visit
@@ -26,70 +21,31 @@ import com.sap.sse.common.settings.util.SettingsDefaultValuesUtils;
* @author Axel Uhl (d043530) * @author Axel Uhl (d043530)
* *
*/ */
public class LeaderboardSettings extends AbstractGenericSerializableSettings { public abstract class LeaderboardSettings extends AbstractGenericSerializableSettings {
private static final long serialVersionUID = 2625004077963291333L; private static final long serialVersionUID = 2625004077963291333L;
/** protected EnumSetSetting<DetailType> maneuverDetailsToShow;
* Only one of {@link #namesOfRaceColumnsToShow} and {@link #namesOfRacesToShow} must be non-<code>null</code>. protected EnumSetSetting<DetailType> legDetailsToShow;
* Only valid when the {@link #activeRaceColumnSelectionStrategy} is set to EXPLIZIT protected EnumSetSetting<DetailType> raceDetailsToShow;
*/ protected EnumSetSetting<DetailType> overallDetailsToShow;
private StringSetSetting namesOfRaceColumnsToShow; protected LongSetting delayBetweenAutoAdvancesInMilliseconds;
protected BooleanSetting isShowCompetitorNationality;
/**
* Only one of {@link #namesOfRaceColumnsToShow} and {@link #namesOfRacesToShow} must be non-<code>null</code>.
* Only valid when the {@link #activeRaceColumnSelectionStrategy} is set to EXPLIZIT
*/
private StringSetSetting namesOfRacesToShow;
/**
* Only valid when the {@link #activeRaceColumnSelectionStrategy} is set to LAST_N
*/
private IntegerSetting numberOfLastRacesToShow;
private EnumSetSetting<DetailType> maneuverDetailsToShow;
private EnumSetSetting<DetailType> legDetailsToShow;
private EnumSetSetting<DetailType> raceDetailsToShow;
private EnumSetSetting<DetailType> overallDetailsToShow;
private boolean autoExpandPreSelectedRace = false;
private LongSetting delayBetweenAutoAdvancesInMilliseconds;
private BooleanSetting updateUponPlayStateChange;
private BooleanSetting isShowCompetitorNationality;
/**
* There are two ways to select race columns.
* Either you select races from the list of all races or you select the last N races.
*/
public static enum RaceColumnSelectionStrategies { EXPLICIT, LAST_N; }
private EnumSetting<RaceColumnSelectionStrategies> activeRaceColumnSelectionStrategy;
/**
* An optional sort column; if <code>null</code>, the leaderboard sorting won't be touched when updating the settings.
* Otherwise, the leaderboard will be sorted by the race column (ascending if {@link #sortAscending}, descending otherwise.
*/
private StringSetting nameOfRaceToSort;
private BooleanSetting sortAscending;
/** /**
* Shows scores sum'd up for each race column * Shows scores sum'd up for each race column
*/ */
private BooleanSetting showAddedScores; protected BooleanSetting showAddedScores;
private BooleanSetting showCompetitorSailIdColumn; protected BooleanSetting showCompetitorSailIdColumn;
private BooleanSetting showCompetitorFullNameColumn; protected BooleanSetting showCompetitorFullNameColumn;
private BooleanSetting showRaceRankColumn;
/** /**
* Show a column with total number of races completed * Show a column with total number of races completed
*/ */
private BooleanSetting showOverallColumnWithNumberOfRacesCompletedPerCompetitor; protected BooleanSetting showOverallColumnWithNumberOfRacesCompletedPerCompetitor;
@Override @Override
protected void addChildSettings() { protected void addChildSettings() {
isShowCompetitorNationality = new BooleanSetting("showCompetitorNationality", this, false); isShowCompetitorNationality = new BooleanSetting("showCompetitorNationality", this, false);
namesOfRaceColumnsToShow = new StringSetSetting("namesOfRaceColumnsToShow", this);
namesOfRacesToShow = new StringSetSetting("namesOfRacesToShow", this, null);
numberOfLastRacesToShow = new IntegerSetting("numberOfLastRacesToShow", this, null);
List<DetailType> maneuverDetails = new ArrayList<DetailType>(); List<DetailType> maneuverDetails = new ArrayList<DetailType>();
maneuverDetails.add(DetailType.TACK); maneuverDetails.add(DetailType.TACK);
maneuverDetails.add(DetailType.JIBE); maneuverDetails.add(DetailType.JIBE);
@@ -107,57 +63,33 @@ public class LeaderboardSettings extends AbstractGenericSerializableSettings {
overallDetails.add(DetailType.REGATTA_RANK); overallDetails.add(DetailType.REGATTA_RANK);
overallDetailsToShow = new EnumSetSetting<>("overallDetailsToShow", this, overallDetails, DetailType::valueOf); overallDetailsToShow = new EnumSetSetting<>("overallDetailsToShow", this, overallDetails, DetailType::valueOf);
delayBetweenAutoAdvancesInMilliseconds = new LongSetting("delayBetweenAutoAdvancesInMilliseconds", this, LeaderboardEntryPoint.DEFAULT_REFRESH_INTERVAL_MILLIS); delayBetweenAutoAdvancesInMilliseconds = new LongSetting("delayBetweenAutoAdvancesInMilliseconds", this, LeaderboardEntryPoint.DEFAULT_REFRESH_INTERVAL_MILLIS);
activeRaceColumnSelectionStrategy = new EnumSetting<>("activeRaceColumnSelectionStrategy", this, RaceColumnSelectionStrategies.EXPLICIT, RaceColumnSelectionStrategies::valueOf);
nameOfRaceToSort = new StringSetting("nameOfRaceToSort", this, null);
updateUponPlayStateChange = new BooleanSetting("updateUponPlayStateChange", this, true);
sortAscending = new BooleanSetting("sortAscending", this, true);
showAddedScores = new BooleanSetting("showAddedScores", this, false); showAddedScores = new BooleanSetting("showAddedScores", this, false);
showCompetitorSailIdColumn = new BooleanSetting("showCompetitorSailIdColumn", this, true); showCompetitorSailIdColumn = new BooleanSetting("showCompetitorSailIdColumn", this, true);
showCompetitorFullNameColumn = new BooleanSetting("showCompetitorFullNameColumn", this, true); showCompetitorFullNameColumn = new BooleanSetting("showCompetitorFullNameColumn", this, true);
showRaceRankColumn = new BooleanSetting("racerank", this, false);
showOverallColumnWithNumberOfRacesCompletedPerCompetitor = new BooleanSetting("showOverallColumnWithNumberOfRacesCompletedPerCompetitor", this, false); showOverallColumnWithNumberOfRacesCompletedPerCompetitor = new BooleanSetting("showOverallColumnWithNumberOfRacesCompletedPerCompetitor", this, false);
} }
public LeaderboardSettings() { public LeaderboardSettings() {
} }
public LeaderboardSettings(Iterable<String> namesOfRaceColumnsToShow) {
this.namesOfRaceColumnsToShow.setValues(namesOfRaceColumnsToShow);
}
/** /**
* @param raceColumnsToShow <code>null</code> means don't modify the list of races shown * @param raceColumnsToShow <code>null</code> means don't modify the list of races shown
*/ */
public LeaderboardSettings(Collection<DetailType> maneuverDetailsToShow, Collection<DetailType> legDetailsToShow, public LeaderboardSettings(Collection<DetailType> maneuverDetailsToShow, Collection<DetailType> legDetailsToShow,
Collection<DetailType> raceDetailsToShow, Collection<DetailType> overallDetailsToShow, Collection<DetailType> raceDetailsToShow, Collection<DetailType> overallDetailsToShow,
List<String> namesOfRaceColumnsToShow, List<String> namesOfRacesToShow, Integer numberOfLastRacesToShow, Long delayBetweenAutoAdvancesInMilliseconds,
boolean autoExpandPreSelectedRace, Long delayBetweenAutoAdvancesInMilliseconds, String nameOfRaceToSort,
boolean sortAscending, boolean updateUponPlayStateChange, RaceColumnSelectionStrategies activeRaceColumnSelectionStrategy,
boolean showAddedScores, boolean showOverallColumnWithNumberOfRacesCompletedPerCompetitor, boolean showAddedScores, boolean showOverallColumnWithNumberOfRacesCompletedPerCompetitor,
boolean showCompetitorSailIdColumn, boolean showCompetitorFullNameColumn, boolean showCompetitorSailIdColumn, boolean showCompetitorFullNameColumn,
boolean showRaceRankColumn,
boolean isCompetitorNationalityColumnVisible) { boolean isCompetitorNationalityColumnVisible) {
if (namesOfRacesToShow != null && namesOfRaceColumnsToShow != null) {
throw new IllegalArgumentException("You can identify races either only by their race or by their column names, not both");
}
this.legDetailsToShow.setValues(legDetailsToShow); this.legDetailsToShow.setValues(legDetailsToShow);
this.raceDetailsToShow.setValues(raceDetailsToShow); this.raceDetailsToShow.setValues(raceDetailsToShow);
this.overallDetailsToShow.setValues(overallDetailsToShow); this.overallDetailsToShow.setValues(overallDetailsToShow);
this.namesOfRacesToShow.setValues(namesOfRacesToShow);
this.namesOfRaceColumnsToShow.setValues(namesOfRaceColumnsToShow);
this.numberOfLastRacesToShow.setValue(numberOfLastRacesToShow);
this.activeRaceColumnSelectionStrategy.setValue(activeRaceColumnSelectionStrategy);
this.autoExpandPreSelectedRace = autoExpandPreSelectedRace;
this.delayBetweenAutoAdvancesInMilliseconds.setValue(delayBetweenAutoAdvancesInMilliseconds); this.delayBetweenAutoAdvancesInMilliseconds.setValue(delayBetweenAutoAdvancesInMilliseconds);
this.maneuverDetailsToShow.setValues(maneuverDetailsToShow); this.maneuverDetailsToShow.setValues(maneuverDetailsToShow);
this.nameOfRaceToSort.setValue(nameOfRaceToSort);
this.sortAscending.setValue(sortAscending);
this.updateUponPlayStateChange.setValue(updateUponPlayStateChange);
this.showAddedScores.setValue(showAddedScores); this.showAddedScores.setValue(showAddedScores);
this.showCompetitorSailIdColumn.setValue(showCompetitorSailIdColumn); this.showCompetitorSailIdColumn.setValue(showCompetitorSailIdColumn);
this.showCompetitorFullNameColumn.setValue(showCompetitorFullNameColumn); this.showCompetitorFullNameColumn.setValue(showCompetitorFullNameColumn);
this.showOverallColumnWithNumberOfRacesCompletedPerCompetitor.setValue(showOverallColumnWithNumberOfRacesCompletedPerCompetitor); this.showOverallColumnWithNumberOfRacesCompletedPerCompetitor.setValue(showOverallColumnWithNumberOfRacesCompletedPerCompetitor);
this.showRaceRankColumn.setValue(showRaceRankColumn);
this.isShowCompetitorNationality.setValue(isCompetitorNationalityColumnVisible); this.isShowCompetitorNationality.setValue(isCompetitorNationalityColumnVisible);
} }
@@ -190,36 +122,6 @@ public class LeaderboardSettings extends AbstractGenericSerializableSettings {
return Util.createSet(overallDetailsToShow.getValues()); return Util.createSet(overallDetailsToShow.getValues());
} }
/**
* If <code>null</code>, this is to mean that the race columns should not be modified by
* {@link LeaderboardPanel#updateSettings(LeaderboardSettings)}. Otherwise a
* live collection that reflects the current state of the settings of a leaderboard panel
*/
public List<String> getNamesOfRaceColumnsToShow() {
return activeRaceColumnSelectionStrategy.getValue() == RaceColumnSelectionStrategies.EXPLICIT ? (namesOfRaceColumnsToShow.isValuesEmpty() ? null : Util.createList(namesOfRaceColumnsToShow.getValues())) : null;
}
/**
* If <code>null</code>, this is to mean that the race columns should not be modified by
* {@link LeaderboardPanel#updateSettings(LeaderboardSettings)}. Otherwise
* a live collection that reflects the current state of the settings of a leaderboard panel
*/
public List<String> getNamesOfRacesToShow() {
return activeRaceColumnSelectionStrategy.getValue() == RaceColumnSelectionStrategies.EXPLICIT ? (namesOfRacesToShow.isValuesEmpty() ? null : Util.createList(namesOfRacesToShow.getValues())) : null;
}
/**
* If <code>null</code>, this is to mean that the race columns should not be modified by
* {@link LeaderboardPanel#updateSettings(LeaderboardSettings)}.
*/
public Integer getNumberOfLastRacesToShow() {
return activeRaceColumnSelectionStrategy.getValue() == RaceColumnSelectionStrategies.LAST_N ? numberOfLastRacesToShow.getValue() : null;
}
public boolean isAutoExpandPreSelectedRace() {
return autoExpandPreSelectedRace;
}
/** /**
* @return if <code>null</code>, leave refresh interval alone (don't change in * @return if <code>null</code>, leave refresh interval alone (don't change in
* {@link LeaderboardPanel#updateSettings(LeaderboardSettings)} * {@link LeaderboardPanel#updateSettings(LeaderboardSettings)}
@@ -228,26 +130,6 @@ public class LeaderboardSettings extends AbstractGenericSerializableSettings {
return delayBetweenAutoAdvancesInMilliseconds.getValue(); return delayBetweenAutoAdvancesInMilliseconds.getValue();
} }
public String getNameOfRaceToSort() {
return nameOfRaceToSort.getValue();
}
public boolean isSortAscending() {
return sortAscending.getValue();
}
/**
* If <code>true</code>, an update of the settings will behave like a manual settings update, meaning that
* the settings won't automatically be replaced / adjusted when the play state changes.
*/
public boolean isUpdateUponPlayStateChange() {
return updateUponPlayStateChange.getValue();
}
public RaceColumnSelectionStrategies getActiveRaceColumnSelectionStrategy() {
return activeRaceColumnSelectionStrategy.getValue();
}
public boolean isShowAddedScores() { public boolean isShowAddedScores() {
return showAddedScores.getValue(); return showAddedScores.getValue();
} }
@@ -264,42 +146,7 @@ public class LeaderboardSettings extends AbstractGenericSerializableSettings {
return showCompetitorFullNameColumn.getValue(); return showCompetitorFullNameColumn.getValue();
} }
public boolean isShowRaceRankColumn() {
return showRaceRankColumn.getValue();
}
public boolean isShowCompetitorNationality() { public boolean isShowCompetitorNationality() {
return isShowCompetitorNationality.getValue(); return isShowCompetitorNationality.getValue();
} }
public LeaderboardSettings overrideDefaultsForNamesOfRaceColumns(List<String> namesOfRaceColumns) {
LeaderboardSettings newSettings = new LeaderboardSettings();
newSettings.legDetailsToShow.setValues(this.getLegDetailsToShow());
newSettings.raceDetailsToShow.setValues(this.getRaceDetailsToShow());
newSettings.overallDetailsToShow.setValues(this.getOverallDetailsToShow());
newSettings.numberOfLastRacesToShow.setValue(this.getNumberOfLastRacesToShow());
newSettings.activeRaceColumnSelectionStrategy.setValue(this.getActiveRaceColumnSelectionStrategy());
newSettings.autoExpandPreSelectedRace = this.isAutoExpandPreSelectedRace();
newSettings.delayBetweenAutoAdvancesInMilliseconds.setValue(this.getDelayBetweenAutoAdvancesInMilliseconds());
newSettings.maneuverDetailsToShow.setValues(this.getManeuverDetailsToShow());
newSettings.nameOfRaceToSort.setValue(this.getNameOfRaceToSort());
newSettings.sortAscending.setValue(this.isSortAscending());
newSettings.updateUponPlayStateChange.setValue(this.isUpdateUponPlayStateChange());
newSettings.showAddedScores.setValue(this.isShowAddedScores());
newSettings.showCompetitorSailIdColumn.setValue(this.isShowCompetitorSailIdColumn());
newSettings.showCompetitorFullNameColumn.setValue(this.isShowCompetitorFullNameColumn());
newSettings.showOverallColumnWithNumberOfRacesCompletedPerCompetitor.setValue(this.isShowOverallColumnWithNumberOfRacesCompletedPerCompetitor());
newSettings.isShowCompetitorNationality.setValue(this.isShowCompetitorNationality());
if(namesOfRaceColumns != null && !namesOfRaceColumns.isEmpty()) {
newSettings.namesOfRacesToShow.setValues(null);
}
newSettings.namesOfRaceColumnsToShow.setValues(this.getNamesOfRaceColumnsToShow());
SettingsDefaultValuesUtils.keepDefaults(this, newSettings);
if(namesOfRaceColumns != null && !namesOfRaceColumns.isEmpty()) {
newSettings.namesOfRacesToShow.setDefaultValues(null);
}
newSettings.namesOfRaceColumnsToShow.setDefaultValues(namesOfRaceColumns);
return newSettings;
}
} }
@@ -1,27 +1,18 @@
package com.sap.sailing.gwt.settings.client.leaderboard; package com.sap.sailing.gwt.settings.client.leaderboard;
import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import com.google.gwt.dom.client.Style.Float; import com.google.gwt.dom.client.Style.Float;
import com.google.gwt.dom.client.Style.Unit; import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.ui.CheckBox; import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.FocusWidget; import com.google.gwt.user.client.ui.FocusWidget;
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.Label;
import com.google.gwt.user.client.ui.LongBox; import com.google.gwt.user.client.ui.LongBox;
import com.google.gwt.user.client.ui.RadioButton; import com.google.gwt.user.client.ui.RadioButton;
import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.domain.common.DetailType; import com.sap.sailing.domain.common.DetailType;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettings.RaceColumnSelectionStrategies;
import com.sap.sailing.gwt.ui.client.DebugIdHelper; import com.sap.sailing.gwt.ui.client.DebugIdHelper;
import com.sap.sailing.gwt.ui.client.DetailTypeFormatter; import com.sap.sailing.gwt.ui.client.DetailTypeFormatter;
import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sailing.gwt.ui.client.StringMessages;
@@ -29,63 +20,39 @@ import com.sap.sailing.gwt.ui.leaderboard.LeaderboardEntryPoint;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel; import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel;
import com.sap.sailing.gwt.ui.leaderboard.LegColumn; import com.sap.sailing.gwt.ui.leaderboard.LegColumn;
import com.sap.sailing.gwt.ui.leaderboard.ManeuverCountRaceColumn; import com.sap.sailing.gwt.ui.leaderboard.ManeuverCountRaceColumn;
import com.sap.sse.common.Util;
import com.sap.sse.common.settings.util.SettingsDefaultValuesUtils;
import com.sap.sse.gwt.client.controls.IntegerBox; import com.sap.sse.gwt.client.controls.IntegerBox;
import com.sap.sse.gwt.client.dialog.DataEntryDialog; import com.sap.sse.gwt.client.dialog.DataEntryDialog;
import com.sap.sse.gwt.client.dialog.DataEntryDialog.Validator;
import com.sap.sse.gwt.client.shared.components.SettingsDialogComponent; import com.sap.sse.gwt.client.shared.components.SettingsDialogComponent;
public class LeaderboardSettingsDialogComponent implements SettingsDialogComponent<LeaderboardSettings> { public abstract class LeaderboardSettingsDialogComponent<T extends LeaderboardSettings> implements SettingsDialogComponent<T> {
private final Map<String, CheckBox> raceColumnCheckboxes; protected final Map<DetailType, CheckBox> maneuverDetailCheckboxes;
private final List<String> raceAllRaceColumnNames; protected final Map<DetailType, CheckBox> legDetailCheckboxes;
private final Map<DetailType, CheckBox> maneuverDetailCheckboxes; protected final Map<DetailType, CheckBox> raceDetailCheckboxes;
private final Map<DetailType, CheckBox> legDetailCheckboxes; protected final Map<DetailType, CheckBox> overallDetailCheckboxes;
private final Map<DetailType, CheckBox> raceDetailCheckboxes; protected final StringMessages stringMessages;
private final Map<DetailType, CheckBox> overallDetailCheckboxes; protected LongBox refreshIntervalInSecondsBox;
private final StringMessages stringMessages;
private LongBox refreshIntervalInSecondsBox;
private RaceColumnSelectionStrategies activeRaceColumnSelectionStrategy;
private RadioButton explicitRaceColumnSelectionRadioBtn; protected RadioButton explicitRaceColumnSelectionRadioBtn;
private RadioButton lastNRacesColumnSelectionRadioBtn; protected RadioButton lastNRacesColumnSelectionRadioBtn;
private IntegerBox numberOfLastRacesToShowBox; protected IntegerBox numberOfLastRacesToShowBox;
private CheckBox showAddedScoresCheckBox; protected CheckBox showAddedScoresCheckBox;
private CheckBox showOverallColumnWithNumberOfRacesSailedPerCompetitorCheckBox; protected CheckBox showOverallColumnWithNumberOfRacesSailedPerCompetitorCheckBox;
private CheckBox showCompetitorSailIdColumnheckBox; protected CheckBox showCompetitorSailIdColumnheckBox;
private CheckBox showCompetitorFullNameColumnCheckBox; protected CheckBox showCompetitorFullNameColumnCheckBox;
private CheckBox showRaceRankColumnCheckBox; protected CheckBox isCompetitorNationalityColumnVisible;
private CheckBox isCompetitorNationalityColumnVisible; protected T initialSettings;
private LeaderboardSettings initialSettings;
public LeaderboardSettingsDialogComponent(LeaderboardSettings initialSettings, List<String> allRaceColumnNames, StringMessages stringMessages) { public LeaderboardSettingsDialogComponent(T initialSettings, StringMessages stringMessages) {
this.initialSettings = initialSettings; this.initialSettings = initialSettings;
this.stringMessages = stringMessages; this.stringMessages = stringMessages;
this.raceAllRaceColumnNames = allRaceColumnNames;
this.activeRaceColumnSelectionStrategy = initialSettings.getActiveRaceColumnSelectionStrategy();
maneuverDetailCheckboxes = new LinkedHashMap<DetailType, CheckBox>(); maneuverDetailCheckboxes = new LinkedHashMap<DetailType, CheckBox>();
raceColumnCheckboxes = new LinkedHashMap<>();
legDetailCheckboxes = new LinkedHashMap<DetailType, CheckBox>(); legDetailCheckboxes = new LinkedHashMap<DetailType, CheckBox>();
raceDetailCheckboxes = new LinkedHashMap<DetailType, CheckBox>(); raceDetailCheckboxes = new LinkedHashMap<DetailType, CheckBox>();
overallDetailCheckboxes = new LinkedHashMap<DetailType, CheckBox>(); overallDetailCheckboxes = new LinkedHashMap<DetailType, CheckBox>();
} }
@Override protected FlowPanel createManeuverDetailsPanel(DataEntryDialog<?> dialog) {
public Widget getAdditionalWidget(DataEntryDialog<?> dialog) {
FlowPanel dialogPanel = new FlowPanel();
dialogPanel.ensureDebugId("LeaderboardSettingsPanel");
dialogPanel.add(createSelectedRacesPanel(dialog));
dialogPanel.add(createOverallDetailPanel(dialog));
dialogPanel.add(createRaceDetailPanel(dialog));
dialogPanel.add(createRaceStartAnalysisPanel(dialog));
dialogPanel.add(createLegDetailsPanel(dialog));
dialogPanel.add(createManeuverDetailsPanel(dialog));
dialogPanel.add(createTimingDetailsPanel(dialog));
return dialogPanel;
}
private FlowPanel createManeuverDetailsPanel(DataEntryDialog<?> dialog) {
FlowPanel meneuverPanel = new FlowPanel(); FlowPanel meneuverPanel = new FlowPanel();
meneuverPanel.ensureDebugId("ManeuverSettingsPanel"); meneuverPanel.ensureDebugId("ManeuverSettingsPanel");
meneuverPanel.add(dialog.createHeadline(stringMessages.maneuverTypes(), true)); meneuverPanel.add(dialog.createHeadline(stringMessages.maneuverTypes(), true));
@@ -103,7 +70,7 @@ public class LeaderboardSettingsDialogComponent implements SettingsDialogCompone
return meneuverPanel; return meneuverPanel;
} }
private FlowPanel createTimingDetailsPanel(DataEntryDialog<?> dialog) { protected FlowPanel createTimingDetailsPanel(DataEntryDialog<?> dialog) {
FlowPanel timingPanel = new FlowPanel(); FlowPanel timingPanel = new FlowPanel();
timingPanel.ensureDebugId("TimingSettingsPanel"); timingPanel.ensureDebugId("TimingSettingsPanel");
refreshIntervalInSecondsBox = dialog.createLongBox( refreshIntervalInSecondsBox = dialog.createLongBox(
@@ -128,7 +95,7 @@ public class LeaderboardSettingsDialogComponent implements SettingsDialogCompone
return timingPanel; return timingPanel;
} }
private FlowPanel createRaceDetailPanel(DataEntryDialog<?> dialog) { protected FlowPanel createRaceDetailPanel(DataEntryDialog<?> dialog) {
FlowPanel raceDetailDialog = new FlowPanel(); FlowPanel raceDetailDialog = new FlowPanel();
raceDetailDialog.ensureDebugId("RaceDetailsSettingsPanel"); raceDetailDialog.ensureDebugId("RaceDetailsSettingsPanel");
raceDetailDialog.add(dialog.createHeadline(stringMessages.raceDetailsToShow(), true)); raceDetailDialog.add(dialog.createHeadline(stringMessages.raceDetailsToShow(), true));
@@ -154,15 +121,11 @@ public class LeaderboardSettingsDialogComponent implements SettingsDialogCompone
dialog.addTooltip(showAddedScoresCheckBox, stringMessages.showAddedScores()); dialog.addTooltip(showAddedScoresCheckBox, stringMessages.showAddedScores());
showAddedScoresCheckBox.setValue(initialSettings.isShowAddedScores()); showAddedScoresCheckBox.setValue(initialSettings.isShowAddedScores());
addedScoresFlowPanel.add(showAddedScoresCheckBox); addedScoresFlowPanel.add(showAddedScoresCheckBox);
showRaceRankColumnCheckBox = dialog.createCheckbox(stringMessages.showRaceRankColumn());
showRaceRankColumnCheckBox.setValue(initialSettings.isShowRaceRankColumn());
addedScoresFlowPanel.add(showRaceRankColumnCheckBox);
raceDetailDialog.add(addedScoresFlowPanel); raceDetailDialog.add(addedScoresFlowPanel);
return raceDetailDialog; return raceDetailDialog;
} }
private FlowPanel createRaceStartAnalysisPanel(DataEntryDialog<?> dialog) { protected FlowPanel createRaceStartAnalysisPanel(DataEntryDialog<?> dialog) {
FlowPanel raceStartAnalysisDialog = new FlowPanel(); FlowPanel raceStartAnalysisDialog = new FlowPanel();
raceStartAnalysisDialog.ensureDebugId("RaceStartAnalysisDialog"); raceStartAnalysisDialog.ensureDebugId("RaceStartAnalysisDialog");
raceStartAnalysisDialog.add(dialog.createHeadline(stringMessages.raceStartAnalysis(), true)); raceStartAnalysisDialog.add(dialog.createHeadline(stringMessages.raceStartAnalysis(), true));
@@ -184,7 +147,7 @@ public class LeaderboardSettingsDialogComponent implements SettingsDialogCompone
return raceStartAnalysisDialog; return raceStartAnalysisDialog;
} }
private FlowPanel createOverallDetailPanel(DataEntryDialog<?> dialog) { protected FlowPanel createOverallDetailPanel(DataEntryDialog<?> dialog) {
FlowPanel overallDetailDialog = new FlowPanel(); FlowPanel overallDetailDialog = new FlowPanel();
overallDetailDialog.ensureDebugId("OverallDetailsSettingsPanel"); overallDetailDialog.ensureDebugId("OverallDetailsSettingsPanel");
overallDetailDialog.add(dialog.createHeadline(stringMessages.overallDetailsToShow(), true)); overallDetailDialog.add(dialog.createHeadline(stringMessages.overallDetailsToShow(), true));
@@ -221,7 +184,7 @@ public class LeaderboardSettingsDialogComponent implements SettingsDialogCompone
return overallDetailDialog; return overallDetailDialog;
} }
private FlowPanel createLegDetailsPanel(DataEntryDialog<?> dialog) { protected FlowPanel createLegDetailsPanel(DataEntryDialog<?> dialog) {
FlowPanel legDetailsToShow = new FlowPanel(); FlowPanel legDetailsToShow = new FlowPanel();
legDetailsToShow.ensureDebugId("LegDetailsSettingsPanel"); legDetailsToShow.ensureDebugId("LegDetailsSettingsPanel");
legDetailsToShow.add(dialog.createHeadline(stringMessages.legDetailsToShow(), true)); legDetailsToShow.add(dialog.createHeadline(stringMessages.legDetailsToShow(), true));
@@ -243,102 +206,7 @@ public class LeaderboardSettingsDialogComponent implements SettingsDialogCompone
return legDetailsToShow; return legDetailsToShow;
} }
private FlowPanel createSelectedRacesPanel(DataEntryDialog<?> dialog) {
FlowPanel selectedRacesPanel = new FlowPanel();
selectedRacesPanel.ensureDebugId("RaceSelectionSettingsPanel");
selectedRacesPanel.addStyleName("SettingsDialogComponent");
selectedRacesPanel.add(dialog.createHeadline(stringMessages.selectedRaces(), true));
// race selection strategy elements
HorizontalPanel racesSelectionStrategyPanel = new HorizontalPanel();
selectedRacesPanel.add(racesSelectionStrategyPanel);
FlowPanel selectedRacesContent = new FlowPanel();
selectedRacesContent.addStyleName("dialogInnerContent");
selectedRacesPanel.add(selectedRacesContent);
// Attention: We need to consider that there are regattas with more than 30 races
int racesCount = raceAllRaceColumnNames.size();
if (racesCount > 0) {
final FlowPanel explicitRaceSelectionContent = new FlowPanel();
explicitRaceSelectionContent.ensureDebugId("ExplicitRaceSelectionPanel");
final FlowPanel lastNRacesSelectionContent = new FlowPanel();
lastNRacesSelectionContent.ensureDebugId("MostCurrentRacesSelectionPanel");
String radioButtonGroupName = "raceSelectionStrategyGroup";
Label raceSelectionWayLabel = new Label(stringMessages.chooseTheWayYouSelectRaces() + ":");
raceSelectionWayLabel.getElement().getStyle().setPaddingRight(5, Unit.PX);
racesSelectionStrategyPanel.add(raceSelectionWayLabel);
explicitRaceColumnSelectionRadioBtn = dialog.createRadioButton(radioButtonGroupName, stringMessages.selectFromAllRaces());
explicitRaceColumnSelectionRadioBtn.ensureDebugId("ExplicitRaceSelectionRadioButton");
racesSelectionStrategyPanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE);
explicitRaceColumnSelectionRadioBtn.setValue(activeRaceColumnSelectionStrategy == RaceColumnSelectionStrategies.EXPLICIT);
explicitRaceColumnSelectionRadioBtn.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
explicitRaceSelectionContent.setVisible(true);
lastNRacesSelectionContent.setVisible(false);
activeRaceColumnSelectionStrategy = RaceColumnSelectionStrategies.EXPLICIT;
}
});
racesSelectionStrategyPanel.add(explicitRaceColumnSelectionRadioBtn);
// content of explicit race selection
int maxRacesPerRow = 10;
int rowIndex = 0;
int columnIndex = 0;
int rowCount = racesCount / maxRacesPerRow;
if(racesCount % maxRacesPerRow != 0) {
rowCount++;
}
Grid grid = new Grid(rowCount, maxRacesPerRow);
List<String> namesOfRaceColumnsToShow = initialSettings.getNamesOfRaceColumnsToShow();
final boolean noRaceSelected = namesOfRaceColumnsToShow == null || Util.isEmpty(namesOfRaceColumnsToShow);
for (String raceColumnName : raceAllRaceColumnNames) {
CheckBox checkbox = createCheckbox(dialog, raceColumnName,
noRaceSelected || Util.contains(namesOfRaceColumnsToShow, raceColumnName), null);
raceColumnCheckboxes.put(raceColumnName, checkbox);
grid.setWidget(rowIndex, columnIndex++, checkbox);
if(columnIndex == maxRacesPerRow) {
rowIndex++;
columnIndex = 0;
}
}
explicitRaceSelectionContent.add(grid);
explicitRaceSelectionContent.setVisible(activeRaceColumnSelectionStrategy == RaceColumnSelectionStrategies.EXPLICIT);
selectedRacesContent.add(explicitRaceSelectionContent);
lastNRacesColumnSelectionRadioBtn = dialog.createRadioButton(radioButtonGroupName, stringMessages.selectANumberOfRaces());
lastNRacesColumnSelectionRadioBtn.ensureDebugId("MostCurrentRacesSelectionRadioButton");
lastNRacesColumnSelectionRadioBtn.setValue(activeRaceColumnSelectionStrategy == RaceColumnSelectionStrategies.LAST_N);
lastNRacesColumnSelectionRadioBtn.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
explicitRaceSelectionContent.setVisible(false);
lastNRacesSelectionContent.setVisible(true);
activeRaceColumnSelectionStrategy = RaceColumnSelectionStrategies.LAST_N;
}
});
racesSelectionStrategyPanel.add(lastNRacesColumnSelectionRadioBtn);
dialog.alignAllPanelWidgetsVertically(racesSelectionStrategyPanel, HasVerticalAlignment.ALIGN_MIDDLE);
// content of 'number of races' selection
HorizontalPanel hPanel = new HorizontalPanel();
lastNRacesSelectionContent.add(hPanel);
Label numberOfLastRacesLabel = new Label(stringMessages.numberOfLastNRaces() + ":");
numberOfLastRacesLabel.getElement().getStyle().setPaddingRight(10, Unit.PX);
hPanel.add(numberOfLastRacesLabel);
Integer numberOfLastRacesToShow = initialSettings.getNumberOfLastRacesToShow();
numberOfLastRacesToShowBox = dialog.createIntegerBox(numberOfLastRacesToShow != null ? numberOfLastRacesToShow : racesCount, 3);
numberOfLastRacesToShowBox.ensureDebugId("NumberOfMostCurrentRacesIntegerBox");
hPanel.add(numberOfLastRacesToShowBox);
dialog.alignAllPanelWidgetsVertically(hPanel, HasVerticalAlignment.ALIGN_MIDDLE);
lastNRacesSelectionContent.setVisible(activeRaceColumnSelectionStrategy == RaceColumnSelectionStrategies.LAST_N);
selectedRacesContent.add(lastNRacesSelectionContent);
} else {
selectedRacesContent.add(new Label(stringMessages.noRacesYet()));
}
return selectedRacesPanel;
}
private CheckBox createAndRegisterCheckbox(DataEntryDialog<?> dialog, DetailType detailType, boolean selected, private CheckBox createAndRegisterCheckbox(DataEntryDialog<?> dialog, DetailType detailType, boolean selected,
Map<DetailType, CheckBox> registry) { Map<DetailType, CheckBox> registry) {
@@ -354,7 +222,7 @@ public class LeaderboardSettingsDialogComponent implements SettingsDialogCompone
return checkbox; return checkbox;
} }
private CheckBox createCheckbox(DataEntryDialog<?> dialog, String label, boolean selected, String tooltip) { protected CheckBox createCheckbox(DataEntryDialog<?> dialog, String label, boolean selected, String tooltip) {
CheckBox checkbox = dialog.createCheckbox(label); CheckBox checkbox = dialog.createCheckbox(label);
checkbox.ensureDebugId(DebugIdHelper.createDebugId(label) + "CheckBox"); checkbox.ensureDebugId(DebugIdHelper.createDebugId(label) + "CheckBox");
checkbox.setValue(selected); checkbox.setValue(selected);
@@ -362,79 +230,6 @@ public class LeaderboardSettingsDialogComponent implements SettingsDialogCompone
return checkbox; return checkbox;
} }
@Override
public LeaderboardSettings getResult() {
List<DetailType> maneuverDetailsToShow = new ArrayList<DetailType>();
for (Map.Entry<DetailType, CheckBox> entry : maneuverDetailCheckboxes.entrySet()) {
if (entry.getValue().getValue()) {
maneuverDetailsToShow.add(entry.getKey());
}
}
List<DetailType> overallDetailsToShow = new ArrayList<DetailType>();
for (Map.Entry<DetailType, CheckBox> entry : overallDetailCheckboxes.entrySet()) {
if (entry.getValue().getValue()) {
overallDetailsToShow.add(entry.getKey());
}
}
List<DetailType> raceDetailsToShow = new ArrayList<DetailType>();
for (Map.Entry<DetailType, CheckBox> entry : raceDetailCheckboxes.entrySet()) {
if (entry.getValue().getValue()) {
raceDetailsToShow.add(entry.getKey());
}
}
List<DetailType> legDetailsToShow = new ArrayList<DetailType>();
for (Map.Entry<DetailType, CheckBox> entry : legDetailCheckboxes.entrySet()) {
if (entry.getValue().getValue()) {
legDetailsToShow.add(entry.getKey());
}
}
List<String> namesOfRaceColumnsToShow = null;
if (activeRaceColumnSelectionStrategy == RaceColumnSelectionStrategies.EXPLICIT) {
namesOfRaceColumnsToShow = new ArrayList<String>();
for (Map.Entry<String, CheckBox> entry : raceColumnCheckboxes.entrySet()) {
if (entry.getValue().getValue()) {
namesOfRaceColumnsToShow.add(entry.getKey());
}
}
}
Long delayBetweenAutoAdvancesValue = refreshIntervalInSecondsBox.getValue();
Integer lastNRacesToShowValue = activeRaceColumnSelectionStrategy == RaceColumnSelectionStrategies.LAST_N ?
numberOfLastRacesToShowBox.getValue() : null;
LeaderboardSettings newSettings = new LeaderboardSettings(maneuverDetailsToShow, legDetailsToShow, raceDetailsToShow,
overallDetailsToShow, namesOfRaceColumnsToShow, /* nameOfRacesToShow */null,
lastNRacesToShowValue,
initialSettings.isAutoExpandPreSelectedRace(), 1000l * (delayBetweenAutoAdvancesValue == null ? 0l : delayBetweenAutoAdvancesValue.longValue()),
null,
true, /* updateUponPlayStateChange */ true, activeRaceColumnSelectionStrategy,
/*showAddedScores*/ showAddedScoresCheckBox.getValue().booleanValue(),
/*showOverallColumnWithNumberOfRacesSailedPerCompetitor*/ showOverallColumnWithNumberOfRacesSailedPerCompetitorCheckBox.getValue().booleanValue(),
showCompetitorSailIdColumnheckBox.getValue(), showCompetitorFullNameColumnCheckBox.getValue(), showRaceRankColumnCheckBox.getValue(),
isCompetitorNationalityColumnVisible.getValue());
SettingsDefaultValuesUtils.keepDefaults(initialSettings, newSettings);
return newSettings;
}
@Override
public Validator<LeaderboardSettings> getValidator() {
return new Validator<LeaderboardSettings>() {
@Override
public String getErrorMessage(LeaderboardSettings valueToValidate) {
final String result;
if (valueToValidate.getLegDetailsToShow().isEmpty()) {
result = stringMessages.selectAtLeastOneLegDetail();
} else if (valueToValidate.getDelayBetweenAutoAdvancesInMilliseconds() < 1000) {
result = stringMessages.chooseUpdateIntervalOfAtLeastOneSecond();
} else if (valueToValidate.getActiveRaceColumnSelectionStrategy() == RaceColumnSelectionStrategies.LAST_N
&& (numberOfLastRacesToShowBox.getValue() == null || numberOfLastRacesToShowBox.getValue() < 0)) {
result = stringMessages.numberOfRacesMustBeNonNegativeNumber();
} else {
result = null;
}
return result;
}
};
}
@Override @Override
public FocusWidget getFocusWidget() { public FocusWidget getFocusWidget() {
final FocusWidget result; final FocusWidget result;
@@ -1,12 +1,9 @@
package com.sap.sailing.gwt.settings.client.leaderboard; package com.sap.sailing.gwt.settings.client.leaderboard;
import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import com.sap.sailing.domain.common.DetailType; import com.sap.sailing.domain.common.DetailType;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettings.RaceColumnSelectionStrategies;
import com.sap.sse.common.Util;
import com.sap.sse.common.settings.generic.support.SettingsUtil; import com.sap.sse.common.settings.generic.support.SettingsUtil;
import com.sap.sse.common.settings.util.SettingsDefaultValuesUtils; import com.sap.sse.common.settings.util.SettingsDefaultValuesUtils;
@@ -23,49 +20,37 @@ public class LeaderboardSettingsFactory {
return instance; return instance;
} }
public LeaderboardSettings createNewDefaultSettingsWithRaceColumns(List<String> namesOfRaceColumns) { public MultiRaceLeaderboardSettings createNewDefaultSettingsWithRaceColumns(List<String> namesOfRaceColumns) {
LeaderboardSettings leaderboardSettings = new LeaderboardSettings(namesOfRaceColumns); MultiRaceLeaderboardSettings leaderboardSettings = new MultiRaceLeaderboardSettings(namesOfRaceColumns);
SettingsUtil.copyDefaultsFromValues(leaderboardSettings, leaderboardSettings); SettingsUtil.copyDefaultsFromValues(leaderboardSettings, leaderboardSettings);
return leaderboardSettings; return leaderboardSettings;
} }
public LeaderboardSettings createNewDefaultSettingsWithLastN(int numberOfLastRacesToShow) { public MultiRaceLeaderboardSettings createNewDefaultSettingsWithLastN(int numberOfLastRacesToShow) {
LeaderboardSettings defaultSettings = new LeaderboardSettings(); MultiRaceLeaderboardSettings defaultSettings = new MultiRaceLeaderboardSettings();
return new LeaderboardSettings( return new MultiRaceLeaderboardSettings(
defaultSettings.getManeuverDetailsToShow(), defaultSettings.getManeuverDetailsToShow(),
defaultSettings.getLegDetailsToShow(), defaultSettings.getLegDetailsToShow(),
defaultSettings.getRaceDetailsToShow(), defaultSettings.getOverallDetailsToShow(), defaultSettings.getRaceDetailsToShow(), defaultSettings.getOverallDetailsToShow(),
defaultSettings.getNamesOfRaceColumnsToShow(), defaultSettings.getNamesOfRaceColumnsToShow(),
defaultSettings.getNamesOfRacesToShow(),
numberOfLastRacesToShow, numberOfLastRacesToShow,
defaultSettings.isAutoExpandPreSelectedRace(),
defaultSettings.getDelayBetweenAutoAdvancesInMilliseconds(), defaultSettings.getDelayBetweenAutoAdvancesInMilliseconds(),
defaultSettings.getNameOfRaceToSort(), defaultSettings.isSortAscending(),
defaultSettings.isUpdateUponPlayStateChange(),
RaceColumnSelectionStrategies.LAST_N, RaceColumnSelectionStrategies.LAST_N,
defaultSettings.isShowAddedScores(), defaultSettings.isShowAddedScores(),
defaultSettings.isShowOverallColumnWithNumberOfRacesCompletedPerCompetitor(), defaultSettings.isShowOverallColumnWithNumberOfRacesCompletedPerCompetitor(),
defaultSettings.isShowCompetitorSailIdColumn(), defaultSettings.isShowCompetitorSailIdColumn(),
defaultSettings.isShowCompetitorFullNameColumn(), defaultSettings.isShowCompetitorFullNameColumn(),
defaultSettings.isShowRaceRankColumn(),
defaultSettings.isShowCompetitorNationality()); defaultSettings.isShowCompetitorNationality());
} }
public LeaderboardSettings createNewSettingsWithCustomRaceDetails(List<DetailType> raceDetailsToShow) { public SingleRaceLeaderboardSettings createNewSettingsWithCustomRaceDetails(List<DetailType> raceDetailsToShow) {
LeaderboardSettings defaultSettings = new LeaderboardSettings(); SingleRaceLeaderboardSettings defaultSettings = new SingleRaceLeaderboardSettings();
return new LeaderboardSettings( return new SingleRaceLeaderboardSettings(
defaultSettings.getManeuverDetailsToShow(), defaultSettings.getManeuverDetailsToShow(),
defaultSettings.getLegDetailsToShow(), defaultSettings.getLegDetailsToShow(),
raceDetailsToShow, defaultSettings.getOverallDetailsToShow(), raceDetailsToShow, defaultSettings.getOverallDetailsToShow(),
Util.cloneListOrNull(defaultSettings.getNamesOfRaceColumnsToShow()),
Util.cloneListOrNull(defaultSettings.getNamesOfRacesToShow()),
defaultSettings.getNumberOfLastRacesToShow(),
defaultSettings.isAutoExpandPreSelectedRace(),
defaultSettings.getDelayBetweenAutoAdvancesInMilliseconds(), defaultSettings.getDelayBetweenAutoAdvancesInMilliseconds(),
defaultSettings.getNameOfRaceToSort(), defaultSettings.isSortAscending(),
defaultSettings.isUpdateUponPlayStateChange(),
defaultSettings.getActiveRaceColumnSelectionStrategy(),
defaultSettings.isShowAddedScores(), defaultSettings.isShowAddedScores(),
defaultSettings.isShowOverallColumnWithNumberOfRacesCompletedPerCompetitor(), defaultSettings.isShowOverallColumnWithNumberOfRacesCompletedPerCompetitor(),
defaultSettings.isShowCompetitorSailIdColumn(), defaultSettings.isShowCompetitorSailIdColumn(),
@@ -74,18 +59,12 @@ public class LeaderboardSettingsFactory {
defaultSettings.isShowCompetitorNationality()); defaultSettings.isShowCompetitorNationality());
} }
public LeaderboardSettings createSettingsWithCustomExpandPreselectedRaceState(LeaderboardSettings settings, boolean expandPreselectedRace) { public SingleRaceLeaderboardSettings createSettingsWithCustomExpandPreselectedRaceState(SingleRaceLeaderboardSettings settings) {
return new LeaderboardSettings( return new SingleRaceLeaderboardSettings(
settings.getManeuverDetailsToShow(), settings.getManeuverDetailsToShow(),
settings.getLegDetailsToShow(), settings.getLegDetailsToShow(),
settings.getRaceDetailsToShow(), settings.getOverallDetailsToShow(), settings.getRaceDetailsToShow(), settings.getOverallDetailsToShow(),
Util.cloneListOrNull(settings.getNamesOfRaceColumnsToShow()),
Util.cloneListOrNull(settings.getNamesOfRacesToShow()),
settings.getNumberOfLastRacesToShow(), expandPreselectedRace,
settings.getDelayBetweenAutoAdvancesInMilliseconds(), settings.getDelayBetweenAutoAdvancesInMilliseconds(),
settings.getNameOfRaceToSort(), settings.isSortAscending(),
settings.isUpdateUponPlayStateChange(),
settings.getActiveRaceColumnSelectionStrategy(),
settings.isShowAddedScores(), settings.isShowAddedScores(),
settings.isShowOverallColumnWithNumberOfRacesCompletedPerCompetitor(), settings.isShowOverallColumnWithNumberOfRacesCompletedPerCompetitor(),
settings.isShowCompetitorSailIdColumn(), settings.isShowCompetitorSailIdColumn(),
@@ -94,14 +73,14 @@ public class LeaderboardSettingsFactory {
settings.isShowCompetitorNationality()); settings.isShowCompetitorNationality());
} }
public LeaderboardSettings mergeLeaderboardSettings(LeaderboardSettings settingsWithRaceSelection, LeaderboardSettings settingsWithDetails) { public MultiRaceLeaderboardSettings mergeLeaderboardSettings(MultiRaceLeaderboardSettings settingsWithRaceSelection, MultiRaceLeaderboardSettings settingsWithDetails) {
LeaderboardSettings newSettings = mergeLeaderboardSettingsHelper(settingsWithRaceSelection, settingsWithDetails); MultiRaceLeaderboardSettings newSettings = mergeLeaderboardSettingsHelper(settingsWithRaceSelection, settingsWithDetails);
LeaderboardSettings newDefaultSettings = mergeLeaderboardSettingsHelper(SettingsDefaultValuesUtils.getDefaultSettings(new LeaderboardSettings(), settingsWithRaceSelection), SettingsDefaultValuesUtils.getDefaultSettings(new LeaderboardSettings(), settingsWithDetails)); MultiRaceLeaderboardSettings newDefaultSettings = mergeLeaderboardSettingsHelper(SettingsDefaultValuesUtils.getDefaultSettings(new MultiRaceLeaderboardSettings(), settingsWithRaceSelection), SettingsDefaultValuesUtils.getDefaultSettings(new MultiRaceLeaderboardSettings(), settingsWithDetails));
SettingsDefaultValuesUtils.keepDefaults(newDefaultSettings, newSettings); SettingsDefaultValuesUtils.keepDefaults(newDefaultSettings, newSettings);
return newSettings; return newSettings;
} }
private LeaderboardSettings mergeLeaderboardSettingsHelper(LeaderboardSettings settingsWithRaceSelection, LeaderboardSettings settingsWithDetails) { private MultiRaceLeaderboardSettings mergeLeaderboardSettingsHelper(MultiRaceLeaderboardSettings settingsWithRaceSelection, MultiRaceLeaderboardSettings settingsWithDetails) {
Collection<DetailType> maneuverDetails = settingsWithDetails.getManeuverDetailsToShow(); Collection<DetailType> maneuverDetails = settingsWithDetails.getManeuverDetailsToShow();
Collection<DetailType> legDetails = settingsWithDetails.getLegDetailsToShow(); Collection<DetailType> legDetails = settingsWithDetails.getLegDetailsToShow();
Collection<DetailType> raceDetails = settingsWithDetails.getRaceDetailsToShow(); Collection<DetailType> raceDetails = settingsWithDetails.getRaceDetailsToShow();
@@ -109,30 +88,16 @@ public class LeaderboardSettingsFactory {
Long refreshIntervalInMs = settingsWithDetails.getDelayBetweenAutoAdvancesInMilliseconds(); Long refreshIntervalInMs = settingsWithDetails.getDelayBetweenAutoAdvancesInMilliseconds();
RaceColumnSelectionStrategies strategy = settingsWithRaceSelection.getActiveRaceColumnSelectionStrategy(); RaceColumnSelectionStrategies strategy = settingsWithRaceSelection.getActiveRaceColumnSelectionStrategy();
List<String> namesOfRaceColumnsToShow = copyRaceNamesList(settingsWithRaceSelection.getNamesOfRaceColumnsToShow()); List<String> namesOfRaceColumnsToShow = settingsWithRaceSelection.getNamesOfRaceColumnsToShow();
List<String> namesOfRacesToShow = copyRaceNamesList(settingsWithRaceSelection.getNamesOfRacesToShow());
Integer numberOfLastRacesToShow = settingsWithRaceSelection.getNumberOfLastRacesToShow(); Integer numberOfLastRacesToShow = settingsWithRaceSelection.getNumberOfLastRacesToShow();
boolean autoExpandPreSelectedRace = settingsWithRaceSelection.isAutoExpandPreSelectedRace();
boolean showCompetitorSailIdColumn = settingsWithRaceSelection.isShowCompetitorSailIdColumn(); boolean showCompetitorSailIdColumn = settingsWithRaceSelection.isShowCompetitorSailIdColumn();
boolean showCompetitorFullNameColumns = settingsWithRaceSelection.isShowCompetitorFullNameColumn(); boolean showCompetitorFullNameColumns = settingsWithRaceSelection.isShowCompetitorFullNameColumn();
String nameOfRaceToSort = settingsWithRaceSelection.getNameOfRaceToSort();
boolean sortAscending = settingsWithRaceSelection.isSortAscending();
boolean updateUponPlayStateChange = settingsWithRaceSelection.isUpdateUponPlayStateChange();
return new LeaderboardSettings(maneuverDetails, legDetails, raceDetails, overallDetailsToShow, return new MultiRaceLeaderboardSettings(maneuverDetails, legDetails, raceDetails, overallDetailsToShow,
namesOfRaceColumnsToShow, namesOfRacesToShow, numberOfLastRacesToShow, autoExpandPreSelectedRace, refreshIntervalInMs, namesOfRaceColumnsToShow, numberOfLastRacesToShow, refreshIntervalInMs,
nameOfRaceToSort, sortAscending, updateUponPlayStateChange, strategy, /*showAddedScores*/ false, strategy, /*showAddedScores*/ false,
/* showOverallRacesCompleted */ false, showCompetitorSailIdColumn, showCompetitorFullNameColumns, /* showOverallRacesCompleted */ false, showCompetitorSailIdColumn, showCompetitorFullNameColumns,
settingsWithRaceSelection.isShowRaceRankColumn(),
settingsWithRaceSelection.isShowCompetitorNationality()); settingsWithRaceSelection.isShowCompetitorNationality());
} }
private List<String> copyRaceNamesList(List<String> raceNames) {
List<String> result = null;
if(raceNames != null) {
result = new ArrayList<String>(raceNames);
}
return result;
}
} }
@@ -7,11 +7,11 @@ public class MetaLeaderboardPerspectiveLifecycle extends AbstractLeaderboardPers
public static final String ID = "mlbh"; public static final String ID = "mlbh";
private final MultiLeaderboardPanelLifecycle multiLeaderboardPanelLifecycle; private final MultipleMultiLeaderboardPanelLifecycle multiLeaderboardPanelLifecycle;
public MetaLeaderboardPerspectiveLifecycle(StringMessages stringMessages, AbstractLeaderboardDTO leaderboard) { public MetaLeaderboardPerspectiveLifecycle(StringMessages stringMessages, AbstractLeaderboardDTO leaderboard) {
super(stringMessages, leaderboard, true); super(stringMessages, leaderboard, true);
multiLeaderboardPanelLifecycle = new MultiLeaderboardPanelLifecycle(null, stringMessages); multiLeaderboardPanelLifecycle = new MultipleMultiLeaderboardPanelLifecycle(null, stringMessages);
addLifeCycle(multiLeaderboardPanelLifecycle); addLifeCycle(multiLeaderboardPanelLifecycle);
} }
@@ -25,7 +25,7 @@ public class MetaLeaderboardPerspectiveLifecycle extends AbstractLeaderboardPers
return ID; return ID;
} }
public MultiLeaderboardPanelLifecycle getMultiLeaderboardPanelLifecycle() { public MultipleMultiLeaderboardPanelLifecycle getMultiLeaderboardPanelLifecycle() {
return multiLeaderboardPanelLifecycle; return multiLeaderboardPanelLifecycle;
} }
} }
@@ -0,0 +1,64 @@
package com.sap.sailing.gwt.settings.client.leaderboard;
import java.util.ArrayList;
import java.util.List;
import com.sap.sailing.domain.common.dto.AbstractLeaderboardDTO;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sse.common.settings.generic.support.SettingsUtil;
public class MultiRaceLeaderboardPanelLifecycle extends LeaderboardPanelLifecycle<MultiRaceLeaderboardSettings> {
protected final List<String> namesOfRaceColumns;
public MultiRaceLeaderboardPanelLifecycle(AbstractLeaderboardDTO leaderboard, StringMessages stringMessages) {
super(stringMessages);
this.namesOfRaceColumns = leaderboard != null ? leaderboard.getNamesOfRaceColumns() : new ArrayList<String>();
}
@Override
public MultiRaceLeaderboardSettings extractUserSettings(MultiRaceLeaderboardSettings currentLeaderboardSettings) {
MultiRaceLeaderboardSettings defaultLeaderboardSettings = createDefaultSettings();
MultiRaceLeaderboardSettings globalLeaderboardSettings = new MultiRaceLeaderboardSettings(
currentLeaderboardSettings.getManeuverDetailsToShow(), currentLeaderboardSettings.getLegDetailsToShow(),
currentLeaderboardSettings.getRaceDetailsToShow(), currentLeaderboardSettings.getOverallDetailsToShow(),
defaultLeaderboardSettings.getNamesOfRaceColumnsToShow(),
currentLeaderboardSettings.getNumberOfLastRacesToShow(),
currentLeaderboardSettings.getDelayBetweenAutoAdvancesInMilliseconds(),
currentLeaderboardSettings.getActiveRaceColumnSelectionStrategy(),
currentLeaderboardSettings.isShowAddedScores(),
currentLeaderboardSettings.isShowOverallColumnWithNumberOfRacesCompletedPerCompetitor(),
currentLeaderboardSettings.isShowCompetitorSailIdColumn(),
currentLeaderboardSettings.isShowCompetitorFullNameColumn(),
currentLeaderboardSettings.isShowCompetitorNationality());
return SettingsUtil.copyValues(globalLeaderboardSettings, defaultLeaderboardSettings);
}
@Override
public MultiRaceLeaderboardSettings extractDocumentSettings(MultiRaceLeaderboardSettings currentLeaderboardSettings) {
MultiRaceLeaderboardSettings defaultLeaderboardSettings = createDefaultSettings();
MultiRaceLeaderboardSettings contextSpecificLeaderboardSettings = new MultiRaceLeaderboardSettings(
currentLeaderboardSettings.getManeuverDetailsToShow(), currentLeaderboardSettings.getLegDetailsToShow(),
currentLeaderboardSettings.getRaceDetailsToShow(), currentLeaderboardSettings.getOverallDetailsToShow(),
defaultLeaderboardSettings.getNamesOfRaceColumnsToShow(),
currentLeaderboardSettings.getNumberOfLastRacesToShow(),
currentLeaderboardSettings.getDelayBetweenAutoAdvancesInMilliseconds(),
currentLeaderboardSettings.getActiveRaceColumnSelectionStrategy(),
currentLeaderboardSettings.isShowAddedScores(),
currentLeaderboardSettings.isShowOverallColumnWithNumberOfRacesCompletedPerCompetitor(),
currentLeaderboardSettings.isShowCompetitorSailIdColumn(),
currentLeaderboardSettings.isShowCompetitorFullNameColumn(),
currentLeaderboardSettings.isShowCompetitorNationality());
return SettingsUtil.copyValues(contextSpecificLeaderboardSettings, defaultLeaderboardSettings);
}
@Override
public MultiRaceLeaderboardSettingsDialogComponent getSettingsDialogComponent(MultiRaceLeaderboardSettings settings) {
return new MultiRaceLeaderboardSettingsDialogComponent(settings, namesOfRaceColumns, stringMessages);
}
@Override
public MultiRaceLeaderboardSettings createDefaultSettings() {
return LeaderboardSettingsFactory.getInstance()
.createNewDefaultSettingsWithRaceColumns(namesOfRaceColumns);
}
}
@@ -0,0 +1,106 @@
package com.sap.sailing.gwt.settings.client.leaderboard;
import java.util.Collection;
import java.util.List;
import com.sap.sailing.domain.common.DetailType;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel;
import com.sap.sse.common.Util;
import com.sap.sse.common.settings.generic.EnumSetting;
import com.sap.sse.common.settings.generic.IntegerSetting;
import com.sap.sse.common.settings.generic.StringSetSetting;
import com.sap.sse.common.settings.util.SettingsDefaultValuesUtils;
public class MultiRaceLeaderboardSettings extends LeaderboardSettings {
private static final long serialVersionUID = -3445146715292390755L;
/**
* Only one of {@link #namesOfRaceColumnsToShow} and {@link #namesOfRacesToShow} must be non-<code>null</code>.
* Only valid when the {@link #activeRaceColumnSelectionStrategy} is set to EXPLIZIT
*/
protected StringSetSetting namesOfRaceColumnsToShow;
/**
* Only valid when the {@link #activeRaceColumnSelectionStrategy} is set to LAST_N
*/
protected IntegerSetting numberOfLastRacesToShow;
protected EnumSetting<RaceColumnSelectionStrategies> activeRaceColumnSelectionStrategy;
public MultiRaceLeaderboardSettings() {
super();
}
public MultiRaceLeaderboardSettings(Collection<DetailType> maneuverDetailsToShow,
Collection<DetailType> legDetailsToShow, Collection<DetailType> raceDetailsToShow,
Collection<DetailType> overallDetailsToShow, List<String> namesOfRaceColumnsToShow,
Integer numberOfLastRacesToShow,
Long delayBetweenAutoAdvancesInMilliseconds,
RaceColumnSelectionStrategies activeRaceColumnSelectionStrategy,
boolean showAddedScores, boolean showOverallColumnWithNumberOfRacesCompletedPerCompetitor,
boolean showCompetitorSailIdColumn, boolean showCompetitorFullNameColumn,
boolean isCompetitorNationalityColumnVisible) {
super(maneuverDetailsToShow, legDetailsToShow, raceDetailsToShow, overallDetailsToShow, delayBetweenAutoAdvancesInMilliseconds,
showAddedScores, showOverallColumnWithNumberOfRacesCompletedPerCompetitor, showCompetitorSailIdColumn,
showCompetitorFullNameColumn, isCompetitorNationalityColumnVisible);
this.namesOfRaceColumnsToShow.setValues(namesOfRaceColumnsToShow);
this.numberOfLastRacesToShow.setValue(numberOfLastRacesToShow);
this.activeRaceColumnSelectionStrategy.setValue(activeRaceColumnSelectionStrategy);
}
public MultiRaceLeaderboardSettings(Iterable<String> namesOfRaceColumnsToShow) {
this.namesOfRaceColumnsToShow.setValues(namesOfRaceColumnsToShow);
}
public MultiRaceLeaderboardSettings overrideDefaultsForNamesOfRaceColumns(List<String> namesOfRaceColumns) {
MultiRaceLeaderboardSettings newSettings = new MultiRaceLeaderboardSettings();
newSettings.legDetailsToShow.setValues(this.getLegDetailsToShow());
newSettings.raceDetailsToShow.setValues(this.getRaceDetailsToShow());
newSettings.overallDetailsToShow.setValues(this.getOverallDetailsToShow());
newSettings.numberOfLastRacesToShow.setValue(this.getNumberOfLastRacesToShow());
newSettings.activeRaceColumnSelectionStrategy.setValue(this.getActiveRaceColumnSelectionStrategy());
newSettings.delayBetweenAutoAdvancesInMilliseconds.setValue(this.getDelayBetweenAutoAdvancesInMilliseconds());
newSettings.maneuverDetailsToShow.setValues(this.getManeuverDetailsToShow());
newSettings.showAddedScores.setValue(this.isShowAddedScores());
newSettings.showCompetitorSailIdColumn.setValue(this.isShowCompetitorSailIdColumn());
newSettings.showCompetitorFullNameColumn.setValue(this.isShowCompetitorFullNameColumn());
newSettings.showOverallColumnWithNumberOfRacesCompletedPerCompetitor.setValue(this.isShowOverallColumnWithNumberOfRacesCompletedPerCompetitor());
newSettings.isShowCompetitorNationality.setValue(this.isShowCompetitorNationality());
newSettings.namesOfRaceColumnsToShow.setValues(this.getNamesOfRaceColumnsToShow());
SettingsDefaultValuesUtils.keepDefaults(this, newSettings);
newSettings.namesOfRaceColumnsToShow.setDefaultValues(namesOfRaceColumns);
return newSettings;
}
@Override
protected void addChildSettings() {
super.addChildSettings();
namesOfRaceColumnsToShow = new StringSetSetting("namesOfRaceColumnsToShow", this);
numberOfLastRacesToShow = new IntegerSetting("numberOfLastRacesToShow", this, null);
activeRaceColumnSelectionStrategy = new EnumSetting<>("activeRaceColumnSelectionStrategy", this, RaceColumnSelectionStrategies.EXPLICIT, RaceColumnSelectionStrategies::valueOf);
}
/**
* If <code>null</code>, this is to mean that the race columns should not be modified by
* {@link LeaderboardPanel#updateSettings(LeaderboardSettings)}. Otherwise a
* live collection that reflects the current state of the settings of a leaderboard panel
*/
public List<String> getNamesOfRaceColumnsToShow() {
return activeRaceColumnSelectionStrategy.getValue() == RaceColumnSelectionStrategies.EXPLICIT ? (namesOfRaceColumnsToShow.isValuesEmpty() ? null : Util.createList(namesOfRaceColumnsToShow.getValues())) : null;
}
/**
* If <code>null</code>, this is to mean that the race columns should not be modified by
* {@link LeaderboardPanel#updateSettings(LeaderboardSettings)}.
*/
public Integer getNumberOfLastRacesToShow() {
return activeRaceColumnSelectionStrategy.getValue() == RaceColumnSelectionStrategies.LAST_N ? numberOfLastRacesToShow.getValue() : null;
}
public RaceColumnSelectionStrategies getActiveRaceColumnSelectionStrategy() {
return activeRaceColumnSelectionStrategy.getValue();
}
}
@@ -0,0 +1,230 @@
package com.sap.sailing.gwt.settings.client.leaderboard;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.ui.CheckBox;
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.Widget;
import com.sap.sailing.domain.common.DetailType;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sse.common.Util;
import com.sap.sse.common.settings.util.SettingsDefaultValuesUtils;
import com.sap.sse.gwt.client.dialog.DataEntryDialog;
import com.sap.sse.gwt.client.dialog.DataEntryDialog.Validator;
public class MultiRaceLeaderboardSettingsDialogComponent
extends LeaderboardSettingsDialogComponent<MultiRaceLeaderboardSettings> {
private final Map<String, CheckBox> raceColumnCheckboxes;
private final List<String> raceAllRaceColumnNames;
private RaceColumnSelectionStrategies activeRaceColumnSelectionStrategy;
public MultiRaceLeaderboardSettingsDialogComponent(MultiRaceLeaderboardSettings initialSettings,
List<String> allRaceColumnNames, StringMessages stringMessages) {
super(initialSettings, stringMessages);
this.activeRaceColumnSelectionStrategy = initialSettings.getActiveRaceColumnSelectionStrategy();
this.raceAllRaceColumnNames = allRaceColumnNames;
raceColumnCheckboxes = new LinkedHashMap<>();
}
@Override
public MultiRaceLeaderboardSettings getResult() {
List<DetailType> maneuverDetailsToShow = new ArrayList<DetailType>();
for (Map.Entry<DetailType, CheckBox> entry : maneuverDetailCheckboxes.entrySet()) {
if (entry.getValue().getValue()) {
maneuverDetailsToShow.add(entry.getKey());
}
}
List<DetailType> overallDetailsToShow = new ArrayList<DetailType>();
for (Map.Entry<DetailType, CheckBox> entry : overallDetailCheckboxes.entrySet()) {
if (entry.getValue().getValue()) {
overallDetailsToShow.add(entry.getKey());
}
}
List<DetailType> raceDetailsToShow = new ArrayList<DetailType>();
for (Map.Entry<DetailType, CheckBox> entry : raceDetailCheckboxes.entrySet()) {
if (entry.getValue().getValue()) {
raceDetailsToShow.add(entry.getKey());
}
}
List<DetailType> legDetailsToShow = new ArrayList<DetailType>();
for (Map.Entry<DetailType, CheckBox> entry : legDetailCheckboxes.entrySet()) {
if (entry.getValue().getValue()) {
legDetailsToShow.add(entry.getKey());
}
}
List<String> namesOfRaceColumnsToShow = null;
if (activeRaceColumnSelectionStrategy == RaceColumnSelectionStrategies.EXPLICIT) {
namesOfRaceColumnsToShow = new ArrayList<String>();
for (Map.Entry<String, CheckBox> entry : raceColumnCheckboxes.entrySet()) {
if (entry.getValue().getValue()) {
namesOfRaceColumnsToShow.add(entry.getKey());
}
}
}
Long delayBetweenAutoAdvancesValue = refreshIntervalInSecondsBox.getValue();
Integer lastNRacesToShowValue = activeRaceColumnSelectionStrategy == RaceColumnSelectionStrategies.LAST_N
? numberOfLastRacesToShowBox.getValue() : null;
MultiRaceLeaderboardSettings newSettings = new MultiRaceLeaderboardSettings(maneuverDetailsToShow,
legDetailsToShow, raceDetailsToShow, overallDetailsToShow, namesOfRaceColumnsToShow,
lastNRacesToShowValue,
1000l * (delayBetweenAutoAdvancesValue == null ? 0l : delayBetweenAutoAdvancesValue.longValue()),
activeRaceColumnSelectionStrategy,
/* showAddedScores */ showAddedScoresCheckBox.getValue().booleanValue(),
/* showOverallColumnWithNumberOfRacesSailedPerCompetitor */ showOverallColumnWithNumberOfRacesSailedPerCompetitorCheckBox
.getValue().booleanValue(),
showCompetitorSailIdColumnheckBox.getValue(), showCompetitorFullNameColumnCheckBox.getValue(),
isCompetitorNationalityColumnVisible.getValue());
SettingsDefaultValuesUtils.keepDefaults(initialSettings, newSettings);
return newSettings;
}
private FlowPanel createSelectedRacesPanel(DataEntryDialog<?> dialog) {
FlowPanel selectedRacesPanel = new FlowPanel();
selectedRacesPanel.ensureDebugId("RaceSelectionSettingsPanel");
selectedRacesPanel.addStyleName("SettingsDialogComponent");
selectedRacesPanel.add(dialog.createHeadline(stringMessages.selectedRaces(), true));
// race selection strategy elements
HorizontalPanel racesSelectionStrategyPanel = new HorizontalPanel();
selectedRacesPanel.add(racesSelectionStrategyPanel);
FlowPanel selectedRacesContent = new FlowPanel();
selectedRacesContent.addStyleName("dialogInnerContent");
selectedRacesPanel.add(selectedRacesContent);
// Attention: We need to consider that there are regattas with more than 30 races
int racesCount = raceAllRaceColumnNames.size();
if (racesCount > 0) {
final FlowPanel explicitRaceSelectionContent = new FlowPanel();
explicitRaceSelectionContent.ensureDebugId("ExplicitRaceSelectionPanel");
final FlowPanel lastNRacesSelectionContent = new FlowPanel();
lastNRacesSelectionContent.ensureDebugId("MostCurrentRacesSelectionPanel");
String radioButtonGroupName = "raceSelectionStrategyGroup";
Label raceSelectionWayLabel = new Label(stringMessages.chooseTheWayYouSelectRaces() + ":");
raceSelectionWayLabel.getElement().getStyle().setPaddingRight(5, Unit.PX);
racesSelectionStrategyPanel.add(raceSelectionWayLabel);
explicitRaceColumnSelectionRadioBtn = dialog.createRadioButton(radioButtonGroupName,
stringMessages.selectFromAllRaces());
explicitRaceColumnSelectionRadioBtn.ensureDebugId("ExplicitRaceSelectionRadioButton");
racesSelectionStrategyPanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE);
explicitRaceColumnSelectionRadioBtn
.setValue(activeRaceColumnSelectionStrategy == RaceColumnSelectionStrategies.EXPLICIT);
explicitRaceColumnSelectionRadioBtn.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
explicitRaceSelectionContent.setVisible(true);
lastNRacesSelectionContent.setVisible(false);
activeRaceColumnSelectionStrategy = RaceColumnSelectionStrategies.EXPLICIT;
}
});
racesSelectionStrategyPanel.add(explicitRaceColumnSelectionRadioBtn);
// content of explicit race selection
int maxRacesPerRow = 10;
int rowIndex = 0;
int columnIndex = 0;
int rowCount = racesCount / maxRacesPerRow;
if (racesCount % maxRacesPerRow != 0) {
rowCount++;
}
Grid grid = new Grid(rowCount, maxRacesPerRow);
List<String> namesOfRaceColumnsToShow = initialSettings.getNamesOfRaceColumnsToShow();
final boolean noRaceSelected = namesOfRaceColumnsToShow == null || Util.isEmpty(namesOfRaceColumnsToShow);
for (String raceColumnName : raceAllRaceColumnNames) {
CheckBox checkbox = createCheckbox(dialog, raceColumnName,
noRaceSelected || Util.contains(namesOfRaceColumnsToShow, raceColumnName), null);
raceColumnCheckboxes.put(raceColumnName, checkbox);
grid.setWidget(rowIndex, columnIndex++, checkbox);
if (columnIndex == maxRacesPerRow) {
rowIndex++;
columnIndex = 0;
}
}
explicitRaceSelectionContent.add(grid);
explicitRaceSelectionContent
.setVisible(activeRaceColumnSelectionStrategy == RaceColumnSelectionStrategies.EXPLICIT);
selectedRacesContent.add(explicitRaceSelectionContent);
lastNRacesColumnSelectionRadioBtn = dialog.createRadioButton(radioButtonGroupName,
stringMessages.selectANumberOfRaces());
lastNRacesColumnSelectionRadioBtn.ensureDebugId("MostCurrentRacesSelectionRadioButton");
lastNRacesColumnSelectionRadioBtn
.setValue(activeRaceColumnSelectionStrategy == RaceColumnSelectionStrategies.LAST_N);
lastNRacesColumnSelectionRadioBtn.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
explicitRaceSelectionContent.setVisible(false);
lastNRacesSelectionContent.setVisible(true);
activeRaceColumnSelectionStrategy = RaceColumnSelectionStrategies.LAST_N;
}
});
racesSelectionStrategyPanel.add(lastNRacesColumnSelectionRadioBtn);
dialog.alignAllPanelWidgetsVertically(racesSelectionStrategyPanel, HasVerticalAlignment.ALIGN_MIDDLE);
// content of 'number of races' selection
HorizontalPanel hPanel = new HorizontalPanel();
lastNRacesSelectionContent.add(hPanel);
Label numberOfLastRacesLabel = new Label(stringMessages.numberOfLastNRaces() + ":");
numberOfLastRacesLabel.getElement().getStyle().setPaddingRight(10, Unit.PX);
hPanel.add(numberOfLastRacesLabel);
Integer numberOfLastRacesToShow = initialSettings.getNumberOfLastRacesToShow();
numberOfLastRacesToShowBox = dialog
.createIntegerBox(numberOfLastRacesToShow != null ? numberOfLastRacesToShow : racesCount, 3);
numberOfLastRacesToShowBox.ensureDebugId("NumberOfMostCurrentRacesIntegerBox");
hPanel.add(numberOfLastRacesToShowBox);
dialog.alignAllPanelWidgetsVertically(hPanel, HasVerticalAlignment.ALIGN_MIDDLE);
lastNRacesSelectionContent
.setVisible(activeRaceColumnSelectionStrategy == RaceColumnSelectionStrategies.LAST_N);
selectedRacesContent.add(lastNRacesSelectionContent);
} else {
selectedRacesContent.add(new Label(stringMessages.noRacesYet()));
}
return selectedRacesPanel;
}
@Override
public Widget getAdditionalWidget(DataEntryDialog<?> dialog) {
FlowPanel dialogPanel = new FlowPanel();
dialogPanel.ensureDebugId("LeaderboardSettingsPanel");
dialogPanel.add(createSelectedRacesPanel(dialog));
dialogPanel.add(createOverallDetailPanel(dialog));
dialogPanel.add(createRaceDetailPanel(dialog));
dialogPanel.add(createRaceStartAnalysisPanel(dialog));
dialogPanel.add(createLegDetailsPanel(dialog));
dialogPanel.add(createManeuverDetailsPanel(dialog));
dialogPanel.add(createTimingDetailsPanel(dialog));
return dialogPanel;
}
@Override
public Validator<MultiRaceLeaderboardSettings> getValidator() {
return new Validator<MultiRaceLeaderboardSettings>() {
@Override
public String getErrorMessage(MultiRaceLeaderboardSettings valueToValidate) {
final String result;
if (valueToValidate.getLegDetailsToShow().isEmpty()) {
result = stringMessages.selectAtLeastOneLegDetail();
} else if (valueToValidate.getDelayBetweenAutoAdvancesInMilliseconds() < 1000) {
result = stringMessages.chooseUpdateIntervalOfAtLeastOneSecond();
} else if (valueToValidate.getActiveRaceColumnSelectionStrategy() == RaceColumnSelectionStrategies.LAST_N
&& (numberOfLastRacesToShowBox.getValue() == null || numberOfLastRacesToShowBox.getValue() < 0)) {
result = stringMessages.numberOfRacesMustBeNonNegativeNumber();
} else {
result = null;
}
return result;
}
};
}
}
@@ -7,10 +7,10 @@ import com.sap.sailing.gwt.ui.client.StringMessages;
* This is a special lifecycle that uses a different ID, which is required to allow a MultiLeaderboard and a normal * This is a special lifecycle that uses a different ID, which is required to allow a MultiLeaderboard and a normal
* Leaderboard to coexist. * Leaderboard to coexist.
*/ */
public class MultiLeaderboardPanelLifecycle extends LeaderboardPanelLifecycle { public class MultipleMultiLeaderboardPanelLifecycle extends MultiRaceLeaderboardPanelLifecycle {
public static final String MID = "mlb"; public static final String MID = "mlb";
public MultiLeaderboardPanelLifecycle(AbstractLeaderboardDTO leaderboard, StringMessages stringMessages) { public MultipleMultiLeaderboardPanelLifecycle(AbstractLeaderboardDTO leaderboard, StringMessages stringMessages) {
super(leaderboard, stringMessages); super(leaderboard, stringMessages);
} }
@@ -20,7 +20,7 @@ public class MultiLeaderboardPanelLifecycle extends LeaderboardPanelLifecycle {
} }
@Override @Override
public LeaderboardSettings extractDocumentSettings(LeaderboardSettings leaderboardSettings) { public MultiRaceLeaderboardSettings extractDocumentSettings(MultiRaceLeaderboardSettings leaderboardSettings) {
return createDefaultSettings(); return createDefaultSettings();
} }
@@ -7,7 +7,7 @@ import com.sap.sailing.gwt.ui.client.StringMessages;
* This is a special lifecycle that uses a different ID, which is required to allow a OverallLeaderboard and a normal * This is a special lifecycle that uses a different ID, which is required to allow a OverallLeaderboard and a normal
* Leaderboard to coexist. * Leaderboard to coexist.
*/ */
public class OverallLeaderboardPanelLifecycle extends LeaderboardPanelLifecycle { public class OverallLeaderboardPanelLifecycle extends MultiRaceLeaderboardPanelLifecycle {
public static final String ID = "olb"; public static final String ID = "olb";
@@ -26,7 +26,7 @@ public class OverallLeaderboardPanelLifecycle extends LeaderboardPanelLifecycle
} }
@Override @Override
public LeaderboardSettingsDialogComponent getSettingsDialogComponent(LeaderboardSettings settings) { public MultiRaceLeaderboardSettingsDialogComponent getSettingsDialogComponent(MultiRaceLeaderboardSettings settings) {
return new OverallLeaderboardSettingsDialogComponent(settings, namesOfRaceColumns, stringMessages); return new OverallLeaderboardSettingsDialogComponent(settings, namesOfRaceColumns, stringMessages);
} }
@@ -6,9 +6,9 @@ import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sse.gwt.client.dialog.DataEntryDialog; import com.sap.sse.gwt.client.dialog.DataEntryDialog;
public class OverallLeaderboardSettingsDialogComponent extends LeaderboardSettingsDialogComponent { public class OverallLeaderboardSettingsDialogComponent extends MultiRaceLeaderboardSettingsDialogComponent {
public OverallLeaderboardSettingsDialogComponent(LeaderboardSettings initialSettings, List<String> allRaceColumnNames, StringMessages stringMessages) { public OverallLeaderboardSettingsDialogComponent(MultiRaceLeaderboardSettings initialSettings, List<String> allRaceColumnNames, StringMessages stringMessages) {
super(initialSettings, allRaceColumnNames, stringMessages); super(initialSettings, allRaceColumnNames, stringMessages);
} }
@@ -0,0 +1,9 @@
package com.sap.sailing.gwt.settings.client.leaderboard;
/**
* There are two ways to select race columns.
* Either you select races from the list of all races or you select the last N races.
*/
public enum RaceColumnSelectionStrategies {
EXPLICIT, LAST_N;
}
@@ -0,0 +1,39 @@
package com.sap.sailing.gwt.settings.client.leaderboard;
import java.util.Collection;
import com.sap.sailing.domain.common.DetailType;
import com.sap.sse.common.settings.generic.BooleanSetting;
public class SingleRaceLeaderboardSettings extends LeaderboardSettings {
private static final long serialVersionUID = 2891220120957743158L;
private BooleanSetting showRaceRankColumn;
public SingleRaceLeaderboardSettings() {
super();
}
public SingleRaceLeaderboardSettings(Collection<DetailType> maneuverDetailsToShow,
Collection<DetailType> legDetailsToShow, Collection<DetailType> raceDetailsToShow,
Collection<DetailType> overallDetailsToShow, Long delayBetweenAutoAdvancesInMilliseconds,
boolean showAddedScores,
boolean showOverallColumnWithNumberOfRacesCompletedPerCompetitor, boolean showCompetitorSailIdColumn,
boolean showCompetitorFullNameColumn, boolean isCompetitorNationalityColumnVisible,boolean showRaceRankColumn) {
super(maneuverDetailsToShow, legDetailsToShow, raceDetailsToShow, overallDetailsToShow,
delayBetweenAutoAdvancesInMilliseconds, showAddedScores,
showOverallColumnWithNumberOfRacesCompletedPerCompetitor, showCompetitorSailIdColumn,
showCompetitorFullNameColumn, isCompetitorNationalityColumnVisible);
this.showRaceRankColumn.setValue(showRaceRankColumn);
}
public boolean isShowRaceRankColumn() {
return showRaceRankColumn.getValue();
}
@Override
protected void addChildSettings() {
super.addChildSettings();
showRaceRankColumn = new BooleanSetting("racerank", this, false);
}
}
@@ -0,0 +1,104 @@
package com.sap.sailing.gwt.settings.client.leaderboard;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.domain.common.DetailType;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sse.common.settings.util.SettingsDefaultValuesUtils;
import com.sap.sse.gwt.client.dialog.DataEntryDialog;
import com.sap.sse.gwt.client.dialog.DataEntryDialog.Validator;
public class SingleRaceLeaderboardSettingsDialogComponent
extends LeaderboardSettingsDialogComponent<SingleRaceLeaderboardSettings> {
protected CheckBox showRaceRankColumn;
public SingleRaceLeaderboardSettingsDialogComponent(SingleRaceLeaderboardSettings initialSettings,
StringMessages stringMessages) {
super(initialSettings, stringMessages);
}
@Override
public SingleRaceLeaderboardSettings getResult() {
List<DetailType> maneuverDetailsToShow = new ArrayList<DetailType>();
for (Map.Entry<DetailType, CheckBox> entry : maneuverDetailCheckboxes.entrySet()) {
if (entry.getValue().getValue()) {
maneuverDetailsToShow.add(entry.getKey());
}
}
List<DetailType> overallDetailsToShow = new ArrayList<DetailType>();
for (Map.Entry<DetailType, CheckBox> entry : overallDetailCheckboxes.entrySet()) {
if (entry.getValue().getValue()) {
overallDetailsToShow.add(entry.getKey());
}
}
List<DetailType> raceDetailsToShow = new ArrayList<DetailType>();
for (Map.Entry<DetailType, CheckBox> entry : raceDetailCheckboxes.entrySet()) {
if (entry.getValue().getValue()) {
raceDetailsToShow.add(entry.getKey());
}
}
List<DetailType> legDetailsToShow = new ArrayList<DetailType>();
for (Map.Entry<DetailType, CheckBox> entry : legDetailCheckboxes.entrySet()) {
if (entry.getValue().getValue()) {
legDetailsToShow.add(entry.getKey());
}
}
Long delayBetweenAutoAdvancesValue = refreshIntervalInSecondsBox.getValue();
SingleRaceLeaderboardSettings newSettings = new SingleRaceLeaderboardSettings(maneuverDetailsToShow,
legDetailsToShow, raceDetailsToShow, overallDetailsToShow,
1000l * (delayBetweenAutoAdvancesValue == null ? 0l : delayBetweenAutoAdvancesValue.longValue()),
/* showAddedScores */ showAddedScoresCheckBox.getValue().booleanValue(),
/* showOverallColumnWithNumberOfRacesSailedPerCompetitor */ showOverallColumnWithNumberOfRacesSailedPerCompetitorCheckBox
.getValue().booleanValue(),
showCompetitorSailIdColumnheckBox.getValue(), showCompetitorFullNameColumnCheckBox.getValue(),
isCompetitorNationalityColumnVisible.getValue(), showRaceRankColumn.getValue());
SettingsDefaultValuesUtils.keepDefaults(initialSettings, newSettings);
return newSettings;
}
@Override
public Widget getAdditionalWidget(DataEntryDialog<?> dialog) {
FlowPanel dialogPanel = new FlowPanel();
dialogPanel.ensureDebugId("LeaderboardSettingsPanel");
dialogPanel.add(createOverallDetailPanel(dialog));
dialogPanel.add(createRaceDetailPanel(dialog));
dialogPanel.add(createRaceStartAnalysisPanel(dialog));
dialogPanel.add(createLegDetailsPanel(dialog));
dialogPanel.add(createManeuverDetailsPanel(dialog));
dialogPanel.add(createTimingDetailsPanel(dialog));
return dialogPanel;
}
@Override
protected FlowPanel createOverallDetailPanel(DataEntryDialog<?> dialog) {
FlowPanel detailPanel = super.createOverallDetailPanel(dialog);
CheckBox checkbox = createCheckbox(dialog, stringMessages.showRaceRankColumn(), initialSettings.isShowRaceRankColumn(), null);
detailPanel.add(checkbox);
return detailPanel;
}
@Override
public Validator<SingleRaceLeaderboardSettings> getValidator() {
return new Validator<SingleRaceLeaderboardSettings>() {
@Override
public String getErrorMessage(SingleRaceLeaderboardSettings valueToValidate) {
final String result;
if (valueToValidate.getLegDetailsToShow().isEmpty()) {
result = stringMessages.selectAtLeastOneLegDetail();
} else if (valueToValidate.getDelayBetweenAutoAdvancesInMilliseconds() < 1000) {
result = stringMessages.chooseUpdateIntervalOfAtLeastOneSecond();
} else {
result = null;
}
return result;
}
};
}
}
@@ -1135,7 +1135,7 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
String addRaces(); String addRaces();
String withNamePrefix(); String withNamePrefix();
String pleaseSelectASeriesFirst(); String pleaseSelectASeriesFirst();
String upcommingEventStartsInDays(@PluralCount(DefaultRule_0_1_2_n.class) int days); String upcomingEventStartsInDays(@PluralCount(DefaultRule_0_1_2_n.class) int days);
String sharingMailTooltip(); String sharingMailTooltip();
String sharingTwitterTooltip(); String sharingTwitterTooltip();
String sharingFacebookTooltip(); String sharingFacebookTooltip();
@@ -1837,7 +1837,7 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
String userProfileSettingsTabDescription(); String userProfileSettingsTabDescription();
String userSettingsFilter(); String userSettingsFilter();
String requiresRegattaRaceAndLeaderboard(); String requiresRegattaRaceAndLeaderboard();
String couldNotFindRaceInRegatte(String raceName, String regattaName); String couldNotFindRaceInRegatta(String raceName, String regattaName);
String algorithmTimeOutText(); String algorithmTimeOutText();
String mixedLegText(); String mixedLegText();
String pathCanvasOverlayTitle(int numPoints, String distance, String date); String pathCanvasOverlayTitle(int numPoints, String distance, String date);
@@ -1101,9 +1101,9 @@ leaderboardGroupsOfSelectedEvent=Leaderboard Groups Assigned to Event
addRaces=Add races addRaces=Add races
withNamePrefix=with name prefix withNamePrefix=with name prefix
pleaseSelectASeriesFirst=Please select a series first. pleaseSelectASeriesFirst=Please select a series first.
upcommingEventStartsInDays=in {0,number} days upcomingEventStartsInDays=in {0,number} days
upcommingEventStartsInDays[one]=tomorrow upcomingEventStartsInDays[one]=tomorrow
upcommingEventStartsInDays[none]=today upcomingEventStartsInDays[none]=today
sharingMailTooltip=Share by mail sharingMailTooltip=Share by mail
sharingTwitterTooltip=Share on Twitter sharingTwitterTooltip=Share on Twitter
sharingFacebookTooltip=Share on Facebook sharingFacebookTooltip=Share on Facebook
@@ -1817,10 +1817,10 @@ settingsRemoved=Default settings restored
settingsRemovedError=Could not restore default settings settingsRemovedError=Could not restore default settings
userSettingsFilter=Settings filter userSettingsFilter=Settings filter
requiresRegattaRaceAndLeaderboard=This page requires a valid regatta name, race name and leaderboard name. requiresRegattaRaceAndLeaderboard=This page requires a valid regatta name, race name and leaderboard name.
couldNotFindRaceInRegatte=Could not obtain a race with name {0} for a regatta with name {1} couldNotFindRaceInRegatta=Could not obtain a race with name {0} for a regatta with name {1}
algorithmTimeOutText=out-of-bounds algorithmTimeOutText=out-of-bounds
mixedLegText=ambiguous wind mixedLegText=ambiguous wind
pathCanvasOverlayTitle=Path at {0} points. {1} nmi in {2} pathCanvasOverlayTitle=Path at {0} points. {1}NM in {2}
windSpeedInKnots=Wind Speed in Knots windSpeedInKnots=Wind Speed in Knots
activeFilters=Active Filter(s): {0} activeFilters=Active Filter(s): {0}
errorLoadingRegattasForLeaderboardGroup=Error trying to load corresponding regattas for leaderboard group {0}: {1} errorLoadingRegattasForLeaderboardGroup=Error trying to load corresponding regattas for leaderboard group {0}: {1}
@@ -694,7 +694,6 @@ selectedCompetitors=Ausgewählte Teilnehmer
filterNothing=Nichts filtern filterNothing=Nichts filtern
topNCompetitorsByRaceRank=Wettfahrt Top {0} topNCompetitorsByRaceRank=Wettfahrt Top {0}
topNCompetitorsByTotalRank=Gesamt Top {0} topNCompetitorsByTotalRank=Gesamt Top {0}
showHiddenRaces=Rennen im Status HIDDEN anzeigen
simulator=Simulator simulator=Simulator
optionsBar=Auswahlleiste optionsBar=Auswahlleiste
simulateButton=Prognose simulateButton=Prognose
@@ -766,7 +765,7 @@ explainConnectionsToMaster=Verbindungen zu einem Master (dieser Server ist eine
explainNoConnectionsToMaster=Es sind keine Verbindungen zu einem Master Server konfiguriert. explainNoConnectionsToMaster=Es sind keine Verbindungen zu einem Master Server konfiguriert.
explainNoConnectionsFromReplicas=Es sind keine Verbindugen von Replicas registriert. explainNoConnectionsFromReplicas=Es sind keine Verbindugen von Replicas registriert.
stopConnectionToMaster=Replikation anhalten stopConnectionToMaster=Replikation anhalten
stoppAllReplicas=Verbindung zu allen Replicas abbrechen stopAllReplicas=Verbindung zu allen Replicas abbrechen
warningServerIsReplica=ACHTUNG: Dieser Server ist als Replica konfiguriert. Vermeiden Sie alle Operationen! warningServerIsReplica=ACHTUNG: Dieser Server ist als Replica konfiguriert. Vermeiden Sie alle Operationen!
dropReplicaConnection=Verbindung abbrechen dropReplicaConnection=Verbindung abbrechen
timePanelName=Zeitregler timePanelName=Zeitregler
@@ -1089,9 +1088,9 @@ leaderboardGroupsOfSelectedEvent=Der Veranstaltung zugewiesene Ranglisten-Gruppe
addRaces=Wettfahrten hinzufügen addRaces=Wettfahrten hinzufügen
withNamePrefix=mit Namenspräfix withNamePrefix=mit Namenspräfix
pleaseSelectASeriesFirst=Bitte zuerst eine Serie auswählen. pleaseSelectASeriesFirst=Bitte zuerst eine Serie auswählen.
upcommingEventStartsInDays=in {0,number} Tagen upcomingEventStartsInDays=in {0,number} Tagen
upcommingEventStartsInDays[one]=morgen upcomingEventStartsInDays[one]=morgen
upcommingEventStartsInDays[none]=heute upcomingEventStartsInDays[none]=heute
sharingMailTooltip=Per Mail teilen sharingMailTooltip=Per Mail teilen
sharingTwitterTooltip=Auf Twitter teilen sharingTwitterTooltip=Auf Twitter teilen
sharingFacebookTooltip=Auf Facebook teilen sharingFacebookTooltip=Auf Facebook teilen
@@ -1220,7 +1219,7 @@ active=Aktiv
scoringSchemeHighPointEssOverallDescription=High Point System, der Gewinner eines Acts erhält 10 Punkte, der Zweite 9 und so weiter. scoringSchemeHighPointEssOverallDescription=High Point System, der Gewinner eines Acts erhält 10 Punkte, der Zweite 9 und so weiter.
timeBetweenRaceStartAndCompetitorStartInSeconds=Startverzug timeBetweenRaceStartAndCompetitorStartInSeconds=Startverzug
timeBetweenRaceStartAndCompetitorStartInSecondsTooltip=Zeit seit dem Start der Wettfahrt, nach der der Teilnehmer die Startmarke passiert hat. Negative Werte suggerieren einen Frühstart. timeBetweenRaceStartAndCompetitorStartInSecondsTooltip=Zeit seit dem Start der Wettfahrt, nach der der Teilnehmer die Startmarke passiert hat. Negative Werte suggerieren einen Frühstart.
useInternalAlgorithmus=Internen Algorithmus für Tonnenumrundungen verwenden useInternalAlgorithm=Internen Algorithmus für Tonnenumrundungen verwenden
editMarkPassings=Tonnenumrundungen editieren editMarkPassings=Tonnenumrundungen editieren
editMarkPositions=Tonnenpositionen editieren editMarkPositions=Tonnenpositionen editieren
removeFixedPassings=Gesetze Umrundungszeit entfernen removeFixedPassings=Gesetze Umrundungszeit entfernen
@@ -1361,7 +1360,7 @@ timeOnTimeFactorTooltip=Zeit-auf-Zeit Faktor; tatsächlich gesegelte Zeit wird f
timeOnDistanceAllowanceInSecondsPerNauticalMileTooltip=Zeit-auf-Distanz Zuteilung in Sekunden pro Seemeile;\ndie gesegelte Distanz wird mit diesem Wert multipliziert, und die sich ergebende Zeit wird von der (ggf. per ToT-Faktor angepassten) Zeit subtrahiert timeOnDistanceAllowanceInSecondsPerNauticalMileTooltip=Zeit-auf-Distanz Zuteilung in Sekunden pro Seemeile;\ndie gesegelte Distanz wird mit diesem Wert multipliziert, und die sich ergebende Zeit wird von der (ggf. per ToT-Faktor angepassten) Zeit subtrahiert
calculatedTimeTraveled=Berechnete Zeit calculatedTimeTraveled=Berechnete Zeit
calculatedTimeTraveledTooltip=Berechnete Zeit anhand Teilnehmer-Handicap\nauf der Grundlage von Zeit seit Rennstart und zurückgelegter Distanz calculatedTimeTraveledTooltip=Berechnete Zeit anhand Teilnehmer-Handicap\nauf der Grundlage von Zeit seit Rennstart und zurückgelegter Distanz
raceCalcluatedTimeAtEstimatedArrivalAtCompetitorFarthestAheadInSeconds=Ber.Zeit@Führender raceCalculatedTimeAtEstimatedArrivalAtCompetitorFarthestAheadInSeconds=Ber.Zeit@Führender
raceCalculatedTimeAtEstimatedArrivalAtCompetitorFarthestAheadInSecondsTooltip=Berechnete Zeit bei erwarteter Ankunft am derzeit absolut in Führung liegenden Teilnehmers;\nSchätzung basierend auf durchschnittlichem VMG im aktuellen Bahnschenkel und gleicher verrechneter Geschwindigket wie der absolut in Führung liegende Teilnehmer\nfür alle nachfolgenden Bahnschenkel raceCalculatedTimeAtEstimatedArrivalAtCompetitorFarthestAheadInSecondsTooltip=Berechnete Zeit bei erwarteter Ankunft am derzeit absolut in Führung liegenden Teilnehmers;\nSchätzung basierend auf durchschnittlichem VMG im aktuellen Bahnschenkel und gleicher verrechneter Geschwindigket wie der absolut in Führung liegende Teilnehmer\nfür alle nachfolgenden Bahnschenkel
sailorInfo=Segler Infos sailorInfo=Segler Infos
sailorInfoLongText=Offizielle Ergebnisse, Proteste,\nNotice Board, Segler-Wetter: sailorInfoLongText=Offizielle Ergebnisse, Proteste,\nNotice Board, Segler-Wetter:
@@ -1420,7 +1419,7 @@ videosCount[one]={0,number} Video
photosCount={0,number} Bilder photosCount={0,number} Bilder
photosCount[one]={0,number} Bild photosCount[one]={0,number} Bild
eventsHaveTakenPlace={0} Veranstaltungen haben stattgefunden eventsHaveTakenPlace={0} Veranstaltungen haben stattgefunden
eventsHaveTakenPlace[one]=Eine Veranstaltung hat stattgefunden eventsHaveTakenPlace[one]= Eine Veranstaltung hat stattgefunden
raceOffice=Wettfahrtleitung raceOffice=Wettfahrtleitung
analyze=Untersuche analyze=Untersuche
dataMiningSettings=Data Mining Einstellungen dataMiningSettings=Data Mining Einstellungen
@@ -1446,8 +1445,8 @@ groupAverageAscending=Gruppe Durchschnitt (Aufsteigend)
groupAverageDescending=Gruppe Durchschnitt (Absteigend) groupAverageDescending=Gruppe Durchschnitt (Absteigend)
groupMedianAscending=Gruppe Median (Aufsteigend) groupMedianAscending=Gruppe Median (Aufsteigend)
groupMedianDescending=Gruppe Median (Absteigend) groupMedianDescending=Gruppe Median (Absteigend)
resultsFoundForSearch={0,number} Ergebnisse gefunden für ''{1}'' resultsFoundForSearch= {0,number} Ergebnisse gefunden für ''{1}''
resultsFoundForSearch[one]={0,number} Ergebnis gefunden für ''{1}'' resultsFoundForSearch[one]= {0,number} Ergebnis gefunden für ''{1}''
runPredefinedQuery=Vordefinierte Abfrage ausführen runPredefinedQuery=Vordefinierte Abfrage ausführen
selectPredefinedQuery=Vordefinierte Abfrage auswählen selectPredefinedQuery=Vordefinierte Abfrage auswählen
predefinedQueryRunner=Vordefinierte Abfrageverarbeiter predefinedQueryRunner=Vordefinierte Abfrageverarbeiter
@@ -1681,7 +1680,7 @@ mainEventTitle=Die letzten Veranstaltungen aus der Segelwelt
mainMediaSubtitle=Hier gibt es die aktuellsten und schönsten Eindrücke aus deiner beliebtesten Segelveranstaltung. mainMediaSubtitle=Hier gibt es die aktuellsten und schönsten Eindrücke aus deiner beliebtesten Segelveranstaltung.
mainMediaTitle=Fotografen lieben Segeln mainMediaTitle=Fotografen lieben Segeln
mainMediaVideosSubtitle=Tauche ein in die Welt des Segelns und besuche auch die anderen Veranstaltungen für mehr Videos. mainMediaVideosSubtitle=Tauche ein in die Welt des Segelns und besuche auch die anderen Veranstaltungen für mehr Videos.
mainMediaVideosTitle=Die Letzten Videoeinträge mainMediaVideosTitle= Die Letzten Videoeinträge
searchResultHeaderButton=Suche searchResultHeaderButton=Suche
searchResultHeaderLabel=Deine Suche searchResultHeaderLabel=Deine Suche
searchResultHeaderPlaceholder=Suchbegriff eingeben searchResultHeaderPlaceholder=Suchbegriff eingeben
@@ -1834,6 +1833,32 @@ errorStartingTracking=Konnte das Tracking nicht starten {0}: {1}
errorLoadingLeaderBoardByEvent=Konnte das Leaderboard nicht laden. Das Event konnte nicht zur Regatta zugeordnet werden, oder es existiert kein getracktes Rennen. errorLoadingLeaderBoardByEvent=Konnte das Leaderboard nicht laden. Das Event konnte nicht zur Regatta zugeordnet werden, oder es existiert kein getracktes Rennen.
errorLoadingEvent=Konnte das Event mit der folgenden ID nicht laden {0} : {1} errorLoadingEvent=Konnte das Event mit der folgenden ID nicht laden {0} : {1}
errorLoadingRegattaStructure=Konnte die Regatta für das Event mit der folgenden ID nicht laden {0} : {1} errorLoadingRegattaStructure=Konnte die Regatta für das Event mit der folgenden ID nicht laden {0} : {1}
showXYDiagram=Zeige XYDiagramm an
xyDiagram=XYDiagramm
windSpeedInKnots=Windgeschwindigkeit in Knoten
warningSettingFixedPassing=Der Überquerungs-Zeitpunkt {0} für den Wegpunkt kann nicht vor der des voherigen oder nach der des nachfolgenden Wegpunktes sein
setTrackingTimesDescription=Start und Ende für das Tracking des Rennens setzen
selectRaces=Rennen auswählen
pleaseSelectAtLeastOneRegatta=Bitte mindestes eine Regatta auswählen
requiresRegattaRaceAndLeaderboard=Diese Seite benötigt einen Regattanamen, einen Rennnamen und einen Leaderboardnamen
regattaOverviewConfiguration=Konfiguration der Regatta-Übersicht
pathCanvasOverlayTitle=Weg bei {0} Punkten. {1}SM in {2}
noStarttimeAnnouncedYet=Unbestimmt
simulationLegendMixedLegText=Mehrdeutiger Wind
mediaDateFormatError=Ungültiges Datumsformat. Benutze: {0}
legMiddleWindSourceTypeTooltip=Kombinierter Wind am Mittelpunkt einer Kursmittellinie
legMiddleWindSourceTypeName=Mitte eines Bahnschenkels
lastUpperFlag=Obere Flagge
lastLowerFlag=Untere Flagge
id=Id
firstRaceIsNonDiscardableCarryForward=Started mit nicht streichbarem Übertrag
couldNotFindRaceInRegatta=Konnte ein Rennen mit den Namen {0} für die Regatta mit den Namen {1} nicht finden
confidence=Konfidenz
boatSpeed=Bootsgeschwindigkeit
basedOn=basierend auf
asLink=Als Link
algorithmTimeOutText=ausserhalb der Limits
activeFilters=Aktive Filter: {0}
nothingUpcoming=Es sind keine weiteren Rennen geplant nothingUpcoming=Es sind keine weiteren Rennen geplant
estimatedDistance=Geschätzte Distanz estimatedDistance=Geschätzte Distanz
estimatedTime=Geschätzte Renndauer estimatedTime=Geschätzte Renndauer
@@ -1090,9 +1090,9 @@ leaderboardGroupsOfSelectedEvent=Grupos de tablas de clasificación asignados a
addRaces=Añadir carreras addRaces=Añadir carreras
withNamePrefix=con prefijo de nombre withNamePrefix=con prefijo de nombre
pleaseSelectASeriesFirst=Seleccione primero una serie pleaseSelectASeriesFirst=Seleccione primero una serie
upcommingEventStartsInDays=en {0,number} días upcomingEventStartsInDays=en {0,number} días
upcommingEventStartsInDays[one]=mañana upcomingEventStartsInDays[one]=mañana
upcommingEventStartsInDays[none]=hoy upcomingEventStartsInDays[none]=hoy
sharingMailTooltip=Compartir por correo sharingMailTooltip=Compartir por correo
sharingTwitterTooltip=Compartir en Twitter sharingTwitterTooltip=Compartir en Twitter
sharingFacebookTooltip=Compartir en Facebook sharingFacebookTooltip=Compartir en Facebook
@@ -1540,7 +1540,7 @@ theDeletionOfThisFix=La supresión de esta fijación no es posible actualmente.
loadingMarkFixes=Cargando fijaciones de marca… loadingMarkFixes=Cargando fijaciones de marca…
fixSuccessfullyAdded=Fijación añadida con éxito. fixSuccessfullyAdded=Fijación añadida con éxito.
fixPositionSuccessfullyEdited=Posición de fijación tratada con éxito. fixPositionSuccessfullyEdited=Posición de fijación tratada con éxito.
fixSuccessfullyRemoved=Fijación eliminada con éxito. fixSuccessfullyRemoved=Fijación eliminada con éxito. Elimine la carrera e inicie de nuevo su rastreo para que la eliminación surta efecto.
dragToChangePosition=Arrastrar para modificar posición\nClic con el botón derecho para ver menú para borrar dragToChangePosition=Arrastrar para modificar posición\nClic con el botón derecho para ver menú para borrar
moveFix=Desplazar fijación moveFix=Desplazar fijación
manage2SailEvent=Evento de Manage2Sail manage2SailEvent=Evento de Manage2Sail
@@ -1789,3 +1789,56 @@ unknownLeaderboardType=Tipo de tabla de clasificación {0} desconocido
selectCompetitorsToEliminate=Seleccionar competidores a eliminar selectCompetitorsToEliminate=Seleccionar competidores a eliminar
trackedRaceAlreadyLinked=La carrera ya se ha vinculado a una columna de la carrera. ¿Desea realmente modificar el enlace? trackedRaceAlreadyLinked=La carrera ya se ha vinculado a una columna de la carrera. ¿Desea realmente modificar el enlace?
reallyRemoveSeries=¿Desea realmente eliminar la serie "{0}"? Nota: todos los logs de las columnas de carrera anexas también se eliminarán de forma permanente. reallyRemoveSeries=¿Desea realmente eliminar la serie "{0}"? Nota: todos los logs de las columnas de carrera anexas también se eliminarán de forma permanente.
settingsId=ID de opciones
documentSettingsId=ID de opciones de documento
settingsForId=Opciones para ID ''{0}''
userProfileSettingsTabDescription=Las opciones del usuario se generan mediante los diálogos de opciones que se encuentran en varios puntos de la página. Esta vista muestra todas sus opciones agrupadas de una manera técnica para los usuarios expertos. Tenga en cuenta que las entradas eliminadas no se pueden restablecer, por lo que tenga precaución al utilizarlas.
resetToDefault=Reinicializar a valores por defecto
resetToDefaultInProgress=Reinicializando...
settingsRemoved=Opciones por defecto restablecidas
settingsRemovedError=No se han podido restablecer las opciones por defecto
userSettingsFilter=Filtro de opciones
requiresRegattaRaceAndLeaderboard=Esta página requiere un nombre de regata, un nombre de carrera y un nombre de tabla de clasificación válidos.
couldNotFindRaceInRegatte=No se ha podido obtener la carrera con el nombre {0} para la regata con el nombre {1}
algorithmTimeOutText=fuera de límites
mixedLegText=viento ambiguo
pathCanvasOverlayTitle=Ruta a {0} puntos. {1} millas naúticas en {2}
windSpeedInKnots=Velocidad del viento en nudos
activeFilters=Activar filtro(s): {0}
errorLoadingRegattasForLeaderboardGroup=Error al intentar cargar las regatas correspondientes para el grupo de tablas de clasificación {0}: {1}
errorLoadingLeaderBoardGroup=Error al intentar cargar el grupo de tablas de clasificación {0}: {1}
errorLoadingLeaderBoardGroups=Error al intentar obtener los datos: {0}
errorServletCall=Llamada servlet a servicio de simulador fallida\n {0}
errorReceivingWindPattern=Error al restablecer los patrones de viento {0}
errorLoadingBoatClasses=Error al inicializar las clases de embarcación\r\n {0}
errorLoadingLegInformation=Error al leer la información sobre los tramos\r\n {0}
errorLoadingRaceNames=Error al leer la información sobre las carreras\r\n {0}
errorLoadingCompetitors=Error al leer la información sobre el competidor\r\n {0}
errorLoadingTotalTime=Error al leer el tiempo total\r\n {0}
errorUpdatingCarriedPoints=Error al intentar actualizar el valor de transporte para el competidor {0} en la tabla de clasificación {1}: {2} \nEs posible que tenga que refrescar la vista.
errorUpdatingLeaderboardScore=Error al intentar actualizar la corrección de puntuación para el competidor {0} en la tabla de clasificación {1} para la carrera {2} : {3} \nEs posible que tenga que refrescar la vista.
errorUpdatingLeaderboardScoreCorrection=Error al intentar actualizar la corrección de puntuación para: {0} \nEs posible que tenga que refrescar la vista.
errorUpdatingMaxPointsReason=Error al intentar actualizar la razón de puntos máximos para el competidor {0} en la tabla de clasificación {1} : {2} \nEs posible que tenga que refrescar la vista.
errorUpdatingDisplayNames=Error al intentar actualizar el nombre de visualización para el competidor {0} en la tabla de clasificación {1}: {2} \nEs posible que tenga que refrescar la vista.
reportError=Error al grabar la información de la corrección de puntuación: {0}
errorGettingScoreCorrectionProvider=Error al obtener los proveedores de la corrección de puntuación: {0}
errorTryingToUnsupressCompetitor=Error al intentar anular la eliminación del competidor {0}
errorLoadingReducedDimensionsMapedByLevel=Error al obtener las dimensiones de la cadena de recuperación del servidor: {0}
errorFetchingDimensionData=Error al obtener los valores de dimensión de {0} : {1}
errorFetchingStatistics=Error al obtener las estadísticas disponibles desde el servidor: {0}
errorFetchingAggregators=Error al obtener los agregadores disponibles desde el servidor: {0}
errorLoadingDataRetrieverChainDefinitions=Error al recuperar las DataRetrieverChainDefinitions disponibles: {0}
errorFetchingComponentsChangedTimepoint=Error al obtener la fecha modificada de los componentes a partir del servidor: {0}
errorRunningQuery=Error al ejecutar la consulta: {0}
errorReadingWindFixes=Error al leer las correcciones de viento {0}
errorAddingWindFixForRace=Error al añadir una corrección de viento para la carrera {0}: {1}
errorSettingStartTime=Error al fijar la fecha de inicio recibida: {0}
errorStoppingRaceTracking=Excepción al intentar parar el rastreo de las carreras {0}: {1}
errorRemovingRace=Excepción al intentar eliminar las carreras {0}: {1}
errorLoadingRegattas=Error al intentar cargar regatas {0}: {1}
errorUpdatingRegatta=Error al intentar actualizar regata {0} : {1}
errorLoadingRaceLog=No se ha podido indicar rastreo de RaceLog: {0}
errorStartingTracking=Error al iniciar el rastreo {0}: {1}
errorLoadingLeaderBoardByEvent=Error al intentar cargar la tabla de clasificación. O bien el evento no se ha podido asociar con la regata o no existen carreras rastreadas.
errorLoadingEvent=Error al cargar el evento con ID {0} : {1}
errorLoadingRegattaStructure=Error al intentar cargar regatas para el evento con ID {0} : {1}
@@ -1059,7 +1059,7 @@ pleaseSelectAnItemToMapTo=Sélectionnez un élément auquel mapper l''appareil.
device=Appareil device=Appareil
timeRange=Intervalle de temps timeRange=Intervalle de temps
closeTimeRange=Fermer extrémité ouverte de l''intervalle de temps closeTimeRange=Fermer extrémité ouverte de l''intervalle de temps
setClosingTimePoint=Définir une heure de fin pour l''intervalle de temps ouvert setClosingTimePoint=Définir la fin de l''intervalle de temps ouvert
startOfTimeRangeMustLieBeforeEnd=Le début de l''intervalle de temps doit se situer avant sa fin. startOfTimeRangeMustLieBeforeEnd=Le début de l''intervalle de temps doit se situer avant sa fin.
overallProgress=Progression générale overallProgress=Progression générale
eventOverview=Synthèse de la manifestation eventOverview=Synthèse de la manifestation
@@ -1090,9 +1090,9 @@ leaderboardGroupsOfSelectedEvent=Groupe de palmarès affectés à la manifestati
addRaces=Ajouter des courses addRaces=Ajouter des courses
withNamePrefix=avec préfixe de nom withNamePrefix=avec préfixe de nom
pleaseSelectASeriesFirst=Sélectionnez d''abord une série. pleaseSelectASeriesFirst=Sélectionnez d''abord une série.
upcommingEventStartsInDays=dans {0,number} jours upcomingEventStartsInDays=dans {0,number} jours
upcommingEventStartsInDays[one]=demain upcomingEventStartsInDays[one]=demain
upcommingEventStartsInDays[none]=aujourd''hui upcomingEventStartsInDays[none]=aujourd''hui
sharingMailTooltip=Partager par e-mail sharingMailTooltip=Partager par e-mail
sharingTwitterTooltip=Partager sur Twitter sharingTwitterTooltip=Partager sur Twitter
sharingFacebookTooltip=Partager sur Facebook sharingFacebookTooltip=Partager sur Facebook
@@ -1520,7 +1520,7 @@ serverURLInvalid=Saisissez une URL de serveur valide.
serverURLEmpty=URL de serveur vide serverURLEmpty=URL de serveur vide
marks=Marques marks=Marques
addNewFix=Ajouter nouveau point addNewFix=Ajouter nouveau point
pleaseSelectOtherTimepoint=Sélectionnez un autre point dans le temps. Il existe déjà un point pour le point dans le temps du curseur de temps. pleaseSelectOtherTimepoint=Sélectionnez une autre heure. Il existe déjà un point à cette heure du curseur de temps.
confirmMove=Confirmer déplacement confirmMove=Confirmer déplacement
confirmNewFix=Confirmer nouveau point confirmNewFix=Confirmer nouveau point
selectAFixPositionBy=Sélectionnez une position de point en faisant glisser la carte. Ensuite, confirmez ou annulez à l''aide des boutons ci-dessous. selectAFixPositionBy=Sélectionnez une position de point en faisant glisser la carte. Ensuite, confirmez ou annulez à l''aide des boutons ci-dessous.
@@ -1540,7 +1540,7 @@ theDeletionOfThisFix=La suppression de ce point n''est pas possible actuellement
loadingMarkFixes=Chargement de points de marques... loadingMarkFixes=Chargement de points de marques...
fixSuccessfullyAdded=Ajout du point réussi. fixSuccessfullyAdded=Ajout du point réussi.
fixPositionSuccessfullyEdited=Modification de la position du point réussie. fixPositionSuccessfullyEdited=Modification de la position du point réussie.
fixSuccessfullyRemoved=Suppression du point réussie. fixSuccessfullyRemoved=Suppression du point réussie. Supprimez la course et lancez de nouveau le suivi de cette course pour que la suppression du point prenne effet.
dragToChangePosition=Glissez pour modifier la position.\nClic droit pour ouvrir le menu permettant la suppression. dragToChangePosition=Glissez pour modifier la position.\nClic droit pour ouvrir le menu permettant la suppression.
moveFix=Déplacer point moveFix=Déplacer point
manage2SailEvent=Manifestation Manage2Sail manage2SailEvent=Manifestation Manage2Sail
@@ -1554,7 +1554,7 @@ standaloneServer=Serveur autonome
send=envoyer... send=envoyer...
passId=ID de passage passId=ID de passage
createdAt=Créé le createdAt=Créé le
logicalTimepoint=Période logique logicalTimepoint=Heure logique
info=Infos info=Infos
windFixes=Points vent windFixes=Points vent
twoXMark=2x marque twoXMark=2x marque
@@ -1789,3 +1789,56 @@ unknownLeaderboardType=Type de palmarès {0} inconnu
selectCompetitorsToEliminate=Sélectionner des concurrents à éliminer selectCompetitorsToEliminate=Sélectionner des concurrents à éliminer
trackedRaceAlreadyLinked=La course est déjà liée à une colonne de course. Voulez-vous vraiment modifier le lien ? trackedRaceAlreadyLinked=La course est déjà liée à une colonne de course. Voulez-vous vraiment modifier le lien ?
reallyRemoveSeries=Voulez-vous vraiment supprimer la série "{0}" ? Note : tous les journaux de la course seront également supprimés de manière permanente pour cette course. reallyRemoveSeries=Voulez-vous vraiment supprimer la série "{0}" ? Note : tous les journaux de la course seront également supprimés de manière permanente pour cette course.
settingsId=ID d''options
documentSettingsId=ID d''options du document
settingsForId=Options pour l''ID ''{0}''
userProfileSettingsTabDescription=Les options utilisateur sont générées dans des boîtes de dialogues pour options que vous trouverez à de nombreux endroits sur la page. Cette vue montre toutes vos options regroupées pour les mettre techniquement à disposition des utilisateurs de référence. Soyez prudent : les entrées supprimées ne peuvent pas être restaurées.
resetToDefault=Réinitialiser sur les valeurs par défaut
resetToDefaultInProgress=Réinitialisation en cours...
settingsRemoved=Options par défaut restaurées
settingsRemovedError=Impossible de restaurer les options par défaut
userSettingsFilter=Filtre d''options
requiresRegattaRaceAndLeaderboard=Cette page requiert un nom de régate, un nom de course et un nom de palmarès valides.
couldNotFindRaceInRegatte=Impossible de trouver une course nommée {0} pour une régate nommée {1}.
algorithmTimeOutText=Hors portée
mixedLegText=Vent ambigu
pathCanvasOverlayTitle=Chemin à {0} points. {1} nmi dans {2}
windSpeedInKnots=Vitesse du vent en noeuds
activeFilters=Filtre(s) actif(s) : {0}
errorLoadingRegattasForLeaderboardGroup=Erreur lors de la tentative de chargement des régates correspondantes pour le groupe de palmarès {0} : {1}
errorLoadingLeaderBoardGroup=Erreur lors de la tentative de chargement du groupe de palmarès {0} : {1}
errorLoadingLeaderBoardGroups=Erreur lors de la tentative d''obtention des données : {0}
errorServletCall=Échec de l''appel servlet du service de simulation\n {0}
errorReceivingWindPattern=Erreur lors de la récupération des modèles de vent {0}
errorLoadingBoatClasses=Échec d''initialisation des catégories de bateaux !\r\n {0}s
errorLoadingLegInformation=Échec de lecture des informations sur les portions de parcours !\r\n {0}
errorLoadingRaceNames=Échec de lecture des informations sur les courses !\r\n {0}
errorLoadingCompetitors=Échec de lecture des informations sur le(s) concurrent(s) !\r\n {0}
errorLoadingTotalTime=Échec de lecture du temps total\r\n {0}
errorUpdatingCarriedPoints=Erreur lors de la tentative de mise à jour de la valeur de report pour le concurrent {0} dans le palmarès {1} : {2} \nVeuillez rafraîchir la vue.
errorUpdatingLeaderboardScore=Erreur lors de la tentative de mise à jour de la correction des scores pour le concurrent {0} dans le palmarès {1} pour la course {2} : {3} \nVeuillez rafraîchir la vue.
errorUpdatingLeaderboardScoreCorrection=Erreur lors de la tentative de mise à jour de la correction des scores pour : {0} \nVeuillez rafraîchir la vue.
errorUpdatingMaxPointsReason=Erreur lors de la tentative de mise à jour du motif de points max. pour le concurrent {0} dans le palmarès {1} : {2} \nVeuillez rafraîchir la vue.
errorUpdatingDisplayNames=Erreur lors de la tentative de mise à jour du nom d''affichage pour le concurrent {0} dans le palmarès {1} : {2} \nVeuillez rafraîchir la vue.
reportError=Erreur lors de la sauvegarde des informations de correction des scores : {0}
errorGettingScoreCorrectionProvider=Erreur lors de l''accès aux fournisseurs de correction des scores : {0}
errorTryingToUnsupressCompetitor=Erreur lors de la tentative d''annulation de suppression du concurrent {0}
errorLoadingReducedDimensionsMapedByLevel=Erreur lors de l''accès aux dimensions de la chaîne de récupération du serveur : {0}
errorFetchingDimensionData=Erreur lors de l''accès aux valeurs de dimension de {0} : {1}
errorFetchingStatistics=Erreur lors de l''accès aux statistiques disponibles du serveur : {0}
errorFetchingAggregators=Erreur lors de l''accès aux agrégateurs disponibles du serveur : {0}
errorLoadingDataRetrieverChainDefinitions=Erreur lors de la récupération des définitions DataRetrieverChainDefinitions disponibles : {0}
errorFetchingComponentsChangedTimepoint=Erreur lors de la récupération de l''heure modifiée du composant du serveur : {0}
errorRunningQuery=Erreur lors de l''exécution de la requête : {0}
errorReadingWindFixes=Erreur lors de la lecture des points vent {0}
errorAddingWindFixForRace=Erreur lors de l''ajout d''un point vent pour la course {0} : {1}
errorSettingStartTime=Erreur lors du paramétrage de l''heure de départ reçue : {0}
errorStoppingRaceTracking=Exception lors de la tentative d''arrêt du suivi des courses {0} : {1}
errorRemovingRace=Exception lors de la tentative de suppression des courses {0} : {1}
errorLoadingRegattas=Erreur lors de la tentative de chargement des régates {0} : {1}
errorUpdatingRegatta=Erreur lors de la tentative de mise à jour des régates {0} : {1}
errorLoadingRaceLog=Marquage pour suivi par journal de la course impossible : {0}
errorStartingTracking=Échec du lancement du suivi {0} : {1}
errorLoadingLeaderBoardByEvent=Erreur lors de la tentative de chargement du palmarès. Soit l''événement n''a pas pu être associé à la régate, soit aucune course suivie n''existe.
errorLoadingEvent=Erreur lors de la tentative de chargement de l''événement ayant l''ID {0} : {1}
errorLoadingRegattaStructure=Erreur lors de la tentative de chargement de régates pour l''événement ayant l''ID {0} : {1}
@@ -1090,9 +1090,9 @@ leaderboardGroupsOfSelectedEvent=イベントに割当済のリーダーボー
addRaces=レース追加 addRaces=レース追加
withNamePrefix=- 名称接頭辞: withNamePrefix=- 名称接頭辞:
pleaseSelectASeriesFirst=最初にシリーズを選択してください pleaseSelectASeriesFirst=最初にシリーズを選択してください
upcommingEventStartsInDays={0,number} 日間 upcomingEventStartsInDays={0,number} 日間
upcommingEventStartsInDays[one]=明日 upcomingEventStartsInDays[one]=明日
upcommingEventStartsInDays[none]=今日 upcomingEventStartsInDays[none]=今日
sharingMailTooltip=メールによるシェア sharingMailTooltip=メールによるシェア
sharingTwitterTooltip=Twitter でシェア sharingTwitterTooltip=Twitter でシェア
sharingFacebookTooltip=Facebook でシェア sharingFacebookTooltip=Facebook でシェア
@@ -1540,7 +1540,7 @@ theDeletionOfThisFix=このフィックスの削除は現在は可能であり
loadingMarkFixes=フィックスのマークをロードしています... loadingMarkFixes=フィックスのマークをロードしています...
fixSuccessfullyAdded=フィックスが追加されました。 fixSuccessfullyAdded=フィックスが追加されました。
fixPositionSuccessfullyEdited=フィックス位置が編集されました。 fixPositionSuccessfullyEdited=フィックス位置が編集されました。
fixSuccessfullyRemoved=フィックスが削除されました。 fixSuccessfullyRemoved=フィックスが削除されました。レースを削除し、それに対する追跡を改めて開始して削除を有効にしてください。
dragToChangePosition=ドラッグして位置を変更\n右クリックして削除するメニューを取得 dragToChangePosition=ドラッグして位置を変更\n右クリックして削除するメニューを取得
moveFix=フィックスを移動 moveFix=フィックスを移動
manage2SailEvent=Manage2Sail イベント manage2SailEvent=Manage2Sail イベント
@@ -1789,3 +1789,56 @@ unknownLeaderboardType=未知のリーダーボードタイプ {0}
selectCompetitorsToEliminate=予選敗退の競技者を選択 selectCompetitorsToEliminate=予選敗退の競技者を選択
trackedRaceAlreadyLinked=このレースはすでにレース列にリンクされています。リンクを変更しますか。 trackedRaceAlreadyLinked=このレースはすでにレース列にリンクされています。リンクを変更しますか。
reallyRemoveSeries=シリーズ ''{0}'' を削除しますか。注記: 付属しているレース列のレースログもすべて永続的に削除されます。 reallyRemoveSeries=シリーズ ''{0}'' を削除しますか。注記: 付属しているレース列のレースログもすべて永続的に削除されます。
settingsId=設定 ID
documentSettingsId=文書設定 ID
settingsForId=ID ''{0}'' の設定
userProfileSettingsTabDescription=ユーザ設定は、このページの多くの場所にあるダイアログを設定することによって生成されます。このビューには、収集したすべての設定がパワーユーザ向けの技術的な方法で表示されます。削除したエントリは復元できないため、注意して使用してください。
resetToDefault=デフォルトに戻す
resetToDefaultInProgress=リセット中です...
settingsRemoved=デフォルト設定が復元されました
settingsRemovedError=デフォルト設定を復元できませんでした
userSettingsFilter=設定フィルタ
requiresRegattaRaceAndLeaderboard=このページには有効なレガッタ名、レース名、およびリーダーボード名が必要です。
couldNotFindRaceInRegatte=名前 {1} のレガッタに対して名前 {0} のレースが取得できませんでした
algorithmTimeOutText=禁止区域
mixedLegText=不明瞭な風
pathCanvasOverlayTitle={0} ポイントでの経路。{1} 海里 ({2})
windSpeedInKnots=風速 (knt)
activeFilters=有効なフィルター: {0}
errorLoadingRegattasForLeaderboardGroup=リーダーボードグループ {0} に関連するレガッタをロードしようとしてエラーが発生: {1}
errorLoadingLeaderBoardGroup=リーダーボードグループ {0} をロードしようとしてエラーが発生: {1}
errorLoadingLeaderBoardGroups=データを取得しようとしてエラーが発生: {0}
errorServletCall=シミュレータサービスへのサーブレット呼出に失敗しました\n {0}
errorReceivingWindPattern=風パターン {0} の取得中にエラーが発生しました
errorLoadingBoatClasses=艇種の初期化に失敗しました\r\n {0}s
errorLoadingLegInformation=レグ情報の読込に失敗しました\r\n {0}
errorLoadingRaceNames=レース情報の読込に失敗しました\r\n {0}
errorLoadingCompetitors=競技者情報の読込に失敗しました\r\n {0}
errorLoadingTotalTime=合計時間の読込に失敗しました\r\n {0}
errorUpdatingCarriedPoints=リーダーボード {1} において競技者 {0} のキャリー値を更新しようとしてエラーが発生: {2} \nビューをリフレッシュする必要がある場合があります。
errorUpdatingLeaderboardScore=レース {2} に対してリーダーボード {1} において競技者 {0} の得点修正を更新しようとしてエラーが発生: {3} \nビューをリフレッシュする必要がある場合があります。");
errorUpdatingLeaderboardScoreCorrection={0} の得点修正を更新しようとしてエラーが発生\nビューをリフレッシュする必要がある場合があります。");
errorUpdatingMaxPointsReason=リーダーボード {1} において競技者 {0} の最大ポイント理由を更新しようとしてエラーが発生: {2} \nビューをリフレッシュする必要がある場合があります。
errorUpdatingDisplayNames=リーダーボード {1} において競技者 {0} の表示名を更新しようとしてエラーが発生: {2} \nビューをリフレッシュする必要がある場合があります。
reportError=得点修正情報の保存でエラーが発生: {0}
errorGettingScoreCorrectionProvider=得点修正プロバイダの取得でエラーが発生: {0}
errorTryingToUnsupressCompetitor=競技者 {0} を非表示解除しようとしてエラーが発生しました
errorLoadingReducedDimensionsMapedByLevel=サーバからの取得チェーンの次元のフェッチでエラーが発生: {0}
errorFetchingDimensionData={0} の次元値のフェッチでエラーが発生: {1}
errorFetchingStatistics=サーバからの利用可能な統計のフェッチでエラーが発生: {0}
errorFetchingAggregators=サーバからの利用可能な集計のフェッチでエラーが発生: {0}
errorLoadingDataRetrieverChainDefinitions=利用可能な DataRetrieverChainDefinitions の取得でエラーが発生: {0}
errorFetchingComponentsChangedTimepoint=サーバからのコンポーネント変更済タイムポイントのフェッチでエラーが発生: {0}
errorRunningQuery=クエリの実行でエラーが発生: {0}
errorReadingWindFixes=風フィックス {0} の読込でエラーが発生しました
errorAddingWindFixForRace=レース {0} に対する風フィックスの追加でエラーが発生: {1}
errorSettingStartTime=受け取ったスタート時刻の設定でエラーが発生: {0}
errorStoppingRaceTracking=レース {0} の追跡を停止しようとして例外が発生: {1}
errorRemovingRace=レース {0} を削除しようとして例外が発生: {1}
errorLoadingRegattas=レガッタ {0} をロードしようとしてエラーが発生: {1}
errorUpdatingRegatta=レガッタ {0} を更新しようとしてエラーが発生: {1}
errorLoadingRaceLog=RaceLog 追跡を表示できませんでした: {0}
errorStartingTracking={0} の追跡の開始に失敗: {1}
errorLoadingLeaderBoardByEvent=リーダーボードをロードしようとしてエラーが発生しました。イベントをレガッタに関連付けることができなかったか、追跡されているレースがありません。
errorLoadingEvent=ID {0} のイベントをロードしようとしてエラーが発生: {1}
errorLoadingRegattaStructure=ID {0} のイベントに対してレガッタをロードしようとしてエラーが発生: {1}
@@ -1090,9 +1090,9 @@ leaderboardGroupsOfSelectedEvent=Grupos de painéis de classificação atribuíd
addRaces=Adicionar corridas addRaces=Adicionar corridas
withNamePrefix=com prefixo do nome withNamePrefix=com prefixo do nome
pleaseSelectASeriesFirst=Selecione primeiro uma série. pleaseSelectASeriesFirst=Selecione primeiro uma série.
upcommingEventStartsInDays=em {0,número} dias upcomingEventStartsInDays=em {0,número} dias
upcommingEventStartsInDays[one]=amanhã upcomingEventStartsInDays[one]=amanhã
upcommingEventStartsInDays[none]=hoje upcomingEventStartsInDays[none]=hoje
sharingMailTooltip=Compartilhar por e-mail sharingMailTooltip=Compartilhar por e-mail
sharingTwitterTooltip=Compartilhar no Twitter sharingTwitterTooltip=Compartilhar no Twitter
sharingFacebookTooltip=Compartilhar no Facebook sharingFacebookTooltip=Compartilhar no Facebook
@@ -1539,8 +1539,8 @@ deleteFix=Eliminar ponto fixo
theDeletionOfThisFix=A eliminação deste ponto fixo não é possível atualmente theDeletionOfThisFix=A eliminação deste ponto fixo não é possível atualmente
loadingMarkFixes=Carregando pontos fixos da marca... loadingMarkFixes=Carregando pontos fixos da marca...
fixSuccessfullyAdded=Ponto fixo adicionado com êxito. fixSuccessfullyAdded=Ponto fixo adicionado com êxito.
fixPositionSuccessfullyEdited=Posição fixa processada com êxito. fixPositionSuccessfullyEdited=Ponto fixo processado com êxito.
fixSuccessfullyRemoved=Ponto fixo removido com êxito. fixSuccessfullyRemoved=Ponto fixo removido com êxito. Remova a corrida e inicie seu rastreamento novamente para a remoção ter efeito.
dragToChangePosition=Arrastar para modificar a posição\nClicar com o botão direito do mouse para obter o menu para eliminação dragToChangePosition=Arrastar para modificar a posição\nClicar com o botão direito do mouse para obter o menu para eliminação
moveFix=Reposicionar ponto fixo moveFix=Reposicionar ponto fixo
manage2SailEvent=Evento de Manage2Sail manage2SailEvent=Evento de Manage2Sail
@@ -1789,3 +1789,56 @@ unknownLeaderboardType=Tipo de painel de classificação desconhecido {0}
selectCompetitorsToEliminate=Selecionar competidores a eliminar selectCompetitorsToEliminate=Selecionar competidores a eliminar
trackedRaceAlreadyLinked=A corrida é sempre ligada a uma coluna da corrida. Modificar o link? trackedRaceAlreadyLinked=A corrida é sempre ligada a uma coluna da corrida. Modificar o link?
reallyRemoveSeries=Você quer realmente remover a série ''{0}''? Nota: todos os registros da corrida para a coluna da corrida anexada também serão removidos definitivamente! reallyRemoveSeries=Você quer realmente remover a série ''{0}''? Nota: todos os registros da corrida para a coluna da corrida anexada também serão removidos definitivamente!
settingsId=ID de configurações
documentSettingsId=ID de configuração do documento
settingsForId=Configurações para ID ''{0}''
userProfileSettingsTabDescription=As configurações dos usuários são geradas por diálogos de configurações que podem ser encontrados em vários locais da página. Esta visão exibe todas as suas configurações coletadas de uma forma técnica para usuários avançados. Tenha em atenção que as entradas removidas não podem ser restauradas, por isso utilize-as com cuidado.
resetToDefault=Reinicializar para padrão
resetToDefaultInProgress=Na reinicialização...
settingsRemoved=Configurações padrão restauradas
settingsRemovedError=Não foi possível restaurar configurações padrão
userSettingsFilter=Filtro de configurações
requiresRegattaRaceAndLeaderboard=Esta página necessita de um nome de regata, um nome de corrida e um nome de painel de classificação válidos.
couldNotFindRaceInRegatte=Não foi possível obter uma corrida com o nome {0} para uma regata com o nome {1}
algorithmTimeOutText=fora do alcance
mixedLegText=vento indefinido
pathCanvasOverlayTitle=Caminho em {0} pontos {1} mn em {2}
windSpeedInKnots=Velocidade do vento em nós
activeFilters=Filtros ativos: {0}
errorLoadingRegattasForLeaderboardGroup=Erro ao tentar carregar regatas correspondentes para grupo de painéis de classificação {0}: {1}
errorLoadingLeaderBoardGroup=Erro ao tentar carregar grupo de painéis de classificação {0}: {1}
errorLoadingLeaderBoardGroups=Erro ao tentar obter os dados: {0}
errorServletCall=Chamada de servlet falhada para serviço de simulador\n {0}
errorReceivingWindPattern=Erro ao recuperar padrões de vento {0}
errorLoadingBoatClasses=Falha ao inicializar classes de barcos!\r\n {0}s
errorLoadingLegInformation=Falha ao ler informação de pernas!\r\n {0}
errorLoadingRaceNames=Falha ao ler informação de corridas!\r\n {0}
errorLoadingCompetitors=Falha ao ler informação do competidor!\r\n {0}
errorLoadingTotalTime=Falha ao ler tempo total\r\n {0}
errorUpdatingCarriedPoints=Erro ao tentar atualizar valor de transferência para competidor {0} no painel de classificação {1}: {2} \nPoderá ser necessário atualizar sua visão.
errorUpdatingLeaderboardScore=Erro ao tentar atualizar correção de pontuação para competidor {0} no painel de classificação {1} para corrida {2}: {3} \nPoderá ser necessário atualizar sua visão.");
errorUpdatingLeaderboardScoreCorrection=Erro ao tentar atualizar correção de pontuação para: {0} \nPoderá ser necessário atualizar sua visão.");
errorUpdatingMaxPointsReason=Erro ao tentar atualizar motivo para máximo de pontos para competidor {0} no painel de classificação {1}: {2} \nPoderá ser necessário atualizar sua visão.
errorUpdatingDisplayNames=Erro ao tentar atualizar nome de exibição para competidor {0} no painel de classificação {1}: {2} \nPoderá ser necessário atualizar sua visão.
reportError=Erro ao gravar informação de correção de pontuação: {0}
errorGettingScoreCorrectionProvider=Erro ao chamar fornecedores de correção de pontuação: {0}
errorTryingToUnsupressCompetitor=Erro ao tentar anular a supressão do competidor {0}
errorLoadingReducedDimensionsMapedByLevel=Erro ao chamar dimensões da cadeia de recuperação do servidor: {0}
errorFetchingDimensionData=Erro ao chamar os valores de dimensão de {0}: {1}
errorFetchingStatistics=Erro ao chamar as estatísticas disponíveis do servidor: {0}
errorFetchingAggregators=Erro ao chamar os agregadores disponíveis do servidor: {0}
errorLoadingDataRetrieverChainDefinitions=Erro ao recuperar as definições da cadeia do recuperador de dados disponíveis: {0}
errorFetchingComponentsChangedTimepoint=Erro ao chamar data/hora modificada de componentes do servidor: {0}
errorRunningQuery=Erro ao executar consulta: {0}
errorReadingWindFixes=Erro ao ler pontos fixos de vento {0}
errorAddingWindFixForRace=Erro ao adicionar um ponto fixo de vento para corrida {0}: {1}
errorSettingStartTime=Erro ao definir a hora de início recebida: {0}
errorStoppingRaceTracking=Exceção ao tentar parar o rastreamento de corridas {0}: {1}
errorRemovingRace=Exceção ao tentar remover corridas {0}: {1}
errorLoadingRegattas=Erro ao tentar carregar regatas {0}: {1}
errorUpdatingRegatta=Erro ao tentar atualizar regata {0}: {1}
errorLoadingRaceLog=Não foi possível denotar para rastreamento RaceLog: {0}
errorStartingTracking=Falha ao iniciar rastreamento {0}: {1}
errorLoadingLeaderBoardByEvent=Erro ao tentar carregar painel de classificação. Ou não foi possível associar o evento à regata ou não existem corridas rastreadas.
errorLoadingEvent=Erro ao tentar carregar evento com o ID {0}: {1}
errorLoadingRegattaStructure=Erro ao tentar carregar regatas para evento com o ID {0}: {1}
@@ -1090,9 +1090,9 @@ leaderboardGroupsOfSelectedEvent=Присвоенные событию груп
addRaces=Добавить гонки addRaces=Добавить гонки
withNamePrefix=с префиксом названия withNamePrefix=с префиксом названия
pleaseSelectASeriesFirst=Сначала выберите серию. pleaseSelectASeriesFirst=Сначала выберите серию.
upcommingEventStartsInDays=Через {0,number} дн. upcomingEventStartsInDays=Через {0,number} дн.
upcommingEventStartsInDays[one]=завтра upcomingEventStartsInDays[one]=завтра
upcommingEventStartsInDays[none]=сегодня upcomingEventStartsInDays[none]=сегодня
sharingMailTooltip=Поделиться по почте sharingMailTooltip=Поделиться по почте
sharingTwitterTooltip=Поделиться в Twitter sharingTwitterTooltip=Поделиться в Twitter
sharingFacebookTooltip=Поделиться в Facebook sharingFacebookTooltip=Поделиться в Facebook
@@ -1540,7 +1540,7 @@ theDeletionOfThisFix=Удалить этот замер сейчас невоз
loadingMarkFixes=Загрузка замеров отметки... loadingMarkFixes=Загрузка замеров отметки...
fixSuccessfullyAdded=Замер успешно добавлен. fixSuccessfullyAdded=Замер успешно добавлен.
fixPositionSuccessfullyEdited=Позиция замера успешно изменена. fixPositionSuccessfullyEdited=Позиция замера успешно изменена.
fixSuccessfullyRemoved=Замер успешно удален. fixSuccessfullyRemoved=Замер успешно удален. Чтобы удаление вступило в силу, удалите гонку и начните отслеживание для нее заново.
dragToChangePosition=Позиция изменяется перетаскиванием\nДля удаления вызовите меню щелчком правой кнопкой мыши dragToChangePosition=Позиция изменяется перетаскиванием\nДля удаления вызовите меню щелчком правой кнопкой мыши
moveFix=Переместить замер moveFix=Переместить замер
manage2SailEvent=Событие Manage2Sail manage2SailEvent=Событие Manage2Sail
@@ -1789,3 +1789,56 @@ unknownLeaderboardType=Неизвестный тип таблицы лидеро
selectCompetitorsToEliminate=Выберите участников для исключения selectCompetitorsToEliminate=Выберите участников для исключения
trackedRaceAlreadyLinked=Эта гонка уже связана со столбцом гонки. Действительно изменить связь? trackedRaceAlreadyLinked=Эта гонка уже связана со столбцом гонки. Действительно изменить связь?
reallyRemoveSeries=Действительно удалить серии ''{0}''? Примечание: все журналы для вложенных столбцов гонки также будут окончательно удалены! reallyRemoveSeries=Действительно удалить серии ''{0}''? Примечание: все журналы для вложенных столбцов гонки также будут окончательно удалены!
settingsId=Ид. настроек
documentSettingsId=Ид. настроек документа
settingsForId=Настройки для ид. ''{0}''
userProfileSettingsTabDescription=Пользовательские настройки генерируются диалогами настроек, расположенными во многих местах страницы. Здесь отображено техническое представление всех собранных настроек для ключевых пользователей. Соблюдайте осторожность, так как восстановить удаленные записи невозможно.
resetToDefault=Восстановить настройки по умолчанию
resetToDefaultInProgress=Выполняется сброс...
settingsRemoved=Восстановлены настройки по умолчанию
settingsRemovedError=Не удалось восстановить настройки по умолчанию
userSettingsFilter=Фильтр настроек
requiresRegattaRaceAndLeaderboard=Для этой страницы требуются действительные названия регаты, гонки и таблицы лидеров.
couldNotFindRaceInRegatte=Не удалось получить гонку с названием {0} для регаты с названием {1}
algorithmTimeOutText=вне ограничений
mixedLegText=неопределенный ветер
pathCanvasOverlayTitle=Путь по {0} точкам. {1} мор. миль в {2}
windSpeedInKnots=Скорость ветра в узлах
activeFilters=Активные фильтры: {0}
errorLoadingRegattasForLeaderboardGroup=Ошибка при попытке загрузить соответствующие регаты для группы таблиц лидеров {0}: {1}
errorLoadingLeaderBoardGroup=Ошибка при попытке загрузить группу таблиц лидеров {0}: {1}
errorLoadingLeaderBoardGroups=Ошибка при попытке получить данные: {0}
errorServletCall=Сбой вызова сервлета к SimulatorService\n {0}
errorReceivingWindPattern=Ошибка при получении ветровых режимов {0}
errorLoadingBoatClasses=Не удалось инициализировать классы лодок.\r\n {0}s
errorLoadingLegInformation=Не удалось считать информацию об отрезках.\r\n {0}
errorLoadingRaceNames=Не удалось считать информацию о гонках.\r\n {0}
errorLoadingCompetitors=Не удалось считать информацию об участнике\r\n {0}
errorLoadingTotalTime=Не удалось считать общее время\r\n {0}
errorUpdatingCarriedPoints=Ошибка при попытке обновить значение переноса для участника {0} в таблице лидеров {1}: {2} \nМожет потребоваться обновить представление.
errorUpdatingLeaderboardScore=Ошибка при попытке обновить корректировку оценки для участника {0} в таблице лидеров {1}: {3} \nМожет потребоваться обновить представление. {2}
errorUpdatingLeaderboardScoreCorrection=Ошибка при попытке обновить корректировку оценки для: {0} \nМожет потребоваться обновить представление.
errorUpdatingMaxPointsReason=Ошибка при попытке обновить причину максимальных баллов для участника {0} в таблице лидеров {1}: {2} \nМожет потребоваться обновить представление.
errorUpdatingDisplayNames=Ошибка при попытке обновить отображаемое имя для участника {0} в таблице лидеров {1}: {2} \nМожет потребоваться обновить представление.
reportError=Ошибка при сохранении информации о корректировке оценки: {0}
errorGettingScoreCorrectionProvider=Ошибка при получении поставщиков корректировки оценки: {0}
errorTryingToUnsupressCompetitor=Ошибка при попытке отменить подавление участника {0}
errorLoadingReducedDimensionsMapedByLevel=Ошибка при вызове измерений цепочки извлечения с сервера: {0}
errorFetchingDimensionData=Ошибка при вызове значений измерений {0} : {1}
errorFetchingStatistics=Ошибка при вызове доступной статистики с сервера: {0}
errorFetchingAggregators=Ошибка при вызове доступных агрегаторов с сервера: {0}
errorLoadingDataRetrieverChainDefinitions=Ошибка при вызове доступных определений цепочек извлечения данных: {0}
errorFetchingComponentsChangedTimepoint=Ошибка при вызове отметки времени изменения компонентов с сервера: {0}
errorRunningQuery=Ошибка при выполнении запроса: {0}
errorReadingWindFixes=Ошибка при считывании замеров ветра {0}
errorAddingWindFixForRace=Ошибка при добавлении замера ветра для гонки {0}: {1}
errorSettingStartTime=Ошибка при установке полученного времени старта: {0}
errorStoppingRaceTracking=Исключение при попытке остановить отслеживание гонок {0}: {1}
errorRemovingRace=Исключение при попытке удалить гонки {0}: {1}
errorLoadingRegattas=Ошибка при попытке загрузить регаты {0}: {1}
errorUpdatingRegatta=Ошибка при попытке обновить регату {0} : {1}
errorLoadingRaceLog=Не удалось отменить отслеживание журнала гонки: {0}
errorStartingTracking=Не удалось начать отслеживание {0}: {1}
errorLoadingLeaderBoardByEvent=Ошибка при попытке загрузить таблицу лидеров. Не удалось связать событие с регатой либо нет отслеживаемых гонок.
errorLoadingEvent=Ошибка при попытке загрузить событие с ид. {0} : {1}
errorLoadingRegattaStructure=Ошибка при попытке загрузить регаты для события с ид. {0} : {1}
@@ -1090,18 +1090,18 @@ leaderboardGroupsOfSelectedEvent=分配到活动的积分榜分组
addRaces=添加比赛轮次 addRaces=添加比赛轮次
withNamePrefix=含名称前缀 withNamePrefix=含名称前缀
pleaseSelectASeriesFirst=请先选择系列。 pleaseSelectASeriesFirst=请先选择系列。
upcommingEventStartsInDays={0,number} 天后 upcomingEventStartsInDays={0,number} 天后
upcommingEventStartsInDays[one]=明天 upcomingEventStartsInDays[one]=明天
upcommingEventStartsInDays[none]=今天 upcomingEventStartsInDays[none]=今天
sharingMailTooltip=通过邮件分享 sharingMailTooltip=通过邮件分享
sharingTwitterTooltip=在 Twitter 上分享 sharingTwitterTooltip=在 Twitter 上分享
sharingFacebookTooltip=在 Facebook 上分享 sharingFacebookTooltip=在 Facebook 上分享
#String eventSharingShortText(String eventName, String venue, String dateString); #String eventSharingShortText(String eventName, String venue, String dateString);
eventSharingShortText={2}{1}中的{0} eventSharingShortText={2}{1}中的{0}
#String eventSharingLongText(String eventName, String venue, String dateString, String url); #String eventSharingLongText(String eventName, String venue, String dateString, String url);
eventSharingLongText=我要在{2}分享{0}中的{1}。 详情: \n{3} eventSharingLongText=我要分享{2}{1}的{0}。详情:\n{3}
#String seriesSharingLongText(String seriesName, String url); #String seriesSharingLongText(String seriesName, String url);
seriesSharingLongText=我要分享系列赛{0}。 详情: {1} seriesSharingLongText=我要分享系列赛{0}。详情:{1}
#String seriesSharingShortText(String seriesName); #String seriesSharingShortText(String seriesName);
seriesSharingShortText={0} seriesSharingShortText={0}
competitorsAnalytics=参赛队分析 competitorsAnalytics=参赛队分析
@@ -1540,7 +1540,7 @@ theDeletionOfThisFix=目前无法删除此修复。
loadingMarkFixes=正在加载标志修复... loadingMarkFixes=正在加载标志修复...
fixSuccessfullyAdded=已成功添加修复。 fixSuccessfullyAdded=已成功添加修复。
fixPositionSuccessfullyEdited=已成功编辑修复位置。 fixPositionSuccessfullyEdited=已成功编辑修复位置。
fixSuccessfullyRemoved=已成功移除修复。 fixSuccessfullyRemoved=已成功移除修复。请移除比赛轮次,并重新开始跟踪,以便移除生效。
dragToChangePosition=拖动更改位置\n右键点击获取菜单以删除 dragToChangePosition=拖动更改位置\n右键点击获取菜单以删除
moveFix=移动修复 moveFix=移动修复
manage2SailEvent=Manage2Sail 活动 manage2SailEvent=Manage2Sail 活动
@@ -1789,3 +1789,56 @@ unknownLeaderboardType=积分榜类型{0}未知
selectCompetitorsToEliminate=选择要淘汰的参赛队 selectCompetitorsToEliminate=选择要淘汰的参赛队
trackedRaceAlreadyLinked=比赛轮次已链接到比赛轮次列。是否确定更改此链接? trackedRaceAlreadyLinked=比赛轮次已链接到比赛轮次列。是否确定更改此链接?
reallyRemoveSeries=是否确定移除系列赛 "{0}"?注意:随附比赛轮次列的所有比赛轮次日志也将永久移除! reallyRemoveSeries=是否确定移除系列赛 "{0}"?注意:随附比赛轮次列的所有比赛轮次日志也将永久移除!
settingsId=设置编号
documentSettingsId=文档设置编号
settingsForId=编号 ''{0}'' 的设置
userProfileSettingsTabDescription=用户设置由可在页面多个位置找到的设置对话生成。此视图以技术方式为高级用户显示收集的所有设置。请注意,移除的条目无法恢复,请谨慎使用。
resetToDefault=重置为默认值
resetToDefaultInProgress=正在重置...
settingsRemoved=默认设置已恢复
settingsRemovedError=无法恢复默认设置
userSettingsFilter=设置筛选器
requiresRegattaRaceAndLeaderboard=此页面需要有效的比赛名称、比赛轮次名称和积分榜名称。
couldNotFindRaceInRegatte=无法为名称为{1}的比赛获取名称为{0}的比赛轮次
algorithmTimeOutText=越界
mixedLegText=方向不定的风
pathCanvasOverlayTitle={0}点的路径。{2}为{1} nmi
windSpeedInKnots=风速(节)
activeFilters=有效的筛选器:{0}
errorLoadingRegattasForLeaderboardGroup=尝试为积分榜组{0}加载相应的比赛出错:{1}
errorLoadingLeaderBoardGroup=尝试加载积分榜组{0}出错:{1}
errorLoadingLeaderBoardGroups=尝试获取数据出错:{0}
errorServletCall=模拟器服务的 servlet 调用失败\n {0}
errorReceivingWindPattern=检索风力模式{0}出错
errorLoadingBoatClasses=船只级别初始化失败!\r\n {0}s
errorLoadingLegInformation=读取航段信息失败!\r\n {0}
errorLoadingRaceNames=读取比赛轮次信息失败!\r\n {0}
errorLoadingCompetitors=读取参赛队信息失败!\r\n {0}
errorLoadingTotalTime=读取总时间失败\r\n {0}
errorUpdatingCarriedPoints=尝试更新积分榜{1}中的参赛队{0}累计分值出错:{2} \n您可能需要刷新视图。
errorUpdatingLeaderboardScore=尝试更新比赛轮次{2}积分榜{1}中的参赛队{0}得分更正出错:{3} \n您可能需要刷新视图。
errorUpdatingLeaderboardScoreCorrection=尝试更新得分更正出错:{0} \n您可能需要刷新视图。
errorUpdatingMaxPointsReason=尝试更新积分榜{1}中的参赛队{0}最高分原因出错:{2} \n您可能需要刷新视图。
errorUpdatingDisplayNames=尝试更新积分榜{1}中的参赛队{0}显示名称出错:{2} \n您可能需要刷新视图。
reportError=保存得分更正信息出错:{0}
errorGettingScoreCorrectionProvider=获取得分更正提供方出错:{0}
errorTryingToUnsupressCompetitor=尝试取消禁止参赛队{0}出错
errorLoadingReducedDimensionsMapedByLevel=从服务器获取检索链的维度出错:{0}
errorFetchingDimensionData=获取{0}的维度值出错:{1}
errorFetchingStatistics=从服务器获取可用统计出错:{0}
errorFetchingAggregators=从服务器获取可用聚合器出错:{0}
errorLoadingDataRetrieverChainDefinitions=检索可用 DataRetrieverChainDefinitions 出错:{0}
errorFetchingComponentsChangedTimepoint=从服务器获取组件更改的时间点出错:{0}
errorRunningQuery=运行查询出错:{0}
errorReadingWindFixes=读取风力修复{0}出错
errorAddingWindFixForRace=添加比赛轮次{0}的风力修复出错:{1}
errorSettingStartTime=设置接收开始时间出错:{0}
errorStoppingRaceTracking=尝试停止跟踪比赛轮次{0}异常:{1}
errorRemovingRace=尝试移除比赛轮次{0}异常:{1}
errorLoadingRegattas=尝试加载比赛{0}出错:{1}
errorUpdatingRegatta=尝试更新比赛{0}出错:{1}
errorLoadingRaceLog=无法描述比赛轮次日志跟踪:{0}
errorStartingTracking=开始跟踪{0}失败:{1}
errorLoadingLeaderBoardByEvent=尝试加载积分榜出错。活动未与比赛关联或没有跟踪的比赛轮次。
errorLoadingEvent=尝试加载编号为{0}的活动出错:{1}
errorLoadingRegattaStructure=尝试为编号为{0}的活动加载比赛出错:{1}
@@ -87,7 +87,7 @@ import com.sap.sailing.gwt.ui.client.shared.racemap.BoundsUtil;
import com.sap.sailing.gwt.ui.client.shared.racemap.CourseMarkOverlay; import com.sap.sailing.gwt.ui.client.shared.racemap.CourseMarkOverlay;
import com.sap.sailing.gwt.ui.client.shared.racemap.FixOverlay; import com.sap.sailing.gwt.ui.client.shared.racemap.FixOverlay;
import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMap; import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMap;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel; import com.sap.sailing.gwt.ui.leaderboard.SingleRaceLeaderboardPanel;
import com.sap.sailing.gwt.ui.raceboard.SideBySideComponentViewer; import com.sap.sailing.gwt.ui.raceboard.SideBySideComponentViewer;
import com.sap.sailing.gwt.ui.shared.GPSFixDTO; import com.sap.sailing.gwt.ui.shared.GPSFixDTO;
import com.sap.sailing.gwt.ui.shared.GPSFixDTOWithSpeedWindTackAndLegType; import com.sap.sailing.gwt.ui.shared.GPSFixDTOWithSpeedWindTackAndLegType;
@@ -108,7 +108,7 @@ import com.sap.sse.gwt.client.shared.settings.ComponentContext;
public class EditMarkPositionPanel extends AbstractRaceChart<AbstractSettings> implements RequiresResize, SelectionChangeEvent.Handler { public class EditMarkPositionPanel extends AbstractRaceChart<AbstractSettings> implements RequiresResize, SelectionChangeEvent.Handler {
protected static final int FIX_OVERLAY_Z_ORDER = 230; protected static final int FIX_OVERLAY_Z_ORDER = 230;
private final RaceMap raceMap; private final RaceMap raceMap;
private final LeaderboardPanel leaderboardPanel; private final SingleRaceLeaderboardPanel leaderboardPanel;
private final MarksPanel marksPanel; private final MarksPanel marksPanel;
private Series markSeries; private Series markSeries;
private LinePlotOptions markSeriesPlotOptions; private LinePlotOptions markSeriesPlotOptions;
@@ -134,7 +134,7 @@ public class EditMarkPositionPanel extends AbstractRaceChart<AbstractSettings> i
private final RaceIdentifierToLeaderboardRaceColumnAndFleetMapper raceIdentifierToLeaderboardRaceColumnAndFleetMapper; private final RaceIdentifierToLeaderboardRaceColumnAndFleetMapper raceIdentifierToLeaderboardRaceColumnAndFleetMapper;
public EditMarkPositionPanel(Component<?> parent, ComponentContext<?> context, final RaceMap raceMap, public EditMarkPositionPanel(Component<?> parent, ComponentContext<?> context, final RaceMap raceMap,
final LeaderboardPanel leaderboardPanel, final SingleRaceLeaderboardPanel leaderboardPanel,
RegattaAndRaceIdentifier selectedRaceIdentifier, String leaderboardName, final StringMessages stringMessages, RegattaAndRaceIdentifier selectedRaceIdentifier, String leaderboardName, final StringMessages stringMessages,
SailingServiceAsync sailingService, Timer timer, TimeRangeWithZoomProvider timeRangeWithZoomProvider, SailingServiceAsync sailingService, Timer timer, TimeRangeWithZoomProvider timeRangeWithZoomProvider,
AsyncActionsExecutor asyncActionsExecutor, ErrorReporter errorReporter) { AsyncActionsExecutor asyncActionsExecutor, ErrorReporter errorReporter) {
@@ -35,7 +35,7 @@ public abstract class AbstractLeaderboardViewer<PL extends AbstractLeaderboardPe
protected static final ViewerToolbar RES = GWT.create(ViewerToolbar.class); protected static final ViewerToolbar RES = GWT.create(ViewerToolbar.class);
protected final StringMessages stringMessages; protected final StringMessages stringMessages;
private LeaderboardPanel leaderboardPanel; private LeaderboardPanel<?> leaderboardPanel;
protected final CompetitorSelectionModel competitorSelectionProvider; protected final CompetitorSelectionModel competitorSelectionProvider;
protected final AsyncActionsExecutor asyncActionsExecutor; protected final AsyncActionsExecutor asyncActionsExecutor;
@@ -63,12 +63,12 @@ public abstract class AbstractLeaderboardViewer<PL extends AbstractLeaderboardPe
RES.css().ensureInjected(); RES.css().ensureInjected();
} }
protected void init(LeaderboardPanel leaderboardPanel) { protected void init(LeaderboardPanel<?> leaderboardPanel) {
addChildComponent(leaderboardPanel); addChildComponent(leaderboardPanel);
this.leaderboardPanel = leaderboardPanel; this.leaderboardPanel = leaderboardPanel;
} }
public LeaderboardPanel getLeaderboardPanel() { public LeaderboardPanel<?> getLeaderboardPanel() {
return leaderboardPanel; return leaderboardPanel;
} }
@@ -62,7 +62,7 @@ public class ClassicLeaderboardStyle implements LeaderBoardStyle {
} }
@Override @Override
public void afterConstructorHook(FlowPanel contentPanel, LeaderboardPanel leaderboardPanel) { public void afterConstructorHook(FlowPanel contentPanel, LeaderboardPanel<?> leaderboardPanel) {
} }
@Override @Override
@@ -52,7 +52,7 @@ public abstract class ExpandableSortableColumn<C> extends LeaderboardSortableCol
private final LinkedList<Boolean> queuedToggleRequests; private final LinkedList<Boolean> queuedToggleRequests;
private boolean suppressSortingOnce; private boolean suppressSortingOnce;
private final LeaderboardPanel leaderboardPanel; private final LeaderboardPanel<?> leaderboardPanel;
private final Map<DetailType, AbstractSortableColumnWithMinMax<LeaderboardRowDTO, ?>> detailColumnsMap; private final Map<DetailType, AbstractSortableColumnWithMinMax<LeaderboardRowDTO, ?>> detailColumnsMap;
private final List<DetailType> detailSelection; private final List<DetailType> detailSelection;
@@ -71,7 +71,7 @@ public abstract class ExpandableSortableColumn<C> extends LeaderboardSortableCol
*/ */
private boolean expanded; private boolean expanded;
public ExpandableSortableColumn(LeaderboardPanel leaderboardPanel, boolean enableExpansion, Cell<C> cell, public ExpandableSortableColumn(LeaderboardPanel<?> leaderboardPanel, boolean enableExpansion, Cell<C> cell,
SortingOrder preferredSortingOrder, StringMessages stringConstants, String detailHeaderStyle, String detailColumnStyle, SortingOrder preferredSortingOrder, StringMessages stringConstants, String detailHeaderStyle, String detailColumnStyle,
List<DetailType> detailSelection, DisplayedLeaderboardRowsProvider displayedLeaderboardRowsProvider) { List<DetailType> detailSelection, DisplayedLeaderboardRowsProvider displayedLeaderboardRowsProvider) {
super(cell, preferredSortingOrder, displayedLeaderboardRowsProvider); super(cell, preferredSortingOrder, displayedLeaderboardRowsProvider);
@@ -87,12 +87,12 @@ public abstract class ExpandableSortableColumn<C> extends LeaderboardSortableCol
* override this method. * override this method.
*/ */
protected Map<DetailType, AbstractSortableColumnWithMinMax<LeaderboardRowDTO, ?>> getDetailColumnMap( protected Map<DetailType, AbstractSortableColumnWithMinMax<LeaderboardRowDTO, ?>> getDetailColumnMap(
LeaderboardPanel leaderboardPanel, StringMessages stringConstants, String detailHeaderStyle, LeaderboardPanel<?> leaderboardPanel, StringMessages stringConstants, String detailHeaderStyle,
String detailColumnStyle) { String detailColumnStyle) {
return Collections.emptyMap(); return Collections.emptyMap();
} }
protected LeaderboardPanel getLeaderboardPanel() { protected LeaderboardPanel<?> getLeaderboardPanel() {
return leaderboardPanel; return leaderboardPanel;
} }
@@ -7,7 +7,7 @@ import java.util.Map;
import com.sap.sailing.domain.common.dto.LeaderboardDTO; import com.sap.sailing.domain.common.dto.LeaderboardDTO;
import com.sap.sailing.domain.common.dto.RaceColumnDTO; import com.sap.sailing.domain.common.dto.RaceColumnDTO;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettings.RaceColumnSelectionStrategies; import com.sap.sailing.gwt.settings.client.leaderboard.RaceColumnSelectionStrategies;
/** /**
* An explicit selection of race columns. Requests to add to or clear the selection are respected. If an updated version * An explicit selection of race columns. Requests to add to or clear the selection are respected. If an updated version
@@ -17,7 +17,7 @@ import com.sap.sailing.domain.common.dto.LeaderboardDTO;
import com.sap.sailing.domain.common.dto.LeaderboardEntryDTO; import com.sap.sailing.domain.common.dto.LeaderboardEntryDTO;
import com.sap.sailing.domain.common.dto.LeaderboardRowDTO; import com.sap.sailing.domain.common.dto.LeaderboardRowDTO;
import com.sap.sailing.domain.common.dto.RaceColumnDTO; import com.sap.sailing.domain.common.dto.RaceColumnDTO;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettings.RaceColumnSelectionStrategies; import com.sap.sailing.gwt.settings.client.leaderboard.RaceColumnSelectionStrategies;
import com.sap.sailing.gwt.ui.client.RaceTimesInfoProvider; import com.sap.sailing.gwt.ui.client.RaceTimesInfoProvider;
import com.sap.sailing.gwt.ui.client.RaceTimesInfoProviderListener; import com.sap.sailing.gwt.ui.client.RaceTimesInfoProviderListener;
import com.sap.sailing.gwt.ui.shared.RaceTimesInfoDTO; import com.sap.sailing.gwt.ui.shared.RaceTimesInfoDTO;
@@ -161,9 +161,9 @@ public class LeaderboardEntryPoint extends AbstractSailingEntryPoint {
PerspectiveCompositeSettings<LeaderboardPerspectiveOwnSettings> defaultSettings) { PerspectiveCompositeSettings<LeaderboardPerspectiveOwnSettings> defaultSettings) {
configureWithSettings(defaultSettings, timer); configureWithSettings(defaultSettings, timer);
final LeaderboardViewer leaderboardViewer = new LeaderboardViewer(null, context, final MultiRaceLeaderboardViewer leaderboardViewer = new MultiRaceLeaderboardViewer(null, context,
rootComponentLifeCycle, defaultSettings, sailingService, new AsyncActionsExecutor(), rootComponentLifeCycle, defaultSettings, sailingService, new AsyncActionsExecutor(),
timer, null, leaderboardGroupName, leaderboardName, timer, leaderboardGroupName, leaderboardName,
LeaderboardEntryPoint.this, getStringMessages(), getActualChartDetailType(defaultSettings)); LeaderboardEntryPoint.this, getStringMessages(), getActualChartDetailType(defaultSettings));
createUi(leaderboardViewer, defaultSettings, timer, leaderboardContextDefinition); createUi(leaderboardViewer, defaultSettings, timer, leaderboardContextDefinition);
} }
@@ -255,8 +255,7 @@ public class LegColumn extends ExpandableSortableColumn<String> {
} }
} }
public LegColumn(LeaderboardPanel leaderboardPanel, String raceColumnName, int legIndex, public LegColumn(LeaderboardPanel<?> leaderboardPanel, String raceColumnName, int legIndex, SortingOrder preferredSortingOrder, StringMessages stringMessages,
SortingOrder preferredSortingOrder, StringMessages stringMessages,
List<DetailType> legDetailSelection, String headerStyle, String columnStyle, List<DetailType> legDetailSelection, String headerStyle, String columnStyle,
String detailHeaderStyle, String detailColumnStyle) { String detailHeaderStyle, String detailColumnStyle) {
super(leaderboardPanel, /* expandable */true /* all legs have details */, new TextCell(), preferredSortingOrder, super(leaderboardPanel, /* expandable */true /* all legs have details */, new TextCell(), preferredSortingOrder,
@@ -283,7 +282,7 @@ public class LegColumn extends ExpandableSortableColumn<String> {
@Override @Override
protected Map<DetailType, AbstractSortableColumnWithMinMax<LeaderboardRowDTO, ?>> getDetailColumnMap( protected Map<DetailType, AbstractSortableColumnWithMinMax<LeaderboardRowDTO, ?>> getDetailColumnMap(
LeaderboardPanel leaderboardPanel, StringMessages stringMessages, String detailHeaderStyle, LeaderboardPanel<?> leaderboardPanel, StringMessages stringMessages, String detailHeaderStyle,
String detailColumnStyle) { String detailColumnStyle) {
Map<DetailType, AbstractSortableColumnWithMinMax<LeaderboardRowDTO, ?>> result = new HashMap<>(); Map<DetailType, AbstractSortableColumnWithMinMax<LeaderboardRowDTO, ?>> result = new HashMap<>();
result.put(DetailType.DISTANCE_TRAVELED, result.put(DetailType.DISTANCE_TRAVELED,
@@ -85,7 +85,7 @@ public class ManeuverCountRaceColumn extends ExpandableSortableColumn<String> im
} }
} }
public ManeuverCountRaceColumn(LeaderboardPanel leaderboardPanel, RaceNameProvider raceNameProvider, public ManeuverCountRaceColumn(LeaderboardPanel<?> leaderboardPanel, RaceNameProvider raceNameProvider,
StringMessages stringConstants, List<DetailType> maneuverDetailSelection, String headerStyle, StringMessages stringConstants, List<DetailType> maneuverDetailSelection, String headerStyle,
String columnStylee, String detailHeaderStyle, String detailColumnStyle, DisplayedLeaderboardRowsProvider displayedLeaderboardRowsProvider) { String columnStylee, String detailHeaderStyle, String detailColumnStyle, DisplayedLeaderboardRowsProvider displayedLeaderboardRowsProvider) {
super(leaderboardPanel, /* expandable */true /* all legs have details */, new TextCell(), DetailType.NUMBER_OF_MANEUVERS.getDefaultSortingOrder(), super(leaderboardPanel, /* expandable */true /* all legs have details */, new TextCell(), DetailType.NUMBER_OF_MANEUVERS.getDefaultSortingOrder(),
@@ -235,7 +235,7 @@ public class ManeuverCountRaceColumn extends ExpandableSortableColumn<String> im
@Override @Override
protected Map<DetailType, AbstractSortableColumnWithMinMax<LeaderboardRowDTO, ?>> getDetailColumnMap( protected Map<DetailType, AbstractSortableColumnWithMinMax<LeaderboardRowDTO, ?>> getDetailColumnMap(
LeaderboardPanel leaderboardPanel, StringMessages stringMessages, String detailHeaderStyle, LeaderboardPanel<?> leaderboardPanel, StringMessages stringMessages, String detailHeaderStyle,
String detailColumnStyle) { String detailColumnStyle) {
Map<DetailType, AbstractSortableColumnWithMinMax<LeaderboardRowDTO, ?>> result = new HashMap<>(); Map<DetailType, AbstractSortableColumnWithMinMax<LeaderboardRowDTO, ?>> result = new HashMap<>();
result.put(DetailType.TACK, new FormattedDoubleDetailTypeColumn(DetailType.TACK, new NumberOfTacks(), detailHeaderStyle, detailColumnStyle, leaderboardPanel)); result.put(DetailType.TACK, new FormattedDoubleDetailTypeColumn(DetailType.TACK, new NumberOfTacks(), detailHeaderStyle, detailColumnStyle, leaderboardPanel));
@@ -7,9 +7,9 @@ import com.sap.sailing.domain.common.DetailType;
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier; import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardPanelLifecycle; import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardPanelLifecycle;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardPerspectiveOwnSettings; import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardPerspectiveOwnSettings;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettings;
import com.sap.sailing.gwt.settings.client.leaderboard.MetaLeaderboardPerspectiveLifecycle; import com.sap.sailing.gwt.settings.client.leaderboard.MetaLeaderboardPerspectiveLifecycle;
import com.sap.sailing.gwt.settings.client.leaderboard.MultiLeaderboardPanelLifecycle; import com.sap.sailing.gwt.settings.client.leaderboard.MultiRaceLeaderboardSettings;
import com.sap.sailing.gwt.settings.client.leaderboard.MultipleMultiLeaderboardPanelLifecycle;
import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel; import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel;
import com.sap.sailing.gwt.ui.client.SailingServiceAsync; import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sailing.gwt.ui.client.StringMessages;
@@ -63,7 +63,7 @@ public class MetaLeaderboardViewer extends AbstractLeaderboardViewer<MetaLeaderb
/** /**
* Cleanup one java8 suppliers can be used * Cleanup one java8 suppliers can be used
*/ */
init(new LeaderboardPanel(this, componentContext, sailingService, asyncActionsExecutor, init(new SingleRaceLeaderboardPanel(this, componentContext, sailingService, asyncActionsExecutor,
settings.findSettingsByComponentId(LeaderboardPanelLifecycle.ID), settings.findSettingsByComponentId(LeaderboardPanelLifecycle.ID),
preselectedRace != null, preselectedRace, competitorSelectionModel, timer, preselectedRace != null, preselectedRace, competitorSelectionModel, timer,
leaderboardGroupName, metaLeaderboardName, errorReporter, stringMessages, leaderboardGroupName, metaLeaderboardName, errorReporter, stringMessages,
@@ -87,7 +87,7 @@ public class MetaLeaderboardViewer extends AbstractLeaderboardViewer<MetaLeaderb
multiCompetitorChart.getElement().getStyle().setMarginTop(10, Unit.PX); multiCompetitorChart.getElement().getStyle().setMarginTop(10, Unit.PX);
multiCompetitorChart.getElement().getStyle().setMarginBottom(10, Unit.PX); multiCompetitorChart.getElement().getStyle().setMarginBottom(10, Unit.PX);
LeaderboardSettings leaderboardSettings = settings.findSettingsByComponentId(MultiLeaderboardPanelLifecycle.MID); MultiRaceLeaderboardSettings leaderboardSettings = settings.findSettingsByComponentId(MultipleMultiLeaderboardPanelLifecycle.MID);
if(leaderboardSettings == null) { if(leaderboardSettings == null) {
leaderboardSettings = lifecycle.getMultiLeaderboardPanelLifecycle().createDefaultSettings(); leaderboardSettings = lifecycle.getMultiLeaderboardPanelLifecycle().createDefaultSettings();
} }
@@ -95,7 +95,7 @@ public class MetaLeaderboardViewer extends AbstractLeaderboardViewer<MetaLeaderb
multiLeaderboardPanel = new MultiLeaderboardProxyPanel(this, componentContext, sailingService, multiLeaderboardPanel = new MultiLeaderboardProxyPanel(this, componentContext, sailingService,
metaLeaderboardName, metaLeaderboardName,
asyncActionsExecutor, timer, false /* isEmbedded */, asyncActionsExecutor, timer, false /* isEmbedded */,
preselectedLeaderboardName, preselectedRace, errorReporter, stringMessages, preselectedLeaderboardName, errorReporter, stringMessages,
perspectiveSettings.isShowRaceDetails(), perspectiveSettings.isAutoExpandLastRaceColumn(), perspectiveSettings.isShowRaceDetails(), perspectiveSettings.isAutoExpandLastRaceColumn(),
leaderboardSettings); leaderboardSettings);
multiLeaderboardPanel.setVisible(perspectiveSettings.isShowSeriesLeaderboards()); multiLeaderboardPanel.setVisible(perspectiveSettings.isShowSeriesLeaderboards());
@@ -18,10 +18,9 @@ import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.TabPanel; import com.google.gwt.user.client.ui.TabPanel;
import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget; import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.domain.common.RaceIdentifier;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettings;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettingsFactory; import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettingsFactory;
import com.sap.sailing.gwt.settings.client.leaderboard.MultiLeaderboardPanelLifecycle; import com.sap.sailing.gwt.settings.client.leaderboard.MultiRaceLeaderboardSettings;
import com.sap.sailing.gwt.settings.client.leaderboard.MultipleMultiLeaderboardPanelLifecycle;
import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel; import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel;
import com.sap.sailing.gwt.ui.client.LeaderboardUpdateListener; import com.sap.sailing.gwt.ui.client.LeaderboardUpdateListener;
import com.sap.sailing.gwt.ui.client.SailingServiceAsync; import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
@@ -40,9 +39,9 @@ import com.sap.sse.gwt.client.shared.settings.ComponentContext;
* A panel managing multiple {@link ClassicLeaderboardPanel}s (e.g. from a meta leaderboard) so that the user can switch between them. * A panel managing multiple {@link ClassicLeaderboardPanel}s (e.g. from a meta leaderboard) so that the user can switch between them.
* @author Frank * @author Frank
*/ */
public class MultiLeaderboardProxyPanel extends AbstractLazyComponent<LeaderboardSettings> implements TimeListener, SelectedLeaderboardChangeProvider { public class MultiLeaderboardProxyPanel extends AbstractLazyComponent<MultiRaceLeaderboardSettings> implements TimeListener, SelectedLeaderboardChangeProvider<MultiRaceLeaderboardPanel> {
private LeaderboardPanel selectedLeaderboardPanel; private MultiRaceLeaderboardPanel selectedLeaderboardPanel;
private FlowPanel selectedLeaderboardFlowPanel; private FlowPanel selectedLeaderboardFlowPanel;
private final StringMessages stringMessages; private final StringMessages stringMessages;
@@ -64,17 +63,17 @@ public class MultiLeaderboardProxyPanel extends AbstractLazyComponent<Leaderboar
private final boolean isEmbedded; private final boolean isEmbedded;
private final Set<LeaderboardUpdateListener> leaderboardUpdateListeners; private final Set<LeaderboardUpdateListener> leaderboardUpdateListeners;
private final Set<SelectedLeaderboardChangeListener> selectedLeaderboardChangeListeners; private final Set<SelectedLeaderboardChangeListener<MultiRaceLeaderboardPanel>> selectedLeaderboardChangeListeners;
private HashMap<String, LeaderboardSettings> contextStore; private HashMap<String, MultiRaceLeaderboardSettings> contextStore;
private LeaderboardSettings loadedSettings; private MultiRaceLeaderboardSettings loadedSettings;
public MultiLeaderboardProxyPanel(Component<?> parent, ComponentContext<?> context, public MultiLeaderboardProxyPanel(Component<?> parent, ComponentContext<?> context,
SailingServiceAsync sailingService, String metaLeaderboardName, SailingServiceAsync sailingService, String metaLeaderboardName,
AsyncActionsExecutor asyncActionsExecutor, AsyncActionsExecutor asyncActionsExecutor,
Timer timer, boolean isEmbedded, String preselectedLeaderboardName, RaceIdentifier preselectedRace, Timer timer, boolean isEmbedded, String preselectedLeaderboardName,
ErrorReporter errorReporter, StringMessages stringMessages, ErrorReporter errorReporter, StringMessages stringMessages,
boolean showRaceDetails, boolean autoExpandLastRaceColumn, boolean showRaceDetails, boolean autoExpandLastRaceColumn,
LeaderboardSettings settings) { MultiRaceLeaderboardSettings settings) {
super(parent, context); super(parent, context);
loadedSettings = settings; loadedSettings = settings;
@@ -97,7 +96,7 @@ public class MultiLeaderboardProxyPanel extends AbstractLazyComponent<Leaderboar
* This only stores the ContextSpecific settings, as they differ for all Leaderboards * This only stores the ContextSpecific settings, as they differ for all Leaderboards
*/ */
leaderboardUpdateListeners = new HashSet<LeaderboardUpdateListener>(); leaderboardUpdateListeners = new HashSet<LeaderboardUpdateListener>();
selectedLeaderboardChangeListeners = new HashSet<SelectedLeaderboardChangeListener>(); selectedLeaderboardChangeListeners = new HashSet<SelectedLeaderboardChangeListener<MultiRaceLeaderboardPanel>>();
contextStore = new HashMap<>(); contextStore = new HashMap<>();
} }
@@ -146,17 +145,17 @@ public class MultiLeaderboardProxyPanel extends AbstractLazyComponent<Leaderboar
} }
@Override @Override
public LeaderboardSettings getSettings() { public MultiRaceLeaderboardSettings getSettings() {
return selectedLeaderboardPanel.getSettings(); return selectedLeaderboardPanel.getSettings();
} }
@Override @Override
public SettingsDialogComponent<LeaderboardSettings> getSettingsDialogComponent(LeaderboardSettings settings) { public SettingsDialogComponent<MultiRaceLeaderboardSettings> getSettingsDialogComponent(MultiRaceLeaderboardSettings settings) {
return selectedLeaderboardPanel.getSettingsDialogComponent(settings); return selectedLeaderboardPanel.getSettingsDialogComponent(settings);
} }
@Override @Override
public void updateSettings(LeaderboardSettings newSettings) { public void updateSettings(MultiRaceLeaderboardSettings newSettings) {
// store contextspecific setting in this hashmap, so they are not lost on tab change // store contextspecific setting in this hashmap, so they are not lost on tab change
contextStore.put(selectedLeaderboardPanel.getLeaderboardName(), newSettings); contextStore.put(selectedLeaderboardPanel.getLeaderboardName(), newSettings);
selectedLeaderboardPanel.updateSettings(newSettings); selectedLeaderboardPanel.updateSettings(newSettings);
@@ -225,21 +224,21 @@ public class MultiLeaderboardProxyPanel extends AbstractLazyComponent<Leaderboar
selectedLeaderboardFlowPanel = (FlowPanel) leaderboardsTabPanel.getWidget(newTabIndex); selectedLeaderboardFlowPanel = (FlowPanel) leaderboardsTabPanel.getWidget(newTabIndex);
LeaderboardSettings toMerge = contextStore.get(newSelectedLeaderboardName); MultiRaceLeaderboardSettings toMerge = contextStore.get(newSelectedLeaderboardName);
if (toMerge != null) { if (toMerge != null) {
toMerge = mergeContext(loadedSettings, toMerge); toMerge = mergeContext(loadedSettings, toMerge);
} else { } else {
toMerge = loadedSettings; toMerge = loadedSettings;
} }
MultiLeaderboardPanel newSelectedLeaderboardPanel = new MultiLeaderboardPanel(this, getComponentContext(), MultiMultiRaceLeaderboardPanel newSelectedLeaderboardPanel = new MultiMultiRaceLeaderboardPanel(this, getComponentContext(),
sailingService, sailingService,
asyncActionsExecutor, toMerge, isEmbedded, asyncActionsExecutor, toMerge, isEmbedded,
/* preselectedRace*/ null, new CompetitorSelectionModel(true), timer, new CompetitorSelectionModel(true), timer,
null, newSelectedLeaderboardName, errorReporter, stringMessages, null, newSelectedLeaderboardName, errorReporter, stringMessages,
showRaceDetails, /* competitorSearchTextBox */ null, /* showSelectionCheckbox */ true, /* raceTimesInfoProvider */null, showRaceDetails, /* competitorSearchTextBox */ null, /* showSelectionCheckbox */ true, /* raceTimesInfoProvider */null,
false, /* adjustTimerDelay */ true, /* autoApplyTopNFilter */ false, false, /* adjustTimerDelay */ true, /* autoApplyTopNFilter */ false,
/* showCompetitorFilterStatus */ false, /* enableSyncScroller */ false); /* showCompetitorFilterStatus */ false, /* enableSyncScroller */ false, new ClassicLeaderboardStyle());
selectedLeaderboardFlowPanel.add(newSelectedLeaderboardPanel); selectedLeaderboardFlowPanel.add(newSelectedLeaderboardPanel);
for (LeaderboardUpdateListener listener : leaderboardUpdateListeners) { for (LeaderboardUpdateListener listener : leaderboardUpdateListeners) {
newSelectedLeaderboardPanel.addLeaderboardUpdateListener(listener); newSelectedLeaderboardPanel.addLeaderboardUpdateListener(listener);
@@ -256,7 +255,7 @@ public class MultiLeaderboardProxyPanel extends AbstractLazyComponent<Leaderboar
this.selectedLeaderboardName = newSelectedLeaderboardName; this.selectedLeaderboardName = newSelectedLeaderboardName;
} }
private LeaderboardSettings mergeContext(LeaderboardSettings settings, LeaderboardSettings toMerge) { private MultiRaceLeaderboardSettings mergeContext(MultiRaceLeaderboardSettings settings, MultiRaceLeaderboardSettings toMerge) {
return LeaderboardSettingsFactory.getInstance().mergeLeaderboardSettings(toMerge, settings); return LeaderboardSettingsFactory.getInstance().mergeLeaderboardSettings(toMerge, settings);
} }
@@ -278,20 +277,20 @@ public class MultiLeaderboardProxyPanel extends AbstractLazyComponent<Leaderboar
} }
@Override @Override
public void addSelectedLeaderboardChangeListener(SelectedLeaderboardChangeListener listener) { public void addSelectedLeaderboardChangeListener(SelectedLeaderboardChangeListener<MultiRaceLeaderboardPanel> listener) {
selectedLeaderboardChangeListeners.add(listener); selectedLeaderboardChangeListeners.add(listener);
} }
@Override @Override
public void removeSelectedLeaderboardChangeListener(SelectedLeaderboardChangeListener listener) { public void removeSelectedLeaderboardChangeListener(SelectedLeaderboardChangeListener<MultiRaceLeaderboardPanel> listener) {
selectedLeaderboardChangeListeners.remove(listener); selectedLeaderboardChangeListeners.remove(listener);
} }
@Override @Override
public void setSelectedLeaderboard(LeaderboardPanel selectedLeaderboard) { public void setSelectedLeaderboard(MultiRaceLeaderboardPanel selectedLeaderboard) {
if (this.selectedLeaderboardPanel != selectedLeaderboard) { if (this.selectedLeaderboardPanel != selectedLeaderboard) {
this.selectedLeaderboardPanel = selectedLeaderboard; this.selectedLeaderboardPanel = selectedLeaderboard;
for (SelectedLeaderboardChangeListener listener : selectedLeaderboardChangeListeners) { for (SelectedLeaderboardChangeListener<MultiRaceLeaderboardPanel> listener : selectedLeaderboardChangeListeners) {
listener.onSelectedLeaderboardChanged(selectedLeaderboardPanel); listener.onSelectedLeaderboardChanged(selectedLeaderboardPanel);
} }
} }
@@ -303,6 +302,6 @@ public class MultiLeaderboardProxyPanel extends AbstractLazyComponent<Leaderboar
@Override @Override
public String getId() { public String getId() {
return MultiLeaderboardPanelLifecycle.MID; return MultipleMultiLeaderboardPanelLifecycle.MID;
} }
} }
@@ -1,7 +1,6 @@
package com.sap.sailing.gwt.ui.leaderboard; package com.sap.sailing.gwt.ui.leaderboard;
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier; import com.sap.sailing.gwt.settings.client.leaderboard.MultiRaceLeaderboardSettings;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettings;
import com.sap.sailing.gwt.ui.client.CompetitorSelectionProvider; import com.sap.sailing.gwt.ui.client.CompetitorSelectionProvider;
import com.sap.sailing.gwt.ui.client.RaceTimesInfoProvider; import com.sap.sailing.gwt.ui.client.RaceTimesInfoProvider;
import com.sap.sailing.gwt.ui.client.SailingServiceAsync; import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
@@ -16,21 +15,20 @@ import com.sap.sse.gwt.client.shared.settings.ComponentContext;
* Represents a single Leaderboard in the Context of a MultiLeaderboard * Represents a single Leaderboard in the Context of a MultiLeaderboard
* *
*/ */
public class MultiLeaderboardPanel extends LeaderboardPanel { public class MultiMultiRaceLeaderboardPanel extends MultiRaceLeaderboardPanel {
public MultiLeaderboardPanel(Component<?> parent, ComponentContext<?> context, public MultiMultiRaceLeaderboardPanel(Component<?> parent, ComponentContext<?> context,
SailingServiceAsync sailingService, AsyncActionsExecutor asyncActionsExecutor, LeaderboardSettings settings, SailingServiceAsync sailingService, AsyncActionsExecutor asyncActionsExecutor, MultiRaceLeaderboardSettings settings,
boolean isEmbedded, RegattaAndRaceIdentifier preSelectedRace, boolean isEmbedded, CompetitorSelectionProvider competitorSelectionProvider, Timer timer, String leaderboardGroupName,
CompetitorSelectionProvider competitorSelectionProvider, Timer timer, String leaderboardGroupName,
String leaderboardName, ErrorReporter errorReporter, StringMessages stringMessages, String leaderboardName, ErrorReporter errorReporter, StringMessages stringMessages,
boolean showRaceDetails, CompetitorFilterPanel competitorSearchTextBox, boolean showRaceDetails, CompetitorFilterPanel competitorSearchTextBox,
boolean showSelectionCheckbox, RaceTimesInfoProvider optionalRaceTimesInfoProvider, boolean showSelectionCheckbox, RaceTimesInfoProvider optionalRaceTimesInfoProvider,
boolean autoExpandLastRaceColumn, boolean adjustTimerDelay, boolean autoApplyTopNFilter, boolean autoExpandLastRaceColumn, boolean adjustTimerDelay, boolean autoApplyTopNFilter,
boolean showCompetitorFilterStatus, boolean enableSyncScroller) { boolean showCompetitorFilterStatus, boolean enableSyncScroller, LeaderBoardStyle style) {
super(parent, context, sailingService, asyncActionsExecutor, settings, isEmbedded, preSelectedRace, super(parent, context, sailingService, asyncActionsExecutor, settings, isEmbedded,
competitorSelectionProvider, timer, leaderboardGroupName, leaderboardName, errorReporter, competitorSelectionProvider, timer, leaderboardGroupName, leaderboardName, errorReporter,
stringMessages, showRaceDetails, competitorSearchTextBox, showSelectionCheckbox, stringMessages, showRaceDetails, competitorSearchTextBox, showSelectionCheckbox,
optionalRaceTimesInfoProvider, autoExpandLastRaceColumn, adjustTimerDelay, autoApplyTopNFilter, optionalRaceTimesInfoProvider, autoExpandLastRaceColumn, adjustTimerDelay, autoApplyTopNFilter,
showCompetitorFilterStatus, enableSyncScroller,new ClassicLeaderboardStyle()); showCompetitorFilterStatus, enableSyncScroller,style);
} }
@@ -0,0 +1,238 @@
package com.sap.sailing.gwt.ui.leaderboard;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.sap.sailing.domain.common.dto.AbstractLeaderboardDTO;
import com.sap.sailing.domain.common.dto.CompetitorDTO;
import com.sap.sailing.domain.common.dto.LeaderboardDTO;
import com.sap.sailing.domain.common.dto.LeaderboardRowDTO;
import com.sap.sailing.domain.common.dto.RaceColumnDTO;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettings;
import com.sap.sailing.gwt.settings.client.leaderboard.MultiRaceLeaderboardSettings;
import com.sap.sailing.gwt.settings.client.leaderboard.MultiRaceLeaderboardSettingsDialogComponent;
import com.sap.sailing.gwt.ui.client.CompetitorSelectionProvider;
import com.sap.sailing.gwt.ui.client.RaceTimesInfoProvider;
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.client.shared.controls.AbstractSortableColumnWithMinMax;
import com.sap.sailing.gwt.ui.client.shared.filter.CompetitorRaceRankFilter;
import com.sap.sse.common.Util;
import com.sap.sse.common.filter.BinaryOperator;
import com.sap.sse.common.filter.Filter;
import com.sap.sse.common.filter.FilterSet;
import com.sap.sse.common.settings.util.SettingsDefaultValuesUtils;
import com.sap.sse.gwt.client.ErrorReporter;
import com.sap.sse.gwt.client.async.AsyncActionsExecutor;
import com.sap.sse.gwt.client.player.Timer;
import com.sap.sse.gwt.client.shared.components.Component;
import com.sap.sse.gwt.client.shared.components.SettingsDialog;
import com.sap.sse.gwt.client.shared.components.SettingsDialogComponent;
import com.sap.sse.gwt.client.shared.settings.ComponentContext;
/**
* This type of {@link LeaderboardPanel} shows a customizable set of leaderboard columns. In case of fleet racing it's
* not possible to only show a physical race.
*/
public class MultiRaceLeaderboardPanel extends LeaderboardPanel<MultiRaceLeaderboardSettings> {
public MultiRaceLeaderboardPanel(Component<?> parent, ComponentContext<?> context,
SailingServiceAsync sailingService, AsyncActionsExecutor asyncActionsExecutor,
MultiRaceLeaderboardSettings settings, boolean isEmbedded,
CompetitorSelectionProvider competitorSelectionProvider, String leaderboardGroupName,
String leaderboardName, ErrorReporter errorReporter, StringMessages stringMessages, boolean showRaceDetails,
LeaderBoardStyle style) {
super(parent, context, sailingService, asyncActionsExecutor, settings, isEmbedded, competitorSelectionProvider,
leaderboardGroupName, leaderboardName, errorReporter, stringMessages, showRaceDetails, style);
initialize(settings);
}
public MultiRaceLeaderboardPanel(Component<?> parent, ComponentContext<?> context,
SailingServiceAsync sailingService, AsyncActionsExecutor asyncActionsExecutor,
MultiRaceLeaderboardSettings settings, boolean isEmbedded,
CompetitorSelectionProvider competitorSelectionProvider, Timer timer, String leaderboardGroupName,
String leaderboardName, ErrorReporter errorReporter, StringMessages stringMessages, boolean showRaceDetails,
CompetitorFilterPanel competitorSearchTextBox, boolean showSelectionCheckbox,
RaceTimesInfoProvider optionalRaceTimesInfoProvider, boolean autoExpandLastRaceColumn,
boolean adjustTimerDelay, boolean autoApplyTopNFilter, boolean showCompetitorFilterStatus,
boolean enableSyncScroller, LeaderBoardStyle style) {
super(parent, context, sailingService, asyncActionsExecutor, settings, isEmbedded, competitorSelectionProvider,
timer, leaderboardGroupName, leaderboardName, errorReporter, stringMessages, showRaceDetails,
competitorSearchTextBox, showSelectionCheckbox, optionalRaceTimesInfoProvider, autoExpandLastRaceColumn,
adjustTimerDelay, autoApplyTopNFilter, showCompetitorFilterStatus, enableSyncScroller, style);
initialize(settings);
}
public MultiRaceLeaderboardPanel(Component<?> parent, ComponentContext<?> context,
SailingServiceAsync sailingService, AsyncActionsExecutor asyncActionsExecutor,
MultiRaceLeaderboardSettings settings, CompetitorSelectionProvider competitorSelectionProvider,
String leaderboardName, ErrorReporter errorReporter, StringMessages stringMessages,
boolean showRaceDetails, LeaderBoardStyle style) {
super(parent, context, sailingService, asyncActionsExecutor, settings, competitorSelectionProvider,
leaderboardName, errorReporter, stringMessages, showRaceDetails,style);
initialize(settings);
}
@Override
public MultiRaceLeaderboardSettings getSettings() {
Iterable<RaceColumnDTO> selectedRaceColumns = raceColumnSelection
.getSelectedRaceColumnsOrderedAsInLeaderboard(leaderboard);
List<String> namesOfRaceColumnsToShow = new ArrayList<>();
for (RaceColumnDTO raceColumn : selectedRaceColumns) {
namesOfRaceColumnsToShow.add(raceColumn.getName());
}
MultiRaceLeaderboardSettings leaderboardSettings = new MultiRaceLeaderboardSettings(selectedManeuverDetails,
selectedLegDetails, selectedRaceDetails, selectedOverallDetailColumns, namesOfRaceColumnsToShow,
raceColumnSelection.getNumberOfLastRaceColumnsToShow(), timer.getRefreshInterval(),
raceColumnSelection.getType(), isShowAddedScores(),
isShowOverallColumnWithNumberOfRacesCompletedPerCompetitor(), isShowCompetitorSailId(),
isShowCompetitorFullName(), isShowCompetitorNationality);
SettingsDefaultValuesUtils.keepDefaults(currentSettings, leaderboardSettings);
return leaderboardSettings;
}
@Override
protected void setDefaultRaceColumnSelection(LeaderboardSettings settings) {
MultiRaceLeaderboardSettings s = (MultiRaceLeaderboardSettings) settings;
switch (s.getActiveRaceColumnSelectionStrategy()) {
case EXPLICIT:
raceColumnSelection = new ExplicitRaceColumnSelection();
break;
case LAST_N:
setRaceColumnSelectionToLastNStrategy(s.getNumberOfLastRacesToShow());
break;
}
}
@Override
public String getCompetitorColor(CompetitorDTO competitor) {
// not used for multi
return null;
}
@Override
public boolean renderBoatColorIfNecessary(CompetitorDTO competitor, SafeHtmlBuilder sb) {
return false;
}
@Override
public int getLegCount(LeaderboardDTO leaderboardDTO, String raceColumnName) {
return leaderboardDTO.getLegCount(raceColumnName, null);
}
@Override
protected MultiRaceLeaderboardSettings overrideDefaultsForNamesOfRaceColumns(
MultiRaceLeaderboardSettings currentSettings, LeaderboardDTO result) {
return currentSettings.overrideDefaultsForNamesOfRaceColumns(result.getNamesOfRaceColumns());
}
@Override
protected void applyTop30FilterIfCompetitorSizeGreaterEqual40(LeaderboardDTO leaderboard) {
int maxRaceRank = 30;
if (leaderboard.competitors.size() >= 40) {
CompetitorRaceRankFilter raceRankFilter = new CompetitorRaceRankFilter();
raceRankFilter.setLeaderboardFetcher(this);
raceRankFilter.setQuickRankProvider(this.competitorFilterPanel.getQuickRankProvider());
raceRankFilter.setOperator(new BinaryOperator<Integer>(BinaryOperator.Operators.LessThanEquals));
raceRankFilter.setValue(maxRaceRank);
FilterSet<CompetitorDTO, Filter<CompetitorDTO>> activeFilterSet = competitorSelectionProvider
.getOrCreateCompetitorsFilterSet(stringMessages.topNCompetitorsByRaceRank(maxRaceRank));
activeFilterSet.addFilter(raceRankFilter);
competitorSelectionProvider.setCompetitorsFilterSet(activeFilterSet);
}
}
/**
* Extracts the rows to display of the <code>leaderboard</code>. These are all {@link AbstractLeaderboardDTO#rows
* rows} in case {@link #preSelectedRace} is <code>null</code>, or only the rows of the competitors who scored in
* the race identified by {@link #preSelectedRace} otherwise.
*/
@Override
public Map<CompetitorDTO, LeaderboardRowDTO> getRowsToDisplay() {
Map<CompetitorDTO, LeaderboardRowDTO> result;
Iterable<CompetitorDTO> allFilteredCompetitors = competitorSelectionProvider.getFilteredCompetitors();
result = new HashMap<CompetitorDTO, LeaderboardRowDTO>();
for (CompetitorDTO competitor : leaderboard.rows.keySet()) {
if (Util.contains(allFilteredCompetitors, competitor)) {
result.put(competitor, leaderboard.rows.get(competitor));
}
}
return result;
}
@Override
public SettingsDialogComponent<MultiRaceLeaderboardSettings> getSettingsDialogComponent(
MultiRaceLeaderboardSettings useTheseSettings) {
return new MultiRaceLeaderboardSettingsDialogComponent((MultiRaceLeaderboardSettings) useTheseSettings,
leaderboard.getNamesOfRaceColumns(), stringMessages);
}
@Override
protected void openSettingsDialog() {
SettingsDialog<MultiRaceLeaderboardSettings> settingsDialog = new SettingsDialog<MultiRaceLeaderboardSettings>(
this, stringMessages);
settingsDialog.ensureDebugId("LeaderboardSettingsDialog");
settingsDialog.show();
}
@Override
protected void applyRaceSelection(final LeaderboardSettings ns) {
MultiRaceLeaderboardSettings newSettings = (MultiRaceLeaderboardSettings) ns;
Iterable<String> oldNamesOfRaceColumnsToShow = null;
if (newSettings.getNamesOfRaceColumnsToShow() == null) {
oldNamesOfRaceColumnsToShow = raceColumnSelection.getSelectedRaceColumnNames();
}
switch (newSettings.getActiveRaceColumnSelectionStrategy()) {
case EXPLICIT:
setDefaultRaceColumnSelection(newSettings);
if (newSettings.getNamesOfRaceColumnsToShow() != null) {
raceColumnSelection.requestClear();
for (String nameOfRaceColumnToShow : newSettings.getNamesOfRaceColumnsToShow()) {
RaceColumnDTO raceColumnToShow = getRaceByColumnName(nameOfRaceColumnToShow);
if (raceColumnToShow != null) {
raceColumnSelection.requestRaceColumnSelection(raceColumnToShow);
}
}
} else {
// apply the old column selections again
for (String oldNameOfRaceColumnToShow : oldNamesOfRaceColumnsToShow) {
final RaceColumnDTO raceColumnByName = getLeaderboard()
.getRaceColumnByName(oldNameOfRaceColumnToShow);
if (raceColumnByName != null) {
raceColumnSelection.requestRaceColumnSelection(raceColumnByName);
}
}
}
break;
case LAST_N:
setRaceColumnSelectionToLastNStrategy(newSettings.getNumberOfLastRacesToShow());
break;
}
}
private RaceColumnDTO getRaceByColumnName(String columnName) {
if (getLeaderboard() != null) {
for (RaceColumnDTO race : getLeaderboard().getRaceList()) {
if (columnName.equals(race.getRaceColumnName())) {
return race;
}
}
}
return null;
}
@Override
protected void processAutoExpands(AbstractSortableColumnWithMinMax<?, ?> c, RaceColumn<?> lastRaceColumn) {
// Toggle or the last race column if that was requested
if (isAutoExpandLastRaceColumn() && c == lastRaceColumn) {
ExpandableSortableColumn<?> expandableSortableColumn = (ExpandableSortableColumn<?>) c;
if (!expandableSortableColumn.isExpanded()) {
expandableSortableColumn.changeExpansionState(/* expand */ true);
autoExpandPerformedOnce = true;
}
}
}
}
@@ -6,7 +6,6 @@ import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.FlowPanel;
import com.sap.sailing.domain.common.DetailType; import com.sap.sailing.domain.common.DetailType;
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardPanelLifecycle; import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardPanelLifecycle;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardPerspectiveLifecycle; import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardPerspectiveLifecycle;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardPerspectiveOwnSettings; import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardPerspectiveOwnSettings;
@@ -28,44 +27,44 @@ import com.sap.sse.gwt.client.shared.settings.ComponentContext;
* @author Frank Mittag (c163874) * @author Frank Mittag (c163874)
* *
*/ */
public class LeaderboardViewer extends AbstractLeaderboardViewer<LeaderboardPerspectiveLifecycle> { public class MultiRaceLeaderboardViewer extends AbstractLeaderboardViewer<LeaderboardPerspectiveLifecycle> {
private final MultiCompetitorLeaderboardChart multiCompetitorChart; private final MultiCompetitorLeaderboardChart multiCompetitorChart;
private LeaderboardPanel overallLeaderboardPanel; private MultiRaceLeaderboardPanel overallLeaderboardPanel;
public LeaderboardViewer(Component<?> parent, public MultiRaceLeaderboardViewer(Component<?> parent,
ComponentContext<PerspectiveCompositeSettings<LeaderboardPerspectiveOwnSettings>> componentContext, ComponentContext<PerspectiveCompositeSettings<LeaderboardPerspectiveOwnSettings>> componentContext,
LeaderboardPerspectiveLifecycle lifecycle, LeaderboardPerspectiveLifecycle lifecycle,
PerspectiveCompositeSettings<LeaderboardPerspectiveOwnSettings> settings, PerspectiveCompositeSettings<LeaderboardPerspectiveOwnSettings> settings,
final SailingServiceAsync sailingService, final AsyncActionsExecutor asyncActionsExecutor, final SailingServiceAsync sailingService, final AsyncActionsExecutor asyncActionsExecutor,
final Timer timer, final RegattaAndRaceIdentifier preselectedRace, final Timer timer,
final String leaderboardGroupName, String leaderboardName, final ErrorReporter errorReporter, final String leaderboardGroupName, String leaderboardName, final ErrorReporter errorReporter,
final StringMessages stringMessages, DetailType chartDetailType) { final StringMessages stringMessages, DetailType chartDetailType) {
this(parent, componentContext, lifecycle, settings, new CompetitorSelectionModel(/* hasMultiSelection */true), this(parent, componentContext, lifecycle, settings, new CompetitorSelectionModel(/* hasMultiSelection */true),
sailingService, asyncActionsExecutor, timer, sailingService, asyncActionsExecutor, timer,
preselectedRace, leaderboardGroupName, leaderboardName, errorReporter, leaderboardGroupName, leaderboardName, errorReporter,
stringMessages, chartDetailType); stringMessages, chartDetailType);
} }
private LeaderboardViewer(Component<?> parent, private MultiRaceLeaderboardViewer(Component<?> parent,
ComponentContext<PerspectiveCompositeSettings<LeaderboardPerspectiveOwnSettings>> componentContext, ComponentContext<PerspectiveCompositeSettings<LeaderboardPerspectiveOwnSettings>> componentContext,
LeaderboardPerspectiveLifecycle lifecycle, LeaderboardPerspectiveLifecycle lifecycle,
PerspectiveCompositeSettings<LeaderboardPerspectiveOwnSettings> settings, PerspectiveCompositeSettings<LeaderboardPerspectiveOwnSettings> settings,
CompetitorSelectionModel competitorSelectionModel, CompetitorSelectionModel competitorSelectionModel,
final SailingServiceAsync sailingService, final AsyncActionsExecutor asyncActionsExecutor, final SailingServiceAsync sailingService, final AsyncActionsExecutor asyncActionsExecutor,
final Timer timer, final RegattaAndRaceIdentifier preselectedRace, final Timer timer,
final String leaderboardGroupName, String leaderboardName, final ErrorReporter errorReporter, final String leaderboardGroupName, String leaderboardName, final ErrorReporter errorReporter,
final StringMessages stringMessages, DetailType chartDetailType) { final StringMessages stringMessages, DetailType chartDetailType) {
super(parent, componentContext, lifecycle, settings, competitorSelectionModel, asyncActionsExecutor, timer, super(parent, componentContext, lifecycle, settings, competitorSelectionModel, asyncActionsExecutor, timer,
stringMessages); stringMessages);
// FIXME: Cleanup with java8 using supplier // FIXME: Cleanup with java8 using supplier
init(new LeaderboardPanel(this, getComponentContext(), sailingService, asyncActionsExecutor, init(new MultiRaceLeaderboardPanel(this, getComponentContext(), sailingService, asyncActionsExecutor,
settings.findSettingsByComponentId(LeaderboardPanelLifecycle.ID), preselectedRace != null, settings.findSettingsByComponentId(LeaderboardPanelLifecycle.ID), false,
preselectedRace, competitorSelectionModel, timer, leaderboardGroupName, leaderboardName, errorReporter, competitorSelectionModel, timer, leaderboardGroupName, leaderboardName, errorReporter,
stringMessages, settings.getPerspectiveOwnSettings().isShowRaceDetails(), stringMessages, settings.getPerspectiveOwnSettings().isShowRaceDetails(),
/* competitorSearchTextBox */ null, /* showSelectionCheckbox */ true, /* raceTimesInfoProvider */ null, /* competitorSearchTextBox */ null, /* showSelectionCheckbox */ true, /* raceTimesInfoProvider */ null,
settings.getPerspectiveOwnSettings().isAutoExpandLastRaceColumn(), /* adjustTimerDelay */ true, settings.getPerspectiveOwnSettings().isAutoExpandLastRaceColumn(), /* adjustTimerDelay */ true,
/* autoApplyTopNFilter */ false, /* showCompetitorFilterStatus */ false, /* autoApplyTopNFilter */ false, /* showCompetitorFilterStatus */ false,
/* enableSyncScroller */ false,new ClassicLeaderboardStyle())); /* enableSyncScroller */ false, new ClassicLeaderboardStyle()));
final LeaderboardPerspectiveOwnSettings perspectiveSettings = settings.getPerspectiveOwnSettings(); final LeaderboardPerspectiveOwnSettings perspectiveSettings = settings.getPerspectiveOwnSettings();
final boolean showCharts = perspectiveSettings.isShowCharts(); final boolean showCharts = perspectiveSettings.isShowCharts();
@@ -99,11 +98,11 @@ public class LeaderboardViewer extends AbstractLeaderboardViewer<LeaderboardPers
public void onSuccess(List<String> result) { public void onSuccess(List<String> result) {
if(result.size() == 1) { if(result.size() == 1) {
String overallLeaderboardName = result.get(0); String overallLeaderboardName = result.get(0);
overallLeaderboardPanel = new OverallLeaderboardPanel(LeaderboardViewer.this, overallLeaderboardPanel = new OverallLeaderboardPanel(MultiRaceLeaderboardViewer.this,
getComponentContext(), sailingService, getComponentContext(), sailingService,
asyncActionsExecutor, asyncActionsExecutor,
settings.findSettingsByComponentId(OverallLeaderboardPanelLifecycle.ID), settings.findSettingsByComponentId(OverallLeaderboardPanelLifecycle.ID),
preselectedRace != null, preselectedRace, competitorSelectionProvider, timer, false, competitorSelectionProvider, timer,
leaderboardGroupName, overallLeaderboardName, errorReporter, stringMessages, leaderboardGroupName, overallLeaderboardName, errorReporter, stringMessages,
false, /* competitorSearchTextBox */ null, /* showSelectionCheckbox */ true, /* raceTimesInfoProvider */null, false, /* competitorSearchTextBox */ null, /* showSelectionCheckbox */ true, /* raceTimesInfoProvider */null,
false, /* adjustTimerDelay */ true, /* autoApplyTopNFilter */ false, false, /* adjustTimerDelay */ true, /* autoApplyTopNFilter */ false,
@@ -1,7 +1,6 @@
package com.sap.sailing.gwt.ui.leaderboard; package com.sap.sailing.gwt.ui.leaderboard;
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier; import com.sap.sailing.gwt.settings.client.leaderboard.MultiRaceLeaderboardSettings;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettings;
import com.sap.sailing.gwt.settings.client.leaderboard.OverallLeaderboardPanelLifecycle; import com.sap.sailing.gwt.settings.client.leaderboard.OverallLeaderboardPanelLifecycle;
import com.sap.sailing.gwt.ui.client.CompetitorSelectionProvider; import com.sap.sailing.gwt.ui.client.CompetitorSelectionProvider;
import com.sap.sailing.gwt.ui.client.RaceTimesInfoProvider; import com.sap.sailing.gwt.ui.client.RaceTimesInfoProvider;
@@ -13,17 +12,17 @@ import com.sap.sse.gwt.client.player.Timer;
import com.sap.sse.gwt.client.shared.components.Component; import com.sap.sse.gwt.client.shared.components.Component;
import com.sap.sse.gwt.client.shared.settings.ComponentContext; import com.sap.sse.gwt.client.shared.settings.ComponentContext;
public class OverallLeaderboardPanel extends LeaderboardPanel { public class OverallLeaderboardPanel extends MultiRaceLeaderboardPanel {
public OverallLeaderboardPanel(Component<?> parent, ComponentContext<?> context, public OverallLeaderboardPanel(Component<?> parent, ComponentContext<?> context,
SailingServiceAsync sailingService, AsyncActionsExecutor asyncActionsExecutor, LeaderboardSettings settings, SailingServiceAsync sailingService, AsyncActionsExecutor asyncActionsExecutor, MultiRaceLeaderboardSettings settings,
boolean isEmbedded, RegattaAndRaceIdentifier preSelectedRace, boolean isEmbedded,
CompetitorSelectionProvider competitorSelectionProvider, Timer timer, String leaderboardGroupName, CompetitorSelectionProvider competitorSelectionProvider, Timer timer, String leaderboardGroupName,
String leaderboardName, ErrorReporter errorReporter, StringMessages stringMessages, String leaderboardName, ErrorReporter errorReporter, StringMessages stringMessages,
boolean showRaceDetails, CompetitorFilterPanel competitorSearchTextBox, boolean showRaceDetails, CompetitorFilterPanel competitorSearchTextBox,
boolean showSelectionCheckbox, RaceTimesInfoProvider optionalRaceTimesInfoProvider, boolean showSelectionCheckbox, RaceTimesInfoProvider optionalRaceTimesInfoProvider,
boolean autoExpandLastRaceColumn, boolean adjustTimerDelay, boolean autoApplyTopNFilter, boolean autoExpandLastRaceColumn, boolean adjustTimerDelay, boolean autoApplyTopNFilter,
boolean showCompetitorFilterStatus, boolean enableSyncScroller) { boolean showCompetitorFilterStatus, boolean enableSyncScroller) {
super(parent, context, sailingService, asyncActionsExecutor, settings, isEmbedded, preSelectedRace, super(parent, context, sailingService, asyncActionsExecutor, settings, isEmbedded,
competitorSelectionProvider, timer, leaderboardGroupName, leaderboardName, errorReporter, competitorSelectionProvider, timer, leaderboardGroupName, leaderboardName, errorReporter,
stringMessages, showRaceDetails, competitorSearchTextBox, showSelectionCheckbox, stringMessages, showRaceDetails, competitorSearchTextBox, showSelectionCheckbox,
optionalRaceTimesInfoProvider, autoExpandLastRaceColumn, adjustTimerDelay, autoApplyTopNFilter, optionalRaceTimesInfoProvider, autoExpandLastRaceColumn, adjustTimerDelay, autoApplyTopNFilter,
@@ -30,8 +30,7 @@ public class OverallTimeTraveledColumn extends ExpandableSortableColumn<String>
private String headerStyle; private String headerStyle;
private MinMaxRenderer minmaxRenderer; private MinMaxRenderer minmaxRenderer;
public OverallTimeTraveledColumn(LeaderboardPanel leaderboardPanel, StringMessages stringMessages, public OverallTimeTraveledColumn(LeaderboardPanel<?> leaderboardPanel, StringMessages stringMessages, String headerStyle, String columnStyle, String detailHeaderStyle,
String headerStyle, String columnStyle, String detailHeaderStyle,
String detailColumnStyle) { String detailColumnStyle) {
super(leaderboardPanel, /* expandable */true, new TextCell(), DETAIL_TYPE.getDefaultSortingOrder(), super(leaderboardPanel, /* expandable */true, new TextCell(), DETAIL_TYPE.getDefaultSortingOrder(),
stringMessages, detailHeaderStyle, detailColumnStyle, stringMessages, detailHeaderStyle, detailColumnStyle,
@@ -50,7 +49,7 @@ public class OverallTimeTraveledColumn extends ExpandableSortableColumn<String>
@Override @Override
protected Map<DetailType, AbstractSortableColumnWithMinMax<LeaderboardRowDTO, ?>> getDetailColumnMap( protected Map<DetailType, AbstractSortableColumnWithMinMax<LeaderboardRowDTO, ?>> getDetailColumnMap(
LeaderboardPanel leaderboardPanel, StringMessages stringConstants, String detailHeaderStyle, LeaderboardPanel<?> leaderboardPanel, StringMessages stringConstants, String detailHeaderStyle,
String detailColumnStyle) { String detailColumnStyle) {
Map<DetailType, AbstractSortableColumnWithMinMax<LeaderboardRowDTO, ?>> result = new HashMap<>(); Map<DetailType, AbstractSortableColumnWithMinMax<LeaderboardRowDTO, ?>> result = new HashMap<>();
@@ -4,7 +4,7 @@ import java.util.Set;
import com.sap.sailing.domain.common.dto.LeaderboardDTO; import com.sap.sailing.domain.common.dto.LeaderboardDTO;
import com.sap.sailing.domain.common.dto.RaceColumnDTO; import com.sap.sailing.domain.common.dto.RaceColumnDTO;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettings.RaceColumnSelectionStrategies; import com.sap.sailing.gwt.settings.client.leaderboard.RaceColumnSelectionStrategies;
/** /**
* Represents a set of race columns that are currently to be shown in a leaderboard. Implementations may, e.g., * Represents a set of race columns that are currently to be shown in a leaderboard. Implementations may, e.g.,
@@ -4,11 +4,11 @@ package com.sap.sailing.gwt.ui.leaderboard;
/** /**
* Allows UI components to observe a change of the selected leaderboard in a Multi-Leaderboard scenario. * Allows UI components to observe a change of the selected leaderboard in a Multi-Leaderboard scenario.
*/ */
public interface SelectedLeaderboardChangeListener { public interface SelectedLeaderboardChangeListener<T extends LeaderboardPanel<?>> {
/** /**
* @param selectedLeaderboard the selected non-<code>null</code> LeaderboardPanel * @param selectedLeaderboard the selected non-<code>null</code> LeaderboardPanel
*/ */
void onSelectedLeaderboardChanged(LeaderboardPanel selectedLeaderboard); void onSelectedLeaderboardChanged(T selectedLeaderboard);
} }
@@ -1,11 +1,11 @@
package com.sap.sailing.gwt.ui.leaderboard; package com.sap.sailing.gwt.ui.leaderboard;
public interface SelectedLeaderboardChangeProvider { public interface SelectedLeaderboardChangeProvider <T extends LeaderboardPanel<?>> {
void addSelectedLeaderboardChangeListener(SelectedLeaderboardChangeListener listener); void addSelectedLeaderboardChangeListener(SelectedLeaderboardChangeListener<T> listener);
void removeSelectedLeaderboardChangeListener(SelectedLeaderboardChangeListener listener); void removeSelectedLeaderboardChangeListener(SelectedLeaderboardChangeListener<T> listener);
void setSelectedLeaderboard(LeaderboardPanel selectedLeaderboard); void setSelectedLeaderboard(MultiRaceLeaderboardPanel selectedLeaderboard);
} }
@@ -0,0 +1,297 @@
package com.sap.sailing.gwt.ui.leaderboard;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.google.gwt.cell.client.TextCell;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.google.gwt.safehtml.shared.SafeHtmlUtils;
import com.google.gwt.user.cellview.client.SafeHtmlHeader;
import com.sap.sailing.domain.common.InvertibleComparator;
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
import com.sap.sailing.domain.common.SortingOrder;
import com.sap.sailing.domain.common.dto.AbstractLeaderboardDTO;
import com.sap.sailing.domain.common.dto.CompetitorDTO;
import com.sap.sailing.domain.common.dto.LeaderboardDTO;
import com.sap.sailing.domain.common.dto.LeaderboardRowDTO;
import com.sap.sailing.domain.common.dto.RaceColumnDTO;
import com.sap.sailing.domain.common.impl.InvertibleComparatorAdapter;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettings;
import com.sap.sailing.gwt.settings.client.leaderboard.SingleRaceLeaderboardSettings;
import com.sap.sailing.gwt.settings.client.leaderboard.SingleRaceLeaderboardSettingsDialogComponent;
import com.sap.sailing.gwt.ui.client.CompetitorSelectionProvider;
import com.sap.sailing.gwt.ui.client.RaceTimesInfoProvider;
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.client.shared.controls.AbstractSortableColumnWithMinMax;
import com.sap.sailing.gwt.ui.client.shared.filter.CompetitorRaceRankFilter;
import com.sap.sse.common.Util;
import com.sap.sse.common.filter.BinaryOperator;
import com.sap.sse.common.filter.Filter;
import com.sap.sse.common.filter.FilterSet;
import com.sap.sse.common.settings.util.SettingsDefaultValuesUtils;
import com.sap.sse.gwt.client.ErrorReporter;
import com.sap.sse.gwt.client.async.AsyncActionsExecutor;
import com.sap.sse.gwt.client.player.Timer;
import com.sap.sse.gwt.client.shared.components.Component;
import com.sap.sse.gwt.client.shared.components.SettingsDialog;
import com.sap.sse.gwt.client.shared.components.SettingsDialogComponent;
import com.sap.sse.gwt.client.shared.settings.ComponentContext;
/**
* This type of {@link LeaderboardPanel} shows a single race. When the leaderboard uses fleet racing, this will cause
* only those competitors to be shown that are part of the specific race.
*/
public class SingleRaceLeaderboardPanel extends LeaderboardPanel<SingleRaceLeaderboardSettings> {
private boolean autoExpandPreSelectedRace;
/**
* If this is <code>null</code>, all leaderboard columns added by updating the leaderboard from the server are
* automatically added to the table. Otherwise, only the column whose {@link RaceColumnDTO#getRaceIdentifier(String)
* race identifier} matches the value of this attribute will be added.
*/
private final RegattaAndRaceIdentifier preSelectedRace;
private RaceRankColumn raceRankColumn;
private boolean notSortedYet = true;
private boolean showRaceRankColumn;
public SingleRaceLeaderboardPanel(Component<?> parent, ComponentContext<?> context,
SailingServiceAsync sailingService, AsyncActionsExecutor asyncActionsExecutor, SingleRaceLeaderboardSettings settings,
boolean isEmbedded, RegattaAndRaceIdentifier preSelectedRace,
CompetitorSelectionProvider competitorSelectionProvider, Timer timer, String leaderboardGroupName,
String leaderboardName, ErrorReporter errorReporter, StringMessages stringMessages, boolean showRaceDetails,
CompetitorFilterPanel competitorSearchTextBox, boolean showSelectionCheckbox,
RaceTimesInfoProvider optionalRaceTimesInfoProvider, boolean autoExpandLastRaceColumn,
boolean adjustTimerDelay, boolean autoApplyTopNFilter, boolean showCompetitorFilterStatus,
boolean enableSyncScroller,LeaderBoardStyle style) {
super(parent, context, sailingService, asyncActionsExecutor, settings, isEmbedded, competitorSelectionProvider,
timer, leaderboardGroupName, leaderboardName, errorReporter, stringMessages, showRaceDetails,
competitorSearchTextBox, showSelectionCheckbox, optionalRaceTimesInfoProvider, autoExpandLastRaceColumn,
adjustTimerDelay, autoApplyTopNFilter, showCompetitorFilterStatus, enableSyncScroller,style);
assert preSelectedRace != null;
this.preSelectedRace = preSelectedRace;
this.showRaceRankColumn = settings.isShowRaceRankColumn();
initialize(settings);
}
@Override
protected int ensureRaceRankColumn(int rankColumnIndex) {
boolean required = isShowRaceRankColumn() && preSelectedRace != null;
final int indexOfNextColumn = required ? 1 : 0;
if (getLeaderboardTable().getColumnCount() > rankColumnIndex) {
if (required) {
if (getLeaderboardTable().getColumn(rankColumnIndex) != getRaceRankColumn()) {
insertColumn(rankColumnIndex, getRaceRankColumn());
}
} else {
if (getLeaderboardTable().getColumn(rankColumnIndex) == getRaceRankColumn()) {
removeColumn(rankColumnIndex);
}
}
} else {
if (required) {
insertColumn(rankColumnIndex, getRaceRankColumn());
}
}
return indexOfNextColumn;
}
private AbstractSortableColumnWithMinMax<LeaderboardRowDTO, ?> getRaceRankColumn() {
return raceRankColumn;
}
private boolean isShowRaceRankColumn() {
return showRaceRankColumn;
}
@Override
protected void setDefaultRaceColumnSelection(LeaderboardSettings settings) {
raceColumnSelection = new ExplicitRaceColumnSelectionWithPreselectedRace(preSelectedRace);
}
@Override
public SingleRaceLeaderboardSettings getSettings() {
SingleRaceLeaderboardSettings leaderboardSettings = new SingleRaceLeaderboardSettings(selectedManeuverDetails,
selectedLegDetails, selectedRaceDetails, selectedOverallDetailColumns, timer.getRefreshInterval(),
isShowAddedScores(),
isShowOverallColumnWithNumberOfRacesCompletedPerCompetitor(), isShowCompetitorSailId(),
isShowCompetitorFullName(), isShowCompetitorNationality,showRaceRankColumn);
SettingsDefaultValuesUtils.keepDefaults(currentSettings, leaderboardSettings);
return leaderboardSettings;
}
private boolean isAutoExpandPreSelectedRace() {
return autoExpandPreSelectedRace;
}
@Override
public String getCompetitorColor(CompetitorDTO competitor) {
return competitorSelectionProvider.getColor(competitor, preSelectedRace).getAsHtml();
}
@Override
public boolean renderBoatColorIfNecessary(CompetitorDTO competitor, SafeHtmlBuilder sb) {
boolean showBoatColor = !isShowCompetitorFullName() && isEmbedded;
if (showBoatColor) {
String competitorColor = competitorSelectionProvider.getColor(competitor, preSelectedRace).getAsHtml();
sb.appendHtmlConstant("<div style=\"border-bottom: 2px solid " + competitorColor + ";\">");
}
return showBoatColor;
}
@Override
public int getLegCount(LeaderboardDTO leaderboardDTO, String raceColumnName) {
return leaderboardDTO.getLegCount(raceColumnName, preSelectedRace);
}
@Override
protected SingleRaceLeaderboardSettings overrideDefaultsForNamesOfRaceColumns(SingleRaceLeaderboardSettings currentSettings,
LeaderboardDTO result) {
return currentSettings;
}
@Override
protected void applyTop30FilterIfCompetitorSizeGreaterEqual40(LeaderboardDTO leaderboard) {
int maxRaceRank = 30;
if (leaderboard.competitors.size() >= 40) {
CompetitorRaceRankFilter raceRankFilter = new CompetitorRaceRankFilter();
raceRankFilter.setLeaderboardFetcher(this);
raceRankFilter.setSelectedRace(preSelectedRace);
raceRankFilter.setQuickRankProvider(this.competitorFilterPanel.getQuickRankProvider());
raceRankFilter.setOperator(new BinaryOperator<Integer>(BinaryOperator.Operators.LessThanEquals));
raceRankFilter.setValue(maxRaceRank);
FilterSet<CompetitorDTO, Filter<CompetitorDTO>> activeFilterSet = competitorSelectionProvider
.getOrCreateCompetitorsFilterSet(stringMessages.topNCompetitorsByRaceRank(maxRaceRank));
activeFilterSet.addFilter(raceRankFilter);
competitorSelectionProvider.setCompetitorsFilterSet(activeFilterSet);
}
}
@SuppressWarnings("rawtypes")
@Override
protected void processAutoExpands(AbstractSortableColumnWithMinMax<?, ?> c, RaceColumn<?> lastRaceColumn) {
// Toggle pre-selected race, if the setting is set and it isn't open yet, or the last race column if
// that was requested
if ((!autoExpandPerformedOnce && isAutoExpandPreSelectedRace() && c instanceof LeaderboardPanel.RaceColumn
&& ((RaceColumn) c).getRace().hasTrackedRace(preSelectedRace))
|| (isAutoExpandLastRaceColumn() && c == lastRaceColumn)) {
ExpandableSortableColumn<?> expandableSortableColumn = (ExpandableSortableColumn<?>) c;
if (!expandableSortableColumn.isExpanded()) {
expandableSortableColumn.changeExpansionState(/* expand */ true);
autoExpandPerformedOnce = true;
}
}
if (c instanceof RaceColumn && ((RaceColumn) c).getRace().hasTrackedRace(preSelectedRace)) {
RaceColumnDTO raceColumn = ((RaceColumn) c).getRace();
informLeaderboardUpdateListenersAboutRaceSelected(preSelectedRace, raceColumn);
}
}
@Override
protected void postApplySettings(LeaderboardSettings newSettings,
List<ExpandableSortableColumn<?>> columnsToExpandAgain) {
super.postApplySettings(newSettings, columnsToExpandAgain);
if (notSortedYet) {
final RaceColumn<?> raceColumnByRaceName = getRaceColumnByRaceName(preSelectedRace.getRaceName());
if (raceColumnByRaceName != null) {
getLeaderboardTable().sortColumn(raceColumnByRaceName, /* ascending */true);
notSortedYet = false;
}
}
}
/**
* Extracts the rows to display of the <code>leaderboard</code>. These are all {@link AbstractLeaderboardDTO#rows
* rows} in case {@link #preSelectedRace} is <code>null</code>, or only the rows of the competitors who scored in
* the race identified by {@link #preSelectedRace} otherwise.
*/
@Override
public Map<CompetitorDTO, LeaderboardRowDTO> getRowsToDisplay() {
Map<CompetitorDTO, LeaderboardRowDTO> result;
Iterable<CompetitorDTO> allFilteredCompetitors = competitorSelectionProvider.getFilteredCompetitors();
result = new HashMap<CompetitorDTO, LeaderboardRowDTO>();
for (CompetitorDTO competitorInPreSelectedRace : getCompetitors(preSelectedRace)) {
if (Util.contains(allFilteredCompetitors, competitorInPreSelectedRace)) {
result.put(competitorInPreSelectedRace, leaderboard.rows.get(competitorInPreSelectedRace));
}
}
return result;
}
@Override
public SettingsDialogComponent<SingleRaceLeaderboardSettings> getSettingsDialogComponent(
SingleRaceLeaderboardSettings useTheseSettings) {
return new SingleRaceLeaderboardSettingsDialogComponent(useTheseSettings, stringMessages);
}
@Override
protected void openSettingsDialog() {
SettingsDialog<SingleRaceLeaderboardSettings> settingsDialog = new SettingsDialog<SingleRaceLeaderboardSettings>(
this, stringMessages);
settingsDialog.ensureDebugId("LeaderboardSettingsDialog");
settingsDialog.show();
}
@Override
protected void applyRaceSelection(LeaderboardSettings newSettings) {
}
public void setAutoExpandPreSelected(boolean b) {
autoExpandPreSelectedRace = b;
}
private class RaceRankColumn extends LeaderboardSortableColumnWithMinMax<LeaderboardRowDTO, String> {
public RaceRankColumn(RegattaAndRaceIdentifier preSelectedRace) {
super(new TextCell(), SortingOrder.ASCENDING, SingleRaceLeaderboardPanel.this);
setHorizontalAlignment(ALIGN_CENTER);
setSortable(true);
}
@Override
public String getValue(LeaderboardRowDTO object) {
int raceRank = getRacePlace(object);
return "" + (raceRank == 0 ? "-" : raceRank);
}
private int getRacePlace(LeaderboardRowDTO object) {
RaceColumn<?> raceColumn = getRaceColumnByRaceName(preSelectedRace.getRaceName());
List<CompetitorDTO> competitorsSorted = getLeaderboard().getCompetitorsFromBestToWorst(raceColumn.race);
int raceRank = -1;
for (int i = 0; i < competitorsSorted.size(); i++) {
if (object.competitor.equals(competitorsSorted.get(i))) {
raceRank = i + 1;
break;
}
}
return raceRank;
}
@Override
public InvertibleComparator<LeaderboardRowDTO> getComparator() {
return new InvertibleComparatorAdapter<LeaderboardRowDTO>() {
@Override
public int compare(LeaderboardRowDTO o1, LeaderboardRowDTO o2) {
int racePlace1 = getRacePlace(o1);
int racePlace2 = getRacePlace(o2);
return racePlace1 == 0 ? racePlace2 == 0 ? 0 : 1 : racePlace2 == 0 ? -1 : racePlace1 - racePlace2;
}
};
}
@Override
public SafeHtmlHeader getHeader() {
return new SafeHtmlHeaderWithTooltip(SafeHtmlUtils.fromString(stringMessages.raceRankShort()),
stringMessages.raceRank());
}
}
@Override
public void updateSettings(SingleRaceLeaderboardSettings newSettings) {
super.updateSettings(newSettings);
showRaceRankColumn = newSettings.isShowRaceRankColumn();
}
}
@@ -25,7 +25,7 @@ public class SixtyInchLeaderBoardStyle implements LeaderBoardStyle {
private static final FlagRendererTemplate FLAG_RENDERER = GWT.create(FlagRendererTemplate.class); private static final FlagRendererTemplate FLAG_RENDERER = GWT.create(FlagRendererTemplate.class);
private LeaderboardDTO laterInit; private LeaderboardDTO laterInit;
private LeaderboardPanel leaderBoardPanel; private LeaderboardPanel<?> leaderBoardPanel;
private boolean showRaceColumns; private boolean showRaceColumns;
private boolean ready; private boolean ready;
@@ -84,7 +84,7 @@ public class SixtyInchLeaderBoardStyle implements LeaderBoardStyle {
} }
@Override @Override
public void afterConstructorHook(FlowPanel contentPanel, LeaderboardPanel leaderboardPanel) { public void afterConstructorHook(FlowPanel contentPanel, LeaderboardPanel<?> leaderboardPanel) {
this.leaderBoardPanel = leaderboardPanel; this.leaderBoardPanel = leaderboardPanel;
leaderboardPanel.getLeaderboardTable().getElement().getStyle().setMarginTop(0, Unit.PX); leaderboardPanel.getLeaderboardTable().getElement().getStyle().setMarginTop(0, Unit.PX);
Widget toolbarPanel = leaderboardPanel.createToolbarPanel(); Widget toolbarPanel = leaderboardPanel.createToolbarPanel();
@@ -51,32 +51,28 @@ public class SortableExpandableColumnHeader extends Header<SafeHtml> {
private static CellTemplates template = GWT.create(CellTemplates.class); private static CellTemplates template = GWT.create(CellTemplates.class);
public SortableExpandableColumnHeader(String title, String iconURL, LeaderboardPanel leaderboardPanel, public SortableExpandableColumnHeader(String title, String iconURL, LeaderboardPanel<?> leaderboardPanel,
ExpandableSortableColumn<?> column, StringMessages stringConstants) { ExpandableSortableColumn<?> column, StringMessages stringConstants) {
this(title, null, null, iconURL, leaderboardPanel, column, stringConstants); this(title, null, null, iconURL, leaderboardPanel, column, stringConstants);
} }
public SortableExpandableColumnHeader(String title, String tooltip, String iconURL, public SortableExpandableColumnHeader(String title, String tooltip, String iconURL,
LeaderboardPanel leaderboardPanel, ExpandableSortableColumn<?> column, LeaderboardPanel<?> leaderboardPanel, ExpandableSortableColumn<?> column, StringMessages stringConstants) {
StringMessages stringConstants) {
this(title, tooltip, null, iconURL, leaderboardPanel, column, stringConstants); this(title, tooltip, null, iconURL, leaderboardPanel, column, stringConstants);
} }
public SortableExpandableColumnHeader(String title, String tooltip, String iconURL, public SortableExpandableColumnHeader(String title, String tooltip, String iconURL,
LeaderboardPanel leaderboardPanel, ExpandableSortableColumn<?> column, LeaderboardPanel<?> leaderboardPanel, ExpandableSortableColumn<?> column, StringMessages stringConstants, String unit) {
StringMessages stringConstants, String unit) {
this(title, tooltip, unit, iconURL, leaderboardPanel, column, stringConstants); this(title, tooltip, unit, iconURL, leaderboardPanel, column, stringConstants);
} }
public SortableExpandableColumnHeader(String title, String tooltip, String unit, public SortableExpandableColumnHeader(String title, String tooltip, String unit,
String iconURL, LeaderboardPanel leaderboardPanel, ExpandableSortableColumn<?> column, String iconURL, LeaderboardPanel<?> leaderboardPanel, ExpandableSortableColumn<?> column, StringMessages stringConstants) {
StringMessages stringConstants) {
super(constructCell(title, tooltip, unit, iconURL, column.isExpansionEnabled(), leaderboardPanel, column, stringConstants)); super(constructCell(title, tooltip, unit, iconURL, column.isExpansionEnabled(), leaderboardPanel, column, stringConstants));
} }
private static <T> Cell<SafeHtml> constructCell(final String title, final String tooltip, final String unit, private static <T> Cell<SafeHtml> constructCell(final String title, final String tooltip, final String unit,
final String iconURL, boolean isExpansionEnabled, final LeaderboardPanel leaderboardPanel, final String iconURL, boolean isExpansionEnabled, final LeaderboardPanel<?> leaderboardPanel, final ExpandableSortableColumn<?> column, final StringMessages stringConstants) {
final ExpandableSortableColumn<?> column, final StringMessages stringConstants) {
final List<HasCell<SafeHtml, ?>> cells = new ArrayList<HasCell<SafeHtml, ?>>(3); final List<HasCell<SafeHtml, ?>> cells = new ArrayList<HasCell<SafeHtml, ?>>(3);
// if it's a medal race, add the cell rendering the medal image // if it's a medal race, add the cell rendering the medal image
// add the cell rendering the expand/collapse button: // add the cell rendering the expand/collapse button:
@@ -32,8 +32,7 @@ public class TimeTraveledRaceColumn extends ExpandableSortableColumn<String> imp
private String headerStyle; private String headerStyle;
private MinMaxRenderer minmaxRenderer; private MinMaxRenderer minmaxRenderer;
public TimeTraveledRaceColumn(LeaderboardPanel leaderboardPanel, RaceNameProvider raceNameProvider, public TimeTraveledRaceColumn(LeaderboardPanel<?> leaderboardPanel, RaceNameProvider raceNameProvider, StringMessages stringMessages, String headerStyle, String columnStyle,
StringMessages stringMessages, String headerStyle, String columnStyle,
String detailHeaderStyle, String detailColumnStyle) { String detailHeaderStyle, String detailColumnStyle) {
super(leaderboardPanel, /* expandable */true, new TextCell(), DETAIL_TYPE.getDefaultSortingOrder(), super(leaderboardPanel, /* expandable */true, new TextCell(), DETAIL_TYPE.getDefaultSortingOrder(),
stringMessages, detailHeaderStyle, detailColumnStyle, stringMessages, detailHeaderStyle, detailColumnStyle,
@@ -83,7 +82,7 @@ public class TimeTraveledRaceColumn extends ExpandableSortableColumn<String> imp
@Override @Override
protected Map<DetailType, AbstractSortableColumnWithMinMax<LeaderboardRowDTO, ?>> getDetailColumnMap( protected Map<DetailType, AbstractSortableColumnWithMinMax<LeaderboardRowDTO, ?>> getDetailColumnMap(
LeaderboardPanel leaderboardPanel, StringMessages stringConstants, String detailHeaderStyle, LeaderboardPanel<?> leaderboardPanel, StringMessages stringConstants, String detailHeaderStyle,
String detailColumnStyle) { String detailColumnStyle) {
Map<DetailType, AbstractSortableColumnWithMinMax<LeaderboardRowDTO, ?>> result = new HashMap<>(); Map<DetailType, AbstractSortableColumnWithMinMax<LeaderboardRowDTO, ?>> result = new HashMap<>();
@@ -52,7 +52,7 @@ import com.sap.sailing.domain.common.dto.LeaderboardEntryDTO;
import com.sap.sailing.domain.common.dto.LeaderboardRowDTO; import com.sap.sailing.domain.common.dto.LeaderboardRowDTO;
import com.sap.sailing.domain.common.dto.RaceColumnDTO; import com.sap.sailing.domain.common.dto.RaceColumnDTO;
import com.sap.sailing.domain.common.impl.InvertibleComparatorAdapter; import com.sap.sailing.domain.common.impl.InvertibleComparatorAdapter;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettings; import com.sap.sailing.gwt.settings.client.leaderboard.MultiRaceLeaderboardSettings;
import com.sap.sailing.gwt.ui.adminconsole.AdminConsoleTableResources; import com.sap.sailing.gwt.ui.adminconsole.AdminConsoleTableResources;
import com.sap.sailing.gwt.ui.client.Collator; import com.sap.sailing.gwt.ui.client.Collator;
import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel; import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel;
@@ -62,8 +62,8 @@ import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.leaderboard.ClassicLeaderboardStyle; import com.sap.sailing.gwt.ui.leaderboard.ClassicLeaderboardStyle;
import com.sap.sailing.gwt.ui.leaderboard.CompetitorColumnBase; import com.sap.sailing.gwt.ui.leaderboard.CompetitorColumnBase;
import com.sap.sailing.gwt.ui.leaderboard.CompetitorFetcher; import com.sap.sailing.gwt.ui.leaderboard.CompetitorFetcher;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardSortableColumnWithMinMax; import com.sap.sailing.gwt.ui.leaderboard.LeaderboardSortableColumnWithMinMax;
import com.sap.sailing.gwt.ui.leaderboard.MultiRaceLeaderboardPanel;
import com.sap.sse.common.Util; import com.sap.sse.common.Util;
import com.sap.sse.gwt.client.ErrorReporter; import com.sap.sse.gwt.client.ErrorReporter;
import com.sap.sse.gwt.client.async.AsyncActionsExecutor; import com.sap.sse.gwt.client.async.AsyncActionsExecutor;
@@ -79,7 +79,7 @@ import com.sap.sse.gwt.client.useragent.UserAgentDetails;
* @author Axel Uhl (d043530) * @author Axel Uhl (d043530)
* *
*/ */
public class EditableLeaderboardPanel extends LeaderboardPanel { public class EditableLeaderboardPanel extends MultiRaceLeaderboardPanel {
private static EditableLeaderboardResources resources = GWT.create(EditableLeaderboardResources.class); private static EditableLeaderboardResources resources = GWT.create(EditableLeaderboardResources.class);
final DateBox lastScoreCorrectionTimeBox; final DateBox lastScoreCorrectionTimeBox;
@@ -99,7 +99,7 @@ public class EditableLeaderboardPanel extends LeaderboardPanel {
@Override @Override
public void onClick(ClickEvent event) { public void onClick(ClickEvent event) {
new SettingsDialog<LeaderboardSettings>(EditableLeaderboardPanel.this, stringMessages).show(); new SettingsDialog<MultiRaceLeaderboardSettings>(EditableLeaderboardPanel.this, stringMessages).show();
} }
} }
@@ -578,7 +578,7 @@ public class EditableLeaderboardPanel extends LeaderboardPanel {
public EditableLeaderboardPanel(final SailingServiceAsync sailingService, AsyncActionsExecutor asyncActionsExecutor, public EditableLeaderboardPanel(final SailingServiceAsync sailingService, AsyncActionsExecutor asyncActionsExecutor,
String leaderboardName, String leaderboardGroupName, final ErrorReporter errorReporter, String leaderboardName, String leaderboardGroupName, final ErrorReporter errorReporter,
final StringMessages stringMessages, UserAgentDetails userAgent) { final StringMessages stringMessages, UserAgentDetails userAgent) {
super(null, null, sailingService, asyncActionsExecutor, new LeaderboardSettings(), super(null, null, sailingService, asyncActionsExecutor, new MultiRaceLeaderboardSettings(),
new CompetitorSelectionModel(/* hasMultiSelection */true), new CompetitorSelectionModel(/* hasMultiSelection */true),
leaderboardName, errorReporter, stringMessages, /* showRaceDetails */ true,new ClassicLeaderboardStyle()); leaderboardName, errorReporter, stringMessages, /* showRaceDetails */ true,new ClassicLeaderboardStyle());
suppressedCompetitorsShown = new ListDataProvider<CompetitorDTO>(new ArrayList<CompetitorDTO>()); suppressedCompetitorsShown = new ListDataProvider<CompetitorDTO>(new ArrayList<CompetitorDTO>());
@@ -17,6 +17,7 @@ import com.sap.sailing.gwt.ui.client.RaceTimesInfoProviderListener;
import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.client.shared.racemap.RaceCompetitorSet.CompetitorsForRaceDefinedListener; import com.sap.sailing.gwt.ui.client.shared.racemap.RaceCompetitorSet.CompetitorsForRaceDefinedListener;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel; import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel;
import com.sap.sailing.gwt.ui.leaderboard.SingleRaceLeaderboardPanel;
import com.sap.sailing.gwt.ui.shared.RaceTimesInfoDTO; import com.sap.sailing.gwt.ui.shared.RaceTimesInfoDTO;
import com.sap.sse.gwt.client.player.Timer; import com.sap.sse.gwt.client.player.Timer;
@@ -53,7 +54,7 @@ public abstract class AbstractRaceBoardMode implements RaceBoardMode, RaceTimesI
private Timer timer; private Timer timer;
private RegattaAndRaceIdentifier raceIdentifier; private RegattaAndRaceIdentifier raceIdentifier;
private RaceTimePanel raceTimePanel; private RaceTimePanel raceTimePanel;
private LeaderboardPanel leaderboardPanel; private SingleRaceLeaderboardPanel leaderboardPanel;
private RaceBoardPanel raceBoardPanel; private RaceBoardPanel raceBoardPanel;
private Map<RegattaAndRaceIdentifier, RaceTimesInfoDTO> raceTimesInfo; private Map<RegattaAndRaceIdentifier, RaceTimesInfoDTO> raceTimesInfo;
@@ -69,6 +70,7 @@ public abstract class AbstractRaceBoardMode implements RaceBoardMode, RaceTimesI
this.raceTimePanel.addRaceTimesInfoProviderListener(this); this.raceTimePanel.addRaceTimesInfoProviderListener(this);
this.leaderboardPanel = raceBoardPanel.getLeaderboardPanel(); this.leaderboardPanel = raceBoardPanel.getLeaderboardPanel();
this.leaderboardPanel.addLeaderboardUpdateListener(this); this.leaderboardPanel.addLeaderboardUpdateListener(this);
leaderboardPanel.setAutoExpandPreSelected(true);
this.timer = raceBoardPanel.getTimer(); this.timer = raceBoardPanel.getTimer();
this.raceIdentifier = raceBoardPanel.getSelectedRaceIdentifier(); this.raceIdentifier = raceBoardPanel.getSelectedRaceIdentifier();
} }
@@ -91,7 +93,7 @@ public abstract class AbstractRaceBoardMode implements RaceBoardMode, RaceTimesI
return raceTimePanel; return raceTimePanel;
} }
protected LeaderboardPanel getLeaderboardPanel() { protected SingleRaceLeaderboardPanel getLeaderboardPanel() {
return leaderboardPanel; return leaderboardPanel;
} }
@@ -4,9 +4,9 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import com.sap.sailing.domain.common.DetailType; import com.sap.sailing.domain.common.DetailType;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettings;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettingsFactory; import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettingsFactory;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel; import com.sap.sailing.gwt.settings.client.leaderboard.SingleRaceLeaderboardSettings;
import com.sap.sailing.gwt.ui.leaderboard.SingleRaceLeaderboardPanel;
import com.sap.sse.gwt.client.player.Timer.PlayModes; import com.sap.sse.gwt.client.player.Timer.PlayModes;
import com.sap.sse.gwt.client.player.Timer.PlayStates; import com.sap.sse.gwt.client.player.Timer.PlayStates;
import com.sap.sse.security.ui.settings.ComponentContextWithSettingsStorageAndAdditionalSettingsLayers.OnSettingsReloadedCallback; import com.sap.sse.security.ui.settings.ComponentContextWithSettingsStorageAndAdditionalSettingsLayers.OnSettingsReloadedCallback;
@@ -46,19 +46,18 @@ public class FullAnalysisMode extends AbstractRaceBoardMode {
} }
private void adjustLeaderboardSettings() { private void adjustLeaderboardSettings() {
final LeaderboardPanel leaderboardPanel = getLeaderboardPanel(); final SingleRaceLeaderboardPanel leaderboardPanel = getLeaderboardPanel();
final List<DetailType> raceDetailsToShow = new ArrayList<>(); final List<DetailType> raceDetailsToShow = new ArrayList<>();
raceDetailsToShow.add(DetailType.DISPLAY_LEGS); raceDetailsToShow.add(DetailType.DISPLAY_LEGS);
raceDetailsToShow.add(DetailType.RACE_AVERAGE_SPEED_OVER_GROUND_IN_KNOTS); raceDetailsToShow.add(DetailType.RACE_AVERAGE_SPEED_OVER_GROUND_IN_KNOTS);
raceDetailsToShow.add(DetailType.RACE_DISTANCE_TRAVELED); raceDetailsToShow.add(DetailType.RACE_DISTANCE_TRAVELED);
raceDetailsToShow.add(DetailType.RACE_GAP_TO_LEADER_IN_SECONDS); raceDetailsToShow.add(DetailType.RACE_GAP_TO_LEADER_IN_SECONDS);
final LeaderboardSettings additiveSettings = LeaderboardSettingsFactory.getInstance().createNewSettingsWithCustomRaceDetails(raceDetailsToShow); final SingleRaceLeaderboardSettings additiveSettings = LeaderboardSettingsFactory.getInstance().createNewSettingsWithCustomRaceDetails(raceDetailsToShow);
((RaceBoardComponentContext) leaderboardPanel.getComponentContext()).addModesPatching(leaderboardPanel, additiveSettings, new OnSettingsReloadedCallback<LeaderboardSettings>() { ((RaceBoardComponentContext) leaderboardPanel.getComponentContext()).addModesPatching(leaderboardPanel, additiveSettings, new OnSettingsReloadedCallback<SingleRaceLeaderboardSettings>() {
@Override @Override
public void onSettingsReloaded(LeaderboardSettings patchedSettings) { public void onSettingsReloaded(SingleRaceLeaderboardSettings patchedSettings) {
LeaderboardSettings settingsToUse = LeaderboardSettingsFactory.getInstance().createSettingsWithCustomExpandPreselectedRaceState(patchedSettings, true); leaderboardPanel.updateSettings(patchedSettings);
leaderboardPanel.updateSettings(settingsToUse);
} }
}); });
@@ -4,9 +4,9 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import com.sap.sailing.domain.common.DetailType; import com.sap.sailing.domain.common.DetailType;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettings;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettingsFactory; import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettingsFactory;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel; import com.sap.sailing.gwt.settings.client.leaderboard.SingleRaceLeaderboardSettings;
import com.sap.sailing.gwt.ui.leaderboard.SingleRaceLeaderboardPanel;
import com.sap.sse.common.Duration; import com.sap.sse.common.Duration;
import com.sap.sse.common.impl.MillisecondsTimePoint; import com.sap.sse.common.impl.MillisecondsTimePoint;
import com.sap.sse.gwt.client.player.Timer.PlayModes; import com.sap.sse.gwt.client.player.Timer.PlayModes;
@@ -28,18 +28,17 @@ public class PlayerMode extends AbstractRaceBoardMode {
private boolean timerAdjusted; private boolean timerAdjusted;
private void adjustLeaderboardSettings() { private void adjustLeaderboardSettings() {
final LeaderboardPanel leaderboardPanel = getLeaderboardPanel(); final SingleRaceLeaderboardPanel leaderboardPanel = getLeaderboardPanel();
final List<DetailType> raceDetailsToShow = new ArrayList<>(); final List<DetailType> raceDetailsToShow = new ArrayList<>();
raceDetailsToShow.add(DetailType.DISPLAY_LEGS); raceDetailsToShow.add(DetailType.DISPLAY_LEGS);
raceDetailsToShow.add(DetailType.RACE_CURRENT_SPEED_OVER_GROUND_IN_KNOTS); raceDetailsToShow.add(DetailType.RACE_CURRENT_SPEED_OVER_GROUND_IN_KNOTS);
raceDetailsToShow.add(DetailType.RACE_GAP_TO_LEADER_IN_SECONDS); raceDetailsToShow.add(DetailType.RACE_GAP_TO_LEADER_IN_SECONDS);
final LeaderboardSettings additiveSettings = LeaderboardSettingsFactory.getInstance().createNewSettingsWithCustomRaceDetails(raceDetailsToShow); final SingleRaceLeaderboardSettings additiveSettings = LeaderboardSettingsFactory.getInstance().createNewSettingsWithCustomRaceDetails(raceDetailsToShow);
((RaceBoardComponentContext) leaderboardPanel.getComponentContext()).addModesPatching(leaderboardPanel, additiveSettings, new OnSettingsReloadedCallback<LeaderboardSettings>() { ((RaceBoardComponentContext) leaderboardPanel.getComponentContext()).addModesPatching(leaderboardPanel, additiveSettings, new OnSettingsReloadedCallback<SingleRaceLeaderboardSettings>() {
@Override @Override
public void onSettingsReloaded(LeaderboardSettings patchedSettings) { public void onSettingsReloaded(SingleRaceLeaderboardSettings patchedSettings) {
LeaderboardSettings settingsToUse = LeaderboardSettingsFactory.getInstance().createSettingsWithCustomExpandPreselectedRaceState(patchedSettings, true); leaderboardPanel.updateSettings(patchedSettings);
leaderboardPanel.updateSettings(settingsToUse);
} }
}); });
@@ -94,7 +94,7 @@ public class RaceBoardEntryPoint extends AbstractSailingEntryPoint {
} }
} }
if (raceboardData.getRace() == null) { if (raceboardData.getRace() == null) {
createErrorPage(getStringMessages().couldNotFindRaceInRegatte( raceboardContextDefinition.getRaceName(), raceboardContextDefinition.getRegattaName())); createErrorPage(getStringMessages().couldNotFindRaceInRegatta(raceboardContextDefinition.getRaceName(), raceboardContextDefinition.getRegattaName()));
return; return;
} }
@@ -102,7 +102,7 @@ public class RaceBoardEntryPoint extends AbstractSailingEntryPoint {
final StoredSettingsLocation storageDefinition = StoredSettingsLocationFactory final StoredSettingsLocation storageDefinition = StoredSettingsLocationFactory
.createStoredSettingsLocatorForRaceBoard(raceboardContextDefinition, .createStoredSettingsLocatorForRaceBoard(raceboardContextDefinition,
finalMode != null ? finalMode.name() : null); finalMode != null ? finalMode.name() : null);
final RaceBoardPerspectiveLifecycle lifeCycle = new RaceBoardPerspectiveLifecycle(raceboardData.getRace().getRaceIdentifier(), StringMessages.INSTANCE); final RaceBoardPerspectiveLifecycle lifeCycle = new RaceBoardPerspectiveLifecycle(StringMessages.INSTANCE);
RaceBoardComponentContext componentContext = new RaceBoardComponentContext(lifeCycle, getUserService(), storageDefinition); RaceBoardComponentContext componentContext = new RaceBoardComponentContext(lifeCycle, getUserService(), storageDefinition);
componentContext.getInitialSettings(new DefaultOnSettingsLoadedCallback<PerspectiveCompositeSettings<RaceBoardPerspectiveOwnSettings>>() { componentContext.getInitialSettings(new DefaultOnSettingsLoadedCallback<PerspectiveCompositeSettings<RaceBoardPerspectiveOwnSettings>>() {
@@ -39,8 +39,7 @@ import com.sap.sailing.domain.common.dto.LeaderboardDTO;
import com.sap.sailing.domain.common.dto.RaceColumnDTO; import com.sap.sailing.domain.common.dto.RaceColumnDTO;
import com.sap.sailing.domain.common.dto.RaceDTO; import com.sap.sailing.domain.common.dto.RaceDTO;
import com.sap.sailing.gwt.common.authentication.SailingAuthenticationEntryPointLinkFactory; import com.sap.sailing.gwt.common.authentication.SailingAuthenticationEntryPointLinkFactory;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardPanelLifecycle; import com.sap.sailing.gwt.settings.client.leaderboard.SingleRaceLeaderboardSettings;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettings;
import com.sap.sailing.gwt.settings.client.raceboard.RaceBoardPerspectiveOwnSettings; import com.sap.sailing.gwt.settings.client.raceboard.RaceBoardPerspectiveOwnSettings;
import com.sap.sailing.gwt.ui.client.CompetitorColorProvider; import com.sap.sailing.gwt.ui.client.CompetitorColorProvider;
import com.sap.sailing.gwt.ui.client.CompetitorColorProviderImpl; import com.sap.sailing.gwt.ui.client.CompetitorColorProviderImpl;
@@ -76,7 +75,7 @@ import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMapResources;
import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMapSettings; import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMapSettings;
import com.sap.sailing.gwt.ui.leaderboard.ClassicLeaderboardStyle; import com.sap.sailing.gwt.ui.leaderboard.ClassicLeaderboardStyle;
import com.sap.sailing.gwt.ui.leaderboard.CompetitorFilterPanel; import com.sap.sailing.gwt.ui.leaderboard.CompetitorFilterPanel;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel; import com.sap.sailing.gwt.ui.leaderboard.SingleRaceLeaderboardPanel;
import com.sap.sailing.gwt.ui.raceboard.RaceBoardResources.RaceBoardMainCss; import com.sap.sailing.gwt.ui.raceboard.RaceBoardResources.RaceBoardMainCss;
import com.sap.sailing.gwt.ui.shared.RegattaDTO; import com.sap.sailing.gwt.ui.shared.RegattaDTO;
import com.sap.sse.common.Util; import com.sap.sse.common.Util;
@@ -129,7 +128,7 @@ public class RaceBoardPanel
private final RegattaAndRaceIdentifier selectedRaceIdentifier; private final RegattaAndRaceIdentifier selectedRaceIdentifier;
private final String leaderboardName; private final String leaderboardName;
private final LeaderboardPanel leaderboardPanel; private final SingleRaceLeaderboardPanel leaderboardPanel;
private WindChart windChart; private WindChart windChart;
private MultiCompetitorRaceChart competitorChart; private MultiCompetitorRaceChart competitorChart;
private MediaPlayerManagerComponent mediaPlayerManagerComponent; private MediaPlayerManagerComponent mediaPlayerManagerComponent;
@@ -311,6 +310,7 @@ public class RaceBoardPanel
} }
} }
} }
racetimePanel = new RaceTimePanel(this, componentContext, raceTimePanelLifecycle, userService, timer, racetimePanel = new RaceTimePanel(this, componentContext, raceTimePanelLifecycle, userService, timer,
timeRangeWithZoomModel, timeRangeWithZoomModel,
stringMessages, raceTimesInfoProvider, getPerspectiveSettings().isCanReplayDuringLiveRaces(), stringMessages, raceTimesInfoProvider, getPerspectiveSettings().isCanReplayDuringLiveRaces(),
@@ -449,29 +449,29 @@ public class RaceBoardPanel
} }
} }
private LeaderboardPanel createLeaderboardPanel(RaceBoardPerspectiveLifecycle lifecycle, private SingleRaceLeaderboardPanel createLeaderboardPanel(RaceBoardPerspectiveLifecycle lifecycle,
PerspectiveCompositeSettings<RaceBoardPerspectiveOwnSettings> settings, String leaderboardName, PerspectiveCompositeSettings<RaceBoardPerspectiveOwnSettings> settings, String leaderboardName,
String leaderboardGroupName, String leaderboardGroupName,
CompetitorFilterPanel competitorSearchTextBox) { CompetitorFilterPanel competitorSearchTextBox) {
LeaderboardPanelLifecycle leaderboardPanelLifecycle = getPerspectiveLifecycle().getLeaderboardPanelLifecycle(); SingleRaceLeaderboardPanelLifecycle leaderboardPanelLifecycle = getPerspectiveLifecycle().getLeaderboardPanelLifecycle();
LeaderboardSettings leaderboardSettings = settings SingleRaceLeaderboardSettings leaderboardSettings = settings
.findSettingsByComponentId(leaderboardPanelLifecycle.getComponentId()); .findSettingsByComponentId(leaderboardPanelLifecycle.getComponentId());
return new LeaderboardPanel(this, getComponentContext(), sailingService, asyncActionsExecutor, return new SingleRaceLeaderboardPanel(this, getComponentContext(), sailingService, asyncActionsExecutor,
leaderboardSettings, leaderboardSettings,
selectedRaceIdentifier != null, selectedRaceIdentifier, selectedRaceIdentifier != null, selectedRaceIdentifier,
competitorSelectionProvider, timer, leaderboardGroupName, leaderboardName, errorReporter, stringMessages, competitorSelectionProvider, timer, leaderboardGroupName, leaderboardName, errorReporter, stringMessages,
/* showRaceDetails */ true, competitorSearchTextBox, /* showRaceDetails */ true, competitorSearchTextBox,
/* showSelectionCheckbox */ true, raceTimesInfoProvider, /* autoExpandLastRaceColumn */ false, /* showSelectionCheckbox */ true, raceTimesInfoProvider, /* autoExpandLastRaceColumn */ false,
/* don't adjust the timer's delay from the leaderboard; control it solely from the RaceTimesInfoProvider */ false, /* don't adjust the timer's delay from the leaderboard; control it solely from the RaceTimesInfoProvider */ false,
/* autoApplyTopNFilter */ false, /* showCompetitorFilterStatus */ false, /* enableSyncScroller */ false,new ClassicLeaderboardStyle()); /* autoApplyTopNFilter */ false, /* showCompetitorFilterStatus */ false, /* enableSyncScroller */ false, new ClassicLeaderboardStyle());
} }
private void setComponentVisible(SideBySideComponentViewer componentViewer, Component<?> component, boolean visible) { private void setComponentVisible(SideBySideComponentViewer componentViewer, Component<?> component, boolean visible) {
component.setVisible(visible); component.setVisible(visible);
componentViewer.forceLayout(); componentViewer.forceLayout();
} }
LeaderboardPanel getLeaderboardPanel() { SingleRaceLeaderboardPanel getLeaderboardPanel() {
return leaderboardPanel; return leaderboardPanel;
} }
@@ -1,8 +1,6 @@
package com.sap.sailing.gwt.ui.raceboard; package com.sap.sailing.gwt.ui.raceboard;
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
import com.sap.sailing.domain.common.dto.AbstractLeaderboardDTO; import com.sap.sailing.domain.common.dto.AbstractLeaderboardDTO;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardPanelLifecycle;
import com.sap.sailing.gwt.settings.client.raceboard.RaceBoardPerspectiveOwnSettings; import com.sap.sailing.gwt.settings.client.raceboard.RaceBoardPerspectiveOwnSettings;
import com.sap.sailing.gwt.ui.client.RaceTimePanelLifecycle; import com.sap.sailing.gwt.ui.client.RaceTimePanelLifecycle;
import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sailing.gwt.ui.client.StringMessages;
@@ -19,7 +17,7 @@ public class RaceBoardPerspectiveLifecycle extends AbstractPerspectiveLifecycle<
private final StringMessages stringMessages; private final StringMessages stringMessages;
private final RaceMapLifecycle raceMapLifecycle; private final RaceMapLifecycle raceMapLifecycle;
private final WindChartLifecycle windChartLifecycle; private final WindChartLifecycle windChartLifecycle;
private final LeaderboardPanelLifecycle leaderboardPanelLifecycle; private final SingleRaceLeaderboardPanelLifecycle leaderboardPanelLifecycle;
private final MultiCompetitorRaceChartLifecycle multiCompetitorRaceChartLifecycle; private final MultiCompetitorRaceChartLifecycle multiCompetitorRaceChartLifecycle;
private final MediaPlayerLifecycle mediaPlayerLifecycle; private final MediaPlayerLifecycle mediaPlayerLifecycle;
private final RaceTimePanelLifecycle raceTimePanelLifecycle; private final RaceTimePanelLifecycle raceTimePanelLifecycle;
@@ -27,20 +25,15 @@ public class RaceBoardPerspectiveLifecycle extends AbstractPerspectiveLifecycle<
public static final String ID = "rb"; public static final String ID = "rb";
//constructor used by Standalone RaceBoard //constructor used by Standalone RaceBoard
public RaceBoardPerspectiveLifecycle(RegattaAndRaceIdentifier raceIdentifier, StringMessages stringMessages) { public RaceBoardPerspectiveLifecycle(StringMessages stringMessages) {
this(raceIdentifier, null, stringMessages); this(null, stringMessages);
} }
//constructor used by AutoPlay raceBoard
public RaceBoardPerspectiveLifecycle(AbstractLeaderboardDTO leaderboard, StringMessages stringMessages) { public RaceBoardPerspectiveLifecycle(AbstractLeaderboardDTO leaderboard, StringMessages stringMessages) {
this(null, leaderboard, stringMessages);
}
private RaceBoardPerspectiveLifecycle(RegattaAndRaceIdentifier raceIdentifier, AbstractLeaderboardDTO leaderboard, StringMessages stringMessages) {
this.stringMessages = stringMessages; this.stringMessages = stringMessages;
raceMapLifecycle = new RaceMapLifecycle(stringMessages); raceMapLifecycle = new RaceMapLifecycle(stringMessages);
windChartLifecycle = new WindChartLifecycle(stringMessages); windChartLifecycle = new WindChartLifecycle(stringMessages);
leaderboardPanelLifecycle = raceIdentifier == null ? new LeaderboardPanelLifecycle(leaderboard, stringMessages) : new SingleRaceLeaderboardPanelLifecycle(raceIdentifier, stringMessages); leaderboardPanelLifecycle = new SingleRaceLeaderboardPanelLifecycle(stringMessages);
multiCompetitorRaceChartLifecycle = new MultiCompetitorRaceChartLifecycle(stringMessages, false); multiCompetitorRaceChartLifecycle = new MultiCompetitorRaceChartLifecycle(stringMessages, false);
mediaPlayerLifecycle = new MediaPlayerLifecycle(stringMessages); mediaPlayerLifecycle = new MediaPlayerLifecycle(stringMessages);
raceTimePanelLifecycle = new RaceTimePanelLifecycle(stringMessages); raceTimePanelLifecycle = new RaceTimePanelLifecycle(stringMessages);
@@ -81,7 +74,7 @@ public class RaceBoardPerspectiveLifecycle extends AbstractPerspectiveLifecycle<
return windChartLifecycle; return windChartLifecycle;
} }
public LeaderboardPanelLifecycle getLeaderboardPanelLifecycle() { public SingleRaceLeaderboardPanelLifecycle getLeaderboardPanelLifecycle() {
return leaderboardPanelLifecycle; return leaderboardPanelLifecycle;
} }
@@ -1,35 +1,29 @@
package com.sap.sailing.gwt.ui.raceboard; package com.sap.sailing.gwt.ui.raceboard;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
import com.google.gwt.dom.client.Document; import com.google.gwt.dom.client.Document;
import com.sap.sailing.domain.common.DetailType; import com.sap.sailing.domain.common.DetailType;
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardPanelLifecycle; import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardPanelLifecycle;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettings; import com.sap.sailing.gwt.settings.client.leaderboard.SingleRaceLeaderboardSettings;
import com.sap.sailing.gwt.settings.client.leaderboard.SingleRaceLeaderboardSettingsDialogComponent;
import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sse.common.settings.generic.support.SettingsUtil; import com.sap.sse.common.settings.generic.support.SettingsUtil;
public class SingleRaceLeaderboardPanelLifecycle extends LeaderboardPanelLifecycle { public class SingleRaceLeaderboardPanelLifecycle extends LeaderboardPanelLifecycle<SingleRaceLeaderboardSettings> {
private static final long DEFAULT_REFRESH_INTERVAL = 1000L; private static final long DEFAULT_REFRESH_INTERVAL = 1000L;
private final boolean isScreenLargeEnoughToInitiallyDisplayLeaderboard; private final boolean isScreenLargeEnoughToInitiallyDisplayLeaderboard;
private final RegattaAndRaceIdentifier raceIdentifier;
public SingleRaceLeaderboardPanelLifecycle(RegattaAndRaceIdentifier raceIdentifier, StringMessages stringMessages) { public SingleRaceLeaderboardPanelLifecycle(StringMessages stringMessages) {
super(null, stringMessages); super(stringMessages);
this.raceIdentifier = raceIdentifier;
this.isScreenLargeEnoughToInitiallyDisplayLeaderboard = Document.get().getClientWidth() >= 1024; this.isScreenLargeEnoughToInitiallyDisplayLeaderboard = Document.get().getClientWidth() >= 1024;
} }
@Override @Override
public LeaderboardSettings createDefaultSettings() { public SingleRaceLeaderboardSettings createDefaultSettings() {
List<String> namesOfRaceColumnsToShow = null;
List<String> namesOfRacesToShow = Collections.singletonList(raceIdentifier.getRaceName());
List<DetailType> raceDetails = new ArrayList<DetailType>(); List<DetailType> raceDetails = new ArrayList<DetailType>();
raceDetails.add(DetailType.RACE_DISTANCE_TRAVELED); raceDetails.add(DetailType.RACE_DISTANCE_TRAVELED);
raceDetails.add(DetailType.RACE_AVERAGE_SPEED_OVER_GROUND_IN_KNOTS); raceDetails.add(DetailType.RACE_AVERAGE_SPEED_OVER_GROUND_IN_KNOTS);
@@ -37,9 +31,8 @@ public class SingleRaceLeaderboardPanelLifecycle extends LeaderboardPanelLifecyc
raceDetails.add(DetailType.NUMBER_OF_MANEUVERS); raceDetails.add(DetailType.NUMBER_OF_MANEUVERS);
raceDetails.add(DetailType.DISPLAY_LEGS); raceDetails.add(DetailType.DISPLAY_LEGS);
List<DetailType> overallDetails = new ArrayList<>(); List<DetailType> overallDetails = new ArrayList<>();
LeaderboardSettings defaultSettings = new LeaderboardSettings(); SingleRaceLeaderboardSettings defaultSettings = new SingleRaceLeaderboardSettings();
LeaderboardSettings settings = new LeaderboardSettings(defaultSettings.getManeuverDetailsToShow(), defaultSettings.getLegDetailsToShow(), defaultSettings.getRaceDetailsToShow(), overallDetails, namesOfRaceColumnsToShow, namesOfRacesToShow, SingleRaceLeaderboardSettings settings = new SingleRaceLeaderboardSettings(defaultSettings.getManeuverDetailsToShow(), defaultSettings.getLegDetailsToShow(), defaultSettings.getRaceDetailsToShow(), overallDetails, DEFAULT_REFRESH_INTERVAL, defaultSettings.isShowAddedScores(), defaultSettings.isShowOverallColumnWithNumberOfRacesCompletedPerCompetitor(),
defaultSettings.getNumberOfLastRacesToShow(), false, DEFAULT_REFRESH_INTERVAL, raceIdentifier.getRaceName(), defaultSettings.isSortAscending(), defaultSettings.isUpdateUponPlayStateChange(), defaultSettings.getActiveRaceColumnSelectionStrategy(), defaultSettings.isShowAddedScores(), defaultSettings.isShowOverallColumnWithNumberOfRacesCompletedPerCompetitor(),
/*showCompetitorSailIdColumn*/ true, /*showCompetitorSailIdColumn*/ true,
/* /*
* don't showCompetitorFullNameColumn in case screen is so small that we don't even display the * don't showCompetitorFullNameColumn in case screen is so small that we don't even display the
@@ -55,19 +48,12 @@ public class SingleRaceLeaderboardPanelLifecycle extends LeaderboardPanelLifecyc
} }
@Override @Override
public LeaderboardSettings extractDocumentSettings(LeaderboardSettings currentLeaderboardSettings) { public SingleRaceLeaderboardSettings extractDocumentSettings(SingleRaceLeaderboardSettings currentLeaderboardSettings) {
LeaderboardSettings defaultLeaderboardSettings = createDefaultSettings(); SingleRaceLeaderboardSettings defaultLeaderboardSettings = createDefaultSettings();
LeaderboardSettings contextSpecificLeaderboardSettings = new LeaderboardSettings( SingleRaceLeaderboardSettings contextSpecificLeaderboardSettings = new SingleRaceLeaderboardSettings(
currentLeaderboardSettings.getManeuverDetailsToShow(), currentLeaderboardSettings.getLegDetailsToShow(), currentLeaderboardSettings.getManeuverDetailsToShow(), currentLeaderboardSettings.getLegDetailsToShow(),
currentLeaderboardSettings.getRaceDetailsToShow(), currentLeaderboardSettings.getOverallDetailsToShow(), currentLeaderboardSettings.getRaceDetailsToShow(), currentLeaderboardSettings.getOverallDetailsToShow(),
defaultLeaderboardSettings.getNamesOfRaceColumnsToShow(),
defaultLeaderboardSettings.getNamesOfRacesToShow(),
currentLeaderboardSettings.getNumberOfLastRacesToShow(),
currentLeaderboardSettings.isAutoExpandPreSelectedRace(),
currentLeaderboardSettings.getDelayBetweenAutoAdvancesInMilliseconds(), currentLeaderboardSettings.getDelayBetweenAutoAdvancesInMilliseconds(),
defaultLeaderboardSettings.getNameOfRaceToSort(), currentLeaderboardSettings.isSortAscending(),
currentLeaderboardSettings.isUpdateUponPlayStateChange(),
currentLeaderboardSettings.getActiveRaceColumnSelectionStrategy(),
currentLeaderboardSettings.isShowAddedScores(), currentLeaderboardSettings.isShowAddedScores(),
currentLeaderboardSettings.isShowOverallColumnWithNumberOfRacesCompletedPerCompetitor(), currentLeaderboardSettings.isShowOverallColumnWithNumberOfRacesCompletedPerCompetitor(),
currentLeaderboardSettings.isShowCompetitorSailIdColumn(), currentLeaderboardSettings.isShowCompetitorSailIdColumn(),
@@ -76,4 +62,25 @@ public class SingleRaceLeaderboardPanelLifecycle extends LeaderboardPanelLifecyc
currentLeaderboardSettings.isShowCompetitorNationality()); currentLeaderboardSettings.isShowCompetitorNationality());
return SettingsUtil.copyValues(contextSpecificLeaderboardSettings, defaultLeaderboardSettings); return SettingsUtil.copyValues(contextSpecificLeaderboardSettings, defaultLeaderboardSettings);
} }
@Override
public SingleRaceLeaderboardSettings extractUserSettings(SingleRaceLeaderboardSettings currentLeaderboardSettings) {
SingleRaceLeaderboardSettings defaultLeaderboardSettings = createDefaultSettings();
SingleRaceLeaderboardSettings globalLeaderboardSettings = new SingleRaceLeaderboardSettings(
currentLeaderboardSettings.getManeuverDetailsToShow(), currentLeaderboardSettings.getLegDetailsToShow(),
currentLeaderboardSettings.getRaceDetailsToShow(), currentLeaderboardSettings.getOverallDetailsToShow(),
currentLeaderboardSettings.getDelayBetweenAutoAdvancesInMilliseconds(),
currentLeaderboardSettings.isShowAddedScores(),
currentLeaderboardSettings.isShowOverallColumnWithNumberOfRacesCompletedPerCompetitor(),
currentLeaderboardSettings.isShowCompetitorSailIdColumn(),
currentLeaderboardSettings.isShowCompetitorFullNameColumn(),
currentLeaderboardSettings.isShowCompetitorNationality(),currentLeaderboardSettings.isShowRaceRankColumn());
return SettingsUtil.copyValues(globalLeaderboardSettings, defaultLeaderboardSettings);
}
@Override
public SingleRaceLeaderboardSettingsDialogComponent getSettingsDialogComponent(SingleRaceLeaderboardSettings settings) {
return new SingleRaceLeaderboardSettingsDialogComponent(settings, stringMessages);
}
} }
@@ -13,6 +13,7 @@ import com.google.gwt.maps.client.events.idle.IdleMapHandler;
import com.sap.sailing.domain.common.DetailType; import com.sap.sailing.domain.common.DetailType;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettings; import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettings;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettingsFactory; import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettingsFactory;
import com.sap.sailing.gwt.settings.client.leaderboard.SingleRaceLeaderboardSettings;
import com.sap.sailing.gwt.ui.client.shared.charts.ChartSettings; import com.sap.sailing.gwt.ui.client.shared.charts.ChartSettings;
import com.sap.sailing.gwt.ui.client.shared.charts.MultiCompetitorRaceChart; import com.sap.sailing.gwt.ui.client.shared.charts.MultiCompetitorRaceChart;
import com.sap.sailing.gwt.ui.client.shared.charts.MultiCompetitorRaceChartSettings; import com.sap.sailing.gwt.ui.client.shared.charts.MultiCompetitorRaceChartSettings;
@@ -20,7 +21,7 @@ import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMap;
import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMapSettings; import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMapSettings;
import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMapZoomSettings; import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMapZoomSettings;
import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMapZoomSettings.ZoomTypes; import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMapZoomSettings.ZoomTypes;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel; import com.sap.sailing.gwt.ui.leaderboard.SingleRaceLeaderboardPanel;
import com.sap.sse.common.Duration; import com.sap.sse.common.Duration;
import com.sap.sse.common.impl.MillisecondsTimePoint; import com.sap.sse.common.impl.MillisecondsTimePoint;
import com.sap.sse.common.settings.util.SettingsDefaultValuesUtils; import com.sap.sse.common.settings.util.SettingsDefaultValuesUtils;
@@ -179,7 +180,7 @@ public class StartAnalysisMode extends RaceBoardModeWithPerRaceCompetitors {
} }
private void adjustLeaderboardSettings() { private void adjustLeaderboardSettings() {
final LeaderboardPanel leaderboardPanel = getLeaderboardPanel(); final SingleRaceLeaderboardPanel leaderboardPanel = getLeaderboardPanel();
final List<DetailType> raceDetailsToShow = new ArrayList<>(); final List<DetailType> raceDetailsToShow = new ArrayList<>();
raceDetailsToShow.add(DetailType.RACE_SPEED_OVER_GROUND_FIVE_SECONDS_BEFORE_START); raceDetailsToShow.add(DetailType.RACE_SPEED_OVER_GROUND_FIVE_SECONDS_BEFORE_START);
raceDetailsToShow.add(DetailType.RACE_DISTANCE_TO_START_FIVE_SECONDS_BEFORE_RACE_START); raceDetailsToShow.add(DetailType.RACE_DISTANCE_TO_START_FIVE_SECONDS_BEFORE_RACE_START);
@@ -189,13 +190,12 @@ public class StartAnalysisMode extends RaceBoardModeWithPerRaceCompetitors {
raceDetailsToShow.add(DetailType.SPEED_OVER_GROUND_WHEN_PASSING_START); raceDetailsToShow.add(DetailType.SPEED_OVER_GROUND_WHEN_PASSING_START);
raceDetailsToShow.add(DetailType.START_TACK); raceDetailsToShow.add(DetailType.START_TACK);
raceDetailsToShow.add(DetailType.RACE_GAP_TO_LEADER_IN_SECONDS); raceDetailsToShow.add(DetailType.RACE_GAP_TO_LEADER_IN_SECONDS);
final LeaderboardSettings additiveSettings = LeaderboardSettingsFactory.getInstance().createNewSettingsWithCustomRaceDetails(raceDetailsToShow); final SingleRaceLeaderboardSettings additiveSettings = LeaderboardSettingsFactory.getInstance().createNewSettingsWithCustomRaceDetails(raceDetailsToShow);
((RaceBoardComponentContext) leaderboardPanel.getComponentContext()).addModesPatching(leaderboardPanel, additiveSettings, new OnSettingsReloadedCallback<LeaderboardSettings>() { ((RaceBoardComponentContext) leaderboardPanel.getComponentContext()).addModesPatching(leaderboardPanel, additiveSettings, new OnSettingsReloadedCallback<SingleRaceLeaderboardSettings>() {
@Override @Override
public void onSettingsReloaded(LeaderboardSettings patchedSettings) { public void onSettingsReloaded(SingleRaceLeaderboardSettings patchedSettings) {
LeaderboardSettings settingsToUse = LeaderboardSettingsFactory.getInstance().createSettingsWithCustomExpandPreselectedRaceState(patchedSettings, true); leaderboardPanel.updateSettings(patchedSettings);
leaderboardPanel.updateSettings(settingsToUse);
} }
}); });
@@ -6,11 +6,11 @@ import java.util.List;
import com.sap.sailing.domain.common.DetailType; import com.sap.sailing.domain.common.DetailType;
import com.sap.sailing.domain.common.dto.CompetitorDTO; import com.sap.sailing.domain.common.dto.CompetitorDTO;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettings;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettingsFactory; import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettingsFactory;
import com.sap.sailing.gwt.settings.client.leaderboard.SingleRaceLeaderboardSettings;
import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMap; import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMap;
import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMapSettings; import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMapSettings;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel; import com.sap.sailing.gwt.ui.leaderboard.SingleRaceLeaderboardPanel;
import com.sap.sailing.gwt.ui.shared.MarkPassingTimesDTO; import com.sap.sailing.gwt.ui.shared.MarkPassingTimesDTO;
import com.sap.sse.common.Duration; import com.sap.sse.common.Duration;
import com.sap.sse.common.Util; import com.sap.sse.common.Util;
@@ -41,19 +41,18 @@ public class WinningLanesMode extends RaceBoardModeWithPerRaceCompetitors {
} }
private void adjustLeaderboardSettings() { private void adjustLeaderboardSettings() {
final LeaderboardPanel leaderboardPanel = getLeaderboardPanel(); final SingleRaceLeaderboardPanel leaderboardPanel = getLeaderboardPanel();
final List<DetailType> raceDetailsToShow = new ArrayList<>(); final List<DetailType> raceDetailsToShow = new ArrayList<>();
raceDetailsToShow.add(DetailType.RACE_AVERAGE_ABSOLUTE_CROSS_TRACK_ERROR_IN_METERS); raceDetailsToShow.add(DetailType.RACE_AVERAGE_ABSOLUTE_CROSS_TRACK_ERROR_IN_METERS);
raceDetailsToShow.add(DetailType.RACE_AVERAGE_SIGNED_CROSS_TRACK_ERROR_IN_METERS); raceDetailsToShow.add(DetailType.RACE_AVERAGE_SIGNED_CROSS_TRACK_ERROR_IN_METERS);
raceDetailsToShow.add(DetailType.RACE_DISTANCE_TRAVELED); raceDetailsToShow.add(DetailType.RACE_DISTANCE_TRAVELED);
raceDetailsToShow.add(DetailType.RACE_TIME_TRAVELED); raceDetailsToShow.add(DetailType.RACE_TIME_TRAVELED);
final LeaderboardSettings additiveSettings = LeaderboardSettingsFactory.getInstance().createNewSettingsWithCustomRaceDetails(raceDetailsToShow); final SingleRaceLeaderboardSettings additiveSettings = LeaderboardSettingsFactory.getInstance().createNewSettingsWithCustomRaceDetails(raceDetailsToShow);
((RaceBoardComponentContext) leaderboardPanel.getComponentContext()).addModesPatching(leaderboardPanel, additiveSettings, new OnSettingsReloadedCallback<LeaderboardSettings>() { ((RaceBoardComponentContext) leaderboardPanel.getComponentContext()).addModesPatching(leaderboardPanel, additiveSettings, new OnSettingsReloadedCallback<SingleRaceLeaderboardSettings>() {
@Override @Override
public void onSettingsReloaded(LeaderboardSettings patchedSettings) { public void onSettingsReloaded(SingleRaceLeaderboardSettings patchedSettings) {
LeaderboardSettings settingsToUse = LeaderboardSettingsFactory.getInstance().createSettingsWithCustomExpandPreselectedRaceState(patchedSettings, true); leaderboardPanel.updateSettings(patchedSettings);
leaderboardPanel.updateSettings(settingsToUse);
} }
}); });
@@ -30,3 +30,7 @@ makeDefault=Establecer como predeterminado
makeDefaultInProgress=En curso... makeDefaultInProgress=En curso...
settingsSavedMessage=Sus opciones actuales se han definido correctamente como estándar settingsSavedMessage=Sus opciones actuales se han definido correctamente como estándar
settingsSaveErrorMessage=Se ha producido un error durante la definición de sus opciones como estándar settingsSaveErrorMessage=Se ha producido un error durante la definición de sus opciones como estándar
resetToDefault=Reinicializar los valores predeterminados
resetToDefaultInProgress=Reinicializando...
settingsRemoved=Parametrizaciones por defecto restablecidas
settingsRemovedError=No se han podido restablecer las parametrizaciones por defecto
@@ -30,3 +30,7 @@ makeDefault=Définir par défaut
makeDefaultInProgress=En cours... makeDefaultInProgress=En cours...
settingsSavedMessage=Vos options actuelles ont correctement été définies comme options par défaut. settingsSavedMessage=Vos options actuelles ont correctement été définies comme options par défaut.
settingsSaveErrorMessage=Une erreur s''est produite lors de la définition de vos options comme options par défaut. settingsSaveErrorMessage=Une erreur s''est produite lors de la définition de vos options comme options par défaut.
resetToDefault=Réinitialiser sur les valeurs par défaut
resetToDefaultInProgress=Réinitialisation en cours...
settingsRemoved=Options par défaut restaurées
settingsRemovedError=Impossible de restaurer les options par défaut
@@ -30,3 +30,7 @@ makeDefault=デフォルトを設定
makeDefaultInProgress=実行中です... makeDefaultInProgress=実行中です...
settingsSavedMessage=現在の設定がデフォルトとして設定されました settingsSavedMessage=現在の設定がデフォルトとして設定されました
settingsSaveErrorMessage=使用している設定をデフォルトとして設定する際にエラーが発生しました settingsSaveErrorMessage=使用している設定をデフォルトとして設定する際にエラーが発生しました
resetToDefault=デフォルトに戻す
resetToDefaultInProgress=リセット中です...
settingsRemoved=デフォルト設定が復元されました
settingsRemovedError=デフォルト設定を復元できませんでした
@@ -30,3 +30,7 @@ makeDefault=Definir como padrão
makeDefaultInProgress=Em andamento... makeDefaultInProgress=Em andamento...
settingsSavedMessage=Suas configurações atuais foram definidas com êxito como padrão settingsSavedMessage=Suas configurações atuais foram definidas com êxito como padrão
settingsSaveErrorMessage=Ocorreu um erro ao definir suas configurações como padrão settingsSaveErrorMessage=Ocorreu um erro ao definir suas configurações como padrão
resetToDefault=Reinicializar para padrão
resetToDefaultInProgress=Na reinicialização...
settingsRemoved=Configurações padrão restauradas
settingsRemovedError=Não foi possível restaurar configurações padrão
@@ -30,3 +30,7 @@ makeDefault=Использовать по умолчанию
makeDefaultInProgress=Выполняется... makeDefaultInProgress=Выполняется...
settingsSavedMessage=Текущие настройки успешно заданы для использования по умолчанию settingsSavedMessage=Текущие настройки успешно заданы для использования по умолчанию
settingsSaveErrorMessage=При задании настроек для использования по умолчанию возникла ошибка settingsSaveErrorMessage=При задании настроек для использования по умолчанию возникла ошибка
resetToDefault=Сбросить на значения по умолчанию
resetToDefaultInProgress=Выполняется сброс...
settingsRemoved=Настройки по умолчанию восстановлены
settingsRemovedError=Не удалось восстановить настройки по умолчанию
@@ -30,3 +30,7 @@ makeDefault=设为默认值
makeDefaultInProgress=正在进行... makeDefaultInProgress=正在进行...
settingsSavedMessage=当前设置已成功设为默认设置 settingsSavedMessage=当前设置已成功设为默认设置
settingsSaveErrorMessage=将设置设为默认设置时发生错误 settingsSaveErrorMessage=将设置设为默认设置时发生错误
resetToDefault=重置为默认值
resetToDefaultInProgress=正在重置...
settingsRemoved=默认设置已恢复
settingsRemovedError=无法恢复默认设置
Loaded 100 of 106 files, more files were not shown because too many files have changed in this diff. Show more