mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-21 03:30:12 +00:00
added the record race log event operation
This commit is contained in:
1 parent
fedd109b35
commit
2835d31357
10 files changed
+167
-95
No files matched your search
@@ -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);
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
+7
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
+12
-8
@@ -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);
|
||||
}
|
||||
+14
@@ -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);
|
||||
}
|
||||
}
|
||||
+7
@@ -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) {
|
||||
|
||||
}
|
||||
}
|
||||
+98
-82
@@ -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<RaceLogEvent> 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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
+8
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
+12
-5
@@ -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<Void> {
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user