mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-21 21:25:38 +00:00
Bug 5085: started with adding support for
This commit is contained in:
+6
-1
@@ -2488,8 +2488,13 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
|
||||
dbObject.remove(FieldNames.GATE_RIGHT.name());
|
||||
}
|
||||
Mark rightMark = loadMark(dbRight);
|
||||
String shortName = (String) dbObject.get(FieldNames.CONTROLPOINTWITHTWOMARKS_SHORT_NAME.name());
|
||||
|
||||
if (shortName == null || shortName.isEmpty()) {
|
||||
shortName = controlPointName;
|
||||
}
|
||||
ControlPointWithTwoMarks gate = baseDomainFactory.createControlPointWithTwoMarks(controlPointId, leftMark,
|
||||
rightMark, controlPointName);
|
||||
rightMark, controlPointName, shortName);
|
||||
return gate;
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -102,7 +102,7 @@ public enum FieldNames {
|
||||
RACE_LOG_EVENT_START_TIME, RACE_LOG_EVENT_CLASS, RACE_LOG_EVENT_NEXT_STATUS, RACE_LOG_COURSE_DESIGN, RACE_LOG_COURSE_DESIGNER_MODE, WAYPOINT_ID, WAYPOINT_NAME,
|
||||
WAYPOINT_PASSINGINSTRUCTIONS, CONTROLPOINT, CONTROLPOINT_CLASS, MARK_ID, MARK_COLOR, MARK_NAME, MARK_SHORT_NAME, MARK_PATTERN, MARK_SHAPE, MARK_TYPE,
|
||||
MARK_ORIGINATING_MARK_TEMPLATE_ID, MARK_ORIGINATING_MARK_PROPERTIES_ID, RACE_LOG_COURSE_ORIGINATING_TEMPLATE_ID,
|
||||
CONTROLPOINT_VALUE, CONTROLPOINTWITHTWOMARKS_ID, CONTROLPOINTWITHTWOMARKS_NAME, CONTROLPOINTWITHTWOMARKS_LEFT, CONTROLPOINTWITHTWOMARKS_RIGHT,
|
||||
CONTROLPOINT_VALUE, CONTROLPOINTWITHTWOMARKS_ID, CONTROLPOINTWITHTWOMARKS_NAME, CONTROLPOINTWITHTWOMARKS_SHORT_NAME, CONTROLPOINTWITHTWOMARKS_LEFT, CONTROLPOINTWITHTWOMARKS_RIGHT,
|
||||
RACE_LOG_POSITIONED_COMPETITORS, RACE_LOG_PATHFINDER_ID, RACE_LOG_GATE_LINE_OPENING_TIME, RACE_LOG_GOLF_DOWN_TIME, RACE_LOG_START_PROCEDURE_TYPE,
|
||||
RACE_LOG_PROTEST_START_TIME, RACE_LOG_PROTEST_END_TIME, RACE_LOG_COURSE_DESIGN_NAME, RACE_LOG_REVOKED_EVENT_ID, RACE_LOG_REVOKED_EVENT_TYPE,
|
||||
RACE_LOG_REVOKED_EVENT_SHORT_INFO, RACE_LOG_REVOKED_REASON, RACE_LOG_DEVICE_MAPPING_EVENT_ID,
|
||||
|
||||
+1
@@ -1319,6 +1319,7 @@ public class MongoObjectFactoryImpl implements MongoObjectFactory {
|
||||
Document result = new Document();
|
||||
result.put(FieldNames.CONTROLPOINTWITHTWOMARKS_ID.name(), cpwtm.getId());
|
||||
result.put(FieldNames.CONTROLPOINTWITHTWOMARKS_NAME.name(), cpwtm.getName());
|
||||
result.put(FieldNames.CONTROLPOINTWITHTWOMARKS_SHORT_NAME.name(), cpwtm.getShortName());
|
||||
result.put(FieldNames.CONTROLPOINTWITHTWOMARKS_LEFT.name(), storeMark(cpwtm.getLeft()));
|
||||
result.put(FieldNames.CONTROLPOINTWITHTWOMARKS_RIGHT.name(), storeMark(cpwtm.getRight()));
|
||||
return result;
|
||||
|
||||
+2
@@ -4,4 +4,6 @@ import com.sap.sse.common.NamedWithID;
|
||||
|
||||
public interface ControlPoint extends NamedWithID {
|
||||
Iterable<Mark> getMarks();
|
||||
|
||||
String getShortName();
|
||||
}
|
||||
|
||||
+7
-4
@@ -59,9 +59,10 @@ public interface SharedDomainFactory extends CompetitorFactory, BoatFactory {
|
||||
/**
|
||||
* @param name also uses the name as the gate's ID; if you have a real ID, use {@link #createControlPointWithTwoMarks(Serializable, Mark, Mark, String)} instead
|
||||
*/
|
||||
ControlPointWithTwoMarks createControlPointWithTwoMarks(Mark left, Mark right, String name);
|
||||
ControlPointWithTwoMarks createControlPointWithTwoMarks(Mark left, Mark right, String name, String shortName);
|
||||
|
||||
ControlPointWithTwoMarks createControlPointWithTwoMarks(Serializable id, Mark left, Mark right, String name);
|
||||
ControlPointWithTwoMarks createControlPointWithTwoMarks(Serializable id, Mark left, Mark right, String name,
|
||||
String shortName);
|
||||
|
||||
/**
|
||||
* The waypoint created is weakly cached so that when requested again by
|
||||
@@ -109,9 +110,11 @@ public interface SharedDomainFactory extends CompetitorFactory, BoatFactory {
|
||||
|
||||
Mark getExistingMarkById(Serializable id);
|
||||
|
||||
ControlPointWithTwoMarks getOrCreateControlPointWithTwoMarks(Serializable id, String name, Mark left, Mark right);
|
||||
ControlPointWithTwoMarks getOrCreateControlPointWithTwoMarks(Serializable id, String name, Mark left, Mark right,
|
||||
String shortName);
|
||||
|
||||
ControlPointWithTwoMarks getOrCreateControlPointWithTwoMarks(String id, String name, Mark left, Mark right);
|
||||
ControlPointWithTwoMarks getOrCreateControlPointWithTwoMarks(String id, String name, Mark left, Mark right,
|
||||
String shortName);
|
||||
|
||||
RaceLogResolver getRaceLogResolver();
|
||||
|
||||
|
||||
+9
-3
@@ -13,19 +13,21 @@ public class ControlPointWithTwoMarksImpl implements ControlPointWithTwoMarks {
|
||||
private final Mark right;
|
||||
private final String name;
|
||||
private final Serializable id;
|
||||
private final String shortName;
|
||||
|
||||
/**
|
||||
* @param name also used as ID for the mark; if you have a better ID, use {@link GateImpl(Serializable, Mark, Mark, String)} instead.
|
||||
*/
|
||||
public ControlPointWithTwoMarksImpl(Mark left, Mark right, String name) {
|
||||
this(/* ID */ name, left, right, name);
|
||||
public ControlPointWithTwoMarksImpl(Mark left, Mark right, String name, String shortName) {
|
||||
this(/* ID */ name, left, right, name, shortName);
|
||||
}
|
||||
|
||||
public ControlPointWithTwoMarksImpl(Serializable id, Mark left, Mark right, String name) {
|
||||
public ControlPointWithTwoMarksImpl(Serializable id, Mark left, Mark right, String name, String shortName) {
|
||||
this.id = id;
|
||||
this.left = left;
|
||||
this.right = right;
|
||||
this.name = name;
|
||||
this.shortName = shortName;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -60,4 +62,8 @@ public class ControlPointWithTwoMarksImpl implements ControlPointWithTwoMarks {
|
||||
public Serializable getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public String getShortName() {
|
||||
return shortName;
|
||||
}
|
||||
}
|
||||
|
||||
+11
-8
@@ -212,25 +212,26 @@ public class SharedDomainFactoryImpl implements SharedDomainFactory {
|
||||
}
|
||||
|
||||
@Override
|
||||
public ControlPointWithTwoMarks getOrCreateControlPointWithTwoMarks(Serializable id, String name, Mark left, Mark right) {
|
||||
public ControlPointWithTwoMarks getOrCreateControlPointWithTwoMarks(Serializable id, String name, Mark left,
|
||||
Mark right, String shortName) {
|
||||
final ControlPointWithTwoMarks result;
|
||||
final ControlPointWithTwoMarks fromCache = controlPointWithTwoMarksCache.get(id);
|
||||
if (fromCache != null) {
|
||||
result = fromCache;
|
||||
} else {
|
||||
result = createControlPointWithTwoMarks(id, left, right, name);
|
||||
result = createControlPointWithTwoMarks(id, left, right, name, shortName);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ControlPointWithTwoMarks getOrCreateControlPointWithTwoMarks(
|
||||
String toStringRepresentationOfID, String name, Mark left, Mark right) {
|
||||
String toStringRepresentationOfID, String name, Mark left, Mark right, String shortName) {
|
||||
Serializable id = toStringRepresentationOfID;
|
||||
if (controlPointWithTwoMarksIdCache.containsKey(toStringRepresentationOfID)) {
|
||||
id = controlPointWithTwoMarksIdCache.get(toStringRepresentationOfID);
|
||||
}
|
||||
return getOrCreateControlPointWithTwoMarks(id, name, left, right);
|
||||
return getOrCreateControlPointWithTwoMarks(id, name, left, right, shortName);
|
||||
}
|
||||
|
||||
private void cacheMark(Serializable id, Mark result) {
|
||||
@@ -239,13 +240,15 @@ public class SharedDomainFactoryImpl implements SharedDomainFactory {
|
||||
}
|
||||
|
||||
@Override
|
||||
public ControlPointWithTwoMarks createControlPointWithTwoMarks(Mark left, Mark right, String name) {
|
||||
return createControlPointWithTwoMarks(name, left, right, name);
|
||||
public ControlPointWithTwoMarks createControlPointWithTwoMarks(Mark left, Mark right, String name,
|
||||
String shortName) {
|
||||
return createControlPointWithTwoMarks(name, left, right, name, shortName);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ControlPointWithTwoMarks createControlPointWithTwoMarks(Serializable id, Mark left, Mark right, String name) {
|
||||
ControlPointWithTwoMarks result = new ControlPointWithTwoMarksImpl(id, left, right, name);
|
||||
public ControlPointWithTwoMarks createControlPointWithTwoMarks(Serializable id, Mark left, Mark right, String name,
|
||||
String shortName) {
|
||||
ControlPointWithTwoMarks result = new ControlPointWithTwoMarksImpl(id, left, right, name, shortName);
|
||||
controlPointWithTwoMarksCache.put(id, result);
|
||||
controlPointWithTwoMarksIdCache.put(id.toString(), id);
|
||||
return result;
|
||||
|
||||
+2
-1
@@ -79,7 +79,8 @@ public interface DomainFactory {
|
||||
long delayToLiveInMillis, SwissTimingFactory swissTimingFactory, DomainFactory domainFactory,
|
||||
RaceLogStore raceLogStore, RegattaLogStore regattaLogStore, boolean useInternalMarkPassingAlgorithm, boolean trackWind, boolean correctWindDirectionByMagneticDeclination, String updateURL, String updateUsername, String updatePassword);
|
||||
|
||||
ControlPoint getOrCreateControlPoint(String description, Iterable<Serializable> deviceIds, MarkType markType);
|
||||
ControlPoint getOrCreateControlPoint(String description, Iterable<Serializable> deviceIds, MarkType markType,
|
||||
String shortNameOfGate);
|
||||
|
||||
RaceDefinition createRaceDefinition(Regatta regatta, String swissTimingRaceID, Map<Competitor, Boat> competitorsAndBoats,
|
||||
List<ControlPoint> courseDefinition, String raceName, String raceIdForRaceDefinition,
|
||||
|
||||
+8
-4
@@ -310,7 +310,8 @@ public class DomainFactoryImpl implements DomainFactory {
|
||||
private com.sap.sailing.domain.base.Course createCourse(String courseName, Course course) {
|
||||
List<Waypoint> waypoints = new ArrayList<Waypoint>();
|
||||
for (Mark mark : course.getMarks()) {
|
||||
ControlPoint controlPoint = getOrCreateControlPoint(mark.getDescription(), mark.getDeviceIds(), getMarkType(mark.getMarkType()));
|
||||
ControlPoint controlPoint = getOrCreateControlPoint(mark.getDescription(), mark.getDeviceIds(),
|
||||
getMarkType(mark.getMarkType()), mark.getDescription());
|
||||
Waypoint waypoint = baseDomainFactory.createWaypoint(controlPoint, /* passingInstruction */ PassingInstruction.None);
|
||||
waypoints.add(waypoint);
|
||||
}
|
||||
@@ -332,7 +333,8 @@ public class DomainFactoryImpl implements DomainFactory {
|
||||
}
|
||||
|
||||
@Override
|
||||
public ControlPoint getOrCreateControlPoint(String description, Iterable<Serializable> deviceIds, MarkType markType) {
|
||||
public ControlPoint getOrCreateControlPoint(String description, Iterable<Serializable> deviceIds, MarkType markType,
|
||||
String shortNameOfPotentialGate) {
|
||||
ControlPoint result;
|
||||
synchronized (controlPointCache) {
|
||||
result = controlPointCache.get(deviceIds);
|
||||
@@ -345,7 +347,8 @@ public class DomainFactoryImpl implements DomainFactory {
|
||||
Iterator<Serializable> markNameIter = deviceIds.iterator();
|
||||
final Serializable idLeft = markNameIter.next();
|
||||
final Serializable idRight = markNameIter.next();
|
||||
result = baseDomainFactory.createControlPointWithTwoMarks(getOrCreateMark(idLeft, description), getOrCreateMark(idRight, description), description);
|
||||
result = baseDomainFactory.createControlPointWithTwoMarks(getOrCreateMark(idLeft, description),
|
||||
getOrCreateMark(idRight, description), description, shortNameOfPotentialGate);
|
||||
break;
|
||||
default:
|
||||
throw new RuntimeException(
|
||||
@@ -384,7 +387,8 @@ public class DomainFactoryImpl implements DomainFactory {
|
||||
List<com.sap.sse.common.Util.Pair<com.sap.sailing.domain.base.ControlPoint, PassingInstruction>> newDomainControlPoints = new ArrayList<com.sap.sse.common.Util.Pair<com.sap.sailing.domain.base.ControlPoint, PassingInstruction>>();
|
||||
for (Mark mark : marks) {
|
||||
// TODO bug 1043: propagate the mark names to the waypoint names
|
||||
com.sap.sailing.domain.base.ControlPoint domainControlPoint = getOrCreateControlPoint(mark.getDescription(), mark.getDeviceIds(), getMarkType(mark.getMarkType()));
|
||||
com.sap.sailing.domain.base.ControlPoint domainControlPoint = getOrCreateControlPoint(mark.getDescription(),
|
||||
mark.getDeviceIds(), getMarkType(mark.getMarkType()), mark.getDescription());
|
||||
newDomainControlPoints.add(new com.sap.sse.common.Util.Pair<>(domainControlPoint, PassingInstruction.None));
|
||||
}
|
||||
courseToUpdate.update(newDomainControlPoints, baseDomainFactory);
|
||||
|
||||
+2
-1
@@ -336,7 +336,8 @@ public class SwissTimingReplayToDomainAdapter extends SwissTimingReplayAdapter i
|
||||
if (id2 != null && !id2.trim().isEmpty()) {
|
||||
markNamesAsIds.add(id2.trim());
|
||||
}
|
||||
final ControlPoint controlPoint = domainFactory.getOrCreateControlPoint(name, markNamesAsIds, getMarkType(markType));
|
||||
final ControlPoint controlPoint = domainFactory.getOrCreateControlPoint(name, markNamesAsIds,
|
||||
getMarkType(markType), name);
|
||||
if (index == 0) {
|
||||
currentCourseDefinition = new ArrayList<>();
|
||||
}
|
||||
|
||||
+2
-1
@@ -65,7 +65,8 @@ public class WaypointPositionAndDistanceCacheTest {
|
||||
pinEnd = new MarkImpl("Pin End");
|
||||
startBoat = new MarkImpl("Start Boat");
|
||||
windward = new MarkImpl("Windward");
|
||||
startFinish = new ControlPointWithTwoMarksImpl(UUID.randomUUID(), pinEnd, startBoat, "Start/Finish");
|
||||
startFinish = new ControlPointWithTwoMarksImpl(UUID.randomUUID(), pinEnd, startBoat, "Start/Finish",
|
||||
"Start/Finish");
|
||||
start = new WaypointImpl(startFinish);
|
||||
windwardWaypoint = new WaypointImpl(windward);
|
||||
finish = new WaypointImpl(startFinish);
|
||||
|
||||
+2
-2
@@ -45,10 +45,10 @@ public class StationarySequenceTest extends AbstractCandidateFilterTestSupport {
|
||||
final TimePoint now = MillisecondsTimePoint.now();
|
||||
final Waypoint w3 = new WaypointImpl(new ControlPointWithTwoMarksImpl(
|
||||
UUID.randomUUID(), new MarkImpl(UUID.randomUUID(), "3p"),
|
||||
new MarkImpl(UUID.randomUUID(), "3s"), "Leeward Gate"));
|
||||
new MarkImpl(UUID.randomUUID(), "3s"), "Leeward Gate", "Leeward Gate"));
|
||||
final Waypoint w5 = new WaypointImpl(new ControlPointWithTwoMarksImpl(
|
||||
UUID.randomUUID(), new MarkImpl(UUID.randomUUID(), "Committee Boat"),
|
||||
new MarkImpl(UUID.randomUUID(), "Pin"), "Start/Finish"));
|
||||
new MarkImpl(UUID.randomUUID(), "Pin"), "Start/Finish", "Start/Finish"));
|
||||
c1 = candidate(now, "c1", w3);
|
||||
c2 = candidate(c1.getTimePoint().plus(Duration.ONE_SECOND.times(10)), "c2", w5);
|
||||
c3 = candidate(c2.getTimePoint().plus(Duration.ONE_SECOND.times(10)), "c3", w3);
|
||||
|
||||
+1
-1
@@ -109,7 +109,7 @@ public class TestFarthestAheadWithSkippedMarkPassing {
|
||||
// create a two-lap upwind/downwind course:
|
||||
MarkImpl left = new MarkImpl("Left lee gate buoy");
|
||||
MarkImpl right = new MarkImpl("Right lee gate buoy");
|
||||
ControlPoint leeGate = new ControlPointWithTwoMarksImpl(left, right, "Lee Gate");
|
||||
ControlPoint leeGate = new ControlPointWithTwoMarksImpl(left, right, "Lee Gate", "Lee Gate");
|
||||
Mark windwardMark = new MarkImpl("Windward mark");
|
||||
start = new WaypointImpl(leeGate);
|
||||
waypoints.add(start);
|
||||
|
||||
+1
-1
@@ -90,7 +90,7 @@ public class TestSimpleTimeOnTimeRankingWithOneUpwindLeg {
|
||||
// create a two-lap upwind/downwind course:
|
||||
MarkImpl left = new MarkImpl("Left lee gate buoy");
|
||||
MarkImpl right = new MarkImpl("Right lee gate buoy");
|
||||
ControlPoint leeGate = new ControlPointWithTwoMarksImpl(left, right, "Lee Gate");
|
||||
ControlPoint leeGate = new ControlPointWithTwoMarksImpl(left, right, "Lee Gate", "Lee Gate");
|
||||
Mark windwardMark = new MarkImpl("Windward mark");
|
||||
waypoints.add(new WaypointImpl(leeGate));
|
||||
waypoints.add(new WaypointImpl(windwardMark));
|
||||
|
||||
@@ -207,17 +207,20 @@ public class CourseTest {
|
||||
@Test
|
||||
public void testWaypointDeleteWithSubsequentInsertInOnePatch() throws PatchFailedException {
|
||||
List<Waypoint> waypoints = new ArrayList<Waypoint>();
|
||||
final WaypointImpl rcBlackConical = new WaypointImpl(new ControlPointWithTwoMarksImpl(new MarkImpl("RC"), new MarkImpl("Black Conical"), "RC-Black Conical"));
|
||||
final WaypointImpl rcBlackConical = new WaypointImpl(new ControlPointWithTwoMarksImpl(new MarkImpl("RC"),
|
||||
new MarkImpl("Black Conical"), "RC-Black Conical", "RC-Black Conical"));
|
||||
waypoints.add(rcBlackConical);
|
||||
final WaypointImpl orange = new WaypointImpl(new MarkImpl("Orange"));
|
||||
waypoints.add(orange);
|
||||
final WaypointImpl whiteGate = new WaypointImpl(new ControlPointWithTwoMarksImpl(new MarkImpl("White L"), new MarkImpl("White R"), "White Gate"));
|
||||
final WaypointImpl whiteGate = new WaypointImpl(new ControlPointWithTwoMarksImpl(new MarkImpl("White L"),
|
||||
new MarkImpl("White R"), "White Gate", "White Gate"));
|
||||
waypoints.add(whiteGate);
|
||||
final WaypointImpl red = new WaypointImpl(new MarkImpl("Red"));
|
||||
waypoints.add(red);
|
||||
final WaypointImpl yellow = new WaypointImpl(new MarkImpl("Yellow"));
|
||||
waypoints.add(yellow);
|
||||
final WaypointImpl finishPoleCylinder = new WaypointImpl(new ControlPointWithTwoMarksImpl(new MarkImpl("Finish Pole"), new MarkImpl("Cylinder"), "Finish Pole-Cylinder"));
|
||||
final WaypointImpl finishPoleCylinder = new WaypointImpl(new ControlPointWithTwoMarksImpl(
|
||||
new MarkImpl("Finish Pole"), new MarkImpl("Cylinder"), "Finish Pole-Cylinder", "Finish Pole-Cylinder"));
|
||||
waypoints.add(finishPoleCylinder);
|
||||
Course course = new CourseImpl("Race 24", waypoints);
|
||||
assertWaypointIndexes(course);
|
||||
|
||||
+5
-2
@@ -66,6 +66,7 @@ import com.sap.sailing.domain.leaderboard.impl.HighPointFirstGets10Or8AndLastBre
|
||||
import com.sap.sailing.domain.leaderboard.impl.HighPointFirstGets12Or8AndLastBreaksTie2017;
|
||||
import com.sap.sailing.domain.leaderboard.impl.LeaderboardGroupImpl;
|
||||
import com.sap.sailing.domain.leaderboard.impl.LowPoint;
|
||||
import com.sap.sailing.domain.leaderboard.impl.LowPointTieBreakBasedOnLastSeriesOnly;
|
||||
import com.sap.sailing.domain.leaderboard.impl.ThresholdBasedResultDiscardingRuleImpl;
|
||||
import com.sap.sailing.domain.leaderboard.meta.LeaderboardGroupMetaLeaderboard;
|
||||
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
|
||||
@@ -2404,8 +2405,10 @@ public class LeaderboardScoringAndRankingTest extends LeaderboardScoringAndRanki
|
||||
final TimePoint startOfR1 = withinR1.minus(10000);
|
||||
final TimePoint beforeStartOfR1 = startOfR1.minus(10000);
|
||||
final TimePoint afterEndOfR1 = endOfR1.plus(1000);
|
||||
final Waypoint start = new WaypointImpl(new ControlPointWithTwoMarksImpl(new MarkImpl("Start Pin End"), new MarkImpl("Start Committee Boat"), "Start"));
|
||||
final Waypoint finish = new WaypointImpl(new ControlPointWithTwoMarksImpl(new MarkImpl("Finish Pin End"), new MarkImpl("Finish Committee Boat"), "Finish"));
|
||||
final Waypoint start = new WaypointImpl(new ControlPointWithTwoMarksImpl(new MarkImpl("Start Pin End"),
|
||||
new MarkImpl("Start Committee Boat"), "Start", "Start"));
|
||||
final Waypoint finish = new WaypointImpl(new ControlPointWithTwoMarksImpl(new MarkImpl("Finish Pin End"),
|
||||
new MarkImpl("Finish Committee Boat"), "Finish", "Finish"));
|
||||
FlexibleLeaderboard leaderboard1 = new FlexibleLeaderboardImpl("Leaderboard 1", new ThresholdBasedResultDiscardingRuleImpl(/* discarding thresholds */ new int[0]),
|
||||
new LowPoint(), null);
|
||||
final MockedTrackedRaceWithStartTimeAndRanks trackedRace = new MockedTrackedRaceWithStartTimeAndRanks(startOfR1, Arrays.asList(f1)) {
|
||||
|
||||
+2
-1
@@ -89,7 +89,8 @@ public class LeaderboardScoringAndRankingTestBase extends AbstractLeaderboardTes
|
||||
for (Competitor[] competitorList : competitorLists) {
|
||||
RaceColumn raceColumn = columnIter.next();
|
||||
final Map<Competitor, TimePoint> lastMarkPassingTimes = lastMarkPassingTimesForCompetitors[i];
|
||||
final Waypoint start = new WaypointImpl(new ControlPointWithTwoMarksImpl(new MarkImpl("Left StartBuoy"), new MarkImpl("Right StartBuoy"), "Start"));
|
||||
final Waypoint start = new WaypointImpl(new ControlPointWithTwoMarksImpl(new MarkImpl("Left StartBuoy"),
|
||||
new MarkImpl("Right StartBuoy"), "Start", "Start"));
|
||||
final Waypoint finish = new WaypointImpl(new MarkImpl("FinishBuoy"));
|
||||
TrackedRace trackedRace = new MockedTrackedRaceWithStartTimeAndRanks(startTimes[i], Arrays.asList(competitorList)) {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
+1
-1
@@ -105,7 +105,7 @@ public class ReachingLegTest extends TrackBasedTest {
|
||||
// create a two-lap upwind/downwind course:
|
||||
MarkImpl left = new MarkImpl("Left lee gate buoy");
|
||||
MarkImpl right = new MarkImpl("Right lee gate buoy");
|
||||
ControlPoint leeGate = new ControlPointWithTwoMarksImpl(left, right, "Lee Gate");
|
||||
ControlPoint leeGate = new ControlPointWithTwoMarksImpl(left, right, "Lee Gate", "Lee Gate");
|
||||
Mark windwardMark = new MarkImpl("Windward mark");
|
||||
Mark offsetMark = new MarkImpl("Offset mark");
|
||||
waypoints.add(new WaypointImpl(leeGate));
|
||||
|
||||
+1
-1
@@ -171,7 +171,7 @@ public abstract class TrackBasedTest {
|
||||
// create a two-lap upwind/downwind course:
|
||||
MarkImpl left = new MarkImpl("Left lee gate buoy");
|
||||
MarkImpl right = new MarkImpl("Right lee gate buoy");
|
||||
ControlPoint leeGate = new ControlPointWithTwoMarksImpl(left, right, "Lee Gate");
|
||||
ControlPoint leeGate = new ControlPointWithTwoMarksImpl(left, right, "Lee Gate", "Lee Gate");
|
||||
Mark windwardMark = new MarkImpl("Windward mark");
|
||||
waypoints.add(new WaypointImpl(leeGate));
|
||||
waypoints.add(new WaypointImpl(windwardMark));
|
||||
|
||||
@@ -288,7 +288,8 @@ public class WindTest {
|
||||
DomainFactory domainFactory = DomainFactory.INSTANCE;
|
||||
Mark startFinishLeft = domainFactory.getOrCreateMark("Start/Finish left");
|
||||
Mark startFinishRight = domainFactory.getOrCreateMark("Start/Finish right");
|
||||
ControlPoint startFinish = domainFactory.createControlPointWithTwoMarks(startFinishLeft, startFinishRight, "Start/Finish");
|
||||
ControlPoint startFinish = domainFactory.createControlPointWithTwoMarks(startFinishLeft, startFinishRight,
|
||||
"Start/Finish", "Start/Finish");
|
||||
ControlPoint top = domainFactory.getOrCreateMark("Top");
|
||||
Waypoint w1 = domainFactory.createWaypoint(startFinish, /*passingInstruction*/ null);
|
||||
Waypoint w2 = domainFactory.createWaypoint(top, /*passingInstruction*/ null);
|
||||
|
||||
+1
-1
@@ -66,7 +66,7 @@ public class AbstractMockedRaceMarkPassingTest {
|
||||
protected DynamicTrackedRace race;
|
||||
|
||||
public AbstractMockedRaceMarkPassingTest() {
|
||||
ControlPointWithTwoMarks cp = new ControlPointWithTwoMarksImpl(gate1, gate2, "cp");
|
||||
ControlPointWithTwoMarks cp = new ControlPointWithTwoMarksImpl(gate1, gate2, "cp", "");
|
||||
Waypoint w1 = new WaypointImpl(cp, PassingInstruction.Line);
|
||||
Waypoint w2 = new WaypointImpl(m, PassingInstruction.Port);
|
||||
Waypoint w3 = new WaypointImpl(cp, PassingInstruction.Gate);
|
||||
|
||||
+4
-2
@@ -61,8 +61,10 @@ public class MarkPassingCalculatorWithTrackersOnStartBoatTest extends AbstractEx
|
||||
@Override
|
||||
protected Course createCourse(Map<String, Mark> marksByName) {
|
||||
final Map<String, ControlPoint> controlPoints = new HashMap<>(marksByName);
|
||||
controlPoints.put("Start/Ziel", new ControlPointWithTwoMarksImpl(marksByName.get("G2"), marksByName.get("MEU"), "Start/Ziel"));
|
||||
controlPoints.put("Gate", new ControlPointWithTwoMarksImpl(marksByName.get("G1"), marksByName.get("G2"), "Gate"));
|
||||
controlPoints.put("Start/Ziel", new ControlPointWithTwoMarksImpl(marksByName.get("G2"), marksByName.get("MEU"),
|
||||
"Start/Ziel", "Start/Ziel"));
|
||||
controlPoints.put("Gate",
|
||||
new ControlPointWithTwoMarksImpl(marksByName.get("G1"), marksByName.get("G2"), "Gate", "Gate"));
|
||||
return createCourse(controlPoints,
|
||||
wp(controlPoints, "Start/Ziel", PassingInstruction.Line),
|
||||
wp(controlPoints, "LUV", PassingInstruction.Port),
|
||||
|
||||
+2
-1
@@ -228,7 +228,8 @@ public class DomainFactoryImpl implements DomainFactory {
|
||||
Iterator<Mark> markIter = marks.iterator();
|
||||
Mark mark1 = markIter.next();
|
||||
Mark mark2 = markIter.next();
|
||||
domainControlPoint = baseDomainFactory.createControlPointWithTwoMarks(controlPoint.getId(), mark1, mark2, controlPoint.getName());
|
||||
domainControlPoint = baseDomainFactory.createControlPointWithTwoMarks(controlPoint.getId(), mark1,
|
||||
mark2, controlPoint.getName(), controlPoint.getShortName());
|
||||
} else {
|
||||
Mark mark = marks.iterator().next();
|
||||
domainControlPoint = mark;
|
||||
|
||||
+11
-3
@@ -24,6 +24,7 @@ import com.sap.sse.gwt.client.dialog.DataEntryDialog;
|
||||
public class GateCreationDialog extends DataEntryDialog<GateDTO> {
|
||||
private final MarkTableWrapper<RefreshableMultiSelectionModel<MarkDTO>> marksWrapper;
|
||||
private final TextBox name;
|
||||
private final TextBox shortName;
|
||||
private final StringMessages stringMessages;
|
||||
|
||||
public GateCreationDialog(SailingServiceAsync sailingService, ErrorReporter errorReporter,
|
||||
@@ -43,6 +44,7 @@ public class GateCreationDialog extends DataEntryDialog<GateDTO> {
|
||||
}, /* animationEnabled */ false, callback);
|
||||
this.stringMessages = stringMessages;
|
||||
name = createTextBox("");
|
||||
shortName = createTextBox("");
|
||||
marksWrapper = new MarkTableWrapper<RefreshableMultiSelectionModel<MarkDTO>>(
|
||||
/* multiSelection */ true, sailingService, stringMessages, errorReporter);
|
||||
marksWrapper.getDataProvider().getList().addAll(marks);
|
||||
@@ -63,19 +65,25 @@ public class GateCreationDialog extends DataEntryDialog<GateDTO> {
|
||||
Iterator<MarkDTO> i = marksWrapper.getSelectionModel().getSelectedSet().iterator();
|
||||
MarkDTO first = i.next();
|
||||
MarkDTO second = i.next();
|
||||
controlPoint = new GateDTO(UUID.randomUUID().toString(), name.getText(), first, second);
|
||||
controlPoint = new GateDTO(UUID.randomUUID().toString(), name.getText(), first, second,
|
||||
shortName.getText());
|
||||
}
|
||||
return controlPoint;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Widget getAdditionalWidget() {
|
||||
Grid grid = new Grid(2,1);
|
||||
Grid grid = new Grid(3, 1);
|
||||
HorizontalPanel nameRow = new HorizontalPanel();
|
||||
nameRow.add(new Label(stringMessages.name()));
|
||||
nameRow.add(name);
|
||||
|
||||
HorizontalPanel shortnameRow = new HorizontalPanel();
|
||||
shortnameRow.add(new Label(stringMessages.shortName()));
|
||||
shortnameRow.add(shortName);
|
||||
grid.setWidget(0, 0, nameRow);
|
||||
grid.setWidget(1, 0, marksWrapper);
|
||||
grid.setWidget(1, 0, shortnameRow);
|
||||
grid.setWidget(2, 0, marksWrapper);
|
||||
return grid;
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -110,7 +110,7 @@ public class MarkEditDialog extends DataEntryDialog<MarkDTO> {
|
||||
|
||||
@Override
|
||||
protected Widget getAdditionalWidget() {
|
||||
Grid result = new Grid(6, 4);
|
||||
Grid result = new Grid(7, 4);
|
||||
result.setWidget(0, 0, new Label(stringMessages.name()));
|
||||
result.setWidget(0, 1, name);
|
||||
result.setWidget(1, 0, new Label(stringMessages.shortName()));
|
||||
|
||||
+4
-2
@@ -2537,7 +2537,8 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet
|
||||
final Position leftPos = positionFinder.find(left, timePoint);
|
||||
final Mark right = ((ControlPointWithTwoMarks) controlPoint).getRight();
|
||||
final Position rightPos = positionFinder.find(right, timePoint);
|
||||
result = new GateDTO(controlPoint.getId().toString(), controlPoint.getName(), convertToMarkDTO(left, leftPos), convertToMarkDTO(right, rightPos));
|
||||
result = new GateDTO(controlPoint.getId().toString(), controlPoint.getName(),
|
||||
convertToMarkDTO(left, leftPos), convertToMarkDTO(right, rightPos), controlPoint.getShortName());
|
||||
} else {
|
||||
Mark mark = controlPoint.getMarks().iterator().next();
|
||||
final Position position = positionFinder.find(mark, timePoint);
|
||||
@@ -2555,7 +2556,8 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet
|
||||
GateDTO gateDTO = (GateDTO) dto;
|
||||
Mark left = (Mark) getOrCreateControlPoint(gateDTO.getLeft());
|
||||
Mark right = (Mark) getOrCreateControlPoint(gateDTO.getRight());
|
||||
return baseDomainFactory.getOrCreateControlPointWithTwoMarks(idAsString, gateDTO.getName(), left, right);
|
||||
return baseDomainFactory.getOrCreateControlPointWithTwoMarks(idAsString, gateDTO.getName(), left, right,
|
||||
gateDTO.getShortName());
|
||||
} else {
|
||||
MarkDTO markDTO = (MarkDTO) dto;
|
||||
return baseDomainFactory.getOrCreateMark(idAsString, dto.getName(), markDTO.getShortName(), markDTO.type, markDTO.color, markDTO.shape, markDTO.pattern);
|
||||
|
||||
+7
-1
@@ -12,18 +12,24 @@ import com.sap.sse.security.shared.dto.NamedDTO;
|
||||
public abstract class ControlPointDTO extends NamedDTO {
|
||||
private static final long serialVersionUID = 2321067329143412902L;
|
||||
private String idAsString;
|
||||
private String shortName;
|
||||
|
||||
public ControlPointDTO() {}
|
||||
|
||||
public ControlPointDTO(String idAsString, String name) {
|
||||
public ControlPointDTO(String idAsString, String name, String shortName) {
|
||||
super(name);
|
||||
this.idAsString = idAsString;
|
||||
this.shortName = shortName;
|
||||
}
|
||||
|
||||
public String getIdAsString() {
|
||||
return idAsString;
|
||||
}
|
||||
|
||||
public String getShortName() {
|
||||
return shortName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
return this == o;
|
||||
|
||||
+2
-2
@@ -9,8 +9,8 @@ public class GateDTO extends ControlPointDTO {
|
||||
|
||||
public GateDTO() {}
|
||||
|
||||
public GateDTO(String idAsString, String name, MarkDTO left, MarkDTO right) {
|
||||
super(idAsString, name);
|
||||
public GateDTO(String idAsString, String name, MarkDTO left, MarkDTO right, String shortName) {
|
||||
super(idAsString, name, shortName);
|
||||
this.left = left;
|
||||
this.right = right;
|
||||
}
|
||||
|
||||
+2
-2
@@ -20,13 +20,13 @@ public class MarkDTO extends ControlPointDTO implements MappableToDevice {
|
||||
MarkDTO() {}
|
||||
|
||||
public MarkDTO(String idAsString, String name, String shortName, double latDeg, double lngDeg) {
|
||||
super(idAsString, name);
|
||||
super(idAsString, name, shortName);
|
||||
this.shortName = shortName;
|
||||
this.position = new DegreePosition(latDeg, lngDeg);
|
||||
}
|
||||
|
||||
public MarkDTO(String idAsString, String name, String shortName) {
|
||||
super(idAsString, name);
|
||||
super(idAsString, name, shortName);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+2
-1
@@ -103,7 +103,8 @@ public abstract class RaceLogMongoDBTest extends AbstractMongoDBTest {
|
||||
course.addWaypoint(0,
|
||||
new WaypointImpl(new ControlPointWithTwoMarksImpl(UUID.randomUUID(), new MarkImpl(UUID.randomUUID(),
|
||||
"Black", MarkType.BUOY, AbstractColor.getCssColor("black"), "round", "circle"), new MarkImpl(UUID.randomUUID(), "Green",
|
||||
MarkType.BUOY, AbstractColor.getCssColor("green"), "round", "circle"), "Upper gate")));
|
||||
MarkType.BUOY, AbstractColor.getCssColor("green"), "round", "circle"),
|
||||
"Upper gate", "Upper gate")));
|
||||
course.addWaypoint(1, new WaypointImpl(new MarkImpl(UUID.randomUUID(), "White", MarkType.BUOY, AbstractColor.getCssColor("white"),
|
||||
"conical", "bold"), PassingInstruction.Port));
|
||||
|
||||
|
||||
+3
-1
@@ -31,7 +31,9 @@ public class GateDeserializer implements JsonDeserializer<ControlPointWithTwoMar
|
||||
Mark leftMark = markDeserializer.deserialize(jsonLeftMark);
|
||||
Mark rightMark = markDeserializer.deserialize(jsonRightMark);
|
||||
String gateName = (String) object.get(BaseControlPointJsonSerializer.FIELD_NAME);
|
||||
ControlPointWithTwoMarks controlPoint = factory.createControlPointWithTwoMarks(leftMark, rightMark, gateName);
|
||||
String gateShortName = (String) object.get(BaseControlPointJsonSerializer.FIELD_SHORT_NAME);
|
||||
ControlPointWithTwoMarks controlPoint = factory.createControlPointWithTwoMarks(leftMark, rightMark, gateName,
|
||||
gateShortName);
|
||||
return controlPoint;
|
||||
}
|
||||
|
||||
|
||||
+2
@@ -8,6 +8,7 @@ import com.sap.sailing.server.gateway.serialization.JsonSerializer;
|
||||
public abstract class BaseControlPointJsonSerializer implements JsonSerializer<ControlPoint> {
|
||||
public static final String FIELD_CLASS = "@class";
|
||||
public static final String FIELD_NAME = "name";
|
||||
public static final String FIELD_SHORT_NAME = "shortName";
|
||||
|
||||
protected abstract String getClassFieldValue();
|
||||
|
||||
@@ -16,6 +17,7 @@ public abstract class BaseControlPointJsonSerializer implements JsonSerializer<C
|
||||
JSONObject result = new JSONObject();
|
||||
result.put(FIELD_CLASS, getClassFieldValue());
|
||||
result.put(FIELD_NAME, object.getName());
|
||||
result.put(FIELD_SHORT_NAME, object.getShortName());
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
+3
-3
@@ -5,6 +5,7 @@ import static org.junit.Assert.assertEquals;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.json.simple.JSONObject;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
@@ -44,8 +45,6 @@ import com.sap.sse.common.Util;
|
||||
import com.sap.sse.common.impl.AbstractColor;
|
||||
import com.sap.sse.common.impl.MillisecondsTimePoint;
|
||||
|
||||
import org.junit.Assert;
|
||||
|
||||
public class RaceLogCourseDesignChangedEventSerializerTest {
|
||||
|
||||
private RaceLogCourseDesignChangedEventSerializer serializer;
|
||||
@@ -89,7 +88,8 @@ public class RaceLogCourseDesignChangedEventSerializerTest {
|
||||
|
||||
course.addWaypoint(0, new WaypointImpl(new ControlPointWithTwoMarksImpl(UUID.randomUUID(), new MarkImpl(UUID.randomUUID(), "Black",
|
||||
MarkType.BUOY, AbstractColor.getCssColor("black"), "round", "circle"), new MarkImpl(UUID.randomUUID(), "Green", MarkType.BUOY,
|
||||
AbstractColor.getCssColor("green"), "round", "circle"), "Upper gate")));
|
||||
AbstractColor.getCssColor("green"), "round", "circle"),
|
||||
"Upper gate", "Upper gate")));
|
||||
course.addWaypoint(1, new WaypointImpl(new MarkImpl(UUID.randomUUID(), "White", MarkType.BUOY, AbstractColor.getCssColor("white"),
|
||||
"conical", "bold"), PassingInstruction.Port));
|
||||
|
||||
|
||||
+2
-1
@@ -866,7 +866,8 @@ public class LeaderboardsResource extends AbstractLeaderboardsResource {
|
||||
getRaceLogTrackingAdapter().pingMark(regattaLog, pinEnd, new GPSFixImpl(pinEndPosition, timePointForMarkFixes), getService());
|
||||
// TODO identify existing automatically-created equal-named marks and re-use. The "Auto..." pattern should be sufficiently unique for this application
|
||||
final ControlPoint startLineControlPoint = getService().getBaseDomainFactory().getOrCreateControlPointWithTwoMarks(
|
||||
UUID.randomUUID(), "Auto "+waypointName+" Line", pinEnd, startBoat);
|
||||
UUID.randomUUID(), "Auto " + waypointName + " Line", pinEnd, startBoat,
|
||||
"Auto " + waypointName + " Line");
|
||||
result = getService().getBaseDomainFactory().createWaypoint(startLineControlPoint, PassingInstruction.Line);
|
||||
} else {
|
||||
result = null;
|
||||
|
||||
+5
-3
@@ -84,6 +84,7 @@ public class MarkResource extends AbstractSailingServerResource {
|
||||
private static final String MARK_NAME = "markName";
|
||||
private static final String MARK_SHORT_NAME = "markShortName";
|
||||
private static final String CONTROL_POINT_NAME = "controlPointName";
|
||||
private static final String CONTROL_POINT_SHORT_NAME = "controlPointShortName";
|
||||
private static final String ORIGINATING_MARK_TEMPLATE_ID = "originatingMarkTemplateId";
|
||||
private static final String ORIGINATING_MARK_PROPERTIES_ID = "originatingMarkPropertiesId";
|
||||
private static final String ORIGINATING_COURSE_TEMPLATE_ID = "originatingCourseTemplateId";
|
||||
@@ -236,9 +237,10 @@ public class MarkResource extends AbstractSailingServerResource {
|
||||
if (controlPointName == null || controlPointName.isEmpty()) {
|
||||
controlPointName = markA.getName() + "-" + markB.getName();
|
||||
}
|
||||
controlPoints.add(new Pair<>(
|
||||
new ControlPointWithTwoMarksImpl(markA, markB, controlPointName),
|
||||
passing));
|
||||
|
||||
String shortName = (String) controlPointRaw.get(CONTROL_POINT_SHORT_NAME);
|
||||
controlPoints.add(new Pair<>(new ControlPointWithTwoMarksImpl(markA, markB, controlPointName,
|
||||
shortName == null ? controlPointName : shortName), passing));
|
||||
}
|
||||
}
|
||||
Course course = new CourseImpl(courseName, lastPublishedCourse.getWaypoints(), originatingCourseTemplateId);
|
||||
|
||||
+2
-1
@@ -166,7 +166,8 @@ public class ExpeditionCourseInferrer {
|
||||
final Mark portMark, final Mark starboardMark) {
|
||||
logger.info("Creating start line in tracked race "+trackedRace.getRace().getName());
|
||||
final ControlPoint startLine = racingEventService.getBaseDomainFactory().getOrCreateControlPointWithTwoMarks(
|
||||
UUID.randomUUID(), START_LINE_CONTROL_POINT_NAME, portMark, starboardMark);
|
||||
UUID.randomUUID(), START_LINE_CONTROL_POINT_NAME, portMark, starboardMark,
|
||||
START_LINE_CONTROL_POINT_NAME);
|
||||
final CourseBase course = new CourseDataImpl("Auto-Course "+trackedRace.getRace().getName());
|
||||
course.addWaypoint(0, new WaypointImpl(startLine, PassingInstruction.Line));
|
||||
final RaceLog raceLog = trackedRace.getAttachedRaceLogs().iterator().next();
|
||||
|
||||
+1
-2
@@ -7,7 +7,6 @@ import java.io.IOException;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.junit.Assert;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
@@ -272,7 +271,7 @@ public class RaceLogReplicationTest extends AbstractLogReplicationTest<RaceLog,
|
||||
course.addWaypoint(0, new WaypointImpl(new ControlPointWithTwoMarksImpl(UUID.randomUUID(),
|
||||
new MarkImpl(UUID.randomUUID(), "Black", MarkType.BUOY, AbstractColor.getCssColor("black"), "round", "circle"),
|
||||
new MarkImpl(UUID.randomUUID(), "Green", MarkType.BUOY, AbstractColor.getCssColor("green"), "round", "circle"),
|
||||
"Upper gate")));
|
||||
"Upper gate", "Upper gate")));
|
||||
course.addWaypoint(1, new WaypointImpl(new MarkImpl(UUID.randomUUID(), "White", MarkType.BUOY, AbstractColor.getCssColor("white"), "conical", "bold"), PassingInstruction.Port));
|
||||
|
||||
return course;
|
||||
|
||||
+1
-1
@@ -62,7 +62,7 @@ public class StatisticsTest {
|
||||
private final Mark mark1 = DomainFactory.INSTANCE.getOrCreateMark("mark1");
|
||||
private final Mark mark2 = DomainFactory.INSTANCE.getOrCreateMark("mark2");
|
||||
private final Mark mark3 = DomainFactory.INSTANCE.getOrCreateMark("mark3");
|
||||
private final ControlPoint gate = new ControlPointWithTwoMarksImpl(mark1, mark2, "gate");
|
||||
private final ControlPoint gate = new ControlPointWithTwoMarksImpl(mark1, mark2, "gate", "gate");
|
||||
private final Waypoint waypoint1 = new WaypointImpl(gate);
|
||||
private final Waypoint waypoint2 = new WaypointImpl(mark3);
|
||||
private final Waypoint waypoint3 = new WaypointImpl(gate);
|
||||
|
||||
+2
-1
@@ -120,7 +120,8 @@ public class ApplyScoresFromRaceLogTest extends LeaderboardScoringAndRankingTest
|
||||
final Mark startboat = new MarkImpl("StartBoat");
|
||||
final Mark pin = new MarkImpl("Pin");
|
||||
final Mark windward = new MarkImpl("Windward");
|
||||
final ControlPointWithTwoMarks startFinish = new ControlPointWithTwoMarksImpl(pin, startboat, "Start/Finish");
|
||||
final ControlPointWithTwoMarks startFinish = new ControlPointWithTwoMarksImpl(pin, startboat, "Start/Finish",
|
||||
"Start/Finish");
|
||||
final WaypointImpl start = new WaypointImpl(startFinish, PassingInstruction.Line);
|
||||
final WaypointImpl ww = new WaypointImpl(windward, PassingInstruction.Port);
|
||||
final WaypointImpl finish = new WaypointImpl(startFinish, PassingInstruction.Line);
|
||||
|
||||
Reference in New Issue
Block a user