From 423a21f635804bdb17e117357eb459a288f53732 Mon Sep 17 00:00:00 2001 From: Dennis Aulenbacher Date: Fri, 29 Nov 2019 14:06:27 +0100 Subject: [PATCH 01/44] introduced type trackingConnectorInfo representing the tracking source and webUrl --- .../impl/RaceLogRaceTracker.java | 6 ++-- .../sap/sailing/domain/base/EventBase.java | 5 +-- .../domain/base/impl/StrippedEventImpl.java | 18 +++++----- .../tracking/TrackingConnectorInfo.java | 10 ++++++ .../impl/TrackingConnectorInfoImpl.java | 36 +++++++++++++++++++ .../impl/SwissTimingRaceTrackerImpl.java | 6 ++-- .../SwissTimingReplayToDomainAdapter.java | 6 ++-- .../domain/test/mock/MockedTrackedRace.java | 5 +-- ...ockedTrackedRaceWithStartTimeAndRanks.java | 3 +- .../impl/DomainFactoryImpl.java | 14 +++++--- .../impl/RaceCourseReceiver.java | 3 +- .../sailing/domain/base/impl/EventImpl.java | 11 +++--- .../domain/tracking/DummyTrackedRace.java | 2 +- .../domain/tracking/RaceTrackingHandler.java | 6 ++-- .../sailing/domain/tracking/TrackedRace.java | 2 +- .../domain/tracking/TrackedRegatta.java | 2 +- .../tracking/impl/DynamicTrackedRaceImpl.java | 9 ++--- .../domain/tracking/impl/TrackedRaceImpl.java | 15 ++++---- .../tracking/impl/TrackedRegattaImpl.java | 5 +-- .../gwt/ui/test/MockedTrackedRace.java | 5 +-- .../event/GetEventViewAction.java | 16 ++++++++- .../communication/eventview/EventViewDTO.java | 16 +++++---- .../eventview/TrackingConnectorInfoDTO.java | 28 +++++++++++++++ .../communication/start/EventStageDTO.java | 17 +++++---- .../partials/eventheader/EventHeader.java | 10 +++++- .../partials/eventheader/EventHeader.java | 10 +++++- .../sailing/gwt/server/HomeServiceUtil.java | 14 +++++++- .../gwt/ui/server/SailingServiceImpl.java | 15 ++++++-- .../gwt/ui/shared/RaceboardDataDTO.java | 11 +++--- .../ui/shared/TrackingConnectorInfoDTO.java | 28 +++++++++++++++ .../impl/EventBaseJsonDeserializer.java | 16 +++++++-- ...TrackingConnectorInfoJsonDeserializer.java | 27 ++++++++++++++ .../impl/EventBaseJsonSerializer.java | 13 +++++-- .../TrackingConnectorInfoJsonSerializer.java | 20 +++++++++++ .../test/EventDataJsonSerializerTest.java | 6 ++-- ...JsonSerializerWithImagesAndVideosTest.java | 6 ++-- ...tDataJsonSerializerWithNullValuesTest.java | 6 ++-- ...NullStartAndEndDataJsonSerializerTest.java | 6 ++-- .../gateway/jaxrs/api/EventsResource.java | 5 +-- .../gateway/jaxrs/api/SearchResource.java | 3 +- .../server/interfaces/RacingEventService.java | 3 +- .../CreateTrackedRace.java | 11 +++--- .../server/test/SearchServiceTest.java | 6 ++-- .../sailing/server/util/EventUtilTest.java | 2 +- .../server/impl/RacingEventServiceImpl.java | 14 ++++---- .../server/impl/RemoteSailingServerSet.java | 3 +- .../PermissionAwareRaceTrackingHandler.java | 5 +-- 47 files changed, 374 insertions(+), 112 deletions(-) create mode 100644 java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/tracking/TrackingConnectorInfo.java create mode 100644 java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/tracking/impl/TrackingConnectorInfoImpl.java create mode 100644 java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/eventview/TrackingConnectorInfoDTO.java create mode 100644 java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/TrackingConnectorInfoDTO.java create mode 100644 java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/deserialization/impl/TrackingConnectorInfoJsonDeserializer.java create mode 100644 java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/serialization/impl/TrackingConnectorInfoJsonSerializer.java diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/RaceLogRaceTracker.java b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/RaceLogRaceTracker.java index 5223eb208a0..2a085083a1f 100755 --- a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/RaceLogRaceTracker.java +++ b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/RaceLogRaceTracker.java @@ -68,6 +68,7 @@ import com.sap.sailing.domain.tracking.TrackedRace; import com.sap.sailing.domain.tracking.TrackedRegattaRegistry; import com.sap.sailing.domain.tracking.WindStore; import com.sap.sailing.domain.tracking.WindTrack; +import com.sap.sailing.domain.tracking.impl.TrackingConnectorInfoImpl; import com.sap.sse.common.Util; import com.sap.sse.common.Util.Pair; import com.sap.sse.common.impl.MillisecondsTimePoint; @@ -86,7 +87,7 @@ import difflib.PatchFailedException; */ public class RaceLogRaceTracker extends AbstractRaceTrackerBaseImpl { - private static final String RACE_LOG = "raceLog"; + private static final String RACE_LOG = "RaceLog"; private static final String LOGGER_AND_LOGAUTHOR_NAME = RaceLogRaceTracker.class.getName(); private static final Logger logger = Logger.getLogger(LOGGER_AND_LOGAUTHOR_NAME); @@ -313,7 +314,8 @@ public class RaceLogRaceTracker extends AbstractRaceTrackerBaseImpl { trackedRace = raceTrackingHandler.createTrackedRace(trackedRegatta, raceDef, sidelines, windStore, params.getDelayToLiveInMillis(), WindTrack.DEFAULT_MILLISECONDS_OVER_WHICH_TO_AVERAGE_WIND, boatClass.getApproximateManeuverDurationInMilliseconds(), null, /*useMarkPassingCalculator*/ true, raceLogResolver, - /* Not needed because the RaceTracker is not active on a replica */ Optional.empty(), RACE_LOG); + /* Not needed because the RaceTracker is not active on a replica */ Optional.empty(), + new TrackingConnectorInfoImpl(RACE_LOG, null)); notifyRaceCreationListeners(); logger.info(String.format("Started tracking race-log race (%s)", raceLog)); // this wakes up all waiting race handles diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/EventBase.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/EventBase.java index cd28bc21058..a95a014b8bd 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/EventBase.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/EventBase.java @@ -3,7 +3,9 @@ package com.sap.sailing.domain.base; import java.net.URL; import java.util.Locale; import java.util.Map; +import java.util.Set; +import com.sap.sailing.domain.tracking.TrackingConnectorInfo; import com.sap.sse.common.NamedWithID; import com.sap.sse.common.Renamable; import com.sap.sse.common.TimePoint; @@ -110,6 +112,5 @@ public interface EventBase extends NamedWithID, WithDescription, Renamable, With * Determines whether the race is tracked by TracTrac or not * @return a boolean flag, whether any @TrackedRace in the event is tracked by TracTrac or not */ - boolean isTrackedByTracTrac(); - + Set getTrackingConnectorInfos(); } diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/impl/StrippedEventImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/impl/StrippedEventImpl.java index f2618155583..8f83a11a11e 100755 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/impl/StrippedEventImpl.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/impl/StrippedEventImpl.java @@ -1,10 +1,12 @@ package com.sap.sailing.domain.base.impl; +import java.util.Set; import java.util.UUID; import com.sap.sailing.domain.base.EventBase; import com.sap.sailing.domain.base.LeaderboardGroupBase; import com.sap.sailing.domain.base.Venue; +import com.sap.sailing.domain.tracking.TrackingConnectorInfo; import com.sap.sse.common.TimePoint; /** @@ -16,20 +18,20 @@ import com.sap.sse.common.TimePoint; * */ public class StrippedEventImpl extends EventBaseImpl { - private static final long serialVersionUID = -8158306909959745156L; - private final boolean isTrackedByTracTrac; + private static final long serialVersionUID = -4443856327974643859L; + private final Set trackingConnectorInfos; private final Iterable leaderboardGroups; public StrippedEventImpl(String name, TimePoint startDate, TimePoint endDate, String venueName, - boolean isPublic, UUID id, Iterable leaderboardGroups, boolean isTrackedByTracTrac) { - this(name, startDate, endDate, new VenueImpl(venueName), isPublic, id, leaderboardGroups, isTrackedByTracTrac); + boolean isPublic, UUID id, Iterable leaderboardGroups, Set trackingConnectorInfos) { + this(name, startDate, endDate, new VenueImpl(venueName), isPublic, id, leaderboardGroups, trackingConnectorInfos); } public StrippedEventImpl(String name, TimePoint startDate, TimePoint endDate, Venue venue, - boolean isPublic, UUID id, Iterable leaderboardGroups, boolean isTrackedByTracTrac) { + boolean isPublic, UUID id, Iterable leaderboardGroups, Set trackingConnectorInfos) { super(name, startDate, endDate, venue, isPublic, id); this.leaderboardGroups = leaderboardGroups; - this.isTrackedByTracTrac = isTrackedByTracTrac; + this.trackingConnectorInfos = trackingConnectorInfos; } @Override @@ -38,7 +40,7 @@ public class StrippedEventImpl extends EventBaseImpl { } @Override - public boolean isTrackedByTracTrac() { - return isTrackedByTracTrac; + public Set getTrackingConnectorInfos() { + return trackingConnectorInfos; } } diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/tracking/TrackingConnectorInfo.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/tracking/TrackingConnectorInfo.java new file mode 100644 index 00000000000..a1494cebef1 --- /dev/null +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/tracking/TrackingConnectorInfo.java @@ -0,0 +1,10 @@ +package com.sap.sailing.domain.tracking; + +import java.net.URL; + +public interface TrackingConnectorInfo { + public String getTrackedBy(); + public void setTrackedBy(String trackedBy); + public URL getWebUrl(); + public void setWebUrl(URL webUrl); +} diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/tracking/impl/TrackingConnectorInfoImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/tracking/impl/TrackingConnectorInfoImpl.java new file mode 100644 index 00000000000..a9ecc868b01 --- /dev/null +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/tracking/impl/TrackingConnectorInfoImpl.java @@ -0,0 +1,36 @@ +package com.sap.sailing.domain.tracking.impl; + +import java.net.URL; + +import com.sap.sailing.domain.tracking.TrackingConnectorInfo; + +public class TrackingConnectorInfoImpl implements TrackingConnectorInfo { + String trackedBy; + URL webUrl; + + public TrackingConnectorInfoImpl() { + } + + public TrackingConnectorInfoImpl(String trackedBy, URL webUrl) { + super(); + this.trackedBy = trackedBy; + this.webUrl = webUrl; + } + + public String getTrackedBy() { + return trackedBy; + } + + public void setTrackedBy(String trackedBy) { + this.trackedBy = trackedBy; + } + + public URL getWebUrl() { + return webUrl; + } + + public void setWebUrl(URL webUrl) { + this.webUrl = webUrl; + } + +} diff --git a/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/SwissTimingRaceTrackerImpl.java b/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/SwissTimingRaceTrackerImpl.java index 3380604a8cf..cfd80b61983 100644 --- a/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/SwissTimingRaceTrackerImpl.java +++ b/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/SwissTimingRaceTrackerImpl.java @@ -65,6 +65,7 @@ import com.sap.sailing.domain.tracking.TrackingDataLoader; import com.sap.sailing.domain.tracking.WindStore; import com.sap.sailing.domain.tracking.WindTrack; import com.sap.sailing.domain.tracking.impl.TrackedRaceStatusImpl; +import com.sap.sailing.domain.tracking.impl.TrackingConnectorInfoImpl; import com.sap.sailing.domain.tracking.impl.UpdateHandler; import com.sap.sse.common.Distance; import com.sap.sse.common.TimePoint; @@ -76,7 +77,7 @@ import difflib.PatchFailedException; public class SwissTimingRaceTrackerImpl extends AbstractRaceTrackerImpl implements SwissTimingRaceTracker, SailMasterListener, TrackingDataLoader { - private static final String SWISS_TIMING = "swissTiming"; + private static final String SWISS_TIMING_IDENTIFIER = "SwissTiming"; private static final Logger logger = Logger.getLogger(SwissTimingRaceTrackerImpl.class.getName()); @@ -495,7 +496,8 @@ public class SwissTimingRaceTrackerImpl extends AbstractRaceTrackerImpl assert SwissTimingRaceTrackerImpl.this.race == race; } }, useInternalMarkPassingAlgorithm, raceLogResolver, - /* Not needed because the RaceTracker is not active on a replica */ Optional.empty(), SWISS_TIMING); + /* Not needed because the RaceTracker is not active on a replica */ Optional.empty(), + /*no api connection to query the event url*/new TrackingConnectorInfoImpl(SWISS_TIMING_IDENTIFIER, null)); addUpdateHandlers(); notifyRaceCreationListeners(); logger.info("Created SwissTiming RaceDefinition and TrackedRace for "+race.getName()); diff --git a/java/com.sap.sailing.domain.swisstimingreplayadapter/src/com/sap/sailing/domain/swisstimingreplayadapter/impl/SwissTimingReplayToDomainAdapter.java b/java/com.sap.sailing.domain.swisstimingreplayadapter/src/com/sap/sailing/domain/swisstimingreplayadapter/impl/SwissTimingReplayToDomainAdapter.java index 19b7ef5e172..98df93b1bf4 100755 --- a/java/com.sap.sailing.domain.swisstimingreplayadapter/src/com/sap/sailing/domain/swisstimingreplayadapter/impl/SwissTimingReplayToDomainAdapter.java +++ b/java/com.sap.sailing.domain.swisstimingreplayadapter/src/com/sap/sailing/domain/swisstimingreplayadapter/impl/SwissTimingReplayToDomainAdapter.java @@ -58,6 +58,7 @@ import com.sap.sailing.domain.tracking.WindTrack; import com.sap.sailing.domain.tracking.impl.EmptyWindStore; import com.sap.sailing.domain.tracking.impl.MarkPassingImpl; import com.sap.sailing.domain.tracking.impl.TrackedRaceStatusImpl; +import com.sap.sailing.domain.tracking.impl.TrackingConnectorInfoImpl; import com.sap.sse.common.Bearing; import com.sap.sse.common.TimePoint; import com.sap.sse.common.Util; @@ -79,7 +80,7 @@ import difflib.PatchFailedException; * */ public class SwissTimingReplayToDomainAdapter extends SwissTimingReplayAdapter implements TrackingDataLoader { - private static final String SWISS_TIMING = "swissTiming"; + private static final String SWISS_TIMING_IDENTIFIER = "SwissTiming"; private static final int THRESHOLD_FOR_EARLIEST_MARK_PASSING_BEFORE_START_IN_MILLIS = 30000; @@ -413,7 +414,8 @@ public class SwissTimingReplayToDomainAdapter extends SwissTimingReplayAdapter i WindTrack.DEFAULT_MILLISECONDS_OVER_WHICH_TO_AVERAGE_WIND, /* time over which to average speed: */ race.getBoatClass().getApproximateManeuverDurationInMilliseconds(), /* raceDefinitionSetToUpdate */ null, useInternalMarkPassingAlgorithm, raceLogResolver, - /* Not needed because the RaceTracker is not active on a replica */ Optional.empty(), SWISS_TIMING); + /* Not needed because the RaceTracker is not active on a replica */ Optional.empty(), + /*no api connection to query the event url*/new TrackingConnectorInfoImpl(SWISS_TIMING_IDENTIFIER, null)); trackedRace.onStatusChanged(this, new TrackedRaceStatusImpl(TrackedRaceStatusEnum.LOADING, 0)); TimePoint bestStartTimeKnownSoFar = bestStartTimePerRaceID.get(currentRaceID); if (bestStartTimeKnownSoFar != null) { diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/mock/MockedTrackedRace.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/mock/MockedTrackedRace.java index f3ea1f9f0e9..7fe26ed91fe 100755 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/mock/MockedTrackedRace.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/mock/MockedTrackedRace.java @@ -77,6 +77,7 @@ import com.sap.sailing.domain.tracking.TrackedLeg; import com.sap.sailing.domain.tracking.TrackedLegOfCompetitor; import com.sap.sailing.domain.tracking.TrackedRace; import com.sap.sailing.domain.tracking.TrackedRaceStatus; +import com.sap.sailing.domain.tracking.TrackingConnectorInfo; import com.sap.sailing.domain.tracking.TrackingDataLoader; import com.sap.sailing.domain.tracking.WindLegTypeAndLegBearingAndORCPerformanceCurveCache; import com.sap.sailing.domain.tracking.WindPositionMode; @@ -657,7 +658,7 @@ public class MockedTrackedRace implements DynamicTrackedRace { WindStore windStore, long delayToLiveInMillis, long millisecondsOverWhichToAverageWind, long millisecondsOverWhichToAverageSpeed, DynamicRaceDefinitionSet raceDefinitionSetToUpdate, boolean useMarkPassingcalculator, - RaceLogAndTrackedRaceResolver raceLogResolver, Optional threadLocalTransporter, String trackingConnector) { + RaceLogAndTrackedRaceResolver raceLogResolver, Optional threadLocalTransporter, TrackingConnectorInfo trackingConnectorInfo) { return null; } @@ -1285,7 +1286,7 @@ public class MockedTrackedRace implements DynamicTrackedRace { } @Override - public String getTrackingConnector() { + public TrackingConnectorInfo getTrackingConnectorInfo() { return null; } diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/mock/MockedTrackedRaceWithStartTimeAndRanks.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/mock/MockedTrackedRaceWithStartTimeAndRanks.java index a6a4c6b5646..4fffd15d98a 100755 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/mock/MockedTrackedRaceWithStartTimeAndRanks.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/mock/MockedTrackedRaceWithStartTimeAndRanks.java @@ -58,6 +58,7 @@ import com.sap.sailing.domain.tracking.TrackedLegOfCompetitor; import com.sap.sailing.domain.tracking.TrackedRace; import com.sap.sailing.domain.tracking.TrackedRaceStatus; import com.sap.sailing.domain.tracking.TrackedRegatta; +import com.sap.sailing.domain.tracking.TrackingConnectorInfo; import com.sap.sailing.domain.tracking.WindLegTypeAndLegBearingAndORCPerformanceCurveCache; import com.sap.sailing.domain.tracking.WindPositionMode; import com.sap.sailing.domain.tracking.WindStore; @@ -809,7 +810,7 @@ public class MockedTrackedRaceWithStartTimeAndRanks implements TrackedRace { } @Override - public String getTrackingConnector() { + public TrackingConnectorInfo getTrackingConnectorInfo() { return null; } 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 a87939405b3..56a352257a9 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 @@ -74,11 +74,13 @@ import com.sap.sailing.domain.tracking.RaceTrackingConnectivityParameters; import com.sap.sailing.domain.tracking.RaceTrackingHandler; import com.sap.sailing.domain.tracking.TrackedRegatta; import com.sap.sailing.domain.tracking.TrackedRegattaRegistry; +import com.sap.sailing.domain.tracking.TrackingConnectorInfo; import com.sap.sailing.domain.tracking.WindStore; import com.sap.sailing.domain.tracking.WindTrack; import com.sap.sailing.domain.tracking.impl.FinishTimeUpdateHandler; import com.sap.sailing.domain.tracking.impl.RaceAbortedHandler; import com.sap.sailing.domain.tracking.impl.StartTimeUpdateHandler; +import com.sap.sailing.domain.tracking.impl.TrackingConnectorInfoImpl; import com.sap.sailing.domain.tractracadapter.DomainFactory; import com.sap.sailing.domain.tractracadapter.JSONService; import com.sap.sailing.domain.tractracadapter.MetadataParser; @@ -116,7 +118,7 @@ import com.tractrac.subscription.lib.api.SubscriberInitializationException; import difflib.PatchFailedException; public class DomainFactoryImpl implements DomainFactory { - public static final String TRAC_TRAC = "tracTrac"; + public static final String TRAC_TRAC_IDENTIFIER = "TracTrac"; private static final Logger logger = Logger.getLogger(DomainFactoryImpl.class.getName()); @@ -641,9 +643,13 @@ public class DomainFactoryImpl implements DomainFactory { // add to existing regatta only if boat class matches if (raceDefinition.getBoatClass() == trackedRegatta.getRegatta().getBoatClass()) { trackedRegatta.getRegatta().addRace(raceDefinition); + TrackingConnectorInfo trackingConnectorInfo = null; + if (tractracRace != null) { + trackingConnectorInfo = new TrackingConnectorInfoImpl(TRAC_TRAC_IDENTIFIER,tractracRace.getEvent().getWebURL()); + } trackedRace = createTrackedRace(trackedRegatta, raceDefinition, sidelines, windStore, delayToLiveInMillis, millisecondsOverWhichToAverageWind, raceDefinitionSetToUpdate, ignoreTracTracMarkPassings, - raceLogResolver, raceTrackingHandler); + raceLogResolver, raceTrackingHandler, trackingConnectorInfo); logger.info("Added race " + raceDefinition + " to regatta " + trackedRegatta.getRegatta()); if (runBeforeExposingRace != null) { logger.fine("Running callback for tracked race creation for "+trackedRace.getRace()); @@ -740,11 +746,11 @@ public class DomainFactoryImpl implements DomainFactory { private DynamicTrackedRace createTrackedRace(TrackedRegatta trackedRegatta, RaceDefinition race, Iterable sidelines, WindStore windStore, long delayToLiveInMillis, long millisecondsOverWhichToAverageWind, DynamicRaceDefinitionSet raceDefinitionSetToUpdate, - boolean useMarkPassingCalculator, RaceLogAndTrackedRaceResolver raceLogResolver, RaceTrackingHandler raceTrackingHandler) { + boolean useMarkPassingCalculator, RaceLogAndTrackedRaceResolver raceLogResolver, RaceTrackingHandler raceTrackingHandler, TrackingConnectorInfo trackingConnectorInfo) { return raceTrackingHandler.createTrackedRace(trackedRegatta, race, sidelines, windStore, delayToLiveInMillis, millisecondsOverWhichToAverageWind, /* time over which to average speed: */ race.getBoatClass().getApproximateManeuverDurationInMilliseconds(), - raceDefinitionSetToUpdate, useMarkPassingCalculator, raceLogResolver, Optional.empty(), TRAC_TRAC); + raceDefinitionSetToUpdate, useMarkPassingCalculator, raceLogResolver, Optional.empty(), trackingConnectorInfo); } /** diff --git a/java/com.sap.sailing.domain.tractracadapter/src/com/sap/sailing/domain/tractracadapter/impl/RaceCourseReceiver.java b/java/com.sap.sailing.domain.tractracadapter/src/com/sap/sailing/domain/tractracadapter/impl/RaceCourseReceiver.java index 9b92dad5992..b98a2a56da6 100755 --- a/java/com.sap.sailing.domain.tractracadapter/src/com/sap/sailing/domain/tractracadapter/impl/RaceCourseReceiver.java +++ b/java/com.sap.sailing.domain.tractracadapter/src/com/sap/sailing/domain/tractracadapter/impl/RaceCourseReceiver.java @@ -28,6 +28,7 @@ import com.sap.sailing.domain.tracking.DynamicTrackedRegatta; import com.sap.sailing.domain.tracking.RaceTrackingHandler; import com.sap.sailing.domain.tracking.TrackedRace; import com.sap.sailing.domain.tracking.WindStore; +import com.sap.sailing.domain.tracking.impl.TrackingConnectorInfoImpl; import com.sap.sailing.domain.tractracadapter.DomainFactory; import com.sap.sailing.domain.tractracadapter.TracTracControlPoint; import com.sap.sse.common.TimePoint; @@ -269,7 +270,7 @@ public class RaceCourseReceiver extends AbstractReceiverWithQueue getTrackingConnectorInfos() { + Set result = new HashSet<>(); for (LeaderboardGroup lbg : this.getLeaderboardGroups()) { for (Leaderboard lb : lbg.getLeaderboards()) { - //Leaderboard.getTrackedRaces() could lead to performance issues due to duplicative collection of TrackedRaces for (TrackedRace tr : lb.getTrackedRaces()) { - if("tracTrac".equals(tr.getTrackingConnector())){ - return true; - } + result.add(tr.getTrackingConnectorInfo()); } } } - return false; + return result; } } diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/DummyTrackedRace.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/DummyTrackedRace.java index 2764f7d3a35..9d24e614996 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/DummyTrackedRace.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/DummyTrackedRace.java @@ -747,7 +747,7 @@ public class DummyTrackedRace extends TrackedRaceWithWindEssentials { } @Override - public String getTrackingConnector() { + public TrackingConnectorInfo getTrackingConnectorInfo() { return null; } diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/RaceTrackingHandler.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/RaceTrackingHandler.java index b45798a8972..5bccfc37a22 100644 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/RaceTrackingHandler.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/RaceTrackingHandler.java @@ -35,7 +35,7 @@ public interface RaceTrackingHandler { Iterable sidelines, WindStore windStore, long delayToLiveInMillis, long millisecondsOverWhichToAverageWind, long millisecondsOverWhichToAverageSpeed, DynamicRaceDefinitionSet raceDefinitionSetToUpdate, boolean useMarkPassingCalculator, - RaceLogAndTrackedRaceResolver raceLogResolver, Optional threadLocalTransporter, String trackingConnector); + RaceLogAndTrackedRaceResolver raceLogResolver, Optional threadLocalTransporter, TrackingConnectorInfo trackingConnectorInfo); DynamicCompetitor getOrCreateCompetitor(CompetitorAndBoatStore competitorAndBoatStore, Serializable competitorId, String name, String shortName, Color displayColor, String email, URI flagImageURI, DynamicTeam team, @@ -58,10 +58,10 @@ public interface RaceTrackingHandler { Iterable sidelines, WindStore windStore, long delayToLiveInMillis, long millisecondsOverWhichToAverageWind, long millisecondsOverWhichToAverageSpeed, DynamicRaceDefinitionSet raceDefinitionSetToUpdate, boolean useMarkPassingCalculator, - RaceLogAndTrackedRaceResolver raceLogResolver, Optional threadLocalTransporter, String trackingConnector) { + RaceLogAndTrackedRaceResolver raceLogResolver, Optional threadLocalTransporter, TrackingConnectorInfo trackingConnectorInfo) { return trackedRegatta.createTrackedRace(raceDefinition, sidelines, windStore, delayToLiveInMillis, millisecondsOverWhichToAverageWind, millisecondsOverWhichToAverageSpeed, raceDefinitionSetToUpdate, - useMarkPassingCalculator, raceLogResolver, threadLocalTransporter, trackingConnector); + useMarkPassingCalculator, raceLogResolver, threadLocalTransporter, trackingConnectorInfo); } @Override diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackedRace.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackedRace.java index 0c96eb3c7bd..a9e6331e18c 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackedRace.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackedRace.java @@ -1251,5 +1251,5 @@ public interface TrackedRace /** * gets a String representation of the Tracking-Service used to Track the Race */ - String getTrackingConnector(); + TrackingConnectorInfo getTrackingConnectorInfo(); } diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackedRegatta.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackedRegatta.java index f8d4597d0cf..e74c0aca25d 100644 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackedRegatta.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackedRegatta.java @@ -67,7 +67,7 @@ public interface TrackedRegatta extends Serializable { DynamicTrackedRace createTrackedRace(RaceDefinition raceDefinition, Iterable sidelines, WindStore windStore, long delayToLiveInMillis, long millisecondsOverWhichToAverageWind, long millisecondsOverWhichToAverageSpeed, DynamicRaceDefinitionSet raceDefinitionSetToUpdate, boolean useInternalMarkPassingAlgorithm, RaceLogAndTrackedRaceResolver raceLogResolver, - Optional beforeAndAfterNotificationHandler, String trackingConnector); + Optional beforeAndAfterNotificationHandler, TrackingConnectorInfo trackingConnectorInfo); /** * Obtains the tracked race for race. Blocks until the tracked race has been created diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/DynamicTrackedRaceImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/DynamicTrackedRaceImpl.java index 78f99e1fdb1..fdd4e4eebc4 100644 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/DynamicTrackedRaceImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/DynamicTrackedRaceImpl.java @@ -64,6 +64,7 @@ import com.sap.sailing.domain.tracking.TrackFactory; import com.sap.sailing.domain.tracking.TrackedLeg; import com.sap.sailing.domain.tracking.TrackedRaceStatus; import com.sap.sailing.domain.tracking.TrackedRegatta; +import com.sap.sailing.domain.tracking.TrackingConnectorInfo; import com.sap.sailing.domain.tracking.TrackingDataLoader; import com.sap.sailing.domain.tracking.WindStore; import com.sap.sailing.domain.tracking.WindTrack; @@ -119,10 +120,10 @@ DynamicTrackedRace, GPSTrackListener { WindStore windStore, long delayToLiveInMillis, long millisecondsOverWhichToAverageWind, long millisecondsOverWhichToAverageSpeed, long delayForCacheInvalidationOfWindEstimation, boolean useInternalMarkPassingAlgorithm, RankingMetricConstructor rankingMetricConstructor, - RaceLogAndTrackedRaceResolver raceLogResolver, String trackingConnector) { + RaceLogAndTrackedRaceResolver raceLogResolver, TrackingConnectorInfo trackingConnectorInfo) { super(trackedRegatta, race, sidelines, windStore, delayToLiveInMillis, millisecondsOverWhichToAverageWind, millisecondsOverWhichToAverageSpeed, delayForCacheInvalidationOfWindEstimation, - useInternalMarkPassingAlgorithm, rankingMetricConstructor, raceLogResolver, trackingConnector); + useInternalMarkPassingAlgorithm, rankingMetricConstructor, raceLogResolver, trackingConnectorInfo); raceStateBasedStartTimeChangedListener = createRaceStateStartTimeChangeListener(); this.competitorResultsFromRaceLog = new HashMap<>(); this.logListener = new DynamicTrackedRaceLogListener(this); @@ -210,10 +211,10 @@ DynamicTrackedRace, GPSTrackListener { public DynamicTrackedRaceImpl(TrackedRegatta trackedRegatta, RaceDefinition race, Iterable sidelines, WindStore windStore, long delayToLiveInMillis, long millisecondsOverWhichToAverageWind, long millisecondsOverWhichToAverageSpeed, boolean useInternalMarkPassingAlgorithm, - RankingMetricConstructor rankingMetricConstructor, RaceLogAndTrackedRaceResolver raceLogResolver, String trackingConnector) { + RankingMetricConstructor rankingMetricConstructor, RaceLogAndTrackedRaceResolver raceLogResolver, TrackingConnectorInfo trackingConnectorInfo) { this(trackedRegatta, race, sidelines, windStore, delayToLiveInMillis, millisecondsOverWhichToAverageWind, millisecondsOverWhichToAverageSpeed, - millisecondsOverWhichToAverageWind / 2, useInternalMarkPassingAlgorithm, rankingMetricConstructor, raceLogResolver, trackingConnector); + millisecondsOverWhichToAverageWind / 2, useInternalMarkPassingAlgorithm, rankingMetricConstructor, raceLogResolver, trackingConnectorInfo); } @Override diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java index 087e1d30074..5cd3a7795ed 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java @@ -144,6 +144,7 @@ import com.sap.sailing.domain.tracking.TrackedRace; import com.sap.sailing.domain.tracking.TrackedRaceStatus; import com.sap.sailing.domain.tracking.TrackedRaceWithWindEssentials; import com.sap.sailing.domain.tracking.TrackedRegatta; +import com.sap.sailing.domain.tracking.TrackingConnectorInfo; import com.sap.sailing.domain.tracking.WindLegTypeAndLegBearingAndORCPerformanceCurveCache; import com.sap.sailing.domain.tracking.WindPositionMode; import com.sap.sailing.domain.tracking.WindStore; @@ -188,7 +189,7 @@ public abstract class TrackedRaceImpl extends TrackedRaceWithWindEssentials impl private TrackedRaceStatus status; - private final String trackingConnector; + private final TrackingConnectorInfo trackingConnectorInfo; private final Object statusNotifier; @@ -434,10 +435,10 @@ public abstract class TrackedRaceImpl extends TrackedRaceWithWindEssentials impl public TrackedRaceImpl(final TrackedRegatta trackedRegatta, RaceDefinition race, final Iterable sidelines, final WindStore windStore, long delayToLiveInMillis, final long millisecondsOverWhichToAverageWind, long millisecondsOverWhichToAverageSpeed, long delayForWindEstimationCacheInvalidation, - boolean useInternalMarkPassingAlgorithm, RaceLogAndTrackedRaceResolver raceLogResolver, String trackedBy) { + boolean useInternalMarkPassingAlgorithm, RaceLogAndTrackedRaceResolver raceLogResolver, TrackingConnectorInfo trackingConnectorInfo) { this(trackedRegatta, race, sidelines, windStore, delayToLiveInMillis, millisecondsOverWhichToAverageWind, millisecondsOverWhichToAverageSpeed, delayForWindEstimationCacheInvalidation, - useInternalMarkPassingAlgorithm, OneDesignRankingMetric::new, raceLogResolver, trackedBy); + useInternalMarkPassingAlgorithm, OneDesignRankingMetric::new, raceLogResolver, trackingConnectorInfo); } /** @@ -451,10 +452,10 @@ public abstract class TrackedRaceImpl extends TrackedRaceWithWindEssentials impl final WindStore windStore, long delayToLiveInMillis, final long millisecondsOverWhichToAverageWind, long millisecondsOverWhichToAverageSpeed, long delayForWindEstimationCacheInvalidation, boolean useInternalMarkPassingAlgorithm, RankingMetricConstructor rankingMetricConstructor, - RaceLogAndTrackedRaceResolver raceLogResolver, String trackingConnector) { + RaceLogAndTrackedRaceResolver raceLogResolver, TrackingConnectorInfo trackingConnectorInfo) { super(race, trackedRegatta, windStore, millisecondsOverWhichToAverageWind); this.raceLogResolver = raceLogResolver; - this.trackingConnector = trackingConnector; + this.trackingConnectorInfo = trackingConnectorInfo; raceStates = new WeakHashMap<>(); shortTimeWindCache = new ShortTimeWindCache(this, millisecondsOverWhichToAverageWind / 2); locksForMarkPassings = new ConcurrentHashMap>, NamedReentrantReadWriteLock>(); @@ -3974,7 +3975,7 @@ public abstract class TrackedRaceImpl extends TrackedRaceWithWindEssentials impl } @Override - public String getTrackingConnector() { - return trackingConnector; + public TrackingConnectorInfo getTrackingConnectorInfo() { + return trackingConnectorInfo; } } diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRegattaImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRegattaImpl.java index 2d8a8aebdc7..248ec42687e 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRegattaImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRegattaImpl.java @@ -29,6 +29,7 @@ import com.sap.sailing.domain.tracking.DynamicTrackedRace; import com.sap.sailing.domain.tracking.RaceListener; import com.sap.sailing.domain.tracking.TrackedRace; import com.sap.sailing.domain.tracking.TrackedRegatta; +import com.sap.sailing.domain.tracking.TrackingConnectorInfo; import com.sap.sailing.domain.tracking.WindStore; import com.sap.sse.common.TimePoint; import com.sap.sse.common.Util; @@ -321,13 +322,13 @@ public class TrackedRegattaImpl implements TrackedRegatta { WindStore windStore, long delayToLiveInMillis, long millisecondsOverWhichToAverageWind, long millisecondsOverWhichToAverageSpeed, DynamicRaceDefinitionSet raceDefinitionSetToUpdate, boolean useInternalMarkPassingAlgorithm, RaceLogAndTrackedRaceResolver raceLogResolver, - Optional threadLocalTransporter, String trackingConnector) { + Optional threadLocalTransporter, TrackingConnectorInfo trackingConnectorInfo) { logger.log(Level.INFO, "Creating DynamicTrackedRaceImpl for RaceDefinition " + raceDefinition.getName()); DynamicTrackedRaceImpl result = new DynamicTrackedRaceImpl(this, raceDefinition, sidelines, windStore, delayToLiveInMillis, millisecondsOverWhichToAverageWind, millisecondsOverWhichToAverageSpeed, /* useMarkPassingCalculator */useInternalMarkPassingAlgorithm, getRegatta().getRankingMetricConstructor(), raceLogResolver, - trackingConnector); + trackingConnectorInfo); // adding the raceDefinition to the raceDefinitionSetToUpdate BEFORE calling addTrackedRace helps those who // are called back by RaceListener.raceAdded(TrackedRace) and who then expect the update to have happened if (raceDefinitionSetToUpdate != null) { diff --git a/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/MockedTrackedRace.java b/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/MockedTrackedRace.java index 37fe512cfc9..c315d53b311 100755 --- a/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/MockedTrackedRace.java +++ b/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/MockedTrackedRace.java @@ -64,6 +64,7 @@ import com.sap.sailing.domain.tracking.TrackedLeg; import com.sap.sailing.domain.tracking.TrackedLegOfCompetitor; import com.sap.sailing.domain.tracking.TrackedRace; import com.sap.sailing.domain.tracking.TrackedRaceStatus; +import com.sap.sailing.domain.tracking.TrackingConnectorInfo; import com.sap.sailing.domain.tracking.TrackingDataLoader; import com.sap.sailing.domain.tracking.WindLegTypeAndLegBearingAndORCPerformanceCurveCache; import com.sap.sailing.domain.tracking.WindPositionMode; @@ -336,7 +337,7 @@ public class MockedTrackedRace implements DynamicTrackedRace { public DynamicTrackedRace createTrackedRace(RaceDefinition raceDefinition, Iterable sidelines, WindStore windStore, long delayToLiveInMillis, long millisecondsOverWhichToAverageWind, long millisecondsOverWhichToAverageSpeed, DynamicRaceDefinitionSet raceDefinitionSetToUpdate, - boolean useMarkPassingCalculator, RaceLogAndTrackedRaceResolver raceLogResolver, Optional threadLocalTransporter, String trackingConnector) { + boolean useMarkPassingCalculator, RaceLogAndTrackedRaceResolver raceLogResolver, Optional threadLocalTransporter, TrackingConnectorInfo trackingConnectorInfo) { return null; } @@ -962,7 +963,7 @@ public class MockedTrackedRace implements DynamicTrackedRace { } @Override - public String getTrackingConnector() { + public TrackingConnectorInfo getTrackingConnectorInfo() { return null; } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/event/GetEventViewAction.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/event/GetEventViewAction.java index 955a8edd2d9..c9c069cf4fb 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/event/GetEventViewAction.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/event/GetEventViewAction.java @@ -8,6 +8,7 @@ import java.util.Set; import java.util.UUID; import java.util.logging.Level; import java.util.logging.Logger; +import java.util.stream.Collectors; import com.google.gwt.core.shared.GwtIncompatible; import com.sap.sailing.domain.base.Event; @@ -18,6 +19,7 @@ import com.sap.sailing.gwt.home.communication.SailingDispatchContext; import com.sap.sailing.gwt.home.communication.eventview.EventViewDTO; import com.sap.sailing.gwt.home.communication.eventview.RegattaMetadataDTO; import com.sap.sailing.gwt.home.communication.eventview.SeriesReferenceWithEventsDTO; +import com.sap.sailing.gwt.home.communication.eventview.TrackingConnectorInfoDTO; import com.sap.sailing.gwt.home.server.EventActionUtil; import com.sap.sailing.gwt.home.server.EventActionUtil.LeaderboardCallback; import com.sap.sailing.gwt.home.server.LeaderboardContext; @@ -118,10 +120,22 @@ public class GetEventViewAction implements SailingAction, IsClient singleLeaderboardGroup.getId(), eventAndLeaderboardReferencesForSeriesOrdered)); } } - dto.setTrackedByTracTrac(event.isTrackedByTracTrac()); + Set trackingConnectorInfos = event.getTrackingConnectorInfos() + .stream() + .map(trackingConnectorInfo -> new TrackingConnectorInfoDTO(trackingConnectorInfo.getTrackedBy(), mapURLToString(trackingConnectorInfo.getWebUrl()))).collect(Collectors.toSet()); + dto.setTrackingConnectorInfos(trackingConnectorInfos); return dto; } + + @GwtIncompatible + private String mapURLToString(URL url) { + if(url != null) { + return url.toString(); + }else { + return ""; + } + } @Override public void cacheInstanceKey(StringBuilder key) { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/eventview/EventViewDTO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/eventview/EventViewDTO.java index 9bb2b3035ed..3984daaf3ee 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/eventview/EventViewDTO.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/eventview/EventViewDTO.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; +import java.util.Set; import java.util.TreeSet; import com.sap.sailing.domain.common.WindSource; @@ -27,7 +28,7 @@ public class EventViewDTO extends EventMetadataDTO implements Result, HasLogo { private String sailorsInfoWebsiteURL; private String description; private List allWindFinderSpotIdsUsedByEvent; - private boolean isTrackedByTracTrac; + private Set trackingConnectorInfos; public Collection getRegattas() { @@ -143,12 +144,13 @@ public class EventViewDTO extends EventMetadataDTO implements Result, HasLogo { public boolean isMultiRegatta() { return multiRegatta; } - - public boolean isTrackedByTracTrac() { - return isTrackedByTracTrac; + + public Set getTrackingConnectorInfos() { + return trackingConnectorInfos; } - - public void setTrackedByTracTrac(boolean isTrackedByTracTrac) { - this.isTrackedByTracTrac = isTrackedByTracTrac; + + public void setTrackingConnectorInfos(Set trackingConnectorInfo) { + this.trackingConnectorInfos = trackingConnectorInfo; } + } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/eventview/TrackingConnectorInfoDTO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/eventview/TrackingConnectorInfoDTO.java new file mode 100644 index 00000000000..52d375bdebc --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/eventview/TrackingConnectorInfoDTO.java @@ -0,0 +1,28 @@ +package com.sap.sailing.gwt.home.communication.eventview; + +import com.google.gwt.user.client.rpc.IsSerializable; + +public class TrackingConnectorInfoDTO implements IsSerializable { + private String trackedBy; + private String webUrl; + + public TrackingConnectorInfoDTO() {} + + public TrackingConnectorInfoDTO(String trackedBy, String webUrl) { + this.trackedBy = trackedBy; + this.webUrl = webUrl; + } + + public String getTrackedBy() { + return trackedBy; + } + public void setTrackedBy(String trackedBy) { + this.trackedBy = trackedBy; + } + public String getWebUrl() { + return webUrl; + } + public void setWebUrl(String webUrl) { + this.webUrl = webUrl; + } +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/start/EventStageDTO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/start/EventStageDTO.java index c269e5b59a8..86a084b501a 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/start/EventStageDTO.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/start/EventStageDTO.java @@ -1,13 +1,15 @@ package com.sap.sailing.gwt.home.communication.start; +import java.util.Set; + import com.sap.sailing.gwt.home.communication.event.EventLinkAndMetadataDTO; +import com.sap.sailing.gwt.ui.shared.TrackingConnectorInfoDTO; public class EventStageDTO extends EventLinkAndMetadataDTO { private StageEventType stageType; private String stageImageURL; - private boolean isTrackedByTracTrac; - + private Set trackingConnectorInfo; @Override public StageEventType getStageType() { @@ -25,11 +27,12 @@ public class EventStageDTO extends EventLinkAndMetadataDTO { public void setStageImageURL(String stageImageURL) { this.stageImageURL = stageImageURL; } - public boolean isTrackedByTracTrac() { - return isTrackedByTracTrac; + + public Set getTrackingConnectorInfo() { + return trackingConnectorInfo; } - - public void setTrackedByTracTrac(boolean isTrackedByTracTrac) { - this.isTrackedByTracTrac = isTrackedByTracTrac; + + public void setTrackingConnectorInfo(Set trackingConnectorInfo) { + this.trackingConnectorInfo = trackingConnectorInfo; } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.java index b9296e4e46a..bef176413bc 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.java @@ -19,6 +19,7 @@ import com.google.gwt.user.client.ui.UIObject; import com.google.gwt.user.client.ui.Widget; import com.sap.sailing.gwt.home.communication.eventview.EventViewDTO; import com.sap.sailing.gwt.home.communication.eventview.HasRegattaMetadata; +import com.sap.sailing.gwt.home.communication.eventview.TrackingConnectorInfoDTO; import com.sap.sailing.gwt.home.desktop.partials.sharing.SharingButtons; import com.sap.sailing.gwt.home.desktop.partials.sharing.SharingMetadataProvider; import com.sap.sailing.gwt.home.desktop.places.event.EventView; @@ -150,7 +151,14 @@ public class EventHeader extends Composite { } hide(competitors, races, courseAreaUi, eventCategory); } - if(!event.isTrackedByTracTrac()) { + boolean trackedByTracTrac = false; + for(TrackingConnectorInfoDTO trackingConnectorInfo : event.getTrackingConnectorInfos()) { + if("TracTrac".equals(trackingConnectorInfo.getTrackedBy())) { + trackedByTracTrac = true; + break; + } + } + if(!trackedByTracTrac) { hide(tractracLogoContainer); } initTitleAndSelection(nameToShow); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/eventheader/EventHeader.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/eventheader/EventHeader.java index 86cfe3c9378..8185ba25501 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/eventheader/EventHeader.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/eventheader/EventHeader.java @@ -10,6 +10,7 @@ import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.Widget; import com.sap.sailing.gwt.home.communication.eventview.EventViewDTO; +import com.sap.sailing.gwt.home.communication.eventview.TrackingConnectorInfoDTO; import com.sap.sailing.gwt.home.shared.app.PlaceNavigation; import com.sap.sailing.gwt.home.shared.utils.EventDatesFormatterUtil; import com.sap.sailing.gwt.home.shared.utils.LabelTypeUtil; @@ -50,7 +51,14 @@ public class EventHeader extends Composite { if (logoNavigation != null) { logoNavigation.configureAnchorElement(eventLogoUi); } - if (event.isTrackedByTracTrac()) { + boolean trackedByTracTrac = false; + for(TrackingConnectorInfoDTO trackingConnectorInfo : event.getTrackingConnectorInfos()) { + if("TracTrac".equals(trackingConnectorInfo.getTrackedBy())) { + trackedByTracTrac = true; + break; + } + } + if (trackedByTracTrac) { eventHeader.addClassName(EventHeaderResources.INSTANCE.css().eventheader_with_logo()); } else { tractracLogoContainer.removeFromParent(); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/server/HomeServiceUtil.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/server/HomeServiceUtil.java index c01dff588ea..b5c9682d201 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/server/HomeServiceUtil.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/server/HomeServiceUtil.java @@ -41,6 +41,7 @@ import com.sap.sailing.gwt.home.communication.eventlist.EventListEventDTO; import com.sap.sailing.gwt.home.communication.media.SailingVideoDTO; import com.sap.sailing.gwt.home.communication.start.EventStageDTO; import com.sap.sailing.gwt.home.communication.start.StageEventType; +import com.sap.sailing.gwt.ui.shared.TrackingConnectorInfoDTO; import com.sap.sailing.server.interfaces.RacingEventService; import com.sap.sailing.server.util.EventUtil; import com.sap.sse.common.TimePoint; @@ -311,11 +312,22 @@ public final class HomeServiceUtil { dto.setBaseURL(baseURL.toString()); dto.setOnRemoteServer(onRemoteServer); dto.setStageType(stageType); - dto.setTrackedByTracTrac(event.isTrackedByTracTrac()); + Set trackingConnectorInfos = event.getTrackingConnectorInfos() + .stream() + .map(trackingConnectorInfo -> new TrackingConnectorInfoDTO(trackingConnectorInfo.getTrackedBy(), mapURLToString(trackingConnectorInfo.getWebUrl()))).collect(Collectors.toSet()); + dto.setTrackingConnectorInfo(trackingConnectorInfos); dto.setStageImageURL(useTeaserImage ? findEventThumbnailImageUrlAsString(event) : getStageImageURLAsString(event)); return dto; } + private static String mapURLToString(URL url) { + if(url != null) { + return url.toString(); + }else { + return ""; + } + } + public static EventListEventDTO convertToEventListDTO(EventBase event, URL baseURL, boolean onRemoteServer, RacingEventService service) { EventListEventDTO dto = new EventListEventDTO(); 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 d3f921ac2cf..58c9b557dbe 100644 --- 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 @@ -52,6 +52,7 @@ import java.util.logging.Level; import java.util.logging.Logger; import java.util.regex.Matcher; import java.util.regex.Pattern; +import java.util.stream.Collectors; import java.util.stream.StreamSupport; import java.util.zip.GZIPInputStream; @@ -494,6 +495,7 @@ import com.sap.sailing.gwt.ui.shared.SwissTimingReplayRaceDTO; import com.sap.sailing.gwt.ui.shared.TracTracConfigurationWithSecurityDTO; import com.sap.sailing.gwt.ui.shared.TracTracRaceRecordDTO; import com.sap.sailing.gwt.ui.shared.TrackFileImportDeviceIdentifierDTO; +import com.sap.sailing.gwt.ui.shared.TrackingConnectorInfoDTO; import com.sap.sailing.gwt.ui.shared.TypedDeviceMappingDTO; import com.sap.sailing.gwt.ui.shared.VenueDTO; import com.sap.sailing.gwt.ui.shared.WaypointDTO; @@ -1995,7 +1997,7 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet public RaceboardDataDTO getRaceboardData(String regattaName, String raceName, String leaderboardName, String leaderboardGroupName, UUID eventId) { RaceboardDataDTO result = new RaceboardDataDTO(null, false, false, Collections.emptyList(), - Collections.emptyList(), null, false); + Collections.emptyList(), null, null); RaceWithCompetitorsAndBoatsDTO raceDTO = null; Regatta regatta = getService().getRegattaByName(regattaName); if (regatta != null) { @@ -2049,9 +2051,16 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet StrippedLeaderboardDTOWithSecurity leaderboardDTO = createStrippedLeaderboardDTOWithSecurity( leaderboard, false, false); - boolean isTrackedByTracTrac = isValidEvent && event.isTrackedByTracTrac(); + Set trackingConnectorInfos; + if(isValidEvent) { + trackingConnectorInfos = event.getTrackingConnectorInfos() + .stream() + .map(trackingConnectorInfo -> new TrackingConnectorInfoDTO(trackingConnectorInfo.getTrackedBy(), trackingConnectorInfo.getWebUrl().toString())).collect(Collectors.toSet()); + }else { + trackingConnectorInfos = Collections.emptySet(); + } result = new RaceboardDataDTO(raceDTO, isValidLeaderboardGroup, isValidEvent, - detailTypesForCompetitorChart, availableDetailTypesForLeaderboard, leaderboardDTO, isTrackedByTracTrac); + detailTypesForCompetitorChart, availableDetailTypesForLeaderboard, leaderboardDTO, trackingConnectorInfos); } } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RaceboardDataDTO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RaceboardDataDTO.java index 8d5c7bdaa82..16da5c53e94 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RaceboardDataDTO.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RaceboardDataDTO.java @@ -2,6 +2,7 @@ package com.sap.sailing.gwt.ui.shared; import java.util.ArrayList; import java.util.Map; +import java.util.Set; import com.google.gwt.user.client.rpc.IsSerializable; import com.sap.sailing.domain.common.DetailType; @@ -16,7 +17,7 @@ public class RaceboardDataDTO implements IsSerializable { private ArrayList detailTypesForCompetitorChart; private ArrayList availableDetailTypesForLeaderboard; private StrippedLeaderboardDTOWithSecurity leaderboard; - private boolean isTrackedByTracTrac; + private Set trackingConnectorInfos; // for GWT @@ -24,7 +25,7 @@ public class RaceboardDataDTO implements IsSerializable { public RaceboardDataDTO(RaceWithCompetitorsAndBoatsDTO race, boolean isValidLeaderboardGroup, boolean isValidEvent, Iterable detailTypesForCompetitorChart, - Iterable availableDetailTypesForLeaderboard, StrippedLeaderboardDTOWithSecurity leaderboard, boolean isTrackedByTracTrac) { + Iterable availableDetailTypesForLeaderboard, StrippedLeaderboardDTOWithSecurity leaderboard, Set trackingConnectorInfos) { this.race = race; this.isValidLeaderboardGroup = isValidLeaderboardGroup; this.isValidEvent = isValidEvent; @@ -33,7 +34,7 @@ public class RaceboardDataDTO implements IsSerializable { this.availableDetailTypesForLeaderboard = new ArrayList<>(); Util.addAll(availableDetailTypesForLeaderboard, this.availableDetailTypesForLeaderboard); this.leaderboard = leaderboard; - this.isTrackedByTracTrac = isTrackedByTracTrac; + this.trackingConnectorInfos = trackingConnectorInfos; } public StrippedLeaderboardDTOWithSecurity getLeaderboard() { @@ -68,7 +69,7 @@ public class RaceboardDataDTO implements IsSerializable { return isValidEvent; } - public boolean isTrackedByTracTrac() { - return isTrackedByTracTrac; + public Set isTrackedByTracTrac() { + return trackingConnectorInfos; } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/TrackingConnectorInfoDTO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/TrackingConnectorInfoDTO.java new file mode 100644 index 00000000000..df8baca89e1 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/TrackingConnectorInfoDTO.java @@ -0,0 +1,28 @@ +package com.sap.sailing.gwt.ui.shared; + +import com.google.gwt.user.client.rpc.IsSerializable; + +public class TrackingConnectorInfoDTO implements IsSerializable { + private String trackedBy; + private String webUrl; + + public TrackingConnectorInfoDTO() {} + + public TrackingConnectorInfoDTO(String trackedBy, String webUrl) { + this.trackedBy = trackedBy; + this.webUrl = webUrl; + } + + public String getTrackedBy() { + return trackedBy; + } + public void setTrackedBy(String trackedBy) { + this.trackedBy = trackedBy; + } + public String getWebUrl() { + return webUrl; + } + public void setWebUrl(String webUrl) { + this.webUrl = webUrl; + } +} diff --git a/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/deserialization/impl/EventBaseJsonDeserializer.java b/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/deserialization/impl/EventBaseJsonDeserializer.java index b722faba670..e9bfda2e1d8 100644 --- a/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/deserialization/impl/EventBaseJsonDeserializer.java +++ b/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/deserialization/impl/EventBaseJsonDeserializer.java @@ -3,8 +3,10 @@ package com.sap.sailing.server.gateway.deserialization.impl; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; import java.util.Locale; +import java.util.Set; import java.util.UUID; import org.json.simple.JSONArray; @@ -14,6 +16,7 @@ import com.sap.sailing.domain.base.EventBase; import com.sap.sailing.domain.base.LeaderboardGroupBase; import com.sap.sailing.domain.base.Venue; import com.sap.sailing.domain.base.impl.StrippedEventImpl; +import com.sap.sailing.domain.tracking.TrackingConnectorInfo; import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException; import com.sap.sailing.server.gateway.deserialization.JsonDeserializer; import com.sap.sailing.server.gateway.serialization.impl.EventBaseJsonSerializer; @@ -28,10 +31,12 @@ import com.sap.sse.shared.media.impl.VideoDescriptorImpl; public class EventBaseJsonDeserializer implements JsonDeserializer { private final JsonDeserializer venueDeserializer; private final JsonDeserializer leaderboardGroupDeserializer; + private final JsonDeserializertrackingConnectorInfoDeserializer; - public EventBaseJsonDeserializer(JsonDeserializer venueDeserializer, JsonDeserializer leaderboardGroupDeserializer) { + public EventBaseJsonDeserializer(JsonDeserializer venueDeserializer, JsonDeserializer leaderboardGroupDeserializer, JsonDeserializertrackingConnectorInfoDeserializer) { this.venueDeserializer = venueDeserializer; this.leaderboardGroupDeserializer = leaderboardGroupDeserializer; + this.trackingConnectorInfoDeserializer = trackingConnectorInfoDeserializer; } public EventBase deserialize(JSONObject eventJson) throws JsonDeserializationException { @@ -56,9 +61,14 @@ public class EventBaseJsonDeserializer implements JsonDeserializer { leaderboardGroups.add(leaderboardGroupDeserializer.deserialize((JSONObject) lgJson)); } } - boolean isTrackedByTracTrac = Boolean.TRUE.equals(eventJson.get(EventBaseJsonSerializer.Field_TRACKED_BY_TRACTRAC)); + Set trackedBy = new HashSet<>(); + JSONArray trackedByJson = Helpers.getNestedArraySafe(eventJson, EventBaseJsonSerializer.FIELD_TRACKING_CONNECTOR_INFOS); + for (Object jsonPair : trackedByJson) { + trackedBy.add(trackingConnectorInfoDeserializer.deserialize((JSONObject) jsonPair)); + } + StrippedEventImpl result = new StrippedEventImpl(name, startDate == null ? null : new MillisecondsTimePoint(startDate.longValue()), - endDate == null ? null : new MillisecondsTimePoint(endDate.longValue()), venue, /* is public */ true, id, leaderboardGroups, isTrackedByTracTrac); + endDate == null ? null : new MillisecondsTimePoint(endDate.longValue()), venue, /* is public */ true, id, leaderboardGroups, trackedBy); result.setDescription(description); if (officialWebsiteURLAsString != null) { try { diff --git a/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/deserialization/impl/TrackingConnectorInfoJsonDeserializer.java b/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/deserialization/impl/TrackingConnectorInfoJsonDeserializer.java new file mode 100644 index 00000000000..5cc7189a6c9 --- /dev/null +++ b/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/deserialization/impl/TrackingConnectorInfoJsonDeserializer.java @@ -0,0 +1,27 @@ +package com.sap.sailing.server.gateway.deserialization.impl; + +import java.net.MalformedURLException; +import java.net.URL; + +import org.json.simple.JSONObject; + +import com.sap.sailing.domain.tracking.TrackingConnectorInfo; +import com.sap.sailing.domain.tracking.impl.TrackingConnectorInfoImpl; +import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException; +import com.sap.sailing.server.gateway.deserialization.JsonDeserializer; +import com.sap.sailing.server.gateway.serialization.impl.TrackingConnectorInfoJsonSerializer; + +public class TrackingConnectorInfoJsonDeserializer implements JsonDeserializer { + + public TrackingConnectorInfo deserialize(JSONObject object) throws JsonDeserializationException { + String trackedBy = Helpers.getNestedObjectSafe(object, TrackingConnectorInfoJsonSerializer.FIELD_TRACKED_BY).toJSONString(); + URL webUrl; + try { + webUrl = new URL( (String) object.get(TrackingConnectorInfoJsonSerializer.FIELD_WEB_URL)); + } catch (MalformedURLException e) { + throw new JsonDeserializationException(e); + } + TrackingConnectorInfo trackingConnectorInfo = new TrackingConnectorInfoImpl(trackedBy, webUrl); + return trackingConnectorInfo; + } +} diff --git a/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/serialization/impl/EventBaseJsonSerializer.java b/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/serialization/impl/EventBaseJsonSerializer.java index 3587066d40b..955688a74a5 100644 --- a/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/serialization/impl/EventBaseJsonSerializer.java +++ b/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/serialization/impl/EventBaseJsonSerializer.java @@ -10,6 +10,7 @@ import org.json.simple.JSONObject; import com.sap.sailing.domain.base.EventBase; import com.sap.sailing.domain.base.LeaderboardGroupBase; import com.sap.sailing.domain.base.Venue; +import com.sap.sailing.domain.tracking.TrackingConnectorInfo; import com.sap.sailing.server.gateway.serialization.JsonSerializer; import com.sap.sse.shared.media.ImageDescriptor; import com.sap.sse.shared.media.VideoDescriptor; @@ -39,7 +40,7 @@ public class EventBaseJsonSerializer implements JsonSerializer { public static final String FIELD_CREATEDATDATE = "createdAtDate"; public static final String FIELD_LOCALE = "locale"; public static final String FIELD_TAGS = "tags"; - public static final String Field_TRACKED_BY_TRACTRAC = "trackedByTracTrac"; + public static final String FIELD_TRACKING_CONNECTOR_INFOS = "trackedBy"; // specific image fields public static final String FIELD_IMAGES = "images"; public static final String FIELD_IMAGE_WIDTH_IN_PX = "widthInPixel"; @@ -53,10 +54,12 @@ public class EventBaseJsonSerializer implements JsonSerializer { private final JsonSerializer venueSerializer; private final JsonSerializer leaderboardGroupBaseSerializer; + private final JsonSerializer trackingConnectorInfoSerializer; - public EventBaseJsonSerializer(JsonSerializer venueSerializer, JsonSerializer leaderboardGroupBaseSerializer) { + public EventBaseJsonSerializer(JsonSerializer venueSerializer, JsonSerializer leaderboardGroupBaseSerializer, JsonSerializer trackingConnectorInfoJsonSerializer) { this.leaderboardGroupBaseSerializer = leaderboardGroupBaseSerializer; this.venueSerializer = venueSerializer; + this.trackingConnectorInfoSerializer = trackingConnectorInfoJsonSerializer; } public JSONObject serialize(EventBase event) { @@ -74,7 +77,11 @@ public class EventBaseJsonSerializer implements JsonSerializer { for (LeaderboardGroupBase lg : event.getLeaderboardGroups()) { leaderboardGroups.add(leaderboardGroupBaseSerializer.serialize(lg)); } - result.put(Field_TRACKED_BY_TRACTRAC, event.isTrackedByTracTrac()); + JSONArray trackingConnectorInfos = new JSONArray(); + for(TrackingConnectorInfo trackingConnectorInfo : event.getTrackingConnectorInfos()) { + trackingConnectorInfos.add(trackingConnectorInfoSerializer.serialize(trackingConnectorInfo)); + } + result.put(FIELD_TRACKING_CONNECTOR_INFOS, trackingConnectorInfos); JSONArray imageSizes = new JSONArray(); result.put(FIELD_IMAGE_SIZES, imageSizes); for (ImageDescriptor image : event.getImages()) { diff --git a/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/serialization/impl/TrackingConnectorInfoJsonSerializer.java b/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/serialization/impl/TrackingConnectorInfoJsonSerializer.java new file mode 100644 index 00000000000..5876e6fb2cf --- /dev/null +++ b/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/serialization/impl/TrackingConnectorInfoJsonSerializer.java @@ -0,0 +1,20 @@ +package com.sap.sailing.server.gateway.serialization.impl; + +import org.json.simple.JSONObject; + +import com.sap.sailing.domain.tracking.TrackingConnectorInfo; +import com.sap.sailing.server.gateway.serialization.JsonSerializer; + +public class TrackingConnectorInfoJsonSerializer implements JsonSerializer { + public static final String FIELD_TRACKED_BY = "trackedBy"; + public static final String FIELD_WEB_URL = "webUrl"; + + @Override + public JSONObject serialize(TrackingConnectorInfo trackingConnectorInfo) { + JSONObject result = new JSONObject(); + result.put(FIELD_TRACKED_BY, trackingConnectorInfo.getTrackedBy()); + result.put(FIELD_WEB_URL, trackingConnectorInfo.getWebUrl()); + return result; + } +} + diff --git a/java/com.sap.sailing.server.gateway.serialization.test/src/com/sap/sailing/server/gateway/serialization/test/EventDataJsonSerializerTest.java b/java/com.sap.sailing.server.gateway.serialization.test/src/com/sap/sailing/server/gateway/serialization/test/EventDataJsonSerializerTest.java index 246f3bd65f4..3229db06fcb 100755 --- a/java/com.sap.sailing.server.gateway.serialization.test/src/com/sap/sailing/server/gateway/serialization/test/EventDataJsonSerializerTest.java +++ b/java/com.sap.sailing.server.gateway.serialization.test/src/com/sap/sailing/server/gateway/serialization/test/EventDataJsonSerializerTest.java @@ -27,11 +27,13 @@ import com.sap.sailing.server.gateway.deserialization.JsonDeserializationExcepti import com.sap.sailing.server.gateway.deserialization.impl.CourseAreaJsonDeserializer; import com.sap.sailing.server.gateway.deserialization.impl.EventBaseJsonDeserializer; import com.sap.sailing.server.gateway.deserialization.impl.LeaderboardGroupBaseJsonDeserializer; +import com.sap.sailing.server.gateway.deserialization.impl.TrackingConnectorInfoJsonDeserializer; import com.sap.sailing.server.gateway.deserialization.impl.VenueJsonDeserializer; import com.sap.sailing.server.gateway.serialization.JsonSerializer; import com.sap.sailing.server.gateway.serialization.impl.CourseAreaJsonSerializer; import com.sap.sailing.server.gateway.serialization.impl.EventBaseJsonSerializer; import com.sap.sailing.server.gateway.serialization.impl.LeaderboardGroupBaseJsonSerializer; +import com.sap.sailing.server.gateway.serialization.impl.TrackingConnectorInfoJsonSerializer; import com.sap.sailing.server.gateway.serialization.impl.VenueJsonSerializer; import com.sap.sse.common.TimePoint; import com.sap.sse.common.Util; @@ -88,8 +90,8 @@ public class EventDataJsonSerializerTest { when(event.getImages()).thenReturn(Collections.singleton(expectedLogoImageDescriptor)); when(event.getVideos()).thenReturn(Collections.emptySet()); // ... and the serializer itself. - serializer = new EventBaseJsonSerializer(new VenueJsonSerializer(new CourseAreaJsonSerializer()), new LeaderboardGroupBaseJsonSerializer()); - deserializer = new EventBaseJsonDeserializer(new VenueJsonDeserializer(new CourseAreaJsonDeserializer(DomainFactory.INSTANCE)), new LeaderboardGroupBaseJsonDeserializer()); + serializer = new EventBaseJsonSerializer(new VenueJsonSerializer(new CourseAreaJsonSerializer()), new LeaderboardGroupBaseJsonSerializer(), new TrackingConnectorInfoJsonSerializer()); + deserializer = new EventBaseJsonDeserializer(new VenueJsonDeserializer(new CourseAreaJsonDeserializer(DomainFactory.INSTANCE)), new LeaderboardGroupBaseJsonDeserializer(), new TrackingConnectorInfoJsonDeserializer()); when(expectedLeaderboardGroup.getId()).thenReturn(UUID.randomUUID()); when(expectedLeaderboardGroup.getName()).thenReturn("LG"); diff --git a/java/com.sap.sailing.server.gateway.serialization.test/src/com/sap/sailing/server/gateway/serialization/test/EventDataJsonSerializerWithImagesAndVideosTest.java b/java/com.sap.sailing.server.gateway.serialization.test/src/com/sap/sailing/server/gateway/serialization/test/EventDataJsonSerializerWithImagesAndVideosTest.java index fd47c5b8706..3c141efe2c8 100644 --- a/java/com.sap.sailing.server.gateway.serialization.test/src/com/sap/sailing/server/gateway/serialization/test/EventDataJsonSerializerWithImagesAndVideosTest.java +++ b/java/com.sap.sailing.server.gateway.serialization.test/src/com/sap/sailing/server/gateway/serialization/test/EventDataJsonSerializerWithImagesAndVideosTest.java @@ -28,10 +28,12 @@ import com.sap.sailing.server.gateway.deserialization.JsonDeserializationExcepti import com.sap.sailing.server.gateway.deserialization.impl.CourseAreaJsonDeserializer; import com.sap.sailing.server.gateway.deserialization.impl.EventBaseJsonDeserializer; import com.sap.sailing.server.gateway.deserialization.impl.LeaderboardGroupBaseJsonDeserializer; +import com.sap.sailing.server.gateway.deserialization.impl.TrackingConnectorInfoJsonDeserializer; import com.sap.sailing.server.gateway.deserialization.impl.VenueJsonDeserializer; import com.sap.sailing.server.gateway.serialization.impl.CourseAreaJsonSerializer; import com.sap.sailing.server.gateway.serialization.impl.EventBaseJsonSerializer; import com.sap.sailing.server.gateway.serialization.impl.LeaderboardGroupBaseJsonSerializer; +import com.sap.sailing.server.gateway.serialization.impl.TrackingConnectorInfoJsonSerializer; import com.sap.sailing.server.gateway.serialization.impl.VenueJsonSerializer; import com.sap.sse.common.TimePoint; import com.sap.sse.common.Util; @@ -117,8 +119,8 @@ public class EventDataJsonSerializerWithImagesAndVideosTest { when(event.getImages()).thenReturn(images); when(event.getVideos()).thenReturn(videos); // ... and the serializer itself. - serializer = new EventBaseJsonSerializer(new VenueJsonSerializer(new CourseAreaJsonSerializer()), new LeaderboardGroupBaseJsonSerializer()); - deserializer = new EventBaseJsonDeserializer(new VenueJsonDeserializer(new CourseAreaJsonDeserializer(DomainFactory.INSTANCE)), new LeaderboardGroupBaseJsonDeserializer()); + serializer = new EventBaseJsonSerializer(new VenueJsonSerializer(new CourseAreaJsonSerializer()), new LeaderboardGroupBaseJsonSerializer(), new TrackingConnectorInfoJsonSerializer()); + deserializer = new EventBaseJsonDeserializer(new VenueJsonDeserializer(new CourseAreaJsonDeserializer(DomainFactory.INSTANCE)), new LeaderboardGroupBaseJsonDeserializer(), new TrackingConnectorInfoJsonDeserializer()); when(expectedLeaderboardGroup.getId()).thenReturn(UUID.randomUUID()); when(expectedLeaderboardGroup.getName()).thenReturn("LG"); diff --git a/java/com.sap.sailing.server.gateway.serialization.test/src/com/sap/sailing/server/gateway/serialization/test/EventDataJsonSerializerWithNullValuesTest.java b/java/com.sap.sailing.server.gateway.serialization.test/src/com/sap/sailing/server/gateway/serialization/test/EventDataJsonSerializerWithNullValuesTest.java index c69749bfbd7..36c9ebbf68b 100755 --- a/java/com.sap.sailing.server.gateway.serialization.test/src/com/sap/sailing/server/gateway/serialization/test/EventDataJsonSerializerWithNullValuesTest.java +++ b/java/com.sap.sailing.server.gateway.serialization.test/src/com/sap/sailing/server/gateway/serialization/test/EventDataJsonSerializerWithNullValuesTest.java @@ -24,11 +24,13 @@ import com.sap.sailing.server.gateway.deserialization.JsonDeserializationExcepti import com.sap.sailing.server.gateway.deserialization.impl.CourseAreaJsonDeserializer; import com.sap.sailing.server.gateway.deserialization.impl.EventBaseJsonDeserializer; import com.sap.sailing.server.gateway.deserialization.impl.LeaderboardGroupBaseJsonDeserializer; +import com.sap.sailing.server.gateway.deserialization.impl.TrackingConnectorInfoJsonDeserializer; import com.sap.sailing.server.gateway.deserialization.impl.VenueJsonDeserializer; import com.sap.sailing.server.gateway.serialization.JsonSerializer; import com.sap.sailing.server.gateway.serialization.impl.CourseAreaJsonSerializer; import com.sap.sailing.server.gateway.serialization.impl.EventBaseJsonSerializer; import com.sap.sailing.server.gateway.serialization.impl.LeaderboardGroupBaseJsonSerializer; +import com.sap.sailing.server.gateway.serialization.impl.TrackingConnectorInfoJsonSerializer; import com.sap.sailing.server.gateway.serialization.impl.VenueJsonSerializer; import com.sap.sse.common.TimePoint; import com.sap.sse.common.impl.MillisecondsTimePoint; @@ -67,8 +69,8 @@ public class EventDataJsonSerializerWithNullValuesTest { when(event.getImages()).thenReturn(Collections.emptySet()); when(event.getVideos()).thenReturn(Collections.emptySet()); // ... and the serializer itself. - serializer = new EventBaseJsonSerializer(new VenueJsonSerializer(new CourseAreaJsonSerializer()), new LeaderboardGroupBaseJsonSerializer()); - deserializer = new EventBaseJsonDeserializer(new VenueJsonDeserializer(new CourseAreaJsonDeserializer(DomainFactory.INSTANCE)), new LeaderboardGroupBaseJsonDeserializer()); + serializer = new EventBaseJsonSerializer(new VenueJsonSerializer(new CourseAreaJsonSerializer()), new LeaderboardGroupBaseJsonSerializer(), new TrackingConnectorInfoJsonSerializer()); + deserializer = new EventBaseJsonDeserializer(new VenueJsonDeserializer(new CourseAreaJsonDeserializer(DomainFactory.INSTANCE)), new LeaderboardGroupBaseJsonDeserializer(), new TrackingConnectorInfoJsonDeserializer()); when(expectedLeaderbaordGroup.getId()).thenReturn(UUID.randomUUID()); when(expectedLeaderbaordGroup.getName()).thenReturn("LG"); diff --git a/java/com.sap.sailing.server.gateway.serialization.test/src/com/sap/sailing/server/gateway/serialization/test/EventWithNullStartAndEndDataJsonSerializerTest.java b/java/com.sap.sailing.server.gateway.serialization.test/src/com/sap/sailing/server/gateway/serialization/test/EventWithNullStartAndEndDataJsonSerializerTest.java index b66d29f065b..03e0b0bcd46 100755 --- a/java/com.sap.sailing.server.gateway.serialization.test/src/com/sap/sailing/server/gateway/serialization/test/EventWithNullStartAndEndDataJsonSerializerTest.java +++ b/java/com.sap.sailing.server.gateway.serialization.test/src/com/sap/sailing/server/gateway/serialization/test/EventWithNullStartAndEndDataJsonSerializerTest.java @@ -24,11 +24,13 @@ import com.sap.sailing.server.gateway.deserialization.JsonDeserializationExcepti import com.sap.sailing.server.gateway.deserialization.impl.CourseAreaJsonDeserializer; import com.sap.sailing.server.gateway.deserialization.impl.EventBaseJsonDeserializer; import com.sap.sailing.server.gateway.deserialization.impl.LeaderboardGroupBaseJsonDeserializer; +import com.sap.sailing.server.gateway.deserialization.impl.TrackingConnectorInfoJsonDeserializer; import com.sap.sailing.server.gateway.deserialization.impl.VenueJsonDeserializer; import com.sap.sailing.server.gateway.serialization.JsonSerializer; import com.sap.sailing.server.gateway.serialization.impl.CourseAreaJsonSerializer; import com.sap.sailing.server.gateway.serialization.impl.EventBaseJsonSerializer; import com.sap.sailing.server.gateway.serialization.impl.LeaderboardGroupBaseJsonSerializer; +import com.sap.sailing.server.gateway.serialization.impl.TrackingConnectorInfoJsonSerializer; import com.sap.sailing.server.gateway.serialization.impl.VenueJsonSerializer; import com.sap.sse.common.TimePoint; import com.sap.sse.common.Util; @@ -85,8 +87,8 @@ public class EventWithNullStartAndEndDataJsonSerializerTest { doReturn(expectedLeaderboardGroups).when(event).getLeaderboardGroups(); // ... and the serializer itself. - serializer = new EventBaseJsonSerializer(new VenueJsonSerializer(new CourseAreaJsonSerializer()), new LeaderboardGroupBaseJsonSerializer()); - deserializer = new EventBaseJsonDeserializer(new VenueJsonDeserializer(new CourseAreaJsonDeserializer(DomainFactory.INSTANCE)), new LeaderboardGroupBaseJsonDeserializer()); + serializer = new EventBaseJsonSerializer(new VenueJsonSerializer(new CourseAreaJsonSerializer()), new LeaderboardGroupBaseJsonSerializer(), new TrackingConnectorInfoJsonSerializer()); + deserializer = new EventBaseJsonDeserializer(new VenueJsonDeserializer(new CourseAreaJsonDeserializer(DomainFactory.INSTANCE)), new LeaderboardGroupBaseJsonDeserializer(), new TrackingConnectorInfoJsonDeserializer()); } @Test diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/EventsResource.java b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/EventsResource.java index 39fd220773e..c7a62a59e5f 100644 --- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/EventsResource.java +++ b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/EventsResource.java @@ -78,6 +78,7 @@ import com.sap.sailing.server.gateway.serialization.impl.CourseAreaJsonSerialize import com.sap.sailing.server.gateway.serialization.impl.EventBaseJsonSerializer; import com.sap.sailing.server.gateway.serialization.impl.EventRaceStatesSerializer; import com.sap.sailing.server.gateway.serialization.impl.LeaderboardGroupBaseJsonSerializer; +import com.sap.sailing.server.gateway.serialization.impl.TrackingConnectorInfoJsonSerializer; import com.sap.sailing.server.gateway.serialization.impl.VenueJsonSerializer; import com.sap.sailing.server.hierarchy.SailingHierarchyOwnershipUpdater; import com.sap.sailing.server.operationaltransformation.AddColumnToSeries; @@ -290,7 +291,7 @@ public class EventsResource extends AbstractSailingServerResource { @Produces("application/json;charset=UTF-8") public Response getEvents(@QueryParam("showNonPublic") String showNonPublic) { JsonSerializer eventSerializer = new EventBaseJsonSerializer( - new VenueJsonSerializer(new CourseAreaJsonSerializer()), new LeaderboardGroupBaseJsonSerializer()); + new VenueJsonSerializer(new CourseAreaJsonSerializer()), new LeaderboardGroupBaseJsonSerializer(), new TrackingConnectorInfoJsonSerializer()); JSONArray result = new JSONArray(); for (Event event : getService().getAllEvents()) { if (getSecurityService().hasCurrentUserReadPermission(event) @@ -329,7 +330,7 @@ public class EventsResource extends AbstractSailingServerResource { getSecurityService().checkCurrentUserReadPermission(event); } JsonSerializer eventSerializer = new EventBaseJsonSerializer( - new VenueJsonSerializer(new CourseAreaJsonSerializer()), new LeaderboardGroupBaseJsonSerializer()); + new VenueJsonSerializer(new CourseAreaJsonSerializer()), new LeaderboardGroupBaseJsonSerializer(), new TrackingConnectorInfoJsonSerializer()); JSONObject eventJson = eventSerializer.serialize(event); String json = eventJson.toJSONString(); diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/SearchResource.java b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/SearchResource.java index d7b8810b0bd..df2f5c577d9 100755 --- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/SearchResource.java +++ b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/SearchResource.java @@ -17,6 +17,7 @@ import com.sap.sailing.server.gateway.serialization.impl.CourseAreaJsonSerialize import com.sap.sailing.server.gateway.serialization.impl.EventBaseJsonSerializer; import com.sap.sailing.server.gateway.serialization.impl.LeaderboardGroupBaseJsonSerializer; import com.sap.sailing.server.gateway.serialization.impl.LeaderboardSearchResultJsonSerializer; +import com.sap.sailing.server.gateway.serialization.impl.TrackingConnectorInfoJsonSerializer; import com.sap.sailing.server.gateway.serialization.impl.VenueJsonSerializer; import com.sap.sse.common.Util; import com.sap.sse.common.search.KeywordQuery; @@ -29,7 +30,7 @@ public class SearchResource extends AbstractSailingServerResource { public SearchResource() { final LeaderboardGroupBaseJsonSerializer leaderboardGroupSerializer = new LeaderboardGroupBaseJsonSerializer(); serializer = new LeaderboardSearchResultJsonSerializer(new EventBaseJsonSerializer(new VenueJsonSerializer( - new CourseAreaJsonSerializer()), leaderboardGroupSerializer), leaderboardGroupSerializer); + new CourseAreaJsonSerializer()), leaderboardGroupSerializer, new TrackingConnectorInfoJsonSerializer()), leaderboardGroupSerializer); } private Result search(KeywordQuery query) { 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 4abeff680fa..f83ddb9f6c9 100755 --- 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 @@ -85,6 +85,7 @@ import com.sap.sailing.domain.tracking.TrackedRace; import com.sap.sailing.domain.tracking.TrackedRegatta; import com.sap.sailing.domain.tracking.TrackedRegattaRegistry; import com.sap.sailing.domain.tracking.TrackerManager; +import com.sap.sailing.domain.tracking.TrackingConnectorInfo; import com.sap.sailing.domain.tracking.WindStore; import com.sap.sailing.domain.tracking.WindTracker; import com.sap.sse.common.PairingListCreationException; @@ -319,7 +320,7 @@ public interface RacingEventService extends TrackedRegattaRegistry, RegattaFetch void updateStoredLeaderboardGroup(LeaderboardGroup leaderboardGroup); DynamicTrackedRace createTrackedRace(RegattaAndRaceIdentifier raceIdentifier, WindStore windStore, - long delayToLiveInMillis, long millisecondsOverWhichToAverageWind, long millisecondsOverWhichToAverageSpeed, boolean useMarkPassingCalculator, String trackingConnector); + long delayToLiveInMillis, long millisecondsOverWhichToAverageWind, long millisecondsOverWhichToAverageSpeed, boolean useMarkPassingCalculator, TrackingConnectorInfo trackingConnectorInfo); Regatta getOrCreateDefaultRegatta(String name, String boatClassName, Serializable id); diff --git a/java/com.sap.sailing.server.interface/src/com/sap/sailing/server/operationaltransformation/CreateTrackedRace.java b/java/com.sap.sailing.server.interface/src/com/sap/sailing/server/operationaltransformation/CreateTrackedRace.java index e418ed3cbd1..9b436e46031 100755 --- a/java/com.sap.sailing.server.interface/src/com/sap/sailing/server/operationaltransformation/CreateTrackedRace.java +++ b/java/com.sap.sailing.server.interface/src/com/sap/sailing/server/operationaltransformation/CreateTrackedRace.java @@ -7,6 +7,7 @@ import com.sap.sailing.domain.common.RegattaAndRaceIdentifier; import com.sap.sailing.domain.tracking.DynamicTrackedRace; import com.sap.sailing.domain.tracking.TrackedRace; import com.sap.sailing.domain.tracking.TrackedRegatta; +import com.sap.sailing.domain.tracking.TrackingConnectorInfo; import com.sap.sailing.domain.tracking.WindStore; import com.sap.sailing.domain.tracking.impl.EmptyWindStore; import com.sap.sailing.server.interfaces.RacingEventService; @@ -22,11 +23,11 @@ import com.sap.sailing.server.interfaces.RacingEventServiceOperation; * */ public class CreateTrackedRace extends AbstractRaceOperation { - private static final long serialVersionUID = -3707097845987093245L; + private static final long serialVersionUID = 7164691177800524484L; private final long millisecondsOverWhichToAverageWind; private final long millisecondsOverWhichToAverageSpeed; private final long delayToLiveInMillis; - private final String trackingConnector; + private final TrackingConnectorInfo trackingConnectorInfo; /** * If a {@link WindStore} is provided to this command, it will be used for the construction of the tracked race. @@ -41,13 +42,13 @@ public class CreateTrackedRace extends AbstractRaceOperation * won't be serialized. A receiver of this operation will therefore always use an {@link EmptyWindStore}. */ public CreateTrackedRace(RegattaAndRaceIdentifier raceIdentifier, WindStore windStore, long delayToLiveInMillis, - long millisecondsOverWhichToAverageWind, long millisecondsOverWhichToAverageSpeed, String trackingConnector) { + long millisecondsOverWhichToAverageWind, long millisecondsOverWhichToAverageSpeed, TrackingConnectorInfo trackingConnectorInfo) { super(raceIdentifier); this.windStore = windStore; this.delayToLiveInMillis = delayToLiveInMillis; this.millisecondsOverWhichToAverageWind = millisecondsOverWhichToAverageWind; this.millisecondsOverWhichToAverageSpeed = millisecondsOverWhichToAverageSpeed; - this.trackingConnector = trackingConnector; + this.trackingConnectorInfo = trackingConnectorInfo; } @Override @@ -66,7 +67,7 @@ public class CreateTrackedRace extends AbstractRaceOperation public DynamicTrackedRace internalApplyTo(RacingEventService toState) { return toState.createTrackedRace(getRaceIdentifier(), windStore == null ? EmptyWindStore.INSTANCE : windStore, delayToLiveInMillis, millisecondsOverWhichToAverageWind, - millisecondsOverWhichToAverageSpeed, /* useMarkPassingCalculator */ false, trackingConnector); + millisecondsOverWhichToAverageSpeed, /* useMarkPassingCalculator */ false, trackingConnectorInfo); // no separate mark passing calculations in replica; // Mark passings are computed on master and are replicated separately. // See UpdateMarkPassings diff --git a/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/SearchServiceTest.java b/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/SearchServiceTest.java index ae6e178b850..c9edda83435 100755 --- a/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/SearchServiceTest.java +++ b/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/SearchServiceTest.java @@ -55,11 +55,13 @@ import com.sap.sailing.server.gateway.deserialization.impl.CourseAreaJsonDeseria import com.sap.sailing.server.gateway.deserialization.impl.EventBaseJsonDeserializer; import com.sap.sailing.server.gateway.deserialization.impl.LeaderboardGroupBaseJsonDeserializer; import com.sap.sailing.server.gateway.deserialization.impl.LeaderboardSearchResultBaseJsonDeserializer; +import com.sap.sailing.server.gateway.deserialization.impl.TrackingConnectorInfoJsonDeserializer; import com.sap.sailing.server.gateway.deserialization.impl.VenueJsonDeserializer; import com.sap.sailing.server.gateway.serialization.impl.CourseAreaJsonSerializer; import com.sap.sailing.server.gateway.serialization.impl.EventBaseJsonSerializer; import com.sap.sailing.server.gateway.serialization.impl.LeaderboardGroupBaseJsonSerializer; import com.sap.sailing.server.gateway.serialization.impl.LeaderboardSearchResultJsonSerializer; +import com.sap.sailing.server.gateway.serialization.impl.TrackingConnectorInfoJsonSerializer; import com.sap.sailing.server.gateway.serialization.impl.VenueJsonSerializer; import com.sap.sailing.server.impl.RacingEventServiceImpl; import com.sap.sailing.server.interfaces.RacingEventService; @@ -358,12 +360,12 @@ public class SearchServiceTest { Result searchResults = server.search(new KeywordQuery(Arrays.asList(new String[] { "Buhl" }))); LeaderboardGroupBaseJsonSerializer leaderboardGroupBaseJsonSerializer = new LeaderboardGroupBaseJsonSerializer(); LeaderboardSearchResultJsonSerializer serializer = new LeaderboardSearchResultJsonSerializer(new EventBaseJsonSerializer(new VenueJsonSerializer(new CourseAreaJsonSerializer()), - leaderboardGroupBaseJsonSerializer), + leaderboardGroupBaseJsonSerializer, new TrackingConnectorInfoJsonSerializer()), leaderboardGroupBaseJsonSerializer); LeaderboardGroupBaseJsonDeserializer leaderboardGroupBaseJsonDeserializer = new LeaderboardGroupBaseJsonDeserializer(); LeaderboardSearchResultBaseJsonDeserializer deserializer = new LeaderboardSearchResultBaseJsonDeserializer( new EventBaseJsonDeserializer(new VenueJsonDeserializer(new CourseAreaJsonDeserializer(DomainFactory.INSTANCE)), - leaderboardGroupBaseJsonDeserializer), leaderboardGroupBaseJsonDeserializer); + leaderboardGroupBaseJsonDeserializer, new TrackingConnectorInfoJsonDeserializer()), leaderboardGroupBaseJsonDeserializer); final LeaderboardSearchResult expected = searchResults.getHits().iterator().next(); LeaderboardSearchResultBase deserialized = deserializer.deserialize(serializer.serialize(expected)); assertEquals("Pfingstbusch (470)", deserialized.getRegattaName()); diff --git a/java/com.sap.sailing.server.test/src/com/sap/sailing/server/util/EventUtilTest.java b/java/com.sap.sailing.server.test/src/com/sap/sailing/server/util/EventUtilTest.java index 4d8dcf904d4..6e9e973e147 100644 --- a/java/com.sap.sailing.server.test/src/com/sap/sailing/server/util/EventUtilTest.java +++ b/java/com.sap.sailing.server.test/src/com/sap/sailing/server/util/EventUtilTest.java @@ -22,7 +22,7 @@ public class EventUtilTest { Calendar calendar = Calendar.getInstance(); calendar.set(year, month - 1, date); MillisecondsTimePoint startEnd = new MillisecondsTimePoint(calendar.getTime()); - return new StrippedEventImpl("Test", startEnd, startEnd, "Anywhere", true, UUID.randomUUID(), null, false); + return new StrippedEventImpl("Test", startEnd, startEnd, "Anywhere", true, UUID.randomUUID(), null, null); } } 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 8034a2b6fbe..68b14282630 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 @@ -211,6 +211,7 @@ import com.sap.sailing.domain.tracking.WindTrackerFactory; import com.sap.sailing.domain.tracking.impl.AbstractRaceChangeListener; import com.sap.sailing.domain.tracking.impl.DynamicTrackedRegattaImpl; import com.sap.sailing.domain.tracking.impl.TrackedRaceImpl; +import com.sap.sailing.domain.tracking.TrackingConnectorInfo; import com.sap.sailing.domain.windestimation.WindEstimationFactoryService; import com.sap.sailing.expeditionconnector.ExpeditionTrackerFactory; import com.sap.sailing.server.Replicator; @@ -222,6 +223,7 @@ import com.sap.sailing.server.gateway.deserialization.impl.CourseAreaJsonDeseria import com.sap.sailing.server.gateway.deserialization.impl.EventBaseJsonDeserializer; import com.sap.sailing.server.gateway.deserialization.impl.LeaderboardGroupBaseJsonDeserializer; import com.sap.sailing.server.gateway.deserialization.impl.LeaderboardSearchResultBaseJsonDeserializer; +import com.sap.sailing.server.gateway.deserialization.impl.TrackingConnectorInfoJsonDeserializer; import com.sap.sailing.server.gateway.deserialization.impl.VenueJsonDeserializer; import com.sap.sailing.server.interfaces.DataImportLockWithProgress; import com.sap.sailing.server.interfaces.RacingEventService; @@ -879,11 +881,11 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes Iterable sidelines, WindStore windStore, long delayToLiveInMillis, long millisecondsOverWhichToAverageWind, long millisecondsOverWhichToAverageSpeed, DynamicRaceDefinitionSet raceDefinitionSetToUpdate, boolean useMarkPassingCalculator, - RaceLogAndTrackedRaceResolver raceLogResolver, Optional threadLocalTransporter, String trackingConnector) { + RaceLogAndTrackedRaceResolver raceLogResolver, Optional threadLocalTransporter, TrackingConnectorInfo trackingConnectorInfo) { final DynamicTrackedRace trackedRace = super.createTrackedRace(trackedRegatta, raceDefinition, sidelines, windStore, delayToLiveInMillis, millisecondsOverWhichToAverageWind, millisecondsOverWhichToAverageSpeed, raceDefinitionSetToUpdate, - useMarkPassingCalculator, raceLogResolver, threadLocalTransporter, trackingConnector); + useMarkPassingCalculator, raceLogResolver, threadLocalTransporter, trackingConnectorInfo); getSecurityService().migrateOwnership(trackedRace); return trackedRace; } @@ -1962,13 +1964,13 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes @Override public DynamicTrackedRace createTrackedRace(RegattaAndRaceIdentifier raceIdentifier, WindStore windStore, long delayToLiveInMillis, long millisecondsOverWhichToAverageWind, - long millisecondsOverWhichToAverageSpeed, boolean useMarkPassingCalculator, String trackingConnector) { + long millisecondsOverWhichToAverageSpeed, boolean useMarkPassingCalculator, TrackingConnectorInfo trackingConnectorInfo) { DynamicTrackedRegatta trackedRegatta = getOrCreateTrackedRegatta(getRegatta(raceIdentifier)); RaceDefinition race = getRace(raceIdentifier); return trackedRegatta.createTrackedRace(race, Collections. emptyList(), windStore, delayToLiveInMillis, millisecondsOverWhichToAverageWind, millisecondsOverWhichToAverageSpeed, /* raceDefinitionSetToUpdate */null, useMarkPassingCalculator, /* raceLogResolver */ this, - Optional.of(this.getThreadLocalTransporterForCurrentlyFillingFromInitialLoadOrApplyingOperationReceivedFromMaster()), trackingConnector); + Optional.of(this.getThreadLocalTransporterForCurrentlyFillingFromInitialLoadOrApplyingOperationReceivedFromMaster()), trackingConnectorInfo); } private void ensureRegattaIsObservedForDefaultLeaderboardAndAutoLeaderboardLinking( @@ -2029,7 +2031,7 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes // replicate the addition of the tracked race: CreateTrackedRace op = new CreateTrackedRace(trackedRace.getRaceIdentifier(), trackedRace.getWindStore(), trackedRace.getDelayToLiveInMillis(), trackedRace.getMillisecondsOverWhichToAverageWind(), - trackedRace.getMillisecondsOverWhichToAverageSpeed(), trackedRace.getTrackingConnector()); + trackedRace.getMillisecondsOverWhichToAverageSpeed(), trackedRace.getTrackingConnectorInfo()); replicate(op); linkRaceToConfiguredLeaderboardColumns(trackedRace); TrackedRaceReplicatorAndNotifier trackedRaceReplicator = new TrackedRaceReplicatorAndNotifier(trackedRace); @@ -4070,7 +4072,7 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes final LeaderboardGroupBaseJsonDeserializer leaderboardGroupBaseJsonDeserializer = new LeaderboardGroupBaseJsonDeserializer(); LeaderboardSearchResultBaseJsonDeserializer deserializer = new LeaderboardSearchResultBaseJsonDeserializer( new EventBaseJsonDeserializer(new VenueJsonDeserializer(new CourseAreaJsonDeserializer( - DomainFactory.INSTANCE)), leaderboardGroupBaseJsonDeserializer), + DomainFactory.INSTANCE)), leaderboardGroupBaseJsonDeserializer, new TrackingConnectorInfoJsonDeserializer()), leaderboardGroupBaseJsonDeserializer); result = new ResultImpl(query, new LeaderboardSearchResultBaseRanker()); diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RemoteSailingServerSet.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RemoteSailingServerSet.java index 0442980665b..ee1b9579b52 100644 --- a/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RemoteSailingServerSet.java +++ b/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RemoteSailingServerSet.java @@ -41,6 +41,7 @@ import com.sap.sailing.server.gateway.deserialization.impl.EventBaseJsonDeserial import com.sap.sailing.server.gateway.deserialization.impl.LeaderboardGroupBaseJsonDeserializer; import com.sap.sailing.server.gateway.deserialization.impl.StatisticsByYearJsonDeserializer; import com.sap.sailing.server.gateway.deserialization.impl.StatisticsJsonDeserializer; +import com.sap.sailing.server.gateway.deserialization.impl.TrackingConnectorInfoJsonDeserializer; import com.sap.sailing.server.gateway.deserialization.impl.VenueJsonDeserializer; import com.sap.sailing.server.gateway.serialization.impl.DetailedRaceInfoJsonSerializer; import com.sap.sailing.server.gateway.serialization.impl.SimpleRaceInfoJsonSerializer; @@ -249,7 +250,7 @@ public class RemoteSailingServerSet { Object eventsAsObject = parser.parse(bufferedReader); EventBaseJsonDeserializer deserializer = new EventBaseJsonDeserializer( new VenueJsonDeserializer(new CourseAreaJsonDeserializer(DomainFactory.INSTANCE)), - new LeaderboardGroupBaseJsonDeserializer()); + new LeaderboardGroupBaseJsonDeserializer(), new TrackingConnectorInfoJsonDeserializer()); JSONArray eventsAsJsonArray = (JSONArray) eventsAsObject; final Set events = new HashSet<>(); for (Object eventAsObject : eventsAsJsonArray) { diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/security/PermissionAwareRaceTrackingHandler.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/security/PermissionAwareRaceTrackingHandler.java index 8a853513939..5dd92e8310b 100644 --- a/java/com.sap.sailing.server/src/com/sap/sailing/server/security/PermissionAwareRaceTrackingHandler.java +++ b/java/com.sap.sailing.server/src/com/sap/sailing/server/security/PermissionAwareRaceTrackingHandler.java @@ -32,6 +32,7 @@ import com.sap.sailing.domain.tracking.RaceTrackingHandler; import com.sap.sailing.domain.tracking.RaceTrackingHandler.DefaultRaceTrackingHandler; import com.sap.sailing.domain.tracking.TrackedRace; import com.sap.sailing.domain.tracking.TrackedRegatta; +import com.sap.sailing.domain.tracking.TrackingConnectorInfo; import com.sap.sailing.domain.tracking.WindStore; import com.sap.sse.common.Color; import com.sap.sse.common.Duration; @@ -103,11 +104,11 @@ public class PermissionAwareRaceTrackingHandler extends DefaultRaceTrackingHandl Iterable sidelines, WindStore windStore, long delayToLiveInMillis, long millisecondsOverWhichToAverageWind, long millisecondsOverWhichToAverageSpeed, DynamicRaceDefinitionSet raceDefinitionSetToUpdate, boolean useMarkPassingCalculator, - RaceLogAndTrackedRaceResolver raceLogResolver, Optional threadLocalTransporter, String trackingConnector) { + RaceLogAndTrackedRaceResolver raceLogResolver, Optional threadLocalTransporter, TrackingConnectorInfo trackingConnectorInfo) { return setOwnershipForRace(new RegattaNameAndRaceName(trackedRegatta.getRegatta().getName(), raceDefinition.getName()), () -> super.createTrackedRace(trackedRegatta, raceDefinition, sidelines, windStore, delayToLiveInMillis, millisecondsOverWhichToAverageWind, millisecondsOverWhichToAverageSpeed, - raceDefinitionSetToUpdate, useMarkPassingCalculator, raceLogResolver, threadLocalTransporter, trackingConnector)); + raceDefinitionSetToUpdate, useMarkPassingCalculator, raceLogResolver, threadLocalTransporter, trackingConnectorInfo)); } @Override From a58f996de5748bd229c6d4946b35c82dd4c132ff Mon Sep 17 00:00:00 2001 From: Dennis Aulenbacher Date: Fri, 29 Nov 2019 17:42:25 +0100 Subject: [PATCH 02/44] introduced new widget for desktop EventHeader, holding potentially multiple data-by logos --- .../partials/databylogo/DataByLogo.gss | 27 ++++++++++ .../partials/databylogo/DataByLogo.java | 51 +++++++++++++++++++ .../partials/databylogo/DataByLogo.ui.xml | 12 +++++ .../databylogo/DataByLogoResources.java | 25 +++++++++ .../tractrac-color.svg | 0 .../partials/eventheader/EventHeader.gss | 8 --- .../partials/eventheader/EventHeader.java | 15 ++---- .../partials/eventheader/EventHeader.ui.xml | 5 +- .../eventheader/EventHeaderResources.java | 8 --- 9 files changed, 119 insertions(+), 32 deletions(-) create mode 100644 java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/databylogo/DataByLogo.gss create mode 100644 java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/databylogo/DataByLogo.java create mode 100644 java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/databylogo/DataByLogo.ui.xml create mode 100644 java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/databylogo/DataByLogoResources.java rename java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/{eventheader => databylogo}/tractrac-color.svg (100%) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/databylogo/DataByLogo.gss b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/databylogo/DataByLogo.gss new file mode 100644 index 00000000000..638cd5a5d58 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/databylogo/DataByLogo.gss @@ -0,0 +1,27 @@ +.eventheader_dataBy_logo_container{ + display: inline-block; + white-space: nowrap; + font-size: 0.75em; + cursor: pointer; + +} +.eventheader_dataBy_logo{ + height: 1.3333333em !important; +} + +.eventheader_dataBy_subtleLink, +.eventheader_dataBy_subtleLink:hover, +.eventheader_dataBy_subtleLink:active, +.eventheader_dataBy_subtleLink:visited, +.eventheader_dataBy_subtleLink:focus { + text-decoration: none; + color: black; +} + +.eventheader_intro_details_item { + display: inline-block; + border-left: 1px solid #cfcfcf; + margin: 0.266666666666667em 0 0.266666666666667em 0.333333333333333em; + padding-left: 0.666666666666667em; + color: #666; +} \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/databylogo/DataByLogo.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/databylogo/DataByLogo.java new file mode 100644 index 00000000000..cb4edaf70ba --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/databylogo/DataByLogo.java @@ -0,0 +1,51 @@ +package com.sap.sailing.gwt.home.desktop.partials.databylogo; + +import java.util.Set; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.AnchorElement; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.Image; +import com.google.gwt.user.client.ui.Widget; +import com.sap.sailing.gwt.home.communication.eventview.EventViewDTO; +import com.sap.sailing.gwt.home.communication.eventview.TrackingConnectorInfoDTO; + +public class DataByLogo extends Composite { + + private static SharingButtonsUiBinder uiBinder = GWT.create(SharingButtonsUiBinder.class); + + interface SharingButtonsUiBinder extends UiBinder { + } + + @UiField + AnchorElement dataByContainer; + @UiField + Image logo; + + public DataByLogo() { + DataByLogoResources.INSTANCE.css().ensureInjected(); + initWidget(uiBinder.createAndBindUi(this)); + } + + public void setUp(EventViewDTO event) { + Set trackingConnectorInfos = event.getTrackingConnectorInfos(); + boolean istrackedByTracTrac = false; + for (TrackingConnectorInfoDTO trackingConnectorInfo : trackingConnectorInfos) { + if ("TracTrac".equals(trackingConnectorInfo.getTrackedBy())) { + istrackedByTracTrac = true; + logo.setUrl(DataByLogoResources.INSTANCE.tractrac().getSafeUri()); + String webUrl = trackingConnectorInfo.getWebUrl(); + if (webUrl == null || "".equals(trackingConnectorInfo.getWebUrl())) { + dataByContainer.setHref("https://www.tractrac.com/"); + }else { + dataByContainer.setHref(webUrl); + } + } + } + if (!istrackedByTracTrac) { + this.removeFromParent(); + } + } +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/databylogo/DataByLogo.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/databylogo/DataByLogo.ui.xml new file mode 100644 index 00000000000..7f88b525de6 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/databylogo/DataByLogo.ui.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/databylogo/DataByLogoResources.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/databylogo/DataByLogoResources.java new file mode 100644 index 00000000000..6954ea82899 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/databylogo/DataByLogoResources.java @@ -0,0 +1,25 @@ +package com.sap.sailing.gwt.home.desktop.partials.databylogo; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.resources.client.CssResource; +import com.google.gwt.resources.client.DataResource; +import com.google.gwt.resources.client.DataResource.MimeType; +import com.sap.sailing.gwt.home.shared.resources.SharedHomeResources; + +public interface DataByLogoResources extends SharedHomeResources { + public static final DataByLogoResources INSTANCE = GWT.create(DataByLogoResources.class); + + @Source("DataByLogo.gss") + LocalCss css(); + + @Source("tractrac-color.svg") + @MimeType("image/svg+xml") + DataResource tractrac(); + + public interface LocalCss extends CssResource { + String eventheader_dataBy_logo_container(); + String eventheader_dataBy_logo(); + String eventheader_dataBy_subtleLink(); + String eventheader_intro_details_item(); + } +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/tractrac-color.svg b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/databylogo/tractrac-color.svg similarity index 100% rename from java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/tractrac-color.svg rename to java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/databylogo/tractrac-color.svg diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.gss b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.gss index 773af70e463..a248892844d 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.gss +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.gss @@ -191,14 +191,6 @@ .eventheader_status_body { font-size: 1rem; } -.eventheader_dataBy_logo_container{ - display: inline-block; - white-space: nowrap; - font-size: 0.75em; -} -.eventheader_dataBy_logo{ - height: 1.3333333em !important; -} .locationicon { vertical-align: text-bottom; margin-right: 0.333333333333333em; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.java index bef176413bc..8bc27f46f3a 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.java @@ -19,7 +19,7 @@ import com.google.gwt.user.client.ui.UIObject; import com.google.gwt.user.client.ui.Widget; import com.sap.sailing.gwt.home.communication.eventview.EventViewDTO; import com.sap.sailing.gwt.home.communication.eventview.HasRegattaMetadata; -import com.sap.sailing.gwt.home.communication.eventview.TrackingConnectorInfoDTO; +import com.sap.sailing.gwt.home.desktop.partials.databylogo.DataByLogo; import com.sap.sailing.gwt.home.desktop.partials.sharing.SharingButtons; import com.sap.sailing.gwt.home.desktop.partials.sharing.SharingMetadataProvider; import com.sap.sailing.gwt.home.desktop.places.event.EventView; @@ -61,7 +61,7 @@ public class EventHeader extends Composite { @UiField DivElement courseAreaUi; @UiField FlowPanel dropdownContent; @UiField SharingButtons sharing; - @UiField AnchorElement tractracLogoContainer; + @UiField DataByLogo dataByLogo; private EventViewDTO event; private Presenter presenter; @@ -151,16 +151,7 @@ public class EventHeader extends Composite { } hide(competitors, races, courseAreaUi, eventCategory); } - boolean trackedByTracTrac = false; - for(TrackingConnectorInfoDTO trackingConnectorInfo : event.getTrackingConnectorInfos()) { - if("TracTrac".equals(trackingConnectorInfo.getTrackedBy())) { - trackedByTracTrac = true; - break; - } - } - if(!trackedByTracTrac) { - hide(tractracLogoContainer); - } + dataByLogo.setUp(event); initTitleAndSelection(nameToShow); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.ui.xml index a0689a934d9..68eaa2d25ba 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.ui.xml +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.ui.xml @@ -46,10 +46,7 @@ - - - - +
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeaderResources.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeaderResources.java index 4c234492096..f2e43ca7729 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeaderResources.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeaderResources.java @@ -2,8 +2,6 @@ package com.sap.sailing.gwt.home.desktop.partials.eventheader; import com.google.gwt.core.client.GWT; import com.google.gwt.resources.client.CssResource; -import com.google.gwt.resources.client.DataResource; -import com.google.gwt.resources.client.DataResource.MimeType; import com.google.gwt.resources.client.ImageResource; import com.sap.sailing.gwt.home.desktop.resources.SharedDesktopResources; @@ -16,10 +14,6 @@ public interface EventHeaderResources extends SharedDesktopResources { @Source("location-icon.png") ImageResource location(); - @Source("tractrac-color.svg") - @MimeType("image/svg+xml") - DataResource tractrac(); - public interface LocalCss extends CssResource { String jsdropdown(); String jsdropdown_head(); @@ -47,8 +41,6 @@ public interface EventHeaderResources extends SharedDesktopResources { String eventheader_status(); String eventheader_status_title(); String eventheader_status_body(); - String eventheader_dataBy_logo(); - String eventheader_dataBy_logo_container(); String locationicon(); String eventnavigation(); String eventnavigationnormal(); From e04083cf761817636cc535c43e7c49ced47ed9c6 Mon Sep 17 00:00:00 2001 From: Dennis Aulenbacher Date: Mon, 2 Dec 2019 14:39:12 +0100 Subject: [PATCH 03/44] Generalized dataByLogo. Also implemented in mobile and desktop --- .../client/shared/databylogo/DataByLogo.gss | 19 +++++++++++++ .../shared}/databylogo/DataByLogo.java | 20 +++++++------- .../shared/databylogo/DataByLogo.ui.xml | 10 +++++++ .../databylogo/DataByLogoResources.java | 9 +++---- .../shared}/databylogo/tractrac-color.svg | 0 .../partials/databylogo/DataByLogo.gss | 27 ------------------- .../partials/databylogo/DataByLogo.ui.xml | 12 --------- .../partials/eventheader/EventHeader.gss | 6 +++++ .../partials/eventheader/EventHeader.java | 2 +- .../partials/eventheader/EventHeader.ui.xml | 5 ++-- .../eventheader/EventHeaderResources.java | 1 + .../partials/eventheader/EventHeader.gss | 14 +++------- .../partials/eventheader/EventHeader.java | 18 ++++--------- .../partials/eventheader/EventHeader.ui.xml | 5 +--- .../eventheader/EventHeaderResources.java | 9 ------- .../partials/eventheader/tractrac-color.svg | 1 - 16 files changed, 63 insertions(+), 95 deletions(-) create mode 100644 java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.gss rename java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/{desktop/partials => client/shared}/databylogo/DataByLogo.java (70%) create mode 100644 java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.ui.xml rename java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/{desktop/partials => client/shared}/databylogo/DataByLogoResources.java (71%) rename java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/{desktop/partials => client/shared}/databylogo/tractrac-color.svg (100%) delete mode 100644 java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/databylogo/DataByLogo.gss delete mode 100644 java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/databylogo/DataByLogo.ui.xml delete mode 100644 java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/eventheader/tractrac-color.svg diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.gss b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.gss new file mode 100644 index 00000000000..a73d6e6cb8f --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.gss @@ -0,0 +1,19 @@ +.databylogo_logo{ + height: 1.3333333em !important; +} + +.databylogo_subtlelink, +.databylogo_subtlelink:hover, +.databylogo_subtlelink:active, +.databylogo_subtlelink:visited, +.databylogo_subtlelink:focus { + text-decoration: none; + color: black; +} + +.databylogo_container{ + display: inline-block; + white-space: nowrap; + font-size: 0.75em; + cursor: pointer; +} \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/databylogo/DataByLogo.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.java similarity index 70% rename from java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/databylogo/DataByLogo.java rename to java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.java index cb4edaf70ba..d06dd716eec 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/databylogo/DataByLogo.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.java @@ -1,32 +1,32 @@ -package com.sap.sailing.gwt.home.desktop.partials.databylogo; +package com.sap.sailing.gwt.home.client.shared.databylogo; import java.util.Set; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.AnchorElement; +import com.google.gwt.dom.client.Element; +import com.google.gwt.dom.client.ImageElement; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; -import com.google.gwt.user.client.ui.Composite; -import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.Widget; import com.sap.sailing.gwt.home.communication.eventview.EventViewDTO; import com.sap.sailing.gwt.home.communication.eventview.TrackingConnectorInfoDTO; -public class DataByLogo extends Composite { +public class DataByLogo extends Widget { - private static SharingButtonsUiBinder uiBinder = GWT.create(SharingButtonsUiBinder.class); + private static DataByLogoUiBinder uiBinder = GWT.create(DataByLogoUiBinder.class); - interface SharingButtonsUiBinder extends UiBinder { + interface DataByLogoUiBinder extends UiBinder { } @UiField AnchorElement dataByContainer; @UiField - Image logo; + ImageElement logo; public DataByLogo() { DataByLogoResources.INSTANCE.css().ensureInjected(); - initWidget(uiBinder.createAndBindUi(this)); + setElement(uiBinder.createAndBindUi(this)); } public void setUp(EventViewDTO event) { @@ -35,7 +35,7 @@ public class DataByLogo extends Composite { for (TrackingConnectorInfoDTO trackingConnectorInfo : trackingConnectorInfos) { if ("TracTrac".equals(trackingConnectorInfo.getTrackedBy())) { istrackedByTracTrac = true; - logo.setUrl(DataByLogoResources.INSTANCE.tractrac().getSafeUri()); + logo.setSrc(DataByLogoResources.INSTANCE.tractrac().getSafeUri().asString()); String webUrl = trackingConnectorInfo.getWebUrl(); if (webUrl == null || "".equals(trackingConnectorInfo.getWebUrl())) { dataByContainer.setHref("https://www.tractrac.com/"); @@ -45,7 +45,7 @@ public class DataByLogo extends Composite { } } if (!istrackedByTracTrac) { - this.removeFromParent(); + this.setVisible(false); } } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.ui.xml new file mode 100644 index 00000000000..e0ab2c22efa --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.ui.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/databylogo/DataByLogoResources.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogoResources.java similarity index 71% rename from java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/databylogo/DataByLogoResources.java rename to java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogoResources.java index 6954ea82899..89196774b97 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/databylogo/DataByLogoResources.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogoResources.java @@ -1,4 +1,4 @@ -package com.sap.sailing.gwt.home.desktop.partials.databylogo; +package com.sap.sailing.gwt.home.client.shared.databylogo; import com.google.gwt.core.client.GWT; import com.google.gwt.resources.client.CssResource; @@ -17,9 +17,8 @@ public interface DataByLogoResources extends SharedHomeResources { DataResource tractrac(); public interface LocalCss extends CssResource { - String eventheader_dataBy_logo_container(); - String eventheader_dataBy_logo(); - String eventheader_dataBy_subtleLink(); - String eventheader_intro_details_item(); + String databylogo_logo(); + String databylogo_subtlelink(); + String databylogo_container(); } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/databylogo/tractrac-color.svg b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/tractrac-color.svg similarity index 100% rename from java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/databylogo/tractrac-color.svg rename to java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/tractrac-color.svg diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/databylogo/DataByLogo.gss b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/databylogo/DataByLogo.gss deleted file mode 100644 index 638cd5a5d58..00000000000 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/databylogo/DataByLogo.gss +++ /dev/null @@ -1,27 +0,0 @@ -.eventheader_dataBy_logo_container{ - display: inline-block; - white-space: nowrap; - font-size: 0.75em; - cursor: pointer; - -} -.eventheader_dataBy_logo{ - height: 1.3333333em !important; -} - -.eventheader_dataBy_subtleLink, -.eventheader_dataBy_subtleLink:hover, -.eventheader_dataBy_subtleLink:active, -.eventheader_dataBy_subtleLink:visited, -.eventheader_dataBy_subtleLink:focus { - text-decoration: none; - color: black; -} - -.eventheader_intro_details_item { - display: inline-block; - border-left: 1px solid #cfcfcf; - margin: 0.266666666666667em 0 0.266666666666667em 0.333333333333333em; - padding-left: 0.666666666666667em; - color: #666; -} \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/databylogo/DataByLogo.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/databylogo/DataByLogo.ui.xml deleted file mode 100644 index 7f88b525de6..00000000000 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/databylogo/DataByLogo.ui.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.gss b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.gss index a248892844d..8b180a719a3 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.gss +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.gss @@ -266,3 +266,9 @@ font-size: 1.2rem; } +.eventheader_databylogo{ + display: inline-block; + white-space: nowrap; + font-size: 0.75em; + cursor: pointer; +} \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.java index 8bc27f46f3a..80bf8145016 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.java @@ -17,9 +17,9 @@ import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.UIObject; import com.google.gwt.user.client.ui.Widget; +import com.sap.sailing.gwt.home.client.shared.databylogo.DataByLogo; import com.sap.sailing.gwt.home.communication.eventview.EventViewDTO; import com.sap.sailing.gwt.home.communication.eventview.HasRegattaMetadata; -import com.sap.sailing.gwt.home.desktop.partials.databylogo.DataByLogo; import com.sap.sailing.gwt.home.desktop.partials.sharing.SharingButtons; import com.sap.sailing.gwt.home.desktop.partials.sharing.SharingMetadataProvider; import com.sap.sailing.gwt.home.desktop.places.event.EventView; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.ui.xml index 68eaa2d25ba..134551fea16 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.ui.xml +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.ui.xml @@ -1,6 +1,7 @@ + xmlns:dp="urn:import:com.sap.sailing.gwt.home.desktop.partials" + xmlns:s="urn:import:com.sap.sailing.gwt.home.client.shared"> @@ -46,7 +47,7 @@
- +
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeaderResources.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeaderResources.java index f2e43ca7729..b89a804ce64 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeaderResources.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeaderResources.java @@ -51,6 +51,7 @@ public interface EventHeaderResources extends SharedDesktopResources { String eventnavigation_dropdown_containerhidden(); String navbar_button(); String navbar_buttonhidden(); + String eventheader_databylogo(); } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/eventheader/EventHeader.gss b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/eventheader/EventHeader.gss index 9251478cbe5..39dac52d339 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/eventheader/EventHeader.gss +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/eventheader/EventHeader.gss @@ -9,7 +9,8 @@ transition: top 0.3s ease-in-out; } .eventheader_with_logo{ - padding-bottom: 1.5em; + padding-bottom: 0.5em; + position: relative; } .eventheader_info { padding: 0.666666666666667em 0 0 0.666666666666667em; @@ -56,18 +57,9 @@ .eventheader_info_subtitle_info_location { visibility: visible; } -.eventheader_info_subtitle_dataBy_logo{ - height: 1.33333em !important; -} + .eventheader_info_subtitle_dataBy_logo_container{ position:absolute; bottom:0.25em; right:0.25em; - font-size: 0.75em; - display: inline-block; - color: black; -} - -.subtleLink, .subtleLink:hover, .subtleLink:active, .subtleLink:visited, .subtleLink:focus { - text-decoration: none; } \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/eventheader/EventHeader.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/eventheader/EventHeader.java index 8185ba25501..bb40abfd850 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/eventheader/EventHeader.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/eventheader/EventHeader.java @@ -9,8 +9,8 @@ import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.Widget; +import com.sap.sailing.gwt.home.client.shared.databylogo.DataByLogo; import com.sap.sailing.gwt.home.communication.eventview.EventViewDTO; -import com.sap.sailing.gwt.home.communication.eventview.TrackingConnectorInfoDTO; import com.sap.sailing.gwt.home.shared.app.PlaceNavigation; import com.sap.sailing.gwt.home.shared.utils.EventDatesFormatterUtil; import com.sap.sailing.gwt.home.shared.utils.LabelTypeUtil; @@ -30,7 +30,7 @@ public class EventHeader extends Composite { @UiField DivElement eventDateUi; @UiField DivElement eventLocationUi; @UiField DivElement eventHeader; - @UiField AnchorElement tractracLogoContainer; + @UiField DataByLogo dataByLogo; public EventHeader(EventViewDTO event, String optionalRegattaDisplayName, PlaceNavigation logoNavigation) { EventHeaderResources.INSTANCE.css().ensureInjected(); @@ -51,17 +51,9 @@ public class EventHeader extends Composite { if (logoNavigation != null) { logoNavigation.configureAnchorElement(eventLogoUi); } - boolean trackedByTracTrac = false; - for(TrackingConnectorInfoDTO trackingConnectorInfo : event.getTrackingConnectorInfos()) { - if("TracTrac".equals(trackingConnectorInfo.getTrackedBy())) { - trackedByTracTrac = true; - break; - } - } - if (trackedByTracTrac) { - eventHeader.addClassName(EventHeaderResources.INSTANCE.css().eventheader_with_logo()); - } else { - tractracLogoContainer.removeFromParent(); + dataByLogo.setUp(event); + if (dataByLogo.isVisible()) { + this.addStyleName(EventHeaderResources.INSTANCE.css().eventheader_with_logo()); } eventDateUi.setInnerText(EventDatesFormatterUtil.formatDateRangeWithYear(event.getStartDate(), event.getEndDate())); eventLocationUi.setInnerText(event.getLocationAndVenueAndCountry()); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/eventheader/EventHeader.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/eventheader/EventHeader.ui.xml index 41caf3ae73d..9ee11cbaee8 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/eventheader/EventHeader.ui.xml +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/eventheader/EventHeader.ui.xml @@ -40,11 +40,8 @@
- - - - + \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/eventheader/EventHeaderResources.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/eventheader/EventHeaderResources.java index 5fad1639d99..70ff8be5494 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/eventheader/EventHeaderResources.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/eventheader/EventHeaderResources.java @@ -3,19 +3,12 @@ package com.sap.sailing.gwt.home.mobile.partials.eventheader; import com.google.gwt.core.client.GWT; import com.google.gwt.resources.client.ClientBundle; import com.google.gwt.resources.client.CssResource; -import com.google.gwt.resources.client.DataResource; -import com.google.gwt.resources.client.DataResource.MimeType; public interface EventHeaderResources extends ClientBundle { public static final EventHeaderResources INSTANCE = GWT.create(EventHeaderResources.class); @Source("EventHeader.gss") LocalCss css(); - - @Source("tractrac-color.svg") - @MimeType("image/svg+xml") - DataResource tractrac(); - public interface LocalCss extends CssResource { String eventheader(); @@ -31,8 +24,6 @@ public interface EventHeaderResources extends ClientBundle { String eventheader_info_subtitle_info(); String eventheader_info_subtitle_info_date(); String eventheader_info_subtitle_info_location(); - String eventheader_info_subtitle_dataBy_logo(); String eventheader_info_subtitle_dataBy_logo_container(); - String subtleLink(); } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/eventheader/tractrac-color.svg b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/eventheader/tractrac-color.svg deleted file mode 100644 index 96662ddb01b..00000000000 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/eventheader/tractrac-color.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file From 40cd81ce023283cd9adb5774d33f6c4c2748024e Mon Sep 17 00:00:00 2001 From: Dennis Aulenbacher Date: Mon, 2 Dec 2019 15:12:32 +0100 Subject: [PATCH 04/44] introduced color option for DataByLogo widget --- .../gwt/home/client/shared/databylogo/DataByLogo.java | 8 ++++++-- .../client/shared/databylogo/DataByLogoResources.java | 6 +++++- .../gwt/home/client/shared/databylogo/tractrac-white.svg | 1 + .../home/desktop/partials/eventheader/EventHeader.java | 2 +- .../gwt/home/mobile/partials/eventheader/EventHeader.java | 2 +- 5 files changed, 14 insertions(+), 5 deletions(-) create mode 100644 java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/tractrac-white.svg diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.java index d06dd716eec..8484956fdbc 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.java @@ -29,13 +29,17 @@ public class DataByLogo extends Widget { setElement(uiBinder.createAndBindUi(this)); } - public void setUp(EventViewDTO event) { + public void setUp(EventViewDTO event, boolean colorIfPossible) { Set trackingConnectorInfos = event.getTrackingConnectorInfos(); boolean istrackedByTracTrac = false; for (TrackingConnectorInfoDTO trackingConnectorInfo : trackingConnectorInfos) { if ("TracTrac".equals(trackingConnectorInfo.getTrackedBy())) { istrackedByTracTrac = true; - logo.setSrc(DataByLogoResources.INSTANCE.tractrac().getSafeUri().asString()); + if(colorIfPossible) { + logo.setSrc(DataByLogoResources.INSTANCE.tractracColor().getSafeUri().asString()); + }else { + logo.setSrc(DataByLogoResources.INSTANCE.tractracWhite().getSafeUri().asString()); + } String webUrl = trackingConnectorInfo.getWebUrl(); if (webUrl == null || "".equals(trackingConnectorInfo.getWebUrl())) { dataByContainer.setHref("https://www.tractrac.com/"); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogoResources.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogoResources.java index 89196774b97..8afbc67e2a5 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogoResources.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogoResources.java @@ -14,7 +14,11 @@ public interface DataByLogoResources extends SharedHomeResources { @Source("tractrac-color.svg") @MimeType("image/svg+xml") - DataResource tractrac(); + DataResource tractracColor(); + + @Source("tractrac-white.svg") + @MimeType("image/svg+xml") + DataResource tractracWhite(); public interface LocalCss extends CssResource { String databylogo_logo(); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/tractrac-white.svg b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/tractrac-white.svg new file mode 100644 index 00000000000..eba4e0347c8 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/tractrac-white.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.java index 80bf8145016..947d824533c 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.java @@ -151,7 +151,7 @@ public class EventHeader extends Composite { } hide(competitors, races, courseAreaUi, eventCategory); } - dataByLogo.setUp(event); + dataByLogo.setUp(event, true); initTitleAndSelection(nameToShow); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/eventheader/EventHeader.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/eventheader/EventHeader.java index bb40abfd850..c6019fff917 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/eventheader/EventHeader.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/eventheader/EventHeader.java @@ -51,7 +51,7 @@ public class EventHeader extends Composite { if (logoNavigation != null) { logoNavigation.configureAnchorElement(eventLogoUi); } - dataByLogo.setUp(event); + dataByLogo.setUp(event, true); if (dataByLogo.isVisible()) { this.addStyleName(EventHeaderResources.INSTANCE.css().eventheader_with_logo()); } From 43d297c259664b8113fc0ffddd8941b6416fb446 Mon Sep 17 00:00:00 2001 From: Dennis Aulenbacher Date: Mon, 2 Dec 2019 17:35:08 +0100 Subject: [PATCH 05/44] font color is no longer set by DataByLogo itself --- .../sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.gss | 1 - .../gwt/home/desktop/partials/eventheader/EventHeader.gss | 1 + .../sailing/gwt/home/mobile/partials/eventheader/EventHeader.gss | 1 + 3 files changed, 2 insertions(+), 1 deletion(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.gss b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.gss index a73d6e6cb8f..6543486b051 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.gss +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.gss @@ -8,7 +8,6 @@ .databylogo_subtlelink:visited, .databylogo_subtlelink:focus { text-decoration: none; - color: black; } .databylogo_container{ diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.gss b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.gss index 8b180a719a3..7912512e2c3 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.gss +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.gss @@ -267,6 +267,7 @@ } .eventheader_databylogo{ + color: black; display: inline-block; white-space: nowrap; font-size: 0.75em; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/eventheader/EventHeader.gss b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/eventheader/EventHeader.gss index 39dac52d339..85325907188 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/eventheader/EventHeader.gss +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/eventheader/EventHeader.gss @@ -59,6 +59,7 @@ } .eventheader_info_subtitle_dataBy_logo_container{ + color: black; position:absolute; bottom:0.25em; right:0.25em; From 408c3bf42515254b31e1b8b6149f644e38f28ca9 Mon Sep 17 00:00:00 2001 From: Dennis Aulenbacher Date: Mon, 2 Dec 2019 18:40:16 +0100 Subject: [PATCH 06/44] changed TrackingConnectorInfoDTO import to the correct package --- .../main/java/com/sap/sailing/gwt/server/HomeServiceUtil.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/server/HomeServiceUtil.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/server/HomeServiceUtil.java index b5c9682d201..24b56d4cb37 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/server/HomeServiceUtil.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/server/HomeServiceUtil.java @@ -38,10 +38,10 @@ import com.sap.sailing.gwt.home.communication.event.EventMetadataDTO; import com.sap.sailing.gwt.home.communication.event.EventReferenceDTO; import com.sap.sailing.gwt.home.communication.event.EventState; import com.sap.sailing.gwt.home.communication.eventlist.EventListEventDTO; +import com.sap.sailing.gwt.home.communication.eventview.TrackingConnectorInfoDTO; import com.sap.sailing.gwt.home.communication.media.SailingVideoDTO; import com.sap.sailing.gwt.home.communication.start.EventStageDTO; import com.sap.sailing.gwt.home.communication.start.StageEventType; -import com.sap.sailing.gwt.ui.shared.TrackingConnectorInfoDTO; import com.sap.sailing.server.interfaces.RacingEventService; import com.sap.sailing.server.util.EventUtil; import com.sap.sse.common.TimePoint; @@ -315,7 +315,7 @@ public final class HomeServiceUtil { Set trackingConnectorInfos = event.getTrackingConnectorInfos() .stream() .map(trackingConnectorInfo -> new TrackingConnectorInfoDTO(trackingConnectorInfo.getTrackedBy(), mapURLToString(trackingConnectorInfo.getWebUrl()))).collect(Collectors.toSet()); - dto.setTrackingConnectorInfo(trackingConnectorInfos); + dto.setTrackingConnectorInfos(trackingConnectorInfos); dto.setStageImageURL(useTeaserImage ? findEventThumbnailImageUrlAsString(event) : getStageImageURLAsString(event)); return dto; } From dfb0fe86230232d44e7ac8575342390229afbf6c Mon Sep 17 00:00:00 2001 From: Dennis Aulenbacher Date: Mon, 2 Dec 2019 19:49:22 +0100 Subject: [PATCH 07/44] implemented desktop and mobile usage of DataByLogo-Widget --- .../client/shared/databylogo/DataByLogo.java | 77 ++++++++++++++----- .../shared/databylogo/DataByLogo.ui.xml | 2 +- .../communication/start/EventStageDTO.java | 6 +- .../partials/eventheader/EventHeader.java | 2 +- .../gwt/home/desktop/partials/stage/Stage.gss | 12 +++ .../partials/stage/StageResources.java | 2 + .../partials/stage/StageTeaserBand.java | 4 + .../partials/stage/StageTeaserBand.ui.xml | 7 +- .../partials/eventheader/EventHeader.java | 2 +- .../gwt/home/mobile/partials/stage/Stage.gss | 6 ++ .../mobile/partials/stage/StageResources.java | 1 + .../partials/stage/StageTeaserBand.java | 18 ++++- .../partials/stage/StageTeaserBand.ui.xml | 1 + 13 files changed, 111 insertions(+), 29 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.java index 8484956fdbc..d20e4716d9c 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.java @@ -9,11 +9,12 @@ import com.google.gwt.dom.client.ImageElement; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.ui.Widget; -import com.sap.sailing.gwt.home.communication.eventview.EventViewDTO; import com.sap.sailing.gwt.home.communication.eventview.TrackingConnectorInfoDTO; public class DataByLogo extends Widget { + private static final String TRAC_TRAC = "TracTrac"; + private static final String TRAC_TRAC_DEFAULT_URL = "https://www.tractrac.com/"; private static DataByLogoUiBinder uiBinder = GWT.create(DataByLogoUiBinder.class); interface DataByLogoUiBinder extends UiBinder { @@ -29,27 +30,65 @@ public class DataByLogo extends Widget { setElement(uiBinder.createAndBindUi(this)); } - public void setUp(EventViewDTO event, boolean colorIfPossible) { - Set trackingConnectorInfos = event.getTrackingConnectorInfos(); - boolean istrackedByTracTrac = false; - for (TrackingConnectorInfoDTO trackingConnectorInfo : trackingConnectorInfos) { - if ("TracTrac".equals(trackingConnectorInfo.getTrackedBy())) { - istrackedByTracTrac = true; - if(colorIfPossible) { - logo.setSrc(DataByLogoResources.INSTANCE.tractracColor().getSafeUri().asString()); - }else { - logo.setSrc(DataByLogoResources.INSTANCE.tractracWhite().getSafeUri().asString()); - } - String webUrl = trackingConnectorInfo.getWebUrl(); - if (webUrl == null || "".equals(trackingConnectorInfo.getWebUrl())) { - dataByContainer.setHref("https://www.tractrac.com/"); - }else { - dataByContainer.setHref(webUrl); + public void setUp(Set trackingConnectorInfos, boolean colorIfPossible) { + TrackingConnectorInfoDTO mostProminentConnectorInfo = selectMostProminentConnectorInfo(trackingConnectorInfos); + if (mostProminentConnectorInfo == null) { + this.setVisible(false); + } else { + setUpForConnectorType(colorIfPossible, mostProminentConnectorInfo); + } + } + + private TrackingConnectorInfoDTO selectMostProminentConnectorInfo( + Set trackingConnectorInfos) { + TrackingConnectorInfoDTO potentialConnectorInfo = null; + if (trackingConnectorInfos == null || trackingConnectorInfos.isEmpty()) { + return potentialConnectorInfo; + } else { + for (TrackingConnectorInfoDTO trackingConnectorInfo : trackingConnectorInfos) { + // This logic currently only supports TracTrac as ConnectorInfo + if (TRAC_TRAC.equals(trackingConnectorInfo.getTrackedBy())) { + potentialConnectorInfo = trackingConnectorInfo; + String webUrl = trackingConnectorInfo.getWebUrl(); + if (webUrl != null && !"".equals(webUrl)) { + break; + } } } + return potentialConnectorInfo; } - if (!istrackedByTracTrac) { - this.setVisible(false); + } + + private void setUpForConnectorType(boolean colorIfPossible, TrackingConnectorInfoDTO trackingConnectorInfo) { + if (TRAC_TRAC.equals(trackingConnectorInfo.getTrackedBy())) { + setUpTracTracLogo(colorIfPossible); + } + setUrl(trackingConnectorInfo); + } + + private void setUpTracTracLogo(boolean colorIfPossible) { + if (colorIfPossible) { + logo.setSrc(DataByLogoResources.INSTANCE.tractracColor().getSafeUri().asString()); + } else { + logo.setSrc(DataByLogoResources.INSTANCE.tractracWhite().getSafeUri().asString()); + } + } + + private void setUrl(TrackingConnectorInfoDTO trackingConnectorInfo) { + String webUrl = trackingConnectorInfo.getWebUrl(); + if (webUrl == null || "".equals(trackingConnectorInfo.getWebUrl())) { + dataByContainer.setHref(getConnectorDefaultUrl(trackingConnectorInfo.getTrackedBy())); + } else { + dataByContainer.setHref(webUrl); + } + } + + private String getConnectorDefaultUrl(String trackedBy) { + switch (trackedBy) { + case TRAC_TRAC: + return TRAC_TRAC_DEFAULT_URL; + default: + return null; } } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.ui.xml index e0ab2c22efa..8eef73c5fe9 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.ui.xml +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.ui.xml @@ -4,7 +4,7 @@ - + \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/start/EventStageDTO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/start/EventStageDTO.java index 86a084b501a..e64c29d74fb 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/start/EventStageDTO.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/start/EventStageDTO.java @@ -3,7 +3,7 @@ package com.sap.sailing.gwt.home.communication.start; import java.util.Set; import com.sap.sailing.gwt.home.communication.event.EventLinkAndMetadataDTO; -import com.sap.sailing.gwt.ui.shared.TrackingConnectorInfoDTO; +import com.sap.sailing.gwt.home.communication.eventview.TrackingConnectorInfoDTO; public class EventStageDTO extends EventLinkAndMetadataDTO { @@ -28,11 +28,11 @@ public class EventStageDTO extends EventLinkAndMetadataDTO { this.stageImageURL = stageImageURL; } - public Set getTrackingConnectorInfo() { + public Set getTrackingConnectorInfos() { return trackingConnectorInfo; } - public void setTrackingConnectorInfo(Set trackingConnectorInfo) { + public void setTrackingConnectorInfos(Set trackingConnectorInfo) { this.trackingConnectorInfo = trackingConnectorInfo; } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.java index 947d824533c..275d92c9dac 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.java @@ -151,7 +151,7 @@ public class EventHeader extends Composite { } hide(competitors, races, courseAreaUi, eventCategory); } - dataByLogo.setUp(event, true); + dataByLogo.setUp(event.getTrackingConnectorInfos(), true); initTitleAndSelection(nameToShow); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/stage/Stage.gss b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/stage/Stage.gss index 7e780286cca..7e4dff69aad 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/stage/Stage.gss +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/stage/Stage.gss @@ -209,3 +209,15 @@ -ms-transition: width 0.1s linear; transition: width 0.1s linear; } +.stage_dataBy_logo_container{ + color: white; + padding: 0 0.4em; + line-height: 4rem; +} +.stage_dataBy_logo_container>*{ + display: inline-block !important; + vertical-align: middle; +} +.stageteaser_rightbound_bond_item{ + float: right; +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/stage/StageResources.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/stage/StageResources.java index 17e17c8126b..8ae602b032a 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/stage/StageResources.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/stage/StageResources.java @@ -30,6 +30,7 @@ public interface StageResources extends ClientBundle { String stageteaser_content_band_text_headline(); String stageteaser_content_band_text_name(); String stageteaser_content_band_action(); + String stageteaser_rightbound_bond_item(); String swipercontainer(); String swiperslide(); String stage(); @@ -37,6 +38,7 @@ public interface StageResources extends ClientBundle { String stage_controls(); String stage_progress(); String stage_progress_bar(); + String stage_dataBy_logo_container(); } } \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/stage/StageTeaserBand.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/stage/StageTeaserBand.java index dfed9e1cb4e..28f57740511 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/stage/StageTeaserBand.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/stage/StageTeaserBand.java @@ -11,6 +11,7 @@ import com.google.gwt.uibinder.client.UiHandler; import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.Widget; +import com.sap.sailing.gwt.home.client.shared.databylogo.DataByLogo; import com.sap.sailing.gwt.home.communication.start.EventStageDTO; import com.sap.sailing.gwt.home.desktop.app.DesktopPlacesNavigator; import com.sap.sailing.gwt.home.shared.app.PlaceNavigation; @@ -28,6 +29,7 @@ public abstract class StageTeaserBand extends Composite { @UiField SpanElement bandSubtitle; @UiField Anchor actionLink; @UiField DivElement isLiveDiv; + @UiField DataByLogo dataByLogo; private final DesktopPlacesNavigator placeNavigator; private final EventStageDTO event; @@ -41,6 +43,8 @@ public abstract class StageTeaserBand extends Composite { initWidget(uiBinder.createAndBindUi(this)); isLiveDiv.getStyle().setDisplay(Display.NONE); + + dataByLogo.setUp(event.getTrackingConnectorInfos(), false); eventNavigation = placeNavigator.getEventNavigation(event.getId().toString(), event.getBaseURL(), event.isOnRemoteServer()); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/stage/StageTeaserBand.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/stage/StageTeaserBand.ui.xml index addcb10e59c..32dec538afe 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/stage/StageTeaserBand.ui.xml +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/stage/StageTeaserBand.ui.xml @@ -1,10 +1,13 @@ - + - +
+ +
+
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/eventheader/EventHeader.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/eventheader/EventHeader.java index c6019fff917..a663d105e6e 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/eventheader/EventHeader.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/eventheader/EventHeader.java @@ -51,7 +51,7 @@ public class EventHeader extends Composite { if (logoNavigation != null) { logoNavigation.configureAnchorElement(eventLogoUi); } - dataByLogo.setUp(event, true); + dataByLogo.setUp(event.getTrackingConnectorInfos(), true); if (dataByLogo.isVisible()) { this.addStyleName(EventHeaderResources.INSTANCE.css().eventheader_with_logo()); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/Stage.gss b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/Stage.gss index eb236c161f0..cc9944e2df9 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/Stage.gss +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/Stage.gss @@ -206,5 +206,11 @@ background: #333; } +.stageteaser_databylogo_container{ + color: white; + padding: .6em 0.4em 0.6em .4em; + float: right; +} + @external slick-dots, slick-active; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/StageResources.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/StageResources.java index 6365a07c1fd..0d9d39b074c 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/StageResources.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/StageResources.java @@ -30,6 +30,7 @@ public interface StageResources extends ClientBundle { String stageteaser_content_band_text_headline(); String stageteaser_content_band_text_name(); String stageteaser_content_band_action(); + String stageteaser_databylogo_container(); String swipercontainer(); String swiperslide(); String stage(); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/StageTeaserBand.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/StageTeaserBand.java index d92be73980d..7022aefa7e6 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/StageTeaserBand.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/StageTeaserBand.java @@ -9,7 +9,9 @@ import com.google.gwt.uibinder.client.UiHandler; import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.Widget; +import com.sap.sailing.gwt.home.client.shared.databylogo.DataByLogo; import com.sap.sailing.gwt.home.communication.event.EventLinkAndMetadataDTO; +import com.sap.sailing.gwt.home.communication.start.EventStageDTO; import com.sap.sailing.gwt.home.mobile.app.MobilePlacesNavigator; import com.sap.sailing.gwt.home.shared.app.PlaceNavigation; import com.sap.sailing.gwt.home.shared.app.PlaceNavigator; @@ -26,7 +28,10 @@ public abstract class StageTeaserBand extends Composite { DivElement bandTitle; @UiField DivElement bandSubtitle; - @UiField Anchor actionLink; + @UiField + Anchor actionLink; + @UiField + DataByLogo dataByLogo; private final MobilePlacesNavigator placeNavigator; private final EventLinkAndMetadataDTO event; @@ -38,7 +43,16 @@ public abstract class StageTeaserBand extends Composite { StageResources.INSTANCE.css().ensureInjected(); initWidget(uiBinder.createAndBindUi(this)); - + + if (event instanceof EventStageDTO) { + dataByLogo.setUp(((EventStageDTO) event).getTrackingConnectorInfos(), false); + } else { + dataByLogo.setVisible(false); + } + + // TODO currently hidden by default + dataByLogo.setVisible(false); + eventNavigation = placeNavigator.getEventNavigation(event.getId().toString(), event.getBaseURL(), event.isOnRemoteServer()); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/StageTeaserBand.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/StageTeaserBand.ui.xml index 952a7374ab8..e8062ce1401 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/StageTeaserBand.ui.xml +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/StageTeaserBand.ui.xml @@ -45,6 +45,7 @@
+
From 61bfa982198e81c3b83ba4754a674c048fbb8ddb Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Tue, 3 Dec 2019 00:14:26 +0100 Subject: [PATCH 08/44] trying to "blindly" adapt tracking and race manager app to extended EventBaseJsonDeserializer constructor --- .../impl/EventBaseJsonDeserializer.java | 4 ++- .../tracking/app/utils/CheckinManager.java | 4 ++- .../app/data/OnlineDataManager.java | 34 ++++++++++--------- 3 files changed, 24 insertions(+), 18 deletions(-) diff --git a/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/deserialization/impl/EventBaseJsonDeserializer.java b/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/deserialization/impl/EventBaseJsonDeserializer.java index e9bfda2e1d8..42728faac6e 100644 --- a/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/deserialization/impl/EventBaseJsonDeserializer.java +++ b/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/deserialization/impl/EventBaseJsonDeserializer.java @@ -33,7 +33,9 @@ public class EventBaseJsonDeserializer implements JsonDeserializer { private final JsonDeserializer leaderboardGroupDeserializer; private final JsonDeserializertrackingConnectorInfoDeserializer; - public EventBaseJsonDeserializer(JsonDeserializer venueDeserializer, JsonDeserializer leaderboardGroupDeserializer, JsonDeserializertrackingConnectorInfoDeserializer) { + public EventBaseJsonDeserializer(JsonDeserializer venueDeserializer, + JsonDeserializer leaderboardGroupDeserializer, + JsonDeserializer trackingConnectorInfoDeserializer) { this.venueDeserializer = venueDeserializer; this.leaderboardGroupDeserializer = leaderboardGroupDeserializer; this.trackingConnectorInfoDeserializer = trackingConnectorInfoDeserializer; diff --git a/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/utils/CheckinManager.java b/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/utils/CheckinManager.java index 119512e76a8..2e57681f181 100755 --- a/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/utils/CheckinManager.java +++ b/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/utils/CheckinManager.java @@ -34,6 +34,7 @@ import com.sap.sailing.server.gateway.deserialization.impl.BoatJsonDeserializer; import com.sap.sailing.server.gateway.deserialization.impl.CourseAreaJsonDeserializer; import com.sap.sailing.server.gateway.deserialization.impl.EventBaseJsonDeserializer; import com.sap.sailing.server.gateway.deserialization.impl.LeaderboardGroupBaseJsonDeserializer; +import com.sap.sailing.server.gateway.deserialization.impl.TrackingConnectorInfoJsonDeserializer;l import com.sap.sailing.server.gateway.deserialization.impl.VenueJsonDeserializer; import com.sap.sse.common.Util; import com.sap.sse.shared.media.ImageDescriptor; @@ -221,7 +222,8 @@ public class CheckinManager { return null; } }))), - new LeaderboardGroupBaseJsonDeserializer()); + new LeaderboardGroupBaseJsonDeserializer(), + new TrackingConnectorInfoJsonDeserializer()); try { final EventBase event = deserializer.deserialize( (org.json.simple.JSONObject) new JSONParser().parse(response.toString())); diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/OnlineDataManager.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/OnlineDataManager.java index 773dd8eff46..001fdd1e668 100755 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/OnlineDataManager.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/OnlineDataManager.java @@ -1,14 +1,11 @@ package com.sap.sailing.racecommittee.app.data; -import java.io.Serializable; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Map; -import java.util.UUID; -import java.util.concurrent.Callable; +import android.content.Context; +import android.net.Uri; +import android.os.Bundle; +import android.support.v4.app.LoaderManager.LoaderCallbacks; +import android.support.v4.content.Loader; +import android.util.Log; import com.sap.sailing.android.shared.logging.ExLog; import com.sap.sailing.android.shared.services.sending.MessageSendingService; @@ -75,15 +72,19 @@ import com.sap.sailing.server.gateway.deserialization.impl.LeaderboardGroupBaseJ import com.sap.sailing.server.gateway.deserialization.impl.RaceColumnFactorJsonDeserializer; import com.sap.sailing.server.gateway.deserialization.impl.RegattaConfigurationJsonDeserializer; import com.sap.sailing.server.gateway.deserialization.impl.VenueJsonDeserializer; +import com.sap.sailing.server.gateway.deserialization.impl.TrackingConnectorInfoJsonDeserializer; import com.sap.sailing.server.gateway.deserialization.racegroup.impl.RaceGroupDeserializer; import com.sap.sse.common.Util; -import android.content.Context; -import android.net.Uri; -import android.os.Bundle; -import android.support.v4.app.LoaderManager.LoaderCallbacks; -import android.support.v4.content.Loader; -import android.util.Log; +import java.io.Serializable; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.Callable; /** * Enables accessing of data. @@ -126,7 +127,8 @@ public class OnlineDataManager extends DataManager { ExLog.i(context, TAG, "Creating Events-OnlineDataLoader " + id); EventBaseJsonDeserializer serializer = new EventBaseJsonDeserializer( new VenueJsonDeserializer(new CourseAreaJsonDeserializer(domainFactory)), - new LeaderboardGroupBaseJsonDeserializer()); + new LeaderboardGroupBaseJsonDeserializer(), + new TrackingConnectorInfoJsonDeserializer()); DataParser> parser = new EventsDataParser(serializer); DataHandler> handler = new EventsDataHandler(OnlineDataManager.this); From 56e94397c7c22d961fca28550432cc66038aa5dc Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Tue, 3 Dec 2019 00:45:16 +0100 Subject: [PATCH 09/44] fixed typo in imports --- .../sap/sailing/android/tracking/app/utils/CheckinManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/utils/CheckinManager.java b/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/utils/CheckinManager.java index 2e57681f181..38c42f9e47d 100755 --- a/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/utils/CheckinManager.java +++ b/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/utils/CheckinManager.java @@ -34,7 +34,7 @@ import com.sap.sailing.server.gateway.deserialization.impl.BoatJsonDeserializer; import com.sap.sailing.server.gateway.deserialization.impl.CourseAreaJsonDeserializer; import com.sap.sailing.server.gateway.deserialization.impl.EventBaseJsonDeserializer; import com.sap.sailing.server.gateway.deserialization.impl.LeaderboardGroupBaseJsonDeserializer; -import com.sap.sailing.server.gateway.deserialization.impl.TrackingConnectorInfoJsonDeserializer;l +import com.sap.sailing.server.gateway.deserialization.impl.TrackingConnectorInfoJsonDeserializer; import com.sap.sailing.server.gateway.deserialization.impl.VenueJsonDeserializer; import com.sap.sse.common.Util; import com.sap.sse.shared.media.ImageDescriptor; From 0a1d2e9eb1688b4206825d3c3b51dfe928074ecf Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Tue, 3 Dec 2019 12:07:52 +0100 Subject: [PATCH 10/44] fixed refactoring problems regarding StrippedEventImpl constructor --- .../racecommittee/app/data/OfflineDataManager.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/OfflineDataManager.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/OfflineDataManager.java index 2a836282e24..ea362fc14ca 100755 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/OfflineDataManager.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/OfflineDataManager.java @@ -82,13 +82,13 @@ public class OfflineDataManager extends DataManager { final TimePoint endDate = new MillisecondsTimePoint(cal.getTimeInMillis()); dataStore.addEvent(new StrippedEventImpl("Extreme Sailing Series 2012 (Cardiff)", startDate, endDate, "Cardiff", - true, UUID.randomUUID(), Collections. emptySet(), false)); + true, UUID.randomUUID(), Collections. emptySet(), Collections.emptySet())); dataStore.addEvent(new StrippedEventImpl("Extreme Sailing Series 2012 (Nice)", startDate, endDate, "Nice", true, - UUID.randomUUID(), Collections. emptySet(), false)); + UUID.randomUUID(), Collections. emptySet(), Collections.emptySet())); dataStore.addEvent(new StrippedEventImpl("Extreme Sailing Series 2012 (Rio)", startDate, endDate, "Rio", true, - UUID.randomUUID(), Collections. emptySet(), false)); + UUID.randomUUID(), Collections. emptySet(), Collections.emptySet())); EventBase newEvent = new StrippedEventImpl("Extreme Sailing Series 2013 (Muscat)", startDate, endDate, "Muscat", - true, UUID.randomUUID(), Collections. emptySet(), false); + true, UUID.randomUUID(), Collections. emptySet(), Collections.emptySet()); newEvent.getVenue().addCourseArea(new CourseAreaImpl("Offshore", UUID.randomUUID())); newEvent.getVenue().addCourseArea(new CourseAreaImpl("Stadium", UUID.randomUUID())); dataStore.addEvent(newEvent); From b46f86cd196020b35ff61747dac7cd6267e6018f Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Tue, 3 Dec 2019 16:26:00 +0100 Subject: [PATCH 11/44] made TrackingConnectorInfo serializable --- .../domain/tracking/TrackingConnectorInfo.java | 9 ++++----- .../impl/TrackingConnectorInfoImpl.java | 18 ++++-------------- .../eventview/TrackingConnectorInfoDTO.java | 9 ++------- 3 files changed, 10 insertions(+), 26 deletions(-) diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/tracking/TrackingConnectorInfo.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/tracking/TrackingConnectorInfo.java index a1494cebef1..dc90a162c46 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/tracking/TrackingConnectorInfo.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/tracking/TrackingConnectorInfo.java @@ -1,10 +1,9 @@ package com.sap.sailing.domain.tracking; +import java.io.Serializable; import java.net.URL; -public interface TrackingConnectorInfo { - public String getTrackedBy(); - public void setTrackedBy(String trackedBy); - public URL getWebUrl(); - public void setWebUrl(URL webUrl); +public interface TrackingConnectorInfo extends Serializable { + String getTrackedBy(); + URL getWebUrl(); } diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/tracking/impl/TrackingConnectorInfoImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/tracking/impl/TrackingConnectorInfoImpl.java index a9ecc868b01..ad55bc42f57 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/tracking/impl/TrackingConnectorInfoImpl.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/tracking/impl/TrackingConnectorInfoImpl.java @@ -5,11 +5,10 @@ import java.net.URL; import com.sap.sailing.domain.tracking.TrackingConnectorInfo; public class TrackingConnectorInfoImpl implements TrackingConnectorInfo { - String trackedBy; - URL webUrl; - - public TrackingConnectorInfoImpl() { - } + private static final long serialVersionUID = -1681930521305924294L; + + private final String trackedBy; + private final URL webUrl; public TrackingConnectorInfoImpl(String trackedBy, URL webUrl) { super(); @@ -21,16 +20,7 @@ public class TrackingConnectorInfoImpl implements TrackingConnectorInfo { return trackedBy; } - public void setTrackedBy(String trackedBy) { - this.trackedBy = trackedBy; - } - public URL getWebUrl() { return webUrl; } - - public void setWebUrl(URL webUrl) { - this.webUrl = webUrl; - } - } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/eventview/TrackingConnectorInfoDTO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/eventview/TrackingConnectorInfoDTO.java index 52d375bdebc..c3acedb7e19 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/eventview/TrackingConnectorInfoDTO.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/eventview/TrackingConnectorInfoDTO.java @@ -6,7 +6,7 @@ public class TrackingConnectorInfoDTO implements IsSerializable { private String trackedBy; private String webUrl; - public TrackingConnectorInfoDTO() {} + TrackingConnectorInfoDTO() {} // GWT serialization public TrackingConnectorInfoDTO(String trackedBy, String webUrl) { this.trackedBy = trackedBy; @@ -16,13 +16,8 @@ public class TrackingConnectorInfoDTO implements IsSerializable { public String getTrackedBy() { return trackedBy; } - public void setTrackedBy(String trackedBy) { - this.trackedBy = trackedBy; - } + public String getWebUrl() { return webUrl; } - public void setWebUrl(String webUrl) { - this.webUrl = webUrl; - } } From cbc0ec46e1f66255f1c916bf80a54ca0b98cf638 Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Tue, 3 Dec 2019 18:49:34 +0100 Subject: [PATCH 12/44] avoid null values in Event.getTrackingConnectorInfos() --- .../src/com/sap/sailing/domain/base/EventBase.java | 4 +++- .../domain/test/StarbordSideOfStartLineRecognitionTest.java | 2 +- .../sap/sailing/domain/tracking/impl/TrackedRegattaTest.java | 2 +- .../src/com/sap/sailing/domain/base/impl/EventImpl.java | 5 ++++- .../src/com/sap/sailing/domain/tracking/TrackedRace.java | 3 ++- 5 files changed, 11 insertions(+), 5 deletions(-) diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/EventBase.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/EventBase.java index a95a014b8bd..c3ee25ee440 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/EventBase.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/EventBase.java @@ -110,7 +110,9 @@ public interface EventBase extends NamedWithID, WithDescription, Renamable, With /** * Determines whether the race is tracked by TracTrac or not - * @return a boolean flag, whether any @TrackedRace in the event is tracked by TracTrac or not + * + * @return a boolean flag, whether any {@link TrackedRace} in the event is tracked by which connector; the set + * returned is never {@code null} and never contains {@code null} values, but it may be empty */ Set getTrackingConnectorInfos(); } diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/StarbordSideOfStartLineRecognitionTest.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/StarbordSideOfStartLineRecognitionTest.java index 1ca536476f4..f785f15f241 100755 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/StarbordSideOfStartLineRecognitionTest.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/StarbordSideOfStartLineRecognitionTest.java @@ -91,7 +91,7 @@ public class StarbordSideOfStartLineRecognitionTest { public MockedTrackedRaceImpl() { super(null, null, Collections. emptyList(), null, 0, 0, 0, 0, false, OneDesignRankingMetric::new, - mock(RaceLogAndTrackedRaceResolver.class), null); + mock(RaceLogAndTrackedRaceResolver.class), /* tracking connector info */ null); } @Override diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/tracking/impl/TrackedRegattaTest.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/tracking/impl/TrackedRegattaTest.java index fbfa90f9ea1..aeeca3b8f2f 100644 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/tracking/impl/TrackedRegattaTest.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/tracking/impl/TrackedRegattaTest.java @@ -122,6 +122,6 @@ public class TrackedRegattaTest { RaceDefinition race1 = new RaceDefinitionImpl(name, course, boatClass, Collections.emptyMap()); return new DynamicTrackedRaceImpl(regatta, race1, Collections. emptyList(), EmptyWindStore.INSTANCE, 0, 0, 0, /* useMarkPassingCalculator */ false, OneDesignRankingMetric::new, - mock(RaceLogAndTrackedRaceResolver.class), null); + mock(RaceLogAndTrackedRaceResolver.class), /* tracking connector info */ null); } } diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/EventImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/EventImpl.java index a1ffeea3168..45b76958378 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/EventImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/EventImpl.java @@ -110,7 +110,10 @@ public class EventImpl extends EventBaseImpl implements Event { for (LeaderboardGroup lbg : this.getLeaderboardGroups()) { for (Leaderboard lb : lbg.getLeaderboards()) { for (TrackedRace tr : lb.getTrackedRaces()) { - result.add(tr.getTrackingConnectorInfo()); + final TrackingConnectorInfo trackingConnectorInfo = tr.getTrackingConnectorInfo(); + if (trackingConnectorInfo != null) { + result.add(trackingConnectorInfo); + } } } } diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackedRace.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackedRace.java index a9e6331e18c..0757a5e3289 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackedRace.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackedRace.java @@ -1249,7 +1249,8 @@ public interface TrackedRace } /** - * gets a String representation of the Tracking-Service used to Track the Race + * gets a String representation of the Tracking-Service used to Track the Race; may be {@code null}, particularly in + * test set-ups */ TrackingConnectorInfo getTrackingConnectorInfo(); } From aaace28830a05981ed7df2b05ca147bf75065feb Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Tue, 3 Dec 2019 18:51:56 +0100 Subject: [PATCH 13/44] null fixes regarding tracking connector info on Event and (de-)serialization --- .../sap/sailing/domain/base/impl/StrippedEventImpl.java | 1 + .../serialization/impl/EventBaseJsonSerializer.java | 8 ++++---- .../src/com/sap/sailing/server/util/EventUtilTest.java | 4 ++-- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/impl/StrippedEventImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/impl/StrippedEventImpl.java index 8f83a11a11e..8c23cdb602c 100755 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/impl/StrippedEventImpl.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/impl/StrippedEventImpl.java @@ -31,6 +31,7 @@ public class StrippedEventImpl extends EventBaseImpl { boolean isPublic, UUID id, Iterable leaderboardGroups, Set trackingConnectorInfos) { super(name, startDate, endDate, venue, isPublic, id); this.leaderboardGroups = leaderboardGroups; + assert trackingConnectorInfos != null; this.trackingConnectorInfos = trackingConnectorInfos; } diff --git a/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/serialization/impl/EventBaseJsonSerializer.java b/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/serialization/impl/EventBaseJsonSerializer.java index 955688a74a5..c308539198f 100644 --- a/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/serialization/impl/EventBaseJsonSerializer.java +++ b/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/serialization/impl/EventBaseJsonSerializer.java @@ -78,7 +78,7 @@ public class EventBaseJsonSerializer implements JsonSerializer { leaderboardGroups.add(leaderboardGroupBaseSerializer.serialize(lg)); } JSONArray trackingConnectorInfos = new JSONArray(); - for(TrackingConnectorInfo trackingConnectorInfo : event.getTrackingConnectorInfos()) { + for (TrackingConnectorInfo trackingConnectorInfo : event.getTrackingConnectorInfos()) { trackingConnectorInfos.add(trackingConnectorInfoSerializer.serialize(trackingConnectorInfo)); } result.put(FIELD_TRACKING_CONNECTOR_INFOS, trackingConnectorInfos); @@ -88,12 +88,12 @@ public class EventBaseJsonSerializer implements JsonSerializer { addImageSize(image, imageSizes); } JSONArray jsonImages = new JSONArray(); - for(ImageDescriptor imageDescriptor: event.getImages()) { + for (ImageDescriptor imageDescriptor: event.getImages()) { addImage(imageDescriptor, jsonImages); } result.put(FIELD_IMAGES, jsonImages); JSONArray jsonVideos = new JSONArray(); - for(VideoDescriptor videoDescriptor: event.getVideos()) { + for (VideoDescriptor videoDescriptor: event.getVideos()) { addVideo(videoDescriptor, jsonVideos); } result.put(FIELD_VIDEOS, jsonVideos); @@ -150,7 +150,7 @@ public class EventBaseJsonSerializer implements JsonSerializer { * JSON object to imageSizes */ private void addImageSize(ImageDescriptor image, JSONArray imageSizes) { - if(image.getHeightInPx() != null && image.getWidthInPx() != null) { + if (image.getHeightInPx() != null && image.getWidthInPx() != null) { JSONObject imageSizeJson = new JSONObject(); imageSizes.add(imageSizeJson); imageSizeJson.put(FIELD_IMAGE_URL, image.getURL().toString()); diff --git a/java/com.sap.sailing.server.test/src/com/sap/sailing/server/util/EventUtilTest.java b/java/com.sap.sailing.server.test/src/com/sap/sailing/server/util/EventUtilTest.java index 6e9e973e147..453171b46ee 100644 --- a/java/com.sap.sailing.server.test/src/com/sap/sailing/server/util/EventUtilTest.java +++ b/java/com.sap.sailing.server.test/src/com/sap/sailing/server/util/EventUtilTest.java @@ -1,6 +1,7 @@ package com.sap.sailing.server.util; import java.util.Calendar; +import java.util.Collections; import java.util.UUID; import org.junit.Assert; @@ -22,7 +23,6 @@ public class EventUtilTest { Calendar calendar = Calendar.getInstance(); calendar.set(year, month - 1, date); MillisecondsTimePoint startEnd = new MillisecondsTimePoint(calendar.getTime()); - return new StrippedEventImpl("Test", startEnd, startEnd, "Anywhere", true, UUID.randomUUID(), null, null); + return new StrippedEventImpl("Test", startEnd, startEnd, "Anywhere", true, UUID.randomUUID(), null, Collections.emptySet()); } - } From 008ec6f45aa3b2b9a3679ebd8204b51087ea6ad5 Mon Sep 17 00:00:00 2001 From: Dennis Aulenbacher Date: Thu, 5 Dec 2019 14:08:14 +0100 Subject: [PATCH 14/44] removed redundant css class --- .../gwt/home/desktop/partials/eventheader/EventHeader.gss | 8 -------- .../home/desktop/partials/eventheader/EventHeader.ui.xml | 2 +- .../partials/eventheader/EventHeaderResources.java | 2 -- 3 files changed, 1 insertion(+), 11 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.gss b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.gss index 7912512e2c3..5f2bd202db2 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.gss +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.gss @@ -265,11 +265,3 @@ .eventnavigation .navbar_button { font-size: 1.2rem; } - -.eventheader_databylogo{ - color: black; - display: inline-block; - white-space: nowrap; - font-size: 0.75em; - cursor: pointer; -} \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.ui.xml index 134551fea16..78e72b7f93f 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.ui.xml +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.ui.xml @@ -47,7 +47,7 @@
- +
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeaderResources.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeaderResources.java index b89a804ce64..2d04bf42eb4 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeaderResources.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeaderResources.java @@ -51,7 +51,5 @@ public interface EventHeaderResources extends SharedDesktopResources { String eventnavigation_dropdown_containerhidden(); String navbar_button(); String navbar_buttonhidden(); - String eventheader_databylogo(); } - } From cde6540d5ab3d75ef050cb4605679e9bf927bb3f Mon Sep 17 00:00:00 2001 From: Dennis Aulenbacher Date: Thu, 5 Dec 2019 14:13:55 +0100 Subject: [PATCH 15/44] duplicated DataByLogo widget to make it accessible from gwt.ui.raceboard --- .../gwt/ui/shared/RaceboardDataDTO.java | 2 +- .../ui/shared/TrackingConnectorInfoDTO.java | 15 +-- .../gwt/ui/shared/databylogo/DataByLogo.gss | 18 ++++ .../gwt/ui/shared/databylogo/DataByLogo.java | 94 +++++++++++++++++++ .../ui/shared/databylogo/DataByLogo.ui.xml | 10 ++ .../databylogo/DataByLogoResources.java | 28 ++++++ .../ui/shared/databylogo/tractrac-color.svg | 1 + .../ui/shared/databylogo/tractrac-white.svg | 1 + 8 files changed, 158 insertions(+), 11 deletions(-) create mode 100644 java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/databylogo/DataByLogo.gss create mode 100644 java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/databylogo/DataByLogo.java create mode 100644 java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/databylogo/DataByLogo.ui.xml create mode 100644 java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/databylogo/DataByLogoResources.java create mode 100644 java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/databylogo/tractrac-color.svg create mode 100644 java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/databylogo/tractrac-white.svg diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RaceboardDataDTO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RaceboardDataDTO.java index 16da5c53e94..0eb9941bdc2 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RaceboardDataDTO.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RaceboardDataDTO.java @@ -69,7 +69,7 @@ public class RaceboardDataDTO implements IsSerializable { return isValidEvent; } - public Set isTrackedByTracTrac() { + public Set getTrackingConnectorInfos() { return trackingConnectorInfos; } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/TrackingConnectorInfoDTO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/TrackingConnectorInfoDTO.java index df8baca89e1..d39bab7b4f3 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/TrackingConnectorInfoDTO.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/TrackingConnectorInfoDTO.java @@ -5,24 +5,19 @@ import com.google.gwt.user.client.rpc.IsSerializable; public class TrackingConnectorInfoDTO implements IsSerializable { private String trackedBy; private String webUrl; - - public TrackingConnectorInfoDTO() {} - + + TrackingConnectorInfoDTO() {} // GWT serialization + public TrackingConnectorInfoDTO(String trackedBy, String webUrl) { this.trackedBy = trackedBy; this.webUrl = webUrl; } - + public String getTrackedBy() { return trackedBy; } - public void setTrackedBy(String trackedBy) { - this.trackedBy = trackedBy; - } + public String getWebUrl() { return webUrl; } - public void setWebUrl(String webUrl) { - this.webUrl = webUrl; - } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/databylogo/DataByLogo.gss b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/databylogo/DataByLogo.gss new file mode 100644 index 00000000000..6543486b051 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/databylogo/DataByLogo.gss @@ -0,0 +1,18 @@ +.databylogo_logo{ + height: 1.3333333em !important; +} + +.databylogo_subtlelink, +.databylogo_subtlelink:hover, +.databylogo_subtlelink:active, +.databylogo_subtlelink:visited, +.databylogo_subtlelink:focus { + text-decoration: none; +} + +.databylogo_container{ + display: inline-block; + white-space: nowrap; + font-size: 0.75em; + cursor: pointer; +} \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/databylogo/DataByLogo.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/databylogo/DataByLogo.java new file mode 100644 index 00000000000..9c3f7a6195a --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/databylogo/DataByLogo.java @@ -0,0 +1,94 @@ +package com.sap.sailing.gwt.ui.shared.databylogo; + +import java.util.Set; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.AnchorElement; +import com.google.gwt.dom.client.Element; +import com.google.gwt.dom.client.ImageElement; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.ui.Widget; +import com.sap.sailing.gwt.ui.shared.TrackingConnectorInfoDTO; + +public class DataByLogo extends Widget { + + private static final String TRAC_TRAC = "TracTrac"; + private static final String TRAC_TRAC_DEFAULT_URL = "https://www.tractrac.com/"; + private static DataByLogoUiBinder uiBinder = GWT.create(DataByLogoUiBinder.class); + + interface DataByLogoUiBinder extends UiBinder { + } + + @UiField + AnchorElement dataByContainer; + @UiField + ImageElement logo; + + public DataByLogo() { + DataByLogoResources.INSTANCE.css().ensureInjected(); + setElement(uiBinder.createAndBindUi(this)); + } + + public void setUp(Set trackingConnectorInfos, boolean colorIfPossible) { + TrackingConnectorInfoDTO mostProminentConnectorInfo = selectMostProminentConnectorInfo(trackingConnectorInfos); + if (mostProminentConnectorInfo == null) { + this.setVisible(false); + } else { + setUpForConnectorType(colorIfPossible, mostProminentConnectorInfo); + } + } + + private TrackingConnectorInfoDTO selectMostProminentConnectorInfo( + Set trackingConnectorInfos) { + TrackingConnectorInfoDTO potentialConnectorInfo = null; + if (trackingConnectorInfos == null || trackingConnectorInfos.isEmpty()) { + return potentialConnectorInfo; + } else { + for (TrackingConnectorInfoDTO trackingConnectorInfo : trackingConnectorInfos) { + // This logic currently only supports TracTrac as ConnectorInfo + if (TRAC_TRAC.equals(trackingConnectorInfo.getTrackedBy())) { + potentialConnectorInfo = trackingConnectorInfo; + String webUrl = trackingConnectorInfo.getWebUrl(); + if (webUrl != null && !"".equals(webUrl)) { + break; + } + } + } + return potentialConnectorInfo; + } + } + + private void setUpForConnectorType(boolean colorIfPossible, TrackingConnectorInfoDTO trackingConnectorInfo) { + if (TRAC_TRAC.equals(trackingConnectorInfo.getTrackedBy())) { + setUpTracTracLogo(colorIfPossible); + } + setUrl(trackingConnectorInfo); + } + + private void setUpTracTracLogo(boolean colorIfPossible) { + if (colorIfPossible) { + logo.setSrc(DataByLogoResources.INSTANCE.tractracColor().getSafeUri().asString()); + } else { + logo.setSrc(DataByLogoResources.INSTANCE.tractracWhite().getSafeUri().asString()); + } + } + + private void setUrl(TrackingConnectorInfoDTO trackingConnectorInfo) { + String webUrl = trackingConnectorInfo.getWebUrl(); + if (webUrl == null || "".equals(trackingConnectorInfo.getWebUrl())) { + dataByContainer.setHref(getConnectorDefaultUrl(trackingConnectorInfo.getTrackedBy())); + } else { + dataByContainer.setHref(webUrl); + } + } + + private String getConnectorDefaultUrl(String trackedBy) { + switch (trackedBy) { + case TRAC_TRAC: + return TRAC_TRAC_DEFAULT_URL; + default: + return null; + } + } +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/databylogo/DataByLogo.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/databylogo/DataByLogo.ui.xml new file mode 100644 index 00000000000..af5ab031e16 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/databylogo/DataByLogo.ui.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/databylogo/DataByLogoResources.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/databylogo/DataByLogoResources.java new file mode 100644 index 00000000000..9884503106d --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/databylogo/DataByLogoResources.java @@ -0,0 +1,28 @@ +package com.sap.sailing.gwt.ui.shared.databylogo; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.resources.client.ClientBundle; +import com.google.gwt.resources.client.CssResource; +import com.google.gwt.resources.client.DataResource; +import com.google.gwt.resources.client.DataResource.MimeType; + +public interface DataByLogoResources extends ClientBundle { + public static final DataByLogoResources INSTANCE = GWT.create(DataByLogoResources.class); + + @Source("DataByLogo.gss") + LocalCss css(); + + @Source("tractrac-color.svg") + @MimeType("image/svg+xml") + DataResource tractracColor(); + + @Source("tractrac-white.svg") + @MimeType("image/svg+xml") + DataResource tractracWhite(); + + public interface LocalCss extends CssResource { + String databylogo_logo(); + String databylogo_subtlelink(); + String databylogo_container(); + } +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/databylogo/tractrac-color.svg b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/databylogo/tractrac-color.svg new file mode 100644 index 00000000000..96662ddb01b --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/databylogo/tractrac-color.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/databylogo/tractrac-white.svg b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/databylogo/tractrac-white.svg new file mode 100644 index 00000000000..eba4e0347c8 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/databylogo/tractrac-white.svg @@ -0,0 +1 @@ + \ No newline at end of file From f1ee457d92b053a0e8a891bb3eed4546e934fccb Mon Sep 17 00:00:00 2001 From: Dennis Aulenbacher Date: Thu, 5 Dec 2019 14:14:36 +0100 Subject: [PATCH 16/44] null fix --- .../sap/sailing/gwt/ui/server/SailingServiceImpl.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) 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 cecf8f3eca6..590baaf94a9 100644 --- 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 @@ -2059,7 +2059,8 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet if(isValidEvent) { trackingConnectorInfos = event.getTrackingConnectorInfos() .stream() - .map(trackingConnectorInfo -> new TrackingConnectorInfoDTO(trackingConnectorInfo.getTrackedBy(), trackingConnectorInfo.getWebUrl().toString())).collect(Collectors.toSet()); + .map(trackingConnectorInfo -> new TrackingConnectorInfoDTO(trackingConnectorInfo.getTrackedBy(), mapURLToString(trackingConnectorInfo.getWebUrl()))) + .collect(Collectors.toSet()); }else { trackingConnectorInfos = Collections.emptySet(); } @@ -2070,6 +2071,14 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet } return result; } + + private static String mapURLToString(URL url) { + if (url != null) { + return url.toString(); + } else { + return ""; + } + } @Override public CompactRaceMapDataDTO getRaceMapData(RegattaAndRaceIdentifier raceIdentifier, Date date, From f8021b5cfac2794c5cd486bff1bfe47f4f15da34 Mon Sep 17 00:00:00 2001 From: Dennis Aulenbacher Date: Thu, 5 Dec 2019 14:16:00 +0100 Subject: [PATCH 17/44] included DataByLogo widget in RaceBoardPanel --- .../gwt/autoplay/client/nodes/LiveRaceBoardNode.java | 2 +- .../sailing/gwt/ui/raceboard/RaceBoardEntryPoint.java | 2 +- .../sap/sailing/gwt/ui/raceboard/RaceBoardPanel.java | 11 ++++++++++- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/nodes/LiveRaceBoardNode.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/nodes/LiveRaceBoardNode.java index 06e5090afef..b9ccc4f6fb0 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/nodes/LiveRaceBoardNode.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/nodes/LiveRaceBoardNode.java @@ -79,7 +79,7 @@ public class LiveRaceBoardNode extends FiresPlaceNode implements RaceTimesInfoPr /** leaderboardGroupName */ null, /** eventId */ null, cf.getErrorReporter(), StringMessages.INSTANCE, null, raceTimesInfoProvider, true, false, - Arrays.asList(DetailType.values()), result.getLeaderboard(), result.getRace()); + Arrays.asList(DetailType.values()), result.getLeaderboard(), result.getRace(), result.getTrackingConnectorInfos()); setPlaceToGo(new LiveRaceWithRaceboardPlace(raceboardPerspective)); firePlaceChangeAndStartTimer(); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardEntryPoint.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardEntryPoint.java index 906c948208e..8b0893c42f5 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardEntryPoint.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardEntryPoint.java @@ -155,7 +155,7 @@ public class RaceBoardEntryPoint extends AbstractSailingEntryPoint implements Pr raceboardContextDefinition.getLeaderboardName(), raceboardContextDefinition.getLeaderboardGroupName(), raceboardContextDefinition.getEventId(), RaceBoardEntryPoint.this, getStringMessages(), userAgent, raceTimesInfoProvider, showChartMarkEditMediaButtonsAndVideo, true, availableDetailTypes, - raceboardData.getLeaderboard(), selectedRace); + raceboardData.getLeaderboard(), selectedRace, raceboardData.getTrackingConnectorInfos()); RootLayoutPanel.get().add(raceBoardPerspective.getEntryWidget()); if (raceBoardMode != null) { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardPanel.java index 26bfb1e9ba9..0bc1c6f52cf 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardPanel.java @@ -94,6 +94,8 @@ import com.sap.sailing.gwt.ui.raceboard.tagging.TaggingPanel; import com.sap.sailing.gwt.ui.shared.RaceWithCompetitorsAndBoatsDTO; import com.sap.sailing.gwt.ui.shared.RegattaDTO; import com.sap.sailing.gwt.ui.shared.StrippedLeaderboardDTOWithSecurity; +import com.sap.sailing.gwt.ui.shared.TrackingConnectorInfoDTO; +import com.sap.sailing.gwt.ui.shared.databylogo.DataByLogo; import com.sap.sse.common.Distance; import com.sap.sse.common.TimePoint; import com.sap.sse.common.Util; @@ -182,6 +184,7 @@ public class RaceBoardPanel private ManeuverTablePanel maneuverTablePanel; private static final RaceMapResources raceMapResources = GWT.create(RaceMapResources.class); + private Set trackingConnectorInfos; /** * @param eventId @@ -199,6 +202,7 @@ public class RaceBoardPanel * @param availableDetailTypes * A list of all Detailtypes, that will be offered in the Settingsdialog. Can be used to hide settings no * data exists for, eg Bravo, Expdition ect. + * @param trackingConnectorInfos */ public RaceBoardPanel(Component parent, ComponentContext> componentContext, @@ -211,7 +215,7 @@ public class RaceBoardPanel UserAgentDetails userAgent, RaceTimesInfoProvider raceTimesInfoProvider, boolean showChartMarkEditMediaButtonsAndVideo, boolean showHeaderPanel, Iterable availableDetailTypes, StrippedLeaderboardDTOWithSecurity leaderboardDTO, - final RaceWithCompetitorsAndBoatsDTO raceDTO) { + final RaceWithCompetitorsAndBoatsDTO raceDTO, Set trackingConnectorInfos) { super(parent, componentContext, lifecycle, settings); this.sailingService = sailingService; this.mediaService = mediaService; @@ -221,6 +225,7 @@ public class RaceBoardPanel this.userAgent = userAgent; this.timer = timer; this.eventId = eventId; + this.trackingConnectorInfos = trackingConnectorInfos; this.currentRaceHasBeenSelectedOnce = false; this.leaderboardName = leaderboardName; this.selectedRaceIdentifier = selectedRaceIdentifier; @@ -780,8 +785,12 @@ public class RaceBoardPanel timeLineInnerPanel.add(timeLineInnerBgPanel); timeLineInnerPanel.addStyleName("timeLineInnerPanel"); + DataByLogo dataByLogo = new DataByLogo(); + dataByLogo.setUp(trackingConnectorInfos, true); + ResizableFlowPanel timelinePanel = new ResizableFlowPanel(); timelinePanel.add(timeLineInnerPanel); + timelinePanel.add(dataByLogo); timelinePanel.addStyleName("timeLinePanel"); return timelinePanel; From 17e1d760d0ff20cfd27efb9db3c7cf13eee1b76c Mon Sep 17 00:00:00 2001 From: Dennis Aulenbacher Date: Thu, 5 Dec 2019 16:56:04 +0100 Subject: [PATCH 18/44] commented test constructors with null values, added informative javadoc --- .../test/AbstractGPSFixStoreTest.java | 2 +- .../test/impl/RaceLogFixTrackerManagerTest.java | 2 +- .../test/impl/SensorFixStoreAndLoadTest.java | 2 +- .../impl/TrackedRaceStartTimeInferenceTest.java | 10 +++++----- .../src/com/sap/sailing/domain/base/EventBase.java | 7 ++++--- .../domain/tracking/TrackingConnectorInfo.java | 9 +++++++++ .../src/com/sap/sailing/domain/test/CourseTest.java | 4 ++-- ...ourseUpdateDuringNonAtomicSerializationTest.java | 2 +- .../domain/test/LeaderboardCourseChangeTest.java | 2 +- .../domain/test/SerializeRankingMetricTest.java | 2 +- .../StarbordSideOfStartLineRecognitionTest.java | 2 +- .../com/sap/sailing/domain/test/TrackBasedTest.java | 2 +- .../sailing/domain/test/UpdateMarkPassingTest.java | 13 +++++++------ .../src/com/sap/sailing/domain/test/WindTest.java | 2 +- .../AbstractExportedPositionsBasedTest.java | 2 +- .../AbstractMockedRaceMarkPassingTest.java | 2 +- .../domain/tracking/impl/TrackedRegattaTest.java | 2 +- .../sap/sailing/domain/tracking/TrackedRace.java | 4 ++-- .../TestStoringAndRetrievingWindTracksTest.java | 2 +- .../sailing/server/statistics/StatisticsTest.java | 2 +- .../server/test/ApplyScoresFromRaceLogTest.java | 2 +- .../server/test/RaceTrackerStartStopTest.java | 2 +- .../sailing/server/test/RemoveLeaderboardTest.java | 2 +- .../com/sap/sailing/server/util/EventUtilTest.java | 3 ++- 24 files changed, 48 insertions(+), 36 deletions(-) diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/AbstractGPSFixStoreTest.java b/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/AbstractGPSFixStoreTest.java index 1d08d8649e3..3eb80e7824b 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/AbstractGPSFixStoreTest.java +++ b/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/AbstractGPSFixStoreTest.java @@ -129,7 +129,7 @@ public class AbstractGPSFixStoreTest extends RaceLogTrackingTestHelper { /* endDate */null, null, null, "a", null, /* registrationLinkSecret */ UUID.randomUUID().toString())); return new DynamicTrackedRaceImpl(regatta, raceDefinition, Collections. emptyList(), EmptyWindStore.INSTANCE, 0, 0, 0, /* useMarkPassingCalculator */ false, OneDesignRankingMetric::new, - mock(RaceLogAndTrackedRaceResolver.class), null); + mock(RaceLogAndTrackedRaceResolver.class), /* trackingConnectorInfo */ null); } protected void testNumberOfRawFixes(Track track, long expected) { diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/impl/RaceLogFixTrackerManagerTest.java b/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/impl/RaceLogFixTrackerManagerTest.java index 0f9e0df4712..4cdafbe4dfd 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/impl/RaceLogFixTrackerManagerTest.java +++ b/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/impl/RaceLogFixTrackerManagerTest.java @@ -108,7 +108,7 @@ public class RaceLogFixTrackerManagerTest { /* registrationLinkSecret */ UUID.randomUUID().toString())); trackedRace = new DynamicTrackedRaceImpl(regatta, race, Collections. emptyList(), EmptyWindStore.INSTANCE, 0, 0, 0, /* useMarkPassingCalculator */ false, OneDesignRankingMetric::new, - mock(RaceLogAndTrackedRaceResolver.class), null); + mock(RaceLogAndTrackedRaceResolver.class), /* trackingConnectorInfo */ null); } /** diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/impl/SensorFixStoreAndLoadTest.java b/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/impl/SensorFixStoreAndLoadTest.java index 20c856cf637..49f7536337f 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/impl/SensorFixStoreAndLoadTest.java +++ b/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/impl/SensorFixStoreAndLoadTest.java @@ -173,7 +173,7 @@ public class SensorFixStoreAndLoadTest { /* registrationLinkSecret */ UUID.randomUUID().toString())); trackedRace = new DynamicTrackedRaceImpl(regatta, race, Collections. emptyList(), EmptyWindStore.INSTANCE, 0, 0, 0, /* useMarkPassingCalculator */ false, OneDesignRankingMetric::new, - mock(RaceLogAndTrackedRaceResolver.class), null); + mock(RaceLogAndTrackedRaceResolver.class), /* trackingConnectorInfo */ null); } private void dropPersistedData() { diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/impl/TrackedRaceStartTimeInferenceTest.java b/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/impl/TrackedRaceStartTimeInferenceTest.java index 7436165f12c..d8736ef0c28 100755 --- a/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/impl/TrackedRaceStartTimeInferenceTest.java +++ b/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/impl/TrackedRaceStartTimeInferenceTest.java @@ -84,7 +84,7 @@ public class TrackedRaceStartTimeInferenceTest extends AbstractGPSFixStoreTest { final DynamicTrackedRaceImpl trackedRace = new DynamicTrackedRaceImpl(regatta, race, Collections. emptyList(), EmptyWindStore.INSTANCE, 0, 0, 0, /* useMarkPassingCalculator */ false, - OneDesignRankingMetric::new, mock(RaceLogAndTrackedRaceResolver.class), null); + OneDesignRankingMetric::new, mock(RaceLogAndTrackedRaceResolver.class), /* trackingConnectorInfo */ null); MillisecondsTimePoint startOfRaceInRaceLog = new MillisecondsTimePoint(10000); MillisecondsTimePoint endOfRaceInRaceLog = new MillisecondsTimePoint(20000); @@ -162,7 +162,7 @@ public class TrackedRaceStartTimeInferenceTest extends AbstractGPSFixStoreTest { final DynamicTrackedRaceImpl trackedRace = new DynamicTrackedRaceImpl(regatta, race, Collections. emptyList(), EmptyWindStore.INSTANCE, 0, 0, 0, /* useMarkPassingCalculator */ false, - OneDesignRankingMetric::new, mock(RaceLogAndTrackedRaceResolver.class), null); + OneDesignRankingMetric::new, mock(RaceLogAndTrackedRaceResolver.class), /* trackingConnectorInfo */ null); trackedRace.attachRaceLog(raceLog); final TimePoint[] oldAndNewStartTimeNotifiedByRace = new TimePoint[2]; trackedRace.addListener(new AbstractRaceChangeListener() { @@ -206,7 +206,7 @@ public class TrackedRaceStartTimeInferenceTest extends AbstractGPSFixStoreTest { final DynamicTrackedRaceImpl trackedRace = new DynamicTrackedRaceImpl(regatta, race, Collections. emptyList(), EmptyWindStore.INSTANCE, 0, 0, 0, /* useMarkPassingCalculator */ false, - OneDesignRankingMetric::new, mock(RaceLogAndTrackedRaceResolver.class), null); + OneDesignRankingMetric::new, mock(RaceLogAndTrackedRaceResolver.class), /* trackingConnectorInfo */ null); final TimePoint[] oldAndNewStartTimeNotifiedByRace = new TimePoint[2]; trackedRace.addListener(new AbstractRaceChangeListener() { @Override @@ -254,7 +254,7 @@ public class TrackedRaceStartTimeInferenceTest extends AbstractGPSFixStoreTest { final DynamicTrackedRaceImpl trackedRace = new DynamicTrackedRaceImpl(regatta, race, Collections. emptyList(), EmptyWindStore.INSTANCE, 0, 0, 0, /* useMarkPassingCalculator */ false, - OneDesignRankingMetric::new, mock(RaceLogAndTrackedRaceResolver.class), null); + OneDesignRankingMetric::new, mock(RaceLogAndTrackedRaceResolver.class), /* trackingConnectorInfo */ null); trackedRace.attachRaceLog(raceLog); trackedRace.attachRegattaLog(regattaLog); final TimePoint[] newStartAndEndOfTrackingNotifiedByRace = new TimePoint[2]; @@ -369,7 +369,7 @@ public class TrackedRaceStartTimeInferenceTest extends AbstractGPSFixStoreTest { final DynamicTrackedRaceImpl trackedRace = new DynamicTrackedRaceImpl(regatta, race, Collections. emptyList(), EmptyWindStore.INSTANCE, 0, 0, 0, /* useMarkPassingCalculator */ false, - OneDesignRankingMetric::new, mock(RaceLogAndTrackedRaceResolver.class), null); + OneDesignRankingMetric::new, mock(RaceLogAndTrackedRaceResolver.class), /* trackingConnectorInfo */ null); trackedRace.attachRaceLog(raceLog); final TimePoint[] oldAndNewStartTimeNotifiedByRace = new TimePoint[2]; trackedRace.addListener(new AbstractRaceChangeListener() { diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/EventBase.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/EventBase.java index c3ee25ee440..bb7b126b107 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/EventBase.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/EventBase.java @@ -109,10 +109,11 @@ public interface EventBase extends NamedWithID, WithDescription, Renamable, With boolean setMediaURLs(Iterable imageURLs, Iterable sponsorImageURLs, Iterable videoURLs, URL logoImageURL, Map imageSizes); /** - * Determines whether the race is tracked by TracTrac or not + * Gets all TrackingConnectorInfos containing information over what TrackingConnectors are involved in tracking this + * event * - * @return a boolean flag, whether any {@link TrackedRace} in the event is tracked by which connector; the set - * returned is never {@code null} and never contains {@code null} values, but it may be empty + * @return a Set of {@link TrackingConnectorInfo}; the set returned is never {@code null} and never contains + * {@code null} values, but it may be empty */ Set getTrackingConnectorInfos(); } diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/tracking/TrackingConnectorInfo.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/tracking/TrackingConnectorInfo.java index dc90a162c46..620cfba8a5d 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/tracking/TrackingConnectorInfo.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/tracking/TrackingConnectorInfo.java @@ -4,6 +4,15 @@ import java.io.Serializable; import java.net.URL; public interface TrackingConnectorInfo extends Serializable { + + /** + * gets a String representation of the Tracking-Service used to Track the Race + */ String getTrackedBy(); + + /** + * gets a {@link URL} representation of the web-URL associated with the Event; + * may be {@code null} if the API of the respective Tracking-Service does not provide a URL; + */ URL getWebUrl(); } diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/CourseTest.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/CourseTest.java index f7d7b010571..06c1def9398 100755 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/CourseTest.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/CourseTest.java @@ -317,7 +317,7 @@ public class CourseTest { Collections. emptyList(), EmptyWindStore.INSTANCE, /* delayToLiveInMillis */3000, /* millisecondsOverWhichToAverageWind */30000, /* millisecondsOverWhichToAverageSpeed */8000, /*useMarkPassingCalculator*/ false, OneDesignRankingMetric::new, - mock(RaceLogAndTrackedRaceResolver.class), null); + mock(RaceLogAndTrackedRaceResolver.class), /* trackingConnectorInfo */ null); assertLegStructure(course, trackedRace); course.removeWaypoint(0); assertLegStructure(course, trackedRace); @@ -353,7 +353,7 @@ public class CourseTest { EmptyWindStore.INSTANCE, /* delayToLiveInMillis */ 3000, /* millisecondsOverWhichToAverageWind */ 30000, /* millisecondsOverWhichToAverageSpeed */ 8000, /*useMarkPassingCalculator*/ false, OneDesignRankingMetric::new, - mock(RaceLogAndTrackedRaceResolver.class), null); + mock(RaceLogAndTrackedRaceResolver.class), /* trackingConnectorInfo */ null); assertLegStructure(course, trackedRace); final WaypointImpl wp1_5 = new WaypointImpl(new MarkImpl("Test Mark 1.5")); assertWaypointIndexes(course); diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/CourseUpdateDuringNonAtomicSerializationTest.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/CourseUpdateDuringNonAtomicSerializationTest.java index 9af6d89a18a..75358acbe69 100755 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/CourseUpdateDuringNonAtomicSerializationTest.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/CourseUpdateDuringNonAtomicSerializationTest.java @@ -87,7 +87,7 @@ public class CourseUpdateDuringNonAtomicSerializationTest implements Serializabl trackedRace = new DynamicTrackedRaceImpl(trackedRegatta, race, Collections. emptySet(), EmptyWindStore.INSTANCE, /* delayToLiveInMillis */10000, /* millisecondsOverWhichToAverageWind */30000, /* millisecondsOverWhichToAverageSpeed */ - 7000, /*useMarkPassingCalculator*/ false, OneDesignRankingMetric::new, mock(RaceLogAndTrackedRaceResolver.class), null) { + 7000, /*useMarkPassingCalculator*/ false, OneDesignRankingMetric::new, mock(RaceLogAndTrackedRaceResolver.class), /* trackingConnectorInfo */ null) { private static final long serialVersionUID = 9114777576548711763L; @Override diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/LeaderboardCourseChangeTest.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/LeaderboardCourseChangeTest.java index c2e9f0c5bf9..72f2100a9d6 100644 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/LeaderboardCourseChangeTest.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/LeaderboardCourseChangeTest.java @@ -152,7 +152,7 @@ public class LeaderboardCourseChangeTest { TrackedRace spyedTrackedRace = spy(new DynamicTrackedRaceImpl(mockedTrackedRegatta, mockedRace, new HashSet(), EmptyWindStore.INSTANCE, 5000, 20000, 20000, /* useMarkPassingCalculator */ false, OneDesignRankingMetric::new, - mock(RaceLogAndTrackedRaceResolver.class), null)); + mock(RaceLogAndTrackedRaceResolver.class), /* trackingConnectorInfo */ null)); return spyedTrackedRace; } diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/SerializeRankingMetricTest.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/SerializeRankingMetricTest.java index 2bb6aa5c1ff..d6d0c5e6dac 100644 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/SerializeRankingMetricTest.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/SerializeRankingMetricTest.java @@ -42,7 +42,7 @@ public class SerializeRankingMetricTest extends AbstractSerializationTest { new RaceDefinitionImpl("Race", new CourseImpl("Course", Collections.emptyList()) , /* boatClass */ _49er, Collections.emptyMap()), Collections. emptyList(), EmptyWindStore.INSTANCE, 0l, 0l, 0l, - false, TimeOnTimeAndDistanceRankingMetric::new, null, null); + false, TimeOnTimeAndDistanceRankingMetric::new, null, /* trackingConnectorInfo */ null); RankingMetric clone = cloneBySerialization(trackedRace.getRankingMetric(), DomainFactory.INSTANCE); assertNotNull(clone); assertTrue(clone instanceof TimeOnTimeAndDistanceRankingMetric); diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/StarbordSideOfStartLineRecognitionTest.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/StarbordSideOfStartLineRecognitionTest.java index f785f15f241..414785581e3 100755 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/StarbordSideOfStartLineRecognitionTest.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/StarbordSideOfStartLineRecognitionTest.java @@ -91,7 +91,7 @@ public class StarbordSideOfStartLineRecognitionTest { public MockedTrackedRaceImpl() { super(null, null, Collections. emptyList(), null, 0, 0, 0, 0, false, OneDesignRankingMetric::new, - mock(RaceLogAndTrackedRaceResolver.class), /* tracking connector info */ null); + mock(RaceLogAndTrackedRaceResolver.class), /* trackingConnectorInfo */ null); } @Override diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/TrackBasedTest.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/TrackBasedTest.java index bb4428e912e..13062de8195 100755 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/TrackBasedTest.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/TrackBasedTest.java @@ -201,7 +201,7 @@ public abstract class TrackBasedTest { /* delayToLiveInMillis */ 0, /* millisecondsOverWhichToAverageWind */ 30000, /* millisecondsOverWhichToAverageSpeed */ 30000, /* delay for wind estimation cache invalidation */ 0, useMarkPassingCalculator, - rankingMetricConstructor, raceLogResolver, null); + rankingMetricConstructor, raceLogResolver, /** trackingConnectorInfo **/ null); // in this simplified artificial course, the top mark is exactly north of the right leeward gate DegreePosition topPosition = new DegreePosition(54.48, 10.24); TimePoint afterTheRace = new MillisecondsTimePoint(timePointForFixes.asMillis() + 36000000); // 10h after the fix timed diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/UpdateMarkPassingTest.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/UpdateMarkPassingTest.java index d91a48135ac..a8c5fd69094 100755 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/UpdateMarkPassingTest.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/UpdateMarkPassingTest.java @@ -47,12 +47,13 @@ public class UpdateMarkPassingTest { when(race.getBoatClass()).thenReturn(new BoatClassImpl("49er", /* typicallyStartsUpwind */ true)); when(race.getCompetitors()).thenReturn(Collections.singleton(competitor)); DynamicTrackedRaceImpl trackedRace = new DynamicTrackedRaceImpl( - /* trackedRegatta */new DynamicTrackedRegattaImpl(new RegattaImpl("test", null, true, CompetitorRegistrationType.CLOSED, null, null, new HashSet(), false, null, - "test", null, OneDesignRankingMetric::new, - /* registrationLinkSecret */ UUID.randomUUID().toString())), - race, Collections. emptyList(), EmptyWindStore.INSTANCE, - /* delayToLiveInMillis */1000, /* millisecondsOverWhichToAverageWind */30000, - /* millisecondsOverWhichToAverageSpeed */30000, /*useMarkPassingCalculator*/ false, OneDesignRankingMetric::new, mock(RaceLogAndTrackedRaceResolver.class), null); + /* trackedRegatta */new DynamicTrackedRegattaImpl(new RegattaImpl("test", null, true, + CompetitorRegistrationType.CLOSED, null, null, new HashSet(), false, null, "test", null, + OneDesignRankingMetric::new, /* registrationLinkSecret */ UUID.randomUUID().toString())), + race, Collections. emptyList(), EmptyWindStore.INSTANCE, /* delayToLiveInMillis */1000, + /* millisecondsOverWhichToAverageWind */30000, /* millisecondsOverWhichToAverageSpeed */30000, + /* useMarkPassingCalculator */ false, OneDesignRankingMetric::new, + mock(RaceLogAndTrackedRaceResolver.class), /* trackingConnectorInfo */ null); TimePoint now = MillisecondsTimePoint.now(); TimePoint later = now.plus(1000); trackedRace.updateMarkPassings(competitor, Arrays.asList(new MarkPassing[] { new MarkPassingImpl(now, waypoint, competitor) })); diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/WindTest.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/WindTest.java index e5ee6145e4b..36995d20702 100755 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/WindTest.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/WindTest.java @@ -317,7 +317,7 @@ public class WindTest { EmptyWindStore.INSTANCE, /* delayToLiveInMillis */ 1000, /* millisecondsOverWhichToAverageWind */ 30000, /* millisecondsOverWhichToAverageSpeed */ 30000, /*useMarkPassingCalculator*/ false, OneDesignRankingMetric::new, - mock(RaceLogAndTrackedRaceResolver.class), null); + mock(RaceLogAndTrackedRaceResolver.class), /* trackingConnectorInfo */ null); TimePoint start = MillisecondsTimePoint.now(); TimePoint topMarkRounding = start.plus(30000); TimePoint finish = topMarkRounding.plus(30000); diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/markpassing/AbstractExportedPositionsBasedTest.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/markpassing/AbstractExportedPositionsBasedTest.java index 0a022f16639..fa10bdaf549 100755 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/markpassing/AbstractExportedPositionsBasedTest.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/markpassing/AbstractExportedPositionsBasedTest.java @@ -106,7 +106,7 @@ public abstract class AbstractExportedPositionsBasedTest { /* sidelines */ Collections.emptySet(), EmptyWindStore.INSTANCE, /* delayToLiveInMillis */ 3000, /* millisecondsOverWhichToAverageWind */ 15000, /* millisecondsOverWhichToAverageSpeed */ 10000, - /* useInternalMarkPassingAlgorithm */ true, OneDesignRankingMetric::new, /* raceLogResolver */ null, null); + /* useInternalMarkPassingAlgorithm */ true, OneDesignRankingMetric::new, /* raceLogResolver */ null, /* trackingConnectorInfo */ null); result.setStatus(new TrackedRaceStatusImpl(TrackedRaceStatusEnum.LOADING, 0.0)); for (final Entry> e : competitorsAndTheirTracks.entrySet()) { final DynamicGPSFixTrack track = result.getTrack(e.getKey()); diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/markpassing/AbstractMockedRaceMarkPassingTest.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/markpassing/AbstractMockedRaceMarkPassingTest.java index 72f500b09d9..050f92b5817 100755 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/markpassing/AbstractMockedRaceMarkPassingTest.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/markpassing/AbstractMockedRaceMarkPassingTest.java @@ -88,7 +88,7 @@ public class AbstractMockedRaceMarkPassingTest { race = new DynamicTrackedRaceImpl(new DynamicTrackedRegattaImpl(r), raceDef, new ArrayList(), new EmptyWindStore(), 0, 10000, 10000, /* useMarkPassingCalculator */ false, OneDesignRankingMetric::new, - mock(RaceLogAndTrackedRaceResolver.class), null); + mock(RaceLogAndTrackedRaceResolver.class), /* trackingConnectorInfo */ null); race.setStartTimeReceived(new MillisecondsTimePoint(10000)); TimePoint t = new MillisecondsTimePoint(30000); List> pos = Arrays.asList(new Util.Pair(m, new DegreePosition(0, 0)), diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/tracking/impl/TrackedRegattaTest.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/tracking/impl/TrackedRegattaTest.java index aeeca3b8f2f..c2714cd837c 100644 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/tracking/impl/TrackedRegattaTest.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/tracking/impl/TrackedRegattaTest.java @@ -122,6 +122,6 @@ public class TrackedRegattaTest { RaceDefinition race1 = new RaceDefinitionImpl(name, course, boatClass, Collections.emptyMap()); return new DynamicTrackedRaceImpl(regatta, race1, Collections. emptyList(), EmptyWindStore.INSTANCE, 0, 0, 0, /* useMarkPassingCalculator */ false, OneDesignRankingMetric::new, - mock(RaceLogAndTrackedRaceResolver.class), /* tracking connector info */ null); + mock(RaceLogAndTrackedRaceResolver.class), /* trackingConnectorInfo */ null); } } diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackedRace.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackedRace.java index 0757a5e3289..cfee4b6970a 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackedRace.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackedRace.java @@ -1249,8 +1249,8 @@ public interface TrackedRace } /** - * gets a String representation of the Tracking-Service used to Track the Race; may be {@code null}, particularly in - * test set-ups + * gets a {@link TrackingConnectorInfo}, which contains a String representation of the Tracking-Service used to Track the Race and a web-URL for the Event Event; + * may be {@code null}, particularly in test set-ups */ TrackingConnectorInfo getTrackingConnectorInfo(); } diff --git a/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestStoringAndRetrievingWindTracksTest.java b/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestStoringAndRetrievingWindTracksTest.java index 5d3d8ea2122..010f2a34ce5 100755 --- a/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestStoringAndRetrievingWindTracksTest.java +++ b/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestStoringAndRetrievingWindTracksTest.java @@ -106,7 +106,7 @@ public class TestStoringAndRetrievingWindTracksTest extends AbstractTracTracLive public void addRaceDefinition(RaceDefinition race, DynamicTrackedRace trackedRace) { } }, /*useMarkPassingCalculator*/ false, mock(RaceLogAndTrackedRaceResolver.class), - Optional.empty(), null); + Optional.empty(), /* trackingConnectorInfo */ null); WindSource windSource = new WindSourceImpl(WindSourceType.WEB); MongoClient myFirstMongo = newMongo(); MongoDatabase firstDatabase = myFirstMongo.getDatabase(dbConfiguration.getDatabaseName()); diff --git a/java/com.sap.sailing.server.test/src/com/sap/sailing/server/statistics/StatisticsTest.java b/java/com.sap.sailing.server.test/src/com/sap/sailing/server/statistics/StatisticsTest.java index d70c69384a7..2f063a24358 100644 --- a/java/com.sap.sailing.server.test/src/com/sap/sailing/server/statistics/StatisticsTest.java +++ b/java/com.sap.sailing.server.test/src/com/sap/sailing/server/statistics/StatisticsTest.java @@ -84,7 +84,7 @@ public class StatisticsTest { trackedRace = new DynamicTrackedRaceImpl(regatta, race, Collections.emptyList(), EmptyWindStore.INSTANCE, 0, 0, 0, /* useMarkPassingCalculator */ false, OneDesignRankingMetric::new, - mock(RaceLogAndTrackedRaceResolver.class), null); + mock(RaceLogAndTrackedRaceResolver.class), /* trackingConnectorInfo */ null); trackedRace.setStartOfTrackingReceived(new MillisecondsTimePoint(START_OF_TRACKING)); trackedRace.setEndOfTrackingReceived(new MillisecondsTimePoint(END_OF_TRACKING)); trackedRace.setStartTimeReceived(new MillisecondsTimePoint(START_OF_RACE)); diff --git a/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/ApplyScoresFromRaceLogTest.java b/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/ApplyScoresFromRaceLogTest.java index 09d27407b2c..787b98f75cb 100644 --- a/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/ApplyScoresFromRaceLogTest.java +++ b/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/ApplyScoresFromRaceLogTest.java @@ -138,7 +138,7 @@ public class ApplyScoresFromRaceLogTest extends LeaderboardScoringAndRankingTest /* delayToLiveInMillis */ 5000, /* millisecondsOverWhichToAverageWind */ 15000, /* millisecondsOverWhichToAverageSpeed */ 10000, /* useInternalMarkPassingAlgorithm */ false, OneDesignRankingMetric::new, - /* raceLogResolver */ service, null); + /* raceLogResolver */ service, /* trackingConnectorInfo */ null); final Fleet fleet = f1Column.getFleets().iterator().next(); f1Column.setTrackedRace(fleet, newF1); // Now add a CompetitorResult to the race log: diff --git a/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/RaceTrackerStartStopTest.java b/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/RaceTrackerStartStopTest.java index 3bcb6041be7..9ae7b84250e 100644 --- a/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/RaceTrackerStartStopTest.java +++ b/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/RaceTrackerStartStopTest.java @@ -90,7 +90,7 @@ public class RaceTrackerStartStopTest { /* windStore */ EmptyWindStore.INSTANCE, /* delayToLiveInMillis */ 0l, /* millisecondsOverWhichToAverageWind */ 0l, /* millisecondsOverWhichToAverageSpeed */ 0l, /* raceDefinitionSetToUpdate */ null, /*useMarkPassingCalculator*/ false, mock(RaceLogAndTrackedRaceResolver.class), - Optional.empty(), null); + Optional.empty(), /* trackingConnectorInfo */ null); regatta.addRace(raceDef2); trackedRegatta1.createTrackedRace(raceDef2, Collections. emptyList(), /* windStore */ EmptyWindStore.INSTANCE, /* delayToLiveInMillis */ 0l, diff --git a/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/RemoveLeaderboardTest.java b/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/RemoveLeaderboardTest.java index b5a8c56bcba..250e21ef91a 100755 --- a/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/RemoveLeaderboardTest.java +++ b/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/RemoveLeaderboardTest.java @@ -105,7 +105,7 @@ public class RemoveLeaderboardTest { /* windStore */ EmptyWindStore.INSTANCE, /* delayToLiveInMillis */ 0l, /* millisecondsOverWhichToAverageWind */ 0l, /* millisecondsOverWhichToAverageSpeed */ 0l, /* raceDefinitionSetToUpdate */ null, /*useMarkPassingCalculator*/ false, mock(RaceLogAndTrackedRaceResolver.class), - Optional.empty(), null); + Optional.empty(), /* trackingConnectorInfo */ null); } @Test diff --git a/java/com.sap.sailing.server.test/src/com/sap/sailing/server/util/EventUtilTest.java b/java/com.sap.sailing.server.test/src/com/sap/sailing/server/util/EventUtilTest.java index 453171b46ee..98f7eeac204 100644 --- a/java/com.sap.sailing.server.test/src/com/sap/sailing/server/util/EventUtilTest.java +++ b/java/com.sap.sailing.server.test/src/com/sap/sailing/server/util/EventUtilTest.java @@ -23,6 +23,7 @@ public class EventUtilTest { Calendar calendar = Calendar.getInstance(); calendar.set(year, month - 1, date); MillisecondsTimePoint startEnd = new MillisecondsTimePoint(calendar.getTime()); - return new StrippedEventImpl("Test", startEnd, startEnd, "Anywhere", true, UUID.randomUUID(), null, Collections.emptySet()); + return new StrippedEventImpl("Test", startEnd, startEnd, "Anywhere", true, UUID.randomUUID(), + /** leaderBoardGroups **/ null, /** trackingConnectorInfos **/ Collections.emptySet()); } } From 1ebbf980bedde2cc4ef0ed048eb087325f69ed24 Mon Sep 17 00:00:00 2001 From: Dennis Aulenbacher Date: Thu, 5 Dec 2019 16:56:49 +0100 Subject: [PATCH 19/44] renamed variable to improve naming consistency --- .../deserialization/impl/EventBaseJsonDeserializer.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/deserialization/impl/EventBaseJsonDeserializer.java b/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/deserialization/impl/EventBaseJsonDeserializer.java index 42728faac6e..c86ecc09566 100644 --- a/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/deserialization/impl/EventBaseJsonDeserializer.java +++ b/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/deserialization/impl/EventBaseJsonDeserializer.java @@ -63,14 +63,14 @@ public class EventBaseJsonDeserializer implements JsonDeserializer { leaderboardGroups.add(leaderboardGroupDeserializer.deserialize((JSONObject) lgJson)); } } - Set trackedBy = new HashSet<>(); + Set trackingConnectorInfos = new HashSet<>(); JSONArray trackedByJson = Helpers.getNestedArraySafe(eventJson, EventBaseJsonSerializer.FIELD_TRACKING_CONNECTOR_INFOS); for (Object jsonPair : trackedByJson) { - trackedBy.add(trackingConnectorInfoDeserializer.deserialize((JSONObject) jsonPair)); + trackingConnectorInfos.add(trackingConnectorInfoDeserializer.deserialize((JSONObject) jsonPair)); } StrippedEventImpl result = new StrippedEventImpl(name, startDate == null ? null : new MillisecondsTimePoint(startDate.longValue()), - endDate == null ? null : new MillisecondsTimePoint(endDate.longValue()), venue, /* is public */ true, id, leaderboardGroups, trackedBy); + endDate == null ? null : new MillisecondsTimePoint(endDate.longValue()), venue, /* is public */ true, id, leaderboardGroups, trackingConnectorInfos); result.setDescription(description); if (officialWebsiteURLAsString != null) { try { From 3c391c9a1ede4168cd630e87d8fc68b6d0e5fbfb Mon Sep 17 00:00:00 2001 From: Dennis Aulenbacher Date: Thu, 12 Dec 2019 10:42:34 +0100 Subject: [PATCH 20/44] moved color handlong of "data by" span to dataByLogo-Widget --- .../gwt/home/client/shared/databylogo/DataByLogo.gss | 8 ++++++++ .../gwt/home/client/shared/databylogo/DataByLogo.java | 5 ++++- .../client/shared/databylogo/DataByLogoResources.java | 2 ++ .../sap/sailing/gwt/home/desktop/partials/stage/Stage.gss | 1 - .../gwt/home/mobile/partials/eventheader/EventHeader.gss | 1 - .../sap/sailing/gwt/home/mobile/partials/stage/Stage.gss | 1 - 6 files changed, 14 insertions(+), 4 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.gss b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.gss index 6543486b051..4934ef09d6d 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.gss +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.gss @@ -15,4 +15,12 @@ white-space: nowrap; font-size: 0.75em; cursor: pointer; +} + +.databylogo_white_text{ + color: white; +} + +.databylogo_black_text{ + color: black; } \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.java index d20e4716d9c..cafee20d6d3 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.java @@ -67,10 +67,13 @@ public class DataByLogo extends Widget { } private void setUpTracTracLogo(boolean colorIfPossible) { + DataByLogoResources resources = DataByLogoResources.INSTANCE; if (colorIfPossible) { - logo.setSrc(DataByLogoResources.INSTANCE.tractracColor().getSafeUri().asString()); + logo.setSrc(resources.tractracColor().getSafeUri().asString()); + this.addStyleName(resources.css().databylogo_black_text()); } else { logo.setSrc(DataByLogoResources.INSTANCE.tractracWhite().getSafeUri().asString()); + this.addStyleName(resources.css().databylogo_white_text()); } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogoResources.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogoResources.java index 8afbc67e2a5..07eb3bf3b96 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogoResources.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogoResources.java @@ -24,5 +24,7 @@ public interface DataByLogoResources extends SharedHomeResources { String databylogo_logo(); String databylogo_subtlelink(); String databylogo_container(); + String databylogo_white_text(); + String databylogo_black_text(); } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/stage/Stage.gss b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/stage/Stage.gss index 7e4dff69aad..e8e8dc7e9e7 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/stage/Stage.gss +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/stage/Stage.gss @@ -210,7 +210,6 @@ transition: width 0.1s linear; } .stage_dataBy_logo_container{ - color: white; padding: 0 0.4em; line-height: 4rem; } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/eventheader/EventHeader.gss b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/eventheader/EventHeader.gss index 85325907188..39dac52d339 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/eventheader/EventHeader.gss +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/eventheader/EventHeader.gss @@ -59,7 +59,6 @@ } .eventheader_info_subtitle_dataBy_logo_container{ - color: black; position:absolute; bottom:0.25em; right:0.25em; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/Stage.gss b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/Stage.gss index cc9944e2df9..880f1acbad2 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/Stage.gss +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/Stage.gss @@ -207,7 +207,6 @@ } .stageteaser_databylogo_container{ - color: white; padding: .6em 0.4em 0.6em .4em; float: right; } From 8e440ecc5e715f2b445b76a2f793c893a89d3ec2 Mon Sep 17 00:00:00 2001 From: Dennis Aulenbacher Date: Thu, 12 Dec 2019 15:18:52 +0100 Subject: [PATCH 21/44] Improved positioning of the DataBy logo for mobile StageTeaser in case the date info is unusually long. --- .../gwt/home/client/shared/databylogo/DataByLogo.gss | 8 +++++++- .../gwt/home/client/shared/databylogo/DataByLogo.ui.xml | 2 +- .../client/shared/databylogo/DataByLogoResources.java | 1 + .../sap/sailing/gwt/home/mobile/partials/stage/Stage.gss | 3 +-- .../gwt/home/mobile/partials/stage/StageTeaserBand.java | 3 --- .../gwt/home/mobile/partials/stage/StageTeaserBand.ui.xml | 8 +++----- 6 files changed, 13 insertions(+), 12 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.gss b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.gss index 4934ef09d6d..e53912ce436 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.gss +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.gss @@ -1,5 +1,11 @@ -.databylogo_logo{ +img.databylogo_logo{ height: 1.3333333em !important; + display: inline-block; + vertical-align: middle; +} + +.databylogo_text{ + vertical-align: middle; } .databylogo_subtlelink, diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.ui.xml index 8eef73c5fe9..47d05e5dfcd 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.ui.xml +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.ui.xml @@ -4,7 +4,7 @@ - + \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogoResources.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogoResources.java index 07eb3bf3b96..7f8cbb368af 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogoResources.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogoResources.java @@ -26,5 +26,6 @@ public interface DataByLogoResources extends SharedHomeResources { String databylogo_container(); String databylogo_white_text(); String databylogo_black_text(); + String databylogo_text(); } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/Stage.gss b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/Stage.gss index 880f1acbad2..f247cd8c097 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/Stage.gss +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/Stage.gss @@ -207,8 +207,7 @@ } .stageteaser_databylogo_container{ - padding: .6em 0.4em 0.6em .4em; - float: right; + padding-top: .4em; } @external slick-dots, slick-active; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/StageTeaserBand.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/StageTeaserBand.java index 7022aefa7e6..46a3a439e71 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/StageTeaserBand.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/StageTeaserBand.java @@ -50,9 +50,6 @@ public abstract class StageTeaserBand extends Composite { dataByLogo.setVisible(false); } - // TODO currently hidden by default - dataByLogo.setVisible(false); - eventNavigation = placeNavigator.getEventNavigation(event.getId().toString(), event.getBaseURL(), event.isOnRemoteServer()); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/StageTeaserBand.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/StageTeaserBand.ui.xml index e8062ce1401..4dc84912869 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/StageTeaserBand.ui.xml +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/StageTeaserBand.ui.xml @@ -10,16 +10,14 @@ .left { - display: inline; - position: absolute; top: 0px; left: 0px; width: 50%; vertical-align: middle; } .right { - display: inline; - position: absolute; + display: inline; + position: absolute; top: 0px; left: 50%; right: 0px; @@ -41,11 +39,11 @@
+
-
From 36b01b800f10ea06a532e909c7a77042379f5012 Mon Sep 17 00:00:00 2001 From: Dennis Aulenbacher Date: Thu, 12 Dec 2019 16:05:28 +0100 Subject: [PATCH 22/44] repositioned DataByLogo in RaceBoard and improved layouting for mobile view --- java/com.sap.sailing.gwt.ui/RaceBoard.css | 17 +++++++++++++++++ .../gwt/ui/raceboard/RaceBoardPanel.java | 10 +++++++--- .../gwt/ui/shared/databylogo/DataByLogo.gss | 13 +++++++++++++ .../gwt/ui/shared/databylogo/DataByLogo.java | 5 ++++- .../gwt/ui/shared/databylogo/DataByLogo.ui.xml | 2 +- .../shared/databylogo/DataByLogoResources.java | 3 +++ 6 files changed, 45 insertions(+), 5 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/RaceBoard.css b/java/com.sap.sailing.gwt.ui/RaceBoard.css index 3f1498b8616..2d4143de0b4 100755 --- a/java/com.sap.sailing.gwt.ui/RaceBoard.css +++ b/java/com.sap.sailing.gwt.ui/RaceBoard.css @@ -697,6 +697,15 @@ img.openColumn { color: white; } +.RegattaAndRaceTime-Header_with_databy { + top: 3px; +} + +.compactHeader .RegattaAndRaceTime-Header.RegattaAndRaceTime-Header_with_databy { + top: 0; + font-size: 90%; +} + .RegattaAndRaceTime-Header .RegattaName-Anchor { font-size: 15px; color: white; @@ -717,6 +726,14 @@ img.openColumn { margin-top: 5px; } +.compactHeader .RegattaAndRaceTime-Header>* { + margin-top: 3px; +} + +.RegattaAndRaceTime-Header_with_databy .RegattaName-Anchor, .RegattaAndRaceTime-Header_with_databy .RaceTime-Label { + font-size: 13px; +} + .compactHeader .RegattaRaceInformation-Header { left: 110px; } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardPanel.java index 0bc1c6f52cf..ff21cb0211b 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardPanel.java @@ -717,6 +717,12 @@ public class RaceBoardPanel regattaAndRaceTimeInformationHeader.clear(); regattaAndRaceTimeInformationHeader.add(regattaNameAnchor); regattaAndRaceTimeInformationHeader.add(raceTimeLabel); + DataByLogo dataByLogo = new DataByLogo(); + dataByLogo.setUp(trackingConnectorInfos, false); + if (dataByLogo.isVisible()) { + regattaAndRaceTimeInformationHeader.addStyleName("RegattaAndRaceTime-Header_with_databy"); + } + regattaAndRaceTimeInformationHeader.add(dataByLogo); currentRaceHasBeenSelectedOnce = true; taggingPanel.updateRace(leaderboardName, raceColumn, fleet); } @@ -785,12 +791,10 @@ public class RaceBoardPanel timeLineInnerPanel.add(timeLineInnerBgPanel); timeLineInnerPanel.addStyleName("timeLineInnerPanel"); - DataByLogo dataByLogo = new DataByLogo(); - dataByLogo.setUp(trackingConnectorInfos, true); + ResizableFlowPanel timelinePanel = new ResizableFlowPanel(); timelinePanel.add(timeLineInnerPanel); - timelinePanel.add(dataByLogo); timelinePanel.addStyleName("timeLinePanel"); return timelinePanel; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/databylogo/DataByLogo.gss b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/databylogo/DataByLogo.gss index 6543486b051..694082daa4f 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/databylogo/DataByLogo.gss +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/databylogo/DataByLogo.gss @@ -1,5 +1,18 @@ .databylogo_logo{ height: 1.3333333em !important; + vertical-align: middle; +} + +.databylogo_text{ + vertical-align: middle; +} + +.databylogo_white_text{ + color: white; +} + +.databylogo_black_text{ + color: black; } .databylogo_subtlelink, diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/databylogo/DataByLogo.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/databylogo/DataByLogo.java index 9c3f7a6195a..d2ffa834aa3 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/databylogo/DataByLogo.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/databylogo/DataByLogo.java @@ -67,10 +67,13 @@ public class DataByLogo extends Widget { } private void setUpTracTracLogo(boolean colorIfPossible) { + DataByLogoResources resources = DataByLogoResources.INSTANCE; if (colorIfPossible) { - logo.setSrc(DataByLogoResources.INSTANCE.tractracColor().getSafeUri().asString()); + logo.setSrc(resources.tractracColor().getSafeUri().asString()); + this.addStyleName(resources.css().databylogo_black_text()); } else { logo.setSrc(DataByLogoResources.INSTANCE.tractracWhite().getSafeUri().asString()); + this.addStyleName(resources.css().databylogo_white_text()); } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/databylogo/DataByLogo.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/databylogo/DataByLogo.ui.xml index af5ab031e16..5a5279d01ad 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/databylogo/DataByLogo.ui.xml +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/databylogo/DataByLogo.ui.xml @@ -4,7 +4,7 @@ - + \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/databylogo/DataByLogoResources.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/databylogo/DataByLogoResources.java index 9884503106d..42cc5949bfa 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/databylogo/DataByLogoResources.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/databylogo/DataByLogoResources.java @@ -24,5 +24,8 @@ public interface DataByLogoResources extends ClientBundle { String databylogo_logo(); String databylogo_subtlelink(); String databylogo_container(); + String databylogo_white_text(); + String databylogo_black_text(); + String databylogo_text(); } } From 1b8968712ebaecaffe40289911397c8b73be8bd5 Mon Sep 17 00:00:00 2001 From: Dennis Aulenbacher Date: Thu, 12 Dec 2019 16:25:04 +0100 Subject: [PATCH 23/44] deleted duplicate TrackingConnectorInfoDTO --- .../client/shared/databylogo/DataByLogo.java | 2 +- .../event/GetEventViewAction.java | 2 +- .../communication/eventview/EventViewDTO.java | 1 + .../eventview/TrackingConnectorInfoDTO.java | 23 ------------------- .../communication/start/EventStageDTO.java | 2 +- .../sailing/gwt/server/HomeServiceUtil.java | 2 +- 6 files changed, 5 insertions(+), 27 deletions(-) delete mode 100644 java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/eventview/TrackingConnectorInfoDTO.java diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.java index cafee20d6d3..bbcfc68168f 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.java @@ -9,7 +9,7 @@ import com.google.gwt.dom.client.ImageElement; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.ui.Widget; -import com.sap.sailing.gwt.home.communication.eventview.TrackingConnectorInfoDTO; +import com.sap.sailing.gwt.ui.shared.TrackingConnectorInfoDTO; public class DataByLogo extends Widget { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/event/GetEventViewAction.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/event/GetEventViewAction.java index c9c069cf4fb..b472050b857 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/event/GetEventViewAction.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/event/GetEventViewAction.java @@ -19,11 +19,11 @@ import com.sap.sailing.gwt.home.communication.SailingDispatchContext; import com.sap.sailing.gwt.home.communication.eventview.EventViewDTO; import com.sap.sailing.gwt.home.communication.eventview.RegattaMetadataDTO; import com.sap.sailing.gwt.home.communication.eventview.SeriesReferenceWithEventsDTO; -import com.sap.sailing.gwt.home.communication.eventview.TrackingConnectorInfoDTO; import com.sap.sailing.gwt.home.server.EventActionUtil; import com.sap.sailing.gwt.home.server.EventActionUtil.LeaderboardCallback; import com.sap.sailing.gwt.home.server.LeaderboardContext; import com.sap.sailing.gwt.server.HomeServiceUtil; +import com.sap.sailing.gwt.ui.shared.TrackingConnectorInfoDTO; import com.sap.sse.common.Util; import com.sap.sse.common.media.MediaTagConstants; import com.sap.sse.gwt.dispatch.shared.caching.IsClientCacheable; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/eventview/EventViewDTO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/eventview/EventViewDTO.java index 3984daaf3ee..a8668e293d7 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/eventview/EventViewDTO.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/eventview/EventViewDTO.java @@ -12,6 +12,7 @@ import com.sap.sailing.domain.common.WindSourceType; import com.sap.sailing.domain.common.windfinder.SpotDTO; import com.sap.sailing.gwt.home.communication.event.EventMetadataDTO; import com.sap.sailing.gwt.home.communication.event.HasLogo; +import com.sap.sailing.gwt.ui.shared.TrackingConnectorInfoDTO; import com.sap.sse.common.Util; import com.sap.sse.gwt.client.media.ImageDTO; import com.sap.sse.gwt.dispatch.shared.commands.Result; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/eventview/TrackingConnectorInfoDTO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/eventview/TrackingConnectorInfoDTO.java deleted file mode 100644 index c3acedb7e19..00000000000 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/eventview/TrackingConnectorInfoDTO.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.sap.sailing.gwt.home.communication.eventview; - -import com.google.gwt.user.client.rpc.IsSerializable; - -public class TrackingConnectorInfoDTO implements IsSerializable { - private String trackedBy; - private String webUrl; - - TrackingConnectorInfoDTO() {} // GWT serialization - - public TrackingConnectorInfoDTO(String trackedBy, String webUrl) { - this.trackedBy = trackedBy; - this.webUrl = webUrl; - } - - public String getTrackedBy() { - return trackedBy; - } - - public String getWebUrl() { - return webUrl; - } -} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/start/EventStageDTO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/start/EventStageDTO.java index e64c29d74fb..be592d865c2 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/start/EventStageDTO.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/start/EventStageDTO.java @@ -3,7 +3,7 @@ package com.sap.sailing.gwt.home.communication.start; import java.util.Set; import com.sap.sailing.gwt.home.communication.event.EventLinkAndMetadataDTO; -import com.sap.sailing.gwt.home.communication.eventview.TrackingConnectorInfoDTO; +import com.sap.sailing.gwt.ui.shared.TrackingConnectorInfoDTO; public class EventStageDTO extends EventLinkAndMetadataDTO { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/server/HomeServiceUtil.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/server/HomeServiceUtil.java index 24b56d4cb37..8d1cac13668 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/server/HomeServiceUtil.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/server/HomeServiceUtil.java @@ -38,10 +38,10 @@ import com.sap.sailing.gwt.home.communication.event.EventMetadataDTO; import com.sap.sailing.gwt.home.communication.event.EventReferenceDTO; import com.sap.sailing.gwt.home.communication.event.EventState; import com.sap.sailing.gwt.home.communication.eventlist.EventListEventDTO; -import com.sap.sailing.gwt.home.communication.eventview.TrackingConnectorInfoDTO; import com.sap.sailing.gwt.home.communication.media.SailingVideoDTO; import com.sap.sailing.gwt.home.communication.start.EventStageDTO; import com.sap.sailing.gwt.home.communication.start.StageEventType; +import com.sap.sailing.gwt.ui.shared.TrackingConnectorInfoDTO; import com.sap.sailing.server.interfaces.RacingEventService; import com.sap.sailing.server.util.EventUtil; import com.sap.sse.common.TimePoint; From 6560be028b010b1964bf7a2655a0b4fa94ab172a Mon Sep 17 00:00:00 2001 From: Dennis Aulenbacher Date: Thu, 12 Dec 2019 16:44:51 +0100 Subject: [PATCH 24/44] improved styling in desktop EventHeader --- .../gwt/home/desktop/partials/eventheader/EventHeader.gss | 1 + 1 file changed, 1 insertion(+) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.gss b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.gss index 5f2bd202db2..199dd59d12d 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.gss +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.gss @@ -173,6 +173,7 @@ margin: 0.266666666666667em 0 0.266666666666667em 0.333333333333333em; padding-left: 0.666666666666667em; color: #666; + vertical-align: middle; } .eventheader_intro_details_itemlink { color: inherit; From dc9201097443109f1818bbc00ce7a949dc131a94 Mon Sep 17 00:00:00 2001 From: Dennis Aulenbacher Date: Thu, 12 Dec 2019 17:07:17 +0100 Subject: [PATCH 25/44] removed duplicate DataByWidget and unified styling --- .../client/shared/databylogo/DataByLogo.gss | 32 ------ .../client/shared/databylogo/DataByLogo.java | 97 ------------------- .../shared/databylogo/DataByLogo.ui.xml | 10 -- .../databylogo/DataByLogoResources.java | 31 ------ .../shared/databylogo/tractrac-color.svg | 1 - .../shared/databylogo/tractrac-white.svg | 1 - .../partials/eventheader/EventHeader.java | 4 +- .../partials/eventheader/EventHeader.ui.xml | 2 +- .../partials/stage/StageTeaserBand.java | 4 +- .../partials/stage/StageTeaserBand.ui.xml | 2 +- .../partials/eventheader/EventHeader.java | 4 +- .../partials/eventheader/EventHeader.ui.xml | 2 +- .../partials/stage/StageTeaserBand.java | 4 +- .../partials/stage/StageTeaserBand.ui.xml | 2 +- .../gwt/ui/raceboard/RaceBoardPanel.java | 2 +- .../gwt/ui/shared/databylogo/DataByLogo.gss | 21 ++-- .../gwt/ui/shared/databylogo/DataByLogo.java | 24 ++--- 17 files changed, 35 insertions(+), 208 deletions(-) delete mode 100644 java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.gss delete mode 100644 java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.java delete mode 100644 java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.ui.xml delete mode 100644 java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogoResources.java delete mode 100644 java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/tractrac-color.svg delete mode 100644 java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/tractrac-white.svg diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.gss b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.gss deleted file mode 100644 index e53912ce436..00000000000 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.gss +++ /dev/null @@ -1,32 +0,0 @@ -img.databylogo_logo{ - height: 1.3333333em !important; - display: inline-block; - vertical-align: middle; -} - -.databylogo_text{ - vertical-align: middle; -} - -.databylogo_subtlelink, -.databylogo_subtlelink:hover, -.databylogo_subtlelink:active, -.databylogo_subtlelink:visited, -.databylogo_subtlelink:focus { - text-decoration: none; -} - -.databylogo_container{ - display: inline-block; - white-space: nowrap; - font-size: 0.75em; - cursor: pointer; -} - -.databylogo_white_text{ - color: white; -} - -.databylogo_black_text{ - color: black; -} \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.java deleted file mode 100644 index bbcfc68168f..00000000000 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.java +++ /dev/null @@ -1,97 +0,0 @@ -package com.sap.sailing.gwt.home.client.shared.databylogo; - -import java.util.Set; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.dom.client.AnchorElement; -import com.google.gwt.dom.client.Element; -import com.google.gwt.dom.client.ImageElement; -import com.google.gwt.uibinder.client.UiBinder; -import com.google.gwt.uibinder.client.UiField; -import com.google.gwt.user.client.ui.Widget; -import com.sap.sailing.gwt.ui.shared.TrackingConnectorInfoDTO; - -public class DataByLogo extends Widget { - - private static final String TRAC_TRAC = "TracTrac"; - private static final String TRAC_TRAC_DEFAULT_URL = "https://www.tractrac.com/"; - private static DataByLogoUiBinder uiBinder = GWT.create(DataByLogoUiBinder.class); - - interface DataByLogoUiBinder extends UiBinder { - } - - @UiField - AnchorElement dataByContainer; - @UiField - ImageElement logo; - - public DataByLogo() { - DataByLogoResources.INSTANCE.css().ensureInjected(); - setElement(uiBinder.createAndBindUi(this)); - } - - public void setUp(Set trackingConnectorInfos, boolean colorIfPossible) { - TrackingConnectorInfoDTO mostProminentConnectorInfo = selectMostProminentConnectorInfo(trackingConnectorInfos); - if (mostProminentConnectorInfo == null) { - this.setVisible(false); - } else { - setUpForConnectorType(colorIfPossible, mostProminentConnectorInfo); - } - } - - private TrackingConnectorInfoDTO selectMostProminentConnectorInfo( - Set trackingConnectorInfos) { - TrackingConnectorInfoDTO potentialConnectorInfo = null; - if (trackingConnectorInfos == null || trackingConnectorInfos.isEmpty()) { - return potentialConnectorInfo; - } else { - for (TrackingConnectorInfoDTO trackingConnectorInfo : trackingConnectorInfos) { - // This logic currently only supports TracTrac as ConnectorInfo - if (TRAC_TRAC.equals(trackingConnectorInfo.getTrackedBy())) { - potentialConnectorInfo = trackingConnectorInfo; - String webUrl = trackingConnectorInfo.getWebUrl(); - if (webUrl != null && !"".equals(webUrl)) { - break; - } - } - } - return potentialConnectorInfo; - } - } - - private void setUpForConnectorType(boolean colorIfPossible, TrackingConnectorInfoDTO trackingConnectorInfo) { - if (TRAC_TRAC.equals(trackingConnectorInfo.getTrackedBy())) { - setUpTracTracLogo(colorIfPossible); - } - setUrl(trackingConnectorInfo); - } - - private void setUpTracTracLogo(boolean colorIfPossible) { - DataByLogoResources resources = DataByLogoResources.INSTANCE; - if (colorIfPossible) { - logo.setSrc(resources.tractracColor().getSafeUri().asString()); - this.addStyleName(resources.css().databylogo_black_text()); - } else { - logo.setSrc(DataByLogoResources.INSTANCE.tractracWhite().getSafeUri().asString()); - this.addStyleName(resources.css().databylogo_white_text()); - } - } - - private void setUrl(TrackingConnectorInfoDTO trackingConnectorInfo) { - String webUrl = trackingConnectorInfo.getWebUrl(); - if (webUrl == null || "".equals(trackingConnectorInfo.getWebUrl())) { - dataByContainer.setHref(getConnectorDefaultUrl(trackingConnectorInfo.getTrackedBy())); - } else { - dataByContainer.setHref(webUrl); - } - } - - private String getConnectorDefaultUrl(String trackedBy) { - switch (trackedBy) { - case TRAC_TRAC: - return TRAC_TRAC_DEFAULT_URL; - default: - return null; - } - } -} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.ui.xml deleted file mode 100644 index 47d05e5dfcd..00000000000 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogo.ui.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogoResources.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogoResources.java deleted file mode 100644 index 7f8cbb368af..00000000000 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/DataByLogoResources.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.sap.sailing.gwt.home.client.shared.databylogo; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.resources.client.CssResource; -import com.google.gwt.resources.client.DataResource; -import com.google.gwt.resources.client.DataResource.MimeType; -import com.sap.sailing.gwt.home.shared.resources.SharedHomeResources; - -public interface DataByLogoResources extends SharedHomeResources { - public static final DataByLogoResources INSTANCE = GWT.create(DataByLogoResources.class); - - @Source("DataByLogo.gss") - LocalCss css(); - - @Source("tractrac-color.svg") - @MimeType("image/svg+xml") - DataResource tractracColor(); - - @Source("tractrac-white.svg") - @MimeType("image/svg+xml") - DataResource tractracWhite(); - - public interface LocalCss extends CssResource { - String databylogo_logo(); - String databylogo_subtlelink(); - String databylogo_container(); - String databylogo_white_text(); - String databylogo_black_text(); - String databylogo_text(); - } -} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/tractrac-color.svg b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/tractrac-color.svg deleted file mode 100644 index 96662ddb01b..00000000000 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/tractrac-color.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/tractrac-white.svg b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/tractrac-white.svg deleted file mode 100644 index eba4e0347c8..00000000000 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/databylogo/tractrac-white.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.java index 275d92c9dac..28f1a513d1c 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.java @@ -17,7 +17,6 @@ import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.UIObject; import com.google.gwt.user.client.ui.Widget; -import com.sap.sailing.gwt.home.client.shared.databylogo.DataByLogo; import com.sap.sailing.gwt.home.communication.eventview.EventViewDTO; import com.sap.sailing.gwt.home.communication.eventview.HasRegattaMetadata; import com.sap.sailing.gwt.home.desktop.partials.sharing.SharingButtons; @@ -31,6 +30,7 @@ import com.sap.sailing.gwt.home.shared.utils.EventDatesFormatterUtil; import com.sap.sailing.gwt.home.shared.utils.LabelTypeUtil; import com.sap.sailing.gwt.home.shared.utils.LogoUtil; import com.sap.sailing.gwt.ui.client.StringMessages; +import com.sap.sailing.gwt.ui.shared.databylogo.DataByLogo; import com.sap.sse.common.Util; import com.sap.sse.gwt.client.LinkUtil; @@ -151,7 +151,7 @@ public class EventHeader extends Composite { } hide(competitors, races, courseAreaUi, eventCategory); } - dataByLogo.setUp(event.getTrackingConnectorInfos(), true); + dataByLogo.setUp(event.getTrackingConnectorInfos(), true, false); initTitleAndSelection(nameToShow); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.ui.xml index 78e72b7f93f..ae91b186d00 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.ui.xml +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.ui.xml @@ -1,7 +1,7 @@ + xmlns:s="urn:import:com.sap.sailing.gwt.ui.shared"> diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/stage/StageTeaserBand.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/stage/StageTeaserBand.java index 28f57740511..1a63da35ccc 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/stage/StageTeaserBand.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/stage/StageTeaserBand.java @@ -11,12 +11,12 @@ import com.google.gwt.uibinder.client.UiHandler; import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.Widget; -import com.sap.sailing.gwt.home.client.shared.databylogo.DataByLogo; import com.sap.sailing.gwt.home.communication.start.EventStageDTO; import com.sap.sailing.gwt.home.desktop.app.DesktopPlacesNavigator; import com.sap.sailing.gwt.home.shared.app.PlaceNavigation; import com.sap.sailing.gwt.home.shared.app.PlaceNavigator; import com.sap.sailing.gwt.home.shared.places.event.EventDefaultPlace; +import com.sap.sailing.gwt.ui.shared.databylogo.DataByLogo; public abstract class StageTeaserBand extends Composite { @@ -44,7 +44,7 @@ public abstract class StageTeaserBand extends Composite { isLiveDiv.getStyle().setDisplay(Display.NONE); - dataByLogo.setUp(event.getTrackingConnectorInfos(), false); + dataByLogo.setUp(event.getTrackingConnectorInfos(), false, true); eventNavigation = placeNavigator.getEventNavigation(event.getId().toString(), event.getBaseURL(), event.isOnRemoteServer()); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/stage/StageTeaserBand.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/stage/StageTeaserBand.ui.xml index 32dec538afe..149f1303929 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/stage/StageTeaserBand.ui.xml +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/stage/StageTeaserBand.ui.xml @@ -1,5 +1,5 @@ - + diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/eventheader/EventHeader.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/eventheader/EventHeader.java index a663d105e6e..e6bdbfe9562 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/eventheader/EventHeader.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/eventheader/EventHeader.java @@ -9,12 +9,12 @@ import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.Widget; -import com.sap.sailing.gwt.home.client.shared.databylogo.DataByLogo; import com.sap.sailing.gwt.home.communication.eventview.EventViewDTO; import com.sap.sailing.gwt.home.shared.app.PlaceNavigation; import com.sap.sailing.gwt.home.shared.utils.EventDatesFormatterUtil; import com.sap.sailing.gwt.home.shared.utils.LabelTypeUtil; import com.sap.sailing.gwt.home.shared.utils.LogoUtil; +import com.sap.sailing.gwt.ui.shared.databylogo.DataByLogo; public class EventHeader extends Composite { private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); @@ -51,7 +51,7 @@ public class EventHeader extends Composite { if (logoNavigation != null) { logoNavigation.configureAnchorElement(eventLogoUi); } - dataByLogo.setUp(event.getTrackingConnectorInfos(), true); + dataByLogo.setUp(event.getTrackingConnectorInfos(), true, true); if (dataByLogo.isVisible()) { this.addStyleName(EventHeaderResources.INSTANCE.css().eventheader_with_logo()); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/eventheader/EventHeader.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/eventheader/EventHeader.ui.xml index 9ee11cbaee8..a06efba2ffc 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/eventheader/EventHeader.ui.xml +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/eventheader/EventHeader.ui.xml @@ -1,6 +1,6 @@ + xmlns:g="urn:import:com.google.gwt.user.client.ui" xmlns:s="urn:import:com.sap.sailing.gwt.ui.shared"> diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/StageTeaserBand.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/StageTeaserBand.java index 46a3a439e71..2f8bef2b51c 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/StageTeaserBand.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/StageTeaserBand.java @@ -9,13 +9,13 @@ import com.google.gwt.uibinder.client.UiHandler; import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.Widget; -import com.sap.sailing.gwt.home.client.shared.databylogo.DataByLogo; import com.sap.sailing.gwt.home.communication.event.EventLinkAndMetadataDTO; import com.sap.sailing.gwt.home.communication.start.EventStageDTO; import com.sap.sailing.gwt.home.mobile.app.MobilePlacesNavigator; import com.sap.sailing.gwt.home.shared.app.PlaceNavigation; import com.sap.sailing.gwt.home.shared.app.PlaceNavigator; import com.sap.sailing.gwt.home.shared.places.event.EventDefaultPlace; +import com.sap.sailing.gwt.ui.shared.databylogo.DataByLogo; public abstract class StageTeaserBand extends Composite { @@ -45,7 +45,7 @@ public abstract class StageTeaserBand extends Composite { initWidget(uiBinder.createAndBindUi(this)); if (event instanceof EventStageDTO) { - dataByLogo.setUp(((EventStageDTO) event).getTrackingConnectorInfos(), false); + dataByLogo.setUp(((EventStageDTO) event).getTrackingConnectorInfos(), false, true); } else { dataByLogo.setVisible(false); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/StageTeaserBand.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/StageTeaserBand.ui.xml index 4dc84912869..3c8f3b3881a 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/StageTeaserBand.ui.xml +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/StageTeaserBand.ui.xml @@ -1,6 +1,6 @@ + xmlns:g="urn:import:com.google.gwt.user.client.ui" xmlns:s="urn:import:com.sap.sailing.gwt.ui.shared"> trackingConnectorInfos, boolean colorIfPossible) { + public void setUp(Set trackingConnectorInfos, boolean colorIfPossible, boolean enforceTextColor) { TrackingConnectorInfoDTO mostProminentConnectorInfo = selectMostProminentConnectorInfo(trackingConnectorInfos); if (mostProminentConnectorInfo == null) { this.setVisible(false); } else { - setUpForConnectorType(colorIfPossible, mostProminentConnectorInfo); + setUpForConnectorType(colorIfPossible, enforceTextColor, mostProminentConnectorInfo); } } @@ -59,21 +60,20 @@ public class DataByLogo extends Widget { } } - private void setUpForConnectorType(boolean colorIfPossible, TrackingConnectorInfoDTO trackingConnectorInfo) { + private void setUpForConnectorType(boolean colorIfPossible, boolean enforceTextColor, TrackingConnectorInfoDTO trackingConnectorInfo) { if (TRAC_TRAC.equals(trackingConnectorInfo.getTrackedBy())) { - setUpTracTracLogo(colorIfPossible); + setUpTracTracLogo(colorIfPossible, enforceTextColor); } setUrl(trackingConnectorInfo); } - private void setUpTracTracLogo(boolean colorIfPossible) { - DataByLogoResources resources = DataByLogoResources.INSTANCE; - if (colorIfPossible) { - logo.setSrc(resources.tractracColor().getSafeUri().asString()); - this.addStyleName(resources.css().databylogo_black_text()); - } else { - logo.setSrc(DataByLogoResources.INSTANCE.tractracWhite().getSafeUri().asString()); - this.addStyleName(resources.css().databylogo_white_text()); + private void setUpTracTracLogo(boolean colorIfPossible, boolean enforceTextColor) { + final DataByLogoResources resources = DataByLogoResources.INSTANCE; + final DataResource imageToSet = colorIfPossible ? resources.tractracColor() : resources.tractracWhite(); + logo.setSrc(imageToSet.getSafeUri().asString()); + if (enforceTextColor) { + this.addStyleName(colorIfPossible ? resources.css().databylogo_black_text() + : resources.css().databylogo_white_text()); } } From 637295cd540aaa97f8edc00388ab23ede9151134 Mon Sep 17 00:00:00 2001 From: Dennis Aulenbacher Date: Thu, 12 Dec 2019 17:13:31 +0100 Subject: [PATCH 26/44] implemented equals and hashcode for proper elimination of duplicates in a set --- .../impl/TrackingConnectorInfoImpl.java | 33 ++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/tracking/impl/TrackingConnectorInfoImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/tracking/impl/TrackingConnectorInfoImpl.java index ad55bc42f57..a96b7c77521 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/tracking/impl/TrackingConnectorInfoImpl.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/tracking/impl/TrackingConnectorInfoImpl.java @@ -6,7 +6,7 @@ import com.sap.sailing.domain.tracking.TrackingConnectorInfo; public class TrackingConnectorInfoImpl implements TrackingConnectorInfo { private static final long serialVersionUID = -1681930521305924294L; - + private final String trackedBy; private final URL webUrl; @@ -23,4 +23,35 @@ public class TrackingConnectorInfoImpl implements TrackingConnectorInfo { public URL getWebUrl() { return webUrl; } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((trackedBy == null) ? 0 : trackedBy.hashCode()); + result = prime * result + ((webUrl == null) ? 0 : webUrl.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + TrackingConnectorInfoImpl other = (TrackingConnectorInfoImpl) obj; + if (trackedBy == null) { + if (other.trackedBy != null) + return false; + } else if (!trackedBy.equals(other.trackedBy)) + return false; + if (webUrl == null) { + if (other.webUrl != null) + return false; + } else if (!webUrl.equals(other.webUrl)) + return false; + return true; + } } From 8959eaa89a1eebf191241a8ed99ea8b92d4eba90 Mon Sep 17 00:00:00 2001 From: Dennis Aulenbacher Date: Thu, 12 Dec 2019 18:09:51 +0100 Subject: [PATCH 27/44] code formatiing, java docs and optimizations --- .../domain/racelogtracking/impl/RaceLogRaceTracker.java | 4 ++-- .../sailing/domain/tracking/TrackingConnectorInfo.java | 4 ++++ .../impl/SwissTimingRaceTrackerImpl.java | 4 ++-- .../impl/SwissTimingReplayToDomainAdapter.java | 6 +++--- .../CourseUpdateDuringNonAtomicSerializationTest.java | 3 ++- .../src/com/sap/sailing/domain/test/TrackBasedTest.java | 2 +- .../markpassing/AbstractExportedPositionsBasedTest.java | 5 +++-- .../sap/sailing/domain/test/mock/MockedTrackedRace.java | 4 +++- .../src/com/sap/sailing/domain/base/impl/EventImpl.java | 2 +- .../sap/sailing/domain/tracking/RaceTrackingHandler.java | 8 +++++--- .../gwt/home/communication/event/GetEventViewAction.java | 7 ++++--- 11 files changed, 30 insertions(+), 19 deletions(-) diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/RaceLogRaceTracker.java b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/RaceLogRaceTracker.java index 2a085083a1f..09de5e2513a 100755 --- a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/RaceLogRaceTracker.java +++ b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/RaceLogRaceTracker.java @@ -314,8 +314,8 @@ public class RaceLogRaceTracker extends AbstractRaceTrackerBaseImpl { trackedRace = raceTrackingHandler.createTrackedRace(trackedRegatta, raceDef, sidelines, windStore, params.getDelayToLiveInMillis(), WindTrack.DEFAULT_MILLISECONDS_OVER_WHICH_TO_AVERAGE_WIND, boatClass.getApproximateManeuverDurationInMilliseconds(), null, /*useMarkPassingCalculator*/ true, raceLogResolver, - /* Not needed because the RaceTracker is not active on a replica */ Optional.empty(), - new TrackingConnectorInfoImpl(RACE_LOG, null)); + /* Not needed because the RaceTracker is not active on a replica */ Optional.empty(), + new TrackingConnectorInfoImpl(RACE_LOG, /* webUrl */ null)); notifyRaceCreationListeners(); logger.info(String.format("Started tracking race-log race (%s)", raceLog)); // this wakes up all waiting race handles diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/tracking/TrackingConnectorInfo.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/tracking/TrackingConnectorInfo.java index 620cfba8a5d..0772b5e8765 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/tracking/TrackingConnectorInfo.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/tracking/TrackingConnectorInfo.java @@ -3,6 +3,10 @@ package com.sap.sailing.domain.tracking; import java.io.Serializable; import java.net.URL; +/** + * Identifies the tracking connector that was used to create a TrackedRace. + * Further the Connector can provide a webUrl, that leads to an event web page. + */ public interface TrackingConnectorInfo extends Serializable { /** diff --git a/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/SwissTimingRaceTrackerImpl.java b/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/SwissTimingRaceTrackerImpl.java index cfd80b61983..dce8765a231 100644 --- a/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/SwissTimingRaceTrackerImpl.java +++ b/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/SwissTimingRaceTrackerImpl.java @@ -496,8 +496,8 @@ public class SwissTimingRaceTrackerImpl extends AbstractRaceTrackerImpl assert SwissTimingRaceTrackerImpl.this.race == race; } }, useInternalMarkPassingAlgorithm, raceLogResolver, - /* Not needed because the RaceTracker is not active on a replica */ Optional.empty(), - /*no api connection to query the event url*/new TrackingConnectorInfoImpl(SWISS_TIMING_IDENTIFIER, null)); + /* Not needed because the RaceTracker is not active on a replica */ Optional.empty(), + new TrackingConnectorInfoImpl(SWISS_TIMING_IDENTIFIER, /*no api connection to query the webUrl*/ null)); addUpdateHandlers(); notifyRaceCreationListeners(); logger.info("Created SwissTiming RaceDefinition and TrackedRace for "+race.getName()); diff --git a/java/com.sap.sailing.domain.swisstimingreplayadapter/src/com/sap/sailing/domain/swisstimingreplayadapter/impl/SwissTimingReplayToDomainAdapter.java b/java/com.sap.sailing.domain.swisstimingreplayadapter/src/com/sap/sailing/domain/swisstimingreplayadapter/impl/SwissTimingReplayToDomainAdapter.java index 98df93b1bf4..300afe92013 100755 --- a/java/com.sap.sailing.domain.swisstimingreplayadapter/src/com/sap/sailing/domain/swisstimingreplayadapter/impl/SwissTimingReplayToDomainAdapter.java +++ b/java/com.sap.sailing.domain.swisstimingreplayadapter/src/com/sap/sailing/domain/swisstimingreplayadapter/impl/SwissTimingReplayToDomainAdapter.java @@ -411,11 +411,11 @@ public class SwissTimingReplayToDomainAdapter extends SwissTimingReplayAdapter i DynamicTrackedRace trackedRace = raceTrackingHandler.createTrackedRace(getTrackedRegatta(), race, Collections. emptyList(), EmptyWindStore.INSTANCE, TrackedRace.DEFAULT_LIVE_DELAY_IN_MILLISECONDS, - WindTrack.DEFAULT_MILLISECONDS_OVER_WHICH_TO_AVERAGE_WIND, + WindTrack.DEFAULT_MILLISECONDS_OVER_WHICH_TO_AVERAGE_WIND, /* time over which to average speed: */ race.getBoatClass().getApproximateManeuverDurationInMilliseconds(), /* raceDefinitionSetToUpdate */ null, useInternalMarkPassingAlgorithm, raceLogResolver, - /* Not needed because the RaceTracker is not active on a replica */ Optional.empty(), - /*no api connection to query the event url*/new TrackingConnectorInfoImpl(SWISS_TIMING_IDENTIFIER, null)); + /* Not needed because the RaceTracker is not active on a replica */ Optional.empty(), + new TrackingConnectorInfoImpl(SWISS_TIMING_IDENTIFIER, /*no api connection to query the webUrl*/ null)); trackedRace.onStatusChanged(this, new TrackedRaceStatusImpl(TrackedRaceStatusEnum.LOADING, 0)); TimePoint bestStartTimeKnownSoFar = bestStartTimePerRaceID.get(currentRaceID); if (bestStartTimeKnownSoFar != null) { diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/CourseUpdateDuringNonAtomicSerializationTest.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/CourseUpdateDuringNonAtomicSerializationTest.java index 75358acbe69..d38a049e397 100755 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/CourseUpdateDuringNonAtomicSerializationTest.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/CourseUpdateDuringNonAtomicSerializationTest.java @@ -87,7 +87,8 @@ public class CourseUpdateDuringNonAtomicSerializationTest implements Serializabl trackedRace = new DynamicTrackedRaceImpl(trackedRegatta, race, Collections. emptySet(), EmptyWindStore.INSTANCE, /* delayToLiveInMillis */10000, /* millisecondsOverWhichToAverageWind */30000, /* millisecondsOverWhichToAverageSpeed */ - 7000, /*useMarkPassingCalculator*/ false, OneDesignRankingMetric::new, mock(RaceLogAndTrackedRaceResolver.class), /* trackingConnectorInfo */ null) { + 7000, /* useMarkPassingCalculator */ false, OneDesignRankingMetric::new, + mock(RaceLogAndTrackedRaceResolver.class), /* trackingConnectorInfo */ null) { private static final long serialVersionUID = 9114777576548711763L; @Override diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/TrackBasedTest.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/TrackBasedTest.java index 13062de8195..d4edf4f0386 100755 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/TrackBasedTest.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/TrackBasedTest.java @@ -201,7 +201,7 @@ public abstract class TrackBasedTest { /* delayToLiveInMillis */ 0, /* millisecondsOverWhichToAverageWind */ 30000, /* millisecondsOverWhichToAverageSpeed */ 30000, /* delay for wind estimation cache invalidation */ 0, useMarkPassingCalculator, - rankingMetricConstructor, raceLogResolver, /** trackingConnectorInfo **/ null); + rankingMetricConstructor, raceLogResolver, /* trackingConnectorInfo */ null); // in this simplified artificial course, the top mark is exactly north of the right leeward gate DegreePosition topPosition = new DegreePosition(54.48, 10.24); TimePoint afterTheRace = new MillisecondsTimePoint(timePointForFixes.asMillis() + 36000000); // 10h after the fix timed diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/markpassing/AbstractExportedPositionsBasedTest.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/markpassing/AbstractExportedPositionsBasedTest.java index fa10bdaf549..2020db4428c 100755 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/markpassing/AbstractExportedPositionsBasedTest.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/markpassing/AbstractExportedPositionsBasedTest.java @@ -105,8 +105,9 @@ public abstract class AbstractExportedPositionsBasedTest { competitorsAndBoats, UUID.randomUUID()), /* sidelines */ Collections.emptySet(), EmptyWindStore.INSTANCE, - /* delayToLiveInMillis */ 3000, /* millisecondsOverWhichToAverageWind */ 15000, /* millisecondsOverWhichToAverageSpeed */ 10000, - /* useInternalMarkPassingAlgorithm */ true, OneDesignRankingMetric::new, /* raceLogResolver */ null, /* trackingConnectorInfo */ null); + /* delayToLiveInMillis */ 3000, /* millisecondsOverWhichToAverageWind */ 15000, + /* millisecondsOverWhichToAverageSpeed */ 10000, /* useInternalMarkPassingAlgorithm */ true, + OneDesignRankingMetric::new, /* raceLogResolver */ null, /* trackingConnectorInfo */ null); result.setStatus(new TrackedRaceStatusImpl(TrackedRaceStatusEnum.LOADING, 0.0)); for (final Entry> e : competitorsAndTheirTracks.entrySet()) { final DynamicGPSFixTrack track = result.getTrack(e.getKey()); diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/mock/MockedTrackedRace.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/mock/MockedTrackedRace.java index 7fe26ed91fe..1ffb6d35f77 100755 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/mock/MockedTrackedRace.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/mock/MockedTrackedRace.java @@ -658,7 +658,9 @@ public class MockedTrackedRace implements DynamicTrackedRace { WindStore windStore, long delayToLiveInMillis, long millisecondsOverWhichToAverageWind, long millisecondsOverWhichToAverageSpeed, DynamicRaceDefinitionSet raceDefinitionSetToUpdate, boolean useMarkPassingcalculator, - RaceLogAndTrackedRaceResolver raceLogResolver, Optional threadLocalTransporter, TrackingConnectorInfo trackingConnectorInfo) { + RaceLogAndTrackedRaceResolver raceLogResolver, + Optional threadLocalTransporter, + TrackingConnectorInfo trackingConnectorInfo) { return null; } diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/EventImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/EventImpl.java index 45b76958378..b6d3257fd35 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/EventImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/EventImpl.java @@ -106,7 +106,7 @@ public class EventImpl extends EventBaseImpl implements Event { @Override public Set getTrackingConnectorInfos() { - Set result = new HashSet<>(); + final Set result = new HashSet<>(); for (LeaderboardGroup lbg : this.getLeaderboardGroups()) { for (Leaderboard lb : lbg.getLeaderboards()) { for (TrackedRace tr : lb.getTrackedRaces()) { diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/RaceTrackingHandler.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/RaceTrackingHandler.java index 5bccfc37a22..12db12eb574 100644 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/RaceTrackingHandler.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/RaceTrackingHandler.java @@ -35,8 +35,9 @@ public interface RaceTrackingHandler { Iterable sidelines, WindStore windStore, long delayToLiveInMillis, long millisecondsOverWhichToAverageWind, long millisecondsOverWhichToAverageSpeed, DynamicRaceDefinitionSet raceDefinitionSetToUpdate, boolean useMarkPassingCalculator, - RaceLogAndTrackedRaceResolver raceLogResolver, Optional threadLocalTransporter, TrackingConnectorInfo trackingConnectorInfo); - + RaceLogAndTrackedRaceResolver raceLogResolver, Optional threadLocalTransporter, + TrackingConnectorInfo trackingConnectorInfo); + DynamicCompetitor getOrCreateCompetitor(CompetitorAndBoatStore competitorAndBoatStore, Serializable competitorId, String name, String shortName, Color displayColor, String email, URI flagImageURI, DynamicTeam team, Double timeOnTimeFactor, Duration timeOnDistanceAllowancePerNauticalMile, String searchTag); @@ -58,7 +59,8 @@ public interface RaceTrackingHandler { Iterable sidelines, WindStore windStore, long delayToLiveInMillis, long millisecondsOverWhichToAverageWind, long millisecondsOverWhichToAverageSpeed, DynamicRaceDefinitionSet raceDefinitionSetToUpdate, boolean useMarkPassingCalculator, - RaceLogAndTrackedRaceResolver raceLogResolver, Optional threadLocalTransporter, TrackingConnectorInfo trackingConnectorInfo) { + RaceLogAndTrackedRaceResolver raceLogResolver, Optional threadLocalTransporter, + TrackingConnectorInfo trackingConnectorInfo) { return trackedRegatta.createTrackedRace(raceDefinition, sidelines, windStore, delayToLiveInMillis, millisecondsOverWhichToAverageWind, millisecondsOverWhichToAverageSpeed, raceDefinitionSetToUpdate, useMarkPassingCalculator, raceLogResolver, threadLocalTransporter, trackingConnectorInfo); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/event/GetEventViewAction.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/event/GetEventViewAction.java index b472050b857..159f1b6d164 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/event/GetEventViewAction.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/event/GetEventViewAction.java @@ -121,9 +121,10 @@ public class GetEventViewAction implements SailingAction, IsClient } } - Set trackingConnectorInfos = event.getTrackingConnectorInfos() - .stream() - .map(trackingConnectorInfo -> new TrackingConnectorInfoDTO(trackingConnectorInfo.getTrackedBy(), mapURLToString(trackingConnectorInfo.getWebUrl()))).collect(Collectors.toSet()); + Set trackingConnectorInfos = event.getTrackingConnectorInfos().stream() + .map(trackingConnectorInfo -> new TrackingConnectorInfoDTO(trackingConnectorInfo.getTrackedBy(), + mapURLToString(trackingConnectorInfo.getWebUrl()))) + .collect(Collectors.toSet()); dto.setTrackingConnectorInfos(trackingConnectorInfos); return dto; } From d189cce693d1c4b8f6f1a84f4019632964b0c8a9 Mon Sep 17 00:00:00 2001 From: Dennis Aulenbacher Date: Fri, 13 Dec 2019 21:21:36 +0100 Subject: [PATCH 28/44] code styling improvements --- .../communication/eventview/EventViewDTO.java | 1 - .../gwt/ui/raceboard/RaceBoardPanel.java | 2 -- .../gwt/ui/shared/databylogo/DataByLogo.java | 6 +++-- .../impl/EventBaseJsonDeserializer.java | 6 +++-- .../impl/EventBaseJsonSerializer.java | 4 +++- .../test/EventDataJsonSerializerTest.java | 9 +++++--- ...JsonSerializerWithImagesAndVideosTest.java | 9 +++++--- ...tDataJsonSerializerWithNullValuesTest.java | 9 +++++--- ...NullStartAndEndDataJsonSerializerTest.java | 7 ++++-- .../gateway/jaxrs/api/EventsResource.java | 6 +++-- .../gateway/jaxrs/api/SearchResource.java | 6 +++-- .../server/interfaces/RacingEventService.java | 3 ++- .../CreateTrackedRace.java | 9 ++++---- .../server/test/RemoveLeaderboardTest.java | 6 ++--- .../server/test/SearchServiceTest.java | 14 +++++++----- .../server/impl/RacingEventServiceImpl.java | 22 ++++++++++++------- .../PermissionAwareRaceTrackingHandler.java | 9 +++++--- 17 files changed, 81 insertions(+), 47 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/eventview/EventViewDTO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/eventview/EventViewDTO.java index a8668e293d7..60d4ced9353 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/eventview/EventViewDTO.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/eventview/EventViewDTO.java @@ -153,5 +153,4 @@ public class EventViewDTO extends EventMetadataDTO implements Result, HasLogo { public void setTrackingConnectorInfos(Set trackingConnectorInfo) { this.trackingConnectorInfos = trackingConnectorInfo; } - } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardPanel.java index ea49c3b6ae8..ead4b7ba4a3 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardPanel.java @@ -791,8 +791,6 @@ public class RaceBoardPanel timeLineInnerPanel.add(timeLineInnerBgPanel); timeLineInnerPanel.addStyleName("timeLineInnerPanel"); - - ResizableFlowPanel timelinePanel = new ResizableFlowPanel(); timelinePanel.add(timeLineInnerPanel); timelinePanel.addStyleName("timeLinePanel"); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/databylogo/DataByLogo.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/databylogo/DataByLogo.java index fbee5b8fea5..68a9f02c576 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/databylogo/DataByLogo.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/databylogo/DataByLogo.java @@ -31,7 +31,8 @@ public class DataByLogo extends Widget { setElement(uiBinder.createAndBindUi(this)); } - public void setUp(Set trackingConnectorInfos, boolean colorIfPossible, boolean enforceTextColor) { + public void setUp(Set trackingConnectorInfos, boolean colorIfPossible, + boolean enforceTextColor) { TrackingConnectorInfoDTO mostProminentConnectorInfo = selectMostProminentConnectorInfo(trackingConnectorInfos); if (mostProminentConnectorInfo == null) { this.setVisible(false); @@ -60,7 +61,8 @@ public class DataByLogo extends Widget { } } - private void setUpForConnectorType(boolean colorIfPossible, boolean enforceTextColor, TrackingConnectorInfoDTO trackingConnectorInfo) { + private void setUpForConnectorType(boolean colorIfPossible, boolean enforceTextColor, + TrackingConnectorInfoDTO trackingConnectorInfo) { if (TRAC_TRAC.equals(trackingConnectorInfo.getTrackedBy())) { setUpTracTracLogo(colorIfPossible, enforceTextColor); } diff --git a/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/deserialization/impl/EventBaseJsonDeserializer.java b/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/deserialization/impl/EventBaseJsonDeserializer.java index c86ecc09566..fefa20b4dae 100644 --- a/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/deserialization/impl/EventBaseJsonDeserializer.java +++ b/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/deserialization/impl/EventBaseJsonDeserializer.java @@ -69,8 +69,10 @@ public class EventBaseJsonDeserializer implements JsonDeserializer { trackingConnectorInfos.add(trackingConnectorInfoDeserializer.deserialize((JSONObject) jsonPair)); } - StrippedEventImpl result = new StrippedEventImpl(name, startDate == null ? null : new MillisecondsTimePoint(startDate.longValue()), - endDate == null ? null : new MillisecondsTimePoint(endDate.longValue()), venue, /* is public */ true, id, leaderboardGroups, trackingConnectorInfos); + StrippedEventImpl result = new StrippedEventImpl(name, + startDate == null ? null : new MillisecondsTimePoint(startDate.longValue()), + endDate == null ? null : new MillisecondsTimePoint(endDate.longValue()), venue, /* is public */ true, + id, leaderboardGroups, trackingConnectorInfos); result.setDescription(description); if (officialWebsiteURLAsString != null) { try { diff --git a/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/serialization/impl/EventBaseJsonSerializer.java b/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/serialization/impl/EventBaseJsonSerializer.java index c308539198f..369badc4a07 100644 --- a/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/serialization/impl/EventBaseJsonSerializer.java +++ b/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/serialization/impl/EventBaseJsonSerializer.java @@ -56,7 +56,9 @@ public class EventBaseJsonSerializer implements JsonSerializer { private final JsonSerializer leaderboardGroupBaseSerializer; private final JsonSerializer trackingConnectorInfoSerializer; - public EventBaseJsonSerializer(JsonSerializer venueSerializer, JsonSerializer leaderboardGroupBaseSerializer, JsonSerializer trackingConnectorInfoJsonSerializer) { + public EventBaseJsonSerializer(JsonSerializer venueSerializer, + JsonSerializer leaderboardGroupBaseSerializer, + JsonSerializer trackingConnectorInfoJsonSerializer) { this.leaderboardGroupBaseSerializer = leaderboardGroupBaseSerializer; this.venueSerializer = venueSerializer; this.trackingConnectorInfoSerializer = trackingConnectorInfoJsonSerializer; diff --git a/java/com.sap.sailing.server.gateway.serialization.test/src/com/sap/sailing/server/gateway/serialization/test/EventDataJsonSerializerTest.java b/java/com.sap.sailing.server.gateway.serialization.test/src/com/sap/sailing/server/gateway/serialization/test/EventDataJsonSerializerTest.java index 3229db06fcb..6d6c395ad7c 100755 --- a/java/com.sap.sailing.server.gateway.serialization.test/src/com/sap/sailing/server/gateway/serialization/test/EventDataJsonSerializerTest.java +++ b/java/com.sap.sailing.server.gateway.serialization.test/src/com/sap/sailing/server/gateway/serialization/test/EventDataJsonSerializerTest.java @@ -90,9 +90,12 @@ public class EventDataJsonSerializerTest { when(event.getImages()).thenReturn(Collections.singleton(expectedLogoImageDescriptor)); when(event.getVideos()).thenReturn(Collections.emptySet()); // ... and the serializer itself. - serializer = new EventBaseJsonSerializer(new VenueJsonSerializer(new CourseAreaJsonSerializer()), new LeaderboardGroupBaseJsonSerializer(), new TrackingConnectorInfoJsonSerializer()); - deserializer = new EventBaseJsonDeserializer(new VenueJsonDeserializer(new CourseAreaJsonDeserializer(DomainFactory.INSTANCE)), new LeaderboardGroupBaseJsonDeserializer(), new TrackingConnectorInfoJsonDeserializer()); - + serializer = new EventBaseJsonSerializer(new VenueJsonSerializer(new CourseAreaJsonSerializer()), + new LeaderboardGroupBaseJsonSerializer(), new TrackingConnectorInfoJsonSerializer()); + deserializer = new EventBaseJsonDeserializer( + new VenueJsonDeserializer(new CourseAreaJsonDeserializer(DomainFactory.INSTANCE)), + new LeaderboardGroupBaseJsonDeserializer(), new TrackingConnectorInfoJsonDeserializer()); + when(expectedLeaderboardGroup.getId()).thenReturn(UUID.randomUUID()); when(expectedLeaderboardGroup.getName()).thenReturn("LG"); when(expectedLeaderboardGroup.getDescription()).thenReturn("LG Description"); diff --git a/java/com.sap.sailing.server.gateway.serialization.test/src/com/sap/sailing/server/gateway/serialization/test/EventDataJsonSerializerWithImagesAndVideosTest.java b/java/com.sap.sailing.server.gateway.serialization.test/src/com/sap/sailing/server/gateway/serialization/test/EventDataJsonSerializerWithImagesAndVideosTest.java index 3c141efe2c8..ab8e53c25ea 100644 --- a/java/com.sap.sailing.server.gateway.serialization.test/src/com/sap/sailing/server/gateway/serialization/test/EventDataJsonSerializerWithImagesAndVideosTest.java +++ b/java/com.sap.sailing.server.gateway.serialization.test/src/com/sap/sailing/server/gateway/serialization/test/EventDataJsonSerializerWithImagesAndVideosTest.java @@ -119,9 +119,12 @@ public class EventDataJsonSerializerWithImagesAndVideosTest { when(event.getImages()).thenReturn(images); when(event.getVideos()).thenReturn(videos); // ... and the serializer itself. - serializer = new EventBaseJsonSerializer(new VenueJsonSerializer(new CourseAreaJsonSerializer()), new LeaderboardGroupBaseJsonSerializer(), new TrackingConnectorInfoJsonSerializer()); - deserializer = new EventBaseJsonDeserializer(new VenueJsonDeserializer(new CourseAreaJsonDeserializer(DomainFactory.INSTANCE)), new LeaderboardGroupBaseJsonDeserializer(), new TrackingConnectorInfoJsonDeserializer()); - + serializer = new EventBaseJsonSerializer(new VenueJsonSerializer(new CourseAreaJsonSerializer()), + new LeaderboardGroupBaseJsonSerializer(), new TrackingConnectorInfoJsonSerializer()); + deserializer = new EventBaseJsonDeserializer( + new VenueJsonDeserializer(new CourseAreaJsonDeserializer(DomainFactory.INSTANCE)), + new LeaderboardGroupBaseJsonDeserializer(), new TrackingConnectorInfoJsonDeserializer()); + when(expectedLeaderboardGroup.getId()).thenReturn(UUID.randomUUID()); when(expectedLeaderboardGroup.getName()).thenReturn("LG"); when(expectedLeaderboardGroup.getDescription()).thenReturn("LG Description"); diff --git a/java/com.sap.sailing.server.gateway.serialization.test/src/com/sap/sailing/server/gateway/serialization/test/EventDataJsonSerializerWithNullValuesTest.java b/java/com.sap.sailing.server.gateway.serialization.test/src/com/sap/sailing/server/gateway/serialization/test/EventDataJsonSerializerWithNullValuesTest.java index 36c9ebbf68b..76816379bc6 100755 --- a/java/com.sap.sailing.server.gateway.serialization.test/src/com/sap/sailing/server/gateway/serialization/test/EventDataJsonSerializerWithNullValuesTest.java +++ b/java/com.sap.sailing.server.gateway.serialization.test/src/com/sap/sailing/server/gateway/serialization/test/EventDataJsonSerializerWithNullValuesTest.java @@ -69,9 +69,12 @@ public class EventDataJsonSerializerWithNullValuesTest { when(event.getImages()).thenReturn(Collections.emptySet()); when(event.getVideos()).thenReturn(Collections.emptySet()); // ... and the serializer itself. - serializer = new EventBaseJsonSerializer(new VenueJsonSerializer(new CourseAreaJsonSerializer()), new LeaderboardGroupBaseJsonSerializer(), new TrackingConnectorInfoJsonSerializer()); - deserializer = new EventBaseJsonDeserializer(new VenueJsonDeserializer(new CourseAreaJsonDeserializer(DomainFactory.INSTANCE)), new LeaderboardGroupBaseJsonDeserializer(), new TrackingConnectorInfoJsonDeserializer()); - + serializer = new EventBaseJsonSerializer(new VenueJsonSerializer(new CourseAreaJsonSerializer()), + new LeaderboardGroupBaseJsonSerializer(), new TrackingConnectorInfoJsonSerializer()); + deserializer = new EventBaseJsonDeserializer( + new VenueJsonDeserializer(new CourseAreaJsonDeserializer(DomainFactory.INSTANCE)), + new LeaderboardGroupBaseJsonDeserializer(), new TrackingConnectorInfoJsonDeserializer()); + when(expectedLeaderbaordGroup.getId()).thenReturn(UUID.randomUUID()); when(expectedLeaderbaordGroup.getName()).thenReturn("LG"); when(expectedLeaderbaordGroup.getDescription()).thenReturn("LG Description"); diff --git a/java/com.sap.sailing.server.gateway.serialization.test/src/com/sap/sailing/server/gateway/serialization/test/EventWithNullStartAndEndDataJsonSerializerTest.java b/java/com.sap.sailing.server.gateway.serialization.test/src/com/sap/sailing/server/gateway/serialization/test/EventWithNullStartAndEndDataJsonSerializerTest.java index 03e0b0bcd46..5491af191a2 100755 --- a/java/com.sap.sailing.server.gateway.serialization.test/src/com/sap/sailing/server/gateway/serialization/test/EventWithNullStartAndEndDataJsonSerializerTest.java +++ b/java/com.sap.sailing.server.gateway.serialization.test/src/com/sap/sailing/server/gateway/serialization/test/EventWithNullStartAndEndDataJsonSerializerTest.java @@ -87,8 +87,11 @@ public class EventWithNullStartAndEndDataJsonSerializerTest { doReturn(expectedLeaderboardGroups).when(event).getLeaderboardGroups(); // ... and the serializer itself. - serializer = new EventBaseJsonSerializer(new VenueJsonSerializer(new CourseAreaJsonSerializer()), new LeaderboardGroupBaseJsonSerializer(), new TrackingConnectorInfoJsonSerializer()); - deserializer = new EventBaseJsonDeserializer(new VenueJsonDeserializer(new CourseAreaJsonDeserializer(DomainFactory.INSTANCE)), new LeaderboardGroupBaseJsonDeserializer(), new TrackingConnectorInfoJsonDeserializer()); + serializer = new EventBaseJsonSerializer(new VenueJsonSerializer(new CourseAreaJsonSerializer()), + new LeaderboardGroupBaseJsonSerializer(), new TrackingConnectorInfoJsonSerializer()); + deserializer = new EventBaseJsonDeserializer( + new VenueJsonDeserializer(new CourseAreaJsonDeserializer(DomainFactory.INSTANCE)), + new LeaderboardGroupBaseJsonDeserializer(), new TrackingConnectorInfoJsonDeserializer()); } @Test diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/EventsResource.java b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/EventsResource.java index c7a62a59e5f..e5afc7e358a 100644 --- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/EventsResource.java +++ b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/EventsResource.java @@ -291,7 +291,8 @@ public class EventsResource extends AbstractSailingServerResource { @Produces("application/json;charset=UTF-8") public Response getEvents(@QueryParam("showNonPublic") String showNonPublic) { JsonSerializer eventSerializer = new EventBaseJsonSerializer( - new VenueJsonSerializer(new CourseAreaJsonSerializer()), new LeaderboardGroupBaseJsonSerializer(), new TrackingConnectorInfoJsonSerializer()); + new VenueJsonSerializer(new CourseAreaJsonSerializer()), new LeaderboardGroupBaseJsonSerializer(), + new TrackingConnectorInfoJsonSerializer()); JSONArray result = new JSONArray(); for (Event event : getService().getAllEvents()) { if (getSecurityService().hasCurrentUserReadPermission(event) @@ -330,7 +331,8 @@ public class EventsResource extends AbstractSailingServerResource { getSecurityService().checkCurrentUserReadPermission(event); } JsonSerializer eventSerializer = new EventBaseJsonSerializer( - new VenueJsonSerializer(new CourseAreaJsonSerializer()), new LeaderboardGroupBaseJsonSerializer(), new TrackingConnectorInfoJsonSerializer()); + new VenueJsonSerializer(new CourseAreaJsonSerializer()), new LeaderboardGroupBaseJsonSerializer(), + new TrackingConnectorInfoJsonSerializer()); JSONObject eventJson = eventSerializer.serialize(event); String json = eventJson.toJSONString(); diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/SearchResource.java b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/SearchResource.java index df2f5c577d9..2b79111afff 100755 --- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/SearchResource.java +++ b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/SearchResource.java @@ -29,8 +29,10 @@ public class SearchResource extends AbstractSailingServerResource { public SearchResource() { final LeaderboardGroupBaseJsonSerializer leaderboardGroupSerializer = new LeaderboardGroupBaseJsonSerializer(); - serializer = new LeaderboardSearchResultJsonSerializer(new EventBaseJsonSerializer(new VenueJsonSerializer( - new CourseAreaJsonSerializer()), leaderboardGroupSerializer, new TrackingConnectorInfoJsonSerializer()), leaderboardGroupSerializer); + serializer = new LeaderboardSearchResultJsonSerializer( + new EventBaseJsonSerializer(new VenueJsonSerializer(new CourseAreaJsonSerializer()), + leaderboardGroupSerializer, new TrackingConnectorInfoJsonSerializer()), + leaderboardGroupSerializer); } private Result search(KeywordQuery query) { 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 f83ddb9f6c9..dcc6bc724ed 100755 --- 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 @@ -320,7 +320,8 @@ public interface RacingEventService extends TrackedRegattaRegistry, RegattaFetch void updateStoredLeaderboardGroup(LeaderboardGroup leaderboardGroup); DynamicTrackedRace createTrackedRace(RegattaAndRaceIdentifier raceIdentifier, WindStore windStore, - long delayToLiveInMillis, long millisecondsOverWhichToAverageWind, long millisecondsOverWhichToAverageSpeed, boolean useMarkPassingCalculator, TrackingConnectorInfo trackingConnectorInfo); + long delayToLiveInMillis, long millisecondsOverWhichToAverageWind, long millisecondsOverWhichToAverageSpeed, + boolean useMarkPassingCalculator, TrackingConnectorInfo trackingConnectorInfo); Regatta getOrCreateDefaultRegatta(String name, String boatClassName, Serializable id); diff --git a/java/com.sap.sailing.server.interface/src/com/sap/sailing/server/operationaltransformation/CreateTrackedRace.java b/java/com.sap.sailing.server.interface/src/com/sap/sailing/server/operationaltransformation/CreateTrackedRace.java index 9b436e46031..bffc93bb915 100755 --- a/java/com.sap.sailing.server.interface/src/com/sap/sailing/server/operationaltransformation/CreateTrackedRace.java +++ b/java/com.sap.sailing.server.interface/src/com/sap/sailing/server/operationaltransformation/CreateTrackedRace.java @@ -42,7 +42,8 @@ public class CreateTrackedRace extends AbstractRaceOperation * won't be serialized. A receiver of this operation will therefore always use an {@link EmptyWindStore}. */ public CreateTrackedRace(RegattaAndRaceIdentifier raceIdentifier, WindStore windStore, long delayToLiveInMillis, - long millisecondsOverWhichToAverageWind, long millisecondsOverWhichToAverageSpeed, TrackingConnectorInfo trackingConnectorInfo) { + long millisecondsOverWhichToAverageWind, long millisecondsOverWhichToAverageSpeed, + TrackingConnectorInfo trackingConnectorInfo) { super(raceIdentifier); this.windStore = windStore; this.delayToLiveInMillis = delayToLiveInMillis; @@ -66,9 +67,9 @@ public class CreateTrackedRace extends AbstractRaceOperation @Override public DynamicTrackedRace internalApplyTo(RacingEventService toState) { return toState.createTrackedRace(getRaceIdentifier(), windStore == null ? EmptyWindStore.INSTANCE : windStore, - delayToLiveInMillis, millisecondsOverWhichToAverageWind, - millisecondsOverWhichToAverageSpeed, /* useMarkPassingCalculator */ false, trackingConnectorInfo); - // no separate mark passing calculations in replica; + delayToLiveInMillis, millisecondsOverWhichToAverageWind, millisecondsOverWhichToAverageSpeed, + /* useMarkPassingCalculator */ false, trackingConnectorInfo); + // no separate mark passing calculations in replica; // Mark passings are computed on master and are replicated separately. // See UpdateMarkPassings } diff --git a/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/RemoveLeaderboardTest.java b/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/RemoveLeaderboardTest.java index 250e21ef91a..63034ee98ab 100755 --- a/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/RemoveLeaderboardTest.java +++ b/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/RemoveLeaderboardTest.java @@ -103,9 +103,9 @@ public class RemoveLeaderboardTest { regatta.addRace(raceDef1); trackedRace = trackedRegatta1.createTrackedRace(raceDef1, Collections. emptyList(), /* windStore */ EmptyWindStore.INSTANCE, /* delayToLiveInMillis */ 0l, - /* millisecondsOverWhichToAverageWind */ 0l, - /* millisecondsOverWhichToAverageSpeed */ 0l, /* raceDefinitionSetToUpdate */ null, /*useMarkPassingCalculator*/ false, mock(RaceLogAndTrackedRaceResolver.class), - Optional.empty(), /* trackingConnectorInfo */ null); + /* millisecondsOverWhichToAverageWind */ 0l, /* millisecondsOverWhichToAverageSpeed */ 0l, + /* raceDefinitionSetToUpdate */ null, /* useMarkPassingCalculator */ false, + mock(RaceLogAndTrackedRaceResolver.class), Optional.empty(), /* trackingConnectorInfo */ null); } @Test diff --git a/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/SearchServiceTest.java b/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/SearchServiceTest.java index c9edda83435..c909089aff6 100755 --- a/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/SearchServiceTest.java +++ b/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/SearchServiceTest.java @@ -357,15 +357,19 @@ public class SearchServiceTest { @Test public void testSerializeAndDeserializeSearchResult() throws JsonDeserializationException { - Result searchResults = server.search(new KeywordQuery(Arrays.asList(new String[] { "Buhl" }))); + Result searchResults = server + .search(new KeywordQuery(Arrays.asList(new String[] { "Buhl" }))); LeaderboardGroupBaseJsonSerializer leaderboardGroupBaseJsonSerializer = new LeaderboardGroupBaseJsonSerializer(); - LeaderboardSearchResultJsonSerializer serializer = new LeaderboardSearchResultJsonSerializer(new EventBaseJsonSerializer(new VenueJsonSerializer(new CourseAreaJsonSerializer()), - leaderboardGroupBaseJsonSerializer, new TrackingConnectorInfoJsonSerializer()), + LeaderboardSearchResultJsonSerializer serializer = new LeaderboardSearchResultJsonSerializer( + new EventBaseJsonSerializer(new VenueJsonSerializer(new CourseAreaJsonSerializer()), + leaderboardGroupBaseJsonSerializer, new TrackingConnectorInfoJsonSerializer()), leaderboardGroupBaseJsonSerializer); LeaderboardGroupBaseJsonDeserializer leaderboardGroupBaseJsonDeserializer = new LeaderboardGroupBaseJsonDeserializer(); LeaderboardSearchResultBaseJsonDeserializer deserializer = new LeaderboardSearchResultBaseJsonDeserializer( - new EventBaseJsonDeserializer(new VenueJsonDeserializer(new CourseAreaJsonDeserializer(DomainFactory.INSTANCE)), - leaderboardGroupBaseJsonDeserializer, new TrackingConnectorInfoJsonDeserializer()), leaderboardGroupBaseJsonDeserializer); + new EventBaseJsonDeserializer( + new VenueJsonDeserializer(new CourseAreaJsonDeserializer(DomainFactory.INSTANCE)), + leaderboardGroupBaseJsonDeserializer, new TrackingConnectorInfoJsonDeserializer()), + leaderboardGroupBaseJsonDeserializer); final LeaderboardSearchResult expected = searchResults.getHits().iterator().next(); LeaderboardSearchResultBase deserialized = deserializer.deserialize(serializer.serialize(expected)); assertEquals("Pfingstbusch (470)", deserialized.getRegattaName()); 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 68b14282630..b381322a075 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 @@ -877,11 +877,14 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes final RaceHandle handle = addRace(/* addToRegatta==null means "default regatta" */ null, params, /* no timeout during mass loading */ -1, new DefaultRaceTrackingHandler() { @Override - public DynamicTrackedRace createTrackedRace(TrackedRegatta trackedRegatta, RaceDefinition raceDefinition, - Iterable sidelines, WindStore windStore, long delayToLiveInMillis, - long millisecondsOverWhichToAverageWind, long millisecondsOverWhichToAverageSpeed, - DynamicRaceDefinitionSet raceDefinitionSetToUpdate, boolean useMarkPassingCalculator, - RaceLogAndTrackedRaceResolver raceLogResolver, Optional threadLocalTransporter, TrackingConnectorInfo trackingConnectorInfo) { + public DynamicTrackedRace createTrackedRace(TrackedRegatta trackedRegatta, + RaceDefinition raceDefinition, Iterable sidelines, WindStore windStore, + long delayToLiveInMillis, long millisecondsOverWhichToAverageWind, + long millisecondsOverWhichToAverageSpeed, + DynamicRaceDefinitionSet raceDefinitionSetToUpdate, + boolean useMarkPassingCalculator, RaceLogAndTrackedRaceResolver raceLogResolver, + Optional threadLocalTransporter, + TrackingConnectorInfo trackingConnectorInfo) { final DynamicTrackedRace trackedRace = super.createTrackedRace(trackedRegatta, raceDefinition, sidelines, windStore, delayToLiveInMillis, millisecondsOverWhichToAverageWind, millisecondsOverWhichToAverageSpeed, raceDefinitionSetToUpdate, @@ -1970,7 +1973,9 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes return trackedRegatta.createTrackedRace(race, Collections. emptyList(), windStore, delayToLiveInMillis, millisecondsOverWhichToAverageWind, millisecondsOverWhichToAverageSpeed, /* raceDefinitionSetToUpdate */null, useMarkPassingCalculator, /* raceLogResolver */ this, - Optional.of(this.getThreadLocalTransporterForCurrentlyFillingFromInitialLoadOrApplyingOperationReceivedFromMaster()), trackingConnectorInfo); + Optional.of(this + .getThreadLocalTransporterForCurrentlyFillingFromInitialLoadOrApplyingOperationReceivedFromMaster()), + trackingConnectorInfo); } private void ensureRegattaIsObservedForDefaultLeaderboardAndAutoLeaderboardLinking( @@ -4071,8 +4076,9 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes Object eventsAsObject = parser.parse(bufferedReader); final LeaderboardGroupBaseJsonDeserializer leaderboardGroupBaseJsonDeserializer = new LeaderboardGroupBaseJsonDeserializer(); LeaderboardSearchResultBaseJsonDeserializer deserializer = new LeaderboardSearchResultBaseJsonDeserializer( - new EventBaseJsonDeserializer(new VenueJsonDeserializer(new CourseAreaJsonDeserializer( - DomainFactory.INSTANCE)), leaderboardGroupBaseJsonDeserializer, new TrackingConnectorInfoJsonDeserializer()), + new EventBaseJsonDeserializer( + new VenueJsonDeserializer(new CourseAreaJsonDeserializer(DomainFactory.INSTANCE)), + leaderboardGroupBaseJsonDeserializer, new TrackingConnectorInfoJsonDeserializer()), leaderboardGroupBaseJsonDeserializer); result = new ResultImpl(query, new LeaderboardSearchResultBaseRanker()); diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/security/PermissionAwareRaceTrackingHandler.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/security/PermissionAwareRaceTrackingHandler.java index 5dd92e8310b..e9d8847be82 100644 --- a/java/com.sap.sailing.server/src/com/sap/sailing/server/security/PermissionAwareRaceTrackingHandler.java +++ b/java/com.sap.sailing.server/src/com/sap/sailing/server/security/PermissionAwareRaceTrackingHandler.java @@ -104,11 +104,14 @@ public class PermissionAwareRaceTrackingHandler extends DefaultRaceTrackingHandl Iterable sidelines, WindStore windStore, long delayToLiveInMillis, long millisecondsOverWhichToAverageWind, long millisecondsOverWhichToAverageSpeed, DynamicRaceDefinitionSet raceDefinitionSetToUpdate, boolean useMarkPassingCalculator, - RaceLogAndTrackedRaceResolver raceLogResolver, Optional threadLocalTransporter, TrackingConnectorInfo trackingConnectorInfo) { - return setOwnershipForRace(new RegattaNameAndRaceName(trackedRegatta.getRegatta().getName(), raceDefinition.getName()), + RaceLogAndTrackedRaceResolver raceLogResolver, Optional threadLocalTransporter, + TrackingConnectorInfo trackingConnectorInfo) { + return setOwnershipForRace( + new RegattaNameAndRaceName(trackedRegatta.getRegatta().getName(), raceDefinition.getName()), () -> super.createTrackedRace(trackedRegatta, raceDefinition, sidelines, windStore, delayToLiveInMillis, millisecondsOverWhichToAverageWind, millisecondsOverWhichToAverageSpeed, - raceDefinitionSetToUpdate, useMarkPassingCalculator, raceLogResolver, threadLocalTransporter, trackingConnectorInfo)); + raceDefinitionSetToUpdate, useMarkPassingCalculator, raceLogResolver, threadLocalTransporter, + trackingConnectorInfo)); } @Override From bfdcce7790d078a32bf62723290a15ef17327721 Mon Sep 17 00:00:00 2001 From: Dennis Aulenbacher Date: Wed, 18 Dec 2019 10:55:40 +0100 Subject: [PATCH 29/44] Improved compatibility of (de)serialization of events regarding trackingConnectorInfos, especially when reading events from a server that does not have the new version yet. --- .../impl/EventBaseJsonDeserializer.java | 12 +++++++----- .../impl/TrackingConnectorInfoJsonDeserializer.java | 13 +++++++++---- .../serialization/impl/EventBaseJsonSerializer.java | 2 +- .../impl/TrackingConnectorInfoJsonSerializer.java | 8 ++++++-- 4 files changed, 23 insertions(+), 12 deletions(-) diff --git a/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/deserialization/impl/EventBaseJsonDeserializer.java b/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/deserialization/impl/EventBaseJsonDeserializer.java index fefa20b4dae..d25af7816c3 100644 --- a/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/deserialization/impl/EventBaseJsonDeserializer.java +++ b/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/deserialization/impl/EventBaseJsonDeserializer.java @@ -63,12 +63,14 @@ public class EventBaseJsonDeserializer implements JsonDeserializer { leaderboardGroups.add(leaderboardGroupDeserializer.deserialize((JSONObject) lgJson)); } } - Set trackingConnectorInfos = new HashSet<>(); - JSONArray trackedByJson = Helpers.getNestedArraySafe(eventJson, EventBaseJsonSerializer.FIELD_TRACKING_CONNECTOR_INFOS); - for (Object jsonPair : trackedByJson) { - trackingConnectorInfos.add(trackingConnectorInfoDeserializer.deserialize((JSONObject) jsonPair)); + final Set trackingConnectorInfos = new HashSet<>(); + final JSONArray trackingConnectorInfosJson = (JSONArray) eventJson + .get(EventBaseJsonSerializer.FIELD_TRACKING_CONNECTOR_INFOS); + if (trackingConnectorInfosJson != null) { + for (Object jsonPair : trackingConnectorInfosJson) { + trackingConnectorInfos.add(trackingConnectorInfoDeserializer.deserialize((JSONObject) jsonPair)); + } } - StrippedEventImpl result = new StrippedEventImpl(name, startDate == null ? null : new MillisecondsTimePoint(startDate.longValue()), endDate == null ? null : new MillisecondsTimePoint(endDate.longValue()), venue, /* is public */ true, diff --git a/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/deserialization/impl/TrackingConnectorInfoJsonDeserializer.java b/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/deserialization/impl/TrackingConnectorInfoJsonDeserializer.java index 5cc7189a6c9..8569a45be38 100644 --- a/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/deserialization/impl/TrackingConnectorInfoJsonDeserializer.java +++ b/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/deserialization/impl/TrackingConnectorInfoJsonDeserializer.java @@ -2,6 +2,8 @@ package com.sap.sailing.server.gateway.deserialization.impl; import java.net.MalformedURLException; import java.net.URL; +import java.util.logging.Level; +import java.util.logging.Logger; import org.json.simple.JSONObject; @@ -12,16 +14,19 @@ import com.sap.sailing.server.gateway.deserialization.JsonDeserializer; import com.sap.sailing.server.gateway.serialization.impl.TrackingConnectorInfoJsonSerializer; public class TrackingConnectorInfoJsonDeserializer implements JsonDeserializer { + private static final Logger logger = Logger.getLogger(TrackingConnectorInfoJsonDeserializer.class.getName()); public TrackingConnectorInfo deserialize(JSONObject object) throws JsonDeserializationException { - String trackedBy = Helpers.getNestedObjectSafe(object, TrackingConnectorInfoJsonSerializer.FIELD_TRACKED_BY).toJSONString(); + final String trackedBy = (String) object.get(TrackingConnectorInfoJsonSerializer.FIELD_TRACKED_BY); + final String webUrlString = (String) object.get(TrackingConnectorInfoJsonSerializer.FIELD_WEB_URL); URL webUrl; try { - webUrl = new URL( (String) object.get(TrackingConnectorInfoJsonSerializer.FIELD_WEB_URL)); + webUrl = webUrlString == null ? null : new URL(webUrlString); } catch (MalformedURLException e) { - throw new JsonDeserializationException(e); + logger.log(Level.WARNING, "Error while parsing webUrl of TrackingConnectorInfo", e); + webUrl = null; } - TrackingConnectorInfo trackingConnectorInfo = new TrackingConnectorInfoImpl(trackedBy, webUrl); + final TrackingConnectorInfo trackingConnectorInfo = new TrackingConnectorInfoImpl(trackedBy, webUrl); return trackingConnectorInfo; } } diff --git a/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/serialization/impl/EventBaseJsonSerializer.java b/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/serialization/impl/EventBaseJsonSerializer.java index 369badc4a07..6070ddba235 100644 --- a/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/serialization/impl/EventBaseJsonSerializer.java +++ b/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/serialization/impl/EventBaseJsonSerializer.java @@ -40,7 +40,7 @@ public class EventBaseJsonSerializer implements JsonSerializer { public static final String FIELD_CREATEDATDATE = "createdAtDate"; public static final String FIELD_LOCALE = "locale"; public static final String FIELD_TAGS = "tags"; - public static final String FIELD_TRACKING_CONNECTOR_INFOS = "trackedBy"; + public static final String FIELD_TRACKING_CONNECTOR_INFOS = "trackingConnectorInfos"; // specific image fields public static final String FIELD_IMAGES = "images"; public static final String FIELD_IMAGE_WIDTH_IN_PX = "widthInPixel"; diff --git a/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/serialization/impl/TrackingConnectorInfoJsonSerializer.java b/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/serialization/impl/TrackingConnectorInfoJsonSerializer.java index 5876e6fb2cf..6f7beea7d30 100644 --- a/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/serialization/impl/TrackingConnectorInfoJsonSerializer.java +++ b/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/serialization/impl/TrackingConnectorInfoJsonSerializer.java @@ -1,5 +1,7 @@ package com.sap.sailing.server.gateway.serialization.impl; +import java.net.URL; + import org.json.simple.JSONObject; import com.sap.sailing.domain.tracking.TrackingConnectorInfo; @@ -12,9 +14,11 @@ public class TrackingConnectorInfoJsonSerializer implements JsonSerializer Date: Wed, 18 Dec 2019 11:10:31 +0100 Subject: [PATCH 30/44] Added equals and hashCode to TrackingConnectorInfoDTO --- .../ui/shared/TrackingConnectorInfoDTO.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/TrackingConnectorInfoDTO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/TrackingConnectorInfoDTO.java index d39bab7b4f3..1d2600fadea 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/TrackingConnectorInfoDTO.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/TrackingConnectorInfoDTO.java @@ -20,4 +20,35 @@ public class TrackingConnectorInfoDTO implements IsSerializable { public String getWebUrl() { return webUrl; } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((trackedBy == null) ? 0 : trackedBy.hashCode()); + result = prime * result + ((webUrl == null) ? 0 : webUrl.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + TrackingConnectorInfoDTO other = (TrackingConnectorInfoDTO) obj; + if (trackedBy == null) { + if (other.trackedBy != null) + return false; + } else if (!trackedBy.equals(other.trackedBy)) + return false; + if (webUrl == null) { + if (other.webUrl != null) + return false; + } else if (!webUrl.equals(other.webUrl)) + return false; + return true; + } } From e4298b4f9ae52bb0dd30452a2f5ee686ca889d17 Mon Sep 17 00:00:00 2001 From: Dennis Aulenbacher Date: Wed, 18 Dec 2019 11:56:01 +0100 Subject: [PATCH 31/44] Code formatting --- .../domain/tractracadapter/impl/DomainFactoryImpl.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) 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 56a352257a9..51b96975981 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 @@ -645,7 +645,7 @@ public class DomainFactoryImpl implements DomainFactory { trackedRegatta.getRegatta().addRace(raceDefinition); TrackingConnectorInfo trackingConnectorInfo = null; if (tractracRace != null) { - trackingConnectorInfo = new TrackingConnectorInfoImpl(TRAC_TRAC_IDENTIFIER,tractracRace.getEvent().getWebURL()); + trackingConnectorInfo = new TrackingConnectorInfoImpl(TRAC_TRAC_IDENTIFIER, tractracRace.getEvent().getWebURL()); } trackedRace = createTrackedRace(trackedRegatta, raceDefinition, sidelines, windStore, delayToLiveInMillis, millisecondsOverWhichToAverageWind, raceDefinitionSetToUpdate, ignoreTracTracMarkPassings, @@ -746,11 +746,13 @@ public class DomainFactoryImpl implements DomainFactory { private DynamicTrackedRace createTrackedRace(TrackedRegatta trackedRegatta, RaceDefinition race, Iterable sidelines, WindStore windStore, long delayToLiveInMillis, long millisecondsOverWhichToAverageWind, DynamicRaceDefinitionSet raceDefinitionSetToUpdate, - boolean useMarkPassingCalculator, RaceLogAndTrackedRaceResolver raceLogResolver, RaceTrackingHandler raceTrackingHandler, TrackingConnectorInfo trackingConnectorInfo) { + boolean useMarkPassingCalculator, RaceLogAndTrackedRaceResolver raceLogResolver, + RaceTrackingHandler raceTrackingHandler, TrackingConnectorInfo trackingConnectorInfo) { return raceTrackingHandler.createTrackedRace(trackedRegatta, race, sidelines, windStore, delayToLiveInMillis, millisecondsOverWhichToAverageWind, /* time over which to average speed: */ race.getBoatClass().getApproximateManeuverDurationInMilliseconds(), - raceDefinitionSetToUpdate, useMarkPassingCalculator, raceLogResolver, Optional.empty(), trackingConnectorInfo); + raceDefinitionSetToUpdate, useMarkPassingCalculator, raceLogResolver, Optional.empty(), + trackingConnectorInfo); } /** From a6ce927f023bcdc84066a51e46645e1728f65b23 Mon Sep 17 00:00:00 2001 From: Dennis Aulenbacher Date: Wed, 18 Dec 2019 11:58:10 +0100 Subject: [PATCH 32/44] Removed code duplication and optimized determination of the TrackingConnectorInfoDTO for RaceBoard --- .../client/nodes/LiveRaceBoardNode.java | 2 +- .../event/GetEventViewAction.java | 13 +--------- .../sailing/gwt/server/HomeServiceUtil.java | 13 ++-------- .../gwt/ui/raceboard/RaceBoardEntryPoint.java | 2 +- .../gwt/ui/raceboard/RaceBoardPanel.java | 12 ++++++---- .../gwt/ui/server/SailingServiceImpl.java | 24 ++++--------------- .../gwt/ui/shared/RaceboardDataDTO.java | 15 ++++++------ .../ui/shared/TrackingConnectorInfoDTO.java | 9 ++++--- .../gwt/ui/shared/databylogo/DataByLogo.java | 8 +++---- 9 files changed, 33 insertions(+), 65 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/nodes/LiveRaceBoardNode.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/nodes/LiveRaceBoardNode.java index 6fe87dfaae1..547a162f726 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/nodes/LiveRaceBoardNode.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/nodes/LiveRaceBoardNode.java @@ -77,7 +77,7 @@ public class LiveRaceBoardNode extends FiresPlaceNode implements RaceTimesInfoPr /** leaderboardGroupName */ null, /** eventId */ null, cf.getErrorReporter(), StringMessages.INSTANCE, null, raceTimesInfoProvider, true, false, - Arrays.asList(DetailType.values()), result.getLeaderboard(), result.getRace(), result.getTrackingConnectorInfos()); + Arrays.asList(DetailType.values()), result.getLeaderboard(), result.getRace(), result.getTrackingConnectorInfo()); setPlaceToGo(new LiveRaceWithRaceboardPlace(raceboardPerspective)); firePlaceChangeAndStartTimer(); getBus().fireEvent(new AutoPlayHeaderEvent(cf.getAutoPlayCtxSignalError().getLifeOrPreLiveRace().getRegattaName(), diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/event/GetEventViewAction.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/event/GetEventViewAction.java index 159f1b6d164..714e7075b55 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/event/GetEventViewAction.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/event/GetEventViewAction.java @@ -122,21 +122,10 @@ public class GetEventViewAction implements SailingAction, IsClient } Set trackingConnectorInfos = event.getTrackingConnectorInfos().stream() - .map(trackingConnectorInfo -> new TrackingConnectorInfoDTO(trackingConnectorInfo.getTrackedBy(), - mapURLToString(trackingConnectorInfo.getWebUrl()))) - .collect(Collectors.toSet()); + .map(TrackingConnectorInfoDTO::new).collect(Collectors.toSet()); dto.setTrackingConnectorInfos(trackingConnectorInfos); return dto; } - - @GwtIncompatible - private String mapURLToString(URL url) { - if(url != null) { - return url.toString(); - }else { - return ""; - } - } @Override public void cacheInstanceKey(StringBuilder key) { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/server/HomeServiceUtil.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/server/HomeServiceUtil.java index 8d1cac13668..a744844a4fb 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/server/HomeServiceUtil.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/server/HomeServiceUtil.java @@ -312,22 +312,13 @@ public final class HomeServiceUtil { dto.setBaseURL(baseURL.toString()); dto.setOnRemoteServer(onRemoteServer); dto.setStageType(stageType); - Set trackingConnectorInfos = event.getTrackingConnectorInfos() - .stream() - .map(trackingConnectorInfo -> new TrackingConnectorInfoDTO(trackingConnectorInfo.getTrackedBy(), mapURLToString(trackingConnectorInfo.getWebUrl()))).collect(Collectors.toSet()); + Set trackingConnectorInfos = event.getTrackingConnectorInfos().stream() + .map(TrackingConnectorInfoDTO::new).collect(Collectors.toSet()); dto.setTrackingConnectorInfos(trackingConnectorInfos); dto.setStageImageURL(useTeaserImage ? findEventThumbnailImageUrlAsString(event) : getStageImageURLAsString(event)); return dto; } - private static String mapURLToString(URL url) { - if(url != null) { - return url.toString(); - }else { - return ""; - } - } - public static EventListEventDTO convertToEventListDTO(EventBase event, URL baseURL, boolean onRemoteServer, RacingEventService service) { EventListEventDTO dto = new EventListEventDTO(); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardEntryPoint.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardEntryPoint.java index 8b0893c42f5..8d83387124a 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardEntryPoint.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardEntryPoint.java @@ -155,7 +155,7 @@ public class RaceBoardEntryPoint extends AbstractSailingEntryPoint implements Pr raceboardContextDefinition.getLeaderboardName(), raceboardContextDefinition.getLeaderboardGroupName(), raceboardContextDefinition.getEventId(), RaceBoardEntryPoint.this, getStringMessages(), userAgent, raceTimesInfoProvider, showChartMarkEditMediaButtonsAndVideo, true, availableDetailTypes, - raceboardData.getLeaderboard(), selectedRace, raceboardData.getTrackingConnectorInfos()); + raceboardData.getLeaderboard(), selectedRace, raceboardData.getTrackingConnectorInfo()); RootLayoutPanel.get().add(raceBoardPerspective.getEntryWidget()); if (raceBoardMode != null) { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardPanel.java index ead4b7ba4a3..b10ce67f07b 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardPanel.java @@ -1,6 +1,7 @@ package com.sap.sailing.gwt.ui.raceboard; import java.util.ArrayList; +import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.List; @@ -184,7 +185,7 @@ public class RaceBoardPanel private ManeuverTablePanel maneuverTablePanel; private static final RaceMapResources raceMapResources = GWT.create(RaceMapResources.class); - private Set trackingConnectorInfos; + private TrackingConnectorInfoDTO trackingConnectorInfo; /** * @param eventId @@ -202,7 +203,7 @@ public class RaceBoardPanel * @param availableDetailTypes * A list of all Detailtypes, that will be offered in the Settingsdialog. Can be used to hide settings no * data exists for, eg Bravo, Expdition ect. - * @param trackingConnectorInfos + * @param trackingConnectorInfo */ public RaceBoardPanel(Component parent, ComponentContext> componentContext, @@ -215,7 +216,7 @@ public class RaceBoardPanel UserAgentDetails userAgent, RaceTimesInfoProvider raceTimesInfoProvider, boolean showChartMarkEditMediaButtonsAndVideo, boolean showHeaderPanel, Iterable availableDetailTypes, StrippedLeaderboardDTOWithSecurity leaderboardDTO, - final RaceWithCompetitorsAndBoatsDTO raceDTO, Set trackingConnectorInfos) { + final RaceWithCompetitorsAndBoatsDTO raceDTO, TrackingConnectorInfoDTO trackingConnectorInfo) { super(parent, componentContext, lifecycle, settings); this.sailingService = sailingService; this.mediaService = mediaService; @@ -225,7 +226,7 @@ public class RaceBoardPanel this.userAgent = userAgent; this.timer = timer; this.eventId = eventId; - this.trackingConnectorInfos = trackingConnectorInfos; + this.trackingConnectorInfo = trackingConnectorInfo; this.currentRaceHasBeenSelectedOnce = false; this.leaderboardName = leaderboardName; this.selectedRaceIdentifier = selectedRaceIdentifier; @@ -718,7 +719,8 @@ public class RaceBoardPanel regattaAndRaceTimeInformationHeader.add(regattaNameAnchor); regattaAndRaceTimeInformationHeader.add(raceTimeLabel); DataByLogo dataByLogo = new DataByLogo(); - dataByLogo.setUp(trackingConnectorInfos, false, true); + dataByLogo.setUp(trackingConnectorInfo == null ? Collections.emptySet() + : Collections.singleton(trackingConnectorInfo), false, true); if (dataByLogo.isVisible()) { regattaAndRaceTimeInformationHeader.addStyleName("RegattaAndRaceTime-Header_with_databy"); } 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 f4aeb91038d..29a5932c3f9 100644 --- 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 @@ -52,7 +52,6 @@ import java.util.logging.Level; import java.util.logging.Logger; import java.util.regex.Matcher; import java.util.regex.Pattern; -import java.util.stream.Collectors; import java.util.stream.StreamSupport; import java.util.zip.GZIPInputStream; @@ -398,6 +397,7 @@ import com.sap.sailing.domain.tracking.Track; import com.sap.sailing.domain.tracking.TrackedLeg; import com.sap.sailing.domain.tracking.TrackedLegOfCompetitor; import com.sap.sailing.domain.tracking.TrackedRace; +import com.sap.sailing.domain.tracking.TrackingConnectorInfo; import com.sap.sailing.domain.tracking.WindLegTypeAndLegBearingAndORCPerformanceCurveCache; import com.sap.sailing.domain.tracking.WindPositionMode; import com.sap.sailing.domain.tracking.WindTrack; @@ -2055,30 +2055,16 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet StrippedLeaderboardDTOWithSecurity leaderboardDTO = createStrippedLeaderboardDTOWithSecurity( leaderboard, false, false); - Set trackingConnectorInfos; - if(isValidEvent) { - trackingConnectorInfos = event.getTrackingConnectorInfos() - .stream() - .map(trackingConnectorInfo -> new TrackingConnectorInfoDTO(trackingConnectorInfo.getTrackedBy(), mapURLToString(trackingConnectorInfo.getWebUrl()))) - .collect(Collectors.toSet()); - }else { - trackingConnectorInfos = Collections.emptySet(); - } + final TrackingConnectorInfo trackingConnectorInfo = trackedRace.getTrackingConnectorInfo(); + final TrackingConnectorInfoDTO trackingConnectorInfoDTO = trackingConnectorInfo == null ? null + : new TrackingConnectorInfoDTO(trackingConnectorInfo); result = new RaceboardDataDTO(raceDTO, isValidLeaderboardGroup, isValidEvent, - detailTypesForCompetitorChart, availableDetailTypesForLeaderboard, leaderboardDTO, trackingConnectorInfos); + detailTypesForCompetitorChart, availableDetailTypesForLeaderboard, leaderboardDTO, trackingConnectorInfoDTO); } } } return result; } - - private static String mapURLToString(URL url) { - if (url != null) { - return url.toString(); - } else { - return ""; - } - } @Override public CompactRaceMapDataDTO getRaceMapData(RegattaAndRaceIdentifier raceIdentifier, Date date, diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RaceboardDataDTO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RaceboardDataDTO.java index 0eb9941bdc2..52ab9177f7d 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RaceboardDataDTO.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RaceboardDataDTO.java @@ -2,7 +2,6 @@ package com.sap.sailing.gwt.ui.shared; import java.util.ArrayList; import java.util.Map; -import java.util.Set; import com.google.gwt.user.client.rpc.IsSerializable; import com.sap.sailing.domain.common.DetailType; @@ -17,15 +16,15 @@ public class RaceboardDataDTO implements IsSerializable { private ArrayList detailTypesForCompetitorChart; private ArrayList availableDetailTypesForLeaderboard; private StrippedLeaderboardDTOWithSecurity leaderboard; - private Set trackingConnectorInfos; - + private TrackingConnectorInfoDTO trackingConnectorInfo; // for GWT RaceboardDataDTO() {} public RaceboardDataDTO(RaceWithCompetitorsAndBoatsDTO race, boolean isValidLeaderboardGroup, boolean isValidEvent, Iterable detailTypesForCompetitorChart, - Iterable availableDetailTypesForLeaderboard, StrippedLeaderboardDTOWithSecurity leaderboard, Set trackingConnectorInfos) { + Iterable availableDetailTypesForLeaderboard, StrippedLeaderboardDTOWithSecurity leaderboard, + TrackingConnectorInfoDTO trackingConnectorInfo) { this.race = race; this.isValidLeaderboardGroup = isValidLeaderboardGroup; this.isValidEvent = isValidEvent; @@ -34,7 +33,7 @@ public class RaceboardDataDTO implements IsSerializable { this.availableDetailTypesForLeaderboard = new ArrayList<>(); Util.addAll(availableDetailTypesForLeaderboard, this.availableDetailTypesForLeaderboard); this.leaderboard = leaderboard; - this.trackingConnectorInfos = trackingConnectorInfos; + this.trackingConnectorInfo = trackingConnectorInfo; } public StrippedLeaderboardDTOWithSecurity getLeaderboard() { @@ -68,8 +67,8 @@ public class RaceboardDataDTO implements IsSerializable { public boolean isValidEvent() { return isValidEvent; } - - public Set getTrackingConnectorInfos() { - return trackingConnectorInfos; + + public TrackingConnectorInfoDTO getTrackingConnectorInfo() { + return trackingConnectorInfo; } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/TrackingConnectorInfoDTO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/TrackingConnectorInfoDTO.java index 1d2600fadea..baa4c6b20d8 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/TrackingConnectorInfoDTO.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/TrackingConnectorInfoDTO.java @@ -1,6 +1,8 @@ package com.sap.sailing.gwt.ui.shared; +import com.google.gwt.core.shared.GwtIncompatible; import com.google.gwt.user.client.rpc.IsSerializable; +import com.sap.sailing.domain.tracking.TrackingConnectorInfo; public class TrackingConnectorInfoDTO implements IsSerializable { private String trackedBy; @@ -8,9 +10,10 @@ public class TrackingConnectorInfoDTO implements IsSerializable { TrackingConnectorInfoDTO() {} // GWT serialization - public TrackingConnectorInfoDTO(String trackedBy, String webUrl) { - this.trackedBy = trackedBy; - this.webUrl = webUrl; + @GwtIncompatible + public TrackingConnectorInfoDTO(TrackingConnectorInfo trackingConnectorInfo) { + this.trackedBy = trackingConnectorInfo.getTrackedBy(); + this.webUrl = trackingConnectorInfo.getWebUrl() == null ? null : trackingConnectorInfo.getWebUrl().toString(); } public String getTrackedBy() { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/databylogo/DataByLogo.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/databylogo/DataByLogo.java index 68a9f02c576..2ab7a151a42 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/databylogo/DataByLogo.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/databylogo/DataByLogo.java @@ -44,21 +44,19 @@ public class DataByLogo extends Widget { private TrackingConnectorInfoDTO selectMostProminentConnectorInfo( Set trackingConnectorInfos) { TrackingConnectorInfoDTO potentialConnectorInfo = null; - if (trackingConnectorInfos == null || trackingConnectorInfos.isEmpty()) { - return potentialConnectorInfo; - } else { + if (trackingConnectorInfos != null && !trackingConnectorInfos.isEmpty()) { for (TrackingConnectorInfoDTO trackingConnectorInfo : trackingConnectorInfos) { // This logic currently only supports TracTrac as ConnectorInfo if (TRAC_TRAC.equals(trackingConnectorInfo.getTrackedBy())) { potentialConnectorInfo = trackingConnectorInfo; String webUrl = trackingConnectorInfo.getWebUrl(); - if (webUrl != null && !"".equals(webUrl)) { + if (webUrl != null && !webUrl.isEmpty()) { break; } } } - return potentialConnectorInfo; } + return potentialConnectorInfo; } private void setUpForConnectorType(boolean colorIfPossible, boolean enforceTextColor, From 0569e6febd6ad40e01cecad78c2ac9990b61acb8 Mon Sep 17 00:00:00 2001 From: Dennis Aulenbacher Date: Wed, 18 Dec 2019 12:32:49 +0100 Subject: [PATCH 33/44] Added inline Comments to better identify boolean parameters of DataByLogo.setup() --- .../gwt/home/desktop/partials/eventheader/EventHeader.java | 2 +- .../gwt/home/desktop/partials/stage/StageTeaserBand.java | 2 +- .../gwt/home/mobile/partials/eventheader/EventHeader.java | 2 +- .../sailing/gwt/home/mobile/partials/stage/StageTeaserBand.java | 2 +- .../java/com/sap/sailing/gwt/ui/raceboard/RaceBoardPanel.java | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.java index 28f1a513d1c..4cc5c62cbda 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.java @@ -151,7 +151,7 @@ public class EventHeader extends Composite { } hide(competitors, races, courseAreaUi, eventCategory); } - dataByLogo.setUp(event.getTrackingConnectorInfos(), true, false); + dataByLogo.setUp(event.getTrackingConnectorInfos(), /** colorIfPossible **/ false, /** enforceTextColor **/ true); initTitleAndSelection(nameToShow); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/stage/StageTeaserBand.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/stage/StageTeaserBand.java index 1a63da35ccc..d105732efc1 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/stage/StageTeaserBand.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/stage/StageTeaserBand.java @@ -44,7 +44,7 @@ public abstract class StageTeaserBand extends Composite { isLiveDiv.getStyle().setDisplay(Display.NONE); - dataByLogo.setUp(event.getTrackingConnectorInfos(), false, true); + dataByLogo.setUp(event.getTrackingConnectorInfos(), /** colorIfPossible **/ false, /** enforceTextColor **/ true); eventNavigation = placeNavigator.getEventNavigation(event.getId().toString(), event.getBaseURL(), event.isOnRemoteServer()); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/eventheader/EventHeader.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/eventheader/EventHeader.java index e6bdbfe9562..a1fe94c2fb7 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/eventheader/EventHeader.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/eventheader/EventHeader.java @@ -51,7 +51,7 @@ public class EventHeader extends Composite { if (logoNavigation != null) { logoNavigation.configureAnchorElement(eventLogoUi); } - dataByLogo.setUp(event.getTrackingConnectorInfos(), true, true); + dataByLogo.setUp(event.getTrackingConnectorInfos(), /** colorIfPossible **/ false, /** enforceTextColor **/ true); if (dataByLogo.isVisible()) { this.addStyleName(EventHeaderResources.INSTANCE.css().eventheader_with_logo()); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/StageTeaserBand.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/StageTeaserBand.java index 2f8bef2b51c..005d2f01d6a 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/StageTeaserBand.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/StageTeaserBand.java @@ -45,7 +45,7 @@ public abstract class StageTeaserBand extends Composite { initWidget(uiBinder.createAndBindUi(this)); if (event instanceof EventStageDTO) { - dataByLogo.setUp(((EventStageDTO) event).getTrackingConnectorInfos(), false, true); + dataByLogo.setUp(((EventStageDTO) event).getTrackingConnectorInfos(), /** colorIfPossible **/ false, /** enforceTextColor **/ true); } else { dataByLogo.setVisible(false); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardPanel.java index b10ce67f07b..c85bebd4355 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardPanel.java @@ -720,7 +720,7 @@ public class RaceBoardPanel regattaAndRaceTimeInformationHeader.add(raceTimeLabel); DataByLogo dataByLogo = new DataByLogo(); dataByLogo.setUp(trackingConnectorInfo == null ? Collections.emptySet() - : Collections.singleton(trackingConnectorInfo), false, true); + : Collections.singleton(trackingConnectorInfo), /** colorIfPossible **/ false, /** enforceTextColor **/ true); if (dataByLogo.isVisible()) { regattaAndRaceTimeInformationHeader.addStyleName("RegattaAndRaceTime-Header_with_databy"); } From 66b8cc50fc19551a66a87aa055020918ee63be2b Mon Sep 17 00:00:00 2001 From: Dennis Aulenbacher Date: Wed, 18 Dec 2019 13:17:55 +0100 Subject: [PATCH 34/44] styling fix. DataByLogo color variations should now display correctly --- .../gwt/home/desktop/partials/eventheader/EventHeader.java | 2 +- .../gwt/home/mobile/partials/eventheader/EventHeader.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.java index 4cc5c62cbda..12f94026c00 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.java @@ -151,7 +151,7 @@ public class EventHeader extends Composite { } hide(competitors, races, courseAreaUi, eventCategory); } - dataByLogo.setUp(event.getTrackingConnectorInfos(), /** colorIfPossible **/ false, /** enforceTextColor **/ true); + dataByLogo.setUp(event.getTrackingConnectorInfos(), /** colorIfPossible **/ true, /** enforceTextColor **/ false); initTitleAndSelection(nameToShow); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/eventheader/EventHeader.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/eventheader/EventHeader.java index a1fe94c2fb7..d08bf84ce83 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/eventheader/EventHeader.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/eventheader/EventHeader.java @@ -51,7 +51,7 @@ public class EventHeader extends Composite { if (logoNavigation != null) { logoNavigation.configureAnchorElement(eventLogoUi); } - dataByLogo.setUp(event.getTrackingConnectorInfos(), /** colorIfPossible **/ false, /** enforceTextColor **/ true); + dataByLogo.setUp(event.getTrackingConnectorInfos(), /** colorIfPossible **/ true, /** enforceTextColor **/ true); if (dataByLogo.isVisible()) { this.addStyleName(EventHeaderResources.INSTANCE.css().eventheader_with_logo()); } From 91149e65cd92265f130f10dcc643874f399f2653 Mon Sep 17 00:00:00 2001 From: Dennis Aulenbacher Date: Fri, 20 Dec 2019 17:09:47 +0100 Subject: [PATCH 35/44] implemented enum type TrackingConnectorType for TrackingConnectorInfo --- .../tracking/TrackingConnectorType.java | 18 +++++++++++++++ .../impl/RaceLogRaceTracker.java | 4 ++-- .../tracking/TrackingConnectorInfo.java | 6 +++-- .../impl/TrackingConnectorInfoImpl.java | 22 +++++++++---------- .../impl/SwissTimingRaceTrackerImpl.java | 4 ++-- .../SwissTimingReplayToDomainAdapter.java | 4 ++-- .../impl/DomainFactoryImpl.java | 4 ++-- .../impl/RaceCourseReceiver.java | 3 ++- .../ui/shared/TrackingConnectorInfoDTO.java | 19 ++++++++-------- .../gwt/ui/shared/databylogo/DataByLogo.java | 21 +++++------------- ...TrackingConnectorInfoJsonDeserializer.java | 7 ++++-- .../TrackingConnectorInfoJsonSerializer.java | 4 ++-- 12 files changed, 64 insertions(+), 52 deletions(-) create mode 100644 java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/tracking/TrackingConnectorType.java diff --git a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/tracking/TrackingConnectorType.java b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/tracking/TrackingConnectorType.java new file mode 100644 index 00000000000..272e15e15c1 --- /dev/null +++ b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/tracking/TrackingConnectorType.java @@ -0,0 +1,18 @@ +package com.sap.sailing.domain.common.tracking; + +/** + * Identifies the tracking technology used for a TrackedRace. + */ +public enum TrackingConnectorType { + TracTrac("https://www.tractrac.com/"), SwissTiming(null), RaceLog(null); + + private final String defaultUrl; + + private TrackingConnectorType(String defaultUrl) { + this.defaultUrl = defaultUrl; + } + + public String getDefaultUrl() { + return defaultUrl; + } +} diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/RaceLogRaceTracker.java b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/RaceLogRaceTracker.java index 09de5e2513a..abc1f10faef 100755 --- a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/RaceLogRaceTracker.java +++ b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/RaceLogRaceTracker.java @@ -57,6 +57,7 @@ import com.sap.sailing.domain.common.abstractlog.TimePointSpecificationFoundInLo import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus; import com.sap.sailing.domain.common.racelog.tracking.RaceLogTrackingState; import com.sap.sailing.domain.common.racelog.tracking.RaceNotCreatedException; +import com.sap.sailing.domain.common.tracking.TrackingConnectorType; import com.sap.sailing.domain.racelog.RaceLogAndTrackedRaceResolver; import com.sap.sailing.domain.regattalike.IsRegattaLike; import com.sap.sailing.domain.tracking.AbstractRaceTrackerBaseImpl; @@ -87,7 +88,6 @@ import difflib.PatchFailedException; */ public class RaceLogRaceTracker extends AbstractRaceTrackerBaseImpl { - private static final String RACE_LOG = "RaceLog"; private static final String LOGGER_AND_LOGAUTHOR_NAME = RaceLogRaceTracker.class.getName(); private static final Logger logger = Logger.getLogger(LOGGER_AND_LOGAUTHOR_NAME); @@ -315,7 +315,7 @@ public class RaceLogRaceTracker extends AbstractRaceTrackerBaseImpl { params.getDelayToLiveInMillis(), WindTrack.DEFAULT_MILLISECONDS_OVER_WHICH_TO_AVERAGE_WIND, boatClass.getApproximateManeuverDurationInMilliseconds(), null, /*useMarkPassingCalculator*/ true, raceLogResolver, /* Not needed because the RaceTracker is not active on a replica */ Optional.empty(), - new TrackingConnectorInfoImpl(RACE_LOG, /* webUrl */ null)); + new TrackingConnectorInfoImpl(TrackingConnectorType.RaceLog, /* webUrl */ null)); notifyRaceCreationListeners(); logger.info(String.format("Started tracking race-log race (%s)", raceLog)); // this wakes up all waiting race handles diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/tracking/TrackingConnectorInfo.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/tracking/TrackingConnectorInfo.java index 0772b5e8765..936bfa77c91 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/tracking/TrackingConnectorInfo.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/tracking/TrackingConnectorInfo.java @@ -3,6 +3,8 @@ package com.sap.sailing.domain.tracking; import java.io.Serializable; import java.net.URL; +import com.sap.sailing.domain.common.tracking.TrackingConnectorType; + /** * Identifies the tracking connector that was used to create a TrackedRace. * Further the Connector can provide a webUrl, that leads to an event web page. @@ -10,9 +12,9 @@ import java.net.URL; public interface TrackingConnectorInfo extends Serializable { /** - * gets a String representation of the Tracking-Service used to Track the Race + * gets the {@link TrackingConnectorType} associated with the tracking technology used for the Race */ - String getTrackedBy(); + TrackingConnectorType getTrackingConnectorType(); /** * gets a {@link URL} representation of the web-URL associated with the Event; diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/tracking/impl/TrackingConnectorInfoImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/tracking/impl/TrackingConnectorInfoImpl.java index a96b7c77521..65a8a27434c 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/tracking/impl/TrackingConnectorInfoImpl.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/tracking/impl/TrackingConnectorInfoImpl.java @@ -2,22 +2,22 @@ package com.sap.sailing.domain.tracking.impl; import java.net.URL; +import com.sap.sailing.domain.common.tracking.TrackingConnectorType; import com.sap.sailing.domain.tracking.TrackingConnectorInfo; public class TrackingConnectorInfoImpl implements TrackingConnectorInfo { - private static final long serialVersionUID = -1681930521305924294L; - - private final String trackedBy; + private static final long serialVersionUID = 7970268841592389145L; + private final TrackingConnectorType trackingConnectorType; private final URL webUrl; - public TrackingConnectorInfoImpl(String trackedBy, URL webUrl) { + public TrackingConnectorInfoImpl(TrackingConnectorType trackingConnectorType, URL webUrl) { super(); - this.trackedBy = trackedBy; + this.trackingConnectorType = trackingConnectorType; this.webUrl = webUrl; } - public String getTrackedBy() { - return trackedBy; + public TrackingConnectorType getTrackingConnectorType() { + return trackingConnectorType; } public URL getWebUrl() { @@ -28,7 +28,7 @@ public class TrackingConnectorInfoImpl implements TrackingConnectorInfo { public int hashCode() { final int prime = 31; int result = 1; - result = prime * result + ((trackedBy == null) ? 0 : trackedBy.hashCode()); + result = prime * result + ((trackingConnectorType == null) ? 0 : trackingConnectorType.hashCode()); result = prime * result + ((webUrl == null) ? 0 : webUrl.hashCode()); return result; } @@ -42,10 +42,10 @@ public class TrackingConnectorInfoImpl implements TrackingConnectorInfo { if (getClass() != obj.getClass()) return false; TrackingConnectorInfoImpl other = (TrackingConnectorInfoImpl) obj; - if (trackedBy == null) { - if (other.trackedBy != null) + if (trackingConnectorType == null) { + if (other.trackingConnectorType != null) return false; - } else if (!trackedBy.equals(other.trackedBy)) + } else if (!trackingConnectorType.equals(other.trackingConnectorType)) return false; if (webUrl == null) { if (other.webUrl != null) diff --git a/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/SwissTimingRaceTrackerImpl.java b/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/SwissTimingRaceTrackerImpl.java index dce8765a231..d1cbad97a41 100644 --- a/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/SwissTimingRaceTrackerImpl.java +++ b/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/SwissTimingRaceTrackerImpl.java @@ -35,6 +35,7 @@ import com.sap.sailing.domain.common.impl.KnotSpeedWithBearingImpl; import com.sap.sailing.domain.common.impl.WindImpl; import com.sap.sailing.domain.common.impl.WindSourceWithAdditionalID; import com.sap.sailing.domain.common.tracking.GPSFixMoving; +import com.sap.sailing.domain.common.tracking.TrackingConnectorType; import com.sap.sailing.domain.racelog.RaceLogAndTrackedRaceResolver; import com.sap.sailing.domain.racelog.RaceLogStore; import com.sap.sailing.domain.regattalog.RegattaLogStore; @@ -77,7 +78,6 @@ import difflib.PatchFailedException; public class SwissTimingRaceTrackerImpl extends AbstractRaceTrackerImpl implements SwissTimingRaceTracker, SailMasterListener, TrackingDataLoader { - private static final String SWISS_TIMING_IDENTIFIER = "SwissTiming"; private static final Logger logger = Logger.getLogger(SwissTimingRaceTrackerImpl.class.getName()); @@ -497,7 +497,7 @@ public class SwissTimingRaceTrackerImpl extends AbstractRaceTrackerImpl } }, useInternalMarkPassingAlgorithm, raceLogResolver, /* Not needed because the RaceTracker is not active on a replica */ Optional.empty(), - new TrackingConnectorInfoImpl(SWISS_TIMING_IDENTIFIER, /*no api connection to query the webUrl*/ null)); + new TrackingConnectorInfoImpl(TrackingConnectorType.SwissTiming, /*no api connection to query the webUrl*/ null)); addUpdateHandlers(); notifyRaceCreationListeners(); logger.info("Created SwissTiming RaceDefinition and TrackedRace for "+race.getName()); diff --git a/java/com.sap.sailing.domain.swisstimingreplayadapter/src/com/sap/sailing/domain/swisstimingreplayadapter/impl/SwissTimingReplayToDomainAdapter.java b/java/com.sap.sailing.domain.swisstimingreplayadapter/src/com/sap/sailing/domain/swisstimingreplayadapter/impl/SwissTimingReplayToDomainAdapter.java index 300afe92013..b2cd3e7dcf6 100755 --- a/java/com.sap.sailing.domain.swisstimingreplayadapter/src/com/sap/sailing/domain/swisstimingreplayadapter/impl/SwissTimingReplayToDomainAdapter.java +++ b/java/com.sap.sailing.domain.swisstimingreplayadapter/src/com/sap/sailing/domain/swisstimingreplayadapter/impl/SwissTimingReplayToDomainAdapter.java @@ -36,6 +36,7 @@ import com.sap.sailing.domain.common.impl.KnotSpeedWithBearingImpl; import com.sap.sailing.domain.common.impl.WindImpl; import com.sap.sailing.domain.common.impl.WindSourceWithAdditionalID; import com.sap.sailing.domain.common.tracking.GPSFixMoving; +import com.sap.sailing.domain.common.tracking.TrackingConnectorType; import com.sap.sailing.domain.common.tracking.impl.GPSFixMovingImpl; import com.sap.sailing.domain.racelog.RaceLogAndTrackedRaceResolver; import com.sap.sailing.domain.racelog.RaceLogStore; @@ -80,7 +81,6 @@ import difflib.PatchFailedException; * */ public class SwissTimingReplayToDomainAdapter extends SwissTimingReplayAdapter implements TrackingDataLoader { - private static final String SWISS_TIMING_IDENTIFIER = "SwissTiming"; private static final int THRESHOLD_FOR_EARLIEST_MARK_PASSING_BEFORE_START_IN_MILLIS = 30000; @@ -415,7 +415,7 @@ public class SwissTimingReplayToDomainAdapter extends SwissTimingReplayAdapter i /* time over which to average speed: */ race.getBoatClass().getApproximateManeuverDurationInMilliseconds(), /* raceDefinitionSetToUpdate */ null, useInternalMarkPassingAlgorithm, raceLogResolver, /* Not needed because the RaceTracker is not active on a replica */ Optional.empty(), - new TrackingConnectorInfoImpl(SWISS_TIMING_IDENTIFIER, /*no api connection to query the webUrl*/ null)); + new TrackingConnectorInfoImpl(TrackingConnectorType.SwissTiming, /*no api connection to query the webUrl*/ null)); trackedRace.onStatusChanged(this, new TrackedRaceStatusImpl(TrackedRaceStatusEnum.LOADING, 0)); TimePoint bestStartTimeKnownSoFar = bestStartTimePerRaceID.get(currentRaceID); if (bestStartTimeKnownSoFar != null) { 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 51b96975981..dfc76393196 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 @@ -55,6 +55,7 @@ import com.sap.sailing.domain.common.Position; import com.sap.sailing.domain.common.ScoringSchemeType; import com.sap.sailing.domain.common.impl.DegreePosition; import com.sap.sailing.domain.common.tracking.GPSFixMoving; +import com.sap.sailing.domain.common.tracking.TrackingConnectorType; import com.sap.sailing.domain.common.tracking.impl.GPSFixMovingImpl; import com.sap.sailing.domain.leaderboard.Leaderboard; import com.sap.sailing.domain.leaderboard.LeaderboardGroup; @@ -118,7 +119,6 @@ import com.tractrac.subscription.lib.api.SubscriberInitializationException; import difflib.PatchFailedException; public class DomainFactoryImpl implements DomainFactory { - public static final String TRAC_TRAC_IDENTIFIER = "TracTrac"; private static final Logger logger = Logger.getLogger(DomainFactoryImpl.class.getName()); @@ -645,7 +645,7 @@ public class DomainFactoryImpl implements DomainFactory { trackedRegatta.getRegatta().addRace(raceDefinition); TrackingConnectorInfo trackingConnectorInfo = null; if (tractracRace != null) { - trackingConnectorInfo = new TrackingConnectorInfoImpl(TRAC_TRAC_IDENTIFIER, tractracRace.getEvent().getWebURL()); + trackingConnectorInfo = new TrackingConnectorInfoImpl(TrackingConnectorType.TracTrac, tractracRace.getEvent().getWebURL()); } trackedRace = createTrackedRace(trackedRegatta, raceDefinition, sidelines, windStore, delayToLiveInMillis, millisecondsOverWhichToAverageWind, raceDefinitionSetToUpdate, ignoreTracTracMarkPassings, diff --git a/java/com.sap.sailing.domain.tractracadapter/src/com/sap/sailing/domain/tractracadapter/impl/RaceCourseReceiver.java b/java/com.sap.sailing.domain.tractracadapter/src/com/sap/sailing/domain/tractracadapter/impl/RaceCourseReceiver.java index b98a2a56da6..8f833a0bd6f 100755 --- a/java/com.sap.sailing.domain.tractracadapter/src/com/sap/sailing/domain/tractracadapter/impl/RaceCourseReceiver.java +++ b/java/com.sap.sailing.domain.tractracadapter/src/com/sap/sailing/domain/tractracadapter/impl/RaceCourseReceiver.java @@ -20,6 +20,7 @@ import com.sap.sailing.domain.base.RaceDefinition; import com.sap.sailing.domain.base.Regatta; import com.sap.sailing.domain.base.Sideline; import com.sap.sailing.domain.common.PassingInstruction; +import com.sap.sailing.domain.common.tracking.TrackingConnectorType; import com.sap.sailing.domain.leaderboard.LeaderboardGroupResolver; import com.sap.sailing.domain.racelog.RaceLogAndTrackedRaceResolver; import com.sap.sailing.domain.tracking.DynamicRaceDefinitionSet; @@ -270,7 +271,7 @@ public class RaceCourseReceiver extends AbstractReceiverWithQueue { @@ -47,7 +46,7 @@ public class DataByLogo extends Widget { if (trackingConnectorInfos != null && !trackingConnectorInfos.isEmpty()) { for (TrackingConnectorInfoDTO trackingConnectorInfo : trackingConnectorInfos) { // This logic currently only supports TracTrac as ConnectorInfo - if (TRAC_TRAC.equals(trackingConnectorInfo.getTrackedBy())) { + if (trackingConnectorInfo.getTrackingConnectorType() == TrackingConnectorType.TracTrac) { potentialConnectorInfo = trackingConnectorInfo; String webUrl = trackingConnectorInfo.getWebUrl(); if (webUrl != null && !webUrl.isEmpty()) { @@ -61,7 +60,7 @@ public class DataByLogo extends Widget { private void setUpForConnectorType(boolean colorIfPossible, boolean enforceTextColor, TrackingConnectorInfoDTO trackingConnectorInfo) { - if (TRAC_TRAC.equals(trackingConnectorInfo.getTrackedBy())) { + if (trackingConnectorInfo.getTrackingConnectorType() == TrackingConnectorType.TracTrac) { setUpTracTracLogo(colorIfPossible, enforceTextColor); } setUrl(trackingConnectorInfo); @@ -80,18 +79,8 @@ public class DataByLogo extends Widget { private void setUrl(TrackingConnectorInfoDTO trackingConnectorInfo) { String webUrl = trackingConnectorInfo.getWebUrl(); if (webUrl == null || "".equals(trackingConnectorInfo.getWebUrl())) { - dataByContainer.setHref(getConnectorDefaultUrl(trackingConnectorInfo.getTrackedBy())); - } else { - dataByContainer.setHref(webUrl); - } - } - - private String getConnectorDefaultUrl(String trackedBy) { - switch (trackedBy) { - case TRAC_TRAC: - return TRAC_TRAC_DEFAULT_URL; - default: - return null; + webUrl = trackingConnectorInfo.getTrackingConnectorType().getDefaultUrl(); } + dataByContainer.setHref(webUrl); } } diff --git a/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/deserialization/impl/TrackingConnectorInfoJsonDeserializer.java b/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/deserialization/impl/TrackingConnectorInfoJsonDeserializer.java index 8569a45be38..ed2de5fe809 100644 --- a/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/deserialization/impl/TrackingConnectorInfoJsonDeserializer.java +++ b/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/deserialization/impl/TrackingConnectorInfoJsonDeserializer.java @@ -7,6 +7,7 @@ import java.util.logging.Logger; import org.json.simple.JSONObject; +import com.sap.sailing.domain.common.tracking.TrackingConnectorType; import com.sap.sailing.domain.tracking.TrackingConnectorInfo; import com.sap.sailing.domain.tracking.impl.TrackingConnectorInfoImpl; import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException; @@ -17,7 +18,8 @@ public class TrackingConnectorInfoJsonDeserializer implements JsonDeserializer { - public static final String FIELD_TRACKED_BY = "trackedBy"; + public static final String FIELD_TRACKING_CONNECTOR_TYPE = "trackingConnectorType"; public static final String FIELD_WEB_URL = "webUrl"; @Override public JSONObject serialize(TrackingConnectorInfo trackingConnectorInfo) { JSONObject result = new JSONObject(); URL webUrl = trackingConnectorInfo.getWebUrl(); - result.put(FIELD_TRACKED_BY, trackingConnectorInfo.getTrackedBy()); + result.put(FIELD_TRACKING_CONNECTOR_TYPE, trackingConnectorInfo.getTrackingConnectorType().name()); if (webUrl != null) { result.put(FIELD_WEB_URL, webUrl.toString()); } From 503c42556d530c8b73e11e680d7e71ea36346bb7 Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Mon, 6 Jan 2020 16:11:47 +0100 Subject: [PATCH 36/44] added optional trackedRaceName parameter to starttracking method of LeaderboardsResource --- .../sailing/domain/common/racelog/RaceLogServletConstants.java | 1 + .../sailing/server/gateway/jaxrs/api/LeaderboardsResource.java | 3 ++- .../webservices/api/v1/leaderboardRaceStartTracking.html | 2 ++ 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/racelog/RaceLogServletConstants.java b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/racelog/RaceLogServletConstants.java index 7c0541fd099..8e3018e2e59 100755 --- a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/racelog/RaceLogServletConstants.java +++ b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/racelog/RaceLogServletConstants.java @@ -14,4 +14,5 @@ public interface RaceLogServletConstants { static final String PARAMS_COURSE_AREA_FILTER = "courseArea"; static final String PARAMS_TRACK_WIND = "trackWind"; static final String PARAMS_CORRECT_WIND_DIRECTION_BY_MAGNETIC_DECLINATION = "correctWindDirectionByMagneticDeclination"; + static final String PARAMS_TRACKED_RACE_NAME = "trackedRaceName"; } diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/LeaderboardsResource.java b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/LeaderboardsResource.java index 21527af2258..2301827fc39 100755 --- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/LeaderboardsResource.java +++ b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/LeaderboardsResource.java @@ -632,6 +632,7 @@ public class LeaderboardsResource extends AbstractLeaderboardsResource { @QueryParam(RaceLogServletConstants.PARAMS_RACE_FLEET_NAME) String fleetName, @QueryParam(RaceLogServletConstants.PARAMS_TRACK_WIND) Boolean trackWind, @QueryParam(RaceLogServletConstants.PARAMS_CORRECT_WIND_DIRECTION_BY_MAGNETIC_DECLINATION) Boolean correctWindDirectionByMagneticDeclination, + @QueryParam(RaceLogServletConstants.PARAMS_TRACKED_RACE_NAME) String optionalTrackedRaceName, @QueryParam("secret") String secret) throws NotDenotedForRaceLogTrackingException, Exception { final LeaderboardAndRaceColumnAndFleetAndResponse leaderboardAndRaceColumnAndFleetAndResponse = getLeaderboardAndRaceColumnAndFleet( @@ -649,7 +650,7 @@ public class LeaderboardsResource extends AbstractLeaderboardsResource { jsonResult.put("addeddenotation", adapter.denoteRaceForRaceLogTracking(getService(), leaderboardAndRaceColumnAndFleetAndResponse.getLeaderboard(), leaderboardAndRaceColumnAndFleetAndResponse.getRaceColumn(), - leaderboardAndRaceColumnAndFleetAndResponse.getFleet(), /* use default race name */ null)); + leaderboardAndRaceColumnAndFleetAndResponse.getFleet(), optionalTrackedRaceName)); final RaceHandle raceHandle = adapter.startTracking(getService(), leaderboardAndRaceColumnAndFleetAndResponse.getLeaderboard(), leaderboardAndRaceColumnAndFleetAndResponse.getRaceColumn(), leaderboardAndRaceColumnAndFleetAndResponse.getFleet(), diff --git a/java/com.sap.sailing.server.gateway/webservices/api/v1/leaderboardRaceStartTracking.html b/java/com.sap.sailing.server.gateway/webservices/api/v1/leaderboardRaceStartTracking.html index e7545a72d8d..315d537ebeb 100755 --- a/java/com.sap.sailing.server.gateway/webservices/api/v1/leaderboardRaceStartTracking.html +++ b/java/com.sap.sailing.server.gateway/webservices/api/v1/leaderboardRaceStartTracking.html @@ -36,6 +36,8 @@ Wind tracking can be configured using optional request parameters.

correctWindDirectionByMagneticDeclination a boolean value, defaulting to true; if trackWind is true, this parameter controls whether the wind directions received are to be corrected by the magnetic declination
+
trackedRaceName can be used to specify a non-default name for the tracked race / RaceDefinition; if not + provided, a default name consisting of race column and fleet name will be constructed instead.
From 615dc57fb40a740f788234ee0400fbcb5f8030d7 Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Mon, 6 Jan 2020 16:11:47 +0100 Subject: [PATCH 37/44] added optional trackedRaceName parameter to starttracking method of LeaderboardsResource From 862c0bf6672e9510718dd479f00b563fba8c555d Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Tue, 7 Jan 2020 00:45:53 +0100 Subject: [PATCH 38/44] bug5170: for now @Ignore'ing four failing ORC tests; they were based on online certificates which expired at the end of 2019. See https://bugzilla.sapsailing.com/bugzilla/show_bug.cgi?id=5170 --- .../sap/sailing/domain/orc/TestORCCertificateImporterJSON.java | 1 + .../sap/sailing/domain/orc/TestORCCertificateImporterRMS.java | 1 + .../src/com/sap/sailing/domain/orc/TestORCPerformanceCurve.java | 1 + .../sailing/domain/orc/TestORCPublicCertificateDatabase.java | 2 +- 4 files changed, 4 insertions(+), 1 deletion(-) diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/orc/TestORCCertificateImporterJSON.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/orc/TestORCCertificateImporterJSON.java index aa5d0347995..7d01b23a3c5 100644 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/orc/TestORCCertificateImporterJSON.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/orc/TestORCCertificateImporterJSON.java @@ -26,6 +26,7 @@ public class TestORCCertificateImporterJSON { assertNotNull(milan); } + @Ignore("Certificate used for testing no longer valid after 2019") @Test public void testSimpleOnlineJSONFileRead() throws IOException, ParseException { ORCCertificatesCollection importer = ORCCertificatesImporter.INSTANCE.read(new URL("https://data.orc.org/public/WPub.dll?action=DownRMS&CountryId=GER&ext=json").openStream()); diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/orc/TestORCCertificateImporterRMS.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/orc/TestORCCertificateImporterRMS.java index 1fc517f0d94..1aed57dc397 100755 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/orc/TestORCCertificateImporterRMS.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/orc/TestORCCertificateImporterRMS.java @@ -26,6 +26,7 @@ public class TestORCCertificateImporterRMS { assertNotNull(milan); } + @Ignore("Certificate used for testing no longer valid after 2019") @Test public void testSimpleOnlineRMSFileRead() throws IOException, ParseException { ORCCertificatesCollection certificates = ORCCertificatesImporter.INSTANCE.read(new URL("https://data.orc.org/public/WPub.dll?action=DownRMS&CountryId=GER&ext=rms").openStream()); diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/orc/TestORCPerformanceCurve.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/orc/TestORCPerformanceCurve.java index 8dbd1aa57ca..c064ab33d56 100644 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/orc/TestORCPerformanceCurve.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/orc/TestORCPerformanceCurve.java @@ -237,6 +237,7 @@ public class TestORCPerformanceCurve { /** * Tests to make sure, that the structure of the certificate files didn't change and performance curves can be built */ + @Ignore("Certificate used for testing no longer valid after 2019") @Test public void testOnlineImport() throws FunctionEvaluationException { assertFalse(Util.isEmpty(importerOnline.getCertificateIds())); diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/orc/TestORCPublicCertificateDatabase.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/orc/TestORCPublicCertificateDatabase.java index fb9e6646c22..234dae5d3da 100755 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/orc/TestORCPublicCertificateDatabase.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/orc/TestORCPublicCertificateDatabase.java @@ -85,7 +85,7 @@ public class TestORCPublicCertificateDatabase { assertEquals(handle.getSailNumber(), result.getSailNumber()); } - // TODO this test will probably break 2020 when 2019 certificates will no longer be returned as valid... + @Ignore("Certificate used for testing no longer valid after 2019") @Test public void testParallelFuzzySearch() throws InterruptedException, ExecutionException { final Future> soulmateCertificatesFuture = db.search("Soulmate", "DEN13", new BoatClassImpl("ORC", BoatClassMasterdata.ORC)); From 71ebe7546aa52a6c3f21bd5456fee743b6c8e7fd Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Tue, 7 Jan 2020 10:45:26 +0100 Subject: [PATCH 39/44] added missing imports for @Ignore for ORC tests --- .../sap/sailing/domain/orc/TestORCCertificateImporterJSON.java | 1 + .../sap/sailing/domain/orc/TestORCCertificateImporterRMS.java | 1 + .../src/com/sap/sailing/domain/orc/TestORCPerformanceCurve.java | 1 + .../sap/sailing/domain/orc/TestORCPublicCertificateDatabase.java | 1 + 4 files changed, 4 insertions(+) diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/orc/TestORCCertificateImporterJSON.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/orc/TestORCCertificateImporterJSON.java index 7d01b23a3c5..59dfc372fee 100644 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/orc/TestORCCertificateImporterJSON.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/orc/TestORCCertificateImporterJSON.java @@ -9,6 +9,7 @@ import java.io.IOException; import java.net.URL; import org.json.simple.parser.ParseException; +import org.junit.Ignore; import org.junit.Test; import com.sap.sailing.domain.common.orc.ORCCertificate; diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/orc/TestORCCertificateImporterRMS.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/orc/TestORCCertificateImporterRMS.java index 1aed57dc397..04fb90f60d6 100755 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/orc/TestORCCertificateImporterRMS.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/orc/TestORCCertificateImporterRMS.java @@ -10,6 +10,7 @@ import java.net.URL; import java.util.Collection; import org.json.simple.parser.ParseException; +import org.junit.Ignore; import org.junit.Test; import com.sap.sailing.domain.common.orc.ORCCertificate; diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/orc/TestORCPerformanceCurve.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/orc/TestORCPerformanceCurve.java index c064ab33d56..adb7bfc2944 100644 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/orc/TestORCPerformanceCurve.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/orc/TestORCPerformanceCurve.java @@ -17,6 +17,7 @@ import org.apache.commons.math.MaxIterationsExceededException; import org.json.simple.parser.ParseException; import org.junit.Assert; import org.junit.BeforeClass; +import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ErrorCollector; diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/orc/TestORCPublicCertificateDatabase.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/orc/TestORCPublicCertificateDatabase.java index 234dae5d3da..03180de4dfa 100755 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/orc/TestORCPublicCertificateDatabase.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/orc/TestORCPublicCertificateDatabase.java @@ -13,6 +13,7 @@ import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import com.sap.sailing.domain.base.impl.BoatClassImpl; From ece66bd731c9d0de3184cdf0c613b7ee62bbc73e Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Tue, 7 Jan 2020 10:48:57 +0100 Subject: [PATCH 40/44] adjusted copyright footer to 2020 --- .../com/sap/sailing/gwt/ui/client/StringMessages.properties | 2 +- .../com/sap/sailing/gwt/ui/client/StringMessages_de.properties | 2 +- .../com/sap/sailing/gwt/ui/client/StringMessages_es.properties | 2 +- .../com/sap/sailing/gwt/ui/client/StringMessages_fr.properties | 2 +- .../com/sap/sailing/gwt/ui/client/StringMessages_it.properties | 2 +- .../com/sap/sailing/gwt/ui/client/StringMessages_ja.properties | 2 +- .../com/sap/sailing/gwt/ui/client/StringMessages_pt.properties | 2 +- .../com/sap/sailing/gwt/ui/client/StringMessages_ru.properties | 2 +- .../com/sap/sailing/gwt/ui/client/StringMessages_zh.properties | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties index 2d0caa25f3d..c64dfd857a2 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties @@ -1712,7 +1712,7 @@ seriesHeaderUpcoming=Upcoming eventRegattaLeaderboardLastScoreUpdate=Last Score Update eventRegattaRaceNotTracked=Not Tracked footerJobs=Jobs -footerCopyright=\u00A9 2011-2019 SAP Sailing Analytics +footerCopyright=\u00A9 2011-2020 SAP Sailing Analytics footerLanguage=SAP Sailing in footerLegal=Legal Disclosure footerPrivacy=Privacy diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_de.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_de.properties index 5c8030a1cf4..3fb6a3cff0f 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_de.properties +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_de.properties @@ -1698,7 +1698,7 @@ seriesHeaderUpcoming=Demnächst eventRegattaLeaderboardLastScoreUpdate=Letztes Ergebnis-Update eventRegattaRaceNotTracked=Nicht getrackt footerJobs=Jobs -footerCopyright=\u00A9 2011-2019 SAP Sailing Analytics +footerCopyright=\u00A9 2011-2020 SAP Sailing Analytics footerLanguage=SAP Sailing in footerLegal=Impressum footerPrivacy=Datenschutz diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_es.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_es.properties index dee03de7c74..2a2e0bdf3ec 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_es.properties +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_es.properties @@ -1706,7 +1706,7 @@ seriesHeaderUpcoming=Próximo eventRegattaLeaderboardLastScoreUpdate=Última actualización de puntuación eventRegattaRaceNotTracked=No rastreado footerJobs=Jobs -footerCopyright=© 2011-2019 SAP Sailing Analytics +footerCopyright=© 2011-2020 SAP Sailing Analytics footerLanguage=SAP Sailing en footerLegal=Publicidad legal footerPrivacy=Privacidad diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_fr.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_fr.properties index f84235d6719..1f01651abc7 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_fr.properties +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_fr.properties @@ -1706,7 +1706,7 @@ seriesHeaderUpcoming=à venir eventRegattaLeaderboardLastScoreUpdate=Dernière mise à jour des scores eventRegattaRaceNotTracked=Non suivi(e) footerJobs=Carrières -footerCopyright=© 2011-2019 SAP Sailing Analytics +footerCopyright=© 2011-2020 SAP Sailing Analytics footerLanguage=SAP Sailing in footerLegal=Mentions légales footerPrivacy=Confidentialité des données diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_it.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_it.properties index 4ffab9e5576..1143ccce6ee 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_it.properties +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_it.properties @@ -1706,7 +1706,7 @@ seriesHeaderUpcoming=Prossimamente eventRegattaLeaderboardLastScoreUpdate=Ultimo aggiornamento punteggio eventRegattaRaceNotTracked=Tracciamento non eseguito footerJobs=Jobs -footerCopyright=© 2011-2019 SAP Sailing Analytics +footerCopyright=© 2011-2020 SAP Sailing Analytics footerLanguage=SAP Sailing in footerLegal=Informativa legale footerPrivacy=Privacy diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_ja.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_ja.properties index a9cf6c6a4b2..088630b2b50 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_ja.properties +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_ja.properties @@ -1706,7 +1706,7 @@ seriesHeaderUpcoming=予定 eventRegattaLeaderboardLastScoreUpdate=前回スコア更新 eventRegattaRaceNotTracked=未追跡 footerJobs=採用 -footerCopyright=© 2011-2019 SAP Sailing Analytics +footerCopyright=© 2011-2020 SAP Sailing Analytics footerLanguage=SAP Sailing - footerLegal=利用規約 footerPrivacy=個人情報保護 diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_pt.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_pt.properties index 8316ade9491..f8b8795a933 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_pt.properties +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_pt.properties @@ -1706,7 +1706,7 @@ seriesHeaderUpcoming=Próximo eventRegattaLeaderboardLastScoreUpdate=Atualização da última pontuação eventRegattaRaceNotTracked=Não rastreado footerJobs=Tarefas -footerCopyright=© 2011-2019 SAP Sailing Analytics +footerCopyright=© 2011-2020 SAP Sailing Analytics footerLanguage=SAP Sailing em footerLegal=Divulgação de informação legal footerPrivacy=Privacidade diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_ru.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_ru.properties index 077d86e4ee1..36cdf98434e 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_ru.properties +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_ru.properties @@ -1706,7 +1706,7 @@ seriesHeaderUpcoming=Скоро eventRegattaLeaderboardLastScoreUpdate=Последнее обновление оценок eventRegattaRaceNotTracked=Не отслеживается footerJobs=Работа -footerCopyright=© SAP Sailing Analytics, 2011-2019. +footerCopyright=© SAP Sailing Analytics, 2011-2020. footerLanguage=Язык SAP Sailing footerLegal=Раскрытие юридической информации footerPrivacy=Конфиденциальность diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_zh.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_zh.properties index f9e66c78399..f4d634362a4 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_zh.properties +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_zh.properties @@ -1706,7 +1706,7 @@ seriesHeaderUpcoming=即将到来 eventRegattaLeaderboardLastScoreUpdate=上次得分更新 eventRegattaRaceNotTracked=未跟踪 footerJobs=招贤纳士 -footerCopyright=版权所有 © 2011-2019 SAP Sailing Analytics +footerCopyright=版权所有 © 2011-2020 SAP Sailing Analytics footerLanguage=SAP Sailing 语言 footerLegal=法律声明 footerPrivacy=隐私 From aacc30ef55fa97bc3875ea4c158e3c88522d2953 Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Tue, 7 Jan 2020 11:01:59 +0100 Subject: [PATCH 41/44] bug5171: avoid concurrent modification exception when deleting user --- .../src/com/sap/sse/security/impl/SecurityServiceImpl.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) 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 9b48196b86f..4c98e8a762b 100644 --- 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 @@ -1203,7 +1203,6 @@ public class SecurityServiceImpl implements ReplicableSecurityService, ClearStat // remove all permissions the user has accessControlStore.removeAllOwnershipsFor(userToDelete); store.removeAllQualifiedRolesForUser(userToDelete); - final String defaultTenantNameForUsername = getDefaultTenantNameForUsername(username); final UserGroup defaultTenantUserGroup = getUserGroupByName(defaultTenantNameForUsername); if (defaultTenantUserGroup != null) { @@ -1218,7 +1217,10 @@ public class SecurityServiceImpl implements ReplicableSecurityService, ClearStat } } // also remove from all usergroups - for (UserGroup userGroup : userToDelete.getUserGroups()) { + final Iterable userGroups = userToDelete.getUserGroups(); + final Collection userGroupsToLoopOver = new ArrayList<>(); + Util.addAll(userGroups, userGroupsToLoopOver); // avoid concurrent modification exception + for (UserGroup userGroup : userGroupsToLoopOver) { if (userGroup != defaultTenantUserGroup) { // the defaultTenantUserGroup has already been deleted above internalRemoveUserFromUserGroup(userGroup.getId(), userToDelete.getName()); } From 86feb399c7eb94d0dc072b5e80dada858a6a7c37 Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Tue, 7 Jan 2020 11:06:35 +0100 Subject: [PATCH 42/44] fixed testDeleteUserWithPreference() test --- .../src/com/sap/sse/security/test/UserStoreTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/com.sap.sse.security.test/src/com/sap/sse/security/test/UserStoreTest.java b/java/com.sap.sse.security.test/src/com/sap/sse/security/test/UserStoreTest.java index f3c34307c38..65dd769fa3a 100644 --- a/java/com.sap.sse.security.test/src/com/sap/sse/security/test/UserStoreTest.java +++ b/java/com.sap.sse.security.test/src/com/sap/sse/security/test/UserStoreTest.java @@ -52,7 +52,7 @@ public class UserStoreTest { */ @Test public void testDeleteUserWithPreference() throws UserManagementException { - userStore.unsetPreference(username, prefKey); + userStore.deleteUser(username); assertNull(prefValue, userStore.getPreference(username, prefKey)); } } From d90177c7cd07b32ec510a730f84cca43462e5caf Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Tue, 7 Jan 2020 11:20:08 +0100 Subject: [PATCH 43/44] bug5171: fixing concurrent modification exception; added test that fails before and passes now --- .../com/sap/sse/security/test/LoginTest.java | 27 +++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/java/com.sap.sse.security.test/src/com/sap/sse/security/test/LoginTest.java b/java/com.sap.sse.security.test/src/com/sap/sse/security/test/LoginTest.java index d16f034099c..e6a8b019499 100644 --- a/java/com.sap.sse.security.test/src/com/sap/sse/security/test/LoginTest.java +++ b/java/com.sap.sse.security.test/src/com/sap/sse/security/test/LoginTest.java @@ -1,6 +1,7 @@ package com.sap.sse.security.test; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertSame; @@ -17,6 +18,7 @@ import org.junit.Test; import com.mongodb.MongoException; import com.mongodb.client.MongoDatabase; import com.sap.sse.common.Util; +import com.sap.sse.common.mail.MailException; import com.sap.sse.mongodb.MongoDBConfiguration; import com.sap.sse.mongodb.MongoDBService; import com.sap.sse.security.SecurityService; @@ -30,6 +32,7 @@ import com.sap.sse.security.shared.UserManagementException; import com.sap.sse.security.shared.WildcardPermission; import com.sap.sse.security.shared.impl.Role; import com.sap.sse.security.shared.impl.User; +import com.sap.sse.security.shared.impl.UserGroup; import com.sap.sse.security.shared.impl.UserGroupImpl; import com.sap.sse.security.userstore.mongodb.AccessControlStoreImpl; import com.sap.sse.security.userstore.mongodb.UserStoreImpl; @@ -39,6 +42,7 @@ public class LoginTest { private static final String DEFAULT_TENANT_NAME = "TestDefaultTenant"; private UserStoreImpl userStore; private AccessControlStore accessControlStore; + private SecurityService securityService; @Before public void setUp() throws UnknownHostException, MongoException, UserGroupManagementException, UserManagementException { @@ -55,12 +59,31 @@ public class LoginTest { userStore.ensureDefaultRolesExist(); userStore.ensureDefaultTenantExists(); accessControlStore = new AccessControlStoreImpl(userStore); - Activator.setTestStores(userStore, accessControlStore); Thread.currentThread().setContextClassLoader(getClass().getClassLoader()); // to enable shiro to find classes from com.sap.sse.security - Activator.setSecurityService(new SecurityServiceImpl(userStore, accessControlStore)); + securityService = new SecurityServiceImpl(userStore, accessControlStore); + Activator.setSecurityService(securityService); } + @Test + public void testDeleteUser() throws UserManagementException, MailException, UserGroupManagementException { + final String username = "TheNewUser"; + final String specialUserGroupName1 = "TheSpecialUserGroup1"; + final String specialUserGroupName2 = "TheSpecialUserGroup2"; + final User user = securityService.createSimpleUser(username, "u@a.b", "Humba", "The New User", /* company */ null, /* locale */ null, /* validationBaseURL */ null, /* owning group */ null); + final UserGroup defaultUserGroup = securityService.getUserGroupByName(username+SecurityService.TENANT_SUFFIX); + final UserGroup specialUserGroup1 = securityService.createUserGroup(UUID.randomUUID(), specialUserGroupName1); + final UserGroup specialUserGroup2 = securityService.createUserGroup(UUID.randomUUID(), specialUserGroupName2); + securityService.addUserToUserGroup(specialUserGroup1, user); + securityService.addUserToUserGroup(specialUserGroup2, user); + assertNotNull(defaultUserGroup); + assertTrue(Util.contains(defaultUserGroup.getUsers(), user)); + securityService.deleteUser(username); + assertNull(securityService.getUserByName(username)); + assertFalse(Util.contains(specialUserGroup1.getUsers(), user)); + assertFalse(Util.contains(specialUserGroup2.getUsers(), user)); + } + @Test public void testGetUser() { assertNotNull("Subject should not be null: ", SecurityUtils.getSubject()); From 24c5fad1cb0bbd8e23e83ecbba2373a878d4cf95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim=20Hessenm=C3=BCller?= Date: Fri, 10 Jan 2020 12:17:12 +0100 Subject: [PATCH 44/44] Fixed issue letting TaggingPanel be pushed off screen --- .../ui/raceboard/tagging/TaggingPanel.java | 27 ++++++++++++------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/tagging/TaggingPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/tagging/TaggingPanel.java index 58cd73853ea..66a007faeba 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/tagging/TaggingPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/tagging/TaggingPanel.java @@ -192,7 +192,13 @@ public class TaggingPanel extends ComponentWithoutSettings tagButtons = new ArrayList(); - taggingPanel = new DockLayoutPanel(Style.Unit.PX); + taggingPanel = new DockLayoutPanel(Style.Unit.PX) { + @Override + public void onResize() { + super.onResize(); + taggingPanel.setWidgetSize(footerPanel, calculateFooterPanelHeight()); + } + }; filterbarAndContentPanel = new HeaderPanel(); tagFooterPanel = new TagFooterPanel(this, sailingService, stringMessages, userService); footerPanel = new ScrollPanel(tagFooterPanel); @@ -705,15 +711,7 @@ public class TaggingPanel extends ComponentWithoutSettings Scheduler.get().scheduleFinally(new RepeatingCommand() { @Override public boolean execute() { - // Default size of 2/3 the TaggingPanel - int height = (int) Math.round(taggingPanel.getOffsetHeight() / 3f * 2f); - // Get actual size of the footerPanel which might be 0 if the browser screwed up - final int vScroll = footerPanel.getWidget().getElement().getScrollHeight(); - if (vScroll != 0) { - height = Math.min(height, vScroll); - } - height = Math.max(200, height); - taggingPanel.setWidgetSize(footerPanel, height); + taggingPanel.setWidgetSize(footerPanel, calculateFooterPanelHeight()); taggingPanel.animate(FOOTERPANEL_ANIMATION_PERIOD_MS); return false; } @@ -728,6 +726,15 @@ public class TaggingPanel extends ComponentWithoutSettings } } + private int calculateFooterPanelHeight() { + // Start with footerPanel content height + int height = footerPanel.getWidget().getElement().getOffsetHeight(); + // Limit size if we take up the entire height of the viewing area + // to make sure we don't get pushed out of it at the top making parts of the footerPanel inaccessible + height = Math.min(height, taggingPanel.getOffsetHeight()); + return height; + } + /** * Checks whether current user has permission to modify public tags. *