mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-15 16:51:07 +00:00
added gate start specific buttons (pathfinder and gatelineopeningtime) to ui. added pathfinder-event to domain. some other fixes. SORRY: serialization-test does not work.
This commit is contained in:
1 parent
dd4d93efed
commit
8e45e3a1b6
25 files changed
+446
-6
No files matched your search
+1
-1
@@ -69,5 +69,5 @@ public enum FieldNames {
|
||||
RACE_LOG_EVENT, RACE_LOG_EVENT_PASS_ID, RACE_LOG_EVENT_ID, RACE_LOG_EVENT_CREATED_AT, RACE_LOG_EVENT_INVOLVED_BOATS, RACE_LOG_EVENT_FLAG_UPPER, RACE_LOG_EVENT_FLAG_LOWER,
|
||||
RACE_LOG_EVENT_FLAG_DISPLAYED, RACE_LOG_EVENT_START_TIME, RACE_LOG_EVENT_CLASS, RACE_LOG_EVENT_NEXT_STATUS, RACE_LOG_COURSE_DESIGN, WAYPOINT_ID,
|
||||
WAYPOINT_NAME, WAYPOINT_PASSINGSIDE, CONTROLPOINT, CONTROLPOINT_CLASS, MARK_ID, MARK_COLOR, MARK_NAME, MARK_PATTERN, MARK_SHAPE, MARK_TYPE,
|
||||
CONTROLPOINT_VALUE, GATE_ID, GATE_NAME, GATE_LEFT, GATE_RIGHT, RACE_LOG_POSITIONED_COMPETITORS;
|
||||
CONTROLPOINT_VALUE, GATE_ID, GATE_NAME, GATE_LEFT, GATE_RIGHT, RACE_LOG_POSITIONED_COMPETITORS, RACE_LOG_PATHFINDER_ID;
|
||||
}
|
||||
+18
@@ -52,6 +52,7 @@ import com.sap.sailing.domain.racelog.RaceLogFinishPositioningListChangedEvent;
|
||||
import com.sap.sailing.domain.racelog.RaceLogFlagEvent;
|
||||
import com.sap.sailing.domain.racelog.RaceLogIdentifier;
|
||||
import com.sap.sailing.domain.racelog.RaceLogPassChangeEvent;
|
||||
import com.sap.sailing.domain.racelog.RaceLogPathfinderEvent;
|
||||
import com.sap.sailing.domain.racelog.RaceLogRaceStatusEvent;
|
||||
import com.sap.sailing.domain.racelog.RaceLogStartTimeEvent;
|
||||
import com.sap.sailing.domain.tracking.Positioned;
|
||||
@@ -575,6 +576,13 @@ public class MongoObjectFactoryImpl implements MongoObjectFactory {
|
||||
result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogFinishPositioningConfirmedEvent(finishPositioningConfirmedEvent));
|
||||
return result;
|
||||
}
|
||||
|
||||
public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogPathfinderEvent pathfinderEvent) {
|
||||
BasicDBObject result = new BasicDBObject();
|
||||
result.put(FieldNames.RACE_LOG_IDENTIFIER.name(), MongoUtils.escapeDollarAndDot(raceLogIdentifier.getIdentifier().toString()));
|
||||
result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogPathfinderEventEvent(pathfinderEvent));
|
||||
return result;
|
||||
}
|
||||
|
||||
private DBObject storeRaceLogStartTimeEvent(RaceLogStartTimeEvent startTimeEvent) {
|
||||
DBObject result = new BasicDBObject();
|
||||
@@ -674,6 +682,16 @@ public class MongoObjectFactoryImpl implements MongoObjectFactory {
|
||||
return result;
|
||||
}
|
||||
|
||||
private Object storeRaceLogPathfinderEventEvent(RaceLogPathfinderEvent pathfinderEvent) {
|
||||
DBObject result = new BasicDBObject();
|
||||
storeRaceLogEventProperties(pathfinderEvent, result);
|
||||
|
||||
result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogPathfinderEvent.class.getSimpleName());
|
||||
|
||||
result.put(FieldNames.RACE_LOG_PATHFINDER_ID.name(), pathfinderEvent.getPathfinderId());
|
||||
return result;
|
||||
}
|
||||
|
||||
private BasicDBList storePositionedCompetitors(List<Triple<Serializable, String, MaxPointsReason>> positionedCompetitors) {
|
||||
BasicDBList dbList = new BasicDBList();
|
||||
|
||||
|
||||
+7
@@ -12,6 +12,7 @@ import com.sap.sailing.domain.racelog.RaceLogFinishPositioningListChangedEvent;
|
||||
import com.sap.sailing.domain.racelog.RaceLogFlagEvent;
|
||||
import com.sap.sailing.domain.racelog.RaceLogIdentifier;
|
||||
import com.sap.sailing.domain.racelog.RaceLogPassChangeEvent;
|
||||
import com.sap.sailing.domain.racelog.RaceLogPathfinderEvent;
|
||||
import com.sap.sailing.domain.racelog.RaceLogRaceStatusEvent;
|
||||
import com.sap.sailing.domain.racelog.RaceLogStartTimeEvent;
|
||||
|
||||
@@ -76,4 +77,10 @@ public class MongoRaceLogListener implements RaceLogEventVisitor {
|
||||
raceLogsCollection.insert(finishPositioningConfirmedEventTrackEntry);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visit(RaceLogPathfinderEvent event) {
|
||||
DBObject pathfinderEventTrackEntry = mongoObjectFactory.storeRaceLogEntry(raceLogIdentifier, event);
|
||||
raceLogsCollection.insert(pathfinderEventTrackEntry);
|
||||
}
|
||||
|
||||
}
|
||||
+4
@@ -38,4 +38,8 @@ public interface RaceLogEventFactory {
|
||||
|
||||
RaceLogFinishPositioningConfirmedEvent createFinishPositioningConfirmedEvent(TimePoint timePoint, Serializable id, List<Competitor> competitors, int passId);
|
||||
RaceLogFinishPositioningConfirmedEvent createFinishPositioningConfirmedEvent(TimePoint timePoint, int passId);
|
||||
|
||||
RaceLogPathfinderEvent createPathfinderEvent(TimePoint timePoint, Serializable id, List<Competitor> competitors, int passId, String pathfinderId);
|
||||
RaceLogPathfinderEvent createPathfinderEvent(TimePoint timePoint, int passId, String pathfinderId);
|
||||
|
||||
}
|
||||
+2
@@ -16,4 +16,6 @@ public interface RaceLogEventVisitor {
|
||||
public void visit(RaceLogFinishPositioningListChangedEvent event);
|
||||
|
||||
public void visit(RaceLogFinishPositioningConfirmedEvent event);
|
||||
|
||||
public void visit(RaceLogPathfinderEvent event);
|
||||
}
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
package com.sap.sailing.domain.racelog;
|
||||
|
||||
|
||||
public interface RaceLogGatelineOpeneningTimeEvent extends RaceLogEvent {
|
||||
long getGateLineOpeningTime();
|
||||
}
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
package com.sap.sailing.domain.racelog;
|
||||
|
||||
|
||||
public interface RaceLogPathfinderEvent extends RaceLogEvent {
|
||||
String getPathfinderId();
|
||||
}
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
package com.sap.sailing.domain.racelog.analyzing.impl;
|
||||
|
||||
import com.sap.sailing.domain.racelog.RaceLog;
|
||||
import com.sap.sailing.domain.racelog.RaceLogEvent;
|
||||
import com.sap.sailing.domain.racelog.RaceLogPathfinderEvent;
|
||||
|
||||
public class PathfinderFinder extends RaceLogAnalyzer {
|
||||
|
||||
public PathfinderFinder(RaceLog raceLog) {
|
||||
super(raceLog);
|
||||
}
|
||||
|
||||
public String getPathfinderId() {
|
||||
String pathfinderId;
|
||||
this.raceLog.lockForRead();
|
||||
try {
|
||||
pathfinderId = searchForPathfinderId();
|
||||
} finally {
|
||||
this.raceLog.unlockAfterRead();
|
||||
}
|
||||
|
||||
return pathfinderId;
|
||||
}
|
||||
|
||||
private String searchForPathfinderId() {
|
||||
String pathfinderId = null;
|
||||
|
||||
for (RaceLogEvent event : getPassEvents()) {
|
||||
if (event instanceof RaceLogPathfinderEvent) {
|
||||
pathfinderId = ((PathfinderFinder) event).getPathfinderId();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return pathfinderId;
|
||||
}
|
||||
|
||||
}
|
||||
+12
@@ -19,6 +19,7 @@ import com.sap.sailing.domain.racelog.RaceLogEventFactory;
|
||||
import com.sap.sailing.domain.racelog.RaceLogFinishPositioningConfirmedEvent;
|
||||
import com.sap.sailing.domain.racelog.RaceLogFlagEvent;
|
||||
import com.sap.sailing.domain.racelog.RaceLogPassChangeEvent;
|
||||
import com.sap.sailing.domain.racelog.RaceLogPathfinderEvent;
|
||||
import com.sap.sailing.domain.racelog.RaceLogRaceStatusEvent;
|
||||
import com.sap.sailing.domain.racelog.RaceLogStartTimeEvent;
|
||||
|
||||
@@ -116,4 +117,15 @@ public class RaceLogEventFactoryImpl implements RaceLogEventFactory {
|
||||
return createFinishPositioningConfirmedEvent(timePoint, UUID.randomUUID(), new ArrayList<Competitor>(), passId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public RaceLogPathfinderEvent createPathfinderEvent(TimePoint timePoint, Serializable id,
|
||||
List<Competitor> competitors, int passId, String pathfinderId) {
|
||||
return new RaceLogPathfinderEventImpl(MillisecondsTimePoint.now(), timePoint, id, competitors, passId, pathfinderId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public RaceLogPathfinderEvent createPathfinderEvent(TimePoint timePoint, int passId, String pathfinderId) {
|
||||
return createPathfinderEvent(timePoint, UUID.randomUUID(), new ArrayList<Competitor>(), passId, pathfinderId);
|
||||
}
|
||||
|
||||
}
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
package com.sap.sailing.domain.racelog.impl;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.common.TimePoint;
|
||||
import com.sap.sailing.domain.racelog.RaceLogEventVisitor;
|
||||
import com.sap.sailing.domain.racelog.RaceLogPathfinderEvent;
|
||||
|
||||
public class RaceLogPathfinderEventImpl extends RaceLogEventImpl implements RaceLogPathfinderEvent {
|
||||
|
||||
private static final long serialVersionUID = -1654474931330970804L;
|
||||
private String pathfinderId;
|
||||
|
||||
public RaceLogPathfinderEventImpl(TimePoint createdAt,
|
||||
TimePoint pTimePoint, Serializable pId, List<Competitor> pCompetitors, int pPassId, String pathfinderId) {
|
||||
super(createdAt, pTimePoint, pId, pCompetitors, pPassId);
|
||||
this.pathfinderId = pathfinderId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void accept(RaceLogEventVisitor visitor) {
|
||||
visitor.visit(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPathfinderId() {
|
||||
return this.pathfinderId;
|
||||
}
|
||||
|
||||
}
|
||||
+6
@@ -12,6 +12,7 @@ import com.sap.sailing.domain.racelog.RaceLogFinishPositioningListChangedEvent;
|
||||
import com.sap.sailing.domain.racelog.RaceLogFlagEvent;
|
||||
import com.sap.sailing.domain.racelog.RaceLogIdentifier;
|
||||
import com.sap.sailing.domain.racelog.RaceLogPassChangeEvent;
|
||||
import com.sap.sailing.domain.racelog.RaceLogPathfinderEvent;
|
||||
import com.sap.sailing.domain.racelog.RaceLogRaceStatusEvent;
|
||||
import com.sap.sailing.domain.racelog.RaceLogStartTimeEvent;
|
||||
|
||||
@@ -72,4 +73,9 @@ public class RaceColumnRaceLogReplicator implements RaceLogEventVisitor, Seriali
|
||||
public void visit(RaceLogFinishPositioningConfirmedEvent event) {
|
||||
notifyOnAdd(event);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visit(RaceLogPathfinderEvent event) {
|
||||
notifyOnAdd(event);
|
||||
}
|
||||
}
|
||||
+6
@@ -7,6 +7,7 @@ import com.sap.sailing.domain.racelog.RaceLogFinishPositioningConfirmedEvent;
|
||||
import com.sap.sailing.domain.racelog.RaceLogFinishPositioningListChangedEvent;
|
||||
import com.sap.sailing.domain.racelog.RaceLogFlagEvent;
|
||||
import com.sap.sailing.domain.racelog.RaceLogPassChangeEvent;
|
||||
import com.sap.sailing.domain.racelog.RaceLogPathfinderEvent;
|
||||
import com.sap.sailing.domain.racelog.RaceLogRaceStatusEvent;
|
||||
import com.sap.sailing.domain.racelog.RaceLogStartTimeEvent;
|
||||
import com.sap.sailing.domain.tracking.TrackedRace;
|
||||
@@ -61,4 +62,9 @@ public class TrackedRaceLogListener implements RaceLogEventVisitor {
|
||||
// do nothing score correction is handled by the leaderboard
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visit(RaceLogPathfinderEvent event) {
|
||||
// doo nothing
|
||||
}
|
||||
|
||||
}
|
||||
+11
-1
@@ -25,6 +25,7 @@ public class RaceLogEventSerializerChooserTest {
|
||||
private JsonSerializer<RaceLogEvent> courseDesignChangedEventSerializer;
|
||||
private JsonSerializer<RaceLogEvent> finishPositioningListChangedEventSerializer;
|
||||
private JsonSerializer<RaceLogEvent> finishPositioningConfirmedEventSerializer;
|
||||
private JsonSerializer<RaceLogEvent> pathfinderEventSerializer;
|
||||
|
||||
private RaceLogEventFactory factory;
|
||||
|
||||
@@ -39,6 +40,7 @@ public class RaceLogEventSerializerChooserTest {
|
||||
courseDesignChangedEventSerializer = mock(JsonSerializer.class);
|
||||
finishPositioningListChangedEventSerializer = mock(JsonSerializer.class);
|
||||
finishPositioningConfirmedEventSerializer = mock(JsonSerializer.class);
|
||||
pathfinderEventSerializer = mock(JsonSerializer.class);
|
||||
|
||||
chooser = new RaceLogEventSerializerChooserImpl(
|
||||
flagEventSerializer,
|
||||
@@ -48,7 +50,8 @@ public class RaceLogEventSerializerChooserTest {
|
||||
passChangedSerializer,
|
||||
courseDesignChangedEventSerializer,
|
||||
finishPositioningListChangedEventSerializer,
|
||||
finishPositioningConfirmedEventSerializer);
|
||||
finishPositioningConfirmedEventSerializer,
|
||||
pathfinderEventSerializer);
|
||||
|
||||
factory = RaceLogEventFactory.INSTANCE;
|
||||
}
|
||||
@@ -108,5 +111,12 @@ public class RaceLogEventSerializerChooserTest {
|
||||
RaceLogEvent event = factory.createFinishPositioningConfirmedEvent(null, 0);
|
||||
assertEquals(finishPositioningConfirmedEventSerializer, chooser.getSerializer(event));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testChoosesPathfinderSerializer() {
|
||||
// we use the real event type here because we do not want to re-implement the dispatching.
|
||||
RaceLogEvent event = factory.createPathfinderEvent(null, 0, "GER 20");
|
||||
assertEquals(pathfinderEventSerializer, chooser.getSerializer(event));
|
||||
}
|
||||
|
||||
}
|
||||
+2
-1
@@ -28,7 +28,8 @@ public class RaceLogEventSerializer implements JsonSerializer<RaceLogEvent> {
|
||||
new MarkJsonSerializer(),
|
||||
new GateJsonSerializer(new MarkJsonSerializer()))))),
|
||||
new RaceLogFinishPositioningListChangedEventSerializer(competitorSerializer),
|
||||
new RaceLogFinishPositioningConfirmedEventSerializer(competitorSerializer)));
|
||||
new RaceLogFinishPositioningConfirmedEventSerializer(competitorSerializer),
|
||||
new RaceLogPathfinderEventSerializer(competitorSerializer)));
|
||||
}
|
||||
|
||||
private RaceLogEventSerializerChooser serializerChooser;
|
||||
|
||||
+11
-2
@@ -8,6 +8,7 @@ import com.sap.sailing.domain.racelog.RaceLogFinishPositioningConfirmedEvent;
|
||||
import com.sap.sailing.domain.racelog.RaceLogFinishPositioningListChangedEvent;
|
||||
import com.sap.sailing.domain.racelog.RaceLogFlagEvent;
|
||||
import com.sap.sailing.domain.racelog.RaceLogPassChangeEvent;
|
||||
import com.sap.sailing.domain.racelog.RaceLogPathfinderEvent;
|
||||
import com.sap.sailing.domain.racelog.RaceLogRaceStatusEvent;
|
||||
import com.sap.sailing.domain.racelog.RaceLogStartTimeEvent;
|
||||
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
|
||||
@@ -23,6 +24,7 @@ public class RaceLogEventSerializerChooserImpl implements RaceLogEventSerializer
|
||||
private final JsonSerializer<RaceLogEvent> courseDesignChangedEventSerializer;
|
||||
private final JsonSerializer<RaceLogEvent> finishPositioningListChangedEventSerializer;
|
||||
private final JsonSerializer<RaceLogEvent> finishPositioningConfirmedEventSerializer;
|
||||
private final JsonSerializer<RaceLogEvent> pathfinderEventSerializer;
|
||||
|
||||
private JsonSerializer<RaceLogEvent> chosenSerializer;
|
||||
|
||||
@@ -34,7 +36,8 @@ public class RaceLogEventSerializerChooserImpl implements RaceLogEventSerializer
|
||||
JsonSerializer<RaceLogEvent> passChangedEventSerializer,
|
||||
JsonSerializer<RaceLogEvent> courseDesignChangedEventSerializer,
|
||||
JsonSerializer<RaceLogEvent> finishPositioningListChangedEventSerializer,
|
||||
JsonSerializer<RaceLogEvent> finishPositioningConfirmedEventSerializer) {
|
||||
JsonSerializer<RaceLogEvent> finishPositioningConfirmedEventSerializer,
|
||||
JsonSerializer<RaceLogEvent> pathfinderEventSerializer) {
|
||||
this.flagEventSerializer = flagEventSerializer;
|
||||
this.startTimeSerializer = startTimeSerializer;
|
||||
this.raceStatusSerializer = raceStatusSerializer;
|
||||
@@ -43,7 +46,8 @@ public class RaceLogEventSerializerChooserImpl implements RaceLogEventSerializer
|
||||
this.courseDesignChangedEventSerializer = courseDesignChangedEventSerializer;
|
||||
this.finishPositioningListChangedEventSerializer = finishPositioningListChangedEventSerializer;
|
||||
this.finishPositioningConfirmedEventSerializer = finishPositioningConfirmedEventSerializer;
|
||||
|
||||
this.pathfinderEventSerializer = finishPositioningConfirmedEventSerializer;
|
||||
|
||||
this.chosenSerializer = null;
|
||||
}
|
||||
|
||||
@@ -99,4 +103,9 @@ public class RaceLogEventSerializerChooserImpl implements RaceLogEventSerializer
|
||||
chosenSerializer = finishPositioningConfirmedEventSerializer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visit(RaceLogPathfinderEvent event) {
|
||||
chosenSerializer = pathfinderEventSerializer;
|
||||
}
|
||||
|
||||
}
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
package com.sap.sailing.server.gateway.serialization.racelog.impl;
|
||||
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.racelog.RaceLogEvent;
|
||||
import com.sap.sailing.domain.racelog.RaceLogPathfinderEvent;
|
||||
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
|
||||
|
||||
public class RaceLogPathfinderEventSerializer extends BaseRaceLogEventSerializer {
|
||||
|
||||
public static final String VALUE_CLASS = RaceLogPathfinderEvent.class.getSimpleName();
|
||||
public static final String FIELD_PATHFINDER_ID = "pathfinderId";
|
||||
|
||||
public RaceLogPathfinderEventSerializer(
|
||||
JsonSerializer<Competitor> competitorSerializer) {
|
||||
super(competitorSerializer);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getClassFieldValue() {
|
||||
return VALUE_CLASS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONObject serialize(RaceLogEvent object) {
|
||||
RaceLogPathfinderEvent pathfinderEvent = (RaceLogPathfinderEvent) object;
|
||||
|
||||
JSONObject result = super.serialize(pathfinderEvent);
|
||||
result.put(FIELD_PATHFINDER_ID, pathfinderEvent.getPathfinderId());
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user