Provide competitor registration and deregistration methods on RaeColumn and HasRegattaLike

This commit is contained in:
Jan Broß committed 2015-11-28 19:17:37 +01:00
1 parent e753390b0f
commit 2f75c64c45
7 files changed
+173 -7

No files matched your search

@@ -1,6 +1,7 @@
package com.sap.sailing.domain.test.mock;
import java.io.Serializable;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.NavigableSet;
@@ -496,6 +497,18 @@ public class MockedTrackedRace implements DynamicTrackedRace {
@Override
public void registerCompetitor(Competitor competitor) {
}
@Override
public void registerCompetitors(Collection<Competitor> competitor) {
}
@Override
public void deregisterCompetitor(Competitor competitor) {
}
@Override
public void deregisterCompetitors(Collection<Competitor> competitor) {
}
};
}
@@ -1,5 +1,7 @@
package com.sap.sailing.domain.base;
import java.util.Collection;
import com.sap.sailing.domain.abstractlog.race.RaceLog;
import com.sap.sailing.domain.abstractlog.regatta.RegattaLog;
import com.sap.sailing.domain.common.RaceIdentifier;
@@ -287,4 +289,15 @@ public interface RaceColumn extends Named {
* thrown if competitor registration is disabled on racelog as well as if RaceColumn belongs to a {@link MetaLeaderboard}
*/
void registerCompetitor(Competitor competitor, Fleet fleet) throws CompetitorRegistrationOnRaceLogDisabledException;
void registerCompetitors(Collection<Competitor> competitor, Fleet fleet) throws CompetitorRegistrationOnRaceLogDisabledException;
/**
* Deregisters a competitor on the the race column's race log associated to the passed fleet.
* @param competitor
* @param fleet
* @throws CompetitorRegistrationOnRaceLogDisabledException
* thrown if competitor registration is disabled on racelog as well as if RaceColumn belongs to a {@link MetaLeaderboard}
*/
void deRegisterCompetitor(Competitor competitors, Fleet fleet) throws CompetitorRegistrationOnRaceLogDisabledException;
void deRegisterCompetitors(Collection<Competitor> competitors, Fleet fleet) throws CompetitorRegistrationOnRaceLogDisabledException;
}
@@ -3,27 +3,32 @@ package com.sap.sailing.domain.base.impl;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.UUID;
import java.util.logging.Level;
import java.util.logging.Logger;
import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
import com.sap.sailing.domain.abstractlog.impl.LogEventAuthorImpl;
import com.sap.sailing.domain.abstractlog.race.RaceLog;
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
import com.sap.sailing.domain.abstractlog.race.tracking.analyzing.impl.DefinedMarkFinder;
import com.sap.sailing.domain.abstractlog.race.tracking.analyzing.impl.RegisteredCompetitorsAnalyzer;
import com.sap.sailing.domain.abstractlog.race.tracking.impl.RaceLogRegisterCompetitorEventImpl;
import com.sap.sailing.domain.abstractlog.regatta.RegattaLog;
import com.sap.sailing.domain.abstractlog.shared.events.RegisterCompetitorEvent;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.Mark;
import com.sap.sailing.domain.base.RaceColumn;
import com.sap.sailing.domain.base.Waypoint;
import com.sap.sailing.domain.common.RaceIdentifier;
import com.sap.sailing.domain.common.abstractlog.NotRevokableException;
import com.sap.sailing.domain.common.racelog.tracking.CompetitorRegistrationOnRaceLogDisabledException;
import com.sap.sailing.domain.racelog.RaceLogIdentifier;
import com.sap.sailing.domain.racelog.RaceLogStore;
@@ -277,6 +282,12 @@ public abstract class AbstractRaceColumn extends SimpleAbstractRaceColumn implem
@Override
public void registerCompetitor(Competitor competitor, Fleet fleet) throws CompetitorRegistrationOnRaceLogDisabledException {
registerCompetitors(Collections.singleton(competitor), fleet);
}
@Override
public void registerCompetitors(Collection<Competitor> competitors, Fleet fleet)
throws CompetitorRegistrationOnRaceLogDisabledException {
if (isCompetitorRegistrationInRacelogEnabled(fleet)){
throw new CompetitorRegistrationOnRaceLogDisabledException();
}
@@ -284,8 +295,39 @@ public abstract class AbstractRaceColumn extends SimpleAbstractRaceColumn implem
TimePoint now = MillisecondsTimePoint.now();
RaceLog raceLog = getRaceLog(fleet);
int passId = raceLog.getCurrentPassId();
raceLog.add(new RaceLogRegisterCompetitorEventImpl(now, now, raceLogEventAuthorForRaceColumn,
UUID.randomUUID(), passId, competitor));
for (Competitor competitor: competitors){
raceLog.add(new RaceLogRegisterCompetitorEventImpl(now, now, raceLogEventAuthorForRaceColumn,
UUID.randomUUID(), passId, competitor));
}
}
@Override
public void deRegisterCompetitor(Competitor competitor, Fleet fleet)
throws CompetitorRegistrationOnRaceLogDisabledException {
deRegisterCompetitors(Collections.singleton(competitor), fleet);
}
@Override
public void deRegisterCompetitors(Collection<Competitor> competitors, Fleet fleet)
throws CompetitorRegistrationOnRaceLogDisabledException {
if (isCompetitorRegistrationInRacelogEnabled(fleet)){
throw new CompetitorRegistrationOnRaceLogDisabledException();
}
RaceLog raceLog = getRaceLog(fleet);
for (RaceLogEvent event : raceLog.getUnrevokedEventsDescending()) {
if (event instanceof RegisterCompetitorEvent) {
RegisterCompetitorEvent<?> registerEvent = (RegisterCompetitorEvent<?>) event;
if (competitors.contains(registerEvent.getCompetitor())) {
try {
raceLog.revokeEvent(raceLogEventAuthorForRaceColumn, event,
"unregistering competitor because no longer selected for registration");
} catch (NotRevokableException e) {
logger.log(Level.WARNING, "could not unregister competitor by adding RevokeEvent", e);
}
}
}
}
}
@Override
@@ -5,6 +5,7 @@ import java.io.ObjectInputStream;
import java.io.ObjectStreamException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.ConcurrentModificationException;
import java.util.HashMap;
@@ -26,6 +27,7 @@ import com.sap.sailing.domain.abstractlog.regatta.RegattaLogEvent;
import com.sap.sailing.domain.abstractlog.regatta.RegattaLogEventVisitor;
import com.sap.sailing.domain.abstractlog.regatta.events.impl.RegattaLogRegisterCompetitorEventImpl;
import com.sap.sailing.domain.abstractlog.shared.analyzing.CompetitorsInLogAnalyzer;
import com.sap.sailing.domain.abstractlog.shared.events.RegisterCompetitorEvent;
import com.sap.sailing.domain.base.BoatClass;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.CourseArea;
@@ -45,6 +47,7 @@ import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
import com.sap.sailing.domain.common.RegattaIdentifier;
import com.sap.sailing.domain.common.RegattaName;
import com.sap.sailing.domain.common.RegattaNameAndRaceName;
import com.sap.sailing.domain.common.abstractlog.NotRevokableException;
import com.sap.sailing.domain.leaderboard.ResultDiscardingRule;
import com.sap.sailing.domain.leaderboard.ScoringScheme;
import com.sap.sailing.domain.leaderboard.impl.AbstractLeaderboardImpl;
@@ -749,12 +752,43 @@ public class RegattaImpl extends NamedImpl implements Regatta, RaceColumnListene
regattaLog);
return analyzer.analyze();
}
@Override
public void registerCompetitor(Competitor competitor) {
registerCompetitors(Collections.singleton(competitor));
}
@Override
public void registerCompetitors(Collection<Competitor> competitors) {
RegattaLog regattaLog = getRegattaLike().getRegattaLog();
TimePoint now = MillisecondsTimePoint.now();
regattaLog.add(new RegattaLogRegisterCompetitorEventImpl(now, now, regattaLogEventAuthorForRegatta ,
UUID.randomUUID(), competitor));
for (Competitor competitor : competitors) {
regattaLog.add(new RegattaLogRegisterCompetitorEventImpl(now, now, regattaLogEventAuthorForRegatta,
UUID.randomUUID(), competitor));
}
}
@Override
public void deregisterCompetitor(Competitor competitor) {
deregisterCompetitors(Collections.singleton(competitor));
}
@Override
public void deregisterCompetitors(Collection<Competitor> competitors) {
RegattaLog regattaLog = getRegattaLike().getRegattaLog();
for (RegattaLogEvent event : regattaLog.getUnrevokedEventsDescending()) {
if (event instanceof RegisterCompetitorEvent) {
RegisterCompetitorEvent<?> registerEvent = (RegisterCompetitorEvent<?>) event;
if (competitors.contains(registerEvent.getCompetitor())) {
try {
regattaLog.revokeEvent(regattaLogEventAuthorForRegatta, event,
"unregistering competitor because no longer selected for registration");
} catch (NotRevokableException e) {
logger.log(Level.WARNING, "could not unregister competitor by adding RevokeEvent", e);
}
}
}
}
}
}
@@ -1,11 +1,14 @@
package com.sap.sailing.domain.leaderboard.impl;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.UUID;
import java.util.logging.Level;
import java.util.logging.Logger;
import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
import com.sap.sailing.domain.abstractlog.impl.LogEventAuthorImpl;
@@ -15,11 +18,13 @@ import com.sap.sailing.domain.abstractlog.regatta.RegattaLogEvent;
import com.sap.sailing.domain.abstractlog.regatta.RegattaLogEventVisitor;
import com.sap.sailing.domain.abstractlog.regatta.events.impl.RegattaLogRegisterCompetitorEventImpl;
import com.sap.sailing.domain.abstractlog.shared.analyzing.CompetitorsInLogAnalyzer;
import com.sap.sailing.domain.abstractlog.shared.events.RegisterCompetitorEvent;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.RaceColumn;
import com.sap.sailing.domain.base.RaceColumnListener;
import com.sap.sailing.domain.common.MaxPointsReason;
import com.sap.sailing.domain.common.abstractlog.NotRevokableException;
import com.sap.sailing.domain.leaderboard.HasRaceColumnsAndRegattaLike;
import com.sap.sailing.domain.leaderboard.ScoreCorrection;
import com.sap.sailing.domain.leaderboard.ThresholdBasedResultDiscardingRule;
@@ -49,6 +54,9 @@ public abstract class AbstractLeaderboardImpl extends AbstractSimpleLeaderboardI
private final AbstractLogEventAuthor regattaLogEventAuthorForAbstraceLeaderboard = new LogEventAuthorImpl(
AbstractLeaderboardImpl.class.getName(), 0);
private static final Logger logger = Logger.getLogger(AbstractLeaderboardImpl.class.getName());
/**
* @param scoreComparator
@@ -200,9 +208,40 @@ public abstract class AbstractLeaderboardImpl extends AbstractSimpleLeaderboardI
@Override
public void registerCompetitor(Competitor competitor) {
registerCompetitors(Collections.singleton(competitor));
}
@Override
public void registerCompetitors(Collection<Competitor> competitors) {
RegattaLog regattaLog = getRegattaLike().getRegattaLog();
TimePoint now = MillisecondsTimePoint.now();
regattaLog.add(new RegattaLogRegisterCompetitorEventImpl(now, now, regattaLogEventAuthorForAbstraceLeaderboard,
UUID.randomUUID(), competitor));
for (Competitor competitor : competitors) {
regattaLog.add(new RegattaLogRegisterCompetitorEventImpl(now, now, regattaLogEventAuthorForAbstraceLeaderboard,
UUID.randomUUID(), competitor));
}
}
@Override
public void deregisterCompetitor(Competitor competitor) {
deregisterCompetitors(Collections.singleton(competitor));
}
@Override
public void deregisterCompetitors(Collection<Competitor> competitors) {
RegattaLog regattaLog = getRegattaLike().getRegattaLog();
for (RegattaLogEvent event : regattaLog.getUnrevokedEventsDescending()) {
if (event instanceof RegisterCompetitorEvent) {
RegisterCompetitorEvent<?> registerEvent = (RegisterCompetitorEvent<?>) event;
if (competitors.contains(registerEvent.getCompetitor())) {
try {
regattaLog.revokeEvent(regattaLogEventAuthorForAbstraceLeaderboard, event,
"unregistering competitor because no longer selected for registration");
} catch (NotRevokableException e) {
logger.log(Level.WARNING, "could not unregister competitor by adding RevokeEvent", e);
}
}
}
}
}
}
@@ -1,5 +1,6 @@
package com.sap.sailing.domain.leaderboard.meta;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
@@ -252,4 +253,22 @@ public class MetaLeaderboardColumn extends SimpleAbstractRaceColumn implements R
throws CompetitorRegistrationOnRaceLogDisabledException {
throw new CompetitorRegistrationOnRaceLogDisabledException();
}
@Override
public void registerCompetitors(Collection<Competitor> competitor, Fleet fleet)
throws CompetitorRegistrationOnRaceLogDisabledException {
throw new CompetitorRegistrationOnRaceLogDisabledException();
}
@Override
public void deRegisterCompetitor(Competitor competitors, Fleet fleet)
throws CompetitorRegistrationOnRaceLogDisabledException {
throw new CompetitorRegistrationOnRaceLogDisabledException();
}
@Override
public void deRegisterCompetitors(Collection<Competitor> competitors, Fleet fleet)
throws CompetitorRegistrationOnRaceLogDisabledException {
throw new CompetitorRegistrationOnRaceLogDisabledException();
}
}
@@ -1,5 +1,7 @@
package com.sap.sailing.domain.regattalike;
import java.util.Collection;
import com.sap.sailing.domain.abstractlog.race.RaceLog;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.Regatta;
@@ -20,4 +22,8 @@ public interface HasRegattaLike {
Iterable<Competitor> getCompetitorsRegisteredInRegattaLog();
void registerCompetitor(Competitor competitor);
void registerCompetitors(Collection<Competitor> competitor);
void deregisterCompetitor(Competitor competitor);
void deregisterCompetitors(Collection<Competitor> competitor);
}