Add DependentStartTimeEvent and replication + de/serialization

This commit is contained in:
Jan Broß committed 2015-05-18 20:55:16 +02:00
1 parent bd0f3c468c
commit 81fa2d4fb6
20 files changed
+287 -23

No files matched your search

@@ -89,7 +89,8 @@ public enum FieldNames {
RACE_LOG_POSITIONED_COMPETITORS, RACE_LOG_PATHFINDER_ID, RACE_LOG_GATE_LINE_OPENING_TIME, RACE_LOG_GOLF_DOWN_TIME, RACE_LOG_START_PROCEDURE_TYPE,
RACE_LOG_PROTEST_START_TIME, RACE_LOG_COURSE_DESIGN_NAME, RACE_LOG_REVOKED_EVENT_ID, RACE_LOG_REVOKED_EVENT_TYPE, RACE_LOG_REVOKED_EVENT_SHORT_INFO,
RACE_LOG_REVOKED_REASON, RACE_LOG_FROM, RACE_LOG_TO, RACE_LOG_MARK, RACE_LOG_DEVICE_MAPPING_EVENT_ID,
RACE_LOG_CLOSING_TIMEPOINT, TIMEPOINT_OF_FIXED_MARKPASSING, INDEX_OF_PASSED_WAYPOINT,INDEX_OF_FIRST_SUPPRESSED_WAYPOINT, MARK, RACE_LOG_COMPETITOR_ID,
RACE_LOG_CLOSING_TIMEPOINT, TIMEPOINT_OF_FIXED_MARKPASSING, INDEX_OF_PASSED_WAYPOINT,INDEX_OF_FIRST_SUPPRESSED_WAYPOINT, MARK, RACE_LOG_COMPETITOR_ID, RACE_LOG_DEPDENDENT_ON_FLEET,
RACE_LOG_START_TIME_DIFFERENCE,
/** @deprecated Replaced by WAYPOINT_PASSINGINSTRUCTIONS, still used to migrate old races*/ @Deprecated WAYPOINT_PASSINGSIDE,
/** @deprecated Replaced by CONTROLPOINTWITHTWOMARKS_ID, still used to migrate old races*/ @Deprecated GATE_ID,
/** @deprecated Replaced by CONTROLPOINTWITHTWOMARKS_NAME, still used to migrate old races*/ @Deprecated GATE_NAME,
@@ -22,6 +22,7 @@ import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
import com.sap.sailing.domain.abstractlog.race.FixedMarkPassingEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogCourseAreaChangedEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogCourseDesignChangedEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogDependentStartTimeEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogFinishPositioningConfirmedEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogFinishPositioningListChangedEvent;
@@ -35,8 +36,8 @@ import com.sap.sailing.domain.abstractlog.race.RaceLogRevokeEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogStartProcedureChangedEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogStartTimeEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogWindFixEvent;
import com.sap.sailing.domain.abstractlog.race.scoring.RaceLogAdditionalScoringInformationEvent;
import com.sap.sailing.domain.abstractlog.race.SuppressedMarkPassingsEvent;
import com.sap.sailing.domain.abstractlog.race.scoring.RaceLogAdditionalScoringInformationEvent;
import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogCloseOpenEndedDeviceMappingEvent;
import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogDefineMarkEvent;
import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogDenoteForTrackingEvent;
@@ -102,6 +103,7 @@ import com.sap.sailing.server.gateway.serialization.JsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.CompetitorJsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.DeviceConfigurationJsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.RegattaConfigurationJsonSerializer;
import com.sap.sse.common.Duration;
import com.sap.sse.common.NoCorrespondingServiceRegisteredException;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.TimeRange;
@@ -1061,6 +1063,28 @@ public class MongoObjectFactoryImpl implements MongoObjectFactory {
result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogPassChangeEvent.class.getSimpleName());
return result;
}
private DBObject storeRaceLogDependentStartTimeEvent(RaceLogDependentStartTimeEvent dependentStartTimeEvent) {
DBObject result = new BasicDBObject();
storeRaceLogEventProperties(dependentStartTimeEvent, result);
//TODO: add other fields
result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogStartTimeEvent.class.getSimpleName());
result.put(FieldNames.RACE_LOG_DEPDENDENT_ON_FLEET.name(), dependentStartTimeEvent.getDependentOnFleet().getName());
storeDuration(dependentStartTimeEvent.getStartTimeDifference(), result, FieldNames.RACE_LOG_START_TIME_DIFFERENCE);
result.put(FieldNames.RACE_LOG_EVENT_NEXT_STATUS.name(), dependentStartTimeEvent.getNextStatus().name());
return result;
}
private void storeDuration(Duration duration, DBObject result, FieldNames fieldName) {
if (duration != null) {
result.put(fieldName.name(), duration.asMillis());
}
}
private DBObject storeRaceLogRaceStatusEvent(RaceLogRaceStatusEvent raceStatusEvent) {
DBObject result = new BasicDBObject();
@@ -1377,4 +1401,11 @@ public class MongoObjectFactoryImpl implements MongoObjectFactory {
storeTimePoint(event.getClosingTimePoint(), result, FieldNames.REGATTA_LOG_CLOSING_TIMEPOINT);
storeRegattaLogEvent(regattaLikeId, result);
}
public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogDependentStartTimeEvent event) {
BasicDBObject result = new BasicDBObject();
storeRaceLogIdentifier(raceLogIdentifier, result);
result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogDependentStartTimeEvent(event));
return result;
}
}
@@ -6,6 +6,7 @@ import com.mongodb.DBObject;
import com.sap.sailing.domain.abstractlog.race.FixedMarkPassingEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogCourseAreaChangedEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogCourseDesignChangedEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogDependentStartTimeEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogEventVisitor;
import com.sap.sailing.domain.abstractlog.race.RaceLogFinishPositioningConfirmedEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogFinishPositioningListChangedEvent;
@@ -187,4 +188,10 @@ public class MongoRaceLogStoreVisitor implements RaceLogEventVisitor {
DBObject object = mongoObjectFactory.storeRaceLogEntry(raceLogIdentifier, event);
mongoObjectFactory.storeRaceLogEventEvent(object);
}
@Override
public void visit(RaceLogDependentStartTimeEvent event) {
DBObject object = mongoObjectFactory.storeRaceLogEntry(raceLogIdentifier, event);
mongoObjectFactory.storeRaceLogEventEvent(object);
}
}
@@ -0,0 +1,13 @@
package com.sap.sailing.domain.abstractlog.race;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sse.common.Duration;
public interface RaceLogDependentStartTimeEvent extends RaceLogRaceStatusEvent {
Fleet getDependentOnFleet();
Duration getStartTimeDifference();
}
@@ -17,12 +17,14 @@ import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogStartTrackingEven
import com.sap.sailing.domain.base.BoatClass;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.CourseBase;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.Mark;
import com.sap.sailing.domain.common.Wind;
import com.sap.sailing.domain.common.racelog.Flags;
import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus;
import com.sap.sailing.domain.common.racelog.RacingProcedureType;
import com.sap.sailing.domain.racelogtracking.DeviceIdentifier;
import com.sap.sse.common.Duration;
import com.sap.sse.common.TimePoint;
public interface RaceLogEventFactory {
@@ -129,4 +131,11 @@ public interface RaceLogEventFactory {
RaceLogEvent createSuppressedMarkPassingsEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author, Serializable id,
List<Competitor> competitors, Integer passId, Integer zeroBasedIndexOfFirstSuppressedWaypoint);
RaceLogDependentStartTimeEvent createDependentStartTimeEvent(TimePoint logicalTimePoint,
AbstractLogEventAuthor author, Serializable id, List<Competitor> involvedBoats, int passId, Fleet dependentsOnFleet,
Duration startTimeDifference);
RaceLogDependentStartTimeEvent createDependentStartTimeEvent(TimePoint logicalTimePoint,
AbstractLogEventAuthor author, int passId, Fleet dependentsOnFleet, Duration startTimeDifference);
}
@@ -17,12 +17,14 @@ import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogStartTrackingEven
import com.sap.sailing.domain.base.BoatClass;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.CourseBase;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.Mark;
import com.sap.sailing.domain.common.Wind;
import com.sap.sailing.domain.common.racelog.Flags;
import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus;
import com.sap.sailing.domain.common.racelog.RacingProcedureType;
import com.sap.sailing.domain.racelogtracking.DeviceIdentifier;
import com.sap.sse.common.Duration;
import com.sap.sse.common.TimePoint;
public interface RaceLogEventRestoreFactory extends RaceLogEventFactory {
@@ -98,4 +100,7 @@ public interface RaceLogEventRestoreFactory extends RaceLogEventFactory {
RaceLogAdditionalScoringInformationEvent createAdditionalScoringInformationEvent(TimePoint createdAt, AbstractLogEventAuthor author,
TimePoint logicalTimePoint, Serializable pId, List<Competitor> competitors, int passId,
AdditionalScoringInformationType informationType);
RaceLogDependentStartTimeEvent createDependentStartTimeEvent(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint,
Serializable id, List<Competitor> involvedBoats, int passId, Fleet dependentOnFleet, Duration startTimeDifference);
}
@@ -57,6 +57,7 @@ public interface RaceLogEventVisitor {
public void visit(FixedMarkPassingEvent event);
public void visit(SuppressedMarkPassingsEvent event);
public void visit(RaceLogDependentStartTimeEvent event);
}
@@ -1,6 +1,7 @@
package com.sap.sailing.domain.abstractlog.race.analyzing.impl;
import com.sap.sailing.domain.abstractlog.race.RaceLog;
import com.sap.sailing.domain.abstractlog.race.RaceLogDependentStartTimeEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogRaceStatusEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogStartTimeEvent;
@@ -82,6 +83,11 @@ public class RaceStatusAnalyzer extends RaceLogAnalyzer<RaceLogRaceStatus> {
@Override
public void visit(RaceLogRaceStatusEvent event) {
nextStatus = event.getNextStatus();
}
@Override
public void visit(RaceLogDependentStartTimeEvent event) {
//FIXME: Calculate RaceStatus based on status of Fleet on which race depends on
};
};
@@ -3,6 +3,7 @@ package com.sap.sailing.domain.abstractlog.race.impl;
import com.sap.sailing.domain.abstractlog.race.FixedMarkPassingEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogCourseAreaChangedEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogCourseDesignChangedEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogDependentStartTimeEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogEventVisitor;
import com.sap.sailing.domain.abstractlog.race.RaceLogFinishPositioningConfirmedEvent;
@@ -143,4 +144,9 @@ public abstract class AbstractRaceLogChangedVisitor implements RaceLogEventVisit
public void visit(SuppressedMarkPassingsEvent event) {
notifyListenerAboutEventAdded(event);
}
@Override
public void visit(RaceLogDependentStartTimeEvent event) {
notifyListenerAboutEventAdded(event);
}
}
@@ -3,6 +3,7 @@ package com.sap.sailing.domain.abstractlog.race.impl;
import com.sap.sailing.domain.abstractlog.race.FixedMarkPassingEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogCourseAreaChangedEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogCourseDesignChangedEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogDependentStartTimeEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogEventVisitor;
import com.sap.sailing.domain.abstractlog.race.RaceLogFinishPositioningConfirmedEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogFinishPositioningListChangedEvent;
@@ -150,4 +151,9 @@ public abstract class BaseRaceLogEventVisitor implements RaceLogEventVisitor {
public void visit(SuppressedMarkPassingsEvent event) {
}
@Override
public void visit(RaceLogDependentStartTimeEvent event) {
}
}
@@ -0,0 +1,50 @@
package com.sap.sailing.domain.abstractlog.race.impl;
import java.io.Serializable;
import java.util.List;
import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
import com.sap.sailing.domain.abstractlog.Revokable;
import com.sap.sailing.domain.abstractlog.race.RaceLogDependentStartTimeEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogEventVisitor;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus;
import com.sap.sse.common.Duration;
import com.sap.sse.common.TimePoint;
public class RaceLogDependentStartTimeEventImpl extends RaceLogRaceStatusEventImpl implements RaceLogDependentStartTimeEvent, Revokable {
private static final long serialVersionUID = -2555082771473210123L;
private final Duration startTimeDifference;
private final Fleet dependentsOnFleet;
public RaceLogDependentStartTimeEventImpl(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint pTimePoint,
Serializable pId, List<Competitor> pInvolvedBoats, int pPassId, Fleet dependentsOnFleet,
Duration startTimeDifference) {
super(createdAt, author, pTimePoint, pId, pInvolvedBoats, pPassId, RaceLogRaceStatus.SCHEDULED);
this.dependentsOnFleet = dependentsOnFleet;
this.startTimeDifference = startTimeDifference;
}
@Override
public Duration getStartTimeDifference() {
return startTimeDifference;
}
@Override
public Fleet getDependentOnFleet() {
return dependentsOnFleet;
}
@Override
public void accept(RaceLogEventVisitor visitor) {
visitor.visit((RaceLogDependentStartTimeEvent) this);
}
@Override
public String getShortInfo() {
return "dependentOnFleet=" + dependentsOnFleet + "startTimeDifference=" + startTimeDifference;
}
}
@@ -10,6 +10,7 @@ import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
import com.sap.sailing.domain.abstractlog.race.CompetitorResults;
import com.sap.sailing.domain.abstractlog.race.RaceLogCourseAreaChangedEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogCourseDesignChangedEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogDependentStartTimeEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogEventFactory;
import com.sap.sailing.domain.abstractlog.race.RaceLogFinishPositioningConfirmedEvent;
@@ -43,12 +44,14 @@ import com.sap.sailing.domain.abstractlog.race.tracking.impl.RaceLogStartTrackin
import com.sap.sailing.domain.base.BoatClass;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.CourseBase;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.Mark;
import com.sap.sailing.domain.common.Wind;
import com.sap.sailing.domain.common.racelog.Flags;
import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus;
import com.sap.sailing.domain.common.racelog.RacingProcedureType;
import com.sap.sailing.domain.racelogtracking.DeviceIdentifier;
import com.sap.sse.common.Duration;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.impl.MillisecondsTimePoint;
@@ -79,6 +82,20 @@ public class RaceLogEventFactoryImpl implements RaceLogEventFactory {
public RaceLogStartTimeEvent createStartTimeEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author, int passId, TimePoint startTime) {
return createStartTimeEvent(logicalTimePoint, author, UUID.randomUUID(), new ArrayList<Competitor>(), passId, startTime);
}
@Override
public RaceLogDependentStartTimeEvent createDependentStartTimeEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author,
Serializable id, List<Competitor> involvedBoats, int passId, Fleet dependentsOnFleet, Duration startTimeDifference) {
return new RaceLogDependentStartTimeEventImpl(MillisecondsTimePoint.now(), author, logicalTimePoint, id, involvedBoats,
passId, dependentsOnFleet, startTimeDifference);
}
@Override
public RaceLogDependentStartTimeEvent createDependentStartTimeEvent(TimePoint logicalTimePoint,
AbstractLogEventAuthor author, int passId, Fleet dependentsOnFleet, Duration startTimeDifference) {
return createDependentStartTimeEvent(logicalTimePoint, author, UUID.randomUUID(), new ArrayList<Competitor>(), passId,
dependentsOnFleet, startTimeDifference);
}
@Override
public RaceLogRaceStatusEvent createRaceStatusEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author,
@@ -7,6 +7,7 @@ import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
import com.sap.sailing.domain.abstractlog.race.CompetitorResults;
import com.sap.sailing.domain.abstractlog.race.RaceLogCourseAreaChangedEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogCourseDesignChangedEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogDependentStartTimeEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogEventRestoreFactory;
import com.sap.sailing.domain.abstractlog.race.RaceLogFinishPositioningConfirmedEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogFinishPositioningListChangedEvent;
@@ -40,12 +41,14 @@ import com.sap.sailing.domain.abstractlog.race.tracking.impl.RaceLogStartTrackin
import com.sap.sailing.domain.base.BoatClass;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.CourseBase;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.Mark;
import com.sap.sailing.domain.common.Wind;
import com.sap.sailing.domain.common.racelog.Flags;
import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus;
import com.sap.sailing.domain.common.racelog.RacingProcedureType;
import com.sap.sailing.domain.racelogtracking.DeviceIdentifier;
import com.sap.sse.common.Duration;
import com.sap.sse.common.TimePoint;
public class RaceLogEventRestoreFactoryImpl extends RaceLogEventFactoryImpl implements RaceLogEventRestoreFactory {
@@ -187,4 +190,12 @@ public class RaceLogEventRestoreFactoryImpl extends RaceLogEventFactoryImpl impl
AdditionalScoringInformationType informationType) {
return new RaceLogAdditionalScoringInformationEventImpl(createdAt, author, logicalTimePoint, pId, competitors, passId, informationType);
}
@Override
public RaceLogDependentStartTimeEvent createDependentStartTimeEvent(TimePoint createdAt,
AbstractLogEventAuthor author, TimePoint logicalTimePoint, Serializable id, List<Competitor> involvedBoats,
int passId, Fleet dependentOnFleet, Duration startTimeDifference) {
return new RaceLogDependentStartTimeEventImpl(createdAt, author, logicalTimePoint, id, involvedBoats, passId,
dependentOnFleet, startTimeDifference);
}
}
@@ -64,5 +64,4 @@ public class WeakRaceLogChangedVisitor extends AbstractRaceLogChangedVisitor {
private void removeListener() {
removeFromThisRaceLogWhenListenerNoLongerStronglyReferenced.removeListener(this);
}
}
@@ -5,6 +5,7 @@ import java.io.Serializable;
import com.sap.sailing.domain.abstractlog.race.FixedMarkPassingEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogCourseAreaChangedEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogCourseDesignChangedEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogDependentStartTimeEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogEventVisitor;
import com.sap.sailing.domain.abstractlog.race.RaceLogFinishPositioningConfirmedEvent;
@@ -168,4 +169,9 @@ public class RaceColumnRaceLogReplicator implements RaceLogEventVisitor, Seriali
public void visit(RaceLogAdditionalScoringInformationEvent additionalScoringInformation) {
notifyOnAdd(additionalScoringInformation);
}
@Override
public void visit(RaceLogDependentStartTimeEvent event) {
notifyOnAdd(event);
}
}
@@ -7,6 +7,7 @@ import java.util.logging.Logger;
import com.sap.sailing.domain.abstractlog.race.FixedMarkPassingEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLog;
import com.sap.sailing.domain.abstractlog.race.RaceLogCourseDesignChangedEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogDependentStartTimeEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogFlagEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogPassChangeEvent;
@@ -254,4 +255,9 @@ public class DynamicTrackedRaceLogListener extends BaseRaceLogEventVisitor {
}
}
}
@Override
public void visit(RaceLogDependentStartTimeEvent event) {
analyzeStartTime(null);
}
}
@@ -0,0 +1,40 @@
package com.sap.sailing.server.gateway.deserialization.racelog.impl;
import java.io.Serializable;
import java.util.List;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogRaceStatusEvent;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
import com.sap.sailing.server.gateway.serialization.racelog.impl.RaceLogDependentStartTimeEventSerializer;
import com.sap.sse.common.Duration;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.impl.MillisecondsDurationImpl;
public class RaceLogDependentStartTimeEventDeserializer extends RaceLogRaceStatusEventDeserializer {
public RaceLogDependentStartTimeEventDeserializer(JsonDeserializer<Competitor> competitorDeserializer) {
super(competitorDeserializer);
}
@Override
protected RaceLogEvent deserialize(JSONObject object, Serializable id, TimePoint createdAt, AbstractLogEventAuthor author, TimePoint timePoint, int passId, List<Competitor> competitors)
throws JsonDeserializationException {
Fleet dependentOnFleet = (Fleet) object.get(RaceLogDependentStartTimeEventSerializer.FIELD_DEPDENDENT_ON_FLEET);
long startTimeDifferenceInMs = (long) object.get(RaceLogDependentStartTimeEventSerializer.FIELD_START_TIME_DIFFERENCE);
Duration startTimeDifference = new MillisecondsDurationImpl(startTimeDifferenceInMs);
RaceLogRaceStatusEvent event = (RaceLogRaceStatusEvent) super.deserialize(object, id, createdAt, author, timePoint, passId, competitors);
return factory.createDependentStartTimeEvent(event.getCreatedAt(), author, event.getLogicalTimePoint(), event.getId(), event.getInvolvedBoats(),
event.getPassId(), dependentOnFleet, startTimeDifference);
}
}
@@ -0,0 +1,36 @@
package com.sap.sailing.server.gateway.serialization.racelog.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.abstractlog.race.RaceLogDependentStartTimeEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class RaceLogDependentStartTimeEventSerializer extends BaseRaceLogEventSerializer implements JsonSerializer<RaceLogEvent> {
public RaceLogDependentStartTimeEventSerializer(JsonSerializer<Competitor> competitorSerializer) {
super(competitorSerializer);
}
public static final String VALUE_CLASS = RaceLogDependentStartTimeEvent.class.getSimpleName();
public static final String FIELD_DEPDENDENT_ON_FLEET = "dependentOnFleet";
public static final String FIELD_START_TIME_DIFFERENCE = "startTimeDifference";
@Override
protected String getClassFieldValue() {
return VALUE_CLASS;
}
@Override
public JSONObject serialize(RaceLogEvent object) {
RaceLogDependentStartTimeEvent event = (RaceLogDependentStartTimeEvent) object;
JSONObject result = super.serialize(event);
result.put(FIELD_DEPDENDENT_ON_FLEET, event.getDependentOnFleet());
result.put(FIELD_START_TIME_DIFFERENCE, event.getStartTimeDifference().asMillis());
return result;
}
}
@@ -5,6 +5,7 @@ import org.json.simple.JSONObject;
import com.sap.sailing.domain.abstractlog.race.FixedMarkPassingEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogCourseAreaChangedEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogCourseDesignChangedEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogDependentStartTimeEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogEventVisitor;
import com.sap.sailing.domain.abstractlog.race.RaceLogFinishPositioningConfirmedEvent;
@@ -81,7 +82,8 @@ public class RaceLogEventSerializer implements JsonSerializer<RaceLogEvent>, Rac
new RaceLogCloseOpenEndedDeviceMappingEventSerializer(competitorSerializer),
new RaceLogAdditionalScoringInformationSerializer(competitorSerializer),
new RaceLogFixedMarkPassingEventSerializer(competitorSerializer),
new RaceLogSuppressedMarkPassingsEventSerializer(competitorSerializer));
new RaceLogSuppressedMarkPassingsEventSerializer(competitorSerializer),
new RaceLogDependentStartTimeEventSerializer(competitorSerializer));
}
private final JsonSerializer<RaceLogEvent> flagEventSerializer;
@@ -108,6 +110,7 @@ public class RaceLogEventSerializer implements JsonSerializer<RaceLogEvent>, Rac
private final JsonSerializer<RaceLogEvent> additionalScoringInformationSerializer;
private final JsonSerializer<RaceLogEvent> fixedMarkPassingEventSerializer;
private final JsonSerializer<RaceLogEvent> suppressedMarkPassingsEventSerializer;
private final JsonSerializer<RaceLogEvent> dependentStartTimeEventSerializer;
private JsonSerializer<RaceLogEvent> chosenSerializer;
@@ -135,7 +138,8 @@ public class RaceLogEventSerializer implements JsonSerializer<RaceLogEvent>, Rac
JsonSerializer<RaceLogEvent> closeOpenEndedDeviceMappingEventSerializer,
JsonSerializer<RaceLogEvent> additionalScoringInformationSerializer,
JsonSerializer<RaceLogEvent> fixedMarkPassingEventSerializer,
JsonSerializer<RaceLogEvent> suppressedMarkPassingsSerializer) {
JsonSerializer<RaceLogEvent> suppressedMarkPassingsSerializer,
JsonSerializer<RaceLogEvent> dependentStartTimeEventSerializer) {
this.flagEventSerializer = flagEventSerializer;
this.startTimeSerializer = startTimeSerializer;
this.raceStatusSerializer = raceStatusSerializer;
@@ -160,6 +164,7 @@ public class RaceLogEventSerializer implements JsonSerializer<RaceLogEvent>, Rac
this.additionalScoringInformationSerializer = additionalScoringInformationSerializer;
this.fixedMarkPassingEventSerializer = fixedMarkPassingEventSerializer;
this.suppressedMarkPassingsEventSerializer = suppressedMarkPassingsSerializer;
this.dependentStartTimeEventSerializer = dependentStartTimeEventSerializer;
this.chosenSerializer = null;
}
@@ -294,9 +299,13 @@ public class RaceLogEventSerializer implements JsonSerializer<RaceLogEvent>, Rac
}
@Override
public void visit(SuppressedMarkPassingsEvent event) {
chosenSerializer = suppressedMarkPassingsEventSerializer;
}
@Override
public void visit(RaceLogDependentStartTimeEvent event) {
chosenSerializer = dependentStartTimeEventSerializer;
}
}
@@ -48,6 +48,7 @@ public class RaceLogEventSerializerTest {
private JsonSerializer<RaceLogEvent> additionalScoringInformationSerializer;
private JsonSerializer<RaceLogEvent> fixedMarkPassingEventSerializer;
private JsonSerializer<RaceLogEvent> suppressedMarkPassingsSerializer;
private JsonSerializer<RaceLogEvent> dependentStartTimeEventSerializer;
private RaceLogEventFactory factory;
private AbstractLogEventAuthor author = new LogEventAuthorImpl("Test Author", 1);
@@ -79,15 +80,19 @@ public class RaceLogEventSerializerTest {
additionalScoringInformationSerializer = mock(JsonSerializer.class);
fixedMarkPassingEventSerializer = mock(JsonSerializer.class);
suppressedMarkPassingsSerializer = mock(JsonSerializer.class);
dependentStartTimeEventSerializer = mock(JsonSerializer.class);
serializer = new RaceLogEventSerializer(flagEventSerializer, startTimeSerializer, raceStatusSerializer,
courseAreaChangedEventSerializer, passChangedSerializer, courseDesignChangedEventSerializer,
finishPositioningListChangedEventSerializer, finishPositioningConfirmedEventSerializer,
pathfinderEventSerializer, gateLineOpeningTimeEventSerializer,
startProcedureTypeChangedEventSerializer, protestStartTimeEventSerializer, windFixEventSerializer,
deviceCompetitorMappingEventSerializer, deviceMarkMappingEventSerializer, denoteForTrackingEventSerializer,
startTrackingEventSerializer, revokeEventSerializer, registerCompetitorEventSerializer, defineMarkEventSerializer,
closeOpenEndedDeviceMappingEventSerializer, fixedMarkPassingEventSerializer, suppressedMarkPassingsSerializer, additionalScoringInformationSerializer);
deviceCompetitorMappingEventSerializer, deviceMarkMappingEventSerializer,
denoteForTrackingEventSerializer, startTrackingEventSerializer, revokeEventSerializer,
registerCompetitorEventSerializer, defineMarkEventSerializer,
closeOpenEndedDeviceMappingEventSerializer, fixedMarkPassingEventSerializer,
suppressedMarkPassingsSerializer, additionalScoringInformationSerializer,
dependentStartTimeEventSerializer);
factory = RaceLogEventFactory.INSTANCE;
}
@@ -179,7 +184,7 @@ public class RaceLogEventSerializerTest {
serializer.serialize(event);
verify(startProcedureTypeChangedEventSerializer).serialize(event);
}
@Test
public void testProtestStartTimeSerializer() {
// we use the real event type here because we do not want to re-implement the dispatching.
@@ -187,7 +192,7 @@ public class RaceLogEventSerializerTest {
serializer.serialize(event);
verify(protestStartTimeEventSerializer).serialize(event);
}
@Test
public void testWindFixSerializer() {
// we use the real event type here because we do not want to re-implement the dispatching.
@@ -195,7 +200,7 @@ public class RaceLogEventSerializerTest {
serializer.serialize(event);
verify(windFixEventSerializer).serialize(event);
}
@Test
public void testDeviceCompetitorMappingSerializer() {
// we use the real event type here because we do not want to re-implement the dispatching.
@@ -203,7 +208,7 @@ public class RaceLogEventSerializerTest {
serializer.serialize(event);
verify(deviceCompetitorMappingEventSerializer).serialize(event);
}
@Test
public void testDeviceMarkMappingSerializer() {
// we use the real event type here because we do not want to re-implement the dispatching.
@@ -211,7 +216,7 @@ public class RaceLogEventSerializerTest {
serializer.serialize(event);
verify(deviceMarkMappingEventSerializer).serialize(event);
}
@Test
public void testDenoteForTrackingSerializer() {
// we use the real event type here because we do not want to re-implement the dispatching.
@@ -219,7 +224,7 @@ public class RaceLogEventSerializerTest {
serializer.serialize(event);
verify(denoteForTrackingEventSerializer).serialize(event);
}
@Test
public void testCreateRaceSerializer() {
// we use the real event type here because we do not want to re-implement the dispatching.
@@ -227,25 +232,25 @@ public class RaceLogEventSerializerTest {
serializer.serialize(event);
verify(startTrackingEventSerializer).serialize(event);
}
@Test
public void testRevokeEventSerializer() {
// we use the real event type here because we do not want to re-implement the dispatching.
RaceLogEvent event = RaceLogEventRestoreFactory.INSTANCE.createRevokeEvent(MillisecondsTimePoint.now(),
author, MillisecondsTimePoint.now(), 0, 0, UUID.randomUUID(), "type", "short info", "reason");
RaceLogEvent event = RaceLogEventRestoreFactory.INSTANCE.createRevokeEvent(MillisecondsTimePoint.now(), author,
MillisecondsTimePoint.now(), 0, 0, UUID.randomUUID(), "type", "short info", "reason");
serializer.serialize(event);
verify(revokeEventSerializer).serialize(event);
}
@Test
public void testRegisterCompetitorEventSerializer() {
// we use the real event type here because we do not want to re-implement the dispatching.
RaceLogEvent event = factory.createRegisterCompetitorEvent(null, author, 0,
DomainFactory.INSTANCE.getOrCreateCompetitor("comp", "comp", null, null, null, null, null));
DomainFactory.INSTANCE.getOrCreateCompetitor("comp", "comp", null, null, null, null, null));
serializer.serialize(event);
verify(registerCompetitorEventSerializer).serialize(event);
}
@Test
public void testDefineMarkEventSerializer() {
// we use the real event type here because we do not want to re-implement the dispatching.
@@ -253,7 +258,7 @@ public class RaceLogEventSerializerTest {
serializer.serialize(event);
verify(defineMarkEventSerializer).serialize(event);
}
@Test
public void testCloseOpenEndedDeviceMappingEventSerializer() {
// we use the real event type here because we do not want to re-implement the dispatching.