diff --git a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/AbstractSailNumberCanonicalizerAndMatcher.java b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/AbstractSailNumberCanonicalizerAndMatcher.java index 63f63374c64..ea776a5201c 100755 --- a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/AbstractSailNumberCanonicalizerAndMatcher.java +++ b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/AbstractSailNumberCanonicalizerAndMatcher.java @@ -109,6 +109,11 @@ public abstract class AbstractSailNumberCanonicalizerAndMatcher if (canonicalizedSailID != null) { result.put(canonicalizedSailID, competitor); } + final String canonicalizedSailIDWithoutDefaultNationality = canonicalizeSailID( + competitorIdentifyingText.trim(), /* defaultNationality */ null); + if (canonicalizedSailIDWithoutDefaultNationality != null) { + result.put(canonicalizedSailIDWithoutDefaultNationality, competitor); + } } return result; } diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/common/SailNumberCanonicalizationTest.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/common/SailNumberCanonicalizationTest.java new file mode 100644 index 00000000000..71e47b2ed0c --- /dev/null +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/common/SailNumberCanonicalizationTest.java @@ -0,0 +1,51 @@ +package com.sap.sailing.domain.common; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertSame; + +import java.util.Collections; +import java.util.Map; +import java.util.UUID; + +import org.junit.jupiter.api.Test; + +import com.sap.sailing.domain.base.Competitor; +import com.sap.sailing.domain.base.CompetitorWithBoat; +import com.sap.sailing.domain.base.SailNumberCanonicalizerAndMatcher; +import com.sap.sailing.domain.base.impl.BoatClassImpl; +import com.sap.sailing.domain.base.impl.BoatImpl; +import com.sap.sailing.domain.base.impl.CompetitorWithBoatImpl; +import com.sap.sailing.domain.base.impl.NationalityImpl; +import com.sap.sailing.domain.base.impl.PersonImpl; +import com.sap.sailing.domain.base.impl.TeamImpl; +import com.sap.sse.common.Color; + +public class SailNumberCanonicalizationTest { + private SailNumberCanonicalizerAndMatcher canonicalizer = new SailNumberCanonicalizerAndMatcher(); + + @Test + public void testSimpleSailNumberMatching() { + assertEquals("GER123", canonicalizer.canonicalizeSailID("GER 123", /* defaultNationality */ null)); + } + + @Test + public void testSailNumberWithoutNationalityMatching() { + assertEquals("117911", canonicalizer.canonicalizeSailID("117911", /* defaultNationality */ null)); + } + + @Test + public void testSailNumberWithoutNationalityMatchingAgainstCompetitor() { + final CompetitorWithBoat competitor = new CompetitorWithBoatImpl(UUID.randomUUID(), "TestCompetitor", + "TC", Color.BLACK, /* email */ null, /* flagImage */ null, + new TeamImpl("TestTeam", + Collections.singleton(new PersonImpl("TestPerson", new NationalityImpl("NED"), + /* dateOfBirth */ null, + /* description */ null)), + /* coach */ null), /* timeOnTimeFactor */ 1.0, + /* timeOnDistanceAllowancePerNauticalMile */ null, /* searchTag */ null, + new BoatImpl(UUID.randomUUID(), "TestBoat", new BoatClassImpl(BoatClassMasterdata._12M), "117911")); + final Map map = canonicalizer + .canonicalizeLeaderboardSailIDs(Collections.singleton(competitor)); + assertSame(competitor, map.get("117911")); + } +} diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/maneuverdetection/impl/IncrementalManeuverDetectorImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/maneuverdetection/impl/IncrementalManeuverDetectorImpl.java index cbc9c9895f9..9f9f0da77be 100644 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/maneuverdetection/impl/IncrementalManeuverDetectorImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/maneuverdetection/impl/IncrementalManeuverDetectorImpl.java @@ -10,7 +10,6 @@ import java.util.stream.Collectors; import com.sap.sailing.domain.base.Competitor; import com.sap.sailing.domain.common.NauticalSide; import com.sap.sailing.domain.common.Wind; -import com.sap.sailing.domain.common.WindSourceType; import com.sap.sailing.domain.common.tracking.GPSFixMoving; import com.sap.sailing.domain.maneuverdetection.ApproximatedFixesCalculator; import com.sap.sailing.domain.maneuverdetection.IncrementalApproximatedFixesCalculator; @@ -258,8 +257,7 @@ public class IncrementalManeuverDetectorImpl extends ManeuverDetectorImpl implem // maneuver spot calculation => recalculate maneuvers of existing maneuver curve CompleteManeuverCurve maneuverCurve = currentExistingManeuverSpot.getManeuverCurve(); WindMeasurement windMeasurement = currentExistingManeuverSpot.getWindMeasurement(); - Wind wind = trackedRace.getWind(windMeasurement.getPosition(), windMeasurement.getTimePoint(), - /* exclude */ trackedRace.getWindSources(WindSourceType.MANEUVER_BASED_ESTIMATION)); + Wind wind = trackedRace.getWind(windMeasurement.getPosition(), windMeasurement.getTimePoint()); List maneuvers = determineManeuversFromManeuverCurve(maneuverCurve.getMainCurveBoundaries(), maneuverCurve.getManeuverCurveWithStableSpeedAndCourseBoundaries(), wind, maneuverCurve.getMarkPassing()); diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/maneuverdetection/impl/ManeuverDetectorImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/maneuverdetection/impl/ManeuverDetectorImpl.java index 7f46e7f3d7b..9f931bf973d 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/maneuverdetection/impl/ManeuverDetectorImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/maneuverdetection/impl/ManeuverDetectorImpl.java @@ -16,7 +16,6 @@ import com.sap.sailing.domain.common.NauticalSide; import com.sap.sailing.domain.common.NoWindException; import com.sap.sailing.domain.common.Tack; import com.sap.sailing.domain.common.Wind; -import com.sap.sailing.domain.common.WindSourceType; import com.sap.sailing.domain.common.tracking.GPSFixMoving; import com.sap.sailing.domain.maneuverdetection.ApproximatedFixesCalculator; import com.sap.sailing.domain.maneuverdetection.ManeuverDetector; @@ -332,8 +331,7 @@ public class ManeuverDetectorImpl extends AbstractManeuverDetectorImpl { } TimePoint maneuverTimePoint = maneuverCurve.getMainCurveBoundaries().getTimePoint(); Position maneuverPosition = track.getEstimatedPosition(maneuverTimePoint, /* extrapolate */false); - final Wind wind = trackedRace.getWind(maneuverPosition, maneuverTimePoint, - /* exclude */ trackedRace.getWindSources(WindSourceType.MANEUVER_BASED_ESTIMATION)); + final Wind wind = trackedRace.getWind(maneuverPosition, maneuverTimePoint); List maneuvers = determineManeuversFromManeuverCurve(maneuverCurve.getMainCurveBoundaries(), maneuverCurve.getManeuverCurveWithStableSpeedAndCourseBoundaries(), wind, maneuverCurve.getMarkPassing()); diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/maneuverdetection/impl/ManeuverDetectorWithEstimationDataSupportDecoratorImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/maneuverdetection/impl/ManeuverDetectorWithEstimationDataSupportDecoratorImpl.java index feba9c7d152..69dd57f9cc3 100644 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/maneuverdetection/impl/ManeuverDetectorWithEstimationDataSupportDecoratorImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/maneuverdetection/impl/ManeuverDetectorWithEstimationDataSupportDecoratorImpl.java @@ -10,7 +10,6 @@ import com.sap.sailing.domain.base.SpeedWithBearingWithConfidence; import com.sap.sailing.domain.base.Waypoint; import com.sap.sailing.domain.common.ManeuverType; import com.sap.sailing.domain.common.Wind; -import com.sap.sailing.domain.common.WindSourceType; import com.sap.sailing.domain.common.tracking.GPSFixMoving; import com.sap.sailing.domain.maneuverdetection.CompleteManeuverCurveWithEstimationData; import com.sap.sailing.domain.maneuverdetection.ManeuverCurveWithUnstableCourseAndSpeedWithEstimationData; @@ -75,8 +74,7 @@ public class ManeuverDetectorWithEstimationDataSupportDecoratorImpl TimePoint maneuverTimePoint = maneuverCurve.getMainCurveBoundaries().getTimePoint(); Position maneuverPosition = maneuverDetector.track.getEstimatedPosition(maneuverTimePoint, /* extrapolate */false); - Wind wind = maneuverDetector.trackedRace.getWind(maneuverPosition, maneuverTimePoint, - /* exclude */ maneuverDetector.trackedRace.getWindSources(WindSourceType.MANEUVER_BASED_ESTIMATION)); + Wind wind = maneuverDetector.trackedRace.getWind(maneuverPosition, maneuverTimePoint); maneuvers .addAll(maneuverDetector.determineManeuversFromManeuverCurve(maneuverCurve.getMainCurveBoundaries(), maneuverCurve.getManeuverCurveWithStableSpeedAndCourseBoundaries(), wind, diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/QuickRanksLiveCache.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/QuickRanksLiveCache.java index df8178873ee..391ace6994f 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/QuickRanksLiveCache.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/QuickRanksLiveCache.java @@ -79,7 +79,7 @@ public class QuickRanksLiveCache { @Override public QuickRanksDTO computeCacheUpdate(RegattaAndRaceIdentifier key, CalculateOrPurge updateInterval) throws Exception { - final TrackedRegatta cpuMeter = service.getTrackedRace(key).getTrackedRegatta(); + final TrackedRegatta cpuMeter = service.getService().getTrackedRace(key).getTrackedRegatta(); return cpuMeter.callWithCPUMeterWithException(()->{ logger.fine("Computing cache update for live QuickRanks of race "+key); final QuickRanksDTO quickRanks; @@ -137,7 +137,7 @@ public class QuickRanksLiveCache { + "; re-computing"); } if (result == null) { - final TrackedRace trackedRace = service.getExistingTrackedRace(raceIdentifier); + final TrackedRace trackedRace = service.getService().getExistingTrackedRace(raceIdentifier); if (trackedRace != null) { trackedRace.addListener(new Listener(raceIdentifier)); // register for all changes that may affect the quick ranks cache.triggerUpdate(raceIdentifier, CalculateOrPurge.CALCULATE);