mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-26 07:26:41 +00:00
- Implemented the new RaceDefinition constructor which only works with a Map<Competitor,Boat> instead Iterable<Competitor>
- Adapted the creation of competitors and boats for all tracking providers - Adapted all tests
This commit is contained in:
@@ -14,6 +14,7 @@ Require-Bundle: org.junit4;bundle-version="4.8.2",
|
||||
org.mongodb.mongo-java-driver;bundle-version="2.13.0",
|
||||
com.sap.sse.common
|
||||
Import-Package: com.sap.sailing.domain.abstractlog.regatta.events,
|
||||
com.sap.sailing.domain.base,
|
||||
com.sap.sailing.domain.persistence.impl,
|
||||
com.sap.sailing.domain.persistence.racelog.tracking.impl,
|
||||
com.sap.sailing.domain.tractracadapter,
|
||||
|
||||
+5
-1
@@ -16,6 +16,8 @@ import com.sap.sailing.domain.abstractlog.regatta.RegattaLog;
|
||||
import com.sap.sailing.domain.abstractlog.regatta.events.impl.RegattaLogDeviceCompetitorMappingEventImpl;
|
||||
import com.sap.sailing.domain.abstractlog.regatta.events.impl.RegattaLogDeviceMarkMappingEventImpl;
|
||||
import com.sap.sailing.domain.abstractlog.regatta.impl.RegattaLogImpl;
|
||||
import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.BoatClass;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.DomainFactory;
|
||||
import com.sap.sailing.domain.base.Mark;
|
||||
@@ -46,7 +48,9 @@ public class AbstractGPSFixStoreTest {
|
||||
protected RaceLog raceLog;
|
||||
protected RegattaLog regattaLog;
|
||||
protected SensorFixStore store;
|
||||
protected final Competitor comp = DomainFactory.INSTANCE.getOrCreateCompetitor("comp", "comp", null, null, null, null, null, null, /* timeOnTimeFactor */ null, /* timeOnDistanceAllowanceInSecondsPerNauticalMile */ null, null);
|
||||
protected final BoatClass boatClass = DomainFactory.INSTANCE.getOrCreateBoatClass("49er");
|
||||
protected final Competitor comp = DomainFactory.INSTANCE.getOrCreateCompetitor("comp", "comp", null, null, null, null, null, null, /* timeOnTimeFactor */ null, /* timeOnDistanceAllowanceInSecondsPerNauticalMile */ null, null);
|
||||
protected final Boat boat = DomainFactory.INSTANCE.getOrCreateBoat(comp, "boat", boatClass, "GER 234", null);
|
||||
protected final Mark mark = DomainFactory.INSTANCE.getOrCreateMark("mark");
|
||||
|
||||
protected final AbstractLogEventAuthor author = new LogEventAuthorImpl("author", 0);
|
||||
|
||||
+13
-4
@@ -5,6 +5,8 @@ import static org.mockito.Mockito.mock;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
@@ -12,7 +14,7 @@ import org.junit.rules.Timeout;
|
||||
|
||||
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RaceLogResolver;
|
||||
import com.sap.sailing.domain.abstractlog.regatta.events.impl.RegattaLogDefineMarkEventImpl;
|
||||
import com.sap.sailing.domain.base.BoatClass;
|
||||
import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.Course;
|
||||
import com.sap.sailing.domain.base.DomainFactory;
|
||||
@@ -42,7 +44,6 @@ import com.sap.sse.common.impl.MillisecondsTimePoint;
|
||||
import com.sap.sse.common.impl.TimeRangeImpl;
|
||||
|
||||
public class TrackedRaceLoadsFixesTest extends AbstractGPSFixStoreTest {
|
||||
private final BoatClass boatClass = DomainFactory.INSTANCE.getOrCreateBoatClass("49er");
|
||||
|
||||
@Rule
|
||||
public Timeout TrackedRaceLoadsFixesTestTimeout = new Timeout(3 * 60 * 1000);
|
||||
@@ -52,13 +53,17 @@ public class TrackedRaceLoadsFixesTest extends AbstractGPSFixStoreTest {
|
||||
NoCorrespondingServiceRegisteredException, InterruptedException {
|
||||
Competitor comp2 = DomainFactory.INSTANCE.getOrCreateCompetitor("comp2", "comp2", "c2", null, null, null, null, null,
|
||||
/* timeOnTimeFactor */ null, /* timeOnDistanceAllowancePerNauticalMile */ null, null);
|
||||
Boat boat2 = DomainFactory.INSTANCE.getOrCreateBoat(comp2, "boat2", boatClass, "USA 123", null);
|
||||
Map<Competitor, Boat> competitorsAndBoats = new HashMap<>();
|
||||
competitorsAndBoats.put(comp, boat);
|
||||
competitorsAndBoats.put(comp2, boat2);
|
||||
Mark mark2 = DomainFactory.INSTANCE.getOrCreateMark("mark2");
|
||||
DeviceIdentifier markDevice = new SmartphoneImeiIdentifier("imei2");
|
||||
regattaLog.add(new RegattaLogDefineMarkEventImpl(new MillisecondsTimePoint(1), author, new MillisecondsTimePoint(1), 0, mark));
|
||||
regattaLog.add(new RegattaLogDefineMarkEventImpl(new MillisecondsTimePoint(2), author, new MillisecondsTimePoint(1), 0, mark2));
|
||||
Course course = new CourseImpl("course", Arrays.asList(new Waypoint[] { new WaypointImpl(mark),
|
||||
new WaypointImpl(mark2) }));
|
||||
RaceDefinition race = new RaceDefinitionImpl("race", course, boatClass, Arrays.asList(new Competitor[] { comp, comp2 }));
|
||||
RaceDefinition race = new RaceDefinitionImpl("race", course, boatClass, competitorsAndBoats);
|
||||
map(comp, device, 0, 10000);
|
||||
map(mark, markDevice, 0, 10000);
|
||||
|
||||
@@ -100,6 +105,10 @@ public class TrackedRaceLoadsFixesTest extends AbstractGPSFixStoreTest {
|
||||
InterruptedException {
|
||||
Competitor comp2 = DomainFactory.INSTANCE.getOrCreateCompetitor("comp2", "comp2", "c2", null, null, null, null, null,
|
||||
/* timeOnTimeFactor */ null, /* timeOnDistanceAllowancePerNauticalMile */ null, null);
|
||||
Boat boat2 = DomainFactory.INSTANCE.getOrCreateBoat(comp2, "boat2", boatClass, "USA 123", null);
|
||||
Map<Competitor, Boat> competitorsAndBoats = new HashMap<>();
|
||||
competitorsAndBoats.put(comp, boat);
|
||||
competitorsAndBoats.put(comp2, boat2);
|
||||
Mark mark2 = DomainFactory.INSTANCE.getOrCreateMark("mark2");
|
||||
regattaLog.add(new RegattaLogDefineMarkEventImpl(new MillisecondsTimePoint(1), author, new MillisecondsTimePoint(1), 0, mark));
|
||||
regattaLog.add(new RegattaLogDefineMarkEventImpl(new MillisecondsTimePoint(2), author, new MillisecondsTimePoint(1), 0, mark2));
|
||||
@@ -107,7 +116,7 @@ public class TrackedRaceLoadsFixesTest extends AbstractGPSFixStoreTest {
|
||||
DeviceIdentifier device3 = new SmartphoneImeiIdentifier("imei3");
|
||||
Course course = new CourseImpl("course", Arrays.asList(new Waypoint[] { new WaypointImpl(mark),
|
||||
new WaypointImpl(mark2) }));
|
||||
RaceDefinition race = new RaceDefinitionImpl("race", course, boatClass, Arrays.asList(comp, comp2));
|
||||
RaceDefinition race = new RaceDefinitionImpl("race", course, boatClass, competitorsAndBoats);
|
||||
|
||||
map(comp, device, 0, 20000);
|
||||
map(comp2, device2, 0, 600);
|
||||
|
||||
+28
-5
@@ -8,6 +8,8 @@ import static org.mockito.Mockito.mock;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.junit.Test;
|
||||
@@ -18,6 +20,7 @@ import com.sap.sailing.domain.abstractlog.race.impl.RaceLogRaceStatusEventImpl;
|
||||
import com.sap.sailing.domain.abstractlog.race.impl.RaceLogStartOfTrackingEventImpl;
|
||||
import com.sap.sailing.domain.abstractlog.race.impl.RaceLogStartTimeEventImpl;
|
||||
import com.sap.sailing.domain.abstractlog.regatta.events.impl.RegattaLogDefineMarkEventImpl;
|
||||
import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.BoatClass;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.Course;
|
||||
@@ -61,12 +64,16 @@ public class TrackedRaceStartTimeInferenceTest extends AbstractGPSFixStoreTest {
|
||||
NoCorrespondingServiceRegisteredException, InterruptedException {
|
||||
Competitor comp2 = DomainFactory.INSTANCE.getOrCreateCompetitor("comp2", "comp2", "c2", null, null, null, null, null,
|
||||
/* timeOnTimeFactor */ null, /* timeOnDistanceAllowancePerNauticalMile */ null, null);
|
||||
Boat boat2 = DomainFactory.INSTANCE.getOrCreateBoat(comp2, "boat2", boatClass, "USA 123", null);
|
||||
Map<Competitor, Boat> competitorsAndBoats = new HashMap<>();
|
||||
competitorsAndBoats.put(comp, boat);
|
||||
competitorsAndBoats.put(comp2, boat2);
|
||||
Mark mark2 = DomainFactory.INSTANCE.getOrCreateMark("mark2");
|
||||
regattaLog.add(new RegattaLogDefineMarkEventImpl(new MillisecondsTimePoint(1), author, new MillisecondsTimePoint(1), 0, mark));
|
||||
regattaLog.add(new RegattaLogDefineMarkEventImpl(new MillisecondsTimePoint(2), author, new MillisecondsTimePoint(1), 0, mark2));
|
||||
Course course = new CourseImpl("course", Arrays.asList(new Waypoint[] { new WaypointImpl(mark),
|
||||
new WaypointImpl(mark2) }));
|
||||
RaceDefinition race = new RaceDefinitionImpl("race", course, boatClass, Arrays.asList(new Competitor[] { comp, comp2 }));
|
||||
RaceDefinition race = new RaceDefinitionImpl("race", course, boatClass, competitorsAndBoats);
|
||||
|
||||
TrackedRegatta regatta = new DynamicTrackedRegattaImpl(new RegattaImpl(EmptyRaceLogStore.INSTANCE,
|
||||
EmptyRegattaLogStore.INSTANCE, RegattaImpl.getDefaultName("regatta", boatClass.getName()), boatClass, /* startDate */
|
||||
@@ -124,12 +131,16 @@ public class TrackedRaceStartTimeInferenceTest extends AbstractGPSFixStoreTest {
|
||||
NoCorrespondingServiceRegisteredException, InterruptedException {
|
||||
Competitor comp2 = DomainFactory.INSTANCE.getOrCreateCompetitor("comp2", "comp2", "c2", null, null, null, null, null,
|
||||
/* timeOnTimeFactor */ null, /* timeOnDistanceAllowancePerNauticalMile */ null, null);
|
||||
Boat boat2 = DomainFactory.INSTANCE.getOrCreateBoat(comp2, "boat2", boatClass, "USA 123", null);
|
||||
Map<Competitor, Boat> competitorsAndBoats = new HashMap<>();
|
||||
competitorsAndBoats.put(comp, boat);
|
||||
competitorsAndBoats.put(comp2, boat2);
|
||||
Mark mark2 = DomainFactory.INSTANCE.getOrCreateMark("mark2");
|
||||
regattaLog.add(new RegattaLogDefineMarkEventImpl(new MillisecondsTimePoint(1), author, new MillisecondsTimePoint(1), 0, mark));
|
||||
regattaLog.add(new RegattaLogDefineMarkEventImpl(new MillisecondsTimePoint(2), author, new MillisecondsTimePoint(1), 0, mark2));
|
||||
Course course = new CourseImpl("course", Arrays.asList(new Waypoint[] { new WaypointImpl(mark),
|
||||
new WaypointImpl(mark2) }));
|
||||
RaceDefinition race = new RaceDefinitionImpl("race", course, boatClass, Arrays.asList(new Competitor[] { comp, comp2 }));
|
||||
RaceDefinition race = new RaceDefinitionImpl("race", course, boatClass, competitorsAndBoats);
|
||||
TrackedRegatta regatta = new DynamicTrackedRegattaImpl(new RegattaImpl(EmptyRaceLogStore.INSTANCE,
|
||||
EmptyRegattaLogStore.INSTANCE, RegattaImpl.getDefaultName("regatta", boatClass.getName()), boatClass, /* startDate */
|
||||
null, /* endDate */null, null, null, "a", null));
|
||||
@@ -162,12 +173,16 @@ public class TrackedRaceStartTimeInferenceTest extends AbstractGPSFixStoreTest {
|
||||
NoCorrespondingServiceRegisteredException, InterruptedException {
|
||||
Competitor comp2 = DomainFactory.INSTANCE.getOrCreateCompetitor("comp2", "comp2", "c2", null, null, null, null, null,
|
||||
/* timeOnTimeFactor */ null, /* timeOnDistanceAllowancePerNauticalMile */ null, null);
|
||||
Boat boat2 = DomainFactory.INSTANCE.getOrCreateBoat(comp2, "boat2", boatClass, "USA 123", null);
|
||||
Map<Competitor, Boat> competitorsAndBoats = new HashMap<>();
|
||||
competitorsAndBoats.put(comp, boat);
|
||||
competitorsAndBoats.put(comp2, boat2);
|
||||
Mark mark2 = DomainFactory.INSTANCE.getOrCreateMark("mark2");
|
||||
regattaLog.add(new RegattaLogDefineMarkEventImpl(new MillisecondsTimePoint(1), author, new MillisecondsTimePoint(1), 0, mark));
|
||||
regattaLog.add(new RegattaLogDefineMarkEventImpl(new MillisecondsTimePoint(2), author, new MillisecondsTimePoint(1), 0, mark2));
|
||||
Course course = new CourseImpl("course", Arrays.asList(new Waypoint[] { new WaypointImpl(mark),
|
||||
new WaypointImpl(mark2) }));
|
||||
RaceDefinition race = new RaceDefinitionImpl("race", course, boatClass, Arrays.asList(new Competitor[] { comp, comp2 }));
|
||||
RaceDefinition race = new RaceDefinitionImpl("race", course, boatClass, competitorsAndBoats);
|
||||
TrackedRegatta regatta = new DynamicTrackedRegattaImpl(new RegattaImpl(EmptyRaceLogStore.INSTANCE,
|
||||
EmptyRegattaLogStore.INSTANCE, RegattaImpl.getDefaultName("regatta", boatClass.getName()), boatClass, /* startDate */
|
||||
null, /* endDate */null, null, null, "a", null));
|
||||
@@ -203,12 +218,16 @@ public class TrackedRaceStartTimeInferenceTest extends AbstractGPSFixStoreTest {
|
||||
NoCorrespondingServiceRegisteredException, InterruptedException {
|
||||
Competitor comp2 = DomainFactory.INSTANCE.getOrCreateCompetitor("comp2", "comp2", "c2", null, null, null, null, null,
|
||||
/* timeOnTimeFactor */ null, /* timeOnDistanceAllowancePerNauticalMile */ null, null);
|
||||
Boat boat2 = DomainFactory.INSTANCE.getOrCreateBoat(comp2, "boat2", boatClass, "USA 123", null);
|
||||
Map<Competitor, Boat> competitorsAndBoats = new HashMap<>();
|
||||
competitorsAndBoats.put(comp, boat);
|
||||
competitorsAndBoats.put(comp2, boat2);
|
||||
Mark mark2 = DomainFactory.INSTANCE.getOrCreateMark("mark2");
|
||||
regattaLog.add(new RegattaLogDefineMarkEventImpl(new MillisecondsTimePoint(1), author, new MillisecondsTimePoint(1), 0, mark));
|
||||
regattaLog.add(new RegattaLogDefineMarkEventImpl(new MillisecondsTimePoint(2), author, new MillisecondsTimePoint(1), 0, mark2));
|
||||
Course course = new CourseImpl("course", Arrays.asList(new Waypoint[] { new WaypointImpl(mark),
|
||||
new WaypointImpl(mark2) }));
|
||||
RaceDefinition race = new RaceDefinitionImpl("race", course, boatClass, Arrays.asList(new Competitor[] { comp, comp2 }));
|
||||
RaceDefinition race = new RaceDefinitionImpl("race", course, boatClass, competitorsAndBoats);
|
||||
TrackedRegatta regatta = new DynamicTrackedRegattaImpl(new RegattaImpl(EmptyRaceLogStore.INSTANCE,
|
||||
EmptyRegattaLogStore.INSTANCE, RegattaImpl.getDefaultName("regatta", boatClass.getName()), boatClass, /* startDate */
|
||||
null, /* endDate */null, null, null, "a", null));
|
||||
@@ -307,12 +326,16 @@ public class TrackedRaceStartTimeInferenceTest extends AbstractGPSFixStoreTest {
|
||||
NoCorrespondingServiceRegisteredException, InterruptedException {
|
||||
Competitor comp2 = DomainFactory.INSTANCE.getOrCreateCompetitor("comp2", "comp2", "c2", null, null, null, null, null,
|
||||
/* timeOnTimeFactor */ null, /* timeOnDistanceAllowancePerNauticalMile */ null, null);
|
||||
Boat boat2 = DomainFactory.INSTANCE.getOrCreateBoat(comp2, "boat2", boatClass, "USA 123", null);
|
||||
Map<Competitor, Boat> competitorsAndBoats = new HashMap<>();
|
||||
competitorsAndBoats.put(comp, boat);
|
||||
competitorsAndBoats.put(comp2, boat2);
|
||||
Mark mark2 = DomainFactory.INSTANCE.getOrCreateMark("mark2");
|
||||
regattaLog.add(new RegattaLogDefineMarkEventImpl(new MillisecondsTimePoint(1), author, new MillisecondsTimePoint(1), 0, mark));
|
||||
regattaLog.add(new RegattaLogDefineMarkEventImpl(new MillisecondsTimePoint(2), author, new MillisecondsTimePoint(1), 0, mark2));
|
||||
Course course = new CourseImpl("course", Arrays.asList(new Waypoint[] { new WaypointImpl(mark),
|
||||
new WaypointImpl(mark2) }));
|
||||
RaceDefinition race = new RaceDefinitionImpl("race", course, boatClass, Arrays.asList(new Competitor[] { comp, comp2 }));
|
||||
RaceDefinition race = new RaceDefinitionImpl("race", course, boatClass, competitorsAndBoats);
|
||||
TrackedRegatta regatta = new DynamicTrackedRegattaImpl(new RegattaImpl(EmptyRaceLogStore.INSTANCE,
|
||||
EmptyRegattaLogStore.INSTANCE, RegattaImpl.getDefaultName("regatta", boatClass.getName()), boatClass, /* startDate */
|
||||
null, /* endDate */null, null, null, "a", null));
|
||||
|
||||
+11
-1
@@ -35,6 +35,7 @@ import com.sap.sailing.domain.abstractlog.regatta.RegattaLog;
|
||||
import com.sap.sailing.domain.abstractlog.regatta.RegattaLogEventVisitor;
|
||||
import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogDefineMarkEvent;
|
||||
import com.sap.sailing.domain.abstractlog.regatta.impl.BaseRegattaLogEventVisitor;
|
||||
import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.BoatClass;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.ControlPoint;
|
||||
@@ -46,6 +47,7 @@ import com.sap.sailing.domain.base.RaceDefinition;
|
||||
import com.sap.sailing.domain.base.Regatta;
|
||||
import com.sap.sailing.domain.base.Sideline;
|
||||
import com.sap.sailing.domain.base.Waypoint;
|
||||
import com.sap.sailing.domain.base.impl.BoatImpl;
|
||||
import com.sap.sailing.domain.base.impl.CourseDataImpl;
|
||||
import com.sap.sailing.domain.base.impl.CourseImpl;
|
||||
import com.sap.sailing.domain.base.impl.RaceDefinitionImpl;
|
||||
@@ -290,7 +292,15 @@ public class RaceLogRaceTracker extends AbstractRaceTrackerBaseImpl {
|
||||
}
|
||||
Iterable<Competitor> competitors = raceColumn.getAllCompetitors(params.getFleet());
|
||||
Serializable raceId = denoteEvent.getRaceId();
|
||||
final RaceDefinition raceDef = new RaceDefinitionImpl(raceName, course, boatClass, competitors, raceId);
|
||||
// TODO: How do we retrieve the boats for the competitors of this raceColumn
|
||||
// For now we create the boats here which MUST be corrected later on
|
||||
Map<Competitor, Boat> competitorsAndBoats = new HashMap<>();
|
||||
for (Competitor c: competitors) {
|
||||
Boat theWrongBoat = c.getBoat();
|
||||
Boat b = new BoatImpl(c.getId(), theWrongBoat.getName(), boatClass, theWrongBoat.getSailID(), theWrongBoat.getColor());
|
||||
competitorsAndBoats.put(c, b);
|
||||
}
|
||||
final RaceDefinition raceDef = new RaceDefinitionImpl(raceName, course, boatClass, competitorsAndBoats, raceId);
|
||||
Iterable<Sideline> sidelines = Collections.<Sideline> emptyList();
|
||||
// set race definition, so race is linked to leaderboard automatically
|
||||
regatta.getRegatta().addRace(raceDef);
|
||||
|
||||
+1
-1
@@ -5,7 +5,7 @@ import java.net.URI;
|
||||
import com.sap.sse.common.Color;
|
||||
import com.sap.sse.common.Duration;
|
||||
|
||||
public interface CompetitorChangeListener extends BoatChangeListener, NationalityChangeListener {
|
||||
public interface CompetitorChangeListener extends /** MUST BE REMOVED AFTER AFTER bug 2822 IS SOLVED */BoatChangeListener, NationalityChangeListener {
|
||||
void colorChanged(Color oldColor, Color newColor);
|
||||
|
||||
void nameChanged(String oldName, String newName);
|
||||
|
||||
+7
-4
@@ -1,7 +1,9 @@
|
||||
package com.sap.sailing.domain.swisstimingadapter;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.BoatClass;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.ControlPoint;
|
||||
@@ -18,6 +20,7 @@ import com.sap.sailing.domain.tracking.MarkPassing;
|
||||
import com.sap.sailing.domain.tracking.RaceTrackingConnectivityParameters;
|
||||
import com.sap.sailing.domain.tracking.TrackedRegattaRegistry;
|
||||
import com.sap.sse.common.TimePoint;
|
||||
import com.sap.sse.common.Util.Pair;
|
||||
|
||||
import difflib.PatchFailedException;
|
||||
|
||||
@@ -35,11 +38,11 @@ public interface DomainFactory {
|
||||
|
||||
Nationality getOrCreateNationality(String threeLetterIOCCode);
|
||||
|
||||
Competitor createCompetitorWithoutID(com.sap.sailing.domain.swisstimingadapter.Competitor competitor, String raceId, BoatClass boatClass);
|
||||
Pair<Competitor, Boat> createCompetitorWithoutID(com.sap.sailing.domain.swisstimingadapter.Competitor competitor, String raceId, BoatClass boatClass);
|
||||
|
||||
Competitor createCompetitorWithID(com.sap.sailing.domain.swisstimingadapter.Competitor competitor, BoatClass boatClass);
|
||||
Pair<Competitor, Boat> createCompetitorWithID(com.sap.sailing.domain.swisstimingadapter.Competitor competitor, BoatClass boatClass);
|
||||
|
||||
Competitor createCompetitorWithoutID(String boatID, String threeLetterIOCCode, String name, String raceId, BoatClass boatClass);
|
||||
Pair<Competitor, Boat> createCompetitorWithoutID(String boatID, String threeLetterIOCCode, String name, String raceId, BoatClass boatClass);
|
||||
|
||||
String getCompetitorID(String boatID, RaceType raceType);
|
||||
|
||||
@@ -66,7 +69,7 @@ public interface DomainFactory {
|
||||
|
||||
ControlPoint getOrCreateControlPoint(Iterable<String> devices);
|
||||
|
||||
RaceDefinition createRaceDefinition(Regatta regatta, String raceID, Iterable<Competitor> competitors,
|
||||
RaceDefinition createRaceDefinition(Regatta regatta, String raceID, Map<Competitor, Boat> competitorsAndBoats,
|
||||
List<ControlPoint> courseDefinition);
|
||||
|
||||
}
|
||||
|
||||
+27
-23
@@ -2,15 +2,16 @@ package com.sap.sailing.domain.swisstimingadapter.impl;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.BoatClass;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.CompetitorStore;
|
||||
@@ -51,6 +52,7 @@ import com.sap.sailing.domain.tracking.TrackedRegattaRegistry;
|
||||
import com.sap.sse.common.Named;
|
||||
import com.sap.sse.common.TimePoint;
|
||||
import com.sap.sse.common.Util;
|
||||
import com.sap.sse.common.Util.Pair;
|
||||
import com.sap.sse.common.WithID;
|
||||
import com.sap.sse.common.impl.MillisecondsTimePoint;
|
||||
|
||||
@@ -113,11 +115,11 @@ public class DomainFactoryImpl implements DomainFactory {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Competitor createCompetitorWithID(com.sap.sailing.domain.swisstimingadapter.Competitor competitor, BoatClass boatClass) {
|
||||
CompetitorStore competitorStore = baseDomainFactory.getCompetitorStore();
|
||||
Competitor result = competitorStore.getExistingCompetitorByIdAsString(competitor.getID());
|
||||
if (result == null || competitorStore.isCompetitorToUpdateDuringGetOrCreate(result)) {
|
||||
DynamicBoat boat = new BoatImpl(result.getId(), competitor.getName(), boatClass, competitor.getBoatID());
|
||||
public Pair<Competitor, Boat> createCompetitorWithID(com.sap.sailing.domain.swisstimingadapter.Competitor competitor, BoatClass boatClass) {
|
||||
CompetitorStore competitorAndBoatStore = baseDomainFactory.getCompetitorStore();
|
||||
Competitor domainCompetitor = competitorAndBoatStore.getExistingCompetitorByIdAsString(competitor.getID());
|
||||
if (domainCompetitor == null || competitorAndBoatStore.isCompetitorToUpdateDuringGetOrCreate(domainCompetitor)) {
|
||||
DynamicBoat boat = new BoatImpl(domainCompetitor.getId(), competitor.getName(), boatClass, competitor.getBoatID());
|
||||
List<DynamicPerson> teamMembers = new ArrayList<DynamicPerson>();
|
||||
for (CrewMember crewMember: competitor.getCrew()) {
|
||||
DynamicPerson person = new PersonImpl(crewMember.getName().trim(), getOrCreateNationality(crewMember.getNationality()),
|
||||
@@ -125,15 +127,16 @@ public class DomainFactoryImpl implements DomainFactory {
|
||||
teamMembers.add(person);
|
||||
}
|
||||
DynamicTeam team = new TeamImpl(competitor.getName(), teamMembers, /* coach */ null);
|
||||
result = competitorStore.getOrCreateCompetitor(competitor.getID(), competitor.getName(), null /* shortName */, null /*displayColor*/, null /*email*/, null, team, boat,
|
||||
domainCompetitor = competitorAndBoatStore.getOrCreateCompetitor(competitor.getID(), competitor.getName(), null /* shortName */, null /*displayColor*/, null /*email*/, null, team, boat,
|
||||
/* timeOnTimeFactor */ null, /* timeOnDistanceAllowancePerNauticalMile */ null, null);
|
||||
}
|
||||
return result;
|
||||
Boat domainBoat = competitorAndBoatStore.getOrCreateBoat(domainCompetitor, competitor.getName(), boatClass, competitor.getBoatID(), null);
|
||||
return new Pair<Competitor, Boat>(domainCompetitor, domainBoat);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Competitor createCompetitorWithoutID(com.sap.sailing.domain.swisstimingadapter.Competitor competitor, String raceId, BoatClass boatClass) {
|
||||
Competitor result = null;
|
||||
public Pair<Competitor, Boat> createCompetitorWithoutID(com.sap.sailing.domain.swisstimingadapter.Competitor competitor, String raceId, BoatClass boatClass) {
|
||||
CompetitorStore competitorAndBoatStore = baseDomainFactory.getCompetitorStore();
|
||||
List<DynamicPerson> teamMembers = new ArrayList<DynamicPerson>();
|
||||
for (String teamMemberName : competitor.getName().split("[-+&]")) {
|
||||
teamMembers.add(new PersonImpl(teamMemberName.trim(), getOrCreateNationality(competitor.getThreeLetterIOCCode()),
|
||||
@@ -142,14 +145,15 @@ public class DomainFactoryImpl implements DomainFactory {
|
||||
DynamicTeam team = new TeamImpl(competitor.getName(), teamMembers, /* coach */ null);
|
||||
String competitorID = getCompetitorID(competitor.getBoatID(), raceId, boatClass);
|
||||
DynamicBoat boat = new BoatImpl(competitorID, competitor.getName(), boatClass, competitor.getBoatID());
|
||||
result = baseDomainFactory.getCompetitorStore().getOrCreateCompetitor(competitorID,
|
||||
Competitor domainCompetitor = competitorAndBoatStore.getOrCreateCompetitor(competitorID,
|
||||
competitor.getName(), null /* short name */, null /*displayColor*/, null /*email*/, null, team, boat,
|
||||
/* timeOnTimeFactor */ null, /* timeOnDistanceAllowancePerNauticalMile */ null, null);
|
||||
return result;
|
||||
Boat domainBoat = competitorAndBoatStore.getOrCreateBoat(domainCompetitor, competitor.getName(), boatClass, competitor.getBoatID(), null);
|
||||
return new Pair<Competitor, Boat>(domainCompetitor, domainBoat);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Competitor createCompetitorWithoutID(String boatID, String threeLetterIOCCode, String name, String raceId, BoatClass boatClass) {
|
||||
public Pair<Competitor, Boat> createCompetitorWithoutID(String boatID, String threeLetterIOCCode, String name, String raceId, BoatClass boatClass) {
|
||||
return createCompetitorWithoutID(new CompetitorWithoutID(boatID, threeLetterIOCCode, name), raceId, boatClass);
|
||||
}
|
||||
|
||||
@@ -177,7 +181,7 @@ public class DomainFactoryImpl implements DomainFactory {
|
||||
}
|
||||
|
||||
@Override
|
||||
public RaceDefinition createRaceDefinition(Regatta regatta, String raceID, Iterable<Competitor> competitors,
|
||||
public RaceDefinition createRaceDefinition(Regatta regatta, String raceID, Map<Competitor, Boat> competitorsAndBoats,
|
||||
List<ControlPoint> courseDefinition) {
|
||||
List<Waypoint> waypoints = new ArrayList<>();
|
||||
for (ControlPoint controlPoint : courseDefinition) {
|
||||
@@ -187,7 +191,7 @@ public class DomainFactoryImpl implements DomainFactory {
|
||||
com.sap.sailing.domain.base.Course domainCourse = new CourseImpl("Course", waypoints);
|
||||
BoatClass boatClass = getRaceTypeFromRaceID(raceID).getBoatClass();
|
||||
logger.info("Creating RaceDefinitionImpl for race "+raceID);
|
||||
RaceDefinition result = new RaceDefinitionImpl(regatta.getId().toString()+"/"+raceID, domainCourse, boatClass, competitors);
|
||||
RaceDefinition result = new RaceDefinitionImpl(regatta.getId().toString()+"/"+raceID, domainCourse, boatClass, competitorsAndBoats);
|
||||
regatta.addRace(result);
|
||||
return result;
|
||||
}
|
||||
@@ -195,10 +199,10 @@ public class DomainFactoryImpl implements DomainFactory {
|
||||
@Override
|
||||
public RaceDefinition createRaceDefinition(Regatta regatta, Race race, StartList startList, Course course) {
|
||||
com.sap.sailing.domain.base.Course domainCourse = createCourse(race.getDescription(), course);
|
||||
Iterable<Competitor> competitors = createCompetitorList(startList, race.getRaceID(), race.getBoatClass());
|
||||
Map<Competitor, Boat> competitorsAndBoats = createCompetitorsAndBoats(startList, race.getRaceID(), race.getBoatClass());
|
||||
logger.info("Creating RaceDefinitionImpl for race "+race.getRaceID());
|
||||
BoatClass boatClass = race.getBoatClass() != null ? race.getBoatClass() : getRaceTypeFromRaceID(race.getRaceID()).getBoatClass();
|
||||
RaceDefinition result = new RaceDefinitionImpl(race.getRaceName(), domainCourse, boatClass, competitors, /* competitorsAndTheirBoats */ Collections.emptyMap(), race.getRaceID());
|
||||
RaceDefinition result = new RaceDefinitionImpl(race.getRaceName(), domainCourse, boatClass, competitorsAndBoats, race.getRaceID());
|
||||
regatta.addRace(result);
|
||||
return result;
|
||||
}
|
||||
@@ -248,16 +252,16 @@ public class DomainFactoryImpl implements DomainFactory {
|
||||
return result;
|
||||
}
|
||||
|
||||
private Iterable<Competitor> createCompetitorList(StartList startList, String raceId, BoatClass boatClass) {
|
||||
List<Competitor> result = new ArrayList<Competitor>();
|
||||
private Map<Competitor,Boat> createCompetitorsAndBoats(StartList startList, String raceId, BoatClass boatClass) {
|
||||
Map<Competitor,Boat> result = new LinkedHashMap<>();
|
||||
for (com.sap.sailing.domain.swisstimingadapter.Competitor swissTimingCompetitor : startList.getCompetitors()) {
|
||||
Competitor domainCompetitor;
|
||||
Pair<Competitor,Boat> domainCompetitorAndBoat;
|
||||
if (swissTimingCompetitor.getID() != null) {
|
||||
domainCompetitor = createCompetitorWithID(swissTimingCompetitor, boatClass);
|
||||
domainCompetitorAndBoat = createCompetitorWithID(swissTimingCompetitor, boatClass);
|
||||
} else {
|
||||
domainCompetitor = createCompetitorWithoutID(swissTimingCompetitor, raceId, boatClass);
|
||||
domainCompetitorAndBoat = createCompetitorWithoutID(swissTimingCompetitor, raceId, boatClass);
|
||||
}
|
||||
result.add(domainCompetitor);
|
||||
result.put(domainCompetitorAndBoat.getA(), domainCompetitorAndBoat.getB());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
+12
-13
@@ -5,17 +5,16 @@ import java.util.Calendar;
|
||||
import java.util.Collections;
|
||||
import java.util.GregorianCalendar;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.NavigableSet;
|
||||
import java.util.Set;
|
||||
import java.util.TimeZone;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RaceLogResolver;
|
||||
import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.ControlPoint;
|
||||
import com.sap.sailing.domain.base.Course;
|
||||
@@ -92,11 +91,11 @@ public class SwissTimingReplayToDomainAdapter extends SwissTimingReplayAdapter i
|
||||
private TimePoint referenceTimePoint;
|
||||
|
||||
/**
|
||||
* feference location for location / lat/lng specifications
|
||||
* reference location for location / lat/lng specifications
|
||||
*/
|
||||
private Position referenceLocation;
|
||||
|
||||
private final Map<String, Set<Competitor>> competitorsPerRaceID;
|
||||
private final Map<String, Map<Competitor, Boat>> competitorsAndBoatsPerRaceID;
|
||||
|
||||
private final Map<String, Map<String, Mark>> marksPerRaceIDPerMarkID;
|
||||
|
||||
@@ -155,7 +154,7 @@ public class SwissTimingReplayToDomainAdapter extends SwissTimingReplayAdapter i
|
||||
trackedRacePerRaceID = new HashMap<>();
|
||||
bestStartTimePerRaceID = new HashMap<>();
|
||||
raceTimePerRaceID = new HashMap<>();
|
||||
competitorsPerRaceID = new HashMap<>();
|
||||
competitorsAndBoatsPerRaceID = new HashMap<>();
|
||||
marksPerRaceIDPerMarkID = new HashMap<>();
|
||||
markByHashValue = new HashMap<>();
|
||||
competitorByHashValue = new HashMap<>();
|
||||
@@ -242,15 +241,15 @@ public class SwissTimingReplayToDomainAdapter extends SwissTimingReplayAdapter i
|
||||
CompetitorStatus competitorStatus, BoatType boatType, short cRank_Bracket, short cnPoints_x10_Bracket,
|
||||
short ctPoints_x10_Winner) {
|
||||
if (boatType == BoatType.Competitor) {
|
||||
Competitor competitor = domainFactory.createCompetitorWithoutID(sailNumberOrTrackerID, threeLetterIOCCode.trim(), name.trim(),
|
||||
Pair<Competitor,Boat> competitorAndBoat = domainFactory.createCompetitorWithoutID(sailNumberOrTrackerID, threeLetterIOCCode.trim(), name.trim(),
|
||||
currentRaceID, domainFactory.getRaceTypeFromRaceID(currentRaceID).getBoatClass());
|
||||
Set<Competitor> competitorsOfCurrentRace = competitorsPerRaceID.get(currentRaceID);
|
||||
if (competitorsOfCurrentRace == null) {
|
||||
competitorsOfCurrentRace = new HashSet<>();
|
||||
competitorsPerRaceID.put(currentRaceID, competitorsOfCurrentRace);
|
||||
Map<Competitor, Boat> competitorAndBoatsOfCurrentRace = competitorsAndBoatsPerRaceID.get(currentRaceID);
|
||||
if (competitorAndBoatsOfCurrentRace == null) {
|
||||
competitorAndBoatsOfCurrentRace = new HashMap<>();
|
||||
competitorsAndBoatsPerRaceID.put(currentRaceID, competitorAndBoatsOfCurrentRace);
|
||||
}
|
||||
competitorsOfCurrentRace.add(competitor);
|
||||
competitorByHashValue.put(hashValue, competitor);
|
||||
competitorAndBoatsOfCurrentRace.put(competitorAndBoat.getA(), competitorAndBoat.getB());
|
||||
competitorByHashValue.put(hashValue, competitorAndBoat.getA());
|
||||
} else {
|
||||
// consider it a mark
|
||||
Mark mark = domainFactory.getOrCreateMark(sailNumberOrTrackerID.trim());
|
||||
@@ -315,7 +314,7 @@ public class SwissTimingReplayToDomainAdapter extends SwissTimingReplayAdapter i
|
||||
EmptyRaceLogStore.INSTANCE, EmptyRegattaLogStore.INSTANCE,
|
||||
currentRaceID, domainFactory.getRaceTypeFromRaceID(currentRaceID).getBoatClass(), trackedRegattaRegistry);
|
||||
RaceDefinition race = domainFactory.createRaceDefinition(myRegatta,
|
||||
currentRaceID, competitorsPerRaceID.get(currentRaceID), currentCourseDefinition);
|
||||
currentRaceID, competitorsAndBoatsPerRaceID.get(currentRaceID), currentCourseDefinition);
|
||||
racePerRaceID.put(currentRaceID, race);
|
||||
DynamicTrackedRace trackedRace = trackedRegattaRegistry.getOrCreateTrackedRegatta(myRegatta).
|
||||
createTrackedRace(race, Collections.<Sideline> emptyList(), EmptyWindStore.INSTANCE,
|
||||
|
||||
+6
-3
@@ -7,8 +7,8 @@ import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.StreamSupport;
|
||||
|
||||
import org.junit.Before;
|
||||
@@ -18,6 +18,7 @@ import com.sap.sailing.domain.abstractlog.impl.LogEventAuthorImpl;
|
||||
import com.sap.sailing.domain.abstractlog.race.impl.RaceLogImpl;
|
||||
import com.sap.sailing.domain.abstractlog.race.state.impl.RaceStateImpl;
|
||||
import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.impl.ReadonlyRacingProcedureFactory;
|
||||
import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.Waypoint;
|
||||
import com.sap.sailing.domain.base.configuration.impl.EmptyRegattaConfiguration;
|
||||
@@ -61,8 +62,10 @@ public class CandidateFinderImplWhiteBoxTest {
|
||||
@Before
|
||||
public void setUp() {
|
||||
now = MillisecondsTimePoint.now();
|
||||
competitor = TrackBasedTest.createCompetitor("Competitor");
|
||||
trackedRace = TrackBasedTest.createTestTrackedRace("Test Regatta", "Test Race", "505", Collections.singleton(competitor), now, /* useMarkPassingCalculator */ true);
|
||||
Pair<Competitor, Boat> competitorAndBoat = TrackBasedTest.createCompetitorAndBoat("Competitor");
|
||||
competitor = competitorAndBoat.getA();
|
||||
Map<Competitor, Boat> competitorAndBoats = TrackBasedTest.createCompetitorAndBoatsMap(competitorAndBoat);
|
||||
trackedRace = TrackBasedTest.createTestTrackedRace("Test Regatta", "Test Race", "505", competitorAndBoats, now, /* useMarkPassingCalculator */ true);
|
||||
finder = new CandidateFinderWithPublicGetProbabilityOfStartBasedOnOtherCompetitorsStartLineDistances(trackedRace);
|
||||
}
|
||||
|
||||
|
||||
+10
-5
@@ -9,11 +9,13 @@ import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.Function;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RaceLogResolver;
|
||||
import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.ControlPoint;
|
||||
import com.sap.sailing.domain.base.Course;
|
||||
@@ -53,6 +55,7 @@ import com.sap.sailing.domain.tracking.impl.EmptyWindStore;
|
||||
import com.sap.sailing.domain.tracking.impl.MarkPassingImpl;
|
||||
import com.sap.sse.common.Duration;
|
||||
import com.sap.sse.common.TimePoint;
|
||||
import com.sap.sse.common.Util.Pair;
|
||||
import com.sap.sse.common.impl.MillisecondsTimePoint;
|
||||
|
||||
/**
|
||||
@@ -79,15 +82,17 @@ public class TestFarthestAheadWithSkippedMarkPassing {
|
||||
private Waypoint finish;
|
||||
|
||||
private void setUp(TimeOnTimeFactorMapping timeOnTimeFactors, Function<Competitor, Double> timeOnDistanceFactors) {
|
||||
c1 = TrackBasedTest.createCompetitor("SlowBoat");
|
||||
c2 = TrackBasedTest.createCompetitor("FastBoat");
|
||||
trackedRace = createTrackedRace(Arrays.asList(c1, c2));
|
||||
Pair<Competitor, Boat> fastCompetitorAndBoat = TrackBasedTest.createCompetitorAndBoat("FastBoat");
|
||||
c1 = fastCompetitorAndBoat.getA();
|
||||
Pair<Competitor, Boat> slowCompetitorAndBoat = TrackBasedTest.createCompetitorAndBoat("SlowBoat");
|
||||
c2 = slowCompetitorAndBoat.getA();
|
||||
trackedRace = createTrackedRace(TrackBasedTest.createCompetitorAndBoatsMap(fastCompetitorAndBoat, slowCompetitorAndBoat));
|
||||
rankingMetric = trackedRace.getRankingMetric();
|
||||
assertEquals(120, trackedRace.getCourseLength().getNauticalMiles(), 0.02);
|
||||
assertSame(RankingMetrics.ONE_DESIGN, trackedRace.getTrackedRegatta().getRegatta().getRankingMetricType());
|
||||
}
|
||||
|
||||
private DynamicTrackedRace createTrackedRace(Iterable<Competitor> competitors) {
|
||||
private DynamicTrackedRace createTrackedRace(Map<Competitor, Boat> competitorsAndBoats) {
|
||||
final TimePoint timePointForFixes = MillisecondsTimePoint.now();
|
||||
BoatClassImpl boatClass = new BoatClassImpl("Some Handicap Boat Class", /* typicallyStartsUpwind */ true);
|
||||
Regatta regatta = new RegattaImpl(EmptyRaceLogStore.INSTANCE, EmptyRegattaLogStore.INSTANCE,
|
||||
@@ -107,7 +112,7 @@ public class TestFarthestAheadWithSkippedMarkPassing {
|
||||
finish = new WaypointImpl(leeGate);
|
||||
waypoints.add(finish);
|
||||
Course course = new CourseImpl("Test Course", waypoints);
|
||||
RaceDefinition race = new RaceDefinitionImpl("Test Race", course, boatClass, competitors);
|
||||
RaceDefinition race = new RaceDefinitionImpl("Test Race", course, boatClass, competitorsAndBoats);
|
||||
DynamicTrackedRaceImpl trackedRace = new DynamicTrackedRaceImpl(trackedRegatta, race, Collections.<Sideline> emptyList(), EmptyWindStore.INSTANCE,
|
||||
/* delayToLiveInMillis */ 0,
|
||||
/* millisecondsOverWhichToAverageWind */ 30000, /* millisecondsOverWhichToAverageSpeed */ 30000,
|
||||
|
||||
+10
-5
@@ -9,11 +9,13 @@ import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.Function;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RaceLogResolver;
|
||||
import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.ControlPoint;
|
||||
import com.sap.sailing.domain.base.Course;
|
||||
@@ -52,6 +54,7 @@ import com.sap.sailing.domain.tracking.impl.EmptyWindStore;
|
||||
import com.sap.sailing.domain.tracking.impl.MarkPassingImpl;
|
||||
import com.sap.sse.common.Duration;
|
||||
import com.sap.sse.common.TimePoint;
|
||||
import com.sap.sse.common.Util.Pair;
|
||||
import com.sap.sse.common.impl.MillisecondsDurationImpl;
|
||||
import com.sap.sse.common.impl.MillisecondsTimePoint;
|
||||
|
||||
@@ -61,15 +64,17 @@ public class TestSimpleTimeOnTimeRankingWithOneUpwindLeg {
|
||||
private Competitor c1, c2;
|
||||
|
||||
private void setUp(TimeOnTimeFactorMapping timeOnTimeFactors, Function<Competitor, Double> timeOnDistanceFactors) {
|
||||
c1 = TrackBasedTest.createCompetitor("FastBoat");
|
||||
c2 = TrackBasedTest.createCompetitor("SlowBoat");
|
||||
trackedRace = createTrackedRace(Arrays.asList(c1, c2), timeOnTimeFactors, timeOnDistanceFactors);
|
||||
Pair<Competitor, Boat> fastCompetitorAndBoat = TrackBasedTest.createCompetitorAndBoat("FastBoat");
|
||||
c1 = fastCompetitorAndBoat.getA();
|
||||
Pair<Competitor, Boat> slowCompetitorAndBoat = TrackBasedTest.createCompetitorAndBoat("SlowBoat");
|
||||
c2 = slowCompetitorAndBoat.getA();
|
||||
trackedRace = createTrackedRace(TrackBasedTest.createCompetitorAndBoatsMap(fastCompetitorAndBoat, slowCompetitorAndBoat), timeOnTimeFactors, timeOnDistanceFactors);
|
||||
tot = trackedRace.getRankingMetric();
|
||||
assertEquals(60, trackedRace.getCourseLength().getNauticalMiles(), 0.01);
|
||||
assertSame(RankingMetrics.TIME_ON_TIME_AND_DISTANCE, trackedRace.getTrackedRegatta().getRegatta().getRankingMetricType());
|
||||
}
|
||||
|
||||
private DynamicTrackedRace createTrackedRace(Iterable<Competitor> competitors, TimeOnTimeFactorMapping timeOnTimeFactors, Function<Competitor, Double> timeOnDistanceFactors) {
|
||||
private DynamicTrackedRace createTrackedRace(Map<Competitor,Boat> competitorsAndBoats, TimeOnTimeFactorMapping timeOnTimeFactors, Function<Competitor, Double> timeOnDistanceFactors) {
|
||||
final TimePoint timePointForFixes = MillisecondsTimePoint.now();
|
||||
BoatClassImpl boatClass = new BoatClassImpl("Some Handicap Boat Class", /* typicallyStartsUpwind */ true);
|
||||
Regatta regatta = new RegattaImpl(EmptyRaceLogStore.INSTANCE, EmptyRegattaLogStore.INSTANCE,
|
||||
@@ -85,7 +90,7 @@ public class TestSimpleTimeOnTimeRankingWithOneUpwindLeg {
|
||||
waypoints.add(new WaypointImpl(leeGate));
|
||||
waypoints.add(new WaypointImpl(windwardMark));
|
||||
Course course = new CourseImpl("Test Course", waypoints);
|
||||
RaceDefinition race = new RaceDefinitionImpl("Test Race", course, boatClass, competitors);
|
||||
RaceDefinition race = new RaceDefinitionImpl("Test Race", course, boatClass, competitorsAndBoats);
|
||||
DynamicTrackedRaceImpl trackedRace = new DynamicTrackedRaceImpl(trackedRegatta, race, Collections.<Sideline> emptyList(), EmptyWindStore.INSTANCE,
|
||||
/* delayToLiveInMillis */ 0,
|
||||
/* millisecondsOverWhichToAverageWind */ 30000, /* millisecondsOverWhichToAverageSpeed */ 30000,
|
||||
|
||||
+1
-1
@@ -70,7 +70,7 @@ public class CompetitorListenerTest extends AbstractSerializationTest {
|
||||
@Before
|
||||
public void setUp() {
|
||||
baseDomainFactory = new DomainFactoryImpl((srlid)->null);
|
||||
competitor = TrackBasedTest.createCompetitor("Hasso");
|
||||
competitor = (DynamicCompetitor) TrackBasedTest.createCompetitorAndBoat("Hasso").getA();
|
||||
nationalityChanged = false;
|
||||
whatChangedNationality = null;
|
||||
oldNationality = null;
|
||||
|
||||
@@ -9,14 +9,18 @@ import static org.mockito.Mockito.mock;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.Map;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RaceLogResolver;
|
||||
import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.BoatClass;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.ControlPoint;
|
||||
import com.sap.sailing.domain.base.Course;
|
||||
import com.sap.sailing.domain.base.DomainFactory;
|
||||
@@ -25,7 +29,7 @@ import com.sap.sailing.domain.base.Series;
|
||||
import com.sap.sailing.domain.base.Sideline;
|
||||
import com.sap.sailing.domain.base.Waypoint;
|
||||
import com.sap.sailing.domain.base.impl.BoatClassImpl;
|
||||
import com.sap.sailing.domain.base.impl.CompetitorImpl;
|
||||
import com.sap.sailing.domain.base.impl.BoatImpl;
|
||||
import com.sap.sailing.domain.base.impl.ControlPointWithTwoMarksImpl;
|
||||
import com.sap.sailing.domain.base.impl.CourseImpl;
|
||||
import com.sap.sailing.domain.base.impl.MarkImpl;
|
||||
@@ -299,10 +303,14 @@ public class CourseTest {
|
||||
waypoints.add(wp3);
|
||||
Course course = new CourseImpl("Test Course", waypoints);
|
||||
assertWaypointIndexes(course);
|
||||
final Set<CompetitorImpl> hasso = Collections.singleton(AbstractLeaderboardTest.createCompetitor("Hasso"));
|
||||
final BoatClass boatClass = new BoatClassImpl("505", /* upwind start */true);
|
||||
final Competitor hasso = AbstractLeaderboardTest.createCompetitor("Hasso");
|
||||
final Boat hassosBoat = new BoatImpl("id12345", "Hasso's boat", boatClass, /* sailID */ null);
|
||||
final Map<Competitor,Boat> competitorsAndBoats = new HashMap<>();
|
||||
competitorsAndBoats.put(hasso, hassosBoat);
|
||||
DynamicTrackedRace trackedRace = new DynamicTrackedRaceImpl(/* trackedRegatta */new DynamicTrackedRegattaImpl(
|
||||
new RegattaImpl("test", null, null, null, new HashSet<Series>(), false, null, "test", null, OneDesignRankingMetric::new)),
|
||||
new RaceDefinitionImpl("Test Race", course, new BoatClassImpl("49er", /* upwind start */true), hasso),
|
||||
new RaceDefinitionImpl("Test Race", course, boatClass, competitorsAndBoats),
|
||||
Collections.<Sideline> emptyList(), EmptyWindStore.INSTANCE, /* delayToLiveInMillis */3000,
|
||||
/* millisecondsOverWhichToAverageWind */30000,
|
||||
/* millisecondsOverWhichToAverageSpeed */8000, /*useMarkPassingCalculator*/ false, OneDesignRankingMetric::new,
|
||||
@@ -330,11 +338,14 @@ public class CourseTest {
|
||||
final WaypointImpl wp2 = new WaypointImpl(new MarkImpl("Test Mark 2"));
|
||||
waypoints.add(wp2);
|
||||
Course course = new CourseImpl("Test Course", waypoints);
|
||||
final Set<CompetitorImpl> hasso = Collections.singleton(AbstractLeaderboardTest.createCompetitor("Hasso"));
|
||||
final BoatClass boatClass = new BoatClassImpl("505", /* upwind start */true);
|
||||
final Competitor hasso = AbstractLeaderboardTest.createCompetitor("Hasso");
|
||||
final Boat hassosBoat = new BoatImpl("id12345", "Hasso's boat", boatClass, /* sailID */ null);
|
||||
final Map<Competitor,Boat> competitorsAndBoats = new HashMap<>();
|
||||
competitorsAndBoats.put(hasso, hassosBoat);
|
||||
DynamicTrackedRace trackedRace = new DynamicTrackedRaceImpl(/* trackedRegatta */ new DynamicTrackedRegattaImpl(
|
||||
new RegattaImpl("test", null, null, null, new HashSet<Series>(), false, null, "test", null, OneDesignRankingMetric::new)),
|
||||
new RaceDefinitionImpl("Test Race", course, new BoatClassImpl("49er", /* upwind start */ true),
|
||||
hasso), Collections.<Sideline> emptyList(),
|
||||
new RaceDefinitionImpl("Test Race", course, boatClass, competitorsAndBoats), Collections.<Sideline> emptyList(),
|
||||
EmptyWindStore.INSTANCE, /* delayToLiveInMillis */ 3000,
|
||||
/* millisecondsOverWhichToAverageWind */ 30000,
|
||||
/* millisecondsOverWhichToAverageSpeed */ 8000, /*useMarkPassingCalculator*/ false, OneDesignRankingMetric::new,
|
||||
|
||||
+2
-1
@@ -21,6 +21,7 @@ import java.util.UUID;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RaceLogResolver;
|
||||
import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.Course;
|
||||
import com.sap.sailing.domain.base.RaceDefinition;
|
||||
@@ -78,7 +79,7 @@ public class CourseUpdateDuringNonAtomicSerializationTest implements Serializabl
|
||||
new BoatClassImpl("505", BoatClassMasterdata._5O5), /*startDate*/ null, /*endDate*/ null, /* trackedRegattaRegistry */ null,
|
||||
new LowPoint(), UUID.randomUUID(), new CourseAreaImpl("Alpha", UUID.randomUUID()));
|
||||
TrackedRegatta trackedRegatta = new TrackedRegattaImpl(regatta);
|
||||
RaceDefinition race = new RaceDefinitionImpl("Test Race", course, regatta.getBoatClass(), Collections.<Competitor>emptySet());
|
||||
RaceDefinition race = new RaceDefinitionImpl("Test Race", course, regatta.getBoatClass(), Collections.<Competitor,Boat>emptyMap());
|
||||
trackedRace = new DynamicTrackedRaceImpl(trackedRegatta, race, Collections.<Sideline> emptySet(),
|
||||
EmptyWindStore.INSTANCE,
|
||||
/* delayToLiveInMillis */10000, /* millisecondsOverWhichToAverageWind */30000, /* millisecondsOverWhichToAverageSpeed */
|
||||
|
||||
+7
-2
@@ -3,10 +3,12 @@ package com.sap.sailing.domain.test;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.common.Distance;
|
||||
import com.sap.sailing.domain.common.Position;
|
||||
@@ -21,6 +23,7 @@ import com.sap.sailing.domain.tracking.impl.MarkPassingImpl;
|
||||
import com.sap.sailing.domain.tracking.impl.TrackedRaceStatusImpl;
|
||||
import com.sap.sse.common.Duration;
|
||||
import com.sap.sse.common.TimePoint;
|
||||
import com.sap.sse.common.Util.Pair;
|
||||
import com.sap.sse.common.impl.MillisecondsTimePoint;
|
||||
|
||||
/**
|
||||
@@ -37,8 +40,10 @@ public class DistanceCacheInvalidationAfterLoadingFinishedTest extends TrackBase
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
competitor = createCompetitor("Test Competitor");
|
||||
trackedRace = createTestTrackedRace("Test Regatta", "Test Race", "505", Collections.singleton(competitor), MillisecondsTimePoint.now(), /* useMarkPassingCalculator */ false);
|
||||
Pair<Competitor, Boat> competitorAndBoat = createCompetitorAndBoat("Test Competitor");
|
||||
Map<Competitor, Boat> competitorsAndBoats = TrackBasedTest.createCompetitorAndBoatsMap(competitorAndBoat);
|
||||
competitor = competitorAndBoat.getA();
|
||||
trackedRace = createTestTrackedRace("Test Regatta", "Test Race", "505", competitorsAndBoats, MillisecondsTimePoint.now(), /* useMarkPassingCalculator */ false);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
+2
-3
@@ -3,11 +3,11 @@ package com.sap.sailing.domain.test;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.Mark;
|
||||
import com.sap.sailing.domain.common.NauticalSide;
|
||||
@@ -28,9 +28,8 @@ public class LineAnalysisTest extends TrackBasedTest {
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
final List<Competitor> emptyCompetitorList = Collections.emptyList();
|
||||
now = MillisecondsTimePoint.now();
|
||||
trackedRace = createTestTrackedRace("Test Regatta", "Test Race", "505", emptyCompetitorList, now, /* useMarkPassingCalculator */ false);
|
||||
trackedRace = createTestTrackedRace("Test Regatta", "Test Race", "505", Collections.<Competitor,Boat>emptyMap(), now, /* useMarkPassingCalculator */ false);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
+13
-12
@@ -13,6 +13,7 @@ import java.util.UUID;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.sap.sailing.domain.abstractlog.race.RaceLog;
|
||||
import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.BoatClass;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.Fleet;
|
||||
@@ -75,7 +76,7 @@ public class RaceExecutionOrderProvdiderAttachDetachTest extends TrackBasedTest
|
||||
|
||||
@Test
|
||||
public void testRaceExecutionOrderProviderAttachDetachWithRaceColumn() {
|
||||
trackedRace = createTestTrackedRace(REGATTA, RACE, BOATCLASS, Collections.<Competitor> emptyList(),
|
||||
trackedRace = createTestTrackedRace(REGATTA, RACE, BOATCLASS, Collections.<Competitor,Boat> emptyMap(),
|
||||
MillisecondsTimePoint.now(), /* useMarkPassingCalculator */ false);
|
||||
flexibleLeaderboard = new FlexibleLeaderboardImpl(FLEXIBLELEADERBOARD,
|
||||
new ThresholdBasedResultDiscardingRuleImpl(new int[] { 3, 6 }), new LowPoint(), null);
|
||||
@@ -89,9 +90,9 @@ public class RaceExecutionOrderProvdiderAttachDetachTest extends TrackBasedTest
|
||||
public void testWindInRegularIntervalWithPreviousRaceStillTracking() {
|
||||
final TimePoint startOfFirstRace = MillisecondsTimePoint.now();
|
||||
final TimePoint startOfSecondRace = startOfFirstRace.plus(Duration.ONE_MINUTE.times(5));
|
||||
DynamicTrackedRaceImpl previousTrackedRace = createTestTrackedRace(REGATTA, RACE, BOATCLASS, Collections.<Competitor> emptyList(), startOfFirstRace, /* useMarkPassingCalculator */ false);
|
||||
DynamicTrackedRaceImpl previousTrackedRace = createTestTrackedRace(REGATTA, RACE, BOATCLASS, Collections.<Competitor,Boat> emptyMap(), startOfFirstRace, /* useMarkPassingCalculator */ false);
|
||||
previousTrackedRace.setStartOfTrackingReceived(startOfFirstRace);
|
||||
trackedRace = createTestTrackedRace(REGATTA, "TestRace2", BOATCLASS, Collections.<Competitor> emptyList(), startOfSecondRace, /* useMarkPassingCalculator */ false);
|
||||
trackedRace = createTestTrackedRace(REGATTA, "TestRace2", BOATCLASS, Collections.<Competitor,Boat> emptyMap(), startOfSecondRace, /* useMarkPassingCalculator */ false);
|
||||
flexibleLeaderboard = new FlexibleLeaderboardImpl(FLEXIBLELEADERBOARD,
|
||||
new ThresholdBasedResultDiscardingRuleImpl(new int[] { 3, 6 }), new LowPoint(), null);
|
||||
flexibleLeaderboard.addRace(previousTrackedRace, RACECOLUMN_FLEXIBLELEADERBOARD+"1", false);
|
||||
@@ -107,10 +108,10 @@ public class RaceExecutionOrderProvdiderAttachDetachTest extends TrackBasedTest
|
||||
final TimePoint startOfFirstRace = MillisecondsTimePoint.now();
|
||||
final TimePoint endOfFirstRace = startOfFirstRace.plus(Duration.ONE_SECOND);
|
||||
final TimePoint startOfSecondRace = startOfFirstRace.plus(Duration.ONE_HOUR);
|
||||
DynamicTrackedRaceImpl previousTrackedRace = createTestTrackedRace(REGATTA, RACE, BOATCLASS, Collections.<Competitor> emptyList(), startOfFirstRace, /* useMarkPassingCalculator */ false);
|
||||
DynamicTrackedRaceImpl previousTrackedRace = createTestTrackedRace(REGATTA, RACE, BOATCLASS, Collections.<Competitor,Boat> emptyMap(), startOfFirstRace, /* useMarkPassingCalculator */ false);
|
||||
previousTrackedRace.setStartOfTrackingReceived(startOfFirstRace);
|
||||
previousTrackedRace.setEndOfTrackingReceived(endOfFirstRace); // a very short race...
|
||||
trackedRace = createTestTrackedRace(REGATTA, "TestRace2", BOATCLASS, Collections.<Competitor> emptyList(), startOfSecondRace, /* useMarkPassingCalculator */ false);
|
||||
trackedRace = createTestTrackedRace(REGATTA, "TestRace2", BOATCLASS, Collections.<Competitor,Boat> emptyMap(), startOfSecondRace, /* useMarkPassingCalculator */ false);
|
||||
flexibleLeaderboard = new FlexibleLeaderboardImpl(FLEXIBLELEADERBOARD,
|
||||
new ThresholdBasedResultDiscardingRuleImpl(new int[] { 3, 6 }), new LowPoint(), null);
|
||||
flexibleLeaderboard.addRace(previousTrackedRace, RACECOLUMN_FLEXIBLELEADERBOARD+"1", false);
|
||||
@@ -129,7 +130,7 @@ public class RaceExecutionOrderProvdiderAttachDetachTest extends TrackBasedTest
|
||||
final TimePoint startOfFirstRace = MillisecondsTimePoint.now();
|
||||
final TimePoint endOfFirstRace = startOfFirstRace.plus(Duration.ONE_SECOND);
|
||||
final TimePoint startOfSecondRace = startOfFirstRace.plus(Duration.ONE_HOUR);
|
||||
trackedRace = createTestTrackedRace(REGATTA, "TestRace2", BOATCLASS, Collections.<Competitor> emptyList(), startOfSecondRace, /* useMarkPassingCalculator */ false);
|
||||
trackedRace = createTestTrackedRace(REGATTA, "TestRace2", BOATCLASS, Collections.<Competitor,Boat> emptyMap(), startOfSecondRace, /* useMarkPassingCalculator */ false);
|
||||
flexibleLeaderboard = new FlexibleLeaderboardImpl(FLEXIBLELEADERBOARD,
|
||||
new ThresholdBasedResultDiscardingRuleImpl(new int[] { 3, 6 }), new LowPoint(), null);
|
||||
flexibleLeaderboard.addRace(trackedRace, RACECOLUMN_FLEXIBLELEADERBOARD, false);
|
||||
@@ -145,10 +146,10 @@ public class RaceExecutionOrderProvdiderAttachDetachTest extends TrackBasedTest
|
||||
final TimePoint startOfFirstRace = MillisecondsTimePoint.now();
|
||||
final TimePoint endOfFirstRace = startOfFirstRace.plus(Duration.ONE_SECOND);
|
||||
final TimePoint startOfSecondRace = startOfFirstRace.plus(TrackedRaceImpl.EXTRA_LONG_TIME_BEFORE_START_TO_TRACK_WIND_MILLIS.times(2));
|
||||
DynamicTrackedRaceImpl previousTrackedRace = createTestTrackedRace(REGATTA, RACE, BOATCLASS, Collections.<Competitor> emptyList(), startOfFirstRace, /* useMarkPassingCalculator */ false);
|
||||
DynamicTrackedRaceImpl previousTrackedRace = createTestTrackedRace(REGATTA, RACE, BOATCLASS, Collections.<Competitor,Boat> emptyMap(), startOfFirstRace, /* useMarkPassingCalculator */ false);
|
||||
previousTrackedRace.setStartOfTrackingReceived(startOfFirstRace);
|
||||
previousTrackedRace.setEndOfTrackingReceived(endOfFirstRace); // a very short race...
|
||||
trackedRace = createTestTrackedRace(REGATTA, "TestRace2", BOATCLASS, Collections.<Competitor> emptyList(), startOfSecondRace, /* useMarkPassingCalculator */ false);
|
||||
trackedRace = createTestTrackedRace(REGATTA, "TestRace2", BOATCLASS, Collections.<Competitor,Boat> emptyMap(), startOfSecondRace, /* useMarkPassingCalculator */ false);
|
||||
flexibleLeaderboard = new FlexibleLeaderboardImpl(FLEXIBLELEADERBOARD,
|
||||
new ThresholdBasedResultDiscardingRuleImpl(new int[] { 3, 6 }), new LowPoint(), null);
|
||||
flexibleLeaderboard.addRace(previousTrackedRace, RACECOLUMN_FLEXIBLELEADERBOARD+"1", false);
|
||||
@@ -166,10 +167,10 @@ public class RaceExecutionOrderProvdiderAttachDetachTest extends TrackBasedTest
|
||||
final TimePoint startOfFirstRace = MillisecondsTimePoint.now();
|
||||
final TimePoint endOfFirstRace = startOfFirstRace.plus(Duration.ONE_SECOND);
|
||||
final TimePoint startOfSecondRace = startOfFirstRace.plus(TrackedRaceImpl.EXTRA_LONG_TIME_BEFORE_START_TO_TRACK_WIND_MILLIS.divide(2));
|
||||
DynamicTrackedRaceImpl previousTrackedRace = createTestTrackedRace(REGATTA, RACE, BOATCLASS, Collections.<Competitor> emptyList(), startOfFirstRace, /* useMarkPassingCalculator */ false);
|
||||
DynamicTrackedRaceImpl previousTrackedRace = createTestTrackedRace(REGATTA, RACE, BOATCLASS, Collections.<Competitor,Boat> emptyMap(), startOfFirstRace, /* useMarkPassingCalculator */ false);
|
||||
previousTrackedRace.setStartOfTrackingReceived(startOfFirstRace);
|
||||
previousTrackedRace.setEndOfTrackingReceived(endOfFirstRace); // a very short race...
|
||||
trackedRace = createTestTrackedRace(REGATTA, "TestRace2", BOATCLASS, Collections.<Competitor> emptyList(), startOfSecondRace, /* useMarkPassingCalculator */ false);
|
||||
trackedRace = createTestTrackedRace(REGATTA, "TestRace2", BOATCLASS, Collections.<Competitor,Boat> emptyMap(), startOfSecondRace, /* useMarkPassingCalculator */ false);
|
||||
flexibleLeaderboard = new FlexibleLeaderboardImpl(FLEXIBLELEADERBOARD,
|
||||
new ThresholdBasedResultDiscardingRuleImpl(new int[] { 3, 6 }), new LowPoint(), null);
|
||||
flexibleLeaderboard.addRace(previousTrackedRace, RACECOLUMN_FLEXIBLELEADERBOARD+"1", false);
|
||||
@@ -214,7 +215,7 @@ public class RaceExecutionOrderProvdiderAttachDetachTest extends TrackBasedTest
|
||||
}
|
||||
|
||||
private void createTestSetupWithRegattaAndSeries(boolean linkSeriesToRegatta) {
|
||||
trackedRace = createTestTrackedRace(REGATTA, RACE, BOATCLASS, Collections.<Competitor> emptyList(),
|
||||
trackedRace = createTestTrackedRace(REGATTA, RACE, BOATCLASS, Collections.<Competitor,Boat> emptyMap(),
|
||||
MillisecondsTimePoint.now(), /* useMarkPassingCalculator */ false);
|
||||
fleet = new FleetImpl(FLEET);
|
||||
Set<Fleet> fleets = new HashSet<>();
|
||||
@@ -285,7 +286,7 @@ public class RaceExecutionOrderProvdiderAttachDetachTest extends TrackBasedTest
|
||||
}
|
||||
|
||||
private DynamicTrackedRace createTrackedRace(final String name, final TimePoint startOfRace, final TimePoint endOfRace) {
|
||||
DynamicTrackedRace trackedRace = createTestTrackedRace(REGATTA, name, BOATCLASS, Collections.<Competitor> emptyList(), startOfRace, /* useMarkPassingCalculator */ false);
|
||||
DynamicTrackedRace trackedRace = createTestTrackedRace(REGATTA, name, BOATCLASS, Collections.<Competitor,Boat> emptyMap(), startOfRace, /* useMarkPassingCalculator */ false);
|
||||
trackedRace.setStartOfTrackingReceived(startOfRace);
|
||||
trackedRace.setEndOfTrackingReceived(endOfRace);
|
||||
return trackedRace;
|
||||
|
||||
+20
-14
@@ -8,12 +8,15 @@ import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.GregorianCalendar;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RaceLogResolver;
|
||||
import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.ControlPoint;
|
||||
import com.sap.sailing.domain.base.Course;
|
||||
@@ -24,7 +27,6 @@ import com.sap.sailing.domain.base.Regatta;
|
||||
import com.sap.sailing.domain.base.Sideline;
|
||||
import com.sap.sailing.domain.base.Waypoint;
|
||||
import com.sap.sailing.domain.base.impl.BoatClassImpl;
|
||||
import com.sap.sailing.domain.base.impl.CompetitorImpl;
|
||||
import com.sap.sailing.domain.base.impl.ControlPointWithTwoMarksImpl;
|
||||
import com.sap.sailing.domain.base.impl.CourseImpl;
|
||||
import com.sap.sailing.domain.base.impl.MarkImpl;
|
||||
@@ -56,12 +58,13 @@ import com.sap.sailing.domain.tracking.impl.DynamicTrackedRaceImpl;
|
||||
import com.sap.sailing.domain.tracking.impl.DynamicTrackedRegattaImpl;
|
||||
import com.sap.sailing.domain.tracking.impl.EmptyWindStore;
|
||||
import com.sap.sse.common.TimePoint;
|
||||
import com.sap.sse.common.Util.Pair;
|
||||
import com.sap.sse.common.impl.MillisecondsTimePoint;
|
||||
|
||||
public class ReachingLegTest extends TrackBasedTest {
|
||||
private List<Competitor> competitors;
|
||||
private CompetitorImpl plattner;
|
||||
private CompetitorImpl hunger;
|
||||
private Map<Competitor,Boat> competitorsAndBoats;
|
||||
private Competitor plattner;
|
||||
private Competitor hunger;
|
||||
private MillisecondsTimePoint start;
|
||||
private Competitor schomaeker;
|
||||
|
||||
@@ -71,15 +74,18 @@ public class ReachingLegTest extends TrackBasedTest {
|
||||
*/
|
||||
@Before
|
||||
public void setUp() {
|
||||
competitors = new ArrayList<Competitor>();
|
||||
hunger = createCompetitor("Wolfgang Hunger");
|
||||
competitors.add(hunger);
|
||||
plattner = createCompetitor("Dr. Hasso Plattner");
|
||||
competitors.add(plattner);
|
||||
schomaeker = createCompetitor("Meike Schom�ker");
|
||||
competitors.add(schomaeker);
|
||||
competitorsAndBoats = new LinkedHashMap<>();
|
||||
Pair<Competitor, Boat> hungerWithBoat = createCompetitorAndBoat("Wolfgang Hunger");
|
||||
hunger = hungerWithBoat.getA();
|
||||
competitorsAndBoats.put(hungerWithBoat.getA(), hungerWithBoat.getB());
|
||||
Pair<Competitor, Boat> plattnerWithBoat = createCompetitorAndBoat("Dr. Hasso Plattner");
|
||||
plattner = plattnerWithBoat.getA();
|
||||
competitorsAndBoats.put(plattnerWithBoat.getA(), plattnerWithBoat.getB());
|
||||
Pair<Competitor, Boat> schomaekerWithBoat = createCompetitorAndBoat("Meike Schom�ker");
|
||||
schomaeker = schomaekerWithBoat.getA();
|
||||
competitorsAndBoats.put(schomaekerWithBoat.getA(), schomaekerWithBoat.getB());
|
||||
start = new MillisecondsTimePoint(new GregorianCalendar(2011, 05, 23).getTime());
|
||||
setTrackedRace(createTrackedRace("Kieler Woche", "505 Race 2", "505", competitors, start));
|
||||
setTrackedRace(createTrackedRace("Kieler Woche", "505 Race 2", "505", competitorsAndBoats, start));
|
||||
List<MarkPassing> hungersMarkPassings = createMarkPassings(hunger, start);
|
||||
getTrackedRace().updateMarkPassings(hunger, hungersMarkPassings);
|
||||
List<MarkPassing> plattnersMarkPassings = createMarkPassings(plattner, start);
|
||||
@@ -87,7 +93,7 @@ public class ReachingLegTest extends TrackBasedTest {
|
||||
}
|
||||
|
||||
protected DynamicTrackedRaceImpl createTrackedRace(String regattaName, String raceName, String boatClassName,
|
||||
Iterable<Competitor> competitors, TimePoint timePointForFixes) {
|
||||
Map<Competitor,Boat> competitorsAndBoats, TimePoint timePointForFixes) {
|
||||
BoatClassImpl boatClass = new BoatClassImpl(boatClassName, /* typicallyStartsUpwind */ true);
|
||||
Regatta regatta = new RegattaImpl(EmptyRaceLogStore.INSTANCE, EmptyRegattaLogStore.INSTANCE,
|
||||
RegattaImpl.getDefaultName(regattaName, boatClass.getName()), boatClass, /*startDate*/ null, /*endDate*/ null, /* trackedRegattaRegistry */ null,
|
||||
@@ -105,7 +111,7 @@ public class ReachingLegTest extends TrackBasedTest {
|
||||
waypoints.add(new WaypointImpl(offsetMark));
|
||||
waypoints.add(new WaypointImpl(leeGate));
|
||||
Course course = new CourseImpl(raceName, waypoints);
|
||||
RaceDefinition race = new RaceDefinitionImpl(raceName, course, boatClass, competitors);
|
||||
RaceDefinition race = new RaceDefinitionImpl(raceName, course, boatClass, competitorsAndBoats);
|
||||
DynamicTrackedRaceImpl trackedRace = new DynamicTrackedRaceImpl(trackedRegatta, race, Collections.<Sideline> emptyList(), EmptyWindStore.INSTANCE,
|
||||
/* delayToLiveInMillis */ 0,
|
||||
/* millisecondsOverWhichToAverageWind */ 30000, /* millisecondsOverWhichToAverageSpeed */ 30000,
|
||||
|
||||
+1
-1
@@ -103,7 +103,7 @@ public class RegattaLogEventNotificationForwardingTest extends AbstractSerializa
|
||||
|
||||
private RegattaLogRegisterCompetitorEventImpl createRegattaLogEvent() {
|
||||
final RegattaLogRegisterCompetitorEventImpl event = new RegattaLogRegisterCompetitorEventImpl(MillisecondsTimePoint.now(), /* author */ null,
|
||||
AbstractTracTracLiveTest.createCompetitor("Someone"));
|
||||
AbstractTracTracLiveTest.createCompetitorAndBoat("Someone").getA());
|
||||
return event;
|
||||
}
|
||||
|
||||
|
||||
+2
-1
@@ -9,6 +9,7 @@ import java.util.UUID;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.BoatClass;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.DomainFactory;
|
||||
@@ -36,7 +37,7 @@ public class SerializeRankingMetricTest extends AbstractSerializationTest {
|
||||
/* startDate */ null, /* endDate */ null, /* trackedRegattaRegistry */ null,
|
||||
new LowPoint(), UUID.randomUUID(), /* courseArea */ null)),
|
||||
new RaceDefinitionImpl("Race", new CourseImpl("Course", Collections.<Waypoint>emptyList()) ,
|
||||
/* boatClass */ _49er, Collections.<Competitor>emptySet()),
|
||||
/* boatClass */ _49er, Collections.<Competitor,Boat>emptyMap()),
|
||||
Collections.<Sideline> emptyList(), EmptyWindStore.INSTANCE, 0l, 0l, 0l,
|
||||
false, TimeOnTimeAndDistanceRankingMetric::new, null);
|
||||
RankingMetric clone = cloneBySerialization(trackedRace.getRankingMetric(), DomainFactory.INSTANCE);
|
||||
|
||||
+4
-2
@@ -16,6 +16,7 @@ import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import com.sap.sailing.domain.base.BoatClass;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.impl.BoatClassImpl;
|
||||
import com.sap.sailing.domain.base.impl.BoatImpl;
|
||||
@@ -114,11 +115,12 @@ public abstract class StoredTrackBasedTest extends TrackBasedTest {
|
||||
protected Map<Competitor, DynamicGPSFixTrack<Competitor, GPSFixMoving>> loadTracks() throws FileNotFoundException, IOException {
|
||||
Map<Competitor, DynamicGPSFixTrack<Competitor, GPSFixMoving>> tracks = new HashMap<Competitor, DynamicGPSFixTrack<Competitor,GPSFixMoving>>();
|
||||
final String KIELER_WOCHE = "Kieler Woche";
|
||||
final BoatClass boatClass = new BoatClassImpl("505", /* typicallyStartsUpwind */ true);
|
||||
for (String competitorName : getCompetitorNamesOfStoredTracks(KIELER_WOCHE)) {
|
||||
DynamicPerson p = new PersonImpl(competitorName, /* nationality */ null, /* dateOfBirth */ null, /* description */ null);
|
||||
DynamicTeam t = new TeamImpl(competitorName, Collections.singleton(p), /* coach */ null);
|
||||
Competitor c = new CompetitorImpl(competitorName, competitorName, "KYC", Color.RED, null, null, t, new BoatImpl("123",
|
||||
competitorName, new BoatClassImpl("505", /* typicallyStartsUpwind */ true), null), /* timeOnTimeFactor */ null, /* timeOnDistanceAllowancePerNauticalMile */ null, null);
|
||||
Competitor c = new CompetitorImpl(competitorName, competitorName, "KYC", Color.RED, null, null, t,
|
||||
new BoatImpl("123", competitorName, boatClass, null), /* timeOnTimeFactor */ null, /* timeOnDistanceAllowancePerNauticalMile */ null, null);
|
||||
DynamicGPSFixTrack<Competitor, GPSFixMoving> track = readTrack(c, KIELER_WOCHE);
|
||||
if (track != null) {
|
||||
tracks.put(c, track);
|
||||
|
||||
+14
-1
@@ -4,12 +4,17 @@ import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.GregorianCalendar;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.junit.Before;
|
||||
|
||||
import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.BoatClass;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.impl.BoatClassImpl;
|
||||
import com.sap.sailing.domain.base.impl.BoatImpl;
|
||||
import com.sap.sailing.domain.common.tracking.GPSFixMoving;
|
||||
import com.sap.sailing.domain.tracking.DynamicGPSFixTrack;
|
||||
import com.sap.sailing.domain.tracking.MarkPassing;
|
||||
@@ -20,7 +25,15 @@ public class StoredTrackBasedTestWithTrackedRace extends StoredTrackBasedTest {
|
||||
@Before
|
||||
public void setUp() throws FileNotFoundException, IOException {
|
||||
Map<Competitor, DynamicGPSFixTrack<Competitor, GPSFixMoving>> tracks = loadTracks();
|
||||
setTrackedRace(createTestTrackedRace("Kieler Woche", "505 Race 2", "505", tracks.keySet(),
|
||||
|
||||
final BoatClass boatClass = new BoatClassImpl("505", /* typicallyStartsUpwind */ true);
|
||||
Map<Competitor, Boat> competitorsAndBoats = new HashMap<>();
|
||||
int i = 1;
|
||||
for(Competitor c: tracks.keySet()) {
|
||||
Boat b = new BoatImpl("Boat" + i++, c.getName(), boatClass, null);
|
||||
competitorsAndBoats.put(c, b);
|
||||
}
|
||||
setTrackedRace(createTestTrackedRace("Kieler Woche", "505 Race 2", "505", competitorsAndBoats,
|
||||
new MillisecondsTimePoint(new GregorianCalendar(2011, 05, 23).getTime()), /* useMarkPassingCalculator */ false));
|
||||
copyTracks(tracks);
|
||||
}
|
||||
|
||||
@@ -4,10 +4,14 @@ import static org.junit.Assert.assertEquals;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.GregorianCalendar;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.BoatClass;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.impl.BoatClassImpl;
|
||||
import com.sap.sailing.domain.base.impl.BoatImpl;
|
||||
@@ -35,13 +39,17 @@ public class TackTest extends StoredTrackBasedTestWithTrackedRace {
|
||||
@Override
|
||||
@Before
|
||||
public void setUp() {
|
||||
BoatClass boatClass = new BoatClassImpl("505", /* typicallyStartsUpwind */ true);
|
||||
competitor = new CompetitorImpl(123, "Wolfgang Hunger", "KYC", Color.RED, null, null, new TeamImpl("STG", Collections.singleton(
|
||||
new PersonImpl("Wolfgang Hunger", new NationalityImpl("GER"),
|
||||
/* dateOfBirth */null, "This is famous Wolfgang Hunger")), new PersonImpl("Rigo van Maas",
|
||||
new NationalityImpl("NED"),
|
||||
/* dateOfBirth */null, "This is Rigo, the coach")), new BoatImpl("123",
|
||||
"Wolfgang Hunger's boat", new BoatClassImpl("505", /* typicallyStartsUpwind */ true), null), /* timeOnTimeFactor */ null, /* timeOnDistanceAllowancePerNauticalMile */ null, null);
|
||||
setTrackedRace(createTestTrackedRace("Kieler Woche", "505 Race 2", "505", Collections.singleton(competitor),
|
||||
"Wolfgang Hunger's boat", boatClass, null), /* timeOnTimeFactor */ null, /* timeOnDistanceAllowancePerNauticalMile */ null, null);
|
||||
Boat boat = new BoatImpl(competitor.getId(), "Wolfgang Hunger's boat", boatClass, "123", null);
|
||||
Map<Competitor,Boat> competitorsAndBoats = new HashMap<>();
|
||||
competitorsAndBoats.put(competitor, boat);
|
||||
setTrackedRace(createTestTrackedRace("Kieler Woche", "505 Race 2", "505", competitorsAndBoats,
|
||||
new MillisecondsTimePoint(new GregorianCalendar(2011, 05, 23).getTime()), /* useMarkPassingCalculator */ false));
|
||||
}
|
||||
|
||||
|
||||
+24
-8
@@ -7,10 +7,13 @@ import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RaceLogResolver;
|
||||
import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.BoatClass;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.ControlPoint;
|
||||
@@ -65,6 +68,7 @@ import com.sap.sailing.domain.tracking.impl.EmptyWindStore;
|
||||
import com.sap.sailing.domain.tracking.impl.MarkPassingImpl;
|
||||
import com.sap.sse.common.Color;
|
||||
import com.sap.sse.common.TimePoint;
|
||||
import com.sap.sse.common.Util.Pair;
|
||||
import com.sap.sse.common.impl.MillisecondsDurationImpl;
|
||||
import com.sap.sse.common.impl.MillisecondsTimePoint;
|
||||
|
||||
@@ -72,6 +76,7 @@ public abstract class TrackBasedTest {
|
||||
private DynamicTrackedRaceImpl trackedRace;
|
||||
|
||||
final static Fleet regattaFleet = new FleetImpl("fleet name");
|
||||
final static BoatClass boatClass = new BoatClassImpl("505", /* typicallyStartsUpwind */true);
|
||||
|
||||
protected DynamicTrackedRaceImpl getTrackedRace() {
|
||||
return trackedRace;
|
||||
@@ -81,15 +86,26 @@ public abstract class TrackBasedTest {
|
||||
this.trackedRace = trackedRace;
|
||||
}
|
||||
|
||||
public static CompetitorImpl createCompetitor(String competitorName) {
|
||||
return new CompetitorImpl(UUID.randomUUID(), competitorName, "HP", Color.RED, null, null, new TeamImpl("STG", Collections.singleton(
|
||||
@SafeVarargs
|
||||
public static Map<Competitor,Boat> createCompetitorAndBoatsMap(Pair<Competitor,Boat>... competitorsAndBoats) {
|
||||
Map<Competitor,Boat> result = new LinkedHashMap<>();
|
||||
for (Pair<Competitor,Boat> competitorAndBoat: competitorsAndBoats) {
|
||||
result.put(competitorAndBoat.getA(), competitorAndBoat.getB());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public static Pair<Competitor,Boat> createCompetitorAndBoat(String competitorName) {
|
||||
Competitor c = new CompetitorImpl(UUID.randomUUID(), competitorName, "HP", Color.RED, null, null, new TeamImpl("STG", Collections.singleton(
|
||||
new PersonImpl(competitorName, new NationalityImpl("GER"),
|
||||
/* dateOfBirth */null, "This is famous " + competitorName)), new PersonImpl("Rigo van Maas",
|
||||
new NationalityImpl("NED"),
|
||||
/* dateOfBirth */null, "This is Rigo, the coach")), new BoatImpl("123",
|
||||
competitorName + "'s boat", new BoatClassImpl("505", /* typicallyStartsUpwind */true), null), /* timeOnTimeFactor */ null, /* timeOnDistanceAllowancePerNauticalMile */ null, null);
|
||||
competitorName + "'s boat", boatClass, null), /* timeOnTimeFactor */ null, /* timeOnDistanceAllowancePerNauticalMile */ null, null);
|
||||
Boat b = new BoatImpl(c.getId(), competitorName + "'s boat", boatClass, null, null);
|
||||
return new Pair<>(c, b);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* For {@link #trackedRace}'s race course, creates a list of mark passings using the time points specified, in order
|
||||
* for the waypoints.
|
||||
@@ -119,8 +135,8 @@ public abstract class TrackBasedTest {
|
||||
* @param useMarkPassingCalculator whether or not to use the internal mark passing calculator
|
||||
*/
|
||||
public static DynamicTrackedRaceImpl createTestTrackedRace(String regattaName, String raceName, String boatClassName,
|
||||
Iterable<Competitor> competitors, TimePoint timePointForFixes, boolean useMarkPassingCalculator) {
|
||||
return createTestTrackedRace(regattaName, raceName, boatClassName, competitors, timePointForFixes, useMarkPassingCalculator,
|
||||
Map<Competitor, Boat> competitorsAndBoats, TimePoint timePointForFixes, boolean useMarkPassingCalculator) {
|
||||
return createTestTrackedRace(regattaName, raceName, boatClassName, competitorsAndBoats, timePointForFixes, useMarkPassingCalculator,
|
||||
mock(RaceLogResolver.class));
|
||||
}
|
||||
/**
|
||||
@@ -139,7 +155,7 @@ public abstract class TrackBasedTest {
|
||||
* @param useMarkPassingCalculator whether or not to use the internal mark passing calculator
|
||||
*/
|
||||
public static DynamicTrackedRaceImpl createTestTrackedRace(String regattaName, String raceName, String boatClassName,
|
||||
Iterable<Competitor> competitors, TimePoint timePointForFixes, boolean useMarkPassingCalculator, RaceLogResolver raceLogResolver) {
|
||||
Map<Competitor, Boat> competitorsAndBoats, TimePoint timePointForFixes, boolean useMarkPassingCalculator, RaceLogResolver raceLogResolver) {
|
||||
BoatClassImpl boatClass = new BoatClassImpl(boatClassName, /* typicallyStartsUpwind */ true);
|
||||
Regatta regatta = new RegattaImpl(EmptyRaceLogStore.INSTANCE, EmptyRegattaLogStore.INSTANCE,
|
||||
RegattaImpl.getDefaultName(regattaName, boatClass.getName()), boatClass, /*startDate*/ null, /*endDate*/ null, /* trackedRegattaRegistry */ null,
|
||||
@@ -157,7 +173,7 @@ public abstract class TrackBasedTest {
|
||||
waypoints.add(new WaypointImpl(windwardMark));
|
||||
waypoints.add(new WaypointImpl(leeGate));
|
||||
Course course = new CourseImpl(raceName, waypoints);
|
||||
RaceDefinition race = new RaceDefinitionImpl(raceName, course, boatClass, competitors);
|
||||
RaceDefinition race = new RaceDefinitionImpl(raceName, course, boatClass, competitorsAndBoats);
|
||||
DynamicTrackedRaceImpl trackedRace = new DynamicTrackedRaceImpl(trackedRegatta, race, Collections.<Sideline> emptyList(), EmptyWindStore.INSTANCE,
|
||||
/* delayToLiveInMillis */ 0,
|
||||
/* millisecondsOverWhichToAverageWind */ 30000, /* millisecondsOverWhichToAverageSpeed */ 30000,
|
||||
|
||||
+5
-4
@@ -6,7 +6,6 @@ import static org.junit.Assert.assertNull;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.MalformedURLException;
|
||||
import java.util.Collections;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
@@ -19,17 +18,19 @@ import com.sap.sailing.domain.abstractlog.race.impl.RaceLogDependentStartTimeEve
|
||||
import com.sap.sailing.domain.abstractlog.race.impl.RaceLogImpl;
|
||||
import com.sap.sailing.domain.abstractlog.race.impl.RaceLogStartTimeEventImpl;
|
||||
import com.sap.sailing.domain.abstractlog.race.impl.SimpleRaceLogIdentifierImpl;
|
||||
import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.tracking.StartTimeChangedListener;
|
||||
import com.sap.sailing.domain.tracking.TrackedRace;
|
||||
import com.sap.sse.common.Duration;
|
||||
import com.sap.sse.common.TimePoint;
|
||||
import com.sap.sse.common.Util.Pair;
|
||||
import com.sap.sse.common.impl.MillisecondsTimePoint;
|
||||
|
||||
public class TrackedRaceStartTimeUpdateForDependentStartTimeTest extends TrackBasedTest {
|
||||
@Test
|
||||
public void testStartTimeUpdateForRaceWithDependentStartTime() {
|
||||
final Competitor hasso = createCompetitor("Hasso");
|
||||
final Pair<Competitor, Boat> hasso = createCompetitorAndBoat("Hasso");
|
||||
final RaceLog r1RaceLog = new RaceLogImpl("r1RaceLog");
|
||||
final RaceLog r2RaceLog = new RaceLogImpl("r2RaceLog");
|
||||
final RaceLogResolver raceLogResolver = new RaceLogResolver() {
|
||||
@@ -43,9 +44,9 @@ public class TrackedRaceStartTimeUpdateForDependentStartTimeTest extends TrackBa
|
||||
return null;
|
||||
}
|
||||
};
|
||||
final TrackedRace r1 = createTestTrackedRace("Regatta", "R1", "J/70", Collections.singleton(hasso),
|
||||
final TrackedRace r1 = createTestTrackedRace("Regatta", "R1", "J/70", createCompetitorAndBoatsMap(hasso),
|
||||
MillisecondsTimePoint.now(), /* useMarkPassingCalculator */ false, raceLogResolver);
|
||||
final TrackedRace r2 = createTestTrackedRace("Regatta", "R2", "J/70", Collections.singleton(hasso),
|
||||
final TrackedRace r2 = createTestTrackedRace("Regatta", "R2", "J/70", createCompetitorAndBoatsMap(hasso),
|
||||
MillisecondsTimePoint.now(), /* useMarkPassingCalculator */ false, raceLogResolver);
|
||||
r1.attachRaceLog(r1RaceLog);
|
||||
r2.attachRaceLog(r2RaceLog);
|
||||
|
||||
+4
-1
@@ -11,6 +11,7 @@ import java.util.HashSet;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RaceLogResolver;
|
||||
import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.Course;
|
||||
import com.sap.sailing.domain.base.RaceDefinition;
|
||||
@@ -30,6 +31,7 @@ import com.sap.sailing.domain.tracking.impl.EmptyWindStore;
|
||||
import com.sap.sailing.domain.tracking.impl.MarkPassingImpl;
|
||||
import com.sap.sse.common.TimePoint;
|
||||
import com.sap.sse.common.Util;
|
||||
import com.sap.sse.common.Util.Pair;
|
||||
import com.sap.sse.common.impl.MillisecondsTimePoint;
|
||||
|
||||
public class UpdateMarkPassingTest {
|
||||
@@ -40,7 +42,8 @@ public class UpdateMarkPassingTest {
|
||||
when(race.getName()).thenReturn("Test Race");
|
||||
Course c = new CourseImpl("Test Course", Collections.singleton(waypoint));
|
||||
when(race.getCourse()).thenReturn(c);
|
||||
Competitor competitor = TrackBasedTest.createCompetitor("Test Competitor");
|
||||
Pair<Competitor, Boat> competitorAndBoat = TrackBasedTest.createCompetitorAndBoat("Test Competitor");
|
||||
Competitor competitor = competitorAndBoat.getA();
|
||||
when(race.getBoatClass()).thenReturn(new BoatClassImpl("49er", /* typicallyStartsUpwind */ true));
|
||||
when(race.getCompetitors()).thenReturn(Collections.singleton(competitor));
|
||||
DynamicTrackedRaceImpl trackedRace = new DynamicTrackedRaceImpl(
|
||||
|
||||
+14
-3
@@ -18,6 +18,7 @@ import java.util.Set;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.Waypoint;
|
||||
import com.sap.sailing.domain.common.Distance;
|
||||
@@ -44,23 +45,33 @@ import com.sap.sailing.domain.tracking.impl.MarkPassingImpl;
|
||||
import com.sap.sailing.domain.tracking.impl.TrackBasedEstimationWindTrackImpl;
|
||||
import com.sap.sse.common.TimePoint;
|
||||
import com.sap.sse.common.Util;
|
||||
import com.sap.sse.common.Util.Pair;
|
||||
import com.sap.sse.common.impl.MillisecondsTimePoint;
|
||||
|
||||
public class WindEstimationOnConstructedTracksTest extends StoredTrackBasedTest {
|
||||
private List<Competitor> competitors;
|
||||
private List<Pair<Competitor, Boat>> competitorsWithBoats;
|
||||
private static final String[] competitorNames = new String[] { "Wolfgang Hunger", "Dr. Hasso Plattner", "Robert Stanjek", "Simon Grotelueschen" };
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
competitors = new ArrayList<Competitor>();
|
||||
competitorsWithBoats = new ArrayList<>();
|
||||
competitors = new ArrayList<>();
|
||||
for (String name : competitorNames) {
|
||||
competitors.add(createCompetitor(name));
|
||||
Pair<Competitor, Boat> competitorAndBoat = createCompetitorAndBoat(name);
|
||||
competitorsWithBoats.add(competitorAndBoat);
|
||||
competitors.add(competitorAndBoat.getA());
|
||||
}
|
||||
}
|
||||
|
||||
private void initRace(int numberOfCompetitorsToUse, int[] numberOfMarksPassed, TimePoint timePointForFixes) {
|
||||
List<Pair<Competitor, Boat>> subList = competitorsWithBoats.subList(0, numberOfCompetitorsToUse);
|
||||
Map<Competitor, Boat> competitorsAndBoats = new HashMap<>();
|
||||
for (Pair<Competitor, Boat> competitorAndBoat: subList) {
|
||||
competitorsAndBoats.put(competitorAndBoat.getA(), competitorAndBoat.getB());
|
||||
}
|
||||
setTrackedRace(createTestTrackedRace("Kieler Woche", "505 Race 2", "505",
|
||||
competitors.subList(0, numberOfCompetitorsToUse), timePointForFixes, /* useMarkPassingCalculator */ false));
|
||||
competitorsAndBoats, timePointForFixes, /* useMarkPassingCalculator */ false));
|
||||
for (int i=0; i<numberOfCompetitorsToUse; i++) {
|
||||
initializeMarkPassingForStartGate(competitors.get(i), numberOfMarksPassed[i], timePointForFixes);
|
||||
}
|
||||
|
||||
@@ -11,13 +11,16 @@ import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RaceLogResolver;
|
||||
import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.BoatClass;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.ControlPoint;
|
||||
@@ -25,7 +28,6 @@ import com.sap.sailing.domain.base.DomainFactory;
|
||||
import com.sap.sailing.domain.base.Mark;
|
||||
import com.sap.sailing.domain.base.Sideline;
|
||||
import com.sap.sailing.domain.base.Waypoint;
|
||||
import com.sap.sailing.domain.base.impl.BoatClassImpl;
|
||||
import com.sap.sailing.domain.base.impl.BoatImpl;
|
||||
import com.sap.sailing.domain.base.impl.CompetitorImpl;
|
||||
import com.sap.sailing.domain.base.impl.CourseImpl;
|
||||
@@ -272,20 +274,23 @@ public class WindTest {
|
||||
Waypoint w1 = domainFactory.createWaypoint(startFinish, /*passingInstruction*/ null);
|
||||
Waypoint w2 = domainFactory.createWaypoint(top, /*passingInstruction*/ null);
|
||||
Waypoint w3 = domainFactory.createWaypoint(startFinish, /*passingInstruction*/ null);
|
||||
final BoatClass boatClass = domainFactory.getOrCreateBoatClass("ESS40");
|
||||
Competitor competitor = new CompetitorImpl(123, "Test Competitor", "KYC", Color.RED, null, null, new TeamImpl("STG", Collections.singleton(
|
||||
new PersonImpl("Test Competitor", new NationalityImpl("GER"),
|
||||
/* dateOfBirth */null, "This is famous " + "Test Competitor")), new PersonImpl("Rigo van Maas",
|
||||
new NationalityImpl("NED"),
|
||||
/* dateOfBirth */null, "This is Rigo, the coach")), new BoatImpl("123",
|
||||
"Test Competitor" + "'s boat", new BoatClassImpl("505", /* typicallyStartsUpwind */true), null), /* timeOnTimeFactor */ null, /* timeOnDistanceAllowancePerNauticalMile */ null, null);
|
||||
final BoatClass boatClass = domainFactory.getOrCreateBoatClass("ESS40");
|
||||
"Test Competitor" + "'s boat", boatClass, null), /* timeOnTimeFactor */ null, /* timeOnDistanceAllowancePerNauticalMile */ null, null);
|
||||
Boat boat = new BoatImpl("123", "Test Competitor" + "'s boat", boatClass, null);
|
||||
Map<Competitor,Boat> competitorsAndBoats = new HashMap<>();
|
||||
competitorsAndBoats.put(competitor, boat);
|
||||
DynamicTrackedRace trackedRace = new DynamicTrackedRaceImpl(new DynamicTrackedRegattaImpl(
|
||||
new RegattaImpl(EmptyRaceLogStore.INSTANCE, EmptyRegattaLogStore.INSTANCE,
|
||||
RegattaImpl.getDefaultName("Test Regatta", boatClass.getName()), boatClass, /*startDate*/ null, /*endDate*/ null,
|
||||
/* trackedRegattaRegistry */ null, domainFactory.createScoringScheme(ScoringSchemeType.LOW_POINT), "123", null)),
|
||||
new RaceDefinitionImpl("Test Race",
|
||||
new CourseImpl("Test Course", Arrays.asList(new Waypoint[] { w1, w2, w3 })),
|
||||
boatClass, Collections.singleton(competitor)), Collections.<Sideline> emptyList(),
|
||||
boatClass, competitorsAndBoats), Collections.<Sideline> emptyList(),
|
||||
EmptyWindStore.INSTANCE, /* delayToLiveInMillis */ 1000,
|
||||
/* millisecondsOverWhichToAverageWind */ 30000,
|
||||
/* millisecondsOverWhichToAverageSpeed */ 30000, /*useMarkPassingCalculator*/ false, OneDesignRankingMetric::new,
|
||||
|
||||
+12
-2
@@ -4,10 +4,13 @@ import static org.mockito.Mockito.mock;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RaceLogResolver;
|
||||
import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.ControlPointWithTwoMarks;
|
||||
import com.sap.sailing.domain.base.Course;
|
||||
@@ -48,7 +51,10 @@ public class AbstractMockedRaceMarkPassingTest {
|
||||
protected Competitor ron = new CompetitorImpl("Ron", "Ron", "KYC", null, null, null, null, new BoatImpl("123", "boat", boatClass, "boot"), /* timeOnTimeFactor */ null, /* timeOnDistanceAllowancePerNauticalMile */ null, null);
|
||||
protected Competitor tom = new CompetitorImpl("Tom", "Tom", "KYC", null, null, null, null, new BoatImpl("123", "boat", boatClass, "boot"), /* timeOnTimeFactor */ null, /* timeOnDistanceAllowancePerNauticalMile */ null, null);
|
||||
protected Competitor ben = new CompetitorImpl("Ben", "Ben", "KYC", null, null, null, null, new BoatImpl("123", "boat", boatClass, "boot"), /* timeOnTimeFactor */ null, /* timeOnDistanceAllowancePerNauticalMile */ null, null);
|
||||
|
||||
protected Boat boatRon = new BoatImpl("123", "boat1", boatClass, "GER 123");
|
||||
protected Boat boatTom = new BoatImpl("456", "boat2", boatClass, "GER 456");
|
||||
protected Boat boatBen = new BoatImpl("789", "boat3", boatClass, "GER 789");
|
||||
|
||||
protected Mark m = new MarkImpl("Mark");
|
||||
protected Mark gate1 = new MarkImpl("Gate1");
|
||||
protected Mark gate2 = new MarkImpl("Gate2");
|
||||
@@ -70,7 +76,11 @@ public class AbstractMockedRaceMarkPassingTest {
|
||||
/*startDate*/ null, /*endDate*/ null, Arrays.asList(new SeriesImpl("Series", true, /* isFleetsCanRunInParallel */ true, Arrays.asList(new FleetImpl("fleet")),
|
||||
new ArrayList<String>(), null)), true, new HighPoint(), "ID", new CourseAreaImpl("area", new UUID(5, 5)), OneDesignRankingMetric::new);
|
||||
Course course = new CourseImpl("course", waypoints);
|
||||
RaceDefinition raceDef = new RaceDefinitionImpl("Performance Race", course, boatClass, Arrays.asList(ron, tom, ben));
|
||||
Map<Competitor, Boat> competitorsAndBoats = new HashMap<>();
|
||||
competitorsAndBoats.put(ron, boatRon);
|
||||
competitorsAndBoats.put(tom, boatTom);
|
||||
competitorsAndBoats.put(ben, boatBen);
|
||||
RaceDefinition raceDef = new RaceDefinitionImpl("Performance Race", course, boatClass, competitorsAndBoats);
|
||||
race = new DynamicTrackedRaceImpl(new DynamicTrackedRegattaImpl(r), raceDef, new ArrayList<Sideline>(),
|
||||
new EmptyWindStore(), 0, 10000, 10000, /* useMarkPassingCalculator */ false,
|
||||
OneDesignRankingMetric::new,
|
||||
|
||||
+15
-3
@@ -3,12 +3,16 @@ package com.sap.sailing.domain.test.mock;
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.NavigableSet;
|
||||
import java.util.Set;
|
||||
|
||||
import com.sap.sailing.domain.abstractlog.race.RaceLog;
|
||||
import com.sap.sailing.domain.abstractlog.regatta.RegattaLog;
|
||||
import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.BoatClass;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.Leg;
|
||||
import com.sap.sailing.domain.base.Mark;
|
||||
@@ -18,6 +22,8 @@ import com.sap.sailing.domain.base.SharedDomainFactory;
|
||||
import com.sap.sailing.domain.base.Sideline;
|
||||
import com.sap.sailing.domain.base.SpeedWithConfidence;
|
||||
import com.sap.sailing.domain.base.Waypoint;
|
||||
import com.sap.sailing.domain.base.impl.BoatClassImpl;
|
||||
import com.sap.sailing.domain.base.impl.BoatImpl;
|
||||
import com.sap.sailing.domain.base.impl.CourseImpl;
|
||||
import com.sap.sailing.domain.base.impl.RaceDefinitionImpl;
|
||||
import com.sap.sailing.domain.common.Distance;
|
||||
@@ -92,9 +98,15 @@ public class MockedTrackedRaceWithStartTimeAndRanks implements TrackedRace {
|
||||
this.startTime = startTime;
|
||||
// copies the list to make sure that later modifications to the list passed to this constructor don't affect the ranking produced by this race
|
||||
this.competitorsFromBestToWorst = new ArrayList<Competitor>(competitorsFromBestToWorst);
|
||||
final List<Waypoint> waypoints = Collections.emptyList();
|
||||
this.race = new RaceDefinitionImpl("Mocked Race", new CourseImpl("Mock Course", waypoints), /* boat class */ null,
|
||||
competitorsFromBestToWorst);
|
||||
BoatClass boatClass = new BoatClassImpl("49er", /* upwind start */ true);
|
||||
final Map<Competitor,Boat> competitorsAndBoats = new HashMap<>();
|
||||
int i = 1;
|
||||
for (Competitor c: competitorsFromBestToWorst) {
|
||||
Boat b = new BoatImpl("Boat" + i++, c.getName(), boatClass, c.getName(), null);
|
||||
competitorsAndBoats.put(c, b);
|
||||
}
|
||||
this.race = new RaceDefinitionImpl("Mocked Race", new CourseImpl("Mock Course", Collections.emptyList()), boatClass,
|
||||
competitorsAndBoats);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+4
-2
@@ -14,6 +14,7 @@ import java.util.List;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.common.sensordata.BravoSensorDataMetadata;
|
||||
import com.sap.sailing.domain.common.tracking.impl.BravoFixImpl;
|
||||
@@ -23,6 +24,7 @@ import com.sap.sailing.domain.tracking.BravoFixTrack;
|
||||
import com.sap.sailing.domain.tracking.DynamicBravoFixTrack;
|
||||
import com.sap.sse.common.Duration;
|
||||
import com.sap.sse.common.TimePoint;
|
||||
import com.sap.sse.common.Util.Pair;
|
||||
|
||||
public class BravoFixTrackSerializationTest {
|
||||
|
||||
@@ -30,8 +32,8 @@ public class BravoFixTrackSerializationTest {
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
Competitor competitor = TrackBasedTest.createCompetitor("SAP Extreme Sailing Team");
|
||||
track = new BravoFixTrackImpl<Competitor>(competitor, BravoFixTrack.TRACK_NAME);
|
||||
Pair<Competitor, Boat> competitorAndBoat = TrackBasedTest.createCompetitorAndBoat("SAP Extreme Sailing Team");
|
||||
track = new BravoFixTrackImpl<Competitor>(competitorAndBoat.getA(), BravoFixTrack.TRACK_NAME);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
+2
-4
@@ -202,7 +202,7 @@ public interface DomainFactory {
|
||||
* @param raceLogResolver TODO
|
||||
*/
|
||||
DynamicTrackedRace getOrCreateRaceDefinitionAndTrackedRace(DynamicTrackedRegatta trackedRegatta, UUID raceId,
|
||||
String raceName, Iterable<com.sap.sailing.domain.base.Competitor> competitors, BoatClass boatClass, Map<Competitor, Boat> competitorBoats,
|
||||
String raceName, BoatClass boatClass, Map<Competitor, Boat> competitorsAndBoats,
|
||||
Course course, Iterable<Sideline> sidelines, WindStore windStore, long delayToLiveInMillis,
|
||||
long millisecondsOverWhichToAverageWind, DynamicRaceDefinitionSet raceDefinitionSetToUpdate,
|
||||
URI courseDesignUpdateURI, UUID tracTracEventUuid, String tracTracUsername, String tracTracPassword, boolean ignoreTracTracMarkPassings, RaceLogResolver raceLogResolver);
|
||||
@@ -257,9 +257,7 @@ public interface DomainFactory {
|
||||
*/
|
||||
RaceDefinition getAndWaitForRaceDefinition(UUID raceId, long timeoutInMilliseconds);
|
||||
|
||||
Map<Competitor, Boat> getBoatsInfoForCompetitors(IRace race, BoatClass defaultBoatClass);
|
||||
|
||||
Util.Pair<Iterable<com.sap.sailing.domain.base.Competitor>, BoatClass> getCompetitorsAndDominantBoatClass(IRace race);
|
||||
Util.Pair<Map<Competitor, Boat>, BoatClass> getCompetitorsAndTheirBoatsAndDominantBoatClass(IRace race);
|
||||
|
||||
/**
|
||||
* @param offsetToStartTimeOfSimulatedRace
|
||||
|
||||
+32
-27
@@ -12,6 +12,7 @@ import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
@@ -73,6 +74,7 @@ import com.sap.sailing.domain.tractracadapter.ReceiverType;
|
||||
import com.sap.sailing.domain.tractracadapter.TracTracConfiguration;
|
||||
import com.sap.sailing.domain.tractracadapter.TracTracControlPoint;
|
||||
import com.sap.sailing.domain.tractracadapter.TracTracRaceTracker;
|
||||
import com.sap.sse.common.Color;
|
||||
import com.sap.sse.common.Duration;
|
||||
import com.sap.sse.common.TimePoint;
|
||||
import com.sap.sse.common.Util;
|
||||
@@ -505,7 +507,7 @@ public class DomainFactoryImpl implements DomainFactory {
|
||||
|
||||
@Override
|
||||
public DynamicTrackedRace getOrCreateRaceDefinitionAndTrackedRace(DynamicTrackedRegatta trackedRegatta, UUID raceId,
|
||||
String raceName, Iterable<Competitor> competitors, BoatClass boatClass, Map<Competitor, Boat> competitorBoats, Course course,
|
||||
String raceName, BoatClass boatClass, Map<Competitor, Boat> competitorsAndBoats, Course course,
|
||||
Iterable<Sideline> sidelines, WindStore windStore, long delayToLiveInMillis,
|
||||
long millisecondsOverWhichToAverageWind, DynamicRaceDefinitionSet raceDefinitionSetToUpdate,
|
||||
URI tracTracUpdateURI, UUID tracTracEventUuid, String tracTracUsername, String tracTracPassword, boolean ignoreTracTracMarkPassings, RaceLogResolver raceLogResolver) {
|
||||
@@ -513,7 +515,7 @@ public class DomainFactoryImpl implements DomainFactory {
|
||||
RaceDefinition raceDefinition = raceCache.get(raceId);
|
||||
if (raceDefinition == null) {
|
||||
logger.info("Creating RaceDefinitionImpl for race "+raceName);
|
||||
raceDefinition = new RaceDefinitionImpl(raceName, course, boatClass, competitors, competitorBoats, raceId);
|
||||
raceDefinition = new RaceDefinitionImpl(raceName, course, boatClass, competitorsAndBoats, raceId);
|
||||
} else {
|
||||
logger.info("Already found RaceDefinitionImpl for race "+raceName);
|
||||
}
|
||||
@@ -570,37 +572,40 @@ public class DomainFactoryImpl implements DomainFactory {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<Competitor, Boat> getBoatsInfoForCompetitors(IRace race, BoatClass defaultBoatClass) {
|
||||
final Map<Competitor, Boat> competitorBoatInfos = new HashMap<>();
|
||||
public Util.Pair<Map<Competitor, Boat>, BoatClass> getCompetitorsAndTheirBoatsAndDominantBoatClass(IRace race) {
|
||||
final Map<Competitor, Boat> competitorsAndBoats = new LinkedHashMap<Competitor, Boat>();
|
||||
final List<ICompetitorClass> competitorClasses = new ArrayList<ICompetitorClass>();
|
||||
for (IRaceCompetitor rc : race.getRaceCompetitors()) {
|
||||
Util.Triple<String, String, String> competitorBoatInfo = getMetadataParser().parseCompetitorBoat(rc);
|
||||
Competitor existingCompetitor = getOrCreateCompetitor(rc.getCompetitor());
|
||||
if (existingCompetitor != null && competitorBoatInfo != null) {
|
||||
Boat boatOfCompetitor = new BoatImpl(existingCompetitor.getId(), competitorBoatInfo.getA(),
|
||||
defaultBoatClass, competitorBoatInfo.getB(), AbstractColor.getCssColor(competitorBoatInfo.getC()));
|
||||
competitorBoatInfos.put(existingCompetitor, boatOfCompetitor);
|
||||
}
|
||||
}
|
||||
return competitorBoatInfos;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Util.Pair<Iterable<Competitor>, BoatClass> getCompetitorsAndDominantBoatClass(IRace race) {
|
||||
List<ICompetitorClass> competitorClasses = new ArrayList<ICompetitorClass>();
|
||||
final List<Competitor> competitors = new ArrayList<Competitor>();
|
||||
for (IRaceCompetitor rc : race.getRaceCompetitors()) {
|
||||
// also add those whose race class doesn't match the dominant one (such as camera boats)
|
||||
// because they may still send data that we would like to record in some tracks
|
||||
competitors.add(getOrCreateCompetitor(rc.getCompetitor()));
|
||||
competitorClasses.add(rc.getCompetitor().getCompetitorClass());
|
||||
}
|
||||
BoatClass dominantBoatClass = getDominantBoatClass(competitorClasses);
|
||||
Util.Pair<Iterable<Competitor>, BoatClass> competitorsAndDominantBoatClass = new com.sap.sse.common.Util.Pair<Iterable<Competitor>, BoatClass>(
|
||||
competitors, dominantBoatClass);
|
||||
return competitorsAndDominantBoatClass;
|
||||
for (IRaceCompetitor rc : race.getRaceCompetitors()) {
|
||||
// also add those whose race class doesn't match the dominant one (such as camera boats)
|
||||
// because they may still send data that we would like to record in some tracks
|
||||
Competitor competitor = getOrCreateCompetitor(rc.getCompetitor());
|
||||
Util.Triple<String, String, String> competitorBoatInfo = getMetadataParser().parseCompetitorBoat(rc);
|
||||
Boat boatOfCompetitor;
|
||||
if (competitorBoatInfo != null) {
|
||||
boatOfCompetitor = getOrCreateBoat(competitor, competitorBoatInfo.getA(),
|
||||
dominantBoatClass, competitorBoatInfo.getB(), AbstractColor.getCssColor(competitorBoatInfo.getC()));
|
||||
} else {
|
||||
boatOfCompetitor = getOrCreateBoat(competitor, competitor.getShortName(), dominantBoatClass, competitor.getShortName(), null);
|
||||
}
|
||||
|
||||
competitorsAndBoats.put(competitor, boatOfCompetitor);
|
||||
}
|
||||
return new Util.Pair<Map<Competitor, Boat>, BoatClass>(competitorsAndBoats, dominantBoatClass);
|
||||
}
|
||||
|
||||
private Boat getOrCreateBoat(Competitor competitor, String name, BoatClass boatClass, String sailId, Color color) {
|
||||
CompetitorStore competitorAndBoatStore = baseDomainFactory.getCompetitorStore();
|
||||
Boat boat = competitorAndBoatStore.getExistingBoatById(competitor.getId());
|
||||
if (boat == null) {
|
||||
boat = competitorAndBoatStore.getOrCreateBoat(competitor, name, boatClass, sailId, color);
|
||||
}
|
||||
return boat;
|
||||
}
|
||||
|
||||
private BoatClass getDominantBoatClass(Collection<ICompetitorClass> competitorClasses) {
|
||||
List<String> competitorClassNames = new ArrayList<>();
|
||||
for (ICompetitorClass competitorClass : competitorClasses) {
|
||||
|
||||
+3
-4
@@ -155,11 +155,10 @@ public class RaceCourseReceiver extends AbstractReceiverWithQueue<IControlRoute,
|
||||
} else {
|
||||
logger.log(Level.INFO, "Received course for non-existing race "+tractracRace.getName()+". Creating RaceDefinition.");
|
||||
// create race definition and add to event
|
||||
com.sap.sse.common.Util.Pair<Iterable<Competitor>, BoatClass> competitorsAndDominantBoatClass = getDomainFactory().getCompetitorsAndDominantBoatClass(tractracRace);
|
||||
Map<Competitor, Boat> competitorBoats = getDomainFactory().getBoatsInfoForCompetitors(tractracRace, competitorsAndDominantBoatClass.getB());
|
||||
com.sap.sse.common.Util.Pair<Map<Competitor,Boat>, BoatClass> competitorsAndBoatsAndDominantBoatClass = getDomainFactory().getCompetitorsAndTheirBoatsAndDominantBoatClass(tractracRace);
|
||||
trackedRace = getDomainFactory().getOrCreateRaceDefinitionAndTrackedRace(
|
||||
getTrackedRegatta(), tractracRace.getId(), tractracRace.getName(), competitorsAndDominantBoatClass.getA(),
|
||||
competitorsAndDominantBoatClass.getB(), competitorBoats, course, sidelines, windStore, delayToLiveInMillis,
|
||||
getTrackedRegatta(), tractracRace.getId(), tractracRace.getName(),
|
||||
competitorsAndBoatsAndDominantBoatClass.getB(), competitorsAndBoatsAndDominantBoatClass.getA(), course, sidelines, windStore, delayToLiveInMillis,
|
||||
millisecondsOverWhichToAverageWind, raceDefinitionSetToUpdate, tracTracUpdateURI,
|
||||
getTracTracEvent().getId(), tracTracUsername, tracTracPassword, useInternalMarkPassingAlgorithm, raceLogResolver);
|
||||
needToUpdateRaceTimes = true;
|
||||
|
||||
+22
-38
@@ -6,11 +6,9 @@ import java.security.NoSuchAlgorithmException;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.BoatClass;
|
||||
@@ -21,63 +19,49 @@ import com.sap.sailing.domain.common.RaceCompetitorIdsAsStringWithMD5Hash;
|
||||
import com.sap.sse.common.impl.NamedImpl;
|
||||
|
||||
public class RaceDefinitionImpl extends NamedImpl implements RaceDefinition {
|
||||
private static final Logger logger = Logger.getLogger(RaceDefinitionImpl.class.getName());
|
||||
|
||||
private static final long serialVersionUID = -1900955198751393727L;
|
||||
private final Course course;
|
||||
private final LinkedHashMap<Serializable, Competitor> competitorsById;
|
||||
private final Set<Competitor> competitors;
|
||||
private final Map<Serializable, Boat> competitorBoats;
|
||||
private final HashMap<Serializable, Competitor> competitorsByCompetitorId;
|
||||
private final HashMap<Serializable, Boat> boatsByCompetitorId;
|
||||
private final BoatClass boatClass;
|
||||
private final Serializable id;
|
||||
private final RaceCompetitorIdsAsStringWithMD5Hash raceCompetitorsMD5Hash;
|
||||
private final Map<Competitor, Boat> competitorsAndTheirBoats;
|
||||
|
||||
public RaceDefinitionImpl(String name, Course course, BoatClass boatClass, Iterable<? extends Competitor> competitors) {
|
||||
this(name, course, boatClass, competitors, Collections.emptyMap());
|
||||
public RaceDefinitionImpl(String name, Course course, BoatClass boatClass) {
|
||||
this(name, course, boatClass, Collections.emptyMap());
|
||||
}
|
||||
|
||||
public RaceDefinitionImpl(String name, Course course, BoatClass boatClass, Iterable<? extends Competitor> competitors,
|
||||
Map<Competitor, Boat> competitorsAndTheirBoats) {
|
||||
this(name, course, boatClass, competitors, competitorsAndTheirBoats, /* use name as default ID */ name);
|
||||
public RaceDefinitionImpl(String name, Course course, BoatClass boatClass, Map<Competitor, Boat> competitorsAndTheirBoats) {
|
||||
this(name, course, boatClass, competitorsAndTheirBoats, /* use name as default ID */ name);
|
||||
}
|
||||
|
||||
public RaceDefinitionImpl(String name, Course course, BoatClass boatClass, Iterable<? extends Competitor> competitors, Serializable id) {
|
||||
this(name, course, boatClass, competitors, /* per-race boats for competitors */ Collections.emptyMap(), id);
|
||||
}
|
||||
|
||||
public RaceDefinitionImpl(String name, Course course, BoatClass boatClass, Iterable<? extends Competitor> competitors,
|
||||
Map<Competitor, Boat> competitorsAndTheirBoats, Serializable id) {
|
||||
public RaceDefinitionImpl(String name, Course course, BoatClass boatClass, Map<Competitor, Boat> competitorsAndTheirBoats, Serializable id) {
|
||||
super(name);
|
||||
assert name != null;
|
||||
this.boatClass = boatClass;
|
||||
this.course = course;
|
||||
this.competitors = new HashSet<>();
|
||||
this.competitorsById = new LinkedHashMap<>();
|
||||
this.competitorBoats = new HashMap<>();
|
||||
this.competitorsAndTheirBoats = new HashMap<>(competitorsAndTheirBoats);
|
||||
this.id = id;
|
||||
|
||||
final Set<String> idsOfCompetitorsAsString = new HashSet<>();
|
||||
for (Competitor competitor : competitors) {
|
||||
Competitor competitorWithEqualID = competitorsById.put(competitor.getId(), competitor);
|
||||
this.competitors.add(competitor);
|
||||
this.competitorsByCompetitorId = new HashMap<>();
|
||||
this.boatsByCompetitorId = new HashMap<>();
|
||||
|
||||
for (Entry<Competitor, Boat> competitorAndBoat : competitorsAndTheirBoats.entrySet()) {
|
||||
Competitor competitor = competitorAndBoat.getKey();
|
||||
Competitor competitorWithEqualID = competitorsByCompetitorId.put(competitor.getId(), competitor);
|
||||
boatsByCompetitorId.put(competitor.getId(), competitorAndBoat.getValue());
|
||||
idsOfCompetitorsAsString.add(competitor.getId().toString());
|
||||
if (competitorWithEqualID != null && competitorWithEqualID != competitor) {
|
||||
throw new IllegalArgumentException("Two distinct competitors with equal ID "+competitor.getId()+" are not allowed within the single race "+name);
|
||||
}
|
||||
}
|
||||
for (Entry<Competitor, Boat> competitorAndBoat : competitorsAndTheirBoats.entrySet()) {
|
||||
Competitor competitor = competitorsById.get(competitorAndBoat.getKey().getId()); // only assign boat if competitor is part of race
|
||||
if (competitor != null && competitorAndBoat.getValue() != null) {
|
||||
competitorBoats.put(competitor.getId(), competitorAndBoat.getValue());
|
||||
} else {
|
||||
logger.warning("Trying to set boat "+competitorAndBoat.getValue()+" for competitor "+competitorAndBoat.getKey()+
|
||||
" which is not part of race "+getName()+"'s set of competitors");
|
||||
}
|
||||
}
|
||||
try {
|
||||
raceCompetitorsMD5Hash = new RaceCompetitorIdsAsStringWithMD5Hash(idsOfCompetitorsAsString);
|
||||
} catch (NoSuchAlgorithmException | UnsupportedEncodingException e) {
|
||||
throw new RuntimeException("Internal error: issue with UTF8 or MD5 for encoding competitor IDs as MD5 hash", e);
|
||||
}
|
||||
this.boatClass = boatClass;
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -92,7 +76,7 @@ public class RaceDefinitionImpl extends NamedImpl implements RaceDefinition {
|
||||
|
||||
@Override
|
||||
public Iterable<Competitor> getCompetitors() {
|
||||
return Collections.unmodifiableSet(competitors);
|
||||
return Collections.unmodifiableSet(competitorsAndTheirBoats.keySet());
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -102,7 +86,7 @@ public class RaceDefinitionImpl extends NamedImpl implements RaceDefinition {
|
||||
|
||||
@Override
|
||||
public Competitor getCompetitorById(Serializable competitorID) {
|
||||
return competitorsById.get(competitorID);
|
||||
return competitorsByCompetitorId.get(competitorID);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -112,6 +96,6 @@ public class RaceDefinitionImpl extends NamedImpl implements RaceDefinition {
|
||||
|
||||
@Override
|
||||
public Boat getBoatOfCompetitorById(Serializable competitorID) {
|
||||
return competitorBoats.get(competitorID);
|
||||
return boatsByCompetitorId.get(competitorID);
|
||||
}
|
||||
}
|
||||
|
||||
+9
-3
@@ -17,14 +17,17 @@ import java.util.Arrays;
|
||||
import java.util.Calendar;
|
||||
import java.util.Collections;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import com.mongodb.MongoException;
|
||||
import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.BoatClass;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.Course;
|
||||
@@ -40,6 +43,7 @@ import com.sap.sailing.domain.base.Series;
|
||||
import com.sap.sailing.domain.base.Venue;
|
||||
import com.sap.sailing.domain.base.Waypoint;
|
||||
import com.sap.sailing.domain.base.configuration.impl.RegattaConfigurationImpl;
|
||||
import com.sap.sailing.domain.base.impl.BoatImpl;
|
||||
import com.sap.sailing.domain.base.impl.CompetitorImpl;
|
||||
import com.sap.sailing.domain.base.impl.CourseImpl;
|
||||
import com.sap.sailing.domain.base.impl.EventImpl;
|
||||
@@ -844,12 +848,14 @@ public class TestStoringAndLoadingEventsAndRegattas extends AbstractMongoDBTest
|
||||
Regatta regatta = createRegatta(RegattaImpl.getDefaultName("Cologne Masters", boatClass.getName()), boatClass,
|
||||
regattaStartDate, regattaEndDate, /* persistent */ true, DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), null, OneDesignRankingMetric::new);
|
||||
|
||||
List<Competitor> competitors = new ArrayList<Competitor>();
|
||||
competitors.add(new CompetitorImpl("Axel", "Axel Uhl", "KYC", Color.RED, null, null, null, null, /* timeOnTimeFactor */ null, /* timeOnDistanceAllowancePerNauticalMile */ null, null));
|
||||
Map<Competitor, Boat> competitorsAndBoats = new LinkedHashMap<>();
|
||||
Competitor c = new CompetitorImpl("Axel", "Axel Uhl", "KYC", Color.RED, null, null, null, null, /* timeOnTimeFactor */ null, /* timeOnDistanceAllowancePerNauticalMile */ null, null);
|
||||
Boat b = new BoatImpl("123", "boat", boatClass, "GER 124");
|
||||
competitorsAndBoats.put(c, b);
|
||||
Iterable<Waypoint> waypoints = Collections.emptyList();
|
||||
Course course = new CourseImpl("Course", waypoints);
|
||||
|
||||
RaceDefinition racedef = new RaceDefinitionImpl("M1", course, boatClass, competitors);
|
||||
RaceDefinition racedef = new RaceDefinitionImpl("M1", course, boatClass, competitorsAndBoats);
|
||||
regatta.addRace(racedef);
|
||||
|
||||
RacingEventServiceImpl evs = new RacingEventServiceImpl(PersistenceFactory.INSTANCE.getDomainObjectFactory(getMongoService(), DomainFactory.INSTANCE), PersistenceFactory.INSTANCE
|
||||
|
||||
+10
-3
@@ -9,9 +9,13 @@ import static org.junit.Assert.assertTrue;
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.BoatClass;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.CompetitorStore;
|
||||
import com.sap.sailing.domain.base.DomainFactory;
|
||||
@@ -80,17 +84,20 @@ public class CompetitorReplicationTest extends AbstractServerReplicationTest {
|
||||
Iterable<Waypoint> emptyWaypointList = Collections.emptyList();
|
||||
final String competitorName = "Der mit dem Kiel zieht";
|
||||
final String competitorShortName = "DK";
|
||||
final BoatClass boatClass = new BoatClassImpl("505", /* typicallyStartsUpwind */true);
|
||||
Competitor competitor = master.getBaseDomainFactory().getOrCreateCompetitor(
|
||||
123, competitorName, competitorShortName, Color.RED, "someone@nowhere.de", flagImageURI,
|
||||
new TeamImpl("STG", Collections.singleton(new PersonImpl(competitorName, new NationalityImpl("GER"),
|
||||
/* dateOfBirth */null, "This is famous " + competitorName)), new PersonImpl("Rigo van Maas",
|
||||
new NationalityImpl("NED"),
|
||||
/* dateOfBirth */null, "This is Rigo, the coach")),
|
||||
new BoatImpl("123", competitorName + "'s boat", new BoatClassImpl("505", /* typicallyStartsUpwind */true), /* sailID */ null), /* timeOnTimeFactor */ null, /* timeOnDistanceAllowanceInSecondsPerNauticalMile */ null, null);
|
||||
Iterable<Competitor> competitors = Collections.singleton(competitor);
|
||||
new BoatImpl("123", competitorName + "'s boat", boatClass, /* sailID */ null), /* timeOnTimeFactor */ null, /* timeOnDistanceAllowanceInSecondsPerNauticalMile */ null, null);
|
||||
Boat boat = new BoatImpl(competitor.getId(), competitorName + "'s boat", boatClass, /* sailID */ null);
|
||||
Map<Competitor,Boat> competitorsAndBoats = new HashMap<>();
|
||||
competitorsAndBoats.put(competitor, boat);
|
||||
final String raceName = "Test Race";
|
||||
RaceDefinition raceDefinition = new RaceDefinitionImpl(raceName, new CourseImpl("Empty Course", emptyWaypointList),
|
||||
masterRegatta.getBoatClass(), competitors);
|
||||
masterRegatta.getBoatClass(), competitorsAndBoats);
|
||||
master.apply(new AddRaceDefinition(masterRegatta.getRegattaIdentifier(), raceDefinition));
|
||||
Thread.sleep(1000);
|
||||
Regatta replicatedRegatta = replica.getRegatta(new RegattaName(masterRegatta.getName()));
|
||||
|
||||
+7
-4
@@ -11,9 +11,11 @@ import static org.junit.Assert.assertTrue;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
@@ -25,6 +27,7 @@ import com.sap.sailing.domain.abstractlog.race.RaceLog;
|
||||
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
|
||||
import com.sap.sailing.domain.abstractlog.race.RaceLogWindFixEvent;
|
||||
import com.sap.sailing.domain.abstractlog.race.impl.RaceLogWindFixEventImpl;
|
||||
import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.BoatClass;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.DomainFactory;
|
||||
@@ -131,7 +134,7 @@ public class InitialLoadReplicationObjectIdentityTest extends AbstractServerRepl
|
||||
|
||||
/* RaceDefinition and DynamicTrackedRace */
|
||||
RaceDefinition masterRace = new RaceDefinitionImpl("Test Race", new CourseImpl("Test Course", Collections.<Waypoint>emptyList()),
|
||||
masterRegatta.getBoatClass(), Collections.<Competitor>emptyList());
|
||||
masterRegatta.getBoatClass(), Collections.<Competitor,Boat>emptyMap());
|
||||
masterRegatta.addRace(masterRace);
|
||||
DynamicTrackedRace masterTrackedRace = master.createTrackedRace(new RegattaNameAndRaceName(masterRegatta.getName(), masterRace.getName()),
|
||||
master.getWindStore(), /* delayToLiveInMillis */ 3000,
|
||||
@@ -252,10 +255,10 @@ public class InitialLoadReplicationObjectIdentityTest extends AbstractServerRepl
|
||||
Regatta regatta = master.apply(addEventOperation);
|
||||
final String raceName1 = "Test Race 1";
|
||||
final String raceName2 = "Test Race 2";
|
||||
Competitor competitor = TrackBasedTest.createCompetitor("The Same Competitor");
|
||||
Pair<Competitor, Boat> competitorAndBoat = TrackBasedTest.createCompetitorAndBoat("The Same Competitor");
|
||||
final CourseImpl masterCourse = new CourseImpl("Test Course", new ArrayList<Waypoint>());
|
||||
final ArrayList<Competitor> competitors = new ArrayList<Competitor>();
|
||||
competitors.add(competitor);
|
||||
final Map<Competitor,Boat> competitors = new HashMap<>();
|
||||
competitors.put(competitorAndBoat.getA(), competitorAndBoat.getB());
|
||||
RaceDefinition race1 = new RaceDefinitionImpl(raceName1, masterCourse, boatClass, competitors);
|
||||
AddRaceDefinition addRaceOperation1 = new AddRaceDefinition(new RegattaName(regatta.getName()), race1);
|
||||
master.apply(addRaceOperation1);
|
||||
|
||||
+4
-2
@@ -11,6 +11,7 @@ import com.sap.sailing.domain.abstractlog.regatta.RegattaLog;
|
||||
import com.sap.sailing.domain.abstractlog.regatta.RegattaLogEvent;
|
||||
import com.sap.sailing.domain.abstractlog.regatta.RegattaLogEventVisitor;
|
||||
import com.sap.sailing.domain.abstractlog.regatta.events.impl.RegattaLogRegisterCompetitorEventImpl;
|
||||
import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.Regatta;
|
||||
import com.sap.sailing.domain.base.impl.RegattaImpl;
|
||||
@@ -18,6 +19,7 @@ import com.sap.sailing.domain.leaderboard.FlexibleLeaderboard;
|
||||
import com.sap.sailing.domain.leaderboard.Leaderboard;
|
||||
import com.sap.sailing.domain.test.TrackBasedTest;
|
||||
import com.sap.sse.common.TimePoint;
|
||||
import com.sap.sse.common.Util.Pair;
|
||||
import com.sap.sse.common.impl.MillisecondsTimePoint;
|
||||
|
||||
public class RegattaLogReplicationTest extends
|
||||
@@ -33,8 +35,8 @@ public class RegattaLogReplicationTest extends
|
||||
|
||||
@Before
|
||||
public void createEvent() throws Exception {
|
||||
final Competitor competitor = TrackBasedTest.createCompetitor("Test Competitor");
|
||||
regattaLogEvent = new RegattaLogRegisterCompetitorEventImpl(t(0), t(0), author, 0, competitor);
|
||||
final Pair<Competitor, Boat> competitorAndBoat = TrackBasedTest.createCompetitorAndBoat("Test Competitor");
|
||||
regattaLogEvent = new RegattaLogRegisterCompetitorEventImpl(t(0), t(0), author, 0, competitorAndBoat.getA());
|
||||
// anotherRegattaLogEvent = new RegattaLogRegisterCompetitorEventImpl(t(1), author, t(1), 1, null);
|
||||
}
|
||||
|
||||
|
||||
+3
-2
@@ -8,10 +8,12 @@ import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.BoatClass;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.Course;
|
||||
@@ -92,8 +94,7 @@ public class ServerReplicationTest extends AbstractServerReplicationTest {
|
||||
Regatta regatta = master.apply(addRegattaOperation);
|
||||
final String raceName = "Test Race";
|
||||
final CourseImpl masterCourse = new CourseImpl("Test Course", new ArrayList<Waypoint>());
|
||||
RaceDefinition race = new RaceDefinitionImpl(raceName, masterCourse, boatClass,
|
||||
new ArrayList<Competitor>());
|
||||
RaceDefinition race = new RaceDefinitionImpl(raceName, masterCourse, boatClass, Collections.<Competitor,Boat>emptyMap());
|
||||
AddRaceDefinition addRaceOperation = new AddRaceDefinition(new RegattaName(regatta.getName()), race);
|
||||
master.apply(addRaceOperation);
|
||||
masterCourse.addWaypoint(0, masterDomainFactory.createWaypoint(masterDomainFactory.getOrCreateMark("Mark1"), /*passingInstruction*/ null));
|
||||
|
||||
+8
-2
@@ -7,14 +7,16 @@ import static org.junit.Assert.assertNotSame;
|
||||
import java.net.UnknownHostException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.mongodb.MongoException;
|
||||
import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.BoatClass;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.DomainFactory;
|
||||
@@ -77,13 +79,17 @@ public class TrackedRaceContentsReplicationTest extends AbstractServerReplicatio
|
||||
new PersonImpl("Rigo de Mas", masterDomainFactory.getOrCreateNationality("NED"), null, null)),
|
||||
new BoatImpl("123", "GER 61", masterDomainFactory.getOrCreateBoatClass("470", /* typicallyStartsUpwind */ true), "GER 61"),
|
||||
/* timeOnTimeFactor */ null, /* timeOnDistanceAllowanceInSecondsPerNauticalMile */ null, null);
|
||||
Boat boat = masterDomainFactory.getCompetitorStore().getOrCreateBoat(competitor, "boat123",
|
||||
masterDomainFactory.getOrCreateBoatClass("470", /* typicallyStartsUpwind */ true), "GER 61", null);
|
||||
Map<Competitor, Boat> competitorAndBoats = new HashMap<>();
|
||||
competitorAndBoats.put(competitor, boat);
|
||||
final String baseEventName = "Test Event";
|
||||
AddDefaultRegatta addEventOperation = new AddDefaultRegatta(RegattaImpl.getDefaultName(baseEventName, boatClassName), boatClassName,
|
||||
/*startDate*/ null, /*endDate*/ null, UUID.randomUUID());
|
||||
Regatta regatta = master.apply(addEventOperation);
|
||||
final String raceName = "Test Race";
|
||||
final CourseImpl masterCourse = new CourseImpl("Test Course", new ArrayList<Waypoint>());
|
||||
RaceDefinition race = new RaceDefinitionImpl(raceName, masterCourse, boatClass, Collections.singletonList(competitor));
|
||||
RaceDefinition race = new RaceDefinitionImpl(raceName, masterCourse, boatClass, competitorAndBoats);
|
||||
AddRaceDefinition addRaceOperation = new AddRaceDefinition(new RegattaName(regatta.getName()), race);
|
||||
master.apply(addRaceOperation);
|
||||
masterCourse.addWaypoint(0, masterDomainFactory.createWaypoint(masterDomainFactory.getOrCreateMark("Mark1"), /*passingInstruction*/ null));
|
||||
|
||||
+10
-3
@@ -7,13 +7,15 @@ import static org.junit.Assert.assertNotSame;
|
||||
import java.net.UnknownHostException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.BoatClass;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.DomainFactory;
|
||||
@@ -37,6 +39,7 @@ import com.sap.sailing.domain.common.tracking.GPSFixMoving;
|
||||
import com.sap.sailing.domain.common.tracking.impl.GPSFixMovingImpl;
|
||||
import com.sap.sailing.domain.persistence.MongoWindStoreFactory;
|
||||
import com.sap.sailing.domain.persistence.PersistenceFactory;
|
||||
import com.sap.sailing.domain.racelog.tracking.GPSFixStore;
|
||||
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
|
||||
import com.sap.sailing.domain.tracking.DynamicTrackedRegatta;
|
||||
import com.sap.sailing.domain.tracking.GPSFixTrack;
|
||||
@@ -74,19 +77,23 @@ public class TrackedRaceWithGPSFixStoreContentsReplicationTest extends AbstractS
|
||||
final String boatClassName = "49er";
|
||||
final DomainFactory masterDomainFactory = testSetUp.getMaster().getBaseDomainFactory();
|
||||
BoatClass boatClass = masterDomainFactory.getOrCreateBoatClass(boatClassName, /* typicallyStartsUpwind */true);
|
||||
BoatClass boatClass470 = DomainFactory.INSTANCE.getOrCreateBoatClass("470", /* typicallyStartsUpwind */ true);
|
||||
competitor = masterDomainFactory.getCompetitorStore().getOrCreateCompetitor("GER 61", "Tina Lutz", "TL", Color.RED, "someone@nowhere.de", null, new TeamImpl("Tina Lutz + Susann Beucke",
|
||||
(List<PersonImpl>) Arrays.asList(new PersonImpl[] { new PersonImpl("Tina Lutz", DomainFactory.INSTANCE.getOrCreateNationality("GER"), null, null),
|
||||
new PersonImpl("Tina Lutz", DomainFactory.INSTANCE.getOrCreateNationality("GER"), null, null) }),
|
||||
new PersonImpl("Rigo de Mas", DomainFactory.INSTANCE.getOrCreateNationality("NED"), null, null)),
|
||||
new BoatImpl("123", "GER 61", DomainFactory.INSTANCE.getOrCreateBoatClass("470", /* typicallyStartsUpwind */ true), "GER 61"),
|
||||
new BoatImpl("123", "GER 61", boatClass470, "GER 61"),
|
||||
/* timeOnTimeFactor */ null, /* timeOnDistanceAllowanceInSecondsPerNauticalMile */ null, null);
|
||||
Boat boat = masterDomainFactory.getCompetitorStore().getOrCreateBoat(competitor, "GER 61", boatClass470, "GER 61", null);
|
||||
final String baseEventName = "Test Event";
|
||||
AddDefaultRegatta addEventOperation = new AddDefaultRegatta(RegattaImpl.getDefaultName(baseEventName, boatClassName), boatClassName,
|
||||
/*startDate*/ null, /*endDate*/ null, UUID.randomUUID());
|
||||
Regatta regatta = master.apply(addEventOperation);
|
||||
final String raceName = "Test Race";
|
||||
final CourseImpl masterCourse = new CourseImpl("Test Course", new ArrayList<Waypoint>());
|
||||
RaceDefinition race = new RaceDefinitionImpl(raceName, masterCourse, boatClass, Collections.singletonList(competitor));
|
||||
final Map<Competitor,Boat> competitorsAndBoats = new HashMap<>();
|
||||
competitorsAndBoats.put(competitor, boat);
|
||||
RaceDefinition race = new RaceDefinitionImpl(raceName, masterCourse, boatClass, competitorsAndBoats);
|
||||
AddRaceDefinition addRaceOperation = new AddRaceDefinition(new RegattaName(regatta.getName()), race);
|
||||
master.apply(addRaceOperation);
|
||||
masterCourse.addWaypoint(0, masterDomainFactory.createWaypoint(masterDomainFactory.getOrCreateMark("Mark1"), /*passingInstruction*/ null));
|
||||
|
||||
+97
-83
@@ -17,9 +17,12 @@ import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
@@ -50,6 +53,7 @@ import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogDeviceCompeti
|
||||
import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRegisterCompetitorEvent;
|
||||
import com.sap.sailing.domain.abstractlog.regatta.events.impl.RegattaLogDeviceCompetitorMappingEventImpl;
|
||||
import com.sap.sailing.domain.abstractlog.regatta.events.impl.RegattaLogRegisterCompetitorEventImpl;
|
||||
import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.BoatClass;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.CourseArea;
|
||||
@@ -112,7 +116,7 @@ import com.sap.sailing.domain.racelog.tracking.test.mock.MockSmartphoneImeiServi
|
||||
import com.sap.sailing.domain.racelog.tracking.test.mock.SmartphoneImeiIdentifier;
|
||||
import com.sap.sailing.domain.racelogtracking.DeviceIdentifier;
|
||||
import com.sap.sailing.domain.ranking.OneDesignRankingMetric;
|
||||
import com.sap.sailing.domain.test.TrackBasedTest;
|
||||
import com.sap.sailing.domain.test.TrackBasedTest;
|
||||
import com.sap.sailing.domain.tracking.DynamicTrackedRegatta;
|
||||
import com.sap.sailing.domain.tracking.TrackedRace;
|
||||
import com.sap.sailing.domain.tracking.WindTrack;
|
||||
@@ -123,7 +127,7 @@ import com.sap.sailing.server.gateway.jaxrs.spi.MasterDataResource;
|
||||
import com.sap.sailing.server.impl.RacingEventServiceImpl;
|
||||
import com.sap.sailing.server.masterdata.DummyTrackedRace;
|
||||
import com.sap.sailing.server.masterdata.MasterDataImporter;
|
||||
import com.sap.sailing.server.testsupport.RacingEventServiceImplMock;
|
||||
import com.sap.sailing.server.testsupport.RacingEventServiceImplMock;
|
||||
import com.sap.sse.common.Color;
|
||||
import com.sap.sse.common.TimePoint;
|
||||
import com.sap.sse.common.Util;
|
||||
@@ -135,8 +139,8 @@ import com.sap.sse.mongodb.MongoDBService;
|
||||
import com.sap.sse.shared.media.ImageDescriptor;
|
||||
import com.sap.sse.shared.media.VideoDescriptor;
|
||||
|
||||
import junit.framework.Assert;
|
||||
|
||||
import junit.framework.Assert;
|
||||
|
||||
public class MasterDataImportTest {
|
||||
|
||||
private static final String TEST_GROUP_NAME = "testGroup";
|
||||
@@ -182,6 +186,16 @@ public class MasterDataImportTest {
|
||||
service.getDB().dropDatabase();
|
||||
}
|
||||
|
||||
private Map<Competitor, Boat> createCompetitorsAndBoatsMap(BoatClass boatClass, Iterable<Competitor> competitors) {
|
||||
Map<Competitor, Boat> result = new LinkedHashMap<>();
|
||||
int i = 1;
|
||||
for(Competitor c: competitors) {
|
||||
Boat b = new BoatImpl(c.getId(), "Boat of " + c.getName(), boatClass, "GER " + i++, null);
|
||||
result.put(c, b);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMasterDataImportWithoutHttpStack() throws MalformedURLException, IOException, InterruptedException,
|
||||
ClassNotFoundException {
|
||||
@@ -206,7 +220,7 @@ public class MasterDataImportTest {
|
||||
FleetImpl testFleet1 = new FleetImpl(testFleet1Name);
|
||||
fleets.add(testFleet1);
|
||||
fleets.add(new FleetImpl("testFleet2"));
|
||||
series.add(new SeriesImpl("testSeries", false, /* isFleetsCanRunInParallel */ true, fleets, emptyRaceColumnNamesList, sourceService));
|
||||
series.add(new SeriesImpl("testSeries", false, /* isFleetsCanRunInParallel */ true, fleets, emptyRaceColumnNamesList, sourceService));
|
||||
UUID regattaUUID = UUID.randomUUID();
|
||||
Regatta regatta = sourceService.createRegatta(
|
||||
RegattaImpl.getDefaultName(TEST_REGATTA_NAME, TEST_BOAT_CLASS_NAME), TEST_BOAT_CLASS_NAME,
|
||||
@@ -240,7 +254,7 @@ public class MasterDataImportTest {
|
||||
BoatClass boatClass = new BoatClassImpl("H16", true);
|
||||
DynamicBoat boat = new BoatImpl("123", "Wingy", boatClass, "GER70133");
|
||||
CompetitorImpl competitor = new CompetitorImpl(competitorUUID, "Froderik", "KYC", Color.RED, null, null, team, boat, /* timeOnTimeFactor */
|
||||
null, /* timeOnDistanceAllowancePerNauticalMile */null, null);
|
||||
null, /* timeOnDistanceAllowancePerNauticalMile */null, null);
|
||||
competitors.add(competitor);
|
||||
UUID competitorToSuppressUUID = UUID.randomUUID();
|
||||
Set<DynamicPerson> sailors2 = new HashSet<DynamicPerson>();
|
||||
@@ -251,10 +265,10 @@ public class MasterDataImportTest {
|
||||
DynamicTeam team2 = new TeamImpl("Noobs", sailors2, coach2);
|
||||
DynamicBoat boat2 = new BoatImpl("456", "LahmeEnte", boatClass, "GER1337");
|
||||
CompetitorImpl competitorToSuppress = new CompetitorImpl(competitorToSuppressUUID, "Merkel", "KYC", Color.RED, null,
|
||||
null, team2, boat2, /* timeOnTimeFactor */null, /* timeOnDistanceAllowancePerNauticalMile */null, null);
|
||||
null, team2, boat2, /* timeOnTimeFactor */null, /* timeOnDistanceAllowancePerNauticalMile */null, null);
|
||||
competitors.add(competitorToSuppress);
|
||||
RaceColumn raceColumn = leaderboard.getRaceColumnByName(raceColumnName);
|
||||
TrackedRace trackedRace = new DummyTrackedRace(raceId, competitors, regatta, null, sourceService.getWindStore());
|
||||
TrackedRace trackedRace = new DummyTrackedRace(raceId, createCompetitorsAndBoatsMap(boatClass, competitors), regatta, null, sourceService.getWindStore());
|
||||
|
||||
raceColumn.setTrackedRace(testFleet1, trackedRace);
|
||||
|
||||
@@ -326,7 +340,7 @@ public class MasterDataImportTest {
|
||||
// Delete all data above from the database, to allow recreating all of it on target server
|
||||
deleteAllDataFromDatabase();
|
||||
// Import in new service
|
||||
destService = new RacingEventServiceImplMock(new DataImportProgressImpl(randomUUID), serviceFinderFactory){};
|
||||
destService = new RacingEventServiceImplMock(new DataImportProgressImpl(randomUUID), serviceFinderFactory){};
|
||||
domainFactory = destService.getBaseDomainFactory();
|
||||
DB db = destService.getMongoObjectFactory().getDatabase();
|
||||
db.setWriteConcern(WriteConcern.SAFE);
|
||||
@@ -361,7 +375,7 @@ public class MasterDataImportTest {
|
||||
Assert.assertNull(raceColumnOnTarget.getTrackedRace(raceColumnOnTarget.getFleetByName(testFleet1Name)));
|
||||
|
||||
raceColumnOnTarget.setTrackedRace(raceColumnOnTarget.getFleets().iterator().next(), new DummyTrackedRace(
|
||||
raceId, competitors, regattaOnTarget, null, sourceService.getWindStore()));
|
||||
raceId, createCompetitorsAndBoatsMap(boatClass, competitors), regattaOnTarget, null, sourceService.getWindStore()));
|
||||
|
||||
Assert.assertTrue(leaderboardOnTarget.getScoreCorrection().hasCorrectionFor(raceColumnOnTarget));
|
||||
Competitor competitorOnTarget = domainFactory.getExistingCompetitorById(competitorUUID);
|
||||
@@ -369,7 +383,7 @@ public class MasterDataImportTest {
|
||||
competitorsCreatedOnTarget.add(competitorOnTarget);
|
||||
|
||||
Fleet fleet1OnTarget = raceColumnOnTarget.getFleetByName(testFleet1.getName());
|
||||
TrackedRace trackedRaceForTarget = new DummyTrackedRace(raceId, competitorsCreatedOnTarget, regattaOnTarget,
|
||||
TrackedRace trackedRaceForTarget = new DummyTrackedRace(raceId, createCompetitorsAndBoatsMap(boatClass, competitorsCreatedOnTarget), regattaOnTarget,
|
||||
null, sourceService.getWindStore());
|
||||
|
||||
raceColumnOnTarget.setTrackedRace(fleet1OnTarget, trackedRaceForTarget);
|
||||
@@ -430,7 +444,7 @@ public class MasterDataImportTest {
|
||||
Assert.assertTrue(destService.getSensorFixStore().getNumberOfFixes(deviceIdentifier) == 1);
|
||||
|
||||
// Check for persisting of race log events:
|
||||
RacingEventService dest2 = new RacingEventServiceImplMock(){};
|
||||
RacingEventService dest2 = new RacingEventServiceImplMock(){};
|
||||
Leaderboard lb2 = dest2.getLeaderboardByName(TEST_LEADERBOARD_NAME);
|
||||
RaceColumn raceColumn2 = lb2.getRaceColumns().iterator().next();
|
||||
RaceLog raceLog2 = raceColumn2.getRaceLog(raceColumn2.getFleetByName(fleet1OnTarget.getName()));
|
||||
@@ -469,7 +483,7 @@ public class MasterDataImportTest {
|
||||
FleetImpl testFleet1 = new FleetImpl("testFleet1");
|
||||
fleets.add(testFleet1);
|
||||
fleets.add(new FleetImpl("testFleet2"));
|
||||
series.add(new SeriesImpl("testSeries", false, /* isFleetsCanRunInParallel */ true, fleets, emptyRaceColumnNamesList, sourceService));
|
||||
series.add(new SeriesImpl("testSeries", false, /* isFleetsCanRunInParallel */ true, fleets, emptyRaceColumnNamesList, sourceService));
|
||||
UUID regattaUUID = UUID.randomUUID();
|
||||
Regatta regatta = sourceService.createRegatta(
|
||||
RegattaImpl.getDefaultName(TEST_REGATTA_NAME, TEST_BOAT_CLASS_NAME), TEST_BOAT_CLASS_NAME,
|
||||
@@ -500,7 +514,7 @@ public class MasterDataImportTest {
|
||||
BoatClass boatClass = new BoatClassImpl("H16", true);
|
||||
DynamicBoat boat = new BoatImpl("123", "Wingy", boatClass, "GER70133");
|
||||
CompetitorImpl competitor = new CompetitorImpl(competitorUUID, "Froderik", "KYC", Color.RED, null, null, team, boat, /* timeOnTimeFactor */
|
||||
null, /* timeOnDistanceAllowancePerNauticalMile */null, null);
|
||||
null, /* timeOnDistanceAllowancePerNauticalMile */null, null);
|
||||
competitors.add(competitor);
|
||||
UUID competitor2UUID = UUID.randomUUID();
|
||||
Set<DynamicPerson> sailors2 = new HashSet<DynamicPerson>();
|
||||
@@ -509,10 +523,10 @@ public class MasterDataImportTest {
|
||||
DynamicTeam team2 = new TeamImpl("Pros2", sailors2, coach2);
|
||||
DynamicBoat boat2 = new BoatImpl("456", "FastBoat", boatClass, "GER70133");
|
||||
CompetitorImpl competitor2 = new CompetitorImpl(competitor2UUID, "Froderik", "KYC", Color.RED, null, null, team2,
|
||||
boat2, /* timeOnTimeFactor */null, /* timeOnDistanceAllowancePerNauticalMile */null, null);
|
||||
boat2, /* timeOnTimeFactor */null, /* timeOnDistanceAllowancePerNauticalMile */null, null);
|
||||
competitors.add(competitor2);
|
||||
RaceColumn raceColumn = leaderboard.getRaceColumnByName(raceColumnName);
|
||||
TrackedRace trackedRace = new DummyTrackedRace(raceId, competitors, regatta, null, sourceService.getWindStore());
|
||||
TrackedRace trackedRace = new DummyTrackedRace(raceId, createCompetitorsAndBoatsMap(boatClass, competitors), regatta, null, sourceService.getWindStore());
|
||||
|
||||
raceColumn.setTrackedRace(testFleet1, trackedRace);
|
||||
|
||||
@@ -547,7 +561,7 @@ public class MasterDataImportTest {
|
||||
// Delete all data above from the database, to allow recreating all of it on target server
|
||||
deleteAllDataFromDatabase();
|
||||
// Import in new service
|
||||
destService = new RacingEventServiceImplMock(new DataImportProgressImpl(randomUUID)){};
|
||||
destService = new RacingEventServiceImplMock(new DataImportProgressImpl(randomUUID)){};
|
||||
domainFactory = destService.getBaseDomainFactory();
|
||||
inputStream = new ByteArrayInputStream(os.toByteArray());
|
||||
|
||||
@@ -583,7 +597,7 @@ public class MasterDataImportTest {
|
||||
competitorsCreatedOnTarget.add(competitorOnTarget);
|
||||
|
||||
Fleet fleet1OnTarget = raceColumnOnTarget.getFleetByName(testFleet1.getName());
|
||||
TrackedRace trackedRaceForTarget = new DummyTrackedRace(raceId, competitorsCreatedOnTarget, regattaOnTarget,
|
||||
TrackedRace trackedRaceForTarget = new DummyTrackedRace(raceId, createCompetitorsAndBoatsMap(boatClass, competitorsCreatedOnTarget), regattaOnTarget,
|
||||
null, sourceService.getWindStore());
|
||||
|
||||
raceColumnOnTarget.setTrackedRace(fleet1OnTarget, trackedRaceForTarget);
|
||||
@@ -628,7 +642,7 @@ public class MasterDataImportTest {
|
||||
List<Fleet> fleets = new ArrayList<Fleet>();
|
||||
FleetImpl testFleet1 = new FleetImpl("testFleet1");
|
||||
fleets.add(testFleet1);
|
||||
series.add(new SeriesImpl("testSeries", false, /* isFleetsCanRunInParallel */ true, fleets, emptyRaceColumnNamesList, sourceService));
|
||||
series.add(new SeriesImpl("testSeries", false, /* isFleetsCanRunInParallel */ true, fleets, emptyRaceColumnNamesList, sourceService));
|
||||
UUID regattaUUID = UUID.randomUUID();
|
||||
Regatta regatta = sourceService.createRegatta(RegattaImpl.getDefaultName("testRegatta", "29er"), "29er",
|
||||
/* startDate */null, /* endDate */null, regattaUUID, series, true, new LowPoint(), courseAreaUUID, /* useStartTimeInference */
|
||||
@@ -647,7 +661,6 @@ public class MasterDataImportTest {
|
||||
/* displayName */null, false, leaderboardNames, null, null);
|
||||
|
||||
// Set tracked Race with competitors
|
||||
Set<Competitor> competitors = new HashSet<Competitor>();
|
||||
UUID competitorUUID = UUID.randomUUID();
|
||||
Set<DynamicPerson> sailors = new HashSet<DynamicPerson>();
|
||||
sailors.add(new PersonImpl("Froderik Poterson", new NationalityImpl("GER"), new Date(645487200000L),
|
||||
@@ -658,12 +671,13 @@ public class MasterDataImportTest {
|
||||
BoatClass boatClass = new BoatClassImpl("H16", true);
|
||||
DynamicBoat boat = new BoatImpl("123", "Wingy", boatClass, "GER70133");
|
||||
CompetitorImpl competitor = new CompetitorImpl(competitorUUID, "Froderik", "KYC", Color.RED, null, null, team, boat, /* timeOnTimeFactor */
|
||||
null, /* timeOnDistanceAllowancePerNauticalMile */null, null);
|
||||
competitors.add(competitor);
|
||||
null, /* timeOnDistanceAllowancePerNauticalMile */null, null);
|
||||
Map<Competitor, Boat> competitorsAndBoats = new HashMap<>();
|
||||
competitorsAndBoats.put(competitor, boat);
|
||||
|
||||
RaceColumn raceColumn = leaderboard.getRaceColumnByName(raceColumnName);
|
||||
DynamicTrackedRegatta trackedRegatta = sourceService.getOrCreateTrackedRegatta(regatta);
|
||||
TrackedRace trackedRace = new DummyTrackedRace(raceId, competitors, regatta, trackedRegatta,
|
||||
TrackedRace trackedRace = new DummyTrackedRace(raceId, competitorsAndBoats, regatta, trackedRegatta,
|
||||
sourceService.getWindStore());
|
||||
regatta.addRace(trackedRace.getRace()); // make sure the competitor is serialized together with the regatta
|
||||
raceColumn.setTrackedRace(testFleet1, trackedRace);
|
||||
@@ -694,7 +708,7 @@ public class MasterDataImportTest {
|
||||
// Delete all data above from the database, to allow recreating all of it on target server
|
||||
deleteAllDataFromDatabase();
|
||||
// Import in new service
|
||||
destService = new RacingEventServiceImplMock(new DataImportProgressImpl(randomUUID)){};
|
||||
destService = new RacingEventServiceImplMock(new DataImportProgressImpl(randomUUID)){};
|
||||
domainFactory = destService.getBaseDomainFactory();
|
||||
inputStream = new ByteArrayInputStream(os.toByteArray());
|
||||
|
||||
@@ -724,12 +738,12 @@ public class MasterDataImportTest {
|
||||
Assert.assertNotNull(raceColumnOnTarget);
|
||||
|
||||
Competitor competitorOnTarget = domainFactory.getExistingCompetitorById(competitorUUID);
|
||||
Set<Competitor> competitorsCreatedOnTarget = new HashSet<Competitor>();
|
||||
competitorsCreatedOnTarget.add(competitorOnTarget);
|
||||
|
||||
Boat boatOnTarget = domainFactory.getExistingBoatById(competitorUUID);
|
||||
Map<Competitor, Boat> competitorsAndBoatsOnTarget = new HashMap<>();
|
||||
competitorsAndBoatsOnTarget.put(competitorOnTarget, boatOnTarget);
|
||||
Fleet fleet1OnTarget = raceColumnOnTarget.getFleetByName(testFleet1.getName());
|
||||
DynamicTrackedRegatta trackedRegattaForTarget = destService.getOrCreateTrackedRegatta(regattaOnTarget);
|
||||
TrackedRace trackedRaceForTarget = new DummyTrackedRace(raceId, competitorsCreatedOnTarget, regattaOnTarget,
|
||||
TrackedRace trackedRaceForTarget = new DummyTrackedRace(raceId, competitorsAndBoatsOnTarget, regattaOnTarget,
|
||||
trackedRegattaForTarget, sourceService.getWindStore());
|
||||
|
||||
raceColumnOnTarget.setTrackedRace(fleet1OnTarget, trackedRaceForTarget);
|
||||
@@ -791,7 +805,7 @@ public class MasterDataImportTest {
|
||||
FleetImpl testFleet1 = new FleetImpl("testFleet1");
|
||||
fleets.add(testFleet1);
|
||||
fleets.add(new FleetImpl("testFleet2"));
|
||||
series.add(new SeriesImpl("testSeries", false, /* isFleetsCanRunInParallel */ true, fleets, emptyRaceColumnNamesList, sourceService));
|
||||
series.add(new SeriesImpl("testSeries", false, /* isFleetsCanRunInParallel */ true, fleets, emptyRaceColumnNamesList, sourceService));
|
||||
UUID regattaUUID = UUID.randomUUID();
|
||||
Regatta regatta = sourceService.createRegatta(
|
||||
RegattaImpl.getDefaultName(TEST_REGATTA_NAME, TEST_BOAT_CLASS_NAME), TEST_BOAT_CLASS_NAME,
|
||||
@@ -823,7 +837,7 @@ public class MasterDataImportTest {
|
||||
DynamicBoat boat = new BoatImpl("123", "Wingy", boatClass, "GER70133");
|
||||
Competitor competitor = sourceDomainFactory.getOrCreateCompetitor(competitorUUID, "Froderik", "F", Color.RED,
|
||||
"noone@nowhere.de", null, team, boat, /* timeOnTimeFactor */null, /* timeOnDistanceAllowanceInSecondsPerNauticalMile */
|
||||
null, null);
|
||||
null, null);
|
||||
competitors.add(competitor);
|
||||
UUID competitor2UUID = UUID.randomUUID();
|
||||
Set<DynamicPerson> sailors2 = new HashSet<DynamicPerson>();
|
||||
@@ -833,10 +847,10 @@ public class MasterDataImportTest {
|
||||
DynamicBoat boat2 = new BoatImpl("456", "FastBoat", boatClass, "GER70133");
|
||||
Competitor competitor2 = sourceDomainFactory.getCompetitorStore().getOrCreateCompetitor(competitor2UUID,
|
||||
"Froderik", "F", Color.RED, "noone@nowhere.de", null, team2, boat2, /* timeOnTimeFactor */null, /* timeOnDistanceAllowanceInSecondsPerNauticalMile */
|
||||
null, null);
|
||||
null, null);
|
||||
competitors.add(competitor2);
|
||||
RaceColumn raceColumn = leaderboard.getRaceColumnByName(raceColumnName);
|
||||
TrackedRace trackedRace = new DummyTrackedRace(raceId, competitors, regatta, null, sourceService.getWindStore());
|
||||
TrackedRace trackedRace = new DummyTrackedRace(raceId, createCompetitorsAndBoatsMap(boatClass, competitors), regatta, null, sourceService.getWindStore());
|
||||
|
||||
raceColumn.setTrackedRace(testFleet1, trackedRace);
|
||||
|
||||
@@ -877,7 +891,7 @@ public class MasterDataImportTest {
|
||||
// Delete all data above from the database, to allow recreating all of it on target server
|
||||
deleteAllDataFromDatabase();
|
||||
// Import in new service
|
||||
destService = new RacingEventServiceImplMock(new DataImportProgressImpl(randomUUID)){};
|
||||
destService = new RacingEventServiceImplMock(new DataImportProgressImpl(randomUUID)){};
|
||||
domainFactory = destService.getBaseDomainFactory();
|
||||
inputStream = new ByteArrayInputStream(os.toByteArray());
|
||||
|
||||
@@ -912,7 +926,7 @@ public class MasterDataImportTest {
|
||||
competitorsCreatedOnTarget.add(competitorOnTarget);
|
||||
|
||||
Fleet fleet1OnTarget = raceColumnOnTarget.getFleetByName(testFleet1.getName());
|
||||
TrackedRace trackedRaceForTarget = new DummyTrackedRace(raceId, competitorsCreatedOnTarget, regattaOnTarget,
|
||||
TrackedRace trackedRaceForTarget = new DummyTrackedRace(raceId, createCompetitorsAndBoatsMap(boatClass, competitorsCreatedOnTarget), regattaOnTarget,
|
||||
null, sourceService.getWindStore());
|
||||
|
||||
raceColumnOnTarget.setTrackedRace(fleet1OnTarget, trackedRaceForTarget);
|
||||
@@ -951,7 +965,7 @@ public class MasterDataImportTest {
|
||||
FleetImpl testFleet1 = new FleetImpl("testFleet1");
|
||||
fleets.add(testFleet1);
|
||||
fleets.add(new FleetImpl("testFleet2"));
|
||||
series.add(new SeriesImpl("testSeries", false, /* isFleetsCanRunInParallel */ true, fleets, emptyRaceColumnNamesList, sourceService));
|
||||
series.add(new SeriesImpl("testSeries", false, /* isFleetsCanRunInParallel */ true, fleets, emptyRaceColumnNamesList, sourceService));
|
||||
UUID regattaUUID = UUID.randomUUID();
|
||||
Regatta regatta = sourceService.createRegatta(
|
||||
RegattaImpl.getDefaultName(TEST_REGATTA_NAME, TEST_BOAT_CLASS_NAME), TEST_BOAT_CLASS_NAME,
|
||||
@@ -982,7 +996,7 @@ public class MasterDataImportTest {
|
||||
BoatClass boatClass = new BoatClassImpl("H16", true);
|
||||
DynamicBoat boat = new BoatImpl("123", "Wingy", boatClass, "GER70133");
|
||||
CompetitorImpl competitor = new CompetitorImpl(competitorUUID, "Froderik", "KYC", Color.RED, null, null, team, boat, /* timeOnTimeFactor */
|
||||
null, /* timeOnDistanceAllowancePerNauticalMile */null, null);
|
||||
null, /* timeOnDistanceAllowancePerNauticalMile */null, null);
|
||||
competitors.add(competitor);
|
||||
UUID competitorToSuppressUUID = UUID.randomUUID();
|
||||
Set<DynamicPerson> sailors2 = new HashSet<DynamicPerson>();
|
||||
@@ -993,10 +1007,10 @@ public class MasterDataImportTest {
|
||||
DynamicTeam team2 = new TeamImpl("Noobs", sailors2, coach2);
|
||||
DynamicBoat boat2 = new BoatImpl("456", "LahmeEnte", boatClass, "GER1337");
|
||||
CompetitorImpl competitorToSuppress = new CompetitorImpl(competitorToSuppressUUID, "Merkel", "KYC", Color.RED, null,
|
||||
null, team2, boat2, /* timeOnTimeFactor */null, /* timeOnDistanceAllowancePerNauticalMile */null, null);
|
||||
null, team2, boat2, /* timeOnTimeFactor */null, /* timeOnDistanceAllowancePerNauticalMile */null, null);
|
||||
competitors.add(competitorToSuppress);
|
||||
RaceColumn raceColumn = leaderboard.getRaceColumnByName(raceColumnName);
|
||||
TrackedRace trackedRace = new DummyTrackedRace(raceId, competitors, regatta, null, sourceService.getWindStore());
|
||||
TrackedRace trackedRace = new DummyTrackedRace(raceId, createCompetitorsAndBoatsMap(boatClass, competitors), regatta, null, sourceService.getWindStore());
|
||||
|
||||
raceColumn.setTrackedRace(testFleet1, trackedRace);
|
||||
|
||||
@@ -1047,7 +1061,7 @@ public class MasterDataImportTest {
|
||||
// Delete all data above from the database, to allow recreating all of it on target server
|
||||
deleteAllDataFromDatabase();
|
||||
// Import in new service
|
||||
destService = new RacingEventServiceImplMock(new DataImportProgressImpl(randomUUID)){};
|
||||
destService = new RacingEventServiceImplMock(new DataImportProgressImpl(randomUUID)){};
|
||||
domainFactory = destService.getBaseDomainFactory();
|
||||
// Create existing data on target
|
||||
venueNameNotToOverride = "doNotOverride";
|
||||
@@ -1065,7 +1079,7 @@ public class MasterDataImportTest {
|
||||
List<Fleet> fleetsNotToOverride = new ArrayList<Fleet>();
|
||||
FleetImpl testFleet1NotToOverride = new FleetImpl("testFleet1");
|
||||
fleetsNotToOverride.add(testFleet1NotToOverride);
|
||||
seriesNotToOverride.add(new SeriesImpl("testSeries", false, /* isFleetsCanRunInParallel */ true, fleetsNotToOverride, emptyRaceColumnNamesList,
|
||||
seriesNotToOverride.add(new SeriesImpl("testSeries", false, /* isFleetsCanRunInParallel */ true, fleetsNotToOverride, emptyRaceColumnNamesList,
|
||||
destService));
|
||||
Regatta regattaNotToOverride = destService.createRegatta(
|
||||
RegattaImpl.getDefaultName(TEST_REGATTA_NAME, TEST_BOAT_CLASS_NAME), TEST_BOAT_CLASS_NAME, /* startDate */
|
||||
@@ -1153,7 +1167,7 @@ public class MasterDataImportTest {
|
||||
FleetImpl testFleet1 = new FleetImpl("testFleet1");
|
||||
fleets.add(testFleet1);
|
||||
fleets.add(new FleetImpl("testFleet2"));
|
||||
series.add(new SeriesImpl("testSeries", false, /* isFleetsCanRunInParallel */ true, fleets, emptyRaceColumnNamesList, sourceService));
|
||||
series.add(new SeriesImpl("testSeries", false, /* isFleetsCanRunInParallel */ true, fleets, emptyRaceColumnNamesList, sourceService));
|
||||
UUID regattaUUID = UUID.randomUUID();
|
||||
Regatta regatta = sourceService.createRegatta(
|
||||
RegattaImpl.getDefaultName(TEST_REGATTA_NAME, TEST_BOAT_CLASS_NAME), TEST_BOAT_CLASS_NAME,
|
||||
@@ -1184,7 +1198,7 @@ public class MasterDataImportTest {
|
||||
BoatClass boatClass = new BoatClassImpl("H16", true);
|
||||
DynamicBoat boat = new BoatImpl("123", "Wingy", boatClass, "GER70133");
|
||||
CompetitorImpl competitor = new CompetitorImpl(competitorUUID, "Froderik", "KYC", Color.RED, null, null, team, boat, /* timeOnTimeFactor */
|
||||
null, /* timeOnDistanceAllowancePerNauticalMile */null, null);
|
||||
null, /* timeOnDistanceAllowancePerNauticalMile */null, null);
|
||||
competitors.add(competitor);
|
||||
UUID competitorToSuppressUUID = UUID.randomUUID();
|
||||
Set<DynamicPerson> sailors2 = new HashSet<DynamicPerson>();
|
||||
@@ -1195,10 +1209,10 @@ public class MasterDataImportTest {
|
||||
DynamicTeam team2 = new TeamImpl("Noobs", sailors2, coach2);
|
||||
DynamicBoat boat2 = new BoatImpl("456", "LahmeEnte", boatClass, "GER1337");
|
||||
CompetitorImpl competitorToSuppress = new CompetitorImpl(competitorToSuppressUUID, "Merkel", "KYC", Color.RED, null,
|
||||
null, team2, boat2, /* timeOnTimeFactor */null, /* timeOnDistanceAllowancePerNauticalMile */null, null);
|
||||
null, team2, boat2, /* timeOnTimeFactor */null, /* timeOnDistanceAllowancePerNauticalMile */null, null);
|
||||
competitors.add(competitorToSuppress);
|
||||
RaceColumn raceColumn = leaderboard.getRaceColumnByName(raceColumnName);
|
||||
TrackedRace trackedRace = new DummyTrackedRace(raceId, competitors, regatta, null, sourceService.getWindStore());
|
||||
TrackedRace trackedRace = new DummyTrackedRace(raceId, createCompetitorsAndBoatsMap(boatClass, competitors), regatta, null, sourceService.getWindStore());
|
||||
|
||||
raceColumn.setTrackedRace(testFleet1, trackedRace);
|
||||
|
||||
@@ -1245,7 +1259,7 @@ public class MasterDataImportTest {
|
||||
// Delete all data above from the database, to allow recreating all of it on target server
|
||||
deleteAllDataFromDatabase();
|
||||
// Import in new service
|
||||
destService = new RacingEventServiceImplMock(new DataImportProgressImpl(randomUUID)){};
|
||||
destService = new RacingEventServiceImplMock(new DataImportProgressImpl(randomUUID)){};
|
||||
domainFactory = destService.getBaseDomainFactory();
|
||||
// Create existing data on target
|
||||
String venueNameToOverride = "Override";
|
||||
@@ -1263,7 +1277,7 @@ public class MasterDataImportTest {
|
||||
List<Fleet> fleetsToOverride = new ArrayList<Fleet>();
|
||||
FleetImpl testFleet1ToOverride = new FleetImpl("testFleet1");
|
||||
fleetsToOverride.add(testFleet1ToOverride);
|
||||
seriesToOverride.add(new SeriesImpl("testSeries", false, /* isFleetsCanRunInParallel */ true, fleetsToOverride, emptyRaceColumnNamesList,
|
||||
seriesToOverride.add(new SeriesImpl("testSeries", false, /* isFleetsCanRunInParallel */ true, fleetsToOverride, emptyRaceColumnNamesList,
|
||||
destService));
|
||||
Regatta regattaToOverride = destService.createRegatta(
|
||||
RegattaImpl.getDefaultName(TEST_REGATTA_NAME, TEST_BOAT_CLASS_NAME), TEST_BOAT_CLASS_NAME, /* startDate */
|
||||
@@ -1287,13 +1301,13 @@ public class MasterDataImportTest {
|
||||
String competitorOldName = "oldName";
|
||||
Competitor competitorToOverride = domainFactory.getOrCreateCompetitor(competitorUUID, competitorOldName, "c",
|
||||
Color.BLUE, "noone@nowhere.de", null, teamToOverride, boatToOverride, /* timeOnTimeFactor */null, /* timeOnDistanceAllowanceInSecondsPerNauticalMile */
|
||||
null, null);
|
||||
null, null);
|
||||
competitorsToOverride.add(competitorToOverride);
|
||||
|
||||
Leaderboard leaderboardToOverride = destService.addRegattaLeaderboard(
|
||||
regattaToOverride.getRegattaIdentifier(), "testDisplayNameNotToOverride", discardRule);
|
||||
TrackedRace trackedRace2 = new DummyTrackedRace(raceId, competitorsToOverride, regattaToOverride, null,
|
||||
sourceService.getWindStore());
|
||||
TrackedRace trackedRace2 = new DummyTrackedRace(raceId, createCompetitorsAndBoatsMap(boatClass, competitorsToOverride),
|
||||
regattaToOverride, null, sourceService.getWindStore());
|
||||
RaceColumn columnToOverride = leaderboardToOverride.getRaceColumns().iterator().next();
|
||||
columnToOverride.setTrackedRace(testFleet1ToOverride, trackedRace2);
|
||||
identifierOfRegattaTrackedRace = regattaToOverride.getRaceIdentifier(columnToOverride
|
||||
@@ -1410,7 +1424,7 @@ public class MasterDataImportTest {
|
||||
// Delete all data above from the database, to allow recreating all of it on target server
|
||||
deleteAllDataFromDatabase();
|
||||
// Import in new service
|
||||
destService = new RacingEventServiceImplMock(new DataImportProgressImpl(randomUUID)){};
|
||||
destService = new RacingEventServiceImplMock(new DataImportProgressImpl(randomUUID)){};
|
||||
domainFactory = destService.getBaseDomainFactory();
|
||||
inputStream = new ByteArrayInputStream(os.toByteArray());
|
||||
|
||||
@@ -1454,7 +1468,7 @@ public class MasterDataImportTest {
|
||||
FleetImpl testFleet1 = new FleetImpl("testFleet1");
|
||||
fleets.add(testFleet1);
|
||||
fleets.add(new FleetImpl("testFleet2"));
|
||||
series.add(new SeriesImpl("testSeries", false, /* isFleetsCanRunInParallel */ true, fleets, emptyRaceColumnNamesList, sourceService));
|
||||
series.add(new SeriesImpl("testSeries", false, /* isFleetsCanRunInParallel */ true, fleets, emptyRaceColumnNamesList, sourceService));
|
||||
UUID regattaUUID = UUID.randomUUID();
|
||||
|
||||
Regatta regatta = sourceService.createRegatta(
|
||||
@@ -1484,7 +1498,7 @@ public class MasterDataImportTest {
|
||||
BoatClass boatClass = new BoatClassImpl("H16", true);
|
||||
DynamicBoat boat = new BoatImpl("123", "Wingy", boatClass, "GER70133");
|
||||
CompetitorImpl competitor = new CompetitorImpl(competitorUUID, "Froderik", "KYC", Color.RED, null, null, team, boat, /* timeOnTimeFactor */
|
||||
null, /* timeOnDistanceAllowancePerNauticalMile */null, null);
|
||||
null, /* timeOnDistanceAllowancePerNauticalMile */null, null);
|
||||
competitors.add(competitor);
|
||||
UUID competitorToSuppressUUID = UUID.randomUUID();
|
||||
Set<DynamicPerson> sailors2 = new HashSet<DynamicPerson>();
|
||||
@@ -1495,10 +1509,10 @@ public class MasterDataImportTest {
|
||||
DynamicTeam team2 = new TeamImpl("Noobs", sailors2, coach2);
|
||||
DynamicBoat boat2 = new BoatImpl("456", "LahmeEnte", boatClass, "GER1337");
|
||||
CompetitorImpl competitorToSuppress = new CompetitorImpl(competitorToSuppressUUID, "Merkel", "KYC", Color.RED, null,
|
||||
null, team2, boat2, /* timeOnTimeFactor */null, /* timeOnDistanceAllowancePerNauticalMile */null, null);
|
||||
null, team2, boat2, /* timeOnTimeFactor */null, /* timeOnDistanceAllowancePerNauticalMile */null, null);
|
||||
competitors.add(competitorToSuppress);
|
||||
RaceColumn raceColumn = leaderboard.getRaceColumnByName(raceColumnName);
|
||||
TrackedRace trackedRace = new DummyTrackedRace(raceId, competitors, regatta, null, sourceService.getWindStore());
|
||||
TrackedRace trackedRace = new DummyTrackedRace(raceId, createCompetitorsAndBoatsMap(boatClass, competitors), regatta, null, sourceService.getWindStore());
|
||||
|
||||
raceColumn.setTrackedRace(testFleet1, trackedRace);
|
||||
|
||||
@@ -1544,7 +1558,7 @@ public class MasterDataImportTest {
|
||||
// Delete all data above from the database, to allow recreating all of it on target server
|
||||
deleteAllDataFromDatabase();
|
||||
// Import in new service
|
||||
destService = new RacingEventServiceImplMock(new DataImportProgressImpl(randomUUID)){};
|
||||
destService = new RacingEventServiceImplMock(new DataImportProgressImpl(randomUUID)){};
|
||||
domainFactory = destService.getBaseDomainFactory();
|
||||
inputStream = new ByteArrayInputStream(os.toByteArray());
|
||||
|
||||
@@ -1589,7 +1603,7 @@ public class MasterDataImportTest {
|
||||
FleetImpl testFleet1 = new FleetImpl("testFleet1");
|
||||
fleets.add(testFleet1);
|
||||
fleets.add(new FleetImpl("testFleet2"));
|
||||
series.add(new SeriesImpl("testSeries", false, /* isFleetsCanRunInParallel */ true, fleets, emptyRaceColumnNamesList, sourceService));
|
||||
series.add(new SeriesImpl("testSeries", false, /* isFleetsCanRunInParallel */ true, fleets, emptyRaceColumnNamesList, sourceService));
|
||||
UUID regattaUUID = UUID.randomUUID();
|
||||
Regatta regatta = sourceService.createRegatta(
|
||||
RegattaImpl.getDefaultName(TEST_REGATTA_NAME, TEST_BOAT_CLASS_NAME), TEST_BOAT_CLASS_NAME,
|
||||
@@ -1620,7 +1634,7 @@ public class MasterDataImportTest {
|
||||
BoatClass boatClass = new BoatClassImpl("H16", true);
|
||||
DynamicBoat boat = new BoatImpl("123", "Wingy", boatClass, "GER70133");
|
||||
CompetitorImpl competitor = new CompetitorImpl(competitorUUID, "Froderik", "KYC", Color.RED, null, null, team, boat, /* timeOnTimeFactor */
|
||||
null, /* timeOnDistanceAllowancePerNauticalMile */null, null);
|
||||
null, /* timeOnDistanceAllowancePerNauticalMile */null, null);
|
||||
competitors.add(competitor);
|
||||
UUID competitorToSuppressUUID = UUID.randomUUID();
|
||||
Set<DynamicPerson> sailors2 = new HashSet<DynamicPerson>();
|
||||
@@ -1631,10 +1645,10 @@ public class MasterDataImportTest {
|
||||
DynamicTeam team2 = new TeamImpl("Noobs", sailors2, coach2);
|
||||
DynamicBoat boat2 = new BoatImpl("456", "LahmeEnte", boatClass, "GER1337");
|
||||
CompetitorImpl competitorToSuppress = new CompetitorImpl(competitorToSuppressUUID, "Merkel", "KYC", Color.RED, null,
|
||||
null, team2, boat2, /* timeOnTimeFactor */null, /* timeOnDistanceAllowancePerNauticalMile */null, null);
|
||||
null, team2, boat2, /* timeOnTimeFactor */null, /* timeOnDistanceAllowancePerNauticalMile */null, null);
|
||||
competitors.add(competitorToSuppress);
|
||||
RaceColumn raceColumn = leaderboard.getRaceColumnByName(raceColumnName);
|
||||
TrackedRace trackedRace = new DummyTrackedRace(raceId, competitors, regatta, null, sourceService.getWindStore());
|
||||
TrackedRace trackedRace = new DummyTrackedRace(raceId, createCompetitorsAndBoatsMap(boatClass, competitors), regatta, null, sourceService.getWindStore());
|
||||
|
||||
raceColumn.setTrackedRace(testFleet1, trackedRace);
|
||||
sourceService.setRegattaForRace(regatta, "dummy");
|
||||
@@ -1682,7 +1696,7 @@ public class MasterDataImportTest {
|
||||
// Delete all data above from the database, to allow recreating all of it on target server
|
||||
deleteAllDataFromDatabase();
|
||||
// Import in new service
|
||||
destService = new RacingEventServiceImplMock(new DataImportProgressImpl(randomUUID)){};
|
||||
destService = new RacingEventServiceImplMock(new DataImportProgressImpl(randomUUID)){};
|
||||
domainFactory = destService.getBaseDomainFactory();
|
||||
inputStream = new ByteArrayInputStream(os.toByteArray());
|
||||
|
||||
@@ -1711,7 +1725,7 @@ public class MasterDataImportTest {
|
||||
Assert.assertEquals(regattaOnTarget, map.get("dummy2"));
|
||||
|
||||
// Check if persistent regatta for race id has been persisted
|
||||
RacingEventServiceImplMock destService2 = new RacingEventServiceImplMock(new DataImportProgressImpl(randomUUID)){};
|
||||
RacingEventServiceImplMock destService2 = new RacingEventServiceImplMock(new DataImportProgressImpl(randomUUID)){};
|
||||
ConcurrentHashMap<String, Regatta> map2 = destService2.getPersistentRegattasForRaceIDs();
|
||||
Regatta regattaOnTarget2 = destService2.getRegattaByName(TEST_LEADERBOARD_NAME);
|
||||
Assert.assertEquals(regattaOnTarget2, map2.get("dummy"));
|
||||
@@ -1744,7 +1758,7 @@ public class MasterDataImportTest {
|
||||
sourceService.mediaTrackAdded(trackOnSource);
|
||||
|
||||
Collection<String> raceColumnNames = Arrays.asList(raceName1, raceName2, raceName3, raceName4, raceName5);
|
||||
Regatta regatta = TrackBasedTest.createTestRegatta(regattaName1, raceColumnNames);
|
||||
Regatta regatta = TrackBasedTest.createTestRegatta(regattaName1, raceColumnNames);
|
||||
sourceService.addRegattaWithoutReplication(regatta);
|
||||
int[] discardThresholds = new int[0];
|
||||
RegattaLeaderboard leaderboard = sourceService.addRegattaLeaderboard(regatta.getRegattaIdentifier(),
|
||||
@@ -1754,7 +1768,7 @@ public class MasterDataImportTest {
|
||||
new RegattaNameAndRaceName(regattaName1, raceName3),
|
||||
new RegattaNameAndRaceName(regattaName2, raceName4),
|
||||
new RegattaNameAndRaceName(regattaName2, raceName5));
|
||||
TrackBasedTest.assignRacesToRegattaLeaderboardColumns(leaderboard, raceIdentifiers);
|
||||
TrackBasedTest.assignRacesToRegattaLeaderboardColumns(leaderboard, raceIdentifiers);
|
||||
boolean displayGroupsInReverseOrder = false;
|
||||
int[] overallLeaderboardDiscardThresholds = new int[0];
|
||||
UUID leaderboardGropuUuid = UUID.randomUUID();
|
||||
@@ -1781,7 +1795,7 @@ public class MasterDataImportTest {
|
||||
// Delete all data above from the database, to allow recreating all of it on target server
|
||||
deleteAllDataFromDatabase();
|
||||
// Import in new service
|
||||
destService = new RacingEventServiceImplMock(new DataImportProgressImpl(randomUUID)){};
|
||||
destService = new RacingEventServiceImplMock(new DataImportProgressImpl(randomUUID)){};
|
||||
domainFactory = destService.getBaseDomainFactory();
|
||||
inputStream = new ByteArrayInputStream(os.toByteArray());
|
||||
|
||||
@@ -1791,15 +1805,15 @@ public class MasterDataImportTest {
|
||||
os.close();
|
||||
inputStream.close();
|
||||
}
|
||||
MasterDataImportObjectCreationCount creationCount = destService.getDataImportLock().getProgress(randomUUID).getResult();
|
||||
MasterDataImportObjectCreationCount creationCount = destService.getDataImportLock().getProgress(randomUUID).getResult();
|
||||
|
||||
// ---Asserts---
|
||||
|
||||
Assert.assertNotNull(creationCount);
|
||||
|
||||
Iterable<MediaTrack> targetTracks = destService.getAllMediaTracks();
|
||||
Iterable<MediaTrack> targetTracks = destService.getAllMediaTracks();
|
||||
|
||||
Assert.assertEquals(1, Util.size(targetTracks));
|
||||
Assert.assertEquals(1, Util.size(targetTracks));
|
||||
|
||||
MediaTrack trackOnTarget = targetTracks.iterator().next();
|
||||
|
||||
@@ -1833,7 +1847,7 @@ public class MasterDataImportTest {
|
||||
FleetImpl testFleet1 = new FleetImpl("testFleet1");
|
||||
fleets.add(testFleet1);
|
||||
fleets.add(new FleetImpl("testFleet2"));
|
||||
series.add(new SeriesImpl("testSeries", false, /* isFleetsCanRunInParallel */ true, fleets, emptyRaceColumnNamesList, sourceService));
|
||||
series.add(new SeriesImpl("testSeries", false, /* isFleetsCanRunInParallel */ true, fleets, emptyRaceColumnNamesList, sourceService));
|
||||
UUID regattaUUID = UUID.randomUUID();
|
||||
Regatta regatta = sourceService.createRegatta(
|
||||
RegattaImpl.getDefaultName(TEST_REGATTA_NAME, TEST_BOAT_CLASS_NAME), TEST_BOAT_CLASS_NAME,
|
||||
@@ -1868,7 +1882,7 @@ public class MasterDataImportTest {
|
||||
BoatClass boatClass = new BoatClassImpl("H16", true);
|
||||
DynamicBoat boat = new BoatImpl("123", "Wingy", boatClass, "GER70133");
|
||||
CompetitorImpl competitor = new CompetitorImpl(competitorUUID, "Froderik", "KYC", Color.RED, null, null, team, boat, /* timeOnTimeFactor */
|
||||
null, /* timeOnDistanceAllowancePerNauticalMile */null, null);
|
||||
null, /* timeOnDistanceAllowancePerNauticalMile */null, null);
|
||||
competitors.add(competitor);
|
||||
UUID competitorToSuppressUUID = UUID.randomUUID();
|
||||
Set<DynamicPerson> sailors2 = new HashSet<DynamicPerson>();
|
||||
@@ -1879,11 +1893,11 @@ public class MasterDataImportTest {
|
||||
DynamicTeam team2 = new TeamImpl("Noobs", sailors2, coach2);
|
||||
DynamicBoat boat2 = new BoatImpl("456", "LahmeEnte", boatClass, "GER1337");
|
||||
CompetitorImpl competitorToSuppress = new CompetitorImpl(competitorToSuppressUUID, "Merkel", "KYC", Color.RED, null,
|
||||
null, team2, boat2, /* timeOnTimeFactor */null, /* timeOnDistanceAllowancePerNauticalMile */null, null);
|
||||
null, team2, boat2, /* timeOnTimeFactor */null, /* timeOnDistanceAllowancePerNauticalMile */null, null);
|
||||
competitors.add(competitorToSuppress);
|
||||
RaceColumn raceColumn = leaderboard.getRaceColumnByName(raceColumnName);
|
||||
|
||||
TrackedRace trackedRace = new DummyTrackedRace(raceId, competitors, regatta, null, sourceService.getWindStore());
|
||||
TrackedRace trackedRace = new DummyTrackedRace(raceId, createCompetitorsAndBoatsMap(boatClass, competitors), regatta, null, sourceService.getWindStore());
|
||||
|
||||
raceColumn.setTrackedRace(testFleet1, trackedRace);
|
||||
|
||||
@@ -1907,7 +1921,7 @@ public class MasterDataImportTest {
|
||||
// Delete all data above from the database, to allow recreating all of it on target server
|
||||
deleteAllDataFromDatabase();
|
||||
// Import in new service
|
||||
destService = new RacingEventServiceImplMock(new DataImportProgressImpl(randomUUID)){};
|
||||
destService = new RacingEventServiceImplMock(new DataImportProgressImpl(randomUUID)){};
|
||||
domainFactory = destService.getBaseDomainFactory();
|
||||
inputStream = new ByteArrayInputStream(os.toByteArray());
|
||||
|
||||
@@ -1979,7 +1993,7 @@ public class MasterDataImportTest {
|
||||
// Delete all data above from the database, to allow recreating all of it on target server
|
||||
deleteAllDataFromDatabase();
|
||||
// Import in new service
|
||||
destService = new RacingEventServiceImplMock(new DataImportProgressImpl(randomUUID)){};
|
||||
destService = new RacingEventServiceImplMock(new DataImportProgressImpl(randomUUID)){};
|
||||
domainFactory = destService.getBaseDomainFactory();
|
||||
inputStream = new ByteArrayInputStream(os.toByteArray());
|
||||
|
||||
@@ -2020,7 +2034,7 @@ public class MasterDataImportTest {
|
||||
Assert.assertEquals(factor, metaColumn.getFactor());
|
||||
|
||||
// Verify that overall leaderboard data has been persisted
|
||||
RacingEventService persistenceVerifier = new RacingEventServiceImplMock(){};
|
||||
RacingEventService persistenceVerifier = new RacingEventServiceImplMock(){};
|
||||
LeaderboardGroup lg = persistenceVerifier.getLeaderboardGroupByName(TEST_GROUP_NAME);
|
||||
Assert.assertNotNull(lg);
|
||||
overallLeaderboard = (LeaderboardGroupMetaLeaderboard) lg.getOverallLeaderboard();
|
||||
@@ -2063,8 +2077,8 @@ public class MasterDataImportTest {
|
||||
FleetImpl testFleet1 = new FleetImpl(testFleet1Name);
|
||||
fleets.add(testFleet1);
|
||||
fleets.add(new FleetImpl("testFleet2"));
|
||||
seriesOnSource.add(new SeriesImpl("testSeries", false, /* isFleetsCanRunInParallel */ true, fleets, emptyRaceColumnNamesList, sourceService));
|
||||
seriesOnTarget.add(new SeriesImpl("testSeries", false, /* isFleetsCanRunInParallel */ true, fleets, emptyRaceColumnNamesList, sourceService));
|
||||
seriesOnSource.add(new SeriesImpl("testSeries", false, /* isFleetsCanRunInParallel */ true, fleets, emptyRaceColumnNamesList, sourceService));
|
||||
seriesOnTarget.add(new SeriesImpl("testSeries", false, /* isFleetsCanRunInParallel */ true, fleets, emptyRaceColumnNamesList, sourceService));
|
||||
UUID regattaUUID = UUID.randomUUID();
|
||||
Regatta regatta = sourceService.createRegatta(
|
||||
RegattaImpl.getDefaultName(TEST_REGATTA_NAME, TEST_BOAT_CLASS_NAME), TEST_BOAT_CLASS_NAME, /* startDate */
|
||||
@@ -2098,7 +2112,7 @@ public class MasterDataImportTest {
|
||||
BoatClass boatClass = new BoatClassImpl("H16", true);
|
||||
DynamicBoat boat = new BoatImpl("123", "Wingy", boatClass, "GER70133");
|
||||
CompetitorImpl competitor = new CompetitorImpl(competitorUUID, "Froderik", "KYC", Color.RED, null, null, team, boat, /* timeOnTimeFactor */
|
||||
null, /* timeOnDistanceAllowancePerNauticalMile */null, null);
|
||||
null, /* timeOnDistanceAllowancePerNauticalMile */null, null);
|
||||
competitors.add(competitor);
|
||||
UUID competitorToSuppressUUID = UUID.randomUUID();
|
||||
Set<DynamicPerson> sailors2 = new HashSet<DynamicPerson>();
|
||||
@@ -2109,9 +2123,9 @@ public class MasterDataImportTest {
|
||||
DynamicTeam team2 = new TeamImpl("Noobs", sailors2, coach2);
|
||||
DynamicBoat boat2 = new BoatImpl("456", "LahmeEnte", boatClass, "GER1337");
|
||||
CompetitorImpl competitorToSuppress = new CompetitorImpl(competitorToSuppressUUID, "Merkel", "KYC", Color.RED, null,
|
||||
null, team2, boat2, /* timeOnTimeFactor */null, /* timeOnDistanceAllowancePerNauticalMile */null, null);
|
||||
null, team2, boat2, /* timeOnTimeFactor */null, /* timeOnDistanceAllowancePerNauticalMile */null, null);
|
||||
competitors.add(competitorToSuppress);
|
||||
TrackedRace trackedRace = new DummyTrackedRace(raceId, competitors, regatta, null, sourceService.getWindStore());
|
||||
TrackedRace trackedRace = new DummyTrackedRace(raceId, createCompetitorsAndBoatsMap(boatClass, competitors), regatta, null, sourceService.getWindStore());
|
||||
|
||||
leaderboard.addRace(trackedRace, raceColumnName, false);
|
||||
RaceColumn raceColumnOnLeaderboard = leaderboard.getRaceColumnByName(raceColumnName);
|
||||
@@ -2166,7 +2180,7 @@ public class MasterDataImportTest {
|
||||
// Delete all data above from the database, to allow recreating all of it on target server
|
||||
deleteAllDataFromDatabase();
|
||||
// Import in new service
|
||||
destService = new RacingEventServiceImplMock(new DataImportProgressImpl(randomUUID)){};
|
||||
destService = new RacingEventServiceImplMock(new DataImportProgressImpl(randomUUID)){};
|
||||
domainFactory = destService.getBaseDomainFactory();
|
||||
inputStream = new ByteArrayInputStream(os.toByteArray());
|
||||
|
||||
@@ -2199,7 +2213,7 @@ public class MasterDataImportTest {
|
||||
/* startDate */null, /* endDate */null, regattaUUID, seriesOnTarget, true, new LowPoint(),
|
||||
courseAreaUUID, /* useStartTimeInference */true, OneDesignRankingMetric::new);
|
||||
|
||||
raceColumnOnTarget.setTrackedRace(defaultFleetOnTarget, new DummyTrackedRace(raceId, competitors,
|
||||
raceColumnOnTarget.setTrackedRace(defaultFleetOnTarget, new DummyTrackedRace(raceId, createCompetitorsAndBoatsMap(boatClass, competitors),
|
||||
regattaOnTarget, null, sourceService.getWindStore()));
|
||||
|
||||
Assert.assertTrue(leaderboardOnTarget.getScoreCorrection().hasCorrectionFor(raceColumnOnTarget));
|
||||
@@ -2208,7 +2222,7 @@ public class MasterDataImportTest {
|
||||
competitorsCreatedOnTarget.add(competitorOnTarget);
|
||||
|
||||
Assert.assertEquals(defaultFleetOnTarget, leaderboardOnTarget.getFleet(null));
|
||||
TrackedRace trackedRaceForTarget = new DummyTrackedRace(raceId, competitorsCreatedOnTarget, regattaOnTarget,
|
||||
TrackedRace trackedRaceForTarget = new DummyTrackedRace(raceId, createCompetitorsAndBoatsMap(boatClass, competitorsCreatedOnTarget), regattaOnTarget,
|
||||
null, sourceService.getWindStore());
|
||||
|
||||
raceColumnOnTarget.setTrackedRace(defaultFleetOnTarget, trackedRaceForTarget);
|
||||
@@ -2247,7 +2261,7 @@ public class MasterDataImportTest {
|
||||
.getFirstFixAtOrAfter(logTimePoint2)).getWindFix());
|
||||
|
||||
// Check for persisting of race log events:
|
||||
RacingEventService dest2 = new RacingEventServiceImplMock(){};
|
||||
RacingEventService dest2 = new RacingEventServiceImplMock(){};
|
||||
Leaderboard lb2 = dest2.getLeaderboardByName(flexLeaderboardName);
|
||||
RaceColumn raceColumn2 = lb2.getRaceColumns().iterator().next();
|
||||
RaceLog raceLog2 = raceColumn2.getRaceLog(raceColumn2.getFleets().iterator().next());
|
||||
|
||||
+4
-3
@@ -22,6 +22,7 @@ import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RaceLogResolver;
|
||||
import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.BoatClass;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.DomainFactory;
|
||||
@@ -75,9 +76,9 @@ public class RaceTrackerStartStopTest {
|
||||
TrackedRegatta trackedRegatta1 = racingEventService.getOrCreateTrackedRegatta(regatta);
|
||||
racingEventService.getRegattasByName().put(EVENTNAME, regatta);
|
||||
raceTrackerSet = Collections.newSetFromMap(new ConcurrentHashMap<RaceTracker, Boolean>());
|
||||
raceDef1 = new RaceDefinitionImpl(RACENAME1, new CourseImpl("Course1", new ArrayList<Waypoint>()), boatClass, new ArrayList<Competitor>());
|
||||
raceDef2 = new RaceDefinitionImpl(RACENAME2, new CourseImpl("Course2", new ArrayList<Waypoint>()), boatClass, new ArrayList<Competitor>());
|
||||
raceDef3 = new RaceDefinitionImpl(RACENAME3, new CourseImpl("Course3", new ArrayList<Waypoint>()), boatClass, new ArrayList<Competitor>());
|
||||
raceDef1 = new RaceDefinitionImpl(RACENAME1, new CourseImpl("Course1", new ArrayList<Waypoint>()), boatClass, Collections.<Competitor, Boat>emptyMap());
|
||||
raceDef2 = new RaceDefinitionImpl(RACENAME2, new CourseImpl("Course2", new ArrayList<Waypoint>()), boatClass, Collections.<Competitor, Boat>emptyMap());
|
||||
raceDef3 = new RaceDefinitionImpl(RACENAME3, new CourseImpl("Course3", new ArrayList<Waypoint>()), boatClass, Collections.<Competitor, Boat>emptyMap());
|
||||
regatta.addRace(raceDef1);
|
||||
trackedRegatta1.createTrackedRace(raceDef1, Collections.<Sideline> emptyList(),
|
||||
/* windStore */ EmptyWindStore.INSTANCE, /* delayToLiveInMillis */ 0l,
|
||||
|
||||
+21
-19
@@ -20,6 +20,7 @@ import java.util.UUID;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.DomainFactory;
|
||||
import com.sap.sailing.domain.base.Event;
|
||||
@@ -73,6 +74,7 @@ import com.sap.sailing.server.operationaltransformation.RemoveRegatta;
|
||||
import com.sap.sse.common.Color;
|
||||
import com.sap.sse.common.TimePoint;
|
||||
import com.sap.sse.common.Util;
|
||||
import com.sap.sse.common.Util.Pair;
|
||||
import com.sap.sse.common.impl.MillisecondsTimePoint;
|
||||
import com.sap.sse.common.search.KeywordQuery;
|
||||
import com.sap.sse.common.search.Result;
|
||||
@@ -85,12 +87,12 @@ public class SearchServiceTest {
|
||||
private Venue flensburg;
|
||||
private Event pfingstbusch;
|
||||
private Regatta pfingstbusch29er;
|
||||
private Competitor hassoPlattner;
|
||||
private Competitor alexanderRies;
|
||||
private Competitor antonKoch;
|
||||
private Competitor tobiasSchadewaldt;
|
||||
private Competitor philippBuhl;
|
||||
private Competitor dennisGehrlein;
|
||||
private Pair<Competitor,Boat> hassoPlattner;
|
||||
private Pair<Competitor,Boat> alexanderRies;
|
||||
private Pair<Competitor,Boat> antonKoch;
|
||||
private Pair<Competitor,Boat> tobiasSchadewaldt;
|
||||
private Pair<Competitor,Boat> philippBuhl;
|
||||
private Pair<Competitor,Boat> dennisGehrlein;
|
||||
private Regatta pfingstbusch470;
|
||||
private Regatta aalRegatta;
|
||||
private DynamicTrackedRace pfingstbusch29erTrackedR1;
|
||||
@@ -181,18 +183,18 @@ public class SearchServiceTest {
|
||||
/* displayGroupsInReverseOrder */ false, Collections.singletonList(RegattaImpl.getDefaultName("Aalregatta", "ORC")),
|
||||
new int[0], /* overallLeaderboardScoringSchemeType */ null));
|
||||
server.apply(new AddLeaderboardGroupToEvent(aalEvent.getId(), aalLeaderboardGroup.getId()));
|
||||
hassoPlattner = AbstractTracTracLiveTest.createCompetitor("Hasso Plattner");
|
||||
alexanderRies = AbstractTracTracLiveTest.createCompetitor("Alexander Ries");
|
||||
antonKoch = AbstractTracTracLiveTest.createCompetitor("Anton Koch");
|
||||
tobiasSchadewaldt = AbstractTracTracLiveTest.createCompetitor("Tobias Schadewaldt");
|
||||
philippBuhl = AbstractTracTracLiveTest.createCompetitor("Philipp Buhl");
|
||||
dennisGehrlein = AbstractTracTracLiveTest.createCompetitor("Dennis Gehrlein");
|
||||
hassoPlattner = AbstractTracTracLiveTest.createCompetitorAndBoat("Hasso Plattner");
|
||||
alexanderRies = AbstractTracTracLiveTest.createCompetitorAndBoat("Alexander Ries");
|
||||
antonKoch = AbstractTracTracLiveTest.createCompetitorAndBoat("Anton Koch");
|
||||
tobiasSchadewaldt = AbstractTracTracLiveTest.createCompetitorAndBoat("Tobias Schadewaldt");
|
||||
philippBuhl = AbstractTracTracLiveTest.createCompetitorAndBoat("Philipp Buhl");
|
||||
dennisGehrlein = AbstractTracTracLiveTest.createCompetitorAndBoat("Dennis Gehrlein");
|
||||
final RaceDefinitionImpl pfingstbusch29erR1 = new RaceDefinitionImpl("R1", new CourseImpl("up/down", Collections.<Waypoint>emptyList()), pfingstbusch29er.getBoatClass(),
|
||||
Arrays.asList(new Competitor[] { alexanderRies, tobiasSchadewaldt }));
|
||||
AbstractTracTracLiveTest.createCompetitorAndBoatsMap(alexanderRies, tobiasSchadewaldt));
|
||||
final RaceDefinitionImpl pfingstbusch29erR2 = new RaceDefinitionImpl("R2", new CourseImpl("up/down", Collections.<Waypoint>emptyList()), pfingstbusch29er.getBoatClass(),
|
||||
Arrays.asList(new Competitor[] { alexanderRies, tobiasSchadewaldt }));
|
||||
AbstractTracTracLiveTest.createCompetitorAndBoatsMap(alexanderRies, tobiasSchadewaldt));
|
||||
final RaceDefinitionImpl pfingstbusch29erR3 = new RaceDefinitionImpl("R3", new CourseImpl("up/down", Collections.<Waypoint>emptyList()), pfingstbusch29er.getBoatClass(),
|
||||
Arrays.asList(new Competitor[] { alexanderRies, tobiasSchadewaldt }));
|
||||
AbstractTracTracLiveTest.createCompetitorAndBoatsMap(alexanderRies, tobiasSchadewaldt));
|
||||
server.apply(new AddRaceDefinition(pfingstbusch29er.getRegattaIdentifier(), pfingstbusch29erR1));
|
||||
server.apply(new AddRaceDefinition(pfingstbusch29er.getRegattaIdentifier(), pfingstbusch29erR2));
|
||||
server.apply(new AddRaceDefinition(pfingstbusch29er.getRegattaIdentifier(), pfingstbusch29erR3));
|
||||
@@ -206,9 +208,9 @@ public class SearchServiceTest {
|
||||
pfingstbusch29erLeaderboard.getRaceColumnByName("R3").setTrackedRace(pfingstbusch29erLeaderboard.getRaceColumnByName("R3").getFleetByName("Default"), pfingstbusch29erTrackedR3);
|
||||
|
||||
final RaceDefinitionImpl pfingstbush470R1 = new RaceDefinitionImpl("R1", new CourseImpl("up/down", Collections.<Waypoint>emptyList()), pfingstbusch470.getBoatClass(),
|
||||
Arrays.asList(new Competitor[] { philippBuhl, antonKoch }));
|
||||
AbstractTracTracLiveTest.createCompetitorAndBoatsMap(philippBuhl, antonKoch));
|
||||
final RaceDefinitionImpl pfingstbush470R2 = new RaceDefinitionImpl("R2", new CourseImpl("up/down", Collections.<Waypoint>emptyList()), pfingstbusch470.getBoatClass(),
|
||||
Arrays.asList(new Competitor[] { philippBuhl, antonKoch }));
|
||||
AbstractTracTracLiveTest.createCompetitorAndBoatsMap(philippBuhl, antonKoch));
|
||||
server.apply(new AddRaceDefinition(pfingstbusch470.getRegattaIdentifier(), pfingstbush470R1));
|
||||
server.apply(new AddRaceDefinition(pfingstbusch470.getRegattaIdentifier(), pfingstbush470R2));
|
||||
// track only R1 and R2
|
||||
@@ -221,9 +223,9 @@ public class SearchServiceTest {
|
||||
pfingstbusch470Leaderboard.getRaceColumnByName("R2").setTrackedRace(pfingstbusch470Leaderboard.getRaceColumnByName("R2").getFleetByName("Default"), pfingstbusch470TrackedR2);
|
||||
|
||||
final RaceDefinitionImpl aalOrcR1 = new RaceDefinitionImpl("R1", new CourseImpl("up/down", Collections.<Waypoint>emptyList()), aalRegatta.getBoatClass(),
|
||||
Arrays.asList(new Competitor[] { hassoPlattner, dennisGehrlein, philippBuhl }));
|
||||
AbstractTracTracLiveTest.createCompetitorAndBoatsMap(hassoPlattner, dennisGehrlein, philippBuhl));
|
||||
final RaceDefinitionImpl aalOrcR2 = new RaceDefinitionImpl("R2", new CourseImpl("up/down", Collections.<Waypoint>emptyList()), aalRegatta.getBoatClass(),
|
||||
Arrays.asList(new Competitor[] { hassoPlattner, dennisGehrlein, philippBuhl }));
|
||||
AbstractTracTracLiveTest.createCompetitorAndBoatsMap(hassoPlattner, dennisGehrlein, philippBuhl));
|
||||
server.apply(new AddRaceDefinition(aalRegatta.getRegattaIdentifier(), aalOrcR1));
|
||||
server.apply(new AddRaceDefinition(aalRegatta.getRegattaIdentifier(), aalOrcR2));
|
||||
// track only R1 and R2
|
||||
|
||||
+13
-6
@@ -5,8 +5,9 @@ import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.junit.Before;
|
||||
@@ -17,6 +18,7 @@ import com.sap.sailing.domain.abstractlog.impl.LogEventAuthorImpl;
|
||||
import com.sap.sailing.domain.abstractlog.race.RaceLog;
|
||||
import com.sap.sailing.domain.abstractlog.race.RaceLogWindFixEvent;
|
||||
import com.sap.sailing.domain.abstractlog.race.impl.RaceLogWindFixEventImpl;
|
||||
import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.BoatClass;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.DomainFactory;
|
||||
@@ -58,6 +60,7 @@ import com.sap.sailing.server.operationaltransformation.TrackRegatta;
|
||||
import com.sap.sse.common.Color;
|
||||
import com.sap.sse.common.TimePoint;
|
||||
import com.sap.sse.common.Util;
|
||||
import com.sap.sse.common.Util.Pair;
|
||||
import com.sap.sse.common.impl.MillisecondsTimePoint;
|
||||
|
||||
public class WindByRaceLogTest {
|
||||
@@ -79,7 +82,7 @@ public class WindByRaceLogTest {
|
||||
// FIXME use master DomainFactory; see bug 592
|
||||
final DomainFactory masterDomainFactory = service.getBaseDomainFactory();
|
||||
BoatClass boatClass = masterDomainFactory.getOrCreateBoatClass(boatClassName, /* typicallyStartsUpwind */true);
|
||||
Competitor competitor = createCompetitor(masterDomainFactory);
|
||||
Pair<Competitor, Boat> competitorAndBoat = createCompetitorAndBoat(masterDomainFactory, boatClass);
|
||||
int[] discardThreshold = {1, 2};
|
||||
CreateFlexibleLeaderboard createLeaderboardOperation = new CreateFlexibleLeaderboard("Test Leaderboard", "Test", discardThreshold, new LowPoint(), null);
|
||||
service.apply(createLeaderboardOperation);
|
||||
@@ -92,7 +95,9 @@ public class WindByRaceLogTest {
|
||||
Regatta regatta = service.apply(addRegattaOperation);
|
||||
final String raceName = "Test Race";
|
||||
final CourseImpl masterCourse = new CourseImpl("Test Course", new ArrayList<Waypoint>());
|
||||
RaceDefinition race = new RaceDefinitionImpl(raceName, masterCourse, boatClass, Collections.singletonList(competitor));
|
||||
final Map<Competitor, Boat> competitorsAndBoats = new HashMap<>();
|
||||
competitorsAndBoats.put(competitorAndBoat.getA(), competitorAndBoat.getB());
|
||||
RaceDefinition race = new RaceDefinitionImpl(raceName, masterCourse, boatClass, competitorsAndBoats);
|
||||
AddRaceDefinition addRaceOperation = new AddRaceDefinition(new RegattaName(regatta.getName()), race);
|
||||
service.apply(addRaceOperation);
|
||||
masterCourse.addWaypoint(0, masterDomainFactory.createWaypoint(masterDomainFactory.getOrCreateMark("Mark1"), /*passingInstruction*/ null));
|
||||
@@ -104,11 +109,13 @@ public class WindByRaceLogTest {
|
||||
defaultFleet = Util.get(raceColumn.getFleets(), 0);
|
||||
}
|
||||
|
||||
private Competitor createCompetitor(final DomainFactory masterDomainFactory) {
|
||||
return masterDomainFactory.getOrCreateCompetitor("GER 61", "Sailor", "S", Color.RED, "noone@nowhere.de", null, new TeamImpl("Sailor",
|
||||
private Pair<Competitor,Boat> createCompetitorAndBoat(final DomainFactory masterDomainFactory, final BoatClass boatClass) {
|
||||
Competitor competitor = masterDomainFactory.getOrCreateCompetitor("GER 61", "Sailor", "S", Color.RED, "noone@nowhere.de", null, new TeamImpl("Sailor",
|
||||
(List<PersonImpl>) Arrays.asList(new PersonImpl[] { new PersonImpl("Sailor 1", DomainFactory.INSTANCE.getOrCreateNationality("GER"), null, null)}),
|
||||
new PersonImpl("Sailor 2", DomainFactory.INSTANCE.getOrCreateNationality("NED"), null, null)),
|
||||
new BoatImpl("123", "GER 61", DomainFactory.INSTANCE.getOrCreateBoatClass("470", /* typicallyStartsUpwind */ true), "GER 61"), /* timeOnTimeFactor */ null, /* timeOnDistanceAllowanceInSecondsPerNauticalMile */ null, null);
|
||||
new BoatImpl("123", "GER 61", boatClass, "GER 61"), /* timeOnTimeFactor */ null, /* timeOnDistanceAllowanceInSecondsPerNauticalMile */ null, null);
|
||||
Boat boat = masterDomainFactory.getOrCreateBoat(competitor, "GER 61", boatClass, "GER 61", null);
|
||||
return new Pair<Competitor,Boat>(competitor, boat);
|
||||
}
|
||||
|
||||
private void attachTrackedRaceToRaceColumn() {
|
||||
|
||||
+8
-7
@@ -2,13 +2,14 @@ package com.sap.sailing.server.masterdata;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.NavigableSet;
|
||||
import java.util.Set;
|
||||
|
||||
import com.sap.sailing.domain.abstractlog.race.RaceLog;
|
||||
import com.sap.sailing.domain.abstractlog.regatta.RegattaLog;
|
||||
import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.Leg;
|
||||
import com.sap.sailing.domain.base.Mark;
|
||||
@@ -66,17 +67,17 @@ public class DummyTrackedRace extends TrackedRaceWithWindEssentials {
|
||||
private static final long serialVersionUID = -11522605089325440L;
|
||||
private Regatta regatta;
|
||||
|
||||
public DummyTrackedRace(final Serializable raceId, final Iterable<? extends Competitor> competitors, final Regatta regatta, final TrackedRegatta trackedRegatta, final WindStore windStore) {
|
||||
this(competitors, regatta, trackedRegatta, new RaceDefinitionImpl("DummyRace", new CourseImpl("Dummy Course", Collections.<Waypoint>emptyList()),
|
||||
regatta.getBoatClass(), competitors, raceId), windStore);
|
||||
public DummyTrackedRace(final Serializable raceId, final Map<Competitor, Boat> competitorsAndBoats, final Regatta regatta, final TrackedRegatta trackedRegatta, final WindStore windStore) {
|
||||
this(competitorsAndBoats, regatta, trackedRegatta, new RaceDefinitionImpl("DummyRace", new CourseImpl("Dummy Course", Collections.<Waypoint>emptyList()),
|
||||
regatta.getBoatClass(), competitorsAndBoats, raceId), windStore);
|
||||
}
|
||||
|
||||
public DummyTrackedRace(final Iterable<? extends Competitor> competitors, final Regatta regatta, final TrackedRegatta trackedRegatta,
|
||||
public DummyTrackedRace(final Map<Competitor, Boat> competitors, final Regatta regatta, final TrackedRegatta trackedRegatta,
|
||||
RaceDefinition race, WindStore windStore) {
|
||||
super(race, trackedRegatta, windStore, -1);
|
||||
this.regatta = regatta;
|
||||
}
|
||||
public DummyTrackedRace(final Iterable<? extends Competitor> competitors, final Regatta regatta, final TrackedRegatta trackedRegatta,
|
||||
public DummyTrackedRace(final Map<Competitor, Boat> competitors, final Regatta regatta, final TrackedRegatta trackedRegatta,
|
||||
RaceDefinition race) {
|
||||
this(competitors, regatta, trackedRegatta, race, EmptyWindStore.INSTANCE);
|
||||
|
||||
@@ -84,7 +85,7 @@ public class DummyTrackedRace extends TrackedRaceWithWindEssentials {
|
||||
|
||||
public DummyTrackedRace(final String raceName, final Serializable raceId) {
|
||||
super(new RaceDefinitionImpl(raceName, new CourseImpl("Dummy Course", Collections.<Waypoint> emptyList()),
|
||||
/* boatClass */ null, new HashSet<Competitor>(), raceId), null, EmptyWindStore.INSTANCE, -1);
|
||||
/* boatClass */ null, Collections.<Competitor, Boat>emptyMap(), raceId), null, EmptyWindStore.INSTANCE, -1);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user