diff --git a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/LeaderboardNameConstants.java b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/LeaderboardNameConstants.java index 18947f19765..85400964a56 100755 --- a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/LeaderboardNameConstants.java +++ b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/LeaderboardNameConstants.java @@ -30,5 +30,5 @@ public interface LeaderboardNameConstants { static final String RACEVIEWERURLS = "raceViewerUrls"; static final String HASGPSDATA = "hasGpsData"; static final String HASWINDDATA = "hasWindData"; - + static final String DISCARDS = "discardIndexResultsStartingWithHowManyRaces"; } \ No newline at end of file diff --git a/java/com.sap.sailing.server.gateway.test/src/com/sap/sailing/server/gateway/jaxrs/api/CompareServersTest.java b/java/com.sap.sailing.server.gateway.test/src/com/sap/sailing/server/gateway/jaxrs/api/CompareServersTest.java index 468b1eb28c0..ad30421a7fa 100755 --- a/java/com.sap.sailing.server.gateway.test/src/com/sap/sailing/server/gateway/jaxrs/api/CompareServersTest.java +++ b/java/com.sap.sailing.server.gateway.test/src/com/sap/sailing/server/gateway/jaxrs/api/CompareServersTest.java @@ -247,8 +247,8 @@ public class CompareServersTest { @Test public void testComparingLeaderboardGroupOutputWithEventOrderChangeOnly() throws IOException, ParseException { - final Object oldLg = new JSONParser().parse(new InputStreamReader(getClass().getResourceAsStream("/LeaderboardGroup1_old.json"))); - final Object newLg = new JSONParser().parse(new InputStreamReader(getClass().getResourceAsStream("/LeaderboardGroup1_new.json"))); + final JSONObject oldLg = (JSONObject) new JSONParser().parse(new InputStreamReader(getClass().getResourceAsStream("/LeaderboardGroup1_old.json"))); + final JSONObject newLg = (JSONObject) new JSONParser().parse(new InputStreamReader(getClass().getResourceAsStream("/LeaderboardGroup1_new.json"))); final Pair result = resource.removeUnnecessaryAndDuplicateFields(oldLg, newLg); assertNull(result.getA()); assertNull(result.getB()); @@ -256,8 +256,8 @@ public class CompareServersTest { @Test public void testComparingLeaderboardGroupOutputWithRaceHavingLostWindAndGPS() throws IOException, ParseException { - final Object oldLg = new JSONParser().parse(new InputStreamReader(getClass().getResourceAsStream("/LeaderboardGroup2_old.json"))); - final Object newLg = new JSONParser().parse(new InputStreamReader(getClass().getResourceAsStream("/LeaderboardGroup2_new.json"))); + final JSONObject oldLg = (JSONObject) new JSONParser().parse(new InputStreamReader(getClass().getResourceAsStream("/LeaderboardGroup2_old.json"))); + final JSONObject newLg = (JSONObject) new JSONParser().parse(new InputStreamReader(getClass().getResourceAsStream("/LeaderboardGroup2_new.json"))); final Pair result = resource.removeUnnecessaryAndDuplicateFields(oldLg, newLg); assertNotNull(result.getA()); assertNotNull(result.getB()); 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 16b5d592131..c63b4c94fd9 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 @@ -16,6 +16,7 @@ import com.sap.sailing.domain.base.Fleet; import com.sap.sailing.domain.base.Nationality; import com.sap.sailing.domain.base.RaceColumn; import com.sap.sailing.domain.base.Waypoint; +import com.sap.sailing.domain.common.LeaderboardNameConstants; import com.sap.sailing.domain.common.NoWindException; import com.sap.sailing.domain.common.dto.BoatDTO; import com.sap.sailing.domain.common.dto.CompetitorDTO; @@ -128,25 +129,35 @@ public abstract class AbstractLeaderboardsResource extends AbstractSailingServer } } + static JSONArray getDiscardingRuleAsJson(Leaderboard leaderboard) { + final JSONArray discardIndices; + final ResultDiscardingRule resultDiscardingRule = leaderboard.getResultDiscardingRule(); + if (resultDiscardingRule instanceof ThresholdBasedResultDiscardingRule) { + final ThresholdBasedResultDiscardingRule thresholdBasedResultDiscardingRule = (ThresholdBasedResultDiscardingRule) resultDiscardingRule; + discardIndices = new JSONArray(); + for (int index : thresholdBasedResultDiscardingRule.getDiscardIndexResultsStartingWithHowManyRaces()) { + discardIndices.add(index); + } + } else { + discardIndices = null; + } + return discardIndices; + } + protected void writeCommonLeaderboardData(JSONObject jsonLeaderboard, Leaderboard leaderboard, ResultStates resultState, Date resultTimePoint, Integer maxCompetitorsCount) { - jsonLeaderboard.put("name", leaderboard.getName()); + jsonLeaderboard.put(LeaderboardNameConstants.NAME, leaderboard.getName()); final String displayName = leaderboard.getDisplayName(); - jsonLeaderboard.put("displayName", displayName == null ? leaderboard.getName() : displayName); + jsonLeaderboard.put(LeaderboardNameConstants.DISPLAYNAME, displayName == null ? leaderboard.getName() : displayName); jsonLeaderboard.put("boatClass", leaderboard.getBoatClass() == null ? null : leaderboard.getBoatClass().getName()); jsonLeaderboard.put("resultTimepoint", resultTimePoint != null ? resultTimePoint.getTime() : null); jsonLeaderboard.put("delayToLiveInMillis", leaderboard.getDelayToLiveInMillis()); jsonLeaderboard.put("resultState", resultState.name()); jsonLeaderboard.put("type", leaderboard.getLeaderboardType().name()); jsonLeaderboard.put("shardingLeaderboardName", ShardingType.LEADERBOARDNAME.encodeShardingInfo(leaderboard.getName())); - final ResultDiscardingRule resultDiscardingRule = leaderboard.getResultDiscardingRule(); - if (resultDiscardingRule instanceof ThresholdBasedResultDiscardingRule) { - final ThresholdBasedResultDiscardingRule thresholdBasedResultDiscardingRule = (ThresholdBasedResultDiscardingRule) resultDiscardingRule; - final JSONArray discardIndices = new JSONArray(); - jsonLeaderboard.put("discardIndexResultsStartingWithHowManyRaces", discardIndices); - for (int index : thresholdBasedResultDiscardingRule.getDiscardIndexResultsStartingWithHowManyRaces()) { - discardIndices.add(index); - } + final JSONArray discardIndices = getDiscardingRuleAsJson(leaderboard); + if (discardIndices != null) { + jsonLeaderboard.put(LeaderboardNameConstants.DISCARDS, discardIndices); } if (leaderboard instanceof RegattaLeaderboard) { final RegattaLeaderboard regattaLeaderboard = (RegattaLeaderboard) leaderboard; @@ -157,12 +168,12 @@ public abstract class AbstractLeaderboardsResource extends AbstractSailingServer jsonLeaderboard.put("maxCompetitorsCount", maxCompetitorsCount); final SettableScoreCorrection scoreCorrection = leaderboard.getScoreCorrection(); if (scoreCorrection != null) { - jsonLeaderboard.put("scoringComment", scoreCorrection.getComment()); + jsonLeaderboard.put(LeaderboardNameConstants.SCORINGCOMMENT, scoreCorrection.getComment()); TimePoint lastUpdateTimepoint = scoreCorrection.getTimePointOfLastCorrectionsValidity(); - jsonLeaderboard.put("lastScoringUpdate", lastUpdateTimepoint != null ? lastUpdateTimepoint.asMillis() : null); + jsonLeaderboard.put(LeaderboardNameConstants.LASTSCORINGUPDATE, lastUpdateTimepoint != null ? lastUpdateTimepoint.asMillis() : null); } else { - jsonLeaderboard.put("scoringComment", null); - jsonLeaderboard.put("lastScoringUpdate", null); + jsonLeaderboard.put(LeaderboardNameConstants.SCORINGCOMMENT, null); + jsonLeaderboard.put(LeaderboardNameConstants.LASTSCORINGUPDATE, null); } final JSONArray jsonColumnNames = new JSONArray(); final JSONArray trackedRacesInfo = new JSONArray(); @@ -174,7 +185,7 @@ public abstract class AbstractLeaderboardsResource extends AbstractSailingServer trackedRacesInfo.add(raceColumnJson); raceColumnJson.put("raceColumnName", raceColumn.getName()); final JSONArray fleetsJson = new JSONArray(); - raceColumnJson.put("fleets", fleetsJson); + raceColumnJson.put(LeaderboardNameConstants.FLEETS, fleetsJson); for (final Fleet fleet : raceColumn.getFleets()) { final JSONObject fleetJson = new JSONObject(); fleetsJson.add(fleetJson); diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/CompareServersResource.java b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/CompareServersResource.java index 5ff1075f248..288d0ef159f 100644 --- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/CompareServersResource.java +++ b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/CompareServersResource.java @@ -27,6 +27,7 @@ import javax.ws.rs.core.Response.Status; import javax.ws.rs.core.UriInfo; import org.json.simple.JSONArray; +import org.json.simple.JSONAware; import org.json.simple.JSONObject; import org.json.simple.JSONValue; import org.json.simple.parser.JSONParser; @@ -67,6 +68,7 @@ public class CompareServersResource extends AbstractSailingServerResource { LeaderboardNameConstants.ISMETALEADERBOARD, LeaderboardNameConstants.ISREGATTALEADERBOARD, LeaderboardNameConstants.SCORINGCOMMENT, LeaderboardNameConstants.LASTSCORINGUPDATE, LeaderboardNameConstants.SCORINGSCHEME, LeaderboardNameConstants.REGATTANAME, + LeaderboardNameConstants.DISCARDS, LeaderboardNameConstants.SERIES, LeaderboardNameConstants.ISMEDALSERIES, LeaderboardNameConstants.FLEETS, LeaderboardNameConstants.COLOR, LeaderboardNameConstants.ORDERING, LeaderboardNameConstants.RACES, LeaderboardNameConstants.ISMEDALRACE, LeaderboardNameConstants.ISTRACKED, @@ -244,13 +246,13 @@ public class CompareServersResource extends AbstractSailingServerResource { */ private Pair fetchLeaderboardgroupDetailsAndRemoveDuplicates(String server1, String server2, String leaderboardgroupId, String bearer1, String bearer2) throws Exception { - Object lgdetail1 = getLeaderboardgroupDetailsById(leaderboardgroupId, RemoteServerUtil.createBaseUrl(server1), bearer1); - Object lgdetail2 = getLeaderboardgroupDetailsById(leaderboardgroupId, RemoteServerUtil.createBaseUrl(server2), bearer2); - Pair result = removeUnnecessaryAndDuplicateFields(lgdetail1, lgdetail2); + final JSONObject lgdetail1 = getLeaderboardgroupDetailsById(leaderboardgroupId, RemoteServerUtil.createBaseUrl(server1), bearer1); + final JSONObject lgdetail2 = getLeaderboardgroupDetailsById(leaderboardgroupId, RemoteServerUtil.createBaseUrl(server2), bearer2); + final Pair result = removeUnnecessaryAndDuplicateFields(lgdetail1, lgdetail2); return result; } - Pair removeUnnecessaryAndDuplicateFields(Object lgdetail1, Object lgdetail2) { + Pair removeUnnecessaryAndDuplicateFields(JSONAware lgdetail1, JSONAware lgdetail2) { removeUnnecessaryFields(lgdetail1); removeUnnecessaryFields(lgdetail2); Pair result = removeDuplicateEntries(lgdetail1, lgdetail2); @@ -275,10 +277,10 @@ public class CompareServersResource extends AbstractSailingServerResource { /** * Fetches the JSON for a given leaderboardgroup UUID. */ - private Object getLeaderboardgroupDetailsById(String leaderboardgroupId, URL baseUrl, String bearer) throws Exception { - final URLConnection lgdetailc = HttpUrlConnectionHelper.redirectConnectionWithBearerToken( + private JSONObject getLeaderboardgroupDetailsById(String leaderboardgroupId, URL baseUrl, String bearer) throws Exception { + final URLConnection lgdetails = HttpUrlConnectionHelper.redirectConnectionWithBearerToken( RemoteServerUtil.createRemoteServerUrl(baseUrl, createLgDetailPath(leaderboardgroupId), null), bearer); - Object result = JSONValue.parse(new InputStreamReader(lgdetailc.getInputStream(), "UTF-8")); + JSONObject result = (JSONObject) JSONValue.parse(new InputStreamReader(lgdetails.getInputStream(), "UTF-8")); return result; } @@ -296,7 +298,7 @@ public class CompareServersResource extends AbstractSailingServerResource { * empty path string to start with, removing fields to be ignored or not to be compared in-place, modifying * the {@code json} object. */ - private void removeUnnecessaryFields(Object json) { + private void removeUnnecessaryFields(JSONAware json) { removeUnnecessaryFields(json, ""); } diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/LeaderboardGroupsResource.java b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/LeaderboardGroupsResource.java index dc5bb610f0e..a4eb7a0e6fd 100644 --- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/LeaderboardGroupsResource.java +++ b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/LeaderboardGroupsResource.java @@ -171,6 +171,10 @@ public class LeaderboardGroupsResource extends AbstractSailingServerResource { jsonLeaderboard.put(LeaderboardNameConstants.DISPLAYNAME, leaderboard.getDisplayName()); jsonLeaderboard.put(LeaderboardNameConstants.ISMETALEADERBOARD, isMetaLeaderboard); jsonLeaderboard.put(LeaderboardNameConstants.ISREGATTALEADERBOARD, isRegattaLeaderboard); + final JSONArray discardIndices = AbstractLeaderboardsResource.getDiscardingRuleAsJson(leaderboard); + if (discardIndices != null) { + jsonLeaderboard.put(LeaderboardNameConstants.DISCARDS, discardIndices); + } jsonLeaderboardEntries.add(jsonLeaderboard); SettableScoreCorrection scoreCorrection = leaderboard.getScoreCorrection(); if (scoreCorrection != null) {