added handicap methods also on IsRegattaLike implementations (delegation pattern); added RegattaLogEvents placeholders to override handicaps per regatta

This commit is contained in:
Axel Uhl committed 2015-05-08 09:20:18 +02:00
1 parent e5b8da8e4b
commit ff4bb7e95e
11 files changed
+104 -1

No files matched your search

@@ -35,8 +35,8 @@ import com.sap.sailing.domain.abstractlog.race.RaceLogRevokeEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogStartProcedureChangedEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogStartTimeEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogWindFixEvent;
import com.sap.sailing.domain.abstractlog.race.scoring.RaceLogAdditionalScoringInformationEvent;
import com.sap.sailing.domain.abstractlog.race.SuppressedMarkPassingsEvent;
import com.sap.sailing.domain.abstractlog.race.scoring.RaceLogAdditionalScoringInformationEvent;
import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogCloseOpenEndedDeviceMappingEvent;
import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogDefineMarkEvent;
import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogDenoteForTrackingEvent;
@@ -50,6 +50,7 @@ import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogDeviceCompeti
import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogDeviceMarkMappingEvent;
import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRegisterCompetitorEvent;
import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRevokeEvent;
import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogSetCompetitorHandicapInfoEvent;
import com.sap.sailing.domain.abstractlog.shared.events.DeviceMappingEvent;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.ControlPoint;
@@ -1377,4 +1378,11 @@ public class MongoObjectFactoryImpl implements MongoObjectFactory {
storeTimePoint(event.getClosingTimePoint(), result, FieldNames.REGATTA_LOG_CLOSING_TIMEPOINT);
storeRegattaLogEvent(regattaLikeId, result);
}
public void storeRegattaLogEvent(RegattaLikeIdentifier regattaLikeId, RegattaLogSetCompetitorHandicapInfoEvent event) {
DBObject result = createBasicRegattaLogEventDBObject(event);
result.put(FieldNames.REGATTA_LOG_EVENT_CLASS.name(), RegattaLogCloseOpenEndedDeviceMappingEvent.class.getSimpleName());
result.put(FieldNames.REGATTA_LOG_COMPETITOR_ID.name(), event.getCompetitor().getId());
storeRegattaLogEvent(regattaLikeId, result);
}
}
@@ -8,6 +8,8 @@ import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogDeviceCompeti
import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogDeviceMarkMappingEvent;
import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRegisterCompetitorEvent;
import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRevokeEvent;
import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogSetCompetitorTimeOnDistanceAllowancePerNauticalMile;
import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogSetCompetitorTimeOnTimeFactor;
import com.sap.sailing.domain.persistence.MongoObjectFactory;
import com.sap.sailing.domain.regattalike.RegattaLikeIdentifier;
@@ -48,4 +50,14 @@ public class MongoRegattaLogStoreVisitor implements RegattaLogEventVisitor {
public void visit(RegattaLogRegisterCompetitorEvent event) {
mongoObjectFactory.storeRegattaLogEvent(regattaLikeIdentifier, event);
}
@Override
public void visit(RegattaLogSetCompetitorTimeOnTimeFactor event) {
mongoObjectFactory.storeRegattaLogEvent(regattaLikeIdentifier, event);
}
@Override
public void visit(RegattaLogSetCompetitorTimeOnDistanceAllowancePerNauticalMile event) {
mongoObjectFactory.storeRegattaLogEvent(regattaLikeIdentifier, event);
}
}
@@ -5,6 +5,8 @@ import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogDeviceCompeti
import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogDeviceMarkMappingEvent;
import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRegisterCompetitorEvent;
import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRevokeEvent;
import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogSetCompetitorTimeOnDistanceAllowancePerNauticalMile;
import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogSetCompetitorTimeOnTimeFactor;
public interface RegattaLogEventVisitor {
void visit(RegattaLogRevokeEvent event);
@@ -16,4 +18,8 @@ public interface RegattaLogEventVisitor {
void visit(RegattaLogCloseOpenEndedDeviceMappingEvent event);
void visit(RegattaLogRegisterCompetitorEvent event);
void visit(RegattaLogSetCompetitorTimeOnTimeFactor event);
void visit(RegattaLogSetCompetitorTimeOnDistanceAllowancePerNauticalMile event);
}
@@ -0,0 +1,9 @@
package com.sap.sailing.domain.abstractlog.regatta.events;
import com.sap.sailing.domain.abstractlog.Revokable;
import com.sap.sailing.domain.abstractlog.regatta.RegattaLogEvent;
import com.sap.sailing.domain.base.Competitor;
public interface RegattaLogSetCompetitorHandicapInfoEvent extends RegattaLogEvent, Revokable {
Competitor getCompetitor();
}
@@ -0,0 +1,8 @@
package com.sap.sailing.domain.abstractlog.regatta.events;
import com.sap.sailing.domain.base.Competitor;
public interface RegattaLogSetCompetitorTimeOnDistanceAllowancePerNauticalMile extends Competitor,
RegattaLogSetCompetitorHandicapInfoEvent {
}
@@ -0,0 +1,5 @@
package com.sap.sailing.domain.abstractlog.regatta.events;
public interface RegattaLogSetCompetitorTimeOnTimeFactor extends RegattaLogSetCompetitorHandicapInfoEvent {
}
@@ -6,6 +6,8 @@ import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogDeviceCompeti
import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogDeviceMarkMappingEvent;
import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRegisterCompetitorEvent;
import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRevokeEvent;
import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogSetCompetitorTimeOnDistanceAllowancePerNauticalMile;
import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogSetCompetitorTimeOnTimeFactor;
public class BaseRegattaLogEventVisitor implements RegattaLogEventVisitor {
@@ -29,4 +31,12 @@ public class BaseRegattaLogEventVisitor implements RegattaLogEventVisitor {
public void visit(RegattaLogRegisterCompetitorEvent event) {
}
@Override
public void visit(RegattaLogSetCompetitorTimeOnTimeFactor event) {
}
@Override
public void visit(RegattaLogSetCompetitorTimeOnDistanceAllowancePerNauticalMile event) {
}
}
@@ -7,6 +7,8 @@ import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogDeviceCompeti
import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogDeviceMarkMappingEvent;
import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRegisterCompetitorEvent;
import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRevokeEvent;
import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogSetCompetitorTimeOnDistanceAllowancePerNauticalMile;
import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogSetCompetitorTimeOnTimeFactor;
public abstract class RegattaLogEventListener implements RegattaLogEventVisitor {
protected abstract void eventAdded(RegattaLogEvent event);
@@ -35,4 +37,14 @@ public abstract class RegattaLogEventListener implements RegattaLogEventVisitor
public void visit(RegattaLogRegisterCompetitorEvent event) {
eventAdded(event);
}
@Override
public void visit(RegattaLogSetCompetitorTimeOnTimeFactor event) {
eventAdded(event);
}
@Override
public void visit(RegattaLogSetCompetitorTimeOnDistanceAllowancePerNauticalMile event) {
eventAdded(event);
}
}
@@ -69,6 +69,7 @@ import com.sap.sailing.domain.tracking.WindStore;
import com.sap.sailing.domain.tracking.WindTrack;
import com.sap.sailing.domain.tracking.WindWithConfidence;
import com.sap.sailing.domain.tracking.impl.WindTrackImpl;
import com.sap.sse.common.Duration;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.Util;
@@ -443,6 +444,16 @@ public class MockedTrackedRace implements DynamicTrackedRace {
public RankingMetricConstructor getRankingMetricConstructor() {
return null;
}
@Override
public Double getTimeOnTimeFactor(Competitor competitor) {
return null;
}
@Override
public Duration getTimeOnDistanceAllowancePerNauticalMile(Competitor competitor) {
return null;
}
};
}
@@ -50,6 +50,7 @@ import com.sap.sailing.domain.tracking.TrackedRace;
import com.sap.sailing.domain.tracking.TrackedRegatta;
import com.sap.sailing.domain.tracking.TrackedRegattaRegistry;
import com.sap.sailing.util.impl.RaceColumnListeners;
import com.sap.sse.common.Duration;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.Util;
import com.sap.sse.common.impl.NamedImpl;
@@ -577,6 +578,16 @@ public class RegattaImpl extends NamedImpl implements Regatta, RaceColumnListene
regattaLikeHelper.removeListener(listener);
}
@Override
public Double getTimeOnTimeFactor(Competitor competitor) {
return regattaLikeHelper.getTimeOnTimeFactor(competitor);
}
@Override
public Duration getTimeOnDistanceAllowancePerNauticalMile(Competitor competitor) {
return regattaLikeHelper.getTimeOnDistanceAllowancePerNauticalMile(competitor);
}
public void adjustEventToRegattaAssociation(EventFetcher eventFetcher) {
CourseArea defaultCourseArea = getDefaultCourseArea();
for (Event event : eventFetcher.getAllEvents()) {
@@ -32,6 +32,7 @@ import com.sap.sailing.domain.regattalike.RegattaLikeListener;
import com.sap.sailing.domain.regattalog.RegattaLogStore;
import com.sap.sailing.domain.regattalog.impl.EmptyRegattaLogStore;
import com.sap.sailing.domain.tracking.TrackedRace;
import com.sap.sse.common.Duration;
/**
* A leaderboard implementation that allows users to flexibly configure which columns exist. No constraints need to be observed regarding
@@ -280,6 +281,16 @@ public class FlexibleLeaderboardImpl extends AbstractLeaderboardImpl implements
regattaLikeHelper.removeListener(listener);
}
@Override
public Double getTimeOnTimeFactor(Competitor competitor) {
return regattaLikeHelper.getTimeOnTimeFactor(competitor);
}
@Override
public Duration getTimeOnDistanceAllowancePerNauticalMile(Competitor competitor) {
return regattaLikeHelper.getTimeOnDistanceAllowancePerNauticalMile(competitor);
}
@Override
public Iterable<Competitor> getAllCompetitors() {
Set<Competitor> result = new HashSet<>();