diff --git a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/dto/LeaderboardDTO.java b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/dto/LeaderboardDTO.java index 1d4b723b2a8..d749f711f96 100644 --- a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/dto/LeaderboardDTO.java +++ b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/dto/LeaderboardDTO.java @@ -42,6 +42,9 @@ public class LeaderboardDTO extends AbstractLeaderboardDTO implements Serializab private Map> competitorOrderingPerRaceColumnName; + /** timpoint of the leaderboard */ + private Date timePoint; + private Date timePointOfLastCorrectionsValidity; private String comment; @@ -63,9 +66,10 @@ public class LeaderboardDTO extends AbstractLeaderboardDTO implements Serializab * @param uuidGenerator used to provide the {@link #id ID} for this object (see also {@link #getId()}) and for any clones produced * from it by the {@link #clone()} operation. */ - public LeaderboardDTO(Date timePointOfLastCorrectionsValidity, String comment, ScoringSchemeType scoringScheme, boolean higherScoreIsBetter, UUIDGenerator uuidGenerator, boolean hasOverallDetails) { + public LeaderboardDTO(Date timepoint, Date timePointOfLastCorrectionsValidity, String comment, ScoringSchemeType scoringScheme, boolean higherScoreIsBetter, UUIDGenerator uuidGenerator, boolean hasOverallDetails) { initCollections(); id = uuidGenerator.generateRandomUUID(); + this.timePoint = timepoint; this.timePointOfLastCorrectionsValidity = timePointOfLastCorrectionsValidity; this.scoringScheme = scoringScheme; this.comment = comment; @@ -157,6 +161,13 @@ public class LeaderboardDTO extends AbstractLeaderboardDTO implements Serializab return timePointOfLastCorrectionsValidity; } + /** + * Returns the timepoint for which the leaderboard has been created. + */ + public Date getTimePoint() { + return timePoint; + } + @Override public int hashCode() { return super.hashCode() ^ ((competitors == null) ? 0 : competitors.hashCode()); diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/AbstractLeaderboardWithCache.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/AbstractLeaderboardWithCache.java index 9cca148e624..ad2bbf6eb14 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/AbstractLeaderboardWithCache.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/AbstractLeaderboardWithCache.java @@ -352,7 +352,7 @@ public abstract class AbstractLeaderboardWithCache implements Leaderboard { throws NoWindException { long startOfRequestHandling = System.currentTimeMillis(); final LeaderboardDTOCalculationReuseCache cache = new LeaderboardDTOCalculationReuseCache(timePoint); - final LeaderboardDTO result = new LeaderboardDTO(this.getScoreCorrection().getTimePointOfLastCorrectionsValidity() == null ? null + final LeaderboardDTO result = new LeaderboardDTO(timePoint.asDate(), this.getScoreCorrection().getTimePointOfLastCorrectionsValidity() == null ? null : this.getScoreCorrection().getTimePointOfLastCorrectionsValidity().asDate(), this.getScoreCorrection() == null ? null : this.getScoreCorrection().getComment(), this.getScoringScheme() == null ? null : this.getScoringScheme().getType(), this diff --git a/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/TestColumnSwapping.java b/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/TestColumnSwapping.java index e3a7483d13c..39eb99a2389 100755 --- a/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/TestColumnSwapping.java +++ b/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/TestColumnSwapping.java @@ -55,7 +55,7 @@ public class TestColumnSwapping { leaderboardCreationDate = new Date(); try { // get Leaderboard with name and current date - leaderboardOriginalDTO = new LeaderboardDTO(null, null, ScoringSchemeType.LOW_POINT, /* higherScoreIsBetter */ false, new LeaderboardDTO.UUIDGenerator() { + leaderboardOriginalDTO = new LeaderboardDTO(new Date(), null, null, ScoringSchemeType.LOW_POINT, /* higherScoreIsBetter */ false, new LeaderboardDTO.UUIDGenerator() { @Override public String generateRandomUUID() { return UUID.randomUUID().toString(); @@ -119,7 +119,7 @@ public class TestColumnSwapping { @Test public void testLeaderBoardDTOMethods() { - lb = new LeaderboardDTO(null, null, ScoringSchemeType.LOW_POINT, /* higherScoreIsBetter */ false, new LeaderboardDTO.UUIDGenerator() { + lb = new LeaderboardDTO(new Date(), null, null, ScoringSchemeType.LOW_POINT, /* higherScoreIsBetter */ false, new LeaderboardDTO.UUIDGenerator() { @Override public String generateRandomUUID() { return UUID.randomUUID().toString(); diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/AbstractLeaderboardsResource.java b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/AbstractLeaderboardsResource.java index c480e0363ed..78f5a05f636 100644 --- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/AbstractLeaderboardsResource.java +++ b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/AbstractLeaderboardsResource.java @@ -85,11 +85,11 @@ public abstract class AbstractLeaderboardsResource extends AbstractSailingServer } protected void writeCommonLeaderboardData(JSONObject jsonLeaderboard, LeaderboardDTO leaderboard, - ResultStates resultState, TimePoint resultTimePoint, Integer maxCompetitorsCount) { + ResultStates resultState, Integer maxCompetitorsCount) { jsonLeaderboard.put("name", leaderboard.name); final String displayName = leaderboard.getDisplayName(); jsonLeaderboard.put("displayName", displayName == null ? leaderboard.name : displayName); - jsonLeaderboard.put("resultTimepoint", resultTimePoint != null ? resultTimePoint.asMillis() : null); + jsonLeaderboard.put("resultTimepoint", leaderboard.getTimePoint() != null ? leaderboard.getTimePoint().getTime() : null); jsonLeaderboard.put("resultState", resultState.name()); jsonLeaderboard.put("maxCompetitorsCount", maxCompetitorsCount); jsonLeaderboard.put("higherScoreIsBetter", leaderboard.isHigherScoreBetter()); 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 9c3bf6efd40..28bbe8e64b6 100644 --- 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 @@ -155,12 +155,10 @@ public class LeaderboardsResource extends AbstractLeaderboardsResource { .type(MediaType.TEXT_PLAIN).build(); } else { try { - TimePoint resultTimePoint = calculateTimePointForResultState(leaderboard, resultState); + TimePoint timePoint = calculateTimePointForResultState(leaderboard, resultState); JSONObject jsonLeaderboard; - if (resultTimePoint != null) { - Util.Triple resultStateAndTimePoint = new Util.Triple<>( - resultTimePoint, resultState, maxCompetitorsCount); - jsonLeaderboard = getLeaderboardJson(leaderboard, resultStateAndTimePoint); + if (timePoint != null || resultState == ResultStates.Live) { + jsonLeaderboard = getLeaderboardJson(leaderboard, timePoint, resultState, maxCompetitorsCount); } else { jsonLeaderboard = createEmptyLeaderboardJson(leaderboard, resultState, requestTimePoint, maxCompetitorsCount); @@ -181,19 +179,16 @@ public class LeaderboardsResource extends AbstractLeaderboardsResource { } private JSONObject getLeaderboardJson(Leaderboard leaderboard, - Util.Triple timePointAndResultStateAndMaxCompetitorsCount) + TimePoint resultTimePoint, ResultStates resultState, Integer maxCompetitorsCount) throws NoWindException, InterruptedException, ExecutionException { LeaderboardDTO leaderboardDTO = leaderboard.getLeaderboardDTO( - timePointAndResultStateAndMaxCompetitorsCount.getA(), Collections. emptyList(), /* addOverallDetails */ + resultTimePoint, Collections. emptyList(), /* addOverallDetails */ false, getService(), getService().getBaseDomainFactory(), /* fillTotalPointsUncorrected */false); - TimePoint resultTimePoint = timePointAndResultStateAndMaxCompetitorsCount.getA(); - ResultStates resultState = timePointAndResultStateAndMaxCompetitorsCount.getB(); - Integer maxCompetitorsCount = timePointAndResultStateAndMaxCompetitorsCount.getC(); JSONObject jsonLeaderboard = new JSONObject(); - writeCommonLeaderboardData(jsonLeaderboard, leaderboardDTO, resultState, resultTimePoint, maxCompetitorsCount); + writeCommonLeaderboardData(jsonLeaderboard, leaderboardDTO, resultState, maxCompetitorsCount); JSONArray jsonCompetitorEntries = new JSONArray(); jsonLeaderboard.put("competitors", jsonCompetitorEntries); diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/LeaderboardsResourceV2.java b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/LeaderboardsResourceV2.java index 8f3820da995..7f6a56b5e6d 100644 --- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/LeaderboardsResourceV2.java +++ b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/LeaderboardsResourceV2.java @@ -63,16 +63,16 @@ public class LeaderboardsResourceV2 extends AbstractLeaderboardsResource { .type(MediaType.TEXT_PLAIN).build(); } else { try { - TimePoint resultTimePoint; + TimePoint timePoint; try { - resultTimePoint = parseTimePoint(time, timeasmillis, calculateTimePointForResultState(leaderboard, resultState)); + timePoint = parseTimePoint(time, timeasmillis, calculateTimePointForResultState(leaderboard, resultState)); } catch (InvalidDateException e1) { return Response.status(Status.INTERNAL_SERVER_ERROR).entity("Could not parse the time.") .type(MediaType.TEXT_PLAIN).build(); } JSONObject jsonLeaderboard; - if (resultTimePoint != null || resultState == ResultStates.Live) { - jsonLeaderboard = getLeaderboardJson(leaderboard, resultTimePoint, resultState, maxCompetitorsCount, raceColumnNames, raceDetails); + if (timePoint != null || resultState == ResultStates.Live) { + jsonLeaderboard = getLeaderboardJson(leaderboard, timePoint, resultState, maxCompetitorsCount, raceColumnNames, raceDetails); } else { jsonLeaderboard = createEmptyLeaderboardJson(leaderboard, resultState, requestTimePoint, maxCompetitorsCount); @@ -107,7 +107,7 @@ public class LeaderboardsResourceV2 extends AbstractLeaderboardsResource { JSONObject jsonLeaderboard = new JSONObject(); - writeCommonLeaderboardData(jsonLeaderboard, leaderboardDTO, resultState, resultTimePoint, maxCompetitorsCount); + writeCommonLeaderboardData(jsonLeaderboard, leaderboardDTO, resultState, maxCompetitorsCount); Map>> competitorRanksPerRaceColumnsAndFleets = new HashMap<>(); for (String raceColumnName : raceColumnsToShow) {