From 5e78d892c20f426fa5d06d26b14a4a7f4a69710b Mon Sep 17 00:00:00 2001 From: Georg Herdt Date: Tue, 2 Jun 2020 19:28:21 +0200 Subject: [PATCH] implement poc bug5293 --- ...honeUuidAndGPSFixMovingJsonSerializer.java | 1 + ...idAndGPSFixMovingJsonDeserializerTest.java | 11 +++++++-- ...neUuidAndGPSFixMovingJsonDeserializer.java | 23 ++++++++++++++++++- 3 files changed, 32 insertions(+), 3 deletions(-) diff --git a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/tracking/impl/FlatSmartphoneUuidAndGPSFixMovingJsonSerializer.java b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/tracking/impl/FlatSmartphoneUuidAndGPSFixMovingJsonSerializer.java index 18b9dbf7a11..bd99bf9c5e8 100755 --- a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/tracking/impl/FlatSmartphoneUuidAndGPSFixMovingJsonSerializer.java +++ b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/tracking/impl/FlatSmartphoneUuidAndGPSFixMovingJsonSerializer.java @@ -16,6 +16,7 @@ public class FlatSmartphoneUuidAndGPSFixMovingJsonSerializer { public static final String LON_DEG = "longitude"; public static final String LAT_DEG = "latitude"; public static final String TIME_MILLIS = "timestamp"; + public static final String TIME_ISO = "timestamp-iso"; public static final String SPEED_M_PER_S = "speed"; public static final String BEARING_DEG = "course"; } diff --git a/java/com.sap.sailing.server.gateway.serialization.test/src/com/sap/sailing/server/gateway/serialization/test/FlatSmartphoneUuidAndGPSFixMovingJsonDeserializerTest.java b/java/com.sap.sailing.server.gateway.serialization.test/src/com/sap/sailing/server/gateway/serialization/test/FlatSmartphoneUuidAndGPSFixMovingJsonDeserializerTest.java index f7e8f8fc5ab..a9e5b4cbb5e 100644 --- a/java/com.sap.sailing.server.gateway.serialization.test/src/com/sap/sailing/server/gateway/serialization/test/FlatSmartphoneUuidAndGPSFixMovingJsonDeserializerTest.java +++ b/java/com.sap.sailing.server.gateway.serialization.test/src/com/sap/sailing/server/gateway/serialization/test/FlatSmartphoneUuidAndGPSFixMovingJsonDeserializerTest.java @@ -36,7 +36,14 @@ public class FlatSmartphoneUuidAndGPSFixMovingJsonDeserializerTest { " \"longitude\" : 8.03456,\n" + " \"speed\" : 5.1,\n" + " \"course\" : 14.2,\n" + - " }\n" + + " },\n" + + " {\n" + + " \"timestamp-iso\" : \"2004-06-14T23:34:30Z\",\n" + + " \"latitude\" : -67.672456,\n" + + " \"longitude\" : -2.03456,\n" + + " \"speed\" : 19.3,\n" + + " \"course\" : 359.99,\n" + + " }\n" + " ]\n" + "}"; JsonDeserializer>> deserializer = @@ -45,6 +52,6 @@ public class FlatSmartphoneUuidAndGPSFixMovingJsonDeserializerTest { Pair> result = deserializer.deserialize(Helpers.toJSONObjectSafe(JSONValue.parseWithException(json))); assertThat("uuid", result.getA(), equalTo(UUID.fromString("af855a56-9726-4a9c-a77e-da955bd289bf"))); - assertThat("number of fixes", result.getB().size(), equalTo(2)); + assertThat("number of fixes", result.getB().size(), equalTo(3)); } } diff --git a/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/deserialization/impl/FlatSmartphoneUuidAndGPSFixMovingJsonDeserializer.java b/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/deserialization/impl/FlatSmartphoneUuidAndGPSFixMovingJsonDeserializer.java index 5ab650d5cc5..be94c988a39 100644 --- a/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/deserialization/impl/FlatSmartphoneUuidAndGPSFixMovingJsonDeserializer.java +++ b/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/deserialization/impl/FlatSmartphoneUuidAndGPSFixMovingJsonDeserializer.java @@ -1,5 +1,7 @@ package com.sap.sailing.server.gateway.deserialization.impl; +import java.time.OffsetDateTime; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; import java.util.UUID; @@ -34,7 +36,7 @@ public class FlatSmartphoneUuidAndGPSFixMovingJsonDeserializer implements JSONObject fixObject = Helpers.toJSONObjectSafe(jsonFixes.get(i)); double lonDeg = Double.parseDouble(fixObject.get(FlatSmartphoneUuidAndGPSFixMovingJsonSerializer.LON_DEG).toString()); double latDeg = Double.parseDouble(fixObject.get(FlatSmartphoneUuidAndGPSFixMovingJsonSerializer.LAT_DEG).toString()); - long timeMillis = Long.parseLong(fixObject.get(FlatSmartphoneUuidAndGPSFixMovingJsonSerializer.TIME_MILLIS).toString()); + long timeMillis = deserializeTimestamp(fixObject); double speedMperS = Double.parseDouble(fixObject.get(FlatSmartphoneUuidAndGPSFixMovingJsonSerializer.SPEED_M_PER_S).toString()); double speedKnots = new MeterPerSecondSpeedImpl(speedMperS).getKnots(); double bearingDeg = Double.parseDouble(fixObject.get(FlatSmartphoneUuidAndGPSFixMovingJsonSerializer.BEARING_DEG).toString()); @@ -44,4 +46,23 @@ public class FlatSmartphoneUuidAndGPSFixMovingJsonDeserializer implements return new Pair>(device, fixes); } + + private long deserializeTimestamp(JSONObject fixObject) throws JsonDeserializationException { + long timeMillis; + if (fixObject.get(FlatSmartphoneUuidAndGPSFixMovingJsonSerializer.TIME_MILLIS) != null) { + timeMillis = Long.parseLong( + fixObject.get(FlatSmartphoneUuidAndGPSFixMovingJsonSerializer.TIME_MILLIS).toString()); + } else if (fixObject.get(FlatSmartphoneUuidAndGPSFixMovingJsonSerializer.TIME_ISO) != null) { + String strIsoTimestamp = fixObject.get(FlatSmartphoneUuidAndGPSFixMovingJsonSerializer.TIME_ISO) + .toString(); + DateTimeFormatter timeFormatter = DateTimeFormatter.ISO_DATE_TIME; + OffsetDateTime offsetDateTime = OffsetDateTime.parse(strIsoTimestamp, timeFormatter); + timeMillis = offsetDateTime.toInstant().toEpochMilli(); + } else { + throw new JsonDeserializationException("no timestamp field provided. Please provide one of these fields: " + + FlatSmartphoneUuidAndGPSFixMovingJsonSerializer.TIME_MILLIS + ", " + + FlatSmartphoneUuidAndGPSFixMovingJsonSerializer.TIME_ISO); + } + return timeMillis; + } }