offered an overload of addRace(...) that uses a default RaceTrackingHandler

This commit is contained in:
Axel Uhl committed 2020-03-23 20:31:43 +01:00
1 parent 101b4757f3
commit 07ae00f110
15 files changed
+49 -36

No files matched your search

@@ -113,7 +113,6 @@ public class RaceLogRaceTracker extends AbstractRaceTrackerBaseImpl {
this.trackedRegatta = regatta;
this.raceLogResolver = raceLogResolver;
this.raceTrackingHandler = raceTrackingHandler;
// add log listeners
for (AbstractLog<?, ?> log : params.getLogHierarchy()) {
if (log instanceof RaceLog) {
@@ -12,7 +12,6 @@ import com.sap.sailing.domain.common.RegattaIdentifier;
import com.sap.sailing.domain.racelog.RaceLogStore;
import com.sap.sailing.domain.regattalog.RegattaLogStore;
import com.sap.sailing.domain.tracking.RaceHandle;
import com.sap.sailing.domain.tracking.RaceTrackingHandler;
import com.sap.sailing.domain.tracking.TrackerManager;
import com.sap.sailing.xrr.schema.RegattaResults;
@@ -30,8 +29,7 @@ public interface SwissTimingAdapter {
*/
RaceHandle addSwissTimingRace(TrackerManager trackerManager, RegattaIdentifier regattaToAddTo, String raceID,
String raceName, String raceDescription, BoatClass boatClass, String hostname, int port,
StartList startList, RaceLogStore logStore, RegattaLogStore regattaLogStore, long timeoutInMilliseconds, boolean useInternalMarkPassingAlgorithm, boolean trackWind, boolean correctWindDirectionByMagneticDeclination, String updateURL, String updateUsername, String updatePassword,
RaceTrackingHandler raceTrackingHandler)
StartList startList, RaceLogStore logStore, RegattaLogStore regattaLogStore, long timeoutInMilliseconds, boolean useInternalMarkPassingAlgorithm, boolean trackWind, boolean correctWindDirectionByMagneticDeclination, String updateURL, String updateUsername, String updatePassword)
throws InterruptedException, UnknownHostException, IOException, ParseException, Exception;
StartList readStartListForRace(String raceId, RegattaResults regattaResults);
@@ -24,7 +24,6 @@ import com.sap.sailing.domain.swisstimingadapter.StartList;
import com.sap.sailing.domain.swisstimingadapter.SwissTimingAdapter;
import com.sap.sailing.domain.swisstimingadapter.SwissTimingFactory;
import com.sap.sailing.domain.tracking.RaceHandle;
import com.sap.sailing.domain.tracking.RaceTrackingHandler;
import com.sap.sailing.domain.tracking.TrackerManager;
import com.sap.sailing.xrr.resultimport.ParserFactory;
import com.sap.sailing.xrr.schema.Boat;
@@ -71,13 +70,13 @@ public class SwissTimingAdapterImpl implements SwissTimingAdapter {
String raceName, String raceDescription, BoatClass boatClass, String hostname, int port,
StartList startList, RaceLogStore raceLogStore, RegattaLogStore regattaLogStore, long timeoutInMilliseconds,
boolean useInternalMarkPassingAlgorithm, boolean trackWind, boolean correctWindDirectionByMagneticDeclination,
String updateURL, String updateUsername, String updatePassword, RaceTrackingHandler raceTrackingHandler) throws Exception {
String updateURL, String updateUsername, String updatePassword) throws Exception {
return trackerManager.addRace(regattaToAddTo,
swissTimingDomainFactory.createTrackingConnectivityParameters(hostname, port, raceID, raceName,
raceDescription, boatClass, startList, DEFAULT_SWISSTIMING_LIVE_DELAY_IN_MILLISECONDS,
swissTimingFactory, swissTimingDomainFactory, raceLogStore, regattaLogStore,
useInternalMarkPassingAlgorithm, trackWind, correctWindDirectionByMagneticDeclination, updateURL, updateUsername, updatePassword),
timeoutInMilliseconds, raceTrackingHandler);
timeoutInMilliseconds);
}
@Override
@@ -13,7 +13,6 @@ import com.sap.sailing.domain.common.RegattaIdentifier;
import com.sap.sailing.domain.racelog.RaceLogStore;
import com.sap.sailing.domain.regattalog.RegattaLogStore;
import com.sap.sailing.domain.swisstimingreplayadapter.impl.SwissTimingRaceConfig;
import com.sap.sailing.domain.tracking.RaceTrackingHandler;
import com.sap.sailing.domain.tracking.TrackedRegattaRegistry;
import com.sap.sailing.domain.tracking.TrackerManager;
@@ -46,8 +45,7 @@ public interface SwissTimingReplayService {
*/
void loadRaceData(RegattaIdentifier regattaToAddTo, String link, String raceName, String raceID,
String boatClassName, TrackerManager trackerManager, TrackedRegattaRegistry trackedRegattaRegistry,
boolean useInternalMarkPassingAlgorithm, RaceLogStore raceLogStore, RegattaLogStore regattaLogStore,
RaceTrackingHandler raceTrackingHandler)
boolean useInternalMarkPassingAlgorithm, RaceLogStore raceLogStore, RegattaLogStore regattaLogStore)
throws MalformedURLException, FileNotFoundException, URISyntaxException, Exception;
/**
@@ -28,7 +28,6 @@ import com.sap.sailing.domain.swisstimingadapter.DomainFactory;
import com.sap.sailing.domain.swisstimingreplayadapter.SwissTimingReplayListener;
import com.sap.sailing.domain.swisstimingreplayadapter.SwissTimingReplayRace;
import com.sap.sailing.domain.swisstimingreplayadapter.SwissTimingReplayService;
import com.sap.sailing.domain.tracking.RaceTrackingHandler;
import com.sap.sailing.domain.tracking.TrackedRegattaRegistry;
import com.sap.sailing.domain.tracking.TrackerManager;
import com.sap.sse.util.ByteArrayOutputStreamWithVisibleBuffer;
@@ -152,11 +151,9 @@ public class SwissTimingReplayServiceImpl implements SwissTimingReplayService {
@Override
public void loadRaceData(RegattaIdentifier regattaToAddTo, String link, String raceName, String raceID,
String boatClassName, TrackerManager trackerManager, TrackedRegattaRegistry trackedRegattaRegistry,
boolean useInternalMarkPassingAlgorithm, RaceLogStore raceLogStore, RegattaLogStore regattaLogStore,
RaceTrackingHandler raceTrackingHandler)
boolean useInternalMarkPassingAlgorithm, RaceLogStore raceLogStore, RegattaLogStore regattaLogStore)
throws MalformedURLException, FileNotFoundException, URISyntaxException, Exception {
trackerManager.addRace(regattaToAddTo, new SwissTimingReplayConnectivityParameters(link, raceName, raceID,
boatClassName, useInternalMarkPassingAlgorithm, domainFactory, this, raceLogStore, regattaLogStore), /* timeout */ -1,
raceTrackingHandler);
boatClassName, useInternalMarkPassingAlgorithm, domainFactory, this, raceLogStore, regattaLogStore), /* timeout */ -1);
}
}
@@ -79,8 +79,7 @@ public interface TracTracAdapter {
URI liveURI, URI storedURI, URI courseDesignUpdateURI, TimePoint trackingStartTime,
TimePoint trackingEndTime, RaceLogStore raceLogStore, RegattaLogStore regattaLogStore,
long timeoutForReceivingRaceDefinitionInMilliseconds, Duration offsetToStartTimeOfSimulatedRace, boolean useInternalMarkPassingAlgorithm,
String tracTracUsername, String tracTracPassword, String raceStatus, String raceVisibility, boolean trackWind, boolean correctWindDirectionByMagneticDeclination,
RaceTrackingHandler raceTrackingHandler)
String tracTracUsername, String tracTracPassword, String raceStatus, String raceVisibility, boolean trackWind, boolean correctWindDirectionByMagneticDeclination)
throws MalformedURLException, FileNotFoundException, URISyntaxException, Exception;
/**
@@ -69,14 +69,14 @@ public class TracTracAdapterImpl implements TracTracAdapter {
RaceLogStore raceLogStore, RegattaLogStore regattaLogStore, long timeoutInMilliseconds,
Duration offsetToStartTimeOfSimulatedRace, boolean useInternalMarkPassingAlgorithm, String tracTracUsername,
String tracTracPassword, String raceStatus, String raceVisibility, boolean trackWind,
boolean correctWindDirectionByMagneticDeclination,RaceTrackingHandler raceTrackingHandler) throws Exception {
boolean correctWindDirectionByMagneticDeclination) throws Exception {
return trackerManager.addRace(
regattaToAddTo,
getTracTracDomainFactory().createTrackingConnectivityParameters(paramURL, liveURI, storedURI,
courseDesignUpdateURI, startOfTracking, endOfTracking, delayToLiveInMillis,
offsetToStartTimeOfSimulatedRace, useInternalMarkPassingAlgorithm, raceLogStore, regattaLogStore, tracTracUsername, tracTracPassword,
raceStatus, raceVisibility, trackWind, correctWindDirectionByMagneticDeclination, /* preferReplayIfAvailable */ false,
(int) timeoutInMilliseconds), timeoutInMilliseconds, raceTrackingHandler);
(int) timeoutInMilliseconds), timeoutInMilliseconds);
}
@Override
@@ -25,12 +25,28 @@ public interface TrackerManager {
* regatta is found, it is used to add the races to, and
* {@link #setRegattaForRace(Regatta, RaceDefinition)} is called to remember the association
* persistently. Otherwise, a default regatta as described above will be created and used.
* @param params
* describe the race to be loaded/added and how it is to be loaded
* @param timeoutInMilliseconds
* if -1 then loading doesn't time out; otherwise, if the {@link RaceDefinition} hasn't been received
* after so many milliseconds then the tracker will be {@link RaceTracker#stop(boolean) stopped}.
* @param raceTrackingHandler
* a mandatory service (must not be {@code null}) that is used to create objects during loading/adding
* the race, such as the {@link RaceDefinition}, {@link Boat} and {@link Competitor} objects, and finally
* the {@link TrackedRace} object. There is a default implementation available at
* {@link RaceTrackingHandler.DefaultRaceTrackingHandler} that simply creates the objects; a more
* specialized implementation exists that can handle the security-related aspects. See
* {@code PermissionAwareRaceTrackingHandler}.
*/
RaceHandle addRace(RegattaIdentifier regattaToAddTo, RaceTrackingConnectivityParameters params, long timeoutInMilliseconds,
RaceTrackingHandler raceTrackingHandler)
throws MalformedURLException, FileNotFoundException, URISyntaxException, Exception;
/**
* Same as {@link #addRace(RegattaIdentifier, RaceTrackingConnectivityParameters, long, RaceTrackingHandler)} only that
* the implementation can choose the {@link RaceTrackingHandler} according to its preferences.
*/
RaceHandle addRace(RegattaIdentifier regattaToAddTo, RaceTrackingConnectivityParameters params, long timeoutInMilliseconds)
throws MalformedURLException, FileNotFoundException, URISyntaxException, Exception;
}
@@ -22,7 +22,6 @@ import com.sap.sailing.domain.swisstimingadapter.SwissTimingAdapterFactory;
import com.sap.sailing.domain.swisstimingadapter.SwissTimingFactory;
import com.sap.sailing.domain.swisstimingreplayadapter.SwissTimingReplayService;
import com.sap.sailing.domain.tracking.RaceHandle;
import com.sap.sailing.domain.tracking.RaceTrackingHandler;
import com.sap.sailing.domain.tracking.TrackerManager;
import com.sap.sailing.domain.tractracadapter.TracTracAdapterFactory;
import com.sap.sailing.gwt.ui.server.SailingServiceImpl;
@@ -76,8 +75,7 @@ public class SailingServiceImplMock extends SailingServiceImpl {
public RaceHandle addSwissTimingRace(TrackerManager trackerManager,
RegattaIdentifier regattaToAddTo, String raceID, String raceName, String raceDescription,
BoatClass boatClass, String hostname, int port, StartList startList, RaceLogStore logStore,
RegattaLogStore regattaLogStore, long timeoutInMilliseconds, boolean useInternalMarkPassingAlgorithm, boolean trackWind, boolean correctWindDirectionByMagneticDeclination, String updateURL, String updateUsername, String updatePassword,
RaceTrackingHandler raceTrackingHandler) throws InterruptedException,
RegattaLogStore regattaLogStore, long timeoutInMilliseconds, boolean useInternalMarkPassingAlgorithm, boolean trackWind, boolean correctWindDirectionByMagneticDeclination, String updateURL, String updateUsername, String updatePassword) throws InterruptedException,
UnknownHostException, IOException, ParseException, Exception {
// TODO Auto-generated method stub
return null;
@@ -597,7 +597,6 @@ import com.sap.sailing.server.operationaltransformation.UpdateRaceDelayToLive;
import com.sap.sailing.server.operationaltransformation.UpdateSeries;
import com.sap.sailing.server.operationaltransformation.UpdateServerConfiguration;
import com.sap.sailing.server.operationaltransformation.UpdateSpecificRegatta;
import com.sap.sailing.server.security.PermissionAwareRaceTrackingHandler;
import com.sap.sailing.server.security.SailingViewerRole;
import com.sap.sailing.server.util.WaitForTrackedRaceUtil;
import com.sap.sailing.shared.server.SharedSailingData;
@@ -1494,7 +1493,7 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet
getRegattaLogStore(), RaceTracker.TIMEOUT_FOR_RECEIVING_RACE_DEFINITION_IN_MILLISECONDS,
offsetToStartTimeOfSimulatedRace, useInternalMarkPassingAlgorithm, tracTracUsername,
tracTracPassword, record.getRaceStatus(), record.getRaceVisibility(), trackWind,
correctWindByDeclination, new PermissionAwareRaceTrackingHandler(getSecurityService()));
correctWindByDeclination);
} catch (Exception e) {
logger.log(Level.SEVERE, "Error trying to load race " + rrs+". Continuing with remaining races...", e);
}
@@ -3464,8 +3463,7 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet
rr.raceId, rr.getName(), raceDescription, boatClass, hostname, port, startList,
getRaceLogStore(), getRegattaLogStore(),
RaceTracker.TIMEOUT_FOR_RECEIVING_RACE_DEFINITION_IN_MILLISECONDS, useInternalMarkPassingAlgorithm, trackWind,
correctWindByDeclination, updateURL, updateUsername, updatePassword,
new PermissionAwareRaceTrackingHandler(getSecurityService()));
correctWindByDeclination, updateURL, updateUsername, updatePassword);
}
}
@@ -3506,8 +3504,7 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet
boatClassName = null;
}
getSwissTimingReplayService().loadRaceData(regattaIdentifier, replayRaceDTO.link, replayRaceDTO.getName(),
replayRaceDTO.race_id, boatClassName, getService(), getService(), useInternalMarkPassingAlgorithm, getRaceLogStore(), getRegattaLogStore(),
new PermissionAwareRaceTrackingHandler(getSecurityService()));
replayRaceDTO.race_id, boatClassName, getService(), getService(), useInternalMarkPassingAlgorithm, getRaceLogStore(), getRegattaLogStore());
} catch (Exception e) {
logger.log(Level.SEVERE, "Error trying to load SwissTimingReplay race " + replayRaceDTO, e);
}
@@ -7405,7 +7402,7 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet
RaceColumn raceColumn = leaderboard.getRaceColumnByName(raceColumnName);
Fleet fleet = raceColumn.getFleetByName(fleetName);
getRaceLogTrackingAdapter().startTracking(getService(), leaderboard, raceColumn, fleet, trackWind, correctWindByDeclination,
new PermissionAwareRaceTrackingHandler(getSecurityService()));
getService().getPermissionAwareRaceTrackingHandler());
}
@Override
@@ -8994,7 +8991,7 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet
try {
final RaceHandle raceHandle = getRaceLogTrackingAdapter().startTracking(getService(), regattaLeaderboard,
raceColumn, fleet, /* trackWind */ true, /* correctWindDirectionByMagneticDeclination */ true,
new PermissionAwareRaceTrackingHandler(getSecurityService()));
getService().getPermissionAwareRaceTrackingHandler());
// wait for the RaceDefinition to be created
raceHandle.getRace();
@@ -139,7 +139,6 @@ import com.sap.sailing.server.operationaltransformation.UpdateLeaderboard;
import com.sap.sailing.server.operationaltransformation.UpdateLeaderboardMaxPointsReason;
import com.sap.sailing.server.operationaltransformation.UpdateLeaderboardScoreCorrection;
import com.sap.sailing.server.operationaltransformation.UpdateLeaderboardScoreCorrectionMetadata;
import com.sap.sailing.server.security.PermissionAwareRaceTrackingHandler;
import com.sap.sse.InvalidDateException;
import com.sap.sse.common.Bearing;
import com.sap.sse.common.Distance;
@@ -716,7 +715,7 @@ public class LeaderboardsResource extends AbstractLeaderboardsResource {
leaderboardAndRaceColumnAndFleetAndResponse.getFleet(),
trackWind == null ? true : trackWind,
correctWindDirectionByMagneticDeclination == null ? true : correctWindDirectionByMagneticDeclination,
new PermissionAwareRaceTrackingHandler(getSecurityService()));
getService().getPermissionAwareRaceTrackingHandler());
jsonResult.put("regatta", raceHandle.getRegatta().getName());
result = Response.ok(jsonResult.toJSONString()).build();
} else {
@@ -82,6 +82,7 @@ import com.sap.sailing.domain.regattalike.LeaderboardThatHasRegattaLike;
import com.sap.sailing.domain.resultimport.ResultUrlProvider;
import com.sap.sailing.domain.statistics.Statistics;
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
import com.sap.sailing.domain.tracking.RaceHandle;
import com.sap.sailing.domain.tracking.RaceListener;
import com.sap.sailing.domain.tracking.RaceTracker;
import com.sap.sailing.domain.tracking.RaceTrackingConnectivityParameters;
@@ -921,4 +922,10 @@ public interface RacingEventService extends TrackedRegattaRegistry, RegattaFetch
RaceTrackingConnectivityParameters getConnectivityParametersByRace(RaceDefinition raceDefinition);
RaceTrackingHandler getPermissionAwareRaceTrackingHandler();
/**
* Uses the {@link #getPermissionAwareRaceTrackingHandler()} as the {@link RaceTrackingHandler}
*/
@Override
RaceHandle addRace(RegattaIdentifier regattaToAddTo, RaceTrackingConnectivityParameters params, long timeoutInMilliseconds) throws Exception;
}
@@ -61,7 +61,6 @@ import com.sap.sailing.domain.tracking.RaceHandle;
import com.sap.sailing.domain.tracking.RaceTracker;
import com.sap.sailing.domain.tracking.RaceTrackingConnectivityParameters;
import com.sap.sailing.domain.tracking.RaceTrackingConnectivityParametersHandler;
import com.sap.sailing.domain.tracking.RaceTrackingHandler;
import com.sap.sailing.domain.tracking.TrackedRace;
import com.sap.sailing.domain.tracking.TrackedRegatta;
import com.sap.sailing.domain.tracking.WindTrack;
@@ -623,8 +622,7 @@ public class ImportMasterDataOperation extends
for (RaceTrackingConnectivityParameters param : connectivityParametersToRestore) {
if (param != null) {
final RaceTrackingConnectivityParameters paramToStartTracking = serviceFinder.findService(param.getTypeIdentifier()).resolve(param);
final RaceTrackingHandler raceTrackingHandler = toState.getPermissionAwareRaceTrackingHandler();
RaceHandle raceHandle = toState.addRace(/* default */ null, paramToStartTracking, /* do not wait */ -1, raceTrackingHandler);
RaceHandle raceHandle = toState.addRace(/* default */ null, paramToStartTracking, /* do not wait */ -1);
final RaceDefinition race = raceHandle.getRace(RaceTracker.TIMEOUT_FOR_RECEIVING_RACE_DEFINITION_IN_MILLISECONDS);
if (race != null) {
ensureOwnership(raceHandle.getTrackedRegatta().getTrackedRace(race).getIdentifier(), securityService);
@@ -1819,6 +1819,14 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes
}
}
/**
* Uses the {@link #getPermissionAwareRaceTrackingHandler()} as the {@link RaceTrackingHandler}
*/
@Override
public RaceHandle addRace(RegattaIdentifier regattaToAddTo, RaceTrackingConnectivityParameters params, long timeoutInMilliseconds) throws Exception {
return addRace(regattaToAddTo, params, timeoutInMilliseconds, getPermissionAwareRaceTrackingHandler());
}
@Override
public RaceHandle addRace(RegattaIdentifier regattaToAddTo, RaceTrackingConnectivityParameters params,
long timeoutInMilliseconds, RaceTrackingHandler raceTrackingHandler) throws Exception {
@@ -83,7 +83,7 @@ public class PermissionAwareRaceTrackingHandler extends DefaultRaceTrackingHandl
}
/**
* Check if there is already an ownership asssociated to the object identified by the
* Check if there is already an ownership associated to the object identified by the
* {@link QualifiedObjectIdentifier}. If no ownership exists, one will be created in the context of the current
* user.
*/