added RegisterCompetitorEvent for race log

This commit is contained in:
Fredrik Teschke committed 2014-02-15 22:15:51 +01:00
1 parent 7222777c72
commit f96cb785ad
21 files changed
+226 -13

No files matched your search

@@ -127,12 +127,13 @@ import com.sap.sailing.domain.racelog.RaceLogWindFixEvent;
import com.sap.sailing.domain.racelog.impl.CompetitorResultsImpl;
import com.sap.sailing.domain.racelog.impl.RaceLogEventAuthorImpl;
import com.sap.sailing.domain.racelog.impl.RaceLogImpl;
import com.sap.sailing.domain.racelog.tracking.StartTrackingEvent;
import com.sap.sailing.domain.racelog.tracking.DenoteForTrackingEvent;
import com.sap.sailing.domain.racelog.tracking.DeviceCompetitorMappingEvent;
import com.sap.sailing.domain.racelog.tracking.DeviceIdentifier;
import com.sap.sailing.domain.racelog.tracking.DeviceMarkMappingEvent;
import com.sap.sailing.domain.racelog.tracking.RegisterCompetitorEvent;
import com.sap.sailing.domain.racelog.tracking.RevokeEvent;
import com.sap.sailing.domain.racelog.tracking.StartTrackingEvent;
import com.sap.sailing.domain.tracking.TrackedRegattaRegistry;
import com.sap.sailing.domain.tracking.Wind;
import com.sap.sailing.domain.tracking.WindTrack;
@@ -1170,6 +1171,8 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
return loadRaceLogStartEvent(createdAt, author, logicalTimePoint, id, passId, competitors, dbObject);
} else if (eventClass.equals(RevokeEvent.class.getSimpleName())) {
return loadRaceLogRevokeEvent(createdAt, author, logicalTimePoint, id, passId, competitors, dbObject);
} else if (eventClass.equals(RegisterCompetitorEvent.class.getSimpleName())) {
return loadRaceLogRegisterCompetitorEvent(createdAt, author, logicalTimePoint, id, passId, competitors, dbObject);
}
throw new IllegalStateException(String.format("Unknown RaceLogEvent type %s", eventClass));
@@ -1234,6 +1237,12 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
return raceLogEventFactory.createRevokeEvent(createdAt, author, logicalTimePoint, id, passId, revokedEventId);
}
private RaceLogEvent loadRaceLogRegisterCompetitorEvent(TimePoint createdAt, RaceLogEventAuthor author, TimePoint logicalTimePoint,
Serializable id, Integer passId, List<Competitor> competitors, DBObject dbObject) {
assert competitors.size() == 1 : "Should have exactly one competitor for RegisterCompetitorEvent";
return raceLogEventFactory.createRegisterCompetitorEvent(createdAt, author, logicalTimePoint, id, passId, competitors.get(0));
}
private RaceLogEvent loadRaceLogRaceLogProtestStartTimeEvent(TimePoint createdAt, RaceLogEventAuthor author,
TimePoint logicalTimePoint, Serializable id, Integer passId, List<Competitor> competitors, DBObject dbObject) {
TimePoint protestStartTime = loadTimePoint(dbObject, FieldNames.RACE_LOG_PROTEST_START_TIME);
@@ -78,12 +78,13 @@ import com.sap.sailing.domain.racelog.RaceLogRaceStatusEvent;
import com.sap.sailing.domain.racelog.RaceLogStartProcedureChangedEvent;
import com.sap.sailing.domain.racelog.RaceLogStartTimeEvent;
import com.sap.sailing.domain.racelog.RaceLogWindFixEvent;
import com.sap.sailing.domain.racelog.tracking.StartTrackingEvent;
import com.sap.sailing.domain.racelog.tracking.DenoteForTrackingEvent;
import com.sap.sailing.domain.racelog.tracking.DeviceCompetitorMappingEvent;
import com.sap.sailing.domain.racelog.tracking.DeviceIdentifier;
import com.sap.sailing.domain.racelog.tracking.DeviceMarkMappingEvent;
import com.sap.sailing.domain.racelog.tracking.RegisterCompetitorEvent;
import com.sap.sailing.domain.racelog.tracking.RevokeEvent;
import com.sap.sailing.domain.racelog.tracking.StartTrackingEvent;
import com.sap.sailing.domain.tracking.Positioned;
import com.sap.sailing.domain.tracking.TrackedRace;
import com.sap.sailing.domain.tracking.TrackedRegatta;
@@ -741,6 +742,14 @@ public class MongoObjectFactoryImpl implements MongoObjectFactory {
result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogRevokeEvent(event));
return result;
}
public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RegisterCompetitorEvent event) {
BasicDBObject result = new BasicDBObject();
result.put(FieldNames.RACE_LOG_IDENTIFIER.name(), TripleSerializer.serialize(raceLogIdentifier.getIdentifier()));
result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogRegisterCompetitorEvent(event));
return result;
}
private Object storeRaceLogWindFix(RaceLogWindFixEvent event) {
DBObject result = new BasicDBObject();
@@ -844,6 +853,14 @@ public class MongoObjectFactoryImpl implements MongoObjectFactory {
return result;
}
private Object storeRaceLogRegisterCompetitorEvent(RegisterCompetitorEvent event) {
DBObject result = new BasicDBObject();
storeRaceLogEventProperties(event, result);
result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RegisterCompetitorEvent.class.getSimpleName());
return result;
}
public DBObject storeRaceLogFlagEvent(RaceLogFlagEvent flagEvent) {
DBObject result = new BasicDBObject();
storeRaceLogEventProperties(flagEvent, result);
@@ -20,11 +20,12 @@ import com.sap.sailing.domain.racelog.RaceLogRaceStatusEvent;
import com.sap.sailing.domain.racelog.RaceLogStartProcedureChangedEvent;
import com.sap.sailing.domain.racelog.RaceLogStartTimeEvent;
import com.sap.sailing.domain.racelog.RaceLogWindFixEvent;
import com.sap.sailing.domain.racelog.tracking.StartTrackingEvent;
import com.sap.sailing.domain.racelog.tracking.DenoteForTrackingEvent;
import com.sap.sailing.domain.racelog.tracking.DeviceCompetitorMappingEvent;
import com.sap.sailing.domain.racelog.tracking.DeviceMarkMappingEvent;
import com.sap.sailing.domain.racelog.tracking.RegisterCompetitorEvent;
import com.sap.sailing.domain.racelog.tracking.RevokeEvent;
import com.sap.sailing.domain.racelog.tracking.StartTrackingEvent;
public class MongoRaceLogStoreVisitor implements RaceLogEventVisitor {
@@ -154,4 +155,10 @@ public class MongoRaceLogStoreVisitor implements RaceLogEventVisitor {
storeEventInCollection(object);
}
@Override
public void visit(RegisterCompetitorEvent event) {
DBObject object = mongoObjectFactory.storeRaceLogEntry(raceLogIdentifier, event);
storeEventInCollection(object);
}
}
@@ -21,6 +21,7 @@ import com.sap.sailing.domain.racelog.RaceLogRaceStatusEvent;
import com.sap.sailing.domain.racelog.RaceLogStartProcedureChangedEvent;
import com.sap.sailing.domain.racelog.RaceLogStartTimeEvent;
import com.sap.sailing.domain.racelog.RaceLogWindFixEvent;
import com.sap.sailing.domain.racelog.tracking.RegisterCompetitorEvent;
import com.sap.sailing.domain.racelog.tracking.StartTrackingEvent;
import com.sap.sailing.domain.racelog.tracking.DenoteForTrackingEvent;
import com.sap.sailing.domain.racelog.tracking.DeviceCompetitorMappingEvent;
@@ -118,4 +119,8 @@ public class GenericRaceLogListener implements RaceLogEventVisitor {
@Override
public void visit(RevokeEvent event) {
}
@Override
public void visit(RegisterCompetitorEvent event) {
}
}
@@ -12,12 +12,13 @@ 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.racelog.impl.RaceLogEventFactoryImpl;
import com.sap.sailing.domain.racelog.tracking.StartTrackingEvent;
import com.sap.sailing.domain.racelog.tracking.DenoteForTrackingEvent;
import com.sap.sailing.domain.racelog.tracking.DeviceCompetitorMappingEvent;
import com.sap.sailing.domain.racelog.tracking.DeviceIdentifier;
import com.sap.sailing.domain.racelog.tracking.DeviceMarkMappingEvent;
import com.sap.sailing.domain.racelog.tracking.RegisterCompetitorEvent;
import com.sap.sailing.domain.racelog.tracking.RevokeEvent;
import com.sap.sailing.domain.racelog.tracking.StartTrackingEvent;
import com.sap.sailing.domain.tracking.Wind;
public interface RaceLogEventFactory {
@@ -108,5 +109,7 @@ public interface RaceLogEventFactory {
StartTrackingEvent createStartTrackingEvent(TimePoint logicalTimePoint, RaceLogEventAuthor author, int passId);
RevokeEvent createRevokeEvent(TimePoint logicalTimePoint, RaceLogEventAuthor author, int passId, Serializable revokedEventId);
RegisterCompetitorEvent createRegisterCompetitorEvent(TimePoint logicalTimePoint, RaceLogEventAuthor author, int passId, Competitor competitor);
}
@@ -12,12 +12,13 @@ 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.racelog.impl.RaceLogEventRestoreFactoryImpl;
import com.sap.sailing.domain.racelog.tracking.StartTrackingEvent;
import com.sap.sailing.domain.racelog.tracking.DenoteForTrackingEvent;
import com.sap.sailing.domain.racelog.tracking.DeviceCompetitorMappingEvent;
import com.sap.sailing.domain.racelog.tracking.DeviceIdentifier;
import com.sap.sailing.domain.racelog.tracking.DeviceMarkMappingEvent;
import com.sap.sailing.domain.racelog.tracking.RegisterCompetitorEvent;
import com.sap.sailing.domain.racelog.tracking.RevokeEvent;
import com.sap.sailing.domain.racelog.tracking.StartTrackingEvent;
import com.sap.sailing.domain.tracking.Wind;
public interface RaceLogEventRestoreFactory extends RaceLogEventFactory {
@@ -79,4 +80,7 @@ public interface RaceLogEventRestoreFactory extends RaceLogEventFactory {
RevokeEvent createRevokeEvent(TimePoint createdAt, RaceLogEventAuthor author,
TimePoint logicalTimePoint, Serializable pId, int passId, Serializable revokedEventId);
RegisterCompetitorEvent createRegisterCompetitorEvent(TimePoint createdAt, RaceLogEventAuthor author,
TimePoint logicalTimePoint, Serializable pId, int passId, Competitor competitor);
}
@@ -1,5 +1,6 @@
package com.sap.sailing.domain.racelog;
import com.sap.sailing.domain.racelog.tracking.RegisterCompetitorEvent;
import com.sap.sailing.domain.racelog.tracking.StartTrackingEvent;
import com.sap.sailing.domain.racelog.tracking.DenoteForTrackingEvent;
import com.sap.sailing.domain.racelog.tracking.DeviceCompetitorMappingEvent;
@@ -43,4 +44,6 @@ public interface RaceLogEventVisitor {
public void visit(StartTrackingEvent event);
public void visit(RevokeEvent event);
public void visit(RegisterCompetitorEvent event);
}
@@ -14,6 +14,7 @@ import com.sap.sailing.domain.racelog.RaceLogRaceStatusEvent;
import com.sap.sailing.domain.racelog.RaceLogStartProcedureChangedEvent;
import com.sap.sailing.domain.racelog.RaceLogStartTimeEvent;
import com.sap.sailing.domain.racelog.RaceLogWindFixEvent;
import com.sap.sailing.domain.racelog.tracking.RegisterCompetitorEvent;
import com.sap.sailing.domain.racelog.tracking.StartTrackingEvent;
import com.sap.sailing.domain.racelog.tracking.DenoteForTrackingEvent;
import com.sap.sailing.domain.racelog.tracking.DeviceCompetitorMappingEvent;
@@ -114,5 +115,10 @@ public abstract class BaseRaceLogEventVisitor implements RaceLogEventVisitor {
public void visit(RevokeEvent event) {
}
@Override
public void visit(RegisterCompetitorEvent event) {
}
}
@@ -15,6 +15,7 @@ import com.sap.sailing.domain.racelog.RaceLogRaceStatusEvent;
import com.sap.sailing.domain.racelog.RaceLogStartProcedureChangedEvent;
import com.sap.sailing.domain.racelog.RaceLogStartTimeEvent;
import com.sap.sailing.domain.racelog.RaceLogWindFixEvent;
import com.sap.sailing.domain.racelog.tracking.RegisterCompetitorEvent;
import com.sap.sailing.domain.racelog.tracking.StartTrackingEvent;
import com.sap.sailing.domain.racelog.tracking.DenoteForTrackingEvent;
import com.sap.sailing.domain.racelog.tracking.DeviceCompetitorMappingEvent;
@@ -113,4 +114,9 @@ public class RaceLogChangedVisitor implements RaceLogEventVisitor {
listener.eventAdded(event);
}
@Override
public void visit(RegisterCompetitorEvent event) {
listener.eventAdded(event);
}
}
@@ -29,12 +29,14 @@ import com.sap.sailing.domain.racelog.RaceLogRaceStatusEvent;
import com.sap.sailing.domain.racelog.RaceLogStartProcedureChangedEvent;
import com.sap.sailing.domain.racelog.RaceLogStartTimeEvent;
import com.sap.sailing.domain.racelog.RaceLogWindFixEvent;
import com.sap.sailing.domain.racelog.tracking.RegisterCompetitorEvent;
import com.sap.sailing.domain.racelog.tracking.StartTrackingEvent;
import com.sap.sailing.domain.racelog.tracking.DenoteForTrackingEvent;
import com.sap.sailing.domain.racelog.tracking.DeviceCompetitorMappingEvent;
import com.sap.sailing.domain.racelog.tracking.DeviceIdentifier;
import com.sap.sailing.domain.racelog.tracking.DeviceMarkMappingEvent;
import com.sap.sailing.domain.racelog.tracking.RevokeEvent;
import com.sap.sailing.domain.racelog.tracking.events.RegisterCompetitorEventImpl;
import com.sap.sailing.domain.racelog.tracking.events.StartTrackingEventImpl;
import com.sap.sailing.domain.racelog.tracking.events.DenoteForTrackingEventImpl;
import com.sap.sailing.domain.racelog.tracking.events.DeviceCompetitorMappingEventImpl;
@@ -242,5 +244,11 @@ public class RaceLogEventFactoryImpl implements RaceLogEventFactory {
public RevokeEvent createRevokeEvent(TimePoint logicalTimePoint, RaceLogEventAuthor author, int passId, Serializable revokedEventId) {
return new RevokeEventImpl(MillisecondsTimePoint.now(), author, logicalTimePoint, UUID.randomUUID(), passId, revokedEventId);
}
@Override
public RegisterCompetitorEvent createRegisterCompetitorEvent(TimePoint logicalTimePoint, RaceLogEventAuthor author,
int passId, Competitor competitor) {
return new RegisterCompetitorEventImpl(MillisecondsTimePoint.now(), author, logicalTimePoint, UUID.randomUUID(), passId, competitor);
}
}
@@ -27,17 +27,19 @@ import com.sap.sailing.domain.racelog.RaceLogRaceStatusEvent;
import com.sap.sailing.domain.racelog.RaceLogStartProcedureChangedEvent;
import com.sap.sailing.domain.racelog.RaceLogStartTimeEvent;
import com.sap.sailing.domain.racelog.RaceLogWindFixEvent;
import com.sap.sailing.domain.racelog.tracking.StartTrackingEvent;
import com.sap.sailing.domain.racelog.tracking.DenoteForTrackingEvent;
import com.sap.sailing.domain.racelog.tracking.DeviceCompetitorMappingEvent;
import com.sap.sailing.domain.racelog.tracking.DeviceIdentifier;
import com.sap.sailing.domain.racelog.tracking.DeviceMarkMappingEvent;
import com.sap.sailing.domain.racelog.tracking.RegisterCompetitorEvent;
import com.sap.sailing.domain.racelog.tracking.RevokeEvent;
import com.sap.sailing.domain.racelog.tracking.events.StartTrackingEventImpl;
import com.sap.sailing.domain.racelog.tracking.StartTrackingEvent;
import com.sap.sailing.domain.racelog.tracking.events.DenoteForTrackingEventImpl;
import com.sap.sailing.domain.racelog.tracking.events.DeviceCompetitorMappingEventImpl;
import com.sap.sailing.domain.racelog.tracking.events.DeviceMarkMappingEventImpl;
import com.sap.sailing.domain.racelog.tracking.events.RegisterCompetitorEventImpl;
import com.sap.sailing.domain.racelog.tracking.events.RevokeEventImpl;
import com.sap.sailing.domain.racelog.tracking.events.StartTrackingEventImpl;
import com.sap.sailing.domain.tracking.Wind;
public class RaceLogEventRestoreFactoryImpl extends RaceLogEventFactoryImpl implements RaceLogEventRestoreFactory {
@@ -152,5 +154,11 @@ public class RaceLogEventRestoreFactoryImpl extends RaceLogEventFactoryImpl impl
Serializable pId, int passId, Serializable revokedEventId) {
return new RevokeEventImpl(createdAt, author, logicalTimePoint, pId, passId, revokedEventId);
}
@Override
public RegisterCompetitorEvent createRegisterCompetitorEvent(TimePoint createdAt, RaceLogEventAuthor author, TimePoint logicalTimePoint,
Serializable pId, int passId, Competitor competitor) {
return new RegisterCompetitorEventImpl(createdAt, author, logicalTimePoint, pId, passId, competitor);
}
}
@@ -2,6 +2,11 @@ package com.sap.sailing.domain.racelog.tracking;
import com.sap.sailing.domain.base.Competitor;
/**
* Also registers the competitor for the race, even if no {@link RegisterCompetitorEvent} is present.
* @author Fredrik Teschke
*
*/
public interface DeviceCompetitorMappingEvent extends DeviceMappingEvent<Competitor> {
}
@@ -0,0 +1,8 @@
package com.sap.sailing.domain.racelog.tracking;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.racelog.RaceLogEvent;
public interface RegisterCompetitorEvent extends RaceLogEvent {
Competitor getCompetitor();
}
@@ -0,0 +1,30 @@
package com.sap.sailing.domain.racelog.tracking.events;
import java.io.Serializable;
import java.util.Collections;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.common.TimePoint;
import com.sap.sailing.domain.racelog.RaceLogEventAuthor;
import com.sap.sailing.domain.racelog.RaceLogEventVisitor;
import com.sap.sailing.domain.racelog.impl.RaceLogEventImpl;
import com.sap.sailing.domain.racelog.tracking.RegisterCompetitorEvent;
public class RegisterCompetitorEventImpl extends RaceLogEventImpl implements RegisterCompetitorEvent {
private static final long serialVersionUID = -30864810737555657L;
public RegisterCompetitorEventImpl(TimePoint createdAt, RaceLogEventAuthor author, TimePoint logicalTimePoint,
Serializable pId, int pPassId, Competitor competitor) {
super(createdAt, author, logicalTimePoint, pId, Collections.singletonList(competitor), pPassId);
}
@Override
public void accept(RaceLogEventVisitor visitor) {
visitor.visit(this);
}
@Override
public Competitor getCompetitor() {
return getInvolvedBoats().get(0);
}
}
@@ -19,6 +19,7 @@ import com.sap.sailing.domain.racelog.RaceLogRaceStatusEvent;
import com.sap.sailing.domain.racelog.RaceLogStartProcedureChangedEvent;
import com.sap.sailing.domain.racelog.RaceLogStartTimeEvent;
import com.sap.sailing.domain.racelog.RaceLogWindFixEvent;
import com.sap.sailing.domain.racelog.tracking.RegisterCompetitorEvent;
import com.sap.sailing.domain.racelog.tracking.StartTrackingEvent;
import com.sap.sailing.domain.racelog.tracking.DenoteForTrackingEvent;
import com.sap.sailing.domain.racelog.tracking.DeviceCompetitorMappingEvent;
@@ -132,4 +133,9 @@ public class RaceColumnRaceLogReplicator implements RaceLogEventVisitor, Seriali
public void visit(RevokeEvent event) {
notifyOnAdd(event);
}
@Override
public void visit(RegisterCompetitorEvent event) {
notifyOnAdd(event);
}
}
@@ -46,6 +46,7 @@ import com.sap.sailing.domain.racelog.tracking.DenoteForTrackingEvent;
import com.sap.sailing.domain.racelog.tracking.DeviceCompetitorMappingEvent;
import com.sap.sailing.domain.racelog.tracking.DeviceIdentifier;
import com.sap.sailing.domain.racelog.tracking.DeviceMarkMappingEvent;
import com.sap.sailing.domain.racelog.tracking.RegisterCompetitorEvent;
import com.sap.sailing.domain.racelog.tracking.RevokeEvent;
import com.sap.sailing.domain.racelog.tracking.SmartphoneImeiIdentifier;
import com.sap.sailing.domain.racelog.tracking.test.mock.MockServiceFinderFactory;
@@ -235,6 +236,19 @@ public class StoreAndLoadRaceLogEventsTest extends AbstractMongoDBTest {
assertEquals(revokedEventId, actualEvent.getRevokedEventId());
}
@Test
public void testStoreAndLoadRegisterCompetitorEvent() {
RegisterCompetitorEvent expectedEvent = eventFactory.createRegisterCompetitorEvent(
expectedEventTime, author, expectedEventTime, expectedId, expectedPassId,
DomainFactory.INSTANCE.getOrCreateCompetitor("comp", "comp", null, null, null));
DBObject dbObject = mongoFactory.storeRaceLogEntry(logIdentifier, expectedEvent);
RegisterCompetitorEvent actualEvent = loadEvent(dbObject);
assertBaseFields(expectedEvent, actualEvent);
assertEquals(expectedEvent.getCompetitor(), actualEvent.getCompetitor());
}
/**
* Will always wait a couple of milliseconds to ensure that {@link RaceLogEvent#getCreatedAt()} has passed.
*/
@@ -6,6 +6,7 @@ import static org.mockito.Mockito.verify;
import org.junit.Before;
import org.junit.Test;
import com.sap.sailing.domain.base.DomainFactory;
import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus;
import com.sap.sailing.domain.common.racelog.RacingProcedureType;
import com.sap.sailing.domain.racelog.RaceLogEvent;
@@ -37,6 +38,7 @@ public class RaceLogEventSerializerTest {
private JsonSerializer<RaceLogEvent> denoteForTrackingEventSerializer;
private JsonSerializer<RaceLogEvent> startTrackingEventSerializer;
private JsonSerializer<RaceLogEvent> revokeEventSerializer;
private JsonSerializer<RaceLogEvent> registerCompetitorEventSerializer;
private RaceLogEventFactory factory;
private RaceLogEventAuthor author = new RaceLogEventAuthorImpl("Test Author", 1);
@@ -62,6 +64,7 @@ public class RaceLogEventSerializerTest {
denoteForTrackingEventSerializer = mock(JsonSerializer.class);
startTrackingEventSerializer = mock(JsonSerializer.class);
revokeEventSerializer = mock(JsonSerializer.class);
registerCompetitorEventSerializer = mock(JsonSerializer.class);
serializer = new RaceLogEventSerializer(flagEventSerializer, startTimeSerializer, raceStatusSerializer,
courseAreaChangedEventSerializer, passChangedSerializer, courseDesignChangedEventSerializer,
@@ -69,7 +72,7 @@ public class RaceLogEventSerializerTest {
pathfinderEventSerializer, gateLineOpeningTimeEventSerializer,
startProcedureTypeChangedEventSerializer, protestStartTimeEventSerializer, windFixEventSerializer,
deviceCompetitorMappingEventSerializer, deviceMarkMappingEventSerializer, denoteForTrackingEventSerializer,
startTrackingEventSerializer, revokeEventSerializer);
startTrackingEventSerializer, revokeEventSerializer, registerCompetitorEventSerializer);
factory = RaceLogEventFactory.INSTANCE;
}
@@ -217,5 +220,14 @@ public class RaceLogEventSerializerTest {
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));
serializer.serialize(event);
verify(registerCompetitorEventSerializer).serialize(event);
}
}
@@ -21,7 +21,6 @@ import com.sap.sailing.server.gateway.deserialization.impl.WindJsonDeserializer;
import com.sap.sailing.server.gateway.serialization.racelog.impl.BaseRaceLogEventSerializer;
import com.sap.sailing.server.gateway.serialization.racelog.impl.RaceLogCourseAreaChangedEventSerializer;
import com.sap.sailing.server.gateway.serialization.racelog.impl.RaceLogCourseDesignChangedEventSerializer;
import com.sap.sailing.server.gateway.serialization.racelog.impl.RaceLogStartTrackingEventSerializer;
import com.sap.sailing.server.gateway.serialization.racelog.impl.RaceLogDenoteForTrackingEventSerializer;
import com.sap.sailing.server.gateway.serialization.racelog.impl.RaceLogDeviceCompetitorMappingEventSerializer;
import com.sap.sailing.server.gateway.serialization.racelog.impl.RaceLogDeviceMarkMappingEventSerializer;
@@ -33,9 +32,11 @@ import com.sap.sailing.server.gateway.serialization.racelog.impl.RaceLogPassChan
import com.sap.sailing.server.gateway.serialization.racelog.impl.RaceLogPathfinderEventSerializer;
import com.sap.sailing.server.gateway.serialization.racelog.impl.RaceLogProtestStartTimeEventSerializer;
import com.sap.sailing.server.gateway.serialization.racelog.impl.RaceLogRaceStatusEventSerializer;
import com.sap.sailing.server.gateway.serialization.racelog.impl.RaceLogRegisterCompetitorEventSerializer;
import com.sap.sailing.server.gateway.serialization.racelog.impl.RaceLogRevokeEventSerializer;
import com.sap.sailing.server.gateway.serialization.racelog.impl.RaceLogStartProcedureChangedEventSerializer;
import com.sap.sailing.server.gateway.serialization.racelog.impl.RaceLogStartTimeEventSerializer;
import com.sap.sailing.server.gateway.serialization.racelog.impl.RaceLogStartTrackingEventSerializer;
import com.sap.sailing.server.gateway.serialization.racelog.impl.RaceLogWindFixEventSerializer;
import com.sap.sailing.server.gateway.serialization.racelog.tracking.DeviceIdentifierJsonHandler;
import com.sap.sailing.server.gateway.serialization.racelog.tracking.impl.SmartphoneImeiJsonHandlerImpl;
@@ -75,7 +76,8 @@ public class RaceLogEventDeserializer implements JsonDeserializer<RaceLogEvent>
new RaceLogDeviceMarkMappingEventDeserializer(competitorDeserializer, deviceServiceFinder),
new RaceLogDenoteForTrackingEventDeserializer(competitorDeserializer),
new RaceLogStartTrackingEventDeserializer(competitorDeserializer),
new RaceLogRevokeEventDeserializer(competitorDeserializer));
new RaceLogRevokeEventDeserializer(competitorDeserializer),
new RaceLogRegisterCompetitorEventDeserializer(competitorDeserializer));
}
protected final JsonDeserializer<RaceLogEvent> flagEventDeserializer;
@@ -96,6 +98,7 @@ public class RaceLogEventDeserializer implements JsonDeserializer<RaceLogEvent>
protected final JsonDeserializer<RaceLogEvent> denoteForTrackingEventDeserializer;
protected final JsonDeserializer<RaceLogEvent> startTrackingEventDeserializer;
protected final JsonDeserializer<RaceLogEvent> revokeEventDeserializer;
protected final JsonDeserializer<RaceLogEvent> registerCompetitorEventDeserializer;
public RaceLogEventDeserializer(JsonDeserializer<RaceLogEvent> flagEventDeserializer,
JsonDeserializer<RaceLogEvent> startTimeEventDeserializer,
@@ -114,7 +117,8 @@ public class RaceLogEventDeserializer implements JsonDeserializer<RaceLogEvent>
JsonDeserializer<RaceLogEvent> deviceMarkMappingEventDeserializer,
JsonDeserializer<RaceLogEvent> denoteForTrackingEventDeserializer,
JsonDeserializer<RaceLogEvent> startTrackingEventDeserializer,
JsonDeserializer<RaceLogEvent> revokeEventDeserializer) {
JsonDeserializer<RaceLogEvent> revokeEventDeserializer,
JsonDeserializer<RaceLogEvent> registerCompetitorEventDeserializer) {
this.flagEventDeserializer = flagEventDeserializer;
this.startTimeEventDeserializer = startTimeEventDeserializer;
this.raceStatusEventDeserializer = raceStatusEventDeserializer;
@@ -133,6 +137,7 @@ public class RaceLogEventDeserializer implements JsonDeserializer<RaceLogEvent>
this.denoteForTrackingEventDeserializer = denoteForTrackingEventDeserializer;
this.startTrackingEventDeserializer = startTrackingEventDeserializer;
this.revokeEventDeserializer = revokeEventDeserializer;
this.registerCompetitorEventDeserializer = registerCompetitorEventDeserializer;
}
protected JsonDeserializer<RaceLogEvent> getDeserializer(JSONObject object) throws JsonDeserializationException {
@@ -174,6 +179,8 @@ public class RaceLogEventDeserializer implements JsonDeserializer<RaceLogEvent>
return startTrackingEventDeserializer;
} else if (type.equals(RaceLogRevokeEventSerializer.VALUE_CLASS)) {
return revokeEventDeserializer;
} else if (type.equals(RaceLogRegisterCompetitorEventSerializer.VALUE_CLASS)) {
return registerCompetitorEventDeserializer;
}
throw new JsonDeserializationException(String.format("There is no deserializer defined for event type %s.",
@@ -0,0 +1,26 @@
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.base.Competitor;
import com.sap.sailing.domain.common.TimePoint;
import com.sap.sailing.domain.racelog.RaceLogEvent;
import com.sap.sailing.domain.racelog.RaceLogEventAuthor;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
public class RaceLogRegisterCompetitorEventDeserializer extends BaseRaceLogEventDeserializer {
public RaceLogRegisterCompetitorEventDeserializer(JsonDeserializer<Competitor> competitorDeserializer) {
super(competitorDeserializer);
}
@Override
protected RaceLogEvent deserialize(JSONObject object, Serializable id, TimePoint createdAt, RaceLogEventAuthor author, TimePoint timePoint, int passId, List<Competitor> competitors) {
assert competitors.size() == 1 : "Expected exactly one competitor for RegisterCompetitorEvent";
return factory.createRegisterCompetitorEvent(createdAt, author, timePoint, id, passId, competitors.get(0));
}
}
@@ -20,6 +20,7 @@ import com.sap.sailing.domain.racelog.RaceLogRaceStatusEvent;
import com.sap.sailing.domain.racelog.RaceLogStartProcedureChangedEvent;
import com.sap.sailing.domain.racelog.RaceLogStartTimeEvent;
import com.sap.sailing.domain.racelog.RaceLogWindFixEvent;
import com.sap.sailing.domain.racelog.tracking.RegisterCompetitorEvent;
import com.sap.sailing.domain.racelog.tracking.StartTrackingEvent;
import com.sap.sailing.domain.racelog.tracking.DenoteForTrackingEvent;
import com.sap.sailing.domain.racelog.tracking.DeviceCompetitorMappingEvent;
@@ -70,7 +71,8 @@ public class RaceLogEventSerializer implements JsonSerializer<RaceLogEvent>, Rac
new RaceLogDeviceMarkMappingEventSerializer(competitorSerializer, deviceServiceFinder),
new RaceLogDenoteForTrackingEventSerializer(competitorSerializer),
new RaceLogStartTrackingEventSerializer(competitorSerializer),
new RaceLogRevokeEventSerializer(competitorSerializer));
new RaceLogRevokeEventSerializer(competitorSerializer),
new RaceLogRegisterCompetitorEventSerializer(competitorSerializer));
}
private final JsonSerializer<RaceLogEvent> flagEventSerializer;
@@ -91,6 +93,7 @@ public class RaceLogEventSerializer implements JsonSerializer<RaceLogEvent>, Rac
private final JsonSerializer<RaceLogEvent> denoteForTrackingSerializer;
private final JsonSerializer<RaceLogEvent> startTrackingSerializer;
private final JsonSerializer<RaceLogEvent> revokeSerializer;
private final JsonSerializer<RaceLogEvent> registerCompetitorSerializer;
private JsonSerializer<RaceLogEvent> chosenSerializer;
@@ -112,7 +115,8 @@ public class RaceLogEventSerializer implements JsonSerializer<RaceLogEvent>, Rac
JsonSerializer<RaceLogEvent> deviceMarkMappingSerializer,
JsonSerializer<RaceLogEvent> denoteForTrackingSerializer,
JsonSerializer<RaceLogEvent> createRaceSerializer,
JsonSerializer<RaceLogEvent> revokeSerializer) {
JsonSerializer<RaceLogEvent> revokeSerializer,
JsonSerializer<RaceLogEvent> registerCompetitorSerializer) {
this.flagEventSerializer = flagEventSerializer;
this.startTimeSerializer = startTimeSerializer;
this.raceStatusSerializer = raceStatusSerializer;
@@ -131,6 +135,7 @@ public class RaceLogEventSerializer implements JsonSerializer<RaceLogEvent>, Rac
this.denoteForTrackingSerializer = denoteForTrackingSerializer;
this.startTrackingSerializer = createRaceSerializer;
this.revokeSerializer = revokeSerializer;
this.registerCompetitorSerializer = registerCompetitorSerializer;
this.chosenSerializer = null;
}
@@ -238,5 +243,9 @@ public class RaceLogEventSerializer implements JsonSerializer<RaceLogEvent>, Rac
public void visit(RevokeEvent event) {
chosenSerializer = revokeSerializer;
}
@Override
public void visit(RegisterCompetitorEvent event) {
chosenSerializer = registerCompetitorSerializer;
}
}
@@ -0,0 +1,20 @@
package com.sap.sailing.server.gateway.serialization.racelog.impl;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.racelog.tracking.RegisterCompetitorEvent;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class RaceLogRegisterCompetitorEventSerializer extends BaseRaceLogEventSerializer {
public static final String VALUE_CLASS = RegisterCompetitorEvent.class.getSimpleName();
public RaceLogRegisterCompetitorEventSerializer(
JsonSerializer<Competitor> competitorSerializer) {
super(competitorSerializer);
}
@Override
protected String getClassFieldValue() {
return VALUE_CLASS;
}
}