refs bug 1125

# added ProtestStartTimeEvent (and tests and serializers and persistence)
This commit is contained in:
Lukas Niemeier committed 2013-06-09 19:33:50 +02:00
1 parent 70b3a27c9d
commit 4a9cdcd021
23 files changed
+594 -336

No files matched your search

@@ -17,5 +17,4 @@ Export-Package: com.sap.sailing.server.gateway.deserialization,
com.sap.sailing.server.gateway.serialization.coursedata.impl,
com.sap.sailing.server.gateway.serialization.impl,
com.sap.sailing.server.gateway.serialization.racegroup.impl,
com.sap.sailing.server.gateway.serialization.racelog,
com.sap.sailing.server.gateway.serialization.racelog.impl
@@ -0,0 +1,30 @@
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.base.impl.MillisecondsTimePoint;
import com.sap.sailing.domain.common.TimePoint;
import com.sap.sailing.domain.racelog.RaceLogEvent;
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.RaceLogProtestStartTimeEventSerializer;
public class RaceLogProtestStartTimeEventDeserializer extends BaseRaceLogEventDeserializer {
public RaceLogProtestStartTimeEventDeserializer(JsonDeserializer<Competitor> competitorDeserializer) {
super(competitorDeserializer);
}
@Override
protected RaceLogEvent deserialize(JSONObject object, Serializable id, TimePoint createdAt, TimePoint timePoint,
int passId, List<Competitor> competitors) throws JsonDeserializationException {
Long protestStartTime = (Long) object.get(RaceLogProtestStartTimeEventSerializer.FIELD_PROTEST_START_TIME);
return factory.createProtestStartTimeEvent(createdAt, timePoint, id, competitors, passId,
new MillisecondsTimePoint(protestStartTime));
}
}
@@ -1,8 +0,0 @@
package com.sap.sailing.server.gateway.serialization.racelog;
import com.sap.sailing.domain.racelog.RaceLogEvent;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public interface RaceLogEventSerializerChooser {
JsonSerializer<RaceLogEvent> getSerializer(RaceLogEvent event);
}
@@ -3,19 +3,31 @@ 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.RaceLogCourseAreaChangedEvent;
import com.sap.sailing.domain.racelog.RaceLogCourseDesignChangedEvent;
import com.sap.sailing.domain.racelog.RaceLogEvent;
import com.sap.sailing.domain.racelog.RaceLogEventVisitor;
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.RaceLogGateLineOpeningTimeEvent;
import com.sap.sailing.domain.racelog.RaceLogPassChangeEvent;
import com.sap.sailing.domain.racelog.RaceLogPathfinderEvent;
import com.sap.sailing.domain.racelog.RaceLogProtestStartTimeEvent;
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.server.gateway.serialization.JsonSerializer;
import com.sap.sailing.server.gateway.serialization.coursedata.impl.ControlPointJsonSerializer;
import com.sap.sailing.server.gateway.serialization.coursedata.impl.CourseBaseJsonSerializer;
import com.sap.sailing.server.gateway.serialization.coursedata.impl.GateJsonSerializer;
import com.sap.sailing.server.gateway.serialization.coursedata.impl.MarkJsonSerializer;
import com.sap.sailing.server.gateway.serialization.coursedata.impl.WaypointJsonSerializer;
import com.sap.sailing.server.gateway.serialization.racelog.RaceLogEventSerializerChooser;
public class RaceLogEventSerializer implements JsonSerializer<RaceLogEvent> {
public class RaceLogEventSerializer implements JsonSerializer<RaceLogEvent>, RaceLogEventVisitor {
public static JsonSerializer<RaceLogEvent> create(JsonSerializer<Competitor> competitorSerializer) {
return new RaceLogEventSerializer(new RaceLogEventSerializerChooserImpl(
return new RaceLogEventSerializer(
new RaceLogFlagEventSerializer(competitorSerializer),
new RaceLogStartTimeEventSerializer(competitorSerializer),
new RaceLogRaceStatusEventSerializer(competitorSerializer),
@@ -31,17 +43,63 @@ public class RaceLogEventSerializer implements JsonSerializer<RaceLogEvent> {
new RaceLogFinishPositioningConfirmedEventSerializer(competitorSerializer),
new RaceLogPathfinderEventSerializer(competitorSerializer),
new RaceLogGateLineOpeningTimeEventSerializer(competitorSerializer),
new RaceLogStartProcedureChangedEventSerializer(competitorSerializer)));
new RaceLogStartProcedureChangedEventSerializer(competitorSerializer),
new RaceLogProtestStartTimeEventSerializer(competitorSerializer));
}
private RaceLogEventSerializerChooser serializerChooser;
private final JsonSerializer<RaceLogEvent> flagEventSerializer;
private final JsonSerializer<RaceLogEvent> startTimeSerializer;
private final JsonSerializer<RaceLogEvent> raceStatusSerializer;
private final JsonSerializer<RaceLogEvent> courseAreaChangedEventSerializer;
private final JsonSerializer<RaceLogEvent> passChangedEventSerializer;
private final JsonSerializer<RaceLogEvent> courseDesignChangedEventSerializer;
private final JsonSerializer<RaceLogEvent> finishPositioningListChangedEventSerializer;
private final JsonSerializer<RaceLogEvent> finishPositioningConfirmedEventSerializer;
private final JsonSerializer<RaceLogEvent> pathfinderEventSerializer;
private final JsonSerializer<RaceLogEvent> gateLineOpeningTimeEventSerializer;
private final JsonSerializer<RaceLogEvent> startProcedureChangedEventSerializer;
private final JsonSerializer<RaceLogEvent> protestStartTimeEventSerializer;
private JsonSerializer<RaceLogEvent> chosenSerializer;
public RaceLogEventSerializer(RaceLogEventSerializerChooser serializerChooser) {
this.serializerChooser = serializerChooser;
public RaceLogEventSerializer(
JsonSerializer<RaceLogEvent> flagEventSerializer,
JsonSerializer<RaceLogEvent> startTimeSerializer,
JsonSerializer<RaceLogEvent> raceStatusSerializer,
JsonSerializer<RaceLogEvent> courseAreaChangedEventSerializer,
JsonSerializer<RaceLogEvent> passChangedEventSerializer,
JsonSerializer<RaceLogEvent> courseDesignChangedEventSerializer,
JsonSerializer<RaceLogEvent> finishPositioningListChangedEventSerializer,
JsonSerializer<RaceLogEvent> finishPositioningConfirmedEventSerializer,
JsonSerializer<RaceLogEvent> pathfinderEventSerializer,
JsonSerializer<RaceLogEvent> gateLineOpeningTimeEventSerializer,
JsonSerializer<RaceLogEvent> startProcedureChangedEventSerializer,
JsonSerializer<RaceLogEvent> protestStartTimeEventSerializer) {
this.flagEventSerializer = flagEventSerializer;
this.startTimeSerializer = startTimeSerializer;
this.raceStatusSerializer = raceStatusSerializer;
this.courseAreaChangedEventSerializer = courseAreaChangedEventSerializer;
this.passChangedEventSerializer = passChangedEventSerializer;
this.courseDesignChangedEventSerializer = courseDesignChangedEventSerializer;
this.finishPositioningListChangedEventSerializer = finishPositioningListChangedEventSerializer;
this.finishPositioningConfirmedEventSerializer = finishPositioningConfirmedEventSerializer;
this.pathfinderEventSerializer = pathfinderEventSerializer;
this.gateLineOpeningTimeEventSerializer = gateLineOpeningTimeEventSerializer;
this.startProcedureChangedEventSerializer = startProcedureChangedEventSerializer;
this.protestStartTimeEventSerializer = protestStartTimeEventSerializer;
this.chosenSerializer = null;
}
protected JsonSerializer<RaceLogEvent> getSerializer(RaceLogEvent event) {
return serializerChooser.getSerializer(event);
chosenSerializer = null;
event.accept(this);
if (chosenSerializer == null) {
throw new UnsupportedOperationException(
String.format("There is no serializer for event type %s",
event.getClass().getName()));
}
return chosenSerializer;
}
@Override
@@ -49,4 +107,64 @@ public class RaceLogEventSerializer implements JsonSerializer<RaceLogEvent> {
return getSerializer(object).serialize(object);
}
@Override
public void visit(RaceLogFlagEvent event) {
chosenSerializer = flagEventSerializer;
}
@Override
public void visit(RaceLogPassChangeEvent event) {
chosenSerializer = passChangedEventSerializer;
}
@Override
public void visit(RaceLogRaceStatusEvent event) {
chosenSerializer = raceStatusSerializer;
}
@Override
public void visit(RaceLogStartTimeEvent event) {
chosenSerializer = startTimeSerializer;
}
@Override
public void visit(RaceLogCourseAreaChangedEvent event) {
chosenSerializer = courseAreaChangedEventSerializer;
}
@Override
public void visit(RaceLogCourseDesignChangedEvent event) {
chosenSerializer = courseDesignChangedEventSerializer;
}
@Override
public void visit(RaceLogFinishPositioningListChangedEvent event) {
chosenSerializer = finishPositioningListChangedEventSerializer;
}
@Override
public void visit(RaceLogFinishPositioningConfirmedEvent event) {
chosenSerializer = finishPositioningConfirmedEventSerializer;
}
@Override
public void visit(RaceLogPathfinderEvent event) {
chosenSerializer = pathfinderEventSerializer;
}
@Override
public void visit(RaceLogGateLineOpeningTimeEvent event) {
chosenSerializer = gateLineOpeningTimeEventSerializer;
}
@Override
public void visit(RaceLogStartProcedureChangedEvent event) {
chosenSerializer = startProcedureChangedEventSerializer;
}
@Override
public void visit(RaceLogProtestStartTimeEvent event) {
chosenSerializer = protestStartTimeEventSerializer;
}
}
@@ -1,129 +0,0 @@
package com.sap.sailing.server.gateway.serialization.racelog.impl;
import com.sap.sailing.domain.racelog.RaceLogCourseAreaChangedEvent;
import com.sap.sailing.domain.racelog.RaceLogCourseDesignChangedEvent;
import com.sap.sailing.domain.racelog.RaceLogEvent;
import com.sap.sailing.domain.racelog.RaceLogEventVisitor;
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.RaceLogGateLineOpeningTimeEvent;
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.RaceLogStartProcedureChangedEvent;
import com.sap.sailing.domain.racelog.RaceLogStartTimeEvent;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
import com.sap.sailing.server.gateway.serialization.racelog.RaceLogEventSerializerChooser;
public class RaceLogEventSerializerChooserImpl implements RaceLogEventSerializerChooser, RaceLogEventVisitor {
private final JsonSerializer<RaceLogEvent> flagEventSerializer;
private final JsonSerializer<RaceLogEvent> startTimeSerializer;
private final JsonSerializer<RaceLogEvent> raceStatusSerializer;
private final JsonSerializer<RaceLogEvent> courseAreaChangedEventSerializer;
private final JsonSerializer<RaceLogEvent> passChangedEventSerializer;
private final JsonSerializer<RaceLogEvent> courseDesignChangedEventSerializer;
private final JsonSerializer<RaceLogEvent> finishPositioningListChangedEventSerializer;
private final JsonSerializer<RaceLogEvent> finishPositioningConfirmedEventSerializer;
private final JsonSerializer<RaceLogEvent> pathfinderEventSerializer;
private final JsonSerializer<RaceLogEvent> gateLineOpeningTimeEventSerializer;
private final JsonSerializer<RaceLogEvent> startProcedureChangedEventSerializer;
private JsonSerializer<RaceLogEvent> chosenSerializer;
public RaceLogEventSerializerChooserImpl(
JsonSerializer<RaceLogEvent> flagEventSerializer,
JsonSerializer<RaceLogEvent> startTimeSerializer,
JsonSerializer<RaceLogEvent> raceStatusSerializer,
JsonSerializer<RaceLogEvent> courseAreaChangedEventSerializer,
JsonSerializer<RaceLogEvent> passChangedEventSerializer,
JsonSerializer<RaceLogEvent> courseDesignChangedEventSerializer,
JsonSerializer<RaceLogEvent> finishPositioningListChangedEventSerializer,
JsonSerializer<RaceLogEvent> finishPositioningConfirmedEventSerializer,
JsonSerializer<RaceLogEvent> pathfinderEventSerializer,
JsonSerializer<RaceLogEvent> gateLineOpeningTimeEventSerializer,
JsonSerializer<RaceLogEvent> startProcedureChangedEventSerializer) {
this.flagEventSerializer = flagEventSerializer;
this.startTimeSerializer = startTimeSerializer;
this.raceStatusSerializer = raceStatusSerializer;
this.courseAreaChangedEventSerializer = courseAreaChangedEventSerializer;
this.passChangedEventSerializer = passChangedEventSerializer;
this.courseDesignChangedEventSerializer = courseDesignChangedEventSerializer;
this.finishPositioningListChangedEventSerializer = finishPositioningListChangedEventSerializer;
this.finishPositioningConfirmedEventSerializer = finishPositioningConfirmedEventSerializer;
this.pathfinderEventSerializer = pathfinderEventSerializer;
this.gateLineOpeningTimeEventSerializer = gateLineOpeningTimeEventSerializer;
this.startProcedureChangedEventSerializer = startProcedureChangedEventSerializer;
this.chosenSerializer = null;
}
@Override
public JsonSerializer<RaceLogEvent> getSerializer(RaceLogEvent event) {
chosenSerializer = null;
event.accept(this);
if (chosenSerializer == null) {
throw new UnsupportedOperationException(
String.format("There is no serializer for event type %s",
event.getClass().getName()));
}
return chosenSerializer;
}
@Override
public void visit(RaceLogFlagEvent event) {
chosenSerializer = flagEventSerializer;
}
@Override
public void visit(RaceLogPassChangeEvent event) {
chosenSerializer = passChangedEventSerializer;
}
@Override
public void visit(RaceLogRaceStatusEvent event) {
chosenSerializer = raceStatusSerializer;
}
@Override
public void visit(RaceLogStartTimeEvent event) {
chosenSerializer = startTimeSerializer;
}
@Override
public void visit(RaceLogCourseAreaChangedEvent event) {
chosenSerializer = courseAreaChangedEventSerializer;
}
@Override
public void visit(RaceLogCourseDesignChangedEvent event) {
chosenSerializer = courseDesignChangedEventSerializer;
}
@Override
public void visit(RaceLogFinishPositioningListChangedEvent event) {
chosenSerializer = finishPositioningListChangedEventSerializer;
}
@Override
public void visit(RaceLogFinishPositioningConfirmedEvent event) {
chosenSerializer = finishPositioningConfirmedEventSerializer;
}
@Override
public void visit(RaceLogPathfinderEvent event) {
chosenSerializer = pathfinderEventSerializer;
}
@Override
public void visit(RaceLogGateLineOpeningTimeEvent event) {
chosenSerializer = gateLineOpeningTimeEventSerializer;
}
@Override
public void visit(RaceLogStartProcedureChangedEvent event) {
chosenSerializer = startProcedureChangedEventSerializer;
}
}
@@ -0,0 +1,32 @@
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.RaceLogProtestStartTimeEvent;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class RaceLogProtestStartTimeEventSerializer extends BaseRaceLogEventSerializer {
public static final String VALUE_CLASS = RaceLogProtestStartTimeEvent.class.getSimpleName();
public static final String FIELD_PROTEST_START_TIME = "protestStartTime";
public RaceLogProtestStartTimeEventSerializer(JsonSerializer<Competitor> competitorSerializer) {
super(competitorSerializer);
}
@Override
protected String getClassFieldValue() {
return VALUE_CLASS;
}
@Override
public JSONObject serialize(RaceLogEvent object) {
RaceLogProtestStartTimeEvent event = (RaceLogProtestStartTimeEvent) object;
JSONObject result = super.serialize(event);
result.put(FIELD_PROTEST_START_TIME, event.getProtestStartTime().asMillis());
return result;
}
}