Merge branch 'master' into bug4491

This commit is contained in:
Maximilian Groß committed 2018-04-20 13:11:45 +02:00
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;
}
@@ -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;
}
}
@@ -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) {
@@ -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);
@@ -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;
}
}
@@ -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);
@@ -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);
@@ -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();