diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/impl/AbstractLogImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/impl/AbstractLogImpl.java
index 877900dc5b5..f9c50ad136b 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/impl/AbstractLogImpl.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/impl/AbstractLogImpl.java
@@ -31,11 +31,7 @@ import com.sap.sailing.domain.tracking.impl.TrackImpl;
import com.sap.sailing.util.impl.ArrayListNavigableSet;
/**
- * {@link Track} implementation for {@link RaceLogEvent}s.
- *
- *
- * "Fix" validity is decided based on the {@link #getCurrentPassId() current pass}. The validity is not cached.
- *
+ * {@link Track} implementation for {@link AbstractLogEvent}s.
*
*
* {@link TrackImpl#getDummyFix(com.sap.sailing.domain.common.TimePoint)} is not overridden, see
@@ -86,8 +82,15 @@ extends TrackImpl implements AbstractLog {
return this.id;
}
- @Override
- public boolean add(EventT event) {
+ protected void onSuccessfulAdd(EventT event, boolean notifyListeners) {
+ revokeIfNecessary(event);
+ eventsById.put(event.getId(), event);
+ if (notifyListeners) {
+ notifyListenersAboutReceive(event);
+ }
+ }
+
+ protected boolean add(EventT event, boolean notifyListeners) {
boolean isAdded = false;
lockForWrite();
try {
@@ -97,35 +100,21 @@ extends TrackImpl implements AbstractLog {
}
if (isAdded) {
logger.finer(String.format("%s (%s) was added to log %s.", event, event.getClass().getName(), getId()));
- // FIXME with out-of-order delivery would destroy currentPassId; need to check at least the createdAt time
- // point
- revokeIfNecessary(event);
- eventsById.put(event.getId(), event);
- notifyListenersAboutReceive(event);
+ onSuccessfulAdd(event, true);
} else {
logger.fine(String.format("%s (%s) was not added to race log %s because it already existed there.", event, event.getClass().getName(), getId()));
}
return isAdded;
}
+
+ @Override
+ public boolean add(EventT event) {
+ return add(event, true);
+ }
@Override
public boolean load(EventT event) {
- boolean isAdded = false;
- lockForWrite();
- try {
- isAdded = getInternalRawFixes().add(event);
- } finally {
- unlockAfterWrite();
- }
- if (isAdded) {
- logger.finer(String.format("%s (%s) was loaded into log.", event, event.getClass().getName()));
- revokeIfNecessary(event);
- eventsById.put(event.getId(), event);
- } else {
- logger.finer(String
- .format("%s (%s) was not loaded into log because it already existed there.", event, event.getClass().getName()));
- }
- return isAdded;
+ return add(event, false);
}
private void revokeIfNecessary(EventT newEvent) {
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/RaceLog.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/RaceLog.java
index 48c3f1e111b..f58304745bc 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/RaceLog.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/RaceLog.java
@@ -3,6 +3,9 @@ package com.sap.sailing.domain.abstractlog.race;
import com.sap.sailing.domain.abstractlog.AbstractLog;
import com.sap.sailing.domain.common.WithID;
+/**
+* "Fix" validity is decided based on the {@link #getCurrentPassId() current pass}. The validity is not cached.
+*/
public interface RaceLog extends AbstractLog, WithID {
public static final int DefaultPassId = 0;
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogImpl.java
index 15e3360faba..ee2245d9a9a 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogImpl.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogImpl.java
@@ -63,21 +63,11 @@ public class RaceLogImpl extends AbstractLogImpl