From 3d937b82bc5240e0750e4f2ca6684215bc5e36ec Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Mon, 20 Feb 2012 07:03:00 +0100 Subject: [PATCH] adjust min/max and leg markers each time the RaceTimesInfoDTO is requested --- .../sailing/gwt/ui/client/RaceTimePanel.java | 68 ++++++++----------- .../sap/sailing/gwt/ui/client/TimePanel.java | 4 +- .../gwt/ui/shared/RaceTimesInfoDTO.java | 8 --- 3 files changed, 31 insertions(+), 49 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/RaceTimePanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/RaceTimePanel.java index a674bbdb8c3..405452a4e16 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/RaceTimePanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/RaceTimePanel.java @@ -21,8 +21,6 @@ public class RaceTimePanel extends TimePanel implements R private long refreshIntervalTimeInfos = 3000; - private boolean isTimerInitialized = false; - private RaceTimesInfoDTO lastRaceTimesInfo; public RaceTimePanel(final SailingServiceAsync sailingService, Timer timer, ErrorReporter errorReporter, StringMessages stringMessages) { @@ -70,7 +68,6 @@ public class RaceTimePanel extends TimePanel implements R @Override public void updateSettings(RaceTimePanelSettings newSettings) { super.updateSettings(newSettings); - isTimerInitialized = false; readRaceTimesInfo(); } @@ -88,30 +85,28 @@ public class RaceTimePanel extends TimePanel implements R return new RaceTimePanelSettingsDialogComponent(getSettings(), stringMessages); } - private void updateTimeInfos(RaceTimesInfoDTO raceTimesInfo) { + private void updateTimeInfo(RaceTimesInfoDTO raceTimesInfo) { lastRaceTimesInfo = raceTimesInfo; if (raceTimesInfo == null) { // in case the race is not tracked anymore we reset the timer reset(); } else { if (raceTimesInfo.startOfTracking != null && raceTimesInfo.timePointOfNewestEvent != null) { - // we set here the min and max of the time slider, the start and end of the race as well as the known leg markers - // FIXME bug #311: this "if" should probably be removed and the code should always be executed - if (!isTimerInitialized) { - long livePlayDelayInMillis = timer.getLivePlayDelayInMillis(); - long liveTimePointInMillis = System.currentTimeMillis() - livePlayDelayInMillis; - if (liveTimePointInMillis < raceTimesInfo.timePointOfNewestEvent.getTime() && - liveTimePointInMillis > raceTimesInfo.startOfTracking.getTime()) { - // don't worry; this will only fire an event if something actually changed - timer.setPlayMode(PlayModes.Live); - } else { - timer.setPlayMode(PlayModes.Replay); - } - boolean minMaxInitialized = initMinMax(raceTimesInfo); - boolean timerPositionInitialized = initTimerPosition(raceTimesInfo); - if (minMaxInitialized && timerPositionInitialized) { - isTimerInitialized = true; - } + // we set here the min and max of the time slider, the start and end of the race as well as the known + // leg markers + long livePlayDelayInMillis = timer.getLivePlayDelayInMillis(); + long liveTimePointInMillis = System.currentTimeMillis() - livePlayDelayInMillis; + if (liveTimePointInMillis < raceTimesInfo.timePointOfNewestEvent.getTime() + && liveTimePointInMillis > raceTimesInfo.startOfTracking.getTime()) { + // don't worry; this will only fire an event if something actually changed + timer.setPlayMode(PlayModes.Live); + } else { + timer.setPlayMode(PlayModes.Replay); + } + boolean timerAlreadyInitialized = getMin() != null && getMax() != null && sliderBar.getCurrentValue() != null; + initMinMax(raceTimesInfo); + if (!timerAlreadyInitialized) { + initTimerPosition(raceTimesInfo); } updateLegMarkers(raceTimesInfo); } else { @@ -125,35 +120,31 @@ public class RaceTimePanel extends TimePanel implements R public void onRaceSelectionChange(List selectedRaces) { if (selectedRaces != null && !selectedRaces.isEmpty()) { raceIdentifier = selectedRaces.iterator().next(); - isTimerInitialized = false; readRaceTimesInfo(); } } /** - * @return whether both, minimum and maximum were initialized using {@link #setMinMax(Date, Date)} + * Obtains the min/max range for the slider bar from newRaceTimesInfo and adjusts the slider bar if + * needed. Since we extend the slider bar to the right when playing across the "end of time," we don't want to + * constrain it back again here. Therefore, the max value is never reduced here but at best initially set if it + * was null before, or extended to a later point in time. */ - private boolean initMinMax(RaceTimesInfoDTO newRaceTimesInfo) { + private void initMinMax(RaceTimesInfoDTO newRaceTimesInfo) { Date min = null; Date max = null; + if (newRaceTimesInfo.startOfTracking != null) { + min = newRaceTimesInfo.startOfTracking; + } else if (newRaceTimesInfo.startOfRace != null) { + min = new Date(newRaceTimesInfo.startOfRace.getTime() - 5 * 60 * 1000); + } switch (timer.getPlayMode()) { case Live: - if (newRaceTimesInfo.startOfTracking != null) { - min = newRaceTimesInfo.startOfTracking; - } - if (newRaceTimesInfo.startOfRace != null) { - min = new Date(newRaceTimesInfo.startOfRace.getTime() - 5 * 60 * 1000); - } if (newRaceTimesInfo.timePointOfNewestEvent != null) { max = newRaceTimesInfo.timePointOfNewestEvent; } break; case Replay: - if (newRaceTimesInfo.startOfTracking != null) { - min = newRaceTimesInfo.startOfTracking; - } else if (newRaceTimesInfo.startOfRace != null) { - min = new Date(newRaceTimesInfo.startOfRace.getTime() - 5 * 60 * 1000); - } if (newRaceTimesInfo.endOfRace != null) { max = newRaceTimesInfo.endOfRace; } else if (newRaceTimesInfo.timePointOfNewestEvent != null) { @@ -161,11 +152,10 @@ public class RaceTimePanel extends TimePanel implements R } break; } - if (min != null && max != null) { + // never reduce max if it was already set + if (min != null && max != null && (getMax() == null || getMax().before(max))) { setMinMax(min, max); - return true; } - return false; } /** @@ -229,7 +219,7 @@ public class RaceTimePanel extends TimePanel implements R @Override public void onSuccess(RaceTimesInfoDTO raceTimesInfo) { // raceTimesInfo can be null if the race is not tracked anymore - updateTimeInfos(raceTimesInfo); + updateTimeInfo(raceTimesInfo); } }); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/TimePanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/TimePanel.java index 21f91c4ea61..66f5b647e5b 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/TimePanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/TimePanel.java @@ -279,11 +279,11 @@ public class TimePanel extends FormPanel implements } } - private Date getMin() { + protected Date getMin() { return min; } - private Date getMax() { + protected Date getMax() { return max; } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RaceTimesInfoDTO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RaceTimesInfoDTO.java index db0b0d8d469..05b9990183e 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RaceTimesInfoDTO.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RaceTimesInfoDTO.java @@ -69,14 +69,6 @@ public class RaceTimesInfoDTO implements IsSerializable { this.startOfTracking = startOfTracking; } - public Date getEndOfRace() { - return endOfRace; - } - - public void setEndOfRace(Date endOfRace) { - this.endOfRace = endOfRace; - } - public Date getTimePointOfLastEvent() { return timePointOfLastEvent; }