mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-20 19:20:04 +00:00
implementation for bug 3923: tracking times can individually be unset
Change-Id: I9c43b4b4ad2f753b371ca75e77a7b9287bf2ff69
This commit is contained in:
1 parent
8256ad75d6
commit
93f79322c5
12 files changed
+191
-66
No files matched your search
+2
-1
@@ -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 {
|
||||
|
||||
}
|
||||
+3
-1
@@ -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 {
|
||||
|
||||
}
|
||||
+45
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
+8
-28
@@ -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()));
|
||||
}
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user