From 63f1d2cbb3ac47a736b52e7d4cb0805077975366 Mon Sep 17 00:00:00 2001 From: fmittag Date: Sat, 17 Mar 2012 17:19:51 +0100 Subject: [PATCH] Finetuning of the new AsynchActionExecutor: - Added the async actions or the charts (WindChart, CompetitorCharts) - Added logic to check the amount of pending calls per action type - Added a central instance of the AsynchActionExecutor to the RaceboardPanel so that all used components of the panel can share one instance --- .../gwt/ui/test/LeaderboardPanelMock.java | 2 +- .../gwt/ui/actions/AsyncActionsExecutor.java | 55 +++++++++++----- .../actions/GetCompetitorsRaceDataAction.java | 62 +++++++++++++++++++ .../gwt/ui/actions/GetWindInfoAction.java | 34 +++++++++- .../adminconsole/AdminConsoleEntryPoint.java | 3 +- .../sailing/gwt/ui/adminconsole/RaceMap.java | 4 +- .../gwt/ui/adminconsole/RaceMapPanel.java | 3 +- .../gwt/ui/adminconsole/WindChart.java | 12 ++-- .../ui/leaderboard/AbstractChartPanel.java | 13 +++- .../gwt/ui/leaderboard/ChartPanel.java | 5 +- .../CompareCompetitorsChartDialog.java | 3 +- .../ui/leaderboard/LeaderboardEntryPoint.java | 3 +- .../gwt/ui/leaderboard/LeaderboardPanel.java | 12 ++-- .../gwt/ui/leaderboard/MultiChartPanel.java | 5 +- .../gwt/ui/leaderboard/TVViewPanel.java | 3 +- .../EditableLeaderboardPanel.java | 5 +- .../leaderboardedit/LeaderboardEditPage.java | 3 +- .../gwt/ui/raceboard/RaceBoardPanel.java | 16 +++-- 18 files changed, 189 insertions(+), 54 deletions(-) create mode 100644 java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/actions/GetCompetitorsRaceDataAction.java diff --git a/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/LeaderboardPanelMock.java b/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/LeaderboardPanelMock.java index 1f6f055d2e2..811aec23db9 100644 --- a/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/LeaderboardPanelMock.java +++ b/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/LeaderboardPanelMock.java @@ -17,7 +17,7 @@ public class LeaderboardPanelMock extends LeaderboardPanel { public LeaderboardPanelMock(SailingServiceAsync sailingService, String leaderboardName, ErrorReporter errorReporter, StringMessages stringConstants) { - super(sailingService, LeaderboardSettingsFactory.getInstance().createNewDefaultSettings( + super(sailingService, null, LeaderboardSettingsFactory.getInstance().createNewDefaultSettings( /* racesToShow */null, /* namesOfRacesToShow */ null, /* autoExpandFirstRace */false), new CompetitorSelectionModel( /* hasMultiSelection */true), leaderboardName, null, errorReporter, stringConstants, null); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/actions/AsyncActionsExecutor.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/actions/AsyncActionsExecutor.java index 4c7fa4f39ac..648dd863f57 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/actions/AsyncActionsExecutor.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/actions/AsyncActionsExecutor.java @@ -1,21 +1,30 @@ package com.sap.sailing.gwt.ui.actions; +import java.util.HashMap; +import java.util.Map; + import com.google.gwt.core.client.GWT; import com.google.gwt.user.client.rpc.AsyncCallback; public class AsyncActionsExecutor { private AsyncAction lastRequestedAction; - private int numPending; + private int numPendingCalls; private final int maxPendingCalls; + private final int maxPendingCallsPerType; + private Map actionsPerType; public AsyncActionsExecutor() { - numPending = 0; - maxPendingCalls = 5; + numPendingCalls = 0; + maxPendingCalls = 6; + maxPendingCallsPerType = 3; lastRequestedAction = null; + actionsPerType = new HashMap(); } public void execute(final AsyncAction action) { - if(numPending >= maxPendingCalls) { + Integer numActionsOfType = actionsPerType.get(action.getName()); + + if(numPendingCalls >= maxPendingCalls || (numActionsOfType != null && numActionsOfType > maxPendingCallsPerType)) { GWT.log("Drop action : " + action.getName()); // don't put the call into the execution queue, but save it as the last one @@ -28,33 +37,47 @@ public class AsyncActionsExecutor { @SuppressWarnings("unchecked") @Override public void onFailure(Throwable caught) { - AsyncCallback callback = (AsyncCallback) action.getCallback(); - callback.onFailure(caught); - numPending--; - finish(); + String actionName = action.getName(); + GWT.log("Execution failure for action of type: " + actionName); + AsyncCallback callback = (AsyncCallback) action.getCallback(); + callback.onFailure(caught); + Integer numActionsPerType = actionsPerType.get(actionName); + if(numActionsPerType != null && numActionsPerType > 0) + actionsPerType.put(actionName, numActionsPerType-1); + numPendingCalls--; + checkForEmptyCallQueue(); } @SuppressWarnings("unchecked") @Override public void onSuccess(Object result) { + String actionName = action.getName(); + GWT.log("Execution success for action of type: " + actionName); AsyncCallback callback = (AsyncCallback) action.getCallback(); callback.onSuccess(result); - numPending--; - finish(); + Integer numActionsPerType = actionsPerType.get(actionName); + if(numActionsPerType != null && numActionsPerType > 0) + actionsPerType.put(actionName, numActionsPerType-1); + numPendingCalls--; + checkForEmptyCallQueue(); } }; action.setWrapperCallback(wrapper); action.execute(); - - numPending++; + + if(numActionsOfType == null) + numActionsOfType = 0; + actionsPerType.put(action.getName(), numActionsOfType+1); + + numPendingCalls++; GWT.log("Execute action: " + action.getName()); - GWT.log("Pending actions counter: " + numPending); + GWT.log("Pending actions counter: " + numPendingCalls); } - private void finish() { - if(numPending == 0 && lastRequestedAction != null) { - execute(lastRequestedAction); + private void checkForEmptyCallQueue() { + if(numPendingCalls == 0 && lastRequestedAction != null) { GWT.log("Set back last action : " + lastRequestedAction.getName()); + execute(lastRequestedAction); } } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/actions/GetCompetitorsRaceDataAction.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/actions/GetCompetitorsRaceDataAction.java new file mode 100644 index 00000000000..c7c40f97031 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/actions/GetCompetitorsRaceDataAction.java @@ -0,0 +1,62 @@ +package com.sap.sailing.gwt.ui.actions; + +import java.util.Date; +import java.util.List; + +import com.google.gwt.user.client.rpc.AsyncCallback; +import com.sap.sailing.domain.common.DetailType; +import com.sap.sailing.domain.common.RaceIdentifier; +import com.sap.sailing.domain.common.impl.Util.Pair; +import com.sap.sailing.gwt.ui.client.SailingServiceAsync; +import com.sap.sailing.gwt.ui.shared.CompetitorDTO; +import com.sap.sailing.gwt.ui.shared.MultiCompetitorRaceDataDTO; + +public class GetCompetitorsRaceDataAction extends DefaultAsyncAction { + private final SailingServiceAsync sailingService; + + private final RaceIdentifier race; + private final List> competitorsQuery; + private final Date toDate; + private final long stepSize; + private final DetailType detailType; + + private MultiCompetitorRaceDataDTO result; + private AsyncCallback callback; + + public GetCompetitorsRaceDataAction(SailingServiceAsync sailingService, RaceIdentifier race, List> competitorsQuery, + Date toDate, long stepSize, DetailType detailType) { + this.sailingService = sailingService; + this.race = race; + this.competitorsQuery = competitorsQuery; + this.toDate = toDate; + this.stepSize = stepSize; + this.detailType = detailType; + } + + @SuppressWarnings("unchecked") + @Override + public void execute() { + sailingService.getCompetitorsRaceData(race, competitorsQuery, toDate, stepSize, detailType, + (AsyncCallback) wrapperCallback); + } + + @Override + public MultiCompetitorRaceDataDTO getResult() { + return result; + } + + @Override + public AsyncCallback getCallback() { + return callback; + } + + @Override + public void setCallback(AsyncCallback callback) { + this.callback = callback; + } + + @Override + public String getName() { + return GetCompetitorsRaceDataAction.class.getName(); + } +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/actions/GetWindInfoAction.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/actions/GetWindInfoAction.java index 388e622f46a..ccf062c15a8 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/actions/GetWindInfoAction.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/actions/GetWindInfoAction.java @@ -12,13 +12,20 @@ public class GetWindInfoAction extends DefaultAsyncAction { private final SailingServiceAsync sailingService; private final RaceIdentifier raceIdentifier; - private final Date from; + private Date from; private long millisecondsStepWidth; private int numberOfFixes; private Collection windSourceTypeNames; private WindInfoForRaceDTO result; + + private long resolutionInMilliseconds; + private Date fromDate; + private Date toDate; + private enum CallVariants { Variant1, Variant2 }; + private final CallVariants callVariant; + private AsyncCallback callback; public GetWindInfoAction(SailingServiceAsync sailingService, RaceIdentifier raceIdentifier, Date from, long millisecondsStepWidth, @@ -29,12 +36,33 @@ public class GetWindInfoAction extends DefaultAsyncAction this.millisecondsStepWidth = millisecondsStepWidth; this.numberOfFixes = numberOfFixes; this.windSourceTypeNames = windSourceTypeNames; + + callVariant = CallVariants.Variant1; } - + + public GetWindInfoAction(SailingServiceAsync sailingService, RaceIdentifier raceIdentifier, + Date fromDate, Date toDate, long resolutionInMilliseconds, Collection windSourceTypeNames) { + this.sailingService = sailingService; + this.raceIdentifier = raceIdentifier; + this.fromDate = fromDate; + this.toDate = toDate; + this.resolutionInMilliseconds = resolutionInMilliseconds; + this.windSourceTypeNames = windSourceTypeNames; + + callVariant = CallVariants.Variant2; + } + @SuppressWarnings("unchecked") @Override public void execute() { - sailingService.getWindInfo(raceIdentifier, from, millisecondsStepWidth, numberOfFixes, windSourceTypeNames, (AsyncCallback) wrapperCallback); + switch (callVariant) { + case Variant1: + sailingService.getWindInfo(raceIdentifier, from, millisecondsStepWidth, numberOfFixes, windSourceTypeNames, (AsyncCallback) wrapperCallback); + break; + case Variant2: + sailingService.getWindInfo(raceIdentifier, fromDate, toDate, resolutionInMilliseconds, windSourceTypeNames, (AsyncCallback) wrapperCallback); + break; + } } @Override diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AdminConsoleEntryPoint.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AdminConsoleEntryPoint.java index 02e3b75daa6..2811f8010e6 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AdminConsoleEntryPoint.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AdminConsoleEntryPoint.java @@ -10,6 +10,7 @@ import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.RootPanel; import com.google.gwt.user.client.ui.TabPanel; import com.sap.sailing.domain.common.DefaultLeaderboardName; +import com.sap.sailing.gwt.ui.actions.AsyncActionsExecutor; import com.sap.sailing.gwt.ui.client.AbstractEntryPoint; import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel; import com.sap.sailing.gwt.ui.client.EventDisplayer; @@ -58,7 +59,7 @@ public class AdminConsoleEntryPoint extends AbstractEntryPoint implements EventR tabPanel.add(raceMapPanel, stringMessages.map(), /* asHTML */ false); LeaderboardSettings defaultLeaderboardSettings = LeaderboardSettingsFactory.getInstance() .createNewDefaultSettings(/* racesToShow */ null, /* namesOfRacesToShow */ null, /* autoExpandFirstRace */false); - final LeaderboardPanel defaultLeaderboardPanel = new LeaderboardPanel(sailingService, + final LeaderboardPanel defaultLeaderboardPanel = new LeaderboardPanel(sailingService, new AsyncActionsExecutor(), defaultLeaderboardSettings, /* preSelectedRace */null, new CompetitorSelectionModel(/* hasMultiSelection */true), DefaultLeaderboardName.DEFAULT_LEADERBOARD_NAME, /* leaderboard group name */null, this, diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceMap.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceMap.java index 40bbc4aa578..05baac2fa20 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceMap.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceMap.java @@ -205,11 +205,12 @@ public class RaceMap extends AbsolutePanel implements TimeListener, CompetitorSe private final AsyncActionsExecutor asyncActionsExecutor; - public RaceMap(SailingServiceAsync sailingService, ErrorReporter errorReporter, Timer timer, + public RaceMap(SailingServiceAsync sailingService, AsyncActionsExecutor asyncActionsExecutor, ErrorReporter errorReporter, Timer timer, CompetitorSelectionProvider competitorSelection, StringMessages stringMessages) { this.setSize("100%", "100%"); this.stringMessages = stringMessages; this.sailingService = sailingService; + this.asyncActionsExecutor = asyncActionsExecutor; this.errorReporter = errorReporter; this.timer = timer; timer.addTimeListener(this); @@ -227,7 +228,6 @@ public class RaceMap extends AbsolutePanel implements TimeListener, CompetitorSe settings = new RaceMapSettings(); lastTimeChangeBeforeInitialization = null; dataInitialized = false; - asyncActionsExecutor = new AsyncActionsExecutor(); initializeData(); windPanel = new CombinedWindPanel(sailingService, asyncActionsExecutor, errorReporter, stringMessages, timer); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceMapPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceMapPanel.java index 82c0d347b50..27d3672aecf 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceMapPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceMapPanel.java @@ -21,6 +21,7 @@ import com.google.gwt.user.client.ui.RequiresResize; 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.ui.actions.AsyncActionsExecutor; import com.sap.sailing.gwt.ui.client.CompetitorSelectionProvider; import com.sap.sailing.gwt.ui.client.ErrorReporter; import com.sap.sailing.gwt.ui.client.EventDisplayer; @@ -71,7 +72,7 @@ public class RaceMapPanel extends FormPanel implements EventDisplayer, TimeListe AbsolutePanel mapPanel = new AbsolutePanel(); mapPanel.setSize("100%", "100%"); grid.setWidget(2, 1, mapPanel); - raceMap = new RaceMap(sailingService, errorReporter, timer, competitorSelectionProvider, stringMessages); + raceMap = new RaceMap(sailingService, new AsyncActionsExecutor(), errorReporter, timer, competitorSelectionProvider, stringMessages); mapPanel.add(raceMap); raceSelectionModel = new RaceSelectionModel(); raceListBox = new RacesListBoxPanel(eventRefresher, raceSelectionModel, stringMessages); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/WindChart.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/WindChart.java index 667dc327908..441a9e0c170 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/WindChart.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/WindChart.java @@ -42,6 +42,7 @@ import com.google.gwt.user.client.ui.Widget; import com.sap.sailing.domain.common.RaceIdentifier; import com.sap.sailing.domain.common.WindSource; import com.sap.sailing.domain.common.WindSourceType; +import com.sap.sailing.gwt.ui.actions.GetWindInfoAction; import com.sap.sailing.gwt.ui.client.ColorMap; import com.sap.sailing.gwt.ui.client.ErrorReporter; import com.sap.sailing.gwt.ui.client.RaceSelectionChangeListener; @@ -462,12 +463,13 @@ public class WindChart extends SimplePanel implements Component() { + null); // retrieve data on all wind sources + + getWindInfoAction.setCallback(new AsyncCallback() { @Override public void onSuccess(WindInfoForRaceDTO result) { if (result != null) { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/AbstractChartPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/AbstractChartPanel.java index f37a462fc73..32fd6dc0e3e 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/AbstractChartPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/AbstractChartPanel.java @@ -40,6 +40,8 @@ import com.sap.sailing.domain.common.DetailType; import com.sap.sailing.domain.common.RaceIdentifier; import com.sap.sailing.domain.common.impl.Util.Pair; import com.sap.sailing.domain.common.impl.Util.Triple; +import com.sap.sailing.gwt.ui.actions.AsyncActionsExecutor; +import com.sap.sailing.gwt.ui.actions.GetCompetitorsRaceDataAction; import com.sap.sailing.gwt.ui.client.CompetitorSelectionChangeListener; import com.sap.sailing.gwt.ui.client.CompetitorSelectionProvider; import com.sap.sailing.gwt.ui.client.DetailTypeFormatter; @@ -75,6 +77,7 @@ implements CompetitorSelectionChangeListener, RaceSelectionChangeListener, TimeL protected static final int LINE_WIDTH = 1; protected MultiCompetitorRaceDataDTO chartData; protected final SailingServiceAsync sailingService; + protected final AsyncActionsExecutor asyncActionsExecutor; protected final ErrorReporter errorReporter; protected Chart chart; private boolean compactChart; @@ -94,7 +97,7 @@ implements CompetitorSelectionChangeListener, RaceSelectionChangeListener, TimeL protected DetailType dataToShow; protected final CompetitorSelectionProvider competitorSelectionProvider; - public AbstractChartPanel(SailingServiceAsync sailingService, + public AbstractChartPanel(SailingServiceAsync sailingService, AsyncActionsExecutor asyncActionsExecutor, CompetitorSelectionProvider competitorSelectionProvider, RaceSelectionProvider raceSelectionProvider, Timer timer, final StringMessages stringMessages, ErrorReporter errorReporter, DetailType dataToShow, boolean compactChart, boolean allowTimeAdjust) { @@ -110,6 +113,7 @@ implements CompetitorSelectionChangeListener, RaceSelectionChangeListener, TimeL chartData = null; this.compactChart = compactChart; this.sailingService = sailingService; + this.asyncActionsExecutor = asyncActionsExecutor; this.raceSelectionProvider = raceSelectionProvider; this.allowTimeAdjust = allowTimeAdjust; raceSelectionProvider.addRaceSelectionChangeListener(this); @@ -271,8 +275,9 @@ implements CompetitorSelectionChangeListener, RaceSelectionChangeListener, TimeL } } - sailingService.getCompetitorsRaceData(getSelectedRace(), dataQuery, toDate, getStepSize(), getDataToShow(), - new AsyncCallback() { + GetCompetitorsRaceDataAction getCompetitorsRaceDataAction = new GetCompetitorsRaceDataAction(sailingService, + getSelectedRace(), dataQuery, toDate, getStepSize(), getDataToShow()); + getCompetitorsRaceDataAction.setCallback(new AsyncCallback() { @Override public void onFailure(Throwable caught) { @@ -296,6 +301,8 @@ implements CompetitorSelectionChangeListener, RaceSelectionChangeListener, TimeL setWidget(chart); } }); + + asyncActionsExecutor.execute(getCompetitorsRaceDataAction); } else { setWidget(noCompetitorsSelectedLabel); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/ChartPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/ChartPanel.java index 27174eb53a2..2e27df2235d 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/ChartPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/ChartPanel.java @@ -1,6 +1,7 @@ package com.sap.sailing.gwt.ui.leaderboard; import com.sap.sailing.domain.common.DetailType; +import com.sap.sailing.gwt.ui.actions.AsyncActionsExecutor; import com.sap.sailing.gwt.ui.client.CompetitorSelectionProvider; import com.sap.sailing.gwt.ui.client.ErrorReporter; import com.sap.sailing.gwt.ui.client.RaceSelectionProvider; @@ -24,10 +25,10 @@ import com.sap.sailing.gwt.ui.shared.components.SettingsDialogComponent; */ public class ChartPanel extends AbstractChartPanel implements Component { - public ChartPanel(SailingServiceAsync sailingService, CompetitorSelectionProvider competitorSelectionProvider, + public ChartPanel(SailingServiceAsync sailingService, AsyncActionsExecutor asyncActionsExecutor, CompetitorSelectionProvider competitorSelectionProvider, RaceSelectionProvider raceSelectionProvider, Timer timer, DetailType dataToShow, StringMessages stringMessages, ErrorReporter errorReporter, boolean compactChart, boolean allowTimeAdjust) { - super(sailingService, competitorSelectionProvider, raceSelectionProvider, timer, stringMessages, errorReporter, + super(sailingService, asyncActionsExecutor, competitorSelectionProvider, raceSelectionProvider, timer, stringMessages, errorReporter, dataToShow, compactChart, allowTimeAdjust); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/CompareCompetitorsChartDialog.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/CompareCompetitorsChartDialog.java index 4a45671e884..0f26c749be5 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/CompareCompetitorsChartDialog.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/CompareCompetitorsChartDialog.java @@ -21,6 +21,7 @@ import com.google.gwt.user.client.ui.Panel; import com.google.gwt.user.client.ui.RadioButton; import com.google.gwt.user.client.ui.Widget; import com.sap.sailing.domain.common.RaceIdentifier; +import com.sap.sailing.gwt.ui.actions.AsyncActionsExecutor; import com.sap.sailing.gwt.ui.client.CompetitorSelectionProvider; import com.sap.sailing.gwt.ui.client.ErrorReporter; import com.sap.sailing.gwt.ui.client.RaceSelectionModel; @@ -53,7 +54,7 @@ public class CompareCompetitorsChartDialog extends DialogBox { raceSelectionProvider = new RaceSelectionModel(); raceSelectionProvider.setAllRaces(races); - multiChartPanel = new MultiChartPanel(sailingService, competitorSelectionProvider, raceSelectionProvider, + multiChartPanel = new MultiChartPanel(sailingService, new AsyncActionsExecutor(), competitorSelectionProvider, raceSelectionProvider, timer, stringConstants, errorReporter, false, false); multiChartPanel.setSize("100%", "100%"); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/LeaderboardEntryPoint.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/LeaderboardEntryPoint.java index 2601cf9a954..785b09f0289 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/LeaderboardEntryPoint.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/LeaderboardEntryPoint.java @@ -12,6 +12,7 @@ import com.google.gwt.user.client.ui.RootLayoutPanel; import com.google.gwt.user.client.ui.RootPanel; import com.google.gwt.user.client.ui.ScrollPanel; import com.sap.sailing.domain.common.impl.Util.Pair; +import com.sap.sailing.gwt.ui.actions.AsyncActionsExecutor; import com.sap.sailing.gwt.ui.client.AbstractEntryPoint; import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel; import com.sap.sailing.gwt.ui.client.LogoAndTitlePanel; @@ -61,7 +62,7 @@ public class LeaderboardEntryPoint extends AbstractEntryPoint { userAgentType, null, timer, logoAndTitlePanel, mainPanel); mainPanel.add(tvViewPanel); } else { - LeaderboardPanel leaderboardPanel = new LeaderboardPanel(sailingService, + LeaderboardPanel leaderboardPanel = new LeaderboardPanel(sailingService, new AsyncActionsExecutor(), LeaderboardSettingsFactory.getInstance().createNewDefaultSettings(null, null, /* autoExpandFirstRace */ false), /* preSelectedRace */ null, new CompetitorSelectionModel(/* hasMultiSelection */ true), new Timer(PlayModes.Replay, /* delayBetweenAutoAdvancesInMilliseconds */3000l), diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/LeaderboardPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/LeaderboardPanel.java index fe151dd6b65..6a7fd32c866 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/LeaderboardPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/LeaderboardPanel.java @@ -846,25 +846,26 @@ public class LeaderboardPanel extends FormPanel implements TimeListener, PlaySta } } - public LeaderboardPanel(SailingServiceAsync sailingService, LeaderboardSettings settings, + public LeaderboardPanel(SailingServiceAsync sailingService, AsyncActionsExecutor asyncActionsExecutor, LeaderboardSettings settings, CompetitorSelectionProvider competitorSelectionProvider, String leaderboardName, String leaderboardGroupName, ErrorReporter errorReporter, final StringMessages stringMessages, final UserAgentTypes userAgentType) { - this(sailingService, settings, /* preSelectedRace */null, competitorSelectionProvider, leaderboardName, + this(sailingService, asyncActionsExecutor, settings, /* preSelectedRace */null, competitorSelectionProvider, leaderboardName, leaderboardGroupName, errorReporter, stringMessages, userAgentType); } - public LeaderboardPanel(SailingServiceAsync sailingService, LeaderboardSettings settings, RaceIdentifier preSelectedRace, + public LeaderboardPanel(SailingServiceAsync sailingService, AsyncActionsExecutor asyncActionsExecutor, LeaderboardSettings settings, RaceIdentifier preSelectedRace, CompetitorSelectionProvider competitorSelectionProvider, String leaderboardName, String leaderboardGroupName, ErrorReporter errorReporter, final StringMessages stringMessages, final UserAgentTypes userAgentType) { - this(sailingService, settings, preSelectedRace, competitorSelectionProvider, new Timer(PlayModes.Replay, /* delayBetweenAutoAdvancesInMilliseconds */3000l), + this(sailingService, asyncActionsExecutor, settings, preSelectedRace, competitorSelectionProvider, new Timer(PlayModes.Replay, /* delayBetweenAutoAdvancesInMilliseconds */3000l), leaderboardName, leaderboardGroupName, errorReporter, stringMessages, userAgentType); } - public LeaderboardPanel(SailingServiceAsync sailingService, LeaderboardSettings settings, RaceIdentifier preSelectedRace, + public LeaderboardPanel(SailingServiceAsync sailingService, AsyncActionsExecutor asyncActionsExecutor, LeaderboardSettings settings, RaceIdentifier preSelectedRace, CompetitorSelectionProvider competitorSelectionProvider, Timer timer, String leaderboardName, String leaderboardGroupName, ErrorReporter errorReporter, final StringMessages stringMessages, final UserAgentTypes userAgentType) { this.sailingService = sailingService; + this.asyncActionsExecutor = asyncActionsExecutor; this.preSelectedRace = preSelectedRace; this.competitorSelectionProvider = competitorSelectionProvider; competitorSelectionProvider.addCompetitorSelectionChangeListener(this); @@ -881,7 +882,6 @@ public class LeaderboardPanel extends FormPanel implements TimeListener, PlaySta selectedRaceDetails.addAll(settings.getRaceDetailsToShow()); setAutoExpandFirstRace(settings.isAutoExpandFirstRace()); - asyncActionsExecutor = new AsyncActionsExecutor(); this.timer = timer; timer.addPlayStateListener(this); timer.addTimeListener(this); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/MultiChartPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/MultiChartPanel.java index 85486eae08a..ad868ea931a 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/MultiChartPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/MultiChartPanel.java @@ -1,6 +1,7 @@ package com.sap.sailing.gwt.ui.leaderboard; import com.sap.sailing.domain.common.DetailType; +import com.sap.sailing.gwt.ui.actions.AsyncActionsExecutor; import com.sap.sailing.gwt.ui.client.CompetitorSelectionProvider; import com.sap.sailing.gwt.ui.client.ErrorReporter; import com.sap.sailing.gwt.ui.client.RaceSelectionProvider; @@ -23,10 +24,10 @@ import com.sap.sailing.gwt.ui.shared.components.SettingsDialogComponent; * */ public class MultiChartPanel extends AbstractChartPanel implements Component { - public MultiChartPanel(SailingServiceAsync sailingService, CompetitorSelectionProvider competitorSelectionProvider, + public MultiChartPanel(SailingServiceAsync sailingService, AsyncActionsExecutor asyncActionsExecutor, CompetitorSelectionProvider competitorSelectionProvider, RaceSelectionProvider raceSelectionProvider, Timer timer, final StringMessages stringMessages, ErrorReporter errorReporter, boolean compactChart, boolean allowTimeAdjust) { - super(sailingService, competitorSelectionProvider, raceSelectionProvider, timer, stringMessages, errorReporter, + super(sailingService, asyncActionsExecutor, competitorSelectionProvider, raceSelectionProvider, timer, stringMessages, errorReporter, /*show initially*/ DetailType.WINDWARD_DISTANCE_TO_OVERALL_LEADER, compactChart, allowTimeAdjust); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/TVViewPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/TVViewPanel.java index 1f0ff88da88..0b92d02aa58 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/TVViewPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/TVViewPanel.java @@ -12,6 +12,7 @@ import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.SimplePanel; import com.sap.sailing.domain.common.RaceIdentifier; +import com.sap.sailing.gwt.ui.actions.AsyncActionsExecutor; import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel; import com.sap.sailing.gwt.ui.client.ErrorReporter; import com.sap.sailing.gwt.ui.client.LogoAndTitlePanel; @@ -84,7 +85,7 @@ public class TVViewPanel extends SimplePanel implements RaceTimesInfoProviderLis CompetitorSelectionModel selectionModel = new CompetitorSelectionModel(/* hasMultiSelection */ true); Timer timer = new Timer(PlayModes.Live, /* delayBetweenAutoAdvancesInMilliseconds */3000l); timer.play(); - LeaderboardPanel leaderboardPanel = new LeaderboardPanel(sailingService, settings, + LeaderboardPanel leaderboardPanel = new LeaderboardPanel(sailingService, new AsyncActionsExecutor(), settings, /* preSelectedRace */null, selectionModel, timer, leaderboardName, null, errorReporter, stringMessages, userAgentType) { @Override diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboardedit/EditableLeaderboardPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboardedit/EditableLeaderboardPanel.java index 65da55a3544..af669b94555 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboardedit/EditableLeaderboardPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboardedit/EditableLeaderboardPanel.java @@ -14,6 +14,7 @@ import com.google.gwt.cell.client.SelectionCell; import com.google.gwt.safehtml.shared.SafeHtmlBuilder; import com.google.gwt.user.client.rpc.AsyncCallback; import com.sap.sailing.domain.common.impl.Util.Pair; +import com.sap.sailing.gwt.ui.actions.AsyncActionsExecutor; import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel; import com.sap.sailing.gwt.ui.client.ErrorReporter; import com.sap.sailing.gwt.ui.client.SailingServiceAsync; @@ -250,9 +251,9 @@ public class EditableLeaderboardPanel extends LeaderboardPanel { } } - public EditableLeaderboardPanel(SailingServiceAsync sailingService, String leaderboardName, String leaderboardGroupName, + public EditableLeaderboardPanel(SailingServiceAsync sailingService, AsyncActionsExecutor asyncActionsExecutor, String leaderboardName, String leaderboardGroupName, ErrorReporter errorReporter, StringMessages stringConstants, UserAgentTypes userAgentType) { - super(sailingService, LeaderboardSettingsFactory.getInstance().createNewDefaultSettings( + super(sailingService, asyncActionsExecutor, LeaderboardSettingsFactory.getInstance().createNewDefaultSettings( /* racesToShow */ null, /* namesOfRacesToShow */ null, /* autoExpandFirstRace */false), new CompetitorSelectionModel(/* hasMultiSelection */true), leaderboardName, leaderboardGroupName, errorReporter, stringConstants, userAgentType); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboardedit/LeaderboardEditPage.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboardedit/LeaderboardEditPage.java index be60acc7f50..c71268e3640 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboardedit/LeaderboardEditPage.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboardedit/LeaderboardEditPage.java @@ -6,6 +6,7 @@ import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.RootPanel; +import com.sap.sailing.gwt.ui.actions.AsyncActionsExecutor; import com.sap.sailing.gwt.ui.client.AbstractEntryPoint; import com.sap.sailing.gwt.ui.client.LogoAndTitlePanel; @@ -20,7 +21,7 @@ public class LeaderboardEditPage extends AbstractEntryPoint { if (leaderboardNames.contains(leaderboardName)) { LogoAndTitlePanel logoAndTitlePanel = new LogoAndTitlePanel("", stringMessages); logoAndTitlePanel.addStyleName("LogoAndTitlePanel"); - EditableLeaderboardPanel leaderboardPanel = new EditableLeaderboardPanel(sailingService, leaderboardName, null, + EditableLeaderboardPanel leaderboardPanel = new EditableLeaderboardPanel(sailingService, new AsyncActionsExecutor(), leaderboardName, null, LeaderboardEditPage.this, stringMessages, userAgentType); RootPanel.get().add(logoAndTitlePanel); RootPanel.get().add(leaderboardPanel); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardPanel.java index bfd021e96e8..3d18ee0d933 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardPanel.java @@ -22,6 +22,7 @@ import com.google.gwt.user.client.ui.ToggleButton; import com.google.gwt.user.client.ui.Widget; import com.sap.sailing.domain.common.RaceIdentifier; import com.sap.sailing.domain.common.WindSourceType; +import com.sap.sailing.gwt.ui.actions.AsyncActionsExecutor; import com.sap.sailing.gwt.ui.adminconsole.RaceMap; import com.sap.sailing.gwt.ui.adminconsole.RaceMapSettings; import com.sap.sailing.gwt.ui.adminconsole.WindChart; @@ -111,7 +112,9 @@ public class RaceBoardPanel extends FormPanel implements EventDisplayer, RaceSel * The competitor chart viewer in CASCADE view mode. null if in ONESCREEN view mode */ private CollapsableComponentViewer competitorChartViewer = null; - + + private final AsyncActionsExecutor asyncActionsExecutor; + public RaceBoardPanel(SailingServiceAsync sailingService, UserDTO theUser, Timer timer, RaceSelectionProvider theRaceSelectionProvider, String leaderboardName, String leaderboardGroupName, ErrorReporter errorReporter, final StringMessages stringMessages, UserAgentTypes userAgentType, @@ -127,6 +130,7 @@ public class RaceBoardPanel extends FormPanel implements EventDisplayer, RaceSel this.errorReporter = errorReporter; this.userAgentType = userAgentType; this.viewMode = viewMode; + asyncActionsExecutor = new AsyncActionsExecutor(); FlowPanel mainPanel = new FlowPanel(); mainPanel.setSize("100%", "100%"); @@ -162,12 +166,12 @@ public class RaceBoardPanel extends FormPanel implements EventDisplayer, RaceSel // create the default leaderboard and select the right race leaderboardPanel = createLeaderboardPanel(leaderboardName, leaderboardGroupName); - RaceMap raceMap = new RaceMap(sailingService, errorReporter, timer, competitorSelectionModel, stringMessages); + RaceMap raceMap = new RaceMap(sailingService, asyncActionsExecutor, errorReporter, timer, competitorSelectionModel, stringMessages); raceMap.onRaceSelectionChange(Collections.singletonList(selectedRaceIdentifier)); List> components = new ArrayList>(); - competitorChart = new MultiChartPanel(sailingService, competitorSelectionModel, raceSelectionProvider, + competitorChart = new MultiChartPanel(sailingService, asyncActionsExecutor, competitorSelectionModel, raceSelectionProvider, timer, stringMessages, errorReporter, true, true); competitorChart.onRaceSelectionChange(raceSelectionProvider.getSelectedRaces()); components.add(competitorChart); @@ -263,7 +267,7 @@ public class RaceBoardPanel extends FormPanel implements EventDisplayer, RaceSel // create the race map if(showMap) { - RaceMap raceMap = new RaceMap(sailingService, errorReporter, timer, competitorSelectionModel, stringMessages); + RaceMap raceMap = new RaceMap(sailingService, asyncActionsExecutor, errorReporter, timer, competitorSelectionModel, stringMessages); CollapsableComponentViewer raceMapViewer = new CollapsableComponentViewer( raceMap, "auto", "500px", stringMessages); @@ -283,7 +287,7 @@ public class RaceBoardPanel extends FormPanel implements EventDisplayer, RaceSel // CollapsableComponentViewer chartViewer = new CollapsableComponentViewer( // competitorCharts, "auto", "400px", stringMessages); - competitorChart = new MultiChartPanel(sailingService, competitorSelectionModel, raceSelectionProvider, + competitorChart = new MultiChartPanel(sailingService, asyncActionsExecutor, competitorSelectionModel, raceSelectionProvider, timer, stringMessages, errorReporter, false, true); competitorChartViewer = new CollapsableComponentViewer( competitorChart, "auto", "400px", stringMessages); @@ -303,7 +307,7 @@ public class RaceBoardPanel extends FormPanel implements EventDisplayer, RaceSel .createNewSettingsForPlayMode(timer.getPlayMode(), /* nameOfRaceToSort */ selectedRaceIdentifier.getRaceName(), /* nameOfRaceColumnToShow */null, /* nameOfRaceToShow */selectedRaceIdentifier.getRaceName()); - return new LeaderboardPanel(sailingService, leaderBoardSettings, selectedRaceIdentifier, + return new LeaderboardPanel(sailingService, asyncActionsExecutor, leaderBoardSettings, selectedRaceIdentifier, competitorSelectionModel, timer, leaderboardName, leaderboardGroupName, errorReporter, stringMessages, userAgentType); }