removed redundancies between the two leaderboard service variants

Change-Id: I7186fbc350809c9acccec5cc99d82cf6d2565fff
This commit is contained in:
Axel Uhl committed 2018-04-19 22:11:47 +02:00
1 parent 96677487af
commit ab0efda1ba
5 files changed
+50 -51

No files matched your search

@@ -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);
@@ -118,7 +119,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);
@@ -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);
@@ -141,7 +142,7 @@ public class LeaderboardsResourceTest extends AbstractJaxRsApiTest {
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);
@@ -151,7 +152,7 @@ public class LeaderboardsResourceTest extends AbstractJaxRsApiTest {
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);
@@ -171,7 +172,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 +182,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 +191,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 +214,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 +224,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 +233,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 +245,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 +257,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);
@@ -1,7 +1,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;
@@ -17,7 +18,6 @@ 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;
@@ -91,27 +91,6 @@ 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("type", leaderboard.type.name());
jsonLeaderboard.put("canBoatsOfCompetitorsChangePerRace", leaderboard.canBoatsOfCompetitorsChangePerRace);
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());
@@ -132,7 +111,7 @@ public abstract class AbstractLeaderboardsResource extends AbstractSailingServer
jsonBoat.put("color", boat.getColor() != null ? boat.getColor().toString() : null);
}
private void writeCommonLeaderboardData(JSONObject jsonLeaderboard, Leaderboard leaderboard,
protected void writeCommonLeaderboardData(JSONObject jsonLeaderboard, Leaderboard leaderboard,
ResultStates resultState, TimePoint resultTimePoint, Integer maxCompetitorsCount) {
jsonLeaderboard.put("name", leaderboard.getName());
final String displayName = leaderboard.getDisplayName();
@@ -209,4 +188,23 @@ 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, requestTimePoint,
maxCompetitorsCount);
}
return jsonLeaderboard;
}
}
@@ -159,12 +159,8 @@ 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();
@@ -177,15 +173,17 @@ public class LeaderboardsResource extends AbstractLeaderboardsResource {
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, resultTimePoint, maxCompetitorsCount);
JSONArray jsonCompetitorEntries = new JSONArray();
jsonLeaderboard.put("competitors", jsonCompetitorEntries);
int counter = 1;
@@ -95,7 +95,8 @@ public class LeaderboardsResourceV2 extends AbstractLeaderboardsResource {
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 {
@@ -106,7 +107,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, resultTimePoint, maxCompetitorsCount);
Map<String, Map<String, Map<CompetitorWithBoatDTO, Integer>>> competitorRanksPerRaceColumnsAndFleets = new HashMap<>();
for (String raceColumnName : raceColumnsToShow) {
List<CompetitorWithBoatDTO> competitorsFromBestToWorst = leaderboardDTO.getCompetitorsFromBestToWorst(raceColumnName);