mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-16 17:21:00 +00:00
Disable/Enable competitor registrations on RaceColumn
This commit is contained in:
1 parent
2f75c64c45
commit
96c6a19847
13 files changed
+149
-171
No files matched your search
-26
@@ -7,8 +7,6 @@ import com.sap.sailing.domain.abstractlog.race.RaceLog;
|
||||
import com.sap.sailing.domain.abstractlog.race.RaceLogCourseDesignChangedEvent;
|
||||
import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogDenoteForTrackingEvent;
|
||||
import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogStartTrackingEvent;
|
||||
import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogUseCompetitorsFromRaceLogEvent;
|
||||
import com.sap.sailing.domain.abstractlog.race.tracking.impl.RaceLogUseCompetitorsFromRaceLogEventImpl;
|
||||
import com.sap.sailing.domain.abstractlog.regatta.RegattaLog;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.ControlPoint;
|
||||
@@ -17,7 +15,6 @@ 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.SharedDomainFactory;
|
||||
import com.sap.sailing.domain.common.racelog.tracking.CompetitorRegistrationOnRaceLogDisabledException;
|
||||
import com.sap.sailing.domain.common.racelog.tracking.NotDenotableForRaceLogTrackingException;
|
||||
import com.sap.sailing.domain.common.racelog.tracking.NotDenotedForRaceLogTrackingException;
|
||||
import com.sap.sailing.domain.common.racelog.tracking.RaceLogTrackingState;
|
||||
@@ -82,22 +79,6 @@ public interface RaceLogTrackingAdapter {
|
||||
*/
|
||||
void pingMark(RegattaLog regattaLogToAddTo, Mark mark, GPSFix gpsFix, RacingEventService service);
|
||||
|
||||
/**
|
||||
* If not yet registered, register the competitors in {@code competitors}, and unregister all already registered
|
||||
* competitors not in {@code competitors}.
|
||||
*
|
||||
* @throws CompetitorRegistrationOnRaceLogDisabledException
|
||||
* if no {@link RaceLogUseCompetitorsFromRaceLogEvent} is present in the RaceLog
|
||||
*/
|
||||
void registerCompetitors(RacingEventService service, RaceLog raceLog, Set<Competitor> competitors)
|
||||
throws CompetitorRegistrationOnRaceLogDisabledException;
|
||||
|
||||
/**
|
||||
* If not yet registered, register the competitors in {@code competitors}, and unregister all already registered
|
||||
* competitors not in {@code competitors}.
|
||||
*/
|
||||
void registerCompetitors(RacingEventService service, RegattaLog regattaLog, Set<Competitor> competitors);
|
||||
|
||||
/**
|
||||
* Invite competitors for tracking via the Tracking App by sending out emails.
|
||||
*
|
||||
@@ -120,11 +101,4 @@ public interface RaceLogTrackingAdapter {
|
||||
*/
|
||||
void copyCourse(RaceLog fromRaceLog, Set<RaceLog> toRaceLogs, SharedDomainFactory baseDomainFactory,
|
||||
RacingEventService service);
|
||||
|
||||
/**
|
||||
* Duplicate the competitor registrations from the {@code from} race log to the {@code to} race logs. If a RaceLog
|
||||
* is not set to use the CompetitorRegistrations on itself via {@link RaceLogUseCompetitorsFromRaceLogEvent},
|
||||
* the RaceLog is set to use its own by adding a {@link RaceLogUseCompetitorsFromRaceLogEventImpl}
|
||||
*/
|
||||
void copyCompetitors(RaceLog from, Set<RaceLog> to, RacingEventService service);
|
||||
}
|
||||
-82
@@ -7,7 +7,6 @@ import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import java.util.function.Function;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@@ -34,18 +33,12 @@ import com.sap.sailing.domain.abstractlog.race.impl.RaceLogCourseDesignChangedEv
|
||||
import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogDenoteForTrackingEvent;
|
||||
import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogStartTrackingEvent;
|
||||
import com.sap.sailing.domain.abstractlog.race.tracking.analyzing.impl.RaceLogTrackingStateAnalyzer;
|
||||
import com.sap.sailing.domain.abstractlog.race.tracking.analyzing.impl.RaceLogUsesOwnCompetitorsAnalyzer;
|
||||
import com.sap.sailing.domain.abstractlog.race.tracking.impl.RaceLogDenoteForTrackingEventImpl;
|
||||
import com.sap.sailing.domain.abstractlog.race.tracking.impl.RaceLogRegisterCompetitorEventImpl;
|
||||
import com.sap.sailing.domain.abstractlog.race.tracking.impl.RaceLogStartTrackingEventImpl;
|
||||
import com.sap.sailing.domain.abstractlog.race.tracking.impl.RaceLogUseCompetitorsFromRaceLogEventImpl;
|
||||
import com.sap.sailing.domain.abstractlog.regatta.RegattaLog;
|
||||
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.RegattaLogDeviceMarkMappingEventImpl;
|
||||
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.CourseBase;
|
||||
@@ -60,7 +53,6 @@ import com.sap.sailing.domain.base.Waypoint;
|
||||
import com.sap.sailing.domain.base.impl.CourseDataImpl;
|
||||
import com.sap.sailing.domain.common.RegattaIdentifier;
|
||||
import com.sap.sailing.domain.common.abstractlog.NotRevokableException;
|
||||
import com.sap.sailing.domain.common.racelog.tracking.CompetitorRegistrationOnRaceLogDisabledException;
|
||||
import com.sap.sailing.domain.common.racelog.tracking.DeviceMappingConstants;
|
||||
import com.sap.sailing.domain.common.racelog.tracking.NotDenotableForRaceLogTrackingException;
|
||||
import com.sap.sailing.domain.common.racelog.tracking.NotDenotedForRaceLogTrackingException;
|
||||
@@ -238,22 +230,6 @@ public class RaceLogTrackingAdapterImpl implements RaceLogTrackingAdapter {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void copyCompetitors(RaceLog fromRaceLog, Set<RaceLog> toRaceLogs,
|
||||
RacingEventService service) {
|
||||
final Set<Competitor> competitors = new CompetitorsInLogAnalyzer<>(fromRaceLog).analyze();
|
||||
for (RaceLog toRaceLog : toRaceLogs) {
|
||||
try {
|
||||
registerCompetitors(service, toRaceLog, competitors);
|
||||
} catch (CompetitorRegistrationOnRaceLogDisabledException e) {
|
||||
int passId = toRaceLog.getCurrentPassId();
|
||||
TimePoint now = MillisecondsTimePoint.now();
|
||||
toRaceLog.add(new RaceLogUseCompetitorsFromRaceLogEventImpl(now, service.getServerAuthor(), now, UUID.randomUUID(), passId));
|
||||
try { registerCompetitors(service, toRaceLog, competitors); } catch (CompetitorRegistrationOnRaceLogDisabledException e1) {/*cannot happen*/}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@FunctionalInterface
|
||||
private static interface DeviceMarkMappingEventFactory<VisitorT, EventT extends AbstractLogEvent<VisitorT>> {
|
||||
EventT createDeviceMarkMapping(DeviceIdentifier device, TimePoint timePoint);
|
||||
@@ -297,64 +273,6 @@ public class RaceLogTrackingAdapterImpl implements RaceLogTrackingAdapter {
|
||||
}
|
||||
}
|
||||
|
||||
private <LogT extends AbstractLog<EventT, VisitorT>, EventT extends AbstractLogEvent<VisitorT>, VisitorT> void registerCompetitors(
|
||||
AbstractLogEventAuthor author, LogT log, Set<Competitor> competitors,
|
||||
Function<Competitor, EventT> registerEventFactory) {
|
||||
Set<Competitor> alreadyRegistered = new HashSet<Competitor>(new CompetitorsInLogAnalyzer<>(log).analyze());
|
||||
Set<Competitor> toBeRegistered = new HashSet<Competitor>();
|
||||
|
||||
for (Competitor c : competitors) {
|
||||
toBeRegistered.add(c);
|
||||
}
|
||||
|
||||
Set<Competitor> toBeRemoved = new HashSet<Competitor>(alreadyRegistered);
|
||||
toBeRemoved.removeAll(toBeRegistered);
|
||||
toBeRegistered.removeAll(alreadyRegistered);
|
||||
|
||||
// register
|
||||
for (Competitor c : toBeRegistered) {
|
||||
log.add(registerEventFactory.apply(c));
|
||||
}
|
||||
|
||||
// unregister
|
||||
for (EventT event : log.getUnrevokedEventsDescending()) {
|
||||
if (event instanceof RegisterCompetitorEvent) {
|
||||
RegisterCompetitorEvent<?> registerEvent = (RegisterCompetitorEvent<?>) event;
|
||||
if (toBeRemoved.contains(registerEvent.getCompetitor())) {
|
||||
try {
|
||||
log.revokeEvent(author, 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
|
||||
public void registerCompetitors(RacingEventService service, RaceLog raceLog, Set<Competitor> competitors) throws CompetitorRegistrationOnRaceLogDisabledException {
|
||||
if (new RaceLogUsesOwnCompetitorsAnalyzer(raceLog).analyze()){
|
||||
registerCompetitors(
|
||||
service.getServerAuthor(),
|
||||
raceLog,
|
||||
competitors,
|
||||
c -> new RaceLogRegisterCompetitorEventImpl(MillisecondsTimePoint.now(),
|
||||
service.getServerAuthor(), raceLog.getCurrentPassId(), c));
|
||||
} else {
|
||||
logger.warning("Not performing competitor registration on RaceLog as no RaceLogUseCompetitorsFromRaceLogEvent "
|
||||
+ "is present and therefore competitors should be registered on RegattaLog");
|
||||
throw new CompetitorRegistrationOnRaceLogDisabledException();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerCompetitors(RacingEventService service, RegattaLog regattaLog, Set<Competitor> competitors) {
|
||||
registerCompetitors(service.getServerAuthor(), regattaLog, competitors,
|
||||
c -> new RegattaLogRegisterCompetitorEventImpl(MillisecondsTimePoint.now(),
|
||||
MillisecondsTimePoint.now(), service.getServerAuthor(), UUID.randomUUID(), c));
|
||||
}
|
||||
|
||||
private MailService getMailService() {
|
||||
ServiceReference<MailService> ref = Activator.getContext().getServiceReference(MailService.class);
|
||||
if (ref == null) {
|
||||
|
||||
+2
-3
@@ -1,7 +1,6 @@
|
||||
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;
|
||||
@@ -499,7 +498,7 @@ public class MockedTrackedRace implements DynamicTrackedRace {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerCompetitors(Collection<Competitor> competitor) {
|
||||
public void registerCompetitors(Iterable<Competitor> competitor) {
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -507,7 +506,7 @@ public class MockedTrackedRace implements DynamicTrackedRace {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deregisterCompetitors(Collection<Competitor> competitor) {
|
||||
public void deregisterCompetitors(Iterable<Competitor> competitor) {
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
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;
|
||||
@@ -281,6 +279,20 @@ public interface RaceColumn extends Named {
|
||||
*/
|
||||
boolean isCompetitorRegistrationInRacelogEnabled(Fleet fleet);
|
||||
|
||||
/**
|
||||
* Activates competitor registration on the race column's race log associated to the passed fleet.
|
||||
* Performs nothing in case this column belongs to a {@link MetaLeaderboard}.
|
||||
* @param fleetByName
|
||||
*/
|
||||
void enableCompetitorRegistrationOnRaceLog(Fleet fleet);
|
||||
|
||||
/**
|
||||
* Disables competitor registration on the race column's race log associated to the passed fleet.
|
||||
* Performs nothing in case this column belongs to a {@link MetaLeaderboard}.
|
||||
* @param fleetByName
|
||||
*/
|
||||
void disableCompetitorRegistrationOnRaceLog(Fleet fleet);
|
||||
|
||||
/**
|
||||
* Registers a competitor on the the race column's race log associated to the passed fleet.
|
||||
* @param competitor
|
||||
@@ -289,7 +301,7 @@ 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;
|
||||
void registerCompetitors(Iterable<Competitor> competitor, Fleet fleet) throws CompetitorRegistrationOnRaceLogDisabledException;
|
||||
|
||||
/**
|
||||
* Deregisters a competitor on the the race column's race log associated to the passed fleet.
|
||||
@@ -299,5 +311,5 @@ public interface RaceColumn extends Named {
|
||||
* 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;
|
||||
void deRegisterCompetitors(Iterable<Competitor> currentlyRegisteredCompetitors, Fleet fleet) throws CompetitorRegistrationOnRaceLogDisabledException;
|
||||
}
|
||||
+39
-3
@@ -6,6 +6,7 @@ import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
@@ -14,12 +15,15 @@ import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
|
||||
import com.sap.sailing.domain.abstractlog.impl.AllEventsOfTypeFinder;
|
||||
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.RaceLogUseCompetitorsFromRaceLogEvent;
|
||||
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.race.tracking.impl.RaceLogUseCompetitorsFromRaceLogEventImpl;
|
||||
import com.sap.sailing.domain.abstractlog.regatta.RegattaLog;
|
||||
import com.sap.sailing.domain.abstractlog.shared.events.RegisterCompetitorEvent;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
@@ -286,7 +290,7 @@ public abstract class AbstractRaceColumn extends SimpleAbstractRaceColumn implem
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerCompetitors(Collection<Competitor> competitors, Fleet fleet)
|
||||
public void registerCompetitors(Iterable<Competitor> competitors, Fleet fleet)
|
||||
throws CompetitorRegistrationOnRaceLogDisabledException {
|
||||
if (isCompetitorRegistrationInRacelogEnabled(fleet)){
|
||||
throw new CompetitorRegistrationOnRaceLogDisabledException();
|
||||
@@ -308,17 +312,20 @@ public abstract class AbstractRaceColumn extends SimpleAbstractRaceColumn implem
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deRegisterCompetitors(Collection<Competitor> competitors, Fleet fleet)
|
||||
public void deRegisterCompetitors(Iterable<Competitor> competitors, Fleet fleet)
|
||||
throws CompetitorRegistrationOnRaceLogDisabledException {
|
||||
if (isCompetitorRegistrationInRacelogEnabled(fleet)){
|
||||
throw new CompetitorRegistrationOnRaceLogDisabledException();
|
||||
}
|
||||
|
||||
HashSet<Competitor> competitorSet = new HashSet<Competitor>();
|
||||
Util.addAll(competitors, competitorSet);
|
||||
|
||||
RaceLog raceLog = getRaceLog(fleet);
|
||||
for (RaceLogEvent event : raceLog.getUnrevokedEventsDescending()) {
|
||||
if (event instanceof RegisterCompetitorEvent) {
|
||||
RegisterCompetitorEvent<?> registerEvent = (RegisterCompetitorEvent<?>) event;
|
||||
if (competitors.contains(registerEvent.getCompetitor())) {
|
||||
if (competitorSet.contains(registerEvent.getCompetitor())) {
|
||||
try {
|
||||
raceLog.revokeEvent(raceLogEventAuthorForRaceColumn, event,
|
||||
"unregistering competitor because no longer selected for registration");
|
||||
@@ -378,4 +385,33 @@ public abstract class AbstractRaceColumn extends SimpleAbstractRaceColumn implem
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enableCompetitorRegistrationOnRaceLog(Fleet fleet) {
|
||||
TimePoint now = MillisecondsTimePoint.now();
|
||||
RaceLog raceLog = getRaceLog(fleet);
|
||||
int passId = raceLog.getCurrentPassId();
|
||||
raceLog.add(new RaceLogUseCompetitorsFromRaceLogEventImpl(now, raceLogEventAuthorForRaceColumn, now, UUID.randomUUID(), passId));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void disableCompetitorRegistrationOnRaceLog(Fleet fleet) {
|
||||
RaceLog raceLog = getRaceLog(fleet);
|
||||
List<RaceLogEvent> events = new AllEventsOfTypeFinder<>(raceLog, true, RaceLogUseCompetitorsFromRaceLogEvent.class).analyze();
|
||||
for (RaceLogEvent event : events) {
|
||||
raceLog.lockForRead();
|
||||
try {
|
||||
event = raceLog.getEventById(event.getId());
|
||||
} finally {
|
||||
raceLog.unlockAfterRead();
|
||||
}
|
||||
if (event != null) {
|
||||
try {
|
||||
raceLog.revokeEvent(raceLogEventAuthorForRaceColumn, event, "revoke triggered by GWT user action");
|
||||
} catch (NotRevokableException e) {
|
||||
logger.warning("Event could not be revoked");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5,7 +5,6 @@ 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;
|
||||
@@ -759,7 +758,7 @@ public class RegattaImpl extends NamedImpl implements Regatta, RaceColumnListene
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerCompetitors(Collection<Competitor> competitors) {
|
||||
public void registerCompetitors(Iterable<Competitor> competitors) {
|
||||
RegattaLog regattaLog = getRegattaLike().getRegattaLog();
|
||||
TimePoint now = MillisecondsTimePoint.now();
|
||||
|
||||
@@ -775,12 +774,14 @@ public class RegattaImpl extends NamedImpl implements Regatta, RaceColumnListene
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deregisterCompetitors(Collection<Competitor> competitors) {
|
||||
public void deregisterCompetitors(Iterable<Competitor> competitors) {
|
||||
RegattaLog regattaLog = getRegattaLike().getRegattaLog();
|
||||
HashSet<Competitor> competitorSet = new HashSet<Competitor>();
|
||||
Util.addAll(competitors, competitorSet);
|
||||
for (RegattaLogEvent event : regattaLog.getUnrevokedEventsDescending()) {
|
||||
if (event instanceof RegisterCompetitorEvent) {
|
||||
RegisterCompetitorEvent<?> registerEvent = (RegisterCompetitorEvent<?>) event;
|
||||
if (competitors.contains(registerEvent.getCompetitor())) {
|
||||
if (competitorSet.contains(registerEvent.getCompetitor())) {
|
||||
try {
|
||||
regattaLog.revokeEvent(regattaLogEventAuthorForRegatta, event,
|
||||
"unregistering competitor because no longer selected for registration");
|
||||
|
||||
+7
-4
@@ -1,6 +1,5 @@
|
||||
package com.sap.sailing.domain.leaderboard.impl;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
@@ -30,6 +29,7 @@ import com.sap.sailing.domain.leaderboard.ScoreCorrection;
|
||||
import com.sap.sailing.domain.leaderboard.ThresholdBasedResultDiscardingRule;
|
||||
import com.sap.sailing.domain.tracking.TrackedRace;
|
||||
import com.sap.sse.common.TimePoint;
|
||||
import com.sap.sse.common.Util;
|
||||
import com.sap.sse.common.impl.MillisecondsTimePoint;
|
||||
|
||||
/**
|
||||
@@ -212,7 +212,7 @@ public abstract class AbstractLeaderboardImpl extends AbstractSimpleLeaderboardI
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerCompetitors(Collection<Competitor> competitors) {
|
||||
public void registerCompetitors(Iterable<Competitor> competitors) {
|
||||
RegattaLog regattaLog = getRegattaLike().getRegattaLog();
|
||||
TimePoint now = MillisecondsTimePoint.now();
|
||||
|
||||
@@ -228,12 +228,15 @@ public abstract class AbstractLeaderboardImpl extends AbstractSimpleLeaderboardI
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deregisterCompetitors(Collection<Competitor> competitors) {
|
||||
public void deregisterCompetitors(Iterable<Competitor> competitors) {
|
||||
RegattaLog regattaLog = getRegattaLike().getRegattaLog();
|
||||
HashSet<Competitor> competitorSet = new HashSet<Competitor>();
|
||||
Util.addAll(competitors, competitorSet);
|
||||
|
||||
for (RegattaLogEvent event : regattaLog.getUnrevokedEventsDescending()) {
|
||||
if (event instanceof RegisterCompetitorEvent) {
|
||||
RegisterCompetitorEvent<?> registerEvent = (RegisterCompetitorEvent<?>) event;
|
||||
if (competitors.contains(registerEvent.getCompetitor())) {
|
||||
if (competitorSet.contains(registerEvent.getCompetitor())) {
|
||||
try {
|
||||
regattaLog.revokeEvent(regattaLogEventAuthorForAbstraceLeaderboard, event,
|
||||
"unregistering competitor because no longer selected for registration");
|
||||
|
||||
+10
-3
@@ -1,6 +1,5 @@
|
||||
package com.sap.sailing.domain.leaderboard.meta;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
@@ -255,7 +254,7 @@ public class MetaLeaderboardColumn extends SimpleAbstractRaceColumn implements R
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerCompetitors(Collection<Competitor> competitor, Fleet fleet)
|
||||
public void registerCompetitors(Iterable<Competitor> competitor, Fleet fleet)
|
||||
throws CompetitorRegistrationOnRaceLogDisabledException {
|
||||
throw new CompetitorRegistrationOnRaceLogDisabledException();
|
||||
}
|
||||
@@ -267,8 +266,16 @@ public class MetaLeaderboardColumn extends SimpleAbstractRaceColumn implements R
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deRegisterCompetitors(Collection<Competitor> competitors, Fleet fleet)
|
||||
public void deRegisterCompetitors(Iterable<Competitor> competitors, Fleet fleet)
|
||||
throws CompetitorRegistrationOnRaceLogDisabledException {
|
||||
throw new CompetitorRegistrationOnRaceLogDisabledException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enableCompetitorRegistrationOnRaceLog(Fleet fleetByName) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void disableCompetitorRegistrationOnRaceLog(Fleet fleetByName) {
|
||||
}
|
||||
}
|
||||
+2
-4
@@ -1,7 +1,5 @@
|
||||
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;
|
||||
@@ -22,8 +20,8 @@ public interface HasRegattaLike {
|
||||
Iterable<Competitor> getCompetitorsRegisteredInRegattaLog();
|
||||
|
||||
void registerCompetitor(Competitor competitor);
|
||||
void registerCompetitors(Collection<Competitor> competitor);
|
||||
void registerCompetitors(Iterable<Competitor> competitor);
|
||||
|
||||
void deregisterCompetitor(Competitor competitor);
|
||||
void deregisterCompetitors(Collection<Competitor> competitor);
|
||||
void deregisterCompetitors(Iterable<Competitor> competitor);
|
||||
}
|
||||
+2
-2
@@ -92,7 +92,7 @@ public class RaceLogCompetitorRegistrationDialog extends AbstractCompetitorRegis
|
||||
@Override
|
||||
public void ok(Void editedObject) {
|
||||
if (competitorRegistrationInRaceLogCheckBox.getValue()) {
|
||||
sailingService.activateCompetitorRegistrationsForRace(leaderboardName,
|
||||
sailingService.enableCompetitorRegistrationsForRace(leaderboardName,
|
||||
raceColumnName, fleetName, new AsyncCallback<Void>() {
|
||||
@Override
|
||||
public void onSuccess(Void isEnabled) {
|
||||
@@ -110,7 +110,7 @@ public class RaceLogCompetitorRegistrationDialog extends AbstractCompetitorRegis
|
||||
});
|
||||
|
||||
} else {
|
||||
sailingService.deactivateCompetitorRegistrationsForRace(leaderboardName,
|
||||
sailingService.disableCompetitorRegistrationsForRace(leaderboardName,
|
||||
raceColumnName, fleetName, new AsyncCallback<Void>() {
|
||||
@Override
|
||||
public void onSuccess(Void isEnabled) {
|
||||
|
||||
+3
-3
@@ -526,7 +526,7 @@ public interface SailingService extends RemoteService, FileStorageManagementGwtS
|
||||
Date dateOfMarkPassing, CompetitorDTO competitorDTO);
|
||||
|
||||
void setCompetitorRegistrationsInRegattaLog(String leaderboardName, Set<CompetitorDTO> competitors)
|
||||
throws DoesNotHaveRegattaLogException;
|
||||
throws DoesNotHaveRegattaLogException, NotFoundException;
|
||||
|
||||
/**
|
||||
* A leaderboard may be situated under multiple events (connected via a leaderboardgroup).
|
||||
@@ -606,9 +606,9 @@ public interface SailingService extends RemoteService, FileStorageManagementGwtS
|
||||
|
||||
Boolean areCompetitorRegistrationsEnabledForRace(String leaderboardName, String raceColumnName, String fleetName) throws NotFoundException;
|
||||
|
||||
void deactivateCompetitorRegistrationsForRace(String leaderboardName, String raceColumnName, String fleetName) throws NotRevokableException, NotFoundException;
|
||||
void disableCompetitorRegistrationsForRace(String leaderboardName, String raceColumnName, String fleetName) throws NotRevokableException, NotFoundException;
|
||||
|
||||
void activateCompetitorRegistrationsForRace(String leaderboardName, String raceColumnName, String fleetName) throws IllegalArgumentException, NotFoundException;
|
||||
void enableCompetitorRegistrationsForRace(String leaderboardName, String raceColumnName, String fleetName) throws IllegalArgumentException, NotFoundException;
|
||||
|
||||
Pair<Boolean, String> checkIfMarksAreUsedInOtherRaceLogs(String leaderboardName, String raceColumnName,
|
||||
String fleetName, Set<MarkDTO> marksToRemove) throws NotFoundException;
|
||||
|
||||
+2
-2
@@ -740,10 +740,10 @@ public interface SailingServiceAsync extends ServerInfoRetriever, FileStorageMan
|
||||
void areCompetitorRegistrationsEnabledForRace(String leaderboardName, String raceColumnName, String fleetName,
|
||||
AsyncCallback<Boolean> asyncCallback);
|
||||
|
||||
void deactivateCompetitorRegistrationsForRace(String leaderboardName, String raceColumnName, String fleetName,
|
||||
void disableCompetitorRegistrationsForRace(String leaderboardName, String raceColumnName, String fleetName,
|
||||
AsyncCallback<Void> asyncCallback);
|
||||
|
||||
void activateCompetitorRegistrationsForRace(String leaderboardName, String raceColumnName, String fleetName,
|
||||
void enableCompetitorRegistrationsForRace(String leaderboardName, String raceColumnName, String fleetName,
|
||||
AsyncCallback<Void> asyncCallback);
|
||||
|
||||
void checkIfMarksAreUsedInOtherRaceLogs(String leaderboardName, String raceColumnName, String fleetName,
|
||||
|
||||
+61
-31
@@ -81,9 +81,7 @@ import com.sap.sailing.domain.abstractlog.race.state.impl.ReadonlyRaceStateImpl;
|
||||
import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.FlagPoleState;
|
||||
import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.gate.ReadonlyGateStartRacingProcedure;
|
||||
import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.rrs26.ReadonlyRRS26RacingProcedure;
|
||||
import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogUseCompetitorsFromRaceLogEvent;
|
||||
import com.sap.sailing.domain.abstractlog.race.tracking.analyzing.impl.RaceLogTrackingStateAnalyzer;
|
||||
import com.sap.sailing.domain.abstractlog.race.tracking.impl.RaceLogUseCompetitorsFromRaceLogEventImpl;
|
||||
import com.sap.sailing.domain.abstractlog.regatta.RegattaLog;
|
||||
import com.sap.sailing.domain.abstractlog.regatta.RegattaLogEvent;
|
||||
import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogCloseOpenEndedDeviceMappingEvent;
|
||||
@@ -5035,25 +5033,54 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
|
||||
@Override
|
||||
public void setCompetitorRegistrationsInRaceLog(String leaderboardName, String raceColumnName, String fleetName,
|
||||
Set<CompetitorDTO> competitorDTOs) throws CompetitorRegistrationOnRaceLogDisabledException, NotFoundException {
|
||||
RaceLog raceLog = getRaceLog(leaderboardName, raceColumnName, fleetName);
|
||||
Set<Competitor> competitors = new HashSet<Competitor>();
|
||||
Set<Competitor> competitorsToRegister = new HashSet<Competitor>();
|
||||
for (CompetitorDTO dto : competitorDTOs) {
|
||||
competitors.add(getCompetitor(dto));
|
||||
competitorsToRegister.add(getCompetitor(dto));
|
||||
}
|
||||
|
||||
getRaceLogTrackingAdapter().registerCompetitors(getService(), raceLog, competitors);
|
||||
RaceColumn raceColumn = getRaceColumn(leaderboardName, raceColumnName);
|
||||
Fleet fleet = getFleetByName(raceColumn, fleetName);
|
||||
Iterable<Competitor> competitorsToRemove = raceColumn.getAllCompetitors(fleet);
|
||||
HashSet<Competitor> competitorSetToRemove = new HashSet<>();
|
||||
Util.addAll(competitorsToRemove, competitorSetToRemove);
|
||||
filterDuplicates(competitorsToRegister, competitorSetToRemove);
|
||||
|
||||
raceColumn.deRegisterCompetitors(competitorSetToRemove, fleet);
|
||||
raceColumn.registerCompetitors(competitorsToRegister, fleet);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCompetitorRegistrationsInRegattaLog(String leaderboardName, Set<CompetitorDTO> competitorDTOs)
|
||||
throws DoesNotHaveRegattaLogException {
|
||||
RegattaLog regattaLog = getRegattaLogInternal(leaderboardName);
|
||||
Set<Competitor> competitors = new HashSet<Competitor>();
|
||||
for (CompetitorDTO dto : competitorDTOs) {
|
||||
competitors.add(getCompetitor(dto));
|
||||
throws DoesNotHaveRegattaLogException, NotFoundException {
|
||||
Leaderboard leaderboard = getLeaderboardByName(leaderboardName);
|
||||
if (!(leaderboard instanceof HasRegattaLike)){
|
||||
throw new DoesNotHaveRegattaLogException();
|
||||
}
|
||||
|
||||
getRaceLogTrackingAdapter().registerCompetitors(getService(), regattaLog, competitors);
|
||||
Set<Competitor> competitorsToRegister = new HashSet<Competitor>();
|
||||
for (CompetitorDTO dto : competitorDTOs) {
|
||||
competitorsToRegister.add(getCompetitor(dto));
|
||||
}
|
||||
|
||||
HasRegattaLike hasRegattaLike = (HasRegattaLike) leaderboard;
|
||||
Iterable<Competitor> competitorsToRemove = leaderboard.getAllCompetitors();
|
||||
HashSet<Competitor> competitorSetToRemove = new HashSet<>();
|
||||
Util.addAll(competitorsToRemove, competitorSetToRemove);
|
||||
filterDuplicates(competitorsToRegister, competitorSetToRemove);
|
||||
|
||||
hasRegattaLike.deregisterCompetitors(competitorSetToRemove);
|
||||
hasRegattaLike.registerCompetitors(competitorsToRegister);
|
||||
}
|
||||
|
||||
private HashSet<Competitor> filterDuplicates(Set<Competitor> competitorsToRegister,
|
||||
HashSet<Competitor> competitorSetToRemove) {
|
||||
for (Competitor competitor : competitorSetToRemove) {
|
||||
if (competitorsToRegister.contains(competitor)){
|
||||
competitorsToRegister.remove(competitor);
|
||||
competitorSetToRemove.remove(competitor);
|
||||
}
|
||||
}
|
||||
return competitorSetToRemove;
|
||||
}
|
||||
|
||||
private Mark convertToMark(MarkDTO dto, boolean resolve) {
|
||||
@@ -5219,12 +5246,22 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
|
||||
@Override
|
||||
public void copyCompetitorsToOtherRaceLogs(com.sap.sse.common.Util.Triple<String, String, String> fromTriple,
|
||||
Set<com.sap.sse.common.Util.Triple<String, String, String>> toTriples) throws NotFoundException {
|
||||
RaceLog fromRaceLog = getRaceLog(fromTriple);
|
||||
Set<RaceLog> toRaceLogs = new HashSet<>();
|
||||
RaceColumn raceColumn = getRaceColumn(fromTriple.getA(), fromTriple.getB());
|
||||
Iterable<Competitor> competitorsToCopy = raceColumn.getAllCompetitors(getFleetByName(raceColumn, fromTriple.getC()));
|
||||
|
||||
for (com.sap.sse.common.Util.Triple<String, String, String> toTriple : toTriples) {
|
||||
toRaceLogs.add(getRaceLog(toTriple));
|
||||
RaceColumn toRaceColumn = getRaceColumn(toTriple.getA(), toTriple.getB());
|
||||
try {
|
||||
toRaceColumn.registerCompetitors(competitorsToCopy, getFleetByName(toRaceColumn, toTriple.getC()));
|
||||
} catch (CompetitorRegistrationOnRaceLogDisabledException e){
|
||||
toRaceColumn.enableCompetitorRegistrationOnRaceLog(getFleetByName(toRaceColumn, toTriple.getC()));
|
||||
try {
|
||||
toRaceColumn.registerCompetitors(competitorsToCopy, getFleetByName(toRaceColumn, toTriple.getC()));
|
||||
} catch (CompetitorRegistrationOnRaceLogDisabledException e1) {
|
||||
//cannot happen
|
||||
}
|
||||
}
|
||||
}
|
||||
getRaceLogTrackingAdapter().copyCompetitors(fromRaceLog, toRaceLogs, getService());
|
||||
}
|
||||
|
||||
private TypeBasedServiceFinder<DeviceIdentifierStringSerializationHandler> getDeviceIdentifierStringSerializerHandlerFinder(
|
||||
@@ -5288,7 +5325,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
|
||||
result.add(raceLog);
|
||||
}
|
||||
|
||||
Leaderboard leaderboard = getService().getLeaderboardByName(leaderboardName);
|
||||
Leaderboard leaderboard = getLeaderboardByName(leaderboardName);
|
||||
if (leaderboard instanceof HasRegattaLike) {
|
||||
result.add(((HasRegattaLike) leaderboard).getRegattaLike().getRegattaLog());
|
||||
}
|
||||
@@ -5468,7 +5505,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
|
||||
@Override
|
||||
public void startRaceLogTracking(String leaderboardName, String raceColumnName, String fleetName, final boolean trackWind, final boolean correctWindByDeclination)
|
||||
throws NotDenotedForRaceLogTrackingException, Exception {
|
||||
Leaderboard leaderboard = getService().getLeaderboardByName(leaderboardName);
|
||||
Leaderboard leaderboard = getLeaderboardByName(leaderboardName);
|
||||
RaceColumn raceColumn = leaderboard.getRaceColumnByName(raceColumnName);
|
||||
Fleet fleet = raceColumn.getFleetByName(fleetName);
|
||||
final RaceHandle raceHandle = getRaceLogTrackingAdapter().startTracking(getService(), leaderboard, raceColumn, fleet);
|
||||
@@ -5959,25 +5996,18 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deactivateCompetitorRegistrationsForRace(String leaderboardName, String raceColumnName, String fleetName) throws NotRevokableException, NotFoundException {
|
||||
public void disableCompetitorRegistrationsForRace(String leaderboardName, String raceColumnName, String fleetName) throws NotRevokableException, NotFoundException {
|
||||
if (areCompetitorRegistrationsEnabledForRace(leaderboardName, raceColumnName, fleetName)){
|
||||
RaceLog raceLog = getRaceLog(leaderboardName, raceColumnName, fleetName);
|
||||
|
||||
List<RaceLogEvent> events = new AllEventsOfTypeFinder<>(raceLog, true, RaceLogUseCompetitorsFromRaceLogEvent.class).analyze();
|
||||
for (RaceLogEvent event : events) {
|
||||
revokeEvent(false, event.getId(), raceLog);
|
||||
}
|
||||
RaceColumn raceColumn = getRaceColumn(leaderboardName, raceColumnName);
|
||||
raceColumn.disableCompetitorRegistrationOnRaceLog(getFleetByName(raceColumn, fleetName));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void activateCompetitorRegistrationsForRace(String leaderboardName, String raceColumnName, String fleetName) throws IllegalArgumentException, NotFoundException {
|
||||
public void enableCompetitorRegistrationsForRace(String leaderboardName, String raceColumnName, String fleetName) throws IllegalArgumentException, NotFoundException {
|
||||
if (!areCompetitorRegistrationsEnabledForRace(leaderboardName, raceColumnName, fleetName)){
|
||||
RaceLog raceLog = getRaceLog(leaderboardName, raceColumnName, fleetName);
|
||||
int passId = raceLog.getCurrentPassId();
|
||||
RaceLogUseCompetitorsFromRaceLogEvent event = new RaceLogUseCompetitorsFromRaceLogEventImpl(MillisecondsTimePoint.now(),
|
||||
getService().getServerAuthor(), MillisecondsTimePoint.now(), UUID.randomUUID(), passId);
|
||||
raceLog.add(event);
|
||||
RaceColumn raceColumn = getRaceColumn(leaderboardName, raceColumnName);
|
||||
raceColumn.enableCompetitorRegistrationOnRaceLog(getFleetByName(raceColumn, fleetName));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user