Merge branch 'master' into 60_inch

This commit is contained in:
Steffen Schäfer committed 2017-05-16 10:18:26 +02:00
commit 439f968ec4
2766 files changed
+295942 -295942

No files matched your search

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
<classpathentry kind="output" path="bin"/>
</classpath>
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
<classpathentry kind="output" path="bin"/>
</classpath>
@@ -1,28 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>com.sap.sailing.server.gateway.serialization.shared.android</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.ManifestBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.SchemaBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.pde.PluginNature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>com.sap.sailing.server.gateway.serialization.shared.android</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.ManifestBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.SchemaBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.pde.PluginNature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>
@@ -1,7 +1,7 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
org.eclipse.jdt.core.compiler.compliance=1.7
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.7
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
org.eclipse.jdt.core.compiler.compliance=1.7
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.7
@@ -1,3 +1,3 @@
eclipse.preferences.version=1
pluginProject.extensions=false
resolve.requirebundle=false
eclipse.preferences.version=1
pluginProject.extensions=false
resolve.requirebundle=false
@@ -1,4 +1,4 @@
source.. = src/
output.. = bin/
bin.includes = META-INF/,\
.
source.. = src/
output.. = bin/
bin.includes = META-INF/,\
.
@@ -1,29 +1,29 @@
package com.sap.sailing.server.gateway.deserialization;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.common.racelog.tracking.TransformationException;
/**
* Exception thrown on deserialization error from JSON data.
*/
public class JsonDeserializationException extends TransformationException {
private static final long serialVersionUID = -6725762788023063937L;
public JsonDeserializationException() {
super(JSONObject.class, null, null);
}
public JsonDeserializationException(String message, Throwable innerException) {
super(message, innerException);
}
public JsonDeserializationException(String message) {
super(message);
}
public JsonDeserializationException(Throwable innerException) {
super(innerException);
}
}
package com.sap.sailing.server.gateway.deserialization;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.common.racelog.tracking.TransformationException;
/**
* Exception thrown on deserialization error from JSON data.
*/
public class JsonDeserializationException extends TransformationException {
private static final long serialVersionUID = -6725762788023063937L;
public JsonDeserializationException() {
super(JSONObject.class, null, null);
}
public JsonDeserializationException(String message, Throwable innerException) {
super(message, innerException);
}
public JsonDeserializationException(String message) {
super(message);
}
public JsonDeserializationException(Throwable innerException) {
super(innerException);
}
}
@@ -1,10 +1,10 @@
package com.sap.sailing.server.gateway.deserialization;
import org.json.simple.JSONObject;
/**
* Interface for classes to deserialize {@link JSONObject}s.
*/
public interface JsonDeserializer<T> {
T deserialize(JSONObject object) throws JsonDeserializationException;
}
package com.sap.sailing.server.gateway.deserialization;
import org.json.simple.JSONObject;
/**
* Interface for classes to deserialize {@link JSONObject}s.
*/
public interface JsonDeserializer<T> {
T deserialize(JSONObject object) throws JsonDeserializationException;
}
@@ -1,29 +1,29 @@
package com.sap.sailing.server.gateway.deserialization;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.common.racelog.tracking.TransformationException;
import com.sap.sailing.domain.common.racelog.tracking.TransformationHandler;
import com.sap.sse.common.TypeBasedServiceFinder;
public abstract class TypeBasedJsonDeserializer<T> implements JsonDeserializer<T> {
public static final String FIELD_TYPE = "type";
protected abstract String getType();
protected abstract T deserializeAfterCheckingType(JSONObject object) throws JsonDeserializationException;
@Override
public T deserialize(JSONObject object) throws JsonDeserializationException {
if (!getType().equals(object.get(FIELD_TYPE))) {
throw new JsonDeserializationException(
"Wrong type found (expected: " + getType() + ", but got: " + object.get(FIELD_TYPE) + ")");
}
return deserializeAfterCheckingType(object);
}
public static <T> T deserialize(TypeBasedServiceFinder<? extends TransformationHandler<T, JSONObject>> serviceFinder, JSONObject object)
throws TransformationException {
return serviceFinder.findService((String) object.get(FIELD_TYPE)).transformBack(object);
}
}
package com.sap.sailing.server.gateway.deserialization;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.common.racelog.tracking.TransformationException;
import com.sap.sailing.domain.common.racelog.tracking.TransformationHandler;
import com.sap.sse.common.TypeBasedServiceFinder;
public abstract class TypeBasedJsonDeserializer<T> implements JsonDeserializer<T> {
public static final String FIELD_TYPE = "type";
protected abstract String getType();
protected abstract T deserializeAfterCheckingType(JSONObject object) throws JsonDeserializationException;
@Override
public T deserialize(JSONObject object) throws JsonDeserializationException {
if (!getType().equals(object.get(FIELD_TYPE))) {
throw new JsonDeserializationException(
"Wrong type found (expected: " + getType() + ", but got: " + object.get(FIELD_TYPE) + ")");
}
return deserializeAfterCheckingType(object);
}
public static <T> T deserialize(TypeBasedServiceFinder<? extends TransformationHandler<T, JSONObject>> serviceFinder, JSONObject object)
throws TransformationException {
return serviceFinder.findService((String) object.get(FIELD_TYPE)).transformBack(object);
}
}
@@ -1,35 +1,35 @@
package com.sap.sailing.server.gateway.deserialization.coursedata.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.ControlPoint;
import com.sap.sailing.domain.base.ControlPointWithTwoMarks;
import com.sap.sailing.domain.base.Mark;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
import com.sap.sailing.server.gateway.serialization.coursedata.impl.BaseControlPointJsonSerializer;
/**
* Deserializer for controlpoints.
*/
public class ControlPointDeserializer implements JsonDeserializer<ControlPoint> {
private final MarkDeserializer markDeserializer;
private final GateDeserializer gateDeserializer;
public ControlPointDeserializer(MarkDeserializer markDeserializer, GateDeserializer gateDeserializer) {
this.markDeserializer = markDeserializer;
this.gateDeserializer = gateDeserializer;
}
@Override
public ControlPoint deserialize(JSONObject object) throws JsonDeserializationException {
String classFieldValue = (String) object.get(BaseControlPointJsonSerializer.FIELD_CLASS);
ControlPoint controlPoint = null;
if (classFieldValue.equals(ControlPointWithTwoMarks.class.getSimpleName())) {
controlPoint = gateDeserializer.deserialize(object);
} else if (classFieldValue.equals(Mark.class.getSimpleName())) {
controlPoint = markDeserializer.deserialize(object);
}
return controlPoint;
}
package com.sap.sailing.server.gateway.deserialization.coursedata.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.ControlPoint;
import com.sap.sailing.domain.base.ControlPointWithTwoMarks;
import com.sap.sailing.domain.base.Mark;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
import com.sap.sailing.server.gateway.serialization.coursedata.impl.BaseControlPointJsonSerializer;
/**
* Deserializer for controlpoints.
*/
public class ControlPointDeserializer implements JsonDeserializer<ControlPoint> {
private final MarkDeserializer markDeserializer;
private final GateDeserializer gateDeserializer;
public ControlPointDeserializer(MarkDeserializer markDeserializer, GateDeserializer gateDeserializer) {
this.markDeserializer = markDeserializer;
this.gateDeserializer = gateDeserializer;
}
@Override
public ControlPoint deserialize(JSONObject object) throws JsonDeserializationException {
String classFieldValue = (String) object.get(BaseControlPointJsonSerializer.FIELD_CLASS);
ControlPoint controlPoint = null;
if (classFieldValue.equals(ControlPointWithTwoMarks.class.getSimpleName())) {
controlPoint = gateDeserializer.deserialize(object);
} else if (classFieldValue.equals(Mark.class.getSimpleName())) {
controlPoint = markDeserializer.deserialize(object);
}
return controlPoint;
}
}
@@ -1,38 +1,38 @@
package com.sap.sailing.server.gateway.deserialization.coursedata.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.ControlPointWithTwoMarks;
import com.sap.sailing.domain.base.Mark;
import com.sap.sailing.domain.base.SharedDomainFactory;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
import com.sap.sailing.server.gateway.serialization.coursedata.impl.BaseControlPointJsonSerializer;
import com.sap.sailing.server.gateway.serialization.coursedata.impl.GateJsonSerializer;
/**
* Deserializer for gates.
*/
public class GateDeserializer implements JsonDeserializer<ControlPointWithTwoMarks> {
private SharedDomainFactory factory;
private final MarkDeserializer markDeserializer;
public GateDeserializer(SharedDomainFactory factory, MarkDeserializer markDeserializer) {
this.factory = factory;
this.markDeserializer = markDeserializer;
}
@Override
public ControlPointWithTwoMarks deserialize(JSONObject object) throws JsonDeserializationException {
JSONObject jsonLeftMark = (JSONObject) object.get(GateJsonSerializer.FIELD_LEFT);
JSONObject jsonRightMark = (JSONObject) object.get(GateJsonSerializer.FIELD_RIGHT);
Mark leftMark = markDeserializer.deserialize(jsonLeftMark);
Mark rightMark = markDeserializer.deserialize(jsonRightMark);
String gateName = (String) object.get(BaseControlPointJsonSerializer.FIELD_NAME);
ControlPointWithTwoMarks controlPoint = factory.createControlPointWithTwoMarks(leftMark, rightMark, gateName);
return controlPoint;
}
package com.sap.sailing.server.gateway.deserialization.coursedata.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.ControlPointWithTwoMarks;
import com.sap.sailing.domain.base.Mark;
import com.sap.sailing.domain.base.SharedDomainFactory;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
import com.sap.sailing.server.gateway.serialization.coursedata.impl.BaseControlPointJsonSerializer;
import com.sap.sailing.server.gateway.serialization.coursedata.impl.GateJsonSerializer;
/**
* Deserializer for gates.
*/
public class GateDeserializer implements JsonDeserializer<ControlPointWithTwoMarks> {
private SharedDomainFactory factory;
private final MarkDeserializer markDeserializer;
public GateDeserializer(SharedDomainFactory factory, MarkDeserializer markDeserializer) {
this.factory = factory;
this.markDeserializer = markDeserializer;
}
@Override
public ControlPointWithTwoMarks deserialize(JSONObject object) throws JsonDeserializationException {
JSONObject jsonLeftMark = (JSONObject) object.get(GateJsonSerializer.FIELD_LEFT);
JSONObject jsonRightMark = (JSONObject) object.get(GateJsonSerializer.FIELD_RIGHT);
Mark leftMark = markDeserializer.deserialize(jsonLeftMark);
Mark rightMark = markDeserializer.deserialize(jsonRightMark);
String gateName = (String) object.get(BaseControlPointJsonSerializer.FIELD_NAME);
ControlPointWithTwoMarks controlPoint = factory.createControlPointWithTwoMarks(leftMark, rightMark, gateName);
return controlPoint;
}
}
@@ -1,40 +1,40 @@
package com.sap.sailing.server.gateway.deserialization.coursedata.impl;
import java.io.Serializable;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.Mark;
import com.sap.sailing.domain.base.SharedDomainFactory;
import com.sap.sailing.domain.common.MarkType;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
import com.sap.sailing.server.gateway.deserialization.impl.Helpers;
import com.sap.sailing.server.gateway.serialization.coursedata.impl.MarkJsonSerializer;
import com.sap.sse.common.Color;
import com.sap.sse.common.impl.AbstractColor;
/**
* Deserializer for marks.
*/
public class MarkDeserializer implements JsonDeserializer<Mark> {
private SharedDomainFactory factory;
public MarkDeserializer(SharedDomainFactory factory) {
this.factory = factory;
}
@Override
public Mark deserialize(JSONObject object) throws JsonDeserializationException {
Serializable id = Helpers.tryUuidConversion((Serializable) object.get(MarkJsonSerializer.FIELD_ID));
String colorAsString = (String) object.get(MarkJsonSerializer.FIELD_COLOR);
Color color = colorAsString == null ? null : AbstractColor.getCssColor(colorAsString);
String pattern = (String) object.get(MarkJsonSerializer.FIELD_PATTERN);
String shape = (String) object.get(MarkJsonSerializer.FIELD_SHAPE);
MarkType type = MarkType.valueOf((String) object.get(MarkJsonSerializer.FIELD_TYPE));
String name = (String) object.get(MarkJsonSerializer.FIELD_NAME);
Mark mark = factory.getOrCreateMark(id, name, type, color, shape, pattern);
return mark;
}
}
package com.sap.sailing.server.gateway.deserialization.coursedata.impl;
import java.io.Serializable;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.Mark;
import com.sap.sailing.domain.base.SharedDomainFactory;
import com.sap.sailing.domain.common.MarkType;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
import com.sap.sailing.server.gateway.deserialization.impl.Helpers;
import com.sap.sailing.server.gateway.serialization.coursedata.impl.MarkJsonSerializer;
import com.sap.sse.common.Color;
import com.sap.sse.common.impl.AbstractColor;
/**
* Deserializer for marks.
*/
public class MarkDeserializer implements JsonDeserializer<Mark> {
private SharedDomainFactory factory;
public MarkDeserializer(SharedDomainFactory factory) {
this.factory = factory;
}
@Override
public Mark deserialize(JSONObject object) throws JsonDeserializationException {
Serializable id = Helpers.tryUuidConversion((Serializable) object.get(MarkJsonSerializer.FIELD_ID));
String colorAsString = (String) object.get(MarkJsonSerializer.FIELD_COLOR);
Color color = colorAsString == null ? null : AbstractColor.getCssColor(colorAsString);
String pattern = (String) object.get(MarkJsonSerializer.FIELD_PATTERN);
String shape = (String) object.get(MarkJsonSerializer.FIELD_SHAPE);
MarkType type = MarkType.valueOf((String) object.get(MarkJsonSerializer.FIELD_TYPE));
String name = (String) object.get(MarkJsonSerializer.FIELD_NAME);
Mark mark = factory.getOrCreateMark(id, name, type, color, shape, pattern);
return mark;
}
}
@@ -1,42 +1,42 @@
package com.sap.sailing.server.gateway.deserialization.coursedata.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.ControlPoint;
import com.sap.sailing.domain.base.Waypoint;
import com.sap.sailing.domain.base.impl.WaypointImpl;
import com.sap.sailing.domain.common.PassingInstruction;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
import com.sap.sailing.server.gateway.serialization.coursedata.impl.WaypointJsonSerializer;
/**
* Deserializer for waypoints.
*/
public class WaypointDeserializer implements JsonDeserializer<Waypoint> {
private final ControlPointDeserializer controlPointDeserializer;
public WaypointDeserializer(ControlPointDeserializer controlPointDeserializer) {
this.controlPointDeserializer = controlPointDeserializer;
}
@Override
public Waypoint deserialize(JSONObject object) throws JsonDeserializationException {
Object passingInstructionsObject = object.get(WaypointJsonSerializer.FIELD_PASSING_INSTRUCTIONS);
PassingInstruction passingInstructions = null;
if (passingInstructionsObject != null) {
passingInstructions = PassingInstruction.valueOf(passingInstructionsObject.toString());
}
ControlPoint controlPoint = controlPointDeserializer.deserialize((JSONObject) object.get(WaypointJsonSerializer.FIELD_CONTROL_POINT));
Waypoint waypoint = null;
if (passingInstructions == null) {
waypoint = new WaypointImpl(controlPoint);
} else {
waypoint = new WaypointImpl(controlPoint, passingInstructions);
}
return waypoint;
}
package com.sap.sailing.server.gateway.deserialization.coursedata.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.ControlPoint;
import com.sap.sailing.domain.base.Waypoint;
import com.sap.sailing.domain.base.impl.WaypointImpl;
import com.sap.sailing.domain.common.PassingInstruction;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
import com.sap.sailing.server.gateway.serialization.coursedata.impl.WaypointJsonSerializer;
/**
* Deserializer for waypoints.
*/
public class WaypointDeserializer implements JsonDeserializer<Waypoint> {
private final ControlPointDeserializer controlPointDeserializer;
public WaypointDeserializer(ControlPointDeserializer controlPointDeserializer) {
this.controlPointDeserializer = controlPointDeserializer;
}
@Override
public Waypoint deserialize(JSONObject object) throws JsonDeserializationException {
Object passingInstructionsObject = object.get(WaypointJsonSerializer.FIELD_PASSING_INSTRUCTIONS);
PassingInstruction passingInstructions = null;
if (passingInstructionsObject != null) {
passingInstructions = PassingInstruction.valueOf(passingInstructionsObject.toString());
}
ControlPoint controlPoint = controlPointDeserializer.deserialize((JSONObject) object.get(WaypointJsonSerializer.FIELD_CONTROL_POINT));
Waypoint waypoint = null;
if (passingInstructions == null) {
waypoint = new WaypointImpl(controlPoint);
} else {
waypoint = new WaypointImpl(controlPoint, passingInstructions);
}
return waypoint;
}
}
@@ -1,100 +1,100 @@
package com.sap.sailing.server.gateway.deserialization.impl;
import java.io.Serializable;
import java.lang.reflect.Constructor;
import java.net.URI;
import java.util.UUID;
import java.util.logging.Logger;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.CompetitorFactory;
import com.sap.sailing.domain.base.CompetitorStore;
import com.sap.sailing.domain.base.SharedDomainFactory;
import com.sap.sailing.domain.base.impl.DynamicBoat;
import com.sap.sailing.domain.base.impl.DynamicTeam;
import com.sap.sailing.domain.common.tracking.impl.CompetitorJsonConstants;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
import com.sap.sailing.server.gateway.serialization.impl.CompetitorJsonSerializer;
import com.sap.sse.common.Color;
import com.sap.sse.common.impl.MillisecondsDurationImpl;
import com.sap.sse.common.impl.RGBColor;
public class CompetitorJsonDeserializer implements JsonDeserializer<Competitor> {
protected final CompetitorFactory competitorStore;
protected final JsonDeserializer<DynamicTeam> teamJsonDeserializer;
protected final JsonDeserializer<DynamicBoat> boatJsonDeserializer;
private static final Logger logger = Logger.getLogger(CompetitorJsonDeserializer.class.getName());
public static CompetitorJsonDeserializer create(SharedDomainFactory baseDomainFactory) {
return new CompetitorJsonDeserializer(baseDomainFactory, new TeamJsonDeserializer(new PersonJsonDeserializer(
new NationalityJsonDeserializer(baseDomainFactory))), new BoatJsonDeserializer(new BoatClassJsonDeserializer(baseDomainFactory)));
}
public CompetitorJsonDeserializer(CompetitorStore store) {
this(store, null, /* boatDeserializer */ null);
}
public CompetitorJsonDeserializer(CompetitorFactory competitorStore, JsonDeserializer<DynamicTeam> teamJsonDeserializer, JsonDeserializer<DynamicBoat> boatDeserializer) {
this.competitorStore = competitorStore;
this.teamJsonDeserializer = teamJsonDeserializer;
this.boatJsonDeserializer = boatDeserializer;
}
@Override
public Competitor deserialize(JSONObject object) throws JsonDeserializationException {
Serializable competitorId = (Serializable) object.get(CompetitorJsonSerializer.FIELD_ID);
try {
Class<?> idClass = Class.forName((String) object.get(CompetitorJsonConstants.FIELD_ID_TYPE));
if (Number.class.isAssignableFrom(idClass)) {
Constructor<?> constructorFromString = idClass.getConstructor(String.class);
competitorId = (Serializable) constructorFromString.newInstance(competitorId.toString());
} else if (UUID.class.isAssignableFrom(idClass)) {
competitorId = Helpers.tryUuidConversion(competitorId);
}
String name = (String) object.get(CompetitorJsonConstants.FIELD_NAME);
String displayColorAsString = (String) object.get(CompetitorJsonConstants.FIELD_DISPLAY_COLOR);
String email = (String) object.get(CompetitorJsonConstants.FIELD_EMAIL);
String searchTag = (String) object.get(CompetitorJsonConstants.FIELD_SEARCHTAG);
URI flagImageURI = null;
String flagImageURIAsString = (String) object.get(CompetitorJsonConstants.FIELD_FLAG_IMAGE_URI);
if (flagImageURIAsString != null) {
try {
flagImageURI = URI.create(flagImageURIAsString);
} catch (IllegalArgumentException e) {
logger.warning("Illegal flag image URI " + e.getMessage());
}
}
final Color displayColor;
if (displayColorAsString == null || displayColorAsString.isEmpty()) {
displayColor = null;
} else {
displayColor = new RGBColor(displayColorAsString);
}
DynamicTeam team = null;
DynamicBoat boat = null;
if (teamJsonDeserializer != null && object.get(CompetitorJsonConstants.FIELD_TEAM) != null) {
team = teamJsonDeserializer.deserialize(Helpers.getNestedObjectSafe(object,
CompetitorJsonConstants.FIELD_TEAM));
}
if (boatJsonDeserializer != null && object.get(CompetitorJsonConstants.FIELD_BOAT) != null) {
boat = boatJsonDeserializer.deserialize(Helpers.getNestedObjectSafe(object,
CompetitorJsonConstants.FIELD_BOAT));
}
final Double timeOnTimeFactor = (Double) object.get(CompetitorJsonConstants.FIELD_TIME_ON_TIME_FACTOR);
final Double timeOnDistanceAllowanceInSecondsPerNauticalMile = (Double) object
.get(CompetitorJsonConstants.FIELD_TIME_ON_DISTANCE_ALLOWANCE_IN_SECONDS_PER_NAUTICAL_MILE);
Competitor competitor = competitorStore.getOrCreateCompetitor(competitorId, name, displayColor, email,
flagImageURI, team, boat, timeOnTimeFactor,
timeOnDistanceAllowanceInSecondsPerNauticalMile == null ? null :
new MillisecondsDurationImpl((long) (timeOnDistanceAllowanceInSecondsPerNauticalMile*1000)), searchTag);
return competitor;
} catch (Exception e) {
throw new JsonDeserializationException(e);
}
}
}
package com.sap.sailing.server.gateway.deserialization.impl;
import java.io.Serializable;
import java.lang.reflect.Constructor;
import java.net.URI;
import java.util.UUID;
import java.util.logging.Logger;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.CompetitorFactory;
import com.sap.sailing.domain.base.CompetitorStore;
import com.sap.sailing.domain.base.SharedDomainFactory;
import com.sap.sailing.domain.base.impl.DynamicBoat;
import com.sap.sailing.domain.base.impl.DynamicTeam;
import com.sap.sailing.domain.common.tracking.impl.CompetitorJsonConstants;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
import com.sap.sailing.server.gateway.serialization.impl.CompetitorJsonSerializer;
import com.sap.sse.common.Color;
import com.sap.sse.common.impl.MillisecondsDurationImpl;
import com.sap.sse.common.impl.RGBColor;
public class CompetitorJsonDeserializer implements JsonDeserializer<Competitor> {
protected final CompetitorFactory competitorStore;
protected final JsonDeserializer<DynamicTeam> teamJsonDeserializer;
protected final JsonDeserializer<DynamicBoat> boatJsonDeserializer;
private static final Logger logger = Logger.getLogger(CompetitorJsonDeserializer.class.getName());
public static CompetitorJsonDeserializer create(SharedDomainFactory baseDomainFactory) {
return new CompetitorJsonDeserializer(baseDomainFactory, new TeamJsonDeserializer(new PersonJsonDeserializer(
new NationalityJsonDeserializer(baseDomainFactory))), new BoatJsonDeserializer(new BoatClassJsonDeserializer(baseDomainFactory)));
}
public CompetitorJsonDeserializer(CompetitorStore store) {
this(store, null, /* boatDeserializer */ null);
}
public CompetitorJsonDeserializer(CompetitorFactory competitorStore, JsonDeserializer<DynamicTeam> teamJsonDeserializer, JsonDeserializer<DynamicBoat> boatDeserializer) {
this.competitorStore = competitorStore;
this.teamJsonDeserializer = teamJsonDeserializer;
this.boatJsonDeserializer = boatDeserializer;
}
@Override
public Competitor deserialize(JSONObject object) throws JsonDeserializationException {
Serializable competitorId = (Serializable) object.get(CompetitorJsonSerializer.FIELD_ID);
try {
Class<?> idClass = Class.forName((String) object.get(CompetitorJsonConstants.FIELD_ID_TYPE));
if (Number.class.isAssignableFrom(idClass)) {
Constructor<?> constructorFromString = idClass.getConstructor(String.class);
competitorId = (Serializable) constructorFromString.newInstance(competitorId.toString());
} else if (UUID.class.isAssignableFrom(idClass)) {
competitorId = Helpers.tryUuidConversion(competitorId);
}
String name = (String) object.get(CompetitorJsonConstants.FIELD_NAME);
String displayColorAsString = (String) object.get(CompetitorJsonConstants.FIELD_DISPLAY_COLOR);
String email = (String) object.get(CompetitorJsonConstants.FIELD_EMAIL);
String searchTag = (String) object.get(CompetitorJsonConstants.FIELD_SEARCHTAG);
URI flagImageURI = null;
String flagImageURIAsString = (String) object.get(CompetitorJsonConstants.FIELD_FLAG_IMAGE_URI);
if (flagImageURIAsString != null) {
try {
flagImageURI = URI.create(flagImageURIAsString);
} catch (IllegalArgumentException e) {
logger.warning("Illegal flag image URI " + e.getMessage());
}
}
final Color displayColor;
if (displayColorAsString == null || displayColorAsString.isEmpty()) {
displayColor = null;
} else {
displayColor = new RGBColor(displayColorAsString);
}
DynamicTeam team = null;
DynamicBoat boat = null;
if (teamJsonDeserializer != null && object.get(CompetitorJsonConstants.FIELD_TEAM) != null) {
team = teamJsonDeserializer.deserialize(Helpers.getNestedObjectSafe(object,
CompetitorJsonConstants.FIELD_TEAM));
}
if (boatJsonDeserializer != null && object.get(CompetitorJsonConstants.FIELD_BOAT) != null) {
boat = boatJsonDeserializer.deserialize(Helpers.getNestedObjectSafe(object,
CompetitorJsonConstants.FIELD_BOAT));
}
final Double timeOnTimeFactor = (Double) object.get(CompetitorJsonConstants.FIELD_TIME_ON_TIME_FACTOR);
final Double timeOnDistanceAllowanceInSecondsPerNauticalMile = (Double) object
.get(CompetitorJsonConstants.FIELD_TIME_ON_DISTANCE_ALLOWANCE_IN_SECONDS_PER_NAUTICAL_MILE);
Competitor competitor = competitorStore.getOrCreateCompetitor(competitorId, name, displayColor, email,
flagImageURI, team, boat, timeOnTimeFactor,
timeOnDistanceAllowanceInSecondsPerNauticalMile == null ? null :
new MillisecondsDurationImpl((long) (timeOnDistanceAllowanceInSecondsPerNauticalMile*1000)), searchTag);
return competitor;
} catch (Exception e) {
throw new JsonDeserializationException(e);
}
}
}
@@ -1,80 +1,80 @@
package com.sap.sailing.server.gateway.deserialization.impl;
import java.io.Serializable;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.UUID;
import java.util.logging.Logger;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
public class Helpers {
private final static Logger logger = Logger.getLogger(Helpers.class.getName());
public static JSONArray toJSONArraySafe(Object object) throws JsonDeserializationException {
if (object instanceof JSONArray) {
return (JSONArray) object;
}
throw new JsonDeserializationException(String.format("Expected a JSONArray, got %s.", object != null ? object.getClass()
.getName() : ""));
}
public static JSONObject toJSONObjectSafe(Object object) throws JsonDeserializationException {
if (object instanceof JSONObject) {
return (JSONObject) object;
}
throw new JsonDeserializationException(String.format("Expected a JSONObject, got %s.", object.getClass()
.getName()));
}
public static JSONObject getNestedObjectSafe(JSONObject parent, String fieldName)
throws JsonDeserializationException {
Object childObject = parent.get(fieldName);
if (!(childObject instanceof JSONObject)) {
throw new JsonDeserializationException(String.format("Field %s with %s wasn't a nested JSON object.",
fieldName, childObject.toString()));
}
return (JSONObject) childObject;
}
public static JSONArray getNestedArraySafe(JSONObject parent, String fieldName) throws JsonDeserializationException {
Object childObject = parent.get(fieldName);
if (!(childObject instanceof JSONArray)) {
throw new JsonDeserializationException(String.format("Field %s with %s wasn't a nested JSON array.",
fieldName, childObject.toString()));
}
return (JSONArray) childObject;
}
public static URL getURLField(JSONObject parent, String fieldName) {
URL result = null;
String urlAsString = (String) parent.get(fieldName);
if (urlAsString != null) {
try {
result = new URL(urlAsString);
} catch (MalformedURLException e) {
logger.severe("Error deserializing URL " + urlAsString);
}
}
return result;
}
/**
* If the {@link Object#toString() string representation} of {@code serializableId} {@link UUID#fromString(String) parses}
* as a {@link UUID}, the resulting {@link UUID} is returned. Otherwise, the {@code serializableId} parameter's value
* is returned unchanged.
*/
public static Serializable tryUuidConversion(Serializable serializableId) {
try {
return UUID.fromString(serializableId.toString());
} catch (IllegalArgumentException iae) {
logger.warning("The serializable " + serializableId.toString() + " could not be converted to a UUID");
}
return serializableId;
}
}
package com.sap.sailing.server.gateway.deserialization.impl;
import java.io.Serializable;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.UUID;
import java.util.logging.Logger;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
public class Helpers {
private final static Logger logger = Logger.getLogger(Helpers.class.getName());
public static JSONArray toJSONArraySafe(Object object) throws JsonDeserializationException {
if (object instanceof JSONArray) {
return (JSONArray) object;
}
throw new JsonDeserializationException(String.format("Expected a JSONArray, got %s.", object != null ? object.getClass()
.getName() : ""));
}
public static JSONObject toJSONObjectSafe(Object object) throws JsonDeserializationException {
if (object instanceof JSONObject) {
return (JSONObject) object;
}
throw new JsonDeserializationException(String.format("Expected a JSONObject, got %s.", object.getClass()
.getName()));
}
public static JSONObject getNestedObjectSafe(JSONObject parent, String fieldName)
throws JsonDeserializationException {
Object childObject = parent.get(fieldName);
if (!(childObject instanceof JSONObject)) {
throw new JsonDeserializationException(String.format("Field %s with %s wasn't a nested JSON object.",
fieldName, childObject.toString()));
}
return (JSONObject) childObject;
}
public static JSONArray getNestedArraySafe(JSONObject parent, String fieldName) throws JsonDeserializationException {
Object childObject = parent.get(fieldName);
if (!(childObject instanceof JSONArray)) {
throw new JsonDeserializationException(String.format("Field %s with %s wasn't a nested JSON array.",
fieldName, childObject.toString()));
}
return (JSONArray) childObject;
}
public static URL getURLField(JSONObject parent, String fieldName) {
URL result = null;
String urlAsString = (String) parent.get(fieldName);
if (urlAsString != null) {
try {
result = new URL(urlAsString);
} catch (MalformedURLException e) {
logger.severe("Error deserializing URL " + urlAsString);
}
}
return result;
}
/**
* If the {@link Object#toString() string representation} of {@code serializableId} {@link UUID#fromString(String) parses}
* as a {@link UUID}, the resulting {@link UUID} is returned. Otherwise, the {@code serializableId} parameter's value
* is returned unchanged.
*/
public static Serializable tryUuidConversion(Serializable serializableId) {
try {
return UUID.fromString(serializableId.toString());
} catch (IllegalArgumentException iae) {
logger.warning("The serializable " + serializableId.toString() + " could not be converted to a UUID");
}
return serializableId;
}
}
@@ -1,52 +1,52 @@
package com.sap.sailing.server.gateway.deserialization.impl;
import java.util.ArrayList;
import java.util.List;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.common.Bearing;
import com.sap.sailing.domain.common.Distance;
import com.sap.sailing.domain.common.LegType;
import com.sap.sailing.domain.common.TargetTimeInfo;
import com.sap.sailing.domain.common.TargetTimeInfo.LegTargetTimeInfo;
import com.sap.sailing.domain.common.Wind;
import com.sap.sailing.domain.common.impl.DegreeBearingImpl;
import com.sap.sailing.domain.common.impl.MeterDistance;
import com.sap.sailing.domain.common.impl.TargetTimeInfoImpl;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
import com.sap.sailing.server.gateway.serialization.impl.TargetTimeInfoSerializer;
import com.sap.sse.common.Duration;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.impl.MillisecondsDurationImpl;
import com.sap.sse.common.impl.MillisecondsTimePoint;
public class TargetTimeInfoDeserializer implements JsonDeserializer<TargetTimeInfo> {
final JsonDeserializer<Wind> windDeserializer;
public TargetTimeInfoDeserializer(JsonDeserializer<Wind> windDeserializer) {
super();
this.windDeserializer = windDeserializer;
}
@Override
public TargetTimeInfo deserialize(JSONObject object) throws JsonDeserializationException {
final List<LegTargetTimeInfo> legInfos = new ArrayList<>();
final JSONArray legsAsJson = (JSONArray) object.get(TargetTimeInfoSerializer.LEGS);
for (final Object legAsObject : legsAsJson) {
final JSONObject legAsJson = (JSONObject) legAsObject;
final Duration expectedDuration = new MillisecondsDurationImpl(((Number) legAsJson.get(TargetTimeInfoSerializer.LEG_DURATION_MILLIS)).longValue());
final TimePoint expectedStartTime = new MillisecondsTimePoint(((Number) legAsJson.get(TargetTimeInfoSerializer.LEG_START_TIME_MILLIS)).longValue());
final Bearing legBearing = new DegreeBearingImpl(((Number) legAsJson.get(TargetTimeInfoSerializer.LEG_BEARING_DEGREES)).doubleValue());
final Distance legDistance = new MeterDistance(((Number) legAsJson.get(TargetTimeInfoSerializer.LEG_DISTANCE_METERS)).doubleValue());
final LegType legType = LegType.valueOf((String) legAsJson.get(TargetTimeInfoSerializer.LEG_TYPE));
final Wind legWind = windDeserializer.deserialize((JSONObject) legAsJson.get(TargetTimeInfoSerializer.LEG_WIND));
final LegTargetTimeInfo legInfo = new TargetTimeInfoImpl.LegTargetTimeInfoImpl(legDistance, legWind,
legBearing, expectedDuration, expectedStartTime, legType, Distance.NULL);
legInfos.add(legInfo);
}
return new TargetTimeInfoImpl(legInfos);
}
}
package com.sap.sailing.server.gateway.deserialization.impl;
import java.util.ArrayList;
import java.util.List;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.common.Bearing;
import com.sap.sailing.domain.common.Distance;
import com.sap.sailing.domain.common.LegType;
import com.sap.sailing.domain.common.TargetTimeInfo;
import com.sap.sailing.domain.common.TargetTimeInfo.LegTargetTimeInfo;
import com.sap.sailing.domain.common.Wind;
import com.sap.sailing.domain.common.impl.DegreeBearingImpl;
import com.sap.sailing.domain.common.impl.MeterDistance;
import com.sap.sailing.domain.common.impl.TargetTimeInfoImpl;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
import com.sap.sailing.server.gateway.serialization.impl.TargetTimeInfoSerializer;
import com.sap.sse.common.Duration;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.impl.MillisecondsDurationImpl;
import com.sap.sse.common.impl.MillisecondsTimePoint;
public class TargetTimeInfoDeserializer implements JsonDeserializer<TargetTimeInfo> {
final JsonDeserializer<Wind> windDeserializer;
public TargetTimeInfoDeserializer(JsonDeserializer<Wind> windDeserializer) {
super();
this.windDeserializer = windDeserializer;
}
@Override
public TargetTimeInfo deserialize(JSONObject object) throws JsonDeserializationException {
final List<LegTargetTimeInfo> legInfos = new ArrayList<>();
final JSONArray legsAsJson = (JSONArray) object.get(TargetTimeInfoSerializer.LEGS);
for (final Object legAsObject : legsAsJson) {
final JSONObject legAsJson = (JSONObject) legAsObject;
final Duration expectedDuration = new MillisecondsDurationImpl(((Number) legAsJson.get(TargetTimeInfoSerializer.LEG_DURATION_MILLIS)).longValue());
final TimePoint expectedStartTime = new MillisecondsTimePoint(((Number) legAsJson.get(TargetTimeInfoSerializer.LEG_START_TIME_MILLIS)).longValue());
final Bearing legBearing = new DegreeBearingImpl(((Number) legAsJson.get(TargetTimeInfoSerializer.LEG_BEARING_DEGREES)).doubleValue());
final Distance legDistance = new MeterDistance(((Number) legAsJson.get(TargetTimeInfoSerializer.LEG_DISTANCE_METERS)).doubleValue());
final LegType legType = LegType.valueOf((String) legAsJson.get(TargetTimeInfoSerializer.LEG_TYPE));
final Wind legWind = windDeserializer.deserialize((JSONObject) legAsJson.get(TargetTimeInfoSerializer.LEG_WIND));
final LegTargetTimeInfo legInfo = new TargetTimeInfoImpl.LegTargetTimeInfoImpl(legDistance, legWind,
legBearing, expectedDuration, expectedStartTime, legType, Distance.NULL);
legInfos.add(legInfo);
}
return new TargetTimeInfoImpl(legInfos);
}
}
@@ -1,42 +1,42 @@
package com.sap.sailing.server.gateway.deserialization.racegroup.impl;
import java.util.ArrayList;
import java.util.Collection;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.racegroup.RaceRow;
import com.sap.sailing.domain.base.racegroup.SeriesWithRows;
import com.sap.sailing.domain.base.racegroup.impl.SeriesWithRowsImpl;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
import com.sap.sailing.server.gateway.deserialization.impl.Helpers;
import com.sap.sailing.server.gateway.serialization.racegroup.impl.RaceRowsOfSeriesWithRowsSerializer;
import com.sap.sailing.server.gateway.serialization.racegroup.impl.SeriesWithRowsJsonSerializer;
public class SeriesWithRowsDeserializer implements JsonDeserializer<SeriesWithRows> {
private JsonDeserializer<RaceRow> raceRowDeserializer;
public SeriesWithRowsDeserializer(JsonDeserializer<RaceRow> raceRowDeserializer) {
this.raceRowDeserializer = raceRowDeserializer;
}
public SeriesWithRows deserialize(JSONObject object) throws JsonDeserializationException {
String name = object.get(SeriesWithRowsJsonSerializer.FIELD_NAME).toString();
boolean isMedal = (Boolean) object.get(SeriesWithRowsJsonSerializer.FIELD_IS_MEDAL);
Boolean isFleetsCanRunInParallel = (Boolean) object.get(SeriesWithRowsJsonSerializer.FIELD_FLEETS_CAN_RUN_IN_PARALLEL);
if (isFleetsCanRunInParallel == null) {
isFleetsCanRunInParallel = true; // that's the default
}
Collection<RaceRow> rows = new ArrayList<RaceRow>();
for (Object fleetObject : Helpers.getNestedArraySafe(object, RaceRowsOfSeriesWithRowsSerializer.FIELD_FLEETS)) {
JSONObject fleetJson = Helpers.toJSONObjectSafe(fleetObject);
rows.add(raceRowDeserializer.deserialize(fleetJson));
}
return new SeriesWithRowsImpl(name, isMedal, isFleetsCanRunInParallel, rows);
}
package com.sap.sailing.server.gateway.deserialization.racegroup.impl;
import java.util.ArrayList;
import java.util.Collection;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.racegroup.RaceRow;
import com.sap.sailing.domain.base.racegroup.SeriesWithRows;
import com.sap.sailing.domain.base.racegroup.impl.SeriesWithRowsImpl;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
import com.sap.sailing.server.gateway.deserialization.impl.Helpers;
import com.sap.sailing.server.gateway.serialization.racegroup.impl.RaceRowsOfSeriesWithRowsSerializer;
import com.sap.sailing.server.gateway.serialization.racegroup.impl.SeriesWithRowsJsonSerializer;
public class SeriesWithRowsDeserializer implements JsonDeserializer<SeriesWithRows> {
private JsonDeserializer<RaceRow> raceRowDeserializer;
public SeriesWithRowsDeserializer(JsonDeserializer<RaceRow> raceRowDeserializer) {
this.raceRowDeserializer = raceRowDeserializer;
}
public SeriesWithRows deserialize(JSONObject object) throws JsonDeserializationException {
String name = object.get(SeriesWithRowsJsonSerializer.FIELD_NAME).toString();
boolean isMedal = (Boolean) object.get(SeriesWithRowsJsonSerializer.FIELD_IS_MEDAL);
Boolean isFleetsCanRunInParallel = (Boolean) object.get(SeriesWithRowsJsonSerializer.FIELD_FLEETS_CAN_RUN_IN_PARALLEL);
if (isFleetsCanRunInParallel == null) {
isFleetsCanRunInParallel = true; // that's the default
}
Collection<RaceRow> rows = new ArrayList<RaceRow>();
for (Object fleetObject : Helpers.getNestedArraySafe(object, RaceRowsOfSeriesWithRowsSerializer.FIELD_FLEETS)) {
JSONObject fleetJson = Helpers.toJSONObjectSafe(fleetObject);
rows.add(raceRowDeserializer.deserialize(fleetJson));
}
return new SeriesWithRowsImpl(name, isMedal, isFleetsCanRunInParallel, rows);
}
}
@@ -1,30 +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.abstractlog.AbstractLogEventAuthor;
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
import com.sap.sailing.domain.abstractlog.race.impl.RaceLogEndOfTrackingEventImpl;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
import com.sap.sse.common.TimePoint;
public class RaceLogEndOfTrackingEventDeserializer extends BaseRaceLogEventDeserializer implements
JsonDeserializer<RaceLogEvent> {
public RaceLogEndOfTrackingEventDeserializer(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 {
return new RaceLogEndOfTrackingEventImpl(createdAt, timePoint, author, id, passId);
}
}
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.impl.RaceLogEndOfTrackingEventImpl;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
import com.sap.sse.common.TimePoint;
public class RaceLogEndOfTrackingEventDeserializer extends BaseRaceLogEventDeserializer implements
JsonDeserializer<RaceLogEvent> {
public RaceLogEndOfTrackingEventDeserializer(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 {
return new RaceLogEndOfTrackingEventImpl(createdAt, timePoint, author, id, passId);
}
}
@@ -1,30 +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.abstractlog.AbstractLogEventAuthor;
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
import com.sap.sailing.domain.abstractlog.race.impl.RaceLogStartOfTrackingEventImpl;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
import com.sap.sse.common.TimePoint;
public class RaceLogStartOfTrackingEventDeserializer extends BaseRaceLogEventDeserializer implements
JsonDeserializer<RaceLogEvent> {
public RaceLogStartOfTrackingEventDeserializer(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 {
return new RaceLogStartOfTrackingEventImpl(createdAt, timePoint, author, id, passId);
}
}
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.impl.RaceLogStartOfTrackingEventImpl;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
import com.sap.sse.common.TimePoint;
public class RaceLogStartOfTrackingEventDeserializer extends BaseRaceLogEventDeserializer implements
JsonDeserializer<RaceLogEvent> {
public RaceLogStartOfTrackingEventDeserializer(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 {
return new RaceLogStartOfTrackingEventImpl(createdAt, timePoint, author, id, passId);
}
}
@@ -1,30 +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.abstractlog.AbstractLogEventAuthor;
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
import com.sap.sailing.domain.abstractlog.race.tracking.impl.RaceLogUseCompetitorsFromRaceLogEventImpl;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
import com.sap.sse.common.TimePoint;
public class RaceLogUseCompetitorsFromRaceLogEventDeserializer extends BaseRaceLogEventDeserializer implements
JsonDeserializer<RaceLogEvent> {
public RaceLogUseCompetitorsFromRaceLogEventDeserializer(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 {
return new RaceLogUseCompetitorsFromRaceLogEventImpl(createdAt, author, timePoint, id, passId);
}
}
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.tracking.impl.RaceLogUseCompetitorsFromRaceLogEventImpl;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
import com.sap.sse.common.TimePoint;
public class RaceLogUseCompetitorsFromRaceLogEventDeserializer extends BaseRaceLogEventDeserializer implements
JsonDeserializer<RaceLogEvent> {
public RaceLogUseCompetitorsFromRaceLogEventDeserializer(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 {
return new RaceLogUseCompetitorsFromRaceLogEventImpl(createdAt, author, timePoint, id, passId);
}
}
@@ -1,36 +1,36 @@
package com.sap.sailing.server.gateway.serialization;
import java.util.Collections;
import org.json.simple.JSONObject;
public abstract class ExtendableJsonSerializer<T> implements JsonSerializer<T> {
protected abstract JSONObject serializeFields(T object);
private final Iterable<ExtensionJsonSerializer<T, ?>> extensionSerializers;
public ExtendableJsonSerializer(Iterable<ExtensionJsonSerializer<T, ?>> extensionSerializers) {
this.extensionSerializers = extensionSerializers;
}
public ExtendableJsonSerializer(ExtensionJsonSerializer<T, ?> extensionSerializer) {
this.extensionSerializers = Collections.<ExtensionJsonSerializer<T, ?>> singletonList(extensionSerializer);
}
public ExtendableJsonSerializer() {
this.extensionSerializers = Collections.emptyList();
}
@Override
public JSONObject serialize(T object) {
JSONObject result = serializeFields(object);
for (ExtensionJsonSerializer<T, ?> extensionSerializer : extensionSerializers) {
result.put(extensionSerializer.getExtensionFieldName(), extensionSerializer.serializeExtension(object));
}
return result;
}
}
package com.sap.sailing.server.gateway.serialization;
import java.util.Collections;
import org.json.simple.JSONObject;
public abstract class ExtendableJsonSerializer<T> implements JsonSerializer<T> {
protected abstract JSONObject serializeFields(T object);
private final Iterable<ExtensionJsonSerializer<T, ?>> extensionSerializers;
public ExtendableJsonSerializer(Iterable<ExtensionJsonSerializer<T, ?>> extensionSerializers) {
this.extensionSerializers = extensionSerializers;
}
public ExtendableJsonSerializer(ExtensionJsonSerializer<T, ?> extensionSerializer) {
this.extensionSerializers = Collections.<ExtensionJsonSerializer<T, ?>> singletonList(extensionSerializer);
}
public ExtendableJsonSerializer() {
this.extensionSerializers = Collections.emptyList();
}
@Override
public JSONObject serialize(T object) {
JSONObject result = serializeFields(object);
for (ExtensionJsonSerializer<T, ?> extensionSerializer : extensionSerializers) {
result.put(extensionSerializer.getExtensionFieldName(), extensionSerializer.serializeExtension(object));
}
return result;
}
}
@@ -1,21 +1,21 @@
package com.sap.sailing.server.gateway.serialization;
public abstract class ExtensionJsonSerializer<ParentType, ExtensionType> {
public abstract String getExtensionFieldName();
public abstract Object serializeExtension(ParentType parent);
protected JsonSerializer<ExtensionType> extensionSerializer;
public ExtensionJsonSerializer(JsonSerializer<ExtensionType> extensionSerializer) {
this.extensionSerializer = extensionSerializer;
}
protected Object serialize(ExtensionType extensionObject) {
return extensionSerializer.serialize(extensionObject);
}
}
package com.sap.sailing.server.gateway.serialization;
public abstract class ExtensionJsonSerializer<ParentType, ExtensionType> {
public abstract String getExtensionFieldName();
public abstract Object serializeExtension(ParentType parent);
protected JsonSerializer<ExtensionType> extensionSerializer;
public ExtensionJsonSerializer(JsonSerializer<ExtensionType> extensionSerializer) {
this.extensionSerializer = extensionSerializer;
}
protected Object serialize(ExtensionType extensionObject) {
return extensionSerializer.serialize(extensionObject);
}
}
@@ -1,19 +1,19 @@
package com.sap.sailing.server.gateway.serialization;
import org.json.simple.JSONObject;
/**
* Interface for serializer to Json.
*
* @param <T> Object class to serialize.
*/
public interface JsonSerializer<T>
{
/**
* Serializes given object to a Json object.
*
* @param object to be serialized.
* @return serialized Json object.
*/
JSONObject serialize(T object);
}
package com.sap.sailing.server.gateway.serialization;
import org.json.simple.JSONObject;
/**
* Interface for serializer to Json.
*
* @param <T> Object class to serialize.
*/
public interface JsonSerializer<T>
{
/**
* Serializes given object to a Json object.
*
* @param object to be serialized.
* @return serialized Json object.
*/
JSONObject serialize(T object);
}
@@ -1,24 +1,24 @@
package com.sap.sailing.server.gateway.serialization.coursedata.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.ControlPoint;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public abstract class BaseControlPointJsonSerializer implements JsonSerializer<ControlPoint> {
public static final String FIELD_CLASS = "@class";
public static final String FIELD_NAME = "name";
protected abstract String getClassFieldValue();
@Override
public JSONObject serialize(ControlPoint object) {
JSONObject result = new JSONObject();
result.put(FIELD_CLASS, getClassFieldValue());
result.put(FIELD_NAME, object.getName());
return result;
}
}
package com.sap.sailing.server.gateway.serialization.coursedata.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.ControlPoint;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public abstract class BaseControlPointJsonSerializer implements JsonSerializer<ControlPoint> {
public static final String FIELD_CLASS = "@class";
public static final String FIELD_NAME = "name";
protected abstract String getClassFieldValue();
@Override
public JSONObject serialize(ControlPoint object) {
JSONObject result = new JSONObject();
result.put(FIELD_CLASS, getClassFieldValue());
result.put(FIELD_NAME, object.getName());
return result;
}
}
@@ -1,40 +1,40 @@
package com.sap.sailing.server.gateway.serialization.coursedata.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.ControlPoint;
import com.sap.sailing.domain.base.ControlPointWithTwoMarks;
import com.sap.sailing.domain.base.Mark;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class ControlPointJsonSerializer implements JsonSerializer<ControlPoint> {
private JsonSerializer<ControlPoint> markSerializer;
private JsonSerializer<ControlPoint> gateSerializer;
public ControlPointJsonSerializer(
JsonSerializer<ControlPoint> markSerializer,
JsonSerializer<ControlPoint> gateSerializer) {
this.markSerializer = markSerializer;
this.gateSerializer = gateSerializer;
}
protected JsonSerializer<ControlPoint> getSerializer(
ControlPoint controlPoint) {
if (controlPoint instanceof Mark) {
return markSerializer;
} else if (controlPoint instanceof ControlPointWithTwoMarks) {
return gateSerializer;
}
throw new UnsupportedOperationException(String.format(
"There is no serializer defined for control point type %s", controlPoint
.getClass().getName()));
}
@Override
public JSONObject serialize(ControlPoint object) {
return getSerializer(object).serialize(object);
}
}
package com.sap.sailing.server.gateway.serialization.coursedata.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.ControlPoint;
import com.sap.sailing.domain.base.ControlPointWithTwoMarks;
import com.sap.sailing.domain.base.Mark;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class ControlPointJsonSerializer implements JsonSerializer<ControlPoint> {
private JsonSerializer<ControlPoint> markSerializer;
private JsonSerializer<ControlPoint> gateSerializer;
public ControlPointJsonSerializer(
JsonSerializer<ControlPoint> markSerializer,
JsonSerializer<ControlPoint> gateSerializer) {
this.markSerializer = markSerializer;
this.gateSerializer = gateSerializer;
}
protected JsonSerializer<ControlPoint> getSerializer(
ControlPoint controlPoint) {
if (controlPoint instanceof Mark) {
return markSerializer;
} else if (controlPoint instanceof ControlPointWithTwoMarks) {
return gateSerializer;
}
throw new UnsupportedOperationException(String.format(
"There is no serializer defined for control point type %s", controlPoint
.getClass().getName()));
}
@Override
public JSONObject serialize(ControlPoint object) {
return getSerializer(object).serialize(object);
}
}
@@ -1,35 +1,35 @@
package com.sap.sailing.server.gateway.serialization.coursedata.impl;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.CourseBase;
import com.sap.sailing.domain.base.Waypoint;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class CourseBaseJsonSerializer implements JsonSerializer<CourseBase> {
public static final String FIELD_NAME = "name";
public static final String FIELD_WAYPOINTS = "waypoints";
private final JsonSerializer<Waypoint> waypointSerializer;
public CourseBaseJsonSerializer(JsonSerializer<Waypoint> waypointSerializer) {
this.waypointSerializer = waypointSerializer;
}
@Override
public JSONObject serialize(CourseBase object) {
JSONObject result = new JSONObject();
result.put(FIELD_NAME, object.getName());
JSONArray waypoints = new JSONArray();
for (Waypoint waypoint : object.getWaypoints()) {
waypoints.add(waypointSerializer.serialize(waypoint));
}
result.put(FIELD_WAYPOINTS, waypoints);
return result;
}
}
package com.sap.sailing.server.gateway.serialization.coursedata.impl;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.CourseBase;
import com.sap.sailing.domain.base.Waypoint;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class CourseBaseJsonSerializer implements JsonSerializer<CourseBase> {
public static final String FIELD_NAME = "name";
public static final String FIELD_WAYPOINTS = "waypoints";
private final JsonSerializer<Waypoint> waypointSerializer;
public CourseBaseJsonSerializer(JsonSerializer<Waypoint> waypointSerializer) {
this.waypointSerializer = waypointSerializer;
}
@Override
public JSONObject serialize(CourseBase object) {
JSONObject result = new JSONObject();
result.put(FIELD_NAME, object.getName());
JSONArray waypoints = new JSONArray();
for (Waypoint waypoint : object.getWaypoints()) {
waypoints.add(waypointSerializer.serialize(waypoint));
}
result.put(FIELD_WAYPOINTS, waypoints);
return result;
}
}
@@ -1,26 +1,26 @@
package com.sap.sailing.server.gateway.serialization.coursedata.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.CourseBase;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class CourseJsonSerializer implements JsonSerializer<CourseBase> {
public static final String FIELD_COURSE = "course";
private final JsonSerializer<CourseBase> courseBaseSerializer;
public CourseJsonSerializer(JsonSerializer<CourseBase> courseBaseSerializer) {
this.courseBaseSerializer = courseBaseSerializer;
}
@Override
public JSONObject serialize(CourseBase object) {
JSONObject result = new JSONObject();
result.put(FIELD_COURSE, courseBaseSerializer.serialize(object));
return result;
}
}
package com.sap.sailing.server.gateway.serialization.coursedata.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.CourseBase;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class CourseJsonSerializer implements JsonSerializer<CourseBase> {
public static final String FIELD_COURSE = "course";
private final JsonSerializer<CourseBase> courseBaseSerializer;
public CourseJsonSerializer(JsonSerializer<CourseBase> courseBaseSerializer) {
this.courseBaseSerializer = courseBaseSerializer;
}
@Override
public JSONObject serialize(CourseBase object) {
JSONObject result = new JSONObject();
result.put(FIELD_COURSE, courseBaseSerializer.serialize(object));
return result;
}
}
@@ -1,39 +1,39 @@
package com.sap.sailing.server.gateway.serialization.coursedata.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.ControlPoint;
import com.sap.sailing.domain.base.ControlPointWithTwoMarks;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class GateJsonSerializer extends BaseControlPointJsonSerializer implements JsonSerializer<ControlPoint> {
public static final String VALUE_CLASS = ControlPointWithTwoMarks.class.getSimpleName();
public static final String FIELD_LEFT = "left";
public static final String FIELD_RIGHT = "right";
public static final String FIELD_ID = "id";
private final JsonSerializer<ControlPoint> markSerializer;
public GateJsonSerializer(JsonSerializer<ControlPoint> markSerializer) {
this.markSerializer = markSerializer;
}
@Override
protected String getClassFieldValue() {
return VALUE_CLASS;
}
@Override
public JSONObject serialize(ControlPoint object) {
ControlPointWithTwoMarks gate = (ControlPointWithTwoMarks) object;
JSONObject result = super.serialize(gate);
result.put(FIELD_ID, object.getId().toString());
result.put(FIELD_LEFT, markSerializer.serialize(gate.getLeft()));
result.put(FIELD_RIGHT, markSerializer.serialize(gate.getRight()));
return result;
}
}
package com.sap.sailing.server.gateway.serialization.coursedata.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.ControlPoint;
import com.sap.sailing.domain.base.ControlPointWithTwoMarks;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class GateJsonSerializer extends BaseControlPointJsonSerializer implements JsonSerializer<ControlPoint> {
public static final String VALUE_CLASS = ControlPointWithTwoMarks.class.getSimpleName();
public static final String FIELD_LEFT = "left";
public static final String FIELD_RIGHT = "right";
public static final String FIELD_ID = "id";
private final JsonSerializer<ControlPoint> markSerializer;
public GateJsonSerializer(JsonSerializer<ControlPoint> markSerializer) {
this.markSerializer = markSerializer;
}
@Override
protected String getClassFieldValue() {
return VALUE_CLASS;
}
@Override
public JSONObject serialize(ControlPoint object) {
ControlPointWithTwoMarks gate = (ControlPointWithTwoMarks) object;
JSONObject result = super.serialize(gate);
result.put(FIELD_ID, object.getId().toString());
result.put(FIELD_LEFT, markSerializer.serialize(gate.getLeft()));
result.put(FIELD_RIGHT, markSerializer.serialize(gate.getRight()));
return result;
}
}
@@ -1,45 +1,45 @@
package com.sap.sailing.server.gateway.serialization.coursedata.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.ControlPoint;
import com.sap.sailing.domain.base.Mark;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class MarkJsonSerializer extends BaseControlPointJsonSerializer implements JsonSerializer<ControlPoint> {
public static final String VALUE_CLASS = Mark.class.getSimpleName();
public static final String FIELD_ID = "id";
public static final String FIELD_COLOR = "color";
public static final String FIELD_PATTERN = "pattern";
public static final String FIELD_SHAPE = "shape";
public static final String FIELD_TYPE = "type";
@Override
protected String getClassFieldValue() {
return VALUE_CLASS;
}
@Override
public JSONObject serialize(ControlPoint object) {
Mark mark = (Mark) object;
JSONObject result = super.serialize(mark);
result.put(FIELD_ID, mark.getId().toString());
if (mark.getColor() != null) {
result.put(FIELD_COLOR, mark.getColor().getAsHtml());
}
if (mark.getPattern() != null) {
result.put(FIELD_PATTERN, mark.getPattern());
}
if (mark.getShape() != null) {
result.put(FIELD_SHAPE, mark.getShape());
}
if (mark.getType() != null) {
result.put(FIELD_TYPE, mark.getType().name());
}
return result;
}
}
package com.sap.sailing.server.gateway.serialization.coursedata.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.ControlPoint;
import com.sap.sailing.domain.base.Mark;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class MarkJsonSerializer extends BaseControlPointJsonSerializer implements JsonSerializer<ControlPoint> {
public static final String VALUE_CLASS = Mark.class.getSimpleName();
public static final String FIELD_ID = "id";
public static final String FIELD_COLOR = "color";
public static final String FIELD_PATTERN = "pattern";
public static final String FIELD_SHAPE = "shape";
public static final String FIELD_TYPE = "type";
@Override
protected String getClassFieldValue() {
return VALUE_CLASS;
}
@Override
public JSONObject serialize(ControlPoint object) {
Mark mark = (Mark) object;
JSONObject result = super.serialize(mark);
result.put(FIELD_ID, mark.getId().toString());
if (mark.getColor() != null) {
result.put(FIELD_COLOR, mark.getColor().getAsHtml());
}
if (mark.getPattern() != null) {
result.put(FIELD_PATTERN, mark.getPattern());
}
if (mark.getShape() != null) {
result.put(FIELD_SHAPE, mark.getShape());
}
if (mark.getType() != null) {
result.put(FIELD_TYPE, mark.getType().name());
}
return result;
}
}
@@ -1,37 +1,37 @@
package com.sap.sailing.server.gateway.serialization.coursedata.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.ControlPoint;
import com.sap.sailing.domain.base.Waypoint;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class WaypointJsonSerializer implements JsonSerializer<Waypoint> {
public static final String FIELD_NAME = "name";
public static final String FIELD_PASSING_INSTRUCTIONS = "passingInstruction";
public static final String FIELD_CONTROL_POINT = "controlPoint";
private final JsonSerializer<ControlPoint> controlPointSerializer;
public WaypointJsonSerializer(JsonSerializer<ControlPoint> controlPointSerializer) {
this.controlPointSerializer = controlPointSerializer;
}
@Override
public JSONObject serialize(Waypoint object) {
JSONObject result = new JSONObject();
if (object.getName() != null) {
result.put(FIELD_NAME, object.getName());
}
if (object.getPassingInstructions() != null) {
result.put(FIELD_PASSING_INSTRUCTIONS, object.getPassingInstructions().name());
}
result.put(FIELD_CONTROL_POINT,
controlPointSerializer.serialize(object.getControlPoint()));
return result;
}
}
package com.sap.sailing.server.gateway.serialization.coursedata.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.ControlPoint;
import com.sap.sailing.domain.base.Waypoint;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class WaypointJsonSerializer implements JsonSerializer<Waypoint> {
public static final String FIELD_NAME = "name";
public static final String FIELD_PASSING_INSTRUCTIONS = "passingInstruction";
public static final String FIELD_CONTROL_POINT = "controlPoint";
private final JsonSerializer<ControlPoint> controlPointSerializer;
public WaypointJsonSerializer(JsonSerializer<ControlPoint> controlPointSerializer) {
this.controlPointSerializer = controlPointSerializer;
}
@Override
public JSONObject serialize(Waypoint object) {
JSONObject result = new JSONObject();
if (object.getName() != null) {
result.put(FIELD_NAME, object.getName());
}
if (object.getPassingInstructions() != null) {
result.put(FIELD_PASSING_INSTRUCTIONS, object.getPassingInstructions().name());
}
result.put(FIELD_CONTROL_POINT,
controlPointSerializer.serialize(object.getControlPoint()));
return result;
}
}
@@ -1,19 +1,19 @@
package com.sap.sailing.server.gateway.serialization.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.BoatClass;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class BoatClassJsonSerializer implements JsonSerializer<BoatClass> {
public static final String FIELD_NAME = "name";
public static final String FIELD_TYPICALLY_STARTS_UPWIND = "typicallyStartsUpwind";
@Override
public JSONObject serialize(BoatClass boatClass) {
JSONObject result = new JSONObject();
result.put(FIELD_NAME, boatClass.getName());
result.put(FIELD_TYPICALLY_STARTS_UPWIND, boatClass.typicallyStartsUpwind());
return result;
}
}
package com.sap.sailing.server.gateway.serialization.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.BoatClass;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class BoatClassJsonSerializer implements JsonSerializer<BoatClass> {
public static final String FIELD_NAME = "name";
public static final String FIELD_TYPICALLY_STARTS_UPWIND = "typicallyStartsUpwind";
@Override
public JSONObject serialize(BoatClass boatClass) {
JSONObject result = new JSONObject();
result.put(FIELD_NAME, boatClass.getName());
result.put(FIELD_TYPICALLY_STARTS_UPWIND, boatClass.typicallyStartsUpwind());
return result;
}
}
@@ -1,96 +1,96 @@
package com.sap.sailing.server.gateway.serialization.impl;
import java.io.Serializable;
import java.util.Map.Entry;
import java.util.Set;
import java.util.UUID;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.Boat;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.Nationality;
import com.sap.sailing.domain.base.Team;
import com.sap.sailing.domain.common.tracking.impl.CompetitorJsonConstants;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
import com.sap.sse.common.Color;
import com.sap.sse.common.CountryCode;
public class CompetitorJsonSerializer implements JsonSerializer<Competitor> {
public static final String FIELD_ID = "id";
private final JsonSerializer<Team> teamJsonSerializer;
private final JsonSerializer<Boat> boatJsonSerializer;
public static CompetitorJsonSerializer create() {
return new CompetitorJsonSerializer(TeamJsonSerializer.create(), BoatJsonSerializer.create());
}
public CompetitorJsonSerializer() {
this(null, null);
}
public CompetitorJsonSerializer(JsonSerializer<Team> teamJsonSerializer, JsonSerializer<Boat> teamBoatSerializer) {
this.teamJsonSerializer = teamJsonSerializer;
this.boatJsonSerializer = teamBoatSerializer;
}
public static JSONObject getCompetitorIdQuery(Competitor competitor) {
JSONObject result = new JSONObject();
result.put(FIELD_ID, getPersistentCompetitorId(competitor));
return result;
}
@Override
public JSONObject serialize(Competitor competitor) {
JSONObject result = new JSONObject();
// Special treatment for UUIDs. They are represented as String because JSON doesn't have a way to represent them otherwise.
// However, other, e.g., numeric, types used to encode a serializable ID must be preserved according to JSON semantics.
// Also see the corresponding case distinction in the deserialized which first tries to parse a string as a UUID becore
// returning the ID as is.
result.put(CompetitorJsonConstants.FIELD_ID_TYPE, competitor.getId().getClass().getName());
Set<Entry<Object, Object>> entries = getCompetitorIdQuery(competitor).entrySet();
for (Entry<Object, Object> idKeyAndValue : entries) {
result.put(idKeyAndValue.getKey(), idKeyAndValue.getValue());
}
result.put(CompetitorJsonConstants.FIELD_NAME, competitor.getName());
Color color = getColor(competitor);
result.put(CompetitorJsonConstants.FIELD_DISPLAY_COLOR, color == null ? null : color.getAsHtml());
result.put(CompetitorJsonConstants.FIELD_EMAIL, competitor.getEmail());
result.put(CompetitorJsonConstants.FIELD_SEARCHTAG, competitor.getSearchTag());
result.put(CompetitorJsonConstants.FIELD_SAIL_ID, competitor.getBoat() == null ? "" : competitor.getBoat().getSailID());
final Nationality nationality = competitor.getTeam() == null ? null : competitor.getTeam().getNationality();
result.put(CompetitorJsonConstants.FIELD_NATIONALITY, nationality == null ? "" : nationality.getThreeLetterIOCAcronym());
CountryCode countryCode = nationality == null ? null : nationality.getCountryCode();
result.put(CompetitorJsonConstants.FIELD_NATIONALITY_ISO2, countryCode == null ? "" : countryCode.getTwoLetterISOCode());
result.put(CompetitorJsonConstants.FIELD_NATIONALITY_ISO3, countryCode == null ? "" : countryCode.getThreeLetterISOCode());
if (competitor.getFlagImage() != null) {
result.put(CompetitorJsonConstants.FIELD_FLAG_IMAGE_URI, competitor.getFlagImage().toString());
}
if (teamJsonSerializer != null) {
result.put(CompetitorJsonConstants.FIELD_TEAM, teamJsonSerializer.serialize(competitor.getTeam()));
}
if (boatJsonSerializer != null) {
result.put(CompetitorJsonConstants.FIELD_BOAT, boatJsonSerializer.serialize(getBoat(competitor)));
}
result.put(CompetitorJsonConstants.FIELD_TIME_ON_TIME_FACTOR, competitor.getTimeOnTimeFactor());
result.put(CompetitorJsonConstants.FIELD_TIME_ON_DISTANCE_ALLOWANCE_IN_SECONDS_PER_NAUTICAL_MILE,
competitor.getTimeOnDistanceAllowancePerNauticalMile() == null ? null :
competitor.getTimeOnDistanceAllowancePerNauticalMile().asSeconds());
return result;
}
private static Serializable getPersistentCompetitorId(Competitor competitor) {
Serializable competitorId = competitor.getId() instanceof UUID ? competitor.getId().toString() : competitor.getId();
return competitorId;
}
protected Color getColor(Competitor competitor ) {
return competitor.getColor();
}
protected Boat getBoat(Competitor competitor ) {
return competitor.getBoat();
}
}
package com.sap.sailing.server.gateway.serialization.impl;
import java.io.Serializable;
import java.util.Map.Entry;
import java.util.Set;
import java.util.UUID;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.Boat;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.Nationality;
import com.sap.sailing.domain.base.Team;
import com.sap.sailing.domain.common.tracking.impl.CompetitorJsonConstants;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
import com.sap.sse.common.Color;
import com.sap.sse.common.CountryCode;
public class CompetitorJsonSerializer implements JsonSerializer<Competitor> {
public static final String FIELD_ID = "id";
private final JsonSerializer<Team> teamJsonSerializer;
private final JsonSerializer<Boat> boatJsonSerializer;
public static CompetitorJsonSerializer create() {
return new CompetitorJsonSerializer(TeamJsonSerializer.create(), BoatJsonSerializer.create());
}
public CompetitorJsonSerializer() {
this(null, null);
}
public CompetitorJsonSerializer(JsonSerializer<Team> teamJsonSerializer, JsonSerializer<Boat> teamBoatSerializer) {
this.teamJsonSerializer = teamJsonSerializer;
this.boatJsonSerializer = teamBoatSerializer;
}
public static JSONObject getCompetitorIdQuery(Competitor competitor) {
JSONObject result = new JSONObject();
result.put(FIELD_ID, getPersistentCompetitorId(competitor));
return result;
}
@Override
public JSONObject serialize(Competitor competitor) {
JSONObject result = new JSONObject();
// Special treatment for UUIDs. They are represented as String because JSON doesn't have a way to represent them otherwise.
// However, other, e.g., numeric, types used to encode a serializable ID must be preserved according to JSON semantics.
// Also see the corresponding case distinction in the deserialized which first tries to parse a string as a UUID becore
// returning the ID as is.
result.put(CompetitorJsonConstants.FIELD_ID_TYPE, competitor.getId().getClass().getName());
Set<Entry<Object, Object>> entries = getCompetitorIdQuery(competitor).entrySet();
for (Entry<Object, Object> idKeyAndValue : entries) {
result.put(idKeyAndValue.getKey(), idKeyAndValue.getValue());
}
result.put(CompetitorJsonConstants.FIELD_NAME, competitor.getName());
Color color = getColor(competitor);
result.put(CompetitorJsonConstants.FIELD_DISPLAY_COLOR, color == null ? null : color.getAsHtml());
result.put(CompetitorJsonConstants.FIELD_EMAIL, competitor.getEmail());
result.put(CompetitorJsonConstants.FIELD_SEARCHTAG, competitor.getSearchTag());
result.put(CompetitorJsonConstants.FIELD_SAIL_ID, competitor.getBoat() == null ? "" : competitor.getBoat().getSailID());
final Nationality nationality = competitor.getTeam() == null ? null : competitor.getTeam().getNationality();
result.put(CompetitorJsonConstants.FIELD_NATIONALITY, nationality == null ? "" : nationality.getThreeLetterIOCAcronym());
CountryCode countryCode = nationality == null ? null : nationality.getCountryCode();
result.put(CompetitorJsonConstants.FIELD_NATIONALITY_ISO2, countryCode == null ? "" : countryCode.getTwoLetterISOCode());
result.put(CompetitorJsonConstants.FIELD_NATIONALITY_ISO3, countryCode == null ? "" : countryCode.getThreeLetterISOCode());
if (competitor.getFlagImage() != null) {
result.put(CompetitorJsonConstants.FIELD_FLAG_IMAGE_URI, competitor.getFlagImage().toString());
}
if (teamJsonSerializer != null) {
result.put(CompetitorJsonConstants.FIELD_TEAM, teamJsonSerializer.serialize(competitor.getTeam()));
}
if (boatJsonSerializer != null) {
result.put(CompetitorJsonConstants.FIELD_BOAT, boatJsonSerializer.serialize(getBoat(competitor)));
}
result.put(CompetitorJsonConstants.FIELD_TIME_ON_TIME_FACTOR, competitor.getTimeOnTimeFactor());
result.put(CompetitorJsonConstants.FIELD_TIME_ON_DISTANCE_ALLOWANCE_IN_SECONDS_PER_NAUTICAL_MILE,
competitor.getTimeOnDistanceAllowancePerNauticalMile() == null ? null :
competitor.getTimeOnDistanceAllowancePerNauticalMile().asSeconds());
return result;
}
private static Serializable getPersistentCompetitorId(Competitor competitor) {
Serializable competitorId = competitor.getId() instanceof UUID ? competitor.getId().toString() : competitor.getId();
return competitorId;
}
protected Color getColor(Competitor competitor ) {
return competitor.getColor();
}
protected Boat getBoat(Competitor competitor ) {
return competitor.getBoat();
}
}
@@ -1,22 +1,22 @@
package com.sap.sailing.server.gateway.serialization.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.CourseArea;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class CourseAreaJsonSerializer implements JsonSerializer<CourseArea> {
public static final String FIELD_NAME = "name";
public static final String FIELD_ID = "id";
public static final String FIELD_RACES = "races";
@Override
public JSONObject serialize(CourseArea object) {
JSONObject result = new JSONObject();
result.put(FIELD_NAME, object.getName());
result.put(FIELD_ID, object.getId().toString());
return result;
}
}
package com.sap.sailing.server.gateway.serialization.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.CourseArea;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class CourseAreaJsonSerializer implements JsonSerializer<CourseArea> {
public static final String FIELD_NAME = "name";
public static final String FIELD_ID = "id";
public static final String FIELD_RACES = "races";
@Override
public JSONObject serialize(CourseArea object) {
JSONObject result = new JSONObject();
result.put(FIELD_NAME, object.getName());
result.put(FIELD_ID, object.getId().toString());
return result;
}
}
@@ -1,24 +1,24 @@
package com.sap.sailing.server.gateway.serialization.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.common.tracking.GPSFix;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class FlatGPSFixJsonSerializer implements JsonSerializer<GPSFix> {
public static final String FIELD_LON_DEG = "longitude";
public static final String FIELD_LAT_DEG = "latitude";
public static final String FIELD_TIME_MILLIS = "timestamp";
public static final String FIELD_ACCURACY = "accuracy";
public static final double NOT_AVAILABLE_THROUGH_SERVER = -1;
@Override
public JSONObject serialize(GPSFix object) {
JSONObject result = new JSONObject();
result.put(FIELD_LON_DEG, object.getPosition().getLngDeg());
result.put(FIELD_LAT_DEG, object.getPosition().getLatDeg());
result.put(FIELD_TIME_MILLIS, object.getTimePoint().asMillis());
result.put(FIELD_ACCURACY, NOT_AVAILABLE_THROUGH_SERVER);
return result;
}
}
package com.sap.sailing.server.gateway.serialization.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.common.tracking.GPSFix;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class FlatGPSFixJsonSerializer implements JsonSerializer<GPSFix> {
public static final String FIELD_LON_DEG = "longitude";
public static final String FIELD_LAT_DEG = "latitude";
public static final String FIELD_TIME_MILLIS = "timestamp";
public static final String FIELD_ACCURACY = "accuracy";
public static final double NOT_AVAILABLE_THROUGH_SERVER = -1;
@Override
public JSONObject serialize(GPSFix object) {
JSONObject result = new JSONObject();
result.put(FIELD_LON_DEG, object.getPosition().getLngDeg());
result.put(FIELD_LAT_DEG, object.getPosition().getLatDeg());
result.put(FIELD_TIME_MILLIS, object.getTimePoint().asMillis());
result.put(FIELD_ACCURACY, NOT_AVAILABLE_THROUGH_SERVER);
return result;
}
}
@@ -1,34 +1,34 @@
package com.sap.sailing.server.gateway.serialization.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
import com.sap.sse.common.Color;
public class FleetJsonSerializer implements JsonSerializer<Fleet> {
public static final String FIELD_NAME = "name";
public static final String FIELD_ORDERING = "ordering";
public static final String FIELD_COLOR = "color";
private final JsonSerializer<Color> colorSerializer;
public FleetJsonSerializer(JsonSerializer<Color> colorSerializer) {
this.colorSerializer = colorSerializer;
}
@Override
public JSONObject serialize(Fleet object) {
JSONObject result = new JSONObject();
result.put(FIELD_NAME, object.getName());
result.put(FIELD_ORDERING, object.getOrdering());
if (object.getColor() != null) {
result.put(FIELD_COLOR, colorSerializer.serialize(object.getColor()));
}
return result;
}
}
package com.sap.sailing.server.gateway.serialization.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
import com.sap.sse.common.Color;
public class FleetJsonSerializer implements JsonSerializer<Fleet> {
public static final String FIELD_NAME = "name";
public static final String FIELD_ORDERING = "ordering";
public static final String FIELD_COLOR = "color";
private final JsonSerializer<Color> colorSerializer;
public FleetJsonSerializer(JsonSerializer<Color> colorSerializer) {
this.colorSerializer = colorSerializer;
}
@Override
public JSONObject serialize(Fleet object) {
JSONObject result = new JSONObject();
result.put(FIELD_NAME, object.getName());
result.put(FIELD_ORDERING, object.getOrdering());
if (object.getColor() != null) {
result.put(FIELD_COLOR, colorSerializer.serialize(object.getColor()));
}
return result;
}
}
@@ -1,32 +1,32 @@
package com.sap.sailing.server.gateway.serialization.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.ControlPoint;
import com.sap.sailing.domain.common.Position;
import com.sap.sailing.domain.common.tracking.impl.GPSFixImpl;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
import com.sap.sailing.server.gateway.serialization.coursedata.impl.MarkJsonSerializer;
import com.sap.sse.common.Util.Pair;
import com.sap.sse.common.impl.MillisecondsTimePoint;
public class MarkJsonSerializerWithPosition implements JsonSerializer<Pair<ControlPoint, Position>> {
public static final String FIELD_POSITION = "position";
private final FlatGPSFixJsonSerializer gpsFixSerializer;
private final MarkJsonSerializer markSerializer;
public MarkJsonSerializerWithPosition(MarkJsonSerializer markSerializer, FlatGPSFixJsonSerializer gpsFixSerializer) {
this.markSerializer = markSerializer;
this.gpsFixSerializer = gpsFixSerializer;
}
@Override
public JSONObject serialize(Pair<ControlPoint, Position> object) {
final JSONObject result = markSerializer.serialize(object.getA());
result.put(FIELD_POSITION,
object.getB() == null ? null : gpsFixSerializer.serialize(new GPSFixImpl(object.getB(),
MillisecondsTimePoint.now())));
return result;
}
}
package com.sap.sailing.server.gateway.serialization.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.ControlPoint;
import com.sap.sailing.domain.common.Position;
import com.sap.sailing.domain.common.tracking.impl.GPSFixImpl;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
import com.sap.sailing.server.gateway.serialization.coursedata.impl.MarkJsonSerializer;
import com.sap.sse.common.Util.Pair;
import com.sap.sse.common.impl.MillisecondsTimePoint;
public class MarkJsonSerializerWithPosition implements JsonSerializer<Pair<ControlPoint, Position>> {
public static final String FIELD_POSITION = "position";
private final FlatGPSFixJsonSerializer gpsFixSerializer;
private final MarkJsonSerializer markSerializer;
public MarkJsonSerializerWithPosition(MarkJsonSerializer markSerializer, FlatGPSFixJsonSerializer gpsFixSerializer) {
this.markSerializer = markSerializer;
this.gpsFixSerializer = gpsFixSerializer;
}
@Override
public JSONObject serialize(Pair<ControlPoint, Position> object) {
final JSONObject result = markSerializer.serialize(object.getA());
result.put(FIELD_POSITION,
object.getB() == null ? null : gpsFixSerializer.serialize(new GPSFixImpl(object.getB(),
MillisecondsTimePoint.now())));
return result;
}
}
@@ -1,51 +1,51 @@
package com.sap.sailing.server.gateway.serialization.impl;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.common.TargetTimeInfo;
import com.sap.sailing.domain.common.Wind;
import com.sap.sailing.domain.common.TargetTimeInfo.LegTargetTimeInfo;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class TargetTimeInfoSerializer implements JsonSerializer<TargetTimeInfo> {
public static final String LEGS = "legs";
public static final String DURATION_MILLIS = "durationMillis";
public static final String LEG_START_TIME_MILLIS = "legStartMillis";
public static final String LEG_DURATION_MILLIS = "legDurationMillis";
public static final String LEG_DISTANCE_METERS = "legDistanceMeters";
public static final String LEG_BEARING_DEGREES = "legBearingDegrees";
public static final String LEG_TRUE_WIND_ANGLE_TO_LEG_DEGREES = "legTrueWindAngleToLegDegrees";
public static final String LEG_WIND = "legWind";
public static final String LEG_TYPE = "legType";
private final JsonSerializer<Wind> windSerializer;
public TargetTimeInfoSerializer(JsonSerializer<Wind> windSerializer) {
super();
this.windSerializer = windSerializer;
}
@Override
public JSONObject serialize(TargetTimeInfo object) {
final JSONArray legsAsJson = new JSONArray();
final JSONObject result = new JSONObject();
// redundant, but possibly useful to clients other than the deserializer:
result.put(DURATION_MILLIS, object.getExpectedDuration().asMillis());
result.put(LEGS, legsAsJson);
for (final LegTargetTimeInfo legInfo : object.getLegTargetTimes()) {
final JSONObject legAsJson = new JSONObject();
legAsJson.put(LEG_START_TIME_MILLIS, legInfo.getExpectedStartTimePoint().asMillis());
legAsJson.put(LEG_DURATION_MILLIS, legInfo.getExpectedDuration().asMillis());
legAsJson.put(LEG_DISTANCE_METERS, legInfo.getDistance().getMeters());
legAsJson.put(LEG_BEARING_DEGREES, legInfo.getLegBearing().getDegrees());
// redundant, but possibly useful to clients other than the deserializer:
legAsJson.put(LEG_TRUE_WIND_ANGLE_TO_LEG_DEGREES, legInfo.getTrueWindAngleToLeg().getDegrees());
legAsJson.put(LEG_TYPE, legInfo.getLegType().name());
legAsJson.put(LEG_WIND, windSerializer.serialize(legInfo.getWind()));
legsAsJson.add(legAsJson);
}
return result;
}
}
package com.sap.sailing.server.gateway.serialization.impl;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.common.TargetTimeInfo;
import com.sap.sailing.domain.common.Wind;
import com.sap.sailing.domain.common.TargetTimeInfo.LegTargetTimeInfo;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class TargetTimeInfoSerializer implements JsonSerializer<TargetTimeInfo> {
public static final String LEGS = "legs";
public static final String DURATION_MILLIS = "durationMillis";
public static final String LEG_START_TIME_MILLIS = "legStartMillis";
public static final String LEG_DURATION_MILLIS = "legDurationMillis";
public static final String LEG_DISTANCE_METERS = "legDistanceMeters";
public static final String LEG_BEARING_DEGREES = "legBearingDegrees";
public static final String LEG_TRUE_WIND_ANGLE_TO_LEG_DEGREES = "legTrueWindAngleToLegDegrees";
public static final String LEG_WIND = "legWind";
public static final String LEG_TYPE = "legType";
private final JsonSerializer<Wind> windSerializer;
public TargetTimeInfoSerializer(JsonSerializer<Wind> windSerializer) {
super();
this.windSerializer = windSerializer;
}
@Override
public JSONObject serialize(TargetTimeInfo object) {
final JSONArray legsAsJson = new JSONArray();
final JSONObject result = new JSONObject();
// redundant, but possibly useful to clients other than the deserializer:
result.put(DURATION_MILLIS, object.getExpectedDuration().asMillis());
result.put(LEGS, legsAsJson);
for (final LegTargetTimeInfo legInfo : object.getLegTargetTimes()) {
final JSONObject legAsJson = new JSONObject();
legAsJson.put(LEG_START_TIME_MILLIS, legInfo.getExpectedStartTimePoint().asMillis());
legAsJson.put(LEG_DURATION_MILLIS, legInfo.getExpectedDuration().asMillis());
legAsJson.put(LEG_DISTANCE_METERS, legInfo.getDistance().getMeters());
legAsJson.put(LEG_BEARING_DEGREES, legInfo.getLegBearing().getDegrees());
// redundant, but possibly useful to clients other than the deserializer:
legAsJson.put(LEG_TRUE_WIND_ANGLE_TO_LEG_DEGREES, legInfo.getTrueWindAngleToLeg().getDegrees());
legAsJson.put(LEG_TYPE, legInfo.getLegType().name());
legAsJson.put(LEG_WIND, windSerializer.serialize(legInfo.getWind()));
legsAsJson.add(legAsJson);
}
return result;
}
}
@@ -1,33 +1,33 @@
package com.sap.sailing.server.gateway.serialization.impl;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.CourseArea;
import com.sap.sailing.domain.base.Venue;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class VenueJsonSerializer implements JsonSerializer<Venue> {
public static final String FIELD_NAME = "name";
public static final String FIELD_COURSE_AREAS = "courseAreas";
private final JsonSerializer<CourseArea> areaSerializer;
public VenueJsonSerializer(JsonSerializer<CourseArea> areaSerializer) {
this.areaSerializer = areaSerializer;
}
@Override
public JSONObject serialize(Venue venue) {
JSONObject result = new JSONObject();
result.put(FIELD_NAME, venue.getName());
JSONArray areas = new JSONArray();
for (CourseArea area : venue.getCourseAreas()) {
areas.add(areaSerializer.serialize(area));
}
result.put(FIELD_COURSE_AREAS, areas);
return result;
}
}
package com.sap.sailing.server.gateway.serialization.impl;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.CourseArea;
import com.sap.sailing.domain.base.Venue;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class VenueJsonSerializer implements JsonSerializer<Venue> {
public static final String FIELD_NAME = "name";
public static final String FIELD_COURSE_AREAS = "courseAreas";
private final JsonSerializer<CourseArea> areaSerializer;
public VenueJsonSerializer(JsonSerializer<CourseArea> areaSerializer) {
this.areaSerializer = areaSerializer;
}
@Override
public JSONObject serialize(Venue venue) {
JSONObject result = new JSONObject();
result.put(FIELD_NAME, venue.getName());
JSONArray areas = new JSONArray();
for (CourseArea area : venue.getCourseAreas()) {
areas.add(areaSerializer.serialize(area));
}
result.put(FIELD_COURSE_AREAS, areas);
return result;
}
}
@@ -1,40 +1,40 @@
package com.sap.sailing.server.gateway.serialization.racegroup.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.abstractlog.race.RaceLog;
import com.sap.sailing.domain.base.racegroup.RaceCell;
import com.sap.sailing.domain.common.TargetTimeInfo;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class RaceCellJsonSerializer implements JsonSerializer<RaceCell> {
public static final String FIELD_NAME = "name";
public static final String FIELD_RACE_LOG = "raceLog";
public static final String FIELD_COMPETITORS = "competitors";
public static final String FIELD_FACTOR = "factor";
public static final String FIELD_EXPLICIT_FACTOR = "explicitfactor";
public static final String FIELD_ZERO_BASED_INDEX_IN_FLEET = "zerobasedindexinfleet";
public static final String FIELD_TARGET_TIME_INFO = "targettimeinfo";
private final JsonSerializer<RaceLog> logSerializer;
private final JsonSerializer<TargetTimeInfo> targetTimeInfoSerializer;
public RaceCellJsonSerializer(JsonSerializer<RaceLog> logSerializer, JsonSerializer<TargetTimeInfo> targetTimeInfoSerializer) {
this.logSerializer = logSerializer;
this.targetTimeInfoSerializer = targetTimeInfoSerializer;
}
@Override
public JSONObject serialize(RaceCell object) {
JSONObject result = new JSONObject();
result.put(FIELD_NAME, object.getName());
result.put(FIELD_FACTOR, object.getFactor());
result.put(FIELD_EXPLICIT_FACTOR, object.getExplicitFactor());
result.put(FIELD_ZERO_BASED_INDEX_IN_FLEET, object.getZeroBasedIndexInFleet());
result.put(FIELD_RACE_LOG, logSerializer.serialize(object.getRaceLog()));
final TargetTimeInfo targetTime = object.getTargetTime();
result.put(FIELD_TARGET_TIME_INFO, targetTime==null?null:targetTimeInfoSerializer.serialize(targetTime));
return result;
}
}
package com.sap.sailing.server.gateway.serialization.racegroup.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.abstractlog.race.RaceLog;
import com.sap.sailing.domain.base.racegroup.RaceCell;
import com.sap.sailing.domain.common.TargetTimeInfo;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class RaceCellJsonSerializer implements JsonSerializer<RaceCell> {
public static final String FIELD_NAME = "name";
public static final String FIELD_RACE_LOG = "raceLog";
public static final String FIELD_COMPETITORS = "competitors";
public static final String FIELD_FACTOR = "factor";
public static final String FIELD_EXPLICIT_FACTOR = "explicitfactor";
public static final String FIELD_ZERO_BASED_INDEX_IN_FLEET = "zerobasedindexinfleet";
public static final String FIELD_TARGET_TIME_INFO = "targettimeinfo";
private final JsonSerializer<RaceLog> logSerializer;
private final JsonSerializer<TargetTimeInfo> targetTimeInfoSerializer;
public RaceCellJsonSerializer(JsonSerializer<RaceLog> logSerializer, JsonSerializer<TargetTimeInfo> targetTimeInfoSerializer) {
this.logSerializer = logSerializer;
this.targetTimeInfoSerializer = targetTimeInfoSerializer;
}
@Override
public JSONObject serialize(RaceCell object) {
JSONObject result = new JSONObject();
result.put(FIELD_NAME, object.getName());
result.put(FIELD_FACTOR, object.getFactor());
result.put(FIELD_EXPLICIT_FACTOR, object.getExplicitFactor());
result.put(FIELD_ZERO_BASED_INDEX_IN_FLEET, object.getZeroBasedIndexInFleet());
result.put(FIELD_RACE_LOG, logSerializer.serialize(object.getRaceLog()));
final TargetTimeInfo targetTime = object.getTargetTime();
result.put(FIELD_TARGET_TIME_INFO, targetTime==null?null:targetTimeInfoSerializer.serialize(targetTime));
return result;
}
}
@@ -1,54 +1,54 @@
package com.sap.sailing.server.gateway.serialization.racegroup.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.BoatClass;
import com.sap.sailing.domain.base.CourseArea;
import com.sap.sailing.domain.base.configuration.RegattaConfiguration;
import com.sap.sailing.domain.base.racegroup.RaceGroup;
import com.sap.sailing.server.gateway.serialization.ExtendableJsonSerializer;
import com.sap.sailing.server.gateway.serialization.ExtensionJsonSerializer;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class RaceGroupJsonSerializer extends ExtendableJsonSerializer<RaceGroup> {
public static final String FIELD_NAME = "name";
public static final String FIELD_COURSE_AREA = "courseArea";
public static final String FIELD_BOAT_CLASS = "boatClass";
public static final String FIELD_REGATTA_CONFIGURATION = "procedures";
public static final Object FIELD_DISPLAY_NAME = "displayName";
private final JsonSerializer<BoatClass> boatClassSerializer;
private final JsonSerializer<CourseArea> courseAreaSerializer;
private final JsonSerializer<RegattaConfiguration> configurationSerializer;
public RaceGroupJsonSerializer(
JsonSerializer<BoatClass> boatClassSerializer,
JsonSerializer<CourseArea> courseAreaSerializer,
JsonSerializer<RegattaConfiguration> configurationSerializer,
ExtensionJsonSerializer<RaceGroup, ?> extensionSerializer) {
super(extensionSerializer);
this.courseAreaSerializer = courseAreaSerializer;
this.boatClassSerializer = boatClassSerializer;
this.configurationSerializer = configurationSerializer;
}
@Override
protected JSONObject serializeFields(RaceGroup object) {
JSONObject result = new JSONObject();
result.put(FIELD_NAME, object.getName());
if (object.getDefaultCourseArea() != null) {
result.put(FIELD_COURSE_AREA, courseAreaSerializer.serialize(object.getDefaultCourseArea()));
}
if (object.getBoatClass() != null) {
result.put(FIELD_BOAT_CLASS, boatClassSerializer.serialize(object.getBoatClass()));
}
if (object.getRegattaConfiguration() != null) {
result.put(FIELD_REGATTA_CONFIGURATION,
configurationSerializer.serialize(object.getRegattaConfiguration()));
}
result.put(FIELD_DISPLAY_NAME, object.getDisplayName());
return result;
}
}
package com.sap.sailing.server.gateway.serialization.racegroup.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.BoatClass;
import com.sap.sailing.domain.base.CourseArea;
import com.sap.sailing.domain.base.configuration.RegattaConfiguration;
import com.sap.sailing.domain.base.racegroup.RaceGroup;
import com.sap.sailing.server.gateway.serialization.ExtendableJsonSerializer;
import com.sap.sailing.server.gateway.serialization.ExtensionJsonSerializer;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class RaceGroupJsonSerializer extends ExtendableJsonSerializer<RaceGroup> {
public static final String FIELD_NAME = "name";
public static final String FIELD_COURSE_AREA = "courseArea";
public static final String FIELD_BOAT_CLASS = "boatClass";
public static final String FIELD_REGATTA_CONFIGURATION = "procedures";
public static final Object FIELD_DISPLAY_NAME = "displayName";
private final JsonSerializer<BoatClass> boatClassSerializer;
private final JsonSerializer<CourseArea> courseAreaSerializer;
private final JsonSerializer<RegattaConfiguration> configurationSerializer;
public RaceGroupJsonSerializer(
JsonSerializer<BoatClass> boatClassSerializer,
JsonSerializer<CourseArea> courseAreaSerializer,
JsonSerializer<RegattaConfiguration> configurationSerializer,
ExtensionJsonSerializer<RaceGroup, ?> extensionSerializer) {
super(extensionSerializer);
this.courseAreaSerializer = courseAreaSerializer;
this.boatClassSerializer = boatClassSerializer;
this.configurationSerializer = configurationSerializer;
}
@Override
protected JSONObject serializeFields(RaceGroup object) {
JSONObject result = new JSONObject();
result.put(FIELD_NAME, object.getName());
if (object.getDefaultCourseArea() != null) {
result.put(FIELD_COURSE_AREA, courseAreaSerializer.serialize(object.getDefaultCourseArea()));
}
if (object.getBoatClass() != null) {
result.put(FIELD_BOAT_CLASS, boatClassSerializer.serialize(object.getBoatClass()));
}
if (object.getRegattaConfiguration() != null) {
result.put(FIELD_REGATTA_CONFIGURATION,
configurationSerializer.serialize(object.getRegattaConfiguration()));
}
result.put(FIELD_DISPLAY_NAME, object.getDisplayName());
return result;
}
}
@@ -1,42 +1,42 @@
package com.sap.sailing.server.gateway.serialization.racegroup.impl;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.racegroup.RaceCell;
import com.sap.sailing.domain.base.racegroup.RaceRow;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class RaceRowJsonSerializer implements JsonSerializer<RaceRow> {
public static final String FIELD_FLEET = "fleet";
/**
* The race cells in the JSONArray keyed by this name are expected to be written
* in the order in which their race columns appear in the series / leaderboard
*/
public static final String FIELD_RACE_CELLS = "races";
private JsonSerializer<Fleet> fleetSerializer;
private JsonSerializer<RaceCell> cellSerializer;
public RaceRowJsonSerializer(
JsonSerializer<Fleet> fleetSerializer,
JsonSerializer<RaceCell> cellSerializer) {
this.fleetSerializer = fleetSerializer;
this.cellSerializer = cellSerializer;
}
@Override
public JSONObject serialize(RaceRow object) {
JSONObject result = new JSONObject();
result.put(FIELD_FLEET, fleetSerializer.serialize(object.getFleet()));
JSONArray cells = new JSONArray();
for (RaceCell cell : object.getCells()) {
cells.add(cellSerializer.serialize(cell));
}
result.put(FIELD_RACE_CELLS, cells);
return result;
}
}
package com.sap.sailing.server.gateway.serialization.racegroup.impl;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.racegroup.RaceCell;
import com.sap.sailing.domain.base.racegroup.RaceRow;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class RaceRowJsonSerializer implements JsonSerializer<RaceRow> {
public static final String FIELD_FLEET = "fleet";
/**
* The race cells in the JSONArray keyed by this name are expected to be written
* in the order in which their race columns appear in the series / leaderboard
*/
public static final String FIELD_RACE_CELLS = "races";
private JsonSerializer<Fleet> fleetSerializer;
private JsonSerializer<RaceCell> cellSerializer;
public RaceRowJsonSerializer(
JsonSerializer<Fleet> fleetSerializer,
JsonSerializer<RaceCell> cellSerializer) {
this.fleetSerializer = fleetSerializer;
this.cellSerializer = cellSerializer;
}
@Override
public JSONObject serialize(RaceRow object) {
JSONObject result = new JSONObject();
result.put(FIELD_FLEET, fleetSerializer.serialize(object.getFleet()));
JSONArray cells = new JSONArray();
for (RaceCell cell : object.getCells()) {
cells.add(cellSerializer.serialize(cell));
}
result.put(FIELD_RACE_CELLS, cells);
return result;
}
}
@@ -1,31 +1,31 @@
package com.sap.sailing.server.gateway.serialization.racegroup.impl;
import org.json.simple.JSONArray;
import com.sap.sailing.domain.base.racegroup.RaceRow;
import com.sap.sailing.domain.base.racegroup.SeriesWithRows;
import com.sap.sailing.server.gateway.serialization.ExtensionJsonSerializer;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class RaceRowsOfSeriesWithRowsSerializer extends ExtensionJsonSerializer<SeriesWithRows, RaceRow> {
public static final String FIELD_FLEETS = "fleets";
public RaceRowsOfSeriesWithRowsSerializer(JsonSerializer<RaceRow> extensionSerializer) {
super(extensionSerializer);
}
@Override
public String getExtensionFieldName() {
return FIELD_FLEETS;
}
@Override
public Object serializeExtension(SeriesWithRows parent) {
JSONArray result = new JSONArray();
for (RaceRow row : parent.getRaceRows()) {
result.add(serialize(row));
}
return result;
}
}
package com.sap.sailing.server.gateway.serialization.racegroup.impl;
import org.json.simple.JSONArray;
import com.sap.sailing.domain.base.racegroup.RaceRow;
import com.sap.sailing.domain.base.racegroup.SeriesWithRows;
import com.sap.sailing.server.gateway.serialization.ExtensionJsonSerializer;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class RaceRowsOfSeriesWithRowsSerializer extends ExtensionJsonSerializer<SeriesWithRows, RaceRow> {
public static final String FIELD_FLEETS = "fleets";
public RaceRowsOfSeriesWithRowsSerializer(JsonSerializer<RaceRow> extensionSerializer) {
super(extensionSerializer);
}
@Override
public String getExtensionFieldName() {
return FIELD_FLEETS;
}
@Override
public Object serializeExtension(SeriesWithRows parent) {
JSONArray result = new JSONArray();
for (RaceRow row : parent.getRaceRows()) {
result.add(serialize(row));
}
return result;
}
}
@@ -1,27 +1,27 @@
package com.sap.sailing.server.gateway.serialization.racegroup.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.racegroup.SeriesWithRows;
import com.sap.sailing.server.gateway.serialization.ExtendableJsonSerializer;
import com.sap.sailing.server.gateway.serialization.ExtensionJsonSerializer;
public class SeriesWithRowsJsonSerializer extends ExtendableJsonSerializer<SeriesWithRows> {
public static final String FIELD_NAME = "name";
public static final String FIELD_IS_MEDAL = "isMedal";
public static final String FIELD_FLEETS_CAN_RUN_IN_PARALLEL = "isFleetsCanRunInParallel";
public SeriesWithRowsJsonSerializer(ExtensionJsonSerializer<SeriesWithRows, ?> extensionSerializer) {
super(extensionSerializer);
}
@Override
protected JSONObject serializeFields(SeriesWithRows object) {
JSONObject result = new JSONObject();
result.put(FIELD_NAME, object.getName());
result.put(FIELD_IS_MEDAL, object.isMedal());
result.put(FIELD_FLEETS_CAN_RUN_IN_PARALLEL, object.isFleetsCanRunInParallel());
return result;
}
}
package com.sap.sailing.server.gateway.serialization.racegroup.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.racegroup.SeriesWithRows;
import com.sap.sailing.server.gateway.serialization.ExtendableJsonSerializer;
import com.sap.sailing.server.gateway.serialization.ExtensionJsonSerializer;
public class SeriesWithRowsJsonSerializer extends ExtendableJsonSerializer<SeriesWithRows> {
public static final String FIELD_NAME = "name";
public static final String FIELD_IS_MEDAL = "isMedal";
public static final String FIELD_FLEETS_CAN_RUN_IN_PARALLEL = "isFleetsCanRunInParallel";
public SeriesWithRowsJsonSerializer(ExtensionJsonSerializer<SeriesWithRows, ?> extensionSerializer) {
super(extensionSerializer);
}
@Override
protected JSONObject serializeFields(SeriesWithRows object) {
JSONObject result = new JSONObject();
result.put(FIELD_NAME, object.getName());
result.put(FIELD_IS_MEDAL, object.isMedal());
result.put(FIELD_FLEETS_CAN_RUN_IN_PARALLEL, object.isFleetsCanRunInParallel());
return result;
}
}
@@ -1,32 +1,32 @@
package com.sap.sailing.server.gateway.serialization.racegroup.impl;
import org.json.simple.JSONArray;
import com.sap.sailing.domain.base.racegroup.RaceGroup;
import com.sap.sailing.domain.base.racegroup.SeriesWithRows;
import com.sap.sailing.server.gateway.serialization.ExtensionJsonSerializer;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class SeriesWithRowsOfRaceGroupSerializer extends ExtensionJsonSerializer<RaceGroup, SeriesWithRows> {
public static final String FIELD_SERIES = "series";
public SeriesWithRowsOfRaceGroupSerializer(JsonSerializer<SeriesWithRows> extensionSerializer) {
super(extensionSerializer);
}
@Override
public String getExtensionFieldName() {
return FIELD_SERIES;
}
@Override
public Object serializeExtension(RaceGroup parent) {
JSONArray result = new JSONArray();
for (SeriesWithRows series : parent.getSeries()) {
result.add(serialize(series));
}
return result;
}
}
package com.sap.sailing.server.gateway.serialization.racegroup.impl;
import org.json.simple.JSONArray;
import com.sap.sailing.domain.base.racegroup.RaceGroup;
import com.sap.sailing.domain.base.racegroup.SeriesWithRows;
import com.sap.sailing.server.gateway.serialization.ExtensionJsonSerializer;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class SeriesWithRowsOfRaceGroupSerializer extends ExtensionJsonSerializer<RaceGroup, SeriesWithRows> {
public static final String FIELD_SERIES = "series";
public SeriesWithRowsOfRaceGroupSerializer(JsonSerializer<SeriesWithRows> extensionSerializer) {
super(extensionSerializer);
}
@Override
public String getExtensionFieldName() {
return FIELD_SERIES;
}
@Override
public Object serializeExtension(RaceGroup parent) {
JSONArray result = new JSONArray();
for (SeriesWithRows series : parent.getSeries()) {
result.add(serialize(series));
}
return result;
}
}
@@ -1,52 +1,52 @@
package com.sap.sailing.server.gateway.serialization.racelog.impl;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
import com.sap.sse.common.TimePoint;
public abstract class BaseRaceLogEventSerializer implements JsonSerializer<RaceLogEvent> {
public static final String FIELD_CLASS = "@class";
public static final String FIELD_ID = "id";
public static final String FIELD_CREATED_AT = "createdAt";
public static final String FIELD_TIMESTAMP = "timestamp";
public static final String FIELD_PASS_ID = "passId";
public static final String FIELD_COMPETITORS = "competitors";
public static final String FIELD_AUTHOR_NAME = "authorName";
public static final String FIELD_AUTHOR_PRIORITY = "authorPriority";
protected abstract String getClassFieldValue();
protected JsonSerializer<Competitor> competitorSerializer;
public BaseRaceLogEventSerializer(JsonSerializer<Competitor> competitorSerializer) {
this.competitorSerializer = competitorSerializer;
}
@Override
public JSONObject serialize(RaceLogEvent object) {
JSONObject result = new JSONObject();
result.put(FIELD_CLASS, getClassFieldValue());
result.put(FIELD_ID, object.getId().toString());
result.put(FIELD_CREATED_AT, object.getCreatedAt().asMillis());
final TimePoint logicalTimePoint = object.getLogicalTimePoint();
result.put(FIELD_TIMESTAMP, logicalTimePoint==null?null:logicalTimePoint.asMillis());
result.put(FIELD_PASS_ID, object.getPassId());
JSONArray competitors = new JSONArray();
for (Competitor competitor : object.getInvolvedBoats()) {
competitors.add(competitorSerializer.serialize(competitor));
}
result.put(FIELD_COMPETITORS, competitors);
if (object.getAuthor() != null) {
result.put(FIELD_AUTHOR_NAME, object.getAuthor().getName());
result.put(FIELD_AUTHOR_PRIORITY, object.getAuthor().getPriority());
}
return result;
}
}
package com.sap.sailing.server.gateway.serialization.racelog.impl;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
import com.sap.sse.common.TimePoint;
public abstract class BaseRaceLogEventSerializer implements JsonSerializer<RaceLogEvent> {
public static final String FIELD_CLASS = "@class";
public static final String FIELD_ID = "id";
public static final String FIELD_CREATED_AT = "createdAt";
public static final String FIELD_TIMESTAMP = "timestamp";
public static final String FIELD_PASS_ID = "passId";
public static final String FIELD_COMPETITORS = "competitors";
public static final String FIELD_AUTHOR_NAME = "authorName";
public static final String FIELD_AUTHOR_PRIORITY = "authorPriority";
protected abstract String getClassFieldValue();
protected JsonSerializer<Competitor> competitorSerializer;
public BaseRaceLogEventSerializer(JsonSerializer<Competitor> competitorSerializer) {
this.competitorSerializer = competitorSerializer;
}
@Override
public JSONObject serialize(RaceLogEvent object) {
JSONObject result = new JSONObject();
result.put(FIELD_CLASS, getClassFieldValue());
result.put(FIELD_ID, object.getId().toString());
result.put(FIELD_CREATED_AT, object.getCreatedAt().asMillis());
final TimePoint logicalTimePoint = object.getLogicalTimePoint();
result.put(FIELD_TIMESTAMP, logicalTimePoint==null?null:logicalTimePoint.asMillis());
result.put(FIELD_PASS_ID, object.getPassId());
JSONArray competitors = new JSONArray();
for (Competitor competitor : object.getInvolvedBoats()) {
competitors.add(competitorSerializer.serialize(competitor));
}
result.put(FIELD_COMPETITORS, competitors);
if (object.getAuthor() != null) {
result.put(FIELD_AUTHOR_NAME, object.getAuthor().getName());
result.put(FIELD_AUTHOR_PRIORITY, object.getAuthor().getPriority());
}
return result;
}
}
@@ -1,35 +1,35 @@
package com.sap.sailing.server.gateway.serialization.racelog.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.abstractlog.race.RaceLogCourseAreaChangedEvent;
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 RaceLogCourseAreaChangedEventSerializer extends BaseRaceLogEventSerializer {
public static final String VALUE_CLASS = RaceLogCourseAreaChangedEvent.class.getSimpleName();
public static final String FIELD_COURSE_AREA_ID = "courseAreaId";
public RaceLogCourseAreaChangedEventSerializer(
JsonSerializer<Competitor> competitorSerializer) {
super(competitorSerializer);
}
@Override
protected String getClassFieldValue() {
return VALUE_CLASS;
}
@Override
public JSONObject serialize(RaceLogEvent object) {
RaceLogCourseAreaChangedEvent caChangedEvent = (RaceLogCourseAreaChangedEvent) object;
JSONObject result = super.serialize(caChangedEvent);
result.put(FIELD_COURSE_AREA_ID, caChangedEvent.getCourseAreaId().toString());
return result;
}
}
package com.sap.sailing.server.gateway.serialization.racelog.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.abstractlog.race.RaceLogCourseAreaChangedEvent;
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 RaceLogCourseAreaChangedEventSerializer extends BaseRaceLogEventSerializer {
public static final String VALUE_CLASS = RaceLogCourseAreaChangedEvent.class.getSimpleName();
public static final String FIELD_COURSE_AREA_ID = "courseAreaId";
public RaceLogCourseAreaChangedEventSerializer(
JsonSerializer<Competitor> competitorSerializer) {
super(competitorSerializer);
}
@Override
protected String getClassFieldValue() {
return VALUE_CLASS;
}
@Override
public JSONObject serialize(RaceLogEvent object) {
RaceLogCourseAreaChangedEvent caChangedEvent = (RaceLogCourseAreaChangedEvent) object;
JSONObject result = super.serialize(caChangedEvent);
result.put(FIELD_COURSE_AREA_ID, caChangedEvent.getCourseAreaId().toString());
return result;
}
}
@@ -1,40 +1,40 @@
package com.sap.sailing.server.gateway.serialization.racelog.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.abstractlog.race.RaceLogCourseDesignChangedEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.CourseBase;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class RaceLogCourseDesignChangedEventSerializer extends BaseRaceLogEventSerializer {
public static final String VALUE_CLASS = RaceLogCourseDesignChangedEvent.class.getSimpleName();
public static final String FIELD_COURSE_DESIGN = "courseDesign";
public static final String FIELD_COURSE_DESIGNER_MODE = "courseDesignerMode";
private final JsonSerializer<CourseBase> courseBaseSerializer;
public RaceLogCourseDesignChangedEventSerializer(
JsonSerializer<Competitor> competitorSerializer,
JsonSerializer<CourseBase> courseBaseSerializer) {
super(competitorSerializer);
this.courseBaseSerializer = courseBaseSerializer;
}
@Override
protected String getClassFieldValue() {
return VALUE_CLASS;
}
@Override
public JSONObject serialize(RaceLogEvent object) {
RaceLogCourseDesignChangedEvent courseChangedEvent = (RaceLogCourseDesignChangedEvent) object;
JSONObject result = super.serialize(courseChangedEvent);
result.put(FIELD_COURSE_DESIGN, courseBaseSerializer.serialize(courseChangedEvent.getCourseDesign()));
result.put(FIELD_COURSE_DESIGNER_MODE, courseChangedEvent.getCourseDesignerMode() == null ? null : courseChangedEvent.getCourseDesignerMode().name());
return result;
}
}
package com.sap.sailing.server.gateway.serialization.racelog.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.abstractlog.race.RaceLogCourseDesignChangedEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.CourseBase;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class RaceLogCourseDesignChangedEventSerializer extends BaseRaceLogEventSerializer {
public static final String VALUE_CLASS = RaceLogCourseDesignChangedEvent.class.getSimpleName();
public static final String FIELD_COURSE_DESIGN = "courseDesign";
public static final String FIELD_COURSE_DESIGNER_MODE = "courseDesignerMode";
private final JsonSerializer<CourseBase> courseBaseSerializer;
public RaceLogCourseDesignChangedEventSerializer(
JsonSerializer<Competitor> competitorSerializer,
JsonSerializer<CourseBase> courseBaseSerializer) {
super(competitorSerializer);
this.courseBaseSerializer = courseBaseSerializer;
}
@Override
protected String getClassFieldValue() {
return VALUE_CLASS;
}
@Override
public JSONObject serialize(RaceLogEvent object) {
RaceLogCourseDesignChangedEvent courseChangedEvent = (RaceLogCourseDesignChangedEvent) object;
JSONObject result = super.serialize(courseChangedEvent);
result.put(FIELD_COURSE_DESIGN, courseBaseSerializer.serialize(courseChangedEvent.getCourseDesign()));
result.put(FIELD_COURSE_DESIGNER_MODE, courseChangedEvent.getCourseDesignerMode() == null ? null : courseChangedEvent.getCourseDesignerMode().name());
return result;
}
}
@@ -1,38 +1,38 @@
package com.sap.sailing.server.gateway.serialization.racelog.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogDenoteForTrackingEvent;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class RaceLogDenoteForTrackingEventSerializer extends BaseRaceLogEventSerializer {
public static final String VALUE_CLASS = RaceLogDenoteForTrackingEvent.class.getSimpleName();
public static final String FIELD_RACE_NAME = "raceName";
public static final String FIELD_BOAT_CLASS = "boatClass";
public static final String FIELD_RACE_ID = "raceId";
public RaceLogDenoteForTrackingEventSerializer(
JsonSerializer<Competitor> competitorSerializer) {
super(competitorSerializer);
}
@Override
protected String getClassFieldValue() {
return VALUE_CLASS;
}
@Override
public JSONObject serialize(RaceLogEvent object) {
RaceLogDenoteForTrackingEvent event = (RaceLogDenoteForTrackingEvent) object;
JSONObject result = super.serialize(event);
result.put(FIELD_RACE_NAME, event.getRaceName());
result.put(FIELD_BOAT_CLASS, event.getBoatClass().getName());
result.put(FIELD_RACE_ID, event.getRaceId().toString());
return result;
}
}
package com.sap.sailing.server.gateway.serialization.racelog.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogDenoteForTrackingEvent;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class RaceLogDenoteForTrackingEventSerializer extends BaseRaceLogEventSerializer {
public static final String VALUE_CLASS = RaceLogDenoteForTrackingEvent.class.getSimpleName();
public static final String FIELD_RACE_NAME = "raceName";
public static final String FIELD_BOAT_CLASS = "boatClass";
public static final String FIELD_RACE_ID = "raceId";
public RaceLogDenoteForTrackingEventSerializer(
JsonSerializer<Competitor> competitorSerializer) {
super(competitorSerializer);
}
@Override
protected String getClassFieldValue() {
return VALUE_CLASS;
}
@Override
public JSONObject serialize(RaceLogEvent object) {
RaceLogDenoteForTrackingEvent event = (RaceLogDenoteForTrackingEvent) object;
JSONObject result = super.serialize(event);
result.put(FIELD_RACE_NAME, event.getRaceName());
result.put(FIELD_BOAT_CLASS, event.getBoatClass().getName());
result.put(FIELD_RACE_ID, event.getRaceId().toString());
return result;
}
}
@@ -1,22 +1,22 @@
package com.sap.sailing.server.gateway.serialization.racelog.impl;
import com.sap.sailing.domain.abstractlog.race.RaceLogEndOfTrackingEvent;
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 RaceLogEndOfTrackingEventSerializer extends BaseRaceLogEventSerializer implements
JsonSerializer<RaceLogEvent> {
public static final String VALUE_CLASS = RaceLogEndOfTrackingEvent.class.getSimpleName();
public RaceLogEndOfTrackingEventSerializer(JsonSerializer<Competitor> competitorSerializer) {
super(competitorSerializer);
}
@Override
protected String getClassFieldValue() {
return VALUE_CLASS;
}
}
package com.sap.sailing.server.gateway.serialization.racelog.impl;
import com.sap.sailing.domain.abstractlog.race.RaceLogEndOfTrackingEvent;
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 RaceLogEndOfTrackingEventSerializer extends BaseRaceLogEventSerializer implements
JsonSerializer<RaceLogEvent> {
public static final String VALUE_CLASS = RaceLogEndOfTrackingEvent.class.getSimpleName();
public RaceLogEndOfTrackingEventSerializer(JsonSerializer<Competitor> competitorSerializer) {
super(competitorSerializer);
}
@Override
protected String getClassFieldValue() {
return VALUE_CLASS;
}
}
@@ -1,300 +1,300 @@
package com.sap.sailing.server.gateway.serialization.racelog.impl;
import org.json.simple.JSONObject;
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.RaceLogEndOfTrackingEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogEventVisitor;
import com.sap.sailing.domain.abstractlog.race.RaceLogFinishPositioningConfirmedEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogFinishPositioningListChangedEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogFixedMarkPassingEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogFlagEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogGateLineOpeningTimeEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogPassChangeEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogPathfinderEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogProtestStartTimeEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogRaceStatusEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogRevokeEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogStartOfTrackingEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogStartProcedureChangedEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogStartTimeEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogSuppressedMarkPassingsEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogWindFixEvent;
import com.sap.sailing.domain.abstractlog.race.scoring.RaceLogAdditionalScoringInformationEvent;
import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogDenoteForTrackingEvent;
import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogRegisterCompetitorEvent;
import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogStartTrackingEvent;
import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogUseCompetitorsFromRaceLogEvent;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.racelogtracking.DeviceIdentifier;
import com.sap.sailing.domain.racelogtracking.SmartphoneUUIDIdentifier;
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.impl.DeviceIdentifierJsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.PositionJsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.WindJsonSerializer;
import com.sap.sailing.server.gateway.serialization.racelog.tracking.impl.SmartphoneUUIDJsonHandler;
public class RaceLogEventSerializer implements JsonSerializer<RaceLogEvent>, RaceLogEventVisitor {
public static JsonSerializer<RaceLogEvent> create(JsonSerializer<Competitor> competitorSerializer) {
return create(competitorSerializer, DeviceIdentifierJsonSerializer.create(
new SmartphoneUUIDJsonHandler(), SmartphoneUUIDIdentifier.TYPE));
}
public static JsonSerializer<RaceLogEvent> create(JsonSerializer<Competitor> competitorSerializer,
JsonSerializer<DeviceIdentifier> deviceSerializer) {
return new RaceLogEventSerializer(
new RaceLogFlagEventSerializer(competitorSerializer),
new RaceLogStartTimeEventSerializer(competitorSerializer),
new RaceLogRaceStatusEventSerializer(competitorSerializer),
new RaceLogCourseAreaChangedEventSerializer(competitorSerializer),
new RaceLogPassChangeEventSerializer(competitorSerializer),
new RaceLogCourseDesignChangedEventSerializer(competitorSerializer,
new CourseBaseJsonSerializer(
new WaypointJsonSerializer(
new ControlPointJsonSerializer(
new MarkJsonSerializer(),
new GateJsonSerializer(new MarkJsonSerializer()))))),
new RaceLogFinishPositioningListChangedEventSerializer(competitorSerializer),
new RaceLogFinishPositioningConfirmedEventSerializer(competitorSerializer),
new RaceLogPathfinderEventSerializer(competitorSerializer),
new RaceLogGateLineOpeningTimeEventSerializer(competitorSerializer),
new RaceLogStartProcedureChangedEventSerializer(competitorSerializer),
new RaceLogProtestStartTimeEventSerializer(competitorSerializer),
new RaceLogWindFixEventSerializer(competitorSerializer,
new WindJsonSerializer(
new PositionJsonSerializer())),
new RaceLogDenoteForTrackingEventSerializer(competitorSerializer),
new RaceLogStartTrackingEventSerializer(competitorSerializer),
new RaceLogRevokeEventSerializer(competitorSerializer),
new RaceLogRegisterCompetitorEventSerializer(competitorSerializer),
new RaceLogAdditionalScoringInformationSerializer(competitorSerializer),
new RaceLogFixedMarkPassingEventSerializer(competitorSerializer),
new RaceLogSuppressedMarkPassingsEventSerializer(competitorSerializer),
new RaceLogDependentStartTimeEventSerializer(competitorSerializer),
new RaceLogStartOfTrackingEventSerializer(competitorSerializer),
new RaceLogUseCompetitorsFromRaceLogEventSerializer(competitorSerializer),
new RaceLogEndOfTrackingEventSerializer(competitorSerializer));
}
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 final JsonSerializer<RaceLogEvent> windFixEventSerializer;
private final JsonSerializer<RaceLogEvent> denoteForTrackingSerializer;
private final JsonSerializer<RaceLogEvent> startTrackingSerializer;
private final JsonSerializer<RaceLogEvent> revokeSerializer;
private final JsonSerializer<RaceLogEvent> registerCompetitorSerializer;
private final JsonSerializer<RaceLogEvent> additionalScoringInformationSerializer;
private final JsonSerializer<RaceLogEvent> fixedMarkPassingEventSerializer;
private final JsonSerializer<RaceLogEvent> suppressedMarkPassingsEventSerializer;
private final JsonSerializer<RaceLogEvent> dependentStartTimeEventSerializer;
private final JsonSerializer<RaceLogEvent> startOfTrackingEventSerializer;
private final JsonSerializer<RaceLogEvent> endOfTrackingEventSerializer;
private final JsonSerializer<RaceLogEvent> useCompetitorsFromRaceLogEventSerializer;
private JsonSerializer<RaceLogEvent> chosenSerializer;
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,
JsonSerializer<RaceLogEvent> windFixEventSerializer,
JsonSerializer<RaceLogEvent> denoteForTrackingSerializer,
JsonSerializer<RaceLogEvent> createRaceSerializer,
JsonSerializer<RaceLogEvent> revokeSerializer,
JsonSerializer<RaceLogEvent> registerCompetitorSerializer,
JsonSerializer<RaceLogEvent> additionalScoringInformationSerializer,
JsonSerializer<RaceLogEvent> fixedMarkPassingEventSerializer,
JsonSerializer<RaceLogEvent> suppressedMarkPassingsSerializer,
JsonSerializer<RaceLogEvent> dependentStartTimeEventSerializer,
JsonSerializer<RaceLogEvent> startOfTrackingEventSerializer,
JsonSerializer<RaceLogEvent> endOfTrackingEventSerializer,
JsonSerializer<RaceLogEvent> useCompetitorsFromRaceLogEventSerializer) {
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.windFixEventSerializer = windFixEventSerializer;
this.denoteForTrackingSerializer = denoteForTrackingSerializer;
this.startTrackingSerializer = createRaceSerializer;
this.revokeSerializer = revokeSerializer;
this.registerCompetitorSerializer = registerCompetitorSerializer;
this.additionalScoringInformationSerializer = additionalScoringInformationSerializer;
this.fixedMarkPassingEventSerializer = fixedMarkPassingEventSerializer;
this.suppressedMarkPassingsEventSerializer = suppressedMarkPassingsSerializer;
this.dependentStartTimeEventSerializer = dependentStartTimeEventSerializer;
this.startOfTrackingEventSerializer = startOfTrackingEventSerializer;
this.endOfTrackingEventSerializer = endOfTrackingEventSerializer;
this.useCompetitorsFromRaceLogEventSerializer = useCompetitorsFromRaceLogEventSerializer;
this.chosenSerializer = null;
}
protected 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 JSONObject serialize(RaceLogEvent object) {
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;
}
@Override
public void visit(RaceLogWindFixEvent event) {
chosenSerializer = windFixEventSerializer;
}
@Override
public void visit(RaceLogDenoteForTrackingEvent event) {
chosenSerializer = denoteForTrackingSerializer;
}
@Override
public void visit(RaceLogStartTrackingEvent event) {
chosenSerializer = startTrackingSerializer;
}
@Override
public void visit(RaceLogRevokeEvent event) {
chosenSerializer = revokeSerializer;
}
@Override
public void visit(RaceLogRegisterCompetitorEvent event) {
chosenSerializer = registerCompetitorSerializer;
}
@Override
public void visit(RaceLogAdditionalScoringInformationEvent additionalScoringInformation) {
chosenSerializer = additionalScoringInformationSerializer;
}
@Override
public void visit(RaceLogFixedMarkPassingEvent event) {
chosenSerializer = fixedMarkPassingEventSerializer;
}
@Override
public void visit(RaceLogSuppressedMarkPassingsEvent event) {
chosenSerializer = suppressedMarkPassingsEventSerializer;
}
@Override
public void visit(RaceLogDependentStartTimeEvent event) {
chosenSerializer = dependentStartTimeEventSerializer;
}
@Override
public void visit(RaceLogStartOfTrackingEvent event) {
chosenSerializer = startOfTrackingEventSerializer;
}
@Override
public void visit(RaceLogEndOfTrackingEvent event) {
chosenSerializer = endOfTrackingEventSerializer;
}
@Override
public void visit(RaceLogUseCompetitorsFromRaceLogEvent event) {
chosenSerializer = useCompetitorsFromRaceLogEventSerializer;
}
}
package com.sap.sailing.server.gateway.serialization.racelog.impl;
import org.json.simple.JSONObject;
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.RaceLogEndOfTrackingEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogEventVisitor;
import com.sap.sailing.domain.abstractlog.race.RaceLogFinishPositioningConfirmedEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogFinishPositioningListChangedEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogFixedMarkPassingEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogFlagEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogGateLineOpeningTimeEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogPassChangeEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogPathfinderEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogProtestStartTimeEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogRaceStatusEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogRevokeEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogStartOfTrackingEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogStartProcedureChangedEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogStartTimeEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogSuppressedMarkPassingsEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogWindFixEvent;
import com.sap.sailing.domain.abstractlog.race.scoring.RaceLogAdditionalScoringInformationEvent;
import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogDenoteForTrackingEvent;
import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogRegisterCompetitorEvent;
import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogStartTrackingEvent;
import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogUseCompetitorsFromRaceLogEvent;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.racelogtracking.DeviceIdentifier;
import com.sap.sailing.domain.racelogtracking.SmartphoneUUIDIdentifier;
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.impl.DeviceIdentifierJsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.PositionJsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.WindJsonSerializer;
import com.sap.sailing.server.gateway.serialization.racelog.tracking.impl.SmartphoneUUIDJsonHandler;
public class RaceLogEventSerializer implements JsonSerializer<RaceLogEvent>, RaceLogEventVisitor {
public static JsonSerializer<RaceLogEvent> create(JsonSerializer<Competitor> competitorSerializer) {
return create(competitorSerializer, DeviceIdentifierJsonSerializer.create(
new SmartphoneUUIDJsonHandler(), SmartphoneUUIDIdentifier.TYPE));
}
public static JsonSerializer<RaceLogEvent> create(JsonSerializer<Competitor> competitorSerializer,
JsonSerializer<DeviceIdentifier> deviceSerializer) {
return new RaceLogEventSerializer(
new RaceLogFlagEventSerializer(competitorSerializer),
new RaceLogStartTimeEventSerializer(competitorSerializer),
new RaceLogRaceStatusEventSerializer(competitorSerializer),
new RaceLogCourseAreaChangedEventSerializer(competitorSerializer),
new RaceLogPassChangeEventSerializer(competitorSerializer),
new RaceLogCourseDesignChangedEventSerializer(competitorSerializer,
new CourseBaseJsonSerializer(
new WaypointJsonSerializer(
new ControlPointJsonSerializer(
new MarkJsonSerializer(),
new GateJsonSerializer(new MarkJsonSerializer()))))),
new RaceLogFinishPositioningListChangedEventSerializer(competitorSerializer),
new RaceLogFinishPositioningConfirmedEventSerializer(competitorSerializer),
new RaceLogPathfinderEventSerializer(competitorSerializer),
new RaceLogGateLineOpeningTimeEventSerializer(competitorSerializer),
new RaceLogStartProcedureChangedEventSerializer(competitorSerializer),
new RaceLogProtestStartTimeEventSerializer(competitorSerializer),
new RaceLogWindFixEventSerializer(competitorSerializer,
new WindJsonSerializer(
new PositionJsonSerializer())),
new RaceLogDenoteForTrackingEventSerializer(competitorSerializer),
new RaceLogStartTrackingEventSerializer(competitorSerializer),
new RaceLogRevokeEventSerializer(competitorSerializer),
new RaceLogRegisterCompetitorEventSerializer(competitorSerializer),
new RaceLogAdditionalScoringInformationSerializer(competitorSerializer),
new RaceLogFixedMarkPassingEventSerializer(competitorSerializer),
new RaceLogSuppressedMarkPassingsEventSerializer(competitorSerializer),
new RaceLogDependentStartTimeEventSerializer(competitorSerializer),
new RaceLogStartOfTrackingEventSerializer(competitorSerializer),
new RaceLogUseCompetitorsFromRaceLogEventSerializer(competitorSerializer),
new RaceLogEndOfTrackingEventSerializer(competitorSerializer));
}
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 final JsonSerializer<RaceLogEvent> windFixEventSerializer;
private final JsonSerializer<RaceLogEvent> denoteForTrackingSerializer;
private final JsonSerializer<RaceLogEvent> startTrackingSerializer;
private final JsonSerializer<RaceLogEvent> revokeSerializer;
private final JsonSerializer<RaceLogEvent> registerCompetitorSerializer;
private final JsonSerializer<RaceLogEvent> additionalScoringInformationSerializer;
private final JsonSerializer<RaceLogEvent> fixedMarkPassingEventSerializer;
private final JsonSerializer<RaceLogEvent> suppressedMarkPassingsEventSerializer;
private final JsonSerializer<RaceLogEvent> dependentStartTimeEventSerializer;
private final JsonSerializer<RaceLogEvent> startOfTrackingEventSerializer;
private final JsonSerializer<RaceLogEvent> endOfTrackingEventSerializer;
private final JsonSerializer<RaceLogEvent> useCompetitorsFromRaceLogEventSerializer;
private JsonSerializer<RaceLogEvent> chosenSerializer;
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,
JsonSerializer<RaceLogEvent> windFixEventSerializer,
JsonSerializer<RaceLogEvent> denoteForTrackingSerializer,
JsonSerializer<RaceLogEvent> createRaceSerializer,
JsonSerializer<RaceLogEvent> revokeSerializer,
JsonSerializer<RaceLogEvent> registerCompetitorSerializer,
JsonSerializer<RaceLogEvent> additionalScoringInformationSerializer,
JsonSerializer<RaceLogEvent> fixedMarkPassingEventSerializer,
JsonSerializer<RaceLogEvent> suppressedMarkPassingsSerializer,
JsonSerializer<RaceLogEvent> dependentStartTimeEventSerializer,
JsonSerializer<RaceLogEvent> startOfTrackingEventSerializer,
JsonSerializer<RaceLogEvent> endOfTrackingEventSerializer,
JsonSerializer<RaceLogEvent> useCompetitorsFromRaceLogEventSerializer) {
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.windFixEventSerializer = windFixEventSerializer;
this.denoteForTrackingSerializer = denoteForTrackingSerializer;
this.startTrackingSerializer = createRaceSerializer;
this.revokeSerializer = revokeSerializer;
this.registerCompetitorSerializer = registerCompetitorSerializer;
this.additionalScoringInformationSerializer = additionalScoringInformationSerializer;
this.fixedMarkPassingEventSerializer = fixedMarkPassingEventSerializer;
this.suppressedMarkPassingsEventSerializer = suppressedMarkPassingsSerializer;
this.dependentStartTimeEventSerializer = dependentStartTimeEventSerializer;
this.startOfTrackingEventSerializer = startOfTrackingEventSerializer;
this.endOfTrackingEventSerializer = endOfTrackingEventSerializer;
this.useCompetitorsFromRaceLogEventSerializer = useCompetitorsFromRaceLogEventSerializer;
this.chosenSerializer = null;
}
protected 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 JSONObject serialize(RaceLogEvent object) {
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;
}
@Override
public void visit(RaceLogWindFixEvent event) {
chosenSerializer = windFixEventSerializer;
}
@Override
public void visit(RaceLogDenoteForTrackingEvent event) {
chosenSerializer = denoteForTrackingSerializer;
}
@Override
public void visit(RaceLogStartTrackingEvent event) {
chosenSerializer = startTrackingSerializer;
}
@Override
public void visit(RaceLogRevokeEvent event) {
chosenSerializer = revokeSerializer;
}
@Override
public void visit(RaceLogRegisterCompetitorEvent event) {
chosenSerializer = registerCompetitorSerializer;
}
@Override
public void visit(RaceLogAdditionalScoringInformationEvent additionalScoringInformation) {
chosenSerializer = additionalScoringInformationSerializer;
}
@Override
public void visit(RaceLogFixedMarkPassingEvent event) {
chosenSerializer = fixedMarkPassingEventSerializer;
}
@Override
public void visit(RaceLogSuppressedMarkPassingsEvent event) {
chosenSerializer = suppressedMarkPassingsEventSerializer;
}
@Override
public void visit(RaceLogDependentStartTimeEvent event) {
chosenSerializer = dependentStartTimeEventSerializer;
}
@Override
public void visit(RaceLogStartOfTrackingEvent event) {
chosenSerializer = startOfTrackingEventSerializer;
}
@Override
public void visit(RaceLogEndOfTrackingEvent event) {
chosenSerializer = endOfTrackingEventSerializer;
}
@Override
public void visit(RaceLogUseCompetitorsFromRaceLogEvent event) {
chosenSerializer = useCompetitorsFromRaceLogEventSerializer;
}
}
@@ -1,19 +1,19 @@
package com.sap.sailing.server.gateway.serialization.racelog.impl;
import com.sap.sailing.domain.abstractlog.race.RaceLogFinishPositioningConfirmedEvent;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class RaceLogFinishPositioningConfirmedEventSerializer extends RaceLogFinishPositioningEventSerializer {
public static final String VALUE_CLASS = RaceLogFinishPositioningConfirmedEvent.class.getSimpleName();
public RaceLogFinishPositioningConfirmedEventSerializer(JsonSerializer<Competitor> competitorSerializer) {
super(competitorSerializer);
}
@Override
protected String getClassFieldValue() {
return VALUE_CLASS;
}
}
package com.sap.sailing.server.gateway.serialization.racelog.impl;
import com.sap.sailing.domain.abstractlog.race.RaceLogFinishPositioningConfirmedEvent;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class RaceLogFinishPositioningConfirmedEventSerializer extends RaceLogFinishPositioningEventSerializer {
public static final String VALUE_CLASS = RaceLogFinishPositioningConfirmedEvent.class.getSimpleName();
public RaceLogFinishPositioningConfirmedEventSerializer(JsonSerializer<Competitor> competitorSerializer) {
super(competitorSerializer);
}
@Override
protected String getClassFieldValue() {
return VALUE_CLASS;
}
}
@@ -1,56 +1,56 @@
package com.sap.sailing.server.gateway.serialization.racelog.impl;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.abstractlog.race.CompetitorResult;
import com.sap.sailing.domain.abstractlog.race.CompetitorResults;
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogFinishPositioningEvent;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public abstract class RaceLogFinishPositioningEventSerializer extends BaseRaceLogEventSerializer {
public static final String FIELD_POSITIONED_COMPETITORS = "positionedCompetitors";
public static final String FIELD_COMPETITOR_ID = "competitorId";
public static final String FIELD_COMPETITOR_NAME = "competitorName";
public static final String FIELD_SCORE_CORRECTIONS_MAX_POINTS_REASON = "maxPointsReason";
public static final String FIELD_SCORE = "score";
public static final String FIELD_COMMENT = "comment";
public static final String FIELD_RANK = "rank";
public static final String FIELD_FINISHING_TIME_POINT_AS_MILLIS = "finishingTimePointAsMillis";
public RaceLogFinishPositioningEventSerializer(JsonSerializer<Competitor> competitorSerializer) {
super(competitorSerializer);
}
@Override
protected abstract String getClassFieldValue();
@Override
public JSONObject serialize(RaceLogEvent object) {
RaceLogFinishPositioningEvent finishPositioningConfirmedEvent = (RaceLogFinishPositioningEvent) object;
JSONObject result = super.serialize(finishPositioningConfirmedEvent);
result.put(FIELD_POSITIONED_COMPETITORS, serializePositionedCompetitors(finishPositioningConfirmedEvent.getPositionedCompetitorsIDsNamesMaxPointsReasons()));
return result;
}
private JSONArray serializePositionedCompetitors(CompetitorResults positionedCompetitors) {
JSONArray jsonPositionedCompetitors = new JSONArray();
if (positionedCompetitors != null) { // for backwards compatibility reasons
for (CompetitorResult positionedCompetitor : positionedCompetitors) {
JSONObject jsonPositionedCompetitor = new JSONObject();
jsonPositionedCompetitor.put(FIELD_COMPETITOR_ID, positionedCompetitor.getCompetitorId().toString());
jsonPositionedCompetitor.put(FIELD_COMPETITOR_NAME, positionedCompetitor.getCompetitorDisplayName());
jsonPositionedCompetitor.put(FIELD_SCORE_CORRECTIONS_MAX_POINTS_REASON, positionedCompetitor.getMaxPointsReason().name());
jsonPositionedCompetitor.put(FIELD_SCORE, positionedCompetitor.getScore());
jsonPositionedCompetitor.put(FIELD_COMMENT, positionedCompetitor.getComment());
jsonPositionedCompetitor.put(FIELD_RANK, positionedCompetitor.getOneBasedRank()); // writes it as an int, but deserializer will fetch it as a Long
jsonPositionedCompetitor.put(FIELD_FINISHING_TIME_POINT_AS_MILLIS, positionedCompetitor.getFinishingTime() == null ? null : positionedCompetitor.getFinishingTime().asMillis());
jsonPositionedCompetitors.add(jsonPositionedCompetitor);
}
}
return jsonPositionedCompetitors;
}
}
package com.sap.sailing.server.gateway.serialization.racelog.impl;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.abstractlog.race.CompetitorResult;
import com.sap.sailing.domain.abstractlog.race.CompetitorResults;
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogFinishPositioningEvent;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public abstract class RaceLogFinishPositioningEventSerializer extends BaseRaceLogEventSerializer {
public static final String FIELD_POSITIONED_COMPETITORS = "positionedCompetitors";
public static final String FIELD_COMPETITOR_ID = "competitorId";
public static final String FIELD_COMPETITOR_NAME = "competitorName";
public static final String FIELD_SCORE_CORRECTIONS_MAX_POINTS_REASON = "maxPointsReason";
public static final String FIELD_SCORE = "score";
public static final String FIELD_COMMENT = "comment";
public static final String FIELD_RANK = "rank";
public static final String FIELD_FINISHING_TIME_POINT_AS_MILLIS = "finishingTimePointAsMillis";
public RaceLogFinishPositioningEventSerializer(JsonSerializer<Competitor> competitorSerializer) {
super(competitorSerializer);
}
@Override
protected abstract String getClassFieldValue();
@Override
public JSONObject serialize(RaceLogEvent object) {
RaceLogFinishPositioningEvent finishPositioningConfirmedEvent = (RaceLogFinishPositioningEvent) object;
JSONObject result = super.serialize(finishPositioningConfirmedEvent);
result.put(FIELD_POSITIONED_COMPETITORS, serializePositionedCompetitors(finishPositioningConfirmedEvent.getPositionedCompetitorsIDsNamesMaxPointsReasons()));
return result;
}
private JSONArray serializePositionedCompetitors(CompetitorResults positionedCompetitors) {
JSONArray jsonPositionedCompetitors = new JSONArray();
if (positionedCompetitors != null) { // for backwards compatibility reasons
for (CompetitorResult positionedCompetitor : positionedCompetitors) {
JSONObject jsonPositionedCompetitor = new JSONObject();
jsonPositionedCompetitor.put(FIELD_COMPETITOR_ID, positionedCompetitor.getCompetitorId().toString());
jsonPositionedCompetitor.put(FIELD_COMPETITOR_NAME, positionedCompetitor.getCompetitorDisplayName());
jsonPositionedCompetitor.put(FIELD_SCORE_CORRECTIONS_MAX_POINTS_REASON, positionedCompetitor.getMaxPointsReason().name());
jsonPositionedCompetitor.put(FIELD_SCORE, positionedCompetitor.getScore());
jsonPositionedCompetitor.put(FIELD_COMMENT, positionedCompetitor.getComment());
jsonPositionedCompetitor.put(FIELD_RANK, positionedCompetitor.getOneBasedRank()); // writes it as an int, but deserializer will fetch it as a Long
jsonPositionedCompetitor.put(FIELD_FINISHING_TIME_POINT_AS_MILLIS, positionedCompetitor.getFinishingTime() == null ? null : positionedCompetitor.getFinishingTime().asMillis());
jsonPositionedCompetitors.add(jsonPositionedCompetitor);
}
}
return jsonPositionedCompetitors;
}
}
@@ -1,19 +1,19 @@
package com.sap.sailing.server.gateway.serialization.racelog.impl;
import com.sap.sailing.domain.abstractlog.race.RaceLogFinishPositioningListChangedEvent;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class RaceLogFinishPositioningListChangedEventSerializer extends RaceLogFinishPositioningEventSerializer {
public static final String VALUE_CLASS = RaceLogFinishPositioningListChangedEvent.class.getSimpleName();
public RaceLogFinishPositioningListChangedEventSerializer(JsonSerializer<Competitor> competitorSerializer) {
super(competitorSerializer);
}
@Override
protected String getClassFieldValue() {
return VALUE_CLASS;
}
}
package com.sap.sailing.server.gateway.serialization.racelog.impl;
import com.sap.sailing.domain.abstractlog.race.RaceLogFinishPositioningListChangedEvent;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class RaceLogFinishPositioningListChangedEventSerializer extends RaceLogFinishPositioningEventSerializer {
public static final String VALUE_CLASS = RaceLogFinishPositioningListChangedEvent.class.getSimpleName();
public RaceLogFinishPositioningListChangedEventSerializer(JsonSerializer<Competitor> competitorSerializer) {
super(competitorSerializer);
}
@Override
protected String getClassFieldValue() {
return VALUE_CLASS;
}
}
@@ -1,39 +1,39 @@
package com.sap.sailing.server.gateway.serialization.racelog.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogFlagEvent;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class RaceLogFlagEventSerializer extends BaseRaceLogEventSerializer {
public static final String VALUE_CLASS = RaceLogFlagEvent.class.getSimpleName();
public static final String FIELD_UPPER_FLAG = "upperFlag";
public static final String FIELD_LOWER_FLAG = "lowerFlag";
public static final String FIELD_DISPLAYED = "displayed";
public RaceLogFlagEventSerializer(
JsonSerializer<Competitor> competitorSerializer) {
super(competitorSerializer);
}
@Override
protected String getClassFieldValue() {
return VALUE_CLASS;
}
@Override
public JSONObject serialize(RaceLogEvent object) {
RaceLogFlagEvent flagEvent = (RaceLogFlagEvent) object;
JSONObject result = super.serialize(flagEvent);
result.put(FIELD_UPPER_FLAG, flagEvent.getUpperFlag().name());
result.put(FIELD_LOWER_FLAG, flagEvent.getLowerFlag().name());
result.put(FIELD_DISPLAYED, flagEvent.isDisplayed());
return result;
}
}
package com.sap.sailing.server.gateway.serialization.racelog.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogFlagEvent;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class RaceLogFlagEventSerializer extends BaseRaceLogEventSerializer {
public static final String VALUE_CLASS = RaceLogFlagEvent.class.getSimpleName();
public static final String FIELD_UPPER_FLAG = "upperFlag";
public static final String FIELD_LOWER_FLAG = "lowerFlag";
public static final String FIELD_DISPLAYED = "displayed";
public RaceLogFlagEventSerializer(
JsonSerializer<Competitor> competitorSerializer) {
super(competitorSerializer);
}
@Override
protected String getClassFieldValue() {
return VALUE_CLASS;
}
@Override
public JSONObject serialize(RaceLogEvent object) {
RaceLogFlagEvent flagEvent = (RaceLogFlagEvent) object;
JSONObject result = super.serialize(flagEvent);
result.put(FIELD_UPPER_FLAG, flagEvent.getUpperFlag().name());
result.put(FIELD_LOWER_FLAG, flagEvent.getLowerFlag().name());
result.put(FIELD_DISPLAYED, flagEvent.isDisplayed());
return result;
}
}
@@ -1,30 +1,30 @@
package com.sap.sailing.server.gateway.serialization.racelog.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogPassChangeEvent;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class RaceLogPassChangeEventSerializer extends BaseRaceLogEventSerializer {
public static final String VALUE_CLASS = RaceLogPassChangeEvent.class.getSimpleName();
public RaceLogPassChangeEventSerializer(JsonSerializer<Competitor> competitorSerializer) {
super(competitorSerializer);
}
@Override
protected String getClassFieldValue() {
return VALUE_CLASS;
}
@Override
public JSONObject serialize(RaceLogEvent object) {
RaceLogPassChangeEvent event = (RaceLogPassChangeEvent) object;
return super.serialize(event);
}
}
package com.sap.sailing.server.gateway.serialization.racelog.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogPassChangeEvent;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class RaceLogPassChangeEventSerializer extends BaseRaceLogEventSerializer {
public static final String VALUE_CLASS = RaceLogPassChangeEvent.class.getSimpleName();
public RaceLogPassChangeEventSerializer(JsonSerializer<Competitor> competitorSerializer) {
super(competitorSerializer);
}
@Override
protected String getClassFieldValue() {
return VALUE_CLASS;
}
@Override
public JSONObject serialize(RaceLogEvent object) {
RaceLogPassChangeEvent event = (RaceLogPassChangeEvent) object;
return super.serialize(event);
}
}
@@ -1,32 +1,32 @@
package com.sap.sailing.server.gateway.serialization.racelog.impl;
import org.json.simple.JSONObject;
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.server.gateway.serialization.JsonSerializer;
public class RaceLogRaceStatusEventSerializer extends BaseRaceLogEventSerializer {
public static final String VALUE_CLASS = RaceLogRaceStatusEvent.class.getSimpleName();
public static final String FIELD_NEXT_STATUS = "nextStatus";
public RaceLogRaceStatusEventSerializer(JsonSerializer<Competitor> competitorSerializer) {
super(competitorSerializer);
}
@Override
protected String getClassFieldValue() {
return VALUE_CLASS;
}
@Override
public JSONObject serialize(RaceLogEvent object) {
RaceLogRaceStatusEvent event = (RaceLogRaceStatusEvent) object;
JSONObject result = super.serialize(event);
result.put(FIELD_NEXT_STATUS, event.getNextStatus().toString());
return result;
}
}
package com.sap.sailing.server.gateway.serialization.racelog.impl;
import org.json.simple.JSONObject;
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.server.gateway.serialization.JsonSerializer;
public class RaceLogRaceStatusEventSerializer extends BaseRaceLogEventSerializer {
public static final String VALUE_CLASS = RaceLogRaceStatusEvent.class.getSimpleName();
public static final String FIELD_NEXT_STATUS = "nextStatus";
public RaceLogRaceStatusEventSerializer(JsonSerializer<Competitor> competitorSerializer) {
super(competitorSerializer);
}
@Override
protected String getClassFieldValue() {
return VALUE_CLASS;
}
@Override
public JSONObject serialize(RaceLogEvent object) {
RaceLogRaceStatusEvent event = (RaceLogRaceStatusEvent) object;
JSONObject result = super.serialize(event);
result.put(FIELD_NEXT_STATUS, event.getNextStatus().toString());
return result;
}
}
@@ -1,40 +1,40 @@
package com.sap.sailing.server.gateway.serialization.racelog.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.abstractlog.RevokeEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogRevokeEvent;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class RaceLogRevokeEventSerializer extends BaseRaceLogEventSerializer {
public static final String VALUE_CLASS = RevokeEvent.class.getSimpleName();
public static final String FIELD_REVOKED_EVENT_ID = "revokedEventId";
public static final String FIELD_REVOKED_EVENT_TYPE = "revokedEventType";
public static final String FIELD_REVOKED_EVENT_SHORT_INFO = "revokedEventShortInfo";
public static final String FIELD_REASON = "reason";
public RaceLogRevokeEventSerializer(
JsonSerializer<Competitor> competitorSerializer) {
super(competitorSerializer);
}
@Override
protected String getClassFieldValue() {
return VALUE_CLASS;
}
@Override
public JSONObject serialize(RaceLogEvent object) {
RaceLogRevokeEvent event = (RaceLogRevokeEvent) object;
JSONObject result = super.serialize(event);
result.put(FIELD_REVOKED_EVENT_ID, event.getRevokedEventId().toString());
result.put(FIELD_REVOKED_EVENT_TYPE, event.getRevokedEventType());
result.put(FIELD_REVOKED_EVENT_SHORT_INFO, event.getRevokedEventShortInfo());
result.put(FIELD_REASON, event.getReason());
return result;
}
}
package com.sap.sailing.server.gateway.serialization.racelog.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.abstractlog.RevokeEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogRevokeEvent;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class RaceLogRevokeEventSerializer extends BaseRaceLogEventSerializer {
public static final String VALUE_CLASS = RevokeEvent.class.getSimpleName();
public static final String FIELD_REVOKED_EVENT_ID = "revokedEventId";
public static final String FIELD_REVOKED_EVENT_TYPE = "revokedEventType";
public static final String FIELD_REVOKED_EVENT_SHORT_INFO = "revokedEventShortInfo";
public static final String FIELD_REASON = "reason";
public RaceLogRevokeEventSerializer(
JsonSerializer<Competitor> competitorSerializer) {
super(competitorSerializer);
}
@Override
protected String getClassFieldValue() {
return VALUE_CLASS;
}
@Override
public JSONObject serialize(RaceLogEvent object) {
RaceLogRevokeEvent event = (RaceLogRevokeEvent) object;
JSONObject result = super.serialize(event);
result.put(FIELD_REVOKED_EVENT_ID, event.getRevokedEventId().toString());
result.put(FIELD_REVOKED_EVENT_TYPE, event.getRevokedEventType());
result.put(FIELD_REVOKED_EVENT_SHORT_INFO, event.getRevokedEventShortInfo());
result.put(FIELD_REASON, event.getReason());
return result;
}
}
@@ -1,42 +1,42 @@
package com.sap.sailing.server.gateway.serialization.racelog.impl;
import java.util.UUID;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.abstractlog.race.RaceLog;
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class RaceLogSerializer implements JsonSerializer<RaceLog> {
public static final String FIELD_EVENTS = "events";
public static final String FIELD_RACELOG_IDENTIFIER = "racelog_id";
private final JsonSerializer<RaceLogEvent> itemSerializer;
private final UUID clientUuid;
public RaceLogSerializer(JsonSerializer<RaceLogEvent> raceLogEventSerializer, UUID clientUuid) {
this.itemSerializer = raceLogEventSerializer;
this.clientUuid = clientUuid;
}
@Override
public JSONObject serialize(RaceLog object) {
JSONObject result = new JSONObject();
object.lockForRead();
try {
JSONArray events = new JSONArray();
for (RaceLogEvent event : object.getRawFixes(clientUuid)) {
events.add(itemSerializer.serialize(event));
}
result.put(FIELD_EVENTS, events);
result.put(FIELD_RACELOG_IDENTIFIER, object.getId().toString());
} finally {
object.unlockAfterRead();
}
return result;
}
}
package com.sap.sailing.server.gateway.serialization.racelog.impl;
import java.util.UUID;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.abstractlog.race.RaceLog;
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class RaceLogSerializer implements JsonSerializer<RaceLog> {
public static final String FIELD_EVENTS = "events";
public static final String FIELD_RACELOG_IDENTIFIER = "racelog_id";
private final JsonSerializer<RaceLogEvent> itemSerializer;
private final UUID clientUuid;
public RaceLogSerializer(JsonSerializer<RaceLogEvent> raceLogEventSerializer, UUID clientUuid) {
this.itemSerializer = raceLogEventSerializer;
this.clientUuid = clientUuid;
}
@Override
public JSONObject serialize(RaceLog object) {
JSONObject result = new JSONObject();
object.lockForRead();
try {
JSONArray events = new JSONArray();
for (RaceLogEvent event : object.getRawFixes(clientUuid)) {
events.add(itemSerializer.serialize(event));
}
result.put(FIELD_EVENTS, events);
result.put(FIELD_RACELOG_IDENTIFIER, object.getId().toString());
} finally {
object.unlockAfterRead();
}
return result;
}
}
@@ -1,21 +1,21 @@
package com.sap.sailing.server.gateway.serialization.racelog.impl;
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogStartOfTrackingEvent;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class RaceLogStartOfTrackingEventSerializer extends BaseRaceLogEventSerializer implements
JsonSerializer<RaceLogEvent> {
public static final String VALUE_CLASS = RaceLogStartOfTrackingEvent.class.getSimpleName();
public RaceLogStartOfTrackingEventSerializer(JsonSerializer<Competitor> competitorSerializer) {
super(competitorSerializer);
}
@Override
protected String getClassFieldValue() {
return VALUE_CLASS;
}
}
package com.sap.sailing.server.gateway.serialization.racelog.impl;
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogStartOfTrackingEvent;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class RaceLogStartOfTrackingEventSerializer extends BaseRaceLogEventSerializer implements
JsonSerializer<RaceLogEvent> {
public static final String VALUE_CLASS = RaceLogStartOfTrackingEvent.class.getSimpleName();
public RaceLogStartOfTrackingEventSerializer(JsonSerializer<Competitor> competitorSerializer) {
super(competitorSerializer);
}
@Override
protected String getClassFieldValue() {
return VALUE_CLASS;
}
}
@@ -1,31 +1,31 @@
package com.sap.sailing.server.gateway.serialization.racelog.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogStartTimeEvent;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class RaceLogStartTimeEventSerializer extends RaceLogRaceStatusEventSerializer {
public static final String VALUE_CLASS = RaceLogStartTimeEvent.class.getSimpleName();
public static final String FIELD_START_TIME = "startTime";
public RaceLogStartTimeEventSerializer(JsonSerializer<Competitor> competitorSerializer) {
super(competitorSerializer);
}
@Override
protected String getClassFieldValue() {
return VALUE_CLASS;
}
@Override
public JSONObject serialize(RaceLogEvent object) {
RaceLogStartTimeEvent startTimeEvent = (RaceLogStartTimeEvent) object;
JSONObject result = super.serialize(startTimeEvent);
result.put(FIELD_START_TIME, startTimeEvent.getStartTime().asMillis());
return result;
}
}
package com.sap.sailing.server.gateway.serialization.racelog.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogStartTimeEvent;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class RaceLogStartTimeEventSerializer extends RaceLogRaceStatusEventSerializer {
public static final String VALUE_CLASS = RaceLogStartTimeEvent.class.getSimpleName();
public static final String FIELD_START_TIME = "startTime";
public RaceLogStartTimeEventSerializer(JsonSerializer<Competitor> competitorSerializer) {
super(competitorSerializer);
}
@Override
protected String getClassFieldValue() {
return VALUE_CLASS;
}
@Override
public JSONObject serialize(RaceLogEvent object) {
RaceLogStartTimeEvent startTimeEvent = (RaceLogStartTimeEvent) object;
JSONObject result = super.serialize(startTimeEvent);
result.put(FIELD_START_TIME, startTimeEvent.getStartTime().asMillis());
return result;
}
}
@@ -1,20 +1,20 @@
package com.sap.sailing.server.gateway.serialization.racelog.impl;
import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogStartTrackingEvent;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class RaceLogStartTrackingEventSerializer extends BaseRaceLogEventSerializer {
public static final String VALUE_CLASS = RaceLogStartTrackingEvent.class.getSimpleName();
public RaceLogStartTrackingEventSerializer(
JsonSerializer<Competitor> competitorSerializer) {
super(competitorSerializer);
}
@Override
protected String getClassFieldValue() {
return VALUE_CLASS;
}
}
package com.sap.sailing.server.gateway.serialization.racelog.impl;
import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogStartTrackingEvent;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class RaceLogStartTrackingEventSerializer extends BaseRaceLogEventSerializer {
public static final String VALUE_CLASS = RaceLogStartTrackingEvent.class.getSimpleName();
public RaceLogStartTrackingEventSerializer(
JsonSerializer<Competitor> competitorSerializer) {
super(competitorSerializer);
}
@Override
protected String getClassFieldValue() {
return VALUE_CLASS;
}
}
@@ -1,21 +1,21 @@
package com.sap.sailing.server.gateway.serialization.racelog.impl;
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogUseCompetitorsFromRaceLogEvent;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class RaceLogUseCompetitorsFromRaceLogEventSerializer extends BaseRaceLogEventSerializer implements
JsonSerializer<RaceLogEvent> {
public static final String VALUE_CLASS = RaceLogUseCompetitorsFromRaceLogEvent.class.getSimpleName();
public RaceLogUseCompetitorsFromRaceLogEventSerializer(JsonSerializer<Competitor> competitorSerializer) {
super(competitorSerializer);
}
@Override
protected String getClassFieldValue() {
return VALUE_CLASS;
}
}
package com.sap.sailing.server.gateway.serialization.racelog.impl;
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogUseCompetitorsFromRaceLogEvent;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class RaceLogUseCompetitorsFromRaceLogEventSerializer extends BaseRaceLogEventSerializer implements
JsonSerializer<RaceLogEvent> {
public static final String VALUE_CLASS = RaceLogUseCompetitorsFromRaceLogEvent.class.getSimpleName();
public RaceLogUseCompetitorsFromRaceLogEventSerializer(JsonSerializer<Competitor> competitorSerializer) {
super(competitorSerializer);
}
@Override
protected String getClassFieldValue() {
return VALUE_CLASS;
}
}
@@ -1,6 +1,6 @@
package com.sap.sailing.server.gateway.serialization.racelog.tracking;
import com.sap.sailing.domain.racelogtracking.DeviceIdentifierSerializationHandler;
public interface DeviceIdentifierJsonHandler extends DeviceIdentifierSerializationHandler<Object> {
}
package com.sap.sailing.server.gateway.serialization.racelog.tracking;
import com.sap.sailing.domain.racelogtracking.DeviceIdentifierSerializationHandler;
public interface DeviceIdentifierJsonHandler extends DeviceIdentifierSerializationHandler<Object> {
}