mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-21 19:50:01 +00:00
Merge branch 'origin/master'
This commit is contained in:
commit
ca4e98c3d6
65 files changed
+249
-482
No files matched your search
@@ -1,14 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="con" path="com.google.gwt.eclipse.core.GWT_CONTAINER"/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
|
||||
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
|
||||
<classpathentry kind="src" path="src/main/resources"/>
|
||||
<classpathentry excluding="com/sap/sailing/gwt/ui/jre/" kind="src" path="src/main/java"/>
|
||||
<classpathentry kind="lib" path="WEB-INF/lib/gwt-servlet.jar" sourcepath="/com.google.gwt.osgi/lib/gwt-user.jar"/>
|
||||
<classpathentry exported="true" kind="lib" path="WEB-INF/lib/gwt-maps-api-3.9.0-build-17.jar"/>
|
||||
<classpathentry exported="true" kind="lib" path="WEB-INF/lib/gwt-ajaxloader.jar"/>
|
||||
<classpathentry exported="true" kind="lib" path="WEB-INF/lib/gwt-bootstrap-2.3.2.0.jar"/>
|
||||
<classpathentry exported="true" kind="lib" path="WEB-INF/classes/"/>
|
||||
<classpathentry kind="output" path="bin"/>
|
||||
<classpathentry exported="true" kind="lib" path="WEB-INF/classes/"/>
|
||||
<classpathentry kind="con" path="com.google.gwt.eclipse.core.GWT_CONTAINER"/>
|
||||
<classpathentry kind="output" path="bin"/>
|
||||
</classpath>
|
||||
@@ -40,13 +40,13 @@ Import-Package: javax.jms;version="1.1.0",
|
||||
javax.servlet;version="2.6.0",
|
||||
javax.servlet.descriptor;version="2.6.0",
|
||||
javax.servlet.http;version="2.6.0",
|
||||
org.apache.http.client;version="4.2.5",
|
||||
org.json.simple,
|
||||
org.json.simple.parser,
|
||||
org.osgi.framework,
|
||||
org.osgi.util.tracker
|
||||
Web-ContextPath: /gwt
|
||||
Bundle-ClassPath: WEB-INF/classes/,
|
||||
WEB-INF/lib/gwt-servlet.jar,
|
||||
WEB-INF/lib/gwt-maps-api-3.9.0-build-17.jar,
|
||||
WEB-INF/lib/gwt-ajaxloader.jar,
|
||||
WEB-INF/lib/gwt-bootstrap-2.3.2.0.jar
|
||||
|
||||
Binary file not shown.
@@ -2,7 +2,6 @@ source.WEB-INF/classes/ = src/main/java,\
|
||||
src/main/resources
|
||||
output.WEB-INF/classes/ = bin
|
||||
bin.includes = META-INF/,\
|
||||
WEB-INF/lib/gwt-servlet.jar,\
|
||||
WEB-INF/classes/,\
|
||||
WEB-INF/web.xml,\
|
||||
AdminConsole.css,\
|
||||
|
||||
+1
-1
@@ -9,8 +9,8 @@ import com.sap.sailing.domain.common.dto.LeaderboardDTO;
|
||||
import com.sap.sailing.gwt.ui.client.ErrorReporter;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.client.Timer;
|
||||
import com.sap.sse.gwt.client.async.AsyncAction;
|
||||
import com.sap.sse.gwt.client.player.Timer;
|
||||
|
||||
/**
|
||||
* Performs a result adaptation from {@link IncrementalOrFullLeaderboardDTO} and {@link LeaderboardDTO}, encapsulating
|
||||
|
||||
-16
@@ -1,16 +0,0 @@
|
||||
package com.sap.sailing.gwt.ui.client;
|
||||
|
||||
import com.sap.sailing.gwt.ui.client.Timer.PlayModes;
|
||||
import com.sap.sailing.gwt.ui.client.Timer.PlayStates;
|
||||
|
||||
public interface PlayStateListener {
|
||||
/**
|
||||
* Called by a timer where this listener is registered when a timer's play state has changed.
|
||||
*
|
||||
* @param isPlaying
|
||||
* <code>true</code> if the timer is now automatically updating its time
|
||||
*/
|
||||
void playStateChanged(PlayStates playState, PlayModes playMode);
|
||||
|
||||
void playSpeedFactorChanged(double newPlaySpeedFactor);
|
||||
}
|
||||
+4
-2
@@ -7,11 +7,13 @@ import java.util.Map;
|
||||
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
||||
import com.sap.sailing.domain.common.impl.Util.Pair;
|
||||
import com.sap.sailing.gwt.ui.adminconsole.DateAndTimeFormatterUtil;
|
||||
import com.sap.sailing.gwt.ui.client.Timer.PlayModes;
|
||||
import com.sap.sailing.gwt.ui.client.Timer.PlayStates;
|
||||
import com.sap.sailing.gwt.ui.client.shared.components.SettingsDialogComponent;
|
||||
import com.sap.sailing.gwt.ui.shared.MarkPassingTimesDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceTimesInfoDTO;
|
||||
import com.sap.sse.gwt.client.player.TimeRangeWithZoomProvider;
|
||||
import com.sap.sse.gwt.client.player.Timer;
|
||||
import com.sap.sse.gwt.client.player.Timer.PlayModes;
|
||||
import com.sap.sse.gwt.client.player.Timer.PlayStates;
|
||||
|
||||
public class RaceTimePanel extends TimePanel<RaceTimePanelSettings> implements RaceSelectionChangeListener, RaceTimesInfoProviderListener {
|
||||
private final RaceTimesInfoProvider raceTimesInfoProvider;
|
||||
|
||||
+1
@@ -4,6 +4,7 @@ import java.util.Date;
|
||||
|
||||
import com.sap.sailing.domain.common.impl.Util.Pair;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceTimesInfoDTO;
|
||||
import com.sap.sse.gwt.client.player.Timer;
|
||||
|
||||
public class RaceTimesCalculationUtil {
|
||||
|
||||
|
||||
+1
@@ -17,6 +17,7 @@ import com.sap.sailing.domain.common.dto.PositionDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.WindDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.WindInfoForRaceDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.WindTrackInfoDTO;
|
||||
import com.sap.sse.gwt.client.player.TimeListener;
|
||||
|
||||
/**
|
||||
* Displays a bit of wind history around the time notified to this time listener.
|
||||
|
||||
-7
@@ -1,7 +0,0 @@
|
||||
package com.sap.sailing.gwt.ui.client;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
public interface TimeListener {
|
||||
void timeChanged(Date newTime, Date oldTime);
|
||||
}
|
||||
+8
-2
@@ -21,13 +21,19 @@ import com.google.gwt.user.client.ui.Label;
|
||||
import com.google.gwt.user.client.ui.RequiresResize;
|
||||
import com.google.gwt.user.client.ui.SimplePanel;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
import com.sap.sailing.gwt.ui.client.Timer.PlayModes;
|
||||
import com.sap.sailing.gwt.ui.client.Timer.PlayStates;
|
||||
import com.sap.sailing.gwt.ui.client.shared.components.Component;
|
||||
import com.sap.sailing.gwt.ui.client.shared.components.SettingsDialog;
|
||||
import com.sap.sailing.gwt.ui.client.shared.components.SettingsDialogComponent;
|
||||
import com.sap.sse.gwt.client.controls.slider.SliderBar;
|
||||
import com.sap.sse.gwt.client.controls.slider.TimeSlider;
|
||||
import com.sap.sse.gwt.client.player.PlayStateListener;
|
||||
import com.sap.sse.gwt.client.player.TimeListener;
|
||||
import com.sap.sse.gwt.client.player.TimeRangeChangeListener;
|
||||
import com.sap.sse.gwt.client.player.TimeRangeWithZoomProvider;
|
||||
import com.sap.sse.gwt.client.player.TimeZoomChangeListener;
|
||||
import com.sap.sse.gwt.client.player.Timer;
|
||||
import com.sap.sse.gwt.client.player.Timer.PlayModes;
|
||||
import com.sap.sse.gwt.client.player.Timer.PlayStates;
|
||||
|
||||
public class TimePanel<T extends TimePanelSettings> extends SimplePanel implements Component<T>, TimeListener, TimeZoomChangeListener,
|
||||
TimeRangeChangeListener, PlayStateListener, RequiresResize {
|
||||
|
||||
-7
@@ -1,7 +0,0 @@
|
||||
package com.sap.sailing.gwt.ui.client;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
public interface TimeRangeChangeListener {
|
||||
void onTimeRangeChanged(Date fromTime, Date toTime);
|
||||
}
|
||||
-65
@@ -1,65 +0,0 @@
|
||||
package com.sap.sailing.gwt.ui.client;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Date;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import com.sap.sailing.domain.common.impl.Util.Pair;
|
||||
|
||||
public class TimeRangeModel implements TimeRangeProvider {
|
||||
|
||||
/**
|
||||
* The 'from' time of the time interval. May be <code>null</code> if not yet initialized.
|
||||
*/
|
||||
protected Date fromTime;
|
||||
|
||||
/**
|
||||
* The 'to' time of the time interval. May be <code>null</code> if not yet initialized.
|
||||
*/
|
||||
protected Date toTime;
|
||||
|
||||
protected final Set<TimeRangeChangeListener> listeners;
|
||||
|
||||
public TimeRangeModel() {
|
||||
listeners = new HashSet<TimeRangeChangeListener>();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addTimeRangeChangeListener(TimeRangeChangeListener listener) {
|
||||
listeners.add(listener);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeTimeRangeChangeListener(TimeRangeChangeListener listener) {
|
||||
listeners.remove(listener);
|
||||
}
|
||||
|
||||
public void setTimeRange(final Date fromTime, final Date toTime, TimeRangeChangeListener... listenersNotToNotify) {
|
||||
this.fromTime = fromTime != null ? new Date(fromTime.getTime()) : null;
|
||||
this.toTime = toTime != null ? new Date(toTime.getTime()) : null;
|
||||
|
||||
for (TimeRangeChangeListener listener : listeners) {
|
||||
if (listenersNotToNotify == null || !Arrays.asList(listenersNotToNotify).contains(listener)) {
|
||||
listener.onTimeRangeChanged(fromTime, toTime);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Pair<Date, Date> getTimeRange() {
|
||||
return new Pair<Date, Date>(fromTime, toTime);
|
||||
}
|
||||
|
||||
public Date getFromTime() {
|
||||
return fromTime;
|
||||
}
|
||||
|
||||
public Date getToTime() {
|
||||
return toTime;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "TimeRangeModel [fromTime=" + fromTime + ", toTime=" + toTime + "]";
|
||||
}
|
||||
}
|
||||
-20
@@ -1,20 +0,0 @@
|
||||
package com.sap.sailing.gwt.ui.client;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import com.sap.sailing.domain.common.impl.Util.Pair;
|
||||
|
||||
public interface TimeRangeProvider {
|
||||
|
||||
public void addTimeRangeChangeListener(TimeRangeChangeListener listener);
|
||||
|
||||
public void removeTimeRangeChangeListener(TimeRangeChangeListener listener);
|
||||
|
||||
public void setTimeRange(Date fromTime, Date toTime, TimeRangeChangeListener... listenersNotToNotify);
|
||||
|
||||
public Date getFromTime();
|
||||
|
||||
public Date getToTime();
|
||||
|
||||
public Pair<Date, Date> getTimeRange();
|
||||
}
|
||||
-67
@@ -1,67 +0,0 @@
|
||||
package com.sap.sailing.gwt.ui.client;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Date;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import com.sap.sailing.domain.common.impl.Util.Pair;
|
||||
|
||||
public class TimeRangeWithZoomModel extends TimeRangeModel implements TimeRangeWithZoomProvider {
|
||||
private Date zoomStartTimepoint;
|
||||
private Date zoomEndTimepoint;
|
||||
private boolean isTimeZoomed;
|
||||
|
||||
private final Set<TimeZoomChangeListener> listeners;
|
||||
|
||||
public TimeRangeWithZoomModel() {
|
||||
isTimeZoomed = false;
|
||||
listeners = new HashSet<TimeZoomChangeListener>();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addTimeZoomChangeListener(TimeZoomChangeListener listener) {
|
||||
listeners.add(listener);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeTimeZoomChangeListener(TimeZoomChangeListener listener) {
|
||||
listeners.remove(listener);
|
||||
}
|
||||
|
||||
public void setTimeZoom(Date zoomStartTimepoint, Date zoomEndTimepoint, TimeZoomChangeListener... listenersNotToNotify) {
|
||||
this.zoomStartTimepoint = zoomStartTimepoint;
|
||||
this.zoomEndTimepoint = zoomEndTimepoint;
|
||||
this.isTimeZoomed = true;
|
||||
for (TimeZoomChangeListener listener : listeners) {
|
||||
if (listenersNotToNotify == null || !Arrays.asList(listenersNotToNotify).contains(listener)) {
|
||||
listener.onTimeZoomChanged(zoomStartTimepoint, zoomEndTimepoint);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void resetTimeZoom(TimeZoomChangeListener... listenersNotToNotify) {
|
||||
isTimeZoomed = false;
|
||||
this.zoomStartTimepoint = null;
|
||||
this.zoomEndTimepoint = null;
|
||||
for (TimeZoomChangeListener listener : listeners) {
|
||||
if (listenersNotToNotify == null || !Arrays.asList(listenersNotToNotify).contains(listener)) {
|
||||
listener.onTimeZoomReset();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Pair<Date, Date> getTimeZoom() {
|
||||
return new Pair<Date, Date>(zoomStartTimepoint, zoomEndTimepoint);
|
||||
}
|
||||
|
||||
public boolean isZoomed() {
|
||||
return isTimeZoomed;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "TimeRangeWithZoomModel [fromTime=" + fromTime + ", toTime=" + toTime + ", zoomStartTimepoint=" + zoomStartTimepoint + ", zoomEndTimepoint="
|
||||
+ zoomEndTimepoint + ", isTimeZoomed=" + isTimeZoomed + "]";
|
||||
}
|
||||
}
|
||||
-20
@@ -1,20 +0,0 @@
|
||||
package com.sap.sailing.gwt.ui.client;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import com.sap.sailing.domain.common.impl.Util.Pair;
|
||||
|
||||
public interface TimeRangeWithZoomProvider extends TimeRangeProvider {
|
||||
|
||||
public void addTimeZoomChangeListener(TimeZoomChangeListener listener);
|
||||
|
||||
public void removeTimeZoomChangeListener(TimeZoomChangeListener listener);
|
||||
|
||||
public void setTimeZoom(Date zoomStartTimepoint, Date zoomEndTimepoint, TimeZoomChangeListener... listenersNotToNotify);
|
||||
|
||||
public void resetTimeZoom(TimeZoomChangeListener... listenersNotToNotify);
|
||||
|
||||
public Pair<Date, Date> getTimeZoom();
|
||||
|
||||
public boolean isZoomed();
|
||||
}
|
||||
-10
@@ -1,10 +0,0 @@
|
||||
package com.sap.sailing.gwt.ui.client;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
public interface TimeZoomChangeListener {
|
||||
|
||||
void onTimeZoomChanged(Date zoomStartTimepoint, Date zoomEndTimepoint);
|
||||
|
||||
void onTimeZoomReset();
|
||||
}
|
||||
@@ -1,358 +0,0 @@
|
||||
package com.sap.sailing.gwt.ui.client;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import com.google.gwt.core.client.Scheduler;
|
||||
import com.google.gwt.core.client.Scheduler.RepeatingCommand;
|
||||
|
||||
/**
|
||||
* Manages a timer and can auto-advance it at a given acceleration/deceleration rate, with a given delay compared to
|
||||
* real time. It can be {@link #pause() paused} and {@link #resume() resumed}. It can be in one of two play modes:
|
||||
* {@link PlayModes#Live} and {@link PlayModes#Replay}. In live play mode the timer is always in state {@link PlayStates#Playing}
|
||||
* and adjusts the time to now-{@link #livePlayDelayInMillis}. As soon as it's paused or stopped it enters
|
||||
* {@link PlayModes#Replay}. By entering {@link PlayModes#Live} with {@link #setPlayMode(PlayModes)}, the timer starts
|
||||
* playing right away.
|
||||
*
|
||||
* @author Axel Uhl (d043530)
|
||||
*
|
||||
*/
|
||||
public class Timer {
|
||||
/**
|
||||
* Used by {@link #quantizeTimeStamp(long)}; currently set to 1s (1000ms)
|
||||
*/
|
||||
private static final long LIVE_CLOCK_QUANTUM = 1000;
|
||||
|
||||
/**
|
||||
* The time point represented by this timer
|
||||
*/
|
||||
private Date time;
|
||||
|
||||
/**
|
||||
* The time delay to the current point in time in milliseconds which will only be used in {@link PlayModes#Live}
|
||||
* play mode in order to infer an approximate, server-based time point to display on the client that is independent
|
||||
* of the client clock. Not set explicitly by the user but controlled by responses coming from the server.
|
||||
*/
|
||||
private long livePlayDelayInMillis;
|
||||
|
||||
/**
|
||||
* Listeners interested in changes of {@link #time}
|
||||
*/
|
||||
private final Set<TimeListener> timeListeners;
|
||||
|
||||
/**
|
||||
* Listeners interested in changes of {@link #playing}
|
||||
*/
|
||||
private final Set<PlayStateListener> playStateListeners;
|
||||
|
||||
/**
|
||||
* If <code>Playing</code>, an auto-refreshing command is running with {@link #refreshInterval}
|
||||
* as its refresh interval.
|
||||
*/
|
||||
private PlayStates playState;
|
||||
|
||||
/**
|
||||
* The current play mode of the timer: live or replay. In live mode the timer will adjust to now-delay each time it
|
||||
* refreshes. In replay mode it will advance time by the refresh interval times the play speed factor.
|
||||
*/
|
||||
private PlayModes playMode;
|
||||
|
||||
/**
|
||||
* The refresh interval in milliseconds for auto-updating this timer
|
||||
*/
|
||||
private long refreshInterval;
|
||||
|
||||
/**
|
||||
* Set to <code>true</code> if the refreshInterval changed while {@link #playing}. This forces the auto-refreshing command
|
||||
* to re-schedule itself with the new interval, then terminate.
|
||||
*/
|
||||
private boolean refreshIntervalChanged;
|
||||
|
||||
/**
|
||||
* Factor by which the timer runs faster than real time. 1.0 means real-time, 2.0 means twice as fast as real time, and so on.
|
||||
* Applies only if the timer is in replay mode.
|
||||
*/
|
||||
private double playSpeedFactor;
|
||||
|
||||
/**
|
||||
* Set to <code>true</code> to enable the timer to advance the max time automatically if the current time gets greater than the max time
|
||||
*/
|
||||
private boolean autoAdvance;
|
||||
|
||||
/**
|
||||
* The clocks of a client cannot be expected to be synchronized to the same time source as the server clock.
|
||||
* Therefore, there is a good chance for a significant time difference between client and server. While this does
|
||||
* not matter in replay mode where the client requests data for some arbitrary point in time, in live mode the
|
||||
* client at least should display the server time reasonably correct. Times in requests to the server in live mode
|
||||
* shall always be encoded as <code>null</code> to tell the server to use its server time. This will also help
|
||||
* improve the chances for cache hits.<p>
|
||||
*
|
||||
* The time difference is maintained by applying an exponential moving average across the time differences announced through
|
||||
* {@link #setMillisecondsClientIsCurrentlyBehindServer}. The field starts out with 0 as default value, implying the client
|
||||
* clock has exactly the same time as the server clock.
|
||||
*/
|
||||
private long millisecondsClientIsBehindServer;
|
||||
|
||||
private boolean clientServerOffsetHasAtLeastBeenSetOnce;
|
||||
|
||||
/**
|
||||
* The timer can run in two different modes: Live and Replay
|
||||
* 'Live' means the timer is used for a real time event
|
||||
* 'Replay' means the timer is used for an already finished event in the past
|
||||
*/
|
||||
public enum PlayModes { Live, Replay };
|
||||
|
||||
public enum PlayStates { Stopped, Playing, Paused };
|
||||
|
||||
/**
|
||||
* The timer is created in stopped state unless created with <code>playMode==PlayModes.Live</code>, using the
|
||||
* client's "now" as its current time, 1.0 as its {@link #playSpeedFactor play speed factor} and 1 second (1000ms)
|
||||
* as the {@link #refreshInterval delay between automatic updates} should the timer be {@link #resume() started}.
|
||||
* The {@link #millisecondsClientIsBehindServer offset} to the server time is initially left at 0ms until
|
||||
* updated by a call to {@link #adjustClientServerOffset(long, Date, long)}.
|
||||
*/
|
||||
public Timer(PlayModes playMode) {
|
||||
this(playMode, 1000);
|
||||
}
|
||||
|
||||
/**
|
||||
* The timer is created in stopped state, using "now" as its current time, 1.0 as its {@link #playSpeedFactor
|
||||
* acceleration factor} and <code>delayBetweenAutoAdvancesInMilliseconds</code> as the
|
||||
* {@link #refreshInterval delay between automatic updates} should the timer be
|
||||
* {@link #resume() started}. The {@link #livePlayDelayInMillis} is set to zero seconds.
|
||||
*/
|
||||
public Timer(PlayModes playMode, long refreshInterval) {
|
||||
this.refreshInterval = refreshInterval;
|
||||
// Using the client's clock is only a default; the time offset between client and server is adjusted when
|
||||
// information about the server time is present; see adjustClientServerOffset(...)
|
||||
time = new Date();
|
||||
timeListeners = new HashSet<TimeListener>();
|
||||
playStateListeners = new HashSet<PlayStateListener>();
|
||||
playState = PlayStates.Stopped;
|
||||
setPlaySpeedFactor(1.0);
|
||||
livePlayDelayInMillis = 0l;
|
||||
autoAdvance = true;
|
||||
setPlayMode(playMode);
|
||||
}
|
||||
|
||||
public void addTimeListener(TimeListener listener) {
|
||||
timeListeners.add(listener);
|
||||
}
|
||||
|
||||
public void removeTimeListener(TimeListener listener) {
|
||||
timeListeners.remove(listener);
|
||||
}
|
||||
|
||||
public void addPlayStateListener(PlayStateListener listener) {
|
||||
playStateListeners.add(listener);
|
||||
}
|
||||
|
||||
public void removePlayStateListener(PlayStateListener listener) {
|
||||
playStateListeners.remove(listener);
|
||||
}
|
||||
|
||||
/**
|
||||
* Assumes that a service request was sent to the server at <code>timePointWhenRequestWasSent</code> for which the
|
||||
* response was received at <code>timePointWhenResponseWasReceived</code> and where the response tells
|
||||
* <code>currentServerTime</code> as the server time during processing the request. Based on this, calculates the
|
||||
* difference between the client's <code>System.currentTimeMillis()</code> and the current server time and, removing
|
||||
* half the time between send and receive time point to approximate the network latency. This gives a good
|
||||
* indication for how far client and server clock differ.
|
||||
*
|
||||
* @param serverTimeDuringRequest may be <code>null</code> in which case no adjustment is performed
|
||||
*/
|
||||
public void adjustClientServerOffset(long clientTimeWhenRequestWasSent, Date serverTimeDuringRequest, long clientTimeWhenResponseWasReceived) {
|
||||
if (serverTimeDuringRequest != null) {
|
||||
// Let's assume the calculation of the RaceTimesInfoDTO objects during the request takes almost no time compared
|
||||
// to network latency. Then the difference between the client's current time and the time when the request was sent
|
||||
// can be considered network latency. If we furthermore assume that the network latency is roughly symmetrical for
|
||||
// request and response, dividing the total latency by two will approximately tell us the time that passed between
|
||||
// when the server set the RaceTimesInfoDTO.currentServerTime field and the current time.
|
||||
long responseNetworkLatencyInMillis = (clientTimeWhenResponseWasReceived-clientTimeWhenRequestWasSent)/2l;
|
||||
long offset = serverTimeDuringRequest.getTime() + responseNetworkLatencyInMillis - clientTimeWhenResponseWasReceived;
|
||||
if (clientServerOffsetHasAtLeastBeenSetOnce) {
|
||||
final double exponentialMovingAverageFactor = 0.5;
|
||||
millisecondsClientIsBehindServer = (long) (millisecondsClientIsBehindServer
|
||||
* exponentialMovingAverageFactor + (1. - exponentialMovingAverageFactor) * offset);
|
||||
} else {
|
||||
millisecondsClientIsBehindServer = offset;
|
||||
clientServerOffsetHasAtLeastBeenSetOnce = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void setTime(long timePointAsMillis) {
|
||||
Date oldTime = time;
|
||||
time = new Date(timePointAsMillis);
|
||||
if ((oldTime == null) != (time == null) || (oldTime != null && !oldTime.equals(time))) {
|
||||
for (TimeListener listener : timeListeners) {
|
||||
listener.timeChanged(time, oldTime);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void setPlaySpeedFactor(double playSpeedFactor) {
|
||||
this.playSpeedFactor = playSpeedFactor;
|
||||
for (PlayStateListener playStateListener : playStateListeners) {
|
||||
playStateListener.playSpeedFactorChanged(this.playSpeedFactor);
|
||||
}
|
||||
}
|
||||
|
||||
public double getPlaySpeedFactor() {
|
||||
return playSpeedFactor;
|
||||
}
|
||||
|
||||
public void setRefreshInterval(long refreshIntervalInMillis) {
|
||||
this.refreshInterval = refreshIntervalInMillis;
|
||||
if (playState == PlayStates.Playing) {
|
||||
refreshIntervalChanged = true;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the refresh interval in milliseconds
|
||||
*/
|
||||
public long getRefreshInterval() {
|
||||
return refreshInterval;
|
||||
}
|
||||
|
||||
public Date getTime() {
|
||||
return time;
|
||||
}
|
||||
|
||||
/**
|
||||
* When setting the play mode to live, the timer will automatically be put into play state playing.
|
||||
*/
|
||||
public void setPlayMode(PlayModes newPlayMode) {
|
||||
if (this.playMode != newPlayMode) {
|
||||
this.playMode = newPlayMode;
|
||||
for (PlayStateListener playStateListener : playStateListeners) {
|
||||
playStateListener.playStateChanged(playState, playMode);
|
||||
}
|
||||
if (newPlayMode == PlayModes.Live) {
|
||||
play();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Pauses this timer after the next time advance. {@link #playing} is set to <code>false</code> if not already
|
||||
* paused, and registered {@link PlayStateListener}s will be notified. If the play mode was live, it'll be set to
|
||||
* replay.
|
||||
*/
|
||||
public void pause() {
|
||||
if (playState == PlayStates.Playing) {
|
||||
playState = PlayStates.Paused; // this will cause the repeating command to stop executing
|
||||
for (PlayStateListener playStateListener : playStateListeners) {
|
||||
playStateListener.playStateChanged(playState, playMode);
|
||||
}
|
||||
setPlayMode(PlayModes.Replay);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Puts the timer into the stopped state. If it was in live mode, puts it into replay mode.
|
||||
*/
|
||||
public void stop() {
|
||||
if (playState == PlayStates.Playing) {
|
||||
playState = PlayStates.Stopped;
|
||||
for (PlayStateListener playStateListener : playStateListeners) {
|
||||
playStateListener.playStateChanged(playState, playMode);
|
||||
}
|
||||
setPlayMode(PlayModes.Replay);
|
||||
}
|
||||
}
|
||||
|
||||
public void play() {
|
||||
if (playState != PlayStates.Playing) {
|
||||
playState = PlayStates.Playing;
|
||||
if (playMode == PlayModes.Live) {
|
||||
setTime(getLiveTimePointInMillis());
|
||||
}
|
||||
if (autoAdvance) {
|
||||
startAutoAdvance();
|
||||
}
|
||||
for (PlayStateListener playStateListener : playStateListeners) {
|
||||
playStateListener.playStateChanged(playState, playMode);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void startAutoAdvance() {
|
||||
RepeatingCommand command = new RepeatingCommand() {
|
||||
@Override
|
||||
public boolean execute() {
|
||||
if (time != null && playState == PlayStates.Playing) {
|
||||
long newTime = time.getTime();
|
||||
if (playMode == PlayModes.Replay) {
|
||||
newTime += (long) playSpeedFactor * refreshInterval;
|
||||
} else {
|
||||
// play mode is Live; quantize to make cache hits more likely
|
||||
newTime = quantizeTimeStamp(getLiveTimePointInMillis());
|
||||
}
|
||||
setTime(newTime);
|
||||
}
|
||||
if (refreshIntervalChanged) {
|
||||
refreshIntervalChanged = false;
|
||||
scheduleAdvancerCommand(this);
|
||||
return false; // stop this command; use the newly-scheduled one instead that uses the new frequency
|
||||
} else {
|
||||
return playState == PlayStates.Playing ? true: false;
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
scheduleAdvancerCommand(command);
|
||||
}
|
||||
|
||||
/**
|
||||
* In {@link PlayModes#Live live mode}, time stamps are quantized to make it more likely for the back-end to achieve
|
||||
* a cache hit. Quantization is controlled by the {@link #LIVE_CLOCK_QUANTUM} constant.
|
||||
*/
|
||||
private long quantizeTimeStamp(long millis) {
|
||||
return millis - (millis % LIVE_CLOCK_QUANTUM);
|
||||
}
|
||||
|
||||
private void scheduleAdvancerCommand(RepeatingCommand command) {
|
||||
Scheduler.get().scheduleFixedPeriod(command, (int) refreshInterval);
|
||||
}
|
||||
|
||||
public void setLivePlayDelayInMillis(long delayInMilliseconds) {
|
||||
if (this.livePlayDelayInMillis != delayInMilliseconds) {
|
||||
this.livePlayDelayInMillis = delayInMilliseconds;
|
||||
if (getPlayMode() == PlayModes.Live) {
|
||||
setTime(getLiveTimePointInMillis());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public long getLivePlayDelayInMillis() {
|
||||
return livePlayDelayInMillis;
|
||||
}
|
||||
|
||||
public PlayStates getPlayState() {
|
||||
return playState;
|
||||
}
|
||||
|
||||
public PlayModes getPlayMode() {
|
||||
return playMode;
|
||||
}
|
||||
|
||||
public boolean isAutoAdvance() {
|
||||
return autoAdvance;
|
||||
}
|
||||
|
||||
public void setAutoAdvance(boolean autoAdvance) {
|
||||
this.autoAdvance = autoAdvance;
|
||||
}
|
||||
|
||||
public long getLiveTimePointInMillis() {
|
||||
return System.currentTimeMillis() - getLivePlayDelayInMillis() + millisecondsClientIsBehindServer;
|
||||
}
|
||||
|
||||
public Date getLiveTimePointAsDate() {
|
||||
return new Date(getLiveTimePointInMillis());
|
||||
}
|
||||
|
||||
}
|
||||
+5
-5
@@ -30,13 +30,8 @@ import com.sap.sailing.domain.common.media.MediaTrack.MediaType;
|
||||
import com.sap.sailing.domain.common.media.MediaTrack.Status;
|
||||
import com.sap.sailing.gwt.ui.client.ErrorReporter;
|
||||
import com.sap.sailing.gwt.ui.client.MediaServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.PlayStateListener;
|
||||
import com.sap.sailing.gwt.ui.client.RaceTimesInfoProvider;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.client.TimeListener;
|
||||
import com.sap.sailing.gwt.ui.client.Timer;
|
||||
import com.sap.sailing.gwt.ui.client.Timer.PlayModes;
|
||||
import com.sap.sailing.gwt.ui.client.Timer.PlayStates;
|
||||
import com.sap.sailing.gwt.ui.client.media.MediaSelectionDialog.MediaSelectionListener;
|
||||
import com.sap.sailing.gwt.ui.client.media.popup.PopupWindowPlayer;
|
||||
import com.sap.sailing.gwt.ui.client.media.popup.VideoWindowPlayer;
|
||||
@@ -46,6 +41,11 @@ import com.sap.sailing.gwt.ui.client.media.shared.VideoPlayer;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceTimesInfoDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.UserDTO;
|
||||
import com.sap.sse.gwt.client.dialog.DataEntryDialog.DialogCallback;
|
||||
import com.sap.sse.gwt.client.player.PlayStateListener;
|
||||
import com.sap.sse.gwt.client.player.TimeListener;
|
||||
import com.sap.sse.gwt.client.player.Timer;
|
||||
import com.sap.sse.gwt.client.player.Timer.PlayModes;
|
||||
import com.sap.sse.gwt.client.player.Timer.PlayStates;
|
||||
|
||||
public class MediaSelector implements PlayStateListener, TimeListener,
|
||||
AsyncCallback<Collection<MediaTrack>>, MediaSelectionListener, CloseHandler<Window>, ClosingHandler {
|
||||
|
||||
+1
-1
@@ -11,10 +11,10 @@ import com.google.gwt.user.client.ui.PopupPanel;
|
||||
import com.sap.sailing.domain.common.media.MediaTrack;
|
||||
import com.sap.sailing.gwt.ui.client.ErrorReporter;
|
||||
import com.sap.sailing.gwt.ui.client.MediaServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.Timer;
|
||||
import com.sap.sailing.gwt.ui.client.media.popup.PopupWindowPlayer.PopupCloseListener;
|
||||
import com.sap.sailing.gwt.ui.client.media.shared.VideoPlayer;
|
||||
import com.sap.sse.gwt.client.dialog.WindowBox;
|
||||
import com.sap.sse.gwt.client.player.Timer;
|
||||
|
||||
public class VideoEmbeddedPlayer extends AbstractEmbeddedMediaPlayer implements VideoPlayer, CloseHandler<PopupPanel>, MediaSynchAdapter {
|
||||
|
||||
|
||||
+1
-1
@@ -11,11 +11,11 @@ import com.google.gwt.user.client.ui.SimplePanel;
|
||||
import com.sap.sailing.domain.common.media.MediaTrack;
|
||||
import com.sap.sailing.gwt.ui.client.ErrorReporter;
|
||||
import com.sap.sailing.gwt.ui.client.MediaServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.Timer;
|
||||
import com.sap.sailing.gwt.ui.client.media.popup.PopupWindowPlayer.PopupCloseListener;
|
||||
import com.sap.sailing.gwt.ui.client.media.shared.AbstractMediaPlayer;
|
||||
import com.sap.sailing.gwt.ui.client.media.shared.VideoPlayer;
|
||||
import com.sap.sse.gwt.client.dialog.WindowBox;
|
||||
import com.sap.sse.gwt.client.player.Timer;
|
||||
|
||||
public class YoutubeEmbeddedPlayer extends AbstractMediaPlayer implements VideoPlayer, CloseHandler<PopupPanel>, MediaSynchAdapter {
|
||||
|
||||
|
||||
+3
-3
@@ -41,12 +41,12 @@ import com.sap.sailing.gwt.ui.client.DetailTypeFormatter;
|
||||
import com.sap.sailing.gwt.ui.client.ErrorReporter;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.client.TimeListener;
|
||||
import com.sap.sailing.gwt.ui.client.Timer;
|
||||
import com.sap.sailing.gwt.ui.client.Timer.PlayModes;
|
||||
import com.sap.sailing.gwt.ui.client.shared.components.AbstractLazyComponent;
|
||||
import com.sap.sailing.gwt.ui.client.shared.components.Component;
|
||||
import com.sap.sse.gwt.client.async.AsyncActionsExecutor;
|
||||
import com.sap.sse.gwt.client.player.TimeListener;
|
||||
import com.sap.sse.gwt.client.player.Timer;
|
||||
import com.sap.sse.gwt.client.player.Timer.PlayModes;
|
||||
|
||||
/**
|
||||
* A base class for a leaderboard chart showing competitor data for all race columns of a leaderboard.
|
||||
|
||||
+4
-4
@@ -50,13 +50,13 @@ import com.sap.sailing.gwt.ui.client.ErrorReporter;
|
||||
import com.sap.sailing.gwt.ui.client.RaceSelectionProvider;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.client.TimeRangeWithZoomProvider;
|
||||
import com.sap.sailing.gwt.ui.client.Timer;
|
||||
import com.sap.sailing.gwt.ui.client.Timer.PlayModes;
|
||||
import com.sap.sailing.gwt.ui.client.shared.components.Component;
|
||||
import com.sap.sailing.gwt.ui.shared.CompetitorRaceDataDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.CompetitorsRaceDataDTO;
|
||||
import com.sap.sse.gwt.client.async.AsyncActionsExecutor;
|
||||
import com.sap.sse.gwt.client.player.TimeRangeWithZoomProvider;
|
||||
import com.sap.sse.gwt.client.player.Timer;
|
||||
import com.sap.sse.gwt.client.player.Timer.PlayModes;
|
||||
|
||||
/**
|
||||
* AbstractCompetitorChart is a chart that can show one sort of competitor data (e.g. current speed over ground, windward
|
||||
@@ -491,7 +491,7 @@ public abstract class AbstractCompetitorRaceChart<SettingsType extends ChartSett
|
||||
if (oldReversedYAxis != hasReversedYAxis(selectedDetailType)) {
|
||||
chart = createChart();
|
||||
if (isZoomed) {
|
||||
Pair<Date, Date> zoomRange = timeRangeWithZoomProvider.getTimeZoom();
|
||||
com.sap.sse.common.Pair<Date, Date> zoomRange = timeRangeWithZoomProvider.getTimeZoom();
|
||||
onTimeZoomChanged(zoomRange.getA(), zoomRange.getB());
|
||||
} else {
|
||||
resetMinMaxAndExtremesInterval(/* redraw */ true);
|
||||
|
||||
+7
-8
@@ -13,18 +13,17 @@ import org.moxieapps.gwt.highcharts.client.events.ChartSelectionEvent;
|
||||
import com.google.gwt.i18n.client.DateTimeFormat;
|
||||
import com.google.gwt.user.client.ui.SimplePanel;
|
||||
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
||||
import com.sap.sailing.domain.common.impl.Util.Pair;
|
||||
import com.sap.sailing.gwt.ui.client.ErrorReporter;
|
||||
import com.sap.sailing.gwt.ui.client.RaceSelectionChangeListener;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.client.TimeListener;
|
||||
import com.sap.sailing.gwt.ui.client.TimeRangeChangeListener;
|
||||
import com.sap.sailing.gwt.ui.client.TimeRangeWithZoomProvider;
|
||||
import com.sap.sailing.gwt.ui.client.TimeZoomChangeListener;
|
||||
import com.sap.sailing.gwt.ui.client.Timer;
|
||||
import com.sap.sailing.gwt.ui.client.Timer.PlayModes;
|
||||
import com.sap.sse.gwt.client.async.AsyncActionsExecutor;
|
||||
import com.sap.sse.gwt.client.player.TimeListener;
|
||||
import com.sap.sse.gwt.client.player.TimeRangeChangeListener;
|
||||
import com.sap.sse.gwt.client.player.TimeRangeWithZoomProvider;
|
||||
import com.sap.sse.gwt.client.player.TimeZoomChangeListener;
|
||||
import com.sap.sse.gwt.client.player.Timer;
|
||||
import com.sap.sse.gwt.client.player.Timer.PlayModes;
|
||||
|
||||
public abstract class AbstractRaceChart extends SimplePanel implements RaceSelectionChangeListener,
|
||||
TimeListener, TimeZoomChangeListener, TimeRangeChangeListener {
|
||||
@@ -137,7 +136,7 @@ public abstract class AbstractRaceChart extends SimplePanel implements RaceSelec
|
||||
|
||||
protected void setSeriesPoints(Series series, Point[] points) {
|
||||
if (timeRangeWithZoomProvider.isZoomed()) {
|
||||
Pair<Date, Date> timeZoom = timeRangeWithZoomProvider.getTimeZoom();
|
||||
com.sap.sse.common.Pair<Date, Date> timeZoom = timeRangeWithZoomProvider.getTimeZoom();
|
||||
resetMinMaxAndExtremesInterval(/* redraw */ false);
|
||||
series.setPoints(points, false);
|
||||
changeMinMaxAndExtremesInterval(timeZoom.getA(), timeZoom.getB(), /* redraw */ false);
|
||||
|
||||
+1
-1
@@ -5,9 +5,9 @@ import com.sap.sailing.gwt.ui.client.CompetitorSelectionProvider;
|
||||
import com.sap.sailing.gwt.ui.client.ErrorReporter;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.client.Timer;
|
||||
import com.sap.sailing.gwt.ui.client.shared.components.SettingsDialogComponent;
|
||||
import com.sap.sse.gwt.client.async.AsyncActionsExecutor;
|
||||
import com.sap.sse.gwt.client.player.Timer;
|
||||
|
||||
public class MultiCompetitorLeaderboardChart extends AbstractCompetitorLeaderboardChart<MultiCompetitorLeaderboardChartSettings> {
|
||||
private MultiCompetitorLeaderboardChartSettings settings;
|
||||
|
||||
+2
-2
@@ -7,12 +7,12 @@ import com.sap.sailing.gwt.ui.client.ErrorReporter;
|
||||
import com.sap.sailing.gwt.ui.client.RaceSelectionProvider;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.client.TimeRangeWithZoomProvider;
|
||||
import com.sap.sailing.gwt.ui.client.Timer;
|
||||
import com.sap.sailing.gwt.ui.client.shared.components.Component;
|
||||
import com.sap.sailing.gwt.ui.client.shared.components.SettingsDialogComponent;
|
||||
import com.sap.sailing.gwt.ui.shared.LeaderboardGroupDTO;
|
||||
import com.sap.sse.gwt.client.async.AsyncActionsExecutor;
|
||||
import com.sap.sse.gwt.client.player.TimeRangeWithZoomProvider;
|
||||
import com.sap.sse.gwt.client.player.Timer;
|
||||
|
||||
/**
|
||||
* MultiCompetitorRaceChart is a GWT panel that can show competitor data (e.g. current speed over ground, windward distance to
|
||||
|
||||
+3
-3
@@ -48,9 +48,6 @@ import com.sap.sailing.gwt.ui.client.ErrorReporter;
|
||||
import com.sap.sailing.gwt.ui.client.RaceSelectionProvider;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.client.TimeRangeWithZoomProvider;
|
||||
import com.sap.sailing.gwt.ui.client.Timer;
|
||||
import com.sap.sailing.gwt.ui.client.Timer.PlayModes;
|
||||
import com.sap.sailing.gwt.ui.client.shared.components.Component;
|
||||
import com.sap.sailing.gwt.ui.client.shared.components.SettingsDialogComponent;
|
||||
import com.sap.sailing.gwt.ui.client.WindSourceTypeFormatter;
|
||||
@@ -58,6 +55,9 @@ import com.sap.sailing.gwt.ui.shared.WindDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.WindInfoForRaceDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.WindTrackInfoDTO;
|
||||
import com.sap.sse.gwt.client.async.AsyncActionsExecutor;
|
||||
import com.sap.sse.gwt.client.player.TimeRangeWithZoomProvider;
|
||||
import com.sap.sse.gwt.client.player.Timer;
|
||||
import com.sap.sse.gwt.client.player.Timer.PlayModes;
|
||||
|
||||
public class WindChart extends AbstractRaceChart implements Component<WindChartSettings>, RequiresResize {
|
||||
public static final String LODA_WIND_CHART_DATA_CATEGORY = "loadWindChartData";
|
||||
|
||||
+3
-3
@@ -81,9 +81,6 @@ import com.sap.sailing.gwt.ui.client.RaceTimesInfoProviderListener;
|
||||
import com.sap.sailing.gwt.ui.client.RequiresDataInitialization;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.client.TimeListener;
|
||||
import com.sap.sailing.gwt.ui.client.Timer;
|
||||
import com.sap.sailing.gwt.ui.client.Timer.PlayStates;
|
||||
import com.sap.sailing.gwt.ui.client.WindSourceTypeFormatter;
|
||||
import com.sap.sailing.gwt.ui.client.shared.components.Component;
|
||||
import com.sap.sailing.gwt.ui.client.shared.components.SettingsDialogComponent;
|
||||
@@ -105,6 +102,9 @@ import com.sap.sailing.gwt.ui.shared.WindTrackInfoDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.racemap.GoogleMapAPIKey;
|
||||
import com.sap.sailing.gwt.ui.shared.racemap.GoogleMapStyleHelper;
|
||||
import com.sap.sse.gwt.client.async.AsyncActionsExecutor;
|
||||
import com.sap.sse.gwt.client.player.TimeListener;
|
||||
import com.sap.sse.gwt.client.player.Timer;
|
||||
import com.sap.sse.gwt.client.player.Timer.PlayStates;
|
||||
|
||||
public class RaceMap extends AbsolutePanel implements TimeListener, CompetitorSelectionChangeListener, RaceSelectionChangeListener,
|
||||
RaceTimesInfoProviderListener, TailFactory, Component<RaceMapSettings>, RequiresDataInitialization, RequiresResize {
|
||||
|
||||
+2
-2
@@ -12,11 +12,11 @@ import com.google.gwt.user.client.ui.FlowPanel;
|
||||
import com.google.gwt.user.client.ui.SimplePanel;
|
||||
import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.client.TimeListener;
|
||||
import com.sap.sailing.gwt.ui.client.Timer;
|
||||
import com.sap.sailing.gwt.ui.client.shared.components.Component;
|
||||
import com.sap.sailing.gwt.ui.client.shared.components.SettingsDialog;
|
||||
import com.sap.sse.gwt.client.async.AsyncActionsExecutor;
|
||||
import com.sap.sse.gwt.client.player.TimeListener;
|
||||
import com.sap.sse.gwt.client.player.Timer;
|
||||
|
||||
/**
|
||||
* A base class for a leaderboard viewer.
|
||||
|
||||
+2
-2
@@ -30,12 +30,12 @@ import com.sap.sailing.gwt.ui.client.RemoteServiceMappingConstants;
|
||||
import com.sap.sailing.gwt.ui.client.SailingService;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.client.Timer;
|
||||
import com.sap.sailing.gwt.ui.client.Timer.PlayModes;
|
||||
import com.sap.sailing.gwt.ui.client.URLEncoder;
|
||||
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardSettings.RaceColumnSelectionStrategies;
|
||||
import com.sap.sse.gwt.client.async.AsyncActionsExecutor;
|
||||
import com.sap.sse.gwt.client.dialog.DataEntryDialog;
|
||||
import com.sap.sse.gwt.client.player.Timer;
|
||||
import com.sap.sse.gwt.client.player.Timer.PlayModes;
|
||||
import com.sap.sse.gwt.server.GwtHttpRequestUtils;
|
||||
|
||||
|
||||
|
||||
+6
-6
@@ -74,15 +74,10 @@ import com.sap.sailing.gwt.ui.client.CompetitorSelectionChangeListener;
|
||||
import com.sap.sailing.gwt.ui.client.CompetitorSelectionProvider;
|
||||
import com.sap.sailing.gwt.ui.client.ErrorReporter;
|
||||
import com.sap.sailing.gwt.ui.client.FlagImageResolver;
|
||||
import com.sap.sailing.gwt.ui.client.PlayStateListener;
|
||||
import com.sap.sailing.gwt.ui.client.RaceTimesInfoProvider;
|
||||
import com.sap.sailing.gwt.ui.client.RaceTimesInfoProviderListener;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.client.TimeListener;
|
||||
import com.sap.sailing.gwt.ui.client.Timer;
|
||||
import com.sap.sailing.gwt.ui.client.Timer.PlayModes;
|
||||
import com.sap.sailing.gwt.ui.client.Timer.PlayStates;
|
||||
import com.sap.sailing.gwt.ui.client.shared.components.Component;
|
||||
import com.sap.sailing.gwt.ui.client.shared.components.IsEmbeddableComponent;
|
||||
import com.sap.sailing.gwt.ui.client.shared.components.SettingsDialogComponent;
|
||||
@@ -93,6 +88,11 @@ import com.sap.sailing.gwt.ui.shared.RaceTimesInfoDTO;
|
||||
import com.sap.sse.gwt.client.async.AsyncActionsExecutor;
|
||||
import com.sap.sse.gwt.client.controls.busyindicator.BusyIndicator;
|
||||
import com.sap.sse.gwt.client.controls.busyindicator.SimpleBusyIndicator;
|
||||
import com.sap.sse.gwt.client.player.PlayStateListener;
|
||||
import com.sap.sse.gwt.client.player.TimeListener;
|
||||
import com.sap.sse.gwt.client.player.Timer;
|
||||
import com.sap.sse.gwt.client.player.Timer.PlayModes;
|
||||
import com.sap.sse.gwt.client.player.Timer.PlayStates;
|
||||
import com.sap.sse.gwt.client.useragent.UserAgentDetails;
|
||||
|
||||
/**
|
||||
@@ -1666,7 +1666,7 @@ public class LeaderboardPanel extends SimplePanel implements TimeListener, PlayS
|
||||
|
||||
/**
|
||||
* The time point for which the leaderboard currently shows results. In {@link PlayModes#Replay replay mode} this is
|
||||
* the {@link #timer}'s time point. In {@link PlayModes#Live live mode} the {@link #timer}'s time is quantizes to
|
||||
* the {@link #timer}'s time point. In {@link PlayModes#Live live mode} the {@link #timer}'s time is quantized to
|
||||
* the closest full second to increase the likelihood of cache hits in the back end.
|
||||
*/
|
||||
protected Date getLeaderboardDisplayDate() {
|
||||
|
||||
+1
-1
@@ -5,8 +5,8 @@ import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import com.sap.sailing.domain.common.DetailType;
|
||||
import com.sap.sailing.gwt.ui.client.Timer.PlayModes;
|
||||
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardSettings.RaceColumnSelectionStrategies;
|
||||
import com.sap.sse.gwt.client.player.Timer.PlayModes;
|
||||
|
||||
/**
|
||||
* A factory class creating leaderboard settings for different contexts (user role, live or replay mode, etc.
|
||||
|
||||
+2
-2
@@ -11,10 +11,10 @@ import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel;
|
||||
import com.sap.sailing.gwt.ui.client.ErrorReporter;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.client.Timer;
|
||||
import com.sap.sailing.gwt.ui.client.Timer.PlayModes;
|
||||
import com.sap.sailing.gwt.ui.client.shared.charts.MultiCompetitorLeaderboardChart;
|
||||
import com.sap.sse.gwt.client.async.AsyncActionsExecutor;
|
||||
import com.sap.sse.gwt.client.player.Timer;
|
||||
import com.sap.sse.gwt.client.player.Timer.PlayModes;
|
||||
import com.sap.sse.gwt.client.useragent.UserAgentDetails;
|
||||
|
||||
/**
|
||||
|
||||
+2
-2
@@ -9,10 +9,10 @@ import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel;
|
||||
import com.sap.sailing.gwt.ui.client.ErrorReporter;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.client.Timer;
|
||||
import com.sap.sailing.gwt.ui.client.Timer.PlayModes;
|
||||
import com.sap.sailing.gwt.ui.client.shared.charts.MultiCompetitorLeaderboardChart;
|
||||
import com.sap.sse.gwt.client.async.AsyncActionsExecutor;
|
||||
import com.sap.sse.gwt.client.player.Timer;
|
||||
import com.sap.sse.gwt.client.player.Timer.PlayModes;
|
||||
import com.sap.sse.gwt.client.useragent.UserAgentDetails;
|
||||
|
||||
/**
|
||||
|
||||
+2
-2
@@ -22,11 +22,11 @@ import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel;
|
||||
import com.sap.sailing.gwt.ui.client.ErrorReporter;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.client.TimeListener;
|
||||
import com.sap.sailing.gwt.ui.client.Timer;
|
||||
import com.sap.sailing.gwt.ui.client.shared.components.AbstractLazyComponent;
|
||||
import com.sap.sailing.gwt.ui.client.shared.components.SettingsDialogComponent;
|
||||
import com.sap.sse.gwt.client.async.AsyncActionsExecutor;
|
||||
import com.sap.sse.gwt.client.player.TimeListener;
|
||||
import com.sap.sse.gwt.client.player.Timer;
|
||||
import com.sap.sse.gwt.client.useragent.UserAgentDetails;
|
||||
|
||||
/**
|
||||
|
||||
+2
-2
@@ -27,14 +27,14 @@ import com.sap.sailing.gwt.ui.client.RaceTimesInfoProvider;
|
||||
import com.sap.sailing.gwt.ui.client.RemoteServiceMappingConstants;
|
||||
import com.sap.sailing.gwt.ui.client.SailingService;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.Timer;
|
||||
import com.sap.sailing.gwt.ui.client.Timer.PlayModes;
|
||||
import com.sap.sailing.gwt.ui.client.UserManagementService;
|
||||
import com.sap.sailing.gwt.ui.client.UserManagementServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.shared.LeaderboardGroupDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RegattaDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.StrippedLeaderboardDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.UserDTO;
|
||||
import com.sap.sse.gwt.client.player.Timer;
|
||||
import com.sap.sse.gwt.client.player.Timer.PlayModes;
|
||||
import com.sap.sse.gwt.client.useragent.UserAgentChecker;
|
||||
import com.sap.sse.gwt.server.GwtHttpRequestUtils;
|
||||
|
||||
|
||||
+3
-3
@@ -39,9 +39,6 @@ import com.sap.sailing.gwt.ui.client.RaceTimesInfoProvider;
|
||||
import com.sap.sailing.gwt.ui.client.RegattaDisplayer;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.client.TimeListener;
|
||||
import com.sap.sailing.gwt.ui.client.TimeRangeWithZoomModel;
|
||||
import com.sap.sailing.gwt.ui.client.Timer;
|
||||
import com.sap.sailing.gwt.ui.client.shared.charts.MultiCompetitorRaceChart;
|
||||
import com.sap.sailing.gwt.ui.client.shared.charts.WindChart;
|
||||
import com.sap.sailing.gwt.ui.client.shared.charts.WindChartSettings;
|
||||
@@ -71,6 +68,9 @@ import com.sap.sse.common.filter.Filter;
|
||||
import com.sap.sse.common.filter.FilterSet;
|
||||
import com.sap.sse.gwt.client.async.AsyncActionsExecutor;
|
||||
import com.sap.sse.gwt.client.dialog.DataEntryDialog.DialogCallback;
|
||||
import com.sap.sse.gwt.client.player.TimeListener;
|
||||
import com.sap.sse.gwt.client.player.TimeRangeWithZoomModel;
|
||||
import com.sap.sse.gwt.client.player.Timer;
|
||||
import com.sap.sse.gwt.client.useragent.UserAgentDetails;
|
||||
|
||||
/**
|
||||
|
||||
+4
-4
@@ -27,10 +27,6 @@ import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel;
|
||||
import com.sap.sailing.gwt.ui.client.ErrorReporter;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.client.TimeListener;
|
||||
import com.sap.sailing.gwt.ui.client.Timer;
|
||||
import com.sap.sailing.gwt.ui.client.Timer.PlayModes;
|
||||
import com.sap.sailing.gwt.ui.client.Timer.PlayStates;
|
||||
import com.sap.sailing.gwt.ui.client.shared.components.SettingsDialog;
|
||||
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel;
|
||||
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardSettings;
|
||||
@@ -41,6 +37,10 @@ import com.sap.sailing.gwt.ui.shared.RaceGroupDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.StrippedLeaderboardDTO;
|
||||
import com.sap.sse.gwt.client.async.AsyncActionsExecutor;
|
||||
import com.sap.sse.gwt.client.async.MarkedAsyncCallback;
|
||||
import com.sap.sse.gwt.client.player.TimeListener;
|
||||
import com.sap.sse.gwt.client.player.Timer;
|
||||
import com.sap.sse.gwt.client.player.Timer.PlayModes;
|
||||
import com.sap.sse.gwt.client.player.Timer.PlayStates;
|
||||
import com.sap.sse.gwt.client.useragent.UserAgentDetails;
|
||||
|
||||
public class RegattaOverviewPanel extends SimplePanel {
|
||||
|
||||
+1
-1
@@ -51,7 +51,6 @@ import com.sap.sailing.gwt.ui.client.ErrorReporter;
|
||||
import com.sap.sailing.gwt.ui.client.GwtJsonDeSerializer;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.client.Timer;
|
||||
import com.sap.sailing.gwt.ui.client.shared.components.Component;
|
||||
import com.sap.sailing.gwt.ui.client.shared.components.SettingsDialogComponent;
|
||||
import com.sap.sailing.gwt.ui.shared.ClickableSafeHtmlCell;
|
||||
@@ -64,6 +63,7 @@ import com.sap.sailing.gwt.ui.shared.RaceInfoDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RegattaOverviewEntryDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.WaypointDTO;
|
||||
import com.sap.sse.gwt.client.async.MarkedAsyncCallback;
|
||||
import com.sap.sse.gwt.client.player.Timer;
|
||||
|
||||
/**
|
||||
* This component shows a table displaying the current state of races for a given event.
|
||||
|
||||
+1
-1
@@ -13,7 +13,7 @@ import com.sap.sailing.domain.common.dto.NamedDTO;
|
||||
import com.sap.sailing.domain.common.dto.PlacemarkDTO;
|
||||
import com.sap.sailing.domain.common.dto.PlacemarkOrderDTO;
|
||||
import com.sap.sailing.domain.common.dto.RaceColumnDTO;
|
||||
import com.sap.sailing.gwt.ui.client.Timer;
|
||||
import com.sap.sse.gwt.client.player.Timer;
|
||||
|
||||
public class LeaderboardGroupDTO extends NamedDTO {
|
||||
private static final long serialVersionUID = -2923229069598593687L;
|
||||
|
||||
+1
-1
@@ -6,7 +6,7 @@ import java.util.List;
|
||||
|
||||
import com.google.gwt.user.client.rpc.IsSerializable;
|
||||
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
||||
import com.sap.sailing.gwt.ui.client.Timer;
|
||||
import com.sap.sse.gwt.client.player.Timer;
|
||||
|
||||
public class RaceTimesInfoDTO implements IsSerializable {
|
||||
private RegattaAndRaceIdentifier raceIdentifier;
|
||||
|
||||
+1
-1
@@ -16,9 +16,9 @@ import com.sap.sailing.domain.common.Mile;
|
||||
import com.sap.sailing.domain.common.Named;
|
||||
import com.sap.sailing.domain.common.dto.PositionDTO;
|
||||
import com.sap.sailing.domain.common.impl.DegreeBearingImpl;
|
||||
import com.sap.sailing.gwt.ui.client.Timer;
|
||||
import com.sap.sailing.gwt.ui.shared.SimulatorWindDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.WindFieldGenParamsDTO;
|
||||
import com.sap.sse.gwt.client.player.Timer;
|
||||
|
||||
/**
|
||||
* This class implements the layer which displays the optimal path on the path. Currently there is a single path to be
|
||||
|
||||
+1
-1
@@ -6,9 +6,9 @@ import java.util.List;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import com.google.gwt.maps.client.MapWidget;
|
||||
import com.sap.sailing.gwt.ui.client.Timer;
|
||||
import com.sap.sailing.gwt.ui.shared.SimulatorWindDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.WindFieldGenParamsDTO;
|
||||
import com.sap.sse.gwt.client.player.Timer;
|
||||
|
||||
public class ReplayPathCanvasOverlay extends PathCanvasOverlay {
|
||||
|
||||
|
||||
+4
-4
@@ -48,10 +48,6 @@ import com.sap.sailing.gwt.ui.client.SimulatorServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.client.TimePanel;
|
||||
import com.sap.sailing.gwt.ui.client.TimePanelSettings;
|
||||
import com.sap.sailing.gwt.ui.client.TimeRangeWithZoomModel;
|
||||
import com.sap.sailing.gwt.ui.client.TimeRangeWithZoomProvider;
|
||||
import com.sap.sailing.gwt.ui.client.Timer;
|
||||
import com.sap.sailing.gwt.ui.client.Timer.PlayModes;
|
||||
import com.sap.sailing.gwt.ui.shared.BoatClassDTOsAndNotificationMessage;
|
||||
import com.sap.sailing.gwt.ui.shared.PolarDiagramDTOAndNotificationMessage;
|
||||
import com.sap.sailing.gwt.ui.shared.SimulatorUISelectionDTO;
|
||||
@@ -62,6 +58,10 @@ import com.sap.sailing.gwt.ui.simulator.windpattern.WindPatternSetting;
|
||||
import com.sap.sailing.simulator.util.SailingSimulatorConstants;
|
||||
import com.sap.sse.gwt.client.controls.busyindicator.SimpleBusyIndicator;
|
||||
import com.sap.sse.gwt.client.controls.slider.SliderBar;
|
||||
import com.sap.sse.gwt.client.player.TimeRangeWithZoomModel;
|
||||
import com.sap.sse.gwt.client.player.TimeRangeWithZoomProvider;
|
||||
import com.sap.sse.gwt.client.player.Timer;
|
||||
import com.sap.sse.gwt.client.player.Timer.PlayModes;
|
||||
|
||||
public class SimulatorMainPanel extends SimplePanel {
|
||||
|
||||
|
||||
+1
-1
@@ -40,7 +40,6 @@ import com.sap.sailing.gwt.ui.client.SimulatorServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.client.TimePanel;
|
||||
import com.sap.sailing.gwt.ui.client.TimePanelSettings;
|
||||
import com.sap.sailing.gwt.ui.client.Timer;
|
||||
import com.sap.sailing.gwt.ui.shared.PathDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.SimulatorResultsDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.SimulatorUISelectionDTO;
|
||||
@@ -54,6 +53,7 @@ import com.sap.sailing.gwt.ui.simulator.util.SimulatorResources;
|
||||
import com.sap.sailing.gwt.ui.simulator.windpattern.WindPatternDisplay;
|
||||
import com.sap.sailing.simulator.util.SailingSimulatorConstants;
|
||||
import com.sap.sse.gwt.client.controls.busyindicator.SimpleBusyIndicator;
|
||||
import com.sap.sse.gwt.client.player.Timer;
|
||||
|
||||
/**
|
||||
* This class implements simulation visualization using overlays on top of a Google maps widget
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
*/
|
||||
package com.sap.sailing.gwt.ui.simulator;
|
||||
|
||||
import com.sap.sailing.gwt.ui.client.TimeListener;
|
||||
import com.sap.sse.gwt.client.player.TimeListener;
|
||||
|
||||
/**
|
||||
* A time listener that can be asked whether the timer shall be stopped.
|
||||
|
||||
+1
-1
@@ -15,12 +15,12 @@ import com.google.gwt.canvas.dom.client.Context2d;
|
||||
import com.google.gwt.event.shared.HandlerRegistration;
|
||||
import com.google.gwt.maps.client.MapWidget;
|
||||
import com.sap.sailing.domain.common.impl.DegreeBearingImpl;
|
||||
import com.sap.sailing.gwt.ui.client.Timer;
|
||||
import com.sap.sailing.gwt.ui.shared.SimulatorWindDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.WindFieldDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.WindFieldGenParamsDTO;
|
||||
import com.sap.sailing.gwt.ui.simulator.racemap.FullCanvasOverlay;
|
||||
import com.sap.sailing.gwt.ui.simulator.util.ToolTip;
|
||||
import com.sap.sse.gwt.client.player.Timer;
|
||||
|
||||
/**
|
||||
* A google map overlay based on a HTML5 canvas for drawing a wind field. The overlay covers the whole map and displays
|
||||
|
||||
+1
-1
@@ -20,11 +20,11 @@ import com.google.gwt.maps.client.base.LatLng;
|
||||
import com.google.gwt.maps.client.base.Point;
|
||||
import com.sap.sailing.domain.common.dto.PositionDTO;
|
||||
import com.sap.sailing.domain.common.impl.Util.Pair;
|
||||
import com.sap.sailing.gwt.ui.client.Timer;
|
||||
import com.sap.sailing.gwt.ui.shared.SimulatorWindDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.WindFieldDTO;
|
||||
import com.sap.sailing.gwt.ui.simulator.racemap.FullCanvasOverlay;
|
||||
import com.sap.sailing.gwt.ui.simulator.util.WindGridColorPalette;
|
||||
import com.sap.sse.gwt.client.player.Timer;
|
||||
|
||||
/**
|
||||
* A google map overlay based on a HTML5 canvas for representing a wind field as a heat map. The overlay covers the
|
||||
|
||||
+1
-1
@@ -17,10 +17,10 @@ import com.google.gwt.maps.client.MapWidget;
|
||||
import com.google.gwt.maps.client.base.LatLng;
|
||||
import com.google.gwt.maps.client.base.Point;
|
||||
import com.sap.sailing.domain.common.dto.PositionDTO;
|
||||
import com.sap.sailing.gwt.ui.client.Timer;
|
||||
import com.sap.sailing.gwt.ui.shared.WindLinesDTO;
|
||||
import com.sap.sailing.gwt.ui.simulator.racemap.FullCanvasOverlay;
|
||||
import com.sap.sailing.gwt.ui.simulator.util.LineSegment;
|
||||
import com.sap.sse.gwt.client.player.Timer;
|
||||
|
||||
public class WindLineCanvasOverlay extends FullCanvasOverlay implements TimeListenerWithStoppingCriteria {
|
||||
|
||||
|
||||
+1
-1
@@ -17,11 +17,11 @@ import com.google.gwt.maps.client.base.LatLng;
|
||||
import com.google.gwt.maps.client.base.Point;
|
||||
import com.sap.sailing.domain.common.dto.PositionDTO;
|
||||
import com.sap.sailing.domain.common.impl.DegreeBearingImpl;
|
||||
import com.sap.sailing.gwt.ui.client.Timer;
|
||||
import com.sap.sailing.gwt.ui.shared.SimulatorWindDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.WindFieldDTO;
|
||||
import com.sap.sailing.gwt.ui.simulator.racemap.FullCanvasOverlay;
|
||||
import com.sap.sailing.gwt.ui.simulator.util.ToolTip;
|
||||
import com.sap.sse.gwt.client.player.Timer;
|
||||
|
||||
/**
|
||||
* A google map overlay based on a HTML5 canvas for drawing a wind field. The overlay covers the whole map and displays
|
||||
|
||||
Regular → Executable
+1
-1
@@ -10,11 +10,11 @@ import com.google.gwt.json.client.JSONNumber;
|
||||
import com.google.gwt.json.client.JSONObject;
|
||||
import com.google.gwt.json.client.JSONString;
|
||||
import com.google.gwt.maps.client.base.LatLng;
|
||||
import com.sap.sailing.gwt.ui.client.Timer;
|
||||
import com.sap.sailing.gwt.ui.shared.SimulatorWindDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.WindFieldDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.WindFieldGenParamsDTO;
|
||||
import com.sap.sailing.gwt.ui.simulator.racemap.FullCanvasOverlay;
|
||||
import com.sap.sse.gwt.client.player.Timer;
|
||||
|
||||
/**
|
||||
* A google map overlay based on a HTML5 canvas for drawing a wind field. The overlay covers the whole map and displays
|
||||
|
||||
+2
-2
@@ -46,11 +46,11 @@ import com.sap.sailing.gwt.ui.adminconsole.LeaderboardConfigPanel.AnchorCell;
|
||||
import com.sap.sailing.gwt.ui.client.ErrorReporter;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.client.Timer;
|
||||
import com.sap.sailing.gwt.ui.client.Timer.PlayModes;
|
||||
import com.sap.sailing.gwt.ui.client.URLEncoder;
|
||||
import com.sap.sailing.gwt.ui.shared.EventDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.StrippedLeaderboardDTO;
|
||||
import com.sap.sse.gwt.client.player.Timer;
|
||||
import com.sap.sse.gwt.client.player.Timer.PlayModes;
|
||||
|
||||
/**
|
||||
* An overview panel for sailing events
|
||||
|
||||
+2
-2
@@ -44,12 +44,12 @@ import com.sap.sailing.gwt.ui.adminconsole.LeaderboardConfigPanel.AnchorCell;
|
||||
import com.sap.sailing.gwt.ui.client.ErrorReporter;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.client.Timer;
|
||||
import com.sap.sailing.gwt.ui.client.Timer.PlayModes;
|
||||
import com.sap.sailing.gwt.ui.client.URLEncoder;
|
||||
import com.sap.sailing.gwt.ui.client.shared.components.CollapsablePanel;
|
||||
import com.sap.sailing.gwt.ui.shared.LeaderboardGroupDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.StrippedLeaderboardDTO;
|
||||
import com.sap.sse.gwt.client.player.Timer;
|
||||
import com.sap.sse.gwt.client.player.Timer.PlayModes;
|
||||
|
||||
/**
|
||||
*
|
||||
|
||||
+2
-2
@@ -39,14 +39,14 @@ import com.sap.sailing.gwt.ui.client.ErrorReporter;
|
||||
import com.sap.sailing.gwt.ui.client.HasWelcomeWidget;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.client.Timer;
|
||||
import com.sap.sailing.gwt.ui.client.Timer.PlayModes;
|
||||
import com.sap.sailing.gwt.ui.client.shared.panels.WelcomeWidget;
|
||||
import com.sap.sailing.gwt.ui.raceboard.RaceBoardViewConfiguration;
|
||||
import com.sap.sailing.gwt.ui.shared.LeaderboardGroupDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RegattaDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.SeriesDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.StrippedLeaderboardDTO;
|
||||
import com.sap.sse.gwt.client.player.Timer;
|
||||
import com.sap.sse.gwt.client.player.Timer.PlayModes;
|
||||
|
||||
public class LeaderboardGroupPanel extends SimplePanel implements HasWelcomeWidget {
|
||||
|
||||
|
||||
+2
-2
@@ -24,8 +24,6 @@ import com.sap.sailing.gwt.ui.client.RaceTimesInfoProvider;
|
||||
import com.sap.sailing.gwt.ui.client.RaceTimesInfoProviderListener;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.client.Timer;
|
||||
import com.sap.sailing.gwt.ui.client.Timer.PlayModes;
|
||||
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel;
|
||||
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardSettings;
|
||||
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardSettingsFactory;
|
||||
@@ -33,6 +31,8 @@ import com.sap.sailing.gwt.ui.raceboard.RaceBoardPanel;
|
||||
import com.sap.sailing.gwt.ui.raceboard.RaceBoardViewConfiguration;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceTimesInfoDTO;
|
||||
import com.sap.sse.gwt.client.async.AsyncActionsExecutor;
|
||||
import com.sap.sse.gwt.client.player.Timer;
|
||||
import com.sap.sse.gwt.client.player.Timer.PlayModes;
|
||||
import com.sap.sse.gwt.client.useragent.UserAgentDetails;
|
||||
|
||||
public class TVViewController implements RaceTimesInfoProviderListener {
|
||||
|
||||
Reference in new issue
Block a user