Commit dcba4f6b582d1902740d506d92e178bb8c48544f

Authored by Andrew Shvayka
2 parents 5d5100ef 62db6001

Merge branch 'master' of github.com:thingsboard/thingsboard

@@ -22,6 +22,7 @@ import com.google.gson.JsonObject; @@ -22,6 +22,7 @@ import com.google.gson.JsonObject;
22 import com.google.gson.JsonParser; 22 import com.google.gson.JsonParser;
23 import com.google.gson.JsonPrimitive; 23 import com.google.gson.JsonPrimitive;
24 import com.google.gson.JsonSyntaxException; 24 import com.google.gson.JsonSyntaxException;
  25 +import org.apache.commons.lang3.math.NumberUtils;
25 import org.springframework.util.StringUtils; 26 import org.springframework.util.StringUtils;
26 import org.thingsboard.server.common.data.kv.AttributeKey; 27 import org.thingsboard.server.common.data.kv.AttributeKey;
27 import org.thingsboard.server.common.data.kv.AttributeKvEntry; 28 import org.thingsboard.server.common.data.kv.AttributeKvEntry;
@@ -128,24 +129,22 @@ public class JsonConverter { @@ -128,24 +129,22 @@ public class JsonConverter {
128 if (element.isJsonPrimitive()) { 129 if (element.isJsonPrimitive()) {
129 JsonPrimitive value = element.getAsJsonPrimitive(); 130 JsonPrimitive value = element.getAsJsonPrimitive();
130 if (value.isString()) { 131 if (value.isString()) {
131 - result.add(KeyValueProto.newBuilder().setKey(valueEntry.getKey()).setType(KeyValueType.STRING_V)  
132 - .setStringV(value.getAsString()).build()); 132 + if(NumberUtils.isParsable(value.getAsString())) {
  133 + try {
  134 + result.add(buildNumericKeyValueProto(value, valueEntry.getKey()));
  135 + } catch (Throwable th) {
  136 + result.add(KeyValueProto.newBuilder().setKey(valueEntry.getKey()).setType(KeyValueType.STRING_V)
  137 + .setStringV(value.getAsString()).build());
  138 + }
  139 + } else {
  140 + result.add(KeyValueProto.newBuilder().setKey(valueEntry.getKey()).setType(KeyValueType.STRING_V)
  141 + .setStringV(value.getAsString()).build());
  142 + }
133 } else if (value.isBoolean()) { 143 } else if (value.isBoolean()) {
134 result.add(KeyValueProto.newBuilder().setKey(valueEntry.getKey()).setType(KeyValueType.BOOLEAN_V) 144 result.add(KeyValueProto.newBuilder().setKey(valueEntry.getKey()).setType(KeyValueType.BOOLEAN_V)
135 .setBoolV(value.getAsBoolean()).build()); 145 .setBoolV(value.getAsBoolean()).build());
136 } else if (value.isNumber()) { 146 } else if (value.isNumber()) {
137 - if (value.getAsString().contains(".")) {  
138 - result.add(KeyValueProto.newBuilder().setKey(valueEntry.getKey()).setType(KeyValueType.DOUBLE_V)  
139 - .setDoubleV(value.getAsDouble()).build());  
140 - } else {  
141 - try {  
142 - long longValue = Long.parseLong(value.getAsString());  
143 - result.add(KeyValueProto.newBuilder().setKey(valueEntry.getKey()).setType(KeyValueType.LONG_V)  
144 - .setLongV(longValue).build());  
145 - } catch (NumberFormatException e) {  
146 - throw new JsonSyntaxException("Big integer values are not supported!");  
147 - }  
148 - } 147 + result.add(buildNumericKeyValueProto(value, valueEntry.getKey()));
149 } else { 148 } else {
150 throw new JsonSyntaxException(CAN_T_PARSE_VALUE + value); 149 throw new JsonSyntaxException(CAN_T_PARSE_VALUE + value);
151 } 150 }
@@ -156,6 +155,24 @@ public class JsonConverter { @@ -156,6 +155,24 @@ public class JsonConverter {
156 return result; 155 return result;
157 } 156 }
158 157
  158 + private static KeyValueProto buildNumericKeyValueProto(JsonPrimitive value, String key) {
  159 + if (value.getAsString().contains(".")) {
  160 + return KeyValueProto.newBuilder()
  161 + .setKey(key)
  162 + .setType(KeyValueType.DOUBLE_V)
  163 + .setDoubleV(value.getAsDouble())
  164 + .build();
  165 + } else {
  166 + try {
  167 + long longValue = Long.parseLong(value.getAsString());
  168 + return KeyValueProto.newBuilder().setKey(key).setType(KeyValueType.LONG_V)
  169 + .setLongV(longValue).build();
  170 + } catch (NumberFormatException e) {
  171 + throw new JsonSyntaxException("Big integer values are not supported!");
  172 + }
  173 + }
  174 + }
  175 +
159 public static TransportProtos.ToServerRpcRequestMsg convertToServerRpcRequest(JsonElement json, int requestId) throws JsonSyntaxException { 176 public static TransportProtos.ToServerRpcRequestMsg convertToServerRpcRequest(JsonElement json, int requestId) throws JsonSyntaxException {
160 JsonObject object = json.getAsJsonObject(); 177 JsonObject object = json.getAsJsonObject();
161 return TransportProtos.ToServerRpcRequestMsg.newBuilder().setRequestId(requestId).setMethodName(object.get("method").getAsString()).setParams(GSON.toJson(object.get("params"))).build(); 178 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 { @@ -370,7 +387,15 @@ public class JsonConverter {
370 if (element.isJsonPrimitive()) { 387 if (element.isJsonPrimitive()) {
371 JsonPrimitive value = element.getAsJsonPrimitive(); 388 JsonPrimitive value = element.getAsJsonPrimitive();
372 if (value.isString()) { 389 if (value.isString()) {
373 - result.add(new StringDataEntry(valueEntry.getKey(), value.getAsString())); 390 + if(NumberUtils.isParsable(value.getAsString())) {
  391 + try {
  392 + parseNumericValue(result, valueEntry, value);
  393 + } catch (Throwable th) {
  394 + result.add(new StringDataEntry(valueEntry.getKey(), value.getAsString()));
  395 + }
  396 + } else {
  397 + result.add(new StringDataEntry(valueEntry.getKey(), value.getAsString()));
  398 + }
374 } else if (value.isBoolean()) { 399 } else if (value.isBoolean()) {
375 result.add(new BooleanDataEntry(valueEntry.getKey(), value.getAsBoolean())); 400 result.add(new BooleanDataEntry(valueEntry.getKey(), value.getAsBoolean()));
376 } else if (value.isNumber()) { 401 } else if (value.isNumber()) {