implemented race log analyzer for the aborting flag of the pass before to be shown, further work on filtering

This commit is contained in:
Armin Zamani committed 2013-05-26 02:52:02 +02:00
1 parent b0203b51c9
commit b960234f02
5 files changed
+108 -11

No files matched your search

@@ -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());
}
}
@@ -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;
}
}
@@ -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;
@@ -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);
@@ -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() { }