From 2835d3135779f210f74a01eb3fd1be82db71d5c0 Mon Sep 17 00:00:00 2001 From: Armin Zamani Date: Mon, 11 Feb 2013 00:03:13 +0100 Subject: [PATCH] added the record race log event operation --- .../sap/sailing/domain/base/RaceColumn.java | 3 + .../domain/base/RaceColumnInSeries.java | 3 + .../base/impl/RaceColumnInSeriesImpl.java | 7 + .../leaderboard/FlexibleRaceColumn.java | 20 +- .../leaderboard/impl/RaceColumnImpl.java | 14 ++ .../meta/MetaLeaderboardColumn.java | 7 + .../rc/AddToRaceLogJsonExportServlet.java | 180 ++++++++++-------- .../sailing/server/RacingEventService.java | 3 + .../server/impl/RacingEventServiceImpl.java | 8 + .../RecordRaceLogEvent.java | 17 +- 10 files changed, 167 insertions(+), 95 deletions(-) diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/RaceColumn.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/RaceColumn.java index 202f15398a2..8025f4a9f86 100644 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/RaceColumn.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/RaceColumn.java @@ -6,6 +6,7 @@ import com.sap.sailing.domain.common.impl.Util; import com.sap.sailing.domain.common.impl.Util.Pair; import com.sap.sailing.domain.leaderboard.Leaderboard; import com.sap.sailing.domain.racelog.RaceLog; +import com.sap.sailing.domain.racelog.RaceLogEvent; import com.sap.sailing.domain.tracking.TrackedRace; import com.sap.sailing.util.impl.RaceColumnListeners; @@ -147,4 +148,6 @@ public interface RaceColumn extends Named { RaceLog getRaceLog(String leaderboardName, Fleet fleet); + void recordRaceLogEvent(String leaderboardName, Fleet fleet, RaceLogEvent event); + } diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/RaceColumnInSeries.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/RaceColumnInSeries.java index 260fabc947d..6cd04d3ba9a 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/RaceColumnInSeries.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/RaceColumnInSeries.java @@ -1,6 +1,7 @@ package com.sap.sailing.domain.base; import com.sap.sailing.domain.racelog.RaceColumnIdentifier; +import com.sap.sailing.domain.racelog.RaceLogEvent; public interface RaceColumnInSeries extends RaceColumn { Series getSeries(); @@ -8,4 +9,6 @@ public interface RaceColumnInSeries extends RaceColumn { Regatta getRegatta(); RaceColumnIdentifier getRaceColumnIdentifier(String leaderboardName); + + void recordRaceLogEvent(String leaderboardName, Fleet fleet, RaceLogEvent event); } diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/RaceColumnInSeriesImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/RaceColumnInSeriesImpl.java index f84896db757..b02cae451d9 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/RaceColumnInSeriesImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/RaceColumnInSeriesImpl.java @@ -7,6 +7,7 @@ import com.sap.sailing.domain.base.Regatta; import com.sap.sailing.domain.base.Series; import com.sap.sailing.domain.racelog.RaceColumnIdentifier; import com.sap.sailing.domain.racelog.RaceLog; +import com.sap.sailing.domain.racelog.RaceLogEvent; import com.sap.sailing.domain.racelog.RaceLogStore; import com.sap.sailing.domain.racelog.impl.RaceColumnIdentifierImpl; import com.sap.sailing.domain.tracking.TrackedRace; @@ -102,5 +103,11 @@ public class RaceColumnInSeriesImpl extends AbstractRaceColumn implements RaceCo public RaceColumnIdentifier getRaceColumnIdentifier(String leaderboardName) { return new RaceColumnIdentifierImpl(leaderboardName, getName()); } + + @Override + public void recordRaceLogEvent(String leaderboardName, Fleet fleet, RaceLogEvent event) { + + raceLogStore.getRaceLog(getRaceColumnIdentifier(leaderboardName), fleet).add(event); + } } diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/FlexibleRaceColumn.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/FlexibleRaceColumn.java index 0a75aa83552..3a4b2a43dd7 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/FlexibleRaceColumn.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/FlexibleRaceColumn.java @@ -1,8 +1,12 @@ -package com.sap.sailing.domain.leaderboard; - -import com.sap.sailing.domain.base.RaceColumn; - -public interface FlexibleRaceColumn extends RaceColumn { - void setName(String newName); - void setIsMedalRace(boolean isMedalRace); -} +package com.sap.sailing.domain.leaderboard; + +import com.sap.sailing.domain.base.Fleet; +import com.sap.sailing.domain.base.RaceColumn; +import com.sap.sailing.domain.racelog.RaceLogEvent; + +public interface FlexibleRaceColumn extends RaceColumn { + void setName(String newName); + void setIsMedalRace(boolean isMedalRace); + + void recordRaceLogEvent(Fleet fleet, RaceLogEvent event); +} diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/RaceColumnImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/RaceColumnImpl.java index 6c6e027eec3..bbdc7209b52 100644 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/RaceColumnImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/RaceColumnImpl.java @@ -6,8 +6,10 @@ import java.util.List; import com.sap.sailing.domain.base.Fleet; import com.sap.sailing.domain.base.impl.AbstractRaceColumn; +import com.sap.sailing.domain.common.impl.Util; import com.sap.sailing.domain.leaderboard.FlexibleRaceColumn; import com.sap.sailing.domain.racelog.RaceLog; +import com.sap.sailing.domain.racelog.RaceLogEvent; import com.sap.sailing.domain.racelog.RaceLogStore; public class RaceColumnImpl extends AbstractRaceColumn implements FlexibleRaceColumn { @@ -67,4 +69,16 @@ public class RaceColumnImpl extends AbstractRaceColumn implements FlexibleRaceCo public RaceLog getRaceLog(Fleet fleet) { return getRaceLog("", fleet); } + + @Override + public void recordRaceLogEvent(Fleet fleet, RaceLogEvent event) { + if (!Util.contains(fleets, fleet)) + return; + raceLogStore.getRaceLog(fleet).add(event); + } + + @Override + public void recordRaceLogEvent(String leaderboardName, Fleet fleet, RaceLogEvent event) { + recordRaceLogEvent(fleet, event); + } } diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/meta/MetaLeaderboardColumn.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/meta/MetaLeaderboardColumn.java index a763420d3a1..1e4ae1355f6 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/meta/MetaLeaderboardColumn.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/meta/MetaLeaderboardColumn.java @@ -11,6 +11,7 @@ import com.sap.sailing.domain.common.RaceIdentifier; import com.sap.sailing.domain.leaderboard.Leaderboard; import com.sap.sailing.domain.leaderboard.ThresholdBasedResultDiscardingRule; import com.sap.sailing.domain.racelog.RaceLog; +import com.sap.sailing.domain.racelog.RaceLogEvent; import com.sap.sailing.domain.tracking.TrackedRace; /** @@ -153,4 +154,10 @@ public class MetaLeaderboardColumn extends SimpleAbstractRaceColumn implements R public RaceLog getRaceLog(String leaderboardName, Fleet fleet) { return null; } + + @Override + public void recordRaceLogEvent(String leaderboardName, Fleet fleet, + RaceLogEvent event) { + + } } diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/impl/rc/AddToRaceLogJsonExportServlet.java b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/impl/rc/AddToRaceLogJsonExportServlet.java index 1d9146ad408..e2006427cf0 100644 --- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/impl/rc/AddToRaceLogJsonExportServlet.java +++ b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/impl/rc/AddToRaceLogJsonExportServlet.java @@ -1,82 +1,98 @@ -package com.sap.sailing.server.gateway.impl.rc; - -import java.io.IOException; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.json.simple.JSONObject; -import org.json.simple.JSONValue; -import org.json.simple.parser.ParseException; - -import com.sap.sailing.domain.base.Fleet; -import com.sap.sailing.domain.base.RaceColumn; -import com.sap.sailing.domain.leaderboard.Leaderboard; -import com.sap.sailing.server.RacingEventService; -import com.sap.sailing.server.gateway.deserialization.impl.Helpers; -import com.sap.sailing.server.gateway.impl.JsonExportServlet; - -public class AddToRaceLogJsonExportServlet extends JsonExportServlet { - private static final long serialVersionUID = 7704668926551060433L; - - public static final String PARAMS_LEADERBOARD_NAME = "leaderboard"; - public static final String PARAMS_RACE_COLUMN_NAME = "raceColumn"; - public static final String PARAMS_RACE_FLEET_NAME = "fleet"; - - @Override - protected void doPost(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - - String leaderboardName = request.getParameter(PARAMS_LEADERBOARD_NAME); - if (leaderboardName == null) { - response.sendError(HttpServletResponse.SC_BAD_REQUEST, String.format("Missing parameter '%s'.", PARAMS_LEADERBOARD_NAME)); - return; - } - - String raceColumnName = request.getParameter(PARAMS_RACE_COLUMN_NAME); - if (raceColumnName == null) { - response.sendError(HttpServletResponse.SC_BAD_REQUEST, String.format("Missing parameter '%s'.", PARAMS_RACE_COLUMN_NAME)); - return; - } - - String fleetName = request.getParameter(PARAMS_RACE_FLEET_NAME); - if (fleetName == null) { - response.sendError(HttpServletResponse.SC_BAD_REQUEST, String.format("Missing parameter '%s'.", PARAMS_RACE_FLEET_NAME)); - return; - } - - RacingEventService service = getService(); - - Leaderboard leaderboard = service.getLeaderboardByName(leaderboardName); - if (leaderboard == null) { - response.sendError(HttpServletResponse.SC_NOT_FOUND, "No such leaderboard found."); - return; - } - - RaceColumn raceColumn = leaderboard.getRaceColumnByName(raceColumnName); - if (raceColumn == null) { - response.sendError(HttpServletResponse.SC_NOT_FOUND, "No such race column found."); - return; - } - - Fleet fleet = raceColumn.getFleetByName(fleetName); - if (fleet == null) { - response.sendError(HttpServletResponse.SC_NOT_FOUND, "No such fleet found."); - return; - } - - /// TODO: get RaceLog of RaceColumn by Fleet - - try { - Object requestBody = JSONValue.parseWithException(request.getReader()); - JSONObject requestObject = Helpers.toJSONObjectSafe(requestBody); - System.out.println(requestObject); - } catch (ParseException pe) { - response.sendError(HttpServletResponse.SC_BAD_REQUEST, String.format("Invalid JSON in request body:\n%s", pe)); - return; - } - - } - -} +package com.sap.sailing.server.gateway.impl.rc; + +import java.io.IOException; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.json.simple.JSONObject; +import org.json.simple.JSONValue; +import org.json.simple.parser.ParseException; + +import com.sap.sailing.domain.base.Fleet; +import com.sap.sailing.domain.base.RaceColumn; +import com.sap.sailing.domain.leaderboard.Leaderboard; +import com.sap.sailing.domain.racelog.RaceLogEvent; +import com.sap.sailing.server.RacingEventService; +import com.sap.sailing.server.gateway.deserialization.JsonDeserializer; +import com.sap.sailing.server.gateway.deserialization.impl.Helpers; +import com.sap.sailing.server.gateway.deserialization.impl.RaceLogCourseAreaChangedEventDeserializer; +import com.sap.sailing.server.gateway.deserialization.impl.RaceLogEventDeserializer; +import com.sap.sailing.server.gateway.deserialization.impl.RaceLogFlagEventDeserializer; +import com.sap.sailing.server.gateway.deserialization.impl.RaceLogStartTimeEventDeserializer; +import com.sap.sailing.server.gateway.impl.JsonExportServlet; + +public class AddToRaceLogJsonExportServlet extends JsonExportServlet { + private static final long serialVersionUID = 7704668926551060433L; + + public static final String PARAMS_LEADERBOARD_NAME = "leaderboard"; + public static final String PARAMS_RACE_COLUMN_NAME = "raceColumn"; + public static final String PARAMS_RACE_FLEET_NAME = "fleet"; + + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + + String leaderboardName = request.getParameter(PARAMS_LEADERBOARD_NAME); + if (leaderboardName == null) { + response.sendError(HttpServletResponse.SC_BAD_REQUEST, String.format("Missing parameter '%s'.", PARAMS_LEADERBOARD_NAME)); + return; + } + + String raceColumnName = request.getParameter(PARAMS_RACE_COLUMN_NAME); + if (raceColumnName == null) { + response.sendError(HttpServletResponse.SC_BAD_REQUEST, String.format("Missing parameter '%s'.", PARAMS_RACE_COLUMN_NAME)); + return; + } + + String fleetName = request.getParameter(PARAMS_RACE_FLEET_NAME); + if (fleetName == null) { + response.sendError(HttpServletResponse.SC_BAD_REQUEST, String.format("Missing parameter '%s'.", PARAMS_RACE_FLEET_NAME)); + return; + } + + RacingEventService service = getService(); + + Leaderboard leaderboard = service.getLeaderboardByName(leaderboardName); + if (leaderboard == null) { + response.sendError(HttpServletResponse.SC_NOT_FOUND, "No such leaderboard found."); + return; + } + + RaceColumn raceColumn = leaderboard.getRaceColumnByName(raceColumnName); + if (raceColumn == null) { + response.sendError(HttpServletResponse.SC_NOT_FOUND, "No such race column found."); + return; + } + + Fleet fleet = raceColumn.getFleetByName(fleetName); + if (fleet == null) { + response.sendError(HttpServletResponse.SC_NOT_FOUND, "No such fleet found."); + return; + } + /// TODO: get RaceLog of RaceColumn by Fleet + //service.apply(new RecordRaceLogEvent(leaderboardName, raceColumnName, fleetName, event)); + JsonDeserializer deserializer = + new RaceLogEventDeserializer( + new RaceLogFlagEventDeserializer(), + new RaceLogStartTimeEventDeserializer(), + new RaceLogCourseAreaChangedEventDeserializer()); + + try { + Object requestBody = JSONValue.parseWithException(request.getReader()); + JSONObject requestObject = Helpers.toJSONObjectSafe(requestBody); + System.out.println(requestObject); + + RaceLogEvent logEvent = deserializer.deserialize(requestObject); + + service.recordRaceLogEvent(leaderboardName, raceColumnName, fleetName, logEvent); + + } catch (ParseException pe) { + response.sendError(HttpServletResponse.SC_BAD_REQUEST, String.format("Invalid JSON in request body:\n%s", pe)); + return; + } + + } + +} diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/RacingEventService.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/RacingEventService.java index 0035f1c9640..ee31231c0bb 100755 --- a/java/com.sap.sailing.server/src/com/sap/sailing/server/RacingEventService.java +++ b/java/com.sap.sailing.server/src/com/sap/sailing/server/RacingEventService.java @@ -39,6 +39,7 @@ import com.sap.sailing.domain.leaderboard.LeaderboardGroup; import com.sap.sailing.domain.leaderboard.LeaderboardRegistry; import com.sap.sailing.domain.leaderboard.RegattaLeaderboard; import com.sap.sailing.domain.leaderboard.ScoringScheme; +import com.sap.sailing.domain.racelog.RaceLogEvent; import com.sap.sailing.domain.racelog.RaceLogStore; import com.sap.sailing.domain.swisstimingadapter.SwissTimingFactory; import com.sap.sailing.domain.tracking.RaceListener; @@ -495,5 +496,7 @@ public interface RacingEventService extends TrackedRegattaRegistry, RegattaFetch com.sap.sailing.domain.swisstimingadapter.DomainFactory getSwissTimingDomainFactory(); CourseArea getCourseArea(Serializable courseAreaId); + + void recordRaceLogEvent(String leaderboardName, String raceColumnName, String fleetName, RaceLogEvent event); } diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RacingEventServiceImpl.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RacingEventServiceImpl.java index ec25469acba..333004c7247 100755 --- a/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RacingEventServiceImpl.java +++ b/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RacingEventServiceImpl.java @@ -73,6 +73,7 @@ import com.sap.sailing.domain.persistence.MongoFactory; import com.sap.sailing.domain.persistence.MongoObjectFactory; import com.sap.sailing.domain.persistence.MongoRaceLogStoreFactory; import com.sap.sailing.domain.racelog.RaceColumnIdentifier; +import com.sap.sailing.domain.racelog.RaceLogEvent; import com.sap.sailing.domain.racelog.RaceLogStore; import com.sap.sailing.domain.racelog.impl.RaceColumnIdentifierImpl; import com.sap.sailing.domain.swisstimingadapter.Race; @@ -117,6 +118,7 @@ import com.sap.sailing.server.operationaltransformation.CreateEvent; import com.sap.sailing.server.operationaltransformation.CreateTrackedRace; import com.sap.sailing.server.operationaltransformation.RecordCompetitorGPSFix; import com.sap.sailing.server.operationaltransformation.RecordMarkGPSFix; +import com.sap.sailing.server.operationaltransformation.RecordRaceLogEvent; import com.sap.sailing.server.operationaltransformation.RecordWindFix; import com.sap.sailing.server.operationaltransformation.RemoveEvent; import com.sap.sailing.server.operationaltransformation.RemoveWindFix; @@ -1651,4 +1653,10 @@ public class RacingEventServiceImpl implements RacingEventService, RegattaListen return courseArea; } + @Override + public void recordRaceLogEvent(String leaderboardName, String raceColumnName, String fleetName, RaceLogEvent event) { + RecordRaceLogEvent command = new RecordRaceLogEvent(leaderboardName, raceColumnName, fleetName, event); + apply(command); + } + } diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/RecordRaceLogEvent.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/RecordRaceLogEvent.java index 1b7735a3cbc..1b0b5683dea 100644 --- a/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/RecordRaceLogEvent.java +++ b/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/RecordRaceLogEvent.java @@ -1,5 +1,8 @@ package com.sap.sailing.server.operationaltransformation; +import com.sap.sailing.domain.base.Fleet; +import com.sap.sailing.domain.base.RaceColumn; +import com.sap.sailing.domain.leaderboard.Leaderboard; import com.sap.sailing.domain.racelog.RaceLogEvent; import com.sap.sailing.server.RacingEventService; import com.sap.sailing.server.RacingEventServiceOperation; @@ -7,21 +10,25 @@ import com.sap.sailing.server.RacingEventServiceOperation; public class RecordRaceLogEvent extends AbstractRacingEventServiceOperation { private static final long serialVersionUID = -2532392938428607006L; - private final String leaderboardOrRegattaName; + private final String leaderboardName; private final String raceColumnName; + private final String fleetName; private final RaceLogEvent event; - public RecordRaceLogEvent(String name, String raceColumnName, RaceLogEvent event) { + public RecordRaceLogEvent(String leaderboardName, String raceColumnName, String fleetName, RaceLogEvent event) { super(); - this.leaderboardOrRegattaName = name; + this.leaderboardName = leaderboardName; this.raceColumnName = raceColumnName; + this.fleetName = fleetName; this.event = event; } @Override public Void internalApplyTo(RacingEventService toState) throws Exception { -// DynamicTrackedRace trackedRace = (DynamicTrackedRace) toState.getTrackedRace(getRaceIdentifier()); -// trackedRace.recordRaceLogEvent(event); + Leaderboard leaderboard = toState.getLeaderboardByName(leaderboardName); + RaceColumn raceColumn = leaderboard.getRaceColumnByName(raceColumnName); + Fleet fleet = raceColumn.getFleetByName(fleetName); + raceColumn.recordRaceLogEvent(leaderboardName, fleet, event); return null; }