From d7b3664322017ba03a74927403c31415b66647d2 Mon Sep 17 00:00:00 2001 From: dmitry Date: Thu, 14 May 2020 10:23:14 +0300 Subject: [PATCH 1/4] bug4964: Remove unused methods in SailingService --- .../impl/PolarSheetsXYDiagramDataImpl.java | 29 -- .../swisstimingadapter/DomainFactory.java | 2 - .../impl/DomainFactoryImpl.java | 20 - .../domain/tractracadapter/DomainFactory.java | 8 - .../impl/DomainFactoryImpl.java | 10 - .../sailing/domain/base/DomainFactory.java | 5 - .../com/sap/sailing/domain/base/Series.java | 4 - .../domain/base/impl/DomainFactoryImpl.java | 20 - .../sailing/domain/base/impl/SeriesImpl.java | 51 --- .../sailing/gwt/ui/client/SailingService.java | 73 ---- .../gwt/ui/client/SailingServiceAsync.java | 59 --- .../gwt/ui/client/SailingServiceWrite.java | 47 --- .../ui/client/SailingServiceWriteAsync.java | 43 +- .../gwt/ui/server/SailingServiceImpl.java | 368 +----------------- .../ui/server/SailingServiceWriteImpl.java | 206 ++-------- .../server/interfaces/RacingEventService.java | 21 - .../MoveColumnInSeriesDown.java | 39 -- .../MoveColumnInSeriesUp.java | 39 -- .../RenameLeaderboard.java | 36 -- .../RenameLeaderboardGroup.java | 36 -- .../test/RaceLogReplicationTest.java | 18 - .../server/impl/RacingEventServiceImpl.java | 37 +- .../sse/security/shared/BasicUserStore.java | 2 - .../shared/dto/OwnershipAnnotationDTO.java | 18 - .../ui/client/UserManagementService.java | 19 - .../ui/client/UserManagementServiceAsync.java | 25 +- .../ui/server/SecurityDTOFactory.java | 8 - .../ui/server/UserManagementServiceImpl.java | 56 +-- .../userstore/mongodb/UserStoreImpl.java | 8 - .../com/sap/sse/security/SecurityService.java | 23 -- .../security/impl/SecurityServiceImpl.java | 85 ---- 31 files changed, 53 insertions(+), 1362 deletions(-) delete mode 100644 java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/impl/PolarSheetsXYDiagramDataImpl.java delete mode 100755 java/com.sap.sailing.server.interface/src/com/sap/sailing/server/operationaltransformation/MoveColumnInSeriesDown.java delete mode 100755 java/com.sap.sailing.server.interface/src/com/sap/sailing/server/operationaltransformation/MoveColumnInSeriesUp.java delete mode 100755 java/com.sap.sailing.server.interface/src/com/sap/sailing/server/operationaltransformation/RenameLeaderboard.java delete mode 100755 java/com.sap.sailing.server.interface/src/com/sap/sailing/server/operationaltransformation/RenameLeaderboardGroup.java delete mode 100644 java/com.sap.sse.security.common/src/com/sap/sse/security/shared/dto/OwnershipAnnotationDTO.java diff --git a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/impl/PolarSheetsXYDiagramDataImpl.java b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/impl/PolarSheetsXYDiagramDataImpl.java deleted file mode 100644 index 89326f27c70..00000000000 --- a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/impl/PolarSheetsXYDiagramDataImpl.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.sap.sailing.domain.common.impl; - -import java.util.List; -import java.util.Map; - -import com.sap.sailing.domain.common.LegType; -import com.sap.sailing.domain.common.PolarSheetsXYDiagramData; -import com.sap.sailing.domain.common.Tack; -import com.sap.sse.common.Util.Pair; - -public class PolarSheetsXYDiagramDataImpl implements PolarSheetsXYDiagramData { - - private static final long serialVersionUID = 778667444303004468L; - - PolarSheetsXYDiagramDataImpl() { - } - - private Map, List>> pointsForAverageSpeedRegression; - - public PolarSheetsXYDiagramDataImpl( - Map, List>> regressionSpeedDataLists) { - pointsForAverageSpeedRegression = regressionSpeedDataLists; - } - - @Override - public List> getPointsForAverageSpeedRegression(Tack tack, LegType legType) { - return pointsForAverageSpeedRegression.get(new Pair(legType, tack)); - } -} diff --git a/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/DomainFactory.java b/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/DomainFactory.java index a49609626b5..e35273c8f77 100755 --- a/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/DomainFactory.java +++ b/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/DomainFactory.java @@ -70,8 +70,6 @@ public interface DomainFactory { MarkPassing createMarkPassing(TimePoint timePoint, Waypoint waypoint, Competitor competitor); - void removeRace(String raceID); - RaceType getRaceTypeFromRaceID(String raceID); RaceTrackingConnectivityParameters createTrackingConnectivityParameters(String hostname, int port, String raceID, diff --git a/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/DomainFactoryImpl.java b/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/DomainFactoryImpl.java index 8f84c702e45..ada5a5e898a 100755 --- a/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/DomainFactoryImpl.java +++ b/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/DomainFactoryImpl.java @@ -6,12 +6,10 @@ import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Calendar; import java.util.HashMap; -import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.UUID; import java.util.logging.Logger; @@ -401,24 +399,6 @@ public class DomainFactoryImpl implements DomainFactory { return baseDomainFactory.createMarkPassing(timePoint, waypoint, competitor); } - @Override - public void removeRace(String raceID) { - Regatta regatta = raceIDToRegattaCache.get(raceID); - if (regatta != null) { - Set toRemove = new HashSet(); - RaceDefinition race = regatta.getRaceByName(raceID); - if (race != null) { - toRemove.add(race); - } - for (RaceDefinition raceToRemove : toRemove) { - regatta.removeRace(raceToRemove); - } - if (Util.isEmpty(regatta.getAllRaces())) { - raceIDToRegattaCache.remove(raceID); - } - } - } - @Override public Nationality getOrCreateNationality(String threeLetterIOCCode) { return baseDomainFactory.getOrCreateNationality(threeLetterIOCCode); diff --git a/java/com.sap.sailing.domain.tractracadapter/src/com/sap/sailing/domain/tractracadapter/DomainFactory.java b/java/com.sap.sailing.domain.tractracadapter/src/com/sap/sailing/domain/tractracadapter/DomainFactory.java index 67db80c8ba2..2fe78b64931 100755 --- a/java/com.sap.sailing.domain.tractracadapter/src/com/sap/sailing/domain/tractracadapter/DomainFactory.java +++ b/java/com.sap.sailing.domain.tractracadapter/src/com/sap/sailing/domain/tractracadapter/DomainFactory.java @@ -334,14 +334,6 @@ public interface DomainFactory { */ Iterable getControlsForCourseArea(IEvent tracTracEvent, String tracTracCourseAreaName); - /** - * Since TracAPI 3.6.1 the TracAPI provides a course area name for {@link IRace} objects. Furthermore, the - * {@link IControl} control points can now tell their {@link IControl#getCourseArea() course area}. This allows us - * to fetch the {@link IControlPoint}s for a specific course area, thereby, e.g., restricting the marks of an event - * that we offer to the Race Manager app's course designer to those available on the course area. - */ - Iterable getControlPointsForCourseArea(IEvent tracTracEvent, String tracTracCourseAreaName); - /** * Looks for an {@link IControl} in the {@code candidates} that contains two {@link IControlPoint}s that map to the * {@code first} and {@code second} mark. diff --git a/java/com.sap.sailing.domain.tractracadapter/src/com/sap/sailing/domain/tractracadapter/impl/DomainFactoryImpl.java b/java/com.sap.sailing.domain.tractracadapter/src/com/sap/sailing/domain/tractracadapter/impl/DomainFactoryImpl.java index 63c90d7fbcc..b499de8dcce 100755 --- a/java/com.sap.sailing.domain.tractracadapter/src/com/sap/sailing/domain/tractracadapter/impl/DomainFactoryImpl.java +++ b/java/com.sap.sailing.domain.tractracadapter/src/com/sap/sailing/domain/tractracadapter/impl/DomainFactoryImpl.java @@ -112,7 +112,6 @@ import com.tractrac.model.lib.api.event.IEvent; import com.tractrac.model.lib.api.event.IRace; import com.tractrac.model.lib.api.event.IRaceCompetitor; import com.tractrac.model.lib.api.route.IControl; -import com.tractrac.model.lib.api.route.IControlPoint; import com.tractrac.subscription.lib.api.IEventSubscriber; import com.tractrac.subscription.lib.api.IRaceSubscriber; import com.tractrac.subscription.lib.api.SubscriberInitializationException; @@ -703,15 +702,6 @@ public class DomainFactoryImpl implements DomainFactory { } } - @Override - public Iterable getControlPointsForCourseArea(IEvent tracTracEvent, String tracTracCourseAreaName) { - final Set result = new HashSet<>(); - for (final IControl control : getControlsForCourseArea(tracTracEvent, tracTracCourseAreaName)) { - result.addAll(control.getControlPoints()); - } - return result; - } - @Override public Iterable getControlsForCourseArea(IEvent tracTracEvent, String tracTracCourseAreaName) { final Set result = new HashSet<>(); diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/DomainFactory.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/DomainFactory.java index 059364e40a5..8e45c06379a 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/DomainFactory.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/DomainFactory.java @@ -34,7 +34,6 @@ import com.sap.sailing.domain.tracking.impl.RaceAbortedHandler; import com.sap.sailing.domain.tracking.impl.StartTimeUpdateHandler; import com.sap.sse.common.IsManagedByCache; import com.sap.sse.common.TimePoint; -import com.sap.sse.common.Util.Pair; import com.sap.sse.util.ObjectInputStreamResolvingAgainstCache; import com.sap.sse.util.ObjectInputStreamResolvingAgainstCache.ResolveListener; @@ -107,12 +106,8 @@ public interface DomainFactory extends SharedDomainFactory getCompetitorDTOList(Map competitors); - List getCompetitorDTOList(Iterable competitors); - List getCompetitorDTOList(List> competitors); - TrackedRaceDTO createTrackedRaceDTO(TrackedRace trackedRace); TrackedRaceStatisticsDTO createTrackedRaceStatisticsDTO(TrackedRace trackedRace, Leaderboard leaderboard, RaceColumn raceColumn, diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/Series.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/Series.java index e4005af4c2a..6929d382d25 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/Series.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/Series.java @@ -57,10 +57,6 @@ public interface Series extends SeriesBase { RaceColumnInSeries addRaceColumn(int insertIndex, String raceColumnName, TrackedRegattaRegistry trackedRegattaRegistry); - void moveRaceColumnUp(String raceColumnName); - - void moveRaceColumnDown(String raceColumnName); - void removeRaceColumn(String raceColumnName); /** diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/DomainFactoryImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/DomainFactoryImpl.java index bdea08c7918..4d664839d4b 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/DomainFactoryImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/DomainFactoryImpl.java @@ -6,7 +6,6 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.Map.Entry; import java.util.logging.Logger; import com.sap.sailing.domain.base.Boat; @@ -79,7 +78,6 @@ import com.sap.sailing.geocoding.ReverseGeocoder; import com.sap.sse.common.Distance; import com.sap.sse.common.TimePoint; import com.sap.sse.common.Util; -import com.sap.sse.common.Util.Pair; import com.sap.sse.common.impl.MillisecondsTimePoint; import com.sap.sse.util.ObjectInputStreamResolvingAgainstCache; import com.sap.sse.util.ObjectInputStreamResolvingAgainstCache.ResolveListener; @@ -385,15 +383,6 @@ public class DomainFactoryImpl extends SharedDomainFactoryImpl getCompetitorDTOList(Map competitors) { - List result = new ArrayList<>(); - for (Entry competitorAndBoatEntry : competitors.entrySet()) { - result.add(convertToCompetitorAndBoatDTO(competitorAndBoatEntry.getKey(), competitorAndBoatEntry.getValue())); - } - return result; - } - @Override public List getCompetitorDTOList(Iterable competitors) { List result = new ArrayList<>(); @@ -403,15 +392,6 @@ public class DomainFactoryImpl extends SharedDomainFactoryImpl getCompetitorDTOList(List> competitors) { - List result = new ArrayList<>(); - for (Pair competitorAndBoat : competitors) { - result.add(convertToCompetitorAndBoatDTO(competitorAndBoat.getA(), competitorAndBoat.getB())); - } - return result; - } - @Override public void addUpdateHandlers(DynamicTrackedRace trackedRace, CourseDesignUpdateHandler courseDesignHandler, StartTimeUpdateHandler startTimeHandler, RaceAbortedHandler raceAbortedHandler, diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/SeriesImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/SeriesImpl.java index 2725625ff7a..65f598fdbc0 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/SeriesImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/SeriesImpl.java @@ -209,57 +209,6 @@ public class SeriesImpl extends RenamableImpl implements Series, RaceColumnListe } } - @Override - public void moveRaceColumnUp(String raceColumnName) { - boolean didFirstColumnChange = false; // if it changes and the series starts scoring with zero, notify the change - // start at second element because first can't be moved up - for (int i=1; i getRegattas() throws UnauthorizedException; - List getRegattasWithUpdatePermission() throws UnauthorizedException; - RegattaDTO getRegattaByName(String regattaName) throws UnauthorizedException; List getEvents() throws Exception; @@ -150,10 +145,6 @@ public interface SailingService extends RemoteService, RemoteReplicationService long resolutionInMilliseconds, Collection windSourceTypeNames, boolean onlyUpToNewestEvent) throws UnauthorizedException; - WindInfoForRaceDTO getAveragedWindInfo(RegattaAndRaceIdentifier raceIdentifier, Date from, - long millisecondsStepWidth, int numberOfFixes, double latDeg, double lngDeg, Collection windSources) - throws NoWindException, UnauthorizedException; - boolean getPolarResults(RegattaAndRaceIdentifier raceIdentifier) throws UnauthorizedException; SimulatorResultsDTO getSimulatorResults(LegIdentifier legIdentifier) throws UnauthorizedException; @@ -225,8 +216,6 @@ public interface SailingService extends RemoteService, RemoteReplicationService SwissTimingEventRecordDTO getRacesOfSwissTimingEvent(String eventJsonURL) throws UnauthorizedException, Exception; - String[] getCountryCodes() throws UnauthorizedException; - Map> getDouglasPoints( RegattaAndRaceIdentifier raceIdentifier, Map competitorTimeRanges, double meters) throws NoWindException, UnauthorizedException; @@ -234,9 +223,6 @@ public interface SailingService extends RemoteService, RemoteReplicationService Map> getManeuvers(RegattaAndRaceIdentifier raceIdentifier, Map competitorTimeRanges) throws NoWindException, UnauthorizedException; - List getLeaderboardsByRaceAndRegatta(String raceName, RegattaIdentifier regattaIdentifier) - throws UnauthorizedException; - List getLeaderboardGroups(boolean withGeoLocationData) throws UnauthorizedException; LeaderboardGroupDTO getLeaderboardGroupByName(String groupName, boolean withGeoLocationData) @@ -298,8 +284,6 @@ public interface SailingService extends RemoteService, RemoteReplicationService List> getLeaderboardsNamesOfMetaLeaderboard(String metaLeaderboardName) throws UnauthorizedException; - LeaderboardType getLeaderboardType(String leaderboardName) throws UnauthorizedException; - /** for backward compatibility with the regatta overview */ List getRegattaStructureForEvent(UUID eventId) throws UnauthorizedException; @@ -307,10 +291,6 @@ public interface SailingService extends RemoteService, RemoteReplicationService List visibleRegattas, boolean showOnlyCurrentlyRunningRaces, boolean showOnlyRacesOfSameDay, Duration clientTimeZoneOffset) throws UnauthorizedException, Exception; - List getRaceStateEntriesForLeaderboard(String leaderboardName, - boolean showOnlyCurrentlyRunningRaces, boolean showOnlyRacesOfSameDay, Duration clientTimeZoneOffset, - List visibleRegattas) throws UnauthorizedException, Exception; - void reloadRaceLog(String leaderboardName, RaceColumnDTO raceColumnDTO, FleetDTO fleet) throws UnauthorizedException, NotFoundException; @@ -339,8 +319,6 @@ public interface SailingService extends RemoteService, RemoteReplicationService List getDeviceConfigurations() throws UnauthorizedException; - DeviceConfigurationDTO getDeviceConfiguration(UUID id) throws UnauthorizedException; - void createOrUpdateDeviceConfiguration(DeviceConfigurationDTO configurationDTO) throws UnauthorizedException; boolean setStartTimeAndProcedure(RaceLogSetStartTimeAndProcedureDTO dto) @@ -355,39 +333,9 @@ public interface SailingService extends RemoteService, RemoteReplicationService Util.Triple getFinishingAndFinishTime(String leaderboardName, String raceColumnName, String fleetName) throws UnauthorizedException, NotFoundException; - Iterable getAllIgtimiAccountEmailAddresses() throws UnauthorizedException; - String getIgtimiAuthorizationUrl(String redirectProtocol, String redirectHostname, String redirectPort) throws UnauthorizedException, Exception; - /** - * Returns all public and private tags of specified race and current user. - * - * @param leaderboardName - * required to identify {@link RaceLog}, must NOT be null - * @param raceColumnName - * required to identify {@link RaceLog}, must NOT be null - * @param fleetName - * required to identify {@link RaceLog}, must NOT be null - * @return list of {@link TagDTO tags} - */ - List getAllTags(String leaderboardName, String raceColumnName, String fleetName) - throws UnauthorizedException; - - /** - * Returns all public {@link TagDTO tags} of specified race. - * - * @param leaderboardName - * required to identify {@link RaceLog}, must NOT be null - * @param raceColumnName - * required to identify {@link RaceLog}, must NOT be null - * @param fleetName - * required to identify {@link RaceLog}, must NOT be null - * @return list of public {@link TagDTO tags} - */ - List getPublicTags(String leaderboardName, String raceColumnName, String fleetName) - throws UnauthorizedException; - /** * Returns all private {@link TagDTO tags} of specified race and current user. * @@ -414,8 +362,6 @@ public interface SailingService extends RemoteService, RemoteReplicationService List getTrackFileImportDeviceIds(List uuids) throws NoCorrespondingServiceRegisteredException, TransformationException; - PolarSheetsXYDiagramData createXYDiagramForBoatClass(String itemText) throws UnauthorizedException; - /** * @see SailingServiceAsync#getCompetitorMarkPassings(RegattaAndRaceIdentifier, CompetitorWithBoatDTO, boolean, * com.google.gwt.user.client.rpc.AsyncCallback) @@ -448,10 +394,6 @@ public interface SailingService extends RemoteService, RemoteReplicationService */ Iterable getRegattas(String manage2SailJsonUrl) throws UnauthorizedException; - Integer getStructureImportOperationProgress() throws UnauthorizedException; - - ArrayList getLeaderboardGroupsByEventId(UUID id) throws UnauthorizedException; - Iterable getMarksInRegattaLog(String leaderboardName) throws UnauthorizedException, DoesNotHaveRegattaLogException; @@ -503,9 +445,6 @@ public interface SailingService extends RemoteService, RemoteReplicationService Iterable getMarksInTrackedRace(String leaderboardName, String raceColumnName, String fleetName) throws UnauthorizedException; - MarkTracksDTO getMarkTracks(String leaderboardName, String raceColumnName, String fleetName) - throws UnauthorizedException; - MarkTrackDTO getMarkTrack(String leaderboardName, String raceColumnName, String fleetName, String markIdAsString) throws UnauthorizedException; @@ -580,8 +519,6 @@ public interface SailingService extends RemoteService, RemoteReplicationService */ String openRegattaRegistrationQrCode(String url) throws UnauthorizedException; - List getPossibleTennants() throws UnauthorizedException; - Iterable getAllIgtimiAccountsWithSecurity() throws UnauthorizedException; /** @@ -607,12 +544,6 @@ public interface SailingService extends RemoteService, RemoteReplicationService CompetitorDTO getCompetitor(UUID competitorId, String leaderboardName, String regattaRegistrationLinkSecret); - boolean existsSwissTimingConfigurationForCurrentUser(String jsonUrl) throws Exception, UnauthorizedException; - - boolean existsSwissTimingArchiveConfigurationForCurrentUser(String jsonUrl) throws Exception, UnauthorizedException; - - boolean existsTracTracConfigurationForCurrentUser(String jsonUrl) throws Exception, UnauthorizedException; - boolean getTrackedRaceIsUsingMarkPassingCalculator(RegattaAndRaceIdentifier regattaNameAndRaceName); ORCPerformanceCurveLegImpl[] getLegGeometry(String leaderboardName, String raceColumnName, String fleetName, @@ -636,10 +567,6 @@ public interface SailingService extends RemoteService, RemoteReplicationService Map getORCCertificateAssignmentsByBoatIdAsString(RegattaIdentifier regattaIdentifier) throws NotFoundException; - Map getORCCertificateAssignmentsByBoatIdAsString(RegattaAndRaceIdentifier raceIdentifier) throws NotFoundException; - - Map getORCCertificateAssignmentsByBoatIdAsString(String leaderboardName) throws NotFoundException; - Map getORCCertificateAssignmentsByBoatIdAsString(String leaderboardName, String raceColumnName, String fleetName) throws NotFoundException; ImpliedWindSource getImpliedWindSource(String leaderboardName, String raceColumnName, String fleetName) throws NotFoundException; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java index 91ec5713c1d..5db26ee870d 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java @@ -12,10 +12,8 @@ import java.util.UUID; import com.google.gwt.user.client.rpc.AsyncCallback; import com.sap.sailing.domain.common.CompetitorDescriptor; import com.sap.sailing.domain.common.DetailType; -import com.sap.sailing.domain.common.LeaderboardType; import com.sap.sailing.domain.common.LegIdentifier; import com.sap.sailing.domain.common.MailInvitationType; -import com.sap.sailing.domain.common.PolarSheetsXYDiagramData; import com.sap.sailing.domain.common.RaceIdentifier; import com.sap.sailing.domain.common.RegattaAndRaceIdentifier; import com.sap.sailing.domain.common.RegattaIdentifier; @@ -46,7 +44,6 @@ import com.sap.sailing.domain.common.windfinder.SpotDTO; import com.sap.sailing.domain.tracking.TrackedRace; import com.sap.sailing.expeditionconnector.ExpeditionDeviceConfiguration; import com.sap.sailing.gwt.ui.client.shared.charts.MarkPositionService.MarkTrackDTO; -import com.sap.sailing.gwt.ui.client.shared.charts.MarkPositionService.MarkTracksDTO; import com.sap.sailing.gwt.ui.shared.AccountWithSecurityDTO; import com.sap.sailing.gwt.ui.shared.CompactBoatPositionsDTO; import com.sap.sailing.gwt.ui.shared.CompactRaceMapDataDTO; @@ -116,8 +113,6 @@ public interface SailingServiceAsync extends RemoteReplicationServiceAsync { void getRegattas(AsyncCallback> callback); - void getRegattasWithUpdatePermission(AsyncCallback> callback); - void getRegattaByName(String regattaName, AsyncCallback asyncCallback); /** @@ -153,15 +148,6 @@ public interface SailingServiceAsync extends RemoteReplicationServiceAsync { long resolutionInMilliseconds, Collection windSourceTypeNames, boolean onlyUpToNewestEvent, AsyncCallback callback); - /** - * @param windSourceTypeNames - * if null, data from all available wind sources will be returned, otherwise only from those - * whose {@link WindSource} name is contained in the windSources collection. - */ - void getAveragedWindInfo(RegattaAndRaceIdentifier raceIdentifier, Date from, long millisecondsStepWidth, - int numberOfFixes, double latDeg, double lngDeg, Collection windSourceTypeNames, - AsyncCallback callback); - /** * @param onlyUpToNewestEvent * if true, no wind data will be returned for time points later than @@ -212,8 +198,6 @@ public interface SailingServiceAsync extends RemoteReplicationServiceAsync { void getLeaderboardsWithSecurity(AsyncCallback> callback); - void getLeaderboardsByRaceAndRegatta(String raceName, RegattaIdentifier regattaIdentifier, - AsyncCallback> callback); /** * The key set of the map returned contains all fleets of the race column identified by the combination of * leaderboardName and raceColumnName. If a value is null, there is no @@ -228,8 +212,6 @@ public interface SailingServiceAsync extends RemoteReplicationServiceAsync { void getRacesOfSwissTimingEvent(String eventJsonUrl, AsyncCallback asyncCallback); - void getCountryCodes(AsyncCallback callback); - void getDouglasPoints(RegattaAndRaceIdentifier raceIdentifier, Map competitorTimeRanges, double meters, AsyncCallback>> callback); @@ -341,18 +323,12 @@ public interface SailingServiceAsync extends RemoteReplicationServiceAsync { void getLeaderboardsNamesOfMetaLeaderboard(String metaLeaderboardName, AsyncCallback>> callback); - void getLeaderboardType(String leaderboardName, AsyncCallback callback); - void getRegattaStructureForEvent(UUID eventId, AsyncCallback> asyncCallback); void getRaceStateEntriesForRaceGroup(UUID eventId, List visibleCourseAreas, List visibleRegattas, boolean showOnlyCurrentlyRunningRaces, boolean showOnlyRacesOfSameDay, Duration clientTimeZoneOffset, AsyncCallback> markedAsyncCallback); - void getRaceStateEntriesForLeaderboard(String leaderboardName, boolean showOnlyCurrentlyRunningRaces, - boolean showOnlyRacesOfSameDay, Duration clientTimeZoneOffset, List visibleRegattas, - AsyncCallback> callback); - void reloadRaceLog(String leaderboardName, RaceColumnDTO raceColumnDTO, FleetDTO fleet, AsyncCallback asyncCallback); @@ -361,8 +337,6 @@ public interface SailingServiceAsync extends RemoteReplicationServiceAsync { void getRegattaLog(String leaderboardName, AsyncCallback callback); - void getStructureImportOperationProgress(AsyncCallback asyncCallback); - void getLeaderboardGroupNamesFromRemoteServer(String host, String username, String password, AsyncCallback> leaderboardGroupNames); @@ -381,8 +355,6 @@ public interface SailingServiceAsync extends RemoteReplicationServiceAsync { void getDeviceConfigurations(AsyncCallback> asyncCallback); - void getDeviceConfiguration(UUID id, AsyncCallback callback); - void createOrUpdateDeviceConfiguration(DeviceConfigurationDTO configurationDTO, AsyncCallback callback); /** @@ -417,16 +389,8 @@ public interface SailingServiceAsync extends RemoteReplicationServiceAsync { void getFinishingAndFinishTime(String leaderboardName, String raceColumnName, String fleetName, AsyncCallback> asyncCallback); - void getAllIgtimiAccountEmailAddresses(AsyncCallback> callback); - void getIgtimiAuthorizationUrl(String redirectProtocol, String redirectHostname, String redirectPort, AsyncCallback callback); - void getAllTags(String leaderboardName, String raceColumnName, String fleetName, - AsyncCallback> asyncCallback); - - void getPublicTags(String leaderboardName, String raceColumnName, String fleetName, - AsyncCallback> asyncCallback); - void getPrivateTags(String leaderboardName, String raceColumnName, String fleetName, AsyncCallback> asyncCallback); @@ -442,8 +406,6 @@ public interface SailingServiceAsync extends RemoteReplicationServiceAsync { void getTrackFileImportDeviceIds(List uuids, AsyncCallback> callback); - void createXYDiagramForBoatClass(String itemText, AsyncCallback asyncCallback); - void getEventsForLeaderboard(String leaderboardName, AsyncCallback> callback); /** @@ -465,8 +427,6 @@ public interface SailingServiceAsync extends RemoteReplicationServiceAsync { void getCompetitorRaceLogMarkPassingData(String leaderboardName, String raceColumnName, String fleetName, CompetitorDTO competitor, AsyncCallback> callback); - void getLeaderboardGroupsByEventId(UUID id, AsyncCallback> callback); - void getMarksInRegattaLog(String leaderboardName, AsyncCallback> callback); void getDeviceMappings(String leaderboardName, AsyncCallback> asyncCallback); @@ -502,9 +462,6 @@ public interface SailingServiceAsync extends RemoteReplicationServiceAsync { void getMarksInTrackedRace(String leaderboardName, String raceColumnName, String fleetName, AsyncCallback> callback); - void getMarkTracks(String leaderboardName, String raceColumnName, String fleetName, - AsyncCallback callback); - void getMarkTrack(String leaderboardName, String raceColumnName, String fleetName, String markIdAsString, AsyncCallback callback); @@ -604,11 +561,6 @@ public interface SailingServiceAsync extends RemoteReplicationServiceAsync { */ void openRegattaRegistrationQrCode(String url, AsyncCallback asyncCallback); - /** - * gets a (possibly imcomplete) list of available tennants to choose from. - */ - void getPossibleTennants(AsyncCallback> asyncCallback); - void getAllIgtimiAccountsWithSecurity(AsyncCallback> callback); /** @@ -635,15 +587,8 @@ public interface SailingServiceAsync extends RemoteReplicationServiceAsync { void getCompetitor(UUID competitorId, String leaderboardName, String regattaRegistrationLinkSecret, AsyncCallback asyncCallback); - void existsSwissTimingConfigurationForCurrentUser(String jsonUrl, AsyncCallback callback); - - void existsSwissTimingArchiveConfigurationForCurrentUser(String jsonUrl, AsyncCallback callback); - - void existsTracTracConfigurationForCurrentUser(String jsonUrl, AsyncCallback callback); - void getTrackedRaceIsUsingMarkPassingCalculator(RegattaAndRaceIdentifier regattaNameAndRaceName, AsyncCallback callback); - void getLegGeometry(String leaderboardName, String raceColumnName, String fleetName, int[] zeroBasedLegIndices, ORCPerformanceCurveLegTypes[] legTypes, AsyncCallback callback); @@ -662,10 +607,6 @@ public interface SailingServiceAsync extends RemoteReplicationServiceAsync { void getORCCertificateAssignmentsByBoatIdAsString(RegattaIdentifier regattaIdentifier, AsyncCallback> asyncCallback); - void getORCCertificateAssignmentsByBoatIdAsString(RegattaAndRaceIdentifier raceIdentifier, AsyncCallback> asyncCallback); - - void getORCCertificateAssignmentsByBoatIdAsString(String leaderboardName, AsyncCallback> asyncCallback); - void getORCCertificateAssignmentsByBoatIdAsString(String leaderboardName, String raceColumnName, String fleetName, AsyncCallback> asyncCallback); /** diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceWrite.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceWrite.java index 02da65c4181..e6b6a21d746 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceWrite.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceWrite.java @@ -10,7 +10,6 @@ import java.util.UUID; import org.apache.shiro.authz.UnauthorizedException; -import com.sap.sailing.domain.abstractlog.Revokable; import com.sap.sailing.domain.abstractlog.orc.RaceLogORCLegDataEvent; import com.sap.sailing.domain.abstractlog.race.RaceLog; import com.sap.sailing.domain.abstractlog.race.RaceLogTagEvent; @@ -111,12 +110,6 @@ public interface SailingServiceWrite extends FileStorageManagementGwtService, Sa String raceColumnName, String fleetName, Map certificatesForBoatsWithIdAsString) throws IOException, NotFoundException; - Triple assignORCPerformanceCurveCertificates(RegattaAndRaceIdentifier raceIdentifier, - Map certificatesForBoatsWithIdAsString) throws IOException, NotFoundException; - - Triple assignORCPerformanceCurveCertificates(String leaderboardName, - Map certificatesForBoatsWithIdAsString) throws IOException, NotFoundException; - Triple assignORCPerformanceCurveCertificates(RegattaIdentifier regattaIdentifier, Map certificatesForBoatsWithIdAsString) throws IOException, NotFoundException; @@ -176,16 +169,6 @@ public interface SailingServiceWrite extends FileStorageManagementGwtService, Sa void setActiveFileStorageService(String serviceName, String localeInfoName); - /** - * Performs all the necessary steps to start tracking the race. The {@code RaceLog} needs to be denoted for - * racelog-tracking beforehand. - * - * @see RaceLogTrackingAdapter#startTracking - */ - void startRaceLogTracking(String leaderboardName, String raceColumnName, String fleetName, boolean trackWind, - boolean correctWindByDeclination) - throws UnauthorizedException, NotDenotedForRaceLogTrackingException, Exception; - void startRaceLogTracking(List> leaderboardRaceColumnFleetNames, boolean trackWind, boolean correctWindByDeclination) throws UnauthorizedException, NotDenotedForRaceLogTrackingException, Exception; @@ -240,8 +223,6 @@ public interface SailingServiceWrite extends FileStorageManagementGwtService, Sa void denoteForRaceLogTracking(String leaderboardName, String prefix) throws Exception; - void denoteForRaceLogTracking(String leaderboardName) throws Exception; - Boolean denoteForRaceLogTracking(String leaderboardName, String raceColumnName, String fleetName) throws NotFoundException, NotDenotableForRaceLogTrackingException; @@ -259,12 +240,6 @@ public interface SailingServiceWrite extends FileStorageManagementGwtService, Sa DataImportProgress getImportOperationProgress(UUID id) throws UnauthorizedException; - boolean unlinkBoatFromCompetitorForRace(String leaderboardName, String raceColumnName, String fleetName, - String competitorIdAsString) throws NotFoundException; - - boolean linkBoatToCompetitorForRace(String leaderboardName, String raceColumnName, String fleetName, - String competitorIdAsString, String boatIdAsString) throws NotFoundException; - void allowCompetitorResetToDefaults(Iterable competitors); UUID importMasterData(String host, String[] groupNames, boolean override, boolean compress, boolean exportWind, @@ -282,12 +257,6 @@ public interface SailingServiceWrite extends FileStorageManagementGwtService, Sa void removeRaceColumnsFromSeries(RegattaIdentifier regattaIdentifier, String seriesName, List columnNames) throws UnauthorizedException; - void moveRaceColumnInSeriesUp(RegattaIdentifier regattaIdentifier, String seriesName, String columnName) - throws UnauthorizedException; - - void moveRaceColumnInSeriesDown(RegattaIdentifier regattaIdentifier, String seriesName, String columnName) - throws UnauthorizedException; - void updateSeries(RegattaIdentifier regattaIdentifier, String seriesName, String newSeriesName, boolean isMedal, boolean isFleetsCanRunInParallel, int[] resultDiscardingThresholds, boolean startsWithZeroScore, boolean firstRaceIsNonDiscardableCarryForward, boolean hasSplitFleetScore, Integer maximumNumberOfDiscards, @@ -349,8 +318,6 @@ public interface SailingServiceWrite extends FileStorageManagementGwtService, Sa void updateRacesDelayToLive(List regattaAndRaceIdentifiers, long delayToLiveInMs); - void updateRaceDelayToLive(RegattaAndRaceIdentifier regattaAndRaceIdentifier, long delayToLiveInMs); - void updateIsMedalRace(String leaderboardName, String columnName, boolean isMedalRace); void moveLeaderboardColumnUp(String leaderboardName, String columnName) throws UnauthorizedException; @@ -385,18 +352,12 @@ public interface SailingServiceWrite extends FileStorageManagementGwtService, Sa void removeLeaderboardColumn(String leaderboardName, String columnName) throws UnauthorizedException; - void removeLeaderboardColumns(String leaderboardName, List columnsToRemove); - void removeLeaderboardGroups(Set groupNames); - void renameLeaderboardGroup(String oldName, String newName); - void removeLeaderboard(String leaderboardName) throws UnauthorizedException; void removeLeaderboards(Collection leaderboardNames) throws UnauthorizedException; - void renameLeaderboard(String leaderboardName, String newLeaderboardName) throws UnauthorizedException; - StrippedLeaderboardDTOWithSecurity updateLeaderboard(String leaderboardName, String newLeaderboardName, String newLeaderboardDisplayName, int[] newDiscardingThreasholds, Iterable newCourseAreaIds) throws UnauthorizedException; @@ -692,12 +653,4 @@ public interface SailingServiceWrite extends FileStorageManagementGwtService, Sa SuccessInfo removeTag(String leaderboardName, String raceColumnName, String fleetName, TagDTO tag) throws UnauthorizedException; - /** - * Revoke the events in the {@code RaceLog} that are identified by the {@code eventIds}. This only affects such - * events that implement {@link Revokable}. - * - * @throws NotFoundException - */ - void revokeRaceAndRegattaLogEvents(String leaderboardName, String raceColumnName, String fleetName, - List eventIds) throws UnauthorizedException, NotRevokableException, NotFoundException; } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceWriteAsync.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceWriteAsync.java index ff8455909c5..5ef471a3549 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceWriteAsync.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceWriteAsync.java @@ -219,18 +219,10 @@ public interface SailingServiceWriteAsync extends FileStorageManagementGwtServic Map certificatesForBoatsWithIdAsString, AsyncCallback> callback); - void assignORCPerformanceCurveCertificates(RegattaAndRaceIdentifier raceIdentifier, - Map certificatesForBoatsWithIdAsString, - AsyncCallback> callback); - void assignORCPerformanceCurveCertificates(String leaderboardName, String raceColumnName, String fleetName, Map certificatesForBoatsWithIdAsString, AsyncCallback> callback); - void assignORCPerformanceCurveCertificates(String leaderboardName, - Map certificatesForBoatsWithIdAsString, - AsyncCallback> callback); - void getORCPerformanceCurveScratchBoat(String leaderboardName, String raceColumnName, String fleetName, AsyncCallback asyncCallback); @@ -335,8 +327,6 @@ public interface SailingServiceWriteAsync extends FileStorageManagementGwtServic void removeLeaderboards(Collection leaderboardNames, AsyncCallback asyncCallback); - void renameLeaderboard(String leaderboardName, String newLeaderboardName, AsyncCallback asyncCallback); - void renameLeaderboardColumn(String leaderboardName, String oldColumnName, String newColumnName, AsyncCallback callback); @@ -373,9 +363,6 @@ public interface SailingServiceWriteAsync extends FileStorageManagementGwtServic void updateIsMedalRace(String leaderboardName, String columnName, boolean isMedalRace, AsyncCallback callback); - void updateRaceDelayToLive(RegattaAndRaceIdentifier regattaAndRaceIdentifier, long delayToLiveInMs, - AsyncCallback callback); - void updateRacesDelayToLive(List regattaAndRaceIdentifiers, long delayToLiveInMs, AsyncCallback callback); @@ -388,13 +375,6 @@ public interface SailingServiceWriteAsync extends FileStorageManagementGwtServic void deleteSwissTimingConfigurations(Collection configurations, AsyncCallback asyncCallback); - /** - * Renames the group with the name oldName to the newName.
- * If there's no group with the name oldName or there's already a group with the name - * newName a {@link IllegalArgumentException} is thrown. - */ - void renameLeaderboardGroup(String oldName, String newName, AsyncCallback callback); - /** * Removes the leaderboard groups with the given names from the service and the persistant store. */ @@ -452,12 +432,6 @@ public interface SailingServiceWriteAsync extends FileStorageManagementGwtServic void removeRegattas(Collection regattas, AsyncCallback asyncCallback); - void moveRaceColumnInSeriesUp(RegattaIdentifier regattaIdentifier, String seriesName, String columnName, - AsyncCallback callback); - - void moveRaceColumnInSeriesDown(RegattaIdentifier regattaIdentifier, String seriesName, String columnName, - AsyncCallback callback); - void createRegatta(String regattaName, String boatClassName, boolean canBoatsOfCompetitorsChangePerRace, CompetitorRegistrationType competitorRegistrationType, String registrationLinkSecret, Date startDate, Date endDate, RegattaCreationParametersDTO seriesNamesWithFleetNamesAndFleetOrderingAndMedal, boolean persistent, @@ -478,8 +452,6 @@ public interface SailingServiceWriteAsync extends FileStorageManagementGwtServic void removeResultImportURLs(String resultProviderName, Set toRemove, AsyncCallback callback); - void removeLeaderboardColumns(String leaderboardName, List columnsToRemove, AsyncCallback callback); - void suppressCompetitorInLeaderboard(String leaderboardName, String competitorIdAsString, boolean suppressed, AsyncCallback asyncCallback); @@ -508,10 +480,6 @@ public interface SailingServiceWriteAsync extends FileStorageManagementGwtServic void allowCompetitorResetToDefaults(Iterable competitors, AsyncCallback asyncCallback); - void linkBoatToCompetitorForRace(String leaderboardName, String raceColumnName, String fleetName, String competitorIdAsString, String boatIdAsString, AsyncCallback asyncCallback); - - void unlinkBoatFromCompetitorForRace(String leaderboardName, String raceColumnName, String fleetName, String competitorIdAsString, AsyncCallback asyncCallback); - void removeDeviceConfiguration(UUID deviceConfigurationId, AsyncCallback asyncCallback); void authorizeAccessToIgtimiUser(String eMailAddress, String password, AsyncCallback callback); @@ -528,13 +496,8 @@ public interface SailingServiceWriteAsync extends FileStorageManagementGwtServic void denoteForRaceLogTracking(String leaderboardName, String raceColumnName, String fleetName, AsyncCallback callback); - void denoteForRaceLogTracking(String leaderboardName, AsyncCallback callback); - void denoteForRaceLogTracking(String leaderboardName,String prefix, AsyncCallback callback); - void startRaceLogTracking(String leaderboardName, String raceColumnName, String fleetName, boolean trackWind, - boolean correctWindByDeclination, AsyncCallback callback); - void startRaceLogTracking(List> leaderboardRaceColumnFleetNames, final boolean trackWind, final boolean correctWindByDeclination, AsyncCallback callback); @@ -568,9 +531,6 @@ public interface SailingServiceWriteAsync extends FileStorageManagementGwtServic void pingMark(String leaderboardName, MarkDTO mark, TimePoint timePoint, Position position, AsyncCallback callback); - void revokeRaceAndRegattaLogEvents(String leaderboardName, String raceColumnName, String fleetName, - List eventIds, AsyncCallback callback); - void removeSeries(RegattaIdentifier regattaIdentifier, String seriesName, AsyncCallback callback); void removeDenotationForRaceLogTracking(String leaderboardName, String raceColumnName, String fleetName, @@ -595,7 +555,8 @@ public interface SailingServiceWriteAsync extends FileStorageManagementGwtServic void inviteBuoyTenderViaEmail(String serverUrlWithoutTrailingSlash, EventDTO eventDto, String leaderboardName, String emails, String iOSAppUrl, String androidAppUrl, String localeInfoName, AsyncCallback callback); - void revokeRaceAndRegattaLogEvents(String leaderboardName, List eventIds, AsyncCallback callback); + + void revokeRaceAndRegattaLogEvents(String leaderboardName, List eventIds, AsyncCallback callback); void closeOpenEndedDeviceMapping(String leaderboardName, DeviceMappingDTO mappingDto, Date closingTimePoint, AsyncCallback asyncCallback); 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 685912f3a53..d754de3893d 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 @@ -132,7 +132,6 @@ import com.sap.sailing.domain.base.RemoteSailingServerReference; import com.sap.sailing.domain.base.SailingServerConfiguration; import com.sap.sailing.domain.base.Series; import com.sap.sailing.domain.base.Sideline; -import com.sap.sailing.domain.base.SpeedWithBearingWithConfidence; import com.sap.sailing.domain.base.Waypoint; import com.sap.sailing.domain.base.configuration.DeviceConfiguration; import com.sap.sailing.domain.base.configuration.RacingProcedureConfiguration; @@ -153,7 +152,6 @@ import com.sap.sailing.domain.common.CompetitorDescriptor; import com.sap.sailing.domain.common.DetailType; import com.sap.sailing.domain.common.DeviceIdentifier; import com.sap.sailing.domain.common.LeaderboardNameConstants; -import com.sap.sailing.domain.common.LeaderboardType; import com.sap.sailing.domain.common.LegIdentifier; import com.sap.sailing.domain.common.LegType; import com.sap.sailing.domain.common.MailInvitationType; @@ -162,7 +160,6 @@ import com.sap.sailing.domain.common.NauticalSide; import com.sap.sailing.domain.common.NoWindException; import com.sap.sailing.domain.common.NotFoundException; import com.sap.sailing.domain.common.PathType; -import com.sap.sailing.domain.common.PolarSheetsXYDiagramData; import com.sap.sailing.domain.common.Position; import com.sap.sailing.domain.common.RaceFetcher; import com.sap.sailing.domain.common.RankingMetrics; @@ -203,12 +200,10 @@ import com.sap.sailing.domain.common.dto.RaceLogTrackingInfoDTO; import com.sap.sailing.domain.common.dto.SeriesCreationParametersDTO; import com.sap.sailing.domain.common.dto.TagDTO; import com.sap.sailing.domain.common.dto.TrackedRaceDTO; -import com.sap.sailing.domain.common.impl.DegreePosition; import com.sap.sailing.domain.common.impl.KilometersPerHourSpeedImpl; import com.sap.sailing.domain.common.impl.KnotSpeedImpl; import com.sap.sailing.domain.common.impl.KnotSpeedWithBearingImpl; import com.sap.sailing.domain.common.impl.MeterDistance; -import com.sap.sailing.domain.common.impl.PolarSheetsXYDiagramDataImpl; import com.sap.sailing.domain.common.impl.WindSourceImpl; import com.sap.sailing.domain.common.media.MediaTrack; import com.sap.sailing.domain.common.orc.ImpliedWindSource; @@ -329,7 +324,6 @@ import com.sap.sailing.gwt.common.client.EventWindFinderUtil; import com.sap.sailing.gwt.server.HomeServiceUtil; import com.sap.sailing.gwt.ui.client.SailingService; import com.sap.sailing.gwt.ui.client.shared.charts.MarkPositionService.MarkTrackDTO; -import com.sap.sailing.gwt.ui.client.shared.charts.MarkPositionService.MarkTracksDTO; import com.sap.sailing.gwt.ui.shared.AccountWithSecurityDTO; import com.sap.sailing.gwt.ui.shared.CompactBoatPositionsDTO; import com.sap.sailing.gwt.ui.shared.CompactRaceMapDataDTO; @@ -560,8 +554,6 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet private final com.sap.sailing.domain.tractracadapter.persistence.DomainObjectFactory tractracDomainObjectFactory; - private final com.sap.sse.common.CountryCodeFactory countryCodeFactory; - protected final Executor executor; protected final com.sap.sailing.domain.base.DomainFactory baseDomainFactory; @@ -623,7 +615,6 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet .getTracTracDomainFactory()); tractracMongoObjectFactory = com.sap.sailing.domain.tractracadapter.persistence.MongoObjectFactory.INSTANCE; swissTimingFactory = SwissTimingFactory.INSTANCE; - countryCodeFactory = com.sap.sse.common.CountryCodeFactory.INSTANCE; leaderboardDifferenceCacheByIdPair = new LinkedHashMap, IncrementalLeaderboardDTO>(LEADERBOARD_DIFFERENCE_CACHE_SIZE, 0.75f, /* accessOrder */ true) { private static final long serialVersionUID = 3775119859130148488L; @Override @@ -938,14 +929,6 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet getService().getAllRegattas(), this::convertToRegattaDTO); } - //READ - @Override - public List getRegattasWithUpdatePermission() { - return getSecurityService().mapAndFilterByExplicitPermissionForCurrentUser( - new HasPermissions.Action[] { DefaultActions.READ, DefaultActions.UPDATE }, - getService().getAllRegattas(), this::convertToRegattaDTO); - } - //READ @Override public RegattaDTO getRegattaByName(String regattaName) { @@ -1428,70 +1411,6 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet return windDTO; } - /** - * Fetches the {@link WindTrack#getAveragedWind(Position, TimePoint) average wind} from all wind tracks or those identified - * by windSourceTypeNames - */ - @Override - //READ - public WindInfoForRaceDTO getAveragedWindInfo(RegattaAndRaceIdentifier raceIdentifier, Date from, long millisecondsStepWidth, - int numberOfFixes, double latDeg, double lngDeg, Collection windSourceTypeNames) - throws NoWindException { - Position position = new DegreePosition(latDeg, lngDeg); - WindInfoForRaceDTO result = null; - TrackedRace trackedRace = getExistingTrackedRace(raceIdentifier); - getSecurityService().checkCurrentUserReadPermission(trackedRace); - if (trackedRace != null) { - result = new WindInfoForRaceDTO(); - result.raceIsKnownToStartUpwind = trackedRace.raceIsKnownToStartUpwind(); - List windSourcesToExclude = new ArrayList(); - for (WindSource windSourceToExclude : trackedRace.getWindSourcesToExclude()) { - windSourcesToExclude.add(windSourceToExclude); - } - result.windSourcesToExclude = windSourcesToExclude; - Map windTrackInfoDTOs = new HashMap(); - result.windTrackInfoByWindSource = windTrackInfoDTOs; - List windSourcesToDeliver = new ArrayList(); - Util.addAll(trackedRace.getWindSources(), windSourcesToDeliver); - windSourcesToDeliver.add(new WindSourceImpl(WindSourceType.COMBINED)); - for (WindSource windSource : windSourcesToDeliver) { - if (windSourceTypeNames == null || windSourceTypeNames.contains(windSource.getType().name())) { - TimePoint fromTimePoint = new MillisecondsTimePoint(from); - WindTrackInfoDTO windTrackInfoDTO = new WindTrackInfoDTO(); - windTrackInfoDTO.windFixes = new ArrayList(); - WindTrack windTrack = trackedRace.getOrCreateWindTrack(windSource); - windTrackInfoDTOs.put(windSource, windTrackInfoDTO); - windTrackInfoDTO.resolutionOutsideOfWhichNoFixWillBeReturned = windTrack - .getResolutionOutsideOfWhichNoFixWillBeReturned(); - windTrackInfoDTO.dampeningIntervalInMilliseconds = windTrack - .getMillisecondsOverWhichToAverageWind(); - TimePoint timePoint = fromTimePoint; - Double minWindConfidence = 2.0; - Double maxWindConfidence = -1.0; - for (int i = 0; i < numberOfFixes; i++) { - WindWithConfidence> averagedWindWithConfidence = windTrack.getAveragedWindWithConfidence(position, timePoint); - if (averagedWindWithConfidence != null) { - WindDTO windDTO = createWindDTOFromAlreadyAveraged(averagedWindWithConfidence.getObject(), timePoint); - double confidence = averagedWindWithConfidence.getConfidence(); - windDTO.confidence = confidence; - windTrackInfoDTO.windFixes.add(windDTO); - if (confidence < minWindConfidence) { - minWindConfidence = confidence; - } - if (confidence > maxWindConfidence) { - maxWindConfidence = confidence; - } - } - timePoint = new MillisecondsTimePoint(timePoint.asMillis() + millisecondsStepWidth); - } - windTrackInfoDTO.minWindConfidence = minWindConfidence; - windTrackInfoDTO.maxWindConfidence = maxWindConfidence; - } - } - } - return result; - } - /** * @param onlyUpToNewestEvent * if true, no wind data will be returned for time points later than @@ -2491,20 +2410,6 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet return result; } - @Override - //READ - public LeaderboardType getLeaderboardType(String leaderboardName) { - final LeaderboardType result; - final Leaderboard leaderboard = getService().getLeaderboards().get(leaderboardName); - if (leaderboard != null) { - getSecurityService().checkCurrentUserReadPermission(leaderboard); - result = leaderboard.getLeaderboardType(); - } else { - result = null; - } - return result; - } - @Override //READ public List getLeaderboardsWithSecurity() { @@ -2546,36 +2451,6 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet return result; } - @Override - //READ - public List getLeaderboardsByRaceAndRegatta(String raceName, RegattaIdentifier regattaIdentifier) { - List results = new ArrayList(); - Map leaderboards = getService().getLeaderboards(); - for (Leaderboard leaderboard : leaderboards.values()) { - if (getSecurityService().hasCurrentUserReadPermission(leaderboard)) { - if (leaderboard instanceof RegattaLeaderboard && ((RegattaLeaderboard) leaderboard).getRegatta() - .getRegattaIdentifier().equals(regattaIdentifier)) { - Iterable races = leaderboard.getRaceColumns(); - for (RaceColumn raceInLeaderboard : races) { - for (Fleet fleet : raceInLeaderboard.getFleets()) { - TrackedRace trackedRace = raceInLeaderboard.getTrackedRace(fleet); - if (getSecurityService().hasCurrentUserReadPermission(trackedRace)) { - if (trackedRace != null) { - RaceDefinition trackedRaceDef = trackedRace.getRace(); - if (trackedRaceDef.getName().equals(raceName)) { - results.add(createStrippedLeaderboardDTO(leaderboard, false, false)); - break; - } - } - } - } - } - } - } - } - return results; - } - /** * Creates a {@link LeaderboardDTO} for leaderboard and fills in the name, race master data * in the form of {@link RaceColumnDTO}s, whether or not there are {@link LeaderboardDTO#hasCarriedPoints carried points} @@ -2699,50 +2574,6 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet return result; } - @Override - //READ - public boolean existsSwissTimingConfigurationForCurrentUser(String jsonUrl) - throws Exception, UnauthorizedException { - boolean found = false; - final String currentUserName = getSecurityService().getCurrentUser().getName(); - for (final SwissTimingConfigurationWithSecurityDTO dto : getPreviousSwissTimingConfigurations()) { - if (dto.getJsonUrl().equals(jsonUrl) && currentUserName.equals(dto.getCreatorName())) { - found = true; - break; - } - } - return found; - } - - @Override - //READ - public boolean existsSwissTimingArchiveConfigurationForCurrentUser(String jsonUrl) - throws Exception, UnauthorizedException { - boolean found = false; - final String currentUserName = getSecurityService().getCurrentUser().getName(); - for (final SwissTimingArchiveConfigurationWithSecurityDTO dto : getPreviousSwissTimingArchiveConfigurations()) { - if (dto.getJsonUrl().equals(jsonUrl) && currentUserName.equals(dto.getCreatorName())) { - found = true; - break; - } - } - return found; - } - - @Override - //READ - public boolean existsTracTracConfigurationForCurrentUser(String jsonUrl) throws Exception, UnauthorizedException { - boolean found = false; - final String currentUserName = getSecurityService().getCurrentUser().getName(); - for (final TracTracConfigurationWithSecurityDTO dto : getPreviousTracTracConfigurations()) { - if (dto.getJsonUrl().equals(jsonUrl) && currentUserName.equals(dto.getCreatorName())) { - found = true; - break; - } - } - return found; - } - @Override //READ public List getPreviousSwissTimingConfigurations() { @@ -2851,19 +2682,6 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet } } - @Override - //READ - public String[] getCountryCodes() { - List countryCodes = new ArrayList(); - for (CountryCode cc : countryCodeFactory.getAll()) { - if (cc.getThreeLetterIOCCode() != null && !cc.getThreeLetterIOCCode().equals("")) { - countryCodes.add(cc.getThreeLetterIOCCode()); - } - } - Collections.sort(countryCodes); - return countryCodes.toArray(new String[0]); - } - /** * Finds a competitor in a sequence of competitors that has an {@link Competitor#getId()} equal to id. */ @@ -4394,14 +4212,13 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet return baseDomainFactory; } - @Override - //READ - public List getRaceStateEntriesForLeaderboard(String leaderboardName, - boolean showOnlyCurrentlyRunningRaces, boolean showOnlyRacesOfSameDay, Duration clientTimeZoneOffset, final List visibleRegattas) - throws NoWindException, InterruptedException, ExecutionException { + private List getRaceStateEntriesForLeaderboard(String leaderboardName, + boolean showOnlyCurrentlyRunningRaces, boolean showOnlyRacesOfSameDay, Duration clientTimeZoneOffset, + final List visibleRegattas) throws NoWindException, InterruptedException, ExecutionException { Leaderboard leaderboard = getService().getLeaderboardByName(leaderboardName); getSecurityService().checkCurrentUserReadPermission(leaderboard); - return getRaceStateEntriesForLeaderboard(leaderboard, showOnlyCurrentlyRunningRaces, showOnlyRacesOfSameDay, clientTimeZoneOffset, visibleRegattas); + return getRaceStateEntriesForLeaderboard(leaderboard, showOnlyCurrentlyRunningRaces, showOnlyRacesOfSameDay, + clientTimeZoneOffset, visibleRegattas); } /** @@ -4782,12 +4599,6 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet } } - //?? - @Override - public Integer getStructureImportOperationProgress() { - return 0; - } - @Override //READ public Iterable getCompetitors(boolean filterCompetitorsWithBoat, @@ -4879,14 +4690,6 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet return configs; } - @Override - //READ - public DeviceConfigurationDTO getDeviceConfiguration(UUID id) { - DeviceConfiguration configuration = getService().getDeviceConfigurationById(id); - getSecurityService().checkCurrentUserReadPermission(configuration); - return configuration == null ? null : convertToDeviceConfigurationDTO(configuration); - } - @Override //READ public void createOrUpdateDeviceConfiguration(DeviceConfigurationDTO configurationDTO) { @@ -4907,20 +4710,6 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet } } - //READ - private DeviceConfigurationDTO convertToDeviceConfigurationDTO(DeviceConfiguration configuration) { - DeviceConfigurationDTO dto = new DeviceConfigurationDTO(); - dto.id = configuration.getId(); - dto.name = configuration.getName(); - dto.allowedCourseAreaNames = configuration.getAllowedCourseAreaNames(); - dto.resultsMailRecipient = configuration.getResultsMailRecipient(); - dto.byNameDesignerCourseNames = configuration.getByNameCourseDesignerCourseNames(); - if (configuration.getRegattaConfiguration() != null) { - dto.regattaConfiguration = convertToRegattaConfigurationDTO(configuration.getRegattaConfiguration()); - } - return dto; - } - //READ private DeviceConfigurationWithSecurityDTO convertToDeviceConfigurationWithSecurityDTO( DeviceConfiguration configuration) { @@ -5132,13 +4921,6 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet result.getB() == null ? null : result.getB().asDate(), result.getC()); } - @Override - //READ - public Iterable getAllIgtimiAccountEmailAddresses() { - return getSecurityService().mapAndFilterByReadPermissionForCurrentUser( - getIgtimiConnectionFactory().getAllAccounts(), acc -> acc.getUser().getEmail()); - } - @Override //READ public Iterable getAllIgtimiAccountsWithSecurity() { @@ -5589,61 +5371,10 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet return result; } - @Override - //READ - public PolarSheetsXYDiagramData createXYDiagramForBoatClass(String boatClassName) { - BoatClass boatClass = getService().getBaseDomainFactory().getOrCreateBoatClass(boatClassName); - Map, List>> regressionSpeedDataLists = new HashMap<>(); - for (LegType legType : new LegType[] { LegType.UPWIND, LegType.DOWNWIND }) { - for (Tack tack : new Tack[] { Tack.PORT, Tack.STARBOARD }) { - regressionSpeedDataLists.put(new Pair(legType, tack), - new ArrayList>()); - } - } - for (double windInKnots = 0.1; windInKnots < 30; windInKnots = windInKnots + 0.1) { - for (LegType legType : new LegType[] { LegType.UPWIND, LegType.DOWNWIND }) { - for (Tack tack : new Tack[] { Tack.PORT, Tack.STARBOARD }) { - try { - SpeedWithBearingWithConfidence averageUpwindStarboardRegression = getService() - .getPolarDataService().getAverageSpeedWithBearing(boatClass, - new KnotSpeedImpl(windInKnots), legType, tack); - - regressionSpeedDataLists.get(new Pair(legType, tack)).add( - new Pair(windInKnots, averageUpwindStarboardRegression.getObject() - .getKnots())); - } catch (NotEnoughDataHasBeenAddedException e) { - // Do not add a point to the result - } - } - } - } - - PolarSheetsXYDiagramData data = new PolarSheetsXYDiagramDataImpl(regressionSpeedDataLists); - - return data; - } - protected Locale getLocale(String localeInfoName) { return ResourceBundleStringMessages.Util.getLocaleFor(localeInfoName); } - @Override - //READ - public ArrayList getLeaderboardGroupsByEventId(UUID id) { - Event event = getService().getEvent(id); - if (event == null) { - throw new RuntimeException("Event not found"); - } - - ArrayList result = new ArrayList<>(); - for (LeaderboardGroup lg : event.getLeaderboardGroups()) { - if (getSecurityService().hasCurrentUserReadPermission(lg)) { - result.add(convertToLeaderboardGroupDTO(lg, /* withGeoLocationData */false, true)); - } - } - return result; - } - /** * Gets all Marks defined in the RegattaLog and the trackedRace * @throws DoesNotHaveRegattaLogException @@ -5916,17 +5647,6 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet return marks; } - @Override - //READ - public MarkTracksDTO getMarkTracks(String leaderboardName, String raceColumnName, String fleetName) { - final List markTracks = new ArrayList<>(); - for (final MarkDTO mark : getMarksInTrackedRace(leaderboardName, raceColumnName, fleetName)) { - MarkTrackDTO markTrackDTO = getMarkTrack(leaderboardName, raceColumnName, fleetName, mark.getIdAsString()); - markTracks.add(markTrackDTO); - } - return new MarkTracksDTO(markTracks); - } - //READ private MarkTrackDTO getMarkTrack(Leaderboard leaderboard, RaceColumn raceColumn, Fleet fleet, String markIdAsString) { @@ -6475,29 +6195,6 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet return imageDTOs; } - @Override - //READ - public List getAllTags(String leaderboardName, String raceColumnName, String fleetName) { - List result = new ArrayList(); - result.addAll(getPublicTags(leaderboardName, raceColumnName, fleetName)); - result.addAll(getPrivateTags(leaderboardName, raceColumnName, fleetName)); - return result; - } - - @Override - //READ - public List getPublicTags(String leaderboardName, String raceColumnName, String fleetName) { - List result = new ArrayList(); - try { - result.addAll(getService().getTaggingService().getPublicTags(leaderboardName, raceColumnName, fleetName, null, false)); - } catch (Exception e) { - logger.log(Level.WARNING, "Problem obtaining public tags for leaderboard "+leaderboardName+", race column "+raceColumnName+ - ", fleet "+fleetName, e); - // do nothing as method will always return at least an empty list - } - return result; - } - @Override //READ public List getPrivateTags(String leaderboardName, String raceColumnName, String fleetName) { @@ -6557,17 +6254,6 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet return result; } - //READ - @Override - public List getPossibleTennants() { - // FIXME this is most likely greatly oversimplified and needs to be improved - ArrayList tenants = new ArrayList<>(); - for (UserGroup group : getSecurityService().getCurrentUser().getUserGroups()) { - tenants.add(group.getName()); - } - return tenants; - } - //READ private Boolean isSelfServiceServer() { final AccessControlListAnnotation serverAclOrNull = getSecurityService().getAccessControlList(getServerInfo().getIdentifier()); @@ -6823,50 +6509,6 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet return result; } - @Override - //READ - public Map getORCCertificateAssignmentsByBoatIdAsString( - RegattaAndRaceIdentifier raceIdentifier) throws NotFoundException { - final TrackedRace trackedRace = getExistingTrackedRace(raceIdentifier); - if (trackedRace == null) { - throw new NotFoundException("Tracked race named "+raceIdentifier+" not found"); - } - getService().getSecurityService().checkCurrentUserReadPermission(trackedRace); - final Map result = new HashMap<>(); - final Map boatsById = new HashMap<>(); - for (final Boat boat : trackedRace.getRace().getBoats()) { - boatsById.put(boat.getId(), boat); - } - for (final RaceLog raceLog : trackedRace.getAttachedRaceLogs()) { - for (final Entry e : new RaceLogORCCertificateAssignmentFinder(raceLog, boatsById).analyze().entrySet()) { - result.put(e.getKey().getId().toString(), e.getValue()); - } - } - return result; - } - - @Override - //READ - public Map getORCCertificateAssignmentsByBoatIdAsString(String leaderboardName) throws NotFoundException { - final Leaderboard leaderboard = getLeaderboardByName(leaderboardName); - if (leaderboard instanceof LeaderboardThatHasRegattaLike) { - getService().getSecurityService().checkCurrentUserReadPermission(leaderboard); - final Map result = new HashMap<>(); - final Map boatsById = new HashMap<>(); - for (final Boat boat : leaderboard.getAllBoats()) { - boatsById.put(boat.getId(), boat); - } - for (final Entry e : new RegattaLogORCCertificateAssignmentFinder( - ((LeaderboardThatHasRegattaLike) leaderboard).getRegattaLike().getRegattaLog(), boatsById).analyze().entrySet()) { - result.put(e.getKey().getId().toString(), e.getValue()); - } - return result; - } else { - throw new IllegalArgumentException("Leaderboard must be of type "+LeaderboardThatHasRegattaLike.class.getSimpleName()+ - ", but leaderboard "+leaderboardName+" is of type "+leaderboard.getClass().getSimpleName()); - } - } - @Override //READ public Map getORCCertificateAssignmentsByBoatIdAsString(String leaderboardName, diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceWriteImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceWriteImpl.java index 68ef7cdc8e8..8ce7a449d9b 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceWriteImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceWriteImpl.java @@ -286,8 +286,6 @@ import com.sap.sailing.server.operationaltransformation.CreateLeaderboardGroup; import com.sap.sailing.server.operationaltransformation.CreateRegattaLeaderboard; import com.sap.sailing.server.operationaltransformation.CreateRegattaLeaderboardWithEliminations; import com.sap.sailing.server.operationaltransformation.DisconnectLeaderboardColumnFromTrackedRace; -import com.sap.sailing.server.operationaltransformation.MoveColumnInSeriesDown; -import com.sap.sailing.server.operationaltransformation.MoveColumnInSeriesUp; import com.sap.sailing.server.operationaltransformation.MoveLeaderboardColumnDown; import com.sap.sailing.server.operationaltransformation.MoveLeaderboardColumnUp; import com.sap.sailing.server.operationaltransformation.RemoveAndUntrackRace; @@ -300,9 +298,7 @@ import com.sap.sailing.server.operationaltransformation.RemoveLeaderboardGroup; import com.sap.sailing.server.operationaltransformation.RemoveRegatta; import com.sap.sailing.server.operationaltransformation.RemoveSeries; import com.sap.sailing.server.operationaltransformation.RenameEvent; -import com.sap.sailing.server.operationaltransformation.RenameLeaderboard; import com.sap.sailing.server.operationaltransformation.RenameLeaderboardColumn; -import com.sap.sailing.server.operationaltransformation.RenameLeaderboardGroup; import com.sap.sailing.server.operationaltransformation.SetRaceIsKnownToStartUpwind; import com.sap.sailing.server.operationaltransformation.SetSuppressedFlagForCompetitorInLeaderboard; import com.sap.sailing.server.operationaltransformation.SetWindSourcesToExclude; @@ -878,14 +874,6 @@ public class SailingServiceWriteImpl extends SailingServiceImpl implements Saili } } - @Override - public void renameLeaderboard(String leaderboardName, String newLeaderboardName) { - SecurityUtils.getSubject().checkPermission( - SecuredDomainType.LEADERBOARD.getStringPermissionForTypeRelativeIdentifier(DefaultActions.UPDATE, - Leaderboard.getTypeRelativeObjectIdentifier(leaderboardName))); - getService().apply(new RenameLeaderboard(leaderboardName, newLeaderboardName)); - } - @Override public void addColumnToLeaderboard(String columnName, String leaderboardName, boolean medalRace) { SecurityUtils.getSubject().checkPermission( @@ -894,13 +882,6 @@ public class SailingServiceWriteImpl extends SailingServiceImpl implements Saili getService().apply(new AddColumnToLeaderboard(columnName, leaderboardName, medalRace)); } - @Override - public void renameLeaderboardGroup(String oldName, String newName) { - final LeaderboardGroup leaderboardGroupByName = getService().getLeaderboardGroupByName(oldName); - getSecurityService().checkCurrentUserUpdatePermission(leaderboardGroupByName); - getService().apply(new RenameLeaderboardGroup(oldName, newName)); - } - @Override public void removeLeaderboardGroups(Set groupNames) { for (String groupName : groupNames) { @@ -935,16 +916,6 @@ public class SailingServiceWriteImpl extends SailingServiceImpl implements Saili } } - @Override - public void removeLeaderboardColumns(String leaderboardName, List columnsToRemove) { - SecurityUtils.getSubject().checkPermission( - SecuredDomainType.LEADERBOARD.getStringPermissionForTypeRelativeIdentifier(DefaultActions.UPDATE, - Leaderboard.getTypeRelativeObjectIdentifier(leaderboardName))); - for (String columnToRemove : columnsToRemove) { - getService().apply(new RemoveLeaderboardColumn(columnToRemove, leaderboardName)); - } - } - @Override public void removeLeaderboardColumn(String leaderboardName, String columnName) { SecurityUtils.getSubject().checkPermission( @@ -1108,16 +1079,11 @@ public class SailingServiceWriteImpl extends SailingServiceImpl implements Saili getService().apply(new UpdateIsMedalRace(leaderboardName, columnName, isMedalRace)); } - @Override - public void updateRaceDelayToLive(RegattaAndRaceIdentifier regattaAndRaceIdentifier, long delayToLiveInMs) { - getSecurityService().checkCurrentUserUpdatePermission(regattaAndRaceIdentifier); - getService().apply(new UpdateRaceDelayToLive(regattaAndRaceIdentifier, delayToLiveInMs)); - } - @Override public void updateRacesDelayToLive(List regattaAndRaceIdentifiers, long delayToLiveInMs) { for (RegattaAndRaceIdentifier regattaAndRaceIdentifier : regattaAndRaceIdentifiers) { - updateRaceDelayToLive(regattaAndRaceIdentifier, delayToLiveInMs); + getSecurityService().checkCurrentUserUpdatePermission(regattaAndRaceIdentifier); + getService().apply(new UpdateRaceDelayToLive(regattaAndRaceIdentifier, delayToLiveInMs)); } } @@ -1477,24 +1443,6 @@ public class SailingServiceWriteImpl extends SailingServiceImpl implements Saili } } - @Override - public void moveRaceColumnInSeriesUp(RegattaIdentifier regattaIdentifier, String seriesName, String columnName) { - Regatta regatta = getService().getRegatta(regattaIdentifier); - if (regatta != null) { - SecurityUtils.getSubject().checkPermission(SecuredDomainType.REGATTA.getStringPermissionForObject(DefaultActions.UPDATE, regatta)); - } - getService().apply(new MoveColumnInSeriesUp(regattaIdentifier, seriesName, columnName)); - } - - @Override - public void moveRaceColumnInSeriesDown(RegattaIdentifier regattaIdentifier, String seriesName, String columnName) { - Regatta regatta = getService().getRegatta(regattaIdentifier); - if (regatta != null) { - SecurityUtils.getSubject().checkPermission(SecuredDomainType.REGATTA.getStringPermissionForObject(DefaultActions.UPDATE, regatta)); - } - getService().apply(new MoveColumnInSeriesDown(regattaIdentifier, seriesName, columnName)); - } - @Override public RegattaDTO createRegatta(String regattaName, String boatClassName, boolean canBoatsOfCompetitorsChangePerRace, CompetitorRegistrationType competitorRegistrationType, String registrationLinkSecret, @@ -1772,56 +1720,6 @@ public class SailingServiceWriteImpl extends SailingServiceImpl implements Saili getService().apply(new AllowBoatResetToDefaults(boatIdsAsStrings)); } - @Override - public boolean linkBoatToCompetitorForRace(String leaderboardName, String raceColumnName, String fleetName, - String competitorIdAsString, String boatIdAsString) throws NotFoundException { - final Leaderboard leaderboard = getLeaderboardByName(leaderboardName); - getSecurityService().checkCurrentUserUpdatePermission(leaderboard); - boolean result = false; - Boat existingBoat = getService().getCompetitorAndBoatStore().getExistingBoatByIdAsString(boatIdAsString); - Competitor existingCompetitor = getService().getCompetitorAndBoatStore().getExistingCompetitorByIdAsString(competitorIdAsString); - RaceLog raceLog = getService().getRaceLog(leaderboardName, raceColumnName, fleetName); - if (raceLog != null && existingCompetitor != null && existingBoat != null) { - raceLog.add(new RaceLogRegisterCompetitorEventImpl(MillisecondsTimePoint.now(), - getService().getServerAuthor(), raceLog.getCurrentPassId(), existingCompetitor, existingBoat)); - result = true; - } - return result; - } - - @Override - public boolean unlinkBoatFromCompetitorForRace(String leaderboardName, String raceColumnName, String fleetName, - String competitorIdAsString) throws NotFoundException { - getSecurityService().checkCurrentUserUpdatePermission(getLeaderboardByName(leaderboardName)); - final boolean result; - final Competitor existingCompetitor = getService().getCompetitorAndBoatStore().getExistingCompetitorByIdAsString(competitorIdAsString); - final RaceLog raceLog = getService().getRaceLog(leaderboardName, raceColumnName, fleetName); - if (raceLog != null && existingCompetitor != null) { - final List linkEventsToRevoke = new ArrayList<>(); - raceLog.lockForRead(); - try { - for (RaceLogEvent event : raceLog.getUnrevokedEventsDescending()) { - if (event instanceof RaceLogRegisterCompetitorEvent) { - linkEventsToRevoke.add((RaceLogRegisterCompetitorEvent) event); - } - } - } finally { - raceLog.unlockAfterRead(); - } - try { - for (RaceLogRegisterCompetitorEvent eventToRevoke : linkEventsToRevoke) { - raceLog.revokeEvent(getService().getServerAuthor(), eventToRevoke, "unlink competitor from boat"); - } - } catch (NotRevokableException e) { - logger.log(Level.WARNING, "Could not unlink competitor from boat by adding RevokeEvent", e); - } - result = true; - } else { - result = false; - } - return result; - } - @Override public DataImportProgress getImportOperationProgress(UUID id) { return getService().getDataImportLock().getProgress(id); @@ -2001,13 +1899,6 @@ public class SailingServiceWriteImpl extends SailingServiceImpl implements Saili getRaceLogTrackingAdapter().removeDenotationForRaceLogTracking(getService(), raceLog); } - @Override - public void denoteForRaceLogTracking(String leaderboardName) throws Exception { - Leaderboard leaderboard = getService().getLeaderboardByName(leaderboardName); - getSecurityService().checkCurrentUserUpdatePermission(leaderboard); - denoteForRaceLogTracking(leaderboardName, /* race name prefix */ null); - } - @Override public void denoteForRaceLogTracking(String leaderboardName, String prefix) throws Exception { Leaderboard leaderboard = getService().getLeaderboardByName(leaderboardName); @@ -2402,14 +2293,6 @@ public class SailingServiceWriteImpl extends SailingServiceImpl implements Saili } } - @Override - public void revokeRaceAndRegattaLogEvents(String leaderboardName, String raceColumnName, String fleetName, - List eventIds) throws NotRevokableException, NotFoundException { - getSecurityService().checkCurrentUserUpdatePermission(getLeaderboardByName(leaderboardName)); - List> logs = getLogHierarchy(leaderboardName, raceColumnName, fleetName); - revokeEventsFromLogs(logs, eventIds); - } - @Override public void revokeRaceAndRegattaLogEvents(String leaderboardName, List eventIds) throws NotRevokableException, DoesNotHaveRegattaLogException, NotFoundException { @@ -2447,8 +2330,7 @@ public class SailingServiceWriteImpl extends SailingServiceImpl implements Saili return eventRevoked; } - @Override - public void startRaceLogTracking(String leaderboardName, String raceColumnName, String fleetName, final boolean trackWind, final boolean correctWindByDeclination) + private void startRaceLogTracking(String leaderboardName, String raceColumnName, String fleetName, final boolean trackWind, final boolean correctWindByDeclination) throws NotDenotedForRaceLogTrackingException, Exception { // no permission checks needed here, since they already exist in PermissionAwareRaceTrackingHandler Leaderboard leaderboard = getLeaderboardByName(leaderboardName); @@ -3394,36 +3276,6 @@ public class SailingServiceWriteImpl extends SailingServiceImpl implements Saili setORCPerformanceCurveInfo(getRaceLog(leaderboardName, raceColumnName, fleetName), legInfo); } - private Triple createCertificateAssignmentsForRace(String regattaName, String raceName, - Map certificatesForBoatIdsAsString) throws IOException, NotFoundException { - final RegattaAndRaceIdentifier raceIdentifier = new RegattaNameAndRaceName(regattaName, raceName); - final TrackedRace trackedRace = getService().getTrackedRace(raceIdentifier); - if (trackedRace == null) { - throw new NotFoundException("Regatta named " + regattaName + " not found"); - } else { - getService().getSecurityService().checkCurrentUserUpdatePermission(trackedRace); - final RaceLog raceLog = trackedRace.getAttachedRaceLogs().iterator().next(); - final LogEventConstructor logEventConstructor = createRaceLogEventConstructor(); - return createCertificateAssignments(raceLog, logEventConstructor, certificatesForBoatIdsAsString); - } - } - - private Triple createCertificateAssignmentsForLeaderboard(String leaderboardName, - Map certificatesForBoatIdsAsString) throws IOException, NotFoundException { - final Leaderboard leaderboard = getService().getLeaderboardByName(leaderboardName); - if (leaderboard == null) { - throw new NotFoundException("Leaderboard named " + leaderboardName + " not found"); - } else if (!(leaderboard instanceof LeaderboardThatHasRegattaLike)) { - throw new NotFoundException("Leaderboard named " + leaderboardName + " has no regatta log"); - } else { - getService().getSecurityService().checkCurrentUserUpdatePermission(leaderboard); - final RegattaLog regattaLog = ((LeaderboardThatHasRegattaLike) leaderboard).getRegattaLike() - .getRegattaLog(); - final LogEventConstructor logEventConstructor = createRegattaLogEventConstructor(); - return createCertificateAssignments(regattaLog, logEventConstructor, certificatesForBoatIdsAsString); - } - } - private Triple createCertificateAssignmentsForRaceLog(String leaderboardName, String raceColumnName, String fleetName, Map certificatesForBoatIdsAsString) throws IOException, NotFoundException { @@ -3462,20 +3314,6 @@ public class SailingServiceWriteImpl extends SailingServiceImpl implements Saili return createCertificateAssignmentsForRegatta(regattaIdentifier, certificatesForBoatsWithIdAsString); } - @Override - public Triple assignORCPerformanceCurveCertificates(String leaderboardName, - Map certificatesForBoatsWithIdAsString) throws IOException, NotFoundException { - return createCertificateAssignmentsForLeaderboard(leaderboardName, certificatesForBoatsWithIdAsString); - } - - @Override - public Triple assignORCPerformanceCurveCertificates( - RegattaAndRaceIdentifier raceIdentifier, Map certificatesForBoatsWithIdAsString) - throws IOException, NotFoundException { - return createCertificateAssignmentsForRace(raceIdentifier.getRegattaName(), raceIdentifier.getRaceName(), - certificatesForBoatsWithIdAsString); - } - @Override public Triple assignORCPerformanceCurveCertificates(String leaderboardName, String raceColumnName, String fleetName, Map certificatesForBoatsWithIdAsString) @@ -3617,5 +3455,43 @@ public class SailingServiceWriteImpl extends SailingServiceImpl implements Saili convertDtoToCommonMarkProperties(markTemplate.getCommonMarkProperties()))); return convertToMarkTemplateDTO(mTemplate); } + + private boolean existsSwissTimingArchiveConfigurationForCurrentUser(String jsonUrl) + throws Exception, UnauthorizedException { + boolean found = false; + final String currentUserName = getSecurityService().getCurrentUser().getName(); + for (final SwissTimingArchiveConfigurationWithSecurityDTO dto : getPreviousSwissTimingArchiveConfigurations()) { + if (dto.getJsonUrl().equals(jsonUrl) && currentUserName.equals(dto.getCreatorName())) { + found = true; + break; + } + } + return found; + } + + private boolean existsTracTracConfigurationForCurrentUser(String jsonUrl) throws Exception, UnauthorizedException { + boolean found = false; + final String currentUserName = getSecurityService().getCurrentUser().getName(); + for (final TracTracConfigurationWithSecurityDTO dto : getPreviousTracTracConfigurations()) { + if (dto.getJsonUrl().equals(jsonUrl) && currentUserName.equals(dto.getCreatorName())) { + found = true; + break; + } + } + return found; + } + + public boolean existsSwissTimingConfigurationForCurrentUser(String jsonUrl) + throws Exception, UnauthorizedException { + boolean found = false; + final String currentUserName = getSecurityService().getCurrentUser().getName(); + for (final SwissTimingConfigurationWithSecurityDTO dto : getPreviousSwissTimingConfigurations()) { + if (dto.getJsonUrl().equals(jsonUrl) && currentUserName.equals(dto.getCreatorName())) { + found = true; + break; + } + } + return found; + } } 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 9afbb8b2ab6..d6d9ff8ecdd 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 @@ -314,16 +314,6 @@ public interface RacingEventService extends TrackedRegattaRegistry, RegattaFetch */ void removeLeaderboardGroup(String groupName); - /** - * Renames the group with the name oldName to the newName.
- * If there's no group with the name oldName or there's already a group with the name - * newName a {@link IllegalArgumentException} is thrown. - * - * @param oldName The old name of the group - * @param newName The new name of the group - */ - void renameLeaderboardGroup(String oldName, String newName); - /** * Updates the group data in the persistant store. */ @@ -736,8 +726,6 @@ public interface RacingEventService extends TrackedRegattaRegistry, RegattaFetch ClassLoader getCombinedMasterDataClassLoader(); - Iterable getCompetitorInOrderOfWindwardDistanceTraveledFarthestFirst(TrackedRace trackedRace, TimePoint timePoint); - /** * Gets the {@link RaceTracker} associated with a given {@link RegattaAndRaceIdentifier}. If the {@link RaceTracker} * is already available, the {@code callback} is invoked immediately. If the {@link RaceTracker} isn't available @@ -847,15 +835,6 @@ public interface RacingEventService extends TrackedRegattaRegistry, RegattaFetch */ Map> getKnownAnniversaries(); - /** - * Provides the number, {@link DetailedRaceInfo race} and {@link AnniversaryType type} information for the latest - * anniversary race. - * - * @return {@link Triple} containing the last anniversary number, {@link DetailedRaceInfo race} and - * {@link AnniversaryType type}, or null if there's no anniversary so far - */ - Triple getLastAnniversary(); - /** * Returns the {@link AnniversaryRaceDeterminator} used by this service. This is needed for replication for * anniversary races only. diff --git a/java/com.sap.sailing.server.interface/src/com/sap/sailing/server/operationaltransformation/MoveColumnInSeriesDown.java b/java/com.sap.sailing.server.interface/src/com/sap/sailing/server/operationaltransformation/MoveColumnInSeriesDown.java deleted file mode 100755 index 58524d9f306..00000000000 --- a/java/com.sap.sailing.server.interface/src/com/sap/sailing/server/operationaltransformation/MoveColumnInSeriesDown.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.sap.sailing.server.operationaltransformation; - -import com.sap.sailing.domain.base.Series; -import com.sap.sailing.domain.common.RegattaIdentifier; -import com.sap.sailing.server.interfaces.RacingEventService; -import com.sap.sailing.server.interfaces.RacingEventServiceOperation; - -public class MoveColumnInSeriesDown extends AbstractColumnInSeriesOperation { - private static final long serialVersionUID = 1055871052852494542L; - - public MoveColumnInSeriesDown(RegattaIdentifier regattaIdentifier, String seriesName, String columnName) { - super(regattaIdentifier, seriesName, columnName); - } - - @Override - public Void internalApplyTo(RacingEventService toState) throws Exception { - Series series = getSeries(toState); - if (series != null) { - series.moveRaceColumnDown(getColumnName()); - if (series.getRegatta().isPersistent()) { - toState.updateStoredRegatta(series.getRegatta()); - } - } - return null; - } - - @Override - public RacingEventServiceOperation transformClientOp(RacingEventServiceOperation serverOp) { - // TODO Auto-generated method stub - return null; - } - - @Override - public RacingEventServiceOperation transformServerOp(RacingEventServiceOperation clientOp) { - // TODO Auto-generated method stub - return null; - } - -} diff --git a/java/com.sap.sailing.server.interface/src/com/sap/sailing/server/operationaltransformation/MoveColumnInSeriesUp.java b/java/com.sap.sailing.server.interface/src/com/sap/sailing/server/operationaltransformation/MoveColumnInSeriesUp.java deleted file mode 100755 index bc6044abcd6..00000000000 --- a/java/com.sap.sailing.server.interface/src/com/sap/sailing/server/operationaltransformation/MoveColumnInSeriesUp.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.sap.sailing.server.operationaltransformation; - -import com.sap.sailing.domain.base.Series; -import com.sap.sailing.domain.common.RegattaIdentifier; -import com.sap.sailing.server.interfaces.RacingEventService; -import com.sap.sailing.server.interfaces.RacingEventServiceOperation; - -public class MoveColumnInSeriesUp extends AbstractColumnInSeriesOperation { - private static final long serialVersionUID = -4111158026632514462L; - - public MoveColumnInSeriesUp(RegattaIdentifier regattaIdentifier, String seriesName, String columnName) { - super(regattaIdentifier, seriesName, columnName); - } - - @Override - public Void internalApplyTo(RacingEventService toState) throws Exception { - Series series = getSeries(toState); - if (series != null) { - series.moveRaceColumnUp(getColumnName()); - if (series.getRegatta().isPersistent()) { - toState.updateStoredRegatta(series.getRegatta()); - } - } - return null; - } - - @Override - public RacingEventServiceOperation transformClientOp(RacingEventServiceOperation serverOp) { - // TODO Auto-generated method stub - return null; - } - - @Override - public RacingEventServiceOperation transformServerOp(RacingEventServiceOperation clientOp) { - // TODO Auto-generated method stub - return null; - } - -} diff --git a/java/com.sap.sailing.server.interface/src/com/sap/sailing/server/operationaltransformation/RenameLeaderboard.java b/java/com.sap.sailing.server.interface/src/com/sap/sailing/server/operationaltransformation/RenameLeaderboard.java deleted file mode 100755 index 5c854b1afd4..00000000000 --- a/java/com.sap.sailing.server.interface/src/com/sap/sailing/server/operationaltransformation/RenameLeaderboard.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.sap.sailing.server.operationaltransformation; - -import com.sap.sailing.server.interfaces.RacingEventService; -import com.sap.sailing.server.interfaces.RacingEventServiceOperation; - -public class RenameLeaderboard extends AbstractLeaderboardOperation { - private static final long serialVersionUID = 8874599127010526971L; - - private final String newLeaderboardName; - - public RenameLeaderboard(String leaderboardName, String newLeaderboardName) { - super(leaderboardName); - this.newLeaderboardName = newLeaderboardName; - } - - @Override - public Void internalApplyTo(RacingEventService toState) { - if (!getLeaderboardName().equals(newLeaderboardName)) { - toState.renameLeaderboard(getLeaderboardName(), newLeaderboardName); - } - return null; - } - - @Override - public RacingEventServiceOperation transformClientOp(RacingEventServiceOperation serverOp) { - // TODO Auto-generated method stub - return null; - } - - @Override - public RacingEventServiceOperation transformServerOp(RacingEventServiceOperation clientOp) { - // TODO Auto-generated method stub - return null; - } - -} diff --git a/java/com.sap.sailing.server.interface/src/com/sap/sailing/server/operationaltransformation/RenameLeaderboardGroup.java b/java/com.sap.sailing.server.interface/src/com/sap/sailing/server/operationaltransformation/RenameLeaderboardGroup.java deleted file mode 100755 index 5adeb74e8c2..00000000000 --- a/java/com.sap.sailing.server.interface/src/com/sap/sailing/server/operationaltransformation/RenameLeaderboardGroup.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.sap.sailing.server.operationaltransformation; - -import com.sap.sailing.server.interfaces.RacingEventService; -import com.sap.sailing.server.interfaces.RacingEventServiceOperation; - -public class RenameLeaderboardGroup extends AbstractLeaderboardGroupOperation { - private static final long serialVersionUID = -5007784579411727148L; - private final String newLeaderboardGroupName; - - public RenameLeaderboardGroup(String leaderboardGroupName, String newLeaderboardGroupName) { - super(leaderboardGroupName); - this.newLeaderboardGroupName = newLeaderboardGroupName; - } - - @Override - public Void internalApplyTo(RacingEventService toState) { - // TODO see bug 729: try to move addLeaderboardGroup implementation here and synthesize and apply this operation there - if (!getLeaderboardGroupName().equals(newLeaderboardGroupName)) { - toState.renameLeaderboardGroup(getLeaderboardGroupName(), newLeaderboardGroupName); - } - return null; - } - - @Override - public RacingEventServiceOperation transformClientOp(RacingEventServiceOperation serverOp) { - // TODO Auto-generated method stub - return null; - } - - @Override - public RacingEventServiceOperation transformServerOp(RacingEventServiceOperation clientOp) { - // TODO Auto-generated method stub - return null; - } - -} diff --git a/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/RaceLogReplicationTest.java b/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/RaceLogReplicationTest.java index 1da9b53ef8f..ba3e5da4ecd 100755 --- a/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/RaceLogReplicationTest.java +++ b/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/RaceLogReplicationTest.java @@ -8,7 +8,6 @@ import java.util.UUID; import org.junit.Assert; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor; @@ -42,7 +41,6 @@ import com.sap.sailing.domain.leaderboard.RegattaLeaderboard; import com.sap.sailing.server.operationaltransformation.AddColumnToLeaderboard; import com.sap.sailing.server.operationaltransformation.AddColumnToSeries; import com.sap.sailing.server.operationaltransformation.CreateRegattaLeaderboard; -import com.sap.sailing.server.operationaltransformation.RenameLeaderboard; import com.sap.sse.common.TimePoint; import com.sap.sse.common.Util; import com.sap.sse.common.impl.AbstractColor; @@ -187,22 +185,6 @@ public class RaceLogReplicationTest extends AbstractLogReplicationTest getCompetitorInOrderOfWindwardDistanceTraveledFarthestFirst(TrackedRace trackedRace, TimePoint timePoint) { - final RankingInfo rankingInfo = trackedRace.getRankingMetric().getRankingInfo(timePoint); - final List result = new ArrayList<>(); - final Map windwardDistanceSailedPerCompetitor = new HashMap<>(); - for (final Competitor competitor : trackedRace.getRace().getCompetitors()) { - result.add(competitor); - final CompetitorRankingInfo competitorRankingInfo = rankingInfo.getCompetitorRankingInfo().apply(competitor); - windwardDistanceSailedPerCompetitor.put(competitor, competitorRankingInfo == null ? null : competitorRankingInfo.getWindwardDistanceSailed()); - } - final Comparator durationComparatorNullsLast = Comparator.nullsLast(Comparator.naturalOrder()); - result.sort((c1, c2) -> durationComparatorNullsLast.compare(windwardDistanceSailedPerCompetitor.get(c2), - windwardDistanceSailedPerCompetitor.get(c1))); - return result; - } - /** * A {@link SimpleRaceLogIdentifier} in particular has a {@link SimpleRaceLogIdentifier#getRegattaLikeParentName()} * which identifies either a regatta by name or a flexible leaderboard by name. Here is why this can luckily be @@ -4740,21 +4720,6 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes return anniversaryRaceDeterminator.getNextAnniversary(); } - @Override - public Triple getLastAnniversary() { - Map> allAnniversaries = anniversaryRaceDeterminator - .getKnownAnniversaries(); - Triple lastAnniversary = null; - if (!allAnniversaries.isEmpty()) { - ArrayList list = new ArrayList<>(allAnniversaries.keySet()); - list.sort(Integer::compare); - Integer anniversary = list.get(list.size() - 1); - Pair info = allAnniversaries.get(anniversary); - lastAnniversary = new Triple<>(anniversary, info.getA(), info.getB()); - } - return lastAnniversary; - } - @Override public int getCurrentRaceCount() { return anniversaryRaceDeterminator.getCurrentRaceCount(); diff --git a/java/com.sap.sse.security.common/src/com/sap/sse/security/shared/BasicUserStore.java b/java/com.sap.sse.security.common/src/com/sap/sse/security/shared/BasicUserStore.java index 55b2d3d681c..b7b2aa878d4 100755 --- a/java/com.sap.sse.security.common/src/com/sap/sse/security/shared/BasicUserStore.java +++ b/java/com.sap.sse.security.common/src/com/sap/sse/security/shared/BasicUserStore.java @@ -65,8 +65,6 @@ public interface BasicUserStore extends UserGroupProvider, Named { void removeRoleFromUser(String username, Role role) throws UserManagementException; - Iterable getPermissionsFromUser(String username) throws UserManagementException; - void removePermissionFromUser(String username, WildcardPermission permission) throws UserManagementException; void addPermissionForUser(String username, WildcardPermission permission) throws UserManagementException; diff --git a/java/com.sap.sse.security.common/src/com/sap/sse/security/shared/dto/OwnershipAnnotationDTO.java b/java/com.sap.sse.security.common/src/com/sap/sse/security/shared/dto/OwnershipAnnotationDTO.java deleted file mode 100644 index 40493a4c112..00000000000 --- a/java/com.sap.sse.security.common/src/com/sap/sse/security/shared/dto/OwnershipAnnotationDTO.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.sap.sse.security.shared.dto; - -import com.sap.sse.security.shared.QualifiedObjectIdentifier; -import com.sap.sse.security.shared.impl.ObjectAnnotationImpl; - -public class OwnershipAnnotationDTO extends ObjectAnnotationImpl { - private static final long serialVersionUID = 7242600656125139931L; - - @Deprecated // gwt only - OwnershipAnnotationDTO() { - super(null, null, null); - } - - public OwnershipAnnotationDTO(OwnershipDTO annotation, QualifiedObjectIdentifier idOfAnnotatedObject, - String displayNameOfAnnotatedObject) { - super(annotation, idOfAnnotatedObject, displayNameOfAnnotatedObject); - } -} diff --git a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/client/UserManagementService.java b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/client/UserManagementService.java index 09f88b28a3e..ae956c523a0 100644 --- a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/client/UserManagementService.java +++ b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/client/UserManagementService.java @@ -19,7 +19,6 @@ import com.sap.sse.security.shared.UserManagementException; import com.sap.sse.security.shared.WildcardPermission; import com.sap.sse.security.shared.dto.AccessControlListAnnotationDTO; import com.sap.sse.security.shared.dto.AccessControlListDTO; -import com.sap.sse.security.shared.dto.OwnershipAnnotationDTO; import com.sap.sse.security.shared.dto.OwnershipDTO; import com.sap.sse.security.shared.dto.RoleDefinitionDTO; import com.sap.sse.security.shared.dto.RolesAndPermissionsForUserDTO; @@ -39,17 +38,6 @@ public interface UserManagementService extends RemoteService { Collection getAccessControlLists() throws UnauthorizedException, org.apache.shiro.authz.UnauthorizedException; - AccessControlListAnnotationDTO getAccessControlList(QualifiedObjectIdentifier idOfAccessControlledObject) - throws org.apache.shiro.authz.UnauthorizedException; - - AccessControlListDTO addToAccessControlList(QualifiedObjectIdentifier idOfAccessControlledObject, - String groupOrTenantIdAsString, String action) - throws UnauthorizedException, org.apache.shiro.authz.UnauthorizedException; - - AccessControlListDTO removeFromAccessControlList(QualifiedObjectIdentifier idOfAccessControlledObject, - String groupOrTenantIdAsString, String action) - throws UnauthorizedException, org.apache.shiro.authz.UnauthorizedException; - Collection getUserGroups() throws org.apache.shiro.authz.UnauthorizedException; UserGroupDTO getUserGroupByName(String userGroupName) @@ -78,8 +66,6 @@ public interface UserManagementService extends RemoteService { Collection getUserList() throws UnauthorizedException, org.apache.shiro.authz.UnauthorizedException; - UserDTO getUserByName(String username) throws UnauthorizedException, org.apache.shiro.authz.UnauthorizedException; - RoleDefinitionDTO createRoleDefinition(String roleDefinitionIdAsString, String name) throws org.apache.shiro.authz.UnauthorizedException; @@ -171,8 +157,6 @@ public interface UserManagementService extends RemoteService { Map getAllPreferences(String username) throws UserManagementException, UnauthorizedException, org.apache.shiro.authz.UnauthorizedException; - String getAccessToken(String username) throws UnauthorizedException, org.apache.shiro.authz.UnauthorizedException; - String getOrCreateAccessToken(String username) throws UnauthorizedException, org.apache.shiro.authz.UnauthorizedException; @@ -185,9 +169,6 @@ public interface UserManagementService extends RemoteService { public Triple verifySocialUser(CredentialDTO credential) throws OAuthException, org.apache.shiro.authz.UnauthorizedException; - OwnershipAnnotationDTO getOwnership(QualifiedObjectIdentifier idOfOwnedObject) - throws org.apache.shiro.authz.UnauthorizedException; - AccessControlListDTO overrideAccessControlList(QualifiedObjectIdentifier idOfAccessControlledObject, AccessControlListDTO acl) throws UnauthorizedException, org.apache.shiro.authz.UnauthorizedException; diff --git a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/client/UserManagementServiceAsync.java b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/client/UserManagementServiceAsync.java index 7db57c926e8..e6ee729aa9c 100644 --- a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/client/UserManagementServiceAsync.java +++ b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/client/UserManagementServiceAsync.java @@ -15,7 +15,6 @@ import com.sap.sse.security.shared.TypeRelativeObjectIdentifier; import com.sap.sse.security.shared.WildcardPermission; import com.sap.sse.security.shared.dto.AccessControlListAnnotationDTO; import com.sap.sse.security.shared.dto.AccessControlListDTO; -import com.sap.sse.security.shared.dto.OwnershipAnnotationDTO; import com.sap.sse.security.shared.dto.OwnershipDTO; import com.sap.sse.security.shared.dto.RoleDefinitionDTO; import com.sap.sse.security.shared.dto.RolesAndPermissionsForUserDTO; @@ -32,24 +31,14 @@ public interface UserManagementServiceAsync { QualifiedObjectIdentifier idOfOwnedObject, String displayNameOfOwnedObject, AsyncCallback callback); - void getOwnership(QualifiedObjectIdentifier idOfOwnedObject, AsyncCallback callback); - void getAccessControlLists(AsyncCallback> callback); - void getAccessControlList(QualifiedObjectIdentifier idOfAccessControlledObject, AsyncCallback callback); - void getAccessControlListWithoutPruning(QualifiedObjectIdentifier idOfAccessControlledObject, AsyncCallback updateAclAsyncCallback); void overrideAccessControlList(QualifiedObjectIdentifier idOfAccessControlledObject, AccessControlListDTO acl, AsyncCallback updateAclAsyncCallback); - void addToAccessControlList(QualifiedObjectIdentifier idOfAccessControlledObject, String permission, String name, - AsyncCallback callback); - - void removeFromAccessControlList(QualifiedObjectIdentifier idOfAccessControlledObject, String permission, - String name, AsyncCallback callback); - /** * Returns those user groups the requesting user can read */ @@ -78,8 +67,6 @@ public interface UserManagementServiceAsync { */ void getUserList(AsyncCallback> callback); - void getUserByName(String username, AsyncCallback callback); - /** * Returns true if a user associated to the given username even if the current user cannot see the existing user. */ @@ -139,15 +126,9 @@ public interface UserManagementServiceAsync { void getAllPreferences(String username, final AsyncCallback> callback); /** - * Obtains an access token for the user specified by {@code username}. The caller needs to - * have role {@link DefaultRoles#ADMIN} or be authorized as the user identified by {@code username} - * in order to be permitted to retrieve the access token. - */ - void getAccessToken(String username, AsyncCallback markedAsyncCallback); - - /** - * Like {@link #getAccessToken(String, AsyncCallback)}, only that instead of returning {@code null} a - * new access token will be created and returned. + * * Obtains an access token for the user specified by {@code username}. The caller needs to have role + * {@link DefaultRoles#ADMIN} or be authorized as the user identified by {@code username} in order to be permitted + * to retrieve the access token, a new access token will be created and returned. */ void getOrCreateAccessToken(String username, AsyncCallback callback); diff --git a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/server/SecurityDTOFactory.java b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/server/SecurityDTOFactory.java index 72a99351cab..063b9f8356e 100755 --- a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/server/SecurityDTOFactory.java +++ b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/server/SecurityDTOFactory.java @@ -18,7 +18,6 @@ import com.sap.sse.security.interfaces.Social; import com.sap.sse.security.shared.AccessControlListAnnotation; import com.sap.sse.security.shared.Account; import com.sap.sse.security.shared.Account.AccountType; -import com.sap.sse.security.shared.OwnershipAnnotation; import com.sap.sse.security.shared.QualifiedObjectIdentifier; import com.sap.sse.security.shared.RoleDefinition; import com.sap.sse.security.shared.SecurityUser; @@ -28,7 +27,6 @@ import com.sap.sse.security.shared.WildcardPermission; import com.sap.sse.security.shared.dto.AccessControlListAnnotationDTO; import com.sap.sse.security.shared.dto.AccessControlListDTO; import com.sap.sse.security.shared.dto.AccountDTO; -import com.sap.sse.security.shared.dto.OwnershipAnnotationDTO; import com.sap.sse.security.shared.dto.OwnershipDTO; import com.sap.sse.security.shared.dto.RoleDefinitionDTO; import com.sap.sse.security.shared.dto.RoleWithSecurityDTO; @@ -375,12 +373,6 @@ public class SecurityDTOFactory { return new Ownership(ownerUser, ownerGroup); } - public OwnershipAnnotationDTO createOwnerShipAnnotationDTO(OwnershipAnnotation annotation) { - OwnershipDTO ownerShipDTO = createOwnershipDTO(annotation.getAnnotation(), new HashMap<>(), new HashMap<>()); - return new OwnershipAnnotationDTO(ownerShipDTO, annotation.getIdOfAnnotatedObject(), - annotation.getDisplayNameOfAnnotatedObject()); - } - public Set createStrippedUsersFromUsers(Iterable users, SecurityService securityService, Map fromOriginalToStrippedDownUser, Map fromOriginalToStrippedDownUserGroup) { diff --git a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/server/UserManagementServiceImpl.java b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/server/UserManagementServiceImpl.java index 5ca00c7830d..93d88b06156 100644 --- a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/server/UserManagementServiceImpl.java +++ b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/server/UserManagementServiceImpl.java @@ -38,7 +38,6 @@ import com.sap.sse.security.interfaces.Credential; import com.sap.sse.security.shared.AccessControlListAnnotation; import com.sap.sse.security.shared.HasPermissions; import com.sap.sse.security.shared.HasPermissions.DefaultActions; -import com.sap.sse.security.shared.OwnershipAnnotation; import com.sap.sse.security.shared.QualifiedObjectIdentifier; import com.sap.sse.security.shared.RoleDefinition; import com.sap.sse.security.shared.TypeRelativeObjectIdentifier; @@ -48,7 +47,6 @@ import com.sap.sse.security.shared.UserManagementException; import com.sap.sse.security.shared.WildcardPermission; import com.sap.sse.security.shared.dto.AccessControlListAnnotationDTO; import com.sap.sse.security.shared.dto.AccessControlListDTO; -import com.sap.sse.security.shared.dto.OwnershipAnnotationDTO; import com.sap.sse.security.shared.dto.OwnershipDTO; import com.sap.sse.security.shared.dto.RoleDefinitionDTO; import com.sap.sse.security.shared.dto.RolesAndPermissionsForUserDTO; @@ -214,12 +212,6 @@ public class UserManagementServiceImpl extends RemoteServiceServlet implements U return securityDTOFactory.createOwnershipDTO(result, new HashMap<>(), new HashMap<>()); } - @Override - public OwnershipAnnotationDTO getOwnership(QualifiedObjectIdentifier idOfOwnedObject) { - OwnershipAnnotation annotation = getSecurityService().getOwnership(idOfOwnedObject); - return securityDTOFactory.createOwnerShipAnnotationDTO(annotation); - } - @Override public Collection getAccessControlLists() throws UnauthorizedException { // TODO decide whether a global getAccessControlList functionality is needed @@ -233,45 +225,6 @@ public class UserManagementServiceImpl extends RemoteServiceServlet implements U return acls; } - @Override - public AccessControlListAnnotationDTO getAccessControlList(QualifiedObjectIdentifier idOfAccessControlledObject) { - // skip permission check for ACL linked to null object since it is public anyway - if (idOfAccessControlledObject != null) { - SecurityUtils.getSubject() - .checkPermission(idOfAccessControlledObject.getStringPermission(DefaultActions.CHANGE_ACL)); - } - return securityDTOFactory.createAccessControlListAnnotationDTO(getSecurityService().getAccessControlList(idOfAccessControlledObject)); - } - - @Override - public AccessControlListDTO addToAccessControlList(QualifiedObjectIdentifier idOfAccessControlledObject, - String groupIdAsString, String action) throws UnauthorizedException { - if (SecurityUtils.getSubject() - .isPermitted(idOfAccessControlledObject.getStringPermission(DefaultActions.CHANGE_ACL))) { - UserGroup userGroup = getUserGroup(groupIdAsString); - return securityDTOFactory.createAccessControlListDTO(getSecurityService().addToAccessControlList(idOfAccessControlledObject, userGroup, action)); - } else { - throw new UnauthorizedException("Not permitted to grant permission for user"); - } - } - - private UserGroup getUserGroup(String groupIdAsString) { - UUID groupId = UUID.fromString(groupIdAsString); - return getSecurityService().getUserGroup(groupId); - } - - @Override - public AccessControlListDTO removeFromAccessControlList(QualifiedObjectIdentifier idOfAccessControlledObject, - String groupOrTenantIdAsString, String permission) throws UnauthorizedException { - // FIXME replace permission check with a valid one - if (SecurityUtils.getSubject().isPermitted("tenant:revoke_permission:" + groupOrTenantIdAsString)) { - UserGroup userGroup = getUserGroup(groupOrTenantIdAsString); - return securityDTOFactory.createAccessControlListDTO(getSecurityService().removeFromAccessControlList(idOfAccessControlledObject, userGroup, permission)); - } else { - throw new UnauthorizedException("Not permitted to revoke permission for user"); - } - } - @Override public Collection getUserGroups() { Map fromOriginalToStrippedDownUser = new HashMap<>(); @@ -308,8 +261,7 @@ public class UserManagementServiceImpl extends RemoteServiceServlet implements U } } - @Override - public UserDTO getUserByName(String username) throws UnauthorizedException { + private UserDTO getUserByName(String username) throws UnauthorizedException { final User user = getSecurityService().getUserByName(username); if (user == null || SecurityUtils.getSubject() @@ -782,12 +734,6 @@ public class UserManagementServiceImpl extends RemoteServiceServlet implements U return result; } - @Override - public String getAccessToken(String username) throws UnauthorizedException { - getSecurityService().checkCurrentUserReadPermission(getUserByName(username)); - return getSecurityService().getAccessToken(username); - } - @Override public String getOrCreateAccessToken(String username) throws UnauthorizedException { getSecurityService().checkCurrentUserUpdatePermission(getUserByName(username)); diff --git a/java/com.sap.sse.security.userstore.mongodb/src/com/sap/sse/security/userstore/mongodb/UserStoreImpl.java b/java/com.sap.sse.security.userstore.mongodb/src/com/sap/sse/security/userstore/mongodb/UserStoreImpl.java index a64472623fc..2a8475f2509 100644 --- a/java/com.sap.sse.security.userstore.mongodb/src/com/sap/sse/security/userstore/mongodb/UserStoreImpl.java +++ b/java/com.sap.sse.security.userstore.mongodb/src/com/sap/sse/security/userstore/mongodb/UserStoreImpl.java @@ -859,14 +859,6 @@ public class UserStoreImpl implements UserStore { } } - @Override - public Iterable getPermissionsFromUser(String username) throws UserManagementException { - if (users.get(username) == null) { - throw new UserManagementException(UserManagementException.USER_DOES_NOT_EXIST); - } - return users.get(username).getPermissions(); - } - @Override public void addPermissionForUser(String username, WildcardPermission permission) throws UserManagementException { final User user = users.get(username); diff --git a/java/com.sap.sse.security/src/com/sap/sse/security/SecurityService.java b/java/com.sap.sse.security/src/com/sap/sse/security/SecurityService.java index d37cf25182d..be8590df56a 100644 --- a/java/com.sap.sse.security/src/com/sap/sse/security/SecurityService.java +++ b/java/com.sap.sse.security/src/com/sap/sse/security/SecurityService.java @@ -33,7 +33,6 @@ import com.sap.sse.security.shared.PermissionChecker; import com.sap.sse.security.shared.QualifiedObjectIdentifier; import com.sap.sse.security.shared.RoleDefinition; import com.sap.sse.security.shared.RolePrototype; -import com.sap.sse.security.shared.SocialUserAccount; import com.sap.sse.security.shared.TypeRelativeObjectIdentifier; import com.sap.sse.security.shared.UserGroupManagementException; import com.sap.sse.security.shared.UserManagementException; @@ -73,8 +72,6 @@ public interface SecurityService extends ReplicableWithObjectInputStream getAccessControlLists(); AccessControlListAnnotation getAccessControlList(QualifiedObjectIdentifier idOfAccessControlledObject); @@ -179,9 +176,6 @@ public interface SecurityService extends ReplicableWithObjectInputStream getPermissionsFromUser(String username) throws UserManagementException; - void removePermissionFromUser(String username, WildcardPermission permissionToRemove); void addPermissionForUser(String username, WildcardPermission permissionToAdd); @@ -246,8 +238,6 @@ public interface SecurityService extends ReplicableWithObjectInputStream T getSetting(String key, Class clazz); - Map getAllSettings(); Map> getAllSettingTypes(); @@ -340,8 +330,6 @@ public interface SecurityService extends ReplicableWithObjectInputStream objectsToFilter, Consumer filteredObjectsConsumer); - void filterObjectsWithPermissionForCurrentUser( - com.sap.sse.security.shared.HasPermissions.Action[] actions, Iterable objectsToFilter, - Consumer filteredObjectsConsumer); - /** * Filters objects with any of the given permissions for the current user. */ @@ -413,10 +397,6 @@ public interface SecurityService extends ReplicableWithObjectInputStream List mapAndFilterByReadPermissionForCurrentUser( Iterable objectsToFilter, Function filteredObjectsMapper); - List mapAndFilterByExplicitPermissionForCurrentUser( - HasPermissions.Action[] actions, Iterable objectsToFilter, - Function filteredObjectsMapper); - /** * Maps and filters by any of the given permissions for the current user. */ @@ -542,9 +522,6 @@ public interface SecurityService extends ReplicableWithObjectInputStream allInstances); - boolean hasCurrentUserRoleForOwnedObject(HasPermissions type, T object, - RoleDefinition roleToCheck); - boolean hasCurrentUserMetaPermission(WildcardPermission permissionToCheck, Ownership ownership); boolean hasCurrentUserMetaPermissionWithOwnershipLookup(WildcardPermission permissionToCheck); diff --git a/java/com.sap.sse.security/src/com/sap/sse/security/impl/SecurityServiceImpl.java b/java/com.sap.sse.security/src/com/sap/sse/security/impl/SecurityServiceImpl.java index 3a671ef1ebc..6ecc651af16 100755 --- a/java/com.sap.sse.security/src/com/sap/sse/security/impl/SecurityServiceImpl.java +++ b/java/com.sap.sse.security/src/com/sap/sse/security/impl/SecurityServiceImpl.java @@ -91,7 +91,6 @@ import com.sap.sse.replication.OperationsToMasterSendingQueue; import com.sap.sse.replication.ReplicationMasterDescriptor; import com.sap.sse.replication.ReplicationService; import com.sap.sse.security.Action; -import com.sap.sse.security.BearerAuthenticationToken; import com.sap.sse.security.ClientUtils; import com.sap.sse.security.GithubApi; import com.sap.sse.security.InstagramApi; @@ -103,7 +102,6 @@ import com.sap.sse.security.SessionUtils; import com.sap.sse.security.interfaces.AccessControlStore; import com.sap.sse.security.interfaces.Credential; import com.sap.sse.security.interfaces.OAuthToken; -import com.sap.sse.security.interfaces.Social; import com.sap.sse.security.interfaces.SocialSettingsKeys; import com.sap.sse.security.interfaces.UserImpl; import com.sap.sse.security.interfaces.UserStore; @@ -156,7 +154,6 @@ import com.sap.sse.security.shared.QualifiedObjectIdentifier; import com.sap.sse.security.shared.RoleDefinition; import com.sap.sse.security.shared.RolePrototype; import com.sap.sse.security.shared.SecurityAccessControlList; -import com.sap.sse.security.shared.SocialUserAccount; import com.sap.sse.security.shared.TypeRelativeObjectIdentifier; import com.sap.sse.security.shared.UserGroupManagementException; import com.sap.sse.security.shared.UserManagementException; @@ -500,12 +497,6 @@ public class SecurityServiceImpl implements ReplicableSecurityService, ClearStat public OwnershipAnnotation getOwnership(QualifiedObjectIdentifier idOfOwnedObjectAsString) { return accessControlStore.getOwnership(idOfOwnedObjectAsString); } - - @Override - public OwnershipAnnotation createDefaultOwnershipForNewObject(QualifiedObjectIdentifier idOfNewObject) { - return new OwnershipAnnotation(new Ownership(getCurrentUser(), getDefaultTenantForCurrentUser()), - idOfNewObject, /* display name */ idOfNewObject.toString()); - } public UserGroup getDefaultTenantForUser(User user) { UserGroup specificTenant = temporaryDefaultTenant.get(); @@ -860,21 +851,6 @@ public class SecurityServiceImpl implements ReplicableSecurityService, ClearStat return redirectUrl; } - @Override - public User loginByAccessToken(String accessToken) { - BearerAuthenticationToken token = new BearerAuthenticationToken(accessToken); - logger.info("Trying to login with access token"); - Subject subject = SecurityUtils.getSubject(); - try { - subject.login(token); - final String username = (String) token.getPrincipal(); - return store.getUserByName(username); - } catch (AuthenticationException e) { - logger.log(Level.INFO, "Authentication failed with access token "+accessToken); - throw e; - } - } - @Override public void logout() { Subject subject = SecurityUtils.getSubject(); @@ -1232,11 +1208,6 @@ public class SecurityServiceImpl implements ReplicableSecurityService, ClearStat return null; } - @Override - public Iterable getPermissionsFromUser(String username) throws UserManagementException { - return store.getPermissionsFromUser(username); - } - @Override public void removePermissionFromUser(String username, WildcardPermission permissionToRemove) { apply(new RemovePermissionForUserOperation(username, permissionToRemove)); @@ -1312,11 +1283,6 @@ public class SecurityServiceImpl implements ReplicableSecurityService, ClearStat return store.setSetting(key, setting); } - @Override - public T getSetting(String key, Class clazz) { - return store.getSetting(key, clazz); - } - @Override public Map getAllSettings() { return store.getAllSettings(); @@ -1327,20 +1293,6 @@ public class SecurityServiceImpl implements ReplicableSecurityService, ClearStat return store.getAllSettingTypes(); } - @Override - public User createSocialUser(String name, SocialUserAccount socialUserAccount) - throws UserManagementException, UserGroupManagementException { - if (store.getUserByName(name) != null) { - throw new UserManagementException(UserManagementException.USER_ALREADY_EXISTS); - } - User result = store.createUser(name, socialUserAccount.getProperty(Social.EMAIL.name()), - socialUserAccount); - UserGroup tenant = getOrCreateTenantForUser(result); - accessControlStore.setOwnership(tenant.getIdentifier(), result, tenant, tenant.getName()); - addUserToUserGroup(tenant, result); - return result; - } - @Override public User verifySocialUser(Credential credential) throws UserManagementException { OAuthToken otoken = new OAuthToken(credential, credential.getVerifier()); @@ -1945,22 +1897,6 @@ public class SecurityServiceImpl implements ReplicableSecurityService, ClearStat }); } - @Override - public void filterObjectsWithPermissionForCurrentUser( - HasPermissions.Action[] actions, Iterable objectsToFilter, - Consumer filteredObjectsConsumer) { - objectsToFilter.forEach(objectToCheck -> { - boolean isPermitted = actions.length > 0; - for (int i = 0; i < actions.length; i++) { - isPermitted &= SecurityUtils.getSubject().isPermitted( - objectToCheck.getIdentifier().getStringPermission(actions[i])); - } - if (isPermitted) { - filteredObjectsConsumer.accept(objectToCheck); - } - }); - } - /** Filters the objects with any of the given permissions for the current user */ @Override public void filterObjectsWithAnyPermissionForCurrentUser( @@ -1990,16 +1926,6 @@ public class SecurityServiceImpl implements ReplicableSecurityService, ClearStat return result; } - @Override - public List mapAndFilterByExplicitPermissionForCurrentUser( - HasPermissions.Action[] actions, Iterable objectsToFilter, - Function filteredObjectsMapper) { - final List result = new ArrayList<>(); - filterObjectsWithPermissionForCurrentUser(actions, objectsToFilter, - filteredObject -> result.add(filteredObjectsMapper.apply(filteredObject))); - return result; - } - @Override public List mapAndFilterByAnyExplicitPermissionForCurrentUser( HasPermissions permittedObject, HasPermissions.Action[] actions, Iterable objectsToFilter, @@ -2015,17 +1941,6 @@ public class SecurityServiceImpl implements ReplicableSecurityService, ClearStat return store.getUserByName(SecurityService.ALL_USERNAME); } - @Override - public boolean hasCurrentUserRoleForOwnedObject(HasPermissions type, T object, - RoleDefinition roleToCheck) { - assert type != null; - assert object != null; - assert roleToCheck != null; - OwnershipAnnotation ownershipToCheck = getOwnership(object.getIdentifier()); - return PermissionChecker.ownsUserASpecificRole(getCurrentUser(), getAllUser(), - ownershipToCheck == null ? null : ownershipToCheck.getAnnotation(), roleToCheck.getName()); - } - @Override public boolean hasCurrentUserMetaPermission(WildcardPermission permissionToCheck, Ownership ownership) { if (hasPermissionsProvider == null) { From b7f2c289750274445b2ec04c4b7984befd699ccb Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Thu, 14 May 2020 22:10:12 +0200 Subject: [PATCH 2/4] bug4964: removed unused PolarSheetsXYDiagramData --- .../domain/common/PolarSheetsXYDiagramData.java | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100644 java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/PolarSheetsXYDiagramData.java diff --git a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/PolarSheetsXYDiagramData.java b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/PolarSheetsXYDiagramData.java deleted file mode 100644 index cc0513be00b..00000000000 --- a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/PolarSheetsXYDiagramData.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.sap.sailing.domain.common; - -import java.io.Serializable; -import java.util.List; - -import com.sap.sse.common.Util.Pair; - -public interface PolarSheetsXYDiagramData extends Serializable { - - List> getPointsForAverageSpeedRegression(Tack tack, LegType legType); - -} From 33fa19dfa2ca05c482903829557ec6a580aa3dbb Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Thu, 14 May 2020 22:18:11 +0200 Subject: [PATCH 3/4] bug4964: salvaged comment of RacingEventService.renameLeaderboardGroup --- .../sap/sailing/server/impl/RacingEventServiceImpl.java | 8 ++++++++ 1 file changed, 8 insertions(+) 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 6ac8146031c..1460acce96f 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 @@ -3105,6 +3105,14 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes mongoObjectFactory.removeLeaderboardGroup(groupName); } + /** + * Renames the group with the name oldName to the newName.
+ * If there's no group with the name oldName or there's already a group with the name + * newName a {@link IllegalArgumentException} is thrown. + * + * @param oldName The old name of the group + * @param newName The new name of the group + */ private void renameLeaderboardGroup(String oldName, String newName) { LockUtil.lockForWrite(leaderboardGroupsByNameLock); try { From bbbcb31dc975bd1e1b3542815902a0015b27a589 Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Thu, 14 May 2020 23:11:49 +0200 Subject: [PATCH 4/4] bug4964: migrated GWT APIs from Iterable to List to make serialization code more efficient --- .../common/dto/PairingListTemplateDTO.java | 13 +++++-- .../ui/test/GwtTestCaseColumnToggling.java | 4 +- .../ui/adminconsole/EventListComposite.java | 2 +- .../adminconsole/LeaderboardDescriptor.java | 2 +- .../StructureImportManagementPanel.java | 2 +- .../TracTracEventManagementPanel.java | 3 +- .../WindSourcesToExcludeSelectorPanel.java | 6 ++- .../gwt/ui/client/SailingServiceWrite.java | 36 +++++++++--------- .../ui/client/SailingServiceWriteAsync.java | 36 +++++++++--------- .../ui/server/SailingServiceWriteImpl.java | 38 +++++++++---------- .../sap/sailing/gwt/ui/shared/EventDTO.java | 8 ++-- .../UpdateLeaderboard.java | 7 +++- .../test/RaceLogReplicationTest.java | 26 ++++++++++++- 13 files changed, 107 insertions(+), 76 deletions(-) diff --git a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/dto/PairingListTemplateDTO.java b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/dto/PairingListTemplateDTO.java index 1e1d46cd10e..b5ae22df4b2 100644 --- a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/dto/PairingListTemplateDTO.java +++ b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/dto/PairingListTemplateDTO.java @@ -1,6 +1,10 @@ package com.sap.sailing.domain.common.dto; import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +import com.sap.sse.common.Util; public class PairingListTemplateDTO implements Serializable { @@ -15,7 +19,7 @@ public class PairingListTemplateDTO implements Serializable { private int[][] pairingListTemplate; private double quality; private double boatAssignmentQuality; - private Iterable selectedFlightNames; + private List selectedFlightNames; public PairingListTemplateDTO() { } @@ -50,7 +54,8 @@ public class PairingListTemplateDTO implements Serializable { this.boatAssignmentQuality = boatAssigmentQuality; this.quality = quality; this.pairingListTemplate = pairingListTemplate; - this.selectedFlightNames = selectedFlightNames; + this.selectedFlightNames = new ArrayList<>(); + Util.addAll(selectedFlightNames, this.selectedFlightNames); } public void setFlightCount(int flightCount) { @@ -69,7 +74,7 @@ public class PairingListTemplateDTO implements Serializable { this.boatChangeFactor = tolerance; } - public void setSelectedFlightNames(Iterable selectedFlightNames) { + public void setSelectedFlightNames(List selectedFlightNames) { this.selectedFlightNames = selectedFlightNames; } @@ -109,7 +114,7 @@ public class PairingListTemplateDTO implements Serializable { return boatChangeFactor; } - public Iterable getSelectedFlightNames() { + public List getSelectedFlightNames() { return selectedFlightNames; } diff --git a/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/GwtTestCaseColumnToggling.java b/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/GwtTestCaseColumnToggling.java index 04701fd6423..dbc9bdcef2b 100644 --- a/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/GwtTestCaseColumnToggling.java +++ b/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/GwtTestCaseColumnToggling.java @@ -2,9 +2,7 @@ package com.sap.sailing.gwt.ui.test; import java.util.ArrayList; import java.util.Date; -import java.util.HashSet; import java.util.List; -import java.util.Set; import org.junit.Test; @@ -87,7 +85,7 @@ public class GwtTestCaseColumnToggling extends GWTTestCase { } private void trackRace(){ - final Set rrDAOs = new HashSet(); + final List rrDAOs = new ArrayList(); rrDAOs.add(rrDao); service.trackWithTracTrac(/* regattaToAddTo */null, rrDAOs, tractracTunnel ? "tcp://" + tractracTunnelHost + ":" + TracTracConnectionConstants.PORT_TUNNEL_LIVE : "tcp://" + TracTracConnectionConstants.HOST_NAME + ":" diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/EventListComposite.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/EventListComposite.java index 684f89cb344..95a5ebc37f1 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/EventListComposite.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/EventListComposite.java @@ -645,7 +645,7 @@ public class EventListComposite extends Composite implements EventsRefresher, Le Pair, List> courseAreasToAddAndRemove = getCourseAreasToAdd(oldEvent, updatedEvent); final List courseAreasToAdd = courseAreasToAddAndRemove.getA(); final List courseAreasToRemove = courseAreasToAddAndRemove.getB(); - final Iterable updatedEventLeaderboardGroupIds = updatedEvent.getLeaderboardGroupIds(); + final List updatedEventLeaderboardGroupIds = updatedEvent.getLeaderboardGroupIds(); sailingServiceWrite.updateEvent(oldEvent.id, oldEvent.getName(), updatedEvent.getDescription(), updatedEvent.startDate, updatedEvent.endDate, updatedEvent.venue, updatedEvent.isPublic, updatedEventLeaderboardGroupIds, diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/LeaderboardDescriptor.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/LeaderboardDescriptor.java index 5eea1d1b060..f96e8b474ad 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/LeaderboardDescriptor.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/LeaderboardDescriptor.java @@ -90,7 +90,7 @@ public class LeaderboardDescriptor { this.displayName = displayName; } - public Iterable getCourseAreaIds() { + public List getCourseAreaIds() { return courseAreaIds; } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/StructureImportManagementPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/StructureImportManagementPanel.java index 1d4bd20617f..3f936e5c3c0 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/StructureImportManagementPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/StructureImportManagementPanel.java @@ -454,7 +454,7 @@ public class StructureImportManagementPanel extends SimplePanel implements Regat private void createRegattas(final Iterable selectedOriginalRegattasFromXRR, EventDTO newEvent) { eventManagementPanel.fillEvents(); - final Set regattaConfigurationsToCreate = new HashSet<>(); + final List regattaConfigurationsToCreate = new ArrayList<>(); for (RegattaDTO originalRegattaFromXRR : selectedOriginalRegattasFromXRR) { RegattaDTO cloneFromDefaults = new RegattaDTO(regattaDefaultsPerStructure.get(regattaStructures.get(originalRegattaFromXRR))); cloneFromDefaults.setName(originalRegattaFromXRR.getName()); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/TracTracEventManagementPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/TracTracEventManagementPanel.java index b9965f8626c..2ca5f657e1c 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/TracTracEventManagementPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/TracTracEventManagementPanel.java @@ -2,7 +2,6 @@ package com.sap.sailing.gwt.ui.adminconsole; import java.util.ArrayList; import java.util.Comparator; -import java.util.LinkedHashSet; import java.util.List; import java.util.Set; @@ -523,7 +522,7 @@ public class TracTracEventManagementPanel extends AbstractEventManagementPanel { // because it may be an accidental omission to select that regatta for loading List allRaces = raceList.getList(); SelectionModel selectionModel = racesTable.getSelectionModel(); - final Set selectedRaces = new LinkedHashSet<>(); + final List selectedRaces = new ArrayList<>(); for (TracTracRaceRecordDTO race : allRaces) { if (selectionModel.isSelected(race)) { selectedRaces.add(race); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/WindSourcesToExcludeSelectorPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/WindSourcesToExcludeSelectorPanel.java index 8ea50d663f3..425081a0e7b 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/WindSourcesToExcludeSelectorPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/WindSourcesToExcludeSelectorPanel.java @@ -1,7 +1,9 @@ package com.sap.sailing.gwt.ui.adminconsole; +import java.util.ArrayList; import java.util.HashSet; import java.util.LinkedHashMap; +import java.util.List; import java.util.Map; import java.util.Set; @@ -87,8 +89,8 @@ public class WindSourcesToExcludeSelectorPanel extends VerticalPanel implements }); } - private Iterable getWindSourcesToExclude() { - Set result = new HashSet(); + private List getWindSourcesToExclude() { + List result = new ArrayList(); for (Map.Entry e : checkboxesByWindSource.entrySet()) { if (!e.getValue().getValue()) { result.add(e.getKey()); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceWrite.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceWrite.java index e6b6a21d746..1c11e76507a 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceWrite.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceWrite.java @@ -204,7 +204,7 @@ public interface SailingServiceWrite extends FileStorageManagementGwtService, Sa throws DoesNotHaveRegattaLogException, NotFoundException; void fillRaceLogsFromPairingListTemplate(final String leaderboardName, final int flightMultiplier, - final Iterable selectedFlightNames, final PairingListDTO pairingListDTO) + final List selectedFlightNames, final PairingListDTO pairingListDTO) throws NotFoundException, CompetitorRegistrationOnRaceLogDisabledException; void setBoatRegistrationsInRegattaLog(String leaderboardName, Set boatDTOs) @@ -240,7 +240,7 @@ public interface SailingServiceWrite extends FileStorageManagementGwtService, Sa DataImportProgress getImportOperationProgress(UUID id) throws UnauthorizedException; - void allowCompetitorResetToDefaults(Iterable competitors); + void allowCompetitorResetToDefaults(List competitors); UUID importMasterData(String host, String[] groupNames, boolean override, boolean compress, boolean exportWind, boolean exportDeviceConfigurations, String targetServerUsername, String targetServerPassword, @@ -249,7 +249,7 @@ public interface SailingServiceWrite extends FileStorageManagementGwtService, Sa RegattaDTO createRegatta(String regattaName, String boatClassName, boolean canBoatsOfCompetitorsChangePerRace, CompetitorRegistrationType competitorRegistrationType, String registrationLinkSecret, Date startDate, Date endDate, RegattaCreationParametersDTO seriesNamesWithFleetNamesAndFleetOrderingAndMedal, - boolean persistent, ScoringSchemeType scoringSchemeType, Iterable courseAreaIds, + boolean persistent, ScoringSchemeType scoringSchemeType, List courseAreaIds, Double buoyZoneRadiusInHullLengths, boolean useStartTimeInference, boolean controlTrackingFromStartAndFinishTimes, boolean autoRestartTrackingUponCompetitorSetChange, RankingMetrics rankingMetricType) throws UnauthorizedException; @@ -262,7 +262,7 @@ public interface SailingServiceWrite extends FileStorageManagementGwtService, Sa boolean firstRaceIsNonDiscardableCarryForward, boolean hasSplitFleetScore, Integer maximumNumberOfDiscards, List fleets) throws UnauthorizedException; - void updateRegatta(RegattaIdentifier regattaIdentifier, Date startDate, Date endDate, Iterable courseAreaUuids, + void updateRegatta(RegattaIdentifier regattaIdentifier, Date startDate, Date endDate, List courseAreaUuids, RegattaConfigurationDTO regattaConfiguration, Double buoyZoneRadiusInHullLengths, boolean useStartTimeInference, boolean controlTrackingFromStartAndFinishTimes, boolean autoRestartTrackingUponCompetitorSetChange, String registrationLinkSecret, CompetitorRegistrationType registrationType) throws UnauthorizedException; @@ -285,14 +285,14 @@ public interface SailingServiceWrite extends FileStorageManagementGwtService, Sa EventDTO createEvent(String eventName, String eventDescription, Date startDate, Date endDate, String venue, boolean isPublic, List courseAreaNames, String officialWebsiteURLAsString, String baseURLAsString, - Map sailorsInfoWebsiteURLsByLocaleName, Iterable images, - Iterable videos, Iterable leaderboardGroupIds) + Map sailorsInfoWebsiteURLsByLocaleName, List images, + List videos, List leaderboardGroupIds) throws UnauthorizedException; EventDTO updateEvent(UUID eventId, String eventName, String eventDescription, Date startDate, Date endDate, - VenueDTO venue, boolean isPublic, Iterable leaderboardGroupIds, String officialWebsiteURLString, - String baseURLAsString, Map sailorsInfoWebsiteURLsByLocaleName, Iterable images, - Iterable videos, Iterable windFinderReviewedSpotCollectionIds) + VenueDTO venue, boolean isPublic, List leaderboardGroupIds, String officialWebsiteURLString, + String baseURLAsString, Map sailorsInfoWebsiteURLsByLocaleName, List images, + List videos, List windFinderReviewedSpotCollectionIds) throws UnauthorizedException, IOException; void updateLeaderboardGroup(UUID leaderboardGroupId, String oldName, String newName, String newDescription, @@ -303,7 +303,7 @@ public interface SailingServiceWrite extends FileStorageManagementGwtService, Sa boolean displayGroupsInReverseOrder, int[] overallLeaderboardDiscardThresholds, ScoringSchemeType overallLeaderboardScoringSchemeType); - void trackWithSwissTiming(RegattaIdentifier regattaToAddTo, Iterable rrs, String hostname, + void trackWithSwissTiming(RegattaIdentifier regattaToAddTo, List rrs, String hostname, int port, boolean trackWind, boolean correctWindByDeclination, boolean useInternalMarkPassingAlgorithm, String updateURL, String updateUsername, String updatePassword, String eventName, String manage2SailEventUrl) throws UnauthorizedException, Exception; @@ -359,7 +359,7 @@ public interface SailingServiceWrite extends FileStorageManagementGwtService, Sa void removeLeaderboards(Collection leaderboardNames) throws UnauthorizedException; StrippedLeaderboardDTOWithSecurity updateLeaderboard(String leaderboardName, String newLeaderboardName, - String newLeaderboardDisplayName, int[] newDiscardingThreasholds, Iterable newCourseAreaIds) + String newLeaderboardDisplayName, int[] newDiscardingThreasholds, List newCourseAreaIds) throws UnauthorizedException; StrippedLeaderboardDTOWithSecurity createRegattaLeaderboardWithEliminations(String name, String displayName, @@ -369,7 +369,7 @@ public interface SailingServiceWrite extends FileStorageManagementGwtService, Sa String leaderboardDisplayName, int[] discardThresholds) throws UnauthorizedException; StrippedLeaderboardDTOWithSecurity createFlexibleLeaderboard(String leaderboardName, String leaderboardDisplayName, - int[] discardThresholds, ScoringSchemeType scoringSchemeType, Iterable courseAreaIds) + int[] discardThresholds, ScoringSchemeType scoringSchemeType, List courseAreaIds) throws UnauthorizedException; void removeResultImportURLs(String resultProviderName, Set toRemove) throws Exception; @@ -383,11 +383,11 @@ public interface SailingServiceWrite extends FileStorageManagementGwtService, Sa void createSwissTimingArchiveConfiguration(String jsonUrl) throws UnauthorizedException, Exception; - void createRegattaStructure(final Iterable regattas, final EventDTO newEvent) throws IOException; + void createRegattaStructure(final List regattas, final EventDTO newEvent) throws IOException; void removeWind(RegattaAndRaceIdentifier raceIdentifier, WindDTO windDTO); - void setWindSourcesToExclude(RegattaAndRaceIdentifier raceIdentifier, Iterable windSourcesToExclude); + void setWindSourcesToExclude(RegattaAndRaceIdentifier raceIdentifier, List windSourcesToExclude); void setRaceIsKnownToStartUpwind(RegattaAndRaceIdentifier raceIdentifier, boolean raceIsKnownToStartUpwind); @@ -396,9 +396,9 @@ public interface SailingServiceWrite extends FileStorageManagementGwtService, Sa void setWind(RegattaAndRaceIdentifier raceIdentifier, WindDTO windDTO); - void removeAndUntrackRaces(Iterable regattaAndRaceIdentifiers); + void removeAndUntrackRaces(List regattaAndRaceIdentifiers); - void stopTrackingRaces(Iterable regattaAndRaceIdentifiers) throws Exception; + void stopTrackingRaces(List regattaAndRaceIdentifiers) throws Exception; void updateTracTracConfiguration(TracTracConfigurationWithSecurityDTO tracTracConfiguration) throws UnauthorizedException, Exception; @@ -409,7 +409,7 @@ public interface SailingServiceWrite extends FileStorageManagementGwtService, Sa void createTracTracConfiguration(String name, String jsonURL, String liveDataURI, String storedDataURI, String courseDesignUpdateURI, String tracTracUsername, String tracTracPassword) throws Exception; - void trackWithTracTrac(RegattaIdentifier regattaToAddTo, Iterable rrs, String liveURI, + void trackWithTracTrac(RegattaIdentifier regattaToAddTo, List rrs, String liveURI, String storedURI, String courseDesignUpdateURI, boolean trackWind, boolean correctWindByDeclination, Duration offsetToStartTimeOfSimulatedRace, boolean useInternalMarkPassingAlgorithm, boolean useOfficialEventsToUpdateRaceLog, String tracTracUsername, String tracTracPassword) throws UnauthorizedException, Exception; @@ -506,7 +506,7 @@ public interface SailingServiceWrite extends FileStorageManagementGwtService, Sa String imageURL, String resizedImageURL, boolean visibleForPublic, TimePoint raceTimepoint) throws UnauthorizedException; - void allowBoatResetToDefaults(Iterable boats) throws UnauthorizedException; + void allowBoatResetToDefaults(List boats) throws UnauthorizedException; /** * Into the first {@link RaceLog} {@link TrackedRace#getAttachedRaceLogs() attached} to the tracked race identified diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceWriteAsync.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceWriteAsync.java index 5ef471a3549..9f54fb5aa76 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceWriteAsync.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceWriteAsync.java @@ -131,7 +131,7 @@ public interface SailingServiceWriteAsync extends FileStorageManagementGwtServic /*throws NoCorrespondingServiceRegisteredException, TransformationException, DoesNotHaveRegattaLogException*/; - void allowBoatResetToDefaults(Iterable boats, AsyncCallback callback) throws UnauthorizedException; + void allowBoatResetToDefaults(List boats, AsyncCallback callback) throws UnauthorizedException; void setTrackingTimes(RaceLogSetTrackingTimesDTO dto, AsyncCallback callback); @@ -180,7 +180,7 @@ public interface SailingServiceWriteAsync extends FileStorageManagementGwtServic * @param callback */ void fillRaceLogsFromPairingListTemplate(final String leaderboardName, final int flightMultiplier, - final Iterable selectedFlightNames,PairingListDTO pairingListDTO, AsyncCallback callback); + final List selectedFlightNames,PairingListDTO pairingListDTO, AsyncCallback callback); /** * Checks whether the user may cut the race identified by {@code radeIdentifier} into multiple races. For this, it @@ -270,13 +270,13 @@ public interface SailingServiceWriteAsync extends FileStorageManagementGwtServic * be null or the empty string in which case the server will use the * {@link TracTracRaceRecordDTO#storedURI} from the rr race record. */ - void trackWithTracTrac(RegattaIdentifier regattaToAddTo, Iterable rrs, String liveURI, + void trackWithTracTrac(RegattaIdentifier regattaToAddTo, List rrs, String liveURI, String storedURI, String courseDesignUpdateURI, boolean trackWind, boolean correctWindByDeclination, Duration offsetToStartTimeOfSimulatedRace, boolean useInternalMarkPassingAlgorithm, boolean useOfficialEventsToUpdateRaceLog, String tracTracUsername, String tracTracPassword, AsyncCallback callback); - void trackWithSwissTiming(RegattaIdentifier regattaToAddTo, Iterable rrs, String hostname, + void trackWithSwissTiming(RegattaIdentifier regattaToAddTo, List rrs, String hostname, int port, boolean trackWind, boolean correctWindByDeclination, boolean useInternalMarkPassingAlgorithm, String updateURL, String updateUsername, String updatePassword, String eventName, String manage2SailEventUrl, AsyncCallback asyncCallback); @@ -291,7 +291,7 @@ public interface SailingServiceWriteAsync extends FileStorageManagementGwtServic void updateTracTracConfiguration(TracTracConfigurationWithSecurityDTO tracTracConfiguration, AsyncCallback callback); - void stopTrackingRaces(Iterable racesToStopTracking, AsyncCallback asyncCallback); + void stopTrackingRaces(List racesToStopTracking, AsyncCallback asyncCallback); /** * Untracks the race and removes it from the regatta. It will also be removed in all leaderboards @@ -299,7 +299,7 @@ public interface SailingServiceWriteAsync extends FileStorageManagementGwtServic * @param regattaNamesAndRaceNames * The identifier for the regatta name, and the race name to remove */ - void removeAndUntrackRaces(Iterable regattaNamesAndRaceNames, AsyncCallback callback); + void removeAndUntrackRaces(List regattaNamesAndRaceNames, AsyncCallback callback); void setWind(RegattaAndRaceIdentifier raceIdentifier, WindDTO wind, AsyncCallback callback); @@ -307,12 +307,12 @@ public interface SailingServiceWriteAsync extends FileStorageManagementGwtServic void updateLeaderboard(String leaderboardName, String newLeaderboardName, String newLeaderboardDisplayName, - int[] newDiscardingThreasholds, Iterable newCourseAreaIds, + int[] newDiscardingThreasholds, List newCourseAreaIds, AsyncCallback callback); void createFlexibleLeaderboard(String leaderboardName, String leaderboardDisplayName, int[] discardThresholds, - ScoringSchemeType scoringSchemeType, Iterable courseAreaIds, + ScoringSchemeType scoringSchemeType, List courseAreaIds, AsyncCallback asyncCallback); void createRegattaLeaderboard(RegattaName regattaIdentifier, @@ -395,7 +395,7 @@ public interface SailingServiceWriteAsync extends FileStorageManagementGwtServic void setRaceIsKnownToStartUpwind(RegattaAndRaceIdentifier raceIdentifier, boolean raceIsKnownToStartUpwind, AsyncCallback callback); - void setWindSourcesToExclude(RegattaAndRaceIdentifier raceIdentifier, Iterable windSourcesToExclude, + void setWindSourcesToExclude(RegattaAndRaceIdentifier raceIdentifier, List windSourcesToExclude, AsyncCallback callback); @@ -415,14 +415,14 @@ public interface SailingServiceWriteAsync extends FileStorageManagementGwtServic void createEvent(String eventName, String eventDescription, Date startDate, Date endDate, String venue, boolean isPublic, List courseAreaNames, String officialWebsiteURL, String baseURL, - Map sailorsInfoWebsiteURLsByLocaleName, Iterable images, - Iterable videos, Iterable leaderboardGroupIDs, + Map sailorsInfoWebsiteURLsByLocaleName, List images, + List videos, List leaderboardGroupIDs, AsyncCallback callback); void updateEvent(UUID eventId, String eventName, String eventDescription, Date startDate, Date endDate, - VenueDTO venue, boolean isPublic, Iterable leaderboardGroupIds, String officialWebsiteURL, - String baseURL, Map sailorsInfoWebsiteURLsByLocaleName, Iterable images, - Iterable videos, Iterable windFinderReviewedSpotCollectionIds, AsyncCallback callback); + VenueDTO venue, boolean isPublic, List leaderboardGroupIds, String officialWebsiteURL, + String baseURL, Map sailorsInfoWebsiteURLsByLocaleName, List images, + List videos, List windFinderReviewedSpotCollectionIds, AsyncCallback callback); void createCourseAreas(UUID eventId, String[] courseAreaNames, AsyncCallback callback); @@ -435,7 +435,7 @@ public interface SailingServiceWriteAsync extends FileStorageManagementGwtServic void createRegatta(String regattaName, String boatClassName, boolean canBoatsOfCompetitorsChangePerRace, CompetitorRegistrationType competitorRegistrationType, String registrationLinkSecret, Date startDate, Date endDate, RegattaCreationParametersDTO seriesNamesWithFleetNamesAndFleetOrderingAndMedal, boolean persistent, - ScoringSchemeType scoringSchemeType, Iterable courseAreaIds, Double buoyZoneRadiusInHullLengths, boolean useStartTimeInference, + ScoringSchemeType scoringSchemeType, List courseAreaIds, Double buoyZoneRadiusInHullLengths, boolean useStartTimeInference, boolean controlTrackingFromStartAndFinishTimes, boolean autoRestartTrackingUponCompetitorSetChange, RankingMetrics rankingMetricType, AsyncCallback callback); @@ -466,7 +466,7 @@ public interface SailingServiceWriteAsync extends FileStorageManagementGwtServic void deleteSwissTimingArchiveConfigurations(Collection dtos, AsyncCallback asyncCallback); - void updateRegatta(RegattaIdentifier regattaIdentifier, Date startDate, Date endDate, Iterable courseAreaUuids, + void updateRegatta(RegattaIdentifier regattaIdentifier, Date startDate, Date endDate, List courseAreaUuids, RegattaConfigurationDTO regattaConfiguration, Double buoyZoneRadiusInHullLengths, boolean useStartTimeInference, boolean controlTrackingFromStartAndFinishTimes, boolean autoRestartTrackingUponCompetitorSetChange, String registrationLinkSecret, @@ -478,7 +478,7 @@ public interface SailingServiceWriteAsync extends FileStorageManagementGwtServic void getImportOperationProgress(UUID id, AsyncCallback asyncCallback); - void allowCompetitorResetToDefaults(Iterable competitors, AsyncCallback asyncCallback); + void allowCompetitorResetToDefaults(List competitors, AsyncCallback asyncCallback); void removeDeviceConfiguration(UUID deviceConfigurationId, AsyncCallback asyncCallback); @@ -542,7 +542,7 @@ public interface SailingServiceWriteAsync extends FileStorageManagementGwtServic void updateSuppressedMarkPassings(String leaderboardName, String raceColumnName, String fleetName, Integer newZeroBasedIndexOfSuppressedMarkPassing, CompetitorDTO competitorDTO, AsyncCallback callback); - void createRegattaStructure(Iterable regattaNames, EventDTO newEvent, + void createRegattaStructure(List regattaNames, EventDTO newEvent, AsyncCallback asyncCallback); void updateFixedMarkPassing(String leaderboardName, String raceColumnName, String fleetName, diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceWriteImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceWriteImpl.java index 8ce7a449d9b..150ecf642f9 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceWriteImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceWriteImpl.java @@ -502,7 +502,7 @@ public class SailingServiceWriteImpl extends SailingServiceImpl implements Saili } @Override - public void trackWithTracTrac(RegattaIdentifier regattaToAddTo, Iterable rrs, String liveURI, String storedURI, + public void trackWithTracTrac(RegattaIdentifier regattaToAddTo, List rrs, String liveURI, String storedURI, String courseDesignUpdateURI, boolean trackWind, final boolean correctWindByDeclination, final Duration offsetToStartTimeOfSimulatedRace, final boolean useInternalMarkPassingAlgorithm, boolean useOfficialEventsToUpdateRaceLog, String tracTracUsername, String tracTracPassword) @@ -587,7 +587,7 @@ public class SailingServiceWriteImpl extends SailingServiceImpl implements Saili } @Override - public void stopTrackingRaces(Iterable regattaAndRaceIdentifiers) throws Exception { + public void stopTrackingRaces(List regattaAndRaceIdentifiers) throws Exception { for (RegattaAndRaceIdentifier regattaAndRaceIdentifier : regattaAndRaceIdentifiers) { getSecurityService().checkCurrentUserUpdatePermission(regattaAndRaceIdentifier); getService().apply(new StopTrackingRace(regattaAndRaceIdentifier)); @@ -595,7 +595,7 @@ public class SailingServiceWriteImpl extends SailingServiceImpl implements Saili } @Override - public void removeAndUntrackRaces(Iterable regattaAndRaceIdentifiers) { + public void removeAndUntrackRaces(List regattaAndRaceIdentifiers) { for (RegattaAndRaceIdentifier regattaAndRaceIdentifier : regattaAndRaceIdentifiers) { getSecurityService().checkPermissionAndDeleteOwnershipForObjectRemoval(regattaAndRaceIdentifier, () -> getService().apply(new RemoveAndUntrackRace(regattaAndRaceIdentifier))); @@ -679,7 +679,7 @@ public class SailingServiceWriteImpl extends SailingServiceImpl implements Saili @Override public void setWindSourcesToExclude(RegattaAndRaceIdentifier raceIdentifier, - Iterable windSourcesToExclude) { + List windSourcesToExclude) { getSecurityService().checkCurrentUserUpdatePermission(raceIdentifier); getService().apply(new SetWindSourcesToExclude(raceIdentifier, windSourcesToExclude)); } @@ -723,7 +723,7 @@ public class SailingServiceWriteImpl extends SailingServiceImpl implements Saili } @Override - public void createRegattaStructure(final Iterable regattas, final EventDTO newEvent) throws MalformedURLException { + public void createRegattaStructure(final List regattas, final EventDTO newEvent) throws MalformedURLException { final List leaderboardNames = new ArrayList(); for (RegattaDTO regatta : regattas) { createRegattaFromRegattaDTO(regatta); @@ -799,7 +799,7 @@ public class SailingServiceWriteImpl extends SailingServiceImpl implements Saili @Override public StrippedLeaderboardDTOWithSecurity createFlexibleLeaderboard(String leaderboardName, String leaderboardDisplayName, int[] discardThresholds, ScoringSchemeType scoringSchemeType, - Iterable courseAreaIds) { + List courseAreaIds) { return getSecurityService().setOwnershipCheckPermissionForObjectCreationAndRevertOnError( SecuredDomainType.LEADERBOARD, Leaderboard.getTypeRelativeObjectIdentifier(leaderboardName), leaderboardDisplayName, new Callable() { @@ -845,7 +845,7 @@ public class SailingServiceWriteImpl extends SailingServiceImpl implements Saili @Override public StrippedLeaderboardDTOWithSecurity updateLeaderboard(String leaderboardName, String newLeaderboardName, - String newLeaderboardDisplayName, int[] newDiscardingThresholds, Iterable newCourseAreaIds) { + String newLeaderboardDisplayName, int[] newDiscardingThresholds, List newCourseAreaIds) { SecurityUtils.getSubject().checkPermission( SecuredDomainType.LEADERBOARD.getStringPermissionForTypeRelativeIdentifier(DefaultActions.UPDATE, Leaderboard.getTypeRelativeObjectIdentifier(leaderboardName))); @@ -1129,7 +1129,7 @@ public class SailingServiceWriteImpl extends SailingServiceImpl implements Saili } @Override - public void trackWithSwissTiming(RegattaIdentifier regattaToAddTo, Iterable rrs, + public void trackWithSwissTiming(RegattaIdentifier regattaToAddTo, List rrs, String hostname, int port, boolean trackWind, final boolean correctWindByDeclination, boolean useInternalMarkPassingAlgorithm, String updateURL, String updateUsername, String updatePassword, String eventName, String manage2SailEventUrl) throws InterruptedException, ParseException, Exception { @@ -1234,9 +1234,9 @@ public class SailingServiceWriteImpl extends SailingServiceImpl implements Saili @Override public EventDTO updateEvent(UUID eventId, String eventName, String eventDescription, Date startDate, Date endDate, - VenueDTO venue, boolean isPublic, Iterable leaderboardGroupIds, String officialWebsiteURLString, - String baseURLAsString, Map sailorsInfoWebsiteURLsByLocaleName, Iterable images, - Iterable videos, Iterable windFinderReviewedSpotCollectionIds) + VenueDTO venue, boolean isPublic, List leaderboardGroupIds, String officialWebsiteURLString, + String baseURLAsString, Map sailorsInfoWebsiteURLsByLocaleName, List images, + List videos, List windFinderReviewedSpotCollectionIds) throws MalformedURLException, UnauthorizedException { if (SecurityUtils.getSubject().isPermitted(SecuredDomainType.EVENT.getStringPermissionForTypeRelativeIdentifier( DefaultActions.UPDATE, EventBaseImpl.getTypeRelativeObjectIdentifier(eventId)))) { @@ -1258,8 +1258,8 @@ public class SailingServiceWriteImpl extends SailingServiceImpl implements Saili @Override public EventDTO createEvent(String eventName, String eventDescription, Date startDate, Date endDate, String venue, boolean isPublic, List courseAreaNames, String officialWebsiteURLAsString, String baseURLAsString, - Map sailorsInfoWebsiteURLsByLocaleName, Iterable images, - Iterable videos, Iterable leaderboardGroupIds) + Map sailorsInfoWebsiteURLsByLocaleName, List images, + List videos, List leaderboardGroupIds) throws UnauthorizedException { final UUID eventUuid = UUID.randomUUID(); @@ -1385,7 +1385,7 @@ public class SailingServiceWriteImpl extends SailingServiceImpl implements Saili } @Override - public void updateRegatta(RegattaIdentifier regattaName, Date startDate, Date endDate, Iterable courseAreaUuids, + public void updateRegatta(RegattaIdentifier regattaName, Date startDate, Date endDate, List courseAreaUuids, RegattaConfigurationDTO configurationDTO, Double buoyZoneRadiusInHullLengths, boolean useStartTimeInference, boolean controlTrackingFromStartAndFinishTimes, boolean autoRestartTrackingUponCompetitorSetChange, String registrationLinkSecret, CompetitorRegistrationType registrationType) { Regatta regatta = getService().getRegatta(regattaName); @@ -1448,7 +1448,7 @@ public class SailingServiceWriteImpl extends SailingServiceImpl implements Saili boolean canBoatsOfCompetitorsChangePerRace, CompetitorRegistrationType competitorRegistrationType, String registrationLinkSecret, Date startDate, Date endDate, RegattaCreationParametersDTO seriesNamesWithFleetNamesAndFleetOrderingAndMedal, - boolean persistent, ScoringSchemeType scoringSchemeType, Iterable courseAreaIds, Double buoyZoneRadiusInHullLengths, boolean useStartTimeInference, + boolean persistent, ScoringSchemeType scoringSchemeType, List courseAreaIds, Double buoyZoneRadiusInHullLengths, boolean useStartTimeInference, boolean controlTrackingFromStartAndFinishTimes, boolean autoRestartTrackingUponCompetitorSetChange, RankingMetrics rankingMetricType) { return getSecurityService().setOwnershipCheckPermissionForObjectCreationAndRevertOnError( SecuredDomainType.REGATTA, Regatta.getTypeRelativeObjectIdentifier(regattaName), @@ -1473,7 +1473,7 @@ public class SailingServiceWriteImpl extends SailingServiceImpl implements Saili this.createRegatta(regatta.getName(), regatta.boatClass.getName(), regatta.canBoatsOfCompetitorsChangePerRace, regatta.competitorRegistrationType, regatta.registrationLinkSecret, regatta.startDate, regatta.endDate, new RegattaCreationParametersDTO(getSeriesCreationParameters(regatta)), true, regatta.scoringScheme, - Util.map(regatta.courseAreas, CourseAreaDTO::getId), regatta.buoyZoneRadiusInHullLengths, + Util.mapToArrayList(regatta.courseAreas, CourseAreaDTO::getId), regatta.buoyZoneRadiusInHullLengths, regatta.useStartTimeInference, regatta.controlTrackingFromStartAndFinishTimes, regatta.autoRestartTrackingUponCompetitorSetChange, regatta.rankingMetricType); } @@ -1676,7 +1676,7 @@ public class SailingServiceWriteImpl extends SailingServiceImpl implements Saili } @Override - public void allowCompetitorResetToDefaults(Iterable competitors) { + public void allowCompetitorResetToDefaults(List competitors) { List competitorIdsAsStrings = new ArrayList(); for (CompetitorDTO competitor : competitors) { getSecurityService().checkCurrentUserUpdatePermission(competitor); @@ -1711,7 +1711,7 @@ public class SailingServiceWriteImpl extends SailingServiceImpl implements Saili } @Override - public void allowBoatResetToDefaults(Iterable boats) { + public void allowBoatResetToDefaults(List boats) { List boatIdsAsStrings = new ArrayList(); for (BoatDTO boat : boats) { getSecurityService().checkCurrentUserUpdatePermission(boat); @@ -2060,7 +2060,7 @@ public class SailingServiceWriteImpl extends SailingServiceImpl implements Saili @Override public void fillRaceLogsFromPairingListTemplate(final String leaderboardName, final int flightMultiplier, - final Iterable selectedFlightNames, final PairingListDTO pairingListDTO) + final List selectedFlightNames, final PairingListDTO pairingListDTO) throws NotFoundException, CompetitorRegistrationOnRaceLogDisabledException { Leaderboard leaderboard = getLeaderboardByName(leaderboardName); getSecurityService().checkCurrentUserUpdatePermission(leaderboard); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/EventDTO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/EventDTO.java index e99bd8669fb..ff8a35c0936 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/EventDTO.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/EventDTO.java @@ -80,7 +80,7 @@ public class EventDTO extends EventBaseDTO implements SecuredDTO { return leaderboardGroups; } - public Iterable getLeaderboardGroupIds() { + public List getLeaderboardGroupIds() { final List updatedEventLeaderboardGroupIds = new ArrayList<>(); for (LeaderboardGroupDTO leaderboardGroup : this.getLeaderboardGroups()) { updatedEventLeaderboardGroupIds.add(leaderboardGroup.getId()); @@ -106,10 +106,10 @@ public class EventDTO extends EventBaseDTO implements SecuredDTO { * * @return always a valid {@link Iterable} which may, though, be empty */ - public Iterable getWindFinderReviewedSpotsCollectionIds() { - final Iterable result; + public List getWindFinderReviewedSpotsCollectionIds() { + final List result; if (windFinderReviewedSpotsCollectionIds == null) { - result = Collections.emptySet(); + result = Collections.emptyList(); } else { result = windFinderReviewedSpotsCollectionIds; } diff --git a/java/com.sap.sailing.server.interface/src/com/sap/sailing/server/operationaltransformation/UpdateLeaderboard.java b/java/com.sap.sailing.server.interface/src/com/sap/sailing/server/operationaltransformation/UpdateLeaderboard.java index 6be9f9785ca..2df27370600 100755 --- a/java/com.sap.sailing.server.interface/src/com/sap/sailing/server/operationaltransformation/UpdateLeaderboard.java +++ b/java/com.sap.sailing.server.interface/src/com/sap/sailing/server/operationaltransformation/UpdateLeaderboard.java @@ -1,7 +1,9 @@ package com.sap.sailing.server.operationaltransformation; import java.io.Serializable; +import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import com.sap.sailing.domain.leaderboard.FlexibleLeaderboard; import com.sap.sailing.domain.leaderboard.Leaderboard; @@ -16,7 +18,7 @@ public class UpdateLeaderboard extends AbstractLeaderboardOperation private final String newLeaderboardName; private final String newLeaderboardDisplayName; private final int[] newDiscardingThresholds; - private final Iterable newCourseAreaIds; + private final Collection newCourseAreaIds; public UpdateLeaderboard(String leaderboardName, String newLeaderboardName, String newLeaderboardDisplayName, int[] newDiscardingThresholds, Iterable newCourseAreaIds) { @@ -24,7 +26,8 @@ public class UpdateLeaderboard extends AbstractLeaderboardOperation this.newLeaderboardName = newLeaderboardName; this.newLeaderboardDisplayName = newLeaderboardDisplayName; this.newDiscardingThresholds = newDiscardingThresholds; - this.newCourseAreaIds = newCourseAreaIds; + this.newCourseAreaIds = new ArrayList<>(); + Util.addAll(newCourseAreaIds, this.newCourseAreaIds); } @Override diff --git a/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/RaceLogReplicationTest.java b/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/RaceLogReplicationTest.java index ba3e5da4ecd..84892c5c729 100755 --- a/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/RaceLogReplicationTest.java +++ b/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/RaceLogReplicationTest.java @@ -8,6 +8,7 @@ import java.util.UUID; import org.junit.Assert; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor; @@ -20,6 +21,7 @@ import com.sap.sailing.domain.abstractlog.race.RaceLogRaceStatusEvent; import com.sap.sailing.domain.abstractlog.race.impl.RaceLogCourseDesignChangedEventImpl; import com.sap.sailing.domain.abstractlog.race.impl.RaceLogRaceStatusEventImpl; import com.sap.sailing.domain.base.ControlPointWithTwoMarks; +import com.sap.sailing.domain.base.CourseArea; import com.sap.sailing.domain.base.CourseBase; import com.sap.sailing.domain.base.Fleet; import com.sap.sailing.domain.base.Mark; @@ -38,9 +40,11 @@ import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus; import com.sap.sailing.domain.leaderboard.FlexibleLeaderboard; import com.sap.sailing.domain.leaderboard.Leaderboard; import com.sap.sailing.domain.leaderboard.RegattaLeaderboard; +import com.sap.sailing.domain.leaderboard.ThresholdBasedResultDiscardingRule; import com.sap.sailing.server.operationaltransformation.AddColumnToLeaderboard; import com.sap.sailing.server.operationaltransformation.AddColumnToSeries; import com.sap.sailing.server.operationaltransformation.CreateRegattaLeaderboard; +import com.sap.sailing.server.operationaltransformation.UpdateLeaderboard; import com.sap.sse.common.TimePoint; import com.sap.sse.common.Util; import com.sap.sse.common.impl.AbstractColor; @@ -184,7 +188,27 @@ public class RaceLogReplicationTest extends AbstractLogReplicationTest