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 f65046c2ad9..15e7964c68b 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 @@ -19,9 +19,6 @@ import com.sap.sailing.domain.base.Fleet; import com.sap.sailing.domain.base.LeaderboardGroupBase; import com.sap.sailing.domain.base.RaceColumn; import com.sap.sailing.domain.base.Regatta; -import com.sap.sailing.domain.common.dto.FleetDTO; -import com.sap.sailing.domain.common.dto.LeaderboardDTO; -import com.sap.sailing.domain.common.dto.RaceColumnDTO; import com.sap.sailing.domain.leaderboard.FlexibleLeaderboard; import com.sap.sailing.domain.leaderboard.Leaderboard; import com.sap.sailing.domain.leaderboard.LeaderboardGroup; @@ -40,7 +37,6 @@ import com.sap.sailing.gwt.ui.shared.start.StageEventType; import com.sap.sailing.server.RacingEventService; import com.sap.sse.common.TimePoint; import com.sap.sse.common.Util; -import com.sap.sse.common.Util.Pair; import com.sap.sse.common.impl.MillisecondsTimePoint; import com.sap.sse.common.media.ImageDescriptor; import com.sap.sse.common.media.MediaDescriptor; @@ -450,46 +446,11 @@ public final class HomeServiceUtil { return result; } - public static RegattaMetadataDTO toRegattaMetadataDTO(EventBase event, LeaderboardGroup leaderboardGroup, Leaderboard leaderboard) { - RegattaMetadataDTO regattaDTO = new RegattaMetadataDTO(); - fillRegattaFields(event, leaderboardGroup, leaderboard, regattaDTO); - - return regattaDTO; - } - - public static void fillRegattaFields(EventBase event, LeaderboardGroup leaderboardGroup, Leaderboard leaderboard, - RegattaMetadataDTO regattaDTO) { - regattaDTO.setId(leaderboard.getName()); - regattaDTO.setDisplayName(leaderboard.getDisplayName() != null ? leaderboard.getDisplayName() : leaderboard.getName()); - if(hasMultipleLeaderboardGroups(event)) { - regattaDTO.setBoatCategory(leaderboardGroup.getDisplayName() != null ? leaderboardGroup.getDisplayName() : leaderboardGroup.getName()); - } - regattaDTO.setCompetitorsCount(calculateCompetitorsCount(leaderboard)); - regattaDTO.setRaceCount(calculateRaceColumnCount(leaderboard)); - regattaDTO.setBoatClass(getBoatClassName(leaderboard)); - if(leaderboard instanceof RegattaLeaderboard) { - Regatta regatta = ((RegattaLeaderboard) leaderboard).getRegatta(); - regattaDTO.setStartDate(regatta.getStartDate() != null ? regatta.getStartDate().asDate() : null); - regattaDTO.setEndDate(regatta.getEndDate() != null ? regatta.getEndDate().asDate() : null); - } - regattaDTO.setState(calculateRegattaState(regattaDTO)); - regattaDTO.setDefaultCourseAreaName(getCourseAreaNameForRegattaIdThereIsMoreThanOne(event, leaderboard)); - } - - private static boolean hasMultipleLeaderboardGroups(EventBase event) { - return Util.size(event.getLeaderboardGroups()) > 1; - } - - public static boolean hasLiveRace(LeaderboardDTO leaderboard) { - List> liveRaces = leaderboard.getLiveRaces(getLiveTimePointInMillis()); - return !liveRaces.isEmpty(); - } - public static TimePoint getLiveTimePoint() { return new MillisecondsTimePoint(getLiveTimePointInMillis()); } - private static long getLiveTimePointInMillis() { + public static long getLiveTimePointInMillis() { // TODO better solution long livePlayDelayInMillis = 15_000; return System.currentTimeMillis() - livePlayDelayInMillis; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/event/LeaderboardContext.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/event/LeaderboardContext.java index eecdd9e0e6a..f66f502dbb9 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/event/LeaderboardContext.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/event/LeaderboardContext.java @@ -1,18 +1,25 @@ package com.sap.sailing.gwt.ui.shared.dispatch.event; import java.util.Collections; +import java.util.Date; +import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import com.sap.sailing.domain.base.Event; +import com.sap.sailing.domain.base.EventBase; import com.sap.sailing.domain.base.Fleet; import com.sap.sailing.domain.base.RaceColumn; +import com.sap.sailing.domain.base.Regatta; import com.sap.sailing.domain.common.dto.CompetitorDTO; +import com.sap.sailing.domain.common.dto.FleetDTO; import com.sap.sailing.domain.common.dto.LeaderboardDTO; import com.sap.sailing.domain.common.dto.LeaderboardEntryDTO; import com.sap.sailing.domain.common.dto.LeaderboardRowDTO; +import com.sap.sailing.domain.common.dto.RaceColumnDTO; import com.sap.sailing.domain.leaderboard.Leaderboard; import com.sap.sailing.domain.leaderboard.LeaderboardGroup; +import com.sap.sailing.domain.leaderboard.RegattaLeaderboard; import com.sap.sailing.gwt.server.HomeServiceUtil; import com.sap.sailing.gwt.ui.shared.dispatch.DispatchContext; import com.sap.sailing.gwt.ui.shared.dispatch.DispatchException; @@ -21,6 +28,9 @@ import com.sap.sailing.gwt.ui.shared.dispatch.event.EventActionUtil.RaceCallback import com.sap.sailing.gwt.ui.shared.dispatch.regatta.RegattaWithProgressDTO; import com.sap.sailing.gwt.ui.shared.eventview.RegattaMetadataDTO; import com.sap.sailing.server.RacingEventService; +import com.sap.sse.common.TimePoint; +import com.sap.sse.common.Util; +import com.sap.sse.common.Util.Pair; public class LeaderboardContext { private static final Logger logger = Logger.getLogger(LeaderboardContext.class.getName()); @@ -49,7 +59,7 @@ public class LeaderboardContext { RegattaProgressCalculator regattaProgressCalculator = new RegattaProgressCalculator(); forRaces(context, regattaProgressCalculator); RegattaWithProgressDTO regattaDTO = new RegattaWithProgressDTO(regattaProgressCalculator.getResult()); - HomeServiceUtil.fillRegattaFields(event, leaderboardGroup, leaderboard, regattaDTO); + fillRegattaFields(regattaDTO); return regattaDTO; } @@ -63,7 +73,7 @@ public class LeaderboardContext { result.setScoreCorrectionText(leaderboardDTO.getComment()); result.setLastScoreUpdate(leaderboardDTO.getTimePointOfLastCorrectionsValidity()); - boolean isLive = HomeServiceUtil.hasLiveRace(leaderboardDTO); + boolean isLive = hasLiveRace(leaderboardDTO); result.setLive(isLive); int rank = 0; @@ -89,12 +99,89 @@ public class LeaderboardContext { } } + private boolean hasLiveRace(LeaderboardDTO leaderboard) { + List> liveRaces = leaderboard.getLiveRaces(HomeServiceUtil.getLiveTimePointInMillis()); + return !liveRaces.isEmpty(); + } + + private Date getStartDateWithEventFallback() { + Date result = getStartDate(); + if(result != null) { + return result; + } + return event.getStartDate().asDate(); + } + + private Date getStartDate() { + TimePoint timePoint = getStartTimePoint(); + if(timePoint != null) { + return timePoint.asDate(); + } + return null; + } + + private TimePoint getStartTimePoint() { + if(leaderboard instanceof RegattaLeaderboard) { + Regatta regatta = ((RegattaLeaderboard) leaderboard).getRegatta(); + return regatta.getStartDate(); + } + return null; + } + + private Date getEndDateWithEventFallback() { + Date result = getEndDate(); + if(result != null) { + return result; + } + return event.getEndDate().asDate(); + } + + private Date getEndDate() { + TimePoint timePoint = getEndTimePoint(); + if(timePoint != null) { + return timePoint.asDate(); + } + return null; + } + + private TimePoint getEndTimePoint() { + if(leaderboard instanceof RegattaLeaderboard) { + Regatta regatta = ((RegattaLeaderboard) leaderboard).getRegatta(); + return regatta.getEndDate(); + } + return null; + } + public String getLeaderboardName() { return leaderboard.getName(); } public RegattaMetadataDTO asRegattaMetadataDTO() { - return HomeServiceUtil.toRegattaMetadataDTO(event, leaderboardGroup, leaderboard); + RegattaMetadataDTO regattaDTO = new RegattaMetadataDTO(); + fillRegattaFields(regattaDTO); + + return regattaDTO; + } + + public void fillRegattaFields(RegattaMetadataDTO regattaDTO) { + regattaDTO.setId(getLeaderboardName()); + regattaDTO.setDisplayName(leaderboard.getDisplayName() != null ? leaderboard.getDisplayName() : leaderboard.getName()); + if(hasMultipleLeaderboardGroups(event)) { + regattaDTO.setBoatCategory(leaderboardGroup.getDisplayName() != null ? leaderboardGroup.getDisplayName() : leaderboardGroup.getName()); + } + regattaDTO.setCompetitorsCount(HomeServiceUtil.calculateCompetitorsCount(leaderboard)); + regattaDTO.setRaceCount(HomeServiceUtil.calculateRaceColumnCount(leaderboard)); + regattaDTO.setBoatClass(HomeServiceUtil.getBoatClassName(leaderboard)); + if(leaderboard instanceof RegattaLeaderboard) { + regattaDTO.setStartDate(getStartDateWithEventFallback()); + regattaDTO.setEndDate(getEndDateWithEventFallback()); + } + regattaDTO.setState(HomeServiceUtil.calculateRegattaState(regattaDTO)); + regattaDTO.setDefaultCourseAreaName(HomeServiceUtil.getCourseAreaNameForRegattaIdThereIsMoreThanOne(event, leaderboard)); + } + + private static boolean hasMultipleLeaderboardGroups(EventBase event) { + return Util.size(event.getLeaderboardGroups()) > 1; } public boolean isPartOfEvent() {