Merge branch 'master' into dev

This commit is contained in:
Axel Uhl
2013-01-26 20:28:26 +01:00
15 changed files with 68 additions and 34 deletions
@@ -0,0 +1,3 @@
package com.sap.sailing.domain.common;
public enum TrackedRaceStatusEnum { PREPARED, LOADING, TRACKING, FINISHED }
@@ -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));
}
}
}
@@ -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();
@@ -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();
}
@@ -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) {
@@ -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;
}
@@ -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;
@@ -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);
@@ -488,4 +488,7 @@ public interface StringMessages extends Messages {
String rankColumnTooltip();
String carryColumnTooltip();
String totalsColumnTooltip();
String windData();
String gpsData();
String status();
}
@@ -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
@@ -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
@@ -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;
@@ -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))+"%)" : "");
}
}