mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-25 21:43:49 +00:00
added placeholder identifier and ping identifier
This commit is contained in:
1 parent
dea531e6d0
commit
335e090ebc
14 files changed
+255
-21
No files matched your search
+14
@@ -0,0 +1,14 @@
|
||||
package com.sap.sailing.domain.racelog.tracking;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* A device identifier used to identify a non-existent, virtual device, which is used only once as an
|
||||
* identifier to add a single fix to a track (i.e. pinging the location of that track's item).
|
||||
*
|
||||
* @author Fredrik Teschke
|
||||
*
|
||||
*/
|
||||
public interface PingDeviceIdentifier extends DeviceIdentifier {
|
||||
UUID getId();
|
||||
}
|
||||
+2
@@ -52,6 +52,8 @@ public class Activator implements BundleActivator {
|
||||
registrations.add(context.registerService(DeviceIdentifierMongoHandler.class, new SmartphoneImeiMongoHandlerImpl(), getDict(SmartphoneImeiIdentifier.TYPE)));
|
||||
registrations.add(context.registerService(DeviceIdentifierJsonHandler.class, new SmartphoneImeiJsonHandlerImpl(), getDict(SmartphoneImeiIdentifier.TYPE)));
|
||||
|
||||
registrations.add(context.registerService(DeviceIdentifierMongoHandler.class, new PingDeviceMongoHandlerImpl(), getDict(PingDeviceIdentifierImpl.TYPE)));
|
||||
|
||||
registerGPSFixJsonService(context, new GPSFixJsonDeserializer(), new GPSFixJsonSerializer(), GPSFixJsonDeserializer.TYPE);
|
||||
registerGPSFixJsonService(context, new GPSFixMovingJsonDeserializer(), new GPSFixMovingJsonSerializer(), GPSFixMovingJsonDeserializer.TYPE);
|
||||
registerGPSFixJsonService(context, new GPSFixNmeaDTOJsonDeserializer(), new GPSFixNmeaDTOJsonSerializer(), GPSFixNmeaDTOJsonDeserializer.TYPE);
|
||||
|
||||
+44
@@ -0,0 +1,44 @@
|
||||
package com.sap.sailing.domain.racelog.tracking.impl;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import com.sap.sailing.domain.base.IsManagedBySharedDomainFactory;
|
||||
import com.sap.sailing.domain.base.SharedDomainFactory;
|
||||
import com.sap.sailing.domain.racelog.tracking.PingDeviceIdentifier;
|
||||
|
||||
public class PingDeviceIdentifierImpl implements PingDeviceIdentifier {
|
||||
private static final long serialVersionUID = -4049961972156611640L;
|
||||
|
||||
public static final String TYPE = "PING";
|
||||
|
||||
private final UUID id;
|
||||
|
||||
public PingDeviceIdentifierImpl() {
|
||||
this.id = UUID.randomUUID();
|
||||
}
|
||||
|
||||
public PingDeviceIdentifierImpl(UUID id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getIdentifierType() {
|
||||
return TYPE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IsManagedBySharedDomainFactory resolve(SharedDomainFactory domainFactory) {
|
||||
//No resolving necessary, only relevant on the creating server
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public UUID getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getStringRepresentation() {
|
||||
return id.toString();
|
||||
}
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
package com.sap.sailing.domain.racelog.tracking.impl;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
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.PingDeviceIdentifier;
|
||||
|
||||
public class PingDeviceMongoHandlerImpl implements DeviceIdentifierMongoHandler {
|
||||
private PingDeviceIdentifier castIdentifier(DeviceIdentifier identifier) throws TransformationException {
|
||||
if (!(identifier instanceof PingDeviceIdentifier))
|
||||
throw new TransformationException("Expected a PingDeviceIdentifier, got instead: " + identifier);
|
||||
return (PingDeviceIdentifier) identifier;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object transformForth(DeviceIdentifier deviceIdentifier) throws TransformationException {
|
||||
return castIdentifier(deviceIdentifier).getId().toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public DeviceIdentifier transformBack(Object input) {
|
||||
return new PingDeviceIdentifierImpl(UUID.fromString((String) input));
|
||||
}
|
||||
}
|
||||
+7
@@ -19,5 +19,12 @@ public interface DeviceIdentifier extends IsManagedBySharedDomainFactory, Serial
|
||||
* have to register new OSGi service, and not touch the SAP Sailing Analytics code.
|
||||
*/
|
||||
String getIdentifierType();
|
||||
|
||||
/**
|
||||
* Create a string representation, that can identify this device.
|
||||
* The returned values should be unique for this identifier within its {@link #getIdentifierType() type},
|
||||
* but need not include the {@link #getIdentifierType() type} itself in the representation.
|
||||
*/
|
||||
String getStringRepresentation();
|
||||
|
||||
}
|
||||
+41
@@ -0,0 +1,41 @@
|
||||
package com.sap.sailing.domain.racelog.tracking;
|
||||
|
||||
import com.sap.sailing.domain.base.IsManagedBySharedDomainFactory;
|
||||
import com.sap.sailing.domain.base.SharedDomainFactory;
|
||||
|
||||
/**
|
||||
* If the proper identifier cannot be resolved, 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.
|
||||
*
|
||||
* @author Fredrik Teschke
|
||||
*
|
||||
*/
|
||||
public class PlaceHolderDeviceIdentifier implements DeviceIdentifier {
|
||||
private static final long serialVersionUID = 8642469389180406246L;
|
||||
|
||||
private final String type;
|
||||
private final String stringRepresentation;
|
||||
|
||||
public PlaceHolderDeviceIdentifier(String type, String stringRepresentation) {
|
||||
this.type = type;
|
||||
this.stringRepresentation = stringRepresentation;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IsManagedBySharedDomainFactory resolve(SharedDomainFactory domainFactory) {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getIdentifierType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getStringRepresentation() {
|
||||
return stringRepresentation;
|
||||
}
|
||||
|
||||
}
|
||||
+5
@@ -51,4 +51,9 @@ public class SmartphoneImeiIdentifier implements DeviceIdentifier {
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getStringRepresentation() {
|
||||
return imei;
|
||||
}
|
||||
}
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
package com.sap.sailing.server.gateway.deserialization.impl;
|
||||
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
import com.sap.sailing.domain.racelog.tracking.PlaceHolderDeviceIdentifier;
|
||||
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
|
||||
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
|
||||
import com.sap.sailing.server.gateway.deserialization.TypeBasedJsonDeserializer;
|
||||
import com.sap.sailing.server.gateway.serialization.impl.DeviceIdentifierBaseJsonSerializer;
|
||||
|
||||
public class PlaceHolderDeviceIdentifierJsonDeserializer implements JsonDeserializer<PlaceHolderDeviceIdentifier> {
|
||||
@Override
|
||||
public PlaceHolderDeviceIdentifier deserialize(JSONObject object) throws JsonDeserializationException {
|
||||
String type = (String) object.get(TypeBasedJsonDeserializer.FIELD_TYPE);
|
||||
String stringRepresentation = (String) object.get(DeviceIdentifierBaseJsonSerializer.FIELD_STRING_REPRESENTATION);
|
||||
|
||||
return new PlaceHolderDeviceIdentifier(type, stringRepresentation);
|
||||
}
|
||||
|
||||
}
|
||||
+2
-5
@@ -4,10 +4,8 @@ import org.json.simple.JSONObject;
|
||||
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.SharedDomainFactory;
|
||||
import com.sap.sailing.domain.common.racelog.tracking.SingleTypeBasedServiceFinderImpl;
|
||||
import com.sap.sailing.domain.common.racelog.tracking.TypeBasedServiceFinder;
|
||||
import com.sap.sailing.domain.racelog.RaceLogEvent;
|
||||
import com.sap.sailing.domain.racelog.tracking.SmartphoneImeiIdentifier;
|
||||
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,14 +38,13 @@ import com.sap.sailing.server.gateway.serialization.racelog.impl.RaceLogStartTim
|
||||
import com.sap.sailing.server.gateway.serialization.racelog.impl.RaceLogStartTrackingEventSerializer;
|
||||
import com.sap.sailing.server.gateway.serialization.racelog.impl.RaceLogWindFixEventSerializer;
|
||||
import com.sap.sailing.server.gateway.serialization.racelog.tracking.DeviceIdentifierJsonHandler;
|
||||
import com.sap.sailing.server.gateway.serialization.racelog.tracking.impl.SmartphoneImeiJsonHandlerImpl;
|
||||
import com.sap.sailing.server.gateway.serialization.racelog.tracking.impl.SmartphoneImeiJsonHandlerFactoryDefaultingToPlaceHolder;
|
||||
|
||||
public class RaceLogEventDeserializer implements JsonDeserializer<RaceLogEvent> {
|
||||
|
||||
public static RaceLogEventDeserializer create(SharedDomainFactory domainFactory) {
|
||||
return create(domainFactory,
|
||||
new SingleTypeBasedServiceFinderImpl<DeviceIdentifierJsonHandler>(
|
||||
new SmartphoneImeiJsonHandlerImpl(), SmartphoneImeiIdentifier.TYPE));
|
||||
new SmartphoneImeiJsonHandlerFactoryDefaultingToPlaceHolder());
|
||||
}
|
||||
|
||||
public static RaceLogEventDeserializer create(SharedDomainFactory domainFactory,
|
||||
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
package com.sap.sailing.server.gateway.serialization.impl;
|
||||
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
import com.sap.sailing.domain.racelog.tracking.DeviceIdentifier;
|
||||
import com.sap.sailing.server.gateway.deserialization.TypeBasedJsonDeserializer;
|
||||
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
|
||||
|
||||
public abstract class DeviceIdentifierBaseJsonSerializer<T extends DeviceIdentifier> implements JsonSerializer<T> {
|
||||
public static final String FIELD_STRING_REPRESENTATION = "stringRepresentation";
|
||||
|
||||
protected abstract JSONObject furtherSerialize(T object, JSONObject result);
|
||||
|
||||
@Override
|
||||
public JSONObject serialize(T object) {
|
||||
JSONObject result = new JSONObject();
|
||||
result.put(TypeBasedJsonDeserializer.FIELD_TYPE, object.getIdentifierType());
|
||||
result.put(FIELD_STRING_REPRESENTATION, object.getStringRepresentation());
|
||||
return furtherSerialize(object, result);
|
||||
}
|
||||
|
||||
}
|
||||
+4
-8
@@ -3,18 +3,14 @@ package com.sap.sailing.server.gateway.serialization.impl;
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
import com.sap.sailing.domain.racelog.tracking.SmartphoneImeiIdentifier;
|
||||
import com.sap.sailing.server.gateway.deserialization.TypeBasedJsonDeserializer;
|
||||
import com.sap.sailing.server.gateway.deserialization.impl.SmartphoneImeiIdentifierJsonDeserializer;
|
||||
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
|
||||
|
||||
public class SmartphoneImeiIdentifierJsonSerializer implements JsonSerializer<SmartphoneImeiIdentifier> {
|
||||
|
||||
public class SmartphoneImeiIdentifierJsonSerializer extends DeviceIdentifierBaseJsonSerializer<SmartphoneImeiIdentifier>
|
||||
implements JsonSerializer<SmartphoneImeiIdentifier> {
|
||||
@Override
|
||||
public JSONObject serialize(SmartphoneImeiIdentifier identifier) {
|
||||
JSONObject result = new JSONObject();
|
||||
|
||||
result.put(TypeBasedJsonDeserializer.FIELD_TYPE, SmartphoneImeiIdentifier.TYPE);
|
||||
result.put(SmartphoneImeiIdentifierJsonDeserializer.FIELD_IMEI, identifier.getImei());
|
||||
protected JSONObject furtherSerialize(SmartphoneImeiIdentifier object, JSONObject result) {
|
||||
result.put(SmartphoneImeiIdentifierJsonDeserializer.FIELD_IMEI, object.getImei());
|
||||
return result;
|
||||
}
|
||||
}
|
||||
+4
-8
@@ -3,7 +3,6 @@ package com.sap.sailing.server.gateway.serialization.racelog.impl;
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.common.racelog.tracking.SingleTypeBasedServiceFinderImpl;
|
||||
import com.sap.sailing.domain.common.racelog.tracking.TypeBasedServiceFinder;
|
||||
import com.sap.sailing.domain.racelog.RaceLogCourseAreaChangedEvent;
|
||||
import com.sap.sailing.domain.racelog.RaceLogCourseDesignChangedEvent;
|
||||
@@ -22,12 +21,11 @@ import com.sap.sailing.domain.racelog.RaceLogStartTimeEvent;
|
||||
import com.sap.sailing.domain.racelog.RaceLogWindFixEvent;
|
||||
import com.sap.sailing.domain.racelog.RevokeEvent;
|
||||
import com.sap.sailing.domain.racelog.tracking.DefineMarkEvent;
|
||||
import com.sap.sailing.domain.racelog.tracking.RegisterCompetitorEvent;
|
||||
import com.sap.sailing.domain.racelog.tracking.StartTrackingEvent;
|
||||
import com.sap.sailing.domain.racelog.tracking.DenoteForTrackingEvent;
|
||||
import com.sap.sailing.domain.racelog.tracking.DeviceCompetitorMappingEvent;
|
||||
import com.sap.sailing.domain.racelog.tracking.DeviceMarkMappingEvent;
|
||||
import com.sap.sailing.domain.racelog.tracking.SmartphoneImeiIdentifier;
|
||||
import com.sap.sailing.domain.racelog.tracking.RegisterCompetitorEvent;
|
||||
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;
|
||||
import com.sap.sailing.server.gateway.serialization.coursedata.impl.CourseBaseJsonSerializer;
|
||||
@@ -37,13 +35,11 @@ import com.sap.sailing.server.gateway.serialization.coursedata.impl.WaypointJson
|
||||
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.DeviceIdentifierJsonHandler;
|
||||
import com.sap.sailing.server.gateway.serialization.racelog.tracking.impl.SmartphoneImeiJsonHandlerImpl;
|
||||
import com.sap.sailing.server.gateway.serialization.racelog.tracking.impl.SmartphoneImeiJsonHandlerFactoryDefaultingToPlaceHolder;
|
||||
|
||||
public class RaceLogEventSerializer implements JsonSerializer<RaceLogEvent>, RaceLogEventVisitor {
|
||||
public static JsonSerializer<RaceLogEvent> create(JsonSerializer<Competitor> competitorSerializer) {
|
||||
return create(competitorSerializer,
|
||||
new SingleTypeBasedServiceFinderImpl<DeviceIdentifierJsonHandler>(
|
||||
new SmartphoneImeiJsonHandlerImpl(), SmartphoneImeiIdentifier.TYPE));
|
||||
return create(competitorSerializer, new SmartphoneImeiJsonHandlerFactoryDefaultingToPlaceHolder());
|
||||
}
|
||||
public static JsonSerializer<RaceLogEvent> create(JsonSerializer<Competitor> competitorSerializer,
|
||||
TypeBasedServiceFinder<DeviceIdentifierJsonHandler> deviceServiceFinder) {
|
||||
|
||||
+52
@@ -0,0 +1,52 @@
|
||||
package com.sap.sailing.server.gateway.serialization.racelog.tracking.impl;
|
||||
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
import com.sap.sailing.domain.common.racelog.tracking.NoCorrespondingServiceRegisteredException;
|
||||
import com.sap.sailing.domain.common.racelog.tracking.SingleTypeBasedServiceFinderImpl;
|
||||
import com.sap.sailing.domain.common.racelog.tracking.TransformationException;
|
||||
import com.sap.sailing.domain.racelog.tracking.DeviceIdentifier;
|
||||
import com.sap.sailing.server.gateway.deserialization.impl.PlaceHolderDeviceIdentifierJsonDeserializer;
|
||||
import com.sap.sailing.server.gateway.serialization.impl.DeviceIdentifierBaseJsonSerializer;
|
||||
import com.sap.sailing.server.gateway.serialization.racelog.tracking.DeviceIdentifierJsonHandler;
|
||||
|
||||
public class DeviceIdentifierJsonHandlerFactoryDefaultingToPlaceHolder extends
|
||||
SingleTypeBasedServiceFinderImpl<DeviceIdentifierJsonHandler> {
|
||||
private final DeviceIdentifierJsonHandler placeHolderHandler;
|
||||
|
||||
|
||||
public DeviceIdentifierJsonHandlerFactoryDefaultingToPlaceHolder(DeviceIdentifierJsonHandler service, String type) {
|
||||
super(service, type);
|
||||
final PlaceHolderDeviceIdentifierJsonDeserializer placeHolderDeserializer =
|
||||
new PlaceHolderDeviceIdentifierJsonDeserializer();
|
||||
final DeviceIdentifierBaseJsonSerializer<DeviceIdentifier> placeHolderSerializer =
|
||||
new DeviceIdentifierBaseJsonSerializer<DeviceIdentifier>() {
|
||||
@Override
|
||||
protected JSONObject furtherSerialize(DeviceIdentifier object, JSONObject result) {
|
||||
return result;
|
||||
}
|
||||
};
|
||||
|
||||
placeHolderHandler = new DeviceIdentifierJsonHandler() {
|
||||
|
||||
@Override
|
||||
public JSONObject transformForth(DeviceIdentifier object) throws TransformationException {
|
||||
return placeHolderSerializer.serialize(object);
|
||||
}
|
||||
|
||||
@Override
|
||||
public DeviceIdentifier transformBack(JSONObject object) throws TransformationException {
|
||||
return placeHolderDeserializer.deserialize(object);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public DeviceIdentifierJsonHandler findService(String type) {
|
||||
try {
|
||||
return super.findService(type);
|
||||
} catch (NoCorrespondingServiceRegisteredException e) {
|
||||
return placeHolderHandler;
|
||||
}
|
||||
}
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
package com.sap.sailing.server.gateway.serialization.racelog.tracking.impl;
|
||||
|
||||
import com.sap.sailing.domain.racelog.tracking.SmartphoneImeiIdentifier;
|
||||
|
||||
public class SmartphoneImeiJsonHandlerFactoryDefaultingToPlaceHolder extends
|
||||
DeviceIdentifierJsonHandlerFactoryDefaultingToPlaceHolder {
|
||||
|
||||
public SmartphoneImeiJsonHandlerFactoryDefaultingToPlaceHolder() {
|
||||
super(new SmartphoneImeiJsonHandlerImpl(), SmartphoneImeiIdentifier.TYPE);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user