settings and livecycle seperation preparation

This commit is contained in:
Kai Boernert committed 2017-07-04 18:23:27 +02:00
1 parent 3516408fa0
commit 6ae04f0935
47 files changed
+708 -450

No files matched your search

@@ -3,7 +3,7 @@ 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;
@@ -18,7 +18,7 @@ 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); leaderboardName, errorReporter, stringMessages, /* showRaceDetails */ true);
@@ -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;
} }
@@ -15,14 +15,13 @@ import com.sap.sailing.gwt.autoplay.client.shared.header.SAPHeaderComponentSetti
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.LeaderboardPanel;
import com.sap.sailing.gwt.ui.leaderboard.MultiRaceLeaderboardPanel; 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;
@@ -45,7 +44,7 @@ public class MultiRaceLeaderboardWithHeaderPerspective extends AbstractPerspecti
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 MultiRaceLeaderboardWithHeaderPerspective(Component<?> parent, public MultiRaceLeaderboardWithHeaderPerspective(Component<?> parent,
@@ -193,18 +192,18 @@ public class MultiRaceLeaderboardWithHeaderPerspective extends AbstractPerspecti
withFullscreenButton); withFullscreenButton);
} }
private LeaderboardPanel createLeaderboardPanel(LeaderboardWithHeaderPerspectiveLifecycle lifecycle, 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 MultiRaceLeaderboardPanel(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 */
@@ -23,7 +23,7 @@ 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;
@@ -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())) {
@@ -1,15 +1,13 @@
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.LeaderboardPanel;
import com.sap.sailing.gwt.ui.leaderboard.MultiRaceLeaderboardPanel; 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;
@@ -25,7 +23,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 +43,15 @@ public class RegattaAnalyticsDataManager {
this.multiCompetitorChart = null; this.multiCompetitorChart = null;
} }
public LeaderboardPanel createMultiRaceLeaderboardPanel(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 MultiRaceLeaderboardPanel(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 +70,7 @@ public class RegattaAnalyticsDataManager {
return multiCompetitorChart; return multiCompetitorChart;
} }
public LeaderboardPanel getLeaderboardPanel() { public MultiRaceLeaderboardPanel getLeaderboardPanel() {
return leaderboardPanel; return leaderboardPanel;
} }
@@ -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.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.ComponentContext; import com.sap.sse.gwt.client.shared.settings.ComponentContext;
@@ -31,20 +31,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> consumer) { 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 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) {
final LeaderboardPanel leaderboardPanel = regattaAnalyticsManager.createMultiRaceLeaderboardPanel(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,
@@ -78,12 +77,12 @@ public abstract class SharedLeaderboardRegattaTabView<T extends AbstractEventReg
}); });
} }
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.createStoredSettingsLocatorForEventRegattaLeaderboard(leaderboardName); final StoredSettingsLocation storageDefinition = StoredSettingsLocationFactory.createStoredSettingsLocatorForEventRegattaLeaderboard(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;
} }
@@ -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,18 +5,15 @@ 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;
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.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.MultiRaceLeaderboardPanel;
import com.sap.sse.common.Util; import com.sap.sse.common.Util;
@@ -36,7 +33,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 +55,13 @@ public class EventSeriesAnalyticsDataManager {
this.multiCompetitorChart = null; this.multiCompetitorChart = null;
} }
public LeaderboardPanel createMultiRaceOverallLeaderboardPanel(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 MultiRaceLeaderboardPanel(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 +85,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 +101,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.createMultiRaceOverallLeaderboardPanel(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);
} }
@@ -20,7 +20,7 @@ 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.sap.sailing.gwt.common.client.SharedResources; import com.sap.sailing.gwt.common.client.SharedResources;
import com.sap.sailing.gwt.regattaoverview.client.RegattaRaceStatesComponent.EntryHandler; import com.sap.sailing.gwt.regattaoverview.client.RegattaRaceStatesComponent.EntryHandler;
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.regattaoverview.RegattaOverviewContextDefinition; import com.sap.sailing.gwt.settings.client.regattaoverview.RegattaOverviewContextDefinition;
import com.sap.sailing.gwt.settings.client.regattaoverview.RegattaRaceStatesSettings; import com.sap.sailing.gwt.settings.client.regattaoverview.RegattaRaceStatesSettings;
import com.sap.sailing.gwt.settings.client.utils.StoredSettingsLocationFactory; import com.sap.sailing.gwt.settings.client.utils.StoredSettingsLocationFactory;
@@ -309,7 +309,7 @@ public class RegattaOverviewPanel extends SimplePanel {
if (leaderboardsTabPanel != null) { if (leaderboardsTabPanel != null) {
if (showLeaderboard) { if (showLeaderboard) {
final CompetitorSelectionModel competitorSelectionProvider = new CompetitorSelectionModel(/* hasMultiSelection */ true); final CompetitorSelectionModel competitorSelectionProvider = new CompetitorSelectionModel(/* hasMultiSelection */ true);
final LeaderboardSettings leaderboardSettings = new LeaderboardSettings(); final MultiRaceLeaderboardSettings leaderboardSettings = new MultiRaceLeaderboardSettings();
sailingService.getLeaderboardsByEvent(eventDTO, new MarkedAsyncCallback<List<StrippedLeaderboardDTO>>( sailingService.getLeaderboardsByEvent(eventDTO, new MarkedAsyncCallback<List<StrippedLeaderboardDTO>>(
new AsyncCallback<List<StrippedLeaderboardDTO>>() { new AsyncCallback<List<StrippedLeaderboardDTO>>() {
@Override @Override
@@ -318,7 +318,6 @@ public class RegattaOverviewPanel extends SimplePanel {
for (StrippedLeaderboardDTO leaderboard : result) { for (StrippedLeaderboardDTO leaderboard : result) {
LeaderboardPanel leaderboardPanel = new MultiRaceLeaderboardPanel(null, null, sailingService, LeaderboardPanel leaderboardPanel = new MultiRaceLeaderboardPanel(null, null, sailingService,
new AsyncActionsExecutor(), leaderboardSettings, false, new AsyncActionsExecutor(), leaderboardSettings, false,
/*preSelectedRace*/null,
competitorSelectionProvider, competitorSelectionProvider,
null, leaderboard.name, null, leaderboard.name,
errorReporter, stringMessages, /* showRaceDetails */false); errorReporter, stringMessages, /* showRaceDetails */false);
@@ -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));
} }
@@ -5,11 +5,10 @@ import java.util.List;
import com.sap.sailing.domain.common.dto.AbstractLeaderboardDTO; 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;
@@ -20,17 +19,6 @@ public class LeaderboardPanelLifecycle
this.namesOfRaceColumns = leaderboard != null ? leaderboard.getNamesOfRaceColumns() : new ArrayList<String>(); 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
public String getLocalizedShortName() { public String getLocalizedShortName() {
return stringMessages.leaderboard(); return stringMessages.leaderboard();
@@ -45,32 +33,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(),
currentLeaderboardSettings.isShowCompetitorNationality());
return SettingsUtil.copyValues(globalLeaderboardSettings, defaultLeaderboardSettings);
}
@Override
public LeaderboardSettings extractDocumentSettings(LeaderboardSettings leaderboardSettings) {
return leaderboardSettings;
}
} }
@@ -16,7 +16,6 @@ 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.StringSetSetting;
import com.sap.sse.common.settings.generic.StringSetting; 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,34 +25,34 @@ 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;
/** /**
* Only one of {@link #namesOfRaceColumnsToShow} and {@link #namesOfRacesToShow} must be non-<code>null</code>. * Only one of {@link #namesOfRaceColumnsToShow} and {@link #namesOfRacesToShow} must be non-<code>null</code>.
* Only valid when the {@link #activeRaceColumnSelectionStrategy} is set to EXPLIZIT * Only valid when the {@link #activeRaceColumnSelectionStrategy} is set to EXPLIZIT
*/ */
private StringSetSetting namesOfRaceColumnsToShow; protected StringSetSetting namesOfRaceColumnsToShow;
/** /**
* Only one of {@link #namesOfRaceColumnsToShow} and {@link #namesOfRacesToShow} must be non-<code>null</code>. * Only one of {@link #namesOfRaceColumnsToShow} and {@link #namesOfRacesToShow} must be non-<code>null</code>.
* Only valid when the {@link #activeRaceColumnSelectionStrategy} is set to EXPLIZIT * Only valid when the {@link #activeRaceColumnSelectionStrategy} is set to EXPLIZIT
*/ */
private StringSetSetting namesOfRacesToShow; protected StringSetSetting namesOfRacesToShow;
/** /**
* Only valid when the {@link #activeRaceColumnSelectionStrategy} is set to LAST_N * Only valid when the {@link #activeRaceColumnSelectionStrategy} is set to LAST_N
*/ */
private IntegerSetting numberOfLastRacesToShow; protected IntegerSetting numberOfLastRacesToShow;
private EnumSetSetting<DetailType> maneuverDetailsToShow; protected EnumSetSetting<DetailType> maneuverDetailsToShow;
private EnumSetSetting<DetailType> legDetailsToShow; protected EnumSetSetting<DetailType> legDetailsToShow;
private EnumSetSetting<DetailType> raceDetailsToShow; protected EnumSetSetting<DetailType> raceDetailsToShow;
private EnumSetSetting<DetailType> overallDetailsToShow; protected EnumSetSetting<DetailType> overallDetailsToShow;
private boolean autoExpandPreSelectedRace = false; protected boolean autoExpandPreSelectedRace = false;
private LongSetting delayBetweenAutoAdvancesInMilliseconds; protected LongSetting delayBetweenAutoAdvancesInMilliseconds;
private BooleanSetting updateUponPlayStateChange; protected BooleanSetting updateUponPlayStateChange;
private BooleanSetting isShowCompetitorNationality; protected BooleanSetting isShowCompetitorNationality;
/** /**
* There are two ways to select race columns. * There are two ways to select race columns.
@@ -61,27 +60,27 @@ public class LeaderboardSettings extends AbstractGenericSerializableSettings {
*/ */
public static enum RaceColumnSelectionStrategies { EXPLICIT, LAST_N; } public static enum RaceColumnSelectionStrategies { EXPLICIT, LAST_N; }
private EnumSetting<RaceColumnSelectionStrategies> activeRaceColumnSelectionStrategy; protected EnumSetting<RaceColumnSelectionStrategies> activeRaceColumnSelectionStrategy;
/** /**
* An optional sort column; if <code>null</code>, the leaderboard sorting won't be touched when updating the settings. * 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. * Otherwise, the leaderboard will be sorted by the race column (ascending if {@link #sortAscending}, descending otherwise.
*/ */
private StringSetting nameOfRaceToSort; protected StringSetting nameOfRaceToSort;
private BooleanSetting sortAscending; protected 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;
/** /**
* 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() {
@@ -263,35 +262,4 @@ public class LeaderboardSettings extends AbstractGenericSerializableSettings {
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,6 +1,5 @@
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.List;
@@ -30,32 +29,31 @@ 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.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.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<String, CheckBox> raceColumnCheckboxes;
private final List<String> raceAllRaceColumnNames; protected final List<String> raceAllRaceColumnNames;
private final Map<DetailType, CheckBox> maneuverDetailCheckboxes; protected final Map<DetailType, CheckBox> maneuverDetailCheckboxes;
private final Map<DetailType, CheckBox> legDetailCheckboxes; protected final Map<DetailType, CheckBox> legDetailCheckboxes;
private final Map<DetailType, CheckBox> raceDetailCheckboxes; protected final Map<DetailType, CheckBox> raceDetailCheckboxes;
private final Map<DetailType, CheckBox> overallDetailCheckboxes; protected final Map<DetailType, CheckBox> overallDetailCheckboxes;
private final StringMessages stringMessages; protected final StringMessages stringMessages;
private LongBox refreshIntervalInSecondsBox; protected LongBox refreshIntervalInSecondsBox;
private RaceColumnSelectionStrategies activeRaceColumnSelectionStrategy; protected 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 isCompetitorNationalityColumnVisible; protected CheckBox isCompetitorNationalityColumnVisible;
private LeaderboardSettings initialSettings; protected LeaderboardSettings initialSettings;
public LeaderboardSettingsDialogComponent(LeaderboardSettings initialSettings, List<String> allRaceColumnNames, StringMessages stringMessages) { public LeaderboardSettingsDialogComponent(LeaderboardSettings initialSettings, List<String> allRaceColumnNames, StringMessages stringMessages) {
this.initialSettings = initialSettings; this.initialSettings = initialSettings;
@@ -357,62 +355,10 @@ public class LeaderboardSettingsDialogComponent implements SettingsDialogCompone
} }
@Override @Override
public LeaderboardSettings getResult() { public Validator<T> getValidator() {
List<DetailType> maneuverDetailsToShow = new ArrayList<DetailType>(); return new Validator<T>() {
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(),
isCompetitorNationalityColumnVisible.getValue());
SettingsDefaultValuesUtils.keepDefaults(initialSettings, newSettings);
return newSettings;
}
@Override @Override
public Validator<LeaderboardSettings> getValidator() { public String getErrorMessage(T valueToValidate) {
return new Validator<LeaderboardSettings>() {
@Override
public String getErrorMessage(LeaderboardSettings valueToValidate) {
final String result; final String result;
if (valueToValidate.getLegDetailsToShow().isEmpty()) { if (valueToValidate.getLegDetailsToShow().isEmpty()) {
result = stringMessages.selectAtLeastOneLegDetail(); result = stringMessages.selectAtLeastOneLegDetail();
@@ -23,15 +23,15 @@ 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 createNewSettingsWithCustomRaceDetails(List<DetailType> raceDetailsToShow) { public SingleRaceLeaderboardSettings createNewSettingsWithCustomRaceDetails(List<DetailType> raceDetailsToShow) {
LeaderboardSettings defaultSettings = new LeaderboardSettings(); LeaderboardSettings defaultSettings = new SingleRaceLeaderboardSettings();
return new LeaderboardSettings( return new SingleRaceLeaderboardSettings(
defaultSettings.getManeuverDetailsToShow(), defaultSettings.getManeuverDetailsToShow(),
defaultSettings.getLegDetailsToShow(), defaultSettings.getLegDetailsToShow(),
raceDetailsToShow, defaultSettings.getOverallDetailsToShow(), raceDetailsToShow, defaultSettings.getOverallDetailsToShow(),
@@ -50,8 +50,8 @@ public class LeaderboardSettingsFactory {
defaultSettings.isShowCompetitorNationality()); defaultSettings.isShowCompetitorNationality());
} }
public LeaderboardSettings createSettingsWithCustomExpandPreselectedRaceState(LeaderboardSettings settings, boolean expandPreselectedRace) { public SingleRaceLeaderboardSettings createSettingsWithCustomExpandPreselectedRaceState(SingleRaceLeaderboardSettings settings, boolean expandPreselectedRace) {
return new LeaderboardSettings( return new SingleRaceLeaderboardSettings(
settings.getManeuverDetailsToShow(), settings.getManeuverDetailsToShow(),
settings.getLegDetailsToShow(), settings.getLegDetailsToShow(),
settings.getRaceDetailsToShow(), settings.getOverallDetailsToShow(), settings.getRaceDetailsToShow(), settings.getOverallDetailsToShow(),
@@ -69,14 +69,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();
@@ -94,7 +94,7 @@ public class LeaderboardSettingsFactory {
boolean sortAscending = settingsWithRaceSelection.isSortAscending(); boolean sortAscending = settingsWithRaceSelection.isSortAscending();
boolean updateUponPlayStateChange = settingsWithRaceSelection.isUpdateUponPlayStateChange(); boolean updateUponPlayStateChange = settingsWithRaceSelection.isUpdateUponPlayStateChange();
return new LeaderboardSettings(maneuverDetails, legDetails, raceDetails, overallDetailsToShow, return new MultiRaceLeaderboardSettings(maneuverDetails, legDetails, raceDetails, overallDetailsToShow,
namesOfRaceColumnsToShow, namesOfRacesToShow, numberOfLastRacesToShow, autoExpandPreSelectedRace, refreshIntervalInMs, namesOfRaceColumnsToShow, namesOfRacesToShow, numberOfLastRacesToShow, autoExpandPreSelectedRace, refreshIntervalInMs,
nameOfRaceToSort, sortAscending, updateUponPlayStateChange, strategy, /*showAddedScores*/ false, nameOfRaceToSort, sortAscending, updateUponPlayStateChange, strategy, /*showAddedScores*/ false,
/* showOverallRacesCompleted */ false, showCompetitorSailIdColumn, showCompetitorFullNameColumns, /* showOverallRacesCompleted */ false, showCompetitorSailIdColumn, showCompetitorFullNameColumns,
@@ -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,65 @@
package com.sap.sailing.gwt.settings.client.leaderboard;
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> {
public MultiRaceLeaderboardPanelLifecycle(AbstractLeaderboardDTO leaderboard, StringMessages stringMessages) {
super(leaderboard, stringMessages);
}
@Override
public MultiRaceLeaderboardSettings extractUserSettings(MultiRaceLeaderboardSettings currentLeaderboardSettings) {
MultiRaceLeaderboardSettings defaultLeaderboardSettings = createDefaultSettings();
MultiRaceLeaderboardSettings globalLeaderboardSettings = new MultiRaceLeaderboardSettings(
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(),
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(),
defaultLeaderboardSettings.getNamesOfRacesToShow(),
currentLeaderboardSettings.getNumberOfLastRacesToShow(),
currentLeaderboardSettings.isAutoExpandPreSelectedRace(),
currentLeaderboardSettings.getDelayBetweenAutoAdvancesInMilliseconds(),
defaultLeaderboardSettings.getNameOfRaceToSort(), currentLeaderboardSettings.isSortAscending(),
currentLeaderboardSettings.isUpdateUponPlayStateChange(),
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,65 @@
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.sse.common.settings.util.SettingsDefaultValuesUtils;
public class MultiRaceLeaderboardSettings extends LeaderboardSettings {
public MultiRaceLeaderboardSettings() {
super();
}
public MultiRaceLeaderboardSettings(Collection<DetailType> maneuverDetailsToShow,
Collection<DetailType> legDetailsToShow, Collection<DetailType> raceDetailsToShow,
Collection<DetailType> overallDetailsToShow, List<String> namesOfRaceColumnsToShow,
List<String> namesOfRacesToShow, Integer numberOfLastRacesToShow, boolean autoExpandPreSelectedRace,
Long delayBetweenAutoAdvancesInMilliseconds, String nameOfRaceToSort, boolean sortAscending,
boolean updateUponPlayStateChange, RaceColumnSelectionStrategies activeRaceColumnSelectionStrategy,
boolean showAddedScores, boolean showOverallColumnWithNumberOfRacesCompletedPerCompetitor,
boolean showCompetitorSailIdColumn, boolean showCompetitorFullNameColumn,
boolean isCompetitorNationalityColumnVisible) {
super(maneuverDetailsToShow, legDetailsToShow, raceDetailsToShow, overallDetailsToShow, namesOfRaceColumnsToShow,
namesOfRacesToShow, numberOfLastRacesToShow, autoExpandPreSelectedRace, delayBetweenAutoAdvancesInMilliseconds,
nameOfRaceToSort, sortAscending, updateUponPlayStateChange, activeRaceColumnSelectionStrategy, showAddedScores,
showOverallColumnWithNumberOfRacesCompletedPerCompetitor, showCompetitorSailIdColumn,
showCompetitorFullNameColumn, isCompetitorNationalityColumnVisible);
}
public MultiRaceLeaderboardSettings(Iterable<String> namesOfRaceColumnsToShow) {
super(namesOfRaceColumnsToShow);
}
public LeaderboardSettings overrideDefaultsForNamesOfRaceColumns(List<String> namesOfRaceColumns) {
LeaderboardSettings 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.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;
}
}
@@ -0,0 +1,73 @@
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.sap.sailing.domain.common.DetailType;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettings.RaceColumnSelectionStrategies;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sse.common.settings.util.SettingsDefaultValuesUtils;
public class MultiRaceLeaderboardSettingsDialogComponent
extends LeaderboardSettingsDialogComponent<MultiRaceLeaderboardSettings> {
public MultiRaceLeaderboardSettingsDialogComponent(LeaderboardSettings initialSettings,
List<String> allRaceColumnNames, StringMessages stringMessages) {
super(initialSettings, allRaceColumnNames, stringMessages);
}
@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,
/* 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(),
isCompetitorNationalityColumnVisible.getValue());
SettingsDefaultValuesUtils.keepDefaults(initialSettings, newSettings);
return newSettings;
}
}
@@ -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,7 +6,7 @@ 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(LeaderboardSettings initialSettings, List<String> allRaceColumnNames, StringMessages stringMessages) {
super(initialSettings, allRaceColumnNames, stringMessages); super(initialSettings, allRaceColumnNames, stringMessages);
@@ -0,0 +1,35 @@
package com.sap.sailing.gwt.settings.client.leaderboard;
import java.util.Collection;
import java.util.List;
import com.sap.sailing.domain.common.DetailType;
public class SingleRaceLeaderboardSettings extends LeaderboardSettings {
public SingleRaceLeaderboardSettings() {
super();
// TODO Auto-generated constructor stub
}
public SingleRaceLeaderboardSettings(Collection<DetailType> maneuverDetailsToShow,
Collection<DetailType> legDetailsToShow, Collection<DetailType> raceDetailsToShow,
Collection<DetailType> overallDetailsToShow, List<String> namesOfRaceColumnsToShow,
List<String> namesOfRacesToShow, Integer numberOfLastRacesToShow, boolean autoExpandPreSelectedRace,
Long delayBetweenAutoAdvancesInMilliseconds, String nameOfRaceToSort, boolean sortAscending,
boolean updateUponPlayStateChange, RaceColumnSelectionStrategies activeRaceColumnSelectionStrategy,
boolean showAddedScores, boolean showOverallColumnWithNumberOfRacesCompletedPerCompetitor,
boolean showCompetitorSailIdColumn, boolean showCompetitorFullNameColumn,
boolean isCompetitorNationalityColumnVisible) {
super(maneuverDetailsToShow, legDetailsToShow, raceDetailsToShow, overallDetailsToShow, namesOfRaceColumnsToShow,
namesOfRacesToShow, numberOfLastRacesToShow, autoExpandPreSelectedRace, delayBetweenAutoAdvancesInMilliseconds,
nameOfRaceToSort, sortAscending, updateUponPlayStateChange, activeRaceColumnSelectionStrategy, showAddedScores,
showOverallColumnWithNumberOfRacesCompletedPerCompetitor, showCompetitorSailIdColumn,
showCompetitorFullNameColumn, isCompetitorNationalityColumnVisible);
}
public SingleRaceLeaderboardSettings(Iterable<String> namesOfRaceColumnsToShow) {
super(namesOfRaceColumnsToShow);
}
}
@@ -0,0 +1,72 @@
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.sap.sailing.domain.common.DetailType;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettings.RaceColumnSelectionStrategies;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sse.common.settings.util.SettingsDefaultValuesUtils;
public class SingleRaceLeaderboardSettingsDialogComponent
extends LeaderboardSettingsDialogComponent<SingleRaceLeaderboardSettings> {
public SingleRaceLeaderboardSettingsDialogComponent(SingleRaceLeaderboardSettings initialSettings,
List<String> allRaceColumnNames, StringMessages stringMessages) {
super(initialSettings, allRaceColumnNames, 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());
}
}
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;
SingleRaceLeaderboardSettings newSettings = new SingleRaceLeaderboardSettings(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(),
isCompetitorNationalityColumnVisible.getValue());
SettingsDefaultValuesUtils.keepDefaults(initialSettings, newSettings);
return newSettings;
}
}
@@ -163,7 +163,7 @@ public class LeaderboardEntryPoint extends AbstractSailingEntryPoint {
final MultiRaceLeaderboardViewer leaderboardViewer = new MultiRaceLeaderboardViewer(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);
} }
@@ -82,7 +82,6 @@ import com.sap.sailing.domain.common.impl.InvertibleComparatorAdapter;
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.LeaderboardSettings;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettings.RaceColumnSelectionStrategies; import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettings.RaceColumnSelectionStrategies;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettingsDialogComponent;
import com.sap.sailing.gwt.ui.actions.GetLeaderboardByNameAction; import com.sap.sailing.gwt.ui.actions.GetLeaderboardByNameAction;
import com.sap.sailing.gwt.ui.client.Collator; import com.sap.sailing.gwt.ui.client.Collator;
import com.sap.sailing.gwt.ui.client.CompetitorSelectionChangeListener; import com.sap.sailing.gwt.ui.client.CompetitorSelectionChangeListener;
@@ -125,8 +124,6 @@ import com.sap.sse.gwt.client.shared.components.AbstractCompositeComponent;
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.components.ComponentResources; import com.sap.sse.gwt.client.shared.components.ComponentResources;
import com.sap.sse.gwt.client.shared.components.IsEmbeddableComponent; import com.sap.sse.gwt.client.shared.components.IsEmbeddableComponent;
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; import com.sap.sse.gwt.client.shared.settings.ComponentContext;
/** /**
@@ -135,7 +132,7 @@ import com.sap.sse.gwt.client.shared.settings.ComponentContext;
* @author Axel Uhl (D043530) * @author Axel Uhl (D043530)
* *
*/ */
public abstract class LeaderboardPanel extends AbstractCompositeComponent<LeaderboardSettings> public abstract class LeaderboardPanel<LS extends LeaderboardSettings> extends AbstractCompositeComponent<LS>
implements TimeListener, PlayStateListener, DisplayedLeaderboardRowsProvider, IsEmbeddableComponent, implements TimeListener, PlayStateListener, DisplayedLeaderboardRowsProvider, IsEmbeddableComponent,
CompetitorSelectionChangeListener, LeaderboardFetcher, BusyStateProvider, LeaderboardUpdateProvider { CompetitorSelectionChangeListener, LeaderboardFetcher, BusyStateProvider, LeaderboardUpdateProvider {
private static final LeaderboardResources RESOURCES = GWT.create(LeaderboardResources.class); private static final LeaderboardResources RESOURCES = GWT.create(LeaderboardResources.class);
@@ -387,16 +384,15 @@ public abstract class LeaderboardPanel extends AbstractCompositeComponent<Leader
AsyncActionsExecutor asyncActionsExecutor, LeaderboardSettings settings, AsyncActionsExecutor asyncActionsExecutor, LeaderboardSettings settings,
CompetitorSelectionProvider competitorSelectionProvider, String leaderboardName, CompetitorSelectionProvider competitorSelectionProvider, String leaderboardName,
ErrorReporter errorReporter, final StringMessages stringMessages, boolean showRaceDetails) { ErrorReporter errorReporter, final StringMessages stringMessages, boolean showRaceDetails) {
this(parent, context, sailingService, asyncActionsExecutor, settings, false, /* preSelectedRace */null, this(parent, context, sailingService, asyncActionsExecutor, settings, false,
competitorSelectionProvider, null, leaderboardName, errorReporter, stringMessages, showRaceDetails); competitorSelectionProvider, null, leaderboardName, errorReporter, stringMessages, showRaceDetails);
} }
public LeaderboardPanel(Component<?> parent, ComponentContext<?> context, SailingServiceAsync sailingService, public LeaderboardPanel(Component<?> parent, ComponentContext<?> context, SailingServiceAsync sailingService,
AsyncActionsExecutor asyncActionsExecutor, LeaderboardSettings settings, boolean isEmbedded, AsyncActionsExecutor asyncActionsExecutor, LeaderboardSettings settings, boolean isEmbedded, CompetitorSelectionProvider competitorSelectionProvider,
RegattaAndRaceIdentifier preSelectedRace, CompetitorSelectionProvider competitorSelectionProvider,
String leaderboardGroupName, String leaderboardName, ErrorReporter errorReporter, String leaderboardGroupName, String leaderboardName, ErrorReporter errorReporter,
final StringMessages stringMessages, boolean showRaceDetails) { final StringMessages stringMessages, boolean showRaceDetails) {
this(parent, context, sailingService, asyncActionsExecutor, settings, isEmbedded, preSelectedRace, this(parent, context, sailingService, asyncActionsExecutor, settings, isEmbedded,
competitorSelectionProvider, competitorSelectionProvider,
new Timer( new 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
@@ -410,8 +406,7 @@ public abstract class LeaderboardPanel extends AbstractCompositeComponent<Leader
} }
public LeaderboardPanel(Component<?> parent, ComponentContext<?> context, SailingServiceAsync sailingService, public LeaderboardPanel(Component<?> parent, ComponentContext<?> context, SailingServiceAsync sailingService,
AsyncActionsExecutor asyncActionsExecutor, LeaderboardSettings settings, boolean isEmbedded, AsyncActionsExecutor asyncActionsExecutor, LeaderboardSettings settings, boolean isEmbedded, CompetitorSelectionProvider competitorSelectionProvider,
RegattaAndRaceIdentifier preSelectedRace, CompetitorSelectionProvider competitorSelectionProvider,
Timer timer, String leaderboardGroupName, String leaderboardName, final ErrorReporter errorReporter, Timer timer, String leaderboardGroupName, String leaderboardName, final ErrorReporter errorReporter,
final StringMessages stringMessages, boolean showRaceDetails, CompetitorFilterPanel competitorSearchTextBox, final StringMessages stringMessages, boolean showRaceDetails, CompetitorFilterPanel competitorSearchTextBox,
boolean showSelectionCheckbox, RaceTimesInfoProvider optionalRaceTimesInfoProvider, boolean showSelectionCheckbox, RaceTimesInfoProvider optionalRaceTimesInfoProvider,
@@ -425,7 +420,7 @@ public abstract class LeaderboardPanel extends AbstractCompositeComponent<Leader
this.asyncActionsExecutor = asyncActionsExecutor; this.asyncActionsExecutor = asyncActionsExecutor;
this.isEmbedded = isEmbedded; this.isEmbedded = isEmbedded;
this.competitorSelectionProvider = competitorSelectionProvider; this.competitorSelectionProvider = competitorSelectionProvider;
competitorSelectionProvider.addCompetitorSelectionChangeListener(this); this.competitorSelectionProvider.addCompetitorSelectionChangeListener(this);
this.setLeaderboardName(leaderboardName); this.setLeaderboardName(leaderboardName);
this.errorReporter = errorReporter; this.errorReporter = errorReporter;
this.stringMessages = stringMessages; this.stringMessages = stringMessages;
@@ -448,19 +443,6 @@ public abstract class LeaderboardPanel extends AbstractCompositeComponent<Leader
timer.addPlayStateListener(this); timer.addPlayStateListener(this);
timer.addTimeListener(this); timer.addTimeListener(this);
switch (settings.getActiveRaceColumnSelectionStrategy()) {
case EXPLICIT:
if (preSelectedRace == null) {
raceColumnSelection = new ExplicitRaceColumnSelection();
} else {
raceColumnSelection = new ExplicitRaceColumnSelectionWithPreselectedRace(preSelectedRace);
}
break;
case LAST_N:
setRaceColumnSelectionToLastNStrategy(settings.getNumberOfLastRacesToShow());
break;
}
totalRankColumn = new TotalRankColumn(); totalRankColumn = new TotalRankColumn();
leaderboardTable = new FlushableSortedCellTableWithStylableHeaders<LeaderboardRowDTO>(/* pageSize */10000, leaderboardTable = new FlushableSortedCellTableWithStylableHeaders<LeaderboardRowDTO>(/* pageSize */10000,
TABLE_RESOURCES); TABLE_RESOURCES);
@@ -523,9 +505,7 @@ public abstract class LeaderboardPanel extends AbstractCompositeComponent<Leader
competitorSearchTextBox.getSettingsButton().addClickHandler(new ClickHandler() { competitorSearchTextBox.getSettingsButton().addClickHandler(new ClickHandler() {
@Override @Override
public void onClick(ClickEvent event) { public void onClick(ClickEvent event) {
SettingsDialog<LeaderboardSettings> settingsDialog = new SettingsDialog<LeaderboardSettings>(LeaderboardPanel.this, stringMessages); openSettingsDialog();
settingsDialog.ensureDebugId("LeaderboardSettingsDialog");
settingsDialog.show();
} }
}); });
this.competitorFilterPanel = competitorSearchTextBox; this.competitorFilterPanel = competitorSearchTextBox;
@@ -543,9 +523,23 @@ public abstract class LeaderboardPanel extends AbstractCompositeComponent<Leader
initWidget(mainPanel); initWidget(mainPanel);
mainPanel.setWidget(contentPanel); mainPanel.setWidget(contentPanel);
this.setTitle(stringMessages.leaderboard()); this.setTitle(stringMessages.leaderboard());
}
protected abstract void openSettingsDialog();
protected void initialize(LeaderboardSettings settings){
switch (settings.getActiveRaceColumnSelectionStrategy()) {
case EXPLICIT:
raceColumnSelection = getDefaultRaceColumnSelection();
break;
case LAST_N:
setRaceColumnSelectionToLastNStrategy(settings.getNumberOfLastRacesToShow());
break;
}
if (timer.isInitialized()) { if (timer.isInitialized()) {
loadCompleteLeaderboard(/* showProgress */ false); loadCompleteLeaderboard(/* showProgress */ false);
} }
updateSettings(settings);
} }
private Widget createToolbarPanel() { private Widget createToolbarPanel() {
@@ -2140,7 +2134,7 @@ public abstract class LeaderboardPanel extends AbstractCompositeComponent<Leader
private RaceColumn<?> getRaceColumnByRaceName(String raceName) { private RaceColumn<?> getRaceColumnByRaceName(String raceName) {
for (int i = 0; i < getLeaderboardTable().getColumnCount(); i++) { for (int i = 0; i < getLeaderboardTable().getColumnCount(); i++) {
Column<LeaderboardRowDTO, ?> column = getLeaderboardTable().getColumn(i); Column<LeaderboardRowDTO, ?> column = getLeaderboardTable().getColumn(i);
if (column instanceof RaceColumn<?>) { if (column instanceof LeaderboardPanel.RaceColumn) {
RaceColumnDTO raceInLeaderboard = ((RaceColumn<?>) column).getRace(); RaceColumnDTO raceInLeaderboard = ((RaceColumn<?>) column).getRace();
for (FleetDTO fleet : raceInLeaderboard.getFleets()) { for (FleetDTO fleet : raceInLeaderboard.getFleets()) {
final RegattaAndRaceIdentifier raceIdentifier = raceInLeaderboard.getRaceIdentifier(fleet); final RegattaAndRaceIdentifier raceIdentifier = raceInLeaderboard.getRaceIdentifier(fleet);
@@ -2156,7 +2150,7 @@ public abstract class LeaderboardPanel extends AbstractCompositeComponent<Leader
private RaceColumn<?> getRaceColumnByRaceColumnName(String raceColumnName) { private RaceColumn<?> getRaceColumnByRaceColumnName(String raceColumnName) {
for (int i = 0; i < getLeaderboardTable().getColumnCount(); i++) { for (int i = 0; i < getLeaderboardTable().getColumnCount(); i++) {
Column<LeaderboardRowDTO, ?> column = getLeaderboardTable().getColumn(i); Column<LeaderboardRowDTO, ?> column = getLeaderboardTable().getColumn(i);
if (column instanceof RaceColumn<?>) { if (column instanceof LeaderboardPanel.RaceColumn) {
if (((RaceColumn<?>) column).getRaceColumnName().equals(raceColumnName)) { if (((RaceColumn<?>) column).getRaceColumnName().equals(raceColumnName)) {
return (RaceColumn<?>) column; return (RaceColumn<?>) column;
} }
@@ -2373,7 +2367,7 @@ public abstract class LeaderboardPanel extends AbstractCompositeComponent<Leader
Collection<String> namesOfExpandedRaceColumns = new ArrayList<String>(); Collection<String> namesOfExpandedRaceColumns = new ArrayList<String>();
for (int i = 0; i < getLeaderboardTable().getColumnCount(); i++) { for (int i = 0; i < getLeaderboardTable().getColumnCount(); i++) {
Column<LeaderboardRowDTO, ?> column = getLeaderboardTable().getColumn(i); Column<LeaderboardRowDTO, ?> column = getLeaderboardTable().getColumn(i);
if (column instanceof RaceColumn<?>) { if (column instanceof LeaderboardPanel.RaceColumn) {
RaceColumn<?> raceColumn = (RaceColumn<?>) column; RaceColumn<?> raceColumn = (RaceColumn<?>) column;
if (raceColumn.isExpanded()) { if (raceColumn.isExpanded()) {
namesOfExpandedRaceColumns.add(raceColumn.getRaceColumnName()); namesOfExpandedRaceColumns.add(raceColumn.getRaceColumnName());
@@ -2441,7 +2435,7 @@ public abstract class LeaderboardPanel extends AbstractCompositeComponent<Leader
} }
RaceColumn<?> lastRaceColumn = null; RaceColumn<?> lastRaceColumn = null;
for (int i = getLeaderboardTable().getColumnCount() - 1; i >= 0; i--) { for (int i = getLeaderboardTable().getColumnCount() - 1; i >= 0; i--) {
if (getLeaderboardTable().getColumn(i) instanceof RaceColumn<?>) { if (getLeaderboardTable().getColumn(i) instanceof LeaderboardPanel.RaceColumn) {
lastRaceColumn = (RaceColumn<?>) getLeaderboardTable().getColumn(i); lastRaceColumn = (RaceColumn<?>) getLeaderboardTable().getColumn(i);
break; break;
} }
@@ -2532,7 +2526,7 @@ public abstract class LeaderboardPanel extends AbstractCompositeComponent<Leader
if (selectedRaceDetails.contains(DetailType.DISPLAY_LEGS)) { if (selectedRaceDetails.contains(DetailType.DISPLAY_LEGS)) {
for (int i = 0; i < getLeaderboardTable().getColumnCount(); i++) { for (int i = 0; i < getLeaderboardTable().getColumnCount(); i++) {
Column<LeaderboardRowDTO, ?> c = getLeaderboardTable().getColumn(i); Column<LeaderboardRowDTO, ?> c = getLeaderboardTable().getColumn(i);
if (c instanceof RaceColumn<?>) { if (c instanceof LeaderboardPanel.RaceColumn) {
RaceColumn<?> rc = (RaceColumn<?>) c; RaceColumn<?> rc = (RaceColumn<?>) c;
// If the new leaderboard no longer contains the column, getLegCount will return -1, causing the // If the new leaderboard no longer contains the column, getLegCount will return -1, causing the
// column // column
@@ -2885,7 +2879,7 @@ public abstract class LeaderboardPanel extends AbstractCompositeComponent<Leader
*/ */
private void addRaceColumn(RaceColumn<?> raceColumn) { private void addRaceColumn(RaceColumn<?> raceColumn) {
if (getLeaderboardTable() if (getLeaderboardTable()
.getColumn(getLeaderboardTable().getColumnCount() - 1) instanceof TotalNetPointssColumn) { .getColumn(getLeaderboardTable().getColumnCount() - 1) instanceof LeaderboardPanel.TotalNetPointssColumn) {
removeColumn(getLeaderboardTable().getColumnCount() - 1); removeColumn(getLeaderboardTable().getColumnCount() - 1);
} }
addColumn(raceColumn); addColumn(raceColumn);
@@ -2960,7 +2954,7 @@ public abstract class LeaderboardPanel extends AbstractCompositeComponent<Leader
if (isShowCompetitorSailId()) { if (isShowCompetitorSailId()) {
if (getLeaderboardTable().getColumnCount() <= columnIndexWhereToInsertTheNextColumn if (getLeaderboardTable().getColumnCount() <= columnIndexWhereToInsertTheNextColumn
|| !(getLeaderboardTable() || !(getLeaderboardTable()
.getColumn(columnIndexWhereToInsertTheNextColumn) instanceof SailIDColumn<?>)) { .getColumn(columnIndexWhereToInsertTheNextColumn) instanceof SailIDColumn)) {
insertColumn(columnIndexWhereToInsertTheNextColumn, insertColumn(columnIndexWhereToInsertTheNextColumn,
new SailIDColumn<LeaderboardRowDTO>(new CompetitorFetcher<LeaderboardRowDTO>() { new SailIDColumn<LeaderboardRowDTO>(new CompetitorFetcher<LeaderboardRowDTO>() {
@Override @Override
@@ -2972,20 +2966,20 @@ public abstract class LeaderboardPanel extends AbstractCompositeComponent<Leader
columnIndexWhereToInsertTheNextColumn++; columnIndexWhereToInsertTheNextColumn++;
} else { } else {
if (getLeaderboardTable().getColumnCount() > columnIndexWhereToInsertTheNextColumn && getLeaderboardTable() if (getLeaderboardTable().getColumnCount() > columnIndexWhereToInsertTheNextColumn && getLeaderboardTable()
.getColumn(columnIndexWhereToInsertTheNextColumn) instanceof SailIDColumn<?>) { .getColumn(columnIndexWhereToInsertTheNextColumn) instanceof SailIDColumn) {
removeColumn(columnIndexWhereToInsertTheNextColumn); removeColumn(columnIndexWhereToInsertTheNextColumn);
} }
} }
if (isShowCompetitorFullName()) { if (isShowCompetitorFullName()) {
if (getLeaderboardTable().getColumnCount() <= columnIndexWhereToInsertTheNextColumn if (getLeaderboardTable().getColumnCount() <= columnIndexWhereToInsertTheNextColumn
|| !(getLeaderboardTable() || !(getLeaderboardTable()
.getColumn(columnIndexWhereToInsertTheNextColumn) instanceof CompetitorColumn)) { .getColumn(columnIndexWhereToInsertTheNextColumn) instanceof LeaderboardPanel.CompetitorColumn)) {
insertColumn(columnIndexWhereToInsertTheNextColumn, createCompetitorColumn()); insertColumn(columnIndexWhereToInsertTheNextColumn, createCompetitorColumn());
} }
columnIndexWhereToInsertTheNextColumn++; columnIndexWhereToInsertTheNextColumn++;
} else { } else {
if (getLeaderboardTable().getColumnCount() > columnIndexWhereToInsertTheNextColumn && getLeaderboardTable() if (getLeaderboardTable().getColumnCount() > columnIndexWhereToInsertTheNextColumn && getLeaderboardTable()
.getColumn(columnIndexWhereToInsertTheNextColumn) instanceof CompetitorColumn) { .getColumn(columnIndexWhereToInsertTheNextColumn) instanceof LeaderboardPanel.CompetitorColumn) {
removeColumn(columnIndexWhereToInsertTheNextColumn); removeColumn(columnIndexWhereToInsertTheNextColumn);
} }
} }
@@ -3005,7 +2999,7 @@ public abstract class LeaderboardPanel extends AbstractCompositeComponent<Leader
private void ensureTotalsColumn() { private void ensureTotalsColumn() {
// add a totals column on the right // add a totals column on the right
if (getLeaderboardTable().getColumnCount() == 0 || !(getLeaderboardTable() if (getLeaderboardTable().getColumnCount() == 0 || !(getLeaderboardTable()
.getColumn(getLeaderboardTable().getColumnCount() - 1) instanceof TotalNetPointssColumn)) { .getColumn(getLeaderboardTable().getColumnCount() - 1) instanceof LeaderboardPanel.TotalNetPointssColumn)) {
addColumn(new TotalNetPointssColumn(TOTAL_COLUMN_STYLE)); addColumn(new TotalNetPointssColumn(TOTAL_COLUMN_STYLE));
} }
} }
@@ -3013,14 +3007,14 @@ public abstract class LeaderboardPanel extends AbstractCompositeComponent<Leader
private void ensureTotalRacesSailedColumn() { private void ensureTotalRacesSailedColumn() {
// add a totals column on the right // add a totals column on the right
if (getLeaderboardTable().getColumnCount() == 0 || !(getLeaderboardTable() if (getLeaderboardTable().getColumnCount() == 0 || !(getLeaderboardTable()
.getColumn(getLeaderboardTable().getColumnCount() - 2) instanceof TotalRacesCompletedColumn)) { .getColumn(getLeaderboardTable().getColumnCount() - 2) instanceof LeaderboardPanel.TotalRacesCompletedColumn)) {
insertColumn(getLeaderboardTable().getColumnCount() - 1, new TotalRacesCompletedColumn(TOTAL_COLUMN_STYLE)); insertColumn(getLeaderboardTable().getColumnCount() - 1, new TotalRacesCompletedColumn(TOTAL_COLUMN_STYLE));
} }
} }
private void ensureNoTotalRacesSailedColumn() { private void ensureNoTotalRacesSailedColumn() {
if ((getLeaderboardTable() if ((getLeaderboardTable()
.getColumn(getLeaderboardTable().getColumnCount() - 2) instanceof TotalRacesCompletedColumn)) { .getColumn(getLeaderboardTable().getColumnCount() - 2) instanceof LeaderboardPanel.TotalRacesCompletedColumn)) {
removeColumn(getLeaderboardTable().getColumnCount() - 2); removeColumn(getLeaderboardTable().getColumnCount() - 2);
} }
} }
@@ -3057,14 +3051,14 @@ public abstract class LeaderboardPanel extends AbstractCompositeComponent<Leader
private void ensureNoCarryColumn(int zeroBasedIndexOfCarryColumn) { private void ensureNoCarryColumn(int zeroBasedIndexOfCarryColumn) {
if (getLeaderboardTable().getColumnCount() > zeroBasedIndexOfCarryColumn if (getLeaderboardTable().getColumnCount() > zeroBasedIndexOfCarryColumn
&& getLeaderboardTable().getColumn(zeroBasedIndexOfCarryColumn) instanceof CarryColumn) { && getLeaderboardTable().getColumn(zeroBasedIndexOfCarryColumn) instanceof LeaderboardPanel.CarryColumn) {
removeColumn(zeroBasedIndexOfCarryColumn); removeColumn(zeroBasedIndexOfCarryColumn);
} }
} }
protected void ensureCarryColumn(int zeroBasedIndexOfCarryColumn) { protected void ensureCarryColumn(int zeroBasedIndexOfCarryColumn) {
if (getLeaderboardTable().getColumnCount() <= zeroBasedIndexOfCarryColumn if (getLeaderboardTable().getColumnCount() <= zeroBasedIndexOfCarryColumn
|| !(getLeaderboardTable().getColumn(zeroBasedIndexOfCarryColumn) instanceof CarryColumn)) { || !(getLeaderboardTable().getColumn(zeroBasedIndexOfCarryColumn) instanceof LeaderboardPanel.CarryColumn)) {
while (getLeaderboardTable().getColumnCount() > zeroBasedIndexOfCarryColumn) { while (getLeaderboardTable().getColumnCount() > zeroBasedIndexOfCarryColumn) {
removeColumn(zeroBasedIndexOfCarryColumn); removeColumn(zeroBasedIndexOfCarryColumn);
} }
@@ -3146,12 +3140,6 @@ public abstract class LeaderboardPanel extends AbstractCompositeComponent<Leader
return false; return false;
} }
@Override
public SettingsDialogComponent<LeaderboardSettings> getSettingsDialogComponent(LeaderboardSettings settings) {
return new LeaderboardSettingsDialogComponent(settings, leaderboard.getNamesOfRaceColumns(),
stringMessages);
}
@Override @Override
public String getLocalizedShortName() { public String getLocalizedShortName() {
return stringMessages.leaderboard(); return stringMessages.leaderboard();
@@ -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 SingleLeaderboardPanel(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 LeaderboardPanel}s (e.g. from a meta leaderboard) so that the user can switch between them. * A panel managing multiple {@link LeaderboardPanel}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 {
private LeaderboardPanel selectedLeaderboardPanel; private MultiRaceLeaderboardPanel selectedLeaderboardPanel;
private FlowPanel selectedLeaderboardFlowPanel; private FlowPanel selectedLeaderboardFlowPanel;
private final StringMessages stringMessages; private final StringMessages stringMessages;
@@ -65,16 +64,16 @@ public class MultiLeaderboardProxyPanel extends AbstractLazyComponent<Leaderboar
private final Set<LeaderboardUpdateListener> leaderboardUpdateListeners; private final Set<LeaderboardUpdateListener> leaderboardUpdateListeners;
private final Set<SelectedLeaderboardChangeListener> selectedLeaderboardChangeListeners; private final Set<SelectedLeaderboardChangeListener> 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;
@@ -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,7 +224,7 @@ 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 {
@@ -235,7 +234,7 @@ public class MultiLeaderboardProxyPanel extends AbstractLazyComponent<Leaderboar
MultiMultiRaceLeaderboardPanel newSelectedLeaderboardPanel = new MultiMultiRaceLeaderboardPanel(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,
@@ -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);
} }
@@ -288,7 +287,7 @@ public class MultiLeaderboardProxyPanel extends AbstractLazyComponent<Leaderboar
} }
@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 listener : selectedLeaderboardChangeListeners) {
@@ -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;
@@ -18,15 +17,14 @@ import com.sap.sse.gwt.client.shared.settings.ComponentContext;
*/ */
public class MultiMultiRaceLeaderboardPanel extends MultiRaceLeaderboardPanel { public class MultiMultiRaceLeaderboardPanel extends MultiRaceLeaderboardPanel {
public MultiMultiRaceLeaderboardPanel(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) {
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,
@@ -1,15 +1,20 @@
package com.sap.sailing.gwt.ui.leaderboard; package com.sap.sailing.gwt.ui.leaderboard;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder; import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
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.domain.common.dto.CompetitorDTO; import com.sap.sailing.domain.common.dto.CompetitorDTO;
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.gwt.settings.client.leaderboard.LeaderboardSettings; 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.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;
@@ -20,56 +25,74 @@ import com.sap.sse.common.Util;
import com.sap.sse.common.filter.BinaryOperator; import com.sap.sse.common.filter.BinaryOperator;
import com.sap.sse.common.filter.Filter; import com.sap.sse.common.filter.Filter;
import com.sap.sse.common.filter.FilterSet; 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.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;
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.components.SettingsDialog;
import com.sap.sse.gwt.client.shared.components.SettingsDialogComponent;
import com.sap.sse.gwt.client.shared.settings.ComponentContext; import com.sap.sse.gwt.client.shared.settings.ComponentContext;
public class MultiRaceLeaderboardPanel extends LeaderboardPanel { public class MultiRaceLeaderboardPanel extends LeaderboardPanel<MultiRaceLeaderboardSettings> {
public MultiRaceLeaderboardPanel(Component<?> parent, ComponentContext<?> context, public MultiRaceLeaderboardPanel(Component<?> parent, ComponentContext<?> context,
SailingServiceAsync sailingService, AsyncActionsExecutor asyncActionsExecutor, LeaderboardSettings settings, SailingServiceAsync sailingService, AsyncActionsExecutor asyncActionsExecutor, MultiRaceLeaderboardSettings settings,
boolean isEmbedded, RegattaAndRaceIdentifier preSelectedRace, boolean isEmbedded,
CompetitorSelectionProvider competitorSelectionProvider, String leaderboardGroupName, CompetitorSelectionProvider competitorSelectionProvider, String leaderboardGroupName,
String leaderboardName, ErrorReporter errorReporter, StringMessages stringMessages, String leaderboardName, ErrorReporter errorReporter, StringMessages stringMessages,
boolean showRaceDetails) { boolean showRaceDetails) {
super(parent, context, sailingService, asyncActionsExecutor, settings, isEmbedded, preSelectedRace, super(parent, context, sailingService, asyncActionsExecutor, settings, isEmbedded,
competitorSelectionProvider, leaderboardGroupName, leaderboardName, errorReporter, stringMessages, competitorSelectionProvider, leaderboardGroupName, leaderboardName, errorReporter, stringMessages,
showRaceDetails); showRaceDetails);
updateSettings(settings); initialize(settings);
} }
public MultiRaceLeaderboardPanel(Component<?> parent, ComponentContext<?> context, public MultiRaceLeaderboardPanel(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, boolean showRaceDetails, String leaderboardName, ErrorReporter errorReporter, StringMessages stringMessages, boolean showRaceDetails,
CompetitorFilterPanel competitorSearchTextBox, boolean showSelectionCheckbox, CompetitorFilterPanel competitorSearchTextBox, boolean showSelectionCheckbox,
RaceTimesInfoProvider optionalRaceTimesInfoProvider, boolean autoExpandLastRaceColumn, RaceTimesInfoProvider optionalRaceTimesInfoProvider, boolean autoExpandLastRaceColumn,
boolean adjustTimerDelay, boolean autoApplyTopNFilter, boolean showCompetitorFilterStatus, boolean adjustTimerDelay, boolean autoApplyTopNFilter, boolean showCompetitorFilterStatus,
boolean enableSyncScroller) { 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,
showCompetitorFilterStatus, enableSyncScroller); showCompetitorFilterStatus, enableSyncScroller);
updateSettings(settings); initialize(settings);
} }
public MultiRaceLeaderboardPanel(Component<?> parent, ComponentContext<?> context, public MultiRaceLeaderboardPanel(Component<?> parent, ComponentContext<?> context,
SailingServiceAsync sailingService, AsyncActionsExecutor asyncActionsExecutor, LeaderboardSettings settings, SailingServiceAsync sailingService, AsyncActionsExecutor asyncActionsExecutor, MultiRaceLeaderboardSettings settings,
CompetitorSelectionProvider competitorSelectionProvider, String leaderboardName, CompetitorSelectionProvider competitorSelectionProvider, String leaderboardName,
ErrorReporter errorReporter, StringMessages stringMessages, boolean showRaceDetails) { ErrorReporter errorReporter, StringMessages stringMessages, boolean showRaceDetails) {
super(parent, context, sailingService, asyncActionsExecutor, settings, competitorSelectionProvider, super(parent, context, sailingService, asyncActionsExecutor, settings, competitorSelectionProvider,
leaderboardName, errorReporter, stringMessages, showRaceDetails); leaderboardName, errorReporter, stringMessages, showRaceDetails);
updateSettings(settings); initialize(settings);
} }
@Override @Override
public LeaderboardSettings getSettings() { public MultiRaceLeaderboardSettings getSettings() {
// TODO Auto-generated method stub Iterable<RaceColumnDTO> selectedRaceColumns = raceColumnSelection
return null; .getSelectedRaceColumnsOrderedAsInLeaderboard(leaderboard);
List<String> namesOfRaceColumnsToShow = new ArrayList<>();
for (RaceColumnDTO raceColumn : selectedRaceColumns) {
namesOfRaceColumnsToShow.add(raceColumn.getName());
}
MultiRaceLeaderboardSettings leaderboardSettings = new MultiRaceLeaderboardSettings(
Collections.unmodifiableList(selectedManeuverDetails), Collections.unmodifiableList(selectedLegDetails),
Collections.unmodifiableList(selectedRaceDetails),
Collections.unmodifiableList(selectedOverallDetailColumns), namesOfRaceColumnsToShow,
/* namesOfRacesToShow */ null, raceColumnSelection.getNumberOfLastRaceColumnsToShow(),
false, timer.getRefreshInterval(), /* nameOfRaceToSort */ null,
/* sortAscending */ true, /* updateUponPlayStateChange */ true, raceColumnSelection.getType(),
isShowAddedScores(), isShowOverallColumnWithNumberOfRacesCompletedPerCompetitor(),
isShowCompetitorSailId(), isShowCompetitorFullName(), isShowCompetitorNationality);
SettingsDefaultValuesUtils.keepDefaults(currentSettings, leaderboardSettings);
return leaderboardSettings;
} }
@Override @Override
@@ -96,7 +119,7 @@ public class MultiRaceLeaderboardPanel extends LeaderboardPanel {
@Override @Override
protected LeaderboardSettings overrideDefaultsForNamesOfRaceColumns(LeaderboardSettings currentSettings, protected LeaderboardSettings overrideDefaultsForNamesOfRaceColumns(LeaderboardSettings currentSettings,
LeaderboardDTO result) { LeaderboardDTO result) {
return currentSettings.overrideDefaultsForNamesOfRaceColumns(result.getNamesOfRaceColumns()); return ((MultiRaceLeaderboardSettings) currentSettings).overrideDefaultsForNamesOfRaceColumns(result.getNamesOfRaceColumns());
} }
@Override @Override
@@ -115,10 +138,6 @@ public class MultiRaceLeaderboardPanel extends LeaderboardPanel {
} }
} }
@Override
protected void processAutoExpands(AbstractSortableColumnWithMinMax<?, ?> c, RaceColumn<?> lastRaceColumn) {
}
@Override @Override
protected void updateExpansionStates(boolean expand) { protected void updateExpansionStates(boolean expand) {
} }
@@ -140,4 +159,24 @@ public class MultiRaceLeaderboardPanel extends LeaderboardPanel {
} }
return result; 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 processAutoExpands(AbstractSortableColumnWithMinMax c, RaceColumn lastRaceColumn) {
}
} }
@@ -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;
@@ -37,12 +36,12 @@ public class MultiRaceLeaderboardViewer extends AbstractLeaderboardViewer<Leader
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);
} }
@@ -52,15 +51,15 @@ public class MultiRaceLeaderboardViewer extends AbstractLeaderboardViewer<Leader
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 MultiRaceLeaderboardPanel(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,
@@ -103,7 +102,7 @@ public class MultiRaceLeaderboardViewer extends AbstractLeaderboardViewer<Leader
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;
@@ -15,15 +14,15 @@ import com.sap.sse.gwt.client.shared.settings.ComponentContext;
public class OverallLeaderboardPanel extends MultiRaceLeaderboardPanel { 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,
@@ -7,5 +7,5 @@ public interface SelectedLeaderboardChangeProvider {
void removeSelectedLeaderboardChangeListener(SelectedLeaderboardChangeListener listener); void removeSelectedLeaderboardChangeListener(SelectedLeaderboardChangeListener listener);
void setSelectedLeaderboard(LeaderboardPanel selectedLeaderboard); void setSelectedLeaderboard(MultiRaceLeaderboardPanel selectedLeaderboard);
} }
@@ -1,7 +1,6 @@
package com.sap.sailing.gwt.ui.leaderboard; package com.sap.sailing.gwt.ui.leaderboard;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@@ -14,6 +13,8 @@ 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.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.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;
@@ -29,9 +30,11 @@ 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;
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.components.SettingsDialog;
import com.sap.sse.gwt.client.shared.components.SettingsDialogComponent;
import com.sap.sse.gwt.client.shared.settings.ComponentContext; import com.sap.sse.gwt.client.shared.settings.ComponentContext;
public class SingleLeaderboardPanel extends LeaderboardPanel { public class SingleRaceLeaderboardPanel extends LeaderboardPanel<SingleRaceLeaderboardSettings> {
private boolean autoExpandPreSelectedRace; private boolean autoExpandPreSelectedRace;
/** /**
@@ -41,7 +44,7 @@ public class SingleLeaderboardPanel extends LeaderboardPanel {
*/ */
private final RegattaAndRaceIdentifier preSelectedRace; private final RegattaAndRaceIdentifier preSelectedRace;
public SingleLeaderboardPanel(Component<?> parent, ComponentContext<?> context, SailingServiceAsync sailingService, public SingleRaceLeaderboardPanel(Component<?> parent, ComponentContext<?> context, SailingServiceAsync sailingService,
AsyncActionsExecutor asyncActionsExecutor, LeaderboardSettings settings, boolean isEmbedded, AsyncActionsExecutor asyncActionsExecutor, LeaderboardSettings settings, boolean isEmbedded,
RegattaAndRaceIdentifier preSelectedRace, CompetitorSelectionProvider competitorSelectionProvider, RegattaAndRaceIdentifier preSelectedRace, CompetitorSelectionProvider competitorSelectionProvider,
Timer timer, String leaderboardGroupName, String leaderboardName, ErrorReporter errorReporter, Timer timer, String leaderboardGroupName, String leaderboardName, ErrorReporter errorReporter,
@@ -49,7 +52,7 @@ public class SingleLeaderboardPanel extends LeaderboardPanel {
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,
@@ -57,7 +60,7 @@ public class SingleLeaderboardPanel extends LeaderboardPanel {
assert preSelectedRace != null; assert preSelectedRace != null;
this.preSelectedRace = preSelectedRace; this.preSelectedRace = preSelectedRace;
updateSettings(settings); initialize(settings);
} }
@Override @Override
@@ -66,17 +69,17 @@ public class SingleLeaderboardPanel extends LeaderboardPanel {
} }
@Override @Override
public LeaderboardSettings getSettings() { public SingleRaceLeaderboardSettings getSettings() {
Iterable<RaceColumnDTO> selectedRaceColumns = raceColumnSelection Iterable<RaceColumnDTO> selectedRaceColumns = raceColumnSelection
.getSelectedRaceColumnsOrderedAsInLeaderboard(leaderboard); .getSelectedRaceColumnsOrderedAsInLeaderboard(leaderboard);
List<String> namesOfRaceColumnsToShow = new ArrayList<>(); List<String> namesOfRaceColumnsToShow = new ArrayList<>();
for (RaceColumnDTO raceColumn : selectedRaceColumns) { for (RaceColumnDTO raceColumn : selectedRaceColumns) {
namesOfRaceColumnsToShow.add(raceColumn.getName()); namesOfRaceColumnsToShow.add(raceColumn.getName());
} }
LeaderboardSettings leaderboardSettings = new LeaderboardSettings( SingleRaceLeaderboardSettings leaderboardSettings = new SingleRaceLeaderboardSettings(
Collections.unmodifiableList(selectedManeuverDetails), Collections.unmodifiableList(selectedLegDetails), selectedManeuverDetails,selectedLegDetails,
Collections.unmodifiableList(selectedRaceDetails), selectedRaceDetails,
Collections.unmodifiableList(selectedOverallDetailColumns), namesOfRaceColumnsToShow, selectedOverallDetailColumns, namesOfRaceColumnsToShow,
/* namesOfRacesToShow */ null, raceColumnSelection.getNumberOfLastRaceColumnsToShow(), /* namesOfRacesToShow */ null, raceColumnSelection.getNumberOfLastRaceColumnsToShow(),
autoExpandPreSelectedRace, timer.getRefreshInterval(), /* nameOfRaceToSort */ null, autoExpandPreSelectedRace, timer.getRefreshInterval(), /* nameOfRaceToSort */ null,
/* sortAscending */ true, /* updateUponPlayStateChange */ true, raceColumnSelection.getType(), /* sortAscending */ true, /* updateUponPlayStateChange */ true, raceColumnSelection.getType(),
@@ -144,7 +147,7 @@ public class SingleLeaderboardPanel extends LeaderboardPanel {
protected void processAutoExpands(AbstractSortableColumnWithMinMax<?, ?> c, RaceColumn<?> lastRaceColumn) { 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 // Toggle pre-selected race, if the setting is set and it isn't open yet, or the last race column if
// that was requested // that was requested
if ((!autoExpandPerformedOnce && isAutoExpandPreSelectedRace() && c instanceof RaceColumn<?> if ((!autoExpandPerformedOnce && isAutoExpandPreSelectedRace() && c instanceof LeaderboardPanel.RaceColumn
&& ((RaceColumn<?>) c).getRace().hasTrackedRace(preSelectedRace)) && ((RaceColumn<?>) c).getRace().hasTrackedRace(preSelectedRace))
|| (isAutoExpandLastRaceColumn() && c == lastRaceColumn)) { || (isAutoExpandLastRaceColumn() && c == lastRaceColumn)) {
ExpandableSortableColumn<?> expandableSortableColumn = (ExpandableSortableColumn<?>) c; ExpandableSortableColumn<?> expandableSortableColumn = (ExpandableSortableColumn<?>) c;
@@ -153,8 +156,8 @@ public class SingleLeaderboardPanel extends LeaderboardPanel {
autoExpandPerformedOnce = true; autoExpandPerformedOnce = true;
} }
} }
if (c instanceof RaceColumn && ((RaceColumn<?>) c).getRace().hasTrackedRace(preSelectedRace)) { if (c instanceof RaceColumn && ((RaceColumn) c).getRace().hasTrackedRace(preSelectedRace)) {
RaceColumnDTO raceColumn = ((RaceColumn<?>) c).getRace(); RaceColumnDTO raceColumn = ((RaceColumn) c).getRace();
informLeaderboardUpdateListenersAboutRaceSelected(preSelectedRace, raceColumn); informLeaderboardUpdateListenersAboutRaceSelected(preSelectedRace, raceColumn);
} }
} }
@@ -181,4 +184,26 @@ public class SingleLeaderboardPanel extends LeaderboardPanel {
} }
return result; return result;
} }
@Override
public void updateSettings(SingleRaceLeaderboardSettings newSettings) {
SettingsDialog<SingleRaceLeaderboardSettings> settingsDialog = new SettingsDialog<SingleRaceLeaderboardSettings>(this, stringMessages);
settingsDialog.ensureDebugId("LeaderboardSettingsDialog");
settingsDialog.show();
}
@Override
public SettingsDialogComponent<SingleRaceLeaderboardSettings> getSettingsDialogComponent(
SingleRaceLeaderboardSettings useTheseSettings) {
return new SingleRaceLeaderboardSettingsDialogComponent(useTheseSettings, leaderboard.getNamesOfRaceColumns(),
stringMessages);
}
@Override
protected void openSettingsDialog() {
SettingsDialog<SingleRaceLeaderboardSettings> settingsDialog = new SettingsDialog<SingleRaceLeaderboardSettings>(this, stringMessages);
settingsDialog.ensureDebugId("LeaderboardSettingsDialog");
settingsDialog.show();
}
} }
@@ -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;
@@ -99,7 +99,7 @@ public class EditableLeaderboardPanel extends MultiRaceLeaderboardPanel {
@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();
} }
} }
@@ -584,7 +584,7 @@ public class EditableLeaderboardPanel extends MultiRaceLeaderboardPanel {
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); leaderboardName, errorReporter, stringMessages, /* showRaceDetails */ true);
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;
@@ -91,7 +92,7 @@ public abstract class AbstractRaceBoardMode implements RaceBoardMode, RaceTimesI
return raceTimePanel; return raceTimePanel;
} }
protected LeaderboardPanel getLeaderboardPanel() { protected SingleRaceLeaderboardPanel getLeaderboardPanel() {
return leaderboardPanel; return leaderboardPanel;
} }
@@ -6,7 +6,8 @@ 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.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,17 +47,17 @@ 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); LeaderboardSettings settingsToUse = LeaderboardSettingsFactory.getInstance().createSettingsWithCustomExpandPreselectedRaceState(patchedSettings, true);
leaderboardPanel.updateSettings(settingsToUse); leaderboardPanel.updateSettings(settingsToUse);
} }
@@ -6,7 +6,8 @@ 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.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,16 +29,16 @@ 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); LeaderboardSettings settingsToUse = LeaderboardSettingsFactory.getInstance().createSettingsWithCustomExpandPreselectedRaceState(patchedSettings, true);
leaderboardPanel.updateSettings(settingsToUse); leaderboardPanel.updateSettings(settingsToUse);
} }
@@ -75,8 +75,7 @@ import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMapLifecycle;
import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMapResources; 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.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.leaderboard.SingleLeaderboardPanel;
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;
@@ -446,14 +445,14 @@ 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(); LeaderboardPanelLifecycle leaderboardPanelLifecycle = getPerspectiveLifecycle().getLeaderboardPanelLifecycle();
LeaderboardSettings leaderboardSettings = settings LeaderboardSettings leaderboardSettings = settings
.findSettingsByComponentId(leaderboardPanelLifecycle.getComponentId()); .findSettingsByComponentId(leaderboardPanelLifecycle.getComponentId());
return new SingleLeaderboardPanel(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,
@@ -468,7 +467,7 @@ public class RaceBoardPanel
componentViewer.forceLayout(); componentViewer.forceLayout();
} }
LeaderboardPanel getLeaderboardPanel() { SingleRaceLeaderboardPanel getLeaderboardPanel() {
return leaderboardPanel; return leaderboardPanel;
} }
@@ -19,7 +19,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;
@@ -37,10 +37,13 @@ public class RaceBoardPerspectiveLifecycle extends AbstractPerspectiveLifecycle<
} }
private RaceBoardPerspectiveLifecycle(RegattaAndRaceIdentifier raceIdentifier, AbstractLeaderboardDTO leaderboard, StringMessages stringMessages) { private RaceBoardPerspectiveLifecycle(RegattaAndRaceIdentifier raceIdentifier, AbstractLeaderboardDTO leaderboard, StringMessages stringMessages) {
if(raceIdentifier == null){
throw new IllegalStateException("Started ReaceBoardPerspective without any raceidentifier");
}
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(raceIdentifier, 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);
@@ -8,11 +8,12 @@ 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.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;
@@ -26,7 +27,7 @@ public class SingleRaceLeaderboardPanelLifecycle extends LeaderboardPanelLifecyc
} }
@Override @Override
public LeaderboardSettings createDefaultSettings() { public SingleRaceLeaderboardSettings createDefaultSettings() {
List<String> namesOfRaceColumnsToShow = null; List<String> namesOfRaceColumnsToShow = null;
List<String> namesOfRacesToShow = Collections.singletonList(raceIdentifier.getRaceName()); List<String> namesOfRacesToShow = Collections.singletonList(raceIdentifier.getRaceName());
@@ -37,8 +38,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, namesOfRaceColumnsToShow, namesOfRacesToShow,
defaultSettings.getNumberOfLastRacesToShow(), false, DEFAULT_REFRESH_INTERVAL, raceIdentifier.getRaceName(), defaultSettings.isSortAscending(), defaultSettings.isUpdateUponPlayStateChange(), defaultSettings.getActiveRaceColumnSelectionStrategy(), 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 /* don't showCompetitorFullNameColumn in case screen is so small that we don't
@@ -54,9 +55,9 @@ 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.getNamesOfRaceColumnsToShow(),
@@ -74,4 +75,32 @@ 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(),
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(),
currentLeaderboardSettings.isShowCompetitorNationality());
return SettingsUtil.copyValues(globalLeaderboardSettings, defaultLeaderboardSettings);
}
@Override
public SingleRaceLeaderboardSettingsDialogComponent getSettingsDialogComponent(SingleRaceLeaderboardSettings settings) {
return new SingleRaceLeaderboardSettingsDialogComponent(settings, namesOfRaceColumns, 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;
@@ -178,7 +179,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);
@@ -188,11 +189,11 @@ 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); LeaderboardSettings settingsToUse = LeaderboardSettingsFactory.getInstance().createSettingsWithCustomExpandPreselectedRaceState(patchedSettings, true);
leaderboardPanel.updateSettings(settingsToUse); 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,18 +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); SingleRaceLeaderboardSettings settingsToUse = LeaderboardSettingsFactory.getInstance().createSettingsWithCustomExpandPreselectedRaceState(patchedSettings, true);
leaderboardPanel.updateSettings(settingsToUse); leaderboardPanel.updateSettings(settingsToUse);
} }