moved some code to a RaceStateSerializer

This commit is contained in:
fmittag committed 2015-02-16 12:14:43 +01:00
1 parent f2d2b7784f
commit 648d9fd2da
3 files changed
+75 -52

No files matched your search

@@ -17,21 +17,17 @@ import com.sap.sailing.domain.abstractlog.race.RaceLog;
import com.sap.sailing.domain.abstractlog.race.RaceLogFlagEvent;
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.AbortingFlagFinder;
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.FinishedTimeFinder;
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.LastFlagsFinder;
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.StartTimeFinder;
import com.sap.sailing.domain.abstractlog.race.state.ReadonlyRaceState;
import com.sap.sailing.domain.abstractlog.race.state.impl.ReadonlyRaceStateImpl;
import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.gate.ReadonlyGateStartRacingProcedure;
import com.sap.sailing.domain.base.CourseArea;
import com.sap.sailing.domain.base.Event;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.RaceColumn;
import com.sap.sailing.domain.common.RaceIdentifier;
import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus;
import com.sap.sailing.domain.leaderboard.Leaderboard;
import com.sap.sailing.domain.racelog.RaceStateOfSameDayHelper;
import com.sap.sailing.server.gateway.AbstractJsonHttpServlet;
import com.sap.sailing.server.gateway.jaxrs.api.RaceStateSerializer;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.Util.Pair;
public class EventRaceStatesJsonGetServlet extends AbstractJsonHttpServlet {
private static final long serialVersionUID = -4820965681871902242L;
@@ -79,6 +75,7 @@ public class EventRaceStatesJsonGetServlet extends AbstractJsonHttpServlet {
result.put(FIELD_EVENT_ID, event.getId().toString());
JSONArray raceStatesLogEntriesJson = new JSONArray();
result.put(FIELD_RACE_STATES, raceStatesLogEntriesJson);
RaceStateSerializer raceStateSerializer = new RaceStateSerializer();
for (CourseArea courseArea : event.getVenue().getCourseAreas()) {
if(filterByCourseAreaParam == null || courseArea.getName().equals(filterByCourseAreaParam)) {
for (Leaderboard leaderboard : getService().getLeaderboards().values()) {
@@ -89,7 +86,7 @@ public class EventRaceStatesJsonGetServlet extends AbstractJsonHttpServlet {
for (RaceColumn raceColumn : leaderboard.getRaceColumns()) {
for (Fleet fleet : raceColumn.getFleets()) {
if(!filterByDayOffset || isRaceStateOfSameDay(raceColumn, fleet, dayToCheck)) {
JSONObject raceStateJson = createRaceStateJsonObject(raceColumn, fleet);
JSONObject raceStateJson = raceStateSerializer.serialize(new Pair<RaceColumn, Fleet>(raceColumn, fleet));
raceStateJson.put("courseAreaName", courseArea.getName());
raceStateJson.put("leaderboardName", leaderboardName);
raceStateJson.put("leaderboardDisplayName", leaderboardDisplayName);
@@ -122,50 +119,6 @@ public class EventRaceStatesJsonGetServlet extends AbstractJsonHttpServlet {
return result;
}
private JSONObject createRaceStateJsonObject(RaceColumn raceColumn, Fleet fleet) {
JSONObject result = new JSONObject();
result.put("raceName", raceColumn.getName());
result.put("fleetName", fleet.getName());
RaceIdentifier raceIdentifier = raceColumn.getRaceIdentifier(fleet);
result.put("trackedRaceName", raceIdentifier != null ? raceIdentifier.getRaceName() : null);
result.put("trackedRaceId", raceIdentifier != null ? raceIdentifier.toString() : null);
RaceLog raceLog = raceColumn.getRaceLog(fleet);
if (raceLog != null && !raceLog.isEmpty()) {
ReadonlyRaceState state = ReadonlyRaceStateImpl.create(raceLog);
RaceLogRaceStatus status = state.getStatus();
TimePoint startTime = state.getStartTime();
TimePoint finishedTime = state.getFinishedTime();
JSONObject raceLogStateJson = new JSONObject();
result.put("raceState", raceLogStateJson);
raceLogStateJson.put("startTime", startTime != null ? startTime.toString() : null);
raceLogStateJson.put("endTime", finishedTime != null ? finishedTime.toString() : null);
raceLogStateJson.put("lastStatus", status.name());
ReadonlyGateStartRacingProcedure procedure = state.getTypedReadonlyRacingProcedure(ReadonlyGateStartRacingProcedure.class);
if (procedure != null) {
raceLogStateJson.put("pathfinderId", procedure.getPathfinder());
raceLogStateJson.put("gateLineOpeningTime", procedure.getGateLaunchStopTime());
}
AbortingFlagFinder abortingFlagFinder = new AbortingFlagFinder(raceLog);
RaceLogFlagEvent abortingFlagEvent = abortingFlagFinder.analyze();
LastFlagsFinder lastFlagFinder = new LastFlagsFinder(raceLog);
RaceLogFlagEvent lastFlagEvent = LastFlagsFinder.getMostRecent(lastFlagFinder.analyze());
if (lastFlagEvent != null) {
setLastFlagField(raceLogStateJson, lastFlagEvent.getUpperFlag().name(), lastFlagEvent.getLowerFlag().name(), lastFlagEvent.isDisplayed());
} else if (status.equals(RaceLogRaceStatus.UNSCHEDULED) && abortingFlagEvent != null) {
setLastFlagField(raceLogStateJson, abortingFlagEvent.getUpperFlag().name(), abortingFlagEvent.getLowerFlag().name(), abortingFlagEvent.isDisplayed());
} else {
setLastFlagField(raceLogStateJson, null, null, null);
}
}
return result;
}
private void setLastFlagField(JSONObject raceLogStateJson, String upperFlagName, String lowerFlagName, Boolean isDisplayed) {
raceLogStateJson.put("lastUpperFlag", upperFlagName);
raceLogStateJson.put("lastLowerFlag", lowerFlagName);
raceLogStateJson.put("displayed", isDisplayed);
}
/**
* Tries to convert the given identifier to a UUID. When the identifier is not a UUID, null is returned.
* @param identifierToConvert the identifier as a String
@@ -6,6 +6,7 @@ import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
@@ -71,7 +72,8 @@ public class EventsResource extends AbstractSailingServerResource {
@GET
@Produces("application/json;charset=UTF-8")
@Path("{eventId}/racestates")
public Response getRaceStates(@PathParam("eventId") String eventId) {
public Response getRaceStates(@PathParam("eventId") String eventId, @QueryParam("filterByLeaderboard") String filterByLeaderboard,
@QueryParam("filterByCourseArea") String filterByCourseArea, @QueryParam("filterByDayOffset") String filterByDayOffset) {
return Response.noContent().build();
}
}
@@ -0,0 +1,68 @@
package com.sap.sailing.server.gateway.jaxrs.api;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.abstractlog.race.RaceLog;
import com.sap.sailing.domain.abstractlog.race.RaceLogFlagEvent;
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.AbortingFlagFinder;
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.LastFlagsFinder;
import com.sap.sailing.domain.abstractlog.race.state.ReadonlyRaceState;
import com.sap.sailing.domain.abstractlog.race.state.impl.ReadonlyRaceStateImpl;
import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.gate.ReadonlyGateStartRacingProcedure;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.RaceColumn;
import com.sap.sailing.domain.common.RaceIdentifier;
import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.Util.Pair;
public class RaceStateSerializer implements JsonSerializer<Pair<RaceColumn, Fleet>> {
@Override
public JSONObject serialize(Pair<RaceColumn, Fleet> raceColumnAndFleet) {
RaceColumn raceColumn = raceColumnAndFleet.getA();
Fleet fleet = raceColumnAndFleet.getB();
JSONObject result = new JSONObject();
result.put("raceName", raceColumn.getName());
result.put("fleetName", fleet.getName());
RaceIdentifier raceIdentifier = raceColumn.getRaceIdentifier(fleet);
result.put("trackedRaceName", raceIdentifier != null ? raceIdentifier.getRaceName() : null);
result.put("trackedRaceId", raceIdentifier != null ? raceIdentifier.toString() : null);
RaceLog raceLog = raceColumn.getRaceLog(fleet);
if (raceLog != null && !raceLog.isEmpty()) {
ReadonlyRaceState state = ReadonlyRaceStateImpl.create(raceLog);
RaceLogRaceStatus status = state.getStatus();
TimePoint startTime = state.getStartTime();
TimePoint finishedTime = state.getFinishedTime();
JSONObject raceLogStateJson = new JSONObject();
result.put("raceState", raceLogStateJson);
raceLogStateJson.put("startTime", startTime != null ? startTime.toString() : null);
raceLogStateJson.put("endTime", finishedTime != null ? finishedTime.toString() : null);
raceLogStateJson.put("lastStatus", status.name());
ReadonlyGateStartRacingProcedure procedure = state.getTypedReadonlyRacingProcedure(ReadonlyGateStartRacingProcedure.class);
if (procedure != null) {
raceLogStateJson.put("pathfinderId", procedure.getPathfinder());
raceLogStateJson.put("gateLineOpeningTime", procedure.getGateLaunchStopTime());
}
AbortingFlagFinder abortingFlagFinder = new AbortingFlagFinder(raceLog);
RaceLogFlagEvent abortingFlagEvent = abortingFlagFinder.analyze();
LastFlagsFinder lastFlagFinder = new LastFlagsFinder(raceLog);
RaceLogFlagEvent lastFlagEvent = LastFlagsFinder.getMostRecent(lastFlagFinder.analyze());
if (lastFlagEvent != null) {
setLastFlagField(raceLogStateJson, lastFlagEvent.getUpperFlag().name(), lastFlagEvent.getLowerFlag().name(), lastFlagEvent.isDisplayed());
} else if (status.equals(RaceLogRaceStatus.UNSCHEDULED) && abortingFlagEvent != null) {
setLastFlagField(raceLogStateJson, abortingFlagEvent.getUpperFlag().name(), abortingFlagEvent.getLowerFlag().name(), abortingFlagEvent.isDisplayed());
} else {
setLastFlagField(raceLogStateJson, null, null, null);
}
}
return result;
}
private void setLastFlagField(JSONObject raceLogStateJson, String upperFlagName, String lowerFlagName, Boolean isDisplayed) {
raceLogStateJson.put("lastUpperFlag", upperFlagName);
raceLogStateJson.put("lastLowerFlag", lowerFlagName);
raceLogStateJson.put("displayed", isDisplayed);
}
}