diff --git a/java/com.sap.sailing.declination/NOAAImporter (Proxy).launch b/java/com.sap.sailing.declination/NOAAImporter (Proxy).launch
index 1a27965d61c..68b91652d08 100644
--- a/java/com.sap.sailing.declination/NOAAImporter (Proxy).launch
+++ b/java/com.sap.sailing.declination/NOAAImporter (Proxy).launch
@@ -7,7 +7,7 @@
-
+
diff --git a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/Wind.java b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/Wind.java
index 3f4dab0f8b4..a45da5628ec 100755
--- a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/Wind.java
+++ b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/Wind.java
@@ -10,7 +10,14 @@ import com.sap.sse.common.Timed;
*
* Note that sometimes a wind measurement is transmitted without its position. While this is useless
* for wind field interpolation, it can still serve good uses when some wind direction is better than
- * no wind direction at all. In this case, {@link #getPosition()} will return null.
+ * no wind direction at all. In this case, {@link #getPosition()} will return null.
+ *
+ * When processing wind in the scope of a {@link TrackedRace}, it should always use true, not magnetic,
+ * directions. However, during capturing wind, e.g., on a committee boat, sometimes it is easier for
+ * users to capture wind using a magnetic direction which needs to be corrected by the magnetic
+ * variation / declination in order to produce a true direction. It depends on the context in which
+ * objects of this type are produced and used whether this represents a true or magnetic wind direction.
+ * For conversion, use a {@link DeclinationService} instance.
*
* @author Axel Uhl (d043530)
*
diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/DomainObjectFactoryImpl.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/DomainObjectFactoryImpl.java
index b32457da726..f307d9cc290 100644
--- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/DomainObjectFactoryImpl.java
+++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/DomainObjectFactoryImpl.java
@@ -1323,9 +1323,9 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
} else if (eventClass.equals(RaceLogStartProcedureChangedEvent.class.getSimpleName())) {
return loadRaceLogStartProcedureChangedEvent(createdAt, author, logicalTimePoint, id, passId, competitors, dbObject);
} else if (eventClass.equals(RaceLogProtestStartTimeEvent.class.getSimpleName())) {
- return loadRaceLogRaceLogProtestStartTimeEvent(createdAt, author, logicalTimePoint, id, passId, competitors, dbObject);
+ return loadRaceLogProtestStartTimeEvent(createdAt, author, logicalTimePoint, id, passId, competitors, dbObject);
} else if (eventClass.equals(RaceLogWindFixEvent.class.getSimpleName())) {
- return loadRaceLogRaceLogWindFixEvent(createdAt, author, logicalTimePoint, id, passId, competitors, dbObject);
+ return loadRaceLogWindFixEvent(createdAt, author, logicalTimePoint, id, passId, competitors, dbObject);
} else if (eventClass.equals(RaceLogDeviceCompetitorMappingEvent.class.getSimpleName())) {
return loadRaceLogDeviceCompetitorMappingEvent(createdAt, author, logicalTimePoint, id, passId, competitors, dbObject);
} else if (eventClass.equals(RaceLogDeviceMarkMappingEvent.class.getSimpleName())) {
@@ -1353,10 +1353,11 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
throw new IllegalStateException(String.format("Unknown RaceLogEvent type %s", eventClass));
}
- private RaceLogEvent loadRaceLogRaceLogWindFixEvent(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint,
+ private RaceLogEvent loadRaceLogWindFixEvent(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint,
Serializable id, Integer passId, List competitors, DBObject dbObject) {
Wind wind = loadWind((DBObject) dbObject.get(FieldNames.WIND.name()));
- return raceLogEventFactory.createWindFixEvent(createdAt, author, logicalTimePoint, id, competitors, passId, wind);
+ Boolean isMagnetic = (Boolean) dbObject.get(FieldNames.IS_MAGNETIC.name());
+ return raceLogEventFactory.createWindFixEvent(createdAt, author, logicalTimePoint, id, competitors, passId, wind, isMagnetic == null ? true : isMagnetic);
}
private RaceLogEvent loadRaceLogDeviceCompetitorMappingEvent(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint,
@@ -1450,7 +1451,7 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
return raceLogEventFactory.createAdditionalScoringInformationEvent(createdAt, author, logicalTimePoint, id, competitors, passId, informationType);
}
- private RaceLogEvent loadRaceLogRaceLogProtestStartTimeEvent(TimePoint createdAt, AbstractLogEventAuthor author,
+ private RaceLogEvent loadRaceLogProtestStartTimeEvent(TimePoint createdAt, AbstractLogEventAuthor author,
TimePoint logicalTimePoint, Serializable id, Integer passId, List competitors, DBObject dbObject) {
TimePoint protestStartTime = loadTimePoint(dbObject, FieldNames.RACE_LOG_PROTEST_START_TIME);
return raceLogEventFactory.createProtestStartTimeEvent(createdAt, author, logicalTimePoint, id, competitors, passId, protestStartTime);
diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/FieldNames.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/FieldNames.java
index fc4fd028e43..8c8b42512db 100755
--- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/FieldNames.java
+++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/FieldNames.java
@@ -61,7 +61,7 @@ public enum FieldNames {
BOAT_CLASS_TYPICALLY_STARTS_UPWIND,
// wind:
- WIND_SOURCE_NAME, WIND_SOURCE_ID, WIND,
+ WIND_SOURCE_NAME, WIND_SOURCE_ID, WIND, IS_MAGNETIC,
// SwissTiming configuration parameters:
ST_CONFIG_NAME, ST_CONFIG_HOSTNAME, ST_CONFIG_PORT,
diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoObjectFactoryImpl.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoObjectFactoryImpl.java
index 2b7e479bcba..b2ea7921708 100644
--- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoObjectFactoryImpl.java
+++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoObjectFactoryImpl.java
@@ -935,6 +935,7 @@ public class MongoObjectFactoryImpl implements MongoObjectFactory {
storeRaceLogEventProperties(event, result);
result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogWindFixEvent.class.getSimpleName());
result.put(FieldNames.WIND.name(), storeWind(event.getWindFix()));
+ result.put(FieldNames.IS_MAGNETIC.name(), event.isMagnetic());
return result;
}
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/RaceLogEventFactory.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/RaceLogEventFactory.java
index 432f6690b41..dd6c9169caf 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/RaceLogEventFactory.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/RaceLogEventFactory.java
@@ -97,10 +97,10 @@ public interface RaceLogEventFactory {
RaceLogProtestStartTimeEvent createProtestStartTimeEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author, int passId, TimePoint protestStartTime);
- RaceLogWindFixEvent createWindFixEvent(TimePoint eventTime, AbstractLogEventAuthor author, int currentPassId, Wind wind);
+ RaceLogWindFixEvent createWindFixEvent(TimePoint eventTime, AbstractLogEventAuthor author, int currentPassId, Wind wind, boolean isMagnetic);
RaceLogWindFixEvent createWindFixEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author,
- Serializable id, List competitors, int passId, Wind wind);
+ Serializable id, List competitors, int passId, Wind wind, boolean isMagnetic);
RaceLogDeviceCompetitorMappingEvent createDeviceCompetitorMappingEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author,
DeviceIdentifier device, Competitor mappedTo, int passId, TimePoint from, TimePoint to);
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/RaceLogEventRestoreFactory.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/RaceLogEventRestoreFactory.java
index 381756e169c..1219911d501 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/RaceLogEventRestoreFactory.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/RaceLogEventRestoreFactory.java
@@ -69,7 +69,7 @@ public interface RaceLogEventRestoreFactory extends RaceLogEventFactory {
TimePoint logicalTimePoint, Serializable id, List competitors, int passId, TimePoint protestStartTime);
RaceLogWindFixEvent createWindFixEvent(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint,
- Serializable id, List competitors, Integer passId, Wind wind);
+ Serializable id, List competitors, Integer passId, Wind wind, boolean isMagnetic);
RaceLogDeviceCompetitorMappingEvent createDeviceCompetitorMappingEvent(TimePoint createdAt, AbstractLogEventAuthor author,
TimePoint logicalTimePoint, Serializable pId, DeviceIdentifier device, Competitor mappedTo, int passId, TimePoint from, TimePoint to);
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/RaceLogWindFixEvent.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/RaceLogWindFixEvent.java
index eb5a2584dc8..4850a60c1fc 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/RaceLogWindFixEvent.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/RaceLogWindFixEvent.java
@@ -12,4 +12,13 @@ public interface RaceLogWindFixEvent extends RaceLogEvent {
* Returns the wind fix entered by the race committee
*/
Wind getWindFix();
+
+ /**
+ * Usually, wind readings are expected to specify a true north-based direction. However, in some
+ * cases capturing a wind direction happens based on a magnetic compass and is not immediately corrected
+ * for the magnetic variation / declination. Should this be the case for the wind fix provided by this
+ * event, this method returns true, and a {@link DeclinationService} should be used to infer
+ * the true north-based wind direction.
+ */
+ boolean isMagnetic();
}
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogEventFactoryImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogEventFactoryImpl.java
index 86646bee693..ff3b35d6a20 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogEventFactoryImpl.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogEventFactoryImpl.java
@@ -234,14 +234,14 @@ public class RaceLogEventFactoryImpl implements RaceLogEventFactory {
}
@Override
- public RaceLogWindFixEvent createWindFixEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author, int passId, Wind wind) {
- return createWindFixEvent(logicalTimePoint, author, UUID.randomUUID(), new ArrayList(), passId, wind);
+ public RaceLogWindFixEvent createWindFixEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author, int passId, Wind wind, boolean isMagnetic) {
+ return createWindFixEvent(logicalTimePoint, author, UUID.randomUUID(), new ArrayList(), passId, wind, isMagnetic);
}
@Override
public RaceLogWindFixEvent createWindFixEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author, Serializable id,
- List competitors, int passId, Wind wind) {
- return new RaceLogWindFixEventImpl(MillisecondsTimePoint.now(), author, logicalTimePoint, id, competitors, passId, wind);
+ List competitors, int passId, Wind wind, boolean isMagnetic) {
+ return new RaceLogWindFixEventImpl(MillisecondsTimePoint.now(), author, logicalTimePoint, id, competitors, passId, wind, isMagnetic);
}
@Override
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogEventRestoreFactoryImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogEventRestoreFactoryImpl.java
index 7b5f9405413..36588de8091 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogEventRestoreFactoryImpl.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogEventRestoreFactoryImpl.java
@@ -129,8 +129,8 @@ public class RaceLogEventRestoreFactoryImpl extends RaceLogEventFactoryImpl impl
@Override
public RaceLogWindFixEvent createWindFixEvent(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint,
- Serializable id, List competitors, Integer passId, Wind wind) {
- return new RaceLogWindFixEventImpl(createdAt, author, logicalTimePoint, id, competitors, passId, wind);
+ Serializable id, List competitors, Integer passId, Wind wind, boolean isMagnetic) {
+ return new RaceLogWindFixEventImpl(createdAt, author, logicalTimePoint, id, competitors, passId, wind, isMagnetic);
}
@Override
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogWindFixEventImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogWindFixEventImpl.java
index 5d029727180..e12b27465a9 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogWindFixEventImpl.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogWindFixEventImpl.java
@@ -14,11 +14,13 @@ public class RaceLogWindFixEventImpl extends RaceLogEventImpl implements RaceLog
private static final long serialVersionUID = 7879094280634905183L;
private final Wind windFix;
+ private final boolean isMagnetic;
public RaceLogWindFixEventImpl(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint pTimePoint,
- Serializable pId, List pInvolvedBoats, int pPassId, Wind windFix) {
+ Serializable pId, List pInvolvedBoats, int pPassId, Wind windFix, boolean isMagnetic) {
super(createdAt, author, pTimePoint, pId, pInvolvedBoats, pPassId);
this.windFix = windFix;
+ this.isMagnetic = isMagnetic;
}
@Override
@@ -30,6 +32,11 @@ public class RaceLogWindFixEventImpl extends RaceLogEventImpl implements RaceLog
public Wind getWindFix() {
return windFix;
}
+
+ @Override
+ public boolean isMagnetic() {
+ return isMagnetic;
+ }
@Override
public String getShortInfo() {
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/RaceState.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/RaceState.java
index fd41968aa0b..38c0cfd5e67 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/RaceState.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/RaceState.java
@@ -177,8 +177,9 @@ public interface RaceState extends ReadonlyRaceState {
/**
* Enters a new wind fix for this race.
+ * @param isMagnetic TODO
*/
- void setWindFix(TimePoint now, Wind wind);
+ void setWindFix(TimePoint now, Wind wind, boolean isMagnetic);
/**
* Marks this race state with a new {@link RaceLogAdditionalScoringInformationEvent} or revokes
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/impl/RaceStateImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/impl/RaceStateImpl.java
index 3af740f95bc..5ce1d637e05 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/impl/RaceStateImpl.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/impl/RaceStateImpl.java
@@ -200,8 +200,8 @@ public class RaceStateImpl extends ReadonlyRaceStateImpl implements RaceState {
}
@Override
- public void setWindFix(TimePoint timePoint, Wind wind) {
- raceLog.add(factory.createWindFixEvent(timePoint, author, raceLog.getCurrentPassId(), wind));
+ public void setWindFix(TimePoint timePoint, Wind wind, boolean isMagnetic) {
+ raceLog.add(factory.createWindFixEvent(timePoint, author, raceLog.getCurrentPassId(), wind, isMagnetic));
}
@Override
diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/DynamicTrackedRaceLogListener.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/DynamicTrackedRaceLogListener.java
index b900b863654..2cf7269b27c 100755
--- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/DynamicTrackedRaceLogListener.java
+++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/DynamicTrackedRaceLogListener.java
@@ -30,16 +30,16 @@ import com.sap.sailing.domain.common.Wind;
import com.sap.sailing.domain.common.WindSource;
import com.sap.sailing.domain.common.WindSourceType;
import com.sap.sailing.domain.common.impl.WindSourceImpl;
-import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus;
import com.sap.sailing.domain.markpassingcalculation.MarkPassingUpdateListener;
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
+import com.sap.sailing.domain.tracking.TrackedRace;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.Util.Pair;
import com.sap.sse.common.Util.Triple;
/**
- * TODO: this class could be a good place to leverage more information about a race containing in the {@link RaceLog}.
- * This includes for example the {@link RaceLogRaceStatus} indicating the current race's start.
+ * Listens for changes on a {@link RaceLog} and forwards the relevant ones to a {@link TrackedRace}. Examples: start time changes;
+ * fixed mark passings changes; course design changes; wind fixes entered by the race committee.
*/
public class DynamicTrackedRaceLogListener extends BaseRaceLogEventVisitor {
@@ -227,6 +227,10 @@ public class DynamicTrackedRaceLogListener extends BaseRaceLogEventVisitor {
@Override
public void visit(RaceLogWindFixEvent event) {
// add the wind fix to the race committee WindTrack
+ final Wind wind;
+ if (event.isMagnetic()) {
+ final DeclinationService declinationService;
+ }
trackedRace.recordWind(event.getWindFix(), raceCommitteeWindSource);
}
diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java
index 3a785160eaa..3f3db8538b0 100755
--- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java
+++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java
@@ -205,7 +205,7 @@ public abstract class TrackedRaceImpl extends TrackedRaceWithWindEssentials impl
* Race start time as announced by the tracking infrastructure
*/
private TimePoint startTimeReceived;
-
+
/**
* The calculated race start time
*/
diff --git a/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestStoringAndRetrievingRaceLogInLeaderboards.java b/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestStoringAndRetrievingRaceLogInLeaderboards.java
index 6beefe5bbee..8644fe893c8 100644
--- a/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestStoringAndRetrievingRaceLogInLeaderboards.java
+++ b/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestStoringAndRetrievingRaceLogInLeaderboards.java
@@ -503,7 +503,7 @@ public class TestStoringAndRetrievingRaceLogInLeaderboards extends RaceLogMongoD
@Test
public void testStoreAndRetrieveSimpleLeaderboardWithRaceLogWindFixEvent() {
Wind wind = createWindFix();
- RaceLogWindFixEvent event = RaceLogEventFactory.INSTANCE.createWindFixEvent(now, author, 0, wind);
+ RaceLogWindFixEvent event = RaceLogEventFactory.INSTANCE.createWindFixEvent(now, author, 0, wind, /* isMagnetic */ false);
addAndStoreRaceLogEvent(leaderboard, raceColumnName, event);
RaceLog loadedRaceLog = retrieveRaceLog();
loadedRaceLog.lockForRead();
diff --git a/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestStoringAndRetrievingRaceLogInRegatta.java b/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestStoringAndRetrievingRaceLogInRegatta.java
index 54bc2fcd15d..a849ca177c8 100644
--- a/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestStoringAndRetrievingRaceLogInRegatta.java
+++ b/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestStoringAndRetrievingRaceLogInRegatta.java
@@ -412,7 +412,7 @@ public class TestStoringAndRetrievingRaceLogInRegatta extends AbstractTestStorin
@Test
public void testStoreAndRetrieveRegattaWithRaceLogWindFixEvent() {
Wind wind = createWindFix();
- RaceLogWindFixEvent event = RaceLogEventFactory.INSTANCE.createWindFixEvent(now, author, 0, wind);
+ RaceLogWindFixEvent event = RaceLogEventFactory.INSTANCE.createWindFixEvent(now, author, 0, wind, /* isMagnetic */ false);
addAndStoreRaceLogEvent(regatta, raceColumnName, event);
diff --git a/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/deserialization/racelog/impl/RaceLogWindFixEventDeserializer.java b/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/deserialization/racelog/impl/RaceLogWindFixEventDeserializer.java
index d4143d579e0..98848155cc9 100644
--- a/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/deserialization/racelog/impl/RaceLogWindFixEventDeserializer.java
+++ b/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/deserialization/racelog/impl/RaceLogWindFixEventDeserializer.java
@@ -27,11 +27,10 @@ public class RaceLogWindFixEventDeserializer extends BaseRaceLogEventDeserialize
@Override
protected RaceLogEvent deserialize(JSONObject object, Serializable id, TimePoint createdAt, AbstractLogEventAuthor author,
TimePoint timePoint, int passId, List competitors) throws JsonDeserializationException {
- JSONObject windJsonObject = Helpers.getNestedObjectSafe(object, RaceLogWindFixEventSerializer.FIELD_WIND);
-
- Wind wind = windDeserializer.deserialize(windJsonObject);
-
- return factory.createWindFixEvent(createdAt, author, timePoint, id, competitors, passId, wind);
+ final JSONObject windJsonObject = Helpers.getNestedObjectSafe(object, RaceLogWindFixEventSerializer.FIELD_WIND);
+ final Wind wind = windDeserializer.deserialize(windJsonObject);
+ final Boolean isMagnetic = (Boolean) object.get(RaceLogWindFixEventSerializer.FIELD_MAGNETIC);
+ return factory.createWindFixEvent(createdAt, author, timePoint, id, competitors, passId, wind, isMagnetic == null ? true : isMagnetic);
}
}
diff --git a/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/serialization/racelog/impl/RaceLogWindFixEventSerializer.java b/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/serialization/racelog/impl/RaceLogWindFixEventSerializer.java
index f62d409fe43..8e04102f2f5 100644
--- a/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/serialization/racelog/impl/RaceLogWindFixEventSerializer.java
+++ b/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/serialization/racelog/impl/RaceLogWindFixEventSerializer.java
@@ -12,6 +12,7 @@ public class RaceLogWindFixEventSerializer extends BaseRaceLogEventSerializer {
public static final String VALUE_CLASS = RaceLogWindFixEvent.class.getSimpleName();
public static final String FIELD_WIND = "wind";
+ public static final String FIELD_MAGNETIC = "magnetic";
JsonSerializer windSerializer;
@@ -30,6 +31,7 @@ public class RaceLogWindFixEventSerializer extends BaseRaceLogEventSerializer {
RaceLogWindFixEvent event = (RaceLogWindFixEvent) object;
JSONObject result = super.serialize(event);
result.put(FIELD_WIND, windSerializer.serialize(event.getWindFix()));
+ result.put(FIELD_MAGNETIC, Boolean.valueOf(event.isMagnetic()));
return result;
}
diff --git a/java/com.sap.sailing.server.gateway.serialization.test/src/com/sap/sailing/server/gateway/serialization/test/racelog/RaceLogEventSerializerTest.java b/java/com.sap.sailing.server.gateway.serialization.test/src/com/sap/sailing/server/gateway/serialization/test/racelog/RaceLogEventSerializerTest.java
index bae598439ed..93d712b2bc2 100644
--- a/java/com.sap.sailing.server.gateway.serialization.test/src/com/sap/sailing/server/gateway/serialization/test/racelog/RaceLogEventSerializerTest.java
+++ b/java/com.sap.sailing.server.gateway.serialization.test/src/com/sap/sailing/server/gateway/serialization/test/racelog/RaceLogEventSerializerTest.java
@@ -200,7 +200,7 @@ public class RaceLogEventSerializerTest {
@Test
public void testWindFixSerializer() {
// we use the real event type here because we do not want to re-implement the dispatching.
- RaceLogEvent event = factory.createWindFixEvent(null, author, 0, null);
+ RaceLogEvent event = factory.createWindFixEvent(null, author, 0, null, /* isMagnetic */ false);
serializer.serialize(event);
verify(windFixEventSerializer).serialize(event);
}
diff --git a/java/com.sap.sailing.server.gateway.serialization.test/src/com/sap/sailing/server/gateway/serialization/test/racelog/RaceLogWindFixEventSerializerTest.java b/java/com.sap.sailing.server.gateway.serialization.test/src/com/sap/sailing/server/gateway/serialization/test/racelog/RaceLogWindFixEventSerializerTest.java
index 01c25352def..3b4763ee7a2 100644
--- a/java/com.sap.sailing.server.gateway.serialization.test/src/com/sap/sailing/server/gateway/serialization/test/racelog/RaceLogWindFixEventSerializerTest.java
+++ b/java/com.sap.sailing.server.gateway.serialization.test/src/com/sap/sailing/server/gateway/serialization/test/racelog/RaceLogWindFixEventSerializerTest.java
@@ -56,7 +56,7 @@ public class RaceLogWindFixEventSerializerTest {
now = MillisecondsTimePoint.now();
- event = RaceLogEventFactory.INSTANCE.createWindFixEvent(now, author, 0, createWindFix());
+ event = RaceLogEventFactory.INSTANCE.createWindFixEvent(now, author, 0, createWindFix(), /* isMagnetic */ false);
}
@Test
diff --git a/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/InitialLoadReplicationObjectIdentityTest.java b/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/InitialLoadReplicationObjectIdentityTest.java
index 0aff92a2f88..7adb6f42e4b 100755
--- a/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/InitialLoadReplicationObjectIdentityTest.java
+++ b/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/InitialLoadReplicationObjectIdentityTest.java
@@ -151,7 +151,7 @@ public class InitialLoadReplicationObjectIdentityTest extends AbstractServerRepl
final WindImpl masterWindFix = new WindImpl(new DegreePosition(12, 13), MillisecondsTimePoint.now(),
new KnotSpeedWithBearingImpl(12.7, new DegreeBearingImpl(123)));
masterR1RaceLog.add(RaceLogEventFactoryImpl.INSTANCE.createWindFixEvent(MillisecondsTimePoint.now(), new LogEventAuthorImpl("Me", 0),
- /* passId */ 1, masterWindFix));
+ /* passId */ 1, masterWindFix, /* isMagnetic */ false));
// assert that the wind fix shows up in the tracked race now because the tracked race has the DynamicTrackedRaceLogListener
// propagating the wind fix race log event into the wind track for source RACECOMMITTEE
WindTrack masterRCWindFixes = masterTrackedRace.getOrCreateWindTrack(new WindSourceImpl(WindSourceType.RACECOMMITTEE));
@@ -224,7 +224,7 @@ public class InitialLoadReplicationObjectIdentityTest extends AbstractServerRepl
final WindImpl replicaWindFix = new WindImpl(new DegreePosition(14, 15), MillisecondsTimePoint.now(),
new KnotSpeedWithBearingImpl(22.9, new DegreeBearingImpl(155)));
replicaR1RaceLog.add(RaceLogEventFactoryImpl.INSTANCE.createWindFixEvent(MillisecondsTimePoint.now(), new LogEventAuthorImpl("Me", 0),
- /* passId */ 1, replicaWindFix));
+ /* passId */ 1, replicaWindFix, /* isMagnetic */ false));
// assert that the wind fix shows up in the tracked race now because the tracked race has the DynamicTrackedRaceLogListener
// propagating the wind fix race log event into the wind track for source RACECOMMITTEE
WindTrack replicaRCWindFixes = replicaTrackedRace.getOrCreateWindTrack(new WindSourceImpl(WindSourceType.RACECOMMITTEE));
diff --git a/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/MasterDataImportTest.java b/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/MasterDataImportTest.java
index bf2ec6db485..b395cbe05c8 100755
--- a/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/MasterDataImportTest.java
+++ b/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/MasterDataImportTest.java
@@ -259,7 +259,7 @@ public class MasterDataImportTest {
Position p = new DegreePosition(3, 3);
Wind wind = new WindImpl(p, logTimePoint2, new KnotSpeedWithBearingImpl(5, new DegreeBearingImpl(12)));
RaceLogWindFixEvent windEvent = factory.createWindFixEvent(logTimePoint2, author, UUID.randomUUID(),
- new ArrayList(), 2, wind);
+ new ArrayList(), 2, wind, /* isMagnetic */ false);
raceColumn.getRaceLog(testFleet1).add(windEvent);
storedLogUUIDs.add(logEvent.getId());
storedLogUUIDs.add(windEvent.getId());
@@ -2073,7 +2073,7 @@ public class MasterDataImportTest {
Position p = new DegreePosition(3, 3);
Wind wind = new WindImpl(p, logTimePoint2, new KnotSpeedWithBearingImpl(5, new DegreeBearingImpl(12)));
RaceLogWindFixEvent windEvent = factory.createWindFixEvent(logTimePoint2, author, UUID.randomUUID(),
- new ArrayList(), 2, wind);
+ new ArrayList(), 2, wind, /* isMagnetic */ false);
raceColumnOnLeaderboard.getRaceLog(defaultFleet).add(windEvent);
storedLogUUIDs.add(logEvent.getId());
storedLogUUIDs.add(windEvent.getId());
diff --git a/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/WindByRaceLogTest.java b/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/WindByRaceLogTest.java
index e9f8e91e88c..bf44848d496 100644
--- a/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/WindByRaceLogTest.java
+++ b/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/WindByRaceLogTest.java
@@ -133,8 +133,8 @@ public class WindByRaceLogTest {
new KnotSpeedWithBearingImpl(15, new DegreeBearingImpl(234)));
Wind wind2 = new WindImpl(new DegreePosition(49, 3), timeMinus2,
new KnotSpeedWithBearingImpl(12, new DegreeBearingImpl(123)));
- RaceLogWindFixEvent windEvent1 = RaceLogEventFactory.INSTANCE.createWindFixEvent(timeMinus3, author, 0, wind1);
- RaceLogWindFixEvent windEvent2 = RaceLogEventFactory.INSTANCE.createWindFixEvent(timeMinus2, author, 0, wind2);
+ RaceLogWindFixEvent windEvent1 = RaceLogEventFactory.INSTANCE.createWindFixEvent(timeMinus3, author, 0, wind1, /* isMagnetic */ false);
+ RaceLogWindFixEvent windEvent2 = RaceLogEventFactory.INSTANCE.createWindFixEvent(timeMinus2, author, 0, wind2, /* isMagnetic */ false);
raceLog.add(windEvent1);
raceLog.add(windEvent2);
@@ -163,7 +163,7 @@ public class WindByRaceLogTest {
Wind wind1 = new WindImpl(new DegreePosition(50, 4), timeMinus3,
new KnotSpeedWithBearingImpl(15, new DegreeBearingImpl(234)));
- RaceLogWindFixEvent windEvent1 = RaceLogEventFactory.INSTANCE.createWindFixEvent(timeMinus3, author, 0, wind1);
+ RaceLogWindFixEvent windEvent1 = RaceLogEventFactory.INSTANCE.createWindFixEvent(timeMinus3, author, 0, wind1, /* isMagnetic */ false);
raceLog.add(windEvent1);
WindSource source = new WindSourceImpl(WindSourceType.RACECOMMITTEE);
@@ -192,9 +192,9 @@ public class WindByRaceLogTest {
new KnotSpeedWithBearingImpl(12, new DegreeBearingImpl(123)));
Wind wind3 = new WindImpl(new DegreePosition(48, 1), timeMinus2,
new KnotSpeedWithBearingImpl(18, new DegreeBearingImpl(270)));
- RaceLogWindFixEvent windEvent1 = RaceLogEventFactory.INSTANCE.createWindFixEvent(timeMinus3, author, 0, wind1);
- RaceLogWindFixEvent windEvent2 = RaceLogEventFactory.INSTANCE.createWindFixEvent(timeMinus2, author, 0, wind2);
- RaceLogWindFixEvent windEvent3 = RaceLogEventFactory.INSTANCE.createWindFixEvent(timeMinus1, author, 0, wind3);
+ RaceLogWindFixEvent windEvent1 = RaceLogEventFactory.INSTANCE.createWindFixEvent(timeMinus3, author, 0, wind1, /* isMagnetic */ false);
+ RaceLogWindFixEvent windEvent2 = RaceLogEventFactory.INSTANCE.createWindFixEvent(timeMinus2, author, 0, wind2, /* isMagnetic */ false);
+ RaceLogWindFixEvent windEvent3 = RaceLogEventFactory.INSTANCE.createWindFixEvent(timeMinus1, author, 0, wind3, /* isMagnetic */ false);
raceLog.add(windEvent1);
raceLog.add(windEvent2);
diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/activities/RacingActivity.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/activities/RacingActivity.java
index c0c3f280d70..d9550e0af23 100755
--- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/activities/RacingActivity.java
+++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/activities/RacingActivity.java
@@ -302,7 +302,7 @@ public class RacingActivity extends SessionActivity implements RaceInfoListener,
windValue.setText(String.format(getString(R.string.wind_info), windFix.getKnots(), windFix.getBearing().reverse().toString()));
}
if (mSelectedRace != null) {
- mSelectedRace.getState().setWindFix(MillisecondsTimePoint.now(), windFix);
+ mSelectedRace.getState().setWindFix(MillisecondsTimePoint.now(), windFix, /* isMagnetic */ true);
}
mWind = windFix;
diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/WindFragment.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/WindFragment.java
index d793fe73178..86ffb57b3d0 100644
--- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/WindFragment.java
+++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/WindFragment.java
@@ -410,7 +410,7 @@ public class WindFragment extends BaseFragment
*/
private void onSendClick() {
Wind wind = getResultingWindFix();
- getRaceState().setWindFix(MillisecondsTimePoint.now(), wind);
+ getRaceState().setWindFix(MillisecondsTimePoint.now(), wind, /* isMagnetic */ true);
saveEntriesInPreferences(wind);
switch (getArguments().getInt(START_MODE, 0)) {
case 1: