bug 2467 #19: passing through RacingEventService as RaceLogResolver; added as transient field to TrackedRace, restored after initial load in RacingEventServiceImpl

This commit is contained in:
Axel Uhl committed 2015-06-20 23:57:50 +02:00
1 parent d2113723a9
commit 42dedcecfd
62 files changed
+376 -268

No files matched your search

@@ -42,7 +42,7 @@ public class EventRaceStatesJsonGetServlet extends AbstractJsonHttpServlet {
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Event "+eventIdParam+" not found");
} else {
EventRaceStatesSerializer eventRaceStatesSerializer = new EventRaceStatesSerializer(filterByCourseAreaParam,
filterByLeaderboardParam, filterByDayOffsetParam);
filterByLeaderboardParam, filterByDayOffsetParam, getService());
JSONObject result = eventRaceStatesSerializer.serialize(new Pair<Event, Iterable<Leaderboard>>(event, getService().getLeaderboards().values()));
setJsonResponseHeader(response);
result.writeJSONString(response.getWriter());
@@ -6,6 +6,7 @@ import java.util.Date;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RaceLogResolver;
import com.sap.sailing.domain.base.CourseArea;
import com.sap.sailing.domain.base.Event;
import com.sap.sailing.domain.base.Fleet;
@@ -19,31 +20,30 @@ public class EventRaceStatesSerializer implements JsonSerializer<Pair<Event, Ite
public static final String FIELD_EVENT_ID = "id";
public static final String FIELD_RACE_STATES = "raceStates";
private String filterByCourseArea;
private String filterByLeaderboardName;
private Calendar filterDay;
private final String filterByCourseArea;
private final String filterByLeaderboardName;
private final Calendar filterDay;
private final RaceLogResolver raceLogResolver;
public EventRaceStatesSerializer() {
this.filterByCourseArea = null;
this.filterByLeaderboardName = null;
this.filterDay = null;
}
public EventRaceStatesSerializer(String filterByCourseArea, String filterByLeaderboard, String filterByDayOffset) {
public EventRaceStatesSerializer(String filterByCourseArea, String filterByLeaderboard, String filterByDayOffset, RaceLogResolver raceLogResolver) {
this.filterByCourseArea = filterByCourseArea;
this.filterByLeaderboardName = filterByLeaderboard;
this.raceLogResolver = raceLogResolver;
Integer dayOffset = null;
if(filterByDayOffset != null) {
if (filterByDayOffset != null) {
Calendar myFilterDay;
try {
dayOffset = Integer.parseInt(filterByDayOffset);
filterDay = Calendar.getInstance();
filterDay.setTime(new Date());
filterDay.add(Calendar.DAY_OF_YEAR, dayOffset);
myFilterDay = Calendar.getInstance();
myFilterDay.setTime(new Date());
myFilterDay.add(Calendar.DAY_OF_YEAR, dayOffset);
} catch (NumberFormatException e) {
// invalid integer
filterDay = null;
myFilterDay = null;
}
filterDay = myFilterDay;
} else {
filterDay = null;
}
}
@@ -60,7 +60,7 @@ public class EventRaceStatesSerializer implements JsonSerializer<Pair<Event, Ite
for (CourseArea courseArea : event.getVenue().getCourseAreas()) {
if(filterByCourseArea == null || courseArea.getName().equals(filterByCourseArea)) {
for (Leaderboard leaderboard : leaderboards) {
RaceStateSerializer raceStateSerializer = new RaceStateSerializer(leaderboard);
RaceStateSerializer raceStateSerializer = new RaceStateSerializer(raceLogResolver);
if (filterByLeaderboardName == null || leaderboard.getName().equals(filterByLeaderboardName)) {
if (leaderboard.getDefaultCourseArea() != null && leaderboard.getDefaultCourseArea().equals(courseArea)) {
String leaderboardName = leaderboard.getName();
@@ -88,7 +88,7 @@ public class EventsResource extends AbstractSailingServerResource {
response = getBadEventErrorResponse(eventId);
} else {
EventRaceStatesSerializer eventRaceStatesSerializer = new EventRaceStatesSerializer(filterByCourseArea,
filterByLeaderboard, filterByDayOffset);
filterByLeaderboard, filterByDayOffset, getService());
JSONObject raceStatesJson = eventRaceStatesSerializer.serialize(new Pair<Event, Iterable<Leaderboard>>(event, getService().getLeaderboards().values()));
String json = raceStatesJson.toJSONString();
response = Response.ok(json, MediaType.APPLICATION_JSON).build();
@@ -7,9 +7,10 @@ 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.StartTimeFinder;
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.RaceLogResolver;
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;
@@ -17,23 +18,16 @@ 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.domain.racelog.analyzing.ServerSideRaceLogResolver;
import com.sap.sailing.domain.regattalike.HasRegattaLike;
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>> {
private final HasRegattaLike regattaLike;
private final RaceLogResolver raceLogResolver;
public RaceStateSerializer(Leaderboard leaderboard) {
if (leaderboard instanceof HasRegattaLike) {
regattaLike = (HasRegattaLike) leaderboard;
} else {
regattaLike = null;
}
public RaceStateSerializer(RaceLogResolver raceLogResolver) {
this.raceLogResolver = raceLogResolver;
}
@Override
@@ -49,7 +43,7 @@ public class RaceStateSerializer implements JsonSerializer<Pair<RaceColumn, Flee
result.put("trackedRaceId", raceIdentifier != null ? raceIdentifier.toString() : null);
RaceLog raceLog = raceColumn.getRaceLog(fleet);
if (raceLog != null && !raceLog.isEmpty()) {
ReadonlyRaceState state = ReadonlyRaceStateImpl.create(new ServerSideRaceLogResolver(regattaLike),raceLog);
ReadonlyRaceState state = ReadonlyRaceStateImpl.create(raceLogResolver, raceLog);
RaceLogRaceStatus status = state.getStatus();
TimePoint startTime = state.getStartTime();
TimePoint finishedTime = state.getFinishedTime();
@@ -91,7 +85,7 @@ public class RaceStateSerializer implements JsonSerializer<Pair<RaceColumn, Flee
boolean result = false;
RaceLog raceLog = raceColumn.getRaceLog(fleet);
if (raceLog != null && !raceLog.isEmpty()) {
TimePoint startTime = new StartTimeFinder(new ServerSideRaceLogResolver(regattaLike), raceLog).analyze().getStartTime();
TimePoint startTime = new StartTimeFinder(raceLogResolver, raceLog).analyze().getStartTime();
TimePoint finishedTime = new FinishedTimeFinder(raceLog).analyze();
RaceLogFlagEvent abortingFlagEvent = new AbortingFlagFinder(raceLog).analyze();
TimePoint abortingTime = abortingFlagEvent != null ? abortingFlagEvent.getLogicalTimePoint() : null;