mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-11 06:40:53 +00:00
Merge branch 'gwt' of ssh://git.wdf.sap.corp:29418/SAPSail/sapsailingcapture into gwt
This commit is contained in:
commit
3706d462cd
3 files changed
+19
-37
No files matched your search
@@ -1,55 +1,35 @@
|
|||||||
Axel
|
Axel
|
||||||
====
|
====
|
||||||
|
|
||||||
- Make threshold for track smoothening configurable
|
|
||||||
|
|
||||||
- Implement refined version of isValid in GPSFixMovingTrack taking into account the
|
|
||||||
speed as contained by each individual fix
|
|
||||||
|
|
||||||
- consider an array-based implementation of TrackImpl, sorted ascending by time point; inserting
|
- consider an array-based implementation of TrackImpl, sorted ascending by time point; inserting
|
||||||
with a not-maximal time point requires some shifting but should be the rare exception in all our
|
with a not-maximal time point requires some shifting but should be the rare exception in all our
|
||||||
use cases.
|
use cases.
|
||||||
|
|
||||||
- Need to adjust PartialNavigableSetView to work on any ordered sequential structure
|
- Need to adjust PartialNavigableSetView to work on any ordered sequential structure
|
||||||
|
|
||||||
- Need synchronization while looping over a course's legs because the course may be updated
|
- Make threshold for track smoothening configurable. Currently, we have millisecondsOverWhichToAverage.
|
||||||
as the loop executes:
|
This is also used as response to getMillisecondsOverWhichToAverageSpeed. Probably, we should at least
|
||||||
|
additionally have a common way to eliminate impossible or highly unlikely fixes. This could rather be
|
||||||
|
a configurable speed threshold. Once the outliers have been eliminated, smoothening in terms of
|
||||||
|
weighted averaging around the time point requested should happen, based on an acceleration model
|
||||||
|
that eventually could be specific to the boat class. The acceleration model would tell us how to,
|
||||||
|
e.g., based on splines, interpolate and smoothen what remains from the fixes.
|
||||||
|
|
||||||
Exception in thread "com.sap.sailing.domain.test.CourseUpdateTest$1" java.util.ConcurrentModificationException
|
- Implement refined version of isValid in GPSFixMovingTrack taking into account the
|
||||||
at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
|
speed as contained by each individual fix
|
||||||
at java.util.AbstractList$Itr.next(AbstractList.java:343)
|
|
||||||
at java.util.Collections$UnmodifiableCollection$1.next(Collections.java:1010)
|
|
||||||
at com.sap.sailing.domain.tracking.impl.TrackedRaceImpl.<init>(TrackedRaceImpl.java:109)
|
|
||||||
at com.sap.sailing.domain.tracking.impl.DynamicTrackedRaceImpl.<init>(DynamicTrackedRaceImpl.java:39)
|
|
||||||
at com.sap.sailing.domain.tractracadapter.impl.DomainFactoryImpl.trackRace(DomainFactoryImpl.java:470)
|
|
||||||
at com.sap.sailing.domain.tractracadapter.impl.RaceCourseReceiver.createTrackedRace(RaceCourseReceiver.java:114)
|
|
||||||
at com.sap.sailing.domain.tractracadapter.impl.RaceCourseReceiver.handleEvent(RaceCourseReceiver.java:104)
|
|
||||||
at com.sap.sailing.domain.test.CourseUpdateTest$1.handleEvent(CourseUpdateTest.java:80)
|
|
||||||
at com.sap.sailing.domain.tractracadapter.impl.AbstractReceiverWithQueue.run(AbstractReceiverWithQueue.java:50)
|
|
||||||
at java.lang.Thread.run(Thread.java:619)
|
|
||||||
|
|
||||||
- Finish a first draft version of a GWT admin UI
|
- Finish a first draft version of a GWT admin UI
|
||||||
|
|
||||||
* "top" display, with time slider
|
* "top" display, with time slider
|
||||||
|
* leaderboard page (scrollable!)
|
||||||
* configure one or more leaderboards from a selection of races, adjustable delay per leaderboard
|
* configure one or more leaderboards from a selection of races, adjustable delay per leaderboard
|
||||||
* each leaderboard has its own URL
|
* each leaderboard has its own URL
|
||||||
* wind display
|
* wind display
|
||||||
|
* edit mode for disqualifications / net / total point adjustments
|
||||||
* store net / total points separately in Mongo, making them overridable in editable copy of leaderboard
|
* store net / total points separately in Mongo, making them overridable in editable copy of leaderboard
|
||||||
* time slider, adjustable delay per leaderboard
|
|
||||||
* consider a per-user preferences page where leaderboard columns can be personalized at runtime
|
* consider a per-user preferences page where leaderboard columns can be personalized at runtime
|
||||||
* mark position entry capability, supporting "lost mark tracker" use case
|
* mark position entry capability, supporting "lost mark tracker" use case
|
||||||
|
|
||||||
- New GWT-based leaderboard draft
|
|
||||||
|
|
||||||
* generally based on existing leaderboard
|
|
||||||
* scrollable!
|
|
||||||
* edit mode for disqualifications / net / total point adjustments
|
|
||||||
* Google Map integration
|
|
||||||
* time slider, adjustable delay per leaderboard
|
|
||||||
|
|
||||||
- smoothen GPSTracks; if a particular fix seems really off, producing a speed that is beyond
|
|
||||||
what the boat class could possibly do, ignore the fix because it is obviously a mis-read.
|
|
||||||
|
|
||||||
- Distribute wind data to their respective races; capture expedition wind not by race/event anymore because
|
- Distribute wind data to their respective races; capture expedition wind not by race/event anymore because
|
||||||
wind is already recorded by time and position; when seeking wind information, look for information
|
wind is already recorded by time and position; when seeking wind information, look for information
|
||||||
closest in time/space; consider throwing NoWindException if certain thresholds are crossed
|
closest in time/space; consider throwing NoWindException if certain thresholds are crossed
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ public class CourseImpl extends NamedImpl implements Course {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addWaypoint(int zeroBasedPosition, Waypoint waypointToAdd) {
|
public synchronized void addWaypoint(int zeroBasedPosition, Waypoint waypointToAdd) {
|
||||||
waypoints.add(zeroBasedPosition, waypointToAdd);
|
waypoints.add(zeroBasedPosition, waypointToAdd);
|
||||||
int legStartWaypointIndex;
|
int legStartWaypointIndex;
|
||||||
if (zeroBasedPosition == waypoints.size()-1) { // added to end
|
if (zeroBasedPosition == waypoints.size()-1) { // added to end
|
||||||
@@ -72,7 +72,7 @@ public class CourseImpl extends NamedImpl implements Course {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void removeWaypoint(int zeroBasedPosition) {
|
public synchronized void removeWaypoint(int zeroBasedPosition) {
|
||||||
if (zeroBasedPosition >= 0) {
|
if (zeroBasedPosition >= 0) {
|
||||||
boolean isLast = zeroBasedPosition == waypoints.size()-1;
|
boolean isLast = zeroBasedPosition == waypoints.size()-1;
|
||||||
Waypoint removedWaypoint = waypoints.remove(zeroBasedPosition);
|
Waypoint removedWaypoint = waypoints.remove(zeroBasedPosition);
|
||||||
@@ -147,7 +147,7 @@ public class CourseImpl extends NamedImpl implements Course {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Waypoint getWaypointForControlPoint(ControlPoint controlPoint, int start) {
|
public synchronized Waypoint getWaypointForControlPoint(ControlPoint controlPoint, int start) {
|
||||||
if (start > legs.size()) {
|
if (start > legs.size()) {
|
||||||
throw new IllegalArgumentException("Starting to search beyond end of course: "+start+" vs. "+(legs.size()+1));
|
throw new IllegalArgumentException("Starting to search beyond end of course: "+start+" vs. "+(legs.size()+1));
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-3
@@ -106,8 +106,11 @@ public abstract class TrackedRaceImpl implements TrackedRace, CourseListener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
trackedLegs = new LinkedHashMap<Leg, TrackedLeg>();
|
trackedLegs = new LinkedHashMap<Leg, TrackedLeg>();
|
||||||
for (Leg leg : race.getCourse().getLegs()) {
|
synchronized (race.getCourse()) {
|
||||||
trackedLegs.put(leg, createTrackedLeg(leg));
|
for (Leg leg : race.getCourse().getLegs()) {
|
||||||
|
trackedLegs.put(leg, createTrackedLeg(leg));
|
||||||
|
}
|
||||||
|
getRace().getCourse().addCourseListener(this);
|
||||||
}
|
}
|
||||||
markPassingsForCompetitor = new HashMap<Competitor, NavigableSet<MarkPassing>>();
|
markPassingsForCompetitor = new HashMap<Competitor, NavigableSet<MarkPassing>>();
|
||||||
tracks = new HashMap<Competitor, GPSFixTrack<Competitor, GPSFixMoving>>();
|
tracks = new HashMap<Competitor, GPSFixTrack<Competitor, GPSFixMoving>>();
|
||||||
@@ -125,7 +128,6 @@ public abstract class TrackedRaceImpl implements TrackedRace, CourseListener {
|
|||||||
}
|
}
|
||||||
currentWindSource = WindSource.EXPEDITION;
|
currentWindSource = WindSource.EXPEDITION;
|
||||||
competitorRankings = new HashMap<TimePoint, List<Competitor>>();
|
competitorRankings = new HashMap<TimePoint, List<Competitor>>();
|
||||||
getRace().getCourse().addCourseListener(this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in new issue
Block a user