mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-08 21:30:57 +00:00
implemented race log analyzer for the aborting flag of the pass before to be shown, further work on filtering
This commit is contained in:
1 parent
b0203b51c9
commit
b960234f02
5 files changed
+108
-11
No files matched your search
+54
@@ -0,0 +1,54 @@
|
||||
package com.sap.sailing.domain.racelog.analyzing.impl;
|
||||
|
||||
import com.sap.sailing.domain.common.racelog.Flags;
|
||||
import com.sap.sailing.domain.racelog.RaceLog;
|
||||
import com.sap.sailing.domain.racelog.RaceLogEvent;
|
||||
import com.sap.sailing.domain.racelog.RaceLogFlagEvent;
|
||||
|
||||
public class AbortingFlagFinder extends RaceLogAnalyzer {
|
||||
|
||||
public AbortingFlagFinder(RaceLog raceLog) {
|
||||
super(raceLog);
|
||||
}
|
||||
|
||||
public RaceLogFlagEvent getAbortingFlagEvent() {
|
||||
|
||||
RaceLogFlagEvent newFlagEvent = null;
|
||||
|
||||
this.raceLog.lockForRead();
|
||||
try {
|
||||
newFlagEvent = searchForAbortingFlagEvent();
|
||||
} finally {
|
||||
this.raceLog.unlockAfterRead();
|
||||
}
|
||||
|
||||
return newFlagEvent;
|
||||
}
|
||||
|
||||
private RaceLogFlagEvent searchForAbortingFlagEvent() {
|
||||
RaceLogFlagEvent newFlagEvent = null;
|
||||
|
||||
if (raceLog.getCurrentPassId() > 0) {
|
||||
int relevantPassId = raceLog.getCurrentPassId() - 1;
|
||||
for (RaceLogEvent event : getAllEvents()) {
|
||||
if (event.getPassId() == relevantPassId) {
|
||||
if (event instanceof RaceLogFlagEvent) {
|
||||
RaceLogFlagEvent flagEvent = (RaceLogFlagEvent) event;
|
||||
if (isAbortingFlag(flagEvent)) {
|
||||
newFlagEvent = flagEvent;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return newFlagEvent;
|
||||
}
|
||||
|
||||
private boolean isAbortingFlag(RaceLogFlagEvent flagEvent) {
|
||||
return (flagEvent.getUpperFlag().equals(Flags.AP) && flagEvent.isDisplayed())
|
||||
|| (flagEvent.getUpperFlag().equals(Flags.NOVEMBER) && flagEvent.isDisplayed())
|
||||
|| (flagEvent.getUpperFlag().equals(Flags.FIRSTSUBSTITUTE) && flagEvent.isDisplayed());
|
||||
}
|
||||
|
||||
}
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
package com.sap.sailing.gwt.ui.regattaoverview;
|
||||
|
||||
import java.util.Comparator;
|
||||
|
||||
import com.sap.sailing.domain.common.impl.Util.NaturalComparator;
|
||||
import com.sap.sailing.gwt.ui.shared.RegattaOverviewEntryDTO;
|
||||
|
||||
public class RegattaRaceStatesComparator implements Comparator<RegattaOverviewEntryDTO> {
|
||||
|
||||
@Override
|
||||
public int compare(RegattaOverviewEntryDTO left, RegattaOverviewEntryDTO right) {
|
||||
int result = left.courseAreaName.compareTo(right.courseAreaName);
|
||||
if (result == 0) {
|
||||
if (left.regattaName != null && right.regattaName != null) {
|
||||
result = new NaturalComparator().compare(left.regattaName, right.regattaName);
|
||||
}
|
||||
if (result == 0) {
|
||||
//Caution: Series is missing!!!
|
||||
result = Integer.valueOf(left.raceInfo.fleetOrdering).compareTo(Integer.valueOf(right.raceInfo.fleetOrdering));
|
||||
if (result == 0) {
|
||||
result = (-1) * new NaturalComparator().compare(right.raceInfo.raceName, left.raceInfo.raceName);
|
||||
//this naturalComparator sorts the other way round R30 < R29 < R28 etc.
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
+10
-9
@@ -1,7 +1,6 @@
|
||||
package com.sap.sailing.gwt.ui.regattaoverview;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.Date;
|
||||
@@ -24,7 +23,6 @@ import com.google.gwt.view.client.ListDataProvider;
|
||||
import com.google.gwt.view.client.SelectionChangeEvent;
|
||||
import com.google.gwt.view.client.SelectionModel;
|
||||
import com.google.gwt.view.client.SingleSelectionModel;
|
||||
import com.sap.sailing.domain.common.impl.Util.NaturalComparator;
|
||||
import com.sap.sailing.domain.common.racelog.Flags;
|
||||
import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus;
|
||||
import com.sap.sailing.gwt.ui.client.ErrorReporter;
|
||||
@@ -140,8 +138,11 @@ public class RegattaRaceStatesComponent extends SimplePanel implements Component
|
||||
}
|
||||
numberOfFinishedRacesOfCurrentRegattaFleet++;
|
||||
} else if (entry.raceInfo.lastStatus.equals(RaceLogRaceStatus.UNSCHEDULED)) {
|
||||
//TODO except the race is unscheduled and aborted before
|
||||
racesToBeShown.remove(entry);
|
||||
//don't filter when the race is unscheduled and aborted before
|
||||
if (entry.raceInfo.lastUpperAbortingFlag == null) {
|
||||
racesToBeShown.remove(entry);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -333,7 +334,7 @@ public class RegattaRaceStatesComponent extends SimplePanel implements Component
|
||||
@Override
|
||||
public ImageResource getValue(RegattaOverviewEntryDTO entryDTO) {
|
||||
if (entryDTO.raceInfo.lastUpperFlag != null)
|
||||
return flagImageResolver.resolveFlagDirectionToImage(entryDTO.raceInfo.displayed);
|
||||
return flagImageResolver.resolveFlagDirectionToImage(entryDTO.raceInfo.isLastFlagDisplayed);
|
||||
else
|
||||
return null;
|
||||
}
|
||||
@@ -402,10 +403,10 @@ public class RegattaRaceStatesComponent extends SimplePanel implements Component
|
||||
private String getStatusText(RaceInfoDTO raceInfo) {
|
||||
String statusText = "";
|
||||
if (raceInfo.lastStatus.equals(RaceLogRaceStatus.RUNNING) && raceInfo.lastUpperFlag.equals(Flags.XRAY)
|
||||
&& raceInfo.displayed) {
|
||||
&& raceInfo.isLastFlagDisplayed) {
|
||||
statusText = "Race is running (had early starters)";
|
||||
} else if (raceInfo.lastStatus.equals(RaceLogRaceStatus.RUNNING) && raceInfo.lastUpperFlag.equals(Flags.XRAY)
|
||||
&& !raceInfo.displayed) {
|
||||
&& !raceInfo.isLastFlagDisplayed) {
|
||||
statusText = "Race is running";
|
||||
} else if (raceInfo.lastStatus.equals(RaceLogRaceStatus.RUNNING)) {
|
||||
statusText = "Race is running";
|
||||
@@ -423,9 +424,9 @@ public class RegattaRaceStatesComponent extends SimplePanel implements Component
|
||||
statusText = "";
|
||||
} else if (raceInfo.lastUpperFlag.equals(Flags.FIRSTSUBSTITUTE)) {
|
||||
statusText = "General recall";
|
||||
} else if (raceInfo.lastUpperFlag.equals(Flags.AP) && raceInfo.displayed) {
|
||||
} else if (raceInfo.lastUpperFlag.equals(Flags.AP) && raceInfo.isLastFlagDisplayed) {
|
||||
statusText = "Start postponed";
|
||||
} else if (raceInfo.lastUpperFlag.equals(Flags.NOVEMBER) && raceInfo.displayed) {
|
||||
} else if (raceInfo.lastUpperFlag.equals(Flags.NOVEMBER) && raceInfo.isLastFlagDisplayed) {
|
||||
statusText = "Start abandoned";
|
||||
}
|
||||
return statusText;
|
||||
|
||||
+11
-1
@@ -133,6 +133,7 @@ import com.sap.sailing.domain.polarsheets.PolarSheetGenerationWorker;
|
||||
import com.sap.sailing.domain.polarsheets.PolarSheetsWindStepping;
|
||||
import com.sap.sailing.domain.racelog.RaceLog;
|
||||
import com.sap.sailing.domain.racelog.RaceLogFlagEvent;
|
||||
import com.sap.sailing.domain.racelog.analyzing.impl.AbortingFlagFinder;
|
||||
import com.sap.sailing.domain.racelog.analyzing.impl.GateLineOpeningTimeFinder;
|
||||
import com.sap.sailing.domain.racelog.analyzing.impl.LastFlagFinder;
|
||||
import com.sap.sailing.domain.racelog.analyzing.impl.LastPublishedCourseDesignFinder;
|
||||
@@ -515,7 +516,16 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
|
||||
if (lastFlagEvent != null) {
|
||||
raceInfoDTO.lastUpperFlag = lastFlagEvent.getUpperFlag();
|
||||
raceInfoDTO.lastLowerFlag = lastFlagEvent.getLowerFlag();
|
||||
raceInfoDTO.displayed = lastFlagEvent.isDisplayed();
|
||||
raceInfoDTO.isLastFlagDisplayed = lastFlagEvent.isDisplayed();
|
||||
}
|
||||
|
||||
AbortingFlagFinder abortingFlagFinder = new AbortingFlagFinder(raceLog);
|
||||
|
||||
RaceLogFlagEvent abortingFlagEvent = abortingFlagFinder.getAbortingFlagEvent();
|
||||
if (abortingFlagEvent != null) {
|
||||
raceInfoDTO.lastUpperAbortingFlag = abortingFlagEvent.getUpperFlag();
|
||||
raceInfoDTO.lastLowerAbortingFlag = abortingFlagEvent.getLowerFlag();
|
||||
raceInfoDTO.isAbortingFlagDisplayed = abortingFlagEvent.isDisplayed();
|
||||
}
|
||||
|
||||
LastPublishedCourseDesignFinder courseDesignFinder = new LastPublishedCourseDesignFinder(raceLog);
|
||||
|
||||
+4
-1
@@ -16,11 +16,14 @@ public class RaceInfoDTO implements IsSerializable {
|
||||
public RaceLogRaceStatus lastStatus;
|
||||
public Flags lastUpperFlag;
|
||||
public Flags lastLowerFlag;
|
||||
public boolean displayed;
|
||||
public boolean isLastFlagDisplayed;
|
||||
public RaceCourseDTO lastCourseDesign;
|
||||
public RaceIdentifier raceIdentifier;
|
||||
public String pathfinderId;
|
||||
public Long gateLineOpeningTime;
|
||||
public Flags lastUpperAbortingFlag;
|
||||
public Flags lastLowerAbortingFlag;
|
||||
public boolean isAbortingFlagDisplayed;
|
||||
// for GWT serialization
|
||||
public RaceInfoDTO() { }
|
||||
|
||||
|
||||
Reference in new issue
Block a user