From 423a21f635804bdb17e117357eb459a288f53732 Mon Sep 17 00:00:00 2001 From: Dennis Aulenbacher Date: Fri, 29 Nov 2019 14:06:27 +0100 Subject: [PATCH 01/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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 80cce2e7bdc2f6406f7c07dce558a12522f97068 Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Fri, 20 Dec 2019 00:16:41 +0100 Subject: [PATCH 35/53] avoid updating start/end date such that they contradict --- .../src/com/sap/sailing/domain/base/impl/EventBaseImpl.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/impl/EventBaseImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/impl/EventBaseImpl.java index d97e3973076..fdde47234e7 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/impl/EventBaseImpl.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/impl/EventBaseImpl.java @@ -132,6 +132,9 @@ public abstract class EventBaseImpl implements EventBase { @Override public void setStartDate(TimePoint startDate) { + if (startDate != null && getEndDate() != null && getEndDate().before(startDate)) { + throw new IllegalArgumentException("Event start date ("+startDate+") for event "+this+" must not be after end date "+getEndDate()); + } this.startDate = startDate; } @@ -142,6 +145,9 @@ public abstract class EventBaseImpl implements EventBase { @Override public void setEndDate(TimePoint endDate) { + if (endDate != null && getStartDate() != null && getStartDate().after(endDate)) { + throw new IllegalArgumentException("Event end date ("+endDate+") for event "+this+" must not be before start date "+getStartDate()); + } this.endDate = endDate; } From 3a348ad179ae96a642075b2ca0254d656eab2afe Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Fri, 20 Dec 2019 00:18:19 +0100 Subject: [PATCH 36/53] added an IllegalStateException in case EventBaseImpl is to be initialized with contradictory start/end date values --- .../src/com/sap/sailing/domain/base/impl/EventBaseImpl.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/impl/EventBaseImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/impl/EventBaseImpl.java index fdde47234e7..0269bbc6186 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/impl/EventBaseImpl.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/impl/EventBaseImpl.java @@ -56,6 +56,9 @@ public abstract class EventBaseImpl implements EventBase { */ protected EventBaseImpl(String name, TimePoint startDate, TimePoint endDate, Venue venue, boolean isPublic, UUID id) { assert venue != null; + if (startDate != null && endDate != null && startDate.after(endDate)) { + throw new IllegalArgumentException("Event "+name+" cannot start after it ends. Start: "+startDate+", end: "+endDate); + } this.id = id; this.name = name; this.startDate = startDate; From 91149e65cd92265f130f10dcc643874f399f2653 Mon Sep 17 00:00:00 2001 From: Dennis Aulenbacher Date: Fri, 20 Dec 2019 17:09:47 +0100 Subject: [PATCH 37/53] 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 38/53] 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 39/53] 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 40/53] 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 41/53] 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 42/53] 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 43/53] 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 44/53] 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 45/53] 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 46/53] 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. * From 210908d0ed15b16efdfe12bc4081a5513b7ae438 Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Sat, 11 Jan 2020 14:11:17 +0100 Subject: [PATCH 47/53] fixed documentation of usergroup REST API --- java/com.sap.sse.security/webservices/api/usergroup.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/java/com.sap.sse.security/webservices/api/usergroup.html b/java/com.sap.sse.security/webservices/api/usergroup.html index 54e9eb342ec..e9e7139dda6 100644 --- a/java/com.sap.sse.security/webservices/api/usergroup.html +++ b/java/com.sap.sse.security/webservices/api/usergroup.html @@ -113,7 +113,7 @@
-Delete a user from a UserGroup +Delete a user from a UserGroup @@ -151,12 +151,12 @@ - +
Request Method:
groupId (Path)
Unique name of the UserGroup to add the role to.
roleId (Path)
Unique ID of the role to add to the UserGroup. -
roleAssociated (JSON Body)
True or false, depending whether the role's permissions are applied regardless of the user performing the access, only requiring the object access to be owned by this group; otherwise, the role's permissions are only granted if the object accessed is owned by this group and the user performing the access belongs to this group. +
forAll (JSON Body)
True or false, depending whether the role's permissions are applied regardless of the user performing the access, only requiring the object access to be owned by this group; otherwise, the role's permissions are only granted if the object accessed is owned by this group and the user performing the access belongs to this group.
Example:curl -X PUT -d '{"roleAssociated": true}' "127.0.0.1:8888/security/api/restsecurity/usergroup/9201d7cb-969e-4975-8cf1-32972bb2c8ba/role/29914406-b0fc-43cd-acc7-62a83931f587"
curl -X PUT -d '{"forAll": true}' "127.0.0.1:8888/security/api/restsecurity/usergroup/9201d7cb-969e-4975-8cf1-32972bb2c8ba/role/29914406-b0fc-43cd-acc7-62a83931f587"

From 637e833497753f357780ab5d09a3f07c65b49761 Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Sat, 11 Jan 2020 14:11:46 +0100 Subject: [PATCH 48/53] improved error messages in UserGroupResource --- .../com/sap/sse/security/impl/Activator.java | 1 - .../security/jaxrs/api/UserGroupResource.java | 17 ++++++++--------- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/java/com.sap.sse.security/src/com/sap/sse/security/impl/Activator.java b/java/com.sap.sse.security/src/com/sap/sse/security/impl/Activator.java index 4c855362064..0025865fb9a 100644 --- a/java/com.sap.sse.security/src/com/sap/sse/security/impl/Activator.java +++ b/java/com.sap.sse.security/src/com/sap/sse/security/impl/Activator.java @@ -140,7 +140,6 @@ public class Activator implements BundleActivator { waitForUserStoreService(bundleContext); } context.registerService(ClearStateTestSupport.class, new ClearStateTestSupport() { - @Override public void clearState() throws Exception { Activator.this.clearState(); diff --git a/java/com.sap.sse.security/src/com/sap/sse/security/jaxrs/api/UserGroupResource.java b/java/com.sap.sse.security/src/com/sap/sse/security/jaxrs/api/UserGroupResource.java index 769a349725b..abfc9c480e8 100644 --- a/java/com.sap.sse.security/src/com/sap/sse/security/jaxrs/api/UserGroupResource.java +++ b/java/com.sap.sse.security/src/com/sap/sse/security/jaxrs/api/UserGroupResource.java @@ -268,19 +268,17 @@ public class UserGroupResource extends AbstractSecurityResource { public Response addRoleToUserGroup(@PathParam(KEY_GROUP_ID) String userGroupId, @PathParam(KEY_ROLE_ID) String roleIdString, String body) { Response response; - try { final UUID groupId = UUID.fromString(userGroupId); - final UserGroup usergroup = getService().getUserGroup(groupId); - final UUID roleId = UUID.fromString(roleIdString); + final UserGroup usergroup = getService().getUserGroup(groupId); if (usergroup == null) { - response = Response.status(Status.BAD_REQUEST).entity("Usergroup with this name does not exist.") - .build(); + response = Response.status(Status.BAD_REQUEST).entity( + String.format("Usergroup with ID %s does not exist.", userGroupId)).build(); } else { final RoleDefinition role = getService().getRoleDefinition(roleId); if (role == null) { - response = Response.status(Status.BAD_REQUEST).entity("Role with this id does not exist.").build(); + response = Response.status(Status.BAD_REQUEST).entity(String.format("Role with ID %s does not exist.", roleId)).build(); } else { if (getService().hasCurrentUserUpdatePermission(usergroup) && getService().hasCurrentUserReadPermission(role)) { @@ -291,15 +289,16 @@ public class UserGroupResource extends AbstractSecurityResource { if (!getService().hasCurrentUserMetaPermissionsOfRoleDefinitionWithQualification(role, new Ownership(null, usergroup))) { response = Response.status(Status.UNAUTHORIZED) - .entity(String.format("Not permitted to add role %s to group", role.getName())) - .build(); + .entity(String.format("Not permitted to add role %s to group %s", + role.getName(), usergroup.getName())).build(); } else { getService().putRoleDefinitionToUserGroup(usergroup, role, roleForAll); response = Response.ok().build(); } } else { response = Response.status(Status.BAD_REQUEST) - .entity("Role was already added to the group.").build(); + .entity(String.format("Role %s was already added to group %s.", role.getName(), + usergroup.getName())).build(); } } else { response = Response.status(Status.UNAUTHORIZED).build(); From b94bd2fb07a91570414ffad345c9a3503a8a7e37 Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Sat, 11 Jan 2020 14:22:30 +0100 Subject: [PATCH 49/53] fixed typo in comment --- .../src/com/sap/sse/security/impl/Activator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/com.sap.sse.security/src/com/sap/sse/security/impl/Activator.java b/java/com.sap.sse.security/src/com/sap/sse/security/impl/Activator.java index 0025865fb9a..29a09428183 100644 --- a/java/com.sap.sse.security/src/com/sap/sse/security/impl/Activator.java +++ b/java/com.sap.sse.security/src/com/sap/sse/security/impl/Activator.java @@ -148,7 +148,7 @@ public class Activator implements BundleActivator { } /** - * This method will clean the userStore and AccessControllStore, and reset the securityService. It will then + * This method will clean the userStore and AccessControlStore, and reset the securityService. It will then * reinitialize them in the same fashion an empty server will do. */ protected void clearState() throws InterruptedException, UserGroupManagementException, UserManagementException { From 110fd63b2ff94b9433530387c89a67f927015105 Mon Sep 17 00:00:00 2001 From: Usman Ali Date: Sun, 12 Jan 2020 00:54:07 +0500 Subject: [PATCH 50/53] setting up date format for new ORC certificate --- .../domain/orc/impl/ORCPublicCertificateDatabaseImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/orc/impl/ORCPublicCertificateDatabaseImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/orc/impl/ORCPublicCertificateDatabaseImpl.java index af8e896ea81..09592c247e7 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/orc/impl/ORCPublicCertificateDatabaseImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/orc/impl/ORCPublicCertificateDatabaseImpl.java @@ -330,7 +330,7 @@ public class ORCPublicCertificateDatabaseImpl implements ORCPublicCertificateDat builder = child.getTextContent(); break; case "dxtDate": - issueDate = new MillisecondsTimePoint(isoTimestampFormat.parse(child.getTextContent()+"+0000")); // assume UTC + issueDate = new MillisecondsTimePoint(isoTimestampFormat.parse(child.getTextContent().replaceAll("Z", "+0000"))); // assume UTC break; case "CertType": certType = Integer.valueOf(child.getTextContent().trim()); From 820c421a1f5adc6ca18ace152f1740ff39c1c5a7 Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Sun, 12 Jan 2020 13:23:43 +0100 Subject: [PATCH 51/53] preparing for SailInsight3 mail type; added several TODOs for properly forwarding mail invitation type from server to client --- .../domain/common/BranchIOConstants.java | 7 ++++-- .../domain/common/MailInvitationType.java | 3 ++- ...2RaceLogTrackingInvitationMailBuilder.java | 2 -- ...3RaceLogTrackingInvitationMailBuilder.java | 24 +++++++++++++++++++ .../impl/RaceLogTrackingAdapterImpl.java | 3 +++ .../desktop/places/qrcode/QRCodePlace.java | 1 + .../adminconsole/RegattaDetailsComposite.java | 3 --- .../RegattaLogAddDeviceMappingDialog.java | 19 ++++++++++----- .../RegistrationLinkWithQRCodeDialog.java | 19 +++------------ .../local-test-environment.xml | 10 ++++---- .../selenium/api/test/RegattaApiTest.java | 6 ----- 11 files changed, 57 insertions(+), 40 deletions(-) create mode 100644 java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/BranchIO3RaceLogTrackingInvitationMailBuilder.java diff --git a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/BranchIOConstants.java b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/BranchIOConstants.java index 66a1686828b..c8bfdb36e06 100644 --- a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/BranchIOConstants.java +++ b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/BranchIOConstants.java @@ -1,14 +1,17 @@ package com.sap.sailing.domain.common; public class BranchIOConstants { - public static final String SAILINSIGHT_2_APP_BRANCHIO = "https://sailinsight20-app.sapsailing.com/invite"; public static final String SAILINSIGHT_APP_BRANCHIO = "https://sailinsight-app.sapsailing.com/invite"; + public static final String SAILINSIGHT_2_APP_BRANCHIO = "https://sailinsight20-app.sapsailing.com/invite"; + public static final String SAILINSIGHT_3_APP_BRANCHIO = "https://sailinsight30-app.sapsailing.com/invite"; public static final String SAILINSIGHT_APP_BRANCHIO_PATH = "checkinUrl"; public static final String BUOYPINGER_APP_BRANCHIO = "https://buoypinger-app.sapsailing.com/invite"; public static final String BUOYPINGER_APP_BRANCHIO_PATH = "checkinUrl"; public static final String OPEN_REGATTA_2_APP_BRANCHIO = "https://sailinsight20-app.sapsailing.com/publicInvite"; public static final String OPEN_REGATTA_2_APP_BRANCHIO_PATH = "checkinUrl"; + public static final String OPEN_REGATTA_3_APP_BRANCHIO = "https://sailinsight30-app.sapsailing.com/publicInvite"; + public static final String OPEN_REGATTA_3_APP_BRANCHIO_PATH = "checkinUrl"; private BranchIOConstants() { - }; + } } diff --git a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/MailInvitationType.java b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/MailInvitationType.java index 990c29d9ffb..555332fb6db 100644 --- a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/MailInvitationType.java +++ b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/MailInvitationType.java @@ -3,7 +3,8 @@ package com.sap.sailing.domain.common; public enum MailInvitationType { LEGACY, SailInsight1, - SailInsight2; + SailInsight2, + SailInsight3; public static final String SYSTEM_PROPERTY_NAME = "com.sap.sailing.domain.tracking.MailInvitationType"; } \ No newline at end of file diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/BranchIO2RaceLogTrackingInvitationMailBuilder.java b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/BranchIO2RaceLogTrackingInvitationMailBuilder.java index c102111dab9..a445a6aaa6d 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/BranchIO2RaceLogTrackingInvitationMailBuilder.java +++ b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/BranchIO2RaceLogTrackingInvitationMailBuilder.java @@ -5,7 +5,6 @@ import java.util.Locale; import com.sap.sailing.domain.common.BranchIOConstants; public class BranchIO2RaceLogTrackingInvitationMailBuilder extends BranchIORaceLogTrackingInvitationMailBuilder { - BranchIO2RaceLogTrackingInvitationMailBuilder(Locale locale) { super(locale); } @@ -20,5 +19,4 @@ public class BranchIO2RaceLogTrackingInvitationMailBuilder extends BranchIORaceL // FIXME the app should in the future at some point also support bouy pinging, replace this then return BranchIOConstants.BUOYPINGER_APP_BRANCHIO; } - } diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/BranchIO3RaceLogTrackingInvitationMailBuilder.java b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/BranchIO3RaceLogTrackingInvitationMailBuilder.java new file mode 100644 index 00000000000..135beb4b49d --- /dev/null +++ b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/BranchIO3RaceLogTrackingInvitationMailBuilder.java @@ -0,0 +1,24 @@ +package com.sap.sailing.domain.racelogtracking.impl; + +import java.util.Locale; + +import com.sap.sailing.domain.common.BranchIOConstants; + +public class BranchIO3RaceLogTrackingInvitationMailBuilder extends BranchIORaceLogTrackingInvitationMailBuilder { + + BranchIO3RaceLogTrackingInvitationMailBuilder(Locale locale) { + super(locale); + } + + @Override + protected String getSailInsightBranchIO() { + return BranchIOConstants.SAILINSIGHT_3_APP_BRANCHIO; + } + + @Override + protected String getBouyPingerBranchIO() { + // FIXME the app should in the future at some point also support bouy pinging, replace this then + return BranchIOConstants.BUOYPINGER_APP_BRANCHIO; + } + +} diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/RaceLogTrackingAdapterImpl.java b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/RaceLogTrackingAdapterImpl.java index 93af240a594..1d64ae14dc4 100755 --- a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/RaceLogTrackingAdapterImpl.java +++ b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/RaceLogTrackingAdapterImpl.java @@ -362,6 +362,9 @@ public class RaceLogTrackingAdapterImpl implements RaceLogTrackingAdapter { case SailInsight2: mail = new BranchIO2RaceLogTrackingInvitationMailBuilder(locale); break; + case SailInsight3: + mail = new BranchIO3RaceLogTrackingInvitationMailBuilder(locale); + break; default: throw new IllegalArgumentException("Unhandled mail type"); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/qrcode/QRCodePlace.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/qrcode/QRCodePlace.java index 742ec059b09..25cf582a8c1 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/qrcode/QRCodePlace.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/qrcode/QRCodePlace.java @@ -166,6 +166,7 @@ public class QRCodePlace extends AbstractBasePlace { } public String getPublicInviteBranchIOUrl() { + // TODO why is this specific to version 2 and not considering the default server setting for mailInvitationType? return BranchIOConstants.OPEN_REGATTA_2_APP_BRANCHIO + "?" + QRCodePlace.PARAM_REGATTA_NAME + "=" + encodeUrl(publicRegattaName) + "&" + QRCodePlace.PARAM_REGATTA_SECRET + "=" + encodeUrl(regattaRegistrationLinkSecret) + "&" + QRCodePlace.PARAM_SERVER + "=" diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaDetailsComposite.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaDetailsComposite.java index 87133a873eb..767bda207d4 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaDetailsComposite.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaDetailsComposite.java @@ -144,12 +144,9 @@ public class RegattaDetailsComposite extends Composite { Button button = new Button(stringMessages.registrationLinkShare(), new ClickHandler() { @Override public void onClick(ClickEvent event) { - RegistrationLinkWithQRCode registrationLinkWithQRCode = new RegistrationLinkWithQRCode(); registrationLinkWithQRCode.setSecret(regatta.registrationLinkSecret); - sailingService.getMailType(new AsyncCallback() { - @Override public void onFailure(Throwable caught) { logger.log(Level.SEVERE, "Could not determine MailInvitationType", caught); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaLogAddDeviceMappingDialog.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaLogAddDeviceMappingDialog.java index 400eca6a6ce..5ffa0bba26a 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaLogAddDeviceMappingDialog.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaLogAddDeviceMappingDialog.java @@ -221,21 +221,28 @@ public class RegattaLogAddDeviceMappingDialog extends DataEntryDialogWithDateTim String url = DeviceMappingConstants.getDeviceMappingForRegattaLogUrl(baseUrlWithoutTrailingSlash, eventIdAsString, leaderboardName, mappedItemType, mappedItemId, regattaRegisterSecret, GwtUrlHelper.INSTANCE); - if (mailInvitationType == MailInvitationType.LEGACY) { + switch (mailInvitationType) { + case LEGACY: // URL is already legacy - } else if (mailInvitationType == MailInvitationType.SailInsight1) { + break; + case SailInsight1: url = BranchIOConstants.SAILINSIGHT_APP_BRANCHIO + "?" + BranchIOConstants.SAILINSIGHT_APP_BRANCHIO_PATH + "=" + GwtUrlHelper.INSTANCE.encodeQueryString(url); - } else if (mailInvitationType == MailInvitationType.SailInsight2) { + break; + case SailInsight2: url = BranchIOConstants.SAILINSIGHT_2_APP_BRANCHIO + "?" + BranchIOConstants.OPEN_REGATTA_2_APP_BRANCHIO_PATH + "=" + GwtUrlHelper.INSTANCE.encodeQueryString(url); - } - else { + break; + case SailInsight3: + url = BranchIOConstants.SAILINSIGHT_3_APP_BRANCHIO + "?" + + BranchIOConstants.OPEN_REGATTA_3_APP_BRANCHIO_PATH + "=" + + GwtUrlHelper.INSTANCE.encodeQueryString(url); + break; + default: throw new QRCodeURLCreationException("Unknown mail invitation type: " + mailInvitationType); } - return url; } }); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegistrationLinkWithQRCodeDialog.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegistrationLinkWithQRCodeDialog.java index 4817fa55eb4..de2b6288d2a 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegistrationLinkWithQRCodeDialog.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegistrationLinkWithQRCodeDialog.java @@ -63,14 +63,10 @@ public class RegistrationLinkWithQRCodeDialog extends DataEntryDialog() { @Override public String getValue(EventDTO item) { @@ -98,10 +94,8 @@ public class RegistrationLinkWithQRCodeDialog extends DataEntryDialog parameters = new HashMap(); parameters.put("regatta_name", regattaName); parameters.put("secret", secret); parameters.put("server", baseUrl); parameters.put("event_id", eventIdAsString); + // TODO decide OPEN_REGATTA link variant based on invitationType String deeplinkUrl = BranchIO.generateLink(BranchIOConstants.OPEN_REGATTA_2_APP_BRANCHIO, parameters, URL::encodeQueryString); urlTextBox.setText(deeplinkUrl); - if (invitationType != MailInvitationType.SailInsight2) { + if (invitationType != MailInvitationType.SailInsight2 && + invitationType != MailInvitationType.SailInsight3) { // TODO it would be better to make it a property of an enum literal whether open regatta invitation is possible getStatusLabel().setText(stringMessages.warningSailInsightVersion()); getStatusLabel().setStyleName("errorLabel"); } sailingService.openRegattaRegistrationQrCode(deeplinkUrl, new AsyncCallback() { - @Override public void onFailure(Throwable caught) { GWT.log("Qrcode generation failed: ", caught); @@ -187,9 +176,7 @@ public class RegistrationLinkWithQRCodeDialog extends DataEntryDialog webdriver.chrome.driver - C:\apps\ChromeSeleniumDriver\chromedriver.exe + /usr/bin/chromedriver webdriver.gecko.driver - /path/to/geckodriver.exe + /usr/bin/geckodriver - - --> + +