mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-29 08:56:43 +00:00
Merge branch 'master' into dev
This commit is contained in:
Executable
+3
@@ -0,0 +1,3 @@
|
||||
package com.sap.sailing.domain.common;
|
||||
|
||||
public enum TrackedRaceStatusEnum { PREPARED, LOADING, TRACKING, FINISHED }
|
||||
+4
-4
@@ -29,6 +29,7 @@ import com.sap.sailing.domain.base.impl.MillisecondsTimePoint;
|
||||
import com.sap.sailing.domain.common.Bearing;
|
||||
import com.sap.sailing.domain.common.Position;
|
||||
import com.sap.sailing.domain.common.TimePoint;
|
||||
import com.sap.sailing.domain.common.TrackedRaceStatusEnum;
|
||||
import com.sap.sailing.domain.common.WindSourceType;
|
||||
import com.sap.sailing.domain.common.impl.DegreeBearingImpl;
|
||||
import com.sap.sailing.domain.common.impl.DegreePosition;
|
||||
@@ -44,7 +45,6 @@ import com.sap.sailing.domain.tracking.MarkPassing;
|
||||
import com.sap.sailing.domain.tracking.TrackedRace;
|
||||
import com.sap.sailing.domain.tracking.TrackedRegattaRegistry;
|
||||
import com.sap.sailing.domain.tracking.WindTrack;
|
||||
import com.sap.sailing.domain.tracking.TrackedRaceStatus.Status;
|
||||
import com.sap.sailing.domain.tracking.impl.EmptyWindStore;
|
||||
import com.sap.sailing.domain.tracking.impl.GPSFixMovingImpl;
|
||||
import com.sap.sailing.domain.tracking.impl.MarkPassingImpl;
|
||||
@@ -309,7 +309,7 @@ public class SwissTimingReplayToDomainAdapter extends SwissTimingReplayAdapter {
|
||||
WindTrack.DEFAULT_MILLISECONDS_OVER_WHICH_TO_AVERAGE_WIND,
|
||||
/* time over which to average speed: */ race.getBoatClass().getApproximateManeuverDurationInMilliseconds(),
|
||||
/* raceDefinitionSetToUpdate */ null);
|
||||
trackedRace.setStatus(new TrackedRaceStatusImpl(Status.LOADING, 0));
|
||||
trackedRace.setStatus(new TrackedRaceStatusImpl(TrackedRaceStatusEnum.LOADING, 0));
|
||||
TimePoint bestStartTimeKnownSoFar = bestStartTimePerRaceID.get(currentRaceID);
|
||||
if (bestStartTimeKnownSoFar != null) {
|
||||
trackedRace.setStartTimeReceived(bestStartTimeKnownSoFar);
|
||||
@@ -372,13 +372,13 @@ public class SwissTimingReplayToDomainAdapter extends SwissTimingReplayAdapter {
|
||||
@Override
|
||||
public void progress(double progress) {
|
||||
DynamicTrackedRace trackedRace = trackedRacePerRaceID.get(currentRaceID);
|
||||
trackedRace.setStatus(new TrackedRaceStatusImpl(Status.LOADING, progress));
|
||||
trackedRace.setStatus(new TrackedRaceStatusImpl(TrackedRaceStatusEnum.LOADING, progress));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void eot() {
|
||||
for (DynamicTrackedRace trackedRace : getTrackedRaces()) {
|
||||
trackedRace.setStatus(new TrackedRaceStatusImpl(Status.FINISHED, 1.0));
|
||||
trackedRace.setStatus(new TrackedRaceStatusImpl(TrackedRaceStatusEnum.FINISHED, 1.0));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+5
-5
@@ -30,6 +30,7 @@ import com.sap.sailing.domain.base.Waypoint;
|
||||
import com.sap.sailing.domain.base.impl.MillisecondsTimePoint;
|
||||
import com.sap.sailing.domain.common.Position;
|
||||
import com.sap.sailing.domain.common.TimePoint;
|
||||
import com.sap.sailing.domain.common.TrackedRaceStatusEnum;
|
||||
import com.sap.sailing.domain.common.impl.Util.Triple;
|
||||
import com.sap.sailing.domain.tracking.AbstractRaceTrackerImpl;
|
||||
import com.sap.sailing.domain.tracking.DynamicGPSFixTrack;
|
||||
@@ -43,7 +44,6 @@ import com.sap.sailing.domain.tracking.TrackedRegatta;
|
||||
import com.sap.sailing.domain.tracking.TrackedRegattaRegistry;
|
||||
import com.sap.sailing.domain.tracking.WindStore;
|
||||
import com.sap.sailing.domain.tracking.WindTrack;
|
||||
import com.sap.sailing.domain.tracking.TrackedRaceStatus.Status;
|
||||
import com.sap.sailing.domain.tracking.impl.EmptyWindStore;
|
||||
import com.sap.sailing.domain.tracking.impl.GPSFixImpl;
|
||||
import com.sap.sailing.domain.tracking.impl.TrackedRaceStatusImpl;
|
||||
@@ -411,7 +411,7 @@ public class TracTracRaceTrackerImpl extends AbstractRaceTrackerImpl implements
|
||||
for (RaceDefinition race : getRaces()) {
|
||||
DynamicTrackedRace trackedRace = getTrackedRegatta().getExistingTrackedRace(race);
|
||||
if (trackedRace != null) {
|
||||
trackedRace.setStatus(new TrackedRaceStatusImpl(Status.FINISHED, 1.0));
|
||||
trackedRace.setStatus(new TrackedRaceStatusImpl(TrackedRaceStatusEnum.FINISHED, 1.0));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -422,7 +422,7 @@ public class TracTracRaceTrackerImpl extends AbstractRaceTrackerImpl implements
|
||||
for (RaceDefinition race : getRaces()) {
|
||||
DynamicTrackedRace trackedRace = getTrackedRegatta().getExistingTrackedRace(race);
|
||||
if (trackedRace != null) {
|
||||
trackedRace.setStatus(new TrackedRaceStatusImpl(Status.LOADING, 0));
|
||||
trackedRace.setStatus(new TrackedRaceStatusImpl(TrackedRaceStatusEnum.LOADING, 0));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -433,7 +433,7 @@ public class TracTracRaceTrackerImpl extends AbstractRaceTrackerImpl implements
|
||||
for (RaceDefinition race : getRaces()) {
|
||||
DynamicTrackedRace trackedRace = getTrackedRegatta().getExistingTrackedRace(race);
|
||||
if (trackedRace != null) {
|
||||
trackedRace.setStatus(new TrackedRaceStatusImpl(Status.TRACKING, 1));
|
||||
trackedRace.setStatus(new TrackedRaceStatusImpl(TrackedRaceStatusEnum.TRACKING, 1));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -444,7 +444,7 @@ public class TracTracRaceTrackerImpl extends AbstractRaceTrackerImpl implements
|
||||
for (RaceDefinition race : getRaces()) {
|
||||
DynamicTrackedRace trackedRace = getTrackedRegatta().getExistingTrackedRace(race);
|
||||
if (trackedRace != null) {
|
||||
trackedRace.setStatus(new TrackedRaceStatusImpl(Status.LOADING, progress));
|
||||
trackedRace.setStatus(new TrackedRaceStatusImpl(TrackedRaceStatusEnum.LOADING, progress));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@ import com.sap.sailing.domain.common.Position;
|
||||
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
||||
import com.sap.sailing.domain.common.Tack;
|
||||
import com.sap.sailing.domain.common.TimePoint;
|
||||
import com.sap.sailing.domain.common.TrackedRaceStatusEnum;
|
||||
import com.sap.sailing.domain.common.WindSource;
|
||||
import com.sap.sailing.domain.common.WindSourceType;
|
||||
import com.sap.sailing.domain.common.impl.Util.Pair;
|
||||
@@ -454,7 +455,7 @@ public interface TrackedRace extends Serializable {
|
||||
TrackedRaceStatus getStatus();
|
||||
|
||||
/**
|
||||
* If the {@link #getStatus() status} is currently {@link TrackedRaceStatus.Status#LOADING}, blocks until the status changes to any
|
||||
* If the {@link #getStatus() status} is currently {@link TrackedRaceStatusEnum#LOADING}, blocks until the status changes to any
|
||||
* other status.
|
||||
*/
|
||||
void waitUntilNotLoading();
|
||||
|
||||
+6
-6
@@ -2,6 +2,8 @@ package com.sap.sailing.domain.tracking;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import com.sap.sailing.domain.common.TrackedRaceStatusEnum;
|
||||
|
||||
/**
|
||||
* Races undergo a variety of different states in our application. They may be created with a competitor list, maybe not
|
||||
* having a confirmed course yet and not even an expected start time. Later, the start time may be set. The race starts,
|
||||
@@ -17,17 +19,15 @@ import java.io.Serializable;
|
||||
*
|
||||
*/
|
||||
public interface TrackedRaceStatus extends Serializable {
|
||||
public static enum Status { PREPARED, LOADING, TRACKING, FINISHED };
|
||||
|
||||
Status getStatus();
|
||||
TrackedRaceStatusEnum getStatus();
|
||||
|
||||
/**
|
||||
* Particularly interesting when the {@link #getStatus() status} is {@link Status#LOADING}. Indicates the progress
|
||||
* Particularly interesting when the {@link #getStatus() status} is {@link TrackedRaceStatusEnum#LOADING}. Indicates the progress
|
||||
* of loading the race's tracking data.
|
||||
*
|
||||
* @return a value in the range of 0.0 to 1.0 where 0.0 means no progress yet and 1.0 means loading has completed.
|
||||
* 1.0 will, however, hardly be seen in state {@link Status#LOADING} because the status will probably
|
||||
* already have transitioned to {@link Status#TRACKING} or {@link Status#FINISHED}.
|
||||
* 1.0 will, however, hardly be seen in state {@link TrackedRaceStatusEnum#LOADING} because the status will probably
|
||||
* already have transitioned to {@link TrackedRaceStatusEnum#TRACKING} or {@link TrackedRaceStatusEnum#FINISHED}.
|
||||
*/
|
||||
double getLoadingProgress();
|
||||
}
|
||||
|
||||
+3
-3
@@ -56,6 +56,7 @@ import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
||||
import com.sap.sailing.domain.common.RegattaNameAndRaceName;
|
||||
import com.sap.sailing.domain.common.Tack;
|
||||
import com.sap.sailing.domain.common.TimePoint;
|
||||
import com.sap.sailing.domain.common.TrackedRaceStatusEnum;
|
||||
import com.sap.sailing.domain.common.WindSource;
|
||||
import com.sap.sailing.domain.common.WindSourceType;
|
||||
import com.sap.sailing.domain.common.impl.Util;
|
||||
@@ -78,7 +79,6 @@ 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.TrackedRaceStatus;
|
||||
import com.sap.sailing.domain.tracking.TrackedRaceStatus.Status;
|
||||
import com.sap.sailing.domain.tracking.TrackedRegatta;
|
||||
import com.sap.sailing.domain.tracking.Wind;
|
||||
import com.sap.sailing.domain.tracking.WindStore;
|
||||
@@ -252,7 +252,7 @@ public abstract class TrackedRaceImpl implements TrackedRace, CourseListener {
|
||||
long delayForWindEstimationCacheInvalidation) {
|
||||
super();
|
||||
locksForMarkPassings = new IdentityHashMap<>();
|
||||
this.status = new TrackedRaceStatusImpl(Status.PREPARED, 0.0);
|
||||
this.status = new TrackedRaceStatusImpl(TrackedRaceStatusEnum.PREPARED, 0.0);
|
||||
this.statusNotifier = new Object[0];
|
||||
this.serializationLock = new NamedReentrantReadWriteLock("Serialization lock for tracked race "+race.getName(), /* fair */ true);
|
||||
this.cacheInvalidationTimerLock = new Object();
|
||||
@@ -2228,7 +2228,7 @@ public abstract class TrackedRaceImpl implements TrackedRace, CourseListener {
|
||||
@Override
|
||||
public void waitUntilNotLoading() {
|
||||
synchronized (getStatusNotifier()) {
|
||||
while (getStatus().getStatus() == Status.LOADING) {
|
||||
while (getStatus().getStatus() == TrackedRaceStatusEnum.LOADING) {
|
||||
try {
|
||||
getStatusNotifier().wait();
|
||||
} catch (InterruptedException e) {
|
||||
|
||||
+5
-4
@@ -1,26 +1,27 @@
|
||||
package com.sap.sailing.domain.tracking.impl;
|
||||
|
||||
import com.sap.sailing.domain.common.TrackedRaceStatusEnum;
|
||||
import com.sap.sailing.domain.tracking.TrackedRaceStatus;
|
||||
|
||||
/**
|
||||
* Starts out in state {@link Status#PREPARED} with loading progress 0.0.
|
||||
* Starts out in state {@link TrackedRaceStatusEnum#PREPARED} with loading progress 0.0.
|
||||
*
|
||||
* @author Axel Uhl (D043530)
|
||||
*
|
||||
*/
|
||||
public class TrackedRaceStatusImpl implements TrackedRaceStatus {
|
||||
private static final long serialVersionUID = 6443697957620826443L;
|
||||
private final TrackedRaceStatus.Status status;
|
||||
private final TrackedRaceStatusEnum status;
|
||||
private final double loadingProgress;
|
||||
|
||||
public TrackedRaceStatusImpl(Status status, double loadingProgress) {
|
||||
public TrackedRaceStatusImpl(TrackedRaceStatusEnum status, double loadingProgress) {
|
||||
super();
|
||||
this.status = status;
|
||||
this.loadingProgress = loadingProgress;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Status getStatus() {
|
||||
public TrackedRaceStatusEnum getStatus() {
|
||||
return status;
|
||||
}
|
||||
|
||||
|
||||
+10
-2
@@ -362,13 +362,21 @@ public abstract class AbstractTrackedRacesListComposite extends SimplePanel impl
|
||||
}
|
||||
};
|
||||
|
||||
TextColumn<RaceDTO> raceStatusColumn = new TextColumn<RaceDTO>() {
|
||||
@Override
|
||||
public String getValue(RaceDTO raceDTO) {
|
||||
return raceDTO.status == null ? "" : raceDTO.status.toString();
|
||||
}
|
||||
};
|
||||
|
||||
raceTable.addColumn(regattaNameColumn, stringMessages.regatta());
|
||||
raceTable.addColumn(boatClassNameColumn, stringMessages.boatClass());
|
||||
raceTable.addColumn(raceNameColumn, stringMessages.race());
|
||||
raceTable.addColumn(raceStartColumn, stringMessages.startTime());
|
||||
raceTable.addColumn(raceTrackedColumn, stringMessages.tracked());
|
||||
raceTable.addColumn(hasWindDataColumn, "Wind data");
|
||||
raceTable.addColumn(hasGPSDataColumn, "GPS data");
|
||||
raceTable.addColumn(hasWindDataColumn, stringMessages.windData());
|
||||
raceTable.addColumn(hasGPSDataColumn, stringMessages.gpsData());
|
||||
raceTable.addColumn(raceStatusColumn, stringMessages.status());
|
||||
|
||||
raceTable.addColumn(raceLiveDelayColumn, stringMessages.delayInSeconds());
|
||||
return columnSortHandler;
|
||||
|
||||
-7
@@ -26,12 +26,9 @@ import com.sap.sailing.gwt.ui.shared.components.SettingsDialog;
|
||||
* the {@link AdminConsoleEntryPoint}.
|
||||
*/
|
||||
public class TrackedRacesListComposite extends AbstractTrackedRacesListComposite {
|
||||
|
||||
private final Set<TrackedRaceChangedListener> raceIsTrackedRaceChangeListener;
|
||||
|
||||
private Button btnUntrack;
|
||||
private Button btnRemoveRace;
|
||||
|
||||
private Button btnSetDelayToLive;
|
||||
|
||||
public TrackedRacesListComposite(final SailingServiceAsync sailingService, final ErrorReporter errorReporter,
|
||||
@@ -48,10 +45,6 @@ public class TrackedRacesListComposite extends AbstractTrackedRacesListComposite
|
||||
SettingsDialog<TrackedRacesSettings> settingsDialog = new SettingsDialog<TrackedRacesSettings>(this, stringMessages);
|
||||
settingsDialog.show();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public void addTrackedRaceChangeListener(TrackedRaceChangedListener listener) {
|
||||
this.raceIsTrackedRaceChangeListener.add(listener);
|
||||
|
||||
+3
@@ -488,4 +488,7 @@ public interface StringMessages extends Messages {
|
||||
String rankColumnTooltip();
|
||||
String carryColumnTooltip();
|
||||
String totalsColumnTooltip();
|
||||
String windData();
|
||||
String gpsData();
|
||||
String status();
|
||||
}
|
||||
|
||||
+4
-1
@@ -488,4 +488,7 @@ competitorColumnTooltip=Names of the members of this competitor.
|
||||
sailIdColumnTooltip=Shows the flag of the country and the sail number of the competitor.
|
||||
rankColumnTooltip=The overall rank of this competitor in the regatta.
|
||||
carryColumnTooltip=Points carried over from previous races.
|
||||
totalsColumnTooltip=The total of all points of a competitor in the regatta.
|
||||
totalsColumnTooltip=The total of all points of a competitor in the regatta.
|
||||
windData=Wind data
|
||||
gpsData=GPS data
|
||||
status=Status
|
||||
+4
-1
@@ -489,4 +489,7 @@ competitorColumnTooltip=Namen der Segler dieses Teilnehmers
|
||||
sailIdColumnTooltip=Zeigt die Länderflagge und die Segelnummer des Teilnehmers
|
||||
rankColumnTooltip=Der Gesamtplatz des Teilnehmers in der Regatta
|
||||
carryColumnTooltip=Übertrag vergangener Rennen
|
||||
totalsColumnTooltip=Summe aller Punkte eines Teilnehmers in der Regatta
|
||||
totalsColumnTooltip=Summe aller Punkte eines Teilnehmers in der Regatta
|
||||
windData=Winddaten
|
||||
gpsData=GPS-Daten
|
||||
status=Status
|
||||
+4
@@ -172,6 +172,7 @@ 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.RaceStatusDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceTimesInfoDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceWithCompetitorsDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RegattaDTO;
|
||||
@@ -1072,6 +1073,9 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
|
||||
if (trackedRace != null) {
|
||||
raceDTO.startOfRace = trackedRace.getStartOfRace() == null ? null : trackedRace.getStartOfRace().asDate();
|
||||
raceDTO.endOfRace = trackedRace.getEndOfRace() == null ? null : trackedRace.getEndOfRace().asDate();
|
||||
raceDTO.status = new RaceStatusDTO();
|
||||
raceDTO.status.status = trackedRace.getStatus().getStatus();
|
||||
raceDTO.status.loadingProgress = trackedRace.getStatus().getLoadingProgress();
|
||||
}
|
||||
raceDTO.boatClass = regatta.getBoatClass() == null ? null : regatta.getBoatClass().getName();
|
||||
result.add(raceDTO);
|
||||
|
||||
@@ -16,6 +16,7 @@ public class RaceDTO extends NamedDTO implements IsSerializable {
|
||||
|
||||
public Date startOfRace;
|
||||
public Date endOfRace;
|
||||
public RaceStatusDTO status;
|
||||
|
||||
public PlacemarkOrderDTO places;
|
||||
|
||||
|
||||
Executable
+14
@@ -0,0 +1,14 @@
|
||||
package com.sap.sailing.gwt.ui.shared;
|
||||
|
||||
import com.google.gwt.user.client.rpc.IsSerializable;
|
||||
import com.sap.sailing.domain.common.TrackedRaceStatusEnum;
|
||||
|
||||
public class RaceStatusDTO implements IsSerializable {
|
||||
public TrackedRaceStatusEnum status;
|
||||
public double loadingProgress;
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return status.name() + (status==TrackedRaceStatusEnum.LOADING ? " ("+((int) (loadingProgress*100))+"%)" : "");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user