Commit 16f548d3dda5b943c4ccaf74d97468bbb567cf10

Authored by Andrii Shvaika
1 parent 78ae90da

Fix behavior for simple double values

@@ -229,7 +229,7 @@ public class JsonConverter { @@ -229,7 +229,7 @@ public class JsonConverter {
229 String valueAsString = value.getAsString(); 229 String valueAsString = value.getAsString();
230 KeyValueProto.Builder builder = KeyValueProto.newBuilder().setKey(key); 230 KeyValueProto.Builder builder = KeyValueProto.newBuilder().setKey(key);
231 var bd = new BigDecimal(valueAsString); 231 var bd = new BigDecimal(valueAsString);
232 - if (bd.stripTrailingZeros().scale() <= 0) { 232 + if (bd.stripTrailingZeros().scale() <= 0 && !isSimpleDouble(valueAsString)) {
233 try { 233 try {
234 return builder.setType(KeyValueType.LONG_V).setLongV(bd.longValueExact()).build(); 234 return builder.setType(KeyValueType.LONG_V).setLongV(bd.longValueExact()).build();
235 } catch (ArithmeticException e) { 235 } catch (ArithmeticException e) {
@@ -251,6 +251,10 @@ public class JsonConverter { @@ -251,6 +251,10 @@ public class JsonConverter {
251 251
252 } 252 }
253 253
  254 + private static boolean isSimpleDouble(String valueAsString) {
  255 + return valueAsString.contains(".") && !valueAsString.contains("E") && !valueAsString.contains("e");
  256 + }
  257 +
254 public static TransportProtos.ToServerRpcRequestMsg convertToServerRpcRequest(JsonElement json, int requestId) throws JsonSyntaxException { 258 public static TransportProtos.ToServerRpcRequestMsg convertToServerRpcRequest(JsonElement json, int requestId) throws JsonSyntaxException {
255 JsonObject object = json.getAsJsonObject(); 259 JsonObject object = json.getAsJsonObject();
256 return TransportProtos.ToServerRpcRequestMsg.newBuilder().setRequestId(requestId).setMethodName(object.get("method").getAsString()).setParams(GSON.toJson(object.get("params"))).build(); 260 return TransportProtos.ToServerRpcRequestMsg.newBuilder().setRequestId(requestId).setMethodName(object.get("method").getAsString()).setParams(GSON.toJson(object.get("params"))).build();
@@ -260,7 +264,7 @@ public class JsonConverter { @@ -260,7 +264,7 @@ public class JsonConverter {
260 String valueAsString = value.getAsString(); 264 String valueAsString = value.getAsString();
261 String key = valueEntry.getKey(); 265 String key = valueEntry.getKey();
262 var bd = new BigDecimal(valueAsString); 266 var bd = new BigDecimal(valueAsString);
263 - if (bd.stripTrailingZeros().scale() <= 0) { 267 + if (bd.stripTrailingZeros().scale() <= 0 && !isSimpleDouble(valueAsString)) {
264 try { 268 try {
265 result.add(new LongDataEntry(key, bd.longValueExact())); 269 result.add(new LongDataEntry(key, bd.longValueExact()));
266 } catch (ArithmeticException e) { 270 } catch (ArithmeticException e) {
@@ -54,6 +54,12 @@ public class JsonConverterTest { @@ -54,6 +54,12 @@ public class JsonConverterTest {
54 } 54 }
55 55
56 @Test 56 @Test
  57 + public void testParseAsDoubleWithZero() {
  58 + var result = JsonConverter.convertToTelemetry(JSON_PARSER.parse("{\"meterReadingDelta\": 42.0}"), 0L);
  59 + Assert.assertEquals(42.0, result.get(0L).get(0).getDoubleValue().get(), 0.0);
  60 + }
  61 +
  62 + @Test
57 public void testParseAsDouble() { 63 public void testParseAsDouble() {
58 var result = JsonConverter.convertToTelemetry(JSON_PARSER.parse("{\"meterReadingDelta\": 1.1}"), 0L); 64 var result = JsonConverter.convertToTelemetry(JSON_PARSER.parse("{\"meterReadingDelta\": 1.1}"), 0L);
59 Assert.assertEquals(1.1, result.get(0L).get(0).getDoubleValue().get(), 0.0); 65 Assert.assertEquals(1.1, result.get(0L).get(0).getDoubleValue().get(), 0.0);