Revert "Merge remote-tracking branch 'server/ribdashboard' into ribdashboard"

This reverts commit 1fc692e4d3, reversing
changes made to 1c8bb3b414.
This commit is contained in:
Alexander Ries committed 2015-05-21 14:53:49 +02:00
1 parent 3069a2d70d
commit 73684d27c8
8 files changed
+6 -148

No files matched your search

@@ -495,11 +495,6 @@ public class MockedTrackedRace implements DynamicTrackedRace {
DynamicRaceDefinitionSet raceDefinitionSetToUpdate, boolean useMarkPassingcalculator) { DynamicRaceDefinitionSet raceDefinitionSetToUpdate, boolean useMarkPassingcalculator) {
return null; return null;
} }
@Override
public TrackedRace getPreviousRaceInExecutionOrder(TrackedRace race) {
return null;
}
}; };
} }
@@ -73,9 +73,4 @@ public interface TrackedRegatta extends Serializable {
void removeTrackedRace(RaceDefinition raceDefinition); void removeTrackedRace(RaceDefinition raceDefinition);
/**
* Parameter <code>race</code> 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);
} }
@@ -46,7 +46,6 @@ import com.sap.sailing.domain.tracking.RaceChangeListener;
import com.sap.sailing.domain.tracking.RaceExecutionOrderProvider; import com.sap.sailing.domain.tracking.RaceExecutionOrderProvider;
import com.sap.sailing.domain.tracking.StartTimeChangedListener; import com.sap.sailing.domain.tracking.StartTimeChangedListener;
import com.sap.sailing.domain.tracking.TrackedLeg; 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.TrackedRaceStatus;
import com.sap.sailing.domain.tracking.TrackedRegatta; import com.sap.sailing.domain.tracking.TrackedRegatta;
import com.sap.sailing.domain.tracking.WindStore; import com.sap.sailing.domain.tracking.WindStore;
@@ -661,15 +660,8 @@ DynamicTrackedRace, GPSTrackListener<Competitor, GPSFixMoving> {
TimePoint startOfTracking = getStartOfTracking(); TimePoint startOfTracking = getStartOfTracking();
TimePoint endOfRace = getEndOfRace(); TimePoint endOfRace = getEndOfRace();
TimePoint endOfTracking = getEndOfTracking(); TimePoint endOfTracking = getEndOfTracking();
TrackedRace previosRaceInExecutionOrder = getTrackedRegatta().getPreviousRaceInExecutionOrder(this); if ((startOfTracking == null || !startOfTracking.minus(TrackedRaceImpl.TIME_BEFORE_START_TO_TRACK_WIND_MILLIS).after(wind.getTimePoint()) ||
long conditional_time_before_start_to_track_wind; (startOfRace != null && !startOfRace.minus(TrackedRaceImpl.TIME_BEFORE_START_TO_TRACK_WIND_MILLIS).after(wind.getTimePoint())))
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())))
&& &&
// Caution: don't add to endOfTracking; it may be the end of time, leading to a wrap-around / overflow // 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)) || (endOfTracking == null || endOfTracking.after(wind.getTimePoint().minus(TimingConstants.IS_LIVE_GRACE_PERIOD_IN_MILLIS)) ||
@@ -152,13 +152,8 @@ public abstract class TrackedRaceImpl extends TrackedRaceWithWindEssentials impl
// TODO make this variable // TODO make this variable
private static final long DELAY_FOR_CACHE_CLEARING_IN_MILLISECONDS = 7500; 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 public static final long TIME_BEFORE_START_TO_TRACK_WIND_MILLIS = 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;
private TrackedRaceStatus status; private TrackedRaceStatus status;
private final Object statusNotifier; private final Object statusNotifier;
@@ -7,8 +7,6 @@ import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.logging.Level; 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.BoatClass;
import com.sap.sailing.domain.base.Competitor; 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.RaceDefinition;
import com.sap.sailing.domain.base.Regatta; 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.Sideline;
import com.sap.sailing.domain.base.impl.AbstractRaceColumnListener;
import com.sap.sailing.domain.common.NoWindException; import com.sap.sailing.domain.common.NoWindException;
import com.sap.sailing.domain.racelog.tracking.GPSFixStore; import com.sap.sailing.domain.racelog.tracking.GPSFixStore;
import com.sap.sailing.domain.tracking.DynamicRaceDefinitionSet; 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.TrackedRegatta;
import com.sap.sailing.domain.tracking.WindStore; import com.sap.sailing.domain.tracking.WindStore;
import com.sap.sse.common.TimePoint; 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 { public class TrackedRegattaImpl implements TrackedRegatta {
private RaceExecutionOrderCache raceExecutionOrderCache;
private static final long serialVersionUID = 6480508193567014285L; private static final long serialVersionUID = 6480508193567014285L;
private static final Logger logger = Logger.getLogger(TrackedRegattaImpl.class.getName()); private static final Logger logger = Logger.getLogger(TrackedRegattaImpl.class.getName());
@@ -57,13 +43,11 @@ public class TrackedRegattaImpl implements TrackedRegatta {
this.trackedRaces = new HashMap<RaceDefinition, TrackedRace>(); this.trackedRaces = new HashMap<RaceDefinition, TrackedRace>();
this.trackedRacesByBoatClass = new HashMap<BoatClass, Collection<TrackedRace>>(); this.trackedRacesByBoatClass = new HashMap<BoatClass, Collection<TrackedRace>>();
raceListeners = new HashSet<RaceListener>(); raceListeners = new HashSet<RaceListener>();
this.raceExecutionOrderCache = new RaceExecutionOrderCache();
} }
private void readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException { private void readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException {
ois.defaultReadObject(); ois.defaultReadObject();
this.raceListeners = new HashSet<RaceListener>(); this.raceListeners = new HashSet<RaceListener>();
this.raceExecutionOrderCache = new RaceExecutionOrderCache();
} }
private void writeObject(ObjectOutputStream oos) throws IOException { private void writeObject(ObjectOutputStream oos) throws IOException {
@@ -200,103 +184,5 @@ public class TrackedRegattaImpl implements TrackedRegatta {
addTrackedRace(result); addTrackedRace(result);
return result; return result;
} }
@Override
public TrackedRace getPreviousRaceInExecutionOrder(TrackedRace race) {
List<TrackedRace> 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<String, List<TrackedRace>, 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<TrackedRace> getRacesInExecutionOrder() {
List<TrackedRace> 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<TrackedRace> reloadRacesInExecutionOrder() {
List<TrackedRace> raceIdListInExecutionOrder = new ArrayList<TrackedRace>();
Iterator<? extends Series> seriesInRegatta = getRegatta().getSeries().iterator();
while (seriesInRegatta.hasNext()) {
Series currentSeries = seriesInRegatta.next();
Iterator<? extends RaceColumn> raceColumns = currentSeries.getRaceColumns().iterator();
while (raceColumns.hasNext()) {
RaceColumn currentRaceColumn = raceColumns.next();
Iterator<? extends Fleet> fleetsInRaceColumn = currentRaceColumn.getFleets().iterator();
while (fleetsInRaceColumn.hasNext()) {
TrackedRace trackedRaceInColumnForFleet = currentRaceColumn.getTrackedRace(fleetsInRaceColumn
.next());
if (trackedRaceInColumnForFleet != null) {
raceIdListInExecutionOrder.add(trackedRaceInColumnForFleet);
}
}
}
}
return raceIdListInExecutionOrder;
}
private SmartFutureCache<String, List<TrackedRace>, EmptyUpdateInterval> createRacesOrderCache() {
return new SmartFutureCache<String, List<TrackedRace>, SmartFutureCache.EmptyUpdateInterval>(
new AbstractCacheUpdater<String, List<TrackedRace>, SmartFutureCache.EmptyUpdateInterval>() {
@Override
public List<TrackedRace> 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();
}
}
} }
@@ -141,7 +141,7 @@ public abstract class VirtualWindFixesAsNavigableSet extends AbstractUnmodifiabl
protected TimePoint getFrom() { protected TimePoint getFrom() {
final TimePoint startOfRace = getTrackedRace().getStartOfRace(); final TimePoint startOfRace = getTrackedRace().getStartOfRace();
return from == null ? startOfRace == null ? new MillisecondsTimePoint(Long.MAX_VALUE) 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;
} }
/** /**
@@ -63,7 +63,7 @@ public abstract class VirtualWindTrackImpl extends WindTrackImpl {
final TimePoint startOfRace = getTrackedRace().getStartOfRace(); final TimePoint startOfRace = getTrackedRace().getStartOfRace();
TimePoint timePointOfNewestEvent = getTrackedRace().getTimePointOfNewestEvent(); TimePoint timePointOfNewestEvent = getTrackedRace().getTimePointOfNewestEvent();
if (startOfRace != null) { 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 (timePointOfNewestEvent != null) {
if (at.compareTo(fourMinutesBeforeRaceStartTimePoint) < 0) { if (at.compareTo(fourMinutesBeforeRaceStartTimePoint) < 0) {
adjustedAt = fourMinutesBeforeRaceStartTimePoint; adjustedAt = fourMinutesBeforeRaceStartTimePoint;
@@ -491,11 +491,6 @@ public class MockedTrackedRace implements DynamicTrackedRace {
boolean useMarkPassingCalculator) { boolean useMarkPassingCalculator) {
return null; return null;
} }
@Override
public TrackedRace getPreviousRaceInExecutionOrder(TrackedRace race) {
return null;
}
}; };
} }