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

This commit is contained in:
Andrew Shvayka 2018-11-01 18:02:27 +02:00
commit dcba4f6b58

View File

@ -22,6 +22,7 @@ import com.google.gson.JsonObject;
import com.google.gson.JsonParser; import com.google.gson.JsonParser;
import com.google.gson.JsonPrimitive; import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSyntaxException; import com.google.gson.JsonSyntaxException;
import org.apache.commons.lang3.math.NumberUtils;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import org.thingsboard.server.common.data.kv.AttributeKey; import org.thingsboard.server.common.data.kv.AttributeKey;
import org.thingsboard.server.common.data.kv.AttributeKvEntry; import org.thingsboard.server.common.data.kv.AttributeKvEntry;
@ -128,24 +129,22 @@ public class JsonConverter {
if (element.isJsonPrimitive()) { if (element.isJsonPrimitive()) {
JsonPrimitive value = element.getAsJsonPrimitive(); JsonPrimitive value = element.getAsJsonPrimitive();
if (value.isString()) { if (value.isString()) {
result.add(KeyValueProto.newBuilder().setKey(valueEntry.getKey()).setType(KeyValueType.STRING_V) if(NumberUtils.isParsable(value.getAsString())) {
.setStringV(value.getAsString()).build()); 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()) { } else if (value.isBoolean()) {
result.add(KeyValueProto.newBuilder().setKey(valueEntry.getKey()).setType(KeyValueType.BOOLEAN_V) result.add(KeyValueProto.newBuilder().setKey(valueEntry.getKey()).setType(KeyValueType.BOOLEAN_V)
.setBoolV(value.getAsBoolean()).build()); .setBoolV(value.getAsBoolean()).build());
} else if (value.isNumber()) { } else if (value.isNumber()) {
if (value.getAsString().contains(".")) { result.add(buildNumericKeyValueProto(value, valueEntry.getKey()));
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!");
}
}
} else { } else {
throw new JsonSyntaxException(CAN_T_PARSE_VALUE + value); throw new JsonSyntaxException(CAN_T_PARSE_VALUE + value);
} }
@ -156,6 +155,24 @@ public class JsonConverter {
return result; 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 { public static TransportProtos.ToServerRpcRequestMsg convertToServerRpcRequest(JsonElement json, int requestId) throws JsonSyntaxException {
JsonObject object = json.getAsJsonObject(); JsonObject object = json.getAsJsonObject();
return TransportProtos.ToServerRpcRequestMsg.newBuilder().setRequestId(requestId).setMethodName(object.get("method").getAsString()).setParams(GSON.toJson(object.get("params"))).build(); 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()) { if (element.isJsonPrimitive()) {
JsonPrimitive value = element.getAsJsonPrimitive(); JsonPrimitive value = element.getAsJsonPrimitive();
if (value.isString()) { 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()) { } else if (value.isBoolean()) {
result.add(new BooleanDataEntry(valueEntry.getKey(), value.getAsBoolean())); result.add(new BooleanDataEntry(valueEntry.getKey(), value.getAsBoolean()));
} else if (value.isNumber()) { } else if (value.isNumber()) {