fixed serialization/de-serialization of RaceLogORCLegDataEvent

Change-Id: I381d90a4b1ae1c66408ff68efad72957da68d4bd
This commit is contained in:
Axel Uhl
2019-09-04 22:38:47 -07:00
parent 678b992353
commit 17d224d15f
4 changed files with 42 additions and 11 deletions
@@ -30,6 +30,7 @@ import com.sap.sailing.server.gateway.serialization.racelog.impl.RaceLogFinishPo
import com.sap.sailing.server.gateway.serialization.racelog.impl.RaceLogFixedMarkPassingEventSerializer;
import com.sap.sailing.server.gateway.serialization.racelog.impl.RaceLogFlagEventSerializer;
import com.sap.sailing.server.gateway.serialization.racelog.impl.RaceLogGateLineOpeningTimeEventSerializer;
import com.sap.sailing.server.gateway.serialization.racelog.impl.RaceLogORCLegDataEventSerializer;
import com.sap.sailing.server.gateway.serialization.racelog.impl.RaceLogPassChangeEventSerializer;
import com.sap.sailing.server.gateway.serialization.racelog.impl.RaceLogPathfinderEventSerializer;
import com.sap.sailing.server.gateway.serialization.racelog.impl.RaceLogProtestStartTimeEventSerializer;
@@ -87,7 +88,8 @@ public class RaceLogEventDeserializer implements JsonDeserializer<RaceLogEvent>
new RaceLogStartOfTrackingEventDeserializer(competitorDeserializer),
new RaceLogUseCompetitorsFromRaceLogEventDeserializer(competitorDeserializer),
new RaceLogEndOfTrackingEventDeserializer(competitorDeserializer),
new RaceLogTagEventDeserializer(competitorDeserializer));
new RaceLogTagEventDeserializer(competitorDeserializer),
new RaceLogORCLegDataEventDeserializer(competitorDeserializer));
}
protected final JsonDeserializer<RaceLogEvent> flagEventDeserializer;
@@ -114,6 +116,7 @@ public class RaceLogEventDeserializer implements JsonDeserializer<RaceLogEvent>
protected final JsonDeserializer<RaceLogEvent> useCompetitorsFromRaceLogDeserializer;
protected final JsonDeserializer<RaceLogEvent> endOfTrackingDeserializer;
protected final JsonDeserializer<RaceLogEvent> tagEventDeserializer;
protected final JsonDeserializer<RaceLogEvent> orcLegDataEventDeserializer;
public RaceLogEventDeserializer(JsonDeserializer<RaceLogEvent> flagEventDeserializer,
JsonDeserializer<RaceLogEvent> startTimeEventDeserializer,
@@ -138,7 +141,7 @@ public class RaceLogEventDeserializer implements JsonDeserializer<RaceLogEvent>
JsonDeserializer<RaceLogEvent> startOfTrackingEventDeserializer,
JsonDeserializer<RaceLogEvent> useCompetitorsFromRaceLogDeserializer,
JsonDeserializer<RaceLogEvent> endOfTrackingEventDeserializer,
JsonDeserializer<RaceLogEvent> tagEventDeserializer) {
JsonDeserializer<RaceLogEvent> tagEventDeserializer, JsonDeserializer<RaceLogEvent> orcLegDataEventDeserializer) {
this.flagEventDeserializer = flagEventDeserializer;
this.startTimeEventDeserializer = startTimeEventDeserializer;
this.dependentStartTimeEventDeserializer = dependentStartTimeEventDeserializer;
@@ -163,6 +166,7 @@ public class RaceLogEventDeserializer implements JsonDeserializer<RaceLogEvent>
this.endOfTrackingDeserializer = endOfTrackingEventDeserializer;
this.useCompetitorsFromRaceLogDeserializer = useCompetitorsFromRaceLogDeserializer;
this.tagEventDeserializer = tagEventDeserializer;
this.orcLegDataEventDeserializer = orcLegDataEventDeserializer;
}
protected JsonDeserializer<RaceLogEvent> getDeserializer(JSONObject object) throws JsonDeserializationException {
@@ -216,8 +220,9 @@ public class RaceLogEventDeserializer implements JsonDeserializer<RaceLogEvent>
return useCompetitorsFromRaceLogDeserializer;
} else if (type.equals(RaceLogTagEventSerializer.VALUE_CLASS)){
return tagEventDeserializer;
} else if (type.equals(RaceLogORCLegDataEventSerializer.VALUE_CLASS)){
return orcLegDataEventDeserializer;
}
throw new JsonDeserializationException(String.format("There is no deserializer defined for event type %s.",
type));
}
@@ -35,9 +35,9 @@ public class RaceLogORCLegDataEventDeserializer extends BaseRaceLogEventDeserial
protected RaceLogEvent deserialize(JSONObject object, Serializable id, TimePoint createdAt,
AbstractLogEventAuthor author, TimePoint timePoint, int passId, List<Competitor> competitors)
throws JsonDeserializationException {
int legNr = (int) object.get(RaceLogORCLegDataEventSerializer.ORC_LEG_LENGTH);
Bearing twa = new DegreeBearingImpl((double) object.get(RaceLogORCLegDataEventSerializer.ORC_LEG_TWA));
Distance length = new NauticalMileDistance((double) object.get(RaceLogORCLegDataEventSerializer.ORC_LEG_LENGTH));
int legNr = ((Number) object.get(RaceLogORCLegDataEventSerializer.ORC_LEG_NR)).intValue();
Bearing twa = new DegreeBearingImpl(((Number) object.get(RaceLogORCLegDataEventSerializer.ORC_LEG_TWA)).doubleValue());
Distance length = new NauticalMileDistance(((Number) object.get(RaceLogORCLegDataEventSerializer.ORC_LEG_LENGTH)).doubleValue());
ORCPerformanceCurveLegTypes type = ORCPerformanceCurveLegTypes.valueOf((String) object.get(RaceLogORCLegDataEventSerializer.ORC_LEG_TYPE));
return new RaceLogORCLegDataEventImpl(createdAt, timePoint, author, id, passId, legNr, twa, length, type);
}
@@ -17,8 +17,8 @@ public class RaceLogORCLegDataEventSerializer extends BaseRaceLogEventSerializer
public static final String VALUE_CLASS = RaceLogORCLegDataEvent.class.getSimpleName();
public static final String ORC_LEG_NR = "legNr";
public static final String ORC_LEG_TWA = "twa";
public static final String ORC_LEG_LENGTH = "length";
public static final String ORC_LEG_TWA = "twaDeg";
public static final String ORC_LEG_LENGTH = "lengthNauticalMiles";
public static final String ORC_LEG_TYPE = "type";
public RaceLogORCLegDataEventSerializer(JsonSerializer<Competitor> competitorSerializer) {
@@ -1,6 +1,7 @@
package com.sap.sailing.server.gateway.deserialization.test.racelog;
import static org.junit.Assert.assertEquals;
import java.util.UUID;
import org.json.simple.JSONObject;
@@ -9,6 +10,7 @@ import org.mockito.Mockito;
import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
import com.sap.sailing.domain.abstractlog.impl.LogEventAuthorImpl;
import com.sap.sailing.domain.abstractlog.orc.impl.RaceLogORCLegDataEventImpl;
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
import com.sap.sailing.domain.abstractlog.race.impl.RaceLogEndOfTrackingEventImpl;
import com.sap.sailing.domain.abstractlog.race.impl.RaceLogFlagEventImpl;
@@ -16,17 +18,21 @@ import com.sap.sailing.domain.abstractlog.race.impl.RaceLogTagEventImpl;
import com.sap.sailing.domain.abstractlog.race.tracking.impl.RaceLogUseCompetitorsFromRaceLogEventImpl;
import com.sap.sailing.domain.base.DomainFactory;
import com.sap.sailing.domain.base.impl.DynamicCompetitor;
import com.sap.sailing.domain.common.impl.MeterDistance;
import com.sap.sailing.domain.common.orc.ORCPerformanceCurveLegTypes;
import com.sap.sailing.domain.common.racelog.Flags;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
import com.sap.sailing.server.gateway.deserialization.impl.CompetitorJsonDeserializer;
import com.sap.sailing.server.gateway.deserialization.racelog.impl.RaceLogEndOfTrackingEventDeserializer;
import com.sap.sailing.server.gateway.deserialization.racelog.impl.RaceLogEventDeserializer;
import com.sap.sailing.server.gateway.deserialization.racelog.impl.RaceLogFlagEventDeserializer;
import com.sap.sailing.server.gateway.deserialization.racelog.impl.RaceLogORCLegDataEventDeserializer;
import com.sap.sailing.server.gateway.deserialization.racelog.impl.RaceLogTagEventDeserializer;
import com.sap.sailing.server.gateway.deserialization.racelog.impl.RaceLogUseCompetitorsFromRaceLogEventDeserializer;
import com.sap.sailing.server.gateway.serialization.impl.CompetitorJsonSerializer;
import com.sap.sailing.server.gateway.serialization.racelog.impl.RaceLogEventSerializer;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.impl.DegreeBearingImpl;
public class RaceLogEventDeserializerTest {
@@ -38,13 +44,11 @@ public class RaceLogEventDeserializerTest {
protected RaceLogTagEventDeserializer mockitoRaceLogTagEventDeserializer = Mockito.spy(new RaceLogTagEventDeserializer(competitorDeserializer));
public class InnerRaceLogEventDeserializer extends RaceLogEventDeserializer{
public InnerRaceLogEventDeserializer() {
super(mockitoRaceLogFlagEventDeserializer, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null,
mockitoRaceLogUseCompetitorsFromRaceLogEventDeserializer,
mockitoRaceLogEndOfTrackingEventDeserializer,mockitoRaceLogTagEventDeserializer);
mockitoRaceLogEndOfTrackingEventDeserializer, mockitoRaceLogTagEventDeserializer, new RaceLogORCLegDataEventDeserializer(competitorDeserializer));
}
}
@@ -81,6 +85,28 @@ public class RaceLogEventDeserializerTest {
assertEquals(originalEvent.getCreatedAt(), newEvent.getCreatedAt());
}
@Test
public void testSerializationAndDeserializationForRaceLogORCLegDataEvent() throws Exception{
final RaceLogORCLegDataEventImpl originalEvent = new RaceLogORCLegDataEventImpl(timePoint, timePoint, author,
UUID.randomUUID(), 0, /* leg number */ 2, new DegreeBearingImpl(123), new MeterDistance(2345),
ORCPerformanceCurveLegTypes.TWA);
RaceLogEventSerializer serializer = (RaceLogEventSerializer) RaceLogEventSerializer.create(CompetitorJsonSerializer.create());
JSONObject object = serializer.serialize(originalEvent);
RaceLogEvent raceLogEvent = deserializer.deserialize(object);
RaceLogORCLegDataEventImpl newEvent = (RaceLogORCLegDataEventImpl) raceLogEvent;
//assert raceLogEvent has correct values
assertEquals(originalEvent.getTimePoint().toString(), newEvent.getTimePoint().toString());
assertEquals(originalEvent.getAuthor().toString(), newEvent.getAuthor().toString());
assertEquals(originalEvent.getPassId(), newEvent.getPassId());
assertEquals(originalEvent.getClass(), newEvent.getClass());
assertEquals(originalEvent.getId(), newEvent.getId());
assertEquals(originalEvent.getShortInfo(), newEvent.getShortInfo());
assertEquals(originalEvent.getLegNr(), newEvent.getLegNr());
assertEquals(originalEvent.getTwa(), newEvent.getTwa());
assertEquals(originalEvent.getType(), newEvent.getType());
assertEquals(originalEvent.getLength(), newEvent.getLength());
}
@Test
public void testSerializationAndDeserializationForRaceLogEndOfTrackingEvent() throws Exception{
RaceLogEndOfTrackingEventImpl originalEvent = new RaceLogEndOfTrackingEventImpl(timePoint, timePoint2, author, UUID.randomUUID(), 3);