mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-26 23:46:36 +00:00
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
This commit is contained in:
+1
-1
@@ -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);
|
||||
}
|
||||
|
||||
+36
-13
@@ -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<String, Integer> actionsPerType;
|
||||
|
||||
public AsyncActionsExecutor() {
|
||||
numPending = 0;
|
||||
maxPendingCalls = 5;
|
||||
numPendingCalls = 0;
|
||||
maxPendingCalls = 6;
|
||||
maxPendingCallsPerType = 3;
|
||||
lastRequestedAction = null;
|
||||
actionsPerType = new HashMap<String, Integer>();
|
||||
}
|
||||
|
||||
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) {
|
||||
String actionName = action.getName();
|
||||
GWT.log("Execution failure for action of type: " + actionName);
|
||||
AsyncCallback<Object> callback = (AsyncCallback<Object>) action.getCallback();
|
||||
callback.onFailure(caught);
|
||||
numPending--;
|
||||
finish();
|
||||
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<Object> callback = (AsyncCallback<Object>) 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+62
@@ -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<MultiCompetitorRaceDataDTO> {
|
||||
private final SailingServiceAsync sailingService;
|
||||
|
||||
private final RaceIdentifier race;
|
||||
private final List<Pair<Date, CompetitorDTO>> competitorsQuery;
|
||||
private final Date toDate;
|
||||
private final long stepSize;
|
||||
private final DetailType detailType;
|
||||
|
||||
private MultiCompetitorRaceDataDTO result;
|
||||
private AsyncCallback<MultiCompetitorRaceDataDTO> callback;
|
||||
|
||||
public GetCompetitorsRaceDataAction(SailingServiceAsync sailingService, RaceIdentifier race, List<Pair<Date, CompetitorDTO>> 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<MultiCompetitorRaceDataDTO>) wrapperCallback);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MultiCompetitorRaceDataDTO getResult() {
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AsyncCallback<MultiCompetitorRaceDataDTO> getCallback() {
|
||||
return callback;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCallback(AsyncCallback<MultiCompetitorRaceDataDTO> callback) {
|
||||
this.callback = callback;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return GetCompetitorsRaceDataAction.class.getName();
|
||||
}
|
||||
}
|
||||
+29
-1
@@ -12,13 +12,20 @@ public class GetWindInfoAction extends DefaultAsyncAction<WindInfoForRaceDTO>
|
||||
{
|
||||
private final SailingServiceAsync sailingService;
|
||||
private final RaceIdentifier raceIdentifier;
|
||||
private final Date from;
|
||||
private Date from;
|
||||
private long millisecondsStepWidth;
|
||||
private int numberOfFixes;
|
||||
private Collection<String> windSourceTypeNames;
|
||||
|
||||
private WindInfoForRaceDTO result;
|
||||
|
||||
private long resolutionInMilliseconds;
|
||||
private Date fromDate;
|
||||
private Date toDate;
|
||||
|
||||
private enum CallVariants { Variant1, Variant2 };
|
||||
private final CallVariants callVariant;
|
||||
|
||||
private AsyncCallback<WindInfoForRaceDTO> callback;
|
||||
|
||||
public GetWindInfoAction(SailingServiceAsync sailingService, RaceIdentifier raceIdentifier, Date from, long millisecondsStepWidth,
|
||||
@@ -29,12 +36,33 @@ public class GetWindInfoAction extends DefaultAsyncAction<WindInfoForRaceDTO>
|
||||
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<String> 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() {
|
||||
switch (callVariant) {
|
||||
case Variant1:
|
||||
sailingService.getWindInfo(raceIdentifier, from, millisecondsStepWidth, numberOfFixes, windSourceTypeNames, (AsyncCallback<WindInfoForRaceDTO>) wrapperCallback);
|
||||
break;
|
||||
case Variant2:
|
||||
sailingService.getWindInfo(raceIdentifier, fromDate, toDate, resolutionInMilliseconds, windSourceTypeNames, (AsyncCallback<WindInfoForRaceDTO>) wrapperCallback);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+2
-1
@@ -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,
|
||||
|
||||
+2
-2
@@ -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);
|
||||
|
||||
+2
-1
@@ -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);
|
||||
|
||||
+5
-3
@@ -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<WindChartSetting
|
||||
if (raceIdentifier == null) {
|
||||
clearChart();
|
||||
} else if (needsDataLoading()) {
|
||||
sailingService.getWindInfo(raceIdentifier,
|
||||
GetWindInfoAction getWindInfoAction = new GetWindInfoAction(sailingService, raceIdentifier,
|
||||
// TODO Time interval should be determined by a selection in the chart but be at most 60s. See bug #121.
|
||||
// Consider incremental updates for new data only.
|
||||
from, to, resolutionInMilliseconds, // use race start and time of newest event as default time period
|
||||
null, // retrieve data on all wind sources
|
||||
new AsyncCallback<WindInfoForRaceDTO>() {
|
||||
null); // retrieve data on all wind sources
|
||||
|
||||
getWindInfoAction.setCallback(new AsyncCallback<WindInfoForRaceDTO>() {
|
||||
@Override
|
||||
public void onSuccess(WindInfoForRaceDTO result) {
|
||||
if (result != null) {
|
||||
|
||||
+10
-3
@@ -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<MultiCompetitorRaceDataDTO>() {
|
||||
GetCompetitorsRaceDataAction getCompetitorsRaceDataAction = new GetCompetitorsRaceDataAction(sailingService,
|
||||
getSelectedRace(), dataQuery, toDate, getStepSize(), getDataToShow());
|
||||
getCompetitorsRaceDataAction.setCallback(new AsyncCallback<MultiCompetitorRaceDataDTO>() {
|
||||
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
@@ -296,6 +301,8 @@ implements CompetitorSelectionChangeListener, RaceSelectionChangeListener, TimeL
|
||||
setWidget(chart);
|
||||
}
|
||||
});
|
||||
|
||||
asyncActionsExecutor.execute(getCompetitorsRaceDataAction);
|
||||
} else {
|
||||
setWidget(noCompetitorsSelectedLabel);
|
||||
}
|
||||
|
||||
+3
-2
@@ -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<ChartSettings> implements Component<ChartSettings> {
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
+2
-1
@@ -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%");
|
||||
|
||||
|
||||
+2
-1
@@ -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),
|
||||
|
||||
+6
-6
@@ -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);
|
||||
|
||||
+3
-2
@@ -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<MultiChartSettings> implements Component<MultiChartSettings> {
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
+2
-1
@@ -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
|
||||
|
||||
+3
-2
@@ -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);
|
||||
|
||||
+2
-1
@@ -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);
|
||||
|
||||
+9
-5
@@ -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;
|
||||
@@ -112,6 +113,8 @@ public class RaceBoardPanel extends FormPanel implements EventDisplayer, RaceSel
|
||||
*/
|
||||
private CollapsableComponentViewer<MultiChartSettings> 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<Component<?>> components = new ArrayList<Component<?>>();
|
||||
|
||||
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<RaceMapSettings> raceMapViewer = new CollapsableComponentViewer<RaceMapSettings>(
|
||||
raceMap, "auto", "500px", stringMessages);
|
||||
|
||||
@@ -283,7 +287,7 @@ public class RaceBoardPanel extends FormPanel implements EventDisplayer, RaceSel
|
||||
// CollapsableComponentViewer<ChartSettings> chartViewer = new CollapsableComponentViewer<ChartSettings>(
|
||||
// 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<MultiChartSettings>(
|
||||
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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user