bug 4114: no longer materialize tracking times in race log based on modified start of race/race finished times

Change-Id: I19efb2d88b07be10ff3bf051826db5e7008cd4af
This commit is contained in:
Axel Uhl committed 2017-05-16 18:26:36 +02:00
1 parent 40b7fc1370
commit 2f992b17b2
11 files changed
+73 -139

No files matched your search

@@ -25,20 +25,20 @@ public class DependentStartTimeResolver {
return internalResolve(event, dependingOnRaces);
}
StartTimeFinderResult internalResolve(RaceLogDependentStartTimeEvent event,Iterable<SimpleRaceLogIdentifier> dependingOnRaces) {
StartTimeFinderResult internalResolve(RaceLogDependentStartTimeEvent event, Iterable<SimpleRaceLogIdentifier> dependingOnRaces) {
SimpleRaceLogIdentifier identifier = event.getDependentOnRaceIdentifier();
Duration startTimeDifference = event.getStartTimeDifference();
RaceLog raceLog = raceLogResolver.resolve(identifier);
final StartTimeFinderResult result;
if (raceLog == null) {
result = new StartTimeFinderResult(dependingOnRaces, startTimeDifference, ResolutionFailed.RACE_LOG_UNRESOLVED);
result = new StartTimeFinderResult(dependingOnRaces, startTimeDifference, ResolutionFailed.RACE_LOG_UNRESOLVED, event.getAuthor());
} else {
List<SimpleRaceLogIdentifier> extendedDependingOnRaces = new ArrayList<>();
Util.addAll(dependingOnRaces, extendedDependingOnRaces);
extendedDependingOnRaces.add(identifier);
if (containsCycle(extendedDependingOnRaces)) {
result = new StartTimeFinderResult(extendedDependingOnRaces, null, ResolutionFailed.CYCLIC_DEPENDENCY);
result = new StartTimeFinderResult(extendedDependingOnRaces, null, ResolutionFailed.CYCLIC_DEPENDENCY, event.getAuthor());
} else {
StartTimeFinder dependentStartTimeFinder = new StartTimeFinder(raceLogResolver, raceLog);
StartTimeFinderResult resultOfDependentRace = dependentStartTimeFinder.analyze(extendedDependingOnRaces);
@@ -47,7 +47,7 @@ public class DependentStartTimeResolver {
result = resultOfDependentRace;
} else {
result = new StartTimeFinderResult(resultOfDependentRace.getDependingOnRaces(),
resultOfDependentRace.getStartTime().plus(startTimeDifference), startTimeDifference);
resultOfDependentRace.getStartTime().plus(startTimeDifference), startTimeDifference, event.getAuthor());
}
}
}
@@ -30,13 +30,13 @@ public class StartTimeFinder extends RaceLogAnalyzer<StartTimeFinderResult> {
for (RaceLogEvent event : getPassEventsDescending()) {
if (event instanceof RaceLogStartTimeEvent) {
TimePoint startTime = ((RaceLogStartTimeEvent) event).getStartTime();
return new StartTimeFinderResult(dependingOnRaces, startTime, null);
return new StartTimeFinderResult(dependingOnRaces, startTime, null, event.getAuthor());
} else if (event instanceof RaceLogDependentStartTimeEvent) {
DependentStartTimeResolver dependentStartTimeResolver = new DependentStartTimeResolver(resolver);
return dependentStartTimeResolver.internalResolve((RaceLogDependentStartTimeEvent) event, dependingOnRaces);
}
}
return new StartTimeFinderResult(dependingOnRaces, null, null, ResolutionFailed.NO_START_TIME_SET);
return new StartTimeFinderResult(dependingOnRaces, null, null, ResolutionFailed.NO_START_TIME_SET, /* raceLogEventAuthor */ null);
} finally {
log.unlockAfterRead();
}
@@ -2,6 +2,7 @@ package com.sap.sailing.domain.abstractlog.race.analyzing.impl;
import java.util.Collections;
import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
import com.sap.sailing.domain.abstractlog.race.SimpleRaceLogIdentifier;
import com.sap.sse.common.Duration;
import com.sap.sse.common.TimePoint;
@@ -27,27 +28,45 @@ public class StartTimeFinderResult {
private final ResolutionFailed resolutionFailed;
private Duration startTimeDiff;
/**
* When a race log event provides the start time described by this result object then this field tells
* the event's author. In particular, clients can see the priority from this. This may come in handy
* when deriving other events from the "set start time" event, such as a tracking time event.
*/
private AbstractLogEventAuthor startTimeEventAuthor;
public StartTimeFinderResult(Iterable<SimpleRaceLogIdentifier> racesDependingOn, TimePoint startTime, Duration startTimeDiff) {
this(racesDependingOn, startTime, startTimeDiff, /* resolutionFailed */ null);
public StartTimeFinderResult(Iterable<SimpleRaceLogIdentifier> racesDependingOn, TimePoint startTime, Duration startTimeDiff, AbstractLogEventAuthor raceLogEventAuthor) {
this(racesDependingOn, startTime, startTimeDiff, /* resolutionFailed */ null, raceLogEventAuthor);
}
public StartTimeFinderResult(Iterable<SimpleRaceLogIdentifier> racesDependingOn, Duration startTimeDiff, ResolutionFailed resolutionFailed) {
this(racesDependingOn, /* startTime */ null, startTimeDiff, resolutionFailed);
public StartTimeFinderResult(Iterable<SimpleRaceLogIdentifier> racesDependingOn, Duration startTimeDiff, ResolutionFailed resolutionFailed, AbstractLogEventAuthor raceLogEventAuthor) {
this(racesDependingOn, /* startTime */ null, startTimeDiff, resolutionFailed, raceLogEventAuthor);
}
public StartTimeFinderResult(Iterable<SimpleRaceLogIdentifier> dependingOnRaces, TimePoint startTime, Duration startTimeDiff,
ResolutionFailed resolutionFailed) {
ResolutionFailed resolutionFailed, AbstractLogEventAuthor raceLogEventAuthor) {
this.startTime = startTime;
this.startTimeDiff = startTimeDiff;
this.dependingOnRaces = dependingOnRaces;
this.resolutionFailed = resolutionFailed;
}
public StartTimeFinderResult(TimePoint startTime, Duration startTimeDiff) {
this(/* racesDependingOn */ Collections.<SimpleRaceLogIdentifier>emptyList(), startTime, startTimeDiff);
public StartTimeFinderResult(TimePoint startTime, Duration startTimeDiff, AbstractLogEventAuthor raceLogEventAuthor) {
this(/* racesDependingOn */ Collections.<SimpleRaceLogIdentifier>emptyList(), startTime, startTimeDiff, raceLogEventAuthor);
}
/**
* When a race log event provides the start time described by this result object then this field tells
* the event's author. In particular, clients can see the priority from this. This may come in handy
* when deriving other events from the "set start time" event, such as a tracking time event.
*
* @return {@code null} in case no author is known, e.g., if no start time was set in the race log
*/
public AbstractLogEventAuthor geStartTimeEventAuthor() {
return startTimeEventAuthor;
}
/**
* @return {@code null} if the start time was resolved; a reason for failure to resolve otherwise
*/