mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-11-14 06:18:12 +00:00
Merge branch 'master' into bug4491
This commit is contained in:
commit
8024c718aa
8 files changed
+116
-93
No files matched your search
@@ -460,24 +460,24 @@ public class RegattaImpl extends NamedImpl implements Regatta, RaceColumnListene
|
||||
|
||||
@Override
|
||||
public Iterable<Boat> getAllBoats() {
|
||||
Set<Boat> result = new HashSet<Boat>();
|
||||
|
||||
Set<Boat> result = new HashSet<>();
|
||||
boolean hasRaceColumns = false;
|
||||
for (RaceColumn rc : getRaceColumns()) {
|
||||
hasRaceColumns = true;
|
||||
for (final Fleet fleet : rc.getFleets()) {
|
||||
RaceDefinition raceDefinition = rc.getRaceDefinition(fleet);
|
||||
Util.addAll(raceDefinition.getBoats(), result);
|
||||
if (raceDefinition != null) {
|
||||
Util.addAll(raceDefinition.getBoats(), result);
|
||||
}
|
||||
}
|
||||
}
|
||||
final RegattaLog regattaLog = getRegattaLog();
|
||||
if (!hasRaceColumns) {
|
||||
// If no race exists, the regatta log-provided competitor registrations will not have
|
||||
// If no race exists, the regatta log-provided boat registrations will not have
|
||||
// been considered yet; add them:
|
||||
final Map<Competitor, Boat> regattaLogProvidedCompetitorsAndBoats = new CompetitorsAndBoatsInLogAnalyzer<>(regattaLog).analyze();
|
||||
Util.addAll(regattaLogProvidedCompetitorsAndBoats.values(), result);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
+20
-5
@@ -3,6 +3,7 @@ package com.sap.sailing.server.gateway.serialization.impl;
|
||||
import org.json.simple.JSONArray;
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.Regatta;
|
||||
import com.sap.sailing.domain.base.Series;
|
||||
@@ -16,19 +17,24 @@ public class RegattaJsonSerializer implements JsonSerializer<Regatta> {
|
||||
public static final String FIELD_SCORINGSYSTEM = "scoringSystem";
|
||||
public static final String FIELD_SERIES = "series";
|
||||
public static final String FIELD_COMPETITORS = "competitors";
|
||||
public static final String FIELD_BOATS = "boats";
|
||||
public static final String FIELD_TRACKED_RACES = "trackedRaces";
|
||||
public static final String FIELD_COURSE_AREA_ID = "courseAreaId";
|
||||
public static final String FIELD_CAN_BOATS_OF_COMPETITORS_CHANGE_PER_RACE = "canBoatsOfCompetitorsChangePerRace";
|
||||
|
||||
private final JsonSerializer<Series> seriesSerializer;
|
||||
private final JsonSerializer<Competitor> competitorSerializer;
|
||||
private final JsonSerializer<Boat> boatSerializer;
|
||||
|
||||
public RegattaJsonSerializer() {
|
||||
this(null, null);
|
||||
this(null, null, null);
|
||||
}
|
||||
|
||||
public RegattaJsonSerializer(JsonSerializer<Series> seriesSerializer, JsonSerializer<Competitor> competitorSerializer) {
|
||||
public RegattaJsonSerializer(JsonSerializer<Series> seriesSerializer,
|
||||
JsonSerializer<Competitor> competitorSerializer, JsonSerializer<Boat> boatSerializer) {
|
||||
this.seriesSerializer = seriesSerializer;
|
||||
this.competitorSerializer = competitorSerializer;
|
||||
this.boatSerializer = boatSerializer;
|
||||
}
|
||||
|
||||
public JSONObject serialize(Regatta regatta) {
|
||||
@@ -37,8 +43,10 @@ public class RegattaJsonSerializer implements JsonSerializer<Regatta> {
|
||||
result.put(FIELD_START_DATE, regatta.getStartDate() != null ? regatta.getStartDate().asMillis() : null);
|
||||
result.put(FIELD_END_DATE, regatta.getEndDate() != null ? regatta.getEndDate().asMillis() : null);
|
||||
result.put(FIELD_SCORINGSYSTEM, regatta.getScoringScheme().getType().name());
|
||||
result.put(FIELD_BOATCLASS, regatta.getBoatClass() != null ? regatta.getBoatClass().getName(): null);
|
||||
result.put(FIELD_COURSE_AREA_ID, regatta.getDefaultCourseArea() != null ? regatta.getDefaultCourseArea().getId().toString(): null);
|
||||
result.put(FIELD_BOATCLASS, regatta.getBoatClass() != null ? regatta.getBoatClass().getName() : null);
|
||||
result.put(FIELD_COURSE_AREA_ID,
|
||||
regatta.getDefaultCourseArea() != null ? regatta.getDefaultCourseArea().getId().toString() : null);
|
||||
result.put(FIELD_CAN_BOATS_OF_COMPETITORS_CHANGE_PER_RACE, regatta.canBoatsOfCompetitorsChangePerRace());
|
||||
if (seriesSerializer != null) {
|
||||
JSONArray seriesJson = new JSONArray();
|
||||
for (Series series : regatta.getSeries()) {
|
||||
@@ -48,11 +56,18 @@ public class RegattaJsonSerializer implements JsonSerializer<Regatta> {
|
||||
}
|
||||
if (competitorSerializer != null) {
|
||||
JSONArray competitorsJson = new JSONArray();
|
||||
for (Competitor competitor: regatta.getAllCompetitors()) {
|
||||
for (Competitor competitor : regatta.getAllCompetitors()) {
|
||||
competitorsJson.add(competitorSerializer.serialize(competitor));
|
||||
}
|
||||
result.put(FIELD_COMPETITORS, competitorsJson);
|
||||
}
|
||||
if (regatta.canBoatsOfCompetitorsChangePerRace() && boatSerializer != null) {
|
||||
JSONArray boatsJson = new JSONArray();
|
||||
for (Boat boat : regatta.getAllBoats()) {
|
||||
boatsJson.add(boatSerializer.serialize(boat));
|
||||
}
|
||||
result.put(FIELD_BOATS, boatsJson);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
+2
-1
@@ -25,6 +25,7 @@ import com.sap.sailing.domain.common.NotFoundException;
|
||||
import com.sap.sailing.domain.common.Position;
|
||||
import com.sap.sailing.domain.common.impl.DegreePosition;
|
||||
import com.sap.sailing.server.gateway.jaxrs.AbstractSailingServerResource;
|
||||
import com.sap.sailing.server.gateway.jaxrs.api.AbstractLeaderboardsResource;
|
||||
import com.sap.sailing.server.gateway.jaxrs.api.EventsResource;
|
||||
import com.sap.sailing.server.gateway.jaxrs.api.LeaderboardGroupsResource;
|
||||
import com.sap.sailing.server.gateway.jaxrs.api.LeaderboardsResource;
|
||||
@@ -159,7 +160,7 @@ public class EventResourceTest extends AbstractJaxRsApiTest {
|
||||
}
|
||||
|
||||
private Response getLeaderboard(String name) {
|
||||
return leaderboardsResource.getLeaderboard(name, LeaderboardsResource.ResultStates.Final, null);
|
||||
return leaderboardsResource.getLeaderboard(name, AbstractLeaderboardsResource.ResultStates.Final, null);
|
||||
}
|
||||
|
||||
private boolean hasAtLeastOneCourseArea(JSONObject objEvent) {
|
||||
|
||||
+17
-22
@@ -31,6 +31,7 @@ import com.sap.sailing.domain.leaderboard.RegattaLeaderboard;
|
||||
import com.sap.sailing.domain.ranking.OneDesignRankingMetric;
|
||||
import com.sap.sailing.domain.test.mock.MockedTrackedRaceWithStartTimeAndRanks;
|
||||
import com.sap.sailing.domain.tracking.TrackedRace;
|
||||
import com.sap.sailing.server.gateway.jaxrs.api.AbstractLeaderboardsResource;
|
||||
import com.sap.sailing.server.gateway.jaxrs.api.LeaderboardsResource;
|
||||
import com.sap.sse.common.TimePoint;
|
||||
import com.sap.sse.common.impl.MillisecondsTimePoint;
|
||||
@@ -83,7 +84,7 @@ public class LeaderboardsResourceTest extends AbstractJaxRsApiTest {
|
||||
dropAndCreateRegatta();
|
||||
|
||||
LeaderboardsResource resource = spyResource(new LeaderboardsResource());
|
||||
Response leaderboardReponse = resource.getLeaderboard(regatta.getName(), LeaderboardsResource.ResultStates.Final, null);
|
||||
Response leaderboardReponse = resource.getLeaderboard(regatta.getName(), AbstractLeaderboardsResource.ResultStates.Final, null);
|
||||
|
||||
String jsonString = (String) leaderboardReponse.getEntity();
|
||||
Object obj= JSONValue.parse(jsonString);
|
||||
@@ -93,7 +94,7 @@ public class LeaderboardsResourceTest extends AbstractJaxRsApiTest {
|
||||
String jsonResultState = (String) jsonObject.get("resultState");
|
||||
|
||||
assertTrue(regattaLeaderboard.getName().equals(jsonLeaderboardName));
|
||||
assertTrue(LeaderboardsResource.ResultStates.Final.name().equals(jsonResultState));
|
||||
assertTrue(AbstractLeaderboardsResource.ResultStates.Final.name().equals(jsonResultState));
|
||||
|
||||
// resultTimepoint should be null if there are no 'final' results yet
|
||||
TimePoint resultTimePoint = parseTimepointFromJsonNumber((Long) jsonObject.get("resultTimepoint"));
|
||||
@@ -108,7 +109,7 @@ public class LeaderboardsResourceTest extends AbstractJaxRsApiTest {
|
||||
dropAndCreateRegatta();
|
||||
|
||||
LeaderboardsResource resource = spyResource(new LeaderboardsResource());
|
||||
Response leaderboardReponse = resource.getLeaderboard(regatta.getName(), LeaderboardsResource.ResultStates.Final, null);
|
||||
Response leaderboardReponse = resource.getLeaderboard(regatta.getName(), AbstractLeaderboardsResource.ResultStates.Final, null);
|
||||
|
||||
String jsonString = (String) leaderboardReponse.getEntity();
|
||||
Object obj= JSONValue.parse(jsonString);
|
||||
@@ -117,8 +118,8 @@ public class LeaderboardsResourceTest extends AbstractJaxRsApiTest {
|
||||
String jsonLeaderboardName = (String) jsonObject.get("name");
|
||||
String jsonResultState = (String) jsonObject.get("resultState");
|
||||
|
||||
assertTrue(regattaLeaderboard.getName().equals(jsonLeaderboardName));
|
||||
assertTrue(LeaderboardsResource.ResultStates.Final.name().equals(jsonResultState));
|
||||
assertEquals(regattaLeaderboard.getName(), jsonLeaderboardName);
|
||||
assertEquals(AbstractLeaderboardsResource.ResultStates.Final.name(), jsonResultState);
|
||||
|
||||
TimePoint resultTimePoint = parseTimepointFromJsonNumber((Long) jsonObject.get("resultTimepoint"));
|
||||
assertNull(resultTimePoint);
|
||||
@@ -126,7 +127,7 @@ public class LeaderboardsResourceTest extends AbstractJaxRsApiTest {
|
||||
regattaLeaderboard.getScoreCorrection().setTimePointOfLastCorrectionsValidity(MillisecondsTimePoint.now());
|
||||
|
||||
LeaderboardsResource resource2 = spyResource(new LeaderboardsResource());
|
||||
Response leaderboardReponse2 = resource2.getLeaderboard(regatta.getName(), LeaderboardsResource.ResultStates.Final, null);
|
||||
Response leaderboardReponse2 = resource2.getLeaderboard(regatta.getName(), AbstractLeaderboardsResource.ResultStates.Final, null);
|
||||
|
||||
String jsonString2 = (String) leaderboardReponse2.getEntity();
|
||||
obj= JSONValue.parse(jsonString2);
|
||||
@@ -139,23 +140,17 @@ public class LeaderboardsResourceTest extends AbstractJaxRsApiTest {
|
||||
@Test
|
||||
public void testExportLeaderboardWithLiveResultStateAsJson() throws Exception {
|
||||
dropAndCreateRegatta();
|
||||
|
||||
LeaderboardsResource resource = spyResource(new LeaderboardsResource());
|
||||
Response leaderboardReponse = resource.getLeaderboard(regatta.getName(), LeaderboardsResource.ResultStates.Live, null);
|
||||
|
||||
Response leaderboardReponse = resource.getLeaderboard(regatta.getName(), AbstractLeaderboardsResource.ResultStates.Live, null);
|
||||
String jsonString = (String) leaderboardReponse.getEntity();
|
||||
Object obj= JSONValue.parse(jsonString);
|
||||
JSONObject jsonObject = (JSONObject) obj;
|
||||
|
||||
String jsonLeaderboardName = (String) jsonObject.get("name");
|
||||
String jsonResultState = (String) jsonObject.get("resultState");
|
||||
|
||||
assertTrue(regattaLeaderboard.getName().equals(jsonLeaderboardName));
|
||||
assertTrue(LeaderboardsResource.ResultStates.Live.name().equals(jsonResultState));
|
||||
|
||||
assertTrue(AbstractLeaderboardsResource.ResultStates.Live.name().equals(jsonResultState));
|
||||
TimePoint resultTimePoint = parseTimepointFromJsonNumber((Long) jsonObject.get("resultTimepoint"));
|
||||
assertNotNull(resultTimePoint);
|
||||
|
||||
JSONArray jsonCompetitors = (JSONArray) jsonObject.get("competitors");
|
||||
assertTrue(jsonCompetitors.size() == 4);
|
||||
}
|
||||
@@ -171,7 +166,7 @@ public class LeaderboardsResourceTest extends AbstractJaxRsApiTest {
|
||||
|
||||
// call the servlet for the first time
|
||||
LeaderboardsResource resource = spyResource(new LeaderboardsResource());
|
||||
Response leaderboardReponse = resource.getLeaderboard(regatta.getName(), LeaderboardsResource.ResultStates.Final, null);
|
||||
Response leaderboardReponse = resource.getLeaderboard(regatta.getName(), AbstractLeaderboardsResource.ResultStates.Final, null);
|
||||
|
||||
String jsonString = (String) leaderboardReponse.getEntity();
|
||||
Object obj= JSONValue.parse(jsonString);
|
||||
@@ -181,7 +176,7 @@ public class LeaderboardsResourceTest extends AbstractJaxRsApiTest {
|
||||
String jsonResultState = (String) jsonObject.get("resultState");
|
||||
|
||||
assertTrue(regattaLeaderboard.getName().equals(jsonLeaderboardName));
|
||||
assertTrue(LeaderboardsResource.ResultStates.Final.name().equals(jsonResultState));
|
||||
assertTrue(AbstractLeaderboardsResource.ResultStates.Final.name().equals(jsonResultState));
|
||||
|
||||
TimePoint resultTimePoint = parseTimepointFromJsonNumber((Long) jsonObject.get("resultTimepoint"));
|
||||
assertNotNull(resultTimePoint);
|
||||
@@ -190,7 +185,7 @@ public class LeaderboardsResourceTest extends AbstractJaxRsApiTest {
|
||||
Thread.sleep(100);
|
||||
|
||||
LeaderboardsResource resource2 = spyResource(new LeaderboardsResource());
|
||||
Response leaderboardReponse2 = resource2.getLeaderboard(regatta.getName(), LeaderboardsResource.ResultStates.Final, null);
|
||||
Response leaderboardReponse2 = resource2.getLeaderboard(regatta.getName(), AbstractLeaderboardsResource.ResultStates.Final, null);
|
||||
|
||||
String jsonString2 = (String) leaderboardReponse2.getEntity();
|
||||
Object obj2= JSONValue.parse(jsonString2);
|
||||
@@ -213,7 +208,7 @@ public class LeaderboardsResourceTest extends AbstractJaxRsApiTest {
|
||||
Integer maxCompetitorsCount = 2;
|
||||
|
||||
LeaderboardsResource resource = spyResource(new LeaderboardsResource());
|
||||
Response leaderboardReponse = resource.getLeaderboard(regatta.getName(), LeaderboardsResource.ResultStates.Final, null);
|
||||
Response leaderboardReponse = resource.getLeaderboard(regatta.getName(), AbstractLeaderboardsResource.ResultStates.Final, null);
|
||||
|
||||
String jsonString = (String) leaderboardReponse.getEntity();
|
||||
Object obj= JSONValue.parse(jsonString);
|
||||
@@ -223,7 +218,7 @@ public class LeaderboardsResourceTest extends AbstractJaxRsApiTest {
|
||||
String jsonResultState = (String) jsonObject.get("resultState");
|
||||
|
||||
assertTrue(regattaLeaderboard.getName().equals(jsonLeaderboardName));
|
||||
assertTrue(LeaderboardsResource.ResultStates.Final.name().equals(jsonResultState));
|
||||
assertTrue(AbstractLeaderboardsResource.ResultStates.Final.name().equals(jsonResultState));
|
||||
|
||||
TimePoint resultTimePoint = parseTimepointFromJsonNumber((Long) jsonObject.get("resultTimepoint"));
|
||||
assertNull(resultTimePoint);
|
||||
@@ -232,7 +227,7 @@ public class LeaderboardsResourceTest extends AbstractJaxRsApiTest {
|
||||
|
||||
// first call for 'all' competitors
|
||||
LeaderboardsResource resource2 = spyResource(new LeaderboardsResource());
|
||||
Response leaderboardReponse2 = resource2.getLeaderboard(regatta.getName(), LeaderboardsResource.ResultStates.Final, null);
|
||||
Response leaderboardReponse2 = resource2.getLeaderboard(regatta.getName(), AbstractLeaderboardsResource.ResultStates.Final, null);
|
||||
|
||||
jsonString = (String) leaderboardReponse2.getEntity();
|
||||
obj= JSONValue.parse(jsonString);
|
||||
@@ -244,7 +239,7 @@ public class LeaderboardsResourceTest extends AbstractJaxRsApiTest {
|
||||
|
||||
// second call with maxCompetitorsCount set
|
||||
LeaderboardsResource resource3 = spyResource(new LeaderboardsResource());
|
||||
Response leaderboardReponse3 = resource3.getLeaderboard(regatta.getName(), LeaderboardsResource.ResultStates.Final, maxCompetitorsCount);
|
||||
Response leaderboardReponse3 = resource3.getLeaderboard(regatta.getName(), AbstractLeaderboardsResource.ResultStates.Final, maxCompetitorsCount);
|
||||
|
||||
jsonString = (String) leaderboardReponse3.getEntity();
|
||||
obj= JSONValue.parse(jsonString);
|
||||
@@ -256,7 +251,7 @@ public class LeaderboardsResourceTest extends AbstractJaxRsApiTest {
|
||||
|
||||
// third call for 'all' competitors
|
||||
LeaderboardsResource resource4 = spyResource(new LeaderboardsResource());
|
||||
Response leaderboardReponse4 = resource4.getLeaderboard(regatta.getName(), LeaderboardsResource.ResultStates.Final, null);
|
||||
Response leaderboardReponse4 = resource4.getLeaderboard(regatta.getName(), AbstractLeaderboardsResource.ResultStates.Final, null);
|
||||
|
||||
jsonString = (String) leaderboardReponse4.getEntity();
|
||||
obj= JSONValue.parse(jsonString);
|
||||
|
||||
+43
-26
@@ -2,6 +2,8 @@ package com.sap.sailing.server.gateway.jaxrs.api;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import org.json.simple.JSONArray;
|
||||
@@ -14,10 +16,11 @@ 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.NoWindException;
|
||||
import com.sap.sailing.domain.common.dto.BoatDTO;
|
||||
import com.sap.sailing.domain.common.dto.CompetitorWithBoatDTO;
|
||||
import com.sap.sailing.domain.common.dto.LeaderboardDTO;
|
||||
import com.sap.sailing.domain.common.dto.RaceColumnDTO;
|
||||
import com.sap.sailing.domain.leaderboard.Leaderboard;
|
||||
import com.sap.sailing.domain.leaderboard.RegattaLeaderboard;
|
||||
import com.sap.sailing.domain.leaderboard.SettableScoreCorrection;
|
||||
import com.sap.sailing.domain.regattalike.HasRegattaLike;
|
||||
import com.sap.sailing.domain.tracking.MarkPassing;
|
||||
@@ -46,8 +49,7 @@ public abstract class AbstractLeaderboardsResource extends AbstractSailingServer
|
||||
return result;
|
||||
}
|
||||
|
||||
protected JSONObject createEmptyLeaderboardJson(Leaderboard leaderboard, ResultStates resultState,
|
||||
TimePoint requestTimePoint, Integer maxCompetitorsCount) throws NoWindException {
|
||||
protected JSONObject createEmptyLeaderboardJson(Leaderboard leaderboard, ResultStates resultState, Integer maxCompetitorsCount) throws NoWindException {
|
||||
JSONObject jsonLeaderboard = new JSONObject();
|
||||
writeCommonLeaderboardData(jsonLeaderboard, leaderboard, resultState, null, maxCompetitorsCount);
|
||||
JSONArray jsonCompetitorEntries = new JSONArray();
|
||||
@@ -89,43 +91,40 @@ public abstract class AbstractLeaderboardsResource extends AbstractSailingServer
|
||||
return jsonLeaderboard;
|
||||
}
|
||||
|
||||
protected void writeCommonLeaderboardData(JSONObject jsonLeaderboard, LeaderboardDTO leaderboard,
|
||||
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", leaderboard.getTimePoint() != null ? leaderboard.getTimePoint().getTime() : null);
|
||||
jsonLeaderboard.put("resultState", resultState.name());
|
||||
jsonLeaderboard.put("maxCompetitorsCount", maxCompetitorsCount);
|
||||
jsonLeaderboard.put("higherScoreIsBetter", leaderboard.isHigherScoreBetter());
|
||||
jsonLeaderboard.put("scoringComment", leaderboard.getComment());
|
||||
Date lastUpdateTimepoint = leaderboard.getTimePointOfLastCorrectionsValidity();
|
||||
jsonLeaderboard.put("lastScoringUpdate", lastUpdateTimepoint != null ? lastUpdateTimepoint.getTime() : null);
|
||||
JSONArray jsonColumnNames = new JSONArray();
|
||||
jsonLeaderboard.put("columnNames", jsonColumnNames);
|
||||
for (RaceColumnDTO raceColumn : leaderboard.getRaceList()) {
|
||||
jsonColumnNames.add(raceColumn.getName());
|
||||
}
|
||||
}
|
||||
|
||||
protected void writeCompetitorBaseData(JSONObject jsonCompetitor, CompetitorWithBoatDTO competitor, LeaderboardDTO leaderboard) {
|
||||
jsonCompetitor.put("name", competitor.getName());
|
||||
jsonCompetitor.put("shortName", competitor.getShortName());
|
||||
final String displayName = leaderboard.getDisplayName(competitor);
|
||||
jsonCompetitor.put("displayName", displayName == null ? competitor.getName() : displayName);
|
||||
jsonCompetitor.put("id", competitor.getIdAsString());
|
||||
jsonCompetitor.put("sailID", competitor.getSailID());
|
||||
jsonCompetitor.put("sailID", competitor.getSailID()); // only for backward compatibility
|
||||
jsonCompetitor.put("nationality", competitor.getThreeLetterIocCountryCode());
|
||||
jsonCompetitor.put("countryCode", competitor.getTwoLetterIsoCountryCode());
|
||||
}
|
||||
|
||||
private void writeCommonLeaderboardData(JSONObject jsonLeaderboard, Leaderboard leaderboard,
|
||||
ResultStates resultState, TimePoint resultTimePoint, Integer maxCompetitorsCount) {
|
||||
protected void writeBoatData(JSONObject jsonBoat, BoatDTO boat) {
|
||||
jsonBoat.put("name", boat.getName());
|
||||
jsonBoat.put("displayName", boat.getDisplayName());
|
||||
jsonBoat.put("id", boat.getIdAsString());
|
||||
jsonBoat.put("sailId", boat.getSailId());
|
||||
jsonBoat.put("boatClass", boat.getBoatClass().getName());
|
||||
jsonBoat.put("color", boat.getColor() != null ? boat.getColor().toString() : null);
|
||||
}
|
||||
|
||||
protected void writeCommonLeaderboardData(JSONObject jsonLeaderboard, Leaderboard leaderboard,
|
||||
ResultStates resultState, Date resultTimePoint, Integer maxCompetitorsCount) {
|
||||
jsonLeaderboard.put("name", leaderboard.getName());
|
||||
final String displayName = leaderboard.getDisplayName();
|
||||
jsonLeaderboard.put("displayName", displayName == null ? leaderboard.getName() : displayName);
|
||||
jsonLeaderboard.put("resultTimepoint", resultTimePoint != null ? resultTimePoint.asMillis() : null);
|
||||
jsonLeaderboard.put("resultTimepoint", resultTimePoint != null ? resultTimePoint.getTime() : null);
|
||||
jsonLeaderboard.put("resultState", resultState.name());
|
||||
jsonLeaderboard.put("type", leaderboard.getLeaderboardType().name());
|
||||
if (leaderboard instanceof RegattaLeaderboard) {
|
||||
RegattaLeaderboard regattaLeaderboard = (RegattaLeaderboard) leaderboard;
|
||||
jsonLeaderboard.put("canBoatsOfCompetitorsChangePerRace", regattaLeaderboard.getRegatta().canBoatsOfCompetitorsChangePerRace());
|
||||
} else {
|
||||
jsonLeaderboard.put("canBoatsOfCompetitorsChangePerRace", false);
|
||||
}
|
||||
jsonLeaderboard.put("maxCompetitorsCount", maxCompetitorsCount);
|
||||
SettableScoreCorrection scoreCorrection = leaderboard.getScoreCorrection();
|
||||
if (scoreCorrection != null) {
|
||||
@@ -189,4 +188,22 @@ public abstract class AbstractLeaderboardsResource extends AbstractSailingServer
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
protected abstract JSONObject getLeaderboardJson(Leaderboard leaderboard, TimePoint resultTimePoint,
|
||||
ResultStates resultState, Integer maxCompetitorsCount, List<String> raceColumnNames,
|
||||
List<String> raceDetailNames) throws NoWindException, InterruptedException, ExecutionException;
|
||||
|
||||
protected JSONObject getLeaderboardJson(ResultStates resultState, Integer maxCompetitorsCount,
|
||||
TimePoint requestTimePoint, Leaderboard leaderboard, TimePoint timePoint, List<String> raceColumnNames,
|
||||
List<String> raceDetailNames)
|
||||
throws NoWindException, InterruptedException, ExecutionException {
|
||||
final JSONObject jsonLeaderboard;
|
||||
if (timePoint != null || resultState == ResultStates.Live) {
|
||||
jsonLeaderboard = getLeaderboardJson(leaderboard, timePoint, resultState, maxCompetitorsCount, raceColumnNames, raceDetailNames);
|
||||
} else {
|
||||
jsonLeaderboard = createEmptyLeaderboardJson(leaderboard, resultState, maxCompetitorsCount);
|
||||
}
|
||||
return jsonLeaderboard;
|
||||
}
|
||||
|
||||
}
|
||||
+8
-20
@@ -149,7 +149,6 @@ public class LeaderboardsResource extends AbstractLeaderboardsResource {
|
||||
@DefaultValue("Live") @QueryParam("resultState") ResultStates resultState,
|
||||
@QueryParam("maxCompetitorsCount") Integer maxCompetitorsCount) {
|
||||
Response response;
|
||||
|
||||
TimePoint requestTimePoint = MillisecondsTimePoint.now();
|
||||
Leaderboard leaderboard = getService().getLeaderboardByName(leaderboardName);
|
||||
if (leaderboard == null) {
|
||||
@@ -160,16 +159,10 @@ public class LeaderboardsResource extends AbstractLeaderboardsResource {
|
||||
try {
|
||||
TimePoint timePoint = calculateTimePointForResultState(leaderboard, resultState);
|
||||
JSONObject jsonLeaderboard;
|
||||
if (timePoint != null || resultState == ResultStates.Live) {
|
||||
jsonLeaderboard = getLeaderboardJson(leaderboard, timePoint, resultState, maxCompetitorsCount);
|
||||
} else {
|
||||
jsonLeaderboard = createEmptyLeaderboardJson(leaderboard, resultState, requestTimePoint,
|
||||
maxCompetitorsCount);
|
||||
}
|
||||
|
||||
jsonLeaderboard = getLeaderboardJson(resultState, maxCompetitorsCount, requestTimePoint, leaderboard, timePoint,
|
||||
/* race column names */ null, /* race detail names */ null);
|
||||
StringWriter sw = new StringWriter();
|
||||
jsonLeaderboard.writeJSONString(sw);
|
||||
|
||||
String json = sw.getBuffer().toString();
|
||||
response = Response.ok(json).header("Content-Type", MediaType.APPLICATION_JSON + ";charset=UTF-8").build();
|
||||
} catch (NoWindException | InterruptedException | ExecutionException | IOException e) {
|
||||
@@ -177,28 +170,25 @@ public class LeaderboardsResource extends AbstractLeaderboardsResource {
|
||||
.type(MediaType.TEXT_PLAIN).build();
|
||||
}
|
||||
}
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
private JSONObject getLeaderboardJson(Leaderboard leaderboard,
|
||||
TimePoint resultTimePoint, ResultStates resultState, Integer maxCompetitorsCount)
|
||||
@Override
|
||||
protected JSONObject getLeaderboardJson(Leaderboard leaderboard,
|
||||
TimePoint resultTimePoint, ResultStates resultState, Integer maxCompetitorsCount, List<String> raceColumnNames,
|
||||
List<String> raceDetailNames)
|
||||
throws NoWindException, InterruptedException, ExecutionException {
|
||||
LeaderboardDTO leaderboardDTO = leaderboard.getLeaderboardDTO(
|
||||
resultTimePoint, Collections.<String> emptyList(), /* addOverallDetails */
|
||||
false, getService(), getService().getBaseDomainFactory(),
|
||||
/* fillTotalPointsUncorrected */false);
|
||||
|
||||
JSONObject jsonLeaderboard = new JSONObject();
|
||||
|
||||
writeCommonLeaderboardData(jsonLeaderboard, leaderboardDTO, resultState, maxCompetitorsCount);
|
||||
|
||||
writeCommonLeaderboardData(jsonLeaderboard, leaderboard, resultState, leaderboardDTO.getTimePoint(), maxCompetitorsCount);
|
||||
JSONArray jsonCompetitorEntries = new JSONArray();
|
||||
jsonLeaderboard.put("competitors", jsonCompetitorEntries);
|
||||
int counter = 1;
|
||||
for (CompetitorWithBoatDTO competitor : leaderboardDTO.competitors) {
|
||||
LeaderboardRowDTO leaderboardRowDTO = leaderboardDTO.rows.get(competitor);
|
||||
|
||||
if (maxCompetitorsCount != null && counter > maxCompetitorsCount) {
|
||||
break;
|
||||
}
|
||||
@@ -215,9 +205,7 @@ public class LeaderboardsResource extends AbstractLeaderboardsResource {
|
||||
.getCompetitorOrderingPerRaceColumnName().get(raceColumn.getName());
|
||||
JSONObject jsonEntry = new JSONObject();
|
||||
jsonRaceColumns.put(raceColumn.getName(), jsonEntry);
|
||||
LeaderboardEntryDTO leaderboardEntry = leaderboardRowDTO.fieldsByRaceColumnName.get(raceColumn
|
||||
.getName());
|
||||
|
||||
LeaderboardEntryDTO leaderboardEntry = leaderboardRowDTO.fieldsByRaceColumnName.get(raceColumn.getName());
|
||||
final FleetDTO fleetOfCompetitor = leaderboardEntry.fleet;
|
||||
jsonEntry.put("fleet", fleetOfCompetitor == null ? "" : fleetOfCompetitor.getName());
|
||||
jsonEntry.put("totalPoints", leaderboardEntry.totalPoints);
|
||||
|
||||
+17
-10
@@ -30,6 +30,7 @@ import com.sap.sailing.domain.common.DetailType;
|
||||
import com.sap.sailing.domain.common.ManeuverType;
|
||||
import com.sap.sailing.domain.common.MaxPointsReason;
|
||||
import com.sap.sailing.domain.common.NoWindException;
|
||||
import com.sap.sailing.domain.common.dto.BoatDTO;
|
||||
import com.sap.sailing.domain.common.dto.CompetitorWithBoatDTO;
|
||||
import com.sap.sailing.domain.common.dto.FleetDTO;
|
||||
import com.sap.sailing.domain.common.dto.LeaderboardDTO;
|
||||
@@ -42,7 +43,6 @@ import com.sap.sse.common.Distance;
|
||||
import com.sap.sse.common.Duration;
|
||||
import com.sap.sse.common.TimePoint;
|
||||
import com.sap.sse.common.Util.Pair;
|
||||
import com.sap.sse.common.impl.MillisecondsTimePoint;
|
||||
|
||||
@Path("/v2/leaderboards")
|
||||
public class LeaderboardsResourceV2 extends AbstractLeaderboardsResource {
|
||||
@@ -56,8 +56,6 @@ public class LeaderboardsResourceV2 extends AbstractLeaderboardsResource {
|
||||
@QueryParam("time") String time, @QueryParam("timeasmillis") Long timeasmillis,
|
||||
@QueryParam("maxCompetitorsCount") Integer maxCompetitorsCount) {
|
||||
Response response;
|
||||
|
||||
TimePoint requestTimePoint = MillisecondsTimePoint.now();
|
||||
Leaderboard leaderboard = getService().getLeaderboardByName(leaderboardName);
|
||||
if (leaderboard == null) {
|
||||
response = Response.status(Status.NOT_FOUND)
|
||||
@@ -76,13 +74,10 @@ public class LeaderboardsResourceV2 extends AbstractLeaderboardsResource {
|
||||
if (timePoint != null || resultState == ResultStates.Live) {
|
||||
jsonLeaderboard = getLeaderboardJson(leaderboard, timePoint, resultState, maxCompetitorsCount, raceColumnNames, raceDetails);
|
||||
} else {
|
||||
jsonLeaderboard = createEmptyLeaderboardJson(leaderboard, resultState, requestTimePoint,
|
||||
maxCompetitorsCount);
|
||||
jsonLeaderboard = createEmptyLeaderboardJson(leaderboard, resultState, maxCompetitorsCount);
|
||||
}
|
||||
|
||||
StringWriter sw = new StringWriter();
|
||||
jsonLeaderboard.writeJSONString(sw);
|
||||
|
||||
String json = sw.getBuffer().toString();
|
||||
response = Response.ok(json).header("Content-Type", MediaType.APPLICATION_JSON + ";charset=UTF-8").build();
|
||||
} catch (NoWindException | InterruptedException | ExecutionException | IOException e) {
|
||||
@@ -90,11 +85,11 @@ public class LeaderboardsResourceV2 extends AbstractLeaderboardsResource {
|
||||
.type(MediaType.TEXT_PLAIN).build();
|
||||
}
|
||||
}
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
private JSONObject getLeaderboardJson(Leaderboard leaderboard,
|
||||
@Override
|
||||
protected JSONObject getLeaderboardJson(Leaderboard leaderboard,
|
||||
TimePoint resultTimePoint, ResultStates resultState, Integer maxCompetitorsCount,
|
||||
List<String> raceColumnNames, List<String> raceDetailNames)
|
||||
throws NoWindException, InterruptedException, ExecutionException {
|
||||
@@ -105,7 +100,7 @@ public class LeaderboardsResourceV2 extends AbstractLeaderboardsResource {
|
||||
false, getService(), getService().getBaseDomainFactory(),
|
||||
/* fillTotalPointsUncorrected */false);
|
||||
JSONObject jsonLeaderboard = new JSONObject();
|
||||
writeCommonLeaderboardData(jsonLeaderboard, leaderboardDTO, resultState, maxCompetitorsCount);
|
||||
writeCommonLeaderboardData(jsonLeaderboard, leaderboard, resultState, leaderboardDTO.getTimePoint(), maxCompetitorsCount);
|
||||
Map<String, Map<String, Map<CompetitorWithBoatDTO, Integer>>> competitorRanksPerRaceColumnsAndFleets = new HashMap<>();
|
||||
for (String raceColumnName : raceColumnsToShow) {
|
||||
List<CompetitorWithBoatDTO> competitorsFromBestToWorst = leaderboardDTO.getCompetitorsFromBestToWorst(raceColumnName);
|
||||
@@ -136,6 +131,12 @@ public class LeaderboardsResourceV2 extends AbstractLeaderboardsResource {
|
||||
}
|
||||
JSONObject jsonCompetitor = new JSONObject();
|
||||
writeCompetitorBaseData(jsonCompetitor, competitor, leaderboardDTO);
|
||||
BoatDTO rowBoatDTO = leaderboardRowDTO.boat;
|
||||
if (rowBoatDTO != null) {
|
||||
JSONObject jsonBoat = new JSONObject();
|
||||
writeBoatData(jsonBoat, rowBoatDTO);
|
||||
jsonCompetitor.put("boat", jsonBoat);
|
||||
}
|
||||
jsonCompetitor.put("rank", competitorCounter);
|
||||
jsonCompetitor.put("carriedPoints", leaderboardRowDTO.carriedPoints);
|
||||
jsonCompetitor.put("netPoints", leaderboardRowDTO.netPoints);
|
||||
@@ -147,6 +148,12 @@ public class LeaderboardsResourceV2 extends AbstractLeaderboardsResource {
|
||||
JSONObject jsonEntry = new JSONObject();
|
||||
jsonRaceColumns.put(raceColumnName, jsonEntry);
|
||||
LeaderboardEntryDTO leaderboardEntry = leaderboardRowDTO.fieldsByRaceColumnName.get(raceColumnName);
|
||||
BoatDTO entryBoatDTO = leaderboardEntry.boat;
|
||||
if (entryBoatDTO != null) {
|
||||
JSONObject jsonBoat = new JSONObject();
|
||||
writeBoatData(jsonBoat, entryBoatDTO);
|
||||
jsonEntry.put("boat", jsonBoat);
|
||||
}
|
||||
final FleetDTO fleetOfCompetitor = leaderboardEntry.fleet;
|
||||
jsonEntry.put("fleet", fleetOfCompetitor == null ? "" : fleetOfCompetitor.getName());
|
||||
jsonEntry.put("totalPoints", leaderboardEntry.totalPoints);
|
||||
|
||||
+4
-4
@@ -190,9 +190,8 @@ public class RegattasResource extends AbstractSailingServerResource {
|
||||
} else {
|
||||
SeriesJsonSerializer seriesJsonSerializer = new SeriesJsonSerializer(new FleetJsonSerializer(
|
||||
new ColorJsonSerializer()));
|
||||
JsonSerializer<Regatta> regattaSerializer = new RegattaJsonSerializer(seriesJsonSerializer, null);
|
||||
JsonSerializer<Regatta> regattaSerializer = new RegattaJsonSerializer(seriesJsonSerializer, null, null);
|
||||
JSONObject serializedRegatta = regattaSerializer.serialize(regatta);
|
||||
|
||||
String json = serializedRegatta.toJSONString();
|
||||
response = Response.ok(json).header("Content-Type", MediaType.APPLICATION_JSON + ";charset=UTF-8").build();
|
||||
}
|
||||
@@ -216,9 +215,10 @@ public class RegattasResource extends AbstractSailingServerResource {
|
||||
response = getBadRegattaErrorResponse(regattaName);
|
||||
} else {
|
||||
NationalityJsonSerializer nationalityJsonSerializer = new NationalityJsonSerializer();
|
||||
BoatJsonSerializer boatJsonSerializer = new BoatJsonSerializer(new BoatClassJsonSerializer());
|
||||
CompetitorJsonSerializer competitorJsonSerializer = new CompetitorJsonSerializer(new TeamJsonSerializer(
|
||||
new PersonJsonSerializer(nationalityJsonSerializer)), new BoatJsonSerializer(new BoatClassJsonSerializer()));
|
||||
JsonSerializer<Regatta> regattaSerializer = new RegattaJsonSerializer(null, competitorJsonSerializer);
|
||||
new PersonJsonSerializer(nationalityJsonSerializer)), boatJsonSerializer);
|
||||
JsonSerializer<Regatta> regattaSerializer = new RegattaJsonSerializer(null, competitorJsonSerializer, boatJsonSerializer);
|
||||
JSONObject serializedRegatta = regattaSerializer.serialize(regatta);
|
||||
String json = serializedRegatta.toJSONString();
|
||||
response = Response.ok(json).header("Content-Type", MediaType.APPLICATION_JSON + ";charset=UTF-8").build();
|
||||
|
||||
Reference in new issue
Block a user