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.LeaderboardRowDTO;
import com.sap.sailing.domain.common.dto.RaceColumnDTO;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettings;
import com.sap.sailing.gwt.settings.client.leaderboard.MultiRaceLeaderboardSettings;
import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel;
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
import com.sap.sailing.gwt.ui.client.StringMessages;
@@ -18,7 +18,7 @@ public class LeaderboardPanelMock extends MultiRaceLeaderboardPanel {
public LeaderboardPanelMock(SailingServiceAsync sailingService,
String leaderboardName, ErrorReporter errorReporter,
StringMessages stringMessages) {
super(null, null, sailingService, new AsyncActionsExecutor(), new LeaderboardSettings(),
super(null, null, sailingService, new AsyncActionsExecutor(), new MultiRaceLeaderboardSettings(),
new CompetitorSelectionModel(
/* hasMultiSelection */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.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.sse.gwt.client.shared.components.SettingsDialogComponent;
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> {
private final SAPHeaderComponentLifecycle sapHeaderLifecycle;
private final LeaderboardPanelLifecycle leaderboardPanelLifecycle;
private final MultiRaceLeaderboardPanelLifecycle leaderboardPanelLifecycle;
private final StringMessages stringMessages;
public static final String ID = "lbwh";
public LeaderboardWithHeaderPerspectiveLifecycle(AbstractLeaderboardDTO leaderboard, StringMessages stringMessages) {
this.stringMessages = stringMessages;
this.leaderboardPanelLifecycle = new LeaderboardPanelLifecycle(leaderboard, stringMessages);
this.leaderboardPanelLifecycle = new MultiRaceLeaderboardPanelLifecycle(leaderboard, stringMessages);
this.sapHeaderLifecycle = new SAPHeaderComponentLifecycle(stringMessages.leaderboard() + ": " +
(leaderboard.getDisplayName() == null ? leaderboard.name : leaderboard.getDisplayName()),
stringMessages);
@@ -54,7 +54,7 @@ public class LeaderboardWithHeaderPerspectiveLifecycle extends AbstractPerspecti
return sapHeaderLifecycle;
}
public LeaderboardPanelLifecycle getLeaderboardPanelLifecycle() {
public MultiRaceLeaderboardPanelLifecycle getLeaderboardPanelLifecycle() {
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.common.client.CSS3Util;
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.LeaderboardSettings;
import com.sap.sailing.gwt.settings.client.leaderboard.MultiRaceLeaderboardPanelLifecycle;
import com.sap.sailing.gwt.settings.client.leaderboard.MultiRaceLeaderboardSettings;
import com.sap.sailing.gwt.ui.client.CompetitorSelectionProvider;
import com.sap.sailing.gwt.ui.client.LeaderboardUpdateListener;
import com.sap.sailing.gwt.ui.client.LeaderboardUpdateProvider;
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
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.ErrorReporter;
import com.sap.sse.gwt.client.async.AsyncActionsExecutor;
@@ -45,7 +44,7 @@ public class MultiRaceLeaderboardWithHeaderPerspective extends AbstractPerspecti
private final DockLayoutPanel dockPanel;
private final static int SAP_HEADER_HEIGHT = 75;
private final Widget currentContentWidget;
private final LeaderboardPanel leaderboardPanel;
private final MultiRaceLeaderboardPanel leaderboardPanel;
private final StringMessages stringMessages;
public MultiRaceLeaderboardWithHeaderPerspective(Component<?> parent,
@@ -193,18 +192,18 @@ public class MultiRaceLeaderboardWithHeaderPerspective extends AbstractPerspecti
withFullscreenButton);
}
private LeaderboardPanel createLeaderboardPanel(LeaderboardWithHeaderPerspectiveLifecycle lifecycle,
private MultiRaceLeaderboardPanel createLeaderboardPanel(LeaderboardWithHeaderPerspectiveLifecycle lifecycle,
PerspectiveCompositeSettings<LeaderboardWithHeaderPerspectiveSettings> settings,
SailingServiceAsync sailingService, AsyncActionsExecutor asyncActionsExecutor,
CompetitorSelectionProvider competitorSelectionProvider, Timer timer,
String leaderboardName, final ErrorReporter errorReporter, final StringMessages stringMessages) {
LeaderboardPanelLifecycle leaderboardPanelLifecycle = getPerspectiveLifecycle().getLeaderboardPanelLifecycle();
LeaderboardSettings leaderboardSettings = settings
MultiRaceLeaderboardPanelLifecycle leaderboardPanelLifecycle = getPerspectiveLifecycle().getLeaderboardPanelLifecycle();
MultiRaceLeaderboardSettings leaderboardSettings = settings
.findSettingsByComponentId(leaderboardPanelLifecycle.getComponentId());
LeaderboardPanel leaderboardPanel = new MultiRaceLeaderboardPanel(this, getComponentContext(), sailingService,
MultiRaceLeaderboardPanel leaderboardPanel = new MultiRaceLeaderboardPanel(this, getComponentContext(), sailingService,
asyncActionsExecutor,
leaderboardSettings, /*isEmbedded*/true, /* preSelectedRace */null,
leaderboardSettings, /*isEmbedded*/true,
competitorSelectionProvider, timer, /* leaderboardGroupName */"",
leaderboardName, errorReporter, stringMessages,
/* 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.gwt.home.desktop.partials.old.EventRegattaLeaderboardResources;
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.StringMessages;
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 debugIdPrefix = DebugIdHelper.createDebugId(componentName);
SettingsDialog<?> dialog = new SettingsDialog<LeaderboardSettings>(multiLeaderboardPanel, StringMessages.INSTANCE) {
SettingsDialog<?> dialog = new SettingsDialog<MultiRaceLeaderboardSettings>(multiLeaderboardPanel, StringMessages.INSTANCE) {
protected Widget getAdditionalWidget() {
Widget additionalWidget = super.getAdditionalWidget();
if (!oldMultiLeaderboardPanel.getElement().isOrHasChild(multiLeaderboardPanel.getElement())) {
@@ -1,15 +1,13 @@
package com.sap.sailing.gwt.home.desktop.places.event.regatta;
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.MultiRaceLeaderboardSettings;
import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel;
import com.sap.sailing.gwt.ui.client.DebugIdHelper;
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
import com.sap.sailing.gwt.ui.client.StringMessages;
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.sse.common.settings.Settings;
import com.sap.sse.gwt.client.ErrorReporter;
@@ -25,7 +23,7 @@ import com.sap.sse.gwt.client.shared.settings.ComponentContext;
* @author Frank Mittag (c163874)
*/
public class RegattaAnalyticsDataManager {
private LeaderboardPanel leaderboardPanel;
private MultiRaceLeaderboardPanel leaderboardPanel;
private MultiCompetitorLeaderboardChart multiCompetitorChart;
private final CompetitorSelectionModel competitorSelectionProvider;
@@ -45,15 +43,15 @@ public class RegattaAnalyticsDataManager {
this.multiCompetitorChart = null;
}
public LeaderboardPanel createMultiRaceLeaderboardPanel(Component<?> parent, ComponentContext<?> context,
final LeaderboardSettings leaderboardSettings, final RegattaAndRaceIdentifier preselectedRace,
public MultiRaceLeaderboardPanel createMultiRaceLeaderboardPanel(Component<?> parent, ComponentContext<?> context,
final MultiRaceLeaderboardSettings leaderboardSettings,
final String leaderboardGroupName, String leaderboardName, boolean showRaceDetails,
boolean autoExpandLastRaceColumn) {
if (leaderboardPanel == null) {
leaderboardPanel = new MultiRaceLeaderboardPanel(parent, context, sailingService,
asyncActionsExecutor,
leaderboardSettings,
true, preselectedRace,
true,
competitorSelectionProvider, timer, leaderboardGroupName, leaderboardName, errorReporter,
StringMessages.INSTANCE, showRaceDetails, /* competitorSearchTextBox */ null,
/* showSelectionCheckbox */ true, /* raceTimesInfoProvider */ null, autoExpandLastRaceColumn,
@@ -72,7 +70,7 @@ public class RegattaAnalyticsDataManager {
return multiCompetitorChart;
}
public LeaderboardPanel getLeaderboardPanel() {
public MultiRaceLeaderboardPanel getLeaderboardPanel() {
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.user.client.ui.Composite;
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.MultiRaceLeaderboardPanelLifecycle;
import com.sap.sailing.gwt.settings.client.leaderboard.MultiRaceLeaderboardSettings;
import com.sap.sailing.gwt.settings.client.utils.StoredSettingsLocationFactory;
import com.sap.sailing.gwt.ui.client.LeaderboardUpdateListener;
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.DomMutationCallback;
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,
String placeToken, final Consumer<LeaderboardPanel> consumer) {
String placeToken, final Consumer<MultiRaceLeaderboardPanel> consumer) {
// FIXME remove
boolean autoExpandLastRaceColumn = GwtHttpRequestUtils.getBooleanParameter(
LeaderboardUrlSettings.PARAM_AUTO_EXPAND_LAST_RACE_COLUMN, false);
final ComponentContext<LeaderboardSettings> componentContext = createLeaderboardComponentContext(leaderboardName, userService,
final ComponentContext<MultiRaceLeaderboardSettings> componentContext = createLeaderboardComponentContext(leaderboardName, userService,
placeToken);
componentContext.getInitialSettings(new DefaultOnSettingsLoadedCallback<LeaderboardSettings>() {
componentContext.getInitialSettings(new DefaultOnSettingsLoadedCallback<MultiRaceLeaderboardSettings>() {
@Override
public void onSuccess(LeaderboardSettings leaderboardSettings) {
final LeaderboardPanel leaderboardPanel = regattaAnalyticsManager.createMultiRaceLeaderboardPanel(null, componentContext, //
public void onSuccess(MultiRaceLeaderboardSettings leaderboardSettings) {
final MultiRaceLeaderboardPanel leaderboardPanel = regattaAnalyticsManager.createMultiRaceLeaderboardPanel(null, componentContext, //
leaderboardSettings, //
null, //
"leaderboardGroupName", // TODO: keep using magic string? ask frank!
leaderboardName, //
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) {
final LeaderboardPanelLifecycle lifecycle = new LeaderboardPanelLifecycle(null, StringMessages.INSTANCE);
final MultiRaceLeaderboardPanelLifecycle lifecycle = new MultiRaceLeaderboardPanelLifecycle(null, StringMessages.INSTANCE);
final StoredSettingsLocation storageDefinition = StoredSettingsLocationFactory.createStoredSettingsLocatorForEventRegattaLeaderboard(leaderboardName);
final ComponentContext<LeaderboardSettings> componentContext = new PlaceBasedComponentContextWithSettingsStorage<>(
final ComponentContext<MultiRaceLeaderboardSettings> componentContext = new PlaceBasedComponentContextWithSettingsStorage<>(
lifecycle, userService, storageDefinition, placeToken);
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.LeaderboardUpdateProvider;
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;
/**
@@ -96,9 +96,9 @@ public class RegattaCompetitorAnalyticsTabView extends SharedLeaderboardRegattaT
}
};
if(regattaAnalyticsManager.getLeaderboardPanel() == null) {
createSharedLeaderboardPanel(leaderboardName, regattaAnalyticsManager, currentPresenter.getUserService(), null, new Consumer<LeaderboardPanel>() {
createSharedLeaderboardPanel(leaderboardName, regattaAnalyticsManager, currentPresenter.getUserService(), null, new Consumer<MultiRaceLeaderboardPanel>() {
@Override
public void consume(LeaderboardPanel object) {
public void consume(MultiRaceLeaderboardPanel object) {
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.RefreshManagerWithErrorAndBusy;
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.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.dispatch.shared.commands.CollectionResult;
@@ -88,10 +88,10 @@ public class RegattaLeaderboardTabView extends SharedLeaderboardRegattaTabView<R
if (regattaId != null && !regattaId.isEmpty()) {
String leaderboardName = regattaId;
RegattaAnalyticsDataManager regattaAnalyticsManager = currentPresenter.getCtx().getRegattaAnalyticsManager();
LeaderboardPanel leaderboardPanel = regattaAnalyticsManager.getLeaderboardPanel();
final Consumer<LeaderboardPanel> leaderboardConsumer = new Consumer<LeaderboardPanel>() {
MultiRaceLeaderboardPanel leaderboardPanel = regattaAnalyticsManager.getLeaderboardPanel();
final Consumer<MultiRaceLeaderboardPanel> leaderboardConsumer = new Consumer<MultiRaceLeaderboardPanel>() {
@Override
public void consume(LeaderboardPanel leaderboardPanel) {
public void consume(MultiRaceLeaderboardPanel leaderboardPanel) {
leaderboardUpdateProvider = leaderboardPanel;
leaderboardUpdateProvider.addLeaderboardUpdateListener(RegattaLeaderboardTabView.this);
OldLeaderboardDelegateFullscreenViewer leaderboardDelegate = new OldLeaderboardDelegateFullscreenViewer();
@@ -123,9 +123,9 @@ public class RegattaLeaderboardTabView extends SharedLeaderboardRegattaTabView<R
} else if( /*FIXME placeToken not empty */ false) {
createLeaderboardComponentContext(leaderboardName, currentPresenter.getUserService(),
/* FIXME placeToken */ null)
.getInitialSettings(new DefaultOnSettingsLoadedCallback<LeaderboardSettings>() {
.getInitialSettings(new DefaultOnSettingsLoadedCallback<MultiRaceLeaderboardSettings>() {
@Override
public void onSuccess(LeaderboardSettings settings) {
public void onSuccess(MultiRaceLeaderboardSettings settings) {
leaderboardPanel.updateSettings(settings);
leaderboardConsumer.consume(leaderboardPanel);
}
@@ -5,18 +5,15 @@ import java.util.Iterator;
import java.util.List;
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.gwt.settings.client.leaderboard.LeaderboardSettings;
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.CompetitorSelectionModel;
import com.sap.sailing.gwt.ui.client.DebugIdHelper;
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
import com.sap.sailing.gwt.ui.client.StringMessages;
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.MultiRaceLeaderboardPanel;
import com.sap.sse.common.Util;
@@ -36,7 +33,7 @@ import com.sap.sse.gwt.client.shared.settings.ComponentContext;
* @author Axel Uhl (d043530)
*/
public class EventSeriesAnalyticsDataManager {
private LeaderboardPanel overallLeaderboardPanel;
private MultiRaceLeaderboardPanel overallLeaderboardPanel;
private MultiCompetitorLeaderboardChart multiCompetitorChart;
private MultiLeaderboardProxyPanel multiLeaderboardPanel;
@@ -58,13 +55,13 @@ public class EventSeriesAnalyticsDataManager {
this.multiCompetitorChart = null;
}
public LeaderboardPanel createMultiRaceOverallLeaderboardPanel(Component<?> parent, ComponentContext<?> context,
final LeaderboardSettings leaderboardSettings, final RegattaAndRaceIdentifier preselectedRace,
public MultiRaceLeaderboardPanel createMultiRaceOverallLeaderboardPanel(Component<?> parent, ComponentContext<?> context,
final MultiRaceLeaderboardSettings leaderboardSettings,
final String leaderboardGroupName, String leaderboardName, boolean showRaceDetails,
boolean autoExpandLastRaceColumn) {
if(overallLeaderboardPanel == null) {
overallLeaderboardPanel = new MultiRaceLeaderboardPanel(parent, context, sailingService, asyncActionsExecutor,
leaderboardSettings, true, preselectedRace,
leaderboardSettings, true,
competitorSelectionProvider, timer, leaderboardGroupName, leaderboardName, errorReporter,
StringMessages.INSTANCE, showRaceDetails, /* competitorSearchTextBox */ null,
/* showSelectionCheckbox */ true,
@@ -88,13 +85,13 @@ public class EventSeriesAnalyticsDataManager {
}
public MultiLeaderboardProxyPanel createMultiLeaderboardPanel(Component<?> parent, ComponentContext<?> context,
LeaderboardSettings leaderboardSettings,
String preselectedLeaderboardName, RaceIdentifier preselectedRace, String leaderboardGroupName,
MultiRaceLeaderboardSettings leaderboardSettings,
String preselectedLeaderboardName, String leaderboardGroupName,
String metaLeaderboardName, boolean showRaceDetails, boolean autoExpandLastRaceColumn) {
if(multiLeaderboardPanel == null) {
multiLeaderboardPanel = new MultiLeaderboardProxyPanel(parent, context, sailingService, metaLeaderboardName,
asyncActionsExecutor, timer, true /* isEmbedded */,
preselectedLeaderboardName, preselectedRace, errorReporter, StringMessages.INSTANCE,
preselectedLeaderboardName, errorReporter, StringMessages.INSTANCE,
showRaceDetails, autoExpandLastRaceColumn, leaderboardSettings);
}
return multiLeaderboardPanel;
@@ -104,7 +101,7 @@ public class EventSeriesAnalyticsDataManager {
return multiLeaderboardPanel;
}
public LeaderboardPanel getLeaderboardPanel() {
public MultiRaceLeaderboardPanel getLeaderboardPanel() {
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.user.client.ui.Composite;
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.MultiRaceLeaderboardPanelLifecycle;
import com.sap.sailing.gwt.settings.client.leaderboard.MultiRaceLeaderboardSettings;
import com.sap.sailing.gwt.settings.client.utils.StoredSettingsLocationFactory;
import com.sap.sailing.gwt.ui.client.LeaderboardUpdateListener;
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.DefaultOnSettingsLoadedCallback;
import com.sap.sse.gwt.shared.GwtHttpRequestUtils;
@@ -29,19 +29,19 @@ public abstract class SharedLeaderboardEventSeriesTabView<T extends AbstractSeri
protected void createSharedLeaderboardPanel(String leaderboardName,
EventSeriesAnalyticsDataManager eventSeriesAnalyticsManager, UserService userService,
String placeToken, final Consumer<LeaderboardPanel> consumer) {
String placeToken, final Consumer<MultiRaceLeaderboardPanel> consumer) {
// FIXME remove
boolean autoExpandLastRaceColumn = GwtHttpRequestUtils
.getBooleanParameter(LeaderboardUrlSettings.PARAM_AUTO_EXPAND_LAST_RACE_COLUMN, false);
final ComponentContext<LeaderboardSettings> componentContext = createLeaderboardComponentContext(leaderboardName, userService,
final ComponentContext<MultiRaceLeaderboardSettings> componentContext = createLeaderboardComponentContext(leaderboardName, userService,
placeToken);
componentContext.getInitialSettings(new DefaultOnSettingsLoadedCallback<LeaderboardSettings>() {
componentContext.getInitialSettings(new DefaultOnSettingsLoadedCallback<MultiRaceLeaderboardSettings>() {
@Override
public void onSuccess(LeaderboardSettings leaderboardSettings) {
LeaderboardPanel leaderboardPanel = eventSeriesAnalyticsManager.createMultiRaceOverallLeaderboardPanel(null,
componentContext, leaderboardSettings, null, "leaderboardGroupName",
public void onSuccess(MultiRaceLeaderboardSettings leaderboardSettings) {
MultiRaceLeaderboardPanel leaderboardPanel = eventSeriesAnalyticsManager.createMultiRaceOverallLeaderboardPanel(null,
componentContext, leaderboardSettings, "leaderboardGroupName",
leaderboardName, true, // this information came from place, now hard coded. check with frank
autoExpandLastRaceColumn);
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) {
final LeaderboardPanelLifecycle lifecycle = new LeaderboardPanelLifecycle(null, StringMessages.INSTANCE);
final MultiRaceLeaderboardPanelLifecycle lifecycle = new MultiRaceLeaderboardPanelLifecycle(null, StringMessages.INSTANCE);
final StoredSettingsLocation storageDefinition = StoredSettingsLocationFactory.createStoredSettingsLocatorForSeriesOverallLeaderboard(leaderboardName);
final ComponentContext<LeaderboardSettings> componentContext = new PlaceBasedComponentContextWithSettingsStorage<>(
final ComponentContext<MultiRaceLeaderboardSettings> componentContext = new PlaceBasedComponentContextWithSettingsStorage<>(
lifecycle, userService, storageDefinition, placeToken);
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.ui.client.CompetitorSelectionChangeListener;
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;
/**
@@ -78,9 +78,9 @@ public class EventSeriesCompetitorAnalyticsTabView extends SharedLeaderboardEven
}
};
if(eventSeriesAnalyticsManager.getLeaderboardPanel() == null) {
createSharedLeaderboardPanel(leaderboardName, eventSeriesAnalyticsManager, currentPresenter.getUserService(), null, new Consumer<LeaderboardPanel>() {
createSharedLeaderboardPanel(leaderboardName, eventSeriesAnalyticsManager, currentPresenter.getUserService(), null, new Consumer<MultiRaceLeaderboardPanel>() {
@Override
public void consume(LeaderboardPanel object) {
public void consume(MultiRaceLeaderboardPanel object) {
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.SeriesTabView;
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.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.ui.client.LeaderboardUpdateListener;
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 boolean autoExpandLastRaceColumn = GwtHttpRequestUtils.getBooleanParameter(LeaderboardUrlSettings.PARAM_AUTO_EXPAND_LAST_RACE_COLUMN, false);
final ComponentContext<LeaderboardSettings> componentContext = createLeaderboardComponentContext(leaderboardName, currentPresenter.getUserService(), /*FIXME placeToken */ null);
componentContext.getInitialSettings(new DefaultOnSettingsLoadedCallback<LeaderboardSettings>() {
final ComponentContext<MultiRaceLeaderboardSettings> componentContext = createLeaderboardComponentContext(leaderboardName, currentPresenter.getUserService(), /*FIXME placeToken */ null);
componentContext.getInitialSettings(new DefaultOnSettingsLoadedCallback<MultiRaceLeaderboardSettings>() {
@Override
public void onSuccess(LeaderboardSettings settings) {
public void onSuccess(MultiRaceLeaderboardSettings settings) {
MultiLeaderboardProxyPanel leaderboardPanel = regattaAnalyticsManager.createMultiLeaderboardPanel(null, componentContext,
settings,
null, // TODO: preselectedLeaderboardName
null,
"leaderboardGroupName",
leaderboardName,
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) {
final MultiLeaderboardPanelLifecycle lifecycle = new MultiLeaderboardPanelLifecycle(null, StringMessages.INSTANCE);
final MultipleMultiLeaderboardPanelLifecycle lifecycle = new MultipleMultiLeaderboardPanelLifecycle(null, StringMessages.INSTANCE);
final StoredSettingsLocation storageDefinition = StoredSettingsLocationFactory.createStoredSettingsLocatorForSeriesRegattaLeaderboards(leaderboardName);
final ComponentContext<LeaderboardSettings> componentContext = new PlaceBasedComponentContextWithSettingsStorage<>(
final ComponentContext<MultiRaceLeaderboardSettings> componentContext = new PlaceBasedComponentContextWithSettingsStorage<>(
lifecycle, userService, storageDefinition, placeToken);
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.SeriesView;
import com.sap.sailing.gwt.home.desktop.places.fakeseries.SharedLeaderboardEventSeriesTabView;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettings;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel;
import com.sap.sailing.gwt.settings.client.leaderboard.MultiRaceLeaderboardSettings;
import com.sap.sailing.gwt.ui.leaderboard.MultiRaceLeaderboardPanel;
import com.sap.sse.gwt.client.shared.settings.DefaultOnSettingsLoadedCallback;
/**
@@ -62,9 +62,9 @@ public class EventSeriesOverallLeaderboardTabView extends SharedLeaderboardEvent
String leaderboardName = currentPresenter.getSeriesDTO().getLeaderboardId();
if (leaderboardName != null && !leaderboardName.isEmpty()) {
EventSeriesAnalyticsDataManager eventSeriesAnalyticsManager = currentPresenter.getCtx().getAnalyticsManager();
final Consumer<LeaderboardPanel> leaderboardConsumer = new Consumer<LeaderboardPanel>() {
final Consumer<MultiRaceLeaderboardPanel> leaderboardConsumer = new Consumer<MultiRaceLeaderboardPanel>() {
@Override
public void consume(LeaderboardPanel leaderboardPanel) {
public void consume(MultiRaceLeaderboardPanel leaderboardPanel) {
initWidget(ourUiBinder.createAndBindUi(EventSeriesOverallLeaderboardTabView.this));
leaderboard.setLeaderboard(leaderboardPanel, currentPresenter.getAutoRefreshTimer());
eventSeriesAnalyticsManager.hideCompetitorChart();
@@ -74,13 +74,13 @@ public class EventSeriesOverallLeaderboardTabView extends SharedLeaderboardEvent
}
}
};
LeaderboardPanel leaderboardPanel = eventSeriesAnalyticsManager.getLeaderboardPanel();
MultiRaceLeaderboardPanel leaderboardPanel = eventSeriesAnalyticsManager.getLeaderboardPanel();
if(leaderboardPanel == null) {
createSharedLeaderboardPanel(leaderboardName, eventSeriesAnalyticsManager, currentPresenter.getUserService(), /*FIXME placeToken */ null, leaderboardConsumer);
} 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
public void onSuccess(LeaderboardSettings settings) {
public void onSuccess(MultiRaceLeaderboardSettings settings) {
leaderboardPanel.updateSettings(settings);
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.sap.sailing.gwt.common.client.SharedResources;
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.RegattaRaceStatesSettings;
import com.sap.sailing.gwt.settings.client.utils.StoredSettingsLocationFactory;
@@ -309,7 +309,7 @@ public class RegattaOverviewPanel extends SimplePanel {
if (leaderboardsTabPanel != null) {
if (showLeaderboard) {
final CompetitorSelectionModel competitorSelectionProvider = new CompetitorSelectionModel(/* hasMultiSelection */ true);
final LeaderboardSettings leaderboardSettings = new LeaderboardSettings();
final MultiRaceLeaderboardSettings leaderboardSettings = new MultiRaceLeaderboardSettings();
sailingService.getLeaderboardsByEvent(eventDTO, new MarkedAsyncCallback<List<StrippedLeaderboardDTO>>(
new AsyncCallback<List<StrippedLeaderboardDTO>>() {
@Override
@@ -318,7 +318,6 @@ public class RegattaOverviewPanel extends SimplePanel {
for (StrippedLeaderboardDTO leaderboard : result) {
LeaderboardPanel leaderboardPanel = new MultiRaceLeaderboardPanel(null, null, sailingService,
new AsyncActionsExecutor(), leaderboardSettings, false,
/*preSelectedRace*/null,
competitorSelectionProvider,
null, leaderboard.name,
errorReporter, stringMessages, /* showRaceDetails */false);
@@ -9,7 +9,7 @@ public abstract class AbstractLeaderboardPerspectiveLifecycle extends AbstractPe
protected AbstractLeaderboardPerspectiveLifecycle(StringMessages stringMessages,
AbstractLeaderboardDTO leaderboard, boolean isOverall) {
addLifeCycle(new LeaderboardPanelLifecycle(leaderboard, stringMessages));
addLifeCycle(new MultiRaceLeaderboardPanelLifecycle(leaderboard, stringMessages));
addLifeCycle(new MultiCompetitorLeaderboardChartLifecycle(isOverall));
}
@@ -5,11 +5,10 @@ import java.util.List;
import com.sap.sailing.domain.common.dto.AbstractLeaderboardDTO;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sse.common.settings.generic.support.SettingsUtil;
import com.sap.sse.gwt.client.shared.components.ComponentLifecycle;
public class LeaderboardPanelLifecycle
implements ComponentLifecycle<LeaderboardSettings> {
public abstract class LeaderboardPanelLifecycle<T extends LeaderboardSettings>
implements ComponentLifecycle<T> {
public static final String ID = "lb";
protected final StringMessages stringMessages;
@@ -20,17 +19,6 @@ public class LeaderboardPanelLifecycle
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
public String getLocalizedShortName() {
return stringMessages.leaderboard();
@@ -45,32 +33,4 @@ public class LeaderboardPanelLifecycle
public boolean hasSettings() {
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.StringSetSetting;
import com.sap.sse.common.settings.generic.StringSetting;
import com.sap.sse.common.settings.util.SettingsDefaultValuesUtils;
/**
* Settings for the {@link LeaderboardPanel} component. If you change here, please also visit
@@ -26,34 +25,34 @@ import com.sap.sse.common.settings.util.SettingsDefaultValuesUtils;
* @author Axel Uhl (d043530)
*
*/
public class LeaderboardSettings extends AbstractGenericSerializableSettings {
public abstract class LeaderboardSettings extends AbstractGenericSerializableSettings {
private static final long serialVersionUID = 2625004077963291333L;
/**
* Only one of {@link #namesOfRaceColumnsToShow} and {@link #namesOfRacesToShow} must be non-<code>null</code>.
* Only valid when the {@link #activeRaceColumnSelectionStrategy} is set to EXPLIZIT
*/
private StringSetSetting namesOfRaceColumnsToShow;
protected StringSetSetting namesOfRaceColumnsToShow;
/**
* Only one of {@link #namesOfRaceColumnsToShow} and {@link #namesOfRacesToShow} must be non-<code>null</code>.
* Only valid when the {@link #activeRaceColumnSelectionStrategy} is set to EXPLIZIT
*/
private StringSetSetting namesOfRacesToShow;
protected StringSetSetting namesOfRacesToShow;
/**
* Only valid when the {@link #activeRaceColumnSelectionStrategy} is set to LAST_N
*/
private IntegerSetting numberOfLastRacesToShow;
protected IntegerSetting numberOfLastRacesToShow;
private EnumSetSetting<DetailType> maneuverDetailsToShow;
private EnumSetSetting<DetailType> legDetailsToShow;
private EnumSetSetting<DetailType> raceDetailsToShow;
private EnumSetSetting<DetailType> overallDetailsToShow;
private boolean autoExpandPreSelectedRace = false;
private LongSetting delayBetweenAutoAdvancesInMilliseconds;
private BooleanSetting updateUponPlayStateChange;
private BooleanSetting isShowCompetitorNationality;
protected EnumSetSetting<DetailType> maneuverDetailsToShow;
protected EnumSetSetting<DetailType> legDetailsToShow;
protected EnumSetSetting<DetailType> raceDetailsToShow;
protected EnumSetSetting<DetailType> overallDetailsToShow;
protected boolean autoExpandPreSelectedRace = false;
protected LongSetting delayBetweenAutoAdvancesInMilliseconds;
protected BooleanSetting updateUponPlayStateChange;
protected BooleanSetting isShowCompetitorNationality;
/**
* There are two ways to select race columns.
@@ -61,27 +60,27 @@ public class LeaderboardSettings extends AbstractGenericSerializableSettings {
*/
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.
* Otherwise, the leaderboard will be sorted by the race column (ascending if {@link #sortAscending}, descending otherwise.
*/
private StringSetting nameOfRaceToSort;
private BooleanSetting sortAscending;
protected StringSetting nameOfRaceToSort;
protected BooleanSetting sortAscending;
/**
* Shows scores sum'd up for each race column
*/
private BooleanSetting showAddedScores;
protected BooleanSetting showAddedScores;
private BooleanSetting showCompetitorSailIdColumn;
private BooleanSetting showCompetitorFullNameColumn;
protected BooleanSetting showCompetitorSailIdColumn;
protected BooleanSetting showCompetitorFullNameColumn;
/**
* Show a column with total number of races completed
*/
private BooleanSetting showOverallColumnWithNumberOfRacesCompletedPerCompetitor;
protected BooleanSetting showOverallColumnWithNumberOfRacesCompletedPerCompetitor;
@Override
protected void addChildSettings() {
@@ -263,35 +262,4 @@ public class LeaderboardSettings extends AbstractGenericSerializableSettings {
public boolean isShowCompetitorNationality() {
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;
import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedHashMap;
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.ManeuverCountRaceColumn;
import com.sap.sse.common.Util;
import com.sap.sse.common.settings.util.SettingsDefaultValuesUtils;
import com.sap.sse.gwt.client.controls.IntegerBox;
import com.sap.sse.gwt.client.dialog.DataEntryDialog;
import com.sap.sse.gwt.client.dialog.DataEntryDialog.Validator;
import com.sap.sse.gwt.client.shared.components.SettingsDialogComponent;
public class LeaderboardSettingsDialogComponent implements SettingsDialogComponent<LeaderboardSettings> {
private final Map<String, CheckBox> raceColumnCheckboxes;
private final List<String> raceAllRaceColumnNames;
private final Map<DetailType, CheckBox> maneuverDetailCheckboxes;
private final Map<DetailType, CheckBox> legDetailCheckboxes;
private final Map<DetailType, CheckBox> raceDetailCheckboxes;
private final Map<DetailType, CheckBox> overallDetailCheckboxes;
private final StringMessages stringMessages;
private LongBox refreshIntervalInSecondsBox;
private RaceColumnSelectionStrategies activeRaceColumnSelectionStrategy;
public abstract class LeaderboardSettingsDialogComponent<T extends LeaderboardSettings> implements SettingsDialogComponent<T> {
protected final Map<String, CheckBox> raceColumnCheckboxes;
protected final List<String> raceAllRaceColumnNames;
protected final Map<DetailType, CheckBox> maneuverDetailCheckboxes;
protected final Map<DetailType, CheckBox> legDetailCheckboxes;
protected final Map<DetailType, CheckBox> raceDetailCheckboxes;
protected final Map<DetailType, CheckBox> overallDetailCheckboxes;
protected final StringMessages stringMessages;
protected LongBox refreshIntervalInSecondsBox;
protected RaceColumnSelectionStrategies activeRaceColumnSelectionStrategy;
private RadioButton explicitRaceColumnSelectionRadioBtn;
private RadioButton lastNRacesColumnSelectionRadioBtn;
private IntegerBox numberOfLastRacesToShowBox;
private CheckBox showAddedScoresCheckBox;
private CheckBox showOverallColumnWithNumberOfRacesSailedPerCompetitorCheckBox;
private CheckBox showCompetitorSailIdColumnheckBox;
private CheckBox showCompetitorFullNameColumnCheckBox;
private CheckBox isCompetitorNationalityColumnVisible;
private LeaderboardSettings initialSettings;
protected RadioButton explicitRaceColumnSelectionRadioBtn;
protected RadioButton lastNRacesColumnSelectionRadioBtn;
protected IntegerBox numberOfLastRacesToShowBox;
protected CheckBox showAddedScoresCheckBox;
protected CheckBox showOverallColumnWithNumberOfRacesSailedPerCompetitorCheckBox;
protected CheckBox showCompetitorSailIdColumnheckBox;
protected CheckBox showCompetitorFullNameColumnCheckBox;
protected CheckBox isCompetitorNationalityColumnVisible;
protected LeaderboardSettings initialSettings;
public LeaderboardSettingsDialogComponent(LeaderboardSettings initialSettings, List<String> allRaceColumnNames, StringMessages stringMessages) {
this.initialSettings = initialSettings;
@@ -357,62 +355,10 @@ public class LeaderboardSettingsDialogComponent implements SettingsDialogCompone
}
@Override
public LeaderboardSettings getResult() {
List<DetailType> maneuverDetailsToShow = new ArrayList<DetailType>();
for (Map.Entry<DetailType, CheckBox> entry : maneuverDetailCheckboxes.entrySet()) {
if (entry.getValue().getValue()) {
maneuverDetailsToShow.add(entry.getKey());
}
}
List<DetailType> overallDetailsToShow = new ArrayList<DetailType>();
for (Map.Entry<DetailType, CheckBox> entry : overallDetailCheckboxes.entrySet()) {
if (entry.getValue().getValue()) {
overallDetailsToShow.add(entry.getKey());
}
}
List<DetailType> raceDetailsToShow = new ArrayList<DetailType>();
for (Map.Entry<DetailType, CheckBox> entry : raceDetailCheckboxes.entrySet()) {
if (entry.getValue().getValue()) {
raceDetailsToShow.add(entry.getKey());
}
}
List<DetailType> legDetailsToShow = new ArrayList<DetailType>();
for (Map.Entry<DetailType, CheckBox> entry : legDetailCheckboxes.entrySet()) {
if (entry.getValue().getValue()) {
legDetailsToShow.add(entry.getKey());
}
}
List<String> namesOfRaceColumnsToShow = null;
if (activeRaceColumnSelectionStrategy == RaceColumnSelectionStrategies.EXPLICIT) {
namesOfRaceColumnsToShow = new ArrayList<String>();
for (Map.Entry<String, CheckBox> entry : raceColumnCheckboxes.entrySet()) {
if (entry.getValue().getValue()) {
namesOfRaceColumnsToShow.add(entry.getKey());
}
}
}
Long delayBetweenAutoAdvancesValue = refreshIntervalInSecondsBox.getValue();
Integer lastNRacesToShowValue = activeRaceColumnSelectionStrategy == RaceColumnSelectionStrategies.LAST_N ?
numberOfLastRacesToShowBox.getValue() : null;
LeaderboardSettings newSettings = new LeaderboardSettings(maneuverDetailsToShow, legDetailsToShow, raceDetailsToShow,
overallDetailsToShow, namesOfRaceColumnsToShow, /* nameOfRacesToShow */null,
lastNRacesToShowValue,
initialSettings.isAutoExpandPreSelectedRace(), 1000l * (delayBetweenAutoAdvancesValue == null ? 0l : delayBetweenAutoAdvancesValue.longValue()),
null,
true, /* updateUponPlayStateChange */ true, activeRaceColumnSelectionStrategy,
/*showAddedScores*/ showAddedScoresCheckBox.getValue().booleanValue(),
/*showOverallColumnWithNumberOfRacesSailedPerCompetitor*/ showOverallColumnWithNumberOfRacesSailedPerCompetitorCheckBox.getValue().booleanValue(),
showCompetitorSailIdColumnheckBox.getValue(), showCompetitorFullNameColumnCheckBox.getValue(),
isCompetitorNationalityColumnVisible.getValue());
SettingsDefaultValuesUtils.keepDefaults(initialSettings, newSettings);
return newSettings;
}
public Validator<T> getValidator() {
return new Validator<T>() {
@Override
public Validator<LeaderboardSettings> getValidator() {
return new Validator<LeaderboardSettings>() {
@Override
public String getErrorMessage(LeaderboardSettings valueToValidate) {
public String getErrorMessage(T valueToValidate) {
final String result;
if (valueToValidate.getLegDetailsToShow().isEmpty()) {
result = stringMessages.selectAtLeastOneLegDetail();
@@ -23,15 +23,15 @@ public class LeaderboardSettingsFactory {
return instance;
}
public LeaderboardSettings createNewDefaultSettingsWithRaceColumns(List<String> namesOfRaceColumns) {
LeaderboardSettings leaderboardSettings = new LeaderboardSettings(namesOfRaceColumns);
public MultiRaceLeaderboardSettings createNewDefaultSettingsWithRaceColumns(List<String> namesOfRaceColumns) {
MultiRaceLeaderboardSettings leaderboardSettings = new MultiRaceLeaderboardSettings(namesOfRaceColumns);
SettingsUtil.copyDefaultsFromValues(leaderboardSettings, leaderboardSettings);
return leaderboardSettings;
}
public LeaderboardSettings createNewSettingsWithCustomRaceDetails(List<DetailType> raceDetailsToShow) {
LeaderboardSettings defaultSettings = new LeaderboardSettings();
return new LeaderboardSettings(
public SingleRaceLeaderboardSettings createNewSettingsWithCustomRaceDetails(List<DetailType> raceDetailsToShow) {
LeaderboardSettings defaultSettings = new SingleRaceLeaderboardSettings();
return new SingleRaceLeaderboardSettings(
defaultSettings.getManeuverDetailsToShow(),
defaultSettings.getLegDetailsToShow(),
raceDetailsToShow, defaultSettings.getOverallDetailsToShow(),
@@ -50,8 +50,8 @@ public class LeaderboardSettingsFactory {
defaultSettings.isShowCompetitorNationality());
}
public LeaderboardSettings createSettingsWithCustomExpandPreselectedRaceState(LeaderboardSettings settings, boolean expandPreselectedRace) {
return new LeaderboardSettings(
public SingleRaceLeaderboardSettings createSettingsWithCustomExpandPreselectedRaceState(SingleRaceLeaderboardSettings settings, boolean expandPreselectedRace) {
return new SingleRaceLeaderboardSettings(
settings.getManeuverDetailsToShow(),
settings.getLegDetailsToShow(),
settings.getRaceDetailsToShow(), settings.getOverallDetailsToShow(),
@@ -69,14 +69,14 @@ public class LeaderboardSettingsFactory {
settings.isShowCompetitorNationality());
}
public LeaderboardSettings mergeLeaderboardSettings(LeaderboardSettings settingsWithRaceSelection, LeaderboardSettings settingsWithDetails) {
LeaderboardSettings newSettings = mergeLeaderboardSettingsHelper(settingsWithRaceSelection, settingsWithDetails);
LeaderboardSettings newDefaultSettings = mergeLeaderboardSettingsHelper(SettingsDefaultValuesUtils.getDefaultSettings(new LeaderboardSettings(), settingsWithRaceSelection), SettingsDefaultValuesUtils.getDefaultSettings(new LeaderboardSettings(), settingsWithDetails));
public MultiRaceLeaderboardSettings mergeLeaderboardSettings(MultiRaceLeaderboardSettings settingsWithRaceSelection, MultiRaceLeaderboardSettings settingsWithDetails) {
MultiRaceLeaderboardSettings newSettings = mergeLeaderboardSettingsHelper(settingsWithRaceSelection, settingsWithDetails);
MultiRaceLeaderboardSettings newDefaultSettings = mergeLeaderboardSettingsHelper(SettingsDefaultValuesUtils.getDefaultSettings(new MultiRaceLeaderboardSettings(), settingsWithRaceSelection), SettingsDefaultValuesUtils.getDefaultSettings(new MultiRaceLeaderboardSettings(), settingsWithDetails));
SettingsDefaultValuesUtils.keepDefaults(newDefaultSettings, newSettings);
return newSettings;
}
private LeaderboardSettings mergeLeaderboardSettingsHelper(LeaderboardSettings settingsWithRaceSelection, LeaderboardSettings settingsWithDetails) {
private MultiRaceLeaderboardSettings mergeLeaderboardSettingsHelper(MultiRaceLeaderboardSettings settingsWithRaceSelection, MultiRaceLeaderboardSettings settingsWithDetails) {
Collection<DetailType> maneuverDetails = settingsWithDetails.getManeuverDetailsToShow();
Collection<DetailType> legDetails = settingsWithDetails.getLegDetailsToShow();
Collection<DetailType> raceDetails = settingsWithDetails.getRaceDetailsToShow();
@@ -94,7 +94,7 @@ public class LeaderboardSettingsFactory {
boolean sortAscending = settingsWithRaceSelection.isSortAscending();
boolean updateUponPlayStateChange = settingsWithRaceSelection.isUpdateUponPlayStateChange();
return new LeaderboardSettings(maneuverDetails, legDetails, raceDetails, overallDetailsToShow,
return new MultiRaceLeaderboardSettings(maneuverDetails, legDetails, raceDetails, overallDetailsToShow,
namesOfRaceColumnsToShow, namesOfRacesToShow, numberOfLastRacesToShow, autoExpandPreSelectedRace, refreshIntervalInMs,
nameOfRaceToSort, sortAscending, updateUponPlayStateChange, strategy, /*showAddedScores*/ false,
/* showOverallRacesCompleted */ false, showCompetitorSailIdColumn, showCompetitorFullNameColumns,
@@ -7,11 +7,11 @@ public class MetaLeaderboardPerspectiveLifecycle extends AbstractLeaderboardPers
public static final String ID = "mlbh";
private final MultiLeaderboardPanelLifecycle multiLeaderboardPanelLifecycle;
private final MultipleMultiLeaderboardPanelLifecycle multiLeaderboardPanelLifecycle;
public MetaLeaderboardPerspectiveLifecycle(StringMessages stringMessages, AbstractLeaderboardDTO leaderboard) {
super(stringMessages, leaderboard, true);
multiLeaderboardPanelLifecycle = new MultiLeaderboardPanelLifecycle(null, stringMessages);
multiLeaderboardPanelLifecycle = new MultipleMultiLeaderboardPanelLifecycle(null, stringMessages);
addLifeCycle(multiLeaderboardPanelLifecycle);
}
@@ -25,7 +25,7 @@ public class MetaLeaderboardPerspectiveLifecycle extends AbstractLeaderboardPers
return ID;
}
public MultiLeaderboardPanelLifecycle getMultiLeaderboardPanelLifecycle() {
public MultipleMultiLeaderboardPanelLifecycle getMultiLeaderboardPanelLifecycle() {
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
* Leaderboard to coexist.
*/
public class MultiLeaderboardPanelLifecycle extends LeaderboardPanelLifecycle {
public class MultipleMultiLeaderboardPanelLifecycle extends MultiRaceLeaderboardPanelLifecycle {
public static final String MID = "mlb";
public MultiLeaderboardPanelLifecycle(AbstractLeaderboardDTO leaderboard, StringMessages stringMessages) {
public MultipleMultiLeaderboardPanelLifecycle(AbstractLeaderboardDTO leaderboard, StringMessages stringMessages) {
super(leaderboard, stringMessages);
}
@@ -20,7 +20,7 @@ public class MultiLeaderboardPanelLifecycle extends LeaderboardPanelLifecycle {
}
@Override
public LeaderboardSettings extractDocumentSettings(LeaderboardSettings leaderboardSettings) {
public MultiRaceLeaderboardSettings extractDocumentSettings(MultiRaceLeaderboardSettings leaderboardSettings) {
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
* Leaderboard to coexist.
*/
public class OverallLeaderboardPanelLifecycle extends LeaderboardPanelLifecycle {
public class OverallLeaderboardPanelLifecycle extends MultiRaceLeaderboardPanelLifecycle {
public static final String ID = "olb";
@@ -26,7 +26,7 @@ public class OverallLeaderboardPanelLifecycle extends LeaderboardPanelLifecycle
}
@Override
public LeaderboardSettingsDialogComponent getSettingsDialogComponent(LeaderboardSettings settings) {
public MultiRaceLeaderboardSettingsDialogComponent getSettingsDialogComponent(MultiRaceLeaderboardSettings settings) {
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.sse.gwt.client.dialog.DataEntryDialog;
public class OverallLeaderboardSettingsDialogComponent extends LeaderboardSettingsDialogComponent {
public class OverallLeaderboardSettingsDialogComponent extends MultiRaceLeaderboardSettingsDialogComponent {
public OverallLeaderboardSettingsDialogComponent(LeaderboardSettings initialSettings, List<String> allRaceColumnNames, StringMessages 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,
rootComponentLifeCycle, defaultSettings, sailingService, new AsyncActionsExecutor(),
timer, null, leaderboardGroupName, leaderboardName,
timer, leaderboardGroupName, leaderboardName,
LeaderboardEntryPoint.this, getStringMessages(), getActualChartDetailType(defaultSettings));
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.LeaderboardSettings;
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.client.Collator;
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.ComponentResources;
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;
/**
@@ -135,7 +132,7 @@ import com.sap.sse.gwt.client.shared.settings.ComponentContext;
* @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,
CompetitorSelectionChangeListener, LeaderboardFetcher, BusyStateProvider, LeaderboardUpdateProvider {
private static final LeaderboardResources RESOURCES = GWT.create(LeaderboardResources.class);
@@ -387,16 +384,15 @@ public abstract class LeaderboardPanel extends AbstractCompositeComponent<Leader
AsyncActionsExecutor asyncActionsExecutor, LeaderboardSettings settings,
CompetitorSelectionProvider competitorSelectionProvider, String leaderboardName,
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);
}
public LeaderboardPanel(Component<?> parent, ComponentContext<?> context, SailingServiceAsync sailingService,
AsyncActionsExecutor asyncActionsExecutor, LeaderboardSettings settings, boolean isEmbedded,
RegattaAndRaceIdentifier preSelectedRace, CompetitorSelectionProvider competitorSelectionProvider,
AsyncActionsExecutor asyncActionsExecutor, LeaderboardSettings settings, boolean isEmbedded, CompetitorSelectionProvider competitorSelectionProvider,
String leaderboardGroupName, String leaderboardName, ErrorReporter errorReporter,
final StringMessages stringMessages, boolean showRaceDetails) {
this(parent, context, sailingService, asyncActionsExecutor, settings, isEmbedded, preSelectedRace,
this(parent, context, sailingService, asyncActionsExecutor, settings, isEmbedded,
competitorSelectionProvider,
new Timer(
// 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,
AsyncActionsExecutor asyncActionsExecutor, LeaderboardSettings settings, boolean isEmbedded,
RegattaAndRaceIdentifier preSelectedRace, CompetitorSelectionProvider competitorSelectionProvider,
AsyncActionsExecutor asyncActionsExecutor, LeaderboardSettings settings, boolean isEmbedded, CompetitorSelectionProvider competitorSelectionProvider,
Timer timer, String leaderboardGroupName, String leaderboardName, final ErrorReporter errorReporter,
final StringMessages stringMessages, boolean showRaceDetails, CompetitorFilterPanel competitorSearchTextBox,
boolean showSelectionCheckbox, RaceTimesInfoProvider optionalRaceTimesInfoProvider,
@@ -425,7 +420,7 @@ public abstract class LeaderboardPanel extends AbstractCompositeComponent<Leader
this.asyncActionsExecutor = asyncActionsExecutor;
this.isEmbedded = isEmbedded;
this.competitorSelectionProvider = competitorSelectionProvider;
competitorSelectionProvider.addCompetitorSelectionChangeListener(this);
this.competitorSelectionProvider.addCompetitorSelectionChangeListener(this);
this.setLeaderboardName(leaderboardName);
this.errorReporter = errorReporter;
this.stringMessages = stringMessages;
@@ -448,19 +443,6 @@ public abstract class LeaderboardPanel extends AbstractCompositeComponent<Leader
timer.addPlayStateListener(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();
leaderboardTable = new FlushableSortedCellTableWithStylableHeaders<LeaderboardRowDTO>(/* pageSize */10000,
TABLE_RESOURCES);
@@ -523,9 +505,7 @@ public abstract class LeaderboardPanel extends AbstractCompositeComponent<Leader
competitorSearchTextBox.getSettingsButton().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
SettingsDialog<LeaderboardSettings> settingsDialog = new SettingsDialog<LeaderboardSettings>(LeaderboardPanel.this, stringMessages);
settingsDialog.ensureDebugId("LeaderboardSettingsDialog");
settingsDialog.show();
openSettingsDialog();
}
});
this.competitorFilterPanel = competitorSearchTextBox;
@@ -543,9 +523,23 @@ public abstract class LeaderboardPanel extends AbstractCompositeComponent<Leader
initWidget(mainPanel);
mainPanel.setWidget(contentPanel);
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()) {
loadCompleteLeaderboard(/* showProgress */ false);
}
updateSettings(settings);
}
private Widget createToolbarPanel() {
@@ -2140,7 +2134,7 @@ public abstract class LeaderboardPanel extends AbstractCompositeComponent<Leader
private RaceColumn<?> getRaceColumnByRaceName(String raceName) {
for (int i = 0; i < getLeaderboardTable().getColumnCount(); i++) {
Column<LeaderboardRowDTO, ?> column = getLeaderboardTable().getColumn(i);
if (column instanceof RaceColumn<?>) {
if (column instanceof LeaderboardPanel.RaceColumn) {
RaceColumnDTO raceInLeaderboard = ((RaceColumn<?>) column).getRace();
for (FleetDTO fleet : raceInLeaderboard.getFleets()) {
final RegattaAndRaceIdentifier raceIdentifier = raceInLeaderboard.getRaceIdentifier(fleet);
@@ -2156,7 +2150,7 @@ public abstract class LeaderboardPanel extends AbstractCompositeComponent<Leader
private RaceColumn<?> getRaceColumnByRaceColumnName(String raceColumnName) {
for (int i = 0; i < getLeaderboardTable().getColumnCount(); i++) {
Column<LeaderboardRowDTO, ?> column = getLeaderboardTable().getColumn(i);
if (column instanceof RaceColumn<?>) {
if (column instanceof LeaderboardPanel.RaceColumn) {
if (((RaceColumn<?>) column).getRaceColumnName().equals(raceColumnName)) {
return (RaceColumn<?>) column;
}
@@ -2373,7 +2367,7 @@ public abstract class LeaderboardPanel extends AbstractCompositeComponent<Leader
Collection<String> namesOfExpandedRaceColumns = new ArrayList<String>();
for (int i = 0; i < getLeaderboardTable().getColumnCount(); i++) {
Column<LeaderboardRowDTO, ?> column = getLeaderboardTable().getColumn(i);
if (column instanceof RaceColumn<?>) {
if (column instanceof LeaderboardPanel.RaceColumn) {
RaceColumn<?> raceColumn = (RaceColumn<?>) column;
if (raceColumn.isExpanded()) {
namesOfExpandedRaceColumns.add(raceColumn.getRaceColumnName());
@@ -2441,7 +2435,7 @@ public abstract class LeaderboardPanel extends AbstractCompositeComponent<Leader
}
RaceColumn<?> lastRaceColumn = null;
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);
break;
}
@@ -2532,7 +2526,7 @@ public abstract class LeaderboardPanel extends AbstractCompositeComponent<Leader
if (selectedRaceDetails.contains(DetailType.DISPLAY_LEGS)) {
for (int i = 0; i < getLeaderboardTable().getColumnCount(); i++) {
Column<LeaderboardRowDTO, ?> c = getLeaderboardTable().getColumn(i);
if (c instanceof RaceColumn<?>) {
if (c instanceof LeaderboardPanel.RaceColumn) {
RaceColumn<?> rc = (RaceColumn<?>) c;
// If the new leaderboard no longer contains the column, getLegCount will return -1, causing the
// column
@@ -2885,7 +2879,7 @@ public abstract class LeaderboardPanel extends AbstractCompositeComponent<Leader
*/
private void addRaceColumn(RaceColumn<?> raceColumn) {
if (getLeaderboardTable()
.getColumn(getLeaderboardTable().getColumnCount() - 1) instanceof TotalNetPointssColumn) {
.getColumn(getLeaderboardTable().getColumnCount() - 1) instanceof LeaderboardPanel.TotalNetPointssColumn) {
removeColumn(getLeaderboardTable().getColumnCount() - 1);
}
addColumn(raceColumn);
@@ -2960,7 +2954,7 @@ public abstract class LeaderboardPanel extends AbstractCompositeComponent<Leader
if (isShowCompetitorSailId()) {
if (getLeaderboardTable().getColumnCount() <= columnIndexWhereToInsertTheNextColumn
|| !(getLeaderboardTable()
.getColumn(columnIndexWhereToInsertTheNextColumn) instanceof SailIDColumn<?>)) {
.getColumn(columnIndexWhereToInsertTheNextColumn) instanceof SailIDColumn)) {
insertColumn(columnIndexWhereToInsertTheNextColumn,
new SailIDColumn<LeaderboardRowDTO>(new CompetitorFetcher<LeaderboardRowDTO>() {
@Override
@@ -2972,20 +2966,20 @@ public abstract class LeaderboardPanel extends AbstractCompositeComponent<Leader
columnIndexWhereToInsertTheNextColumn++;
} else {
if (getLeaderboardTable().getColumnCount() > columnIndexWhereToInsertTheNextColumn && getLeaderboardTable()
.getColumn(columnIndexWhereToInsertTheNextColumn) instanceof SailIDColumn<?>) {
.getColumn(columnIndexWhereToInsertTheNextColumn) instanceof SailIDColumn) {
removeColumn(columnIndexWhereToInsertTheNextColumn);
}
}
if (isShowCompetitorFullName()) {
if (getLeaderboardTable().getColumnCount() <= columnIndexWhereToInsertTheNextColumn
|| !(getLeaderboardTable()
.getColumn(columnIndexWhereToInsertTheNextColumn) instanceof CompetitorColumn)) {
.getColumn(columnIndexWhereToInsertTheNextColumn) instanceof LeaderboardPanel.CompetitorColumn)) {
insertColumn(columnIndexWhereToInsertTheNextColumn, createCompetitorColumn());
}
columnIndexWhereToInsertTheNextColumn++;
} else {
if (getLeaderboardTable().getColumnCount() > columnIndexWhereToInsertTheNextColumn && getLeaderboardTable()
.getColumn(columnIndexWhereToInsertTheNextColumn) instanceof CompetitorColumn) {
.getColumn(columnIndexWhereToInsertTheNextColumn) instanceof LeaderboardPanel.CompetitorColumn) {
removeColumn(columnIndexWhereToInsertTheNextColumn);
}
}
@@ -3005,7 +2999,7 @@ public abstract class LeaderboardPanel extends AbstractCompositeComponent<Leader
private void ensureTotalsColumn() {
// add a totals column on the right
if (getLeaderboardTable().getColumnCount() == 0 || !(getLeaderboardTable()
.getColumn(getLeaderboardTable().getColumnCount() - 1) instanceof TotalNetPointssColumn)) {
.getColumn(getLeaderboardTable().getColumnCount() - 1) instanceof LeaderboardPanel.TotalNetPointssColumn)) {
addColumn(new TotalNetPointssColumn(TOTAL_COLUMN_STYLE));
}
}
@@ -3013,14 +3007,14 @@ public abstract class LeaderboardPanel extends AbstractCompositeComponent<Leader
private void ensureTotalRacesSailedColumn() {
// add a totals column on the right
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));
}
}
private void ensureNoTotalRacesSailedColumn() {
if ((getLeaderboardTable()
.getColumn(getLeaderboardTable().getColumnCount() - 2) instanceof TotalRacesCompletedColumn)) {
.getColumn(getLeaderboardTable().getColumnCount() - 2) instanceof LeaderboardPanel.TotalRacesCompletedColumn)) {
removeColumn(getLeaderboardTable().getColumnCount() - 2);
}
}
@@ -3057,14 +3051,14 @@ public abstract class LeaderboardPanel extends AbstractCompositeComponent<Leader
private void ensureNoCarryColumn(int zeroBasedIndexOfCarryColumn) {
if (getLeaderboardTable().getColumnCount() > zeroBasedIndexOfCarryColumn
&& getLeaderboardTable().getColumn(zeroBasedIndexOfCarryColumn) instanceof CarryColumn) {
&& getLeaderboardTable().getColumn(zeroBasedIndexOfCarryColumn) instanceof LeaderboardPanel.CarryColumn) {
removeColumn(zeroBasedIndexOfCarryColumn);
}
}
protected void ensureCarryColumn(int zeroBasedIndexOfCarryColumn) {
if (getLeaderboardTable().getColumnCount() <= zeroBasedIndexOfCarryColumn
|| !(getLeaderboardTable().getColumn(zeroBasedIndexOfCarryColumn) instanceof CarryColumn)) {
|| !(getLeaderboardTable().getColumn(zeroBasedIndexOfCarryColumn) instanceof LeaderboardPanel.CarryColumn)) {
while (getLeaderboardTable().getColumnCount() > zeroBasedIndexOfCarryColumn) {
removeColumn(zeroBasedIndexOfCarryColumn);
}
@@ -3146,12 +3140,6 @@ public abstract class LeaderboardPanel extends AbstractCompositeComponent<Leader
return false;
}
@Override
public SettingsDialogComponent<LeaderboardSettings> getSettingsDialogComponent(LeaderboardSettings settings) {
return new LeaderboardSettingsDialogComponent(settings, leaderboard.getNamesOfRaceColumns(),
stringMessages);
}
@Override
public String getLocalizedShortName() {
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.gwt.settings.client.leaderboard.LeaderboardPanelLifecycle;
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.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.SailingServiceAsync;
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
*/
init(new SingleLeaderboardPanel(this, componentContext, sailingService, asyncActionsExecutor,
init(new SingleRaceLeaderboardPanel(this, componentContext, sailingService, asyncActionsExecutor,
settings.findSettingsByComponentId(LeaderboardPanelLifecycle.ID),
preselectedRace != null, preselectedRace, competitorSelectionModel, timer,
leaderboardGroupName, metaLeaderboardName, errorReporter, stringMessages,
@@ -87,7 +87,7 @@ public class MetaLeaderboardViewer extends AbstractLeaderboardViewer<MetaLeaderb
multiCompetitorChart.getElement().getStyle().setMarginTop(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) {
leaderboardSettings = lifecycle.getMultiLeaderboardPanelLifecycle().createDefaultSettings();
}
@@ -95,7 +95,7 @@ public class MetaLeaderboardViewer extends AbstractLeaderboardViewer<MetaLeaderb
multiLeaderboardPanel = new MultiLeaderboardProxyPanel(this, componentContext, sailingService,
metaLeaderboardName,
asyncActionsExecutor, timer, false /* isEmbedded */,
preselectedLeaderboardName, preselectedRace, errorReporter, stringMessages,
preselectedLeaderboardName, errorReporter, stringMessages,
perspectiveSettings.isShowRaceDetails(), perspectiveSettings.isAutoExpandLastRaceColumn(),
leaderboardSettings);
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.VerticalPanel;
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.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.LeaderboardUpdateListener;
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.
* @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 final StringMessages stringMessages;
@@ -65,16 +64,16 @@ public class MultiLeaderboardProxyPanel extends AbstractLazyComponent<Leaderboar
private final Set<LeaderboardUpdateListener> leaderboardUpdateListeners;
private final Set<SelectedLeaderboardChangeListener> selectedLeaderboardChangeListeners;
private HashMap<String, LeaderboardSettings> contextStore;
private LeaderboardSettings loadedSettings;
private HashMap<String, MultiRaceLeaderboardSettings> contextStore;
private MultiRaceLeaderboardSettings loadedSettings;
public MultiLeaderboardProxyPanel(Component<?> parent, ComponentContext<?> context,
SailingServiceAsync sailingService, String metaLeaderboardName,
AsyncActionsExecutor asyncActionsExecutor,
Timer timer, boolean isEmbedded, String preselectedLeaderboardName, RaceIdentifier preselectedRace,
Timer timer, boolean isEmbedded, String preselectedLeaderboardName,
ErrorReporter errorReporter, StringMessages stringMessages,
boolean showRaceDetails, boolean autoExpandLastRaceColumn,
LeaderboardSettings settings) {
MultiRaceLeaderboardSettings settings) {
super(parent, context);
loadedSettings = settings;
@@ -146,17 +145,17 @@ public class MultiLeaderboardProxyPanel extends AbstractLazyComponent<Leaderboar
}
@Override
public LeaderboardSettings getSettings() {
public MultiRaceLeaderboardSettings getSettings() {
return selectedLeaderboardPanel.getSettings();
}
@Override
public SettingsDialogComponent<LeaderboardSettings> getSettingsDialogComponent(LeaderboardSettings settings) {
public SettingsDialogComponent<MultiRaceLeaderboardSettings> getSettingsDialogComponent(MultiRaceLeaderboardSettings settings) {
return selectedLeaderboardPanel.getSettingsDialogComponent(settings);
}
@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
contextStore.put(selectedLeaderboardPanel.getLeaderboardName(), newSettings);
selectedLeaderboardPanel.updateSettings(newSettings);
@@ -225,7 +224,7 @@ public class MultiLeaderboardProxyPanel extends AbstractLazyComponent<Leaderboar
selectedLeaderboardFlowPanel = (FlowPanel) leaderboardsTabPanel.getWidget(newTabIndex);
LeaderboardSettings toMerge = contextStore.get(newSelectedLeaderboardName);
MultiRaceLeaderboardSettings toMerge = contextStore.get(newSelectedLeaderboardName);
if (toMerge != null) {
toMerge = mergeContext(loadedSettings, toMerge);
} else {
@@ -235,7 +234,7 @@ public class MultiLeaderboardProxyPanel extends AbstractLazyComponent<Leaderboar
MultiMultiRaceLeaderboardPanel newSelectedLeaderboardPanel = new MultiMultiRaceLeaderboardPanel(this, getComponentContext(),
sailingService,
asyncActionsExecutor, toMerge, isEmbedded,
/* preselectedRace*/ null, new CompetitorSelectionModel(true), timer,
new CompetitorSelectionModel(true), timer,
null, newSelectedLeaderboardName, errorReporter, stringMessages,
showRaceDetails, /* competitorSearchTextBox */ null, /* showSelectionCheckbox */ true, /* raceTimesInfoProvider */null,
false, /* adjustTimerDelay */ true, /* autoApplyTopNFilter */ false,
@@ -256,7 +255,7 @@ public class MultiLeaderboardProxyPanel extends AbstractLazyComponent<Leaderboar
this.selectedLeaderboardName = newSelectedLeaderboardName;
}
private LeaderboardSettings mergeContext(LeaderboardSettings settings, LeaderboardSettings toMerge) {
private MultiRaceLeaderboardSettings mergeContext(MultiRaceLeaderboardSettings settings, MultiRaceLeaderboardSettings toMerge) {
return LeaderboardSettingsFactory.getInstance().mergeLeaderboardSettings(toMerge, settings);
}
@@ -288,7 +287,7 @@ public class MultiLeaderboardProxyPanel extends AbstractLazyComponent<Leaderboar
}
@Override
public void setSelectedLeaderboard(LeaderboardPanel selectedLeaderboard) {
public void setSelectedLeaderboard(MultiRaceLeaderboardPanel selectedLeaderboard) {
if (this.selectedLeaderboardPanel != selectedLeaderboard) {
this.selectedLeaderboardPanel = selectedLeaderboard;
for (SelectedLeaderboardChangeListener listener : selectedLeaderboardChangeListeners) {
@@ -303,6 +302,6 @@ public class MultiLeaderboardProxyPanel extends AbstractLazyComponent<Leaderboar
@Override
public String getId() {
return MultiLeaderboardPanelLifecycle.MID;
return MultipleMultiLeaderboardPanelLifecycle.MID;
}
}
@@ -1,7 +1,6 @@
package com.sap.sailing.gwt.ui.leaderboard;
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
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.RaceTimesInfoProvider;
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 MultiMultiRaceLeaderboardPanel(Component<?> parent, ComponentContext<?> context,
SailingServiceAsync sailingService, AsyncActionsExecutor asyncActionsExecutor, LeaderboardSettings settings,
boolean isEmbedded, RegattaAndRaceIdentifier preSelectedRace,
CompetitorSelectionProvider competitorSelectionProvider, Timer timer, String leaderboardGroupName,
SailingServiceAsync sailingService, AsyncActionsExecutor asyncActionsExecutor, MultiRaceLeaderboardSettings settings,
boolean isEmbedded, CompetitorSelectionProvider competitorSelectionProvider, Timer timer, String leaderboardGroupName,
String leaderboardName, ErrorReporter errorReporter, StringMessages stringMessages,
boolean showRaceDetails, CompetitorFilterPanel competitorSearchTextBox,
boolean showSelectionCheckbox, RaceTimesInfoProvider optionalRaceTimesInfoProvider,
boolean autoExpandLastRaceColumn, boolean adjustTimerDelay, boolean autoApplyTopNFilter,
boolean showCompetitorFilterStatus, boolean enableSyncScroller) {
super(parent, context, sailingService, asyncActionsExecutor, settings, isEmbedded, preSelectedRace,
super(parent, context, sailingService, asyncActionsExecutor, settings, isEmbedded,
competitorSelectionProvider, timer, leaderboardGroupName, leaderboardName, errorReporter,
stringMessages, showRaceDetails, competitorSearchTextBox, showSelectionCheckbox,
optionalRaceTimesInfoProvider, autoExpandLastRaceColumn, adjustTimerDelay, autoApplyTopNFilter,
@@ -1,15 +1,20 @@
package com.sap.sailing.gwt.ui.leaderboard;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
import com.sap.sailing.domain.common.dto.AbstractLeaderboardDTO;
import com.sap.sailing.domain.common.dto.CompetitorDTO;
import com.sap.sailing.domain.common.dto.LeaderboardDTO;
import com.sap.sailing.domain.common.dto.LeaderboardRowDTO;
import com.sap.sailing.domain.common.dto.RaceColumnDTO;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettings;
import com.sap.sailing.gwt.settings.client.leaderboard.MultiRaceLeaderboardSettings;
import com.sap.sailing.gwt.settings.client.leaderboard.MultiRaceLeaderboardSettingsDialogComponent;
import com.sap.sailing.gwt.ui.client.CompetitorSelectionProvider;
import com.sap.sailing.gwt.ui.client.RaceTimesInfoProvider;
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
@@ -20,56 +25,74 @@ import com.sap.sse.common.Util;
import com.sap.sse.common.filter.BinaryOperator;
import com.sap.sse.common.filter.Filter;
import com.sap.sse.common.filter.FilterSet;
import com.sap.sse.common.settings.util.SettingsDefaultValuesUtils;
import com.sap.sse.gwt.client.ErrorReporter;
import com.sap.sse.gwt.client.async.AsyncActionsExecutor;
import com.sap.sse.gwt.client.player.Timer;
import com.sap.sse.gwt.client.shared.components.Component;
import com.sap.sse.gwt.client.shared.components.SettingsDialog;
import com.sap.sse.gwt.client.shared.components.SettingsDialogComponent;
import com.sap.sse.gwt.client.shared.settings.ComponentContext;
public class MultiRaceLeaderboardPanel extends LeaderboardPanel {
public class MultiRaceLeaderboardPanel extends LeaderboardPanel<MultiRaceLeaderboardSettings> {
public MultiRaceLeaderboardPanel(Component<?> parent, ComponentContext<?> context,
SailingServiceAsync sailingService, AsyncActionsExecutor asyncActionsExecutor, LeaderboardSettings settings,
boolean isEmbedded, RegattaAndRaceIdentifier preSelectedRace,
SailingServiceAsync sailingService, AsyncActionsExecutor asyncActionsExecutor, MultiRaceLeaderboardSettings settings,
boolean isEmbedded,
CompetitorSelectionProvider competitorSelectionProvider, String leaderboardGroupName,
String leaderboardName, ErrorReporter errorReporter, StringMessages stringMessages,
boolean showRaceDetails) {
super(parent, context, sailingService, asyncActionsExecutor, settings, isEmbedded, preSelectedRace,
super(parent, context, sailingService, asyncActionsExecutor, settings, isEmbedded,
competitorSelectionProvider, leaderboardGroupName, leaderboardName, errorReporter, stringMessages,
showRaceDetails);
updateSettings(settings);
initialize(settings);
}
public MultiRaceLeaderboardPanel(Component<?> parent, ComponentContext<?> context,
SailingServiceAsync sailingService, AsyncActionsExecutor asyncActionsExecutor, LeaderboardSettings settings,
boolean isEmbedded, RegattaAndRaceIdentifier preSelectedRace,
SailingServiceAsync sailingService, AsyncActionsExecutor asyncActionsExecutor, MultiRaceLeaderboardSettings settings,
boolean isEmbedded,
CompetitorSelectionProvider competitorSelectionProvider, Timer timer, String leaderboardGroupName,
String leaderboardName, ErrorReporter errorReporter, StringMessages stringMessages, boolean showRaceDetails,
CompetitorFilterPanel competitorSearchTextBox, boolean showSelectionCheckbox,
RaceTimesInfoProvider optionalRaceTimesInfoProvider, boolean autoExpandLastRaceColumn,
boolean adjustTimerDelay, boolean autoApplyTopNFilter, boolean showCompetitorFilterStatus,
boolean enableSyncScroller) {
super(parent, context, sailingService, asyncActionsExecutor, settings, isEmbedded, preSelectedRace,
super(parent, context, sailingService, asyncActionsExecutor, settings, isEmbedded,
competitorSelectionProvider, timer, leaderboardGroupName, leaderboardName, errorReporter,
stringMessages, showRaceDetails, competitorSearchTextBox, showSelectionCheckbox,
optionalRaceTimesInfoProvider, autoExpandLastRaceColumn, adjustTimerDelay, autoApplyTopNFilter,
showCompetitorFilterStatus, enableSyncScroller);
updateSettings(settings);
initialize(settings);
}
public MultiRaceLeaderboardPanel(Component<?> parent, ComponentContext<?> context,
SailingServiceAsync sailingService, AsyncActionsExecutor asyncActionsExecutor, LeaderboardSettings settings,
SailingServiceAsync sailingService, AsyncActionsExecutor asyncActionsExecutor, MultiRaceLeaderboardSettings settings,
CompetitorSelectionProvider competitorSelectionProvider, String leaderboardName,
ErrorReporter errorReporter, StringMessages stringMessages, boolean showRaceDetails) {
super(parent, context, sailingService, asyncActionsExecutor, settings, competitorSelectionProvider,
leaderboardName, errorReporter, stringMessages, showRaceDetails);
updateSettings(settings);
initialize(settings);
}
@Override
public LeaderboardSettings getSettings() {
// TODO Auto-generated method stub
return null;
public MultiRaceLeaderboardSettings getSettings() {
Iterable<RaceColumnDTO> selectedRaceColumns = raceColumnSelection
.getSelectedRaceColumnsOrderedAsInLeaderboard(leaderboard);
List<String> namesOfRaceColumnsToShow = new ArrayList<>();
for (RaceColumnDTO raceColumn : selectedRaceColumns) {
namesOfRaceColumnsToShow.add(raceColumn.getName());
}
MultiRaceLeaderboardSettings leaderboardSettings = new MultiRaceLeaderboardSettings(
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
@@ -96,7 +119,7 @@ public class MultiRaceLeaderboardPanel extends LeaderboardPanel {
@Override
protected LeaderboardSettings overrideDefaultsForNamesOfRaceColumns(LeaderboardSettings currentSettings,
LeaderboardDTO result) {
return currentSettings.overrideDefaultsForNamesOfRaceColumns(result.getNamesOfRaceColumns());
return ((MultiRaceLeaderboardSettings) currentSettings).overrideDefaultsForNamesOfRaceColumns(result.getNamesOfRaceColumns());
}
@Override
@@ -115,10 +138,6 @@ public class MultiRaceLeaderboardPanel extends LeaderboardPanel {
}
}
@Override
protected void processAutoExpands(AbstractSortableColumnWithMinMax<?, ?> c, RaceColumn<?> lastRaceColumn) {
}
@Override
protected void updateExpansionStates(boolean expand) {
}
@@ -140,4 +159,24 @@ public class MultiRaceLeaderboardPanel extends LeaderboardPanel {
}
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.ui.FlowPanel;
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.LeaderboardPerspectiveLifecycle;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardPerspectiveOwnSettings;
@@ -37,12 +36,12 @@ public class MultiRaceLeaderboardViewer extends AbstractLeaderboardViewer<Leader
LeaderboardPerspectiveLifecycle lifecycle,
PerspectiveCompositeSettings<LeaderboardPerspectiveOwnSettings> settings,
final SailingServiceAsync sailingService, final AsyncActionsExecutor asyncActionsExecutor,
final Timer timer, final RegattaAndRaceIdentifier preselectedRace,
final Timer timer,
final String leaderboardGroupName, String leaderboardName, final ErrorReporter errorReporter,
final StringMessages stringMessages, DetailType chartDetailType) {
this(parent, componentContext, lifecycle, settings, new CompetitorSelectionModel(/* hasMultiSelection */true),
sailingService, asyncActionsExecutor, timer,
preselectedRace, leaderboardGroupName, leaderboardName, errorReporter,
leaderboardGroupName, leaderboardName, errorReporter,
stringMessages, chartDetailType);
}
@@ -52,15 +51,15 @@ public class MultiRaceLeaderboardViewer extends AbstractLeaderboardViewer<Leader
PerspectiveCompositeSettings<LeaderboardPerspectiveOwnSettings> settings,
CompetitorSelectionModel competitorSelectionModel,
final SailingServiceAsync sailingService, final AsyncActionsExecutor asyncActionsExecutor,
final Timer timer, final RegattaAndRaceIdentifier preselectedRace,
final Timer timer,
final String leaderboardGroupName, String leaderboardName, final ErrorReporter errorReporter,
final StringMessages stringMessages, DetailType chartDetailType) {
super(parent, componentContext, lifecycle, settings, competitorSelectionModel, asyncActionsExecutor, timer,
stringMessages);
// FIXME: Cleanup with java8 using supplier
init(new MultiRaceLeaderboardPanel(this, getComponentContext(), sailingService, asyncActionsExecutor,
settings.findSettingsByComponentId(LeaderboardPanelLifecycle.ID), preselectedRace != null,
preselectedRace, competitorSelectionModel, timer, leaderboardGroupName, leaderboardName, errorReporter,
settings.findSettingsByComponentId(LeaderboardPanelLifecycle.ID), false,
competitorSelectionModel, timer, leaderboardGroupName, leaderboardName, errorReporter,
stringMessages, settings.getPerspectiveOwnSettings().isShowRaceDetails(),
/* competitorSearchTextBox */ null, /* showSelectionCheckbox */ true, /* raceTimesInfoProvider */ null,
settings.getPerspectiveOwnSettings().isAutoExpandLastRaceColumn(), /* adjustTimerDelay */ true,
@@ -103,7 +102,7 @@ public class MultiRaceLeaderboardViewer extends AbstractLeaderboardViewer<Leader
getComponentContext(), sailingService,
asyncActionsExecutor,
settings.findSettingsByComponentId(OverallLeaderboardPanelLifecycle.ID),
preselectedRace != null, preselectedRace, competitorSelectionProvider, timer,
false, competitorSelectionProvider, timer,
leaderboardGroupName, overallLeaderboardName, errorReporter, stringMessages,
false, /* competitorSearchTextBox */ null, /* showSelectionCheckbox */ true, /* raceTimesInfoProvider */null,
false, /* adjustTimerDelay */ true, /* autoApplyTopNFilter */ false,
@@ -1,7 +1,6 @@
package com.sap.sailing.gwt.ui.leaderboard;
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
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.OverallLeaderboardPanelLifecycle;
import com.sap.sailing.gwt.ui.client.CompetitorSelectionProvider;
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 OverallLeaderboardPanel(Component<?> parent, ComponentContext<?> context,
SailingServiceAsync sailingService, AsyncActionsExecutor asyncActionsExecutor, LeaderboardSettings settings,
boolean isEmbedded, RegattaAndRaceIdentifier preSelectedRace,
SailingServiceAsync sailingService, AsyncActionsExecutor asyncActionsExecutor, MultiRaceLeaderboardSettings settings,
boolean isEmbedded,
CompetitorSelectionProvider competitorSelectionProvider, Timer timer, String leaderboardGroupName,
String leaderboardName, ErrorReporter errorReporter, StringMessages stringMessages,
boolean showRaceDetails, CompetitorFilterPanel competitorSearchTextBox,
boolean showSelectionCheckbox, RaceTimesInfoProvider optionalRaceTimesInfoProvider,
boolean autoExpandLastRaceColumn, boolean adjustTimerDelay, boolean autoApplyTopNFilter,
boolean showCompetitorFilterStatus, boolean enableSyncScroller) {
super(parent, context, sailingService, asyncActionsExecutor, settings, isEmbedded, preSelectedRace,
super(parent, context, sailingService, asyncActionsExecutor, settings, isEmbedded,
competitorSelectionProvider, timer, leaderboardGroupName, leaderboardName, errorReporter,
stringMessages, showRaceDetails, competitorSearchTextBox, showSelectionCheckbox,
optionalRaceTimesInfoProvider, autoExpandLastRaceColumn, adjustTimerDelay, autoApplyTopNFilter,
@@ -7,5 +7,5 @@ public interface SelectedLeaderboardChangeProvider {
void removeSelectedLeaderboardChangeListener(SelectedLeaderboardChangeListener listener);
void setSelectedLeaderboard(LeaderboardPanel selectedLeaderboard);
void setSelectedLeaderboard(MultiRaceLeaderboardPanel selectedLeaderboard);
}
@@ -1,7 +1,6 @@
package com.sap.sailing.gwt.ui.leaderboard;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
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.RaceColumnDTO;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettings;
import com.sap.sailing.gwt.settings.client.leaderboard.SingleRaceLeaderboardSettings;
import com.sap.sailing.gwt.settings.client.leaderboard.SingleRaceLeaderboardSettingsDialogComponent;
import com.sap.sailing.gwt.ui.client.CompetitorSelectionProvider;
import com.sap.sailing.gwt.ui.client.RaceTimesInfoProvider;
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
@@ -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.player.Timer;
import com.sap.sse.gwt.client.shared.components.Component;
import com.sap.sse.gwt.client.shared.components.SettingsDialog;
import com.sap.sse.gwt.client.shared.components.SettingsDialogComponent;
import com.sap.sse.gwt.client.shared.settings.ComponentContext;
public class SingleLeaderboardPanel extends LeaderboardPanel {
public class SingleRaceLeaderboardPanel extends LeaderboardPanel<SingleRaceLeaderboardSettings> {
private boolean autoExpandPreSelectedRace;
/**
@@ -41,7 +44,7 @@ public class SingleLeaderboardPanel extends LeaderboardPanel {
*/
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,
RegattaAndRaceIdentifier preSelectedRace, CompetitorSelectionProvider competitorSelectionProvider,
Timer timer, String leaderboardGroupName, String leaderboardName, ErrorReporter errorReporter,
@@ -49,7 +52,7 @@ public class SingleLeaderboardPanel extends LeaderboardPanel {
boolean showSelectionCheckbox, RaceTimesInfoProvider optionalRaceTimesInfoProvider,
boolean autoExpandLastRaceColumn, boolean adjustTimerDelay, boolean autoApplyTopNFilter,
boolean showCompetitorFilterStatus, boolean enableSyncScroller) {
super(parent, context, sailingService, asyncActionsExecutor, settings, isEmbedded, preSelectedRace,
super(parent, context, sailingService, asyncActionsExecutor, settings, isEmbedded,
competitorSelectionProvider, timer, leaderboardGroupName, leaderboardName, errorReporter,
stringMessages, showRaceDetails, competitorSearchTextBox, showSelectionCheckbox,
optionalRaceTimesInfoProvider, autoExpandLastRaceColumn, adjustTimerDelay, autoApplyTopNFilter,
@@ -57,7 +60,7 @@ public class SingleLeaderboardPanel extends LeaderboardPanel {
assert preSelectedRace != null;
this.preSelectedRace = preSelectedRace;
updateSettings(settings);
initialize(settings);
}
@Override
@@ -66,17 +69,17 @@ public class SingleLeaderboardPanel extends LeaderboardPanel {
}
@Override
public LeaderboardSettings getSettings() {
public SingleRaceLeaderboardSettings getSettings() {
Iterable<RaceColumnDTO> selectedRaceColumns = raceColumnSelection
.getSelectedRaceColumnsOrderedAsInLeaderboard(leaderboard);
List<String> namesOfRaceColumnsToShow = new ArrayList<>();
for (RaceColumnDTO raceColumn : selectedRaceColumns) {
namesOfRaceColumnsToShow.add(raceColumn.getName());
}
LeaderboardSettings leaderboardSettings = new LeaderboardSettings(
Collections.unmodifiableList(selectedManeuverDetails), Collections.unmodifiableList(selectedLegDetails),
Collections.unmodifiableList(selectedRaceDetails),
Collections.unmodifiableList(selectedOverallDetailColumns), namesOfRaceColumnsToShow,
SingleRaceLeaderboardSettings leaderboardSettings = new SingleRaceLeaderboardSettings(
selectedManeuverDetails,selectedLegDetails,
selectedRaceDetails,
selectedOverallDetailColumns, namesOfRaceColumnsToShow,
/* namesOfRacesToShow */ null, raceColumnSelection.getNumberOfLastRaceColumnsToShow(),
autoExpandPreSelectedRace, timer.getRefreshInterval(), /* nameOfRaceToSort */ null,
/* sortAscending */ true, /* updateUponPlayStateChange */ true, raceColumnSelection.getType(),
@@ -144,7 +147,7 @@ public class SingleLeaderboardPanel extends LeaderboardPanel {
protected void processAutoExpands(AbstractSortableColumnWithMinMax<?, ?> c, RaceColumn<?> lastRaceColumn) {
// Toggle pre-selected race, if the setting is set and it isn't open yet, or the last race column if
// that was requested
if ((!autoExpandPerformedOnce && isAutoExpandPreSelectedRace() && c instanceof RaceColumn<?>
if ((!autoExpandPerformedOnce && isAutoExpandPreSelectedRace() && c instanceof LeaderboardPanel.RaceColumn
&& ((RaceColumn<?>) c).getRace().hasTrackedRace(preSelectedRace))
|| (isAutoExpandLastRaceColumn() && c == lastRaceColumn)) {
ExpandableSortableColumn<?> expandableSortableColumn = (ExpandableSortableColumn<?>) c;
@@ -153,8 +156,8 @@ public class SingleLeaderboardPanel extends LeaderboardPanel {
autoExpandPerformedOnce = true;
}
}
if (c instanceof RaceColumn && ((RaceColumn<?>) c).getRace().hasTrackedRace(preSelectedRace)) {
RaceColumnDTO raceColumn = ((RaceColumn<?>) c).getRace();
if (c instanceof RaceColumn && ((RaceColumn) c).getRace().hasTrackedRace(preSelectedRace)) {
RaceColumnDTO raceColumn = ((RaceColumn) c).getRace();
informLeaderboardUpdateListenersAboutRaceSelected(preSelectedRace, raceColumn);
}
}
@@ -181,4 +184,26 @@ public class SingleLeaderboardPanel extends LeaderboardPanel {
}
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.RaceColumnDTO;
import com.sap.sailing.domain.common.impl.InvertibleComparatorAdapter;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettings;
import com.sap.sailing.gwt.settings.client.leaderboard.MultiRaceLeaderboardSettings;
import com.sap.sailing.gwt.ui.adminconsole.AdminConsoleTableResources;
import com.sap.sailing.gwt.ui.client.Collator;
import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel;
@@ -99,7 +99,7 @@ public class EditableLeaderboardPanel extends MultiRaceLeaderboardPanel {
@Override
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,
String leaderboardName, String leaderboardGroupName, final ErrorReporter errorReporter,
final StringMessages stringMessages, UserAgentDetails userAgent) {
super(null, null, sailingService, asyncActionsExecutor, new LeaderboardSettings(),
super(null, null, sailingService, asyncActionsExecutor, new MultiRaceLeaderboardSettings(),
new CompetitorSelectionModel(/* hasMultiSelection */true),
leaderboardName, errorReporter, stringMessages, /* showRaceDetails */ true);
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.shared.racemap.RaceCompetitorSet.CompetitorsForRaceDefinedListener;
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.sse.gwt.client.player.Timer;
@@ -53,7 +54,7 @@ public abstract class AbstractRaceBoardMode implements RaceBoardMode, RaceTimesI
private Timer timer;
private RegattaAndRaceIdentifier raceIdentifier;
private RaceTimePanel raceTimePanel;
private LeaderboardPanel leaderboardPanel;
private SingleRaceLeaderboardPanel leaderboardPanel;
private RaceBoardPanel raceBoardPanel;
private Map<RegattaAndRaceIdentifier, RaceTimesInfoDTO> raceTimesInfo;
@@ -91,7 +92,7 @@ public abstract class AbstractRaceBoardMode implements RaceBoardMode, RaceTimesI
return raceTimePanel;
}
protected LeaderboardPanel getLeaderboardPanel() {
protected SingleRaceLeaderboardPanel getLeaderboardPanel() {
return leaderboardPanel;
}
@@ -6,7 +6,8 @@ import java.util.List;
import com.sap.sailing.domain.common.DetailType;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettings;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettingsFactory;
import com.sap.sailing.gwt.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.PlayStates;
import com.sap.sse.security.ui.settings.ComponentContextWithSettingsStorageAndAdditionalSettingsLayers.OnSettingsReloadedCallback;
@@ -46,17 +47,17 @@ public class FullAnalysisMode extends AbstractRaceBoardMode {
}
private void adjustLeaderboardSettings() {
final LeaderboardPanel leaderboardPanel = getLeaderboardPanel();
final SingleRaceLeaderboardPanel leaderboardPanel = getLeaderboardPanel();
final List<DetailType> raceDetailsToShow = new ArrayList<>();
raceDetailsToShow.add(DetailType.DISPLAY_LEGS);
raceDetailsToShow.add(DetailType.RACE_AVERAGE_SPEED_OVER_GROUND_IN_KNOTS);
raceDetailsToShow.add(DetailType.RACE_DISTANCE_TRAVELED);
raceDetailsToShow.add(DetailType.RACE_GAP_TO_LEADER_IN_SECONDS);
final LeaderboardSettings additiveSettings = LeaderboardSettingsFactory.getInstance().createNewSettingsWithCustomRaceDetails(raceDetailsToShow);
((RaceBoardComponentContext) leaderboardPanel.getComponentContext()).addModesPatching(leaderboardPanel, additiveSettings, new OnSettingsReloadedCallback<LeaderboardSettings>() {
final SingleRaceLeaderboardSettings additiveSettings = LeaderboardSettingsFactory.getInstance().createNewSettingsWithCustomRaceDetails(raceDetailsToShow);
((RaceBoardComponentContext) leaderboardPanel.getComponentContext()).addModesPatching(leaderboardPanel, additiveSettings, new OnSettingsReloadedCallback<SingleRaceLeaderboardSettings>() {
@Override
public void onSettingsReloaded(LeaderboardSettings patchedSettings) {
public void onSettingsReloaded(SingleRaceLeaderboardSettings patchedSettings) {
LeaderboardSettings settingsToUse = LeaderboardSettingsFactory.getInstance().createSettingsWithCustomExpandPreselectedRaceState(patchedSettings, true);
leaderboardPanel.updateSettings(settingsToUse);
}
@@ -6,7 +6,8 @@ import java.util.List;
import com.sap.sailing.domain.common.DetailType;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettings;
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettingsFactory;
import com.sap.sailing.gwt.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.impl.MillisecondsTimePoint;
import com.sap.sse.gwt.client.player.Timer.PlayModes;
@@ -28,16 +29,16 @@ public class PlayerMode extends AbstractRaceBoardMode {
private boolean timerAdjusted;
private void adjustLeaderboardSettings() {
final LeaderboardPanel leaderboardPanel = getLeaderboardPanel();
final SingleRaceLeaderboardPanel leaderboardPanel = getLeaderboardPanel();
final List<DetailType> raceDetailsToShow = new ArrayList<>();
raceDetailsToShow.add(DetailType.DISPLAY_LEGS);
raceDetailsToShow.add(DetailType.RACE_CURRENT_SPEED_OVER_GROUND_IN_KNOTS);
raceDetailsToShow.add(DetailType.RACE_GAP_TO_LEADER_IN_SECONDS);
final LeaderboardSettings additiveSettings = LeaderboardSettingsFactory.getInstance().createNewSettingsWithCustomRaceDetails(raceDetailsToShow);
((RaceBoardComponentContext) leaderboardPanel.getComponentContext()).addModesPatching(leaderboardPanel, additiveSettings, new OnSettingsReloadedCallback<LeaderboardSettings>() {
final SingleRaceLeaderboardSettings additiveSettings = LeaderboardSettingsFactory.getInstance().createNewSettingsWithCustomRaceDetails(raceDetailsToShow);
((RaceBoardComponentContext) leaderboardPanel.getComponentContext()).addModesPatching(leaderboardPanel, additiveSettings, new OnSettingsReloadedCallback<SingleRaceLeaderboardSettings>() {
@Override
public void onSettingsReloaded(LeaderboardSettings patchedSettings) {
public void onSettingsReloaded(SingleRaceLeaderboardSettings patchedSettings) {
LeaderboardSettings settingsToUse = LeaderboardSettingsFactory.getInstance().createSettingsWithCustomExpandPreselectedRaceState(patchedSettings, true);
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.RaceMapSettings;
import com.sap.sailing.gwt.ui.leaderboard.CompetitorFilterPanel;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel;
import com.sap.sailing.gwt.ui.leaderboard.SingleLeaderboardPanel;
import com.sap.sailing.gwt.ui.leaderboard.SingleRaceLeaderboardPanel;
import com.sap.sailing.gwt.ui.raceboard.RaceBoardResources.RaceBoardMainCss;
import com.sap.sailing.gwt.ui.shared.RegattaDTO;
import com.sap.sse.common.Util;
@@ -129,7 +128,7 @@ public class RaceBoardPanel
private final RegattaAndRaceIdentifier selectedRaceIdentifier;
private final String leaderboardName;
private final LeaderboardPanel leaderboardPanel;
private final SingleRaceLeaderboardPanel leaderboardPanel;
private WindChart windChart;
private MultiCompetitorRaceChart competitorChart;
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,
String leaderboardGroupName,
CompetitorFilterPanel competitorSearchTextBox) {
LeaderboardPanelLifecycle leaderboardPanelLifecycle = getPerspectiveLifecycle().getLeaderboardPanelLifecycle();
LeaderboardSettings leaderboardSettings = settings
.findSettingsByComponentId(leaderboardPanelLifecycle.getComponentId());
return new SingleLeaderboardPanel(this, getComponentContext(), sailingService, asyncActionsExecutor,
return new SingleRaceLeaderboardPanel(this, getComponentContext(), sailingService, asyncActionsExecutor,
leaderboardSettings,
selectedRaceIdentifier != null, selectedRaceIdentifier,
competitorSelectionProvider, timer, leaderboardGroupName, leaderboardName, errorReporter, stringMessages,
@@ -468,7 +467,7 @@ public class RaceBoardPanel
componentViewer.forceLayout();
}
LeaderboardPanel getLeaderboardPanel() {
SingleRaceLeaderboardPanel getLeaderboardPanel() {
return leaderboardPanel;
}
@@ -19,7 +19,7 @@ public class RaceBoardPerspectiveLifecycle extends AbstractPerspectiveLifecycle<
private final StringMessages stringMessages;
private final RaceMapLifecycle raceMapLifecycle;
private final WindChartLifecycle windChartLifecycle;
private final LeaderboardPanelLifecycle leaderboardPanelLifecycle;
private final SingleRaceLeaderboardPanelLifecycle leaderboardPanelLifecycle;
private final MultiCompetitorRaceChartLifecycle multiCompetitorRaceChartLifecycle;
private final MediaPlayerLifecycle mediaPlayerLifecycle;
private final RaceTimePanelLifecycle raceTimePanelLifecycle;
@@ -37,10 +37,13 @@ public class RaceBoardPerspectiveLifecycle extends AbstractPerspectiveLifecycle<
}
private RaceBoardPerspectiveLifecycle(RegattaAndRaceIdentifier raceIdentifier, AbstractLeaderboardDTO leaderboard, StringMessages stringMessages) {
if(raceIdentifier == null){
throw new IllegalStateException("Started ReaceBoardPerspective without any raceidentifier");
}
this.stringMessages = stringMessages;
raceMapLifecycle = new RaceMapLifecycle(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);
mediaPlayerLifecycle = new MediaPlayerLifecycle(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.RegattaAndRaceIdentifier;
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.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;
@@ -26,7 +27,7 @@ public class SingleRaceLeaderboardPanelLifecycle extends LeaderboardPanelLifecyc
}
@Override
public LeaderboardSettings createDefaultSettings() {
public SingleRaceLeaderboardSettings createDefaultSettings() {
List<String> namesOfRaceColumnsToShow = null;
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.DISPLAY_LEGS);
List<DetailType> overallDetails = new ArrayList<>();
LeaderboardSettings defaultSettings = new LeaderboardSettings();
LeaderboardSettings settings = new LeaderboardSettings(defaultSettings.getManeuverDetailsToShow(), defaultSettings.getLegDetailsToShow(), defaultSettings.getRaceDetailsToShow(), overallDetails, namesOfRaceColumnsToShow, namesOfRacesToShow,
SingleRaceLeaderboardSettings defaultSettings = new SingleRaceLeaderboardSettings();
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(),
/*showCompetitorSailIdColumn*/ true,
/* don't showCompetitorFullNameColumn in case screen is so small that we don't
@@ -54,9 +55,9 @@ public class SingleRaceLeaderboardPanelLifecycle extends LeaderboardPanelLifecyc
}
@Override
public LeaderboardSettings extractDocumentSettings(LeaderboardSettings currentLeaderboardSettings) {
LeaderboardSettings defaultLeaderboardSettings = createDefaultSettings();
LeaderboardSettings contextSpecificLeaderboardSettings = new LeaderboardSettings(
public SingleRaceLeaderboardSettings extractDocumentSettings(SingleRaceLeaderboardSettings currentLeaderboardSettings) {
SingleRaceLeaderboardSettings defaultLeaderboardSettings = createDefaultSettings();
SingleRaceLeaderboardSettings contextSpecificLeaderboardSettings = new SingleRaceLeaderboardSettings(
currentLeaderboardSettings.getManeuverDetailsToShow(), currentLeaderboardSettings.getLegDetailsToShow(),
currentLeaderboardSettings.getRaceDetailsToShow(), currentLeaderboardSettings.getOverallDetailsToShow(),
defaultLeaderboardSettings.getNamesOfRaceColumnsToShow(),
@@ -74,4 +75,32 @@ public class SingleRaceLeaderboardPanelLifecycle extends LeaderboardPanelLifecyc
currentLeaderboardSettings.isShowCompetitorNationality());
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.gwt.settings.client.leaderboard.LeaderboardSettings;
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.MultiCompetitorRaceChart;
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.RaceMapZoomSettings;
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.impl.MillisecondsTimePoint;
import com.sap.sse.common.settings.util.SettingsDefaultValuesUtils;
@@ -178,7 +179,7 @@ public class StartAnalysisMode extends RaceBoardModeWithPerRaceCompetitors {
}
private void adjustLeaderboardSettings() {
final LeaderboardPanel leaderboardPanel = getLeaderboardPanel();
final SingleRaceLeaderboardPanel leaderboardPanel = getLeaderboardPanel();
final List<DetailType> raceDetailsToShow = new ArrayList<>();
raceDetailsToShow.add(DetailType.RACE_SPEED_OVER_GROUND_FIVE_SECONDS_BEFORE_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.START_TACK);
raceDetailsToShow.add(DetailType.RACE_GAP_TO_LEADER_IN_SECONDS);
final LeaderboardSettings additiveSettings = LeaderboardSettingsFactory.getInstance().createNewSettingsWithCustomRaceDetails(raceDetailsToShow);
((RaceBoardComponentContext) leaderboardPanel.getComponentContext()).addModesPatching(leaderboardPanel, additiveSettings, new OnSettingsReloadedCallback<LeaderboardSettings>() {
final SingleRaceLeaderboardSettings additiveSettings = LeaderboardSettingsFactory.getInstance().createNewSettingsWithCustomRaceDetails(raceDetailsToShow);
((RaceBoardComponentContext) leaderboardPanel.getComponentContext()).addModesPatching(leaderboardPanel, additiveSettings, new OnSettingsReloadedCallback<SingleRaceLeaderboardSettings>() {
@Override
public void onSettingsReloaded(LeaderboardSettings patchedSettings) {
public void onSettingsReloaded(SingleRaceLeaderboardSettings patchedSettings) {
LeaderboardSettings settingsToUse = LeaderboardSettingsFactory.getInstance().createSettingsWithCustomExpandPreselectedRaceState(patchedSettings, true);
leaderboardPanel.updateSettings(settingsToUse);
}
@@ -6,11 +6,11 @@ import java.util.List;
import com.sap.sailing.domain.common.DetailType;
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.SingleRaceLeaderboardSettings;
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.leaderboard.LeaderboardPanel;
import com.sap.sailing.gwt.ui.leaderboard.SingleRaceLeaderboardPanel;
import com.sap.sailing.gwt.ui.shared.MarkPassingTimesDTO;
import com.sap.sse.common.Duration;
import com.sap.sse.common.Util;
@@ -41,18 +41,18 @@ public class WinningLanesMode extends RaceBoardModeWithPerRaceCompetitors {
}
private void adjustLeaderboardSettings() {
final LeaderboardPanel leaderboardPanel = getLeaderboardPanel();
final SingleRaceLeaderboardPanel leaderboardPanel = getLeaderboardPanel();
final List<DetailType> raceDetailsToShow = new ArrayList<>();
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_DISTANCE_TRAVELED);
raceDetailsToShow.add(DetailType.RACE_TIME_TRAVELED);
final LeaderboardSettings additiveSettings = LeaderboardSettingsFactory.getInstance().createNewSettingsWithCustomRaceDetails(raceDetailsToShow);
((RaceBoardComponentContext) leaderboardPanel.getComponentContext()).addModesPatching(leaderboardPanel, additiveSettings, new OnSettingsReloadedCallback<LeaderboardSettings>() {
final SingleRaceLeaderboardSettings additiveSettings = LeaderboardSettingsFactory.getInstance().createNewSettingsWithCustomRaceDetails(raceDetailsToShow);
((RaceBoardComponentContext) leaderboardPanel.getComponentContext()).addModesPatching(leaderboardPanel, additiveSettings, new OnSettingsReloadedCallback<SingleRaceLeaderboardSettings>() {
@Override
public void onSettingsReloaded(LeaderboardSettings patchedSettings) {
LeaderboardSettings settingsToUse = LeaderboardSettingsFactory.getInstance().createSettingsWithCustomExpandPreselectedRaceState(patchedSettings, true);
public void onSettingsReloaded(SingleRaceLeaderboardSettings patchedSettings) {
SingleRaceLeaderboardSettings settingsToUse = LeaderboardSettingsFactory.getInstance().createSettingsWithCustomExpandPreselectedRaceState(patchedSettings, true);
leaderboardPanel.updateSettings(settingsToUse);
}