mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-11-03 17:49:40 +00:00
removed all RaceLog methods from TrackedRace and TrackedRaceImpl and
DynamicTrackedRace changed TrackedRaceImpl constructor again, all calling methods are changed appropriately
This commit is contained in:
1 parent
43ff1dc7fe
commit
7d6d72785e
47 files changed
+195
-461
No files matched your search
+2
-5
@@ -22,13 +22,12 @@ import org.junit.Test;
|
|||||||
import com.mongodb.BasicDBObject;
|
import com.mongodb.BasicDBObject;
|
||||||
import com.mongodb.DB;
|
import com.mongodb.DB;
|
||||||
import com.mongodb.DBCollection;
|
import com.mongodb.DBCollection;
|
||||||
import com.sap.sailing.domain.base.Mark;
|
|
||||||
import com.sap.sailing.domain.base.Competitor;
|
import com.sap.sailing.domain.base.Competitor;
|
||||||
|
import com.sap.sailing.domain.base.Mark;
|
||||||
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.Waypoint;
|
import com.sap.sailing.domain.base.Waypoint;
|
||||||
import com.sap.sailing.domain.common.impl.Util;
|
import com.sap.sailing.domain.common.impl.Util;
|
||||||
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
|
|
||||||
import com.sap.sailing.domain.swisstimingadapter.MessageType;
|
import com.sap.sailing.domain.swisstimingadapter.MessageType;
|
||||||
import com.sap.sailing.domain.swisstimingadapter.SailMasterConnector;
|
import com.sap.sailing.domain.swisstimingadapter.SailMasterConnector;
|
||||||
import com.sap.sailing.domain.swisstimingadapter.SailMasterTransceiver;
|
import com.sap.sailing.domain.swisstimingadapter.SailMasterTransceiver;
|
||||||
@@ -65,7 +64,6 @@ public class EndToEndListeningStoreAndFowardTest {
|
|||||||
private SwissTimingFactory swissTimingFactory;
|
private SwissTimingFactory swissTimingFactory;
|
||||||
|
|
||||||
private EmptyWindStore emptyWindStore;
|
private EmptyWindStore emptyWindStore;
|
||||||
private EmptyRaceLogStore emptyRaceLogStore;
|
|
||||||
private RacingEventService racingEventService;
|
private RacingEventService racingEventService;
|
||||||
|
|
||||||
private List<RacesHandle> raceHandles;
|
private List<RacesHandle> raceHandles;
|
||||||
@@ -85,7 +83,6 @@ public class EndToEndListeningStoreAndFowardTest {
|
|||||||
sendingStream = sendingSocket.getOutputStream();
|
sendingStream = sendingSocket.getOutputStream();
|
||||||
swissTimingFactory = SwissTimingFactory.INSTANCE;
|
swissTimingFactory = SwissTimingFactory.INSTANCE;
|
||||||
emptyWindStore = EmptyWindStore.INSTANCE;
|
emptyWindStore = EmptyWindStore.INSTANCE;
|
||||||
emptyRaceLogStore = EmptyRaceLogStore.INSTANCE;
|
|
||||||
transceiver = swissTimingFactory.createSailMasterTransceiver();
|
transceiver = swissTimingFactory.createSailMasterTransceiver();
|
||||||
DBCollection lastMessageCountCollection = db.getCollection(CollectionNames.LAST_MESSAGE_COUNT.name());
|
DBCollection lastMessageCountCollection = db.getCollection(CollectionNames.LAST_MESSAGE_COUNT.name());
|
||||||
lastMessageCountCollection.update(new BasicDBObject(),
|
lastMessageCountCollection.update(new BasicDBObject(),
|
||||||
@@ -339,7 +336,7 @@ public class EndToEndListeningStoreAndFowardTest {
|
|||||||
for (String raceToTrack : racesToTrack) {
|
for (String raceToTrack : racesToTrack) {
|
||||||
RacesHandle raceHandle = racingEventService.addSwissTimingRace(/* regattaToAddTo */ null /* use a default regatta */,
|
RacesHandle raceHandle = racingEventService.addSwissTimingRace(/* regattaToAddTo */ null /* use a default regatta */,
|
||||||
raceToTrack, "localhost", /* canSendRequests */
|
raceToTrack, "localhost", /* canSendRequests */
|
||||||
CLIENT_PORT, false, emptyWindStore, -1, emptyRaceLogStore);
|
CLIENT_PORT, false, emptyWindStore, -1);
|
||||||
raceHandles.add(raceHandle);
|
raceHandles.add(raceHandle);
|
||||||
if (connector == null) {
|
if (connector == null) {
|
||||||
connector = racingEventService.getSwissTimingFactory().getOrCreateSailMasterConnector("localhost",
|
connector = racingEventService.getSwissTimingFactory().getOrCreateSailMasterConnector("localhost",
|
||||||
|
|||||||
+1
-2
@@ -11,7 +11,6 @@ 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.Waypoint;
|
import com.sap.sailing.domain.base.Waypoint;
|
||||||
import com.sap.sailing.domain.common.TimePoint;
|
import com.sap.sailing.domain.common.TimePoint;
|
||||||
import com.sap.sailing.domain.racelog.RaceLogStore;
|
|
||||||
import com.sap.sailing.domain.swisstimingadapter.impl.DomainFactoryImpl;
|
import com.sap.sailing.domain.swisstimingadapter.impl.DomainFactoryImpl;
|
||||||
import com.sap.sailing.domain.tracking.GPSFixMoving;
|
import com.sap.sailing.domain.tracking.GPSFixMoving;
|
||||||
import com.sap.sailing.domain.tracking.MarkPassing;
|
import com.sap.sailing.domain.tracking.MarkPassing;
|
||||||
@@ -50,7 +49,7 @@ public interface DomainFactory {
|
|||||||
|
|
||||||
RaceTrackingConnectivityParameters createTrackingConnectivityParameters(String hostname, int port, String raceID,
|
RaceTrackingConnectivityParameters createTrackingConnectivityParameters(String hostname, int port, String raceID,
|
||||||
boolean canSendRequests, long delayToLiveInMillis,
|
boolean canSendRequests, long delayToLiveInMillis,
|
||||||
SwissTimingFactory swissTimingFactory, DomainFactory domainFactory, WindStore windStore, RaceLogStore raceLogStore,
|
SwissTimingFactory swissTimingFactory, DomainFactory domainFactory, WindStore windStore,
|
||||||
RaceSpecificMessageLoader messageLoader);
|
RaceSpecificMessageLoader messageLoader);
|
||||||
|
|
||||||
BoatClass getOrCreateBoatClassFromRaceID(String raceID);
|
BoatClass getOrCreateBoatClassFromRaceID(String raceID);
|
||||||
|
|||||||
+2
-3
@@ -6,7 +6,6 @@ import java.text.ParseException;
|
|||||||
|
|
||||||
import com.sap.sailing.domain.base.Regatta;
|
import com.sap.sailing.domain.base.Regatta;
|
||||||
import com.sap.sailing.domain.common.TimePoint;
|
import com.sap.sailing.domain.common.TimePoint;
|
||||||
import com.sap.sailing.domain.racelog.RaceLogStore;
|
|
||||||
import com.sap.sailing.domain.swisstimingadapter.impl.SwissTimingFactoryImpl;
|
import com.sap.sailing.domain.swisstimingadapter.impl.SwissTimingFactoryImpl;
|
||||||
import com.sap.sailing.domain.tracking.RaceTracker;
|
import com.sap.sailing.domain.tracking.RaceTracker;
|
||||||
import com.sap.sailing.domain.tracking.TrackedRegattaRegistry;
|
import com.sap.sailing.domain.tracking.TrackedRegattaRegistry;
|
||||||
@@ -52,11 +51,11 @@ public interface SwissTimingFactory {
|
|||||||
|
|
||||||
SwissTimingConfiguration createSwissTimingConfiguration(String name, String hostname, int port, boolean canSendRequests);
|
SwissTimingConfiguration createSwissTimingConfiguration(String name, String hostname, int port, boolean canSendRequests);
|
||||||
|
|
||||||
SwissTimingRaceTracker createRaceTracker(String raceID, String hostname, int port, boolean canSendRequests, long delayToLiveInMillis, WindStore windStore, RaceSpecificMessageLoader messageLoader, DomainFactory domainFactory, TrackedRegattaRegistry trackedRegattaRegistry, RaceLogStore raceLogStore) throws InterruptedException, UnknownHostException, IOException, ParseException;
|
SwissTimingRaceTracker createRaceTracker(String raceID, String hostname, int port, boolean canSendRequests, long delayToLiveInMillis, WindStore windStore, RaceSpecificMessageLoader messageLoader, DomainFactory domainFactory, TrackedRegattaRegistry trackedRegattaRegistry) throws InterruptedException, UnknownHostException, IOException, ParseException;
|
||||||
|
|
||||||
RaceTracker createRaceTracker(Regatta regatta, String raceID, String hostname, int port, boolean canSendRequests, long delayToLiveInMillis,
|
RaceTracker createRaceTracker(Regatta regatta, String raceID, String hostname, int port, boolean canSendRequests, long delayToLiveInMillis,
|
||||||
WindStore windStore, RaceSpecificMessageLoader messageLoader, DomainFactory domainFactory,
|
WindStore windStore, RaceSpecificMessageLoader messageLoader, DomainFactory domainFactory,
|
||||||
TrackedRegattaRegistry trackedRegattaRegistry, RaceLogStore raceLogStore) throws UnknownHostException, InterruptedException,
|
TrackedRegattaRegistry trackedRegattaRegistry) throws UnknownHostException, InterruptedException,
|
||||||
IOException, ParseException;
|
IOException, ParseException;
|
||||||
|
|
||||||
Race createRace(String raceId, String description, TimePoint startTime);
|
Race createRace(String raceId, String description, TimePoint startTime);
|
||||||
|
|||||||
+2
-3
@@ -30,7 +30,6 @@ import com.sap.sailing.domain.common.ScoringSchemeType;
|
|||||||
import com.sap.sailing.domain.common.TimePoint;
|
import com.sap.sailing.domain.common.TimePoint;
|
||||||
import com.sap.sailing.domain.common.impl.Util;
|
import com.sap.sailing.domain.common.impl.Util;
|
||||||
import com.sap.sailing.domain.common.impl.Util.Pair;
|
import com.sap.sailing.domain.common.impl.Util.Pair;
|
||||||
import com.sap.sailing.domain.racelog.RaceLogStore;
|
|
||||||
import com.sap.sailing.domain.swisstimingadapter.Course;
|
import com.sap.sailing.domain.swisstimingadapter.Course;
|
||||||
import com.sap.sailing.domain.swisstimingadapter.DomainFactory;
|
import com.sap.sailing.domain.swisstimingadapter.DomainFactory;
|
||||||
import com.sap.sailing.domain.swisstimingadapter.Fix;
|
import com.sap.sailing.domain.swisstimingadapter.Fix;
|
||||||
@@ -308,10 +307,10 @@ public class DomainFactoryImpl implements DomainFactory {
|
|||||||
@Override
|
@Override
|
||||||
public RaceTrackingConnectivityParameters createTrackingConnectivityParameters(String hostname, int port, String raceID,
|
public RaceTrackingConnectivityParameters createTrackingConnectivityParameters(String hostname, int port, String raceID,
|
||||||
boolean canSendRequests, long delayToLiveInMillis,
|
boolean canSendRequests, long delayToLiveInMillis,
|
||||||
SwissTimingFactory swissTimingFactory, DomainFactory domainFactory, WindStore windStore, RaceLogStore raceLogStore,
|
SwissTimingFactory swissTimingFactory, DomainFactory domainFactory, WindStore windStore,
|
||||||
RaceSpecificMessageLoader messageLoader) {
|
RaceSpecificMessageLoader messageLoader) {
|
||||||
return new SwissTimingTrackingConnectivityParameters(hostname, port, raceID, canSendRequests, delayToLiveInMillis,
|
return new SwissTimingTrackingConnectivityParameters(hostname, port, raceID, canSendRequests, delayToLiveInMillis,
|
||||||
swissTimingFactory, domainFactory, windStore, raceLogStore, messageLoader);
|
swissTimingFactory, domainFactory, windStore, messageLoader);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
+4
-6
@@ -9,7 +9,6 @@ import java.util.Map;
|
|||||||
import com.sap.sailing.domain.base.Regatta;
|
import com.sap.sailing.domain.base.Regatta;
|
||||||
import com.sap.sailing.domain.common.TimePoint;
|
import com.sap.sailing.domain.common.TimePoint;
|
||||||
import com.sap.sailing.domain.common.impl.Util.Triple;
|
import com.sap.sailing.domain.common.impl.Util.Triple;
|
||||||
import com.sap.sailing.domain.racelog.RaceLogStore;
|
|
||||||
import com.sap.sailing.domain.swisstimingadapter.DomainFactory;
|
import com.sap.sailing.domain.swisstimingadapter.DomainFactory;
|
||||||
import com.sap.sailing.domain.swisstimingadapter.Race;
|
import com.sap.sailing.domain.swisstimingadapter.Race;
|
||||||
import com.sap.sailing.domain.swisstimingadapter.RaceSpecificMessageLoader;
|
import com.sap.sailing.domain.swisstimingadapter.RaceSpecificMessageLoader;
|
||||||
@@ -81,20 +80,19 @@ public class SwissTimingFactoryImpl implements SwissTimingFactory {
|
|||||||
@Override
|
@Override
|
||||||
public SwissTimingRaceTracker createRaceTracker(String raceID, String hostname, int port, boolean canSendRequests, long delayToLiveInMillis,
|
public SwissTimingRaceTracker createRaceTracker(String raceID, String hostname, int port, boolean canSendRequests, long delayToLiveInMillis,
|
||||||
WindStore windStore, RaceSpecificMessageLoader messageLoader, DomainFactory domainFactory,
|
WindStore windStore, RaceSpecificMessageLoader messageLoader, DomainFactory domainFactory,
|
||||||
TrackedRegattaRegistry trackedRegattaRegistry, RaceLogStore raceLogStore) throws InterruptedException, UnknownHostException, IOException,
|
TrackedRegattaRegistry trackedRegattaRegistry) throws InterruptedException, UnknownHostException, IOException,
|
||||||
ParseException {
|
ParseException {
|
||||||
return new SwissTimingRaceTrackerImpl(raceID, hostname, port, windStore, domainFactory, this, messageLoader,
|
return new SwissTimingRaceTrackerImpl(raceID, hostname, port, windStore, domainFactory, this, messageLoader,
|
||||||
trackedRegattaRegistry, canSendRequests, delayToLiveInMillis, raceLogStore);
|
trackedRegattaRegistry, canSendRequests, delayToLiveInMillis);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public RaceTracker createRaceTracker(Regatta regatta, String raceID, String hostname, int port,
|
public RaceTracker createRaceTracker(Regatta regatta, String raceID, String hostname, int port,
|
||||||
boolean canSendRequests, long delayToLiveInMillis, WindStore windStore, RaceSpecificMessageLoader messageLoader,
|
boolean canSendRequests, long delayToLiveInMillis, WindStore windStore, RaceSpecificMessageLoader messageLoader,
|
||||||
DomainFactory domainFactory, TrackedRegattaRegistry trackedRegattaRegistry,
|
DomainFactory domainFactory, TrackedRegattaRegistry trackedRegattaRegistry) throws UnknownHostException,
|
||||||
RaceLogStore raceLogStore) throws UnknownHostException,
|
|
||||||
InterruptedException, IOException, ParseException {
|
InterruptedException, IOException, ParseException {
|
||||||
return new SwissTimingRaceTrackerImpl(regatta, raceID, hostname, port, windStore, domainFactory, this,
|
return new SwissTimingRaceTrackerImpl(regatta, raceID, hostname, port, windStore, domainFactory, this,
|
||||||
messageLoader, trackedRegattaRegistry, canSendRequests, delayToLiveInMillis, raceLogStore);
|
messageLoader, trackedRegattaRegistry, canSendRequests, delayToLiveInMillis);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+4
-9
@@ -24,7 +24,6 @@ import com.sap.sailing.domain.common.TimePoint;
|
|||||||
import com.sap.sailing.domain.common.TrackedRaceStatusEnum;
|
import com.sap.sailing.domain.common.TrackedRaceStatusEnum;
|
||||||
import com.sap.sailing.domain.common.impl.Util;
|
import com.sap.sailing.domain.common.impl.Util;
|
||||||
import com.sap.sailing.domain.common.impl.Util.Triple;
|
import com.sap.sailing.domain.common.impl.Util.Triple;
|
||||||
import com.sap.sailing.domain.racelog.RaceLogStore;
|
|
||||||
import com.sap.sailing.domain.swisstimingadapter.Course;
|
import com.sap.sailing.domain.swisstimingadapter.Course;
|
||||||
import com.sap.sailing.domain.swisstimingadapter.DomainFactory;
|
import com.sap.sailing.domain.swisstimingadapter.DomainFactory;
|
||||||
import com.sap.sailing.domain.swisstimingadapter.Fix;
|
import com.sap.sailing.domain.swisstimingadapter.Fix;
|
||||||
@@ -63,7 +62,6 @@ public class SwissTimingRaceTrackerImpl extends AbstractRaceTrackerImpl implemen
|
|||||||
private final Triple<String, String, Integer> id;
|
private final Triple<String, String, Integer> id;
|
||||||
private final Regatta regatta;
|
private final Regatta regatta;
|
||||||
private final WindStore windStore;
|
private final WindStore windStore;
|
||||||
private final RaceLogStore raceLogStore;
|
|
||||||
|
|
||||||
private RaceDefinition race;
|
private RaceDefinition race;
|
||||||
private Course course;
|
private Course course;
|
||||||
@@ -76,17 +74,15 @@ public class SwissTimingRaceTrackerImpl extends AbstractRaceTrackerImpl implemen
|
|||||||
|
|
||||||
protected SwissTimingRaceTrackerImpl(String raceID, String hostname, int port, WindStore windStore,
|
protected SwissTimingRaceTrackerImpl(String raceID, String hostname, int port, WindStore windStore,
|
||||||
DomainFactory domainFactory, SwissTimingFactory factory, RaceSpecificMessageLoader messageLoader,
|
DomainFactory domainFactory, SwissTimingFactory factory, RaceSpecificMessageLoader messageLoader,
|
||||||
TrackedRegattaRegistry trackedRegattaRegistry, boolean canSendRequests, long delayToLiveInMillis,
|
TrackedRegattaRegistry trackedRegattaRegistry, boolean canSendRequests, long delayToLiveInMillis) throws InterruptedException,
|
||||||
RaceLogStore raceLogStore) throws InterruptedException,
|
|
||||||
UnknownHostException, IOException, ParseException {
|
UnknownHostException, IOException, ParseException {
|
||||||
this(domainFactory.getOrCreateDefaultRegatta(raceID, trackedRegattaRegistry), raceID, hostname, port, windStore, domainFactory, factory,
|
this(domainFactory.getOrCreateDefaultRegatta(raceID, trackedRegattaRegistry), raceID, hostname, port, windStore, domainFactory, factory,
|
||||||
messageLoader, trackedRegattaRegistry, canSendRequests, delayToLiveInMillis, raceLogStore);
|
messageLoader, trackedRegattaRegistry, canSendRequests, delayToLiveInMillis);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected SwissTimingRaceTrackerImpl(Regatta regatta, String raceID, String hostname, int port, WindStore windStore,
|
protected SwissTimingRaceTrackerImpl(Regatta regatta, String raceID, String hostname, int port, WindStore windStore,
|
||||||
DomainFactory domainFactory, SwissTimingFactory factory, RaceSpecificMessageLoader messageLoader,
|
DomainFactory domainFactory, SwissTimingFactory factory, RaceSpecificMessageLoader messageLoader,
|
||||||
TrackedRegattaRegistry trackedRegattaRegistry, boolean canSendRequests, long delayToLiveInMillis,
|
TrackedRegattaRegistry trackedRegattaRegistry, boolean canSendRequests, long delayToLiveInMillis) throws InterruptedException,
|
||||||
RaceLogStore raceLogStore) throws InterruptedException,
|
|
||||||
UnknownHostException, IOException, ParseException {
|
UnknownHostException, IOException, ParseException {
|
||||||
super();
|
super();
|
||||||
this.regatta = regatta;
|
this.regatta = regatta;
|
||||||
@@ -95,7 +91,6 @@ public class SwissTimingRaceTrackerImpl extends AbstractRaceTrackerImpl implemen
|
|||||||
this.raceID = raceID;
|
this.raceID = raceID;
|
||||||
this.messageLoader = messageLoader;
|
this.messageLoader = messageLoader;
|
||||||
this.windStore = windStore;
|
this.windStore = windStore;
|
||||||
this.raceLogStore = raceLogStore;
|
|
||||||
this.id = createID(raceID, hostname, port);
|
this.id = createID(raceID, hostname, port);
|
||||||
connector.addSailMasterListener(raceID, this);
|
connector.addSailMasterListener(raceID, this);
|
||||||
trackedRegatta = trackedRegattaRegistry.getOrCreateTrackedRegatta(regatta);
|
trackedRegatta = trackedRegattaRegistry.getOrCreateTrackedRegatta(regatta);
|
||||||
@@ -305,7 +300,7 @@ public class SwissTimingRaceTrackerImpl extends AbstractRaceTrackerImpl implemen
|
|||||||
// we already know our single RaceDefinition
|
// we already know our single RaceDefinition
|
||||||
assert SwissTimingRaceTrackerImpl.this.race == race;
|
assert SwissTimingRaceTrackerImpl.this.race == race;
|
||||||
}
|
}
|
||||||
}, raceLogStore);
|
});
|
||||||
logger.info("Created SwissTiming RaceDefinition and TrackedRace for "+race.getName());
|
logger.info("Created SwissTiming RaceDefinition and TrackedRace for "+race.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+3
-6
@@ -1,7 +1,6 @@
|
|||||||
package com.sap.sailing.domain.swisstimingadapter.impl;
|
package com.sap.sailing.domain.swisstimingadapter.impl;
|
||||||
|
|
||||||
import com.sap.sailing.domain.base.Regatta;
|
import com.sap.sailing.domain.base.Regatta;
|
||||||
import com.sap.sailing.domain.racelog.RaceLogStore;
|
|
||||||
import com.sap.sailing.domain.swisstimingadapter.DomainFactory;
|
import com.sap.sailing.domain.swisstimingadapter.DomainFactory;
|
||||||
import com.sap.sailing.domain.swisstimingadapter.RaceSpecificMessageLoader;
|
import com.sap.sailing.domain.swisstimingadapter.RaceSpecificMessageLoader;
|
||||||
import com.sap.sailing.domain.swisstimingadapter.SwissTimingFactory;
|
import com.sap.sailing.domain.swisstimingadapter.SwissTimingFactory;
|
||||||
@@ -18,12 +17,11 @@ public class SwissTimingTrackingConnectivityParameters implements RaceTrackingCo
|
|||||||
private final SwissTimingFactory swissTimingFactory;
|
private final SwissTimingFactory swissTimingFactory;
|
||||||
private final DomainFactory domainFactory;
|
private final DomainFactory domainFactory;
|
||||||
private final WindStore windStore;
|
private final WindStore windStore;
|
||||||
private final RaceLogStore raceLogStore;
|
|
||||||
private final RaceSpecificMessageLoader messageLoader;
|
private final RaceSpecificMessageLoader messageLoader;
|
||||||
private final long delayToLiveInMillis;
|
private final long delayToLiveInMillis;
|
||||||
|
|
||||||
public SwissTimingTrackingConnectivityParameters(String hostname, int port, String raceID, boolean canSendRequests, long delayToLiveInMillis,
|
public SwissTimingTrackingConnectivityParameters(String hostname, int port, String raceID, boolean canSendRequests, long delayToLiveInMillis,
|
||||||
SwissTimingFactory swissTimingFactory, DomainFactory domainFactory, WindStore windStore, RaceLogStore raceLogStore,
|
SwissTimingFactory swissTimingFactory, DomainFactory domainFactory, WindStore windStore,
|
||||||
RaceSpecificMessageLoader messageLoader) {
|
RaceSpecificMessageLoader messageLoader) {
|
||||||
super();
|
super();
|
||||||
this.hostname = hostname;
|
this.hostname = hostname;
|
||||||
@@ -34,21 +32,20 @@ public class SwissTimingTrackingConnectivityParameters implements RaceTrackingCo
|
|||||||
this.swissTimingFactory = swissTimingFactory;
|
this.swissTimingFactory = swissTimingFactory;
|
||||||
this.domainFactory = domainFactory;
|
this.domainFactory = domainFactory;
|
||||||
this.windStore = windStore;
|
this.windStore = windStore;
|
||||||
this.raceLogStore = raceLogStore;
|
|
||||||
this.messageLoader = messageLoader;
|
this.messageLoader = messageLoader;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public RaceTracker createRaceTracker(TrackedRegattaRegistry trackedRegattaRegistry) throws Exception {
|
public RaceTracker createRaceTracker(TrackedRegattaRegistry trackedRegattaRegistry) throws Exception {
|
||||||
return swissTimingFactory.createRaceTracker(raceID, hostname, port, canSendRequests, delayToLiveInMillis, windStore, messageLoader,
|
return swissTimingFactory.createRaceTracker(raceID, hostname, port, canSendRequests, delayToLiveInMillis, windStore, messageLoader,
|
||||||
domainFactory, trackedRegattaRegistry, raceLogStore);
|
domainFactory, trackedRegattaRegistry);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public RaceTracker createRaceTracker(Regatta regatta, TrackedRegattaRegistry trackedRegattaRegistry)
|
public RaceTracker createRaceTracker(Regatta regatta, TrackedRegattaRegistry trackedRegattaRegistry)
|
||||||
throws Exception {
|
throws Exception {
|
||||||
return swissTimingFactory.createRaceTracker(regatta, raceID, hostname, port, canSendRequests, delayToLiveInMillis, windStore, messageLoader,
|
return swissTimingFactory.createRaceTracker(regatta, raceID, hostname, port, canSendRequests, delayToLiveInMillis, windStore, messageLoader,
|
||||||
domainFactory, trackedRegattaRegistry, raceLogStore);
|
domainFactory, trackedRegattaRegistry);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+1
-2
@@ -35,7 +35,6 @@ import com.sap.sailing.domain.common.impl.DegreeBearingImpl;
|
|||||||
import com.sap.sailing.domain.common.impl.DegreePosition;
|
import com.sap.sailing.domain.common.impl.DegreePosition;
|
||||||
import com.sap.sailing.domain.common.impl.Util;
|
import com.sap.sailing.domain.common.impl.Util;
|
||||||
import com.sap.sailing.domain.common.impl.WindSourceWithAdditionalID;
|
import com.sap.sailing.domain.common.impl.WindSourceWithAdditionalID;
|
||||||
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
|
|
||||||
import com.sap.sailing.domain.swisstimingadapter.DomainFactory;
|
import com.sap.sailing.domain.swisstimingadapter.DomainFactory;
|
||||||
import com.sap.sailing.domain.swisstimingreplayadapter.CompetitorStatus;
|
import com.sap.sailing.domain.swisstimingreplayadapter.CompetitorStatus;
|
||||||
import com.sap.sailing.domain.swisstimingreplayadapter.SwissTimingReplayListener;
|
import com.sap.sailing.domain.swisstimingreplayadapter.SwissTimingReplayListener;
|
||||||
@@ -309,7 +308,7 @@ public class SwissTimingReplayToDomainAdapter extends SwissTimingReplayAdapter {
|
|||||||
createTrackedRace(race, EmptyWindStore.INSTANCE, TrackedRace.DEFAULT_LIVE_DELAY_IN_MILLISECONDS,
|
createTrackedRace(race, EmptyWindStore.INSTANCE, TrackedRace.DEFAULT_LIVE_DELAY_IN_MILLISECONDS,
|
||||||
WindTrack.DEFAULT_MILLISECONDS_OVER_WHICH_TO_AVERAGE_WIND,
|
WindTrack.DEFAULT_MILLISECONDS_OVER_WHICH_TO_AVERAGE_WIND,
|
||||||
/* time over which to average speed: */ race.getBoatClass().getApproximateManeuverDurationInMilliseconds(),
|
/* time over which to average speed: */ race.getBoatClass().getApproximateManeuverDurationInMilliseconds(),
|
||||||
/* raceDefinitionSetToUpdate */ null, EmptyRaceLogStore.INSTANCE);
|
/* raceDefinitionSetToUpdate */ null);
|
||||||
trackedRace.setStatus(new TrackedRaceStatusImpl(TrackedRaceStatusEnum.LOADING, 0));
|
trackedRace.setStatus(new TrackedRaceStatusImpl(TrackedRaceStatusEnum.LOADING, 0));
|
||||||
TimePoint bestStartTimeKnownSoFar = bestStartTimePerRaceID.get(currentRaceID);
|
TimePoint bestStartTimeKnownSoFar = bestStartTimePerRaceID.get(currentRaceID);
|
||||||
if (bestStartTimeKnownSoFar != null) {
|
if (bestStartTimeKnownSoFar != null) {
|
||||||
|
|||||||
@@ -25,7 +25,6 @@ import com.sap.sailing.domain.base.impl.MarkImpl;
|
|||||||
import com.sap.sailing.domain.base.impl.RaceDefinitionImpl;
|
import com.sap.sailing.domain.base.impl.RaceDefinitionImpl;
|
||||||
import com.sap.sailing.domain.base.impl.WaypointImpl;
|
import com.sap.sailing.domain.base.impl.WaypointImpl;
|
||||||
import com.sap.sailing.domain.common.impl.Util;
|
import com.sap.sailing.domain.common.impl.Util;
|
||||||
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
|
|
||||||
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
|
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
|
||||||
import com.sap.sailing.domain.tracking.TrackedLeg;
|
import com.sap.sailing.domain.tracking.TrackedLeg;
|
||||||
import com.sap.sailing.domain.tracking.impl.DynamicTrackedRaceImpl;
|
import com.sap.sailing.domain.tracking.impl.DynamicTrackedRaceImpl;
|
||||||
@@ -244,8 +243,7 @@ public class CourseTest {
|
|||||||
hasso),
|
hasso),
|
||||||
EmptyWindStore.INSTANCE, /* delayToLiveInMillis */ 3000,
|
EmptyWindStore.INSTANCE, /* delayToLiveInMillis */ 3000,
|
||||||
/* millisecondsOverWhichToAverageWind */ 30000,
|
/* millisecondsOverWhichToAverageWind */ 30000,
|
||||||
/* millisecondsOverWhichToAverageSpeed */ 8000,
|
/* millisecondsOverWhichToAverageSpeed */ 8000);
|
||||||
EmptyRaceLogStore.INSTANCE);
|
|
||||||
assertLegStructure(course, trackedRace);
|
assertLegStructure(course, trackedRace);
|
||||||
course.removeWaypoint(0);
|
course.removeWaypoint(0);
|
||||||
assertLegStructure(course, trackedRace);
|
assertLegStructure(course, trackedRace);
|
||||||
@@ -275,8 +273,7 @@ public class CourseTest {
|
|||||||
hasso),
|
hasso),
|
||||||
EmptyWindStore.INSTANCE, /* delayToLiveInMillis */ 3000,
|
EmptyWindStore.INSTANCE, /* delayToLiveInMillis */ 3000,
|
||||||
/* millisecondsOverWhichToAverageWind */ 30000,
|
/* millisecondsOverWhichToAverageWind */ 30000,
|
||||||
/* millisecondsOverWhichToAverageSpeed */ 8000,
|
/* millisecondsOverWhichToAverageSpeed */ 8000);
|
||||||
EmptyRaceLogStore.INSTANCE);
|
|
||||||
assertLegStructure(course, trackedRace);
|
assertLegStructure(course, trackedRace);
|
||||||
final WaypointImpl wp1_5 = new WaypointImpl(new MarkImpl("Test Mark 1.5"));
|
final WaypointImpl wp1_5 = new WaypointImpl(new MarkImpl("Test Mark 1.5"));
|
||||||
assertWaypointIndexes(course);
|
assertWaypointIndexes(course);
|
||||||
|
|||||||
+1
-3
@@ -31,7 +31,6 @@ import com.sap.sailing.domain.base.impl.MarkImpl;
|
|||||||
import com.sap.sailing.domain.base.impl.WaypointImpl;
|
import com.sap.sailing.domain.base.impl.WaypointImpl;
|
||||||
import com.sap.sailing.domain.common.impl.Util;
|
import com.sap.sailing.domain.common.impl.Util;
|
||||||
import com.sap.sailing.domain.common.impl.Util.Triple;
|
import com.sap.sailing.domain.common.impl.Util.Triple;
|
||||||
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
|
|
||||||
import com.sap.sailing.domain.tracking.DynamicRaceDefinitionSet;
|
import com.sap.sailing.domain.tracking.DynamicRaceDefinitionSet;
|
||||||
import com.sap.sailing.domain.tracking.DynamicTrackedRegatta;
|
import com.sap.sailing.domain.tracking.DynamicTrackedRegatta;
|
||||||
import com.sap.sailing.domain.tracking.TrackedLeg;
|
import com.sap.sailing.domain.tracking.TrackedLeg;
|
||||||
@@ -78,8 +77,7 @@ public class CourseUpdateTest extends AbstractTracTracLiveTest {
|
|||||||
@Override
|
@Override
|
||||||
public void addRaceDefinition(RaceDefinition race) {}
|
public void addRaceDefinition(RaceDefinition race) {}
|
||||||
}, /* delayToLiveInMillis */ 0l,
|
}, /* delayToLiveInMillis */ 0l,
|
||||||
/* millisecondsOverWhichToAverageWind */ 30000, /* simulator */ null,
|
/* millisecondsOverWhichToAverageWind */ 30000, /* simulator */ null) {
|
||||||
EmptyRaceLogStore.INSTANCE) {
|
|
||||||
@Override
|
@Override
|
||||||
protected void handleEvent(Triple<Route, RouteData, Race> event) {
|
protected void handleEvent(Triple<Route, RouteData, Race> event) {
|
||||||
super.handleEvent(event);
|
super.handleEvent(event);
|
||||||
|
|||||||
+4
-8
@@ -15,7 +15,6 @@ import org.junit.After;
|
|||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
|
|
||||||
import com.sap.sailing.domain.tracking.impl.EmptyWindStore;
|
import com.sap.sailing.domain.tracking.impl.EmptyWindStore;
|
||||||
import com.sap.sailing.domain.tractracadapter.DomainFactory;
|
import com.sap.sailing.domain.tractracadapter.DomainFactory;
|
||||||
import com.sap.sailing.domain.tractracadapter.TracTracConnectionConstants;
|
import com.sap.sailing.domain.tractracadapter.TracTracConnectionConstants;
|
||||||
@@ -51,28 +50,25 @@ public class MultipleClassesInRegattaTest {
|
|||||||
httpAndHost+"/events/event_20110505_SailingTea/clientparams.php?event=event_20110505_SailingTea&race=cce678c8-97e6-11e0-9aed-406186cbf87c"),
|
httpAndHost+"/events/event_20110505_SailingTea/clientparams.php?event=event_20110505_SailingTea&race=cce678c8-97e6-11e0-9aed-406186cbf87c"),
|
||||||
new URI(liveURI), new URI(storedURI),
|
new URI(liveURI), new URI(storedURI),
|
||||||
/* startOfTracking */ null, /* endOfTracking */ null, /* delayToLiveInMillis */ 0l, /* simulateWithStartTimeNow */ false,
|
/* startOfTracking */ null, /* endOfTracking */ null, /* delayToLiveInMillis */ 0l, /* simulateWithStartTimeNow */ false,
|
||||||
EmptyWindStore.INSTANCE, new DummyTrackedRegattaRegistry(), EmptyRaceLogStore.INSTANCE);
|
EmptyWindStore.INSTANCE, new DummyTrackedRegattaRegistry());
|
||||||
kiwotest2 = domainFactory
|
kiwotest2 = domainFactory
|
||||||
.createRaceTracker(
|
.createRaceTracker(
|
||||||
new URL(
|
new URL(
|
||||||
httpAndHost+"/events/event_20110505_SailingTea/clientparams.php?event=event_20110505_SailingTea&race=11290bd6-97e7-11e0-9aed-406186cbf87c"),
|
httpAndHost+"/events/event_20110505_SailingTea/clientparams.php?event=event_20110505_SailingTea&race=11290bd6-97e7-11e0-9aed-406186cbf87c"),
|
||||||
new URI(liveURI), new URI(storedURI),
|
new URI(liveURI), new URI(storedURI),
|
||||||
/* startOfTracking */ null, /* endOfTracking */ null, /* delayToLiveInMillis */ 0l, /* simulateWithStartTimeNow */ false, EmptyWindStore.INSTANCE, new DummyTrackedRegattaRegistry(),
|
/* startOfTracking */ null, /* endOfTracking */ null, /* delayToLiveInMillis */ 0l, /* simulateWithStartTimeNow */ false, EmptyWindStore.INSTANCE, new DummyTrackedRegattaRegistry());
|
||||||
EmptyRaceLogStore.INSTANCE);
|
|
||||||
kiwotest3 = domainFactory
|
kiwotest3 = domainFactory
|
||||||
.createRaceTracker(
|
.createRaceTracker(
|
||||||
new URL(
|
new URL(
|
||||||
httpAndHost+"/events/event_20110505_SailingTea/clientparams.php?event=event_20110505_SailingTea&race=39635b24-97e7-11e0-9aed-406186cbf87c"),
|
httpAndHost+"/events/event_20110505_SailingTea/clientparams.php?event=event_20110505_SailingTea&race=39635b24-97e7-11e0-9aed-406186cbf87c"),
|
||||||
new URI(liveURI), new URI(storedURI),
|
new URI(liveURI), new URI(storedURI),
|
||||||
/* startOfTracking */ null, /* endOfTracking */ null, /* delayToLiveInMillis */ 0l, /* simulateWithStartTimeNow */ false, EmptyWindStore.INSTANCE, new DummyTrackedRegattaRegistry(),
|
/* startOfTracking */ null, /* endOfTracking */ null, /* delayToLiveInMillis */ 0l, /* simulateWithStartTimeNow */ false, EmptyWindStore.INSTANCE, new DummyTrackedRegattaRegistry());
|
||||||
EmptyRaceLogStore.INSTANCE);
|
|
||||||
weym470may112014_2 = domainFactory
|
weym470may112014_2 = domainFactory
|
||||||
.createRaceTracker(
|
.createRaceTracker(
|
||||||
new URL(
|
new URL(
|
||||||
httpAndHost+"/events/event_20110505_SailingTea/clientparams.php?event=event_20110505_SailingTea&race=04498426-7dfd-11e0-8236-406186cbf87c"),
|
httpAndHost+"/events/event_20110505_SailingTea/clientparams.php?event=event_20110505_SailingTea&race=04498426-7dfd-11e0-8236-406186cbf87c"),
|
||||||
new URI(liveURI), new URI(storedURI),
|
new URI(liveURI), new URI(storedURI),
|
||||||
/* startOfTracking */ null, /* endOfTracking */ null, /* delayToLiveInMillis */ 0l, /* simulateWithStartTimeNow */ false, EmptyWindStore.INSTANCE, new DummyTrackedRegattaRegistry(),
|
/* startOfTracking */ null, /* endOfTracking */ null, /* delayToLiveInMillis */ 0l, /* simulateWithStartTimeNow */ false, EmptyWindStore.INSTANCE, new DummyTrackedRegattaRegistry());
|
||||||
EmptyRaceLogStore.INSTANCE);
|
|
||||||
|
|
||||||
assertEquals("STG", kiwotest1.getRegatta().getBoatClass().getName());
|
assertEquals("STG", kiwotest1.getRegatta().getBoatClass().getName());
|
||||||
assertEquals("505", kiwotest2.getRegatta().getBoatClass().getName());
|
assertEquals("505", kiwotest2.getRegatta().getBoatClass().getName());
|
||||||
|
|||||||
+4
-5
@@ -17,19 +17,18 @@ import java.util.regex.Pattern;
|
|||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
|
|
||||||
import com.sap.sailing.domain.base.Mark;
|
|
||||||
import com.sap.sailing.domain.base.Competitor;
|
import com.sap.sailing.domain.base.Competitor;
|
||||||
import com.sap.sailing.domain.base.Regatta;
|
import com.sap.sailing.domain.base.Mark;
|
||||||
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.Waypoint;
|
import com.sap.sailing.domain.base.Waypoint;
|
||||||
import com.sap.sailing.domain.base.impl.MillisecondsTimePoint;
|
import com.sap.sailing.domain.base.impl.MillisecondsTimePoint;
|
||||||
import com.sap.sailing.domain.common.Position;
|
import com.sap.sailing.domain.common.Position;
|
||||||
import com.sap.sailing.domain.common.TimePoint;
|
import com.sap.sailing.domain.common.TimePoint;
|
||||||
import com.sap.sailing.domain.common.impl.DegreePosition;
|
import com.sap.sailing.domain.common.impl.DegreePosition;
|
||||||
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
|
|
||||||
import com.sap.sailing.domain.tracking.DynamicRaceDefinitionSet;
|
import com.sap.sailing.domain.tracking.DynamicRaceDefinitionSet;
|
||||||
import com.sap.sailing.domain.tracking.DynamicTrackedRegatta;
|
|
||||||
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
|
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
|
||||||
|
import com.sap.sailing.domain.tracking.DynamicTrackedRegatta;
|
||||||
import com.sap.sailing.domain.tracking.impl.DynamicTrackedRegattaImpl;
|
import com.sap.sailing.domain.tracking.impl.DynamicTrackedRegattaImpl;
|
||||||
import com.sap.sailing.domain.tracking.impl.EmptyWindStore;
|
import com.sap.sailing.domain.tracking.impl.EmptyWindStore;
|
||||||
import com.sap.sailing.domain.tracking.impl.GPSFixImpl;
|
import com.sap.sailing.domain.tracking.impl.GPSFixImpl;
|
||||||
@@ -90,7 +89,7 @@ public abstract class OnlineTracTracBasedTest extends AbstractTracTracLiveTest {
|
|||||||
throws InterruptedException {
|
throws InterruptedException {
|
||||||
setStoredDataLoaded(false);
|
setStoredDataLoaded(false);
|
||||||
ArrayList<Receiver> receivers = new ArrayList<Receiver>();
|
ArrayList<Receiver> receivers = new ArrayList<Receiver>();
|
||||||
for (Receiver r : domainFactory.getUpdateReceivers(trackedRegatta, getTracTracEvent(), EmptyWindStore.INSTANCE, EmptyRaceLogStore.INSTANCE,
|
for (Receiver r : domainFactory.getUpdateReceivers(trackedRegatta, getTracTracEvent(), EmptyWindStore.INSTANCE,
|
||||||
/* startOfTracking */null, /* endOfTracking */null, /* delayToLiveInMillis */0l, /* simulator */ null,
|
/* startOfTracking */null, /* endOfTracking */null, /* delayToLiveInMillis */0l, /* simulator */ null,
|
||||||
new DynamicRaceDefinitionSet() {
|
new DynamicRaceDefinitionSet() {
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+42
-52
@@ -1,25 +1,15 @@
|
|||||||
package com.sap.sailing.domain.test;
|
package com.sap.sailing.domain.test;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
|
||||||
import static org.junit.Assert.assertNotNull;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.GregorianCalendar;
|
import java.util.GregorianCalendar;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Ignore;
|
||||||
|
|
||||||
import com.sap.sailing.domain.base.Competitor;
|
import com.sap.sailing.domain.base.Competitor;
|
||||||
import com.sap.sailing.domain.base.impl.CompetitorImpl;
|
import com.sap.sailing.domain.base.impl.CompetitorImpl;
|
||||||
import com.sap.sailing.domain.base.impl.MillisecondsTimePoint;
|
import com.sap.sailing.domain.base.impl.MillisecondsTimePoint;
|
||||||
import com.sap.sailing.domain.common.TimePoint;
|
|
||||||
import com.sap.sailing.domain.common.impl.Util;
|
|
||||||
import com.sap.sailing.domain.racelog.Flags;
|
|
||||||
import com.sap.sailing.domain.racelog.RaceLogEventFactory;
|
|
||||||
import com.sap.sailing.domain.racelog.RaceLog;
|
|
||||||
import com.sap.sailing.domain.racelog.RaceLogFlagEvent;
|
|
||||||
import com.sap.sailing.domain.racelog.RaceLogStartTimeEvent;
|
|
||||||
|
|
||||||
public class RaceLogEventsOnConstructedTrackedRaceTest extends TrackBasedTest {
|
public class RaceLogEventsOnConstructedTrackedRaceTest extends TrackBasedTest {
|
||||||
|
|
||||||
@@ -43,51 +33,51 @@ public class RaceLogEventsOnConstructedTrackedRaceTest extends TrackBasedTest {
|
|||||||
setTrackedRace(createTestTrackedRace("Kieler Woche", "505 Race 2", "505", competitors, start));
|
setTrackedRace(createTestTrackedRace("Kieler Woche", "505 Race 2", "505", competitors, start));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Ignore
|
||||||
public void testRaceLogExists() {
|
public void testRaceLogExists() {
|
||||||
RaceLog track = getTrackedRace().getRaceLog();
|
// RaceLog track = getTrackedRace().getRaceLog();
|
||||||
assertNotNull(track);
|
// assertNotNull(track);
|
||||||
|
//
|
||||||
track.lockForRead();
|
// track.lockForRead();
|
||||||
try {
|
// try {
|
||||||
assertEquals(Util.size(track.getRawFixes()), 0);
|
// assertEquals(Util.size(track.getRawFixes()), 0);
|
||||||
assertEquals(Util.size(track.getFixes()), 0);
|
// assertEquals(Util.size(track.getFixes()), 0);
|
||||||
} finally {
|
// } finally {
|
||||||
track.unlockAfterRead();
|
// track.unlockAfterRead();
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Ignore
|
||||||
public void testRaceLogInsertSomeEvents() {
|
public void testRaceLogInsertSomeEvents() {
|
||||||
RaceLog track = getTrackedRace().getRaceLog();
|
// RaceLog track = getTrackedRace().getRaceLog();
|
||||||
assertNotNull(track);
|
// assertNotNull(track);
|
||||||
|
//
|
||||||
TimePoint t1 = MillisecondsTimePoint.now();
|
// TimePoint t1 = MillisecondsTimePoint.now();
|
||||||
TimePoint t2 = new MillisecondsTimePoint(t1.asMillis() - 1000);
|
// TimePoint t2 = new MillisecondsTimePoint(t1.asMillis() - 1000);
|
||||||
TimePoint t3 = new MillisecondsTimePoint(t1.asMillis() - 4000);
|
// TimePoint t3 = new MillisecondsTimePoint(t1.asMillis() - 4000);
|
||||||
TimePoint t4 = new MillisecondsTimePoint(t1.asMillis() - 5000);
|
// TimePoint t4 = new MillisecondsTimePoint(t1.asMillis() - 5000);
|
||||||
TimePoint t5 = new MillisecondsTimePoint(t1.asMillis() - 10000);
|
// TimePoint t5 = new MillisecondsTimePoint(t1.asMillis() - 10000);
|
||||||
|
//
|
||||||
int passId = 0;
|
// int passId = 0;
|
||||||
RaceLogFlagEvent rcEvent1 = RaceLogEventFactory.INSTANCE.createFlagEvent(t1, passId, Flags.CLASS, Flags.NONE, false);
|
// RaceLogFlagEvent rcEvent1 = RaceLogEventFactory.INSTANCE.createFlagEvent(t1, passId, Flags.CLASS, Flags.NONE, false);
|
||||||
RaceLogFlagEvent rcEvent2 = RaceLogEventFactory.INSTANCE.createFlagEvent(t2, passId, Flags.PAPA, Flags.NONE, false);
|
// RaceLogFlagEvent rcEvent2 = RaceLogEventFactory.INSTANCE.createFlagEvent(t2, passId, Flags.PAPA, Flags.NONE, false);
|
||||||
RaceLogFlagEvent rcEvent3 = RaceLogEventFactory.INSTANCE.createFlagEvent(t3, passId, Flags.PAPA, Flags.NONE, true);
|
// RaceLogFlagEvent rcEvent3 = RaceLogEventFactory.INSTANCE.createFlagEvent(t3, passId, Flags.PAPA, Flags.NONE, true);
|
||||||
RaceLogFlagEvent rcEvent4 = RaceLogEventFactory.INSTANCE.createFlagEvent(t4, passId, Flags.CLASS, Flags.NONE, true);
|
// RaceLogFlagEvent rcEvent4 = RaceLogEventFactory.INSTANCE.createFlagEvent(t4, passId, Flags.CLASS, Flags.NONE, true);
|
||||||
RaceLogStartTimeEvent rcEvent5 = RaceLogEventFactory.INSTANCE.createStartTimeEvent(t5, passId, t1);
|
// RaceLogStartTimeEvent rcEvent5 = RaceLogEventFactory.INSTANCE.createStartTimeEvent(t5, passId, t1);
|
||||||
|
//
|
||||||
getTrackedRace().recordRaceLogEvent(rcEvent1);
|
// getTrackedRace().recordRaceLogEvent(rcEvent1);
|
||||||
getTrackedRace().recordRaceLogEvent(rcEvent2);
|
// getTrackedRace().recordRaceLogEvent(rcEvent2);
|
||||||
getTrackedRace().recordRaceLogEvent(rcEvent3);
|
// getTrackedRace().recordRaceLogEvent(rcEvent3);
|
||||||
getTrackedRace().recordRaceLogEvent(rcEvent4);
|
// getTrackedRace().recordRaceLogEvent(rcEvent4);
|
||||||
getTrackedRace().recordRaceLogEvent(rcEvent5);
|
// getTrackedRace().recordRaceLogEvent(rcEvent5);
|
||||||
|
//
|
||||||
track.lockForRead();
|
// track.lockForRead();
|
||||||
try {
|
// try {
|
||||||
assertEquals(Util.size(track.getRawFixes()), 5);
|
// assertEquals(Util.size(track.getRawFixes()), 5);
|
||||||
assertEquals(Util.size(track.getFixes()), 5);
|
// assertEquals(Util.size(track.getFixes()), 5);
|
||||||
} finally {
|
// } finally {
|
||||||
track.unlockAfterRead();
|
// track.unlockAfterRead();
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
+1
-3
@@ -40,7 +40,6 @@ import com.sap.sailing.domain.common.WindSourceType;
|
|||||||
import com.sap.sailing.domain.common.impl.DegreeBearingImpl;
|
import com.sap.sailing.domain.common.impl.DegreeBearingImpl;
|
||||||
import com.sap.sailing.domain.common.impl.DegreePosition;
|
import com.sap.sailing.domain.common.impl.DegreePosition;
|
||||||
import com.sap.sailing.domain.common.impl.WindSourceImpl;
|
import com.sap.sailing.domain.common.impl.WindSourceImpl;
|
||||||
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
|
|
||||||
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
|
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
|
||||||
import com.sap.sailing.domain.tracking.MarkPassing;
|
import com.sap.sailing.domain.tracking.MarkPassing;
|
||||||
import com.sap.sailing.domain.tracking.TrackedLeg;
|
import com.sap.sailing.domain.tracking.TrackedLeg;
|
||||||
@@ -102,8 +101,7 @@ public class ReachingLegTest extends TrackBasedTest {
|
|||||||
DynamicTrackedRace trackedRace = new DynamicTrackedRaceImpl(trackedRegatta, race, EmptyWindStore.INSTANCE,
|
DynamicTrackedRace trackedRace = new DynamicTrackedRaceImpl(trackedRegatta, race, EmptyWindStore.INSTANCE,
|
||||||
/* delayToLiveInMillis */ 0,
|
/* delayToLiveInMillis */ 0,
|
||||||
/* millisecondsOverWhichToAverageWind */ 30000, /* millisecondsOverWhichToAverageSpeed */ 30000,
|
/* millisecondsOverWhichToAverageWind */ 30000, /* millisecondsOverWhichToAverageSpeed */ 30000,
|
||||||
/* delay for wind estimation cache invalidation */ 0,
|
/* delay for wind estimation cache invalidation */ 0);
|
||||||
EmptyRaceLogStore.INSTANCE);
|
|
||||||
// in this simplified artificial course, the top mark is exactly north of the right leeward gate, the offset
|
// in this simplified artificial course, the top mark is exactly north of the right leeward gate, the offset
|
||||||
// mark is slightly west of the top mark; wind from the north makes the leg from top to offset a reaching leg
|
// mark is slightly west of the top mark; wind from the north makes the leg from top to offset a reaching leg
|
||||||
Position leftPosition = new DegreePosition(0, -0.00001);
|
Position leftPosition = new DegreePosition(0, -0.00001);
|
||||||
|
|||||||
+1
-2
@@ -15,7 +15,6 @@ import org.junit.Test;
|
|||||||
import com.maptrack.client.io.TypeController;
|
import com.maptrack.client.io.TypeController;
|
||||||
import com.sap.sailing.domain.base.RaceDefinition;
|
import com.sap.sailing.domain.base.RaceDefinition;
|
||||||
import com.sap.sailing.domain.base.Waypoint;
|
import com.sap.sailing.domain.base.Waypoint;
|
||||||
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
|
|
||||||
import com.sap.sailing.domain.tracking.DynamicRaceDefinitionSet;
|
import com.sap.sailing.domain.tracking.DynamicRaceDefinitionSet;
|
||||||
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
|
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
|
||||||
import com.sap.sailing.domain.tracking.impl.DynamicTrackedRegattaImpl;
|
import com.sap.sailing.domain.tracking.impl.DynamicTrackedRegattaImpl;
|
||||||
@@ -96,7 +95,7 @@ public class ReceiveMarkPassingDataTest extends AbstractTracTracLiveTest {
|
|||||||
receivers.add(receiver);
|
receivers.add(receiver);
|
||||||
for (Receiver r : DomainFactory.INSTANCE.getUpdateReceivers(
|
for (Receiver r : DomainFactory.INSTANCE.getUpdateReceivers(
|
||||||
new DynamicTrackedRegattaImpl(DomainFactory.INSTANCE.getOrCreateDefaultRegatta(getTracTracEvent(), /* trackedRegattaRegistry */ null)),
|
new DynamicTrackedRegattaImpl(DomainFactory.INSTANCE.getOrCreateDefaultRegatta(getTracTracEvent(), /* trackedRegattaRegistry */ null)),
|
||||||
getTracTracEvent(), EmptyWindStore.INSTANCE, EmptyRaceLogStore.INSTANCE, /* startOfTracking */ null, /* endOfTracking */ null, /* delayToLiveInMillis */ 0l,
|
getTracTracEvent(), EmptyWindStore.INSTANCE, /* startOfTracking */ null, /* endOfTracking */ null, /* delayToLiveInMillis */ 0l,
|
||||||
/* simulator */ null, new DynamicRaceDefinitionSet() {
|
/* simulator */ null, new DynamicRaceDefinitionSet() {
|
||||||
@Override
|
@Override
|
||||||
public void addRaceDefinition(RaceDefinition race) {}
|
public void addRaceDefinition(RaceDefinition race) {}
|
||||||
|
|||||||
+4
-5
@@ -12,12 +12,11 @@ import org.junit.Test;
|
|||||||
|
|
||||||
import com.maptrack.client.io.TypeController;
|
import com.maptrack.client.io.TypeController;
|
||||||
import com.sap.sailing.domain.base.Competitor;
|
import com.sap.sailing.domain.base.Competitor;
|
||||||
import com.sap.sailing.domain.base.Regatta;
|
|
||||||
import com.sap.sailing.domain.base.RaceDefinition;
|
import com.sap.sailing.domain.base.RaceDefinition;
|
||||||
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
|
import com.sap.sailing.domain.base.Regatta;
|
||||||
import com.sap.sailing.domain.tracking.DynamicRaceDefinitionSet;
|
import com.sap.sailing.domain.tracking.DynamicRaceDefinitionSet;
|
||||||
import com.sap.sailing.domain.tracking.DynamicTrackedRegatta;
|
|
||||||
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
|
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
|
||||||
|
import com.sap.sailing.domain.tracking.DynamicTrackedRegatta;
|
||||||
import com.sap.sailing.domain.tracking.GPSFix;
|
import com.sap.sailing.domain.tracking.GPSFix;
|
||||||
import com.sap.sailing.domain.tracking.GPSFixMoving;
|
import com.sap.sailing.domain.tracking.GPSFixMoving;
|
||||||
import com.sap.sailing.domain.tracking.RaceChangeListener;
|
import com.sap.sailing.domain.tracking.RaceChangeListener;
|
||||||
@@ -84,7 +83,7 @@ public class ReceiveTrackingDataTest extends AbstractTracTracLiveTest {
|
|||||||
@Override
|
@Override
|
||||||
public void addRaceDefinition(RaceDefinition race) {
|
public void addRaceDefinition(RaceDefinition race) {
|
||||||
}
|
}
|
||||||
}, /* trackedRegattaRegistry */ null, EmptyRaceLogStore.INSTANCE)) {
|
}, /* trackedRegattaRegistry */ null)) {
|
||||||
for (TypeController raceListener : receiver.getTypeControllersAndStart()) {
|
for (TypeController raceListener : receiver.getTypeControllersAndStart()) {
|
||||||
listeners.add(raceListener);
|
listeners.add(raceListener);
|
||||||
}
|
}
|
||||||
@@ -95,7 +94,7 @@ public class ReceiveTrackingDataTest extends AbstractTracTracLiveTest {
|
|||||||
@Override
|
@Override
|
||||||
public void addRaceDefinition(RaceDefinition race) {
|
public void addRaceDefinition(RaceDefinition race) {
|
||||||
}
|
}
|
||||||
}, /* trackedRegattaRegistry */ null, EmptyRaceLogStore.INSTANCE));
|
}, /* trackedRegattaRegistry */ null));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
+1
-3
@@ -33,7 +33,6 @@ import com.sap.sailing.domain.common.WindSourceType;
|
|||||||
import com.sap.sailing.domain.common.impl.DegreeBearingImpl;
|
import com.sap.sailing.domain.common.impl.DegreeBearingImpl;
|
||||||
import com.sap.sailing.domain.common.impl.DegreePosition;
|
import com.sap.sailing.domain.common.impl.DegreePosition;
|
||||||
import com.sap.sailing.domain.common.impl.WindSourceImpl;
|
import com.sap.sailing.domain.common.impl.WindSourceImpl;
|
||||||
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
|
|
||||||
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
|
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
|
||||||
import com.sap.sailing.domain.tracking.MarkPassing;
|
import com.sap.sailing.domain.tracking.MarkPassing;
|
||||||
import com.sap.sailing.domain.tracking.TrackedRegatta;
|
import com.sap.sailing.domain.tracking.TrackedRegatta;
|
||||||
@@ -112,8 +111,7 @@ public abstract class TrackBasedTest {
|
|||||||
DynamicTrackedRace trackedRace = new DynamicTrackedRaceImpl(trackedRegatta, race, EmptyWindStore.INSTANCE,
|
DynamicTrackedRace trackedRace = new DynamicTrackedRaceImpl(trackedRegatta, race, EmptyWindStore.INSTANCE,
|
||||||
/* delayToLiveInMillis */ 0,
|
/* delayToLiveInMillis */ 0,
|
||||||
/* millisecondsOverWhichToAverageWind */ 30000, /* millisecondsOverWhichToAverageSpeed */ 30000,
|
/* millisecondsOverWhichToAverageWind */ 30000, /* millisecondsOverWhichToAverageSpeed */ 30000,
|
||||||
/* delay for wind estimation cache invalidation */ 0,
|
/* delay for wind estimation cache invalidation */ 0);
|
||||||
EmptyRaceLogStore.INSTANCE);
|
|
||||||
// in this simplified artificial course, the top mark is exactly north of the right leeward gate
|
// in this simplified artificial course, the top mark is exactly north of the right leeward gate
|
||||||
DegreePosition topPosition = new DegreePosition(54.48, 10.24);
|
DegreePosition topPosition = new DegreePosition(54.48, 10.24);
|
||||||
TimePoint afterTheRace = new MillisecondsTimePoint(timePointForFixes.asMillis() + 36000000); // 10h after the fix time
|
TimePoint afterTheRace = new MillisecondsTimePoint(timePointForFixes.asMillis() + 36000000); // 10h after the fix time
|
||||||
|
|||||||
+1
-2
@@ -14,7 +14,6 @@ import org.junit.Before;
|
|||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
import com.sap.sailing.domain.base.Competitor;
|
import com.sap.sailing.domain.base.Competitor;
|
||||||
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
|
|
||||||
import com.sap.sailing.domain.tracking.impl.EmptyWindStore;
|
import com.sap.sailing.domain.tracking.impl.EmptyWindStore;
|
||||||
import com.sap.sailing.domain.tractracadapter.DomainFactory;
|
import com.sap.sailing.domain.tractracadapter.DomainFactory;
|
||||||
import com.sap.sailing.domain.tractracadapter.TracTracConnectionConstants;
|
import com.sap.sailing.domain.tractracadapter.TracTracConnectionConstants;
|
||||||
@@ -55,7 +54,7 @@ public class UnicodeCharactersInCompetitorNamesTest {
|
|||||||
+ TracTracConnectionConstants.PORT_STORED),
|
+ TracTracConnectionConstants.PORT_STORED),
|
||||||
/* startOfTracking */null, /* endOfTracking */null, /* delayToLiveInMillis */0l,
|
/* startOfTracking */null, /* endOfTracking */null, /* delayToLiveInMillis */0l,
|
||||||
/* simulateWithStartTimeNow */ false, EmptyWindStore.INSTANCE,
|
/* simulateWithStartTimeNow */ false, EmptyWindStore.INSTANCE,
|
||||||
new DummyTrackedRegattaRegistry(), EmptyRaceLogStore.INSTANCE);
|
new DummyTrackedRegattaRegistry());
|
||||||
|
|
||||||
Iterable<Competitor> competitors = fourtyninerYellow_2.getRacesHandle().getRaces().iterator().next()
|
Iterable<Competitor> competitors = fourtyninerYellow_2.getRacesHandle().getRaces().iterator().next()
|
||||||
.getCompetitors();
|
.getCompetitors();
|
||||||
|
|||||||
@@ -36,7 +36,6 @@ import com.sap.sailing.domain.common.TimePoint;
|
|||||||
import com.sap.sailing.domain.common.impl.DegreeBearingImpl;
|
import com.sap.sailing.domain.common.impl.DegreeBearingImpl;
|
||||||
import com.sap.sailing.domain.common.impl.DegreePosition;
|
import com.sap.sailing.domain.common.impl.DegreePosition;
|
||||||
import com.sap.sailing.domain.common.impl.Util;
|
import com.sap.sailing.domain.common.impl.Util;
|
||||||
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
|
|
||||||
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
|
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
|
||||||
import com.sap.sailing.domain.tracking.MarkPassing;
|
import com.sap.sailing.domain.tracking.MarkPassing;
|
||||||
import com.sap.sailing.domain.tracking.Wind;
|
import com.sap.sailing.domain.tracking.Wind;
|
||||||
@@ -269,8 +268,7 @@ public class WindTest {
|
|||||||
boatClass, Collections.singleton(competitor)),
|
boatClass, Collections.singleton(competitor)),
|
||||||
EmptyWindStore.INSTANCE, /* delayToLiveInMillis */ 1000,
|
EmptyWindStore.INSTANCE, /* delayToLiveInMillis */ 1000,
|
||||||
/* millisecondsOverWhichToAverageWind */ 30000,
|
/* millisecondsOverWhichToAverageWind */ 30000,
|
||||||
/* millisecondsOverWhichToAverageSpeed */ 30000,
|
/* millisecondsOverWhichToAverageSpeed */ 30000);
|
||||||
EmptyRaceLogStore.INSTANCE);
|
|
||||||
TimePoint start = MillisecondsTimePoint.now();
|
TimePoint start = MillisecondsTimePoint.now();
|
||||||
TimePoint topMarkRounding = start.plus(30000);
|
TimePoint topMarkRounding = start.plus(30000);
|
||||||
TimePoint finish = topMarkRounding.plus(30000);
|
TimePoint finish = topMarkRounding.plus(30000);
|
||||||
|
|||||||
+8
-28
@@ -5,33 +5,31 @@ import java.util.List;
|
|||||||
import java.util.NavigableSet;
|
import java.util.NavigableSet;
|
||||||
|
|
||||||
import com.sap.sailing.domain.base.BoatClass;
|
import com.sap.sailing.domain.base.BoatClass;
|
||||||
import com.sap.sailing.domain.base.Mark;
|
|
||||||
import com.sap.sailing.domain.base.Competitor;
|
import com.sap.sailing.domain.base.Competitor;
|
||||||
|
import com.sap.sailing.domain.base.Leg;
|
||||||
|
import com.sap.sailing.domain.base.Mark;
|
||||||
import com.sap.sailing.domain.base.RaceColumnListener;
|
import com.sap.sailing.domain.base.RaceColumnListener;
|
||||||
|
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.RegattaListener;
|
import com.sap.sailing.domain.base.RegattaListener;
|
||||||
import com.sap.sailing.domain.base.Leg;
|
|
||||||
import com.sap.sailing.domain.base.RaceDefinition;
|
|
||||||
import com.sap.sailing.domain.base.Series;
|
import com.sap.sailing.domain.base.Series;
|
||||||
import com.sap.sailing.domain.base.Waypoint;
|
import com.sap.sailing.domain.base.Waypoint;
|
||||||
import com.sap.sailing.domain.common.Distance;
|
import com.sap.sailing.domain.common.Distance;
|
||||||
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
|
||||||
import com.sap.sailing.domain.common.RegattaIdentifier;
|
|
||||||
import com.sap.sailing.domain.common.NoWindException;
|
import com.sap.sailing.domain.common.NoWindException;
|
||||||
import com.sap.sailing.domain.common.Position;
|
import com.sap.sailing.domain.common.Position;
|
||||||
|
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
||||||
|
import com.sap.sailing.domain.common.RegattaIdentifier;
|
||||||
import com.sap.sailing.domain.common.Tack;
|
import com.sap.sailing.domain.common.Tack;
|
||||||
import com.sap.sailing.domain.common.TimePoint;
|
import com.sap.sailing.domain.common.TimePoint;
|
||||||
import com.sap.sailing.domain.common.WindSource;
|
import com.sap.sailing.domain.common.WindSource;
|
||||||
import com.sap.sailing.domain.common.WindSourceType;
|
import com.sap.sailing.domain.common.WindSourceType;
|
||||||
import com.sap.sailing.domain.common.impl.Util.Pair;
|
import com.sap.sailing.domain.common.impl.Util.Pair;
|
||||||
import com.sap.sailing.domain.leaderboard.ScoringScheme;
|
import com.sap.sailing.domain.leaderboard.ScoringScheme;
|
||||||
import com.sap.sailing.domain.racelog.RaceLogEvent;
|
|
||||||
import com.sap.sailing.domain.racelog.RaceLog;
|
import com.sap.sailing.domain.racelog.RaceLog;
|
||||||
import com.sap.sailing.domain.racelog.RaceLogStore;
|
|
||||||
import com.sap.sailing.domain.tracking.DynamicGPSFixTrack;
|
import com.sap.sailing.domain.tracking.DynamicGPSFixTrack;
|
||||||
import com.sap.sailing.domain.tracking.DynamicRaceDefinitionSet;
|
import com.sap.sailing.domain.tracking.DynamicRaceDefinitionSet;
|
||||||
import com.sap.sailing.domain.tracking.DynamicTrackedRegatta;
|
|
||||||
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
|
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
|
||||||
|
import com.sap.sailing.domain.tracking.DynamicTrackedRegatta;
|
||||||
import com.sap.sailing.domain.tracking.GPSFix;
|
import com.sap.sailing.domain.tracking.GPSFix;
|
||||||
import com.sap.sailing.domain.tracking.GPSFixMoving;
|
import com.sap.sailing.domain.tracking.GPSFixMoving;
|
||||||
import com.sap.sailing.domain.tracking.Maneuver;
|
import com.sap.sailing.domain.tracking.Maneuver;
|
||||||
@@ -453,7 +451,7 @@ public class MockedTrackedRace implements DynamicTrackedRace {
|
|||||||
@Override
|
@Override
|
||||||
public DynamicTrackedRace createTrackedRace(RaceDefinition raceDefinition, WindStore windStore,
|
public DynamicTrackedRace createTrackedRace(RaceDefinition raceDefinition, WindStore windStore,
|
||||||
long delayToLiveInMillis, long millisecondsOverWhichToAverageWind, long millisecondsOverWhichToAverageSpeed,
|
long delayToLiveInMillis, long millisecondsOverWhichToAverageWind, long millisecondsOverWhichToAverageSpeed,
|
||||||
DynamicRaceDefinitionSet raceDefinitionSetToUpdate, RaceLogStore raceLogStore) {
|
DynamicRaceDefinitionSet raceDefinitionSetToUpdate) {
|
||||||
// TODO Auto-generated method stub
|
// TODO Auto-generated method stub
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -706,12 +704,6 @@ public class MockedTrackedRace implements DynamicTrackedRace {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void recordRaceLogEvent(RaceLogEvent event) {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void lockForRead(Iterable<MarkPassing> markPassings) {
|
public void lockForRead(Iterable<MarkPassing> markPassings) {
|
||||||
// TODO Auto-generated method stub
|
// TODO Auto-generated method stub
|
||||||
@@ -723,20 +715,8 @@ public class MockedTrackedRace implements DynamicTrackedRace {
|
|||||||
// TODO Auto-generated method stub
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
}
|
}
|
||||||
@Override
|
|
||||||
public void waitUntilRaceLogLoadingComplete()
|
|
||||||
throws InterruptedException {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public RaceLogStore getRaceLogStore() {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public TrackedRaceStatus getStatus() {
|
public TrackedRaceStatus getStatus() {
|
||||||
// TODO Auto-generated method stub
|
// TODO Auto-generated method stub
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
+1
-15
@@ -5,9 +5,9 @@ import java.util.Collections;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.NavigableSet;
|
import java.util.NavigableSet;
|
||||||
|
|
||||||
import com.sap.sailing.domain.base.Mark;
|
|
||||||
import com.sap.sailing.domain.base.Competitor;
|
import com.sap.sailing.domain.base.Competitor;
|
||||||
import com.sap.sailing.domain.base.Leg;
|
import com.sap.sailing.domain.base.Leg;
|
||||||
|
import com.sap.sailing.domain.base.Mark;
|
||||||
import com.sap.sailing.domain.base.RaceDefinition;
|
import com.sap.sailing.domain.base.RaceDefinition;
|
||||||
import com.sap.sailing.domain.base.Waypoint;
|
import com.sap.sailing.domain.base.Waypoint;
|
||||||
import com.sap.sailing.domain.base.impl.CourseImpl;
|
import com.sap.sailing.domain.base.impl.CourseImpl;
|
||||||
@@ -22,7 +22,6 @@ import com.sap.sailing.domain.common.WindSource;
|
|||||||
import com.sap.sailing.domain.common.WindSourceType;
|
import com.sap.sailing.domain.common.WindSourceType;
|
||||||
import com.sap.sailing.domain.common.impl.Util.Pair;
|
import com.sap.sailing.domain.common.impl.Util.Pair;
|
||||||
import com.sap.sailing.domain.racelog.RaceLog;
|
import com.sap.sailing.domain.racelog.RaceLog;
|
||||||
import com.sap.sailing.domain.racelog.RaceLogStore;
|
|
||||||
import com.sap.sailing.domain.tracking.GPSFix;
|
import com.sap.sailing.domain.tracking.GPSFix;
|
||||||
import com.sap.sailing.domain.tracking.GPSFixMoving;
|
import com.sap.sailing.domain.tracking.GPSFixMoving;
|
||||||
import com.sap.sailing.domain.tracking.GPSFixTrack;
|
import com.sap.sailing.domain.tracking.GPSFixTrack;
|
||||||
@@ -471,19 +470,6 @@ public class MockedTrackedRaceWithStartTimeAndRanks implements TrackedRace {
|
|||||||
// TODO Auto-generated method stub
|
// TODO Auto-generated method stub
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void waitUntilRaceLogLoadingComplete()
|
|
||||||
throws InterruptedException {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public RaceLogStore getRaceLogStore() {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TrackedRaceStatus getStatus() {
|
public TrackedRaceStatus getStatus() {
|
||||||
// TODO Auto-generated method stub
|
// TODO Auto-generated method stub
|
||||||
|
|||||||
+8
-14
@@ -12,8 +12,8 @@ import java.util.List;
|
|||||||
|
|
||||||
import com.maptrack.client.io.TypeController;
|
import com.maptrack.client.io.TypeController;
|
||||||
import com.sap.sailing.domain.base.BoatClass;
|
import com.sap.sailing.domain.base.BoatClass;
|
||||||
import com.sap.sailing.domain.base.Mark;
|
|
||||||
import com.sap.sailing.domain.base.Course;
|
import com.sap.sailing.domain.base.Course;
|
||||||
|
import com.sap.sailing.domain.base.Mark;
|
||||||
import com.sap.sailing.domain.base.Nationality;
|
import com.sap.sailing.domain.base.Nationality;
|
||||||
import com.sap.sailing.domain.base.Person;
|
import com.sap.sailing.domain.base.Person;
|
||||||
import com.sap.sailing.domain.base.RaceDefinition;
|
import com.sap.sailing.domain.base.RaceDefinition;
|
||||||
@@ -22,7 +22,6 @@ import com.sap.sailing.domain.base.Team;
|
|||||||
import com.sap.sailing.domain.base.Waypoint;
|
import com.sap.sailing.domain.base.Waypoint;
|
||||||
import com.sap.sailing.domain.common.TimePoint;
|
import com.sap.sailing.domain.common.TimePoint;
|
||||||
import com.sap.sailing.domain.common.impl.Util.Pair;
|
import com.sap.sailing.domain.common.impl.Util.Pair;
|
||||||
import com.sap.sailing.domain.racelog.RaceLogStore;
|
|
||||||
import com.sap.sailing.domain.tracking.DynamicRaceDefinitionSet;
|
import com.sap.sailing.domain.tracking.DynamicRaceDefinitionSet;
|
||||||
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
|
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
|
||||||
import com.sap.sailing.domain.tracking.DynamicTrackedRegatta;
|
import com.sap.sailing.domain.tracking.DynamicTrackedRegatta;
|
||||||
@@ -123,23 +122,19 @@ public interface DomainFactory {
|
|||||||
* Provides the capability to obtain the {@link WindTrack}s for the different wind sources. A trivial
|
* Provides the capability to obtain the {@link WindTrack}s for the different wind sources. A trivial
|
||||||
* implementation is {@link EmptyWindStore} which simply provides new, empty tracks. This is always
|
* implementation is {@link EmptyWindStore} which simply provides new, empty tracks. This is always
|
||||||
* available but loses track of the wind, e.g., during server restarts.
|
* available but loses track of the wind, e.g., during server restarts.
|
||||||
* @param raceLogStore
|
|
||||||
* Provides the capability to obtain the {@link RaceLog} for the race. A trivial
|
|
||||||
* implementation is {@link EmptyRaceLogStore} which simply provides new, empty tracks. This is always
|
|
||||||
* available but loses track of race log events, e.g., during server restarts.
|
|
||||||
*/
|
*/
|
||||||
TracTracRaceTracker createRaceTracker(URL paramURL, URI liveURI, URI storedURI, TimePoint startOfTracking,
|
TracTracRaceTracker createRaceTracker(URL paramURL, URI liveURI, URI storedURI, TimePoint startOfTracking,
|
||||||
TimePoint endOfTracking, long delayToLiveInMillis, boolean simulateWithStartTimeNow, WindStore windStore,
|
TimePoint endOfTracking, long delayToLiveInMillis, boolean simulateWithStartTimeNow, WindStore windStore,
|
||||||
TrackedRegattaRegistry trackedRegattaRegistry, RaceLogStore raceLogStore) throws MalformedURLException, FileNotFoundException,
|
TrackedRegattaRegistry trackedRegattaRegistry) throws MalformedURLException, FileNotFoundException,
|
||||||
URISyntaxException;
|
URISyntaxException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Same as {@link #createRaceTracker(URL, URI, URI, TimePoint, TimePoint, WindStore, TrackedRegattaRegistry, RaceLogStore)}, only that
|
* Same as {@link #createRaceTracker(URL, URI, URI, TimePoint, TimePoint, WindStore, TrackedRegattaRegistry)}, only that
|
||||||
* a predefined {@link Regatta} is used to hold the resulting races.
|
* a predefined {@link Regatta} is used to hold the resulting races.
|
||||||
*/
|
*/
|
||||||
RaceTracker createRaceTracker(Regatta regatta, URL paramURL, URI liveURI, URI storedURI, TimePoint startOfTracking,
|
RaceTracker createRaceTracker(Regatta regatta, URL paramURL, URI liveURI, URI storedURI, TimePoint startOfTracking,
|
||||||
TimePoint endOfTracking, long delayToLiveInMillis, boolean simulateWithStartTimeNow, WindStore windStore,
|
TimePoint endOfTracking, long delayToLiveInMillis, boolean simulateWithStartTimeNow, WindStore windStore,
|
||||||
TrackedRegattaRegistry trackedRegattaRegistry, RaceLogStore raceLogStore) throws MalformedURLException, FileNotFoundException,
|
TrackedRegattaRegistry trackedRegattaRegistry) throws MalformedURLException, FileNotFoundException,
|
||||||
URISyntaxException;
|
URISyntaxException;
|
||||||
|
|
||||||
BoatClass getOrCreateBoatClass(CompetitorClass competitorClass);
|
BoatClass getOrCreateBoatClass(CompetitorClass competitorClass);
|
||||||
@@ -170,7 +165,7 @@ public interface DomainFactory {
|
|||||||
Iterable<Receiver> getUpdateReceivers(DynamicTrackedRegatta trackedRegatta, Event tractracEvent,
|
Iterable<Receiver> getUpdateReceivers(DynamicTrackedRegatta trackedRegatta, Event tractracEvent,
|
||||||
TimePoint startOfTracking, TimePoint endOfTracking, long delayToLiveInMillis, Simulator simulator,
|
TimePoint startOfTracking, TimePoint endOfTracking, long delayToLiveInMillis, Simulator simulator,
|
||||||
WindStore windStore, DynamicRaceDefinitionSet raceDefinitionSetToUpdate,
|
WindStore windStore, DynamicRaceDefinitionSet raceDefinitionSetToUpdate,
|
||||||
TrackedRegattaRegistry trackedRegattaRegistry, RaceLogStore raceLogStore);
|
TrackedRegattaRegistry trackedRegattaRegistry);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a {@link RaceDefinition} from a TracTrac {@link Race} and a domain {@link Course} definition. The
|
* Creates a {@link RaceDefinition} from a TracTrac {@link Race} and a domain {@link Course} definition. The
|
||||||
@@ -191,7 +186,7 @@ public interface DomainFactory {
|
|||||||
*/
|
*/
|
||||||
DynamicTrackedRace getOrCreateRaceDefinitionAndTrackedRace(TrackedRegatta trackedRegatta, Race race,
|
DynamicTrackedRace getOrCreateRaceDefinitionAndTrackedRace(TrackedRegatta trackedRegatta, Race race,
|
||||||
Course course, WindStore windStore, long delayToLiveInMillis, long millisecondsOverWhichToAverageWind,
|
Course course, WindStore windStore, long delayToLiveInMillis, long millisecondsOverWhichToAverageWind,
|
||||||
DynamicRaceDefinitionSet raceDefinitionSetToUpdate, RaceLogStore raceLogStore);
|
DynamicRaceDefinitionSet raceDefinitionSetToUpdate);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The record may be for a single mark or a gate. If for a gate, the
|
* The record may be for a single mark or a gate. If for a gate, the
|
||||||
@@ -204,7 +199,7 @@ public interface DomainFactory {
|
|||||||
|
|
||||||
MarkPassing createMarkPassing(TimePoint timePoint, Waypoint passed, com.sap.sailing.domain.base.Competitor competitor);
|
MarkPassing createMarkPassing(TimePoint timePoint, Waypoint passed, com.sap.sailing.domain.base.Competitor competitor);
|
||||||
|
|
||||||
Iterable<Receiver> getUpdateReceivers(DynamicTrackedRegatta trackedRegatta, Event tractracEvent, WindStore windStore, RaceLogStore raceLogStore,
|
Iterable<Receiver> getUpdateReceivers(DynamicTrackedRegatta trackedRegatta, Event tractracEvent, WindStore windStore,
|
||||||
TimePoint startOfTracking, TimePoint endOfTracking, long delayToLiveInMillis, Simulator simulator, DynamicRaceDefinitionSet raceDefinitionSetToUpdate, TrackedRegattaRegistry trackedRegattaRegistry, ReceiverType... types);
|
TimePoint startOfTracking, TimePoint endOfTracking, long delayToLiveInMillis, Simulator simulator, DynamicRaceDefinitionSet raceDefinitionSetToUpdate, TrackedRegattaRegistry trackedRegattaRegistry, ReceiverType... types);
|
||||||
|
|
||||||
JSONService parseJSONURL(URL jsonURL) throws IOException, ParseException, org.json.simple.parser.ParseException, URISyntaxException;
|
JSONService parseJSONURL(URL jsonURL) throws IOException, ParseException, org.json.simple.parser.ParseException, URISyntaxException;
|
||||||
@@ -240,8 +235,7 @@ public interface DomainFactory {
|
|||||||
Pair<List<com.sap.sailing.domain.base.Competitor>, BoatClass> getCompetitorsAndDominantBoatClass(Race race);
|
Pair<List<com.sap.sailing.domain.base.Competitor>, BoatClass> getCompetitorsAndDominantBoatClass(Race race);
|
||||||
|
|
||||||
RaceTrackingConnectivityParameters createTrackingConnectivityParameters(URL paramURL, URI liveURI, URI storedURI,
|
RaceTrackingConnectivityParameters createTrackingConnectivityParameters(URL paramURL, URI liveURI, URI storedURI,
|
||||||
TimePoint startOfTracking, TimePoint endOfTracking, long delayToLiveInMillis, boolean simulateWithStartTimeNow, WindStore windStore,
|
TimePoint startOfTracking, TimePoint endOfTracking, long delayToLiveInMillis, boolean simulateWithStartTimeNow, WindStore windStore);
|
||||||
RaceLogStore raceLogStore);
|
|
||||||
/**
|
/**
|
||||||
* Removes all knowledge about <code>tractracRace</code> which includes removing it from the race cache, from the
|
* Removes all knowledge about <code>tractracRace</code> which includes removing it from the race cache, from the
|
||||||
* {@link com.sap.sailing.domain.base.Regatta} and, if a {@link TrackedRace} for the corresponding
|
* {@link com.sap.sailing.domain.base.Regatta} and, if a {@link TrackedRace} for the corresponding
|
||||||
|
|||||||
+14
-17
@@ -46,7 +46,6 @@ import com.sap.sailing.domain.common.impl.DegreeBearingImpl;
|
|||||||
import com.sap.sailing.domain.common.impl.DegreePosition;
|
import com.sap.sailing.domain.common.impl.DegreePosition;
|
||||||
import com.sap.sailing.domain.common.impl.Util;
|
import com.sap.sailing.domain.common.impl.Util;
|
||||||
import com.sap.sailing.domain.common.impl.Util.Pair;
|
import com.sap.sailing.domain.common.impl.Util.Pair;
|
||||||
import com.sap.sailing.domain.racelog.RaceLogStore;
|
|
||||||
import com.sap.sailing.domain.tracking.DynamicRaceDefinitionSet;
|
import com.sap.sailing.domain.tracking.DynamicRaceDefinitionSet;
|
||||||
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
|
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
|
||||||
import com.sap.sailing.domain.tracking.DynamicTrackedRegatta;
|
import com.sap.sailing.domain.tracking.DynamicTrackedRegatta;
|
||||||
@@ -349,7 +348,7 @@ public class DomainFactoryImpl implements DomainFactory {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Iterable<Receiver> getUpdateReceivers(DynamicTrackedRegatta trackedRegatta,
|
public Iterable<Receiver> getUpdateReceivers(DynamicTrackedRegatta trackedRegatta,
|
||||||
com.tractrac.clientmodule.Event tractracEvent, WindStore windStore, RaceLogStore raceLogStore, TimePoint startOfTracking,
|
com.tractrac.clientmodule.Event tractracEvent, WindStore windStore, TimePoint startOfTracking,
|
||||||
TimePoint endOfTracking, long delayToLiveInMillis, Simulator simulator,
|
TimePoint endOfTracking, long delayToLiveInMillis, Simulator simulator,
|
||||||
DynamicRaceDefinitionSet raceDefinitionSetToUpdate, TrackedRegattaRegistry trackedRegattaRegistry,
|
DynamicRaceDefinitionSet raceDefinitionSetToUpdate, TrackedRegattaRegistry trackedRegattaRegistry,
|
||||||
ReceiverType... types) {
|
ReceiverType... types) {
|
||||||
@@ -360,7 +359,7 @@ public class DomainFactoryImpl implements DomainFactory {
|
|||||||
result.add(new RaceCourseReceiver(
|
result.add(new RaceCourseReceiver(
|
||||||
this, trackedRegatta, tractracEvent, windStore,
|
this, trackedRegatta, tractracEvent, windStore,
|
||||||
raceDefinitionSetToUpdate, delayToLiveInMillis,
|
raceDefinitionSetToUpdate, delayToLiveInMillis,
|
||||||
WindTrack.DEFAULT_MILLISECONDS_OVER_WHICH_TO_AVERAGE_WIND, simulator, raceLogStore));
|
WindTrack.DEFAULT_MILLISECONDS_OVER_WHICH_TO_AVERAGE_WIND, simulator));
|
||||||
break;
|
break;
|
||||||
case MARKPOSITIONS:
|
case MARKPOSITIONS:
|
||||||
result.add(new MarkPositionReceiver(
|
result.add(new MarkPositionReceiver(
|
||||||
@@ -387,8 +386,8 @@ public class DomainFactoryImpl implements DomainFactory {
|
|||||||
public Iterable<Receiver> getUpdateReceivers(DynamicTrackedRegatta trackedRegatta,
|
public Iterable<Receiver> getUpdateReceivers(DynamicTrackedRegatta trackedRegatta,
|
||||||
com.tractrac.clientmodule.Event tractracEvent, TimePoint startOfTracking, TimePoint endOfTracking,
|
com.tractrac.clientmodule.Event tractracEvent, TimePoint startOfTracking, TimePoint endOfTracking,
|
||||||
long delayToLiveInMillis, Simulator simulator, WindStore windStore,
|
long delayToLiveInMillis, Simulator simulator, WindStore windStore,
|
||||||
DynamicRaceDefinitionSet raceDefinitionSetToUpdate, TrackedRegattaRegistry trackedRegattaRegistry, RaceLogStore raceLogStore) {
|
DynamicRaceDefinitionSet raceDefinitionSetToUpdate, TrackedRegattaRegistry trackedRegattaRegistry) {
|
||||||
return getUpdateReceivers(trackedRegatta, tractracEvent, windStore, raceLogStore, startOfTracking, endOfTracking,
|
return getUpdateReceivers(trackedRegatta, tractracEvent, windStore, startOfTracking, endOfTracking,
|
||||||
delayToLiveInMillis, simulator, raceDefinitionSetToUpdate, trackedRegattaRegistry,
|
delayToLiveInMillis, simulator, raceDefinitionSetToUpdate, trackedRegattaRegistry,
|
||||||
ReceiverType.RACECOURSE, ReceiverType.MARKPASSINGS, ReceiverType.MARKPOSITIONS,
|
ReceiverType.RACECOURSE, ReceiverType.MARKPASSINGS, ReceiverType.MARKPOSITIONS,
|
||||||
ReceiverType.RACESTARTFINISH, ReceiverType.RAWPOSITIONS);
|
ReceiverType.RACESTARTFINISH, ReceiverType.RAWPOSITIONS);
|
||||||
@@ -448,7 +447,7 @@ public class DomainFactoryImpl implements DomainFactory {
|
|||||||
@Override
|
@Override
|
||||||
public DynamicTrackedRace getOrCreateRaceDefinitionAndTrackedRace(TrackedRegatta trackedRegatta,
|
public DynamicTrackedRace getOrCreateRaceDefinitionAndTrackedRace(TrackedRegatta trackedRegatta,
|
||||||
Race race, Course course, WindStore windStore, long delayToLiveInMillis, long millisecondsOverWhichToAverageWind,
|
Race race, Course course, WindStore windStore, long delayToLiveInMillis, long millisecondsOverWhichToAverageWind,
|
||||||
DynamicRaceDefinitionSet raceDefinitionSetToUpdate, RaceLogStore raceLogStore) {
|
DynamicRaceDefinitionSet raceDefinitionSetToUpdate) {
|
||||||
synchronized (raceCache) {
|
synchronized (raceCache) {
|
||||||
RaceDefinition raceDefinition = raceCache.get(race);
|
RaceDefinition raceDefinition = raceCache.get(race);
|
||||||
if (raceDefinition == null) {
|
if (raceDefinition == null) {
|
||||||
@@ -460,7 +459,7 @@ public class DomainFactoryImpl implements DomainFactory {
|
|||||||
if (raceDefinition.getBoatClass() == trackedRegatta.getRegatta().getBoatClass()) {
|
if (raceDefinition.getBoatClass() == trackedRegatta.getRegatta().getBoatClass()) {
|
||||||
trackedRegatta.getRegatta().addRace(raceDefinition);
|
trackedRegatta.getRegatta().addRace(raceDefinition);
|
||||||
DynamicTrackedRace trackedRace = createTrackedRace(trackedRegatta, raceDefinition, windStore,
|
DynamicTrackedRace trackedRace = createTrackedRace(trackedRegatta, raceDefinition, windStore,
|
||||||
delayToLiveInMillis, millisecondsOverWhichToAverageWind, raceDefinitionSetToUpdate, raceLogStore);
|
delayToLiveInMillis, millisecondsOverWhichToAverageWind, raceDefinitionSetToUpdate);
|
||||||
logger.info("Added race "+raceDefinition+" to regatta "+trackedRegatta.getRegatta());
|
logger.info("Added race "+raceDefinition+" to regatta "+trackedRegatta.getRegatta());
|
||||||
synchronized (raceCache) {
|
synchronized (raceCache) {
|
||||||
raceCache.put(race, raceDefinition);
|
raceCache.put(race, raceDefinition);
|
||||||
@@ -480,12 +479,11 @@ public class DomainFactoryImpl implements DomainFactory {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private DynamicTrackedRace createTrackedRace(TrackedRegatta trackedRegatta, RaceDefinition race, WindStore windStore,
|
private DynamicTrackedRace createTrackedRace(TrackedRegatta trackedRegatta, RaceDefinition race, WindStore windStore,
|
||||||
long delayToLiveInMillis, long millisecondsOverWhichToAverageWind, DynamicRaceDefinitionSet raceDefinitionSetToUpdate,
|
long delayToLiveInMillis, long millisecondsOverWhichToAverageWind, DynamicRaceDefinitionSet raceDefinitionSetToUpdate) {
|
||||||
RaceLogStore raceLogStore) {
|
|
||||||
return trackedRegatta.createTrackedRace(race,
|
return trackedRegatta.createTrackedRace(race,
|
||||||
windStore, delayToLiveInMillis, millisecondsOverWhichToAverageWind,
|
windStore, delayToLiveInMillis, millisecondsOverWhichToAverageWind,
|
||||||
/* time over which to average speed: */ race.getBoatClass().getApproximateManeuverDurationInMilliseconds(),
|
/* time over which to average speed: */ race.getBoatClass().getApproximateManeuverDurationInMilliseconds(),
|
||||||
raceDefinitionSetToUpdate, raceLogStore);
|
raceDefinitionSetToUpdate);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -550,20 +548,19 @@ public class DomainFactoryImpl implements DomainFactory {
|
|||||||
@Override
|
@Override
|
||||||
public TracTracRaceTracker createRaceTracker(URL paramURL, URI liveURI, URI storedURI, TimePoint startOfTracking,
|
public TracTracRaceTracker createRaceTracker(URL paramURL, URI liveURI, URI storedURI, TimePoint startOfTracking,
|
||||||
TimePoint endOfTracking, long delayToLiveInMillis, boolean simulateWithStartTimeNow, WindStore windStore,
|
TimePoint endOfTracking, long delayToLiveInMillis, boolean simulateWithStartTimeNow, WindStore windStore,
|
||||||
TrackedRegattaRegistry trackedRegattaRegistry, RaceLogStore raceLogStore) throws MalformedURLException, FileNotFoundException,
|
TrackedRegattaRegistry trackedRegattaRegistry) throws MalformedURLException, FileNotFoundException,
|
||||||
URISyntaxException {
|
URISyntaxException {
|
||||||
return new TracTracRaceTrackerImpl(this, paramURL, liveURI, storedURI, startOfTracking, endOfTracking, delayToLiveInMillis,
|
return new TracTracRaceTrackerImpl(this, paramURL, liveURI, storedURI, startOfTracking, endOfTracking, delayToLiveInMillis,
|
||||||
simulateWithStartTimeNow, windStore, trackedRegattaRegistry, raceLogStore);
|
simulateWithStartTimeNow, windStore, trackedRegattaRegistry);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public RaceTracker createRaceTracker(Regatta regatta, URL paramURL, URI liveURI, URI storedURI,
|
public RaceTracker createRaceTracker(Regatta regatta, URL paramURL, URI liveURI, URI storedURI,
|
||||||
TimePoint startOfTracking, TimePoint endOfTracking, long delayToLiveInMillis,
|
TimePoint startOfTracking, TimePoint endOfTracking, long delayToLiveInMillis,
|
||||||
boolean simulateWithStartTimeNow, WindStore windStore, TrackedRegattaRegistry trackedRegattaRegistry,
|
boolean simulateWithStartTimeNow, WindStore windStore, TrackedRegattaRegistry trackedRegattaRegistry)
|
||||||
RaceLogStore raceLogStore)
|
|
||||||
throws MalformedURLException, FileNotFoundException, URISyntaxException {
|
throws MalformedURLException, FileNotFoundException, URISyntaxException {
|
||||||
return new TracTracRaceTrackerImpl(regatta, this, paramURL, liveURI, storedURI, startOfTracking, endOfTracking, delayToLiveInMillis,
|
return new TracTracRaceTrackerImpl(regatta, this, paramURL, liveURI, storedURI, startOfTracking, endOfTracking, delayToLiveInMillis,
|
||||||
simulateWithStartTimeNow, windStore, trackedRegattaRegistry, raceLogStore);
|
simulateWithStartTimeNow, windStore, trackedRegattaRegistry);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -579,9 +576,9 @@ public class DomainFactoryImpl implements DomainFactory {
|
|||||||
@Override
|
@Override
|
||||||
public RaceTrackingConnectivityParameters createTrackingConnectivityParameters(URL paramURL, URI liveURI,
|
public RaceTrackingConnectivityParameters createTrackingConnectivityParameters(URL paramURL, URI liveURI,
|
||||||
URI storedURI, TimePoint startOfTracking, TimePoint endOfTracking, long delayToLiveInMillis,
|
URI storedURI, TimePoint startOfTracking, TimePoint endOfTracking, long delayToLiveInMillis,
|
||||||
boolean simulateWithStartTimeNow, WindStore windStore, RaceLogStore raceLogStore) {
|
boolean simulateWithStartTimeNow, WindStore windStore) {
|
||||||
return new RaceTrackingConnectivityParametersImpl(paramURL, liveURI, storedURI, startOfTracking, endOfTracking,
|
return new RaceTrackingConnectivityParametersImpl(paramURL, liveURI, storedURI, startOfTracking, endOfTracking,
|
||||||
delayToLiveInMillis, simulateWithStartTimeNow, windStore, this, raceLogStore);
|
delayToLiveInMillis, simulateWithStartTimeNow, windStore, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
+3
-6
@@ -11,7 +11,6 @@ import com.sap.sailing.domain.base.Course;
|
|||||||
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.common.impl.Util.Triple;
|
import com.sap.sailing.domain.common.impl.Util.Triple;
|
||||||
import com.sap.sailing.domain.racelog.RaceLogStore;
|
|
||||||
import com.sap.sailing.domain.tracking.DynamicRaceDefinitionSet;
|
import com.sap.sailing.domain.tracking.DynamicRaceDefinitionSet;
|
||||||
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
|
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
|
||||||
import com.sap.sailing.domain.tracking.DynamicTrackedRegatta;
|
import com.sap.sailing.domain.tracking.DynamicTrackedRegatta;
|
||||||
@@ -41,13 +40,12 @@ public class RaceCourseReceiver extends AbstractReceiverWithQueue<Route, RouteDa
|
|||||||
private final long millisecondsOverWhichToAverageWind;
|
private final long millisecondsOverWhichToAverageWind;
|
||||||
private final long delayToLiveInMillis;
|
private final long delayToLiveInMillis;
|
||||||
private final WindStore windStore;
|
private final WindStore windStore;
|
||||||
private final RaceLogStore raceLogStore;
|
|
||||||
private final DynamicRaceDefinitionSet raceDefinitionSetToUpdate;
|
private final DynamicRaceDefinitionSet raceDefinitionSetToUpdate;
|
||||||
|
|
||||||
public RaceCourseReceiver(DomainFactory domainFactory, DynamicTrackedRegatta trackedRegatta,
|
public RaceCourseReceiver(DomainFactory domainFactory, DynamicTrackedRegatta trackedRegatta,
|
||||||
com.tractrac.clientmodule.Event tractracEvent, WindStore windStore,
|
com.tractrac.clientmodule.Event tractracEvent, WindStore windStore,
|
||||||
DynamicRaceDefinitionSet raceDefinitionSetToUpdate, long delayToLiveInMillis,
|
DynamicRaceDefinitionSet raceDefinitionSetToUpdate, long delayToLiveInMillis,
|
||||||
long millisecondsOverWhichToAverageWind, Simulator simulator, RaceLogStore raceLogStore) {
|
long millisecondsOverWhichToAverageWind, Simulator simulator) {
|
||||||
super(domainFactory, tractracEvent, trackedRegatta, simulator);
|
super(domainFactory, tractracEvent, trackedRegatta, simulator);
|
||||||
this.millisecondsOverWhichToAverageWind = millisecondsOverWhichToAverageWind;
|
this.millisecondsOverWhichToAverageWind = millisecondsOverWhichToAverageWind;
|
||||||
this.delayToLiveInMillis = delayToLiveInMillis;
|
this.delayToLiveInMillis = delayToLiveInMillis;
|
||||||
@@ -57,7 +55,6 @@ public class RaceCourseReceiver extends AbstractReceiverWithQueue<Route, RouteDa
|
|||||||
this.windStore = simulator.simulatingWindStore(windStore);
|
this.windStore = simulator.simulatingWindStore(windStore);
|
||||||
}
|
}
|
||||||
this.raceDefinitionSetToUpdate = raceDefinitionSetToUpdate;
|
this.raceDefinitionSetToUpdate = raceDefinitionSetToUpdate;
|
||||||
this.raceLogStore = raceLogStore;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -109,7 +106,7 @@ public class RaceCourseReceiver extends AbstractReceiverWithQueue<Route, RouteDa
|
|||||||
// create race definition and add to event
|
// create race definition and add to event
|
||||||
DynamicTrackedRace trackedRace = getDomainFactory().getOrCreateRaceDefinitionAndTrackedRace(
|
DynamicTrackedRace trackedRace = getDomainFactory().getOrCreateRaceDefinitionAndTrackedRace(
|
||||||
getTrackedRegatta(), event.getC(), course, windStore, delayToLiveInMillis,
|
getTrackedRegatta(), event.getC(), course, windStore, delayToLiveInMillis,
|
||||||
millisecondsOverWhichToAverageWind, raceDefinitionSetToUpdate, raceLogStore);
|
millisecondsOverWhichToAverageWind, raceDefinitionSetToUpdate);
|
||||||
if (getSimulator() != null) {
|
if (getSimulator() != null) {
|
||||||
getSimulator().setTrackedRace(trackedRace);
|
getSimulator().setTrackedRace(trackedRace);
|
||||||
}
|
}
|
||||||
@@ -120,7 +117,7 @@ public class RaceCourseReceiver extends AbstractReceiverWithQueue<Route, RouteDa
|
|||||||
getTrackedRegatta().createTrackedRace(race,
|
getTrackedRegatta().createTrackedRace(race,
|
||||||
windStore, delayToLiveInMillis, millisecondsOverWhichToAverageWind,
|
windStore, delayToLiveInMillis, millisecondsOverWhichToAverageWind,
|
||||||
/* time over which to average speed: */ race.getBoatClass().getApproximateManeuverDurationInMilliseconds(),
|
/* time over which to average speed: */ race.getBoatClass().getApproximateManeuverDurationInMilliseconds(),
|
||||||
raceDefinitionSetToUpdate, raceLogStore);
|
raceDefinitionSetToUpdate);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
+3
-6
@@ -9,7 +9,6 @@ import java.net.URL;
|
|||||||
import com.sap.sailing.domain.base.Regatta;
|
import com.sap.sailing.domain.base.Regatta;
|
||||||
import com.sap.sailing.domain.common.TimePoint;
|
import com.sap.sailing.domain.common.TimePoint;
|
||||||
import com.sap.sailing.domain.common.impl.Util;
|
import com.sap.sailing.domain.common.impl.Util;
|
||||||
import com.sap.sailing.domain.racelog.RaceLogStore;
|
|
||||||
import com.sap.sailing.domain.tracking.RaceTracker;
|
import com.sap.sailing.domain.tracking.RaceTracker;
|
||||||
import com.sap.sailing.domain.tracking.RaceTrackingConnectivityParameters;
|
import com.sap.sailing.domain.tracking.RaceTrackingConnectivityParameters;
|
||||||
import com.sap.sailing.domain.tracking.TrackedRegattaRegistry;
|
import com.sap.sailing.domain.tracking.TrackedRegattaRegistry;
|
||||||
@@ -23,14 +22,13 @@ public class RaceTrackingConnectivityParametersImpl implements RaceTrackingConne
|
|||||||
private final TimePoint startOfTracking;
|
private final TimePoint startOfTracking;
|
||||||
private final TimePoint endOfTracking;
|
private final TimePoint endOfTracking;
|
||||||
private final WindStore windStore;
|
private final WindStore windStore;
|
||||||
private final RaceLogStore raceLogStore;
|
|
||||||
private final DomainFactory domainFactory;
|
private final DomainFactory domainFactory;
|
||||||
private final long delayToLiveInMillis;
|
private final long delayToLiveInMillis;
|
||||||
private final boolean simulateWithStartTimeNow;
|
private final boolean simulateWithStartTimeNow;
|
||||||
|
|
||||||
public RaceTrackingConnectivityParametersImpl(URL paramURL, URI liveURI, URI storedURI, TimePoint startOfTracking,
|
public RaceTrackingConnectivityParametersImpl(URL paramURL, URI liveURI, URI storedURI, TimePoint startOfTracking,
|
||||||
TimePoint endOfTracking, long delayToLiveInMillis, boolean simulateWithStartTimeNow, WindStore windStore,
|
TimePoint endOfTracking, long delayToLiveInMillis, boolean simulateWithStartTimeNow, WindStore windStore,
|
||||||
DomainFactory domainFactory, RaceLogStore raceLogStore) {
|
DomainFactory domainFactory) {
|
||||||
super();
|
super();
|
||||||
this.paramURL = paramURL;
|
this.paramURL = paramURL;
|
||||||
this.liveURI = liveURI;
|
this.liveURI = liveURI;
|
||||||
@@ -39,7 +37,6 @@ public class RaceTrackingConnectivityParametersImpl implements RaceTrackingConne
|
|||||||
this.endOfTracking = endOfTracking;
|
this.endOfTracking = endOfTracking;
|
||||||
this.delayToLiveInMillis = delayToLiveInMillis;
|
this.delayToLiveInMillis = delayToLiveInMillis;
|
||||||
this.windStore = windStore;
|
this.windStore = windStore;
|
||||||
this.raceLogStore = raceLogStore;
|
|
||||||
this.domainFactory = domainFactory;
|
this.domainFactory = domainFactory;
|
||||||
this.simulateWithStartTimeNow = simulateWithStartTimeNow;
|
this.simulateWithStartTimeNow = simulateWithStartTimeNow;
|
||||||
}
|
}
|
||||||
@@ -48,7 +45,7 @@ public class RaceTrackingConnectivityParametersImpl implements RaceTrackingConne
|
|||||||
public RaceTracker createRaceTracker(TrackedRegattaRegistry trackedRegattaRegistry) throws MalformedURLException,
|
public RaceTracker createRaceTracker(TrackedRegattaRegistry trackedRegattaRegistry) throws MalformedURLException,
|
||||||
FileNotFoundException, URISyntaxException {
|
FileNotFoundException, URISyntaxException {
|
||||||
RaceTracker tracker = domainFactory.createRaceTracker(paramURL, liveURI, storedURI, startOfTracking,
|
RaceTracker tracker = domainFactory.createRaceTracker(paramURL, liveURI, storedURI, startOfTracking,
|
||||||
endOfTracking, delayToLiveInMillis, simulateWithStartTimeNow, windStore, trackedRegattaRegistry, raceLogStore);
|
endOfTracking, delayToLiveInMillis, simulateWithStartTimeNow, windStore, trackedRegattaRegistry);
|
||||||
return tracker;
|
return tracker;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -56,7 +53,7 @@ public class RaceTrackingConnectivityParametersImpl implements RaceTrackingConne
|
|||||||
public RaceTracker createRaceTracker(Regatta regatta, TrackedRegattaRegistry trackedRegattaRegistry)
|
public RaceTracker createRaceTracker(Regatta regatta, TrackedRegattaRegistry trackedRegattaRegistry)
|
||||||
throws Exception {
|
throws Exception {
|
||||||
RaceTracker tracker = domainFactory.createRaceTracker(regatta, paramURL, liveURI, storedURI, startOfTracking,
|
RaceTracker tracker = domainFactory.createRaceTracker(regatta, paramURL, liveURI, storedURI, startOfTracking,
|
||||||
endOfTracking, delayToLiveInMillis, simulateWithStartTimeNow, windStore, trackedRegattaRegistry, raceLogStore);
|
endOfTracking, delayToLiveInMillis, simulateWithStartTimeNow, windStore, trackedRegattaRegistry);
|
||||||
return tracker;
|
return tracker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+8
-11
@@ -32,7 +32,6 @@ import com.sap.sailing.domain.common.Position;
|
|||||||
import com.sap.sailing.domain.common.TimePoint;
|
import com.sap.sailing.domain.common.TimePoint;
|
||||||
import com.sap.sailing.domain.common.TrackedRaceStatusEnum;
|
import com.sap.sailing.domain.common.TrackedRaceStatusEnum;
|
||||||
import com.sap.sailing.domain.common.impl.Util.Triple;
|
import com.sap.sailing.domain.common.impl.Util.Triple;
|
||||||
import com.sap.sailing.domain.racelog.RaceLogStore;
|
|
||||||
import com.sap.sailing.domain.tracking.AbstractRaceTrackerImpl;
|
import com.sap.sailing.domain.tracking.AbstractRaceTrackerImpl;
|
||||||
import com.sap.sailing.domain.tracking.DynamicGPSFixTrack;
|
import com.sap.sailing.domain.tracking.DynamicGPSFixTrack;
|
||||||
import com.sap.sailing.domain.tracking.DynamicRaceDefinitionSet;
|
import com.sap.sailing.domain.tracking.DynamicRaceDefinitionSet;
|
||||||
@@ -122,19 +121,18 @@ public class TracTracRaceTrackerImpl extends AbstractRaceTrackerImpl implements
|
|||||||
*/
|
*/
|
||||||
protected TracTracRaceTrackerImpl(DomainFactory domainFactory, URL paramURL, URI liveURI, URI storedURI,
|
protected TracTracRaceTrackerImpl(DomainFactory domainFactory, URL paramURL, URI liveURI, URI storedURI,
|
||||||
TimePoint startOfTracking, TimePoint endOfTracking, long delayToLiveInMillis,
|
TimePoint startOfTracking, TimePoint endOfTracking, long delayToLiveInMillis,
|
||||||
boolean simulateWithStartTimeNow, WindStore windStore, TrackedRegattaRegistry trackedRegattaRegistry,
|
boolean simulateWithStartTimeNow, WindStore windStore, TrackedRegattaRegistry trackedRegattaRegistry)
|
||||||
RaceLogStore raceLogStore)
|
|
||||||
throws URISyntaxException, MalformedURLException, FileNotFoundException {
|
throws URISyntaxException, MalformedURLException, FileNotFoundException {
|
||||||
this(KeyValue.setup(paramURL), domainFactory, paramURL, liveURI, storedURI, startOfTracking, endOfTracking,
|
this(KeyValue.setup(paramURL), domainFactory, paramURL, liveURI, storedURI, startOfTracking, endOfTracking,
|
||||||
delayToLiveInMillis, simulateWithStartTimeNow, windStore, trackedRegattaRegistry, raceLogStore);
|
delayToLiveInMillis, simulateWithStartTimeNow, windStore, trackedRegattaRegistry);
|
||||||
}
|
}
|
||||||
|
|
||||||
private TracTracRaceTrackerImpl(Event tractracEvent, DomainFactory domainFactory, URL paramURL, URI liveURI, URI storedURI,
|
private TracTracRaceTrackerImpl(Event tractracEvent, DomainFactory domainFactory, URL paramURL, URI liveURI, URI storedURI,
|
||||||
TimePoint startOfTracking, TimePoint endOfTracking, long delayToLiveInMillis, boolean simulateWithStartTimeNow,
|
TimePoint startOfTracking, TimePoint endOfTracking, long delayToLiveInMillis, boolean simulateWithStartTimeNow,
|
||||||
WindStore windStore, TrackedRegattaRegistry trackedRegattaRegistry, RaceLogStore raceLogStore)
|
WindStore windStore, TrackedRegattaRegistry trackedRegattaRegistry)
|
||||||
throws URISyntaxException, MalformedURLException, FileNotFoundException {
|
throws URISyntaxException, MalformedURLException, FileNotFoundException {
|
||||||
this(tractracEvent, null, domainFactory, paramURL, liveURI, storedURI,
|
this(tractracEvent, null, domainFactory, paramURL, liveURI, storedURI,
|
||||||
startOfTracking, endOfTracking, delayToLiveInMillis, simulateWithStartTimeNow, windStore, trackedRegattaRegistry, raceLogStore);
|
startOfTracking, endOfTracking, delayToLiveInMillis, simulateWithStartTimeNow, windStore, trackedRegattaRegistry);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -145,10 +143,10 @@ public class TracTracRaceTrackerImpl extends AbstractRaceTrackerImpl implements
|
|||||||
*/
|
*/
|
||||||
protected TracTracRaceTrackerImpl(Regatta regatta, DomainFactory domainFactory, URL paramURL, URI liveURI, URI storedURI,
|
protected TracTracRaceTrackerImpl(Regatta regatta, DomainFactory domainFactory, URL paramURL, URI liveURI, URI storedURI,
|
||||||
TimePoint startOfTracking, TimePoint endOfTracking, long delayToLiveInMillis, boolean simulateWithStartTimeNow,
|
TimePoint startOfTracking, TimePoint endOfTracking, long delayToLiveInMillis, boolean simulateWithStartTimeNow,
|
||||||
WindStore windStore, TrackedRegattaRegistry trackedRegattaRegistry, RaceLogStore raceLogStore)
|
WindStore windStore, TrackedRegattaRegistry trackedRegattaRegistry)
|
||||||
throws URISyntaxException, MalformedURLException, FileNotFoundException {
|
throws URISyntaxException, MalformedURLException, FileNotFoundException {
|
||||||
this(KeyValue.setup(paramURL), regatta, domainFactory, paramURL, liveURI, storedURI, startOfTracking,
|
this(KeyValue.setup(paramURL), regatta, domainFactory, paramURL, liveURI, storedURI, startOfTracking,
|
||||||
endOfTracking, delayToLiveInMillis, simulateWithStartTimeNow, windStore, trackedRegattaRegistry, raceLogStore);
|
endOfTracking, delayToLiveInMillis, simulateWithStartTimeNow, windStore, trackedRegattaRegistry);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -164,8 +162,7 @@ public class TracTracRaceTrackerImpl extends AbstractRaceTrackerImpl implements
|
|||||||
*/
|
*/
|
||||||
private TracTracRaceTrackerImpl(Event tractracEvent, final Regatta regatta, DomainFactory domainFactory,
|
private TracTracRaceTrackerImpl(Event tractracEvent, final Regatta regatta, DomainFactory domainFactory,
|
||||||
URL paramURL, URI liveURI, URI storedURI, TimePoint startOfTracking, TimePoint endOfTracking,
|
URL paramURL, URI liveURI, URI storedURI, TimePoint startOfTracking, TimePoint endOfTracking,
|
||||||
long delayToLiveInMillis, boolean simulateWithStartTimeNow, WindStore windStore, TrackedRegattaRegistry trackedRegattaRegistry,
|
long delayToLiveInMillis, boolean simulateWithStartTimeNow, WindStore windStore, TrackedRegattaRegistry trackedRegattaRegistry)
|
||||||
RaceLogStore raceLogStore)
|
|
||||||
throws URISyntaxException, MalformedURLException, FileNotFoundException {
|
throws URISyntaxException, MalformedURLException, FileNotFoundException {
|
||||||
super();
|
super();
|
||||||
this.tractracEvent = tractracEvent;
|
this.tractracEvent = tractracEvent;
|
||||||
@@ -210,7 +207,7 @@ public class TracTracRaceTrackerImpl extends AbstractRaceTrackerImpl implements
|
|||||||
receivers = new HashSet<Receiver>();
|
receivers = new HashSet<Receiver>();
|
||||||
Set<TypeController> typeControllers = new HashSet<TypeController>();
|
Set<TypeController> typeControllers = new HashSet<TypeController>();
|
||||||
for (Receiver receiver : domainFactory.getUpdateReceivers(getTrackedRegatta(), tractracEvent, startOfTracking,
|
for (Receiver receiver : domainFactory.getUpdateReceivers(getTrackedRegatta(), tractracEvent, startOfTracking,
|
||||||
endOfTracking, delayToLiveInMillis, simulator, windStore, this, trackedRegattaRegistry, raceLogStore)) {
|
endOfTracking, delayToLiveInMillis, simulator, windStore, this, trackedRegattaRegistry)) {
|
||||||
receivers.add(receiver);
|
receivers.add(receiver);
|
||||||
for (TypeController typeController : receiver.getTypeControllersAndStart()) {
|
for (TypeController typeController : receiver.getTypeControllersAndStart()) {
|
||||||
typeControllers.add(typeController);
|
typeControllers.add(typeController);
|
||||||
|
|||||||
+1
-4
@@ -1,10 +1,9 @@
|
|||||||
package com.sap.sailing.domain.tracking;
|
package com.sap.sailing.domain.tracking;
|
||||||
|
|
||||||
import com.sap.sailing.domain.base.Mark;
|
|
||||||
import com.sap.sailing.domain.base.Competitor;
|
import com.sap.sailing.domain.base.Competitor;
|
||||||
|
import com.sap.sailing.domain.base.Mark;
|
||||||
import com.sap.sailing.domain.common.TimePoint;
|
import com.sap.sailing.domain.common.TimePoint;
|
||||||
import com.sap.sailing.domain.common.WindSource;
|
import com.sap.sailing.domain.common.WindSource;
|
||||||
import com.sap.sailing.domain.racelog.RaceLogEvent;
|
|
||||||
|
|
||||||
public interface DynamicTrackedRace extends TrackedRace {
|
public interface DynamicTrackedRace extends TrackedRace {
|
||||||
void recordFix(Competitor competitor, GPSFixMoving fix);
|
void recordFix(Competitor competitor, GPSFixMoving fix);
|
||||||
@@ -14,8 +13,6 @@ public interface DynamicTrackedRace extends TrackedRace {
|
|||||||
void recordWind(Wind wind, WindSource windSource);
|
void recordWind(Wind wind, WindSource windSource);
|
||||||
|
|
||||||
void removeWind(Wind wind, WindSource windSource);
|
void removeWind(Wind wind, WindSource windSource);
|
||||||
|
|
||||||
void recordRaceLogEvent(RaceLogEvent event);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The raw, updating feed of a single competitor participating in this race
|
* The raw, updating feed of a single competitor participating in this race
|
||||||
|
|||||||
+1
-2
@@ -1,7 +1,6 @@
|
|||||||
package com.sap.sailing.domain.tracking;
|
package com.sap.sailing.domain.tracking;
|
||||||
|
|
||||||
import com.sap.sailing.domain.base.RaceDefinition;
|
import com.sap.sailing.domain.base.RaceDefinition;
|
||||||
import com.sap.sailing.domain.racelog.RaceLogStore;
|
|
||||||
|
|
||||||
public interface DynamicTrackedRegatta extends TrackedRegatta {
|
public interface DynamicTrackedRegatta extends TrackedRegatta {
|
||||||
|
|
||||||
@@ -20,6 +19,6 @@ public interface DynamicTrackedRegatta extends TrackedRegatta {
|
|||||||
*/
|
*/
|
||||||
DynamicTrackedRace createTrackedRace(RaceDefinition raceDefinition, WindStore windStore,
|
DynamicTrackedRace createTrackedRace(RaceDefinition raceDefinition, WindStore windStore,
|
||||||
long delayToLiveInMillis, long millisecondsOverWhichToAverageWind, long millisecondsOverWhichToAverageSpeed,
|
long delayToLiveInMillis, long millisecondsOverWhichToAverageWind, long millisecondsOverWhichToAverageSpeed,
|
||||||
DynamicRaceDefinitionSet raceDefinitionSetToUpdate, RaceLogStore raceLogStore);
|
DynamicRaceDefinitionSet raceDefinitionSetToUpdate);
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -5,10 +5,10 @@ import java.util.List;
|
|||||||
import java.util.NavigableSet;
|
import java.util.NavigableSet;
|
||||||
import java.util.SortedSet;
|
import java.util.SortedSet;
|
||||||
|
|
||||||
import com.sap.sailing.domain.base.Mark;
|
|
||||||
import com.sap.sailing.domain.base.Competitor;
|
import com.sap.sailing.domain.base.Competitor;
|
||||||
import com.sap.sailing.domain.base.Course;
|
import com.sap.sailing.domain.base.Course;
|
||||||
import com.sap.sailing.domain.base.Leg;
|
import com.sap.sailing.domain.base.Leg;
|
||||||
|
import com.sap.sailing.domain.base.Mark;
|
||||||
import com.sap.sailing.domain.base.RaceDefinition;
|
import com.sap.sailing.domain.base.RaceDefinition;
|
||||||
import com.sap.sailing.domain.base.Waypoint;
|
import com.sap.sailing.domain.base.Waypoint;
|
||||||
import com.sap.sailing.domain.base.impl.DouglasPeucker;
|
import com.sap.sailing.domain.base.impl.DouglasPeucker;
|
||||||
@@ -24,7 +24,6 @@ import com.sap.sailing.domain.common.WindSource;
|
|||||||
import com.sap.sailing.domain.common.WindSourceType;
|
import com.sap.sailing.domain.common.WindSourceType;
|
||||||
import com.sap.sailing.domain.common.impl.Util.Pair;
|
import com.sap.sailing.domain.common.impl.Util.Pair;
|
||||||
import com.sap.sailing.domain.racelog.RaceLog;
|
import com.sap.sailing.domain.racelog.RaceLog;
|
||||||
import com.sap.sailing.domain.racelog.RaceLogStore;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Live tracking data of a single race. The race follows a defined {@link Course} with a sequence of {@link Leg}s. The
|
* Live tracking data of a single race. The race follows a defined {@link Course} with a sequence of {@link Leg}s. The
|
||||||
@@ -455,20 +454,9 @@ public interface TrackedRace extends Serializable {
|
|||||||
void waitUntilWindLoadingComplete() throws InterruptedException;
|
void waitUntilWindLoadingComplete() throws InterruptedException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the race log event track for this race or creates it if it did not exist yet
|
* Returns the race log event track for this race
|
||||||
*/
|
*/
|
||||||
RaceLog getRaceLog();
|
RaceLog getRaceLog();
|
||||||
|
|
||||||
/**
|
|
||||||
* When provided with a {@link RaceLogStore} during construction, the tracked race will asynchronously load the race log event
|
|
||||||
* data for this tracked race from the race log store in a background thread and update this tracked race with the results.
|
|
||||||
* Clients that want to wait for the race log event loading process to complete can do so by calling this method which will block
|
|
||||||
* until the race log event loading has completed.
|
|
||||||
*/
|
|
||||||
void waitUntilRaceLogLoadingComplete() throws InterruptedException;
|
|
||||||
|
|
||||||
RaceLogStore getRaceLogStore();
|
|
||||||
|
|
||||||
|
|
||||||
TrackedRaceStatus getStatus();
|
TrackedRaceStatus getStatus();
|
||||||
|
|
||||||
|
|||||||
@@ -4,11 +4,10 @@ import java.io.Serializable;
|
|||||||
|
|
||||||
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.Regatta;
|
|
||||||
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.common.NoWindException;
|
import com.sap.sailing.domain.common.NoWindException;
|
||||||
import com.sap.sailing.domain.common.TimePoint;
|
import com.sap.sailing.domain.common.TimePoint;
|
||||||
import com.sap.sailing.domain.racelog.RaceLogStore;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Manages a set of {@link TrackedRace} objects that belong to the same {@link Regatta} (regatta, sailing regatta for a
|
* Manages a set of {@link TrackedRace} objects that belong to the same {@link Regatta} (regatta, sailing regatta for a
|
||||||
@@ -42,7 +41,7 @@ public interface TrackedRegatta extends Serializable {
|
|||||||
*/
|
*/
|
||||||
DynamicTrackedRace createTrackedRace(RaceDefinition raceDefinition, WindStore windStore,
|
DynamicTrackedRace createTrackedRace(RaceDefinition raceDefinition, WindStore windStore,
|
||||||
long delayToLiveInMillis, long millisecondsOverWhichToAverageWind, long millisecondsOverWhichToAverageSpeed,
|
long delayToLiveInMillis, long millisecondsOverWhichToAverageWind, long millisecondsOverWhichToAverageSpeed,
|
||||||
DynamicRaceDefinitionSet raceDefinitionSetToUpdate, RaceLogStore raceLogStore);
|
DynamicRaceDefinitionSet raceDefinitionSetToUpdate);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Obtains the tracked race for <code>race</code>. Blocks until the tracked race has been created
|
* Obtains the tracked race for <code>race</code>. Blocks until the tracked race has been created
|
||||||
|
|||||||
+4
-29
@@ -25,8 +25,6 @@ import com.sap.sailing.domain.common.WindSource;
|
|||||||
import com.sap.sailing.domain.common.WindSourceType;
|
import com.sap.sailing.domain.common.WindSourceType;
|
||||||
import com.sap.sailing.domain.common.impl.Util;
|
import com.sap.sailing.domain.common.impl.Util;
|
||||||
import com.sap.sailing.domain.common.impl.WindSourceImpl;
|
import com.sap.sailing.domain.common.impl.WindSourceImpl;
|
||||||
import com.sap.sailing.domain.racelog.RaceLogEvent;
|
|
||||||
import com.sap.sailing.domain.racelog.RaceLogStore;
|
|
||||||
import com.sap.sailing.domain.tracking.DynamicGPSFixTrack;
|
import com.sap.sailing.domain.tracking.DynamicGPSFixTrack;
|
||||||
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
|
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
|
||||||
import com.sap.sailing.domain.tracking.DynamicTrackedRegatta;
|
import com.sap.sailing.domain.tracking.DynamicTrackedRegatta;
|
||||||
@@ -58,9 +56,9 @@ public class DynamicTrackedRaceImpl extends TrackedRaceImpl implements
|
|||||||
|
|
||||||
public DynamicTrackedRaceImpl(TrackedRegatta trackedRegatta, RaceDefinition race,
|
public DynamicTrackedRaceImpl(TrackedRegatta trackedRegatta, RaceDefinition race,
|
||||||
WindStore windStore, long delayToLiveInMillis, long millisecondsOverWhichToAverageWind, long millisecondsOverWhichToAverageSpeed,
|
WindStore windStore, long delayToLiveInMillis, long millisecondsOverWhichToAverageWind, long millisecondsOverWhichToAverageSpeed,
|
||||||
long delayForCacheInvalidationOfWindEstimation, RaceLogStore raceLogStore) {
|
long delayForCacheInvalidationOfWindEstimation) {
|
||||||
super(trackedRegatta, race, windStore, delayToLiveInMillis, millisecondsOverWhichToAverageWind, millisecondsOverWhichToAverageSpeed,
|
super(trackedRegatta, race, windStore, delayToLiveInMillis, millisecondsOverWhichToAverageWind, millisecondsOverWhichToAverageSpeed,
|
||||||
delayForCacheInvalidationOfWindEstimation, raceLogStore);
|
delayForCacheInvalidationOfWindEstimation);
|
||||||
this.raceIsKnownToStartUpwind = race.getBoatClass().typicallyStartsUpwind();
|
this.raceIsKnownToStartUpwind = race.getBoatClass().typicallyStartsUpwind();
|
||||||
if (!raceIsKnownToStartUpwind) {
|
if (!raceIsKnownToStartUpwind) {
|
||||||
Set<WindSource> windSourcesToExclude = new HashSet<WindSource>();
|
Set<WindSource> windSourcesToExclude = new HashSet<WindSource>();
|
||||||
@@ -96,9 +94,9 @@ public class DynamicTrackedRaceImpl extends TrackedRaceImpl implements
|
|||||||
*/
|
*/
|
||||||
public DynamicTrackedRaceImpl(TrackedRegatta trackedRegatta, RaceDefinition race,
|
public DynamicTrackedRaceImpl(TrackedRegatta trackedRegatta, RaceDefinition race,
|
||||||
WindStore windStore, long delayToLiveInMillis,
|
WindStore windStore, long delayToLiveInMillis,
|
||||||
long millisecondsOverWhichToAverageWind, long millisecondsOverWhichToAverageSpeed, RaceLogStore raceLogStore) {
|
long millisecondsOverWhichToAverageWind, long millisecondsOverWhichToAverageSpeed) {
|
||||||
this(trackedRegatta, race, windStore, delayToLiveInMillis, millisecondsOverWhichToAverageWind, millisecondsOverWhichToAverageSpeed,
|
this(trackedRegatta, race, windStore, delayToLiveInMillis, millisecondsOverWhichToAverageWind, millisecondsOverWhichToAverageSpeed,
|
||||||
millisecondsOverWhichToAverageWind/2, raceLogStore);
|
millisecondsOverWhichToAverageWind/2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -638,27 +636,4 @@ public class DynamicTrackedRaceImpl extends TrackedRaceImpl implements
|
|||||||
return raceIsKnownToStartUpwind;
|
return raceIsKnownToStartUpwind;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void recordRaceLogEvent(RaceLogEvent event) {
|
|
||||||
getRaceLog().add(event);
|
|
||||||
updated(/* time point */null); // TODO: updated has to be understood better, for now it shall have the same behaviour as in recordWind
|
|
||||||
//TODO triggerRaceStateCalculation();
|
|
||||||
notifyListeners(event);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void notifyListeners(RaceLogEvent event) {
|
|
||||||
RaceChangeListener[] listeners;
|
|
||||||
synchronized (getListeners()) {
|
|
||||||
listeners = getListeners().toArray(new RaceChangeListener[getListeners().size()]);
|
|
||||||
}
|
|
||||||
for (RaceChangeListener listener : listeners) {
|
|
||||||
try {
|
|
||||||
listener.raceLogEventReceived(event);
|
|
||||||
} catch (Throwable t) {
|
|
||||||
logger.log(Level.SEVERE, "RaceChangeListener " + listener + " threw exception " + t.getMessage());
|
|
||||||
logger.throwing(DynamicTrackedRaceImpl.class.getName(), "notifyListeners(RaceLogEvent)", t);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
+4
-5
@@ -1,11 +1,10 @@
|
|||||||
package com.sap.sailing.domain.tracking.impl;
|
package com.sap.sailing.domain.tracking.impl;
|
||||||
|
|
||||||
import com.sap.sailing.domain.base.Regatta;
|
|
||||||
import com.sap.sailing.domain.base.RaceDefinition;
|
import com.sap.sailing.domain.base.RaceDefinition;
|
||||||
import com.sap.sailing.domain.racelog.RaceLogStore;
|
import com.sap.sailing.domain.base.Regatta;
|
||||||
import com.sap.sailing.domain.tracking.DynamicRaceDefinitionSet;
|
import com.sap.sailing.domain.tracking.DynamicRaceDefinitionSet;
|
||||||
import com.sap.sailing.domain.tracking.DynamicTrackedRegatta;
|
|
||||||
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
|
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
|
||||||
|
import com.sap.sailing.domain.tracking.DynamicTrackedRegatta;
|
||||||
import com.sap.sailing.domain.tracking.WindStore;
|
import com.sap.sailing.domain.tracking.WindStore;
|
||||||
|
|
||||||
public class DynamicTrackedRegattaImpl extends TrackedRegattaImpl implements DynamicTrackedRegatta {
|
public class DynamicTrackedRegattaImpl extends TrackedRegattaImpl implements DynamicTrackedRegatta {
|
||||||
@@ -28,8 +27,8 @@ public class DynamicTrackedRegattaImpl extends TrackedRegattaImpl implements Dyn
|
|||||||
@Override
|
@Override
|
||||||
public DynamicTrackedRace createTrackedRace(RaceDefinition raceDefinition, WindStore windStore,
|
public DynamicTrackedRace createTrackedRace(RaceDefinition raceDefinition, WindStore windStore,
|
||||||
long delayToLiveInMillis, long millisecondsOverWhichToAverageWind, long millisecondsOverWhichToAverageSpeed,
|
long delayToLiveInMillis, long millisecondsOverWhichToAverageWind, long millisecondsOverWhichToAverageSpeed,
|
||||||
DynamicRaceDefinitionSet raceDefinitionSetToUpdate, RaceLogStore raceLogStore) {
|
DynamicRaceDefinitionSet raceDefinitionSetToUpdate) {
|
||||||
return (DynamicTrackedRace) super.createTrackedRace(raceDefinition, windStore, delayToLiveInMillis, millisecondsOverWhichToAverageWind,
|
return (DynamicTrackedRace) super.createTrackedRace(raceDefinition, windStore, delayToLiveInMillis, millisecondsOverWhichToAverageWind,
|
||||||
millisecondsOverWhichToAverageSpeed, raceDefinitionSetToUpdate, raceLogStore);
|
millisecondsOverWhichToAverageSpeed, raceDefinitionSetToUpdate);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+8
-62
@@ -30,12 +30,12 @@ import java.util.logging.Logger;
|
|||||||
|
|
||||||
import com.sap.sailing.domain.base.BearingWithConfidence;
|
import com.sap.sailing.domain.base.BearingWithConfidence;
|
||||||
import com.sap.sailing.domain.base.BoatClass;
|
import com.sap.sailing.domain.base.BoatClass;
|
||||||
import com.sap.sailing.domain.base.Mark;
|
|
||||||
import com.sap.sailing.domain.base.Competitor;
|
import com.sap.sailing.domain.base.Competitor;
|
||||||
import com.sap.sailing.domain.base.Course;
|
import com.sap.sailing.domain.base.Course;
|
||||||
import com.sap.sailing.domain.base.CourseChange;
|
import com.sap.sailing.domain.base.CourseChange;
|
||||||
import com.sap.sailing.domain.base.CourseListener;
|
import com.sap.sailing.domain.base.CourseListener;
|
||||||
import com.sap.sailing.domain.base.Leg;
|
import com.sap.sailing.domain.base.Leg;
|
||||||
|
import com.sap.sailing.domain.base.Mark;
|
||||||
import com.sap.sailing.domain.base.RaceDefinition;
|
import com.sap.sailing.domain.base.RaceDefinition;
|
||||||
import com.sap.sailing.domain.base.SpeedWithBearing;
|
import com.sap.sailing.domain.base.SpeedWithBearing;
|
||||||
import com.sap.sailing.domain.base.SpeedWithBearingWithConfidence;
|
import com.sap.sailing.domain.base.SpeedWithBearingWithConfidence;
|
||||||
@@ -70,8 +70,6 @@ import com.sap.sailing.domain.confidence.Weigher;
|
|||||||
import com.sap.sailing.domain.confidence.impl.HyperbolicTimeDifferenceWeigher;
|
import com.sap.sailing.domain.confidence.impl.HyperbolicTimeDifferenceWeigher;
|
||||||
import com.sap.sailing.domain.confidence.impl.PositionAndTimePointWeigher;
|
import com.sap.sailing.domain.confidence.impl.PositionAndTimePointWeigher;
|
||||||
import com.sap.sailing.domain.racelog.RaceLog;
|
import com.sap.sailing.domain.racelog.RaceLog;
|
||||||
import com.sap.sailing.domain.racelog.RaceLogStore;
|
|
||||||
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
|
|
||||||
import com.sap.sailing.domain.tracking.GPSFix;
|
import com.sap.sailing.domain.tracking.GPSFix;
|
||||||
import com.sap.sailing.domain.tracking.GPSFixMoving;
|
import com.sap.sailing.domain.tracking.GPSFixMoving;
|
||||||
import com.sap.sailing.domain.tracking.GPSFixTrack;
|
import com.sap.sailing.domain.tracking.GPSFixTrack;
|
||||||
@@ -247,22 +245,12 @@ public abstract class TrackedRaceImpl implements TrackedRace, CourseListener {
|
|||||||
* synchronization or locking.
|
* synchronization or locking.
|
||||||
*/
|
*/
|
||||||
private final NamedReentrantReadWriteLock serializationLock;
|
private final NamedReentrantReadWriteLock serializationLock;
|
||||||
|
|
||||||
private transient RaceLog raceLog;
|
|
||||||
|
|
||||||
private transient RaceLogStore raceLogStore;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The constructor loads race log events from the {@link #raceLogStore} asynchronously. When completed, this flag is set to
|
|
||||||
* <code>true</code>, and all threads currently waiting on this object are notified.
|
|
||||||
*/
|
|
||||||
private boolean raceLogLoadingCompleted;
|
|
||||||
|
|
||||||
private final Map<Iterable<MarkPassing>, NamedReentrantReadWriteLock> locksForMarkPassings;
|
private final Map<Iterable<MarkPassing>, NamedReentrantReadWriteLock> locksForMarkPassings;
|
||||||
|
|
||||||
public TrackedRaceImpl(final TrackedRegatta trackedRegatta, RaceDefinition race, final WindStore windStore,
|
public TrackedRaceImpl(final TrackedRegatta trackedRegatta, RaceDefinition race, final WindStore windStore,
|
||||||
long delayToLiveInMillis, final long millisecondsOverWhichToAverageWind, long millisecondsOverWhichToAverageSpeed,
|
long delayToLiveInMillis, final long millisecondsOverWhichToAverageWind, long millisecondsOverWhichToAverageSpeed,
|
||||||
long delayForWindEstimationCacheInvalidation, final RaceLogStore raceLogStore) {
|
long delayForWindEstimationCacheInvalidation) {
|
||||||
super();
|
super();
|
||||||
locksForMarkPassings = new IdentityHashMap<Iterable<MarkPassing>, NamedReentrantReadWriteLock>();
|
locksForMarkPassings = new IdentityHashMap<Iterable<MarkPassing>, NamedReentrantReadWriteLock>();
|
||||||
this.status = new TrackedRaceStatusImpl(TrackedRaceStatusEnum.PREPARED, 0.0);
|
this.status = new TrackedRaceStatusImpl(TrackedRaceStatusEnum.PREPARED, 0.0);
|
||||||
@@ -272,7 +260,6 @@ public abstract class TrackedRaceImpl implements TrackedRace, CourseListener {
|
|||||||
this.updateCount = 0;
|
this.updateCount = 0;
|
||||||
this.race = race;
|
this.race = race;
|
||||||
this.windStore = windStore;
|
this.windStore = windStore;
|
||||||
this.raceLogStore = raceLogStore;
|
|
||||||
this.windSourcesToExclude = new HashSet<WindSource>();
|
this.windSourcesToExclude = new HashSet<WindSource>();
|
||||||
this.directionFromStartToNextMarkCache = new HashMap<TimePoint, Future<Wind>>();
|
this.directionFromStartToNextMarkCache = new HashMap<TimePoint, Future<Wind>>();
|
||||||
this.millisecondsOverWhichToAverageSpeed = millisecondsOverWhichToAverageSpeed;
|
this.millisecondsOverWhichToAverageSpeed = millisecondsOverWhichToAverageSpeed;
|
||||||
@@ -340,25 +327,6 @@ public abstract class TrackedRaceImpl implements TrackedRace, CourseListener {
|
|||||||
}
|
}
|
||||||
}.start();
|
}.start();
|
||||||
|
|
||||||
new Thread("Race log event loader for tracked race " + getRace().getName()) {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
// When this tracked race is to be serialized, wait for the loading of the according race log to complete.
|
|
||||||
// It seems sufficiently unlikely that serialization is requested after the constructor succeeds and
|
|
||||||
// before this thread obtains the lock.
|
|
||||||
LockUtil.lockForRead(serializationLock);
|
|
||||||
try {
|
|
||||||
raceLog = raceLogStore.getRaceLog(trackedRegatta, TrackedRaceImpl.this);
|
|
||||||
} finally {
|
|
||||||
LockUtil.unlockAfterRead(serializationLock);
|
|
||||||
}
|
|
||||||
synchronized (TrackedRaceImpl.this) {
|
|
||||||
raceLogLoadingCompleted = true;
|
|
||||||
TrackedRaceImpl.this.notifyAll();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}.start();
|
|
||||||
|
|
||||||
// by default, a tracked race offers one course-based wind estimation, one track-based wind estimation track and
|
// by default, a tracked race offers one course-based wind estimation, one track-based wind estimation track and
|
||||||
// one "WEB" track for manual or REST-based wind reception; other wind tracks may be added as fixes are received
|
// one "WEB" track for manual or REST-based wind reception; other wind tracks may be added as fixes are received
|
||||||
// for them.
|
// for them.
|
||||||
@@ -386,15 +354,13 @@ public abstract class TrackedRaceImpl implements TrackedRace, CourseListener {
|
|||||||
/**
|
/**
|
||||||
* Deserialization has to be maintained in lock-step with {@link #writeObject(ObjectOutputStream) serialization}.
|
* Deserialization has to be maintained in lock-step with {@link #writeObject(ObjectOutputStream) serialization}.
|
||||||
* When de-serializing, a possibly remote {@link #windStore} is ignored because it is transient. Instead, an
|
* When de-serializing, a possibly remote {@link #windStore} is ignored because it is transient. Instead, an
|
||||||
* {@link EmptyWindStore} is used for the de-serialized instance. Same counts for the {@link #raceLogStore}, which is then initialized
|
* {@link EmptyWindStore} is used for the de-serialized instance.
|
||||||
* with a {@link EmptyRaceLogStore}.
|
|
||||||
*/
|
*/
|
||||||
private void readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException {
|
private void readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException {
|
||||||
ois.defaultReadObject();
|
ois.defaultReadObject();
|
||||||
markPassingsTimes = new ArrayList<Pair<Waypoint, Pair<TimePoint, TimePoint>>>();
|
markPassingsTimes = new ArrayList<Pair<Waypoint, Pair<TimePoint, TimePoint>>>();
|
||||||
cacheInvalidationTimerLock = new Object();
|
cacheInvalidationTimerLock = new Object();
|
||||||
windStore = EmptyWindStore.INSTANCE;
|
windStore = EmptyWindStore.INSTANCE;
|
||||||
raceLogStore = EmptyRaceLogStore.INSTANCE;
|
|
||||||
competitorRankings = new HashMap<TimePoint, List<Competitor>>();
|
competitorRankings = new HashMap<TimePoint, List<Competitor>>();
|
||||||
competitorRankingsLocks = new HashMap<TimePoint, NamedReentrantReadWriteLock>();
|
competitorRankingsLocks = new HashMap<TimePoint, NamedReentrantReadWriteLock>();
|
||||||
directionFromStartToNextMarkCache = new HashMap<TimePoint, Future<Wind>>();
|
directionFromStartToNextMarkCache = new HashMap<TimePoint, Future<Wind>>();
|
||||||
@@ -408,13 +374,6 @@ public abstract class TrackedRaceImpl implements TrackedRace, CourseListener {
|
|||||||
wait();
|
wait();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public synchronized void waitUntilRaceLogLoadingComplete() throws InterruptedException {
|
|
||||||
while (!raceLogLoadingCompleted) {
|
|
||||||
wait();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private SmartFutureCache<Competitor, Triple<TimePoint, TimePoint, List<Maneuver>>, EmptyUpdateInterval> createManeuverCache() {
|
private SmartFutureCache<Competitor, Triple<TimePoint, TimePoint, List<Maneuver>>, EmptyUpdateInterval> createManeuverCache() {
|
||||||
return new SmartFutureCache<Competitor, Triple<TimePoint, TimePoint, List<Maneuver>>, EmptyUpdateInterval>(
|
return new SmartFutureCache<Competitor, Triple<TimePoint, TimePoint, List<Maneuver>>, EmptyUpdateInterval>(
|
||||||
@@ -449,11 +408,6 @@ public abstract class TrackedRaceImpl implements TrackedRace, CourseListener {
|
|||||||
public WindStore getWindStore() {
|
public WindStore getWindStore() {
|
||||||
return windStore;
|
return windStore;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public RaceLogStore getRaceLogStore() {
|
|
||||||
return raceLogStore;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Iterable<MarkPassing> getMarkPassingsInOrder(Waypoint waypoint) {
|
public Iterable<MarkPassing> getMarkPassingsInOrder(Waypoint waypoint) {
|
||||||
@@ -2254,19 +2208,6 @@ public abstract class TrackedRaceImpl implements TrackedRace, CourseListener {
|
|||||||
this.delayToLiveInMillis = delayToLiveInMillis;
|
this.delayToLiveInMillis = delayToLiveInMillis;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public RaceLog getRaceLog() {
|
|
||||||
if (raceLog == null) {
|
|
||||||
try {
|
|
||||||
waitUntilRaceLogLoadingComplete();
|
|
||||||
} catch (InterruptedException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return raceLog;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TrackedRaceStatus getStatus() {
|
public TrackedRaceStatus getStatus() {
|
||||||
return status;
|
return status;
|
||||||
@@ -2321,4 +2262,9 @@ public abstract class TrackedRaceImpl implements TrackedRace, CourseListener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public RaceLog getRaceLog() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
+2
-3
@@ -18,7 +18,6 @@ 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.common.NoWindException;
|
import com.sap.sailing.domain.common.NoWindException;
|
||||||
import com.sap.sailing.domain.common.TimePoint;
|
import com.sap.sailing.domain.common.TimePoint;
|
||||||
import com.sap.sailing.domain.racelog.RaceLogStore;
|
|
||||||
import com.sap.sailing.domain.tracking.DynamicRaceDefinitionSet;
|
import com.sap.sailing.domain.tracking.DynamicRaceDefinitionSet;
|
||||||
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
|
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
|
||||||
import com.sap.sailing.domain.tracking.RaceListener;
|
import com.sap.sailing.domain.tracking.RaceListener;
|
||||||
@@ -170,10 +169,10 @@ public class TrackedRegattaImpl implements TrackedRegatta {
|
|||||||
@Override
|
@Override
|
||||||
public DynamicTrackedRace createTrackedRace(RaceDefinition raceDefinition, WindStore windStore, long delayToLiveInMillis,
|
public DynamicTrackedRace createTrackedRace(RaceDefinition raceDefinition, WindStore windStore, long delayToLiveInMillis,
|
||||||
long millisecondsOverWhichToAverageWind, long millisecondsOverWhichToAverageSpeed,
|
long millisecondsOverWhichToAverageWind, long millisecondsOverWhichToAverageSpeed,
|
||||||
DynamicRaceDefinitionSet raceDefinitionSetToUpdate, RaceLogStore raceLogStore) {
|
DynamicRaceDefinitionSet raceDefinitionSetToUpdate) {
|
||||||
logger.log(Level.INFO, "Creating DynamicTrackedRaceImpl for RaceDefinition " + raceDefinition.getName());
|
logger.log(Level.INFO, "Creating DynamicTrackedRaceImpl for RaceDefinition " + raceDefinition.getName());
|
||||||
DynamicTrackedRaceImpl result = new DynamicTrackedRaceImpl(this, raceDefinition,
|
DynamicTrackedRaceImpl result = new DynamicTrackedRaceImpl(this, raceDefinition,
|
||||||
windStore, delayToLiveInMillis, millisecondsOverWhichToAverageWind, millisecondsOverWhichToAverageSpeed, raceLogStore);
|
windStore, delayToLiveInMillis, millisecondsOverWhichToAverageWind, millisecondsOverWhichToAverageSpeed);
|
||||||
addTrackedRace(result);
|
addTrackedRace(result);
|
||||||
if (raceDefinitionSetToUpdate != null) {
|
if (raceDefinitionSetToUpdate != null) {
|
||||||
raceDefinitionSetToUpdate.addRaceDefinition(raceDefinition);
|
raceDefinitionSetToUpdate.addRaceDefinition(raceDefinition);
|
||||||
|
|||||||
+2
-5
@@ -109,7 +109,6 @@ import com.sap.sailing.domain.leaderboard.RegattaLeaderboard;
|
|||||||
import com.sap.sailing.domain.persistence.DomainObjectFactory;
|
import com.sap.sailing.domain.persistence.DomainObjectFactory;
|
||||||
import com.sap.sailing.domain.persistence.MongoFactory;
|
import com.sap.sailing.domain.persistence.MongoFactory;
|
||||||
import com.sap.sailing.domain.persistence.MongoObjectFactory;
|
import com.sap.sailing.domain.persistence.MongoObjectFactory;
|
||||||
import com.sap.sailing.domain.persistence.MongoRaceLogStoreFactory;
|
|
||||||
import com.sap.sailing.domain.persistence.MongoWindStoreFactory;
|
import com.sap.sailing.domain.persistence.MongoWindStoreFactory;
|
||||||
import com.sap.sailing.domain.racelog.RaceLogEvent;
|
import com.sap.sailing.domain.racelog.RaceLogEvent;
|
||||||
import com.sap.sailing.domain.swisstimingadapter.SwissTimingArchiveConfiguration;
|
import com.sap.sailing.domain.swisstimingadapter.SwissTimingArchiveConfiguration;
|
||||||
@@ -1148,8 +1147,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
|
|||||||
new URI(liveURI), new URI(storedURI), new MillisecondsTimePoint(rr.trackingStartTime),
|
new URI(liveURI), new URI(storedURI), new MillisecondsTimePoint(rr.trackingStartTime),
|
||||||
new MillisecondsTimePoint(rr.trackingEndTime),
|
new MillisecondsTimePoint(rr.trackingEndTime),
|
||||||
MongoWindStoreFactory.INSTANCE.getMongoWindStore(mongoObjectFactory, domainObjectFactory),
|
MongoWindStoreFactory.INSTANCE.getMongoWindStore(mongoObjectFactory, domainObjectFactory),
|
||||||
RaceTracker.TIMEOUT_FOR_RECEIVING_RACE_DEFINITION_IN_MILLISECONDS, simulateWithStartTimeNow,
|
RaceTracker.TIMEOUT_FOR_RECEIVING_RACE_DEFINITION_IN_MILLISECONDS, simulateWithStartTimeNow);
|
||||||
MongoRaceLogStoreFactory.INSTANCE.getMongoRaceLogStore(mongoObjectFactory, domainObjectFactory));
|
|
||||||
if (trackWind) {
|
if (trackWind) {
|
||||||
new Thread("Wind tracking starter for race " + rr.regattaName + "/" + rr.name) {
|
new Thread("Wind tracking starter for race " + rr.regattaName + "/" + rr.name) {
|
||||||
public void run() {
|
public void run() {
|
||||||
@@ -2391,8 +2389,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
|
|||||||
final RacesHandle raceHandle = getService().addSwissTimingRace(regattaToAddTo, rr.ID, hostname, port,
|
final RacesHandle raceHandle = getService().addSwissTimingRace(regattaToAddTo, rr.ID, hostname, port,
|
||||||
canSendRequests,
|
canSendRequests,
|
||||||
MongoWindStoreFactory.INSTANCE.getMongoWindStore(mongoObjectFactory, domainObjectFactory),
|
MongoWindStoreFactory.INSTANCE.getMongoWindStore(mongoObjectFactory, domainObjectFactory),
|
||||||
RaceTracker.TIMEOUT_FOR_RECEIVING_RACE_DEFINITION_IN_MILLISECONDS,
|
RaceTracker.TIMEOUT_FOR_RECEIVING_RACE_DEFINITION_IN_MILLISECONDS);
|
||||||
MongoRaceLogStoreFactory.INSTANCE.getMongoRaceLogStore(mongoObjectFactory, domainObjectFactory));
|
|
||||||
if (trackWind) {
|
if (trackWind) {
|
||||||
new Thread("Wind tracking starter for race " + rr.ID + "/" + rr.description) {
|
new Thread("Wind tracking starter for race " + rr.ID + "/" + rr.description) {
|
||||||
public void run() {
|
public void run() {
|
||||||
|
|||||||
+2
-3
@@ -23,7 +23,6 @@ import com.sap.sailing.domain.racelog.RaceLog;
|
|||||||
import com.sap.sailing.domain.racelog.RaceLogEvent;
|
import com.sap.sailing.domain.racelog.RaceLogEvent;
|
||||||
import com.sap.sailing.domain.racelog.RaceLogEventFactory;
|
import com.sap.sailing.domain.racelog.RaceLogEventFactory;
|
||||||
import com.sap.sailing.domain.racelog.RaceLogStartTimeEvent;
|
import com.sap.sailing.domain.racelog.RaceLogStartTimeEvent;
|
||||||
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
|
|
||||||
import com.sap.sailing.domain.test.AbstractTracTracLiveTest;
|
import com.sap.sailing.domain.test.AbstractTracTracLiveTest;
|
||||||
import com.sap.sailing.domain.tracking.DynamicRaceDefinitionSet;
|
import com.sap.sailing.domain.tracking.DynamicRaceDefinitionSet;
|
||||||
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
|
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
|
||||||
@@ -67,7 +66,7 @@ public class TestStoringAndRetrievingRaceLogsTest extends AbstractTracTracLiveTe
|
|||||||
Regatta domainEvent = domainFactory.getOrCreateDefaultRegatta(getTracTracEvent(), /* trackedRegattaRegistry */ null);
|
Regatta domainEvent = domainFactory.getOrCreateDefaultRegatta(getTracTracEvent(), /* trackedRegattaRegistry */ null);
|
||||||
DynamicTrackedRegatta trackedRegatta = new RacingEventServiceImpl().getOrCreateTrackedRegatta(domainEvent);
|
DynamicTrackedRegatta trackedRegatta = new RacingEventServiceImpl().getOrCreateTrackedRegatta(domainEvent);
|
||||||
Iterable<Receiver> typeControllers = domainFactory.getUpdateReceivers(trackedRegatta, getTracTracEvent(),
|
Iterable<Receiver> typeControllers = domainFactory.getUpdateReceivers(trackedRegatta, getTracTracEvent(),
|
||||||
EmptyWindStore.INSTANCE, EmptyRaceLogStore.INSTANCE,
|
EmptyWindStore.INSTANCE,
|
||||||
/* startOfTracking */null, /* endOfTracking */null, /* delayToLiveInMillis */
|
/* startOfTracking */null, /* endOfTracking */null, /* delayToLiveInMillis */
|
||||||
0l, /* simulator */ null, new DynamicRaceDefinitionSet() {
|
0l, /* simulator */ null, new DynamicRaceDefinitionSet() {
|
||||||
@Override
|
@Override
|
||||||
@@ -81,7 +80,7 @@ public class TestStoringAndRetrievingRaceLogsTest extends AbstractTracTracLiveTe
|
|||||||
@Override
|
@Override
|
||||||
public void addRaceDefinition(RaceDefinition race) {
|
public void addRaceDefinition(RaceDefinition race) {
|
||||||
}
|
}
|
||||||
}, EmptyRaceLogStore.INSTANCE);
|
});
|
||||||
|
|
||||||
Mongo myFirstMongo = newMongo();
|
Mongo myFirstMongo = newMongo();
|
||||||
DB firstDatabase = myFirstMongo.getDB(dbConfiguration.getDatabaseName());
|
DB firstDatabase = myFirstMongo.getDB(dbConfiguration.getDatabaseName());
|
||||||
|
|||||||
+4
-5
@@ -14,8 +14,8 @@ import org.junit.Test;
|
|||||||
import com.mongodb.DB;
|
import com.mongodb.DB;
|
||||||
import com.mongodb.Mongo;
|
import com.mongodb.Mongo;
|
||||||
import com.mongodb.MongoException;
|
import com.mongodb.MongoException;
|
||||||
import com.sap.sailing.domain.base.Regatta;
|
|
||||||
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.impl.KnotSpeedWithBearingImpl;
|
import com.sap.sailing.domain.base.impl.KnotSpeedWithBearingImpl;
|
||||||
import com.sap.sailing.domain.base.impl.MillisecondsTimePoint;
|
import com.sap.sailing.domain.base.impl.MillisecondsTimePoint;
|
||||||
import com.sap.sailing.domain.common.Position;
|
import com.sap.sailing.domain.common.Position;
|
||||||
@@ -27,11 +27,10 @@ import com.sap.sailing.domain.common.impl.DegreePosition;
|
|||||||
import com.sap.sailing.domain.common.impl.WindSourceImpl;
|
import com.sap.sailing.domain.common.impl.WindSourceImpl;
|
||||||
import com.sap.sailing.domain.persistence.impl.DomainObjectFactoryImpl;
|
import com.sap.sailing.domain.persistence.impl.DomainObjectFactoryImpl;
|
||||||
import com.sap.sailing.domain.persistence.impl.MongoObjectFactoryImpl;
|
import com.sap.sailing.domain.persistence.impl.MongoObjectFactoryImpl;
|
||||||
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
|
|
||||||
import com.sap.sailing.domain.test.AbstractTracTracLiveTest;
|
import com.sap.sailing.domain.test.AbstractTracTracLiveTest;
|
||||||
import com.sap.sailing.domain.tracking.DynamicRaceDefinitionSet;
|
import com.sap.sailing.domain.tracking.DynamicRaceDefinitionSet;
|
||||||
import com.sap.sailing.domain.tracking.DynamicTrackedRegatta;
|
|
||||||
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
|
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
|
||||||
|
import com.sap.sailing.domain.tracking.DynamicTrackedRegatta;
|
||||||
import com.sap.sailing.domain.tracking.Wind;
|
import com.sap.sailing.domain.tracking.Wind;
|
||||||
import com.sap.sailing.domain.tracking.WindTrack;
|
import com.sap.sailing.domain.tracking.WindTrack;
|
||||||
import com.sap.sailing.domain.tracking.impl.EmptyWindStore;
|
import com.sap.sailing.domain.tracking.impl.EmptyWindStore;
|
||||||
@@ -74,7 +73,7 @@ public class TestStoringAndRetrievingWindTracksTest extends AbstractTracTracLive
|
|||||||
Regatta domainEvent = domainFactory.getOrCreateDefaultRegatta(getTracTracEvent(), /* trackedRegattaRegistry */ null);
|
Regatta domainEvent = domainFactory.getOrCreateDefaultRegatta(getTracTracEvent(), /* trackedRegattaRegistry */ null);
|
||||||
DynamicTrackedRegatta trackedRegatta = new RacingEventServiceImpl().getOrCreateTrackedRegatta(domainEvent);
|
DynamicTrackedRegatta trackedRegatta = new RacingEventServiceImpl().getOrCreateTrackedRegatta(domainEvent);
|
||||||
Iterable<Receiver> typeControllers = domainFactory.getUpdateReceivers(trackedRegatta, getTracTracEvent(),
|
Iterable<Receiver> typeControllers = domainFactory.getUpdateReceivers(trackedRegatta, getTracTracEvent(),
|
||||||
EmptyWindStore.INSTANCE, EmptyRaceLogStore.INSTANCE,
|
EmptyWindStore.INSTANCE,
|
||||||
/* startOfTracking */null, /* endOfTracking */null, /* delayToLiveInMillis */
|
/* startOfTracking */null, /* endOfTracking */null, /* delayToLiveInMillis */
|
||||||
0l, /* simulator */ null, new DynamicRaceDefinitionSet() {
|
0l, /* simulator */ null, new DynamicRaceDefinitionSet() {
|
||||||
@Override
|
@Override
|
||||||
@@ -88,7 +87,7 @@ public class TestStoringAndRetrievingWindTracksTest extends AbstractTracTracLive
|
|||||||
@Override
|
@Override
|
||||||
public void addRaceDefinition(RaceDefinition race) {
|
public void addRaceDefinition(RaceDefinition race) {
|
||||||
}
|
}
|
||||||
}, EmptyRaceLogStore.INSTANCE);
|
});
|
||||||
WindSource windSource = new WindSourceImpl(WindSourceType.WEB);
|
WindSource windSource = new WindSourceImpl(WindSourceType.WEB);
|
||||||
Mongo myFirstMongo = newMongo();
|
Mongo myFirstMongo = newMongo();
|
||||||
DB firstDatabase = myFirstMongo.getDB(dbConfiguration.getDatabaseName());
|
DB firstDatabase = myFirstMongo.getDB(dbConfiguration.getDatabaseName());
|
||||||
|
|||||||
+2
-26
@@ -38,10 +38,7 @@ import com.sap.sailing.domain.common.impl.DegreePosition;
|
|||||||
import com.sap.sailing.domain.common.impl.Util.Triple;
|
import com.sap.sailing.domain.common.impl.Util.Triple;
|
||||||
import com.sap.sailing.domain.common.impl.WindSourceImpl;
|
import com.sap.sailing.domain.common.impl.WindSourceImpl;
|
||||||
import com.sap.sailing.domain.persistence.MongoFactory;
|
import com.sap.sailing.domain.persistence.MongoFactory;
|
||||||
import com.sap.sailing.domain.persistence.MongoRaceLogStoreFactory;
|
|
||||||
import com.sap.sailing.domain.persistence.MongoWindStoreFactory;
|
import com.sap.sailing.domain.persistence.MongoWindStoreFactory;
|
||||||
import com.sap.sailing.domain.racelog.RaceLogStore;
|
|
||||||
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
|
|
||||||
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
|
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
|
||||||
import com.sap.sailing.domain.tracking.TrackedRace;
|
import com.sap.sailing.domain.tracking.TrackedRace;
|
||||||
import com.sap.sailing.domain.tracking.Wind;
|
import com.sap.sailing.domain.tracking.Wind;
|
||||||
@@ -122,8 +119,6 @@ public class AdminApp extends SailingServerHttpServlet {
|
|||||||
|
|
||||||
private static final String STORE_MONGO = "mongo";
|
private static final String STORE_MONGO = "mongo";
|
||||||
|
|
||||||
private static final String PARAM_NAME_RACELOGSTORE = "racelogstore";
|
|
||||||
|
|
||||||
public AdminApp() {
|
public AdminApp() {
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -471,7 +466,7 @@ public class AdminApp extends SailingServerHttpServlet {
|
|||||||
URL jsonURL = new URL(req.getParameter(PARAM_NAME_EVENT_JSON_URL));
|
URL jsonURL = new URL(req.getParameter(PARAM_NAME_EVENT_JSON_URL));
|
||||||
URI liveURI = new URI(req.getParameter(PARAM_NAME_LIVE_URI));
|
URI liveURI = new URI(req.getParameter(PARAM_NAME_LIVE_URI));
|
||||||
URI storedURI = new URI(req.getParameter(PARAM_NAME_STORED_URI));
|
URI storedURI = new URI(req.getParameter(PARAM_NAME_STORED_URI));
|
||||||
getService().addRegatta(jsonURL, liveURI, storedURI, getWindStore(req), /* timeoutInMilliseconds */ 60000, getRaceLogStore(req));
|
getService().addRegatta(jsonURL, liveURI, storedURI, getWindStore(req), /* timeoutInMilliseconds */ 60000);
|
||||||
}
|
}
|
||||||
|
|
||||||
private WindStore getWindStore(HttpServletRequest req) throws UnknownHostException, MongoException {
|
private WindStore getWindStore(HttpServletRequest req) throws UnknownHostException, MongoException {
|
||||||
@@ -495,8 +490,7 @@ public class AdminApp extends SailingServerHttpServlet {
|
|||||||
URL paramURL = new URL(req.getParameter(PARAM_NAME_PARAM_URL));
|
URL paramURL = new URL(req.getParameter(PARAM_NAME_PARAM_URL));
|
||||||
URI liveURI = new URI(req.getParameter(PARAM_NAME_LIVE_URI));
|
URI liveURI = new URI(req.getParameter(PARAM_NAME_LIVE_URI));
|
||||||
URI storedURI = new URI(req.getParameter(PARAM_NAME_STORED_URI));
|
URI storedURI = new URI(req.getParameter(PARAM_NAME_STORED_URI));
|
||||||
getService().addTracTracRace(paramURL, liveURI, storedURI, getWindStore(req), /* timeoutInMilliseconds */ 60000,
|
getService().addTracTracRace(paramURL, liveURI, storedURI, getWindStore(req), /* timeoutInMilliseconds */ 60000);
|
||||||
getRaceLogStore(req));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void stopRace(HttpServletRequest req, HttpServletResponse resp) throws MalformedURLException, IOException, InterruptedException {
|
private void stopRace(HttpServletRequest req, HttpServletResponse resp) throws MalformedURLException, IOException, InterruptedException {
|
||||||
@@ -512,22 +506,4 @@ public class AdminApp extends SailingServerHttpServlet {
|
|||||||
resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Regatta not found");
|
resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Regatta not found");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private RaceLogStore getRaceLogStore(HttpServletRequest req) throws UnknownHostException, MongoException {
|
|
||||||
String raceCommitteStore = req.getParameter(PARAM_NAME_RACELOGSTORE);
|
|
||||||
if (raceCommitteStore != null) {
|
|
||||||
if (raceCommitteStore.equals(STORE_EMPTY)) {
|
|
||||||
return EmptyRaceLogStore.INSTANCE;
|
|
||||||
} else if (raceCommitteStore.equals(STORE_MONGO)) {
|
|
||||||
return MongoRaceLogStoreFactory.INSTANCE.getMongoRaceLogStore(
|
|
||||||
MongoFactory.INSTANCE.getDefaultMongoObjectFactory(),
|
|
||||||
MongoFactory.INSTANCE.getDefaultDomainObjectFactory());
|
|
||||||
} else {
|
|
||||||
log("Couldn't find race log store " + raceCommitteStore + ". Using EmptyRaceLogStore instead.");
|
|
||||||
return EmptyRaceLogStore.INSTANCE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return EmptyRaceLogStore.INSTANCE;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
+1
-1
@@ -76,7 +76,7 @@ public class ModifyRaceLogJsonExportServlet extends JsonExportServlet {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
dynamicTrackedRace.recordRaceLogEvent(raceLogEvent);
|
//TODO dynamicTrackedRace.recordRaceLogEvent(raceLogEvent);
|
||||||
} catch (ParseException e) {
|
} catch (ParseException e) {
|
||||||
throw new JsonDeserializationException("Invalid JSON in request body.", e);
|
throw new JsonDeserializationException("Invalid JSON in request body.", e);
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-4
@@ -28,7 +28,6 @@ import com.sap.sailing.domain.common.impl.Util;
|
|||||||
import com.sap.sailing.domain.common.impl.WindSourceImpl;
|
import com.sap.sailing.domain.common.impl.WindSourceImpl;
|
||||||
import com.sap.sailing.domain.leaderboard.Leaderboard;
|
import com.sap.sailing.domain.leaderboard.Leaderboard;
|
||||||
import com.sap.sailing.domain.leaderboard.impl.LowPoint;
|
import com.sap.sailing.domain.leaderboard.impl.LowPoint;
|
||||||
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
|
|
||||||
import com.sap.sailing.domain.test.AbstractTracTracLiveTest;
|
import com.sap.sailing.domain.test.AbstractTracTracLiveTest;
|
||||||
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
|
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
|
||||||
import com.sap.sailing.domain.tracking.RaceTrackingConnectivityParameters;
|
import com.sap.sailing.domain.tracking.RaceTrackingConnectivityParameters;
|
||||||
@@ -81,7 +80,7 @@ public class TrackRaceReplicationTest extends AbstractServerReplicationTest {
|
|||||||
});
|
});
|
||||||
trackingParams = com.sap.sailing.domain.tractracadapter.DomainFactory.INSTANCE.createTrackingConnectivityParameters(paramURL,
|
trackingParams = com.sap.sailing.domain.tractracadapter.DomainFactory.INSTANCE.createTrackingConnectivityParameters(paramURL,
|
||||||
liveURI, storedURI, startOfTracking, endOfTracking, /* delayToLiveInMillis */
|
liveURI, storedURI, startOfTracking, endOfTracking, /* delayToLiveInMillis */
|
||||||
0l, /* simulateWithStartTimeNow */false, EmptyWindStore.INSTANCE, EmptyRaceLogStore.INSTANCE);
|
0l, /* simulateWithStartTimeNow */false, EmptyWindStore.INSTANCE);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void startTracking() throws Exception, InterruptedException {
|
private void startTracking() throws Exception, InterruptedException {
|
||||||
@@ -92,8 +91,7 @@ public class TrackRaceReplicationTest extends AbstractServerReplicationTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void startTrackingOnMaster() throws Exception {
|
private void startTrackingOnMaster() throws Exception {
|
||||||
racesHandle = master.addRace(/* regattaToAddTo */ null, trackingParams, EmptyWindStore.INSTANCE, /* timeoutInMilliseconds */ 60000,
|
racesHandle = master.addRace(/* regattaToAddTo */ null, trackingParams, EmptyWindStore.INSTANCE, /* timeoutInMilliseconds */ 60000);
|
||||||
EmptyRaceLogStore.INSTANCE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void waitForTrackRaceReplicationTrigger() throws InterruptedException {
|
private void waitForTrackRaceReplicationTrigger() throws InterruptedException {
|
||||||
|
|||||||
+3
-7
@@ -39,7 +39,6 @@ import com.sap.sailing.domain.common.impl.DegreePosition;
|
|||||||
import com.sap.sailing.domain.common.impl.Util;
|
import com.sap.sailing.domain.common.impl.Util;
|
||||||
import com.sap.sailing.domain.common.impl.WindSourceImpl;
|
import com.sap.sailing.domain.common.impl.WindSourceImpl;
|
||||||
import com.sap.sailing.domain.persistence.MongoFactory;
|
import com.sap.sailing.domain.persistence.MongoFactory;
|
||||||
import com.sap.sailing.domain.persistence.MongoRaceLogStoreFactory;
|
|
||||||
import com.sap.sailing.domain.persistence.MongoWindStore;
|
import com.sap.sailing.domain.persistence.MongoWindStore;
|
||||||
import com.sap.sailing.domain.persistence.MongoWindStoreFactory;
|
import com.sap.sailing.domain.persistence.MongoWindStoreFactory;
|
||||||
import com.sap.sailing.domain.racelog.RaceLog;
|
import com.sap.sailing.domain.racelog.RaceLog;
|
||||||
@@ -96,11 +95,8 @@ public class TrackedRaceContentsReplicationTest extends AbstractServerReplicatio
|
|||||||
trackedRace = (DynamicTrackedRace) master.apply(new CreateTrackedRace(raceIdentifier,
|
trackedRace = (DynamicTrackedRace) master.apply(new CreateTrackedRace(raceIdentifier,
|
||||||
MongoWindStoreFactory.INSTANCE.getMongoWindStore(MongoFactory.INSTANCE.getDefaultMongoObjectFactory(),
|
MongoWindStoreFactory.INSTANCE.getMongoWindStore(MongoFactory.INSTANCE.getDefaultMongoObjectFactory(),
|
||||||
MongoFactory.INSTANCE.getDefaultDomainObjectFactory()), /* delayToLiveInMillis */ 5000,
|
MongoFactory.INSTANCE.getDefaultDomainObjectFactory()), /* delayToLiveInMillis */ 5000,
|
||||||
/* millisecondsOverWhichToAverageWind */ 10000, /* millisecondsOverWhichToAverageSpeed */10000,
|
/* millisecondsOverWhichToAverageWind */ 10000, /* millisecondsOverWhichToAverageSpeed */10000));
|
||||||
MongoRaceLogStoreFactory.INSTANCE.getMongoRaceLogStore(MongoFactory.INSTANCE.getDefaultMongoObjectFactory(),
|
|
||||||
MongoFactory.INSTANCE.getDefaultDomainObjectFactory())));
|
|
||||||
trackedRace.waitUntilWindLoadingComplete();
|
trackedRace.waitUntilWindLoadingComplete();
|
||||||
trackedRace.waitUntilRaceLogLoadingComplete();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -230,7 +226,7 @@ public class TrackedRaceContentsReplicationTest extends AbstractServerReplicatio
|
|||||||
TimePoint time = MillisecondsTimePoint.now();
|
TimePoint time = MillisecondsTimePoint.now();
|
||||||
final RaceLogStartTimeEvent startTimeEvent =
|
final RaceLogStartTimeEvent startTimeEvent =
|
||||||
RaceLogEventFactory.INSTANCE.createStartTimeEvent(time, 0, new MillisecondsTimePoint(time.asMillis() + 500000));
|
RaceLogEventFactory.INSTANCE.createStartTimeEvent(time, 0, new MillisecondsTimePoint(time.asMillis() + 500000));
|
||||||
trackedRace.recordRaceLogEvent(startTimeEvent);
|
//trackedRace.recordRaceLogEvent(startTimeEvent);
|
||||||
Thread.sleep(1000);
|
Thread.sleep(1000);
|
||||||
TrackedRace replicaTrackedRace = replica.getTrackedRace(raceIdentifier);
|
TrackedRace replicaTrackedRace = replica.getTrackedRace(raceIdentifier);
|
||||||
RaceLog replicaRaceLog = replicaTrackedRace.getRaceLog();
|
RaceLog replicaRaceLog = replicaTrackedRace.getRaceLog();
|
||||||
@@ -250,7 +246,7 @@ public class TrackedRaceContentsReplicationTest extends AbstractServerReplicatio
|
|||||||
TimePoint time = MillisecondsTimePoint.now();
|
TimePoint time = MillisecondsTimePoint.now();
|
||||||
final RaceLogStartTimeEvent startTimeEvent =
|
final RaceLogStartTimeEvent startTimeEvent =
|
||||||
RaceLogEventFactory.INSTANCE.createStartTimeEvent(time, 0, new MillisecondsTimePoint(time.asMillis() + 500000));
|
RaceLogEventFactory.INSTANCE.createStartTimeEvent(time, 0, new MillisecondsTimePoint(time.asMillis() + 500000));
|
||||||
trackedRace.recordRaceLogEvent(startTimeEvent);
|
//trackedRace.recordRaceLogEvent(startTimeEvent);
|
||||||
RaceLog trackedRaceRaceLog= trackedRace.getRaceLog();
|
RaceLog trackedRaceRaceLog= trackedRace.getRaceLog();
|
||||||
trackedRaceRaceLog.lockForRead();
|
trackedRaceRaceLog.lockForRead();
|
||||||
try {
|
try {
|
||||||
|
|||||||
+3
-4
@@ -29,7 +29,6 @@ import com.sap.sailing.domain.base.impl.CourseImpl;
|
|||||||
import com.sap.sailing.domain.base.impl.RaceDefinitionImpl;
|
import com.sap.sailing.domain.base.impl.RaceDefinitionImpl;
|
||||||
import com.sap.sailing.domain.base.impl.RegattaImpl;
|
import com.sap.sailing.domain.base.impl.RegattaImpl;
|
||||||
import com.sap.sailing.domain.common.ScoringSchemeType;
|
import com.sap.sailing.domain.common.ScoringSchemeType;
|
||||||
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
|
|
||||||
import com.sap.sailing.domain.tracking.RaceTracker;
|
import com.sap.sailing.domain.tracking.RaceTracker;
|
||||||
import com.sap.sailing.domain.tracking.TrackedRace;
|
import com.sap.sailing.domain.tracking.TrackedRace;
|
||||||
import com.sap.sailing.domain.tracking.TrackedRegatta;
|
import com.sap.sailing.domain.tracking.TrackedRegatta;
|
||||||
@@ -72,13 +71,13 @@ public class RaceTrackerStartStopTest {
|
|||||||
raceDef3 = new RaceDefinitionImpl(RACENAME3, new CourseImpl("Course3", new ArrayList<Waypoint>()), boatClass, new ArrayList<Competitor>());
|
raceDef3 = new RaceDefinitionImpl(RACENAME3, new CourseImpl("Course3", new ArrayList<Waypoint>()), boatClass, new ArrayList<Competitor>());
|
||||||
regatta.addRace(raceDef1);
|
regatta.addRace(raceDef1);
|
||||||
trackedRegatta1.createTrackedRace(raceDef1, /* windStore */ EmptyWindStore.INSTANCE, /* delayToLiveInMillis */ 0l, /* millisecondsOverWhichToAverageWind */ 0l,
|
trackedRegatta1.createTrackedRace(raceDef1, /* windStore */ EmptyWindStore.INSTANCE, /* delayToLiveInMillis */ 0l, /* millisecondsOverWhichToAverageWind */ 0l,
|
||||||
/* millisecondsOverWhichToAverageSpeed */ 0l, /* raceDefinitionSetToUpdate */ null, EmptyRaceLogStore.INSTANCE);
|
/* millisecondsOverWhichToAverageSpeed */ 0l, /* raceDefinitionSetToUpdate */ null);
|
||||||
regatta.addRace(raceDef2);
|
regatta.addRace(raceDef2);
|
||||||
trackedRegatta1.createTrackedRace(raceDef2, /* windStore */ EmptyWindStore.INSTANCE, /* delayToLiveInMillis */ 0l, /* millisecondsOverWhichToAverageWind */ 0l,
|
trackedRegatta1.createTrackedRace(raceDef2, /* windStore */ EmptyWindStore.INSTANCE, /* delayToLiveInMillis */ 0l, /* millisecondsOverWhichToAverageWind */ 0l,
|
||||||
/* millisecondsOverWhichToAverageSpeed */ 0l, /* raceDefinitionSetToUpdate */ null, EmptyRaceLogStore.INSTANCE);
|
/* millisecondsOverWhichToAverageSpeed */ 0l, /* raceDefinitionSetToUpdate */ null);
|
||||||
regatta.addRace(raceDef3);
|
regatta.addRace(raceDef3);
|
||||||
trackedRegatta1.createTrackedRace(raceDef3, /* windStore */ EmptyWindStore.INSTANCE, /* delayToLiveInMillis */ 0l, /* millisecondsOverWhichToAverageWind */ 0l,
|
trackedRegatta1.createTrackedRace(raceDef3, /* windStore */ EmptyWindStore.INSTANCE, /* delayToLiveInMillis */ 0l, /* millisecondsOverWhichToAverageWind */ 0l,
|
||||||
/* millisecondsOverWhichToAverageSpeed */ 0l, /* raceDefinitionSetToUpdate */ null, EmptyRaceLogStore.INSTANCE);
|
/* millisecondsOverWhichToAverageSpeed */ 0l, /* raceDefinitionSetToUpdate */ null);
|
||||||
Set<RaceDefinition> raceDefinitionSetRace1 = new HashSet<RaceDefinition>();
|
Set<RaceDefinition> raceDefinitionSetRace1 = new HashSet<RaceDefinition>();
|
||||||
raceDefinitionSetRace1.add(raceDef1);
|
raceDefinitionSetRace1.add(raceDef1);
|
||||||
Set<RaceDefinition> raceDefinitionSetRace2 = new HashSet<RaceDefinition>();
|
Set<RaceDefinition> raceDefinitionSetRace2 = new HashSet<RaceDefinition>();
|
||||||
|
|||||||
+3
-7
@@ -20,7 +20,6 @@ import org.junit.Test;
|
|||||||
|
|
||||||
import com.sap.sailing.domain.base.RaceDefinition;
|
import com.sap.sailing.domain.base.RaceDefinition;
|
||||||
import com.sap.sailing.domain.common.impl.Util;
|
import com.sap.sailing.domain.common.impl.Util;
|
||||||
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
|
|
||||||
import com.sap.sailing.domain.tracking.RaceListener;
|
import com.sap.sailing.domain.tracking.RaceListener;
|
||||||
import com.sap.sailing.domain.tracking.RacesHandle;
|
import com.sap.sailing.domain.tracking.RacesHandle;
|
||||||
import com.sap.sailing.domain.tracking.TrackedRace;
|
import com.sap.sailing.domain.tracking.TrackedRace;
|
||||||
@@ -61,8 +60,7 @@ public class RaceTrackerTest {
|
|||||||
public void setUp() throws Exception {
|
public void setUp() throws Exception {
|
||||||
service = new RacingEventServiceImpl();
|
service = new RacingEventServiceImpl();
|
||||||
logger.info("Calling service.addTracTracRace");
|
logger.info("Calling service.addTracTracRace");
|
||||||
raceHandle = service.addTracTracRace(paramUrl, liveUri, storedUri, EmptyWindStore.INSTANCE, /* timeoutInMilliseconds */ 60000,
|
raceHandle = service.addTracTracRace(paramUrl, liveUri, storedUri, EmptyWindStore.INSTANCE, /* timeoutInMilliseconds */ 60000);
|
||||||
EmptyRaceLogStore.INSTANCE);
|
|
||||||
logger.info("Calling raceHandle.getRaces()");
|
logger.info("Calling raceHandle.getRaces()");
|
||||||
Set<RaceDefinition> races = raceHandle.getRaces(); // wait for RaceDefinition to be completely wired in Regatta
|
Set<RaceDefinition> races = raceHandle.getRaces(); // wait for RaceDefinition to be completely wired in Regatta
|
||||||
logger.info("Obtained races: "+races);
|
logger.info("Obtained races: "+races);
|
||||||
@@ -118,8 +116,7 @@ public class RaceTrackerTest {
|
|||||||
RaceDefinition oldRaceDefinition = oldTrackedRace.getRace();
|
RaceDefinition oldRaceDefinition = oldTrackedRace.getRace();
|
||||||
assertTrue(!Util.isEmpty(raceHandle.getRegatta().getAllRaces()));
|
assertTrue(!Util.isEmpty(raceHandle.getRegatta().getAllRaces()));
|
||||||
service.removeRegatta(raceHandle.getRegatta());
|
service.removeRegatta(raceHandle.getRegatta());
|
||||||
RacesHandle myRaceHandle = service.addTracTracRace(paramUrl, liveUri, storedUri, EmptyWindStore.INSTANCE, /* timeoutInMilliseconds */ 60000,
|
RacesHandle myRaceHandle = service.addTracTracRace(paramUrl, liveUri, storedUri, EmptyWindStore.INSTANCE, /* timeoutInMilliseconds */ 60000);
|
||||||
EmptyRaceLogStore.INSTANCE);
|
|
||||||
TrackedRegatta newTrackedRegatta = myRaceHandle.getTrackedRegatta();
|
TrackedRegatta newTrackedRegatta = myRaceHandle.getTrackedRegatta();
|
||||||
assertNotSame(oldTrackedRegatta, newTrackedRegatta);
|
assertNotSame(oldTrackedRegatta, newTrackedRegatta);
|
||||||
TrackedRace newTrackedRace = getTrackedRace(newTrackedRegatta);
|
TrackedRace newTrackedRace = getTrackedRace(newTrackedRegatta);
|
||||||
@@ -143,8 +140,7 @@ public class RaceTrackerTest {
|
|||||||
logger.entering(getClass().getName(), "testTrackingSameRaceWithoutStopping");
|
logger.entering(getClass().getName(), "testTrackingSameRaceWithoutStopping");
|
||||||
TrackedRegatta oldTrackedRegatta = raceHandle.getTrackedRegatta();
|
TrackedRegatta oldTrackedRegatta = raceHandle.getTrackedRegatta();
|
||||||
TrackedRace oldTrackedRace = getTrackedRace(oldTrackedRegatta);
|
TrackedRace oldTrackedRace = getTrackedRace(oldTrackedRegatta);
|
||||||
RacesHandle myRaceHandle = service.addTracTracRace(paramUrl, liveUri, storedUri, EmptyWindStore.INSTANCE, /* timeoutInMilliseconds */ 60000,
|
RacesHandle myRaceHandle = service.addTracTracRace(paramUrl, liveUri, storedUri, EmptyWindStore.INSTANCE, /* timeoutInMilliseconds */ 60000);
|
||||||
EmptyRaceLogStore.INSTANCE);
|
|
||||||
TrackedRegatta newTrackedEvent = myRaceHandle.getTrackedRegatta();
|
TrackedRegatta newTrackedEvent = myRaceHandle.getTrackedRegatta();
|
||||||
TrackedRace newTrackedRace = getTrackedRace(newTrackedEvent);
|
TrackedRace newTrackedRace = getTrackedRace(newTrackedEvent);
|
||||||
// expecting a new tracked race to be created when starting over with tracking
|
// expecting a new tracked race to be created when starting over with tracking
|
||||||
|
|||||||
@@ -39,7 +39,6 @@ import com.sap.sailing.domain.leaderboard.LeaderboardGroup;
|
|||||||
import com.sap.sailing.domain.leaderboard.LeaderboardRegistry;
|
import com.sap.sailing.domain.leaderboard.LeaderboardRegistry;
|
||||||
import com.sap.sailing.domain.leaderboard.RegattaLeaderboard;
|
import com.sap.sailing.domain.leaderboard.RegattaLeaderboard;
|
||||||
import com.sap.sailing.domain.leaderboard.ScoringScheme;
|
import com.sap.sailing.domain.leaderboard.ScoringScheme;
|
||||||
import com.sap.sailing.domain.racelog.RaceLogStore;
|
|
||||||
import com.sap.sailing.domain.swisstimingadapter.SwissTimingFactory;
|
import com.sap.sailing.domain.swisstimingadapter.SwissTimingFactory;
|
||||||
import com.sap.sailing.domain.tracking.RaceListener;
|
import com.sap.sailing.domain.tracking.RaceListener;
|
||||||
import com.sap.sailing.domain.tracking.RaceTracker;
|
import com.sap.sailing.domain.tracking.RaceTracker;
|
||||||
@@ -110,8 +109,7 @@ public interface RacingEventService extends TrackedRegattaRegistry, RegattaFetch
|
|||||||
* if a race definition is not received for a race of this event within this time, the race tracker for
|
* if a race definition is not received for a race of this event within this time, the race tracker for
|
||||||
* that race is stopped; use -1 to wait forever
|
* that race is stopped; use -1 to wait forever
|
||||||
*/
|
*/
|
||||||
Regatta addRegatta(URL jsonURL, URI liveURI, URI storedURI, WindStore windStore, long timeoutInMilliseconds,
|
Regatta addRegatta(URL jsonURL, URI liveURI, URI storedURI, WindStore windStore, long timeoutInMilliseconds)
|
||||||
RaceLogStore raceLogStore)
|
|
||||||
throws MalformedURLException, FileNotFoundException, URISyntaxException, IOException, ParseException,
|
throws MalformedURLException, FileNotFoundException, URISyntaxException, IOException, ParseException,
|
||||||
org.json.simple.parser.ParseException, Exception;
|
org.json.simple.parser.ParseException, Exception;
|
||||||
|
|
||||||
@@ -137,8 +135,7 @@ public interface RacingEventService extends TrackedRegattaRegistry, RegattaFetch
|
|||||||
* if the race definition is not received for the race within this time, the race tracker for
|
* if the race definition is not received for the race within this time, the race tracker for
|
||||||
* that race is stopped; use -1 to wait forever
|
* that race is stopped; use -1 to wait forever
|
||||||
*/
|
*/
|
||||||
RacesHandle addTracTracRace(URL paramURL, URI liveURI, URI storedURI, WindStore windStore, long timeoutInMilliseconds,
|
RacesHandle addTracTracRace(URL paramURL, URI liveURI, URI storedURI, WindStore windStore, long timeoutInMilliseconds)
|
||||||
RaceLogStore raceLogStore)
|
|
||||||
throws MalformedURLException, FileNotFoundException, URISyntaxException, Exception;
|
throws MalformedURLException, FileNotFoundException, URISyntaxException, Exception;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -155,7 +152,7 @@ public interface RacingEventService extends TrackedRegattaRegistry, RegattaFetch
|
|||||||
*/
|
*/
|
||||||
RacesHandle addTracTracRace(RegattaIdentifier regattaToAddTo, URL paramURL, URI liveURI, URI storedURI,
|
RacesHandle addTracTracRace(RegattaIdentifier regattaToAddTo, URL paramURL, URI liveURI, URI storedURI,
|
||||||
TimePoint trackingStartTime, TimePoint trackingEndTime, WindStore windStore,
|
TimePoint trackingStartTime, TimePoint trackingEndTime, WindStore windStore,
|
||||||
long timeoutForReceivingRaceDefinitionInMilliseconds, boolean simulateWithStartTimeNow, RaceLogStore raceLogStore)
|
long timeoutForReceivingRaceDefinitionInMilliseconds, boolean simulateWithStartTimeNow)
|
||||||
throws MalformedURLException, FileNotFoundException, URISyntaxException, Exception;
|
throws MalformedURLException, FileNotFoundException, URISyntaxException, Exception;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -290,8 +287,7 @@ public interface RacingEventService extends TrackedRegattaRegistry, RegattaFetch
|
|||||||
* to add the races to. Otherwise, a default regatta as described above will be created and used.
|
* to add the races to. Otherwise, a default regatta as described above will be created and used.
|
||||||
*/
|
*/
|
||||||
RacesHandle addSwissTimingRace(RegattaIdentifier regattaToAddTo, String raceID, String hostname, int port,
|
RacesHandle addSwissTimingRace(RegattaIdentifier regattaToAddTo, String raceID, String hostname, int port,
|
||||||
boolean canSendRequests, WindStore windStore, long timeoutInMilliseconds,
|
boolean canSendRequests, WindStore windStore, long timeoutInMilliseconds) throws InterruptedException, UnknownHostException,
|
||||||
RaceLogStore raceLogStore) throws InterruptedException, UnknownHostException,
|
|
||||||
IOException, ParseException, Exception;
|
IOException, ParseException, Exception;
|
||||||
|
|
||||||
SwissTimingFactory getSwissTimingFactory();
|
SwissTimingFactory getSwissTimingFactory();
|
||||||
@@ -369,13 +365,11 @@ public interface RacingEventService extends TrackedRegattaRegistry, RegattaFetch
|
|||||||
* @param windStore
|
* @param windStore
|
||||||
* must not be <code>null</code>, but can, e.g., be an {@link EmptyWindStore}
|
* must not be <code>null</code>, but can, e.g., be an {@link EmptyWindStore}
|
||||||
*/
|
*/
|
||||||
RacesHandle addRace(RegattaIdentifier regattaToAddTo, RaceTrackingConnectivityParameters params, WindStore windStore, long timeoutInMilliseconds,
|
RacesHandle addRace(RegattaIdentifier regattaToAddTo, RaceTrackingConnectivityParameters params, WindStore windStore, long timeoutInMilliseconds)
|
||||||
RaceLogStore raceLogStore)
|
|
||||||
throws MalformedURLException, FileNotFoundException, URISyntaxException, Exception;
|
throws MalformedURLException, FileNotFoundException, URISyntaxException, Exception;
|
||||||
|
|
||||||
TrackedRace createTrackedRace(RegattaAndRaceIdentifier raceIdentifier, WindStore windStore,
|
TrackedRace createTrackedRace(RegattaAndRaceIdentifier raceIdentifier, WindStore windStore,
|
||||||
long delayToLiveInMillis, long millisecondsOverWhichToAverageWind, long millisecondsOverWhichToAverageSpeed,
|
long delayToLiveInMillis, long millisecondsOverWhichToAverageWind, long millisecondsOverWhichToAverageSpeed);
|
||||||
RaceLogStore raceLogStore);
|
|
||||||
|
|
||||||
Regatta getOrCreateRegatta(String regattaName, String boatClassName, Serializable id);
|
Regatta getOrCreateRegatta(String regattaName, String boatClassName, Serializable id);
|
||||||
|
|
||||||
|
|||||||
+13
-21
@@ -72,7 +72,6 @@ import com.sap.sailing.domain.persistence.DomainObjectFactory;
|
|||||||
import com.sap.sailing.domain.persistence.MongoFactory;
|
import com.sap.sailing.domain.persistence.MongoFactory;
|
||||||
import com.sap.sailing.domain.persistence.MongoObjectFactory;
|
import com.sap.sailing.domain.persistence.MongoObjectFactory;
|
||||||
import com.sap.sailing.domain.racelog.RaceLogEvent;
|
import com.sap.sailing.domain.racelog.RaceLogEvent;
|
||||||
import com.sap.sailing.domain.racelog.RaceLogStore;
|
|
||||||
import com.sap.sailing.domain.swisstimingadapter.Race;
|
import com.sap.sailing.domain.swisstimingadapter.Race;
|
||||||
import com.sap.sailing.domain.swisstimingadapter.SailMasterConnector;
|
import com.sap.sailing.domain.swisstimingadapter.SailMasterConnector;
|
||||||
import com.sap.sailing.domain.swisstimingadapter.SailMasterMessage;
|
import com.sap.sailing.domain.swisstimingadapter.SailMasterMessage;
|
||||||
@@ -600,13 +599,12 @@ public class RacingEventServiceImpl implements RacingEventService, RegattaListen
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Regatta addRegatta(URL jsonURL, URI liveURI, URI storedURI, WindStore windStore, long timeoutInMilliseconds,
|
public Regatta addRegatta(URL jsonURL, URI liveURI, URI storedURI, WindStore windStore, long timeoutInMilliseconds) throws Exception {
|
||||||
RaceLogStore raceLogStore) throws Exception {
|
|
||||||
JSONService jsonService = getTracTracDomainFactory().parseJSONURL(jsonURL);
|
JSONService jsonService = getTracTracDomainFactory().parseJSONURL(jsonURL);
|
||||||
Regatta regatta = null;
|
Regatta regatta = null;
|
||||||
for (RaceRecord rr : jsonService.getRaceRecords()) {
|
for (RaceRecord rr : jsonService.getRaceRecords()) {
|
||||||
URL paramURL = rr.getParamURL();
|
URL paramURL = rr.getParamURL();
|
||||||
regatta = addTracTracRace(paramURL, liveURI, storedURI, windStore, timeoutInMilliseconds, raceLogStore).getRegatta();
|
regatta = addTracTracRace(paramURL, liveURI, storedURI, windStore, timeoutInMilliseconds).getRegatta();
|
||||||
}
|
}
|
||||||
return regatta;
|
return regatta;
|
||||||
}
|
}
|
||||||
@@ -661,23 +659,21 @@ public class RacingEventServiceImpl implements RacingEventService, RegattaListen
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public RacesHandle addSwissTimingRace(RegattaIdentifier regattaToAddTo, String raceID, String hostname,
|
public RacesHandle addSwissTimingRace(RegattaIdentifier regattaToAddTo, String raceID, String hostname,
|
||||||
int port, boolean canSendRequests, WindStore windStore, long timeoutInMilliseconds,
|
int port, boolean canSendRequests, WindStore windStore, long timeoutInMilliseconds) throws Exception {
|
||||||
RaceLogStore raceLogStore) throws Exception {
|
|
||||||
return addRace(
|
return addRace(
|
||||||
regattaToAddTo,
|
regattaToAddTo,
|
||||||
swissTimingDomainFactory.createTrackingConnectivityParameters(hostname, port, raceID, canSendRequests, delayToLiveInMillis,
|
swissTimingDomainFactory.createTrackingConnectivityParameters(hostname, port, raceID, canSendRequests, delayToLiveInMillis,
|
||||||
swissTimingFactory, swissTimingDomainFactory, windStore, raceLogStore, swissTimingAdapterPersistence), windStore, timeoutInMilliseconds,
|
swissTimingFactory, swissTimingDomainFactory, windStore, swissTimingAdapterPersistence), windStore, timeoutInMilliseconds);
|
||||||
raceLogStore);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public RacesHandle addTracTracRace(URL paramURL, URI liveURI, URI storedURI, WindStore windStore,
|
public RacesHandle addTracTracRace(URL paramURL, URI liveURI, URI storedURI, WindStore windStore,
|
||||||
long timeoutInMilliseconds, RaceLogStore raceLogStore) throws Exception {
|
long timeoutInMilliseconds) throws Exception {
|
||||||
return addRace(
|
return addRace(
|
||||||
/* regattaToAddTo */null, getTracTracDomainFactory().createTrackingConnectivityParameters(paramURL, liveURI, storedURI,
|
/* regattaToAddTo */null, getTracTracDomainFactory().createTrackingConnectivityParameters(paramURL, liveURI, storedURI,
|
||||||
/* startOfTracking */null,
|
/* startOfTracking */null,
|
||||||
/* endOfTracking */null, delayToLiveInMillis, /* simulateWithStartTimeNow */false, windStore, raceLogStore), windStore,
|
/* endOfTracking */null, delayToLiveInMillis, /* simulateWithStartTimeNow */false, windStore), windStore,
|
||||||
timeoutInMilliseconds, raceLogStore);
|
timeoutInMilliseconds);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -708,7 +704,7 @@ public class RacingEventServiceImpl implements RacingEventService, RegattaListen
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public RacesHandle addRace(RegattaIdentifier regattaToAddTo, RaceTrackingConnectivityParameters params,
|
public RacesHandle addRace(RegattaIdentifier regattaToAddTo, RaceTrackingConnectivityParameters params,
|
||||||
WindStore windStore, long timeoutInMilliseconds, RaceLogStore raceLogStore) throws Exception {
|
WindStore windStore, long timeoutInMilliseconds) throws Exception {
|
||||||
RaceTracker tracker = raceTrackersByID.get(params.getTrackerID());
|
RaceTracker tracker = raceTrackersByID.get(params.getTrackerID());
|
||||||
if (tracker == null) {
|
if (tracker == null) {
|
||||||
Regatta regatta = regattaToAddTo == null ? null : getRegatta(regattaToAddTo);
|
Regatta regatta = regattaToAddTo == null ? null : getRegatta(regattaToAddTo);
|
||||||
@@ -816,23 +812,20 @@ public class RacingEventServiceImpl implements RacingEventService, RegattaListen
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TrackedRace createTrackedRace(RegattaAndRaceIdentifier raceIdentifier, WindStore windStore,
|
public TrackedRace createTrackedRace(RegattaAndRaceIdentifier raceIdentifier, WindStore windStore,
|
||||||
long delayToLiveInMillis, long millisecondsOverWhichToAverageWind, long millisecondsOverWhichToAverageSpeed,
|
long delayToLiveInMillis, long millisecondsOverWhichToAverageWind, long millisecondsOverWhichToAverageSpeed) {
|
||||||
RaceLogStore raceLogStore) {
|
|
||||||
DynamicTrackedRegatta trackedRegatta = getOrCreateTrackedRegatta(getRegatta(raceIdentifier));
|
DynamicTrackedRegatta trackedRegatta = getOrCreateTrackedRegatta(getRegatta(raceIdentifier));
|
||||||
RaceDefinition race = getRace(raceIdentifier);
|
RaceDefinition race = getRace(raceIdentifier);
|
||||||
return trackedRegatta.createTrackedRace(race, windStore, delayToLiveInMillis,
|
return trackedRegatta.createTrackedRace(race, windStore, delayToLiveInMillis,
|
||||||
millisecondsOverWhichToAverageWind, millisecondsOverWhichToAverageSpeed,
|
millisecondsOverWhichToAverageWind, millisecondsOverWhichToAverageSpeed,
|
||||||
/* raceDefinitionSetToUpdate */null, raceLogStore);
|
/* raceDefinitionSetToUpdate */null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public RacesHandle addTracTracRace(RegattaIdentifier regattaToAddTo, URL paramURL, URI liveURI,
|
public RacesHandle addTracTracRace(RegattaIdentifier regattaToAddTo, URL paramURL, URI liveURI,
|
||||||
URI storedURI, TimePoint startOfTracking, TimePoint endOfTracking,
|
URI storedURI, TimePoint startOfTracking, TimePoint endOfTracking,
|
||||||
WindStore windStore, long timeoutInMilliseconds, boolean simulateWithStartTimeNow,
|
WindStore windStore, long timeoutInMilliseconds, boolean simulateWithStartTimeNow) throws Exception {
|
||||||
RaceLogStore raceLogStore) throws Exception {
|
|
||||||
return addRace(regattaToAddTo, getTracTracDomainFactory().createTrackingConnectivityParameters(paramURL, liveURI, storedURI, startOfTracking,
|
return addRace(regattaToAddTo, getTracTracDomainFactory().createTrackingConnectivityParameters(paramURL, liveURI, storedURI, startOfTracking,
|
||||||
endOfTracking, delayToLiveInMillis, simulateWithStartTimeNow, windStore, raceLogStore), windStore, timeoutInMilliseconds,
|
endOfTracking, delayToLiveInMillis, simulateWithStartTimeNow, windStore), windStore, timeoutInMilliseconds);
|
||||||
raceLogStore);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ensureRegattaIsObservedForDefaultLeaderboardAndAutoLeaderboardLinking(DynamicTrackedRegatta trackedRegatta) {
|
private void ensureRegattaIsObservedForDefaultLeaderboardAndAutoLeaderboardLinking(DynamicTrackedRegatta trackedRegatta) {
|
||||||
@@ -882,8 +875,7 @@ public class RacingEventServiceImpl implements RacingEventService, RegattaListen
|
|||||||
// replicate the addition of the tracked race:
|
// replicate the addition of the tracked race:
|
||||||
CreateTrackedRace op = new CreateTrackedRace(trackedRace.getRaceIdentifier(), trackedRace.getWindStore(),
|
CreateTrackedRace op = new CreateTrackedRace(trackedRace.getRaceIdentifier(), trackedRace.getWindStore(),
|
||||||
trackedRace.getDelayToLiveInMillis(),
|
trackedRace.getDelayToLiveInMillis(),
|
||||||
trackedRace.getMillisecondsOverWhichToAverageWind(), trackedRace.getMillisecondsOverWhichToAverageSpeed(),
|
trackedRace.getMillisecondsOverWhichToAverageWind(), trackedRace.getMillisecondsOverWhichToAverageSpeed());
|
||||||
trackedRace.getRaceLogStore());
|
|
||||||
replicate(op);
|
replicate(op);
|
||||||
linkRaceToConfiguredLeaderboardColumns(trackedRace);
|
linkRaceToConfiguredLeaderboardColumns(trackedRace);
|
||||||
final FlexibleLeaderboard defaultLeaderboard = (FlexibleLeaderboard) leaderboardsByName.get(LeaderboardNameConstants.DEFAULT_LEADERBOARD_NAME);
|
final FlexibleLeaderboard defaultLeaderboard = (FlexibleLeaderboard) leaderboardsByName.get(LeaderboardNameConstants.DEFAULT_LEADERBOARD_NAME);
|
||||||
|
|||||||
+2
-17
@@ -4,8 +4,6 @@ import com.sap.sailing.domain.base.Regatta;
|
|||||||
import com.sap.sailing.domain.base.RaceDefinition;
|
import com.sap.sailing.domain.base.RaceDefinition;
|
||||||
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
||||||
import com.sap.sailing.domain.common.RaceIdentifier;
|
import com.sap.sailing.domain.common.RaceIdentifier;
|
||||||
import com.sap.sailing.domain.racelog.RaceLogStore;
|
|
||||||
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
|
|
||||||
import com.sap.sailing.domain.tracking.TrackedRegatta;
|
import com.sap.sailing.domain.tracking.TrackedRegatta;
|
||||||
import com.sap.sailing.domain.tracking.TrackedRace;
|
import com.sap.sailing.domain.tracking.TrackedRace;
|
||||||
import com.sap.sailing.domain.tracking.WindStore;
|
import com.sap.sailing.domain.tracking.WindStore;
|
||||||
@@ -34,28 +32,16 @@ public class CreateTrackedRace extends AbstractRaceOperation<TrackedRace> {
|
|||||||
* {@link EmptyWindStore}.
|
* {@link EmptyWindStore}.
|
||||||
*/
|
*/
|
||||||
private transient final WindStore windStore;
|
private transient final WindStore windStore;
|
||||||
|
|
||||||
/**
|
|
||||||
* If a {@link RaceLogStore} is provided to this command, it will be used for the construction of the tracked race.
|
|
||||||
* However, after de-serialization, the race log store will always be <code>null</code>, causing the use of an
|
|
||||||
* {@link EmptyRaceLogStore}.
|
|
||||||
*/
|
|
||||||
private transient final RaceLogStore raceLogStore;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param windStore
|
* @param windStore
|
||||||
* if <code>null</code>, an {@link EmptyWindStore} will be used. Note that the {@link #windStore} field
|
* if <code>null</code>, an {@link EmptyWindStore} will be used. Note that the {@link #windStore} field
|
||||||
* won't be serialized. A receiver of this operation will therefore always use an {@link EmptyWindStore}.
|
* won't be serialized. A receiver of this operation will therefore always use an {@link EmptyWindStore}.
|
||||||
* @param raceLogStore
|
|
||||||
* if <code>null</code>, an {@link EmptyRaceLogStore} will be used. Note that the {@link #raceLogStore} field
|
|
||||||
* won't be serialized. A receiver of this operation will therefore always use an {@link EmptyRaceLogStore}.
|
|
||||||
*/
|
*/
|
||||||
public CreateTrackedRace(RegattaAndRaceIdentifier raceIdentifier, WindStore windStore,
|
public CreateTrackedRace(RegattaAndRaceIdentifier raceIdentifier, WindStore windStore,
|
||||||
long delayToLiveInMillis, long millisecondsOverWhichToAverageWind, long millisecondsOverWhichToAverageSpeed,
|
long delayToLiveInMillis, long millisecondsOverWhichToAverageWind, long millisecondsOverWhichToAverageSpeed) {
|
||||||
RaceLogStore raceLogStore) {
|
|
||||||
super(raceIdentifier);
|
super(raceIdentifier);
|
||||||
this.windStore = windStore;
|
this.windStore = windStore;
|
||||||
this.raceLogStore = raceLogStore;
|
|
||||||
this.delayToLiveInMillis = delayToLiveInMillis;
|
this.delayToLiveInMillis = delayToLiveInMillis;
|
||||||
this.millisecondsOverWhichToAverageWind = millisecondsOverWhichToAverageWind;
|
this.millisecondsOverWhichToAverageWind = millisecondsOverWhichToAverageWind;
|
||||||
this.millisecondsOverWhichToAverageSpeed = millisecondsOverWhichToAverageSpeed;
|
this.millisecondsOverWhichToAverageSpeed = millisecondsOverWhichToAverageSpeed;
|
||||||
@@ -76,8 +62,7 @@ public class CreateTrackedRace extends AbstractRaceOperation<TrackedRace> {
|
|||||||
@Override
|
@Override
|
||||||
public TrackedRace internalApplyTo(RacingEventService toState) {
|
public TrackedRace internalApplyTo(RacingEventService toState) {
|
||||||
return toState.createTrackedRace(getRaceIdentifier(), windStore == null ? EmptyWindStore.INSTANCE : windStore,
|
return toState.createTrackedRace(getRaceIdentifier(), windStore == null ? EmptyWindStore.INSTANCE : windStore,
|
||||||
delayToLiveInMillis, millisecondsOverWhichToAverageWind, millisecondsOverWhichToAverageSpeed,
|
delayToLiveInMillis, millisecondsOverWhichToAverageWind, millisecondsOverWhichToAverageSpeed);
|
||||||
raceLogStore == null ? EmptyRaceLogStore.INSTANCE : raceLogStore);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
+2
-3
@@ -2,7 +2,6 @@ package com.sap.sailing.server.operationaltransformation;
|
|||||||
|
|
||||||
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
||||||
import com.sap.sailing.domain.racelog.RaceLogEvent;
|
import com.sap.sailing.domain.racelog.RaceLogEvent;
|
||||||
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
|
|
||||||
import com.sap.sailing.server.RacingEventService;
|
import com.sap.sailing.server.RacingEventService;
|
||||||
import com.sap.sailing.server.RacingEventServiceOperation;
|
import com.sap.sailing.server.RacingEventServiceOperation;
|
||||||
|
|
||||||
@@ -18,8 +17,8 @@ public class RecordRaceLogEvent extends AbstractRaceOperation<Void> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Void internalApplyTo(RacingEventService toState) throws Exception {
|
public Void internalApplyTo(RacingEventService toState) throws Exception {
|
||||||
DynamicTrackedRace trackedRace = (DynamicTrackedRace) toState.getTrackedRace(getRaceIdentifier());
|
// DynamicTrackedRace trackedRace = (DynamicTrackedRace) toState.getTrackedRace(getRaceIdentifier());
|
||||||
trackedRace.recordRaceLogEvent(event);
|
// trackedRace.recordRaceLogEvent(event);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user