implementation for bug 3923: tracking times can individually be unset

Change-Id: I9c43b4b4ad2f753b371ca75e77a7b9287bf2ff69
This commit is contained in:
Axel Uhl committed 2017-01-16 15:59:22 +01:00
1 parent 8256ad75d6
commit 93f79322c5
12 files changed
+191 -66

No files matched your search

@@ -1,6 +1,7 @@
package com.sap.sailing.domain.abstractlog.race;
import com.sap.sailing.domain.abstractlog.Revokable;
public interface RaceLogEndOfTrackingEvent extends RaceLogEvent {
public interface RaceLogEndOfTrackingEvent extends RaceLogEvent, Revokable {
}
@@ -1,5 +1,7 @@
package com.sap.sailing.domain.abstractlog.race;
public interface RaceLogStartOfTrackingEvent extends RaceLogEvent {
import com.sap.sailing.domain.abstractlog.Revokable;
public interface RaceLogStartOfTrackingEvent extends RaceLogEvent, Revokable {
}
@@ -0,0 +1,45 @@
package com.sap.sailing.domain.abstractlog.race.analyzing.impl;
import com.sap.sailing.domain.abstractlog.race.RaceLog;
import com.sap.sailing.domain.abstractlog.race.RaceLogEndOfTrackingEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogStartOfTrackingEvent;
import com.sap.sse.common.Util;
import com.sap.sse.common.Util.Pair;
public class TrackingTimesEventFinder extends RaceLogAnalyzer<Util.Pair<RaceLogStartOfTrackingEvent, RaceLogEndOfTrackingEvent>> {
public TrackingTimesEventFinder(RaceLog raceLog) {
super(raceLog);
}
@Override
protected Util.Pair<RaceLogStartOfTrackingEvent, RaceLogEndOfTrackingEvent> performAnalysis() {
boolean startOfTrackingFound = false;
boolean endOfTrackingFound = false;
RaceLogStartOfTrackingEvent start = null;
RaceLogEndOfTrackingEvent end = null;
final RaceLog raceLog = getLog();
for (RaceLogEvent event : raceLog.getUnrevokedEventsDescending()) {
if (!startOfTrackingFound && event instanceof RaceLogStartOfTrackingEvent) {
start = (RaceLogStartOfTrackingEvent) event;
startOfTrackingFound = true;
}
if (!endOfTrackingFound && event instanceof RaceLogEndOfTrackingEvent) {
end = (RaceLogEndOfTrackingEvent) event;
endOfTrackingFound = true;
}
if (startOfTrackingFound && endOfTrackingFound) {
break;
}
}
final Pair<RaceLogStartOfTrackingEvent, RaceLogEndOfTrackingEvent> result;
if (startOfTrackingFound || endOfTrackingFound) {
result = new Util.Pair<>(start, end);
} else {
result = null;
}
return result;
}
}
@@ -2,7 +2,6 @@ package com.sap.sailing.domain.abstractlog.race.analyzing.impl;
import com.sap.sailing.domain.abstractlog.race.RaceLog;
import com.sap.sailing.domain.abstractlog.race.RaceLogEndOfTrackingEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogStartOfTrackingEvent;
import com.sap.sailing.domain.common.abstractlog.TimePointSpecificationFoundInLog;
import com.sap.sailing.domain.common.abstractlog.TimePointSpecificationFoundInLogImpl;
@@ -10,38 +9,19 @@ import com.sap.sse.common.Util;
import com.sap.sse.common.Util.Pair;
public class TrackingTimesFinder extends RaceLogAnalyzer<Util.Pair<TimePointSpecificationFoundInLog, TimePointSpecificationFoundInLog>> {
private final TrackingTimesEventFinder trackingTimesEventFinder;
public TrackingTimesFinder(RaceLog raceLog) {
super(raceLog);
this.trackingTimesEventFinder = new TrackingTimesEventFinder(raceLog);
}
@Override
protected Util.Pair<TimePointSpecificationFoundInLog, TimePointSpecificationFoundInLog> performAnalysis() {
boolean startOfTrackingFound = false;
boolean endOfTrackingFound = false;
TimePointSpecificationFoundInLog start = null;
TimePointSpecificationFoundInLog end = null;
final RaceLog raceLog = getLog();
for (RaceLogEvent event : raceLog.getUnrevokedEventsDescending()) {
if (!startOfTrackingFound && event instanceof RaceLogStartOfTrackingEvent) {
start = new TimePointSpecificationFoundInLogImpl(event.getLogicalTimePoint());
startOfTrackingFound = true;
}
if (!endOfTrackingFound && event instanceof RaceLogEndOfTrackingEvent) {
end = new TimePointSpecificationFoundInLogImpl(event.getLogicalTimePoint());
endOfTrackingFound = true;
}
if (startOfTrackingFound && endOfTrackingFound) {
break;
}
}
final Pair<TimePointSpecificationFoundInLog, TimePointSpecificationFoundInLog> result;
if (startOfTrackingFound || endOfTrackingFound) {
result = new Util.Pair<>(start, end);
} else {
result = null;
}
return result;
Pair<RaceLogStartOfTrackingEvent, RaceLogEndOfTrackingEvent> preResult = trackingTimesEventFinder.performAnalysis();
return preResult == null ? null :
new Util.Pair<TimePointSpecificationFoundInLog, TimePointSpecificationFoundInLog>(
preResult.getA()==null?null:new TimePointSpecificationFoundInLogImpl(preResult.getA().getLogicalTimePoint()),
preResult.getB()==null?null:new TimePointSpecificationFoundInLogImpl(preResult.getB().getLogicalTimePoint()));
}
}