From fca55ba44e63bfe193c84e545504a701d42bfe19 Mon Sep 17 00:00:00 2001 From: Frank Mittag Date: Fri, 2 Mar 2018 14:05:36 +0100 Subject: [PATCH] added a new 'timepoint' attribute to LeaderboardDTO to know also for 'live leaderboard' requests where the request timepoint is 'null' the timepoint for which leaderboard has been calculated. Used this timepoint than for the 'resultTimepoint' of the leaderboard API --- .../domain/common/dto/LeaderboardDTO.java | 13 ++++++++++++- .../impl/AbstractLeaderboardWithCache.java | 2 +- .../sailing/gwt/ui/test/TestColumnSwapping.java | 4 ++-- .../jaxrs/api/AbstractLeaderboardsResource.java | 4 ++-- .../gateway/jaxrs/api/LeaderboardsResource.java | 17 ++++++----------- .../jaxrs/api/LeaderboardsResourceV2.java | 10 +++++----- 6 files changed, 28 insertions(+), 22 deletions(-) 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) {