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:
Fabian Tschirschnitz committed 2013-04-20 19:56:41 +02:00
1 parent dd4d93efed
commit 8e45e3a1b6
25 files changed
+446 -6

No files matched your search

@@ -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;
}
@@ -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();
@@ -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);
}
}
@@ -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);
}
@@ -16,4 +16,6 @@ public interface RaceLogEventVisitor {
public void visit(RaceLogFinishPositioningListChangedEvent event);
public void visit(RaceLogFinishPositioningConfirmedEvent event);
public void visit(RaceLogPathfinderEvent event);
}
@@ -0,0 +1,6 @@
package com.sap.sailing.domain.racelog;
public interface RaceLogGatelineOpeneningTimeEvent extends RaceLogEvent {
long getGateLineOpeningTime();
}
@@ -0,0 +1,6 @@
package com.sap.sailing.domain.racelog;
public interface RaceLogPathfinderEvent extends RaceLogEvent {
String getPathfinderId();
}
@@ -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;
}
}
@@ -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);
}
}
@@ -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;
}
}
@@ -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);
}
}
@@ -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
}
}
@@ -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));
}
}
@@ -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;
@@ -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;
}
}
@@ -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;
}
}