mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-02 18:33:54 +00:00
broken activemq import package declarations
This commit is contained in:
1 parent
938d406fe9
commit
4c39000801
19 files changed
+156
-6
No files matched your search
+3
-2
@@ -12,8 +12,9 @@ import java.io.Serializable;
|
||||
public enum DetailType implements Serializable {
|
||||
DISTANCE_TRAVELED(0), AVERAGE_SPEED_OVER_GROUND_IN_KNOTS(2), RACE_RANK(0), RANK_GAIN(0), NUMBER_OF_MANEUVERS(0),
|
||||
CURRENT_SPEED_OVER_GROUND_IN_KNOTS(2), ESTIMATED_TIME_TO_NEXT_WAYPOINT_IN_SECONDS(1), VELOCITY_MADE_GOOD_IN_KNOTS(2), GAP_TO_LEADER_IN_SECONDS(0),
|
||||
WINDWARD_DISTANCE_TO_GO_IN_METERS(0), RACE_DISTANCE_TRAVELED(0), RACE_AVERAGE_SPEED_OVER_GROUND_IN_KNOTS(2), RACE_GAP_TO_LEADER_IN_SECONDS(0),
|
||||
RACE_DISTANCE_TO_LEADER_IN_METERS(0),
|
||||
WINDWARD_DISTANCE_TO_GO_IN_METERS(0), AVERAGE_CROSS_TRACK_ERROR_IN_METERS(0), RACE_DISTANCE_TRAVELED(0),
|
||||
RACE_AVERAGE_SPEED_OVER_GROUND_IN_KNOTS(2), RACE_GAP_TO_LEADER_IN_SECONDS(0),
|
||||
RACE_DISTANCE_TO_LEADER_IN_METERS(0), RACE_AVERAGE_CROSS_TRACK_ERROR_IN_METERS(0),
|
||||
WINDWARD_DISTANCE_TO_OVERALL_LEADER(0), HEAD_UP(0), BEAR_AWAY(0), TACK(0), JIBE(0), PENALTY_CIRCLE(0), MARK_PASSING(0), CURRENT_LEG(0),
|
||||
DISPLAY_LEGS(0), TIME_TRAVELED(0);
|
||||
|
||||
|
||||
+6
@@ -534,4 +534,10 @@ public class MockedTrackedRace implements DynamicTrackedRace {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Distance getAverageCrossTrackError(Competitor competitor, TimePoint timePoint) throws NoWindException {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
}
|
||||
+8
@@ -7,8 +7,10 @@ import java.util.Map;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.Leg;
|
||||
import com.sap.sailing.domain.common.Bearing;
|
||||
import com.sap.sailing.domain.common.Distance;
|
||||
import com.sap.sailing.domain.common.LegType;
|
||||
import com.sap.sailing.domain.common.NoWindException;
|
||||
import com.sap.sailing.domain.common.Position;
|
||||
import com.sap.sailing.domain.common.TimePoint;
|
||||
import com.sap.sailing.domain.tracking.TrackedLeg;
|
||||
import com.sap.sailing.domain.tracking.TrackedLegOfCompetitor;
|
||||
@@ -76,4 +78,10 @@ public class TracTracTrackedLegImpl implements TrackedLeg {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Distance getCrossTrackError(Position p, TimePoint timePoint) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
+6
@@ -176,4 +176,10 @@ public class TracTracTrackedLegOfCompetitor implements TrackedLegOfCompetitor {
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Distance getAverageCrossTrackError(TimePoint timePoint) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -6,8 +6,10 @@ import java.util.LinkedHashMap;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.Leg;
|
||||
import com.sap.sailing.domain.common.Bearing;
|
||||
import com.sap.sailing.domain.common.Distance;
|
||||
import com.sap.sailing.domain.common.LegType;
|
||||
import com.sap.sailing.domain.common.NoWindException;
|
||||
import com.sap.sailing.domain.common.Position;
|
||||
import com.sap.sailing.domain.common.TimePoint;
|
||||
|
||||
public interface TrackedLeg extends Serializable {
|
||||
@@ -42,4 +44,5 @@ public interface TrackedLeg extends Serializable {
|
||||
|
||||
Bearing getLegBearing(TimePoint at);
|
||||
|
||||
Distance getCrossTrackError(Position p, TimePoint timePoint);
|
||||
}
|
||||
+2
@@ -152,4 +152,6 @@ public interface TrackedLegOfCompetitor extends Serializable {
|
||||
*/
|
||||
Distance getWindwardDistanceToOverallLeader(TimePoint timePoint) throws NoWindException;
|
||||
|
||||
Distance getAverageCrossTrackError(TimePoint timePoint) throws NoWindException;
|
||||
|
||||
}
|
||||
@@ -367,4 +367,9 @@ public interface TrackedRace extends Serializable {
|
||||
* After the call returns, {@link #getWindSourcesToExclude()} returns an iterable that equals <code>windSourcesToExclude</code>
|
||||
*/
|
||||
void setWindSourcesToExclude(Iterable<WindSource> windSourcesToExclude);
|
||||
|
||||
/**
|
||||
* Computes the average cross-track error for the legs with type {@link LegType#UPWIND}.
|
||||
*/
|
||||
Distance getAverageCrossTrackError(Competitor competitor, TimePoint timePoint) throws NoWindException;
|
||||
}
|
||||
+6
@@ -12,6 +12,7 @@ import com.sap.sailing.domain.base.Buoy;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.Leg;
|
||||
import com.sap.sailing.domain.common.Bearing;
|
||||
import com.sap.sailing.domain.common.Distance;
|
||||
import com.sap.sailing.domain.common.LegType;
|
||||
import com.sap.sailing.domain.common.NoWindException;
|
||||
import com.sap.sailing.domain.common.Position;
|
||||
@@ -227,4 +228,9 @@ public class TrackedLegImpl implements TrackedLeg, RaceChangeListener {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Distance getCrossTrackError(Position p, TimePoint timePoint) {
|
||||
return p.crossTrackError(getTrackedRace().getApproximatePosition(getLeg().getFrom(), timePoint), getLegBearing(timePoint));
|
||||
}
|
||||
|
||||
}
|
||||
+27
@@ -20,6 +20,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.TrackedLeg;
|
||||
import com.sap.sailing.domain.tracking.TrackedLegOfCompetitor;
|
||||
import com.sap.sailing.domain.tracking.TrackedRace;
|
||||
import com.sap.sailing.domain.tracking.Wind;
|
||||
@@ -368,6 +369,32 @@ public class TrackedLegOfCompetitorImpl implements TrackedLegOfCompetitor {
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Distance getAverageCrossTrackError(TimePoint timePoint) throws NoWindException {
|
||||
double distanceInMeters = 0;
|
||||
int count = 0;
|
||||
GPSFixTrack<Competitor, GPSFixMoving> track = getTrackedRace().getTrack(competitor);
|
||||
GPSFixMoving fix = null;
|
||||
final TrackedLeg trackedLeg = getTrackedLeg();
|
||||
final MarkPassing legStartMarkPassing = getTrackedRace().getMarkPassing(competitor, getLeg().getFrom());
|
||||
if (legStartMarkPassing != null) {
|
||||
TimePoint legStart = legStartMarkPassing.getTimePoint();
|
||||
final MarkPassing legEndMarkPassing = getTrackedRace().getMarkPassing(competitor, getLeg().getTo());
|
||||
Iterator<GPSFixMoving> fixIter = track.getFixesIterator(legStart, /* inclusive */true);
|
||||
while (fixIter.hasNext()
|
||||
&& (fix == null || ((legEndMarkPassing == null || fix.getTimePoint().compareTo(
|
||||
legEndMarkPassing.getTimePoint()) < 0) && fix.getTimePoint().compareTo(timePoint) < 0))) {
|
||||
fix = fixIter.next();
|
||||
if (fix.getTimePoint().compareTo(timePoint) < 0) {
|
||||
Distance xte = trackedLeg.getCrossTrackError(fix.getPosition(), fix.getTimePoint());
|
||||
distanceInMeters += xte.getMeters();
|
||||
count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
return new MeterDistance(distanceInMeters / count);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Double getGapToLeaderInSeconds(TimePoint timePoint) throws NoWindException {
|
||||
// If the leader already completed this leg, compute the estimated arrival time at the
|
||||
|
||||
+35
@@ -33,6 +33,7 @@ import com.sap.sailing.domain.base.Waypoint;
|
||||
import com.sap.sailing.domain.base.impl.BearingWithConfidenceImpl;
|
||||
import com.sap.sailing.domain.base.impl.DouglasPeucker;
|
||||
import com.sap.sailing.domain.base.impl.KnotSpeedWithBearingImpl;
|
||||
import com.sap.sailing.domain.base.impl.MeterDistance;
|
||||
import com.sap.sailing.domain.base.impl.MillisecondsTimePoint;
|
||||
import com.sap.sailing.domain.common.Bearing;
|
||||
import com.sap.sailing.domain.common.Distance;
|
||||
@@ -611,6 +612,40 @@ public abstract class TrackedRaceImpl implements TrackedRace, CourseListener {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Distance getAverageCrossTrackError(Competitor competitor, TimePoint timePoint) throws NoWindException {
|
||||
double distanceInMeters = 0;
|
||||
int count = 0;
|
||||
GPSFixTrack<Competitor, GPSFixMoving> track = getTrack(competitor);
|
||||
GPSFixMoving fix = null;
|
||||
for (Leg leg : getRace().getCourse().getLegs()) {
|
||||
final TrackedLeg trackedLeg = getTrackedLeg(leg);
|
||||
if (trackedLeg.getLegType(timePoint) == LegType.UPWIND) {
|
||||
final MarkPassing legStartMarkPassing = getMarkPassing(competitor, leg.getFrom());
|
||||
if (legStartMarkPassing != null) {
|
||||
TimePoint legStart = legStartMarkPassing.getTimePoint();
|
||||
final MarkPassing legEndMarkPassing = getMarkPassing(competitor, leg.getTo());
|
||||
Iterator<GPSFixMoving> fixIter = track.getFixesIterator(legStart, /* inclusive */true);
|
||||
while (fixIter.hasNext()
|
||||
&& (fix == null || ((legEndMarkPassing == null || fix.getTimePoint().compareTo(
|
||||
legEndMarkPassing.getTimePoint()) < 0)
|
||||
&& fix.getTimePoint().compareTo(timePoint) < 0))) {
|
||||
fix = fixIter.next();
|
||||
if (fix.getTimePoint().compareTo(timePoint) < 0) {
|
||||
Distance xte = trackedLeg.getCrossTrackError(fix.getPosition(), fix.getTimePoint());
|
||||
distanceInMeters += xte.getMeters();
|
||||
count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (fix != null && fix.getTimePoint().compareTo(timePoint) >= 0) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return new MeterDistance(distanceInMeters / count);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TrackedLegOfCompetitor getCurrentLeg(Competitor competitor, TimePoint timePoint) {
|
||||
NavigableSet<MarkPassing> competitorMarkPassings = markPassingsForCompetitor.get(competitor);
|
||||
|
||||
+4
@@ -33,6 +33,8 @@ public class DetailTypeFormatter {
|
||||
return stringMessages.gapToLeaderInSeconds();
|
||||
case RACE_DISTANCE_TO_LEADER_IN_METERS:
|
||||
return stringMessages.windwardDistanceToLeaderInMeters();
|
||||
case RACE_AVERAGE_CROSS_TRACK_ERROR_IN_METERS:
|
||||
return stringMessages.averageCrossTrackErrorInMeters();
|
||||
case WINDWARD_DISTANCE_TO_OVERALL_LEADER:
|
||||
return stringMessages.windwardDistanceToOverallLeader();
|
||||
case HEAD_UP:
|
||||
@@ -53,6 +55,8 @@ public class DetailTypeFormatter {
|
||||
return stringMessages.currentLeg();
|
||||
case TIME_TRAVELED:
|
||||
return stringMessages.time();
|
||||
case AVERAGE_CROSS_TRACK_ERROR_IN_METERS:
|
||||
return stringMessages.averageCrossTrackErrorInMeters();
|
||||
}
|
||||
return null;
|
||||
|
||||
|
||||
+1
@@ -286,4 +286,5 @@ public interface StringMessages extends Messages {
|
||||
String leaderboardsInGroup();
|
||||
String replication();
|
||||
String errorFetchingReplicaData(String message);
|
||||
String averageCrossTrackErrorInMeters();
|
||||
}
|
||||
+2
-1
@@ -280,4 +280,5 @@ degreesBoatToTheWind=Angle to wind
|
||||
racesInLeaderboard=Races in leaderboard
|
||||
leaderboardsInGroup=Leaderboards in group
|
||||
replication=Replication
|
||||
errorFetchingReplicaData=Error fetching replica data: {0}
|
||||
errorFetchingReplicaData=Error fetching replica data: {0}
|
||||
averageCrossTrackErrorInMeters=\u2205 XTE
|
||||
+2
-1
@@ -281,4 +281,5 @@ degreesBoatToTheWind=Winkel zum Wind
|
||||
racesInLeaderboard=Rennen im Leaderboard
|
||||
leaderboardsInGroup=Leaderboards in der Gruppe
|
||||
replication=Replikation
|
||||
errorFetchingReplicaData=Fehler beim Beschaffen der Replikationsdaten: {0}
|
||||
errorFetchingReplicaData=Fehler beim Beschaffen der Replikationsdaten: {0}
|
||||
averageCrossTrackErrorInMeters=\u2205 XTE
|
||||
+23
@@ -563,10 +563,16 @@ public class LeaderboardPanel extends FormPanel implements TimeListener, PlaySta
|
||||
new FormattedDoubleLegDetailColumn(stringMessages.windwardDistanceToOverallLeader(), "["+stringMessages
|
||||
.distanceInMetersUnit()+"]", new RaceDistanceToLeaderInMeters(), 0, getLeaderboardPanel()
|
||||
.getLeaderboardTable(), LEG_COLUMN_HEADER_STYLE, LEG_COLUMN_STYLE));
|
||||
result.put(
|
||||
DetailType.RACE_AVERAGE_CROSS_TRACK_ERROR_IN_METERS,
|
||||
new FormattedDoubleLegDetailColumn(stringMessages.averageCrossTrackErrorInMeters(), "["+stringMessages
|
||||
.metersUnit()+"]", new RaceAverageCrossTrackErrorInMeters(), 0, getLeaderboardPanel()
|
||||
.getLeaderboardTable(), LEG_COLUMN_HEADER_STYLE, LEG_COLUMN_STYLE));
|
||||
result.put(DetailType.NUMBER_OF_MANEUVERS, getManeuverCountRaceColumn());
|
||||
result.put(DetailType.CURRENT_LEG, new FormattedDoubleLegDetailColumn(stringMessages.currentLeg(), "",
|
||||
new CurrentLeg(), 0, getLeaderboardPanel().getLeaderboardTable(), LEG_COLUMN_HEADER_STYLE,
|
||||
LEG_COLUMN_STYLE));
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -647,6 +653,23 @@ public class LeaderboardPanel extends FormPanel implements TimeListener, PlaySta
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetches the average cross-track error for the race
|
||||
*
|
||||
* @author Axel Uhl (D043530)
|
||||
*/
|
||||
private class RaceAverageCrossTrackErrorInMeters implements LegDetailField<Double> {
|
||||
@Override
|
||||
public Double get(LeaderboardRowDTO row) {
|
||||
Double result = null;
|
||||
LeaderboardEntryDTO fieldsForRace = row.fieldsByRaceName.get(getRaceColumnName());
|
||||
if (fieldsForRace != null) {
|
||||
result = fieldsForRace.averageCrossTrackErrorInMeters;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Accumulates the distance traveled over all legs of a race
|
||||
*
|
||||
|
||||
+10
@@ -64,6 +64,13 @@ public class LegColumn extends ExpandableSortableColumn<String> {
|
||||
}
|
||||
}
|
||||
|
||||
private class AverageCrossTrackErrorInMeters extends AbstractLegDetailField<Double> {
|
||||
@Override
|
||||
protected Double getFromNonNullEntry(LegEntryDTO entry) {
|
||||
return entry.averageCrossTrackErrorInMeters;
|
||||
}
|
||||
}
|
||||
|
||||
private class CurrentSpeedOverGroundInKnots extends AbstractLegDetailField<Double> {
|
||||
@Override
|
||||
protected Double getFromNonNullEntry(LegEntryDTO entry) {
|
||||
@@ -257,6 +264,9 @@ public class LegColumn extends ExpandableSortableColumn<String> {
|
||||
result.put(DetailType.TIME_TRAVELED, new FormattedDoubleLegDetailColumn(stringConstants.time(),
|
||||
"[" + stringConstants.secondsUnit() + "]", new TimeTraveledInSeconds(), 0,
|
||||
getLeaderboardPanel().getLeaderboardTable(), detailHeaderStyle, detailColumnStyle));
|
||||
result.put(DetailType.AVERAGE_CROSS_TRACK_ERROR_IN_METERS, new FormattedDoubleLegDetailColumn(stringConstants.averageCrossTrackErrorInMeters(),
|
||||
"[" + stringConstants.metersUnit() + "]", new AverageCrossTrackErrorInMeters(), 0,
|
||||
getLeaderboardPanel().getLeaderboardTable(), detailHeaderStyle, detailColumnStyle));
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
+4
-2
@@ -335,6 +335,7 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
|
||||
}
|
||||
final Distance windwardDistanceToOverallLeader = trackedRace == null ? null : trackedRace.getWindwardDistanceToOverallLeader(competitor, timePoint);
|
||||
entryDTO.windwardDistanceToOverallLeaderInMeters = windwardDistanceToOverallLeader == null ? null : windwardDistanceToOverallLeader.getMeters();
|
||||
entryDTO.averageCrossTrackErrorInMeters = trackedRace.getAverageCrossTrackError(competitor, timePoint).getMeters();
|
||||
return entryDTO;
|
||||
}
|
||||
|
||||
@@ -345,8 +346,9 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
|
||||
} else {
|
||||
result = new LegEntryDTO();
|
||||
final Speed averageSpeedOverGround = trackedLeg.getAverageSpeedOverGround(timePoint);
|
||||
result.averageSpeedOverGroundInKnots = averageSpeedOverGround == null ? null : averageSpeedOverGround
|
||||
.getKnots();
|
||||
result.averageSpeedOverGroundInKnots = averageSpeedOverGround == null ? null : averageSpeedOverGround.getKnots();
|
||||
final Distance averageCrossTrackError = trackedLeg.getAverageCrossTrackError(timePoint);
|
||||
result.averageCrossTrackErrorInMeters = averageCrossTrackError == null ? null : averageCrossTrackError.getMeters();
|
||||
Double speedOverGroundInKnots;
|
||||
if (trackedLeg.hasFinishedLeg(timePoint)) {
|
||||
speedOverGroundInKnots = averageSpeedOverGround == null ? null : averageSpeedOverGround.getKnots();
|
||||
|
||||
+8
@@ -26,6 +26,8 @@ public class LeaderboardEntryDTO implements IsSerializable {
|
||||
|
||||
public Double windwardDistanceToOverallLeaderInMeters;
|
||||
|
||||
public Double averageCrossTrackErrorInMeters;
|
||||
|
||||
/**
|
||||
* If <code>null</code>, no leg details are known yet, the race is not being tracked or the details
|
||||
* haven't been requested from the server yet. Otherwise, the list holds one entry per {@link Leg} of the
|
||||
@@ -40,6 +42,7 @@ public class LeaderboardEntryDTO implements IsSerializable {
|
||||
result = prime * result + (discarded ? 1231 : 1237);
|
||||
result = prime * result + ((legDetails == null) ? 0 : legDetails.hashCode());
|
||||
result = prime * result + netPoints;
|
||||
result = prime * result + ((averageCrossTrackErrorInMeters == null) ? 0 : averageCrossTrackErrorInMeters.hashCode());
|
||||
result = prime * result + ((reasonForMaxPoints == null) ? 0 : reasonForMaxPoints.hashCode());
|
||||
result = prime * result + ((windwardDistanceToOverallLeaderInMeters == null) ? 0 : windwardDistanceToOverallLeaderInMeters.hashCode());
|
||||
result = prime * result + totalPoints;
|
||||
@@ -74,6 +77,11 @@ public class LeaderboardEntryDTO implements IsSerializable {
|
||||
return false;
|
||||
} else if (!windwardDistanceToOverallLeaderInMeters.equals(other.windwardDistanceToOverallLeaderInMeters))
|
||||
return false;
|
||||
if (averageCrossTrackErrorInMeters == null) {
|
||||
if (other.averageCrossTrackErrorInMeters != null)
|
||||
return false;
|
||||
} else if (!averageCrossTrackErrorInMeters.equals(other.averageCrossTrackErrorInMeters))
|
||||
return false;
|
||||
if (totalPoints != other.totalPoints)
|
||||
return false;
|
||||
return true;
|
||||
|
||||
+1
@@ -38,6 +38,7 @@ public class LegEntryDTO implements IsSerializable {
|
||||
public Integer numberOfJibes;
|
||||
public Integer numberOfTacks;
|
||||
public Integer numberOfPenaltyCircles;
|
||||
public Double averageCrossTrackErrorInMeters;
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
|
||||
Reference in new issue
Block a user