mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-30 15:57:11 +00:00
Merge remote-tracking branch 'origin/master' into newhome
Conflicts: java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/LeaderboardEntryPoint.java java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/EventDTO.java java/com.sap.sse.gwt/META-INF/MANIFEST.MF
This commit is contained in:
commit
a9bcaa5146
613 files changed
+33834
-3059
No files matched your search
@@ -22,7 +22,8 @@ Require-Bundle: com.sap.sailing.domain,
|
||||
com.sap.sailing.udpconnector,
|
||||
com.sap.sailing.operationaltransformation,
|
||||
com.sap.sailing.domain.shared.android,
|
||||
com.sap.sailing.server.gateway.serialization
|
||||
com.sap.sailing.server.gateway.serialization,
|
||||
com.sap.sse.common
|
||||
Bundle-ClassPath: .
|
||||
Export-Package: com.sap.sailing.server,
|
||||
com.sap.sailing.server.impl;
|
||||
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
package com.sap.sailing.server;
|
||||
|
||||
import com.sap.sailing.domain.base.Regatta;
|
||||
import com.sap.sailing.domain.leaderboard.Leaderboard;
|
||||
import com.sap.sse.common.search.Hit;
|
||||
|
||||
public interface LeaderboardSearchResult extends Hit {
|
||||
Regatta getRegatta();
|
||||
Leaderboard getLeaderboard();
|
||||
}
|
||||
@@ -39,8 +39,6 @@ import com.sap.sailing.domain.common.RegattaIdentifier;
|
||||
import com.sap.sailing.domain.common.RegattaName;
|
||||
import com.sap.sailing.domain.common.ScoringSchemeType;
|
||||
import com.sap.sailing.domain.common.TimePoint;
|
||||
import com.sap.sailing.domain.common.impl.Util.Pair;
|
||||
import com.sap.sailing.domain.common.impl.Util.Triple;
|
||||
import com.sap.sailing.domain.common.media.MediaTrack;
|
||||
import com.sap.sailing.domain.common.racelog.RacingProcedureType;
|
||||
import com.sap.sailing.domain.common.racelog.tracking.TypeBasedServiceFinderFactory;
|
||||
@@ -67,6 +65,10 @@ import com.sap.sailing.domain.tracking.TrackedRegattaRegistry;
|
||||
import com.sap.sailing.domain.tracking.TrackerManager;
|
||||
import com.sap.sailing.domain.tracking.WindStore;
|
||||
import com.sap.sailing.server.masterdata.DataImportLockWithProgress;
|
||||
import com.sap.sse.common.Util;
|
||||
import com.sap.sse.common.Util.Triple;
|
||||
import com.sap.sse.common.search.KeywordQuery;
|
||||
import com.sap.sse.common.search.Result;
|
||||
|
||||
/**
|
||||
* An OSGi service that can be used to track boat races using a TracTrac connector that pushes
|
||||
@@ -157,7 +159,7 @@ public interface RacingEventService extends TrackedRegattaRegistry, RegattaFetch
|
||||
* comment where a wind tracker may provide information such as its type name or, if applicable,
|
||||
* connectivity information such as the network port on which it receives wind information.
|
||||
*/
|
||||
Iterable<Triple<Regatta, RaceDefinition, String>> getWindTrackedRaces();
|
||||
Iterable<Util.Triple<Regatta, RaceDefinition, String>> getWindTrackedRaces();
|
||||
|
||||
/**
|
||||
* Creates a new leaderboard with the <code>name</code> specified.
|
||||
@@ -384,11 +386,11 @@ public interface RacingEventService extends TrackedRegattaRegistry, RegattaFetch
|
||||
|
||||
/**
|
||||
* @return a thread-safe copy of the events (or the exception that occurred trying to obtain the events; arranged in
|
||||
* a {@link Pair}) of from all sailing server instances currently known by the service; it's safe for
|
||||
* a {@link Util.Pair}) of from all sailing server instances currently known by the service; it's safe for
|
||||
* callers to iterate over the iterable returned, and no risk of a {@link ConcurrentModificationException}
|
||||
* exists
|
||||
*/
|
||||
Map<RemoteSailingServerReference, Pair<Iterable<EventBase>, Exception>> getPublicEventsOfAllSailingServers();
|
||||
Map<RemoteSailingServerReference, Util.Pair<Iterable<EventBase>, Exception>> getPublicEventsOfAllSailingServers();
|
||||
|
||||
RemoteSailingServerReference addRemoteSailingServerReference(String name, URL url);
|
||||
|
||||
@@ -446,7 +448,7 @@ public interface RacingEventService extends TrackedRegattaRegistry, RegattaFetch
|
||||
* @return a pair with the found or created regatta, and a boolean that tells whether the regatta was created during
|
||||
* the call
|
||||
*/
|
||||
Pair<Regatta, Boolean> getOrCreateRegattaWithoutReplication(String baseRegattaName, String boatClassName, Serializable id,
|
||||
Util.Pair<Regatta, Boolean> getOrCreateRegattaWithoutReplication(String baseRegattaName, String boatClassName, Serializable id,
|
||||
Iterable<? extends Series> series, boolean persistent, ScoringScheme scoringScheme,
|
||||
Serializable defaultCourseAreaId);
|
||||
|
||||
@@ -507,7 +509,7 @@ public interface RacingEventService extends TrackedRegattaRegistry, RegattaFetch
|
||||
/**
|
||||
* Gets the start time, pass identifier and racing procedure for the queried race. Start time might be <code>null</code>.
|
||||
*/
|
||||
Triple<TimePoint, Integer, RacingProcedureType> getStartTimeAndProcedure(String leaderboardName, String raceColumnName, String fleetName);
|
||||
Util.Triple<TimePoint, Integer, RacingProcedureType> getStartTimeAndProcedure(String leaderboardName, String raceColumnName, String fleetName);
|
||||
|
||||
MongoObjectFactory getMongoObjectFactory();
|
||||
|
||||
@@ -551,5 +553,7 @@ public interface RacingEventService extends TrackedRegattaRegistry, RegattaFetch
|
||||
* For the reference to a remote sailing server, updates its events cache and returns the event list
|
||||
* or, if fetching the event list from the remote server did fail, the exception for which it failed.
|
||||
*/
|
||||
Pair<Iterable<EventBase>, Exception> updateRemoteServerEventCacheSynchronously(RemoteSailingServerReference ref);
|
||||
Util.Pair<Iterable<EventBase>, Exception> updateRemoteServerEventCacheSynchronously(RemoteSailingServerReference ref);
|
||||
|
||||
Result<LeaderboardSearchResult> search(KeywordQuery query);
|
||||
}
|
||||
@@ -14,7 +14,6 @@ import org.osgi.framework.ServiceRegistration;
|
||||
|
||||
import com.sap.sailing.domain.base.RaceDefinition;
|
||||
import com.sap.sailing.domain.base.Regatta;
|
||||
import com.sap.sailing.domain.common.impl.Util.Triple;
|
||||
import com.sap.sailing.domain.common.racelog.tracking.TypeBasedServiceFinder;
|
||||
import com.sap.sailing.domain.persistence.racelog.tracking.GPSFixMongoHandler;
|
||||
import com.sap.sailing.domain.persistence.racelog.tracking.impl.GPSFixMongoHandlerImpl;
|
||||
@@ -24,6 +23,7 @@ import com.sap.sailing.domain.tracking.impl.GPSFixMovingImpl;
|
||||
import com.sap.sailing.server.RacingEventService;
|
||||
import com.sap.sailing.server.racelog.tracking.CachedOsgiTypeBasedServiceFinderFactory;
|
||||
import com.sap.sailing.server.test.support.RacingEventServiceWithTestSupport;
|
||||
import com.sap.sse.common.Util;
|
||||
|
||||
public class Activator implements BundleActivator {
|
||||
private static final Logger logger = Logger.getLogger(Activator.class.getName());
|
||||
@@ -85,7 +85,7 @@ public class Activator implements BundleActivator {
|
||||
serviceFinderFactory.close();
|
||||
}
|
||||
// stop the tracking of the wind and all races
|
||||
for (Triple<Regatta, RaceDefinition, String> windTracker : racingEventService.getWindTrackedRaces()) {
|
||||
for (Util.Triple<Regatta, RaceDefinition, String> windTracker : racingEventService.getWindTrackedRaces()) {
|
||||
racingEventService.stopTrackingWind(windTracker.getA(), windTracker.getB());
|
||||
}
|
||||
for (Regatta regatta : racingEventService.getAllRegattas()) {
|
||||
|
||||
+1
-1
@@ -1,8 +1,8 @@
|
||||
package com.sap.sailing.server.impl;
|
||||
|
||||
import com.sap.sailing.domain.base.CourseListener;
|
||||
import com.sap.sailing.domain.base.Regatta;
|
||||
import com.sap.sailing.domain.base.RaceDefinition;
|
||||
import com.sap.sailing.domain.base.Regatta;
|
||||
import com.sap.sailing.domain.base.Waypoint;
|
||||
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
||||
import com.sap.sailing.domain.common.RegattaNameAndRaceName;
|
||||
|
||||
Executable
+29
@@ -0,0 +1,29 @@
|
||||
package com.sap.sailing.server.impl;
|
||||
|
||||
import com.sap.sailing.domain.base.Regatta;
|
||||
import com.sap.sailing.domain.leaderboard.Leaderboard;
|
||||
import com.sap.sailing.domain.leaderboard.RegattaLeaderboard;
|
||||
import com.sap.sailing.server.LeaderboardSearchResult;
|
||||
|
||||
public class LeaderboardSearchResultImpl implements LeaderboardSearchResult {
|
||||
private final Leaderboard leaderboard;
|
||||
|
||||
public LeaderboardSearchResultImpl(Leaderboard leaderboard) {
|
||||
this.leaderboard = leaderboard;
|
||||
}
|
||||
|
||||
public Regatta getRegatta() {
|
||||
final Regatta regatta;
|
||||
if (leaderboard instanceof RegattaLeaderboard) {
|
||||
regatta = ((RegattaLeaderboard) leaderboard).getRegatta();
|
||||
} else {
|
||||
regatta = null;
|
||||
}
|
||||
return regatta;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Leaderboard getLeaderboard() {
|
||||
return leaderboard;
|
||||
}
|
||||
}
|
||||
@@ -5,6 +5,7 @@ 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.leaderboard.ResultDiscardingRule;
|
||||
import com.sap.sailing.domain.racelog.RaceLog;
|
||||
import com.sap.sailing.domain.racelog.RaceLogEvent;
|
||||
import com.sap.sailing.domain.racelog.RaceLogIdentifier;
|
||||
import com.sap.sailing.domain.racelog.RaceLogIdentifierTemplateResolver;
|
||||
|
||||
+5
-6
@@ -11,8 +11,6 @@ import com.sap.sailing.domain.base.RaceColumnListener;
|
||||
import com.sap.sailing.domain.common.MaxPointsReason;
|
||||
import com.sap.sailing.domain.common.NoWindException;
|
||||
import com.sap.sailing.domain.common.TimePoint;
|
||||
import com.sap.sailing.domain.common.impl.Util;
|
||||
import com.sap.sailing.domain.common.impl.Util.Triple;
|
||||
import com.sap.sailing.domain.leaderboard.Leaderboard;
|
||||
import com.sap.sailing.domain.leaderboard.ResultDiscardingRule;
|
||||
import com.sap.sailing.domain.racelog.RaceLog;
|
||||
@@ -27,6 +25,7 @@ import com.sap.sailing.server.RacingEventServiceOperation;
|
||||
import com.sap.sailing.server.operationaltransformation.UpdateLeaderboardMaxPointsReason;
|
||||
import com.sap.sailing.server.operationaltransformation.UpdateLeaderboardScoreCorrection;
|
||||
import com.sap.sailing.server.operationaltransformation.UpdateLeaderboardScoreCorrectionMetadata;
|
||||
import com.sap.sse.common.Util;
|
||||
|
||||
public class RaceLogScoringReplicator implements RaceColumnListener {
|
||||
|
||||
@@ -127,7 +126,7 @@ public class RaceLogScoringReplicator implements RaceColumnListener {
|
||||
|
||||
int numberOfCompetitorsInLeaderboard = Util.size(leaderboard.getCompetitors());
|
||||
int numberOfCompetitorsInRace;
|
||||
List<Triple<Serializable, String, MaxPointsReason>> positioningList;
|
||||
List<com.sap.sse.common.Util.Triple<Serializable, String, MaxPointsReason>> positioningList;
|
||||
|
||||
numberOfCompetitorsInRace = getNumberOfCompetitorsInRace(raceColumn, fleet, numberOfCompetitorsInLeaderboard);
|
||||
|
||||
@@ -142,7 +141,7 @@ public class RaceLogScoringReplicator implements RaceColumnListener {
|
||||
}
|
||||
|
||||
if (positioningList != null) {
|
||||
for (Triple<Serializable, String, MaxPointsReason> positionedCompetitor : positioningList) {
|
||||
for (com.sap.sse.common.Util.Triple<Serializable, String, MaxPointsReason> positionedCompetitor : positioningList) {
|
||||
Competitor competitor = service.getBaseDomainFactory().getExistingCompetitorById(positionedCompetitor.getA());
|
||||
|
||||
if (positionedCompetitor.getC().equals(MaxPointsReason.NONE)) {
|
||||
@@ -166,7 +165,7 @@ public class RaceLogScoringReplicator implements RaceColumnListener {
|
||||
}
|
||||
|
||||
private boolean setMaxPointsReasonInLeaderboardIfNecessary(Leaderboard leaderboard, RaceColumn raceColumn,
|
||||
TimePoint timePoint, Triple<Serializable, String, MaxPointsReason> positionedCompetitor, Competitor competitor) {
|
||||
TimePoint timePoint, com.sap.sse.common.Util.Triple<Serializable, String, MaxPointsReason> positionedCompetitor, Competitor competitor) {
|
||||
boolean scoreHasBeenCorrected = false;
|
||||
|
||||
MaxPointsReason trackedMaxPointsReason = leaderboard.getMaxPointsReason(competitor, raceColumn, timePoint);
|
||||
@@ -227,7 +226,7 @@ public class RaceLogScoringReplicator implements RaceColumnListener {
|
||||
* @param positionedCompetitor the competitor whose rank shall be determined
|
||||
* @return the rank of the given positionedCompetitor
|
||||
*/
|
||||
private int getRankInPositioningListByRaceCommittee(List<Triple<Serializable, String, MaxPointsReason>> positioningList, Triple<Serializable, String, MaxPointsReason> positionedCompetitor) {
|
||||
private int getRankInPositioningListByRaceCommittee(List<com.sap.sse.common.Util.Triple<Serializable, String, MaxPointsReason>> positioningList, com.sap.sse.common.Util.Triple<Serializable, String, MaxPointsReason> positionedCompetitor) {
|
||||
return positioningList.indexOf(positionedCompetitor) + 1; // indexOf gives the zero-based position requested competitor in the list, + 1 gives the one-based rank
|
||||
}
|
||||
|
||||
|
||||
+20
-14
@@ -71,9 +71,6 @@ import com.sap.sailing.domain.common.dto.FleetDTO;
|
||||
import com.sap.sailing.domain.common.dto.RegattaCreationParametersDTO;
|
||||
import com.sap.sailing.domain.common.dto.SeriesCreationParametersDTO;
|
||||
import com.sap.sailing.domain.common.impl.DataImportProgressImpl;
|
||||
import com.sap.sailing.domain.common.impl.Util;
|
||||
import com.sap.sailing.domain.common.impl.Util.Pair;
|
||||
import com.sap.sailing.domain.common.impl.Util.Triple;
|
||||
import com.sap.sailing.domain.common.media.MediaTrack;
|
||||
import com.sap.sailing.domain.common.media.MediaTrack.MimeType;
|
||||
import com.sap.sailing.domain.common.racelog.RacingProcedureType;
|
||||
@@ -136,6 +133,7 @@ import com.sap.sailing.operationaltransformation.Operation;
|
||||
import com.sap.sailing.server.OperationExecutionListener;
|
||||
import com.sap.sailing.server.RacingEventService;
|
||||
import com.sap.sailing.server.RacingEventServiceOperation;
|
||||
import com.sap.sailing.server.LeaderboardSearchResult;
|
||||
import com.sap.sailing.server.Replicator;
|
||||
import com.sap.sailing.server.masterdata.DataImportLockWithProgress;
|
||||
import com.sap.sailing.server.operationaltransformation.AddCourseArea;
|
||||
@@ -173,6 +171,9 @@ import com.sap.sailing.server.test.support.RacingEventServiceWithTestSupport;
|
||||
import com.sap.sailing.util.BuildVersion;
|
||||
import com.sap.sailing.util.impl.LockUtil;
|
||||
import com.sap.sailing.util.impl.NamedReentrantReadWriteLock;
|
||||
import com.sap.sse.common.Util;
|
||||
import com.sap.sse.common.search.KeywordQuery;
|
||||
import com.sap.sse.common.search.Result;
|
||||
|
||||
public class RacingEventServiceImpl implements RacingEventServiceWithTestSupport, RegattaListener, LeaderboardRegistry, Replicator {
|
||||
private static final Logger logger = Logger.getLogger(RacingEventServiceImpl.class.getName());
|
||||
@@ -869,8 +870,8 @@ public class RacingEventServiceImpl implements RacingEventServiceWithTestSupport
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<RemoteSailingServerReference, Pair<Iterable<EventBase>, Exception>> getPublicEventsOfAllSailingServers() {
|
||||
return remoteSailingServerSet.getCachedEventsForRemoteSailingServers();
|
||||
public Map<RemoteSailingServerReference, com.sap.sse.common.Util.Pair<Iterable<EventBase>, Exception>> getPublicEventsOfAllSailingServers() {
|
||||
return remoteSailingServerSet.getCachedEventsForRemoteSailingServers(); // FIXME should probably add our own stuff here... Is it enough to pass on the remote reference URL to the client for leaderboard group URL construction?
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -882,7 +883,7 @@ public class RacingEventServiceImpl implements RacingEventServiceWithTestSupport
|
||||
}
|
||||
|
||||
@Override
|
||||
public Pair<Iterable<EventBase>, Exception> updateRemoteServerEventCacheSynchronously(RemoteSailingServerReference ref) {
|
||||
public com.sap.sse.common.Util.Pair<Iterable<EventBase>, Exception> updateRemoteServerEventCacheSynchronously(RemoteSailingServerReference ref) {
|
||||
return remoteSailingServerSet.getEventsOrException(ref);
|
||||
}
|
||||
|
||||
@@ -950,7 +951,7 @@ public class RacingEventServiceImpl implements RacingEventServiceWithTestSupport
|
||||
public Regatta createRegatta(String baseRegattaName, String boatClassName, Serializable id,
|
||||
Iterable<? extends Series> series, boolean persistent, ScoringScheme scoringScheme,
|
||||
Serializable defaultCourseAreaId) {
|
||||
Pair<Regatta, Boolean> regattaWithCreatedFlag = getOrCreateRegattaWithoutReplication(baseRegattaName,
|
||||
com.sap.sse.common.Util.Pair<Regatta, Boolean> regattaWithCreatedFlag = getOrCreateRegattaWithoutReplication(baseRegattaName,
|
||||
boatClassName, id, series, persistent, scoringScheme, defaultCourseAreaId);
|
||||
Regatta regatta = regattaWithCreatedFlag.getA();
|
||||
if (regattaWithCreatedFlag.getB()) {
|
||||
@@ -960,7 +961,7 @@ public class RacingEventServiceImpl implements RacingEventServiceWithTestSupport
|
||||
}
|
||||
|
||||
@Override
|
||||
public Pair<Regatta, Boolean> getOrCreateRegattaWithoutReplication(String baseRegattaName, String boatClassName,
|
||||
public com.sap.sse.common.Util.Pair<Regatta, Boolean> getOrCreateRegattaWithoutReplication(String baseRegattaName, String boatClassName,
|
||||
Serializable id, Iterable<? extends Series> series, boolean persistent, ScoringScheme scoringScheme,
|
||||
Serializable defaultCourseAreaId) {
|
||||
RaceLogStore raceLogStore = MongoRaceLogStoreFactory.INSTANCE.getMongoRaceLogStore(mongoObjectFactory,
|
||||
@@ -998,7 +999,7 @@ public class RacingEventServiceImpl implements RacingEventServiceWithTestSupport
|
||||
}
|
||||
}
|
||||
}
|
||||
return new Pair<Regatta, Boolean>(regatta, wasCreated);
|
||||
return new com.sap.sse.common.Util.Pair<Regatta, Boolean>(regatta, wasCreated);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -1684,14 +1685,14 @@ public class RacingEventServiceImpl implements RacingEventServiceWithTestSupport
|
||||
}
|
||||
|
||||
@Override
|
||||
public Iterable<Triple<Regatta, RaceDefinition, String>> getWindTrackedRaces() {
|
||||
List<Triple<Regatta, RaceDefinition, String>> result = new ArrayList<Triple<Regatta, RaceDefinition, String>>();
|
||||
public Iterable<com.sap.sse.common.Util.Triple<Regatta, RaceDefinition, String>> getWindTrackedRaces() {
|
||||
List<com.sap.sse.common.Util.Triple<Regatta, RaceDefinition, String>> result = new ArrayList<com.sap.sse.common.Util.Triple<Regatta, RaceDefinition, String>>();
|
||||
for (Regatta regatta : getAllRegattas()) {
|
||||
for (RaceDefinition race : regatta.getAllRaces()) {
|
||||
for (WindTrackerFactory windTrackerFactory : getWindTrackerFactories()) {
|
||||
WindTracker windTracker = windTrackerFactory.getExistingWindTracker(race);
|
||||
if (windTracker != null) {
|
||||
result.add(new Triple<Regatta, RaceDefinition, String>(regatta, race, windTracker.toString()));
|
||||
result.add(new com.sap.sse.common.Util.Triple<Regatta, RaceDefinition, String>(regatta, race, windTracker.toString()));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2480,11 +2481,11 @@ public class RacingEventServiceImpl implements RacingEventServiceWithTestSupport
|
||||
}
|
||||
|
||||
@Override
|
||||
public Triple<TimePoint, Integer, RacingProcedureType> getStartTimeAndProcedure(String leaderboardName, String raceColumnName, String fleetName) {
|
||||
public com.sap.sse.common.Util.Triple<TimePoint, Integer, RacingProcedureType> getStartTimeAndProcedure(String leaderboardName, String raceColumnName, String fleetName) {
|
||||
RaceLog raceLog = getRaceLog(leaderboardName, raceColumnName, fleetName);
|
||||
if (raceLog != null) {
|
||||
ReadonlyRaceState state = ReadonlyRaceStateImpl.create(raceLog);
|
||||
return new Triple<TimePoint, Integer, RacingProcedureType>(state.getStartTime(), raceLog.getCurrentPassId(), state.getRacingProcedure().getType());
|
||||
return new com.sap.sse.common.Util.Triple<TimePoint, Integer, RacingProcedureType>(state.getStartTime(), raceLog.getCurrentPassId(), state.getRacingProcedure().getType());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@@ -2590,4 +2591,9 @@ public class RacingEventServiceImpl implements RacingEventServiceWithTestSupport
|
||||
public void setDataImportDeleteProgressFromMapTimerWithoutReplication(UUID importOperationId) {
|
||||
dataImportLock.setDeleteFromMapTimer(importOperationId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result<LeaderboardSearchResult> search(KeywordQuery query) {
|
||||
return new RegattaByKeywordSearchService().search(this, query);
|
||||
}
|
||||
}
|
||||
Executable
+95
@@ -0,0 +1,95 @@
|
||||
package com.sap.sailing.server.impl;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.Event;
|
||||
import com.sap.sailing.domain.leaderboard.Leaderboard;
|
||||
import com.sap.sailing.domain.leaderboard.LeaderboardGroup;
|
||||
import com.sap.sailing.server.LeaderboardSearchResult;
|
||||
import com.sap.sailing.server.RacingEventService;
|
||||
import com.sap.sse.common.Util;
|
||||
import com.sap.sse.common.filter.AbstractListFilter;
|
||||
import com.sap.sse.common.search.KeywordQuery;
|
||||
import com.sap.sse.common.search.Result;
|
||||
import com.sap.sse.common.search.ResultImpl;
|
||||
|
||||
/**
|
||||
* Searches a {@link RacingEventService} instance for regattas that somehow match with a
|
||||
* {@link KeywordQuery}. Several attributes on the way are considered, in particular the event
|
||||
* name (if a regatta is somehow linked to an event), the event's venue name, the leaderboard group
|
||||
* name that contains a regatta leaderboard for the subject regatta, the regatta name itself,
|
||||
* the regatta's boat class name, and the names of all competitors entered into the regatta.
|
||||
*
|
||||
* @author Axel Uhl (D043530)
|
||||
*
|
||||
*/
|
||||
public class RegattaByKeywordSearchService {
|
||||
Result<LeaderboardSearchResult> search(final RacingEventService racingEventService, KeywordQuery query) {
|
||||
ResultImpl<LeaderboardSearchResult> result = new ResultImpl<>(query, new RegattaSearchResultRanker(racingEventService));
|
||||
AbstractListFilter<Leaderboard> leaderboardFilter = new AbstractListFilter<Leaderboard>() {
|
||||
@Override
|
||||
public Iterable<String> getStrings(Leaderboard leaderboard) {
|
||||
List<String> leaderboardStrings = new ArrayList<>();
|
||||
leaderboardStrings.add(leaderboard.getName());
|
||||
leaderboardStrings.add(leaderboard.getDisplayName());
|
||||
for (Competitor competitor : leaderboard.getCompetitors()) {
|
||||
leaderboardStrings.add(competitor.getName());
|
||||
leaderboardStrings.add(competitor.getBoat().getSailID());
|
||||
String competitorDisplayName = leaderboard.getDisplayName(competitor);
|
||||
if (competitorDisplayName != null) {
|
||||
leaderboardStrings.add(competitorDisplayName);
|
||||
}
|
||||
}
|
||||
final Iterable<LeaderboardGroup> leaderboardGroupsHostingLeaderboard = getLeaderboardGroupsHostingLeaderboard(
|
||||
leaderboard, racingEventService);
|
||||
for (LeaderboardGroup leaderboardGroup : leaderboardGroupsHostingLeaderboard) {
|
||||
leaderboardStrings.add(leaderboardGroup.getName());
|
||||
leaderboardStrings.add(leaderboardGroup.getDescription());
|
||||
}
|
||||
for (Event event : getEventsHostingLeaderboard(leaderboard, racingEventService, leaderboardGroupsHostingLeaderboard)) {
|
||||
leaderboardStrings.add(event.getName());
|
||||
leaderboardStrings.add(event.getVenue().getName());
|
||||
}
|
||||
return leaderboardStrings;
|
||||
}
|
||||
};
|
||||
for (Leaderboard matchingLeaderboard : leaderboardFilter.applyFilter(query.getKeywords(), racingEventService.getLeaderboards().values())) {
|
||||
result.addHit(new LeaderboardSearchResultImpl(matchingLeaderboard));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private Iterable<LeaderboardGroup> getLeaderboardGroupsHostingLeaderboard(Leaderboard leaderboard, RacingEventService racingEventService) {
|
||||
Set<LeaderboardGroup> result = new LinkedHashSet<>();
|
||||
for (LeaderboardGroup leaderboardGroup : racingEventService.getLeaderboardGroups().values()) {
|
||||
for (Leaderboard lgLeaderboard : leaderboardGroup.getLeaderboards()) {
|
||||
if (lgLeaderboard == leaderboard) {
|
||||
result.add(leaderboardGroup);
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private Iterable<Event> getEventsHostingLeaderboard(Leaderboard leaderboard, RacingEventService racingEventService,
|
||||
Iterable<LeaderboardGroup> leaderboardGroupsHostingLeaderboard) {
|
||||
Set<Event> result = new LinkedHashSet<>();
|
||||
for (Event event : racingEventService.getAllEvents()) {
|
||||
if (Util.contains(event.getVenue().getCourseAreas(), leaderboard.getDefaultCourseArea())) {
|
||||
result.add(event);
|
||||
} else {
|
||||
for (LeaderboardGroup leaderboardGroupHostingRegatta : leaderboardGroupsHostingLeaderboard) {
|
||||
if (Util.contains(event.getLeaderboardGroups(), leaderboardGroupHostingRegatta)) {
|
||||
result.add(event);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
Executable
+71
@@ -0,0 +1,71 @@
|
||||
package com.sap.sailing.server.impl;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
|
||||
import com.sap.sailing.domain.base.Regatta;
|
||||
import com.sap.sailing.domain.common.TimePoint;
|
||||
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.server.RacingEventService;
|
||||
import com.sap.sailing.server.LeaderboardSearchResult;
|
||||
import com.sap.sse.common.Util;
|
||||
|
||||
public class RegattaSearchResultRanker implements Comparator<LeaderboardSearchResult> {
|
||||
private final TrackedRegattaRegistry trackedRegattaRegistry;
|
||||
|
||||
protected RegattaSearchResultRanker(RacingEventService racingEventService) {
|
||||
this.trackedRegattaRegistry = racingEventService;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compare(LeaderboardSearchResult o1, LeaderboardSearchResult o2) {
|
||||
Regatta r1 = o1.getRegatta();
|
||||
Regatta r2 = o2.getRegatta();
|
||||
TrackedRegatta trackedR1 = r1 == null ? null : trackedRegattaRegistry.getTrackedRegatta(r1);
|
||||
TrackedRegatta trackedR2 = r2 == null ? null : trackedRegattaRegistry.getTrackedRegatta(r2);
|
||||
final int result;
|
||||
if (trackedR1 == null) {
|
||||
if (trackedR2 == null) {
|
||||
result = o1.getLeaderboard().getName().compareTo(o2.getLeaderboard().getName());
|
||||
} else {
|
||||
result = -1; // a non-tracked regatta is greater (shown further down) than a tracked regatta
|
||||
}
|
||||
} else {
|
||||
if (trackedR2 == null) {
|
||||
result = 1; // a tracked regatta is less (shown further up) than a non-tracked regatta
|
||||
} else {
|
||||
// both are tracked; check times of tracked races
|
||||
result = compareByEarliestStartOfATrackedRace(trackedR1, trackedR2);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private int compareByEarliestStartOfATrackedRace(TrackedRegatta trackedR1, TrackedRegatta trackedR2) {
|
||||
assert trackedR1 != null;
|
||||
assert trackedR2 != null;
|
||||
TimePoint earliestTrackedRaceInR1 = getEarliestTrackedRace(trackedR1);
|
||||
TimePoint earliestTrackedRaceInR2 = getEarliestTrackedRace(trackedR2);
|
||||
return Util.compareToWithNull(earliestTrackedRaceInR1, earliestTrackedRaceInR2, /* nullIsLess */ false);
|
||||
}
|
||||
|
||||
private TimePoint getEarliestTrackedRace(TrackedRegatta trackedRegatta) {
|
||||
List<TimePoint> startOfTrackingTimes = new ArrayList<>();
|
||||
for (TrackedRace trackedRace : trackedRegatta.getTrackedRaces()) {
|
||||
if (trackedRace.getStartOfTracking() != null) {
|
||||
startOfTrackingTimes.add(trackedRace.getStartOfTracking());
|
||||
}
|
||||
}
|
||||
final TimePoint result;
|
||||
if (startOfTrackingTimes.isEmpty()) {
|
||||
result = null;
|
||||
} else {
|
||||
result = Collections.min(startOfTrackingTimes);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
+10
-9
@@ -25,10 +25,11 @@ import com.sap.sailing.domain.base.DomainFactory;
|
||||
import com.sap.sailing.domain.base.Event;
|
||||
import com.sap.sailing.domain.base.EventBase;
|
||||
import com.sap.sailing.domain.base.RemoteSailingServerReference;
|
||||
import com.sap.sailing.domain.common.impl.Util.Pair;
|
||||
import com.sap.sailing.server.gateway.deserialization.impl.CourseAreaJsonDeserializer;
|
||||
import com.sap.sailing.server.gateway.deserialization.impl.EventBaseJsonDeserializer;
|
||||
import com.sap.sailing.server.gateway.deserialization.impl.LeaderboardGroupBaseJsonDeserializer;
|
||||
import com.sap.sailing.server.gateway.deserialization.impl.VenueJsonDeserializer;
|
||||
import com.sap.sse.common.Util;
|
||||
|
||||
/**
|
||||
* A set of {@link RemoteSailingServerReference}s including a cache of their {@link EventBase events} that is
|
||||
@@ -47,7 +48,7 @@ public class RemoteSailingServerSet {
|
||||
*/
|
||||
private final ConcurrentHashMap<String, RemoteSailingServerReference> remoteSailingServers;
|
||||
|
||||
private final ConcurrentHashMap<RemoteSailingServerReference, Pair<Iterable<EventBase>, Exception>> cachedEventsForRemoteSailingServers;
|
||||
private final ConcurrentHashMap<RemoteSailingServerReference, Util.Pair<Iterable<EventBase>, Exception>> cachedEventsForRemoteSailingServers;
|
||||
|
||||
/**
|
||||
* @param scheduler
|
||||
@@ -82,9 +83,9 @@ public class RemoteSailingServerSet {
|
||||
}.start();
|
||||
}
|
||||
|
||||
private Pair<Iterable<EventBase>, Exception> updateRemoteServerEventCacheSynchronously(RemoteSailingServerReference ref) {
|
||||
private Util.Pair<Iterable<EventBase>, Exception> updateRemoteServerEventCacheSynchronously(RemoteSailingServerReference ref) {
|
||||
BufferedReader bufferedReader = null;
|
||||
Pair<Iterable<EventBase>, Exception> result;
|
||||
Util.Pair<Iterable<EventBase>, Exception> result;
|
||||
try {
|
||||
try {
|
||||
final URL eventsURL = getEventsURL(ref.getURL());
|
||||
@@ -95,7 +96,7 @@ public class RemoteSailingServerSet {
|
||||
JSONParser parser = new JSONParser();
|
||||
Object eventsAsObject = parser.parse(bufferedReader);
|
||||
EventBaseJsonDeserializer deserializer = new EventBaseJsonDeserializer(new VenueJsonDeserializer(
|
||||
new CourseAreaJsonDeserializer(DomainFactory.INSTANCE)));
|
||||
new CourseAreaJsonDeserializer(DomainFactory.INSTANCE)), new LeaderboardGroupBaseJsonDeserializer());
|
||||
JSONArray eventsAsJsonArray = (JSONArray) eventsAsObject;
|
||||
final Set<EventBase> events = new HashSet<>();
|
||||
for (Object eventAsObject : eventsAsJsonArray) {
|
||||
@@ -103,7 +104,7 @@ public class RemoteSailingServerSet {
|
||||
EventBase event = deserializer.deserialize(eventAsJson);
|
||||
events.add(event);
|
||||
}
|
||||
result = new Pair<Iterable<EventBase>, Exception>(events, /* exception */ null);
|
||||
result = new Util.Pair<Iterable<EventBase>, Exception>(events, /* exception */ null);
|
||||
} finally {
|
||||
if (bufferedReader != null) {
|
||||
bufferedReader.close();
|
||||
@@ -111,7 +112,7 @@ public class RemoteSailingServerSet {
|
||||
}
|
||||
} catch (IOException | ParseException e) {
|
||||
logger.log(Level.INFO, "Exception trying to fetch events from remote server "+ref+": "+e.getMessage(), e);
|
||||
result = new Pair<Iterable<EventBase>, Exception>(/* events */ null, e);
|
||||
result = new Util.Pair<Iterable<EventBase>, Exception>(/* events */ null, e);
|
||||
}
|
||||
cachedEventsForRemoteSailingServers.put(ref, result);
|
||||
return result;
|
||||
@@ -126,7 +127,7 @@ public class RemoteSailingServerSet {
|
||||
return new URL(getEventsUrl);
|
||||
}
|
||||
|
||||
public Map<RemoteSailingServerReference, Pair<Iterable<EventBase>, Exception>> getCachedEventsForRemoteSailingServers() {
|
||||
public Map<RemoteSailingServerReference, Util.Pair<Iterable<EventBase>, Exception>> getCachedEventsForRemoteSailingServers() {
|
||||
return Collections.unmodifiableMap(cachedEventsForRemoteSailingServers);
|
||||
}
|
||||
|
||||
@@ -143,7 +144,7 @@ public class RemoteSailingServerSet {
|
||||
* result is cached. If <code>ref</code> was not yet part of this remote sailing server reference set,
|
||||
* it is automatically added.
|
||||
*/
|
||||
public Pair<Iterable<EventBase>, Exception> getEventsOrException(RemoteSailingServerReference ref) {
|
||||
public Util.Pair<Iterable<EventBase>, Exception> getEventsOrException(RemoteSailingServerReference ref) {
|
||||
if (!remoteSailingServers.containsKey(ref.getName())) {
|
||||
remoteSailingServers.put(ref.getName(), ref);
|
||||
}
|
||||
|
||||
+4
-4
@@ -22,7 +22,6 @@ import com.sap.sailing.domain.common.Speed;
|
||||
import com.sap.sailing.domain.common.Tack;
|
||||
import com.sap.sailing.domain.common.TimePoint;
|
||||
import com.sap.sailing.domain.common.WindSource;
|
||||
import com.sap.sailing.domain.common.impl.Util.Pair;
|
||||
import com.sap.sailing.domain.racelog.RaceLog;
|
||||
import com.sap.sailing.domain.racelog.tracking.GPSFixStore;
|
||||
import com.sap.sailing.domain.tracking.CourseDesignChangedListener;
|
||||
@@ -44,6 +43,7 @@ import com.sap.sailing.domain.tracking.WindStore;
|
||||
import com.sap.sailing.domain.tracking.WindWithConfidence;
|
||||
import com.sap.sailing.domain.tracking.impl.EmptyWindStore;
|
||||
import com.sap.sailing.domain.tracking.impl.TrackedRegattaImpl;
|
||||
import com.sap.sse.common.Util;
|
||||
|
||||
public class DummyTrackedRace extends TrackedRaceWithWindEssentials {
|
||||
private static final long serialVersionUID = -11522605089325440L;
|
||||
@@ -85,7 +85,7 @@ public class DummyTrackedRace extends TrackedRaceWithWindEssentials {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Iterable<Pair<Waypoint, Pair<TimePoint, TimePoint>>> getMarkPassingsTimes() {
|
||||
public Iterable<Util.Pair<Waypoint, Util.Pair<TimePoint, TimePoint>>> getMarkPassingsTimes() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -353,7 +353,7 @@ public class DummyTrackedRace extends TrackedRaceWithWindEssentials {
|
||||
}
|
||||
|
||||
@Override
|
||||
public WindWithConfidence<Pair<Position, TimePoint>> getWindWithConfidence(Position p, TimePoint at) {
|
||||
public WindWithConfidence<Util.Pair<Position, TimePoint>> getWindWithConfidence(Position p, TimePoint at) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
@@ -365,7 +365,7 @@ public class DummyTrackedRace extends TrackedRaceWithWindEssentials {
|
||||
}
|
||||
|
||||
@Override
|
||||
public WindWithConfidence<Pair<Position, TimePoint>> getWindWithConfidence(Position p, TimePoint at,
|
||||
public WindWithConfidence<Util.Pair<Position, TimePoint>> getWindWithConfidence(Position p, TimePoint at,
|
||||
Iterable<WindSource> windSourcesToExclude) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
|
||||
+1
-1
@@ -4,9 +4,9 @@ import java.util.ArrayList;
|
||||
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.CompetitorStore;
|
||||
import com.sap.sailing.domain.common.impl.Util;
|
||||
import com.sap.sailing.server.RacingEventService;
|
||||
import com.sap.sailing.server.RacingEventServiceOperation;
|
||||
import com.sap.sse.common.Util;
|
||||
|
||||
public class AllowCompetitorResetToDefaults extends AbstractRacingEventServiceOperation<Void> {
|
||||
private static final long serialVersionUID = 5133140671156755328L;
|
||||
|
||||
+3
-2
@@ -6,6 +6,7 @@ import com.sap.sailing.domain.common.RaceIdentifier;
|
||||
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
||||
import com.sap.sailing.domain.racelog.tracking.EmptyGPSFixStore;
|
||||
import com.sap.sailing.domain.racelog.tracking.GPSFixStore;
|
||||
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
|
||||
import com.sap.sailing.domain.tracking.TrackedRace;
|
||||
import com.sap.sailing.domain.tracking.TrackedRegatta;
|
||||
import com.sap.sailing.domain.tracking.WindStore;
|
||||
@@ -22,7 +23,7 @@ import com.sap.sailing.server.RacingEventServiceOperation;
|
||||
* @author Axel Uhl (d043530)
|
||||
*
|
||||
*/
|
||||
public class CreateTrackedRace extends AbstractRaceOperation<TrackedRace> {
|
||||
public class CreateTrackedRace extends AbstractRaceOperation<DynamicTrackedRace> {
|
||||
private static final long serialVersionUID = 5084401060896514911L;
|
||||
private final long millisecondsOverWhichToAverageWind;
|
||||
private final long millisecondsOverWhichToAverageSpeed;
|
||||
@@ -73,7 +74,7 @@ public class CreateTrackedRace extends AbstractRaceOperation<TrackedRace> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public TrackedRace internalApplyTo(RacingEventService toState) {
|
||||
public DynamicTrackedRace internalApplyTo(RacingEventService toState) {
|
||||
return toState.createTrackedRace(getRaceIdentifier(), windStore == null ? EmptyWindStore.INSTANCE : windStore,
|
||||
gpsFixStore == null ? EmptyGPSFixStore.INSTANCE : gpsFixStore,
|
||||
delayToLiveInMillis, millisecondsOverWhichToAverageWind, millisecondsOverWhichToAverageSpeed);
|
||||
|
||||
+3
-4
@@ -26,8 +26,6 @@ import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
||||
import com.sap.sailing.domain.common.ScoringSchemeType;
|
||||
import com.sap.sailing.domain.common.TimePoint;
|
||||
import com.sap.sailing.domain.common.impl.MasterDataImportObjectCreationCountImpl;
|
||||
import com.sap.sailing.domain.common.impl.Util;
|
||||
import com.sap.sailing.domain.common.impl.Util.Pair;
|
||||
import com.sap.sailing.domain.leaderboard.FlexibleLeaderboard;
|
||||
import com.sap.sailing.domain.leaderboard.Leaderboard;
|
||||
import com.sap.sailing.domain.leaderboard.LeaderboardGroup;
|
||||
@@ -50,6 +48,7 @@ import com.sap.sailing.domain.tracking.WindTrack;
|
||||
import com.sap.sailing.server.RacingEventService;
|
||||
import com.sap.sailing.server.RacingEventServiceOperation;
|
||||
import com.sap.sailing.server.masterdata.DummyTrackedRace;
|
||||
import com.sap.sse.common.Util;
|
||||
|
||||
public class ImportMasterDataOperation extends
|
||||
AbstractRacingEventServiceOperation<MasterDataImportObjectCreationCountImpl> {
|
||||
@@ -303,7 +302,7 @@ public class ImportMasterDataOperation extends
|
||||
* @param leaderboard
|
||||
* @return the race column and fleet the dummy was attached to
|
||||
*/
|
||||
public Pair<RaceColumn, Fleet> addDummyTrackedRace(Leaderboard leaderboard,
|
||||
public com.sap.sse.common.Util.Pair<RaceColumn, Fleet> addDummyTrackedRace(Leaderboard leaderboard,
|
||||
Regatta regatta) {
|
||||
RaceColumn raceColumn = null;
|
||||
Fleet fleet = null;
|
||||
@@ -319,7 +318,7 @@ public class ImportMasterDataOperation extends
|
||||
raceColumn.setTrackedRace(fleet, dummy);
|
||||
}
|
||||
}
|
||||
return new Pair<RaceColumn, Fleet>(raceColumn, fleet);
|
||||
return new com.sap.sse.common.Util.Pair<RaceColumn, Fleet>(raceColumn, fleet);
|
||||
}
|
||||
|
||||
private void createWindTracks(RacingEventService toState) {
|
||||
|
||||
+1
-1
@@ -2,8 +2,8 @@ package com.sap.sailing.server.operationaltransformation;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import com.sap.sailing.domain.base.Regatta;
|
||||
import com.sap.sailing.domain.base.RaceDefinition;
|
||||
import com.sap.sailing.domain.base.Regatta;
|
||||
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
||||
import com.sap.sailing.server.RacingEventService;
|
||||
import com.sap.sailing.server.RacingEventServiceOperation;
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
package com.sap.sailing.server.operationaltransformation;
|
||||
|
||||
import com.sap.sailing.domain.base.Regatta;
|
||||
import com.sap.sailing.domain.base.RaceDefinition;
|
||||
import com.sap.sailing.domain.base.Regatta;
|
||||
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
||||
import com.sap.sailing.server.RacingEventService;
|
||||
import com.sap.sailing.server.RacingEventServiceOperation;
|
||||
|
||||
+4
-4
@@ -5,13 +5,13 @@ import com.sap.sailing.domain.base.RaceColumn;
|
||||
import com.sap.sailing.domain.common.MaxPointsReason;
|
||||
import com.sap.sailing.domain.common.NoWindException;
|
||||
import com.sap.sailing.domain.common.TimePoint;
|
||||
import com.sap.sailing.domain.common.impl.Util.Triple;
|
||||
import com.sap.sailing.domain.leaderboard.Leaderboard;
|
||||
import com.sap.sailing.domain.leaderboard.Leaderboard.Entry;
|
||||
import com.sap.sailing.server.RacingEventService;
|
||||
import com.sap.sailing.server.RacingEventServiceOperation;
|
||||
import com.sap.sse.common.Util;
|
||||
|
||||
public class UpdateLeaderboardMaxPointsReason extends AbstractLeaderboardColumnOperation<Triple<Double, Double, Boolean>> {
|
||||
public class UpdateLeaderboardMaxPointsReason extends AbstractLeaderboardColumnOperation<Util.Triple<Double, Double, Boolean>> {
|
||||
private static final long serialVersionUID = -492130952256848047L;
|
||||
private final String competitorIdAsString;
|
||||
private final MaxPointsReason newMaxPointsReason;
|
||||
@@ -38,7 +38,7 @@ public class UpdateLeaderboardMaxPointsReason extends AbstractLeaderboardColumnO
|
||||
}
|
||||
|
||||
@Override
|
||||
public Triple<Double, Double, Boolean> internalApplyTo(RacingEventService toState) throws NoWindException {
|
||||
public Util.Triple<Double, Double, Boolean> internalApplyTo(RacingEventService toState) throws NoWindException {
|
||||
Leaderboard leaderboard = toState.getLeaderboardByName(getLeaderboardName());
|
||||
if (leaderboard != null) {
|
||||
Competitor competitor = leaderboard.getCompetitorByIdAsString(competitorIdAsString);
|
||||
@@ -51,7 +51,7 @@ public class UpdateLeaderboardMaxPointsReason extends AbstractLeaderboardColumnO
|
||||
updateStoredLeaderboard(toState, leaderboard);
|
||||
Entry updatedEntry = leaderboard.getEntry(competitor, raceColumn, timePoint);
|
||||
boolean isScoreCorrected = leaderboard.getScoreCorrection().isScoreCorrected(competitor, raceColumn, timePoint);
|
||||
return new Triple<Double, Double, Boolean>(updatedEntry.getNetPoints(), updatedEntry.getTotalPoints(), isScoreCorrected);
|
||||
return new Util.Triple<Double, Double, Boolean>(updatedEntry.getNetPoints(), updatedEntry.getTotalPoints(), isScoreCorrected);
|
||||
} else {
|
||||
throw new IllegalArgumentException("Didn't find competitor with ID "+competitorIdAsString+" in leaderboard "+getLeaderboardName());
|
||||
}
|
||||
|
||||
+4
-4
@@ -4,12 +4,12 @@ import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.RaceColumn;
|
||||
import com.sap.sailing.domain.common.NoWindException;
|
||||
import com.sap.sailing.domain.common.TimePoint;
|
||||
import com.sap.sailing.domain.common.impl.Util.Triple;
|
||||
import com.sap.sailing.domain.leaderboard.Leaderboard;
|
||||
import com.sap.sailing.server.RacingEventService;
|
||||
import com.sap.sailing.server.RacingEventServiceOperation;
|
||||
import com.sap.sse.common.Util;
|
||||
|
||||
public class UpdateLeaderboardScoreCorrection extends AbstractLeaderboardColumnOperation<Triple<Double, Double, Boolean>> {
|
||||
public class UpdateLeaderboardScoreCorrection extends AbstractLeaderboardColumnOperation<Util.Triple<Double, Double, Boolean>> {
|
||||
private static final long serialVersionUID = -977025759476022993L;
|
||||
private final String competitorIdAsString;
|
||||
private final Double correctedScore;
|
||||
@@ -39,7 +39,7 @@ public class UpdateLeaderboardScoreCorrection extends AbstractLeaderboardColumnO
|
||||
}
|
||||
|
||||
@Override
|
||||
public Triple<Double, Double, Boolean> internalApplyTo(RacingEventService toState) throws NoWindException {
|
||||
public Util.Triple<Double, Double, Boolean> internalApplyTo(RacingEventService toState) throws NoWindException {
|
||||
Leaderboard leaderboard = toState.getLeaderboardByName(getLeaderboardName());
|
||||
Double newNetPoints;
|
||||
Double newTotalPoints;
|
||||
@@ -64,7 +64,7 @@ public class UpdateLeaderboardScoreCorrection extends AbstractLeaderboardColumnO
|
||||
throw new IllegalArgumentException("Didn't find leaderboard "+getLeaderboardName());
|
||||
}
|
||||
updateStoredLeaderboard(toState, leaderboard);
|
||||
return new Triple<Double, Double, Boolean>(newNetPoints, newTotalPoints, isScoreCorrected);
|
||||
return new Util.Triple<Double, Double, Boolean>(newNetPoints, newTotalPoints, isScoreCorrected);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user