From 3f5fe1a0fae69e55efd560ec2b50954a65bf9702 Mon Sep 17 00:00:00 2001 From: Benjamin Barth Date: Mon, 18 Jan 2021 13:53:39 +0100 Subject: [PATCH] Enabled fullscreen viewer for progression tab of a regatta or series --- .../AbstractLeaderboardFullscreenViewer.java | 9 --- .../competitorcharts/OldCompetitorCharts.java | 9 +-- ...petitorChartsDelegateFullscreenViewer.java | 63 +++++++++++-------- .../old/leaderboard/OldLeaderboard.java | 6 +- .../RegattaCompetitorAnalyticsTabView.java | 3 +- ...EventSeriesCompetitorAnalyticsTabView.java | 43 +++++++------ .../resources/SailingAnalyticsNotes.html | 4 ++ .../gwt/home/shared/ExperimentalFeatures.java | 4 -- .../fullscreen/FullscreenContainer.java | 8 +++ .../AbstractCompetitorLeaderboardChart.java | 16 +++++ 10 files changed, 90 insertions(+), 75 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/old/AbstractLeaderboardFullscreenViewer.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/old/AbstractLeaderboardFullscreenViewer.java index 546cb4029fa..437152f9994 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/old/AbstractLeaderboardFullscreenViewer.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/old/AbstractLeaderboardFullscreenViewer.java @@ -3,7 +3,6 @@ package com.sap.sailing.gwt.home.desktop.partials.old; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.Style.Unit; -import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.Widget; @@ -56,14 +55,6 @@ public abstract class AbstractLeaderboardFullscreenViewer extends FullscreenCont leaderboardPanel.removeAttribute("tabIndex"); } - protected Widget createPanel(Widget... contentWidgets) { - FlowPanel panel = new FlowPanel(); - for (Widget widget : contentWidgets) { - panel.add(widget); - } - return panel; - } - @Override public void setLeaderboardPanel(Widget leaderboardPanel) { showContent(leaderboardPanel); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/old/competitorcharts/OldCompetitorCharts.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/old/competitorcharts/OldCompetitorCharts.java index f703a499b2d..b56a51851ca 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/old/competitorcharts/OldCompetitorCharts.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/old/competitorcharts/OldCompetitorCharts.java @@ -41,14 +41,10 @@ public class OldCompetitorCharts extends Composite { @UiField DivElement competitorSelectionStateUi; private final List availableDetailsTypes; - private MultiCompetitorLeaderboardChart multiCompetitorChart; private final CompetitorChartsDelegate delegate; + private MultiCompetitorLeaderboardChart multiCompetitorChart; - public OldCompetitorCharts() { - this(null); - } - - public OldCompetitorCharts(CompetitorChartsDelegate delegate) { + public OldCompetitorCharts(final CompetitorChartsDelegate delegate) { this.availableDetailsTypes = new ArrayList(); this.multiCompetitorChart = null; EventRegattaLeaderboardResources.INSTANCE.css().ensureInjected(); @@ -78,7 +74,6 @@ public class OldCompetitorCharts extends Composite { public void onChange(ChangeEvent event) { synchronizeChartTypeSelection(delegate.getChartTypeSelectionControl(), chartTypeSelectionListBox); OldCompetitorCharts.this.updateChartType(); - multiCompetitorChart.forceMaximumChartSize(); } }); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/old/competitorcharts/OldCompetitorChartsDelegateFullscreenViewer.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/old/competitorcharts/OldCompetitorChartsDelegateFullscreenViewer.java index 5df9e019faf..fc9a0adefbd 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/old/competitorcharts/OldCompetitorChartsDelegateFullscreenViewer.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/old/competitorcharts/OldCompetitorChartsDelegateFullscreenViewer.java @@ -1,11 +1,13 @@ package com.sap.sailing.gwt.home.desktop.partials.old.competitorcharts; -import com.google.gwt.dom.client.Style.Display; +import java.util.Optional; + +import com.google.gwt.dom.client.Style.FontWeight; import com.google.gwt.dom.client.Style.Unit; -import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.ListBox; import com.google.gwt.user.client.ui.Widget; +import com.google.web.bindery.event.shared.HandlerRegistration; import com.sap.sailing.gwt.home.shared.partials.fullscreen.FullscreenContainer; import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sailing.gwt.ui.client.shared.charts.MultiCompetitorLeaderboardChart; @@ -13,23 +15,34 @@ import com.sap.sse.common.Color; public class OldCompetitorChartsDelegateFullscreenViewer extends FullscreenContainer implements CompetitorChartsDelegate { - + private final ListBox chartTypeSelection = new ListBox(); + private HandlerRegistration redrawCallback; public OldCompetitorChartsDelegateFullscreenViewer() { showLogo(); showBorder(); + setHeaderWidget(createHeaderPanel()); addToolbarInfo(createLabeledChartTypeSelectionControl()); } - + @Override protected void onShow() { - getContentWidget().forceMaximumChartSize(); - getContentWidget().onResize(); + final Runnable resizeCallback = () -> { + getContentWidget().forceMaximumChartSize(); + getContentWidget().onResize(); + }; + this.redrawCallback = getContentWidget().addChartDataUpdatedHandler(resizeCallback); + resizeCallback.run(); } - + @Override - public void setCompetitorChart(MultiCompetitorLeaderboardChart competitorChart) { + protected void onClose() { + Optional.ofNullable(redrawCallback).ifPresent(HandlerRegistration::removeHandler); + } + + @Override + public void setCompetitorChart(final MultiCompetitorLeaderboardChart competitorChart) { showContent(competitorChart); } @@ -37,27 +50,25 @@ public class OldCompetitorChartsDelegateFullscreenViewer extends FullscreenConta public ListBox getChartTypeSelectionControl() { return chartTypeSelection; } - + + private Widget createHeaderPanel() { + final Widget heading = getBoldLabel(StringMessages.INSTANCE.competitorsAnalytics()); + heading.getElement().getStyle().setFontSize(18, Unit.PX); + heading.getElement().getStyle().setMarginTop(-.2, Unit.EM); + return createPanel(heading, getBoldLabel(StringMessages.INSTANCE.chartSelectionHint())); + } + private Widget createLabeledChartTypeSelectionControl() { - FlowPanel panel = getWidgetWithMarginTop(new FlowPanel(), -30, Unit.PX); - panel.add(getWidgetWitDisplay(new Label(StringMessages.INSTANCE.chooseChartType() + " "), Display.INLINE)); - panel.add(getWidgetWithColor(chartTypeSelection, Color.BLACK)); + final Widget panel = createPanel(chartTypeSelection); + panel.getElement().getStyle().setLineHeight(32, Unit.PX); + chartTypeSelection.getElement().getStyle().setColor(Color.BLACK.getAsHtml()); return panel; } - - private T getWidgetWithMarginTop(T widget, double value, Unit unit) { - widget.getElement().getStyle().setMarginTop(value, unit); - return widget; - } - - private T getWidgetWithColor(T widget, Color color) { - widget.getElement().getStyle().setColor(color.getAsHtml()); - return widget; - } - - private T getWidgetWitDisplay(T widget, Display display) { - widget.getElement().getStyle().setDisplay(display); - return widget; + + private Widget getBoldLabel(final String text) { + final Label label = new Label(text); + label.getElement().getStyle().setFontWeight(FontWeight.BOLD); + return label; } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/old/leaderboard/OldLeaderboard.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/old/leaderboard/OldLeaderboard.java index e88a14578e0..80456e56c3d 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/old/leaderboard/OldLeaderboard.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/old/leaderboard/OldLeaderboard.java @@ -59,13 +59,9 @@ public class OldLeaderboard extends Composite implements BusyStateChangeListener @UiField BusyIndicator busyIndicator; @UiField EventRegattaLeaderboardResources local_res; + private final OldLeaderboardDelegate delegate; private MultiRaceLeaderboardPanel leaderboardPanel; private Timer autoRefreshTimer; - private final OldLeaderboardDelegate delegate; - - public OldLeaderboard() { - this(null); - } public OldLeaderboard(final OldLeaderboardDelegate delegate) { this.leaderboardPanel = null; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/event/regatta/analyticstab/RegattaCompetitorAnalyticsTabView.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/event/regatta/analyticstab/RegattaCompetitorAnalyticsTabView.java index 54b514a9f7c..24e78ca2fca 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/event/regatta/analyticstab/RegattaCompetitorAnalyticsTabView.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/event/regatta/analyticstab/RegattaCompetitorAnalyticsTabView.java @@ -25,7 +25,6 @@ import com.sap.sailing.gwt.home.desktop.places.event.regatta.EventRegattaView; import com.sap.sailing.gwt.home.desktop.places.event.regatta.EventRegattaView.Presenter; import com.sap.sailing.gwt.home.desktop.places.event.regatta.RegattaAnalyticsDataManager; import com.sap.sailing.gwt.home.desktop.places.event.regatta.SharedLeaderboardRegattaTabView; -import com.sap.sailing.gwt.home.shared.ExperimentalFeatures; import com.sap.sailing.gwt.home.shared.partials.placeholder.InfoPlaceholder; import com.sap.sailing.gwt.ui.client.CompetitorSelectionChangeListener; import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel; @@ -54,7 +53,7 @@ public class RegattaCompetitorAnalyticsTabView extends SharedLeaderboardRegattaT @UiField(provided = true) protected OldCompetitorCharts competitorCharts = new OldCompetitorCharts( - ExperimentalFeatures.SHOW_COMPETITOR_ANALYTICS_FULLSCREEN_VIEWER ? new OldCompetitorChartsDelegateFullscreenViewer() : null); + new OldCompetitorChartsDelegateFullscreenViewer()); @Override public Class getPlaceClassForActivation() { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/fakeseries/analyticstab/EventSeriesCompetitorAnalyticsTabView.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/fakeseries/analyticstab/EventSeriesCompetitorAnalyticsTabView.java index e838a90f357..a1e10f0dd81 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/fakeseries/analyticstab/EventSeriesCompetitorAnalyticsTabView.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/fakeseries/analyticstab/EventSeriesCompetitorAnalyticsTabView.java @@ -23,7 +23,6 @@ import com.sap.sailing.gwt.home.desktop.partials.old.competitorcharts.OldCompeti 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.home.shared.ExperimentalFeatures; import com.sap.sailing.gwt.ui.client.CompetitorSelectionChangeListener; import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel; import com.sap.sse.common.Util; @@ -40,9 +39,9 @@ public class EventSeriesCompetitorAnalyticsTabView extends SharedLeaderboardEven @UiField(provided = true) protected OldCompetitorCharts competitorCharts = new OldCompetitorCharts( - ExperimentalFeatures.SHOW_COMPETITOR_ANALYTICS_FULLSCREEN_VIEWER ? new OldCompetitorChartsDelegateFullscreenViewer() : null); + new OldCompetitorChartsDelegateFullscreenViewer()); - private final int MAX_COMPETITORS_IN_CHART = 30; + private final int MAX_COMPETITORS_IN_CHART = 30; public EventSeriesCompetitorAnalyticsTabView() { super(); @@ -52,23 +51,23 @@ public class EventSeriesCompetitorAnalyticsTabView extends SharedLeaderboardEven public Class getPlaceClassForActivation() { return EventSeriesCompetitorAnalyticsPlace.class; } - + @Override public TabView.State getState() { return currentPresenter.getSeriesDTO().isHasAnalytics() ? TabView.State.VISIBLE : TabView.State.INVISIBLE; } @Override - public void start(EventSeriesCompetitorAnalyticsPlace myPlace, AcceptsOneWidget contentArea) { + public void start(final EventSeriesCompetitorAnalyticsPlace myPlace, final AcceptsOneWidget contentArea) { contentArea.setWidget(currentPresenter.getErrorAndBusyClientFactory().createBusyView()); - String leaderboardName = currentPresenter.getSeriesDTO().getLeaderboardId(); + final String leaderboardName = currentPresenter.getSeriesDTO().getLeaderboardId(); if (leaderboardName != null && !leaderboardName.isEmpty()) { - EventSeriesAnalyticsDataManager eventSeriesAnalyticsManager = currentPresenter.getCtx().getAnalyticsManager(); + final EventSeriesAnalyticsDataManager eventSeriesAnalyticsManager = currentPresenter.getCtx().getAnalyticsManager(); final Runnable callback = new Runnable() { @Override public void run() { initWidget(ourUiBinder.createAndBindUi(EventSeriesCompetitorAnalyticsTabView.this)); - DetailType initialDetailType = DetailType.OVERALL_RANK; + final DetailType initialDetailType = DetailType.OVERALL_RANK; if (eventSeriesAnalyticsManager.getMultiCompetitorChart() == null) { eventSeriesAnalyticsManager.createMultiCompetitorChart(null, null, leaderboardName, initialDetailType); } @@ -82,13 +81,13 @@ public class EventSeriesCompetitorAnalyticsTabView extends SharedLeaderboardEven null, new AsyncCallback>() { @Override - public void onSuccess(Iterable result) { + public void onSuccess(final Iterable result) { createSharedLeaderboardPanel(leaderboardName, eventSeriesAnalyticsManager, currentPresenter.getUserService(), null, panel -> callback.run(), result); } @Override - public void onFailure(Throwable caught) { + public void onFailure(final Throwable caught) { showMessageLabelAndGoToHome("Could not load detailType list", contentArea); } }); @@ -99,7 +98,7 @@ public class EventSeriesCompetitorAnalyticsTabView extends SharedLeaderboardEven showMessageLabelAndGoToHome("No leaderboard specified, cannot proceed to leaderboardpage", contentArea); } } - + private void showMessageLabelAndGoToHome(final String message, final AcceptsOneWidget contentArea) { contentArea.setWidget(new Label(message)); new Timer() { @@ -111,7 +110,7 @@ public class EventSeriesCompetitorAnalyticsTabView extends SharedLeaderboardEven } private List getAvailableDetailsTypes() { - List availableDetailsTypes = new ArrayList(); + final List availableDetailsTypes = new ArrayList<>(); availableDetailsTypes.add(DetailType.OVERALL_RANK); availableDetailsTypes.add(DetailType.REGATTA_NET_POINTS_SUM); return availableDetailsTypes; @@ -127,27 +126,27 @@ public class EventSeriesCompetitorAnalyticsTabView extends SharedLeaderboardEven } @Override - public void setPresenter(SeriesView.Presenter currentPresenter) { + public void setPresenter(final SeriesView.Presenter currentPresenter) { this.currentPresenter = currentPresenter; } @Override - public void updatedLeaderboard(LeaderboardDTO leaderboard) { + public void updatedLeaderboard(final LeaderboardDTO leaderboard) { // adjust the competitor selection for the chart in case the leaderboard changed updateCompetitorSelection(); } private void updateCompetitorSelection() { - EventSeriesAnalyticsDataManager eventSeriesAnalyticsManager = currentPresenter.getCtx().getAnalyticsManager(); - CompetitorSelectionModel competitorSelectionProvider = eventSeriesAnalyticsManager.getCompetitorSelectionProvider(); + final EventSeriesAnalyticsDataManager eventSeriesAnalyticsManager = currentPresenter.getCtx().getAnalyticsManager(); + final CompetitorSelectionModel competitorSelectionProvider = eventSeriesAnalyticsManager.getCompetitorSelectionProvider(); // preselect the top N competitors in case there was no selection before and there too many competitors for a chart - int competitorsCount = Util.size(competitorSelectionProvider.getAllCompetitors()); - int selectedCompetitorsCount = Util.size(competitorSelectionProvider.getSelectedCompetitors()); - + final int competitorsCount = Util.size(competitorSelectionProvider.getAllCompetitors()); + final int selectedCompetitorsCount = Util.size(competitorSelectionProvider.getSelectedCompetitors()); + if(selectedCompetitorsCount == 0 && competitorsCount > MAX_COMPETITORS_IN_CHART) { - List selectedCompetitors = new ArrayList<>(); - Iterator allCompetitorsIt = competitorSelectionProvider.getAllCompetitors().iterator(); + final List selectedCompetitors = new ArrayList<>(); + final Iterator allCompetitorsIt = competitorSelectionProvider.getAllCompetitors().iterator(); int counter = 0; while(counter < MAX_COMPETITORS_IN_CHART) { selectedCompetitors.add(allCompetitorsIt.next()); @@ -158,6 +157,6 @@ public class EventSeriesCompetitorAnalyticsTabView extends SharedLeaderboardEven } @Override - public void currentRaceSelected(RaceIdentifier raceIdentifier, RaceColumnDTO raceColumn) { + public void currentRaceSelected(final RaceIdentifier raceIdentifier, final RaceColumnDTO raceColumn) { } } \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/whatsnew/resources/SailingAnalyticsNotes.html b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/whatsnew/resources/SailingAnalyticsNotes.html index b5d500246c3..d8fac38501b 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/whatsnew/resources/SailingAnalyticsNotes.html +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/whatsnew/resources/SailingAnalyticsNotes.html @@ -4,6 +4,10 @@

What's New - SAP Sailing Analytics

+
January 2021
+
    +
  • The charts within the progression tab of a regatta or series now support viewing in fullscreen mode.
  • +
October 2020
  • An SAP Qualtrics survey is now part of the /gwt/Home.html page. It presents itself after 60s as diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/ExperimentalFeatures.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/ExperimentalFeatures.java index a80eb26ae3f..a51b1d4121f 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/ExperimentalFeatures.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/ExperimentalFeatures.java @@ -5,10 +5,6 @@ package com.sap.sailing.gwt.home.shared; */ public interface ExperimentalFeatures { - /** - * Provide button to show the competitor analytics in fullscreen view (work in progress) - */ - public static final boolean SHOW_COMPETITOR_ANALYTICS_FULLSCREEN_VIEWER = false; /** * Provide buttons for user management login via social services like facebook or google. */ diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/partials/fullscreen/FullscreenContainer.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/partials/fullscreen/FullscreenContainer.java index fe66b99d190..b84e500713c 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/partials/fullscreen/FullscreenContainer.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/partials/fullscreen/FullscreenContainer.java @@ -1,5 +1,7 @@ package com.sap.sailing.gwt.home.shared.partials.fullscreen; +import java.util.stream.Stream; + import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.AnchorElement; import com.google.gwt.dom.client.Style.Display; @@ -96,6 +98,12 @@ public class FullscreenContainer { contentUi.addStyleName(style.contentBorder()); } + protected Widget createPanel(final Widget... contentWidgets) { + final FlowPanel panel = new FlowPanel(); + Stream.of(contentWidgets).forEach(panel::add); + return panel; + } + @UiHandler("closeActionUi") void onCloseActionClicked(ClickEvent event) { popup.hide(); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/AbstractCompetitorLeaderboardChart.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/AbstractCompetitorLeaderboardChart.java index d5340e2eeba..de5fb46ae3c 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/AbstractCompetitorLeaderboardChart.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/AbstractCompetitorLeaderboardChart.java @@ -31,6 +31,7 @@ import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.RequiresResize; import com.google.gwt.user.client.ui.Widget; +import com.google.web.bindery.event.shared.HandlerRegistration; import com.sap.sailing.domain.common.DetailType; import com.sap.sailing.domain.common.dto.CompetitorDTO; import com.sap.sailing.gwt.ui.actions.GetLeaderboardDataEntriesAction; @@ -75,6 +76,8 @@ public abstract class AbstractCompetitorLeaderboardChart raceColumnNamesWithData; protected final String leaderboardName; protected final StringMessages stringMessages; + + private final List chartDataUpdateCallbacks = new ArrayList<>(); public AbstractCompetitorLeaderboardChart(Component parent, ComponentContext context, SailingServiceAsync sailingService, @@ -106,6 +109,18 @@ public abstract class AbstractCompetitorLeaderboardChart this.chartDataUpdateCallbacks.remove(callback); + } + protected boolean isCompetitorVisible(CompetitorDTO competitor) { return Util.isEmpty(competitorSelectionProvider.getSelectedCompetitors()) || competitorSelectionProvider.isSelected(competitor); @@ -257,6 +272,7 @@ public abstract class AbstractCompetitorLeaderboardChart