introduced smartphone UUID identifier as standard, imei identifier for testing only

This commit is contained in:
Fredrik Teschke committed 2014-03-28 11:42:42 +01:00
1 parent cf2fe722b9
commit 92aef41f0c
36 files changed
+202 -70

No files matched your search

@@ -22,9 +22,9 @@ import com.sap.sailing.domain.racelog.impl.RaceLogEventAuthorImpl;
import com.sap.sailing.domain.racelog.impl.RaceLogImpl;
import com.sap.sailing.domain.racelog.tracking.DeviceIdentifier;
import com.sap.sailing.domain.racelog.tracking.GPSFixStore;
import com.sap.sailing.domain.racelog.tracking.SmartphoneImeiIdentifier;
import com.sap.sailing.domain.racelog.tracking.test.mock.MockDeviceAndSessioinIdentifierWithGPSFixesDeserializer;
import com.sap.sailing.domain.racelog.tracking.test.mock.MockSmartphoneImeiServiceFinderFactory;
import com.sap.sailing.domain.racelog.tracking.test.mock.SmartphoneImeiIdentifier;
import com.sap.sailing.domain.tracking.GPSFixMoving;
import com.sap.sailing.domain.tracking.Track;
import com.sap.sailing.domain.tracking.impl.GPSFixMovingImpl;
@@ -45,8 +45,8 @@ import com.sap.sailing.domain.racelog.RaceLogEventAuthor;
import com.sap.sailing.domain.racelog.RaceLogEventFactory;
import com.sap.sailing.domain.racelog.tracking.DeviceIdentifier;
import com.sap.sailing.domain.racelog.tracking.GPSFixStore;
import com.sap.sailing.domain.racelog.tracking.SmartphoneImeiIdentifier;
import com.sap.sailing.domain.racelog.tracking.test.mock.MockSmartphoneImeiServiceFinderFactory;
import com.sap.sailing.domain.racelog.tracking.test.mock.SmartphoneImeiIdentifier;
import com.sap.sailing.domain.racelogtracking.RaceLogTrackingAdapter;
import com.sap.sailing.domain.racelogtracking.impl.RaceLogTrackingAdapterFactoryImpl;
import com.sap.sailing.domain.tracking.RacesHandle;
@@ -19,8 +19,8 @@ import com.sap.sailing.domain.common.impl.Util.Triple;
import com.sap.sailing.domain.common.racelog.tracking.NoCorrespondingServiceRegisteredException;
import com.sap.sailing.domain.common.racelog.tracking.TransformationException;
import com.sap.sailing.domain.racelog.tracking.DeviceIdentifier;
import com.sap.sailing.domain.racelog.tracking.SmartphoneImeiIdentifier;
import com.sap.sailing.domain.racelog.tracking.test.mock.MockDeviceAndSessioinIdentifierWithGPSFixesDeserializer;
import com.sap.sailing.domain.racelog.tracking.test.mock.SmartphoneImeiIdentifier;
import com.sap.sailing.domain.racelogtracking.servlet.RecordFixesPostServlet;
import com.sap.sailing.domain.racelogtracking.test.AbstractGPSFixStoreTest;
import com.sap.sailing.domain.tracking.GPSFix;
@@ -21,7 +21,7 @@ import com.sap.sailing.domain.common.racelog.tracking.NoCorrespondingServiceRegi
import com.sap.sailing.domain.common.racelog.tracking.TransformationException;
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
import com.sap.sailing.domain.racelog.tracking.DeviceIdentifier;
import com.sap.sailing.domain.racelog.tracking.SmartphoneImeiIdentifier;
import com.sap.sailing.domain.racelog.tracking.test.mock.SmartphoneImeiIdentifier;
import com.sap.sailing.domain.racelogtracking.test.AbstractGPSFixStoreTest;
import com.sap.sailing.domain.tracking.TrackedRegatta;
import com.sap.sailing.domain.tracking.impl.DynamicTrackedRaceImpl;
@@ -17,7 +17,8 @@ import com.sap.sailing.domain.common.impl.DegreePosition;
import com.sap.sailing.domain.common.impl.KnotSpeedWithBearingImpl;
import com.sap.sailing.domain.common.impl.MillisecondsTimePoint;
import com.sap.sailing.domain.common.impl.Util.Triple;
import com.sap.sailing.domain.racelog.tracking.SmartphoneImeiIdentifier;
import com.sap.sailing.domain.racelog.tracking.test.mock.SmartphoneImeiIdentifier;
import com.sap.sailing.domain.racelog.tracking.test.mock.SmartphoneImeiJsonHandler;
import com.sap.sailing.domain.racelogtracking.test.AbstractJsonOverHttpTest;
import com.sap.sailing.domain.tracking.GPSFix;
import com.sap.sailing.domain.tracking.GPSFixMoving;
@@ -26,7 +27,6 @@ import com.sap.sailing.domain.tracking.impl.GPSFixMovingImpl;
import com.sap.sailing.server.gateway.serialization.impl.DeviceAndSessionIdentifierWithGPSFixesSerializer;
import com.sap.sailing.server.gateway.serialization.impl.DeviceIdentifierJsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.GPSFixMovingNmeaDTOJsonSerializer;
import com.sap.sailing.server.gateway.serialization.racelog.tracking.impl.SmartphoneImeiJsonHandler;
public class PostFixes extends AbstractJsonOverHttpTest {
protected static final SmartphoneImeiIdentifier device = new SmartphoneImeiIdentifier("a");
@@ -1,9 +1,7 @@
package com.sap.sailing.domain.racelog.tracking.test.mock;
import com.sap.sailing.domain.racelog.tracking.SmartphoneImeiIdentifier;
import com.sap.sailing.server.gateway.deserialization.impl.DeviceAndSessionIdentifierWithGPSFixesDeserializer;
import com.sap.sailing.server.gateway.deserialization.impl.DeviceIdentifierJsonDeserializer;
import com.sap.sailing.server.gateway.serialization.racelog.tracking.impl.SmartphoneImeiJsonHandler;
public class MockDeviceAndSessioinIdentifierWithGPSFixesDeserializer extends
DeviceAndSessionIdentifierWithGPSFixesDeserializer {
@@ -2,7 +2,6 @@ package com.sap.sailing.domain.racelog.tracking.test.mock;
import com.sap.sailing.domain.common.racelog.tracking.TypeBasedServiceFinder;
import com.sap.sailing.domain.common.racelog.tracking.TypeBasedServiceFinderFactory;
import com.sap.sailing.domain.racelog.tracking.SmartphoneImeiIdentifier;
/**
* A simplified implementation of the {@link TypeBasedServiceFinder} interface that, when the device type
@@ -1,9 +1,7 @@
package com.sap.sailing.domain.racelog.tracking.test.mock;
import com.sap.sailing.domain.common.racelog.tracking.TypeBasedServiceFinder;
import com.sap.sailing.domain.racelog.tracking.SmartphoneImeiIdentifier;
import com.sap.sailing.server.gateway.serialization.racelog.tracking.DeviceIdentifierJsonHandler;
import com.sap.sailing.server.gateway.serialization.racelog.tracking.impl.SmartphoneImeiJsonHandler;
/**
* A simplified implementation of the {@link TypeBasedServiceFinder} interface that, when the device type
@@ -2,8 +2,6 @@ package com.sap.sailing.domain.racelog.tracking.test.mock;
import com.sap.sailing.domain.common.racelog.tracking.TypeBasedServiceFinder;
import com.sap.sailing.domain.persistence.racelog.tracking.DeviceIdentifierMongoHandler;
import com.sap.sailing.domain.racelog.tracking.SmartphoneImeiIdentifier;
import com.sap.sailing.domain.racelogtracking.impl.SmartphoneImeiMongoHandler;
/**
* A simplified implementation of the {@link TypeBasedServiceFinder} interface that, when the device type
@@ -7,7 +7,6 @@ import com.sap.sailing.domain.common.racelog.tracking.TypeBasedServiceFinder;
import com.sap.sailing.domain.common.racelog.tracking.TypeBasedServiceFinderFactory;
import com.sap.sailing.domain.persistence.racelog.tracking.DeviceIdentifierMongoHandler;
import com.sap.sailing.domain.persistence.racelog.tracking.GPSFixMongoHandler;
import com.sap.sailing.domain.racelog.tracking.SmartphoneImeiIdentifier;
import com.sap.sailing.server.gateway.serialization.racelog.tracking.DeviceIdentifierJsonHandler;
import com.sap.sailing.server.gateway.serialization.racelog.tracking.GPSFixJsonHandler;
@@ -1,4 +1,6 @@
package com.sap.sailing.domain.racelog.tracking;
package com.sap.sailing.domain.racelog.tracking.test.mock;
import com.sap.sailing.domain.racelog.tracking.DeviceIdentifier;
public class SmartphoneImeiIdentifier implements DeviceIdentifier {
@@ -1,8 +1,7 @@
package com.sap.sailing.server.gateway.serialization.racelog.tracking.impl;
package com.sap.sailing.domain.racelog.tracking.test.mock;
import com.sap.sailing.domain.common.racelog.tracking.TransformationException;
import com.sap.sailing.domain.racelog.tracking.DeviceIdentifier;
import com.sap.sailing.domain.racelog.tracking.impl.SmartphoneImeiSerializationHandler;
import com.sap.sailing.server.gateway.serialization.racelog.tracking.DeviceIdentifierJsonHandler;
public class SmartphoneImeiJsonHandler extends SmartphoneImeiSerializationHandler
@@ -1,9 +1,8 @@
package com.sap.sailing.domain.racelogtracking.impl;
package com.sap.sailing.domain.racelog.tracking.test.mock;
import com.sap.sailing.domain.common.racelog.tracking.TransformationException;
import com.sap.sailing.domain.persistence.racelog.tracking.DeviceIdentifierMongoHandler;
import com.sap.sailing.domain.racelog.tracking.DeviceIdentifier;
import com.sap.sailing.domain.racelog.tracking.impl.SmartphoneImeiSerializationHandler;
public class SmartphoneImeiMongoHandler extends SmartphoneImeiSerializationHandler
implements DeviceIdentifierMongoHandler {
@@ -1,9 +1,8 @@
package com.sap.sailing.domain.racelog.tracking.impl;
package com.sap.sailing.domain.racelog.tracking.test.mock;
import com.sap.sailing.domain.common.impl.Util.Pair;
import com.sap.sailing.domain.common.racelog.tracking.TransformationException;
import com.sap.sailing.domain.racelog.tracking.DeviceIdentifier;
import com.sap.sailing.domain.racelog.tracking.SmartphoneImeiIdentifier;
public class SmartphoneImeiSerializationHandler {
private SmartphoneImeiIdentifier castIdentifier(DeviceIdentifier identifier) throws TransformationException {
@@ -1,7 +1,6 @@
package com.sap.sailing.domain.racelogtracking.impl;
package com.sap.sailing.domain.racelog.tracking.test.mock;
import com.sap.sailing.domain.racelog.tracking.DeviceIdentifierStringSerializationHandler;
import com.sap.sailing.domain.racelog.tracking.impl.SmartphoneImeiSerializationHandler;
public class SmartphoneImeiStringSerializationHandler extends SmartphoneImeiSerializationHandler
implements DeviceIdentifierStringSerializationHandler {
@@ -14,7 +14,7 @@ import org.osgi.framework.ServiceRegistration;
import com.sap.sailing.domain.common.racelog.tracking.TypeBasedServiceFinder;
import com.sap.sailing.domain.persistence.racelog.tracking.DeviceIdentifierMongoHandler;
import com.sap.sailing.domain.racelog.tracking.DeviceIdentifierStringSerializationHandler;
import com.sap.sailing.domain.racelog.tracking.SmartphoneImeiIdentifier;
import com.sap.sailing.domain.racelog.tracking.SmartphoneUUIDIdentifier;
import com.sap.sailing.domain.racelogtracking.PingDeviceIdentifierImpl;
import com.sap.sailing.domain.racelogtracking.RaceLogTrackingAdapterFactory;
import com.sap.sailing.domain.tracking.GPSFix;
@@ -31,7 +31,7 @@ import com.sap.sailing.server.gateway.serialization.impl.GPSFixNmeaDTOJsonSerial
import com.sap.sailing.server.gateway.serialization.racelog.tracking.DeviceIdentifierJsonHandler;
import com.sap.sailing.server.gateway.serialization.racelog.tracking.GPSFixJsonHandler;
import com.sap.sailing.server.gateway.serialization.racelog.tracking.impl.GPSFixJsonHandlerImpl;
import com.sap.sailing.server.gateway.serialization.racelog.tracking.impl.SmartphoneImeiJsonHandler;
import com.sap.sailing.server.gateway.serialization.racelog.tracking.impl.SmartphoneUUIDJsonHandler;
public class Activator implements BundleActivator {
private static final Logger logger = Logger.getLogger(Activator.class.getName());
@@ -52,9 +52,9 @@ public class Activator implements BundleActivator {
@Override
public void start(BundleContext context) throws Exception {
registrations.add(context.registerService(DeviceIdentifierMongoHandler.class, new SmartphoneImeiMongoHandler(), getDict(SmartphoneImeiIdentifier.TYPE)));
registrations.add(context.registerService(DeviceIdentifierJsonHandler.class, new SmartphoneImeiJsonHandler(), getDict(SmartphoneImeiIdentifier.TYPE)));
registrations.add(context.registerService(DeviceIdentifierStringSerializationHandler.class, new SmartphoneImeiStringSerializationHandler(), getDict(SmartphoneImeiIdentifier.TYPE)));
registrations.add(context.registerService(DeviceIdentifierMongoHandler.class, new SmartphoneUUIDMongoHandler(), getDict(SmartphoneUUIDIdentifier.TYPE)));
registrations.add(context.registerService(DeviceIdentifierJsonHandler.class, new SmartphoneUUIDJsonHandler(), getDict(SmartphoneUUIDIdentifier.TYPE)));
registrations.add(context.registerService(DeviceIdentifierStringSerializationHandler.class, new SmartphoneUUIDStringSerializationHandler(), getDict(SmartphoneUUIDIdentifier.TYPE)));
registrations.add(context.registerService(DeviceIdentifierMongoHandler.class, new PingDeviceIdentifierMongoHandler(), getDict(PingDeviceIdentifierImpl.TYPE)));
registrations.add(context.registerService(DeviceIdentifierJsonHandler.class, new PingDeviceIdentifierJsonHandler(), getDict(PingDeviceIdentifierImpl.TYPE)));
@@ -0,0 +1,17 @@
package com.sap.sailing.domain.racelogtracking.impl;
import com.sap.sailing.domain.common.racelog.tracking.TransformationException;
import com.sap.sailing.domain.persistence.racelog.tracking.DeviceIdentifierMongoHandler;
import com.sap.sailing.domain.racelog.tracking.DeviceIdentifier;
import com.sap.sailing.domain.racelog.tracking.SmartphoneUUIDSerializationHandler;
public class SmartphoneUUIDMongoHandler extends SmartphoneUUIDSerializationHandler
implements DeviceIdentifierMongoHandler {
@Override
public DeviceIdentifier deserialize(Object serialized, String type, String stringRepresentation)
throws TransformationException {
return deserialize((String) serialized, type, stringRepresentation);
}
}
@@ -0,0 +1,9 @@
package com.sap.sailing.domain.racelogtracking.impl;
import com.sap.sailing.domain.racelog.tracking.DeviceIdentifierStringSerializationHandler;
import com.sap.sailing.domain.racelog.tracking.SmartphoneUUIDSerializationHandler;
public class SmartphoneUUIDStringSerializationHandler extends SmartphoneUUIDSerializationHandler
implements DeviceIdentifierStringSerializationHandler {
}
@@ -11,4 +11,5 @@ Require-Bundle: com.sap.sailing.domain.common;bundle-version="1.0.0",
org.objenesis;bundle-version="1.3.0",
org.hamcrest;bundle-version="1.1.0",
org.mockito.mockito-core;bundle-version="1.9.5",
com.sap.sailing.domain.test
com.sap.sailing.domain.test,
com.sap.sailing.domain.racelogtrackingadapter.testsupport;bundle-version="1.0.0"
@@ -19,7 +19,7 @@ import com.sap.sailing.domain.racelog.RaceLogStartTimeEvent;
import com.sap.sailing.domain.racelog.impl.RaceLogEventAuthorImpl;
import com.sap.sailing.domain.racelog.impl.RaceLogImpl;
import com.sap.sailing.domain.racelog.tracking.DeviceCompetitorMappingEvent;
import com.sap.sailing.domain.racelog.tracking.SmartphoneImeiIdentifier;
import com.sap.sailing.domain.racelog.tracking.test.mock.SmartphoneImeiIdentifier;
import com.sap.sailing.domain.test.AbstractLeaderboardTest;
/**
@@ -23,8 +23,8 @@ import com.sap.sailing.domain.racelog.RaceLogEvent;
import com.sap.sailing.domain.racelog.RaceLogEventAuthor;
import com.sap.sailing.domain.racelog.tracking.DeviceIdentifier;
import com.sap.sailing.domain.racelog.tracking.DeviceMapping;
import com.sap.sailing.domain.racelog.tracking.SmartphoneImeiIdentifier;
import com.sap.sailing.domain.racelog.tracking.analyzing.impl.DeviceCompetitorMappingFinder;
import com.sap.sailing.domain.racelog.tracking.test.mock.SmartphoneImeiIdentifier;
public class DeviceMappingFinderTest extends AbstractRaceLogTrackingTest {
private final Competitor competitor = new CompetitorImpl("comp", "Comp", null, null, null);
@@ -4,7 +4,33 @@ import java.io.Serializable;
/**
* Identifies any kind of tracking device. Should be implemented accordingly for different tracking
* adapters, e.g. for smartphones, Igtimi trackers etc.
* adapters, e.g. for smartphones, Igtimi trackers etc.<p>
*
* Device identifiers are integrated in such a way, that a third party wishing to use their own
* types of device identifiers can do so without touching the existing code base. Instead, handlers
* for serializing device identifiers can be registered via the OSGi service registry. When adding a
* new device identifier, the following handlers <b>have to</b> be implemented and registered:
* <ul>
* <li>{@code DeviceIdentifierMongoHandler}</li>
* </ul>
* The following handlers are optional:
* <ul>
* <li>{@code DeviceIdentifierJsonHandler}:
* Enables managing such identifiers from a smartphone or tablet through the {@link RaceLog}.</li>
* <li>{@code DeviceIdentifierStringSerializationHandler}:
* Enables device identifiers to be created and managed in the admin console.</li>
* </ul>
* </p>
*
* Refer to {@link SmartphoneUUIDIdentifier} and the related handlers as an implementation example.
* An example on how to register the handlers in the OSGi service registry is given in
* {@link DeviceIdentifierSerializationHandler}.<p>
*
* The handler is chosen based on the {@code identifier type} of the device identifier. This identifier
* type should be unique, consider using a fully qualified class name.<p>
*
* The {@link #getStringRepresentation() string representation} of a device identifier is used to generate
* a {@link PlaceHolderDeviceIdentifier} in case an appropriate handler is missing.<p>
*
* {@link Object#equals(Object)} and {@link Object#hashCode()} should be implemented so that multiple
* deserializations of same device identifier (conceptually) result in objects that are be identified
@@ -4,9 +4,19 @@ import com.sap.sailing.domain.common.impl.Util.Pair;
import com.sap.sailing.domain.common.racelog.tracking.TransformationException;
/**
* Handles serialization and deserialization of {@link DeviceIdentifier}s.
* Base interface for handlers of serialization and deserialization of {@link DeviceIdentifier}s.
* Additional information is passed around to enable fallback mechanisms (see {@link PlaceHolderDeviceIdentifier})
* in case no appropriate handler for a {@code type} is registered.
* in case no appropriate handler for a {@code type} is registered.<p>
*
* Handlers that implement child-interfaces (e.g. {@link DeviceIdentifierStringSerializationHandler} have to be
* registered in the OSGi service registry for the respective child-interface.Also, the device identifier type has to be
* added as a property to that service registration, as in this example:<p>
*
* <pre>
* Dictionary<String, String> properties = new Hashtable<String, String>();
* properties.put(TypeBasedServiceFinder.TYPE, type);
* context.registerService(DeviceIdentifierMongoHandler.class, new SmartphoneUUIDMongoHandler(), properties)}.
* </pre><p>
*
* @author Fredrik Teschke
*
@@ -3,7 +3,8 @@ package com.sap.sailing.domain.racelog.tracking;
/**
* If the proper identifier cannot be resolved, for example because the OSGi context is not available
* If the proper identifier cannot be resolved (with an approriate {@link DeviceIdentifierSerializationHandler}),
* for example because the OSGi context is not available
* on the smartphone receiving the {@code DevicieIdentifier} via its {@code RaceLog}, then this
* class can be used as a placeholder, that will at least offer the {@code type} and {@code string representation}
* of the original identifier.
@@ -0,0 +1,10 @@
package com.sap.sailing.domain.racelog.tracking;
import java.util.UUID;
public interface SmartphoneUUIDIdentifier extends DeviceIdentifier {
String TYPE = "smartphoneUUID";
UUID getUUID();
}
@@ -0,0 +1,23 @@
package com.sap.sailing.domain.racelog.tracking;
import java.util.UUID;
import com.sap.sailing.domain.common.impl.Util.Pair;
import com.sap.sailing.domain.common.racelog.tracking.TransformationException;
import com.sap.sailing.domain.racelog.tracking.impl.SmartphoneUUIDIdentifierImpl;
public class SmartphoneUUIDSerializationHandler {
private SmartphoneUUIDIdentifier castIdentifier(DeviceIdentifier identifier) throws TransformationException {
if (!(identifier instanceof SmartphoneUUIDIdentifier))
throw new TransformationException("Expected a SmartphoneUUIDIdentifier, got instead: " + identifier);
return (SmartphoneUUIDIdentifier) identifier;
}
public Pair<String, String> serialize(DeviceIdentifier deviceIdentifier) throws TransformationException {
return new Pair<String, String>(castIdentifier(deviceIdentifier).getUUID().toString(), SmartphoneUUIDIdentifier.TYPE);
}
public DeviceIdentifier deserialize(String input, String type, String stringRep) {
return new SmartphoneUUIDIdentifierImpl(UUID.fromString(input));
}
}
@@ -0,0 +1,48 @@
package com.sap.sailing.domain.racelog.tracking.impl;
import java.util.UUID;
import com.sap.sailing.domain.racelog.tracking.SmartphoneUUIDIdentifier;
public class SmartphoneUUIDIdentifierImpl implements SmartphoneUUIDIdentifier {
private static final long serialVersionUID = -1747763242191049428L;
private final UUID uuid;
public SmartphoneUUIDIdentifierImpl(UUID uuid) {
this.uuid = uuid;
}
public UUID getUUID() {
return uuid;
}
@Override
public String getIdentifierType() {
return TYPE;
}
@Override
public String toString() {
return "UUID " + uuid;
}
@Override
public boolean equals(Object obj) {
if (obj instanceof SmartphoneUUIDIdentifier) {
return ((SmartphoneUUIDIdentifier) obj).getUUID().equals(uuid);
}
return false;
}
@Override
public int hashCode() {
return uuid.hashCode();
}
@Override
public String getStringRepresentation() {
return uuid.toString();
}
}
@@ -33,9 +33,9 @@ import com.sap.sailing.domain.racelog.impl.RaceLogEventAuthorImpl;
import com.sap.sailing.domain.racelog.tracking.DeviceCompetitorMappingEvent;
import com.sap.sailing.domain.racelog.tracking.DeviceIdentifier;
import com.sap.sailing.domain.racelog.tracking.PlaceHolderDeviceIdentifier;
import com.sap.sailing.domain.racelog.tracking.SmartphoneImeiIdentifier;
import com.sap.sailing.domain.racelog.tracking.test.mock.MockEmptyServiceFinderFactory;
import com.sap.sailing.domain.racelog.tracking.test.mock.MockSmartphoneImeiServiceFinderFactory;
import com.sap.sailing.domain.racelog.tracking.test.mock.SmartphoneImeiIdentifier;
public class StoreAndLoadDeviceIdentifierTest extends AbstractMongoDBTest {
public StoreAndLoadDeviceIdentifierTest() throws UnknownHostException, MongoException {
@@ -50,8 +50,8 @@ import com.sap.sailing.domain.racelog.tracking.DeviceCompetitorMappingEvent;
import com.sap.sailing.domain.racelog.tracking.DeviceIdentifier;
import com.sap.sailing.domain.racelog.tracking.DeviceMarkMappingEvent;
import com.sap.sailing.domain.racelog.tracking.RegisterCompetitorEvent;
import com.sap.sailing.domain.racelog.tracking.SmartphoneImeiIdentifier;
import com.sap.sailing.domain.racelog.tracking.test.mock.MockSmartphoneImeiServiceFinderFactory;
import com.sap.sailing.domain.racelog.tracking.test.mock.SmartphoneImeiIdentifier;
public class StoreAndLoadRaceLogEventsTest extends AbstractMongoDBTest {
@@ -34,8 +34,8 @@ import com.sap.sailing.domain.racelog.impl.RaceLogEventAuthorImpl;
import com.sap.sailing.domain.racelog.impl.RaceLogImpl;
import com.sap.sailing.domain.racelog.tracking.DeviceIdentifier;
import com.sap.sailing.domain.racelog.tracking.GPSFixStore;
import com.sap.sailing.domain.racelog.tracking.SmartphoneImeiIdentifier;
import com.sap.sailing.domain.racelog.tracking.test.mock.MockSmartphoneImeiServiceFinderFactory;
import com.sap.sailing.domain.racelog.tracking.test.mock.SmartphoneImeiIdentifier;
import com.sap.sailing.domain.tracking.GPSFix;
import com.sap.sailing.domain.tracking.GPSFixMoving;
import com.sap.sailing.domain.tracking.impl.DynamicGPSFixMovingTrackImpl;
@@ -1,23 +0,0 @@
package com.sap.sailing.server.gateway.deserialization.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.racelog.tracking.SmartphoneImeiIdentifier;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
import com.sap.sailing.server.gateway.deserialization.TypeBasedJsonDeserializer;
public class SmartphoneImeiIdentifierJsonDeserializer extends TypeBasedJsonDeserializer<SmartphoneImeiIdentifier> {
public static final String FIELD_IMEI = "imei";
@Override
protected String getType() {
return SmartphoneImeiIdentifier.TYPE;
}
@Override
protected SmartphoneImeiIdentifier deserializeAfterCheckingType(JSONObject object)
throws JsonDeserializationException {
String imei = (String) object.get(FIELD_IMEI);
return (SmartphoneImeiIdentifier) new SmartphoneImeiIdentifier(imei);
}
}
@@ -6,7 +6,7 @@ import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.SharedDomainFactory;
import com.sap.sailing.domain.racelog.RaceLogEvent;
import com.sap.sailing.domain.racelog.tracking.DeviceIdentifier;
import com.sap.sailing.domain.racelog.tracking.SmartphoneImeiIdentifier;
import com.sap.sailing.domain.racelog.tracking.SmartphoneUUIDIdentifier;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
import com.sap.sailing.server.gateway.deserialization.coursedata.impl.ControlPointDeserializer;
@@ -40,13 +40,13 @@ import com.sap.sailing.server.gateway.serialization.racelog.impl.RaceLogStartPro
import com.sap.sailing.server.gateway.serialization.racelog.impl.RaceLogStartTimeEventSerializer;
import com.sap.sailing.server.gateway.serialization.racelog.impl.RaceLogStartTrackingEventSerializer;
import com.sap.sailing.server.gateway.serialization.racelog.impl.RaceLogWindFixEventSerializer;
import com.sap.sailing.server.gateway.serialization.racelog.tracking.impl.SmartphoneImeiJsonHandler;
import com.sap.sailing.server.gateway.serialization.racelog.tracking.impl.SmartphoneUUIDJsonHandler;
public class RaceLogEventDeserializer implements JsonDeserializer<RaceLogEvent> {
public static RaceLogEventDeserializer create(SharedDomainFactory domainFactory) {
JsonDeserializer<DeviceIdentifier> deviceDeserializer = DeviceIdentifierJsonDeserializer.create(
new SmartphoneImeiJsonHandler(), SmartphoneImeiIdentifier.TYPE);
new SmartphoneUUIDJsonHandler(), SmartphoneUUIDIdentifier.TYPE);
return create(domainFactory, deviceDeserializer);
}
@@ -26,7 +26,7 @@ import com.sap.sailing.domain.racelog.tracking.DeviceCompetitorMappingEvent;
import com.sap.sailing.domain.racelog.tracking.DeviceIdentifier;
import com.sap.sailing.domain.racelog.tracking.DeviceMarkMappingEvent;
import com.sap.sailing.domain.racelog.tracking.RegisterCompetitorEvent;
import com.sap.sailing.domain.racelog.tracking.SmartphoneImeiIdentifier;
import com.sap.sailing.domain.racelog.tracking.SmartphoneUUIDIdentifier;
import com.sap.sailing.domain.racelog.tracking.StartTrackingEvent;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
import com.sap.sailing.server.gateway.serialization.coursedata.impl.ControlPointJsonSerializer;
@@ -37,12 +37,12 @@ import com.sap.sailing.server.gateway.serialization.coursedata.impl.WaypointJson
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.SmartphoneImeiJsonHandler;
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 SmartphoneImeiJsonHandler(), SmartphoneImeiIdentifier.TYPE));
new SmartphoneUUIDJsonHandler(), SmartphoneUUIDIdentifier.TYPE));
}
public static JsonSerializer<RaceLogEvent> create(JsonSerializer<Competitor> competitorSerializer,
@@ -0,0 +1,18 @@
package com.sap.sailing.server.gateway.serialization.racelog.tracking.impl;
import com.sap.sailing.domain.common.racelog.tracking.TransformationException;
import com.sap.sailing.domain.racelog.tracking.DeviceIdentifier;
import com.sap.sailing.domain.racelog.tracking.SmartphoneUUIDSerializationHandler;
import com.sap.sailing.server.gateway.serialization.racelog.tracking.DeviceIdentifierJsonHandler;
public class SmartphoneUUIDJsonHandler extends SmartphoneUUIDSerializationHandler
implements DeviceIdentifierJsonHandler {
@Override
public DeviceIdentifier deserialize(Object serialized, String type, String stringRepresentation)
throws TransformationException {
return deserialize((String) serialized, type, stringRepresentation);
}
}
@@ -28,8 +28,9 @@ import com.sap.sailing.domain.racelog.impl.RaceLogEventAuthorImpl;
import com.sap.sailing.domain.racelog.tracking.DeviceCompetitorMappingEvent;
import com.sap.sailing.domain.racelog.tracking.DeviceIdentifier;
import com.sap.sailing.domain.racelog.tracking.PlaceHolderDeviceIdentifier;
import com.sap.sailing.domain.racelog.tracking.SmartphoneImeiIdentifier;
import com.sap.sailing.domain.racelog.tracking.test.mock.MockEmptyServiceFinder;
import com.sap.sailing.domain.racelog.tracking.test.mock.SmartphoneImeiIdentifier;
import com.sap.sailing.domain.racelog.tracking.test.mock.SmartphoneImeiJsonHandler;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
import com.sap.sailing.server.gateway.deserialization.impl.DeviceIdentifierJsonDeserializer;
@@ -40,7 +41,6 @@ import com.sap.sailing.server.gateway.serialization.impl.DeviceIdentifierJsonSer
import com.sap.sailing.server.gateway.serialization.racelog.impl.RaceLogEventSerializer;
import com.sap.sailing.server.gateway.serialization.racelog.tracking.DeviceIdentifierJsonHandler;
import com.sap.sailing.server.gateway.serialization.racelog.tracking.impl.PlaceHolderDeviceIdentifierJsonHandler;
import com.sap.sailing.server.gateway.serialization.racelog.tracking.impl.SmartphoneImeiJsonHandler;
public class RaceLogSerializationTest {
private JsonSerializer<RaceLogEvent> serializer;
@@ -30,6 +30,7 @@ import com.sap.sailing.server.gateway.deserialization.impl.Helpers;
import com.sap.sailing.server.gateway.deserialization.racelog.impl.RaceLogEventDeserializer;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.CompetitorJsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.DeviceIdentifierJsonSerializer;
import com.sap.sailing.server.gateway.serialization.racelog.impl.RaceLogEventSerializer;
import com.sap.sailing.server.gateway.serialization.racelog.tracking.DeviceIdentifierJsonHandler;
import com.sap.sailing.server.gateway.serialization.racelog.tracking.impl.PlaceHolderDeviceIdentifierJsonHandler;
@@ -142,7 +143,8 @@ public class AddEntryToRaceLogJsonPostServlet extends AbstractJsonHttpServlet {
protected void sendResponse(HttpServletResponse response, final UUID clientUuid, RaceLog raceLog,
Iterable<RaceLogEvent> eventsToSendBackToClient) throws IOException {
JsonSerializer<RaceLogEvent> serializer = RaceLogEventSerializer.create(new CompetitorJsonSerializer());
JsonSerializer<RaceLogEvent> serializer = RaceLogEventSerializer.create(new CompetitorJsonSerializer(),
new DeviceIdentifierJsonSerializer(deviceJsonServiceFinder));
ServletOutputStream outputStream = response.getOutputStream();
boolean first = true;
outputStream.write('[');