diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/Maneuver.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/Maneuver.java new file mode 100755 index 00000000000..9fd66f9dd6c --- /dev/null +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/Maneuver.java @@ -0,0 +1,22 @@ +package com.sap.sailing.domain.tracking; + +import com.sap.sailing.domain.base.SpeedWithBearing; +import com.sap.sailing.domain.base.Timed; + +public interface Maneuver extends Timed, Positioned { + enum Type { HEAD_UP, BEAR_AWAY, TACK, JIBE, PENALTY_CIRCLE } + + Type getType(); + + SpeedWithBearing getSpeedWithBearingBefore(); + + SpeedWithBearing getSpeedWithBearingAfter(); + + /** + * This assumes that a maneuver usually slows a boat down. This method tries to find out how long + * after the {@link #getTimePoint() time of the maneuver} it took for the boat to reach a roughly + * constant speed again. + */ + long getTimeInMillisecondsUntilBackToConstantSpeed(); + +} diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/DynamicTrackedRaceImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/DynamicTrackedRaceImpl.java index 2e21ea459fb..e75014c21ee 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/DynamicTrackedRaceImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/DynamicTrackedRaceImpl.java @@ -3,7 +3,6 @@ package com.sap.sailing.domain.tracking.impl; import java.util.Collection; import java.util.HashSet; import java.util.Iterator; -import java.util.List; import java.util.NavigableSet; import java.util.Set; import java.util.logging.Level; @@ -11,12 +10,10 @@ import java.util.logging.Logger; import com.sap.sailing.domain.base.Buoy; import com.sap.sailing.domain.base.Competitor; -import com.sap.sailing.domain.base.Distance; import com.sap.sailing.domain.base.Leg; import com.sap.sailing.domain.base.RaceDefinition; import com.sap.sailing.domain.base.TimePoint; import com.sap.sailing.domain.base.Waypoint; -import com.sap.sailing.domain.base.impl.DouglasPeucker; import com.sap.sailing.domain.base.impl.MillisecondsTimePoint; import com.sap.sailing.domain.tracking.DynamicGPSFixTrack; import com.sap.sailing.domain.tracking.DynamicTrackedEvent; @@ -284,9 +281,4 @@ public class DynamicTrackedRaceImpl extends TrackedRaceImpl implements return (DynamicTrackedEvent) super.getTrackedEvent(); } - @Override - public List approximate(Competitor competitor, Distance maxDistance, TimePoint from, TimePoint to) { - DouglasPeucker douglasPeucker = new DouglasPeucker(getTrack(competitor)); - return douglasPeucker.approximate(maxDistance, from, to); - } } diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/ManeuverImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/ManeuverImpl.java new file mode 100755 index 00000000000..bbd8f8bfb52 --- /dev/null +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/ManeuverImpl.java @@ -0,0 +1,57 @@ +package com.sap.sailing.domain.tracking.impl; + +import com.sap.sailing.domain.base.Position; +import com.sap.sailing.domain.base.SpeedWithBearing; +import com.sap.sailing.domain.base.TimePoint; +import com.sap.sailing.domain.tracking.Maneuver; + +public class ManeuverImpl implements Maneuver { + private final Type type; + private final Position position; + private final TimePoint timePoint; + private final SpeedWithBearing speedWithBearingBefore; + private final SpeedWithBearing speedWithBearingAfter; + private final long timeInMillisecondsUntilBackToConstantSpeed; + + public ManeuverImpl(Type type, Position position, TimePoint timePoint, SpeedWithBearing speedWithBearingBefore, + SpeedWithBearing speedWithBearingAfter, long timeInMillisecondsUntilBackToConstantSpeed) { + super(); + this.type = type; + this.position = position; + this.timePoint = timePoint; + this.speedWithBearingBefore = speedWithBearingBefore; + this.speedWithBearingAfter = speedWithBearingAfter; + this.timeInMillisecondsUntilBackToConstantSpeed = timeInMillisecondsUntilBackToConstantSpeed; + } + + @Override + public long getTimeInMillisecondsUntilBackToConstantSpeed() { + return timeInMillisecondsUntilBackToConstantSpeed; + } + + @Override + public Type getType() { + return type; + } + + @Override + public Position getPosition() { + return position; + } + + @Override + public TimePoint getTimePoint() { + return timePoint; + } + + @Override + public SpeedWithBearing getSpeedWithBearingBefore() { + return speedWithBearingBefore; + } + + @Override + public SpeedWithBearing getSpeedWithBearingAfter() { + return speedWithBearingAfter; + } + +} diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java index 450d5274013..e1d0526ecac 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java @@ -23,6 +23,7 @@ import com.sap.sailing.domain.base.Tack; import com.sap.sailing.domain.base.TimePoint; import com.sap.sailing.domain.base.Waypoint; import com.sap.sailing.domain.base.impl.DegreeBearingImpl; +import com.sap.sailing.domain.base.impl.DouglasPeucker; import com.sap.sailing.domain.base.impl.KnotSpeedWithBearingImpl; import com.sap.sailing.domain.base.impl.MillisecondsTimePoint; import com.sap.sailing.domain.tracking.GPSFix; @@ -633,4 +634,10 @@ public abstract class TrackedRaceImpl implements TrackedRace, CourseListener { public String toString() { return "TrackedRace for "+getRace(); } + + @Override + public List approximate(Competitor competitor, Distance maxDistance, TimePoint from, TimePoint to) { + DouglasPeucker douglasPeucker = new DouglasPeucker(getTrack(competitor)); + return douglasPeucker.approximate(maxDistance, from, to); + } }