mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-23 22:19:13 +00:00
add additional servlet to receive fixes in flat JSON serialization
This commit is contained in:
@@ -23,6 +23,15 @@
|
||||
<servlet-mapping>
|
||||
<servlet-name>RecordFixesPostServlet</servlet-name>
|
||||
<url-pattern>/recordFixes</url-pattern>
|
||||
</servlet-mapping>
|
||||
|
||||
<servlet>
|
||||
<servlet-name>RecordFixesFlatJsonPostServlet</servlet-name>
|
||||
<servlet-class>com.sap.sailing.domain.racelogtracking.servlet.RecordFixesFlatJsonPostServlet</servlet-class>
|
||||
</servlet>
|
||||
<servlet-mapping>
|
||||
<servlet-name>RecordFixesFlatJsonPostServlet</servlet-name>
|
||||
<url-pattern>/recordFixesFlatJson</url-pattern>
|
||||
</servlet-mapping>
|
||||
|
||||
</web-app>
|
||||
|
||||
+50
@@ -0,0 +1,50 @@
|
||||
package com.sap.sailing.domain.racelogtracking.servlet;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
import java.util.logging.Level;
|
||||
|
||||
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.impl.SmartphoneUUIDIdentifierImpl;
|
||||
import com.sap.sailing.domain.tracking.GPSFixMoving;
|
||||
import com.sap.sailing.server.gateway.AbstractJsonPostServlet;
|
||||
import com.sap.sailing.server.gateway.HttpExceptionWithMessage;
|
||||
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
|
||||
import com.sap.sailing.server.gateway.deserialization.impl.FlatSmartphoneUuidAndGPSFixMovingJsonDeserializer;
|
||||
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
|
||||
import com.sap.sse.common.Util.Pair;
|
||||
|
||||
public class RecordFixesFlatJsonPostServlet extends AbstractJsonPostServlet<Pair<UUID, GPSFixMoving>, Void> {
|
||||
private static final long serialVersionUID = -4618399862031700634L;
|
||||
|
||||
private final JsonDeserializer<Pair<UUID, GPSFixMoving>> deserializer =
|
||||
new FlatSmartphoneUuidAndGPSFixMovingJsonDeserializer();
|
||||
|
||||
@Override
|
||||
public JsonDeserializer<Pair<UUID, GPSFixMoving>> getRequestDeserializer() {
|
||||
return deserializer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public JsonSerializer<Void> getResponseSerializer() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Void process(Map<String, String> parameterValues, Pair<UUID, GPSFixMoving> domainObject)
|
||||
throws HttpExceptionWithMessage {
|
||||
DeviceIdentifier device = new SmartphoneUUIDIdentifierImpl(domainObject.getA());
|
||||
GPSFixMoving fix = domainObject.getB();
|
||||
|
||||
try {
|
||||
getService().getGPSFixStore().storeFix(device, fix);
|
||||
} catch (TransformationException | NoCorrespondingServiceRegisteredException e) {
|
||||
logger.log(Level.WARNING, "Could not load store fix from device " + device);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -2,6 +2,8 @@ package com.sap.sailing.domain.tracking.impl;
|
||||
|
||||
import com.sap.sailing.domain.common.Position;
|
||||
import com.sap.sailing.domain.common.TimePoint;
|
||||
import com.sap.sailing.domain.common.impl.DegreePosition;
|
||||
import com.sap.sailing.domain.common.impl.MillisecondsTimePoint;
|
||||
import com.sap.sailing.domain.tracking.GPSFix;
|
||||
|
||||
/**
|
||||
@@ -36,4 +38,8 @@ public class GPSFixImpl extends AbstractGPSFixImpl implements GPSFix {
|
||||
return getTimePoint()+": "+getPosition();
|
||||
}
|
||||
|
||||
|
||||
public static GPSFixImpl create(double lonDeg, double latDeg, long timeMillis) {
|
||||
return new GPSFixImpl(new DegreePosition(latDeg, lonDeg), new MillisecondsTimePoint(timeMillis));
|
||||
}
|
||||
}
|
||||
|
||||
+11
-1
@@ -3,6 +3,10 @@ package com.sap.sailing.domain.tracking.impl;
|
||||
import com.sap.sailing.domain.common.Position;
|
||||
import com.sap.sailing.domain.common.SpeedWithBearing;
|
||||
import com.sap.sailing.domain.common.TimePoint;
|
||||
import com.sap.sailing.domain.common.impl.DegreeBearingImpl;
|
||||
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.tracking.GPSFixMoving;
|
||||
|
||||
public class GPSFixMovingImpl extends GPSFixImpl implements GPSFixMoving {
|
||||
@@ -33,5 +37,11 @@ public class GPSFixMovingImpl extends GPSFixImpl implements GPSFixMoving {
|
||||
public boolean equals(Object other) {
|
||||
return super.equals(other) && other instanceof GPSFixMoving && getSpeed().equals(((GPSFixMoving) other).getSpeed());
|
||||
}
|
||||
|
||||
|
||||
public static GPSFixMovingImpl create(double lonDeg, double latDeg, long timeMillis,
|
||||
double speedInKnots, double bearingDeg) {
|
||||
return new GPSFixMovingImpl(new DegreePosition(latDeg, lonDeg),
|
||||
new MillisecondsTimePoint(timeMillis), new KnotSpeedWithBearingImpl(
|
||||
speedInKnots, new DegreeBearingImpl(bearingDeg)));
|
||||
}
|
||||
}
|
||||
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
package com.sap.sailing.server.gateway.deserialization.impl;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
import com.sap.sailing.domain.common.impl.MeterPerSecondSpeedImpl;
|
||||
import com.sap.sailing.domain.tracking.GPSFixMoving;
|
||||
import com.sap.sailing.domain.tracking.impl.GPSFixMovingImpl;
|
||||
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
|
||||
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
|
||||
import com.sap.sse.common.Util.Pair;
|
||||
|
||||
/**
|
||||
* Make serialization on the smartphone easier by providing a flat structure rather
|
||||
* than nested JSON documents.
|
||||
* @author Fredrik Teschke
|
||||
*
|
||||
*/
|
||||
public class FlatSmartphoneUuidAndGPSFixMovingJsonDeserializer implements JsonDeserializer<Pair<UUID, GPSFixMoving>> {
|
||||
public static final String DEVICE_UUID = "deviceUuid";
|
||||
public static final String LON_DEG = "lonDeg";
|
||||
public static final String LAT_DEG = "latDeg";
|
||||
public static final String TIME_MILLIS = "timeMillis";
|
||||
public static final String SPEED_M_PER_S = "speedMperS";
|
||||
public static final String BEARING_DEG = "bearingDeg";
|
||||
|
||||
@Override
|
||||
public Pair<UUID, GPSFixMoving> deserialize(JSONObject object) throws JsonDeserializationException {
|
||||
UUID device = UUID.fromString(object.get(DEVICE_UUID).toString());
|
||||
double lonDeg = Double.parseDouble(object.get(LON_DEG).toString());
|
||||
double latDeg = Double.parseDouble(object.get(LAT_DEG).toString());
|
||||
long timeMillis = Long.parseLong(object.get(TIME_MILLIS).toString());
|
||||
double speedMperS = Double.parseDouble(object.get(SPEED_M_PER_S).toString());
|
||||
double speedKnots = new MeterPerSecondSpeedImpl(speedMperS).getKnots();
|
||||
double bearingDeg = Double.parseDouble(object.get(BEARING_DEG).toString());
|
||||
GPSFixMoving fix = GPSFixMovingImpl.create(lonDeg, latDeg, timeMillis, speedKnots, bearingDeg);
|
||||
return new Pair<UUID, GPSFixMoving>(device, fix);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user