- 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:
fmittag
2016-08-17 17:01:48 +02:00
parent 07f4f27a40
commit c41346d21c
48 changed files with 565 additions and 349 deletions
@@ -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,
@@ -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);
@@ -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);
@@ -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));
@@ -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);
@@ -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);
@@ -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);
}
@@ -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;
}
@@ -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,
@@ -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);
}
@@ -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,
@@ -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,
@@ -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,
@@ -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 */
@@ -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
@@ -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,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;
@@ -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,
@@ -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;
}
@@ -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);
@@ -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);
@@ -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));
}
@@ -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,
@@ -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);
@@ -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(
@@ -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,
@@ -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,
@@ -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
@@ -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
@@ -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
@@ -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) {
@@ -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;
@@ -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);
}
}
@@ -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
@@ -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()));
@@ -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);
@@ -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);
}
@@ -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));
@@ -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));
@@ -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));
@@ -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());
@@ -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,
@@ -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
@@ -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() {
@@ -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