|
|
|
@ -22,6 +22,7 @@ import com.google.gson.JsonObject; |
|
|
|
import com.google.gson.JsonParser; |
|
|
|
import com.google.gson.JsonPrimitive; |
|
|
|
import com.google.gson.JsonSyntaxException; |
|
|
|
import org.apache.commons.lang3.math.NumberUtils; |
|
|
|
import org.springframework.util.StringUtils; |
|
|
|
import org.thingsboard.server.common.data.kv.AttributeKey; |
|
|
|
import org.thingsboard.server.common.data.kv.AttributeKvEntry; |
|
|
|
@ -128,24 +129,22 @@ public class JsonConverter { |
|
|
|
if (element.isJsonPrimitive()) { |
|
|
|
JsonPrimitive value = element.getAsJsonPrimitive(); |
|
|
|
if (value.isString()) { |
|
|
|
result.add(KeyValueProto.newBuilder().setKey(valueEntry.getKey()).setType(KeyValueType.STRING_V) |
|
|
|
.setStringV(value.getAsString()).build()); |
|
|
|
if(NumberUtils.isParsable(value.getAsString())) { |
|
|
|
try { |
|
|
|
result.add(buildNumericKeyValueProto(value, valueEntry.getKey())); |
|
|
|
} catch (Throwable th) { |
|
|
|
result.add(KeyValueProto.newBuilder().setKey(valueEntry.getKey()).setType(KeyValueType.STRING_V) |
|
|
|
.setStringV(value.getAsString()).build()); |
|
|
|
} |
|
|
|
} else { |
|
|
|
result.add(KeyValueProto.newBuilder().setKey(valueEntry.getKey()).setType(KeyValueType.STRING_V) |
|
|
|
.setStringV(value.getAsString()).build()); |
|
|
|
} |
|
|
|
} else if (value.isBoolean()) { |
|
|
|
result.add(KeyValueProto.newBuilder().setKey(valueEntry.getKey()).setType(KeyValueType.BOOLEAN_V) |
|
|
|
.setBoolV(value.getAsBoolean()).build()); |
|
|
|
} else if (value.isNumber()) { |
|
|
|
if (value.getAsString().contains(".")) { |
|
|
|
result.add(KeyValueProto.newBuilder().setKey(valueEntry.getKey()).setType(KeyValueType.DOUBLE_V) |
|
|
|
.setDoubleV(value.getAsDouble()).build()); |
|
|
|
} else { |
|
|
|
try { |
|
|
|
long longValue = Long.parseLong(value.getAsString()); |
|
|
|
result.add(KeyValueProto.newBuilder().setKey(valueEntry.getKey()).setType(KeyValueType.LONG_V) |
|
|
|
.setLongV(longValue).build()); |
|
|
|
} catch (NumberFormatException e) { |
|
|
|
throw new JsonSyntaxException("Big integer values are not supported!"); |
|
|
|
} |
|
|
|
} |
|
|
|
result.add(buildNumericKeyValueProto(value, valueEntry.getKey())); |
|
|
|
} else { |
|
|
|
throw new JsonSyntaxException(CAN_T_PARSE_VALUE + value); |
|
|
|
} |
|
|
|
@ -156,6 +155,24 @@ public class JsonConverter { |
|
|
|
return result; |
|
|
|
} |
|
|
|
|
|
|
|
private static KeyValueProto buildNumericKeyValueProto(JsonPrimitive value, String key) { |
|
|
|
if (value.getAsString().contains(".")) { |
|
|
|
return KeyValueProto.newBuilder() |
|
|
|
.setKey(key) |
|
|
|
.setType(KeyValueType.DOUBLE_V) |
|
|
|
.setDoubleV(value.getAsDouble()) |
|
|
|
.build(); |
|
|
|
} else { |
|
|
|
try { |
|
|
|
long longValue = Long.parseLong(value.getAsString()); |
|
|
|
return KeyValueProto.newBuilder().setKey(key).setType(KeyValueType.LONG_V) |
|
|
|
.setLongV(longValue).build(); |
|
|
|
} catch (NumberFormatException e) { |
|
|
|
throw new JsonSyntaxException("Big integer values are not supported!"); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public static TransportProtos.ToServerRpcRequestMsg convertToServerRpcRequest(JsonElement json, int requestId) throws JsonSyntaxException { |
|
|
|
JsonObject object = json.getAsJsonObject(); |
|
|
|
return TransportProtos.ToServerRpcRequestMsg.newBuilder().setRequestId(requestId).setMethodName(object.get("method").getAsString()).setParams(GSON.toJson(object.get("params"))).build(); |
|
|
|
@ -370,7 +387,15 @@ public class JsonConverter { |
|
|
|
if (element.isJsonPrimitive()) { |
|
|
|
JsonPrimitive value = element.getAsJsonPrimitive(); |
|
|
|
if (value.isString()) { |
|
|
|
result.add(new StringDataEntry(valueEntry.getKey(), value.getAsString())); |
|
|
|
if(NumberUtils.isParsable(value.getAsString())) { |
|
|
|
try { |
|
|
|
parseNumericValue(result, valueEntry, value); |
|
|
|
} catch (Throwable th) { |
|
|
|
result.add(new StringDataEntry(valueEntry.getKey(), value.getAsString())); |
|
|
|
} |
|
|
|
} else { |
|
|
|
result.add(new StringDataEntry(valueEntry.getKey(), value.getAsString())); |
|
|
|
} |
|
|
|
} else if (value.isBoolean()) { |
|
|
|
result.add(new BooleanDataEntry(valueEntry.getKey(), value.getAsBoolean())); |
|
|
|
} else if (value.isNumber()) { |
|
|
|
|