Refactored RegattaMetadataDTO mapping to LeaderboardContext

This commit is contained in:
Steffen Schaefer committed 2015-07-20 15:44:36 +02:00
1 parent e9abde48e7
commit ed5df9a27b
2 files changed
+91 -43

No files matched your search

@@ -19,9 +19,6 @@ import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.LeaderboardGroupBase; import com.sap.sailing.domain.base.LeaderboardGroupBase;
import com.sap.sailing.domain.base.RaceColumn; import com.sap.sailing.domain.base.RaceColumn;
import com.sap.sailing.domain.base.Regatta; 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.FlexibleLeaderboard;
import com.sap.sailing.domain.leaderboard.Leaderboard; import com.sap.sailing.domain.leaderboard.Leaderboard;
import com.sap.sailing.domain.leaderboard.LeaderboardGroup; 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.sailing.server.RacingEventService;
import com.sap.sse.common.TimePoint; import com.sap.sse.common.TimePoint;
import com.sap.sse.common.Util; 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.impl.MillisecondsTimePoint;
import com.sap.sse.common.media.ImageDescriptor; import com.sap.sse.common.media.ImageDescriptor;
import com.sap.sse.common.media.MediaDescriptor; import com.sap.sse.common.media.MediaDescriptor;
@@ -450,46 +446,11 @@ public final class HomeServiceUtil {
return result; 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<Pair<RaceColumnDTO, FleetDTO>> liveRaces = leaderboard.getLiveRaces(getLiveTimePointInMillis());
return !liveRaces.isEmpty();
}
public static TimePoint getLiveTimePoint() { public static TimePoint getLiveTimePoint() {
return new MillisecondsTimePoint(getLiveTimePointInMillis()); return new MillisecondsTimePoint(getLiveTimePointInMillis());
} }
private static long getLiveTimePointInMillis() { public static long getLiveTimePointInMillis() {
// TODO better solution // TODO better solution
long livePlayDelayInMillis = 15_000; long livePlayDelayInMillis = 15_000;
return System.currentTimeMillis() - livePlayDelayInMillis; return System.currentTimeMillis() - livePlayDelayInMillis;
@@ -1,18 +1,25 @@
package com.sap.sailing.gwt.ui.shared.dispatch.event; package com.sap.sailing.gwt.ui.shared.dispatch.event;
import java.util.Collections; import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
import com.sap.sailing.domain.base.Event; 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.Fleet;
import com.sap.sailing.domain.base.RaceColumn; 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.CompetitorDTO;
import com.sap.sailing.domain.common.dto.FleetDTO;
import com.sap.sailing.domain.common.dto.LeaderboardDTO; import com.sap.sailing.domain.common.dto.LeaderboardDTO;
import com.sap.sailing.domain.common.dto.LeaderboardEntryDTO; import com.sap.sailing.domain.common.dto.LeaderboardEntryDTO;
import com.sap.sailing.domain.common.dto.LeaderboardRowDTO; 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.Leaderboard;
import com.sap.sailing.domain.leaderboard.LeaderboardGroup; 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.server.HomeServiceUtil;
import com.sap.sailing.gwt.ui.shared.dispatch.DispatchContext; import com.sap.sailing.gwt.ui.shared.dispatch.DispatchContext;
import com.sap.sailing.gwt.ui.shared.dispatch.DispatchException; 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.dispatch.regatta.RegattaWithProgressDTO;
import com.sap.sailing.gwt.ui.shared.eventview.RegattaMetadataDTO; import com.sap.sailing.gwt.ui.shared.eventview.RegattaMetadataDTO;
import com.sap.sailing.server.RacingEventService; 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 { public class LeaderboardContext {
private static final Logger logger = Logger.getLogger(LeaderboardContext.class.getName()); private static final Logger logger = Logger.getLogger(LeaderboardContext.class.getName());
@@ -49,7 +59,7 @@ public class LeaderboardContext {
RegattaProgressCalculator regattaProgressCalculator = new RegattaProgressCalculator(); RegattaProgressCalculator regattaProgressCalculator = new RegattaProgressCalculator();
forRaces(context, regattaProgressCalculator); forRaces(context, regattaProgressCalculator);
RegattaWithProgressDTO regattaDTO = new RegattaWithProgressDTO(regattaProgressCalculator.getResult()); RegattaWithProgressDTO regattaDTO = new RegattaWithProgressDTO(regattaProgressCalculator.getResult());
HomeServiceUtil.fillRegattaFields(event, leaderboardGroup, leaderboard, regattaDTO); fillRegattaFields(regattaDTO);
return regattaDTO; return regattaDTO;
} }
@@ -63,7 +73,7 @@ public class LeaderboardContext {
result.setScoreCorrectionText(leaderboardDTO.getComment()); result.setScoreCorrectionText(leaderboardDTO.getComment());
result.setLastScoreUpdate(leaderboardDTO.getTimePointOfLastCorrectionsValidity()); result.setLastScoreUpdate(leaderboardDTO.getTimePointOfLastCorrectionsValidity());
boolean isLive = HomeServiceUtil.hasLiveRace(leaderboardDTO); boolean isLive = hasLiveRace(leaderboardDTO);
result.setLive(isLive); result.setLive(isLive);
int rank = 0; int rank = 0;
@@ -89,12 +99,89 @@ public class LeaderboardContext {
} }
} }
private boolean hasLiveRace(LeaderboardDTO leaderboard) {
List<Pair<RaceColumnDTO, FleetDTO>> 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() { public String getLeaderboardName() {
return leaderboard.getName(); return leaderboard.getName();
} }
public RegattaMetadataDTO asRegattaMetadataDTO() { 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() { public boolean isPartOfEvent() {