mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-04 03:13:49 +00:00
added fields to LegEntryDTO for leg start mark passing side and gap change during the leg
This commit is contained in:
1 parent
aaa76026d1
commit
742ce26b00
10 files changed
+97
-31
No files matched your search
+2
-2
@@ -9,12 +9,12 @@ import com.sap.sailing.domain.common.Tack;
|
||||
import com.sap.sailing.domain.common.TimePoint;
|
||||
import com.sap.sailing.domain.tracking.MarkPassingManeuver;
|
||||
|
||||
public class MarkpassingManeuverImpl extends ManeuverImpl implements MarkPassingManeuver {
|
||||
public class MarkPassingManeuverImpl extends ManeuverImpl implements MarkPassingManeuver {
|
||||
private static final long serialVersionUID = 8935348908557191614L;
|
||||
private final Waypoint waypointPassed;
|
||||
private final Tack side;
|
||||
|
||||
public MarkpassingManeuverImpl(ManeuverType type, Tack newTack, Position position, TimePoint timePoint,
|
||||
public MarkPassingManeuverImpl(ManeuverType type, Tack newTack, Position position, TimePoint timePoint,
|
||||
SpeedWithBearing speedWithBearingBefore, SpeedWithBearing speedWithBearingAfter,
|
||||
double directionChangeInDegrees, Distance maneuverLoss, Waypoint waypointPassed, Tack side) {
|
||||
super(type, newTack, position, timePoint, speedWithBearingBefore, speedWithBearingAfter,
|
||||
+1
-1
@@ -1977,7 +1977,7 @@ public abstract class TrackedRaceImpl implements TrackedRace, CourseListener {
|
||||
}
|
||||
final Maneuver maneuver;
|
||||
if (maneuverType == ManeuverType.MARK_PASSING) {
|
||||
maneuver = new MarkpassingManeuverImpl(maneuverType, tackAfterManeuver, maneuverPosition, maneuverTimePoint,
|
||||
maneuver = new MarkPassingManeuverImpl(maneuverType, tackAfterManeuver, maneuverPosition, maneuverTimePoint,
|
||||
speedWithBearingOnApproximationAtBeginning, speedWithBearingOnApproximationAtEnd,
|
||||
totalCourseChangeInDegrees, maneuverLoss, waypointPassed, sideToWhichWaypointWasPassed);
|
||||
} else {
|
||||
|
||||
+1
@@ -442,4 +442,5 @@ public interface StringMessages extends Messages {
|
||||
String overallLeaderboardSelection();
|
||||
String showOverallLeaderboardOnSamePage();
|
||||
String errorTryingToObtainOverallLeaderboards(String message);
|
||||
String passedTo(String name);
|
||||
}
|
||||
+2
-1
@@ -442,4 +442,5 @@ afterRace=after race
|
||||
showRankChart=Show rank chart
|
||||
overallLeaderboardSelection=Overall Leaderboard
|
||||
showOverallLeaderboardOnSamePage=Show overall leaderboard on same page
|
||||
errorTryingToObtainOverallLeaderboards=Error trying to obtain overall leaderboards: {0}
|
||||
errorTryingToObtainOverallLeaderboards=Error trying to obtain overall leaderboards: {0}
|
||||
passedTo=passed to {0}
|
||||
+2
-1
@@ -443,4 +443,5 @@ afterRace=nach Rennen
|
||||
showRankChart=Rang-Diagramm anzeigen
|
||||
overallLeaderboardSelection=Gesamtergebnisse
|
||||
showOverallLeaderboardOnSamePage=Gesamtergebnisse auf derselben Seite anzeigen
|
||||
errorTryingToObtainOverallLeaderboards=Fehler beim Laden der Gesamtergebnisse: {0}
|
||||
errorTryingToObtainOverallLeaderboards=Fehler beim Laden der Gesamtergebnisse: {0}
|
||||
passedTo=an {0} gerundet
|
||||
+32
-6
@@ -36,7 +36,6 @@ import org.osgi.framework.BundleContext;
|
||||
import org.osgi.util.tracker.ServiceTracker;
|
||||
|
||||
import com.sap.sailing.domain.base.BoatClass;
|
||||
import com.sap.sailing.domain.base.Mark;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.ControlPoint;
|
||||
import com.sap.sailing.domain.base.Course;
|
||||
@@ -44,6 +43,7 @@ import com.sap.sailing.domain.base.Event;
|
||||
import com.sap.sailing.domain.base.Fleet;
|
||||
import com.sap.sailing.domain.base.Gate;
|
||||
import com.sap.sailing.domain.base.Leg;
|
||||
import com.sap.sailing.domain.base.Mark;
|
||||
import com.sap.sailing.domain.base.RaceColumn;
|
||||
import com.sap.sailing.domain.base.RaceColumnInSeries;
|
||||
import com.sap.sailing.domain.base.RaceDefinition;
|
||||
@@ -108,6 +108,7 @@ import com.sap.sailing.domain.tracking.GPSFixMoving;
|
||||
import com.sap.sailing.domain.tracking.GPSFixTrack;
|
||||
import com.sap.sailing.domain.tracking.Maneuver;
|
||||
import com.sap.sailing.domain.tracking.MarkPassing;
|
||||
import com.sap.sailing.domain.tracking.MarkPassingManeuver;
|
||||
import com.sap.sailing.domain.tracking.RaceChangeListener;
|
||||
import com.sap.sailing.domain.tracking.RaceTracker;
|
||||
import com.sap.sailing.domain.tracking.RacesHandle;
|
||||
@@ -128,9 +129,9 @@ import com.sap.sailing.geocoding.ReverseGeocoder;
|
||||
import com.sap.sailing.gwt.ui.client.SailingService;
|
||||
import com.sap.sailing.gwt.ui.shared.BoatClassDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.BulkScoreCorrectionDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.MarkDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.CompetitorDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.CompetitorRaceDataDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.CompetitorsRaceDataDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.ControlPointDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.CourseDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.EventDTO;
|
||||
@@ -144,15 +145,16 @@ import com.sap.sailing.gwt.ui.shared.LeaderboardRowDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.LegEntryDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.LegInfoDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.ManeuverDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.MarkDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.MarkPassingTimesDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.CompetitorsRaceDataDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.MarkpassingManeuverDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.PlacemarkDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.PlacemarkOrderDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.PositionDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.QuickRankDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceCourseMarksDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceColumnDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceColumnInSeriesDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceCourseMarksDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceMapDataDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceTimesInfoDTO;
|
||||
@@ -830,6 +832,13 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
|
||||
result.finished = trackedLeg.hasFinishedLeg(timePoint);
|
||||
result.gapToLeaderInSeconds = trackedLeg.getGapToLeaderInSeconds(timePoint,
|
||||
legRanksCache.get(trackedLeg.getLeg()).entrySet().iterator().next().getKey());
|
||||
if (result.gapToLeaderInSeconds != null && result.timeInMilliseconds != null) {
|
||||
TimePoint timeAtLegStart = timePoint.minus(result.timeInMilliseconds);
|
||||
Double gapAtLegStart = trackedLeg.getGapToLeaderInSeconds(timeAtLegStart);
|
||||
if (gapAtLegStart != null) {
|
||||
result.gapChangeSinceLegStart = result.gapToLeaderInSeconds - gapAtLegStart;
|
||||
}
|
||||
}
|
||||
LinkedHashMap<Competitor, Integer> legRanks = legRanksCache.get(trackedLeg.getLeg());
|
||||
if (legRanks != null) {
|
||||
result.rank = legRanks.get(trackedLeg.getCompetitor());
|
||||
@@ -868,6 +877,12 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
|
||||
totalManeuverLossInMeters.get(maneuver.getType()) + maneuver.getManeuverLoss().getMeters());
|
||||
}
|
||||
break;
|
||||
case MARK_PASSING:
|
||||
MarkPassingManeuver mpm = (MarkPassingManeuver) maneuver;
|
||||
if (mpm.getWaypointPassed() == trackedLeg.getLeg().getFrom()) {
|
||||
result.sideToWhichMarkAtLegStartWasRounded = mpm.getSide();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
result.averageManeuverLossInMeters = new HashMap<ManeuverType, Double>();
|
||||
@@ -2458,12 +2473,23 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
|
||||
private List<ManeuverDTO> createManeuverDTOsForCompetitor(List<Maneuver> maneuvers, TrackedRace trackedRace, Competitor competitor) {
|
||||
List<ManeuverDTO> result = new ArrayList<ManeuverDTO>();
|
||||
for (Maneuver maneuver : maneuvers) {
|
||||
ManeuverDTO maneuverDTO = new ManeuverDTO(maneuver.getType(), maneuver.getNewTack(),
|
||||
final ManeuverDTO maneuverDTO;
|
||||
if (maneuver.getType() == ManeuverType.MARK_PASSING) {
|
||||
maneuverDTO = new MarkpassingManeuverDTO(maneuver.getType(), maneuver.getNewTack(),
|
||||
new PositionDTO(maneuver.getPosition().getLatDeg(), maneuver.getPosition().getLngDeg()),
|
||||
maneuver.getTimePoint().asDate(),
|
||||
createSpeedWithBearingDTO(maneuver.getSpeedWithBearingBefore()),
|
||||
createSpeedWithBearingDTO(maneuver.getSpeedWithBearingAfter()),
|
||||
maneuver.getDirectionChangeInDegrees(), maneuver.getManeuverLoss()==null?null:maneuver.getManeuverLoss().getMeters());
|
||||
maneuver.getDirectionChangeInDegrees(), maneuver.getManeuverLoss()==null?null:maneuver.getManeuverLoss().getMeters(),
|
||||
((MarkPassingManeuver) maneuver).getSide());
|
||||
} else {
|
||||
maneuverDTO = new ManeuverDTO(maneuver.getType(), maneuver.getNewTack(),
|
||||
new PositionDTO(maneuver.getPosition().getLatDeg(), maneuver.getPosition().getLngDeg()),
|
||||
maneuver.getTimePoint().asDate(),
|
||||
createSpeedWithBearingDTO(maneuver.getSpeedWithBearingBefore()),
|
||||
createSpeedWithBearingDTO(maneuver.getSpeedWithBearingAfter()),
|
||||
maneuver.getDirectionChangeInDegrees(), maneuver.getManeuverLoss()==null?null:maneuver.getManeuverLoss().getMeters());
|
||||
}
|
||||
result.add(maneuverDTO);
|
||||
}
|
||||
return result;
|
||||
|
||||
+3
@@ -4,6 +4,7 @@ import java.util.Map;
|
||||
|
||||
import com.google.gwt.user.client.rpc.IsSerializable;
|
||||
import com.sap.sailing.domain.common.ManeuverType;
|
||||
import com.sap.sailing.domain.common.Tack;
|
||||
|
||||
/**
|
||||
* Holds data about one competitor's performance in one leg of one race represented in the
|
||||
@@ -18,6 +19,8 @@ public class LegEntryDTO implements IsSerializable {
|
||||
public Double averageSpeedOverGroundInKnots;
|
||||
public int rank;
|
||||
public Double gapToLeaderInSeconds;
|
||||
public Double gapChangeSinceLegStart;
|
||||
public Tack sideToWhichMarkAtLegStartWasRounded;
|
||||
public Double estimatedTimeToNextWaypointInSeconds;
|
||||
|
||||
/**
|
||||
|
||||
+23
-1
@@ -2,9 +2,13 @@ package com.sap.sailing.gwt.ui.shared;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import com.google.gwt.i18n.client.DateTimeFormat;
|
||||
import com.google.gwt.i18n.client.DateTimeFormat.PredefinedFormat;
|
||||
import com.google.gwt.i18n.client.NumberFormat;
|
||||
import com.google.gwt.user.client.rpc.IsSerializable;
|
||||
import com.sap.sailing.domain.common.ManeuverType;
|
||||
import com.sap.sailing.domain.common.Tack;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
|
||||
public class ManeuverDTO implements IsSerializable {
|
||||
public ManeuverType type;
|
||||
@@ -37,5 +41,23 @@ public class ManeuverDTO implements IsSerializable {
|
||||
this.directionChangeInDegrees = directionChangeInDegrees;
|
||||
this.maneuverLossInMeters = maneuverLossInMeters;
|
||||
}
|
||||
|
||||
|
||||
public String toString(StringMessages stringMessages) {
|
||||
SpeedWithBearingDTO before = this.speedWithBearingBefore;
|
||||
SpeedWithBearingDTO after = this.speedWithBearingAfter;
|
||||
|
||||
String timeAndManeuver = DateTimeFormat.getFormat(PredefinedFormat.TIME_FULL).format(this.timepoint)
|
||||
+ ": " + this.type.name();
|
||||
String directionChange = stringMessages.directionChange() + ": "
|
||||
+ ((int) this.directionChangeInDegrees) + " "+stringMessages.degreesShort()+" ("
|
||||
+ ((int) before.bearingInDegrees) + " deg -> " + ((int) after.bearingInDegrees) + " "+stringMessages.degreesShort()+")";
|
||||
String speedChange = stringMessages.speedChange() + ": "
|
||||
+ NumberFormat.getDecimalFormat().format(after.speedInKnots - before.speedInKnots) + " "+stringMessages.averageSpeedInKnotsUnit()+" ("
|
||||
+ NumberFormat.getDecimalFormat().format(before.speedInKnots) + " "+stringMessages.averageSpeedInKnotsUnit()+" -> "
|
||||
+ NumberFormat.getDecimalFormat().format(after.speedInKnots) + " "+stringMessages.averageSpeedInKnotsUnit()+")";
|
||||
String maneuverLoss = this.maneuverLossInMeters == null ? "" : ("; "+stringMessages.maneuverLoss()+": "+
|
||||
NumberFormat.getDecimalFormat().format(this.maneuverLossInMeters)+"m");
|
||||
String maneuverTitle = timeAndManeuver + "; " + directionChange + "; " + speedChange + maneuverLoss;
|
||||
return maneuverTitle;
|
||||
}
|
||||
}
|
||||
Executable
+29
@@ -0,0 +1,29 @@
|
||||
package com.sap.sailing.gwt.ui.shared;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import com.sap.sailing.domain.common.ManeuverType;
|
||||
import com.sap.sailing.domain.common.Tack;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
|
||||
public class MarkpassingManeuverDTO extends ManeuverDTO {
|
||||
public Tack side;
|
||||
|
||||
MarkpassingManeuverDTO() {}
|
||||
|
||||
public MarkpassingManeuverDTO(ManeuverType type, Tack newTack, PositionDTO position, Date timepoint,
|
||||
SpeedWithBearingDTO speedWithBearingBefore, SpeedWithBearingDTO speedWithBearingAfter,
|
||||
double directionChangeInDegrees, Double maneuverLossInMeters, Tack side) {
|
||||
super(type, newTack, position, timepoint, speedWithBearingBefore, speedWithBearingAfter, directionChangeInDegrees,
|
||||
maneuverLossInMeters);
|
||||
this.side = side;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString(StringMessages stringMessages) {
|
||||
StringBuilder result = new StringBuilder(super.toString(stringMessages));
|
||||
result.append(", ");
|
||||
result.append(stringMessages.passedTo(side.name()));
|
||||
return result.toString();
|
||||
}
|
||||
}
|
||||
+2
-19
@@ -17,8 +17,6 @@ import java.util.Set;
|
||||
import com.google.gwt.dom.client.Style;
|
||||
import com.google.gwt.event.dom.client.ClickEvent;
|
||||
import com.google.gwt.event.dom.client.ClickHandler;
|
||||
import com.google.gwt.i18n.client.DateTimeFormat;
|
||||
import com.google.gwt.i18n.client.DateTimeFormat.PredefinedFormat;
|
||||
import com.google.gwt.i18n.client.NumberFormat;
|
||||
import com.google.gwt.maps.client.InfoWindowContent;
|
||||
import com.google.gwt.maps.client.MapWidget;
|
||||
@@ -75,17 +73,16 @@ import com.sap.sailing.gwt.ui.client.TimeListener;
|
||||
import com.sap.sailing.gwt.ui.client.Timer;
|
||||
import com.sap.sailing.gwt.ui.client.Timer.PlayStates;
|
||||
import com.sap.sailing.gwt.ui.client.WindSourceTypeFormatter;
|
||||
import com.sap.sailing.gwt.ui.shared.MarkDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.CompetitorDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.CourseDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.GPSFixDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.LegInfoDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.ManeuverDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.MarkDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.PositionDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.QuickRankDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceMapDataDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceTimesInfoDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.SpeedWithBearingDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.WindDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.WindInfoForRaceDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.WindTrackInfoDTO;
|
||||
@@ -1286,21 +1283,7 @@ public class RaceMap extends AbsolutePanel implements TimeListener, CompetitorSe
|
||||
LatLng latLng = LatLng.newInstance(maneuver.position.latDeg, maneuver.position.lngDeg);
|
||||
MarkerOptions options = MarkerOptions.newInstance();
|
||||
//TODO Introduce user role dependent view (Spectator, Admin)
|
||||
SpeedWithBearingDTO before = maneuver.speedWithBearingBefore;
|
||||
SpeedWithBearingDTO after = maneuver.speedWithBearingAfter;
|
||||
|
||||
String timeAndManeuver = DateTimeFormat.getFormat(PredefinedFormat.TIME_FULL).format(maneuver.timepoint)
|
||||
+ ": " + maneuver.type.name();
|
||||
String directionChange = stringMessages.directionChange() + ": "
|
||||
+ ((int) maneuver.directionChangeInDegrees) + " "+stringMessages.degreesShort()+" ("
|
||||
+ ((int) before.bearingInDegrees) + " deg -> " + ((int) after.bearingInDegrees) + " "+stringMessages.degreesShort()+")";
|
||||
String speedChange = stringMessages.speedChange() + ": "
|
||||
+ NumberFormat.getDecimalFormat().format(after.speedInKnots - before.speedInKnots) + " "+stringMessages.averageSpeedInKnotsUnit()+" ("
|
||||
+ NumberFormat.getDecimalFormat().format(before.speedInKnots) + " "+stringMessages.averageSpeedInKnotsUnit()+" -> "
|
||||
+ NumberFormat.getDecimalFormat().format(after.speedInKnots) + " "+stringMessages.averageSpeedInKnotsUnit()+")";
|
||||
String maneuverLoss = maneuver.maneuverLossInMeters == null ? "" : ("; "+stringMessages.maneuverLoss()+": "+
|
||||
NumberFormat.getDecimalFormat().format(maneuver.maneuverLossInMeters)+"m");
|
||||
options.setTitle(timeAndManeuver + "; " + directionChange + "; " + speedChange + maneuverLoss);
|
||||
options.setTitle(maneuver.toString(stringMessages));
|
||||
options.setIcon(raceMapImageManager.maneuverIconsForTypeAndTargetTack
|
||||
.get(new Util.Pair<ManeuverType, Tack>(maneuver.type, maneuver.newTack)));
|
||||
Marker marker = new Marker(latLng, options);
|
||||
|
||||
Reference in new issue
Block a user