diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/RaceLogRaceTracker.java b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/RaceLogRaceTracker.java index 6e244a5b535..6eb40b8bad4 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/RaceLogRaceTracker.java +++ b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/RaceLogRaceTracker.java @@ -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) { diff --git a/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/SwissTimingAdapter.java b/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/SwissTimingAdapter.java index a046b6a45ae..bcb05fe84c4 100755 --- a/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/SwissTimingAdapter.java +++ b/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/SwissTimingAdapter.java @@ -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); diff --git a/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/SwissTimingAdapterImpl.java b/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/SwissTimingAdapterImpl.java index 87c7e373d04..a7978a8d466 100755 --- a/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/SwissTimingAdapterImpl.java +++ b/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/SwissTimingAdapterImpl.java @@ -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 diff --git a/java/com.sap.sailing.domain.swisstimingreplayadapter/src/com/sap/sailing/domain/swisstimingreplayadapter/SwissTimingReplayService.java b/java/com.sap.sailing.domain.swisstimingreplayadapter/src/com/sap/sailing/domain/swisstimingreplayadapter/SwissTimingReplayService.java index cabfc47d347..c893dfdbccc 100755 --- a/java/com.sap.sailing.domain.swisstimingreplayadapter/src/com/sap/sailing/domain/swisstimingreplayadapter/SwissTimingReplayService.java +++ b/java/com.sap.sailing.domain.swisstimingreplayadapter/src/com/sap/sailing/domain/swisstimingreplayadapter/SwissTimingReplayService.java @@ -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; /** diff --git a/java/com.sap.sailing.domain.swisstimingreplayadapter/src/com/sap/sailing/domain/swisstimingreplayadapter/impl/SwissTimingReplayServiceImpl.java b/java/com.sap.sailing.domain.swisstimingreplayadapter/src/com/sap/sailing/domain/swisstimingreplayadapter/impl/SwissTimingReplayServiceImpl.java index 2ca3bddf9d5..5863c666e57 100644 --- a/java/com.sap.sailing.domain.swisstimingreplayadapter/src/com/sap/sailing/domain/swisstimingreplayadapter/impl/SwissTimingReplayServiceImpl.java +++ b/java/com.sap.sailing.domain.swisstimingreplayadapter/src/com/sap/sailing/domain/swisstimingreplayadapter/impl/SwissTimingReplayServiceImpl.java @@ -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); } } diff --git a/java/com.sap.sailing.domain.tractracadapter/src/com/sap/sailing/domain/tractracadapter/TracTracAdapter.java b/java/com.sap.sailing.domain.tractracadapter/src/com/sap/sailing/domain/tractracadapter/TracTracAdapter.java index a6bf55de740..c2bf5991abe 100755 --- a/java/com.sap.sailing.domain.tractracadapter/src/com/sap/sailing/domain/tractracadapter/TracTracAdapter.java +++ b/java/com.sap.sailing.domain.tractracadapter/src/com/sap/sailing/domain/tractracadapter/TracTracAdapter.java @@ -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; /** diff --git a/java/com.sap.sailing.domain.tractracadapter/src/com/sap/sailing/domain/tractracadapter/impl/TracTracAdapterImpl.java b/java/com.sap.sailing.domain.tractracadapter/src/com/sap/sailing/domain/tractracadapter/impl/TracTracAdapterImpl.java index 5633609d5c5..d57f2262384 100755 --- a/java/com.sap.sailing.domain.tractracadapter/src/com/sap/sailing/domain/tractracadapter/impl/TracTracAdapterImpl.java +++ b/java/com.sap.sailing.domain.tractracadapter/src/com/sap/sailing/domain/tractracadapter/impl/TracTracAdapterImpl.java @@ -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 diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackerManager.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackerManager.java index 7ee03d14ed2..d4e55b47316 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackerManager.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackerManager.java @@ -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; + } diff --git a/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/SailingServiceImplMock.java b/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/SailingServiceImplMock.java index b46019ffdff..2ccbb422fe2 100755 --- a/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/SailingServiceImplMock.java +++ b/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/SailingServiceImplMock.java @@ -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; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java index b6cacf8c01a..fa69c1eba13 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java @@ -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(); diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/LeaderboardsResource.java b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/LeaderboardsResource.java index f1122662d0f..92a69703d56 100755 --- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/LeaderboardsResource.java +++ b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/LeaderboardsResource.java @@ -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 { diff --git a/java/com.sap.sailing.server.interface/src/com/sap/sailing/server/interfaces/RacingEventService.java b/java/com.sap.sailing.server.interface/src/com/sap/sailing/server/interfaces/RacingEventService.java index 8525b43d251..adceed640ce 100644 --- a/java/com.sap.sailing.server.interface/src/com/sap/sailing/server/interfaces/RacingEventService.java +++ b/java/com.sap.sailing.server.interface/src/com/sap/sailing/server/interfaces/RacingEventService.java @@ -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; } diff --git a/java/com.sap.sailing.server.interface/src/com/sap/sailing/server/operationaltransformation/ImportMasterDataOperation.java b/java/com.sap.sailing.server.interface/src/com/sap/sailing/server/operationaltransformation/ImportMasterDataOperation.java index ea82ebf4539..265bde23c31 100755 --- a/java/com.sap.sailing.server.interface/src/com/sap/sailing/server/operationaltransformation/ImportMasterDataOperation.java +++ b/java/com.sap.sailing.server.interface/src/com/sap/sailing/server/operationaltransformation/ImportMasterDataOperation.java @@ -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); diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RacingEventServiceImpl.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RacingEventServiceImpl.java index 609b17bbb5a..2b645e46b43 100644 --- a/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RacingEventServiceImpl.java +++ b/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RacingEventServiceImpl.java @@ -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 { diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/security/PermissionAwareRaceTrackingHandler.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/security/PermissionAwareRaceTrackingHandler.java index e9d8847be82..067e6ac0156 100644 --- a/java/com.sap.sailing.server/src/com/sap/sailing/server/security/PermissionAwareRaceTrackingHandler.java +++ b/java/com.sap.sailing.server/src/com/sap/sailing/server/security/PermissionAwareRaceTrackingHandler.java @@ -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. */