diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/mock/MockedTrackedRace.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/mock/MockedTrackedRace.java index 5e86d04aa60..4b311f7d7cd 100755 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/mock/MockedTrackedRace.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/mock/MockedTrackedRace.java @@ -495,11 +495,6 @@ public class MockedTrackedRace implements DynamicTrackedRace { DynamicRaceDefinitionSet raceDefinitionSetToUpdate, boolean useMarkPassingcalculator) { return null; } - - @Override - public TrackedRace getPreviousRaceInExecutionOrder(TrackedRace race) { - return null; - } }; } diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackedRegatta.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackedRegatta.java index 17040171583..227a8a216f5 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackedRegatta.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackedRegatta.java @@ -73,9 +73,4 @@ public interface TrackedRegatta extends Serializable { void removeTrackedRace(RaceDefinition raceDefinition); - /** - * Parameter race is a {@link TrackedRace} from which the method returns the previous {@link TrackedRace} in the execution order of a {@link Regatta}. - * */ - TrackedRace getPreviousRaceInExecutionOrder(TrackedRace race); - } \ No newline at end of file diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/DynamicTrackedRaceImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/DynamicTrackedRaceImpl.java index 5b71bf2df0a..567f59de16f 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/DynamicTrackedRaceImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/DynamicTrackedRaceImpl.java @@ -46,7 +46,6 @@ import com.sap.sailing.domain.tracking.RaceChangeListener; import com.sap.sailing.domain.tracking.RaceExecutionOrderProvider; import com.sap.sailing.domain.tracking.StartTimeChangedListener; import com.sap.sailing.domain.tracking.TrackedLeg; -import com.sap.sailing.domain.tracking.TrackedRace; import com.sap.sailing.domain.tracking.TrackedRaceStatus; import com.sap.sailing.domain.tracking.TrackedRegatta; import com.sap.sailing.domain.tracking.WindStore; @@ -661,15 +660,8 @@ DynamicTrackedRace, GPSTrackListener { TimePoint startOfTracking = getStartOfTracking(); TimePoint endOfRace = getEndOfRace(); TimePoint endOfTracking = getEndOfTracking(); - TrackedRace previosRaceInExecutionOrder = getTrackedRegatta().getPreviousRaceInExecutionOrder(this); - long conditional_time_before_start_to_track_wind; - if(previosRaceInExecutionOrder == null || previosRaceInExecutionOrder.getEndOfTracking() != null || !previosRaceInExecutionOrder.hasWindData()){ - conditional_time_before_start_to_track_wind = EXTRA_LONG_TIME_BEFORE_START_TO_TRACK_WIND_IN_MILLISECONDS; - }else{ - conditional_time_before_start_to_track_wind = TIME_BEFORE_START_TO_TRACK_WIND_IN_MILLISECONDS; - } - if ((startOfTracking == null || !startOfTracking.minus(conditional_time_before_start_to_track_wind).after(wind.getTimePoint()) || - (startOfRace != null && !startOfRace.minus(conditional_time_before_start_to_track_wind).after(wind.getTimePoint()))) + if ((startOfTracking == null || !startOfTracking.minus(TrackedRaceImpl.TIME_BEFORE_START_TO_TRACK_WIND_MILLIS).after(wind.getTimePoint()) || + (startOfRace != null && !startOfRace.minus(TrackedRaceImpl.TIME_BEFORE_START_TO_TRACK_WIND_MILLIS).after(wind.getTimePoint()))) && // Caution: don't add to endOfTracking; it may be the end of time, leading to a wrap-around / overflow (endOfTracking == null || endOfTracking.after(wind.getTimePoint().minus(TimingConstants.IS_LIVE_GRACE_PERIOD_IN_MILLIS)) || diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java index 07ce24c9fcb..77ed7eadc63 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java @@ -152,13 +152,8 @@ public abstract class TrackedRaceImpl extends TrackedRaceWithWindEssentials impl // TODO make this variable private static final long DELAY_FOR_CACHE_CLEARING_IN_MILLISECONDS = 7500; - public static final long TIME_BEFORE_START_TO_TRACK_WIND_IN_MILLISECONDS = 4 * 60 * 1000l; // let wind start four minutes before race - - /** - * To make wind accessible 30 minutes before first race starts, there is a additional time buffer to record wind. - */ - public static final long EXTRA_LONG_TIME_BEFORE_START_TO_TRACK_WIND_IN_MILLISECONDS = 30 * 60 * 1000l; - + public static final long TIME_BEFORE_START_TO_TRACK_WIND_MILLIS = 4 * 60 * 1000l; // let wind start four minutes before race + private TrackedRaceStatus status; private final Object statusNotifier; diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRegattaImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRegattaImpl.java index c4fa256a9e0..32532ee476e 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRegattaImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRegattaImpl.java @@ -7,8 +7,6 @@ import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; -import java.util.Iterator; -import java.util.List; import java.util.Map; import java.util.Set; import java.util.logging.Level; @@ -16,13 +14,9 @@ import java.util.logging.Logger; import com.sap.sailing.domain.base.BoatClass; import com.sap.sailing.domain.base.Competitor; -import com.sap.sailing.domain.base.Fleet; -import com.sap.sailing.domain.base.RaceColumn; import com.sap.sailing.domain.base.RaceDefinition; import com.sap.sailing.domain.base.Regatta; -import com.sap.sailing.domain.base.Series; import com.sap.sailing.domain.base.Sideline; -import com.sap.sailing.domain.base.impl.AbstractRaceColumnListener; import com.sap.sailing.domain.common.NoWindException; import com.sap.sailing.domain.racelog.tracking.GPSFixStore; import com.sap.sailing.domain.tracking.DynamicRaceDefinitionSet; @@ -32,16 +26,8 @@ import com.sap.sailing.domain.tracking.TrackedRace; import com.sap.sailing.domain.tracking.TrackedRegatta; import com.sap.sailing.domain.tracking.WindStore; import com.sap.sse.common.TimePoint; -import com.sap.sse.util.SmartFutureCache; -import com.sap.sse.util.SmartFutureCache.AbstractCacheUpdater; -import com.sap.sse.util.SmartFutureCache.EmptyUpdateInterval; - -import difflib.PatchFailedException; public class TrackedRegattaImpl implements TrackedRegatta { - - private RaceExecutionOrderCache raceExecutionOrderCache; - private static final long serialVersionUID = 6480508193567014285L; private static final Logger logger = Logger.getLogger(TrackedRegattaImpl.class.getName()); @@ -57,13 +43,11 @@ public class TrackedRegattaImpl implements TrackedRegatta { this.trackedRaces = new HashMap(); this.trackedRacesByBoatClass = new HashMap>(); raceListeners = new HashSet(); - this.raceExecutionOrderCache = new RaceExecutionOrderCache(); } private void readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException { ois.defaultReadObject(); this.raceListeners = new HashSet(); - this.raceExecutionOrderCache = new RaceExecutionOrderCache(); } private void writeObject(ObjectOutputStream oos) throws IOException { @@ -200,103 +184,5 @@ public class TrackedRegattaImpl implements TrackedRegatta { addTrackedRace(result); return result; } - - @Override - public TrackedRace getPreviousRaceInExecutionOrder(TrackedRace race) { - List racesInOrder = raceExecutionOrderCache.getRacesInExecutionOrder(); - if (racesInOrder != null) { - int indexOfRace = racesInOrder.indexOf(race); - if (indexOfRace != -1 && indexOfRace != 0) { - return racesInOrder.get(indexOfRace - 1); - } - } - return null; - } - - private class RaceExecutionOrderCache extends AbstractRaceColumnListener { - private transient SmartFutureCache, EmptyUpdateInterval> racesOrderCache; - private final String RACES_ORDER_LIST_CACHE_KEY = "racesOrderCacheKey"; - private final String RACES_ORDER_LIST_LOCKS_NAME = getClass().getName(); - private static final long serialVersionUID = -1016823551825618490L; - - public RaceExecutionOrderCache() { - racesOrderCache = createRacesOrderCache(); - racesOrderCache.triggerUpdate(RACES_ORDER_LIST_CACHE_KEY,/*update interval*/ null); - getRegatta().addRaceColumnListener(this); - } - - public List getRacesInExecutionOrder() { - List result; - result = racesOrderCache.get(RACES_ORDER_LIST_CACHE_KEY,/*waitForLatest*/ true); - return result; - } - - @Override - public void trackedRaceLinked(RaceColumn raceColumn, Fleet fleet, TrackedRace trackedRace) { - racesOrderCache.triggerUpdate(RACES_ORDER_LIST_CACHE_KEY,/*update interval*/ null); - } - - @Override - public void trackedRaceUnlinked(RaceColumn raceColumn, Fleet fleet, TrackedRace trackedRace) { - racesOrderCache.triggerUpdate(RACES_ORDER_LIST_CACHE_KEY,/*update interval*/ null); - } - - @Override - public void raceColumnAddedToContainer(RaceColumn raceColumn) { - racesOrderCache.triggerUpdate(RACES_ORDER_LIST_CACHE_KEY,/*update interval*/ null); - } - - @Override - public void raceColumnRemovedFromContainer(RaceColumn raceColumn) { - racesOrderCache.triggerUpdate(RACES_ORDER_LIST_CACHE_KEY,/*update interval*/ null); - } - - @Override - public void raceColumnMoved(RaceColumn raceColumn, int newIndex) { - racesOrderCache.triggerUpdate(RACES_ORDER_LIST_CACHE_KEY,/*update interval*/ null); - } - - private List reloadRacesInExecutionOrder() { - List raceIdListInExecutionOrder = new ArrayList(); - Iterator seriesInRegatta = getRegatta().getSeries().iterator(); - while (seriesInRegatta.hasNext()) { - Series currentSeries = seriesInRegatta.next(); - Iterator raceColumns = currentSeries.getRaceColumns().iterator(); - while (raceColumns.hasNext()) { - RaceColumn currentRaceColumn = raceColumns.next(); - Iterator fleetsInRaceColumn = currentRaceColumn.getFleets().iterator(); - while (fleetsInRaceColumn.hasNext()) { - TrackedRace trackedRaceInColumnForFleet = currentRaceColumn.getTrackedRace(fleetsInRaceColumn - .next()); - if (trackedRaceInColumnForFleet != null) { - raceIdListInExecutionOrder.add(trackedRaceInColumnForFleet); - } - } - } - } - return raceIdListInExecutionOrder; - } - - private SmartFutureCache, EmptyUpdateInterval> createRacesOrderCache() { - return new SmartFutureCache, SmartFutureCache.EmptyUpdateInterval>( - new AbstractCacheUpdater, SmartFutureCache.EmptyUpdateInterval>() { - - @Override - public List computeCacheUpdate(String key, - EmptyUpdateInterval updateInterval) throws Exception { - if (key.equals(RACES_ORDER_LIST_CACHE_KEY)) { - return reloadRacesInExecutionOrder(); - } else { - return null; - } - } - }, RACES_ORDER_LIST_LOCKS_NAME); - } - - private void readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException, PatchFailedException { - ois.defaultReadObject(); - racesOrderCache = createRacesOrderCache(); - } - } } diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/VirtualWindFixesAsNavigableSet.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/VirtualWindFixesAsNavigableSet.java index 02a948344d1..70fe342982b 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/VirtualWindFixesAsNavigableSet.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/VirtualWindFixesAsNavigableSet.java @@ -141,7 +141,7 @@ public abstract class VirtualWindFixesAsNavigableSet extends AbstractUnmodifiabl protected TimePoint getFrom() { final TimePoint startOfRace = getTrackedRace().getStartOfRace(); return from == null ? startOfRace == null ? new MillisecondsTimePoint(Long.MAX_VALUE) - : floorToResolution(startOfRace.minus(TrackedRaceImpl.TIME_BEFORE_START_TO_TRACK_WIND_IN_MILLISECONDS)) : from; + : floorToResolution(startOfRace.minus(TrackedRaceImpl.TIME_BEFORE_START_TO_TRACK_WIND_MILLIS)) : from; } /** diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/VirtualWindTrackImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/VirtualWindTrackImpl.java index 0585df1eb03..3c0429c9537 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/VirtualWindTrackImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/VirtualWindTrackImpl.java @@ -63,7 +63,7 @@ public abstract class VirtualWindTrackImpl extends WindTrackImpl { final TimePoint startOfRace = getTrackedRace().getStartOfRace(); TimePoint timePointOfNewestEvent = getTrackedRace().getTimePointOfNewestEvent(); if (startOfRace != null) { - TimePoint fourMinutesBeforeRaceStartTimePoint = startOfRace.minus(TrackedRaceImpl.TIME_BEFORE_START_TO_TRACK_WIND_IN_MILLISECONDS); // let wind tracks start four minutes before start + TimePoint fourMinutesBeforeRaceStartTimePoint = startOfRace.minus(TrackedRaceImpl.TIME_BEFORE_START_TO_TRACK_WIND_MILLIS); // let wind tracks start four minutes before start if (timePointOfNewestEvent != null) { if (at.compareTo(fourMinutesBeforeRaceStartTimePoint) < 0) { adjustedAt = fourMinutesBeforeRaceStartTimePoint; diff --git a/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/MockedTrackedRace.java b/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/MockedTrackedRace.java index e8330bc26e6..72d10813ee1 100755 --- a/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/MockedTrackedRace.java +++ b/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/MockedTrackedRace.java @@ -491,11 +491,6 @@ public class MockedTrackedRace implements DynamicTrackedRace { boolean useMarkPassingCalculator) { return null; } - - @Override - public TrackedRace getPreviousRaceInExecutionOrder(TrackedRace race) { - return null; - } }; }