From 4de258f2aed48e4e6df6191a0b2bfa6c71810d2a Mon Sep 17 00:00:00 2001 From: YevhenBondarenko Date: Tue, 29 Dec 2020 20:03:33 +0200 Subject: [PATCH 01/11] removed ServiceId from kafka consumer groupId --- .../queue/provider/KafkaMonolithQueueFactory.java | 12 ++++++------ .../queue/provider/KafkaTbCoreQueueFactory.java | 8 ++++---- .../provider/KafkaTbRuleEngineQueueFactory.java | 6 +++--- .../queue/provider/KafkaTbTransportQueueFactory.java | 4 ++-- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/KafkaMonolithQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/KafkaMonolithQueueFactory.java index 538d91aa0f..68a3922de0 100644 --- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/KafkaMonolithQueueFactory.java +++ b/common/queue/src/main/java/org/thingsboard/server/queue/provider/KafkaMonolithQueueFactory.java @@ -153,7 +153,7 @@ public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngi consumerBuilder.settings(kafkaSettings); consumerBuilder.topic(ruleEngineSettings.getTopic()); consumerBuilder.clientId("re-" + queueName + "-consumer-" + serviceInfoProvider.getServiceId()); - consumerBuilder.groupId("re-" + queueName + "-consumer-" + serviceInfoProvider.getServiceId()); + consumerBuilder.groupId("re-" + queueName + "-consumer"); consumerBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineMsg.parseFrom(msg.getData()), msg.getHeaders())); consumerBuilder.admin(ruleEngineAdmin); return consumerBuilder.build(); @@ -165,7 +165,7 @@ public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngi consumerBuilder.settings(kafkaSettings); consumerBuilder.topic(partitionService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, serviceInfoProvider.getServiceId()).getFullTopicName()); consumerBuilder.clientId("monolith-rule-engine-notifications-consumer-" + serviceInfoProvider.getServiceId()); - consumerBuilder.groupId("monolith-rule-engine-notifications-consumer-" + serviceInfoProvider.getServiceId()); + consumerBuilder.groupId("monolith-rule-engine-notifications-consumer"); consumerBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); consumerBuilder.admin(notificationAdmin); return consumerBuilder.build(); @@ -177,7 +177,7 @@ public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngi consumerBuilder.settings(kafkaSettings); consumerBuilder.topic(coreSettings.getTopic()); consumerBuilder.clientId("monolith-core-consumer-" + serviceInfoProvider.getServiceId()); - consumerBuilder.groupId("monolith-core-consumer-" + serviceInfoProvider.getServiceId()); + consumerBuilder.groupId("monolith-core-consumer"); consumerBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreMsg.parseFrom(msg.getData()), msg.getHeaders())); consumerBuilder.admin(coreAdmin); return consumerBuilder.build(); @@ -189,7 +189,7 @@ public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngi consumerBuilder.settings(kafkaSettings); consumerBuilder.topic(partitionService.getNotificationsTopic(ServiceType.TB_CORE, serviceInfoProvider.getServiceId()).getFullTopicName()); consumerBuilder.clientId("monolith-core-notifications-consumer-" + serviceInfoProvider.getServiceId()); - consumerBuilder.groupId("monolith-core-notifications-consumer-" + serviceInfoProvider.getServiceId()); + consumerBuilder.groupId("monolith-core-notifications-consumer"); consumerBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); consumerBuilder.admin(notificationAdmin); return consumerBuilder.build(); @@ -230,7 +230,7 @@ public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngi responseBuilder.settings(kafkaSettings); responseBuilder.topic(jsInvokeSettings.getResponseTopic() + "." + serviceInfoProvider.getServiceId()); responseBuilder.clientId("js-" + serviceInfoProvider.getServiceId()); - responseBuilder.groupId("rule-engine-node-" + serviceInfoProvider.getServiceId()); + responseBuilder.groupId("rule-engine-node"); responseBuilder.decoder(msg -> { JsInvokeProtos.RemoteJsResponse.Builder builder = JsInvokeProtos.RemoteJsResponse.newBuilder(); JsonFormat.parser().ignoringUnknownFields().merge(new String(msg.getData(), StandardCharsets.UTF_8), builder); @@ -256,7 +256,7 @@ public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngi consumerBuilder.settings(kafkaSettings); consumerBuilder.topic(coreSettings.getUsageStatsTopic()); consumerBuilder.clientId("monolith-us-consumer-" + serviceInfoProvider.getServiceId()); - consumerBuilder.groupId("monolith-us-consumer-" + serviceInfoProvider.getServiceId()); + consumerBuilder.groupId("monolith-us-consumer"); consumerBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), ToUsageStatsServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); consumerBuilder.admin(coreAdmin); return consumerBuilder.build(); diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/KafkaTbCoreQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/KafkaTbCoreQueueFactory.java index 5e1b398e91..29fbfd2ae6 100644 --- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/KafkaTbCoreQueueFactory.java +++ b/common/queue/src/main/java/org/thingsboard/server/queue/provider/KafkaTbCoreQueueFactory.java @@ -147,7 +147,7 @@ public class KafkaTbCoreQueueFactory implements TbCoreQueueFactory { consumerBuilder.settings(kafkaSettings); consumerBuilder.topic(coreSettings.getTopic()); consumerBuilder.clientId("tb-core-consumer-" + serviceInfoProvider.getServiceId()); - consumerBuilder.groupId("tb-core-node-" + serviceInfoProvider.getServiceId()); + consumerBuilder.groupId("tb-core-node"); consumerBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreMsg.parseFrom(msg.getData()), msg.getHeaders())); consumerBuilder.admin(coreAdmin); return consumerBuilder.build(); @@ -159,7 +159,7 @@ public class KafkaTbCoreQueueFactory implements TbCoreQueueFactory { consumerBuilder.settings(kafkaSettings); consumerBuilder.topic(partitionService.getNotificationsTopic(ServiceType.TB_CORE, serviceInfoProvider.getServiceId()).getFullTopicName()); consumerBuilder.clientId("tb-core-notifications-consumer-" + serviceInfoProvider.getServiceId()); - consumerBuilder.groupId("tb-core-notifications-node-" + serviceInfoProvider.getServiceId()); + consumerBuilder.groupId("tb-core-notifications-node"); consumerBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); consumerBuilder.admin(notificationAdmin); return consumerBuilder.build(); @@ -200,7 +200,7 @@ public class KafkaTbCoreQueueFactory implements TbCoreQueueFactory { responseBuilder.settings(kafkaSettings); responseBuilder.topic(jsInvokeSettings.getResponseTopic() + "." + serviceInfoProvider.getServiceId()); responseBuilder.clientId("js-" + serviceInfoProvider.getServiceId()); - responseBuilder.groupId("rule-engine-node-" + serviceInfoProvider.getServiceId()); + responseBuilder.groupId("rule-engine-node"); responseBuilder.decoder(msg -> { JsInvokeProtos.RemoteJsResponse.Builder builder = JsInvokeProtos.RemoteJsResponse.newBuilder(); JsonFormat.parser().ignoringUnknownFields().merge(new String(msg.getData(), StandardCharsets.UTF_8), builder); @@ -226,7 +226,7 @@ public class KafkaTbCoreQueueFactory implements TbCoreQueueFactory { consumerBuilder.settings(kafkaSettings); consumerBuilder.topic(coreSettings.getUsageStatsTopic()); consumerBuilder.clientId("tb-core-us-consumer-" + serviceInfoProvider.getServiceId()); - consumerBuilder.groupId("tb-core-us-consumer-" + serviceInfoProvider.getServiceId()); + consumerBuilder.groupId("tb-core-us-consumer"); consumerBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), ToUsageStatsServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); consumerBuilder.admin(coreAdmin); return consumerBuilder.build(); diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/KafkaTbRuleEngineQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/KafkaTbRuleEngineQueueFactory.java index 118f0f3316..5df727f06f 100644 --- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/KafkaTbRuleEngineQueueFactory.java +++ b/common/queue/src/main/java/org/thingsboard/server/queue/provider/KafkaTbRuleEngineQueueFactory.java @@ -142,7 +142,7 @@ public class KafkaTbRuleEngineQueueFactory implements TbRuleEngineQueueFactory { consumerBuilder.settings(kafkaSettings); consumerBuilder.topic(ruleEngineSettings.getTopic()); consumerBuilder.clientId("re-" + queueName + "-consumer-" + serviceInfoProvider.getServiceId()); - consumerBuilder.groupId("re-" + queueName + "-consumer-" + serviceInfoProvider.getServiceId()); + consumerBuilder.groupId("re-" + queueName + "-consumer"); consumerBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineMsg.parseFrom(msg.getData()), msg.getHeaders())); consumerBuilder.admin(ruleEngineAdmin); return consumerBuilder.build(); @@ -154,7 +154,7 @@ public class KafkaTbRuleEngineQueueFactory implements TbRuleEngineQueueFactory { consumerBuilder.settings(kafkaSettings); consumerBuilder.topic(partitionService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, serviceInfoProvider.getServiceId()).getFullTopicName()); consumerBuilder.clientId("tb-rule-engine-notifications-consumer-" + serviceInfoProvider.getServiceId()); - consumerBuilder.groupId("tb-rule-engine-notifications-node-" + serviceInfoProvider.getServiceId()); + consumerBuilder.groupId("tb-rule-engine-notifications-node"); consumerBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); consumerBuilder.admin(notificationAdmin); return consumerBuilder.build(); @@ -173,7 +173,7 @@ public class KafkaTbRuleEngineQueueFactory implements TbRuleEngineQueueFactory { responseBuilder.settings(kafkaSettings); responseBuilder.topic(jsInvokeSettings.getResponseTopic() + "." + serviceInfoProvider.getServiceId()); responseBuilder.clientId("js-" + serviceInfoProvider.getServiceId()); - responseBuilder.groupId("rule-engine-node-" + serviceInfoProvider.getServiceId()); + responseBuilder.groupId("rule-engine-node"); responseBuilder.decoder(msg -> { JsInvokeProtos.RemoteJsResponse.Builder builder = JsInvokeProtos.RemoteJsResponse.newBuilder(); JsonFormat.parser().ignoringUnknownFields().merge(new String(msg.getData(), StandardCharsets.UTF_8), builder); diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/KafkaTbTransportQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/KafkaTbTransportQueueFactory.java index 7961bb97bb..f3c294d5b1 100644 --- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/KafkaTbTransportQueueFactory.java +++ b/common/queue/src/main/java/org/thingsboard/server/queue/provider/KafkaTbTransportQueueFactory.java @@ -92,7 +92,7 @@ public class KafkaTbTransportQueueFactory implements TbTransportQueueFactory { responseBuilder.settings(kafkaSettings); responseBuilder.topic(transportApiSettings.getResponsesTopic() + "." + serviceInfoProvider.getServiceId()); responseBuilder.clientId("transport-api-response-" + serviceInfoProvider.getServiceId()); - responseBuilder.groupId("transport-node-" + serviceInfoProvider.getServiceId()); + responseBuilder.groupId("transport-node"); responseBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportApiResponseMsg.parseFrom(msg.getData()), msg.getHeaders())); responseBuilder.admin(transportApiAdmin); @@ -133,7 +133,7 @@ public class KafkaTbTransportQueueFactory implements TbTransportQueueFactory { responseBuilder.settings(kafkaSettings); responseBuilder.topic(transportNotificationSettings.getNotificationsTopic() + "." + serviceInfoProvider.getServiceId()); responseBuilder.clientId("transport-api-notifications-" + serviceInfoProvider.getServiceId()); - responseBuilder.groupId("transport-node-" + serviceInfoProvider.getServiceId()); + responseBuilder.groupId("transport-node"); responseBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), ToTransportMsg.parseFrom(msg.getData()), msg.getHeaders())); responseBuilder.admin(notificationAdmin); return responseBuilder.build(); From 1b905ef7270ca73e328e7d7ed936c489a0c69d3a Mon Sep 17 00:00:00 2001 From: YevhenBondarenko Date: Wed, 30 Dec 2020 15:13:23 +0200 Subject: [PATCH 02/11] refactored --- .../server/queue/provider/KafkaMonolithQueueFactory.java | 6 +++--- .../server/queue/provider/KafkaTbCoreQueueFactory.java | 4 ++-- .../queue/provider/KafkaTbRuleEngineQueueFactory.java | 4 ++-- .../server/queue/provider/KafkaTbTransportQueueFactory.java | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/KafkaMonolithQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/KafkaMonolithQueueFactory.java index 68a3922de0..a138f8c40f 100644 --- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/KafkaMonolithQueueFactory.java +++ b/common/queue/src/main/java/org/thingsboard/server/queue/provider/KafkaMonolithQueueFactory.java @@ -165,7 +165,7 @@ public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngi consumerBuilder.settings(kafkaSettings); consumerBuilder.topic(partitionService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, serviceInfoProvider.getServiceId()).getFullTopicName()); consumerBuilder.clientId("monolith-rule-engine-notifications-consumer-" + serviceInfoProvider.getServiceId()); - consumerBuilder.groupId("monolith-rule-engine-notifications-consumer"); + consumerBuilder.groupId("monolith-rule-engine-notifications-consumer-" + serviceInfoProvider.getServiceId()); consumerBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); consumerBuilder.admin(notificationAdmin); return consumerBuilder.build(); @@ -189,7 +189,7 @@ public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngi consumerBuilder.settings(kafkaSettings); consumerBuilder.topic(partitionService.getNotificationsTopic(ServiceType.TB_CORE, serviceInfoProvider.getServiceId()).getFullTopicName()); consumerBuilder.clientId("monolith-core-notifications-consumer-" + serviceInfoProvider.getServiceId()); - consumerBuilder.groupId("monolith-core-notifications-consumer"); + consumerBuilder.groupId("monolith-core-notifications-consumer-" + serviceInfoProvider.getServiceId()); consumerBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); consumerBuilder.admin(notificationAdmin); return consumerBuilder.build(); @@ -230,7 +230,7 @@ public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngi responseBuilder.settings(kafkaSettings); responseBuilder.topic(jsInvokeSettings.getResponseTopic() + "." + serviceInfoProvider.getServiceId()); responseBuilder.clientId("js-" + serviceInfoProvider.getServiceId()); - responseBuilder.groupId("rule-engine-node"); + responseBuilder.groupId("rule-engine-node-" + serviceInfoProvider.getServiceId()); responseBuilder.decoder(msg -> { JsInvokeProtos.RemoteJsResponse.Builder builder = JsInvokeProtos.RemoteJsResponse.newBuilder(); JsonFormat.parser().ignoringUnknownFields().merge(new String(msg.getData(), StandardCharsets.UTF_8), builder); diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/KafkaTbCoreQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/KafkaTbCoreQueueFactory.java index 29fbfd2ae6..caaa727749 100644 --- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/KafkaTbCoreQueueFactory.java +++ b/common/queue/src/main/java/org/thingsboard/server/queue/provider/KafkaTbCoreQueueFactory.java @@ -159,7 +159,7 @@ public class KafkaTbCoreQueueFactory implements TbCoreQueueFactory { consumerBuilder.settings(kafkaSettings); consumerBuilder.topic(partitionService.getNotificationsTopic(ServiceType.TB_CORE, serviceInfoProvider.getServiceId()).getFullTopicName()); consumerBuilder.clientId("tb-core-notifications-consumer-" + serviceInfoProvider.getServiceId()); - consumerBuilder.groupId("tb-core-notifications-node"); + consumerBuilder.groupId("tb-core-notifications-node-" + serviceInfoProvider.getServiceId()); consumerBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); consumerBuilder.admin(notificationAdmin); return consumerBuilder.build(); @@ -200,7 +200,7 @@ public class KafkaTbCoreQueueFactory implements TbCoreQueueFactory { responseBuilder.settings(kafkaSettings); responseBuilder.topic(jsInvokeSettings.getResponseTopic() + "." + serviceInfoProvider.getServiceId()); responseBuilder.clientId("js-" + serviceInfoProvider.getServiceId()); - responseBuilder.groupId("rule-engine-node"); + responseBuilder.groupId("rule-engine-node-" + serviceInfoProvider.getServiceId()); responseBuilder.decoder(msg -> { JsInvokeProtos.RemoteJsResponse.Builder builder = JsInvokeProtos.RemoteJsResponse.newBuilder(); JsonFormat.parser().ignoringUnknownFields().merge(new String(msg.getData(), StandardCharsets.UTF_8), builder); diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/KafkaTbRuleEngineQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/KafkaTbRuleEngineQueueFactory.java index 5df727f06f..3bfbf751c5 100644 --- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/KafkaTbRuleEngineQueueFactory.java +++ b/common/queue/src/main/java/org/thingsboard/server/queue/provider/KafkaTbRuleEngineQueueFactory.java @@ -154,7 +154,7 @@ public class KafkaTbRuleEngineQueueFactory implements TbRuleEngineQueueFactory { consumerBuilder.settings(kafkaSettings); consumerBuilder.topic(partitionService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, serviceInfoProvider.getServiceId()).getFullTopicName()); consumerBuilder.clientId("tb-rule-engine-notifications-consumer-" + serviceInfoProvider.getServiceId()); - consumerBuilder.groupId("tb-rule-engine-notifications-node"); + consumerBuilder.groupId("tb-rule-engine-notifications-node-" + serviceInfoProvider.getServiceId()); consumerBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); consumerBuilder.admin(notificationAdmin); return consumerBuilder.build(); @@ -173,7 +173,7 @@ public class KafkaTbRuleEngineQueueFactory implements TbRuleEngineQueueFactory { responseBuilder.settings(kafkaSettings); responseBuilder.topic(jsInvokeSettings.getResponseTopic() + "." + serviceInfoProvider.getServiceId()); responseBuilder.clientId("js-" + serviceInfoProvider.getServiceId()); - responseBuilder.groupId("rule-engine-node"); + responseBuilder.groupId("rule-engine-node-" + serviceInfoProvider.getServiceId()); responseBuilder.decoder(msg -> { JsInvokeProtos.RemoteJsResponse.Builder builder = JsInvokeProtos.RemoteJsResponse.newBuilder(); JsonFormat.parser().ignoringUnknownFields().merge(new String(msg.getData(), StandardCharsets.UTF_8), builder); diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/KafkaTbTransportQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/KafkaTbTransportQueueFactory.java index f3c294d5b1..7961bb97bb 100644 --- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/KafkaTbTransportQueueFactory.java +++ b/common/queue/src/main/java/org/thingsboard/server/queue/provider/KafkaTbTransportQueueFactory.java @@ -92,7 +92,7 @@ public class KafkaTbTransportQueueFactory implements TbTransportQueueFactory { responseBuilder.settings(kafkaSettings); responseBuilder.topic(transportApiSettings.getResponsesTopic() + "." + serviceInfoProvider.getServiceId()); responseBuilder.clientId("transport-api-response-" + serviceInfoProvider.getServiceId()); - responseBuilder.groupId("transport-node"); + responseBuilder.groupId("transport-node-" + serviceInfoProvider.getServiceId()); responseBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportApiResponseMsg.parseFrom(msg.getData()), msg.getHeaders())); responseBuilder.admin(transportApiAdmin); @@ -133,7 +133,7 @@ public class KafkaTbTransportQueueFactory implements TbTransportQueueFactory { responseBuilder.settings(kafkaSettings); responseBuilder.topic(transportNotificationSettings.getNotificationsTopic() + "." + serviceInfoProvider.getServiceId()); responseBuilder.clientId("transport-api-notifications-" + serviceInfoProvider.getServiceId()); - responseBuilder.groupId("transport-node"); + responseBuilder.groupId("transport-node-" + serviceInfoProvider.getServiceId()); responseBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), ToTransportMsg.parseFrom(msg.getData()), msg.getHeaders())); responseBuilder.admin(notificationAdmin); return responseBuilder.build(); From ddb3ee61e74c52bda6eef1ec5e6a8f0e2cf88f65 Mon Sep 17 00:00:00 2001 From: Igor Kulikov Date: Wed, 30 Dec 2020 17:13:01 +0200 Subject: [PATCH 03/11] UI: Optimizations - AOT + JIT --- ui-ngx/angular.json | 2 + ui-ngx/extra-webpack.config.js | 29 +++++-- ui-ngx/package.json | 1 + ui-ngx/src/app/core/auth/auth.service.ts | 8 +- .../dynamic-component-factory.service.ts | 59 +++++++------ .../app/core/services/resources.service.ts | 87 ++++++++++--------- .../complex-filter-predicate.component.ts | 2 +- .../filter/filter-text.component.ts | 2 +- .../alarm-rule-condition-dialog.component.ts | 2 +- .../widget/dialog/custom-dialog.component.ts | 3 +- .../lib/alarms-table-widget.component.ts | 2 +- .../components/widget/lib/maps/map-models.ts | 5 ++ .../lib/multiple-input-widget.component.ts | 4 +- .../lib/timeseries-table-widget.component.ts | 2 +- .../json-form/json-form.component.ts | 36 ++++++-- .../shared/components/led-light.component.ts | 14 +-- 16 files changed, 165 insertions(+), 93 deletions(-) diff --git a/ui-ngx/angular.json b/ui-ngx/angular.json index 1960aa0103..a9a2cac52f 100644 --- a/ui-ngx/angular.json +++ b/ui-ngx/angular.json @@ -22,6 +22,7 @@ "main": "src/main.ts", "polyfills": "src/polyfills.ts", "tsConfig": "src/tsconfig.app.json", + "aot": true, "assets": [ "src/thingsboard.ico", "src/assets", @@ -161,6 +162,7 @@ "serve": { "builder": "@angular-builders/custom-webpack:dev-server", "options": { + "aot": true, "browserTarget": "thingsboard:build", "proxyConfig": "proxy.conf.js" }, diff --git a/ui-ngx/extra-webpack.config.js b/ui-ngx/extra-webpack.config.js index 9adc0e5852..f834952fb3 100644 --- a/ui-ngx/extra-webpack.config.js +++ b/ui-ngx/extra-webpack.config.js @@ -14,8 +14,10 @@ * limitations under the License. */ const CompressionPlugin = require("compression-webpack-plugin"); +const TerserPlugin = require("terser-webpack-plugin"); const webpack = require("webpack"); const dirTree = require("directory-tree"); +const AngularCompilerPlugin = require('@ngtools/webpack'); var langs = []; @@ -25,12 +27,14 @@ dirTree("./src/assets/locale/", {extensions: /\.json$/}, (item) => { langs.push(item.name.slice(item.name.lastIndexOf("-") + 1, -5)); }); -module.exports = { - plugins: [ +module.exports = (config, options) => { + config.plugins.push( new webpack.DefinePlugin({ TB_VERSION: JSON.stringify(require("./package.json").version), SUPPORTED_LANGS: JSON.stringify(langs), - }), + }) + ); + config.plugins.push( new CompressionPlugin({ filename: "[path][base].gz[query]", algorithm: "gzip", @@ -38,6 +42,21 @@ module.exports = { threshold: 10240, minRatio: 0.8, deleteOriginalAssets: false, - }), - ], + }) + ); + + if (config.mode === 'production') { + const index = config.plugins.findIndex(p => p instanceof AngularCompilerPlugin.AngularCompilerPlugin); + const angularCompilerOptions = config.plugins[index]._options; + angularCompilerOptions.emitClassMetadata = true; + angularCompilerOptions.emitNgModuleScope = true; + config.plugins.splice(index, 1); + config.plugins.push(new AngularCompilerPlugin.AngularCompilerPlugin(angularCompilerOptions)); + const terserPluginOptions = config.optimization.minimizer[1].options; + delete terserPluginOptions.terserOptions.compress.global_defs.ngJitMode; + terserPluginOptions.terserOptions.compress.side_effects = false; + config.optimization.minimizer.splice(1, 1); + config.optimization.minimizer.push(new TerserPlugin(terserPluginOptions)); + } + return config; }; diff --git a/ui-ngx/package.json b/ui-ngx/package.json index bf05109bb6..a2449a2a7f 100644 --- a/ui-ngx/package.json +++ b/ui-ngx/package.json @@ -100,6 +100,7 @@ "@angular/cli": "^10.1.5", "@angular/compiler-cli": "^10.1.5", "@angular/language-service": "^10.1.5", + "@ngtools/webpack": "10.1.5", "@types/canvas-gauges": "^2.1.2", "@types/flot": "^0.0.31", "@types/jasmine": "^3.5.12", diff --git a/ui-ngx/src/app/core/auth/auth.service.ts b/ui-ngx/src/app/core/auth/auth.service.ts index 3d4a203252..ff83b84167 100644 --- a/ui-ngx/src/app/core/auth/auth.service.ts +++ b/ui-ngx/src/app/core/auth/auth.service.ts @@ -446,8 +446,12 @@ export class AuthService { const refreshTokenValid = AuthService.isTokenValid('refresh_token'); this.setUserFromJwtToken(null, null, false); if (!refreshTokenValid) { - this.refreshTokenSubject.error(new Error(this.translate.instant('access.refresh-token-expired'))); - this.refreshTokenSubject = null; + this.translate.get('access.refresh-token-expired').subscribe( + (translation) => { + this.refreshTokenSubject.error(new Error(translation)); + this.refreshTokenSubject = null; + } + ); } else { const refreshTokenRequest = { refreshToken diff --git a/ui-ngx/src/app/core/services/dynamic-component-factory.service.ts b/ui-ngx/src/app/core/services/dynamic-component-factory.service.ts index 53a72ad2cc..2fe11cccb5 100644 --- a/ui-ngx/src/app/core/services/dynamic-component-factory.service.ts +++ b/ui-ngx/src/app/core/services/dynamic-component-factory.service.ts @@ -59,37 +59,40 @@ export class DynamicComponentFactoryService { template: string, modules?: Type[]): Observable> { const dymamicComponentFactorySubject = new ReplaySubject>(); - const comp = this.createDynamicComponent(componentType, template); - let moduleImports: Type[] = [CommonModule]; - if (modules) { - moduleImports = [...moduleImports, ...modules]; - } - // noinspection AngularInvalidImportedOrDeclaredSymbol - @NgModule({ - declarations: [comp], - imports: moduleImports - }) - class DynamicComponentInstanceModule extends DynamicComponentModule {} - try { - this.compiler.compileModuleAsync(DynamicComponentInstanceModule).then( - (module) => { - const moduleRef = module.create(this.injector); - const factory = moduleRef.componentFactoryResolver.resolveComponentFactory(comp); - this.dynamicComponentModulesMap.set(factory, { - moduleRef, - moduleType: module.moduleType - }); - dymamicComponentFactorySubject.next(factory); - dymamicComponentFactorySubject.complete(); + import('@angular/compiler').then( + () => { + const comp = this.createDynamicComponent(componentType, template); + let moduleImports: Type[] = [CommonModule]; + if (modules) { + moduleImports = [...moduleImports, ...modules]; } - ).catch( - (e) => { + // noinspection AngularInvalidImportedOrDeclaredSymbol + const dynamicComponentInstanceModule = NgModule({ + declarations: [comp], + imports: moduleImports + })(class DynamicComponentInstanceModule extends DynamicComponentModule {}); + try { + this.compiler.compileModuleAsync(dynamicComponentInstanceModule).then( + (module) => { + const moduleRef = module.create(this.injector); + const factory = moduleRef.componentFactoryResolver.resolveComponentFactory(comp); + this.dynamicComponentModulesMap.set(factory, { + moduleRef, + moduleType: module.moduleType + }); + dymamicComponentFactorySubject.next(factory); + dymamicComponentFactorySubject.complete(); + } + ).catch( + (e) => { + dymamicComponentFactorySubject.error(e); + } + ); + } catch (e) { dymamicComponentFactorySubject.error(e); } - ); - } catch (e) { - dymamicComponentFactorySubject.error(e); - } + } + ); return dymamicComponentFactorySubject.asObservable(); } diff --git a/ui-ngx/src/app/core/services/resources.service.ts b/ui-ngx/src/app/core/services/resources.service.ts index 97dd480e2e..f27f8b2dee 100644 --- a/ui-ngx/src/app/core/services/resources.service.ts +++ b/ui-ngx/src/app/core/services/resources.service.ts @@ -78,28 +78,31 @@ export class ResourcesService { (module) => { const modules = this.extractNgModules(module); if (modules.length) { - const tasks: Promise>[] = []; - for (const m of modules) { - tasks.push(this.compiler.compileModuleAndAllComponentsAsync(m)); - } - forkJoin(tasks).subscribe((compiled) => { - try { - const componentFactories: ComponentFactory[] = []; - for (const c of compiled) { - c.ngModuleFactory.create(this.injector); - componentFactories.push(...c.componentFactories); + import('@angular/compiler').then( + () => { + const tasks: Promise>[] = []; + for (const m of modules) { + tasks.push(this.compiler.compileModuleAndAllComponentsAsync(m)); } - this.loadedFactories[url].next(componentFactories); - this.loadedFactories[url].complete(); - } catch (e) { - this.loadedFactories[url].error(new Error(`Unable to init module from url: ${url}`)); - delete this.loadedFactories[url]; - } - }, - (e) => { - this.loadedFactories[url].error(new Error(`Unable to compile module from url: ${url}`)); - delete this.loadedFactories[url]; - }); + forkJoin(tasks).subscribe((compiled) => { + try { + const componentFactories: ComponentFactory[] = []; + for (const c of compiled) { + c.ngModuleFactory.create(this.injector); + componentFactories.push(...c.componentFactories); + } + this.loadedFactories[url].next(componentFactories); + this.loadedFactories[url].complete(); + } catch (e) { + this.loadedFactories[url].error(new Error(`Unable to init module from url: ${url}`)); + delete this.loadedFactories[url]; + } + }, + (e) => { + this.loadedFactories[url].error(new Error(`Unable to compile module from url: ${url}`)); + delete this.loadedFactories[url]; + }); } + ); } else { this.loadedFactories[url].error(new Error(`Module '${url}' doesn't have default export!`)); delete this.loadedFactories[url]; @@ -133,26 +136,30 @@ export class ResourcesService { } catch (e) { } if (modules && modules.length) { - const tasks: Promise>[] = []; - for (const m of modules) { - tasks.push(this.compiler.compileModuleAndAllComponentsAsync(m)); - } - forkJoin(tasks).subscribe((compiled) => { - try { - for (const c of compiled) { - c.ngModuleFactory.create(this.injector); - } - this.loadedModules[url].next(modules); - this.loadedModules[url].complete(); - } catch (e) { - this.loadedModules[url].error(new Error(`Unable to init module from url: ${url}`)); - delete this.loadedModules[url]; + import('@angular/compiler').then( + () => { + const tasks: Promise>[] = []; + for (const m of modules) { + tasks.push(this.compiler.compileModuleAndAllComponentsAsync(m)); } - }, - (e) => { - this.loadedModules[url].error(new Error(`Unable to compile module from url: ${url}`)); - delete this.loadedModules[url]; - }); + forkJoin(tasks).subscribe((compiled) => { + try { + for (const c of compiled) { + c.ngModuleFactory.create(this.injector); + } + this.loadedModules[url].next(modules); + this.loadedModules[url].complete(); + } catch (e) { + this.loadedModules[url].error(new Error(`Unable to init module from url: ${url}`)); + delete this.loadedModules[url]; + } + }, + (e) => { + this.loadedModules[url].error(new Error(`Unable to compile module from url: ${url}`)); + delete this.loadedModules[url]; + }); + } + ); } else { this.loadedModules[url].error(new Error(`Module '${url}' doesn't have default export or not NgModule!`)); delete this.loadedModules[url]; diff --git a/ui-ngx/src/app/modules/home/components/filter/complex-filter-predicate.component.ts b/ui-ngx/src/app/modules/home/components/filter/complex-filter-predicate.component.ts index 87bad30d5a..5c6d46ed8b 100644 --- a/ui-ngx/src/app/modules/home/components/filter/complex-filter-predicate.component.ts +++ b/ui-ngx/src/app/modules/home/components/filter/complex-filter-predicate.component.ts @@ -77,7 +77,7 @@ export class ComplexFilterPredicateComponent implements ControlValueAccessor, On this.complexFilterPredicate = predicate; } - private openComplexFilterDialog() { + public openComplexFilterDialog() { this.dialog.open(ComplexFilterPredicateDialogComponent, { disableClose: true, diff --git a/ui-ngx/src/app/modules/home/components/filter/filter-text.component.ts b/ui-ngx/src/app/modules/home/components/filter/filter-text.component.ts index 5499cdc765..d98e627ee8 100644 --- a/ui-ngx/src/app/modules/home/components/filter/filter-text.component.ts +++ b/ui-ngx/src/app/modules/home/components/filter/filter-text.component.ts @@ -59,7 +59,7 @@ export class FilterTextComponent implements ControlValueAccessor, OnInit { requiredClass = false; - private filterText: string; + public filterText: string; private propagateChange = (v: any) => { }; diff --git a/ui-ngx/src/app/modules/home/components/profile/alarm/alarm-rule-condition-dialog.component.ts b/ui-ngx/src/app/modules/home/components/profile/alarm/alarm-rule-condition-dialog.component.ts index 0c81ebf397..6a6830e70c 100644 --- a/ui-ngx/src/app/modules/home/components/profile/alarm/alarm-rule-condition-dialog.component.ts +++ b/ui-ngx/src/app/modules/home/components/profile/alarm/alarm-rule-condition-dialog.component.ts @@ -38,7 +38,7 @@ export interface AlarmRuleConditionDialogData { selector: 'tb-alarm-rule-condition-dialog', templateUrl: './alarm-rule-condition-dialog.component.html', providers: [{provide: ErrorStateMatcher, useExisting: AlarmRuleConditionDialogComponent}], - styleUrls: ['/alarm-rule-condition-dialog.component.scss'] + styleUrls: ['./alarm-rule-condition-dialog.component.scss'] }) export class AlarmRuleConditionDialogComponent extends DialogComponent implements OnInit, ErrorStateMatcher { diff --git a/ui-ngx/src/app/modules/home/components/widget/dialog/custom-dialog.component.ts b/ui-ngx/src/app/modules/home/components/widget/dialog/custom-dialog.component.ts index 2e609eb617..b66a9cea6e 100644 --- a/ui-ngx/src/app/modules/home/components/widget/dialog/custom-dialog.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/dialog/custom-dialog.component.ts @@ -15,7 +15,7 @@ /// import { MatDialogRef } from '@angular/material/dialog'; -import { Inject, InjectionToken } from '@angular/core'; +import { Directive, Inject, InjectionToken } from '@angular/core'; import { Store } from '@ngrx/store'; import { AppState } from '@core/core.state'; import { Router } from '@angular/router'; @@ -30,6 +30,7 @@ export interface CustomDialogData { [key: string]: any; } +@Directive() export class CustomDialogComponent extends PageComponent { [key: string]: any; diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/alarms-table-widget.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/alarms-table-widget.component.ts index 75d0b24485..6082e3716a 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/alarms-table-widget.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/alarms-table-widget.component.ts @@ -154,7 +154,7 @@ export class AlarmsTableWidgetComponent extends PageComponent implements OnInit, private alarmsTitlePattern: string; private displayDetails = true; - private allowAcknowledgment = true; + public allowAcknowledgment = true; private allowClear = true; private defaultPageSize = 10; diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/maps/map-models.ts b/ui-ngx/src/app/modules/home/components/widget/lib/maps/map-models.ts index 6f0e629c54..af11dfd607 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/maps/map-models.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/maps/map-models.ts @@ -186,11 +186,16 @@ export type TripAnimationSettings = { usePointAsAnchor: boolean; normalizationStep: number; showPolygon: boolean; + showLabel: boolean; + showTooltip: boolean; latKeyName: string; lngKeyName: string; rotationAngle: number; label: string; tooltipPattern: string; + tooltipColor: string; + tooltipOpacity: number; + tooltipFontColor: string; useTooltipFunction: boolean; useLabelFunction: boolean; pointAsAnchorFunction: GenericFunction; diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/multiple-input-widget.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/multiple-input-widget.component.ts index 0403f2844c..1707b5495d 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/multiple-input-widget.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/multiple-input-widget.component.ts @@ -102,11 +102,11 @@ export class MultipleInputWidgetComponent extends PageComponent implements OnIni ctx: WidgetContext; private formResize$: ResizeObserver; - private settings: MultipleInputWidgetSettings; + public settings: MultipleInputWidgetSettings; private widgetConfig: WidgetConfig; private subscription: IWidgetSubscription; private datasources: Array; - private sources: Array = []; + public sources: Array = []; isVerticalAlignment: boolean; inputWidthSettings: string; diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/timeseries-table-widget.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/timeseries-table-widget.component.ts index f9393a9e79..307efc2733 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/timeseries-table-widget.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/timeseries-table-widget.component.ts @@ -126,7 +126,7 @@ export class TimeseriesTableWidgetComponent extends PageComponent implements OnI private defaultPageSize = 10; private defaultSortOrder = '-0'; private hideEmptyLines = false; - private showTimestamp = true; + public showTimestamp = true; private dateFormatFilter: string; private searchAction: WidgetAction = { diff --git a/ui-ngx/src/app/shared/components/json-form/json-form.component.ts b/ui-ngx/src/app/shared/components/json-form/json-form.component.ts index ecd249af60..51e32c18f9 100644 --- a/ui-ngx/src/app/shared/components/json-form/json-form.component.ts +++ b/ui-ngx/src/app/shared/components/json-form/json-form.component.ts @@ -36,12 +36,14 @@ import { JsonFormProps } from './react/json-form.models'; import inspector from 'schema-inspector'; import * as tinycolor_ from 'tinycolor2'; import { DialogService } from '@app/core/services/dialog.service'; -import * as React from 'react'; -import * as ReactDOM from 'react-dom'; -import ReactSchemaForm from './react/json-form-react'; +// import * as React from 'react'; +// import * as ReactDOM from 'react-dom'; +// import ReactSchemaForm from './react/json-form-react'; import JsonFormUtils from './react/json-form-utils'; import { JsonFormComponentData } from './json-form-component.models'; import { GroupInfo } from '@shared/models/widget.models'; +import { Observable } from 'rxjs/internal/Observable'; +import { forkJoin, from } from 'rxjs'; const tinycolor = tinycolor_; @@ -252,11 +254,35 @@ export class JsonFormComponent implements OnInit, ControlValueAccessor, Validato if (destroy) { this.destroyReactSchemaForm(); } - ReactDOM.render(React.createElement(ReactSchemaForm, this.formProps), this.reactRootElmRef.nativeElement); + + // import ReactSchemaForm from './react/json-form-react'; + const reactSchemaFormObservables: Observable[] = []; + reactSchemaFormObservables.push(from(import('react'))); + reactSchemaFormObservables.push(from(import('react-dom'))); + reactSchemaFormObservables.push(from(import('./react/json-form-react'))); + forkJoin(reactSchemaFormObservables).subscribe( + (modules) => { + const react = modules[0]; + const reactDom = modules[1]; + const jsonFormReact = modules[2].default; + reactDom.render(react.createElement(jsonFormReact, this.formProps), this.reactRootElmRef.nativeElement); + } + ); + /* import('./react/json-form-react').then( + (mod) => { + ReactDOM.render(React.createElement(mod.default, this.formProps), this.reactRootElmRef.nativeElement); + } + );*/ + // ReactDOM.render(React.createElement(ReactSchemaForm, this.formProps), this.reactRootElmRef.nativeElement); } private destroyReactSchemaForm() { - ReactDOM.unmountComponentAtNode(this.reactRootElmRef.nativeElement); + import('react-dom').then( + (reactDom) => { + reactDom.unmountComponentAtNode(this.reactRootElmRef.nativeElement); + } + ); + // ReactDOM.unmountComponentAtNode(this.reactRootElmRef.nativeElement); } private validateModel(): boolean { diff --git a/ui-ngx/src/app/shared/components/led-light.component.ts b/ui-ngx/src/app/shared/components/led-light.component.ts index aa2c373dfa..9ede198215 100644 --- a/ui-ngx/src/app/shared/components/led-light.component.ts +++ b/ui-ngx/src/app/shared/components/led-light.component.ts @@ -16,7 +16,7 @@ import { AfterViewInit, Component, ElementRef, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core'; import { coerceBooleanProperty } from '@angular/cdk/coercion'; -import Raphael, { RaphaelElement, RaphaelPaper, RaphaelSet } from 'raphael'; +import { RaphaelElement, RaphaelPaper, RaphaelSet } from 'raphael'; import * as tinycolor_ from 'tinycolor2'; const tinycolor = tinycolor_; @@ -90,10 +90,14 @@ export class LedLightComponent implements OnInit, AfterViewInit, OnChanges { if (this.paper) { this.paper.remove(); } - this.paper = Raphael($('#canvas_container', this.elementRef.nativeElement)[0], this.canvasSize, this.canvasSize); - const center = this.canvasSize / 2; - this.circleElement = this.paper.circle(center, center, this.radius); - this.draw(); + import('raphael').then( + (raphael) => { + this.paper = raphael.default($('#canvas_container', this.elementRef.nativeElement)[0], this.canvasSize, this.canvasSize); + const center = this.canvasSize / 2; + this.circleElement = this.paper.circle(center, center, this.radius); + this.draw(); + } + ); } private draw() { From bcfc7cc733868d3888d9ae01e48e59f032c9c557 Mon Sep 17 00:00:00 2001 From: YevhenBondarenko Date: Wed, 30 Dec 2020 17:39:03 +0200 Subject: [PATCH 04/11] fixed audit logs for device profile --- .../thingsboard/server/controller/DeviceProfileController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/src/main/java/org/thingsboard/server/controller/DeviceProfileController.java b/application/src/main/java/org/thingsboard/server/controller/DeviceProfileController.java index 7a399d33ca..4e82fe9825 100644 --- a/application/src/main/java/org/thingsboard/server/controller/DeviceProfileController.java +++ b/application/src/main/java/org/thingsboard/server/controller/DeviceProfileController.java @@ -151,7 +151,7 @@ public class DeviceProfileController extends BaseController { logEntityAction(savedDeviceProfile.getId(), savedDeviceProfile, null, - savedDeviceProfile.getId() == null ? ActionType.ADDED : ActionType.UPDATED, null); + created ? ActionType.ADDED : ActionType.UPDATED, null); return savedDeviceProfile; } catch (Exception e) { From ed56f041f8aaa464b9288ac4982c9d917a9fd908 Mon Sep 17 00:00:00 2001 From: Igor Kulikov Date: Tue, 5 Jan 2021 11:37:05 +0200 Subject: [PATCH 05/11] UI optimizations --- ui-ngx/angular.json | 26 +- ui-ngx/extra-webpack.config.js | 10 + .../event/event-content-dialog.component.ts | 52 ++-- .../alarm/alarm-schedule.component.html | 2 +- .../profile/alarm/alarm-schedule.component.ts | 20 +- ...-action-pretty-resources-tabs.component.ts | 32 ++- .../widget/widget-component.service.ts | 27 ++- .../rulechain/rulechain-routing.module.ts | 20 +- .../pages/widget/widget-editor.component.ts | 77 +++--- .../node-script-test-dialog.component.ts | 14 +- .../shared/components/js-func.component.ts | 10 +- .../components/json-content.component.ts | 10 +- .../json-form/react/json-form-ace-editor.tsx | 24 +- .../json-form/react/json-form-css.tsx | 7 +- .../json-form/react/json-form-html.tsx | 7 +- .../json-form/react/json-form-javascript.tsx | 6 +- .../json-form/react/json-form-json.tsx | 6 +- .../shared/components/nav-tree.component.ts | 229 +++++++++--------- .../time/timezone-select.component.ts | 87 +++---- .../src/app/shared/models/beautify.models.ts | 79 ++++++ ui-ngx/src/app/shared/models/device.models.ts | 2 +- .../src/app/shared/models/time/time.models.ts | 63 +++++ ui-ngx/tsconfig.json | 12 + 23 files changed, 535 insertions(+), 287 deletions(-) create mode 100644 ui-ngx/src/app/shared/models/beautify.models.ts diff --git a/ui-ngx/angular.json b/ui-ngx/angular.json index a9a2cac52f..3cb140c837 100644 --- a/ui-ngx/angular.json +++ b/ui-ngx/angular.json @@ -86,25 +86,9 @@ ] }, "scripts": [ - "node_modules/jquery/dist/jquery.min.js", - "node_modules/jquery.terminal/js/jquery.terminal.min.js", - "node_modules/flot/lib/jquery.colorhelpers.js", - "node_modules/flot/src/jquery.flot.js", - "node_modules/flot/src/plugins/jquery.flot.time.js", - "node_modules/flot/src/plugins/jquery.flot.selection.js", - "node_modules/flot/src/plugins/jquery.flot.pie.js", - "node_modules/flot/src/plugins/jquery.flot.crosshair.js", - "node_modules/flot/src/plugins/jquery.flot.stack.js", - "node_modules/flot/src/plugins/jquery.flot.symbol.js", - "node_modules/flot.curvedlines/curvedLines.js", "node_modules/tinycolor2/dist/tinycolor-min.js", - "node_modules/tooltipster/dist/js/tooltipster.bundle.min.js", - "node_modules/split.js/dist/split.js", - "node_modules/js-beautify/js/lib/beautify.js", - "node_modules/js-beautify/js/lib/beautify-css.js", - "node_modules/js-beautify/js/lib/beautify-html.js", - "node_modules/systemjs/dist/system.js", - "node_modules/jstree/dist/jstree.min.js" + "node_modules/split.js/dist/split.min.js", + "node_modules/systemjs/dist/system.js" ], "customWebpackConfig": { "path": "./extra-webpack.config.js" @@ -130,7 +114,11 @@ "tinycolor2", "json-schema-defaults", "leaflet-providers", - "lodash" + "lodash", + "jquery", + "jquery.terminal", + "tooltipster", + "jstree" ] }, "configurations": { diff --git a/ui-ngx/extra-webpack.config.js b/ui-ngx/extra-webpack.config.js index f834952fb3..355d85551e 100644 --- a/ui-ngx/extra-webpack.config.js +++ b/ui-ngx/extra-webpack.config.js @@ -34,6 +34,13 @@ module.exports = (config, options) => { SUPPORTED_LANGS: JSON.stringify(langs), }) ); + config.plugins.push( + new webpack.ProvidePlugin( + { + $: "jquery" + } + ) + ); config.plugins.push( new CompressionPlugin({ filename: "[path][base].gz[query]", @@ -44,6 +51,9 @@ module.exports = (config, options) => { deleteOriginalAssets: false, }) ); + config.plugins.push( + new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/) + ); if (config.mode === 'production') { const index = config.plugins.findIndex(p => p instanceof AngularCompilerPlugin.AngularCompilerPlugin); diff --git a/ui-ngx/src/app/modules/home/components/event/event-content-dialog.component.ts b/ui-ngx/src/app/modules/home/components/event/event-content-dialog.component.ts index 9ca56d53ef..b8232e7109 100644 --- a/ui-ngx/src/app/modules/home/components/event/event-content-dialog.component.ts +++ b/ui-ngx/src/app/modules/home/components/event/event-content-dialog.component.ts @@ -24,6 +24,9 @@ import { DialogComponent } from '@shared/components/dialog.component'; import { Router } from '@angular/router'; import { ContentType, contentTypesMap } from '@shared/models/constants'; import { getAce } from '@shared/models/ace/ace.models'; +import { Observable } from 'rxjs/internal/Observable'; +import { beautifyJs } from '@shared/models/beautify.models'; +import { of } from 'rxjs'; export interface EventContentDialogData { content: string; @@ -64,33 +67,42 @@ export class EventContentDialogComponent extends DialogComponent = null; if (this.contentType) { mode = contentTypesMap.get(this.contentType).code; if (this.contentType === ContentType.JSON && content) { - content = js_beautify(content, {indent_size: 4}); + content$ = beautifyJs(content, {indent_size: 4}); } } - let editorOptions: Partial = { - mode: `ace/mode/${mode}`, - theme: 'ace/theme/github', - showGutter: false, - showPrintMargin: false, - readOnly: true - }; + if (!content$) { + content$ = of(content); + } + + content$.subscribe( + (processedContent) => { + let editorOptions: Partial = { + mode: `ace/mode/${mode}`, + theme: 'ace/theme/github', + showGutter: false, + showPrintMargin: false, + readOnly: true + }; - const advancedOptions = { - enableSnippets: false, - enableBasicAutocompletion: false, - enableLiveAutocompletion: false - }; + const advancedOptions = { + enableSnippets: false, + enableBasicAutocompletion: false, + enableLiveAutocompletion: false + }; - editorOptions = {...editorOptions, ...advancedOptions}; - getAce().subscribe( - (ace) => { - const editor = ace.edit(editorElement, editorOptions); - editor.session.setUseWrapMode(false); - editor.setValue(content, -1); - this.updateEditorSize(editorElement, content, editor); + editorOptions = {...editorOptions, ...advancedOptions}; + getAce().subscribe( + (ace) => { + const editor = ace.edit(editorElement, editorOptions); + editor.session.setUseWrapMode(false); + editor.setValue(processedContent, -1); + this.updateEditorSize(editorElement, processedContent, editor); + } + ); } ); } diff --git a/ui-ngx/src/app/modules/home/components/profile/alarm/alarm-schedule.component.html b/ui-ngx/src/app/modules/home/components/profile/alarm/alarm-schedule.component.html index ea4ad4097a..e6da924699 100644 --- a/ui-ngx/src/app/modules/home/components/profile/alarm/alarm-schedule.component.html +++ b/ui-ngx/src/app/modules/home/components/profile/alarm/alarm-schedule.component.html @@ -29,7 +29,7 @@
diff --git a/ui-ngx/src/app/modules/home/components/profile/alarm/alarm-schedule.component.ts b/ui-ngx/src/app/modules/home/components/profile/alarm/alarm-schedule.component.ts index 65009dbd0b..7ee5102aa6 100644 --- a/ui-ngx/src/app/modules/home/components/profile/alarm/alarm-schedule.component.ts +++ b/ui-ngx/src/app/modules/home/components/profile/alarm/alarm-schedule.component.ts @@ -32,11 +32,15 @@ import { AlarmSchedule, AlarmScheduleType, AlarmScheduleTypeTranslationMap, - dayOfWeekTranslations, getAlarmScheduleRangeText, timeOfDayToUTCTimestamp, utcTimestampToTimeOfDay + dayOfWeekTranslations, + getAlarmScheduleRangeText, + timeOfDayToUTCTimestamp, + utcTimestampToTimeOfDay } from '@shared/models/device.models'; import { isDefined, isDefinedAndNotNull } from '@core/utils'; -import * as _moment from 'moment-timezone'; import { MatCheckboxChange } from '@angular/material/checkbox'; +import { getDefaultTimezone } from '@shared/models/time/time.models'; +import { share } from 'rxjs/operators'; @Component({ selector: 'tb-alarm-schedule', @@ -58,7 +62,9 @@ export class AlarmScheduleComponent implements ControlValueAccessor, Validator, alarmScheduleForm: FormGroup; - defaultTimezone = _moment.tz.guess(); + defaultTimezone$ = getDefaultTimezone().pipe( + share() + ); alarmScheduleTypes = Object.keys(AlarmScheduleType); alarmScheduleType = AlarmScheduleType; @@ -93,9 +99,11 @@ export class AlarmScheduleComponent implements ControlValueAccessor, Validator, items: this.fb.array(Array.from({length: 7}, (value, i) => this.defaultItemsScheduler(i)), this.validateItems) }); this.alarmScheduleForm.get('type').valueChanges.subscribe((type) => { - this.alarmScheduleForm.reset({type, items: this.defaultItems, timezone: this.defaultTimezone}, {emitEvent: false}); - this.updateValidators(type, true); - this.alarmScheduleForm.updateValueAndValidity(); + getDefaultTimezone().subscribe((defaultTimezone) => { + this.alarmScheduleForm.reset({type, items: this.defaultItems, timezone: defaultTimezone}, {emitEvent: false}); + this.updateValidators(type, true); + this.alarmScheduleForm.updateValueAndValidity(); + }); }); this.alarmScheduleForm.valueChanges.subscribe(() => { this.updateModel(); diff --git a/ui-ngx/src/app/modules/home/components/widget/action/custom-action-pretty-resources-tabs.component.ts b/ui-ngx/src/app/modules/home/components/widget/action/custom-action-pretty-resources-tabs.component.ts index 16c924b711..0463bd2ba7 100644 --- a/ui-ngx/src/app/modules/home/components/widget/action/custom-action-pretty-resources-tabs.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/action/custom-action-pretty-resources-tabs.component.ts @@ -34,13 +34,13 @@ import { AppState } from '@core/core.state'; import { CustomActionDescriptor } from '@shared/models/widget.models'; import { Ace } from 'ace-builds'; import { CancelAnimationFrame, RafService } from '@core/services/raf.service'; -import { css_beautify, html_beautify } from 'js-beautify'; import { ResizeObserver } from '@juggle/resize-observer'; import { CustomPrettyActionEditorCompleter } from '@home/components/widget/action/custom-action.models'; import { Observable } from 'rxjs/internal/Observable'; import { forkJoin, from } from 'rxjs'; import { map, tap } from 'rxjs/operators'; import { getAce } from '@shared/models/ace/ace.models'; +import { beautifyCss, beautifyHtml } from '@shared/models/beautify.models'; @Component({ selector: 'tb-custom-action-pretty-resources-tabs', @@ -140,21 +140,27 @@ export class CustomActionPrettyResourcesTabsComponent extends PageComponent impl } public beautifyCss(): void { - const res = css_beautify(this.action.customCss, {indent_size: 4}); - if (this.action.customCss !== res) { - this.action.customCss = res; - this.cssEditor.setValue(this.action.customCss ? this.action.customCss : '', -1); - this.notifyActionUpdated(); - } + beautifyCss(this.action.customCss, {indent_size: 4}).subscribe( + (res) => { + if (this.action.customCss !== res) { + this.action.customCss = res; + this.cssEditor.setValue(this.action.customCss ? this.action.customCss : '', -1); + this.notifyActionUpdated(); + } + } + ); } public beautifyHtml(): void { - const res = html_beautify(this.action.customHtml, {indent_size: 4, wrap_line_length: 60}); - if (this.action.customHtml !== res) { - this.action.customHtml = res; - this.htmlEditor.setValue(this.action.customHtml ? this.action.customHtml : '', -1); - this.notifyActionUpdated(); - } + beautifyHtml(this.action.customHtml, {indent_size: 4, wrap_line_length: 60}).subscribe( + (res) => { + if (this.action.customHtml !== res) { + this.action.customHtml = res; + this.htmlEditor.setValue(this.action.customHtml ? this.action.customHtml : '', -1); + this.notifyActionUpdated(); + } + } + ); } private initAceEditors(): Observable { diff --git a/ui-ngx/src/app/modules/home/components/widget/widget-component.service.ts b/ui-ngx/src/app/modules/home/components/widget/widget-component.service.ts index 01ebb4b39c..ff78ae2e3f 100644 --- a/ui-ngx/src/app/modules/home/components/widget/widget-component.service.ts +++ b/ui-ngx/src/app/modules/home/components/widget/widget-component.service.ts @@ -111,11 +111,32 @@ export class WidgetComponentService { const initSubject = new ReplaySubject(); this.init$ = initSubject.asObservable(); - (window as any).tinycolor = tinycolor; - (window as any).cssjs = cssjs; - (window as any).moment = moment; + const w = (this.window as any); + + w.tinycolor = tinycolor; + w.cssjs = cssjs; + w.moment = moment; + w.$ = $; + w.jQuery = $; const widgetModulesTasks: Observable[] = []; + widgetModulesTasks.push(from(import('jquery.terminal'))); + + widgetModulesTasks.push(from(import('flot/src/jquery.flot.js')).pipe( + mergeMap(() => { + const flotJsPluginsTasks: Observable[] = []; + flotJsPluginsTasks.push(from(import('flot/lib/jquery.colorhelpers.js'))); + flotJsPluginsTasks.push(from(import('flot/src/plugins/jquery.flot.time.js'))); + flotJsPluginsTasks.push(from(import('flot/src/plugins/jquery.flot.selection.js'))); + flotJsPluginsTasks.push(from(import('flot/src/plugins/jquery.flot.pie.js'))); + flotJsPluginsTasks.push(from(import('flot/src/plugins/jquery.flot.crosshair.js'))); + flotJsPluginsTasks.push(from(import('flot/src/plugins/jquery.flot.stack.js'))); + flotJsPluginsTasks.push(from(import('flot/src/plugins/jquery.flot.symbol.js'))); + flotJsPluginsTasks.push(from(import('flot.curvedlines/curvedLines.js'))); + return forkJoin(flotJsPluginsTasks); + }) + )); + widgetModulesTasks.push(from(import('@home/components/widget/lib/flot-widget')).pipe( tap((mod) => { (window as any).TbFlot = mod.TbFlot; diff --git a/ui-ngx/src/app/modules/home/pages/rulechain/rulechain-routing.module.ts b/ui-ngx/src/app/modules/home/pages/rulechain/rulechain-routing.module.ts index 0431be2e14..e0c667a889 100644 --- a/ui-ngx/src/app/modules/home/pages/rulechain/rulechain-routing.module.ts +++ b/ui-ngx/src/app/modules/home/pages/rulechain/rulechain-routing.module.ts @@ -29,7 +29,7 @@ import { import { EntitiesTableComponent } from '../../components/entity/entities-table.component'; import { Authority } from '@shared/models/authority.enum'; import { RuleChainsTableConfigResolver } from '@modules/home/pages/rulechain/rulechains-table-config.resolver'; -import { Observable } from 'rxjs'; +import { from, Observable } from 'rxjs'; import { BreadCrumbConfig, BreadCrumbLabelFunction } from '@shared/components/breadcrumb'; import { ResolvedRuleChainMetaData, RuleChain } from '@shared/models/rule-chain.models'; import { RuleChainService } from '@core/http/rule-chain.service'; @@ -75,6 +75,17 @@ export class RuleNodeComponentsResolver implements Resolve { + + constructor() { + } + + resolve(route: ActivatedRouteSnapshot): Observable { + return from(import('tooltipster')); + } +} + @Injectable() export class RuleChainImportGuard implements CanActivate { @@ -144,7 +155,8 @@ const routes: Routes = [ resolve: { ruleChain: RuleChainResolver, ruleChainMetaData: ResolvedRuleChainMetaDataResolver, - ruleNodeComponents: RuleNodeComponentsResolver + ruleNodeComponents: RuleNodeComponentsResolver, + tooltipster: TooltipsterResolver } }, { @@ -162,7 +174,8 @@ const routes: Routes = [ import: true }, resolve: { - ruleNodeComponents: RuleNodeComponentsResolver + ruleNodeComponents: RuleNodeComponentsResolver, + tooltipster: TooltipsterResolver } } ] @@ -178,6 +191,7 @@ const routes: Routes = [ RuleChainResolver, ResolvedRuleChainMetaDataResolver, RuleNodeComponentsResolver, + TooltipsterResolver, RuleChainImportGuard ] }) diff --git a/ui-ngx/src/app/modules/home/pages/widget/widget-editor.component.ts b/ui-ngx/src/app/modules/home/pages/widget/widget-editor.component.ts index 46338a2dfe..136e2133f6 100644 --- a/ui-ngx/src/app/modules/home/pages/widget/widget-editor.component.ts +++ b/ui-ngx/src/app/modules/home/pages/widget/widget-editor.component.ts @@ -34,7 +34,6 @@ import { TranslateService } from '@ngx-translate/core'; import { getCurrentIsLoading } from '@app/core/interceptors/load.selectors'; import { Ace } from 'ace-builds'; import { getAce, Range } from '@shared/models/ace/ace.models'; -import { css_beautify, html_beautify } from 'js-beautify'; import { CancelAnimationFrame, RafService } from '@core/services/raf.service'; import { WINDOW } from '@core/services/window.service'; import { WindowMessage } from '@shared/models/window-message.model'; @@ -51,6 +50,7 @@ import Timeout = NodeJS.Timeout; import { widgetEditorCompleter } from '@home/pages/widget/widget-editor.models'; import { Observable } from 'rxjs/internal/Observable'; import { map, tap } from 'rxjs/operators'; +import { beautifyCss, beautifyHtml, beautifyJs } from '@shared/models/beautify.models'; // @dynamic @Component({ @@ -618,48 +618,63 @@ export class WidgetEditorComponent extends PageComponent implements OnInit, OnDe } beautifyCss(): void { - const res = css_beautify(this.widget.templateCss, {indent_size: 4}); - if (this.widget.templateCss !== res) { - this.isDirty = true; - this.widget.templateCss = res; - this.cssEditor.setValue(this.widget.templateCss ? this.widget.templateCss : '', -1); - } + beautifyCss(this.widget.templateCss, {indent_size: 4}).subscribe( + (res) => { + if (this.widget.templateCss !== res) { + this.isDirty = true; + this.widget.templateCss = res; + this.cssEditor.setValue(this.widget.templateCss ? this.widget.templateCss : '', -1); + } + } + ); } beautifyHtml(): void { - const res = html_beautify(this.widget.templateHtml, {indent_size: 4, wrap_line_length: 60}); - if (this.widget.templateHtml !== res) { - this.isDirty = true; - this.widget.templateHtml = res; - this.htmlEditor.setValue(this.widget.templateHtml ? this.widget.templateHtml : '', -1); - } + beautifyHtml(this.widget.templateHtml, {indent_size: 4, wrap_line_length: 60}).subscribe( + (res) => { + if (this.widget.templateHtml !== res) { + this.isDirty = true; + this.widget.templateHtml = res; + this.htmlEditor.setValue(this.widget.templateHtml ? this.widget.templateHtml : '', -1); + } + } + ); } beautifyJson(): void { - const res = js_beautify(this.widget.settingsSchema, {indent_size: 4}); - if (this.widget.settingsSchema !== res) { - this.isDirty = true; - this.widget.settingsSchema = res; - this.jsonSettingsEditor.setValue(this.widget.settingsSchema ? this.widget.settingsSchema : '', -1); - } + beautifyJs(this.widget.settingsSchema, {indent_size: 4}).subscribe( + (res) => { + if (this.widget.settingsSchema !== res) { + this.isDirty = true; + this.widget.settingsSchema = res; + this.jsonSettingsEditor.setValue(this.widget.settingsSchema ? this.widget.settingsSchema : '', -1); + } + } + ); } beautifyDataKeyJson(): void { - const res = js_beautify(this.widget.dataKeySettingsSchema, {indent_size: 4}); - if (this.widget.dataKeySettingsSchema !== res) { - this.isDirty = true; - this.widget.dataKeySettingsSchema = res; - this.dataKeyJsonSettingsEditor.setValue(this.widget.dataKeySettingsSchema ? this.widget.dataKeySettingsSchema : '', -1); - } + beautifyJs(this.widget.dataKeySettingsSchema, {indent_size: 4}).subscribe( + (res) => { + if (this.widget.dataKeySettingsSchema !== res) { + this.isDirty = true; + this.widget.dataKeySettingsSchema = res; + this.dataKeyJsonSettingsEditor.setValue(this.widget.dataKeySettingsSchema ? this.widget.dataKeySettingsSchema : '', -1); + } + } + ); } beautifyJs(): void { - const res = js_beautify(this.widget.controllerScript, {indent_size: 4, wrap_line_length: 60}); - if (this.widget.controllerScript !== res) { - this.isDirty = true; - this.widget.controllerScript = res; - this.jsEditor.setValue(this.widget.controllerScript ? this.widget.controllerScript : '', -1); - } + beautifyJs(this.widget.controllerScript, {indent_size: 4, wrap_line_length: 60}).subscribe( + (res) => { + if (this.widget.controllerScript !== res) { + this.isDirty = true; + this.widget.controllerScript = res; + this.jsEditor.setValue(this.widget.controllerScript ? this.widget.controllerScript : '', -1); + } + } + ); } removeResource(index: number) { diff --git a/ui-ngx/src/app/shared/components/dialog/node-script-test-dialog.component.ts b/ui-ngx/src/app/shared/components/dialog/node-script-test-dialog.component.ts index 007a96dbad..8202728131 100644 --- a/ui-ngx/src/app/shared/components/dialog/node-script-test-dialog.component.ts +++ b/ui-ngx/src/app/shared/components/dialog/node-script-test-dialog.component.ts @@ -41,6 +41,7 @@ import { TestScriptInputParams } from '@shared/models/rule-node.models'; import { RuleChainService } from '@core/http/rule-chain.service'; import { mergeMap } from 'rxjs/operators'; import { ActionNotificationShow } from '@core/notification/notification.actions'; +import { beautifyJs } from '@shared/models/beautify.models'; export interface NodeScriptTestDialogData { script: string; @@ -110,12 +111,17 @@ export class NodeScriptTestDialogComponent extends DialogComponent { + this.nodeScriptTestFormGroup.get('payload').get('msg').patchValue(res, {emitEvent: false}); + } + ); } ngAfterViewInit(): void { @@ -166,7 +172,11 @@ export class NodeScriptTestDialogComponent extends DialogComponent { - this.nodeScriptTestFormGroup.get('output').setValue(js_beautify(output, {indent_size: 4})); + beautifyJs(output, {indent_size: 4}).subscribe( + (res) => { + this.nodeScriptTestFormGroup.get('output').setValue(res); + } + ); }); } diff --git a/ui-ngx/src/app/shared/components/js-func.component.ts b/ui-ngx/src/app/shared/components/js-func.component.ts index 0fa827e4b7..93e7848072 100644 --- a/ui-ngx/src/app/shared/components/js-func.component.ts +++ b/ui-ngx/src/app/shared/components/js-func.component.ts @@ -37,6 +37,7 @@ import { TranslateService } from '@ngx-translate/core'; import { CancelAnimationFrame, RafService } from '@core/services/raf.service'; import { ResizeObserver } from '@juggle/resize-observer'; import { TbEditorCompleter } from '@shared/models/ace/completion.models'; +import { beautifyJs } from '@shared/models/beautify.models'; @Component({ selector: 'tb-js-func', @@ -214,9 +215,12 @@ export class JsFuncComponent implements OnInit, OnDestroy, ControlValueAccessor, } beautifyJs() { - const res = js_beautify(this.modelValue, {indent_size: 4, wrap_line_length: 60}); - this.jsEditor.setValue(res ? res : '', -1); - this.updateView(); + beautifyJs(this.modelValue, {indent_size: 4, wrap_line_length: 60}).subscribe( + (res) => { + this.jsEditor.setValue(res ? res : '', -1); + this.updateView(); + } + ); } validateOnSubmit(): void { diff --git a/ui-ngx/src/app/shared/components/json-content.component.ts b/ui-ngx/src/app/shared/components/json-content.component.ts index cbe5368a8a..00a7745819 100644 --- a/ui-ngx/src/app/shared/components/json-content.component.ts +++ b/ui-ngx/src/app/shared/components/json-content.component.ts @@ -36,6 +36,7 @@ import { CancelAnimationFrame, RafService } from '@core/services/raf.service'; import { guid } from '@core/utils'; import { ResizeObserver } from '@juggle/resize-observer'; import { getAce } from '@shared/models/ace/ace.models'; +import { beautifyJs } from '@shared/models/beautify.models'; @Component({ selector: 'tb-json-content', @@ -286,9 +287,12 @@ export class JsonContentComponent implements OnInit, ControlValueAccessor, Valid } beautifyJSON() { - const res = js_beautify(this.contentBody, {indent_size: 4, wrap_line_length: 60}); - this.jsonEditor.setValue(res ? res : '', -1); - this.updateView(); + beautifyJs(this.contentBody, {indent_size: 4, wrap_line_length: 60}).subscribe( + (res) => { + this.jsonEditor.setValue(res ? res : '', -1); + this.updateView(); + } + ); } minifyJSON() { diff --git a/ui-ngx/src/app/shared/components/json-form/react/json-form-ace-editor.tsx b/ui-ngx/src/app/shared/components/json-form/react/json-form-ace-editor.tsx index ae2e112601..8e630582a3 100644 --- a/ui-ngx/src/app/shared/components/json-form/react/json-form-ace-editor.tsx +++ b/ui-ngx/src/app/shared/components/json-form/react/json-form-ace-editor.tsx @@ -22,6 +22,7 @@ import { IEditorProps } from 'react-ace/src/types'; import { map, mergeMap } from 'rxjs/operators'; import { loadAceDependencies } from '@shared/models/ace/ace.models'; import { from } from 'rxjs'; +import { Observable } from 'rxjs/internal/Observable'; const ReactAce = React.lazy(() => { return loadAceDependencies().pipe( @@ -33,7 +34,7 @@ const ReactAce = React.lazy(() => { interface ThingsboardAceEditorProps extends JsonFormFieldProps { mode: string; - onTidy: (value: string) => string; + onTidy: (value: string) => Observable; } interface ThingsboardAceEditorState extends JsonFormFieldState { @@ -84,15 +85,18 @@ class ThingsboardAceEditor extends React.Component { + this.setState({ + value: processedValue + }); + this.props.onChangeValidate({ + target: { + value: processedValue + } + }); + } + ); } } diff --git a/ui-ngx/src/app/shared/components/json-form/react/json-form-css.tsx b/ui-ngx/src/app/shared/components/json-form/react/json-form-css.tsx index a5107ad4db..e8b3616b8b 100644 --- a/ui-ngx/src/app/shared/components/json-form/react/json-form-css.tsx +++ b/ui-ngx/src/app/shared/components/json-form/react/json-form-css.tsx @@ -16,7 +16,8 @@ import * as React from 'react'; import ThingsboardAceEditor from './json-form-ace-editor'; import { JsonFormFieldProps, JsonFormFieldState } from '@shared/components/json-form/react/json-form.models'; -import { css_beautify } from 'js-beautify'; +import { Observable } from 'rxjs/internal/Observable'; +import { beautifyCss } from '@shared/models/beautify.models'; class ThingsboardCss extends React.Component { @@ -25,8 +26,8 @@ class ThingsboardCss extends React.Component { + return beautifyCss(css, {indent_size: 4}); } render() { diff --git a/ui-ngx/src/app/shared/components/json-form/react/json-form-html.tsx b/ui-ngx/src/app/shared/components/json-form/react/json-form-html.tsx index 4d7d0c956f..9e929b36aa 100644 --- a/ui-ngx/src/app/shared/components/json-form/react/json-form-html.tsx +++ b/ui-ngx/src/app/shared/components/json-form/react/json-form-html.tsx @@ -15,8 +15,9 @@ */ import * as React from 'react'; import ThingsboardAceEditor from './json-form-ace-editor'; -import { html_beautify } from 'js-beautify'; import { JsonFormFieldProps, JsonFormFieldState } from '@shared/components/json-form/react/json-form.models'; +import { Observable } from 'rxjs/internal/Observable'; +import { beautifyHtml } from '@shared/models/beautify.models'; class ThingsboardHtml extends React.Component { @@ -25,8 +26,8 @@ class ThingsboardHtml extends React.Component { + return beautifyHtml(html, {indent_size: 4}); } render() { diff --git a/ui-ngx/src/app/shared/components/json-form/react/json-form-javascript.tsx b/ui-ngx/src/app/shared/components/json-form/react/json-form-javascript.tsx index 4530434b03..427c79ac65 100644 --- a/ui-ngx/src/app/shared/components/json-form/react/json-form-javascript.tsx +++ b/ui-ngx/src/app/shared/components/json-form/react/json-form-javascript.tsx @@ -16,6 +16,8 @@ import * as React from 'react'; import ThingsboardAceEditor from './json-form-ace-editor'; import { JsonFormFieldProps, JsonFormFieldState } from '@shared/components/json-form/react/json-form.models'; +import { Observable } from 'rxjs/internal/Observable'; +import { beautifyJs } from '@shared/models/beautify.models'; class ThingsboardJavaScript extends React.Component { @@ -24,8 +26,8 @@ class ThingsboardJavaScript extends React.Component { + return beautifyJs(javascript, {indent_size: 4, wrap_line_length: 60}); } render() { diff --git a/ui-ngx/src/app/shared/components/json-form/react/json-form-json.tsx b/ui-ngx/src/app/shared/components/json-form/react/json-form-json.tsx index 5fc5f5d98f..0034b50422 100644 --- a/ui-ngx/src/app/shared/components/json-form/react/json-form-json.tsx +++ b/ui-ngx/src/app/shared/components/json-form/react/json-form-json.tsx @@ -16,6 +16,8 @@ import * as React from 'react'; import ThingsboardAceEditor from './json-form-ace-editor'; import { JsonFormFieldProps, JsonFormFieldState } from '@shared/components/json-form/react/json-form.models'; +import { Observable } from 'rxjs/internal/Observable'; +import { beautifyJs } from '@shared/models/beautify.models'; class ThingsboardJson extends React.Component { @@ -24,8 +26,8 @@ class ThingsboardJson extends React.Component { + return beautifyJs(json, {indent_size: 4}); } render() { diff --git a/ui-ngx/src/app/shared/components/nav-tree.component.ts b/ui-ngx/src/app/shared/components/nav-tree.component.ts index a06a33d5c5..08b2256646 100644 --- a/ui-ngx/src/app/shared/components/nav-tree.component.ts +++ b/ui-ngx/src/app/shared/components/nav-tree.component.ts @@ -145,128 +145,131 @@ export class NavTreeComponent implements OnInit { }; } - this.treeElement = $('.tb-nav-tree-container', this.elementRef.nativeElement).jstree(config); + import('jstree').then(() => { - this.treeElement.on('changed.jstree', (e: any, data) => { - const node: NavTreeNode = data.instance.get_selected(true)[0]; - if (this.onNodeSelected) { - this.ngZone.run(() => this.onNodeSelected(node, e as Event)); - } - }); - - this.treeElement.on('model.jstree', (e: any, data) => { - if (this.onNodesInserted) { - this.ngZone.run(() => this.onNodesInserted(data.nodes, data.parent)); - } - }); + this.treeElement = $('.tb-nav-tree-container', this.elementRef.nativeElement).jstree(config); - if (this.editCallbacks) { - this.editCallbacks.selectNode = id => { - const node: NavTreeNode = this.treeElement.jstree('get_node', id); - if (node) { - this.treeElement.jstree('deselect_all', true); - this.treeElement.jstree('select_node', node); - } - }; - this.editCallbacks.deselectAll = () => { - this.treeElement.jstree('deselect_all'); - }; - this.editCallbacks.getNode = (id) => { - const node: NavTreeNode = this.treeElement.jstree('get_node', id); - return node; - }; - this.editCallbacks.getParentNodeId = (id) => { - const node: NavTreeNode = this.treeElement.jstree('get_node', id); - if (node) { - return this.treeElement.jstree('get_parent', node); + this.treeElement.on('changed.jstree', (e: any, data) => { + const node: NavTreeNode = data.instance.get_selected(true)[0]; + if (this.onNodeSelected) { + this.ngZone.run(() => this.onNodeSelected(node, e as Event)); } - }; - this.editCallbacks.openNode = (id, cb) => { - const node: NavTreeNode = this.treeElement.jstree('get_node', id); - if (node) { - this.treeElement.jstree('open_node', node, cb); - } - }; - this.editCallbacks.nodeIsOpen = (id) => { - const node: NavTreeNode = this.treeElement.jstree('get_node', id); - if (node) { - return this.treeElement.jstree('is_open', node); - } else { - return true; - } - }; - this.editCallbacks.nodeIsLoaded = (id) => { - const node: NavTreeNode = this.treeElement.jstree('get_node', id); - if (node) { - return this.treeElement.jstree('is_loaded', node); - } else { - return true; + }); + + this.treeElement.on('model.jstree', (e: any, data) => { + if (this.onNodesInserted) { + this.ngZone.run(() => this.onNodesInserted(data.nodes, data.parent)); } - }; - this.editCallbacks.refreshNode = (id) => { - if (id === '#') { - this.treeElement.jstree('refresh'); - this.treeElement.jstree('redraw'); - } else { + }); + + if (this.editCallbacks) { + this.editCallbacks.selectNode = id => { + const node: NavTreeNode = this.treeElement.jstree('get_node', id); + if (node) { + this.treeElement.jstree('deselect_all', true); + this.treeElement.jstree('select_node', node); + } + }; + this.editCallbacks.deselectAll = () => { + this.treeElement.jstree('deselect_all'); + }; + this.editCallbacks.getNode = (id) => { + const node: NavTreeNode = this.treeElement.jstree('get_node', id); + return node; + }; + this.editCallbacks.getParentNodeId = (id) => { const node: NavTreeNode = this.treeElement.jstree('get_node', id); if (node) { - const opened = this.treeElement.jstree('is_open', node); - this.treeElement.jstree('refresh_node', node); + return this.treeElement.jstree('get_parent', node); + } + }; + this.editCallbacks.openNode = (id, cb) => { + const node: NavTreeNode = this.treeElement.jstree('get_node', id); + if (node) { + this.treeElement.jstree('open_node', node, cb); + } + }; + this.editCallbacks.nodeIsOpen = (id) => { + const node: NavTreeNode = this.treeElement.jstree('get_node', id); + if (node) { + return this.treeElement.jstree('is_open', node); + } else { + return true; + } + }; + this.editCallbacks.nodeIsLoaded = (id) => { + const node: NavTreeNode = this.treeElement.jstree('get_node', id); + if (node) { + return this.treeElement.jstree('is_loaded', node); + } else { + return true; + } + }; + this.editCallbacks.refreshNode = (id) => { + if (id === '#') { + this.treeElement.jstree('refresh'); this.treeElement.jstree('redraw'); - if (node.children && opened/* && !node.children.length*/) { - this.treeElement.jstree('open_node', node); + } else { + const node: NavTreeNode = this.treeElement.jstree('get_node', id); + if (node) { + const opened = this.treeElement.jstree('is_open', node); + this.treeElement.jstree('refresh_node', node); + this.treeElement.jstree('redraw'); + if (node.children && opened/* && !node.children.length*/) { + this.treeElement.jstree('open_node', node); + } } } - } - }; - this.editCallbacks.updateNode = (id, newName) => { - const node: NavTreeNode = this.treeElement.jstree('get_node', id); - if (node) { - this.treeElement.jstree('rename_node', node, newName); - } - }; - this.editCallbacks.createNode = (parentId, node, pos) => { - const parentNode: NavTreeNode = this.treeElement.jstree('get_node', parentId); - if (parentNode) { - this.treeElement.jstree('create_node', parentNode, node, pos); - } - }; - this.editCallbacks.deleteNode = (id) => { - const node: NavTreeNode = this.treeElement.jstree('get_node', id); - if (node) { - this.treeElement.jstree('delete_node', node); - } - }; - this.editCallbacks.disableNode = (id) => { - const node: NavTreeNode = this.treeElement.jstree('get_node', id); - if (node) { - this.treeElement.jstree('disable_node', node); - } - }; - this.editCallbacks.enableNode = (id) => { - const node: NavTreeNode = this.treeElement.jstree('get_node', id); - if (node) { - this.treeElement.jstree('enable_node', node); - } - }; - this.editCallbacks.setNodeHasChildren = (id, hasChildren) => { - const node: NavTreeNode = this.treeElement.jstree('get_node', id); - if (node) { - if (!node.children || (Array.isArray(node.children) && !node.children.length)) { - node.children = hasChildren; - node.state.loaded = !hasChildren; - node.state.opened = false; - this.treeElement.jstree('_node_changed', node.id); - this.treeElement.jstree('redraw'); + }; + this.editCallbacks.updateNode = (id, newName) => { + const node: NavTreeNode = this.treeElement.jstree('get_node', id); + if (node) { + this.treeElement.jstree('rename_node', node, newName); } - } - }; - this.editCallbacks.search = (searchText) => { - this.treeElement.jstree('search', searchText); - }; - this.editCallbacks.clearSearch = () => { - this.treeElement.jstree('clear_search'); - }; - } + }; + this.editCallbacks.createNode = (parentId, node, pos) => { + const parentNode: NavTreeNode = this.treeElement.jstree('get_node', parentId); + if (parentNode) { + this.treeElement.jstree('create_node', parentNode, node, pos); + } + }; + this.editCallbacks.deleteNode = (id) => { + const node: NavTreeNode = this.treeElement.jstree('get_node', id); + if (node) { + this.treeElement.jstree('delete_node', node); + } + }; + this.editCallbacks.disableNode = (id) => { + const node: NavTreeNode = this.treeElement.jstree('get_node', id); + if (node) { + this.treeElement.jstree('disable_node', node); + } + }; + this.editCallbacks.enableNode = (id) => { + const node: NavTreeNode = this.treeElement.jstree('get_node', id); + if (node) { + this.treeElement.jstree('enable_node', node); + } + }; + this.editCallbacks.setNodeHasChildren = (id, hasChildren) => { + const node: NavTreeNode = this.treeElement.jstree('get_node', id); + if (node) { + if (!node.children || (Array.isArray(node.children) && !node.children.length)) { + node.children = hasChildren; + node.state.loaded = !hasChildren; + node.state.opened = false; + this.treeElement.jstree('_node_changed', node.id); + this.treeElement.jstree('redraw'); + } + } + }; + this.editCallbacks.search = (searchText) => { + this.treeElement.jstree('search', searchText); + }; + this.editCallbacks.clearSearch = () => { + this.treeElement.jstree('clear_search'); + }; + } + }); } } diff --git a/ui-ngx/src/app/shared/components/time/timezone-select.component.ts b/ui-ngx/src/app/shared/components/time/timezone-select.component.ts index 7dc89df7da..a65fc28481 100644 --- a/ui-ngx/src/app/shared/components/time/timezone-select.component.ts +++ b/ui-ngx/src/app/shared/components/time/timezone-select.component.ts @@ -16,21 +16,14 @@ import { AfterViewInit, Component, forwardRef, Input, NgZone, OnInit, ViewChild } from '@angular/core'; import { ControlValueAccessor, FormBuilder, FormGroup, NG_VALUE_ACCESSOR } from '@angular/forms'; -import { Observable, of } from 'rxjs'; +import { Observable } from 'rxjs'; import { map, mergeMap, share, tap } from 'rxjs/operators'; import { Store } from '@ngrx/store'; import { AppState } from '@app/core/core.state'; import { TranslateService } from '@ngx-translate/core'; import { coerceBooleanProperty } from '@angular/cdk/coercion'; -import * as _moment from 'moment-timezone'; import { MatAutocompleteTrigger } from '@angular/material/autocomplete'; - -interface TimezoneInfo { - id: string; - name: string; - offset: string; - nOffset: number; -} +import { getTimezoneInfo, getTimezones, TimezoneInfo } from '@shared/models/time/time.models'; @Component({ selector: 'tb-timezone-select', @@ -50,28 +43,14 @@ export class TimezoneSelectComponent implements ControlValueAccessor, OnInit, Af defaultTimezoneId: string = null; - defaultTimezoneInfo: TimezoneInfo = null; - - timezones: TimezoneInfo[] = _moment.tz.names().map((zoneName) => { - const tz = _moment.tz(zoneName); - return { - id: zoneName, - name: zoneName.replace(/_/g, ' '), - offset: `UTC${tz.format('Z')}`, - nOffset: tz.utcOffset() - } - }); + timezones$ = getTimezones().pipe( + share() + ); @Input() set defaultTimezone(timezone: string) { if (this.defaultTimezoneId !== timezone) { this.defaultTimezoneId = timezone; - if (this.defaultTimezoneId) { - this.defaultTimezoneInfo = - this.timezones.find((timezoneInfo) => timezoneInfo.id === this.defaultTimezoneId); - } else { - this.defaultTimezoneInfo = null; - } } } @@ -150,23 +129,27 @@ export class TimezoneSelectComponent implements ControlValueAccessor, OnInit, Af writeValue(value: string | null): void { this.searchText = ''; - let foundTimezone: TimezoneInfo = null; if (value !== null) { - foundTimezone = this.timezones.find(timezoneInfo => timezoneInfo.id === value); - } - if (foundTimezone !== null) { - this.modelValue = value; - this.selectTimezoneFormGroup.get('timezone').patchValue(foundTimezone, {emitEvent: false}); + getTimezoneInfo(value, this.defaultTimezoneId).subscribe( + (foundTimezone) => { + if (foundTimezone !== null) { + this.selectTimezoneFormGroup.get('timezone').patchValue(foundTimezone, {emitEvent: false}); + if (foundTimezone.id !== value) { + setTimeout(() => { + this.updateView(foundTimezone.id); + }, 0); + } else { + this.modelValue = value; + } + } else { + this.modelValue = null; + this.selectTimezoneFormGroup.get('timezone').patchValue('', {emitEvent: false}); + } + } + ); } else { - if (this.defaultTimezoneInfo) { - this.selectTimezoneFormGroup.get('timezone').patchValue(this.defaultTimezoneInfo, {emitEvent: false}); - setTimeout(() => { - this.updateView(this.defaultTimezoneInfo.id); - }, 0); - } else { - this.modelValue = null; - this.selectTimezoneFormGroup.get('timezone').patchValue('', {emitEvent: false}); - } + this.modelValue = null; + this.selectTimezoneFormGroup.get('timezone').patchValue('', {emitEvent: false}); } this.dirty = true; } @@ -182,10 +165,15 @@ export class TimezoneSelectComponent implements ControlValueAccessor, OnInit, Af if (this.ignoreClosePanel) { this.ignoreClosePanel = false; } else { - if (!this.modelValue && this.defaultTimezoneInfo) { - this.ngZone.run(() => { - this.selectTimezoneFormGroup.get('timezone').reset(this.defaultTimezoneInfo, {emitEvent: true}); - }); + if (!this.modelValue && this.defaultTimezoneId) { + getTimezoneInfo(this.defaultTimezoneId).subscribe( + (defaultTimezoneInfo) => { + if (defaultTimezoneInfo !== null) { + this.ngZone.run(() => { + this.selectTimezoneFormGroup.get('timezone').reset(defaultTimezoneInfo, {emitEvent: true}); + }); + } + }); } } } @@ -203,12 +191,13 @@ export class TimezoneSelectComponent implements ControlValueAccessor, OnInit, Af fetchTimezones(searchText?: string): Observable> { this.searchText = searchText; - let result = this.timezones; if (searchText && searchText.length) { - result = this.timezones.filter((timezoneInfo) => - timezoneInfo.name.toLowerCase().includes(searchText.toLowerCase())); + return getTimezones().pipe( + map((timezones) => timezones.filter((timezoneInfo) => + timezoneInfo.name.toLowerCase().includes(searchText.toLowerCase()))) + ); } - return of(result); + return getTimezones(); } clear() { diff --git a/ui-ngx/src/app/shared/models/beautify.models.ts b/ui-ngx/src/app/shared/models/beautify.models.ts new file mode 100644 index 0000000000..fa07721e29 --- /dev/null +++ b/ui-ngx/src/app/shared/models/beautify.models.ts @@ -0,0 +1,79 @@ +/// +/// Copyright © 2016-2020 The Thingsboard Authors +/// +/// Licensed under the Apache License, Version 2.0 (the "License"); +/// you may not use this file except in compliance with the License. +/// You may obtain a copy of the License at +/// +/// http://www.apache.org/licenses/LICENSE-2.0 +/// +/// Unless required by applicable law or agreed to in writing, software +/// distributed under the License is distributed on an "AS IS" BASIS, +/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +/// See the License for the specific language governing permissions and +/// limitations under the License. +/// + +import { Observable } from 'rxjs/internal/Observable'; +import { from, of } from 'rxjs'; +import { map, tap } from 'rxjs/operators'; + +let jsBeautifyModule: any; +let htmlBeautifyModule: any; +let cssBeautifyModule: any; + +function loadJsBeautify(): Observable { + if (jsBeautifyModule) { + return of(jsBeautifyModule); + } else { + return from(import('js-beautify/js/lib/beautify.js')).pipe( + tap((module) => { + jsBeautifyModule = module; + }) + ); + } +} + +function loadHtmlBeautify(): Observable { + if (htmlBeautifyModule) { + return of(htmlBeautifyModule); + } else { + return from(import('js-beautify/js/lib/beautify-html.js')).pipe( + tap((module) => { + htmlBeautifyModule = module; + }) + ); + } +} + +function loadCssBeautify(): Observable { + if (cssBeautifyModule) { + return of(cssBeautifyModule); + } else { + return from(import('js-beautify/js/lib/beautify-css.js')).pipe( + tap((module) => { + cssBeautifyModule = module; + }) + ); + } +} + +export function beautifyJs(source: string, options?: JSBeautifyOptions): Observable { + return loadJsBeautify().pipe( + map((mod) => { + return mod.js_beautify(source, options); + }) + ); +} + +export function beautifyCss(source: string, options?: CSSBeautifyOptions): Observable { + return loadCssBeautify().pipe( + map((mod) => mod.css_beautify(source, options)) + ); +} + +export function beautifyHtml(source: string, options?: HTMLBeautifyOptions): Observable { + return loadHtmlBeautify().pipe( + map((mod) => mod.html_beautify(source, options)) + ); +} diff --git a/ui-ngx/src/app/shared/models/device.models.ts b/ui-ngx/src/app/shared/models/device.models.ts index ffeae2f56d..e4d240d0d5 100644 --- a/ui-ngx/src/app/shared/models/device.models.ts +++ b/ui-ngx/src/app/shared/models/device.models.ts @@ -25,7 +25,7 @@ import { RuleChainId } from '@shared/models/id/rule-chain-id'; import { EntityInfoData } from '@shared/models/entity.models'; import { KeyFilter } from '@shared/models/query/query.models'; import { TimeUnit } from '@shared/models/time/time.models'; -import * as _moment from 'moment-timezone'; +import * as _moment from 'moment'; import { AbstractControl, ValidationErrors } from '@angular/forms'; export enum DeviceProfileType { diff --git a/ui-ngx/src/app/shared/models/time/time.models.ts b/ui-ngx/src/app/shared/models/time/time.models.ts index b81952dbde..19d2a12e26 100644 --- a/ui-ngx/src/app/shared/models/time/time.models.ts +++ b/ui-ngx/src/app/shared/models/time/time.models.ts @@ -17,6 +17,9 @@ import { TimeService } from '@core/services/time.service'; import { deepClone, isDefined, isUndefined } from '@app/core/utils'; import * as moment_ from 'moment'; +import { Observable } from 'rxjs/internal/Observable'; +import { from, of } from 'rxjs'; +import { map, tap } from 'rxjs/operators'; const moment = moment_; @@ -481,3 +484,63 @@ export const timeUnitTranslationMap = new Map( [TimeUnit.DAYS, 'timeunit.days'] ] ); + +export interface TimezoneInfo { + id: string; + name: string; + offset: string; + nOffset: number; +} + +let timezones: TimezoneInfo[] = null; +let defaultTimezone: string = null; + +export function getTimezones(): Observable { + if (timezones) { + return of(timezones); + } else { + return from(import('moment-timezone')).pipe( + map((monentTz) => { + return monentTz.tz.names().map((zoneName) => { + const tz = monentTz.tz(zoneName); + return { + id: zoneName, + name: zoneName.replace(/_/g, ' '), + offset: `UTC${tz.format('Z')}`, + nOffset: tz.utcOffset() + }; + }); + }), + tap((zones) => { + timezones = zones; + }) + ); + } +} + +export function getTimezoneInfo(timezoneId: string, defaultTimezoneId?: string): Observable { + return getTimezones().pipe( + map((timezoneList) => { + let foundTimezone = timezoneList.find(timezoneInfo => timezoneInfo.id === timezoneId); + if (!foundTimezone && defaultTimezoneId) { + foundTimezone = timezoneList.find(timezoneInfo => timezoneInfo.id === defaultTimezoneId); + } + return foundTimezone; + }) + ); +} + +export function getDefaultTimezone(): Observable { + if (defaultTimezone) { + return of(defaultTimezone); + } else { + return from(import('moment-timezone')).pipe( + map((monentTz) => { + return monentTz.tz.guess(); + }), + tap((zone) => { + defaultTimezone = zone; + }) + ); + } +} diff --git a/ui-ngx/tsconfig.json b/ui-ngx/tsconfig.json index baaa5cdb3a..1fb19bb630 100644 --- a/ui-ngx/tsconfig.json +++ b/ui-ngx/tsconfig.json @@ -37,6 +37,18 @@ ], "ace": [ "node_modules/ace-builds/src-noconflict/ace.js" + ], + "jquery": [ + "node_modules/jquery/dist/jquery.min.js" + ], + "jquery.terminal": [ + "node_modules/jquery.terminal/js/jquery.terminal.js" + ], + "tooltipster": [ + "node_modules/tooltipster/dist/js/tooltipster.bundle.min.js" + ], + "jstree": [ + "node_modules/jstree/dist/jstree.min.js" ] }, "lib": [ From 6ec9b9c7e131061a9249a6803c4f27a6125219e7 Mon Sep 17 00:00:00 2001 From: Serhii Mikhnytskyi Date: Tue, 5 Jan 2021 13:52:32 +0200 Subject: [PATCH 06/11] added - hide flot tooltip on chart destroying, prevent showing tooltip on flot hover, if edit mode is on. --- .../app/modules/home/components/widget/lib/flot-widget.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/flot-widget.ts b/ui-ngx/src/app/modules/home/components/widget/lib/flot-widget.ts index b7962a098d..b779c3bf43 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/flot-widget.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/flot-widget.ts @@ -718,6 +718,10 @@ export class TbFlot { public destroy() { this.cleanup(); + if (this.tooltip) { + this.tooltip.stop(true); + this.tooltip.hide(); + } if (this.plot) { this.plot.destroy(); this.plot = null; @@ -1170,7 +1174,7 @@ export class TbFlot { if (!this.plot) { return; } - if (!this.tooltipIndividual || item) { + if ((!this.tooltipIndividual || item) && !this.ctx.isEdit) { const multipleModeTooltip = !this.tooltipIndividual; if (multipleModeTooltip) { this.plot.unhighlight(); From 8766902d45389a035bc68e4bfeda13528249dbc9 Mon Sep 17 00:00:00 2001 From: Igor Kulikov Date: Tue, 5 Jan 2021 16:09:39 +0200 Subject: [PATCH 07/11] UI: Class/Models optimizations --- .../modules/home/components/widget/lib/analogue-compass.ts | 1 + .../home/components/widget/lib/analogue-linear-gauge.ts | 1 + .../home/components/widget/lib/analogue-radial-gauge.ts | 1 + .../app/modules/home/components/widget/lib/digital-gauge.ts | 1 + ui-ngx/src/app/shared/models/beautify.models.ts | 6 +++--- 5 files changed, 7 insertions(+), 3 deletions(-) diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/analogue-compass.ts b/ui-ngx/src/app/modules/home/components/widget/lib/analogue-compass.ts index d3a8db18a7..8b519fe859 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/analogue-compass.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/analogue-compass.ts @@ -30,6 +30,7 @@ import RadialGauge = CanvasGauges.RadialGauge; const analogueCompassSettingsSchemaValue = analogueCompassSettingsSchema; +// @dynamic export class TbAnalogueCompass extends TbBaseGauge { static get settingsSchema(): JsonSettingsSchema { diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/analogue-linear-gauge.ts b/ui-ngx/src/app/modules/home/components/widget/lib/analogue-linear-gauge.ts index 8307069c86..8dbe37c3cd 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/analogue-linear-gauge.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/analogue-linear-gauge.ts @@ -32,6 +32,7 @@ const tinycolor = tinycolor_; const analogueLinearGaugeSettingsSchemaValue = getAnalogueLinearGaugeSettingsSchema(); +// @dynamic export class TbAnalogueLinearGauge extends TbAnalogueGauge{ static get settingsSchema(): JsonSettingsSchema { diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/analogue-radial-gauge.ts b/ui-ngx/src/app/modules/home/components/widget/lib/analogue-radial-gauge.ts index 05c1969657..658a639a2e 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/analogue-radial-gauge.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/analogue-radial-gauge.ts @@ -28,6 +28,7 @@ import BaseGauge = CanvasGauges.BaseGauge; const analogueRadialGaugeSettingsSchemaValue = getAnalogueRadialGaugeSettingsSchema(); +// @dynamic export class TbAnalogueRadialGauge extends TbAnalogueGauge{ static get settingsSchema(): JsonSettingsSchema { diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/digital-gauge.ts b/ui-ngx/src/app/modules/home/components/widget/lib/digital-gauge.ts index 11cc8dc732..8c6f0e56f4 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/digital-gauge.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/digital-gauge.ts @@ -46,6 +46,7 @@ const tinycolor = tinycolor_; const digitalGaugeSettingsSchemaValue = digitalGaugeSettingsSchema; +// @dynamic export class TbCanvasDigitalGauge { static get settingsSchema(): JsonSettingsSchema { diff --git a/ui-ngx/src/app/shared/models/beautify.models.ts b/ui-ngx/src/app/shared/models/beautify.models.ts index fa07721e29..d28d8e00c4 100644 --- a/ui-ngx/src/app/shared/models/beautify.models.ts +++ b/ui-ngx/src/app/shared/models/beautify.models.ts @@ -58,7 +58,7 @@ function loadCssBeautify(): Observable { } } -export function beautifyJs(source: string, options?: JSBeautifyOptions): Observable { +export function beautifyJs(source: string, options?: any): Observable { return loadJsBeautify().pipe( map((mod) => { return mod.js_beautify(source, options); @@ -66,13 +66,13 @@ export function beautifyJs(source: string, options?: JSBeautifyOptions): Observa ); } -export function beautifyCss(source: string, options?: CSSBeautifyOptions): Observable { +export function beautifyCss(source: string, options?: any): Observable { return loadCssBeautify().pipe( map((mod) => mod.css_beautify(source, options)) ); } -export function beautifyHtml(source: string, options?: HTMLBeautifyOptions): Observable { +export function beautifyHtml(source: string, options?: any): Observable { return loadHtmlBeautify().pipe( map((mod) => mod.html_beautify(source, options)) ); From 75d18d73034001f3679d60caf125c1d373505b86 Mon Sep 17 00:00:00 2001 From: Igor Kulikov Date: Tue, 5 Jan 2021 16:20:30 +0200 Subject: [PATCH 08/11] Improve timezone-select component --- .../time/timezone-select.component.ts | 46 ++++++++++--------- .../src/app/shared/models/time/time.models.ts | 20 +++++--- 2 files changed, 39 insertions(+), 27 deletions(-) diff --git a/ui-ngx/src/app/shared/components/time/timezone-select.component.ts b/ui-ngx/src/app/shared/components/time/timezone-select.component.ts index a65fc28481..f96c80b4c1 100644 --- a/ui-ngx/src/app/shared/components/time/timezone-select.component.ts +++ b/ui-ngx/src/app/shared/components/time/timezone-select.component.ts @@ -63,6 +63,15 @@ export class TimezoneSelectComponent implements ControlValueAccessor, OnInit, Af this.requiredValue = coerceBooleanProperty(value); } + private userTimezoneByDefaultValue: boolean; + get userTimezoneByDefault(): boolean { + return this.userTimezoneByDefaultValue; + } + @Input() + set userTimezoneByDefault(value: boolean) { + this.userTimezoneByDefaultValue = coerceBooleanProperty(value); + } + @Input() disabled: boolean; @@ -129,28 +138,23 @@ export class TimezoneSelectComponent implements ControlValueAccessor, OnInit, Af writeValue(value: string | null): void { this.searchText = ''; - if (value !== null) { - getTimezoneInfo(value, this.defaultTimezoneId).subscribe( - (foundTimezone) => { - if (foundTimezone !== null) { - this.selectTimezoneFormGroup.get('timezone').patchValue(foundTimezone, {emitEvent: false}); - if (foundTimezone.id !== value) { - setTimeout(() => { - this.updateView(foundTimezone.id); - }, 0); - } else { - this.modelValue = value; - } + getTimezoneInfo(value, this.defaultTimezoneId, this.userTimezoneByDefaultValue).subscribe( + (foundTimezone) => { + if (foundTimezone !== null) { + this.selectTimezoneFormGroup.get('timezone').patchValue(foundTimezone, {emitEvent: false}); + if (foundTimezone.id !== value) { + setTimeout(() => { + this.updateView(foundTimezone.id); + }, 0); } else { - this.modelValue = null; - this.selectTimezoneFormGroup.get('timezone').patchValue('', {emitEvent: false}); + this.modelValue = value; } + } else { + this.modelValue = null; + this.selectTimezoneFormGroup.get('timezone').patchValue('', {emitEvent: false}); } - ); - } else { - this.modelValue = null; - this.selectTimezoneFormGroup.get('timezone').patchValue('', {emitEvent: false}); - } + } + ); this.dirty = true; } @@ -165,8 +169,8 @@ export class TimezoneSelectComponent implements ControlValueAccessor, OnInit, Af if (this.ignoreClosePanel) { this.ignoreClosePanel = false; } else { - if (!this.modelValue && this.defaultTimezoneId) { - getTimezoneInfo(this.defaultTimezoneId).subscribe( + if (!this.modelValue && (this.defaultTimezoneId || this.userTimezoneByDefaultValue)) { + getTimezoneInfo(this.defaultTimezoneId, this.defaultTimezoneId, this.userTimezoneByDefaultValue).subscribe( (defaultTimezoneInfo) => { if (defaultTimezoneInfo !== null) { this.ngZone.run(() => { diff --git a/ui-ngx/src/app/shared/models/time/time.models.ts b/ui-ngx/src/app/shared/models/time/time.models.ts index 19d2a12e26..314a6f2e69 100644 --- a/ui-ngx/src/app/shared/models/time/time.models.ts +++ b/ui-ngx/src/app/shared/models/time/time.models.ts @@ -19,7 +19,7 @@ import { deepClone, isDefined, isUndefined } from '@app/core/utils'; import * as moment_ from 'moment'; import { Observable } from 'rxjs/internal/Observable'; import { from, of } from 'rxjs'; -import { map, tap } from 'rxjs/operators'; +import { map, mergeMap, tap } from 'rxjs/operators'; const moment = moment_; @@ -518,14 +518,22 @@ export function getTimezones(): Observable { } } -export function getTimezoneInfo(timezoneId: string, defaultTimezoneId?: string): Observable { +export function getTimezoneInfo(timezoneId: string, defaultTimezoneId?: string, userTimezoneByDefault?: boolean): Observable { return getTimezones().pipe( - map((timezoneList) => { + mergeMap((timezoneList) => { let foundTimezone = timezoneList.find(timezoneInfo => timezoneInfo.id === timezoneId); - if (!foundTimezone && defaultTimezoneId) { - foundTimezone = timezoneList.find(timezoneInfo => timezoneInfo.id === defaultTimezoneId); + if (!foundTimezone) { + if (userTimezoneByDefault) { + return getDefaultTimezone().pipe( + map((userTimezone) => { + return timezoneList.find(timezoneInfo => timezoneInfo.id === userTimezone); + }) + ); + } else if (defaultTimezoneId) { + foundTimezone = timezoneList.find(timezoneInfo => timezoneInfo.id === defaultTimezoneId); + } } - return foundTimezone; + return of(foundTimezone); }) ); } From 02714512fa47ccb3372ca30779f4b1064cd212b5 Mon Sep 17 00:00:00 2001 From: Igor Kulikov Date: Tue, 5 Jan 2021 16:22:15 +0200 Subject: [PATCH 09/11] Improve timezone-select component --- .../components/profile/alarm/alarm-schedule.component.html | 2 +- .../components/profile/alarm/alarm-schedule.component.ts | 5 ----- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/ui-ngx/src/app/modules/home/components/profile/alarm/alarm-schedule.component.html b/ui-ngx/src/app/modules/home/components/profile/alarm/alarm-schedule.component.html index e6da924699..dc46e3f291 100644 --- a/ui-ngx/src/app/modules/home/components/profile/alarm/alarm-schedule.component.html +++ b/ui-ngx/src/app/modules/home/components/profile/alarm/alarm-schedule.component.html @@ -29,7 +29,7 @@
diff --git a/ui-ngx/src/app/modules/home/components/profile/alarm/alarm-schedule.component.ts b/ui-ngx/src/app/modules/home/components/profile/alarm/alarm-schedule.component.ts index 7ee5102aa6..cb3ac3dae4 100644 --- a/ui-ngx/src/app/modules/home/components/profile/alarm/alarm-schedule.component.ts +++ b/ui-ngx/src/app/modules/home/components/profile/alarm/alarm-schedule.component.ts @@ -40,7 +40,6 @@ import { import { isDefined, isDefinedAndNotNull } from '@core/utils'; import { MatCheckboxChange } from '@angular/material/checkbox'; import { getDefaultTimezone } from '@shared/models/time/time.models'; -import { share } from 'rxjs/operators'; @Component({ selector: 'tb-alarm-schedule', @@ -62,10 +61,6 @@ export class AlarmScheduleComponent implements ControlValueAccessor, Validator, alarmScheduleForm: FormGroup; - defaultTimezone$ = getDefaultTimezone().pipe( - share() - ); - alarmScheduleTypes = Object.keys(AlarmScheduleType); alarmScheduleType = AlarmScheduleType; alarmScheduleTypeTranslate = AlarmScheduleTypeTranslationMap; From 4aa55bccf84519fd7923ffd38cb5eed8541dda0c Mon Sep 17 00:00:00 2001 From: Illia Barkov Date: Wed, 6 Jan 2021 14:41:01 +0200 Subject: [PATCH 10/11] Added ability to return arrays in transformation script node (#3910) * Added ability to return arrays in transformation script node * fix typo * Refactoring * Improvements * Improvements --- .../script/RuleNodeJsScriptEngine.java | 15 +++++-- .../rule/engine/api/ScriptEngine.java | 3 +- .../MultipleTbMsgsCallbackWrapper.java | 45 +++++++++++++++++++ .../transform/TbAbstractTransformNode.java | 32 +++++++++++-- .../transform/TbChangeOriginatorNode.java | 11 ++--- .../transform/TbMsgCallbackWrapper.java | 23 ++++++++++ .../engine/transform/TbTransformMsgNode.java | 11 +++-- .../transform/TbTransformMsgNodeTest.java | 3 +- 8 files changed, 125 insertions(+), 18 deletions(-) create mode 100644 rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/MultipleTbMsgsCallbackWrapper.java create mode 100644 rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbMsgCallbackWrapper.java diff --git a/application/src/main/java/org/thingsboard/server/service/script/RuleNodeJsScriptEngine.java b/application/src/main/java/org/thingsboard/server/service/script/RuleNodeJsScriptEngine.java index 275e645ce2..e49e87339d 100644 --- a/application/src/main/java/org/thingsboard/server/service/script/RuleNodeJsScriptEngine.java +++ b/application/src/main/java/org/thingsboard/server/service/script/RuleNodeJsScriptEngine.java @@ -30,7 +30,9 @@ import org.thingsboard.server.common.msg.TbMsg; import org.thingsboard.server.common.msg.TbMsgMetaData; import javax.script.ScriptException; +import java.util.ArrayList; import java.util.Collections; +import java.util.List; import java.util.Map; import java.util.Set; import java.util.UUID; @@ -116,14 +118,19 @@ public class RuleNodeJsScriptEngine implements org.thingsboard.rule.engine.api.S } @Override - public ListenableFuture executeUpdateAsync(TbMsg msg) { + public ListenableFuture> executeUpdateAsync(TbMsg msg) { ListenableFuture result = executeScriptAsync(msg); return Futures.transformAsync(result, json -> { - if (!json.isObject()) { + if (json.isObject()) { + return Futures.immediateFuture(Collections.singletonList(unbindMsg(json, msg))); + } else if (json.isArray()){ + List res = new ArrayList<>(json.size()); + json.forEach(jsonObject -> res.add(unbindMsg(jsonObject, msg))); + return Futures.immediateFuture(res); + } + else{ log.warn("Wrong result type: {}", json.getNodeType()); return Futures.immediateFailedFuture(new ScriptException("Wrong result type: " + json.getNodeType())); - } else { - return Futures.immediateFuture(unbindMsg(json, msg)); } }, MoreExecutors.directExecutor()); } diff --git a/rule-engine/rule-engine-api/src/main/java/org/thingsboard/rule/engine/api/ScriptEngine.java b/rule-engine/rule-engine-api/src/main/java/org/thingsboard/rule/engine/api/ScriptEngine.java index a85f519337..8b645f6d93 100644 --- a/rule-engine/rule-engine-api/src/main/java/org/thingsboard/rule/engine/api/ScriptEngine.java +++ b/rule-engine/rule-engine-api/src/main/java/org/thingsboard/rule/engine/api/ScriptEngine.java @@ -20,13 +20,14 @@ import com.google.common.util.concurrent.ListenableFuture; import org.thingsboard.server.common.msg.TbMsg; import javax.script.ScriptException; +import java.util.List; import java.util.Set; public interface ScriptEngine { TbMsg executeUpdate(TbMsg msg) throws ScriptException; - ListenableFuture executeUpdateAsync(TbMsg msg); + ListenableFuture> executeUpdateAsync(TbMsg msg); TbMsg executeGenerate(TbMsg prevMsg) throws ScriptException; diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/MultipleTbMsgsCallbackWrapper.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/MultipleTbMsgsCallbackWrapper.java new file mode 100644 index 0000000000..c841a5a3cc --- /dev/null +++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/MultipleTbMsgsCallbackWrapper.java @@ -0,0 +1,45 @@ +/** + * Copyright © 2016-2020 The Thingsboard Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.rule.engine.transform; + +import org.thingsboard.server.common.msg.queue.RuleEngineException; +import org.thingsboard.server.common.msg.queue.TbMsgCallback; + +import java.util.concurrent.atomic.AtomicInteger; + +public class MultipleTbMsgsCallbackWrapper implements TbMsgCallbackWrapper { + + private final AtomicInteger tbMsgsCallbackCount; + private final TbMsgCallback callback; + + public MultipleTbMsgsCallbackWrapper(int tbMsgsCallbackCount, TbMsgCallback callback) { + this.tbMsgsCallbackCount = new AtomicInteger(tbMsgsCallbackCount); + this.callback = callback; + } + + @Override + public void onSuccess() { + if (tbMsgsCallbackCount.decrementAndGet() <= 0) { + callback.onSuccess(); + } + } + + @Override + public void onFailure(Throwable t) { + callback.onFailure(new RuleEngineException(t.getMessage())); + } +} + diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbAbstractTransformNode.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbAbstractTransformNode.java index 84a6b76920..0b9139a307 100644 --- a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbAbstractTransformNode.java +++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbAbstractTransformNode.java @@ -17,16 +17,19 @@ package org.thingsboard.rule.engine.transform; import com.google.common.util.concurrent.ListenableFuture; import lombok.extern.slf4j.Slf4j; -import org.thingsboard.rule.engine.api.util.TbNodeUtils; import org.thingsboard.rule.engine.api.TbContext; import org.thingsboard.rule.engine.api.TbNode; import org.thingsboard.rule.engine.api.TbNodeConfiguration; import org.thingsboard.rule.engine.api.TbNodeException; +import org.thingsboard.rule.engine.api.util.TbNodeUtils; import org.thingsboard.server.common.msg.TbMsg; +import org.thingsboard.server.common.msg.queue.RuleEngineException; +import org.thingsboard.server.common.msg.queue.TbMsgCallback; + +import java.util.List; import static org.thingsboard.common.util.DonAsynchron.withCallback; import static org.thingsboard.rule.engine.api.TbRelationTypes.FAILURE; -import static org.thingsboard.rule.engine.api.TbRelationTypes.SUCCESS; /** * Created by ashvayka on 19.01.18. @@ -61,7 +64,30 @@ public abstract class TbAbstractTransformNode implements TbNode { } } - protected abstract ListenableFuture transform(TbContext ctx, TbMsg msg); + protected void transformSuccess(TbContext ctx, TbMsg msg, List msgs) { + if (msgs != null && !msgs.isEmpty()) { + if (msgs.size() == 1) { + ctx.tellSuccess(msgs.get(0)); + } else { + TbMsgCallbackWrapper wrapper = new MultipleTbMsgsCallbackWrapper(msgs.size(), new TbMsgCallback() { + @Override + public void onSuccess() { + ctx.ack(msg); + } + + @Override + public void onFailure(RuleEngineException e) { + ctx.tellFailure(msg, e); + } + }); + msgs.forEach(newMsg -> ctx.enqueueForTellNext(newMsg, "Success", wrapper::onSuccess, wrapper::onFailure)); + } + } else { + ctx.tellNext(msg, FAILURE); + } + } + + protected abstract ListenableFuture> transform(TbContext ctx, TbMsg msg); public void setConfig(TbTransformNodeConfiguration config) { this.config = config; diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbChangeOriginatorNode.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbChangeOriginatorNode.java index 5d505f51b2..566b9bef08 100644 --- a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbChangeOriginatorNode.java +++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbChangeOriginatorNode.java @@ -15,16 +15,15 @@ */ package org.thingsboard.rule.engine.transform; -import com.google.common.base.Function; import com.google.common.collect.Sets; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import lombok.extern.slf4j.Slf4j; -import org.thingsboard.rule.engine.api.util.TbNodeUtils; import org.thingsboard.rule.engine.api.RuleNode; import org.thingsboard.rule.engine.api.TbContext; import org.thingsboard.rule.engine.api.TbNodeConfiguration; import org.thingsboard.rule.engine.api.TbNodeException; +import org.thingsboard.rule.engine.api.util.TbNodeUtils; import org.thingsboard.rule.engine.util.EntitiesAlarmOriginatorIdAsyncLoader; import org.thingsboard.rule.engine.util.EntitiesCustomerIdAsyncLoader; import org.thingsboard.rule.engine.util.EntitiesRelatedEntityIdAsyncLoader; @@ -33,7 +32,9 @@ import org.thingsboard.server.common.data.id.EntityId; import org.thingsboard.server.common.data.plugin.ComponentType; import org.thingsboard.server.common.msg.TbMsg; +import java.util.Collections; import java.util.HashSet; +import java.util.List; @Slf4j @RuleNode( @@ -65,13 +66,13 @@ public class TbChangeOriginatorNode extends TbAbstractTransformNode { } @Override - protected ListenableFuture transform(TbContext ctx, TbMsg msg) { + protected ListenableFuture> transform(TbContext ctx, TbMsg msg) { ListenableFuture newOriginator = getNewOriginator(ctx, msg.getOriginator()); - return Futures.transform(newOriginator, (Function) n -> { + return Futures.transform(newOriginator, n -> { if (n == null || n.isNullUid()) { return null; } - return ctx.transformMsg(msg, msg.getType(), n, msg.getMetaData(), msg.getData()); + return Collections.singletonList((ctx.transformMsg(msg, msg.getType(), n, msg.getMetaData(), msg.getData()))); }, ctx.getDbCallbackExecutor()); } diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbMsgCallbackWrapper.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbMsgCallbackWrapper.java new file mode 100644 index 0000000000..d05da7ce5d --- /dev/null +++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbMsgCallbackWrapper.java @@ -0,0 +1,23 @@ +/** + * Copyright © 2016-2020 The Thingsboard Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.rule.engine.transform; + +public interface TbMsgCallbackWrapper { + + void onSuccess(); + + void onFailure(Throwable t); +} diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbTransformMsgNode.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbTransformMsgNode.java index 56f15f42de..94b39af045 100644 --- a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbTransformMsgNode.java +++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbTransformMsgNode.java @@ -16,13 +16,16 @@ package org.thingsboard.rule.engine.transform; import com.google.common.util.concurrent.ListenableFuture; +import org.thingsboard.rule.engine.api.RuleNode; +import org.thingsboard.rule.engine.api.ScriptEngine; +import org.thingsboard.rule.engine.api.TbContext; +import org.thingsboard.rule.engine.api.TbNodeConfiguration; +import org.thingsboard.rule.engine.api.TbNodeException; import org.thingsboard.rule.engine.api.util.TbNodeUtils; -import org.thingsboard.rule.engine.api.*; import org.thingsboard.server.common.data.plugin.ComponentType; import org.thingsboard.server.common.msg.TbMsg; -import static org.thingsboard.rule.engine.api.TbRelationTypes.FAILURE; -import static org.thingsboard.rule.engine.api.TbRelationTypes.SUCCESS; +import java.util.List; @RuleNode( type = ComponentType.TRANSFORMATION, @@ -51,7 +54,7 @@ public class TbTransformMsgNode extends TbAbstractTransformNode { } @Override - protected ListenableFuture transform(TbContext ctx, TbMsg msg) { + protected ListenableFuture> transform(TbContext ctx, TbMsg msg) { ctx.logJsEvalRequest(); return jsEngine.executeUpdateAsync(msg); } diff --git a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/transform/TbTransformMsgNodeTest.java b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/transform/TbTransformMsgNodeTest.java index bc56815468..e2087fd607 100644 --- a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/transform/TbTransformMsgNodeTest.java +++ b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/transform/TbTransformMsgNodeTest.java @@ -38,6 +38,7 @@ import org.thingsboard.server.common.msg.TbMsgDataType; import org.thingsboard.server.common.msg.TbMsgMetaData; import javax.script.ScriptException; +import java.util.Collections; import java.util.concurrent.Callable; import static org.junit.Assert.assertEquals; @@ -72,7 +73,7 @@ public class TbTransformMsgNodeTest { TbMsg msg = TbMsg.newMsg( "USER", null, metaData, TbMsgDataType.JSON,rawJson, ruleChainId, ruleNodeId); TbMsg transformedMsg = TbMsg.newMsg( "USER", null, metaData, TbMsgDataType.JSON, "{new}", ruleChainId, ruleNodeId); mockJsExecutor(); - when(scriptEngine.executeUpdateAsync(msg)).thenReturn(Futures.immediateFuture(transformedMsg)); + when(scriptEngine.executeUpdateAsync(msg)).thenReturn(Futures.immediateFuture(Collections.singletonList(transformedMsg))); node.onMsg(ctx, msg); verify(ctx).getDbCallbackExecutor(); From d31358b2ea24356223f064996714b602504293c7 Mon Sep 17 00:00:00 2001 From: Igor Kulikov Date: Mon, 11 Jan 2021 13:42:16 +0200 Subject: [PATCH 11/11] Update license header - set 2021 year --- application/pom.xml | 2 +- application/src/main/conf/logback.xml | 2 +- application/src/main/conf/thingsboard.conf | 2 +- application/src/main/data/upgrade/1.3.0/schema_update.cql | 2 +- application/src/main/data/upgrade/1.3.1/schema_update.sql | 2 +- application/src/main/data/upgrade/1.4.0/schema_update.cql | 2 +- application/src/main/data/upgrade/1.4.0/schema_update.sql | 2 +- application/src/main/data/upgrade/2.0.0/schema_update.cql | 2 +- application/src/main/data/upgrade/2.0.0/schema_update.sql | 2 +- application/src/main/data/upgrade/2.1.1/schema_update.cql | 2 +- application/src/main/data/upgrade/2.1.1/schema_update.sql | 2 +- application/src/main/data/upgrade/2.1.2/schema_update.cql | 2 +- application/src/main/data/upgrade/2.1.2/schema_update.sql | 2 +- application/src/main/data/upgrade/2.2.0/schema_update.sql | 2 +- application/src/main/data/upgrade/2.3.1/schema_update.sql | 2 +- application/src/main/data/upgrade/2.4.0/schema_update.sql | 2 +- application/src/main/data/upgrade/2.4.2/schema_update.sql | 2 +- .../data/upgrade/2.4.3/schema_update_psql_drop_partitions.sql | 2 +- .../src/main/data/upgrade/2.4.3/schema_update_psql_ts.sql | 2 +- .../src/main/data/upgrade/2.4.3/schema_update_timescale_ts.sql | 2 +- application/src/main/data/upgrade/2.4.3/schema_update_ttl.sql | 2 +- application/src/main/data/upgrade/3.0.1/schema_ts_latest.sql | 2 +- .../src/main/data/upgrade/3.0.1/schema_update_to_uuid.sql | 2 +- application/src/main/data/upgrade/3.1.0/schema_update.sql | 2 +- .../src/main/data/upgrade/3.1.1/schema_update_after.sql | 2 +- .../src/main/data/upgrade/3.1.1/schema_update_before.sql | 2 +- .../org/thingsboard/server/ThingsboardInstallApplication.java | 2 +- .../org/thingsboard/server/ThingsboardServerApplication.java | 2 +- .../java/org/thingsboard/server/actors/ActorSystemContext.java | 2 +- .../server/actors/TbEntityTypeActorIdPredicate.java | 2 +- .../main/java/org/thingsboard/server/actors/app/AppActor.java | 2 +- .../java/org/thingsboard/server/actors/app/AppInitMsg.java | 2 +- .../java/org/thingsboard/server/actors/device/DeviceActor.java | 2 +- .../thingsboard/server/actors/device/DeviceActorCreator.java | 2 +- .../server/actors/device/DeviceActorMessageProcessor.java | 2 +- .../java/org/thingsboard/server/actors/device/SessionInfo.java | 2 +- .../thingsboard/server/actors/device/SessionInfoMetaData.java | 2 +- .../server/actors/device/SessionTimeoutCheckMsg.java | 2 +- .../server/actors/device/ToDeviceRpcRequestMetadata.java | 2 +- .../server/actors/device/ToServerRpcRequestMetadata.java | 2 +- .../thingsboard/server/actors/ruleChain/DefaultTbContext.java | 2 +- .../thingsboard/server/actors/ruleChain/RuleChainActor.java | 2 +- .../actors/ruleChain/RuleChainActorMessageProcessor.java | 2 +- .../server/actors/ruleChain/RuleChainManagerActor.java | 2 +- .../server/actors/ruleChain/RuleChainToRuleChainMsg.java | 2 +- .../server/actors/ruleChain/RuleChainToRuleNodeMsg.java | 2 +- .../org/thingsboard/server/actors/ruleChain/RuleNodeActor.java | 2 +- .../server/actors/ruleChain/RuleNodeActorMessageProcessor.java | 2 +- .../org/thingsboard/server/actors/ruleChain/RuleNodeCtx.java | 2 +- .../thingsboard/server/actors/ruleChain/RuleNodeRelation.java | 2 +- .../actors/ruleChain/RuleNodeToRuleChainTellNextMsg.java | 2 +- .../server/actors/ruleChain/RuleNodeToSelfErrorMsg.java | 2 +- .../thingsboard/server/actors/ruleChain/RuleNodeToSelfMsg.java | 2 +- .../org/thingsboard/server/actors/service/ActorService.java | 2 +- .../org/thingsboard/server/actors/service/ComponentActor.java | 2 +- .../thingsboard/server/actors/service/ContextAwareActor.java | 2 +- .../thingsboard/server/actors/service/ContextBasedCreator.java | 2 +- .../thingsboard/server/actors/service/DefaultActorService.java | 2 +- .../server/actors/shared/AbstractContextAwareMsgProcessor.java | 2 +- .../thingsboard/server/actors/shared/ActorTerminationMsg.java | 2 +- .../server/actors/shared/ComponentMsgProcessor.java | 2 +- .../java/org/thingsboard/server/actors/stats/StatsActor.java | 2 +- .../org/thingsboard/server/actors/stats/StatsPersistMsg.java | 2 +- .../org/thingsboard/server/actors/stats/StatsPersistTick.java | 2 +- .../thingsboard/server/actors/tenant/DebugTbRateLimits.java | 2 +- .../java/org/thingsboard/server/actors/tenant/TenantActor.java | 2 +- .../org/thingsboard/server/config/AuditLogLevelProperties.java | 2 +- .../config/CustomOAuth2AuthorizationRequestResolver.java | 2 +- .../main/java/org/thingsboard/server/config/JwtSettings.java | 2 +- .../java/org/thingsboard/server/config/MvcCorsProperties.java | 2 +- .../thingsboard/server/config/RateLimitProcessingFilter.java | 2 +- .../org/thingsboard/server/config/SchedulingConfiguration.java | 2 +- .../org/thingsboard/server/config/SwaggerConfiguration.java | 2 +- .../server/config/ThingsboardMessageConfiguration.java | 2 +- .../server/config/ThingsboardSecurityConfiguration.java | 2 +- .../src/main/java/org/thingsboard/server/config/WebConfig.java | 2 +- .../org/thingsboard/server/config/WebSocketConfiguration.java | 2 +- .../org/thingsboard/server/controller/AdminController.java | 2 +- .../org/thingsboard/server/controller/AlarmController.java | 2 +- .../org/thingsboard/server/controller/AssetController.java | 2 +- .../org/thingsboard/server/controller/AuditLogController.java | 2 +- .../java/org/thingsboard/server/controller/AuthController.java | 2 +- .../java/org/thingsboard/server/controller/BaseController.java | 2 +- .../server/controller/ComponentDescriptorController.java | 2 +- .../org/thingsboard/server/controller/CustomerController.java | 2 +- .../org/thingsboard/server/controller/DashboardController.java | 2 +- .../org/thingsboard/server/controller/DeviceController.java | 2 +- .../thingsboard/server/controller/DeviceProfileController.java | 2 +- .../thingsboard/server/controller/EntityQueryController.java | 2 +- .../server/controller/EntityRelationController.java | 2 +- .../thingsboard/server/controller/EntityViewController.java | 2 +- .../org/thingsboard/server/controller/EventController.java | 2 +- .../thingsboard/server/controller/HttpValidationCallback.java | 2 +- .../server/controller/OAuth2ConfigTemplateController.java | 2 +- .../org/thingsboard/server/controller/OAuth2Controller.java | 2 +- .../org/thingsboard/server/controller/QueueController.java | 2 +- .../java/org/thingsboard/server/controller/RpcController.java | 2 +- .../org/thingsboard/server/controller/RuleChainController.java | 2 +- .../java/org/thingsboard/server/controller/TbUrlConstants.java | 2 +- .../org/thingsboard/server/controller/TelemetryController.java | 2 +- .../org/thingsboard/server/controller/TenantController.java | 2 +- .../thingsboard/server/controller/TenantProfileController.java | 2 +- .../java/org/thingsboard/server/controller/UserController.java | 2 +- .../thingsboard/server/controller/WidgetTypeController.java | 2 +- .../thingsboard/server/controller/WidgetsBundleController.java | 2 +- .../server/controller/plugin/TbWebSocketHandler.java | 2 +- .../exception/ThingsboardCredentialsExpiredResponse.java | 2 +- .../thingsboard/server/exception/ThingsboardErrorResponse.java | 2 +- .../server/exception/ThingsboardErrorResponseHandler.java | 2 +- .../server/install/ThingsboardInstallConfiguration.java | 2 +- .../server/install/ThingsboardInstallException.java | 2 +- .../thingsboard/server/install/ThingsboardInstallService.java | 2 +- .../server/service/apiusage/DefaultTbApiUsageStateService.java | 2 +- .../server/service/apiusage/TbApiUsageStateService.java | 2 +- .../server/service/apiusage/TenantApiUsageState.java | 2 +- .../service/component/AnnotationComponentDiscoveryService.java | 2 +- .../server/service/component/ComponentDiscoveryService.java | 2 +- .../server/service/device/DeviceProvisionServiceImpl.java | 2 +- .../server/service/executors/DbCallbackExecutorService.java | 2 +- .../server/service/executors/ExternalCallExecutorService.java | 2 +- .../server/service/executors/SharedEventLoopGroupService.java | 2 +- .../install/AbstractCassandraDatabaseUpgradeService.java | 2 +- .../service/install/AbstractSqlTsDatabaseUpgradeService.java | 2 +- .../install/CassandraAbstractDatabaseSchemaService.java | 2 +- .../service/install/CassandraTsDatabaseSchemaService.java | 2 +- .../service/install/CassandraTsDatabaseUpgradeService.java | 2 +- .../install/CassandraTsLatestDatabaseSchemaService.java | 2 +- .../server/service/install/DatabaseEntitiesUpgradeService.java | 2 +- .../org/thingsboard/server/service/install/DatabaseHelper.java | 2 +- .../server/service/install/DatabaseSchemaService.java | 2 +- .../server/service/install/DatabaseTsUpgradeService.java | 2 +- .../server/service/install/DefaultSystemDataLoaderService.java | 2 +- .../server/service/install/EntityDatabaseSchemaService.java | 2 +- .../service/install/HsqlEntityDatabaseSchemaService.java | 2 +- .../server/service/install/HsqlTsDatabaseSchemaService.java | 2 +- .../org/thingsboard/server/service/install/InstallScripts.java | 2 +- .../service/install/PsqlEntityDatabaseSchemaService.java | 2 +- .../server/service/install/PsqlTsDatabaseSchemaService.java | 2 +- .../server/service/install/PsqlTsDatabaseUpgradeService.java | 2 +- .../service/install/SqlAbstractDatabaseSchemaService.java | 2 +- .../server/service/install/SqlDatabaseUpgradeService.java | 2 +- .../server/service/install/SystemDataLoaderService.java | 2 +- .../service/install/TimescaleTsDatabaseSchemaService.java | 2 +- .../service/install/TimescaleTsDatabaseUpgradeService.java | 2 +- .../server/service/install/TsDatabaseSchemaService.java | 2 +- .../server/service/install/TsLatestDatabaseSchemaService.java | 2 +- .../server/service/install/cql/CQLStatementsParser.java | 2 +- .../server/service/install/cql/CassandraDbHelper.java | 2 +- .../install/migrate/CassandraEntitiesToSqlMigrateService.java | 2 +- .../server/service/install/migrate/CassandraToSqlColumn.java | 2 +- .../service/install/migrate/CassandraToSqlColumnData.java | 2 +- .../service/install/migrate/CassandraToSqlColumnType.java | 2 +- .../service/install/migrate/CassandraToSqlEventTsColumn.java | 2 +- .../server/service/install/migrate/CassandraToSqlTable.java | 2 +- .../install/migrate/CassandraTsLatestToSqlMigrateService.java | 2 +- .../server/service/install/migrate/EntitiesMigrateService.java | 2 +- .../server/service/install/migrate/TsLatestMigrateService.java | 2 +- .../thingsboard/server/service/install/sql/SqlDbHelper.java | 2 +- .../server/service/install/update/DataUpdateService.java | 2 +- .../service/install/update/DefaultDataUpdateService.java | 2 +- .../server/service/install/update/PaginatedUpdater.java | 2 +- .../thingsboard/server/service/mail/DefaultMailService.java | 2 +- .../thingsboard/server/service/mail/MailExecutorService.java | 2 +- .../server/service/profile/DefaultTbDeviceProfileCache.java | 2 +- .../server/service/profile/TbDeviceProfileCache.java | 2 +- .../server/service/query/DefaultEntityQueryService.java | 2 +- .../thingsboard/server/service/query/EntityQueryService.java | 2 +- .../server/service/queue/DefaultTbClusterService.java | 2 +- .../server/service/queue/DefaultTbCoreConsumerService.java | 2 +- .../service/queue/DefaultTbRuleEngineConsumerService.java | 2 +- .../server/service/queue/DefaultTenantRoutingInfoService.java | 2 +- .../org/thingsboard/server/service/queue/TbClusterService.java | 2 +- .../server/service/queue/TbCoreConsumerService.java | 2 +- .../thingsboard/server/service/queue/TbCoreConsumerStats.java | 2 +- .../thingsboard/server/service/queue/TbMsgPackCallback.java | 2 +- .../server/service/queue/TbMsgPackProcessingContext.java | 2 +- .../thingsboard/server/service/queue/TbMsgProfilerInfo.java | 2 +- .../org/thingsboard/server/service/queue/TbPackCallback.java | 2 +- .../server/service/queue/TbPackProcessingContext.java | 2 +- .../server/service/queue/TbRuleEngineConsumerService.java | 2 +- .../server/service/queue/TbRuleEngineConsumerStats.java | 2 +- .../server/service/queue/TbRuleNodeProfilerInfo.java | 2 +- .../server/service/queue/TbTenantRuleEngineStats.java | 2 +- .../service/queue/processing/AbstractConsumerService.java | 2 +- .../queue/processing/AbstractTbRuleEngineSubmitStrategy.java | 2 +- .../queue/processing/BatchTbRuleEngineSubmitStrategy.java | 2 +- .../queue/processing/BurstTbRuleEngineSubmitStrategy.java | 2 +- .../thingsboard/server/service/queue/processing/IdMsgPair.java | 2 +- .../SequentialByEntityIdTbRuleEngineSubmitStrategy.java | 2 +- .../SequentialByOriginatorIdTbRuleEngineSubmitStrategy.java | 2 +- .../SequentialByTenantIdTbRuleEngineSubmitStrategy.java | 2 +- .../queue/processing/SequentialTbRuleEngineSubmitStrategy.java | 2 +- .../queue/processing/TbRuleEngineProcessingDecision.java | 2 +- .../service/queue/processing/TbRuleEngineProcessingResult.java | 2 +- .../queue/processing/TbRuleEngineProcessingStrategy.java | 2 +- .../processing/TbRuleEngineProcessingStrategyFactory.java | 2 +- .../service/queue/processing/TbRuleEngineSubmitStrategy.java | 2 +- .../queue/processing/TbRuleEngineSubmitStrategyFactory.java | 2 +- .../server/service/rpc/DefaultTbCoreDeviceRpcService.java | 2 +- .../server/service/rpc/DefaultTbRuleEngineRpcService.java | 2 +- .../thingsboard/server/service/rpc/FromDeviceRpcResponse.java | 2 +- .../thingsboard/server/service/rpc/LocalRequestMetaData.java | 2 +- .../thingsboard/server/service/rpc/TbCoreDeviceRpcService.java | 2 +- .../server/service/rpc/TbRuleEngineDeviceRpcService.java | 2 +- .../server/service/rpc/ToDeviceRpcRequestActorMsg.java | 2 +- .../server/service/script/AbstractJsInvokeService.java | 2 +- .../server/service/script/AbstractNashornJsInvokeService.java | 2 +- .../thingsboard/server/service/script/JsExecutorService.java | 2 +- .../org/thingsboard/server/service/script/JsInvokeRequest.java | 2 +- .../thingsboard/server/service/script/JsInvokeResponse.java | 2 +- .../org/thingsboard/server/service/script/JsInvokeService.java | 2 +- .../org/thingsboard/server/service/script/JsScriptType.java | 2 +- .../org/thingsboard/server/service/script/JsStatCallback.java | 2 +- .../server/service/script/NashornJsInvokeService.java | 2 +- .../server/service/script/RemoteJsInvokeService.java | 2 +- .../server/service/script/RemoteJsRequestEncoder.java | 2 +- .../server/service/script/RemoteJsResponseDecoder.java | 2 +- .../server/service/script/RuleNodeJsScriptEngine.java | 2 +- .../server/service/script/RuleNodeScriptFactory.java | 2 +- .../thingsboard/server/service/security/AccessValidator.java | 2 +- .../server/service/security/ValidationCallback.java | 2 +- .../thingsboard/server/service/security/ValidationResult.java | 2 +- .../server/service/security/ValidationResultCode.java | 2 +- .../service/security/auth/AbstractJwtAuthenticationToken.java | 2 +- .../server/service/security/auth/JwtAuthenticationToken.java | 2 +- .../service/security/auth/RefreshAuthenticationToken.java | 2 +- .../service/security/auth/jwt/JwtAuthenticationProvider.java | 2 +- .../auth/jwt/JwtTokenAuthenticationProcessingFilter.java | 2 +- .../security/auth/jwt/RefreshTokenAuthenticationProvider.java | 2 +- .../security/auth/jwt/RefreshTokenProcessingFilter.java | 2 +- .../service/security/auth/jwt/RefreshTokenRepository.java | 2 +- .../server/service/security/auth/jwt/RefreshTokenRequest.java | 2 +- .../service/security/auth/jwt/SkipPathRequestMatcher.java | 2 +- .../security/auth/jwt/extractor/JwtHeaderTokenExtractor.java | 2 +- .../security/auth/jwt/extractor/JwtQueryTokenExtractor.java | 2 +- .../service/security/auth/jwt/extractor/TokenExtractor.java | 2 +- .../security/auth/oauth2/AbstractOAuth2ClientMapper.java | 2 +- .../server/service/security/auth/oauth2/BasicMapperUtils.java | 2 +- .../service/security/auth/oauth2/BasicOAuth2ClientMapper.java | 2 +- .../service/security/auth/oauth2/CustomOAuth2ClientMapper.java | 2 +- .../service/security/auth/oauth2/GithubOAuth2ClientMapper.java | 2 +- .../service/security/auth/oauth2/OAuth2ClientMapper.java | 2 +- .../security/auth/oauth2/OAuth2ClientMapperProvider.java | 2 +- .../auth/oauth2/Oauth2AuthenticationFailureHandler.java | 2 +- .../auth/oauth2/Oauth2AuthenticationSuccessHandler.java | 2 +- .../server/service/security/auth/rest/LoginRequest.java | 2 +- .../server/service/security/auth/rest/PublicLoginRequest.java | 2 +- .../service/security/auth/rest/RestAuthenticationDetails.java | 2 +- .../security/auth/rest/RestAuthenticationDetailsSource.java | 2 +- .../service/security/auth/rest/RestAuthenticationProvider.java | 2 +- .../auth/rest/RestAwareAuthenticationFailureHandler.java | 2 +- .../auth/rest/RestAwareAuthenticationSuccessHandler.java | 2 +- .../service/security/auth/rest/RestLoginProcessingFilter.java | 2 +- .../security/auth/rest/RestPublicLoginProcessingFilter.java | 2 +- .../service/security/device/DefaultDeviceAuthService.java | 2 +- .../security/exception/AuthMethodNotSupportedException.java | 2 +- .../service/security/exception/JwtExpiredTokenException.java | 2 +- .../security/exception/UserPasswordExpiredException.java | 2 +- .../server/service/security/model/SecurityUser.java | 2 +- .../server/service/security/model/UserPrincipal.java | 2 +- .../server/service/security/model/token/AccessJwtToken.java | 2 +- .../server/service/security/model/token/JwtToken.java | 2 +- .../server/service/security/model/token/JwtTokenFactory.java | 2 +- .../server/service/security/model/token/RawAccessJwtToken.java | 2 +- .../service/security/permission/AbstractPermissions.java | 2 +- .../service/security/permission/AccessControlService.java | 2 +- .../service/security/permission/CustomerUserPermissions.java | 2 +- .../security/permission/DefaultAccessControlService.java | 2 +- .../server/service/security/permission/Operation.java | 2 +- .../server/service/security/permission/PermissionChecker.java | 2 +- .../server/service/security/permission/Permissions.java | 2 +- .../server/service/security/permission/Resource.java | 2 +- .../service/security/permission/SysAdminPermissions.java | 2 +- .../service/security/permission/TenantAdminPermissions.java | 2 +- .../service/security/system/DefaultSystemSecurityService.java | 2 +- .../server/service/security/system/SystemSecurityService.java | 2 +- .../service/session/DefaultDeviceSessionCacheService.java | 2 +- .../server/service/session/DeviceSessionCacheService.java | 2 +- .../org/thingsboard/server/service/sms/AbstractSmsSender.java | 2 +- .../server/service/sms/DefaultSmsSenderFactory.java | 2 +- .../org/thingsboard/server/service/sms/DefaultSmsService.java | 2 +- .../org/thingsboard/server/service/sms/SmsExecutorService.java | 2 +- .../org/thingsboard/server/service/sms/aws/AwsSmsSender.java | 2 +- .../thingsboard/server/service/sms/twilio/TwilioSmsSender.java | 2 +- .../server/service/state/DefaultDeviceStateService.java | 2 +- .../java/org/thingsboard/server/service/state/DeviceState.java | 2 +- .../org/thingsboard/server/service/state/DeviceStateData.java | 2 +- .../thingsboard/server/service/state/DeviceStateService.java | 2 +- .../thingsboard/server/service/stats/DefaultJsInvokeStats.java | 2 +- .../service/stats/DefaultRuleEngineStatisticsService.java | 2 +- .../server/service/stats/RuleEngineStatisticsService.java | 2 +- .../subscription/DefaultSubscriptionManagerService.java | 2 +- .../subscription/DefaultTbEntityDataSubscriptionService.java | 2 +- .../subscription/DefaultTbLocalSubscriptionService.java | 2 +- .../service/subscription/SubscriptionManagerService.java | 2 +- .../service/subscription/SubscriptionServiceStatistics.java | 2 +- .../server/service/subscription/TbAbstractDataSubCtx.java | 2 +- .../server/service/subscription/TbAlarmDataSubCtx.java | 2 +- .../server/service/subscription/TbAlarmsSubscription.java | 2 +- .../server/service/subscription/TbAttributeSubscription.java | 2 +- .../service/subscription/TbAttributeSubscriptionScope.java | 2 +- .../server/service/subscription/TbEntityDataSubCtx.java | 2 +- .../service/subscription/TbEntityDataSubscriptionService.java | 2 +- .../service/subscription/TbLocalSubscriptionService.java | 2 +- .../server/service/subscription/TbSubscription.java | 2 +- .../server/service/subscription/TbSubscriptionType.java | 2 +- .../server/service/subscription/TbSubscriptionUtils.java | 2 +- .../server/service/subscription/TbTimeseriesSubscription.java | 2 +- .../server/service/telemetry/AbstractSubscriptionService.java | 2 +- .../server/service/telemetry/AlarmSubscriptionService.java | 2 +- .../thingsboard/server/service/telemetry/AttributeData.java | 2 +- .../service/telemetry/DefaultAlarmSubscriptionService.java | 2 +- .../service/telemetry/DefaultTelemetrySubscriptionService.java | 2 +- .../service/telemetry/DefaultTelemetryWebSocketService.java | 2 +- .../server/service/telemetry/InternalTelemetryService.java | 2 +- .../org/thingsboard/server/service/telemetry/SessionEvent.java | 2 +- .../thingsboard/server/service/telemetry/TelemetryFeature.java | 2 +- .../server/service/telemetry/TelemetrySubscriptionService.java | 2 +- .../service/telemetry/TelemetryWebSocketMsgEndpoint.java | 2 +- .../server/service/telemetry/TelemetryWebSocketService.java | 2 +- .../server/service/telemetry/TelemetryWebSocketSessionRef.java | 2 +- .../server/service/telemetry/TelemetryWebSocketTextMsg.java | 2 +- .../java/org/thingsboard/server/service/telemetry/TsData.java | 2 +- .../server/service/telemetry/WsSessionMetaData.java | 2 +- .../service/telemetry/cmd/TelemetryPluginCmdsWrapper.java | 2 +- .../service/telemetry/cmd/v1/AttributesSubscriptionCmd.java | 2 +- .../server/service/telemetry/cmd/v1/GetHistoryCmd.java | 2 +- .../server/service/telemetry/cmd/v1/SubscriptionCmd.java | 2 +- .../server/service/telemetry/cmd/v1/TelemetryPluginCmd.java | 2 +- .../service/telemetry/cmd/v1/TimeseriesSubscriptionCmd.java | 2 +- .../server/service/telemetry/cmd/v2/AlarmDataCmd.java | 2 +- .../service/telemetry/cmd/v2/AlarmDataUnsubscribeCmd.java | 2 +- .../server/service/telemetry/cmd/v2/AlarmDataUpdate.java | 2 +- .../thingsboard/server/service/telemetry/cmd/v2/DataCmd.java | 2 +- .../server/service/telemetry/cmd/v2/DataUpdate.java | 2 +- .../server/service/telemetry/cmd/v2/DataUpdateType.java | 2 +- .../server/service/telemetry/cmd/v2/EntityDataCmd.java | 2 +- .../service/telemetry/cmd/v2/EntityDataUnsubscribeCmd.java | 2 +- .../server/service/telemetry/cmd/v2/EntityDataUpdate.java | 2 +- .../server/service/telemetry/cmd/v2/EntityHistoryCmd.java | 2 +- .../thingsboard/server/service/telemetry/cmd/v2/GetTsCmd.java | 2 +- .../server/service/telemetry/cmd/v2/LatestValueCmd.java | 2 +- .../server/service/telemetry/cmd/v2/TimeSeriesCmd.java | 2 +- .../server/service/telemetry/cmd/v2/UnsubscribeCmd.java | 2 +- .../service/telemetry/exception/AccessDeniedException.java | 2 +- .../service/telemetry/exception/EntityNotFoundException.java | 2 +- .../service/telemetry/exception/InternalErrorException.java | 2 +- .../telemetry/exception/InvalidParametersException.java | 2 +- .../service/telemetry/exception/ToErrorResponseEntity.java | 2 +- .../service/telemetry/exception/UnauthorizedException.java | 2 +- .../service/telemetry/exception/UncheckedApiException.java | 2 +- .../server/service/telemetry/sub/AlarmSubscriptionUpdate.java | 2 +- .../server/service/telemetry/sub/SubscriptionErrorCode.java | 2 +- .../server/service/telemetry/sub/SubscriptionState.java | 2 +- .../service/telemetry/sub/TelemetrySubscriptionUpdate.java | 2 +- .../service/transport/DefaultTbCoreToTransportService.java | 2 +- .../server/service/transport/DefaultTransportApiService.java | 2 +- .../server/service/transport/TbCoreToTransportService.java | 2 +- .../server/service/transport/TbCoreTransportApiService.java | 2 +- .../server/service/transport/TransportApiService.java | 2 +- .../transport/msg/TransportToDeviceActorMsgWrapper.java | 2 +- .../thingsboard/server/service/ttl/AbstractCleanUpService.java | 2 +- .../server/service/ttl/events/EventsCleanUpService.java | 2 +- .../ttl/timeseries/AbstractTimeseriesCleanUpService.java | 2 +- .../service/ttl/timeseries/PsqlTimeseriesCleanUpService.java | 2 +- .../ttl/timeseries/TimescaleTimeseriesCleanUpService.java | 2 +- .../server/service/update/DefaultUpdateService.java | 2 +- .../org/thingsboard/server/service/update/UpdateService.java | 2 +- .../src/main/java/org/thingsboard/server/utils/MiscUtils.java | 2 +- application/src/main/resources/logback.xml | 2 +- application/src/main/resources/templates/account.activated.ftl | 2 +- application/src/main/resources/templates/account.lockout.ftl | 2 +- application/src/main/resources/templates/activation.ftl | 2 +- .../src/main/resources/templates/password.was.reset.ftl | 2 +- application/src/main/resources/templates/reset.password.ftl | 2 +- application/src/main/resources/templates/state.disabled.ftl | 2 +- application/src/main/resources/templates/state.enabled.ftl | 2 +- application/src/main/resources/templates/state.warning.ftl | 2 +- application/src/main/resources/templates/test.ftl | 2 +- application/src/main/resources/thingsboard.yml | 2 +- .../thingsboard/server/controller/AbstractControllerTest.java | 2 +- .../server/controller/AbstractRuleEngineControllerTest.java | 2 +- .../org/thingsboard/server/controller/AbstractWebTest.java | 2 +- .../thingsboard/server/controller/AbstractWebsocketTest.java | 2 +- .../thingsboard/server/controller/BaseAdminControllerTest.java | 2 +- .../thingsboard/server/controller/BaseAssetControllerTest.java | 2 +- .../server/controller/BaseAuditLogControllerTest.java | 2 +- .../thingsboard/server/controller/BaseAuthControllerTest.java | 2 +- .../controller/BaseComponentDescriptorControllerTest.java | 2 +- .../server/controller/BaseCustomerControllerTest.java | 2 +- .../server/controller/BaseDashboardControllerTest.java | 2 +- .../server/controller/BaseDeviceControllerTest.java | 2 +- .../server/controller/BaseDeviceProfileControllerTest.java | 2 +- .../server/controller/BaseEntityQueryControllerTest.java | 2 +- .../server/controller/BaseEntityViewControllerTest.java | 2 +- .../server/controller/BaseTenantControllerTest.java | 2 +- .../server/controller/BaseTenantProfileControllerTest.java | 2 +- .../thingsboard/server/controller/BaseUserControllerTest.java | 2 +- .../thingsboard/server/controller/BaseWebsocketApiTest.java | 2 +- .../server/controller/BaseWidgetTypeControllerTest.java | 2 +- .../server/controller/BaseWidgetsBundleControllerTest.java | 2 +- .../thingsboard/server/controller/ControllerSqlTestSuite.java | 2 +- .../thingsboard/server/controller/TbTestWebSocketClient.java | 2 +- .../server/controller/sql/AdminControllerSqlTest.java | 2 +- .../server/controller/sql/AssetControllerSqlTest.java | 2 +- .../server/controller/sql/AuditLogControllerSqlTest.java | 2 +- .../server/controller/sql/AuthControllerSqlTest.java | 2 +- .../controller/sql/ComponentDescriptorControllerSqlTest.java | 2 +- .../server/controller/sql/CustomerControllerSqlTest.java | 2 +- .../server/controller/sql/DashboardControllerSqlTest.java | 2 +- .../server/controller/sql/DeviceControllerSqlTest.java | 2 +- .../server/controller/sql/DeviceProfileControllerSqlTest.java | 2 +- .../server/controller/sql/EntityQueryControllerSqlTest.java | 2 +- .../server/controller/sql/EntityViewControllerSqlTest.java | 2 +- .../server/controller/sql/TenantControllerSqlTest.java | 2 +- .../server/controller/sql/TenantProfileControllerSqlTest.java | 2 +- .../server/controller/sql/UserControllerSqlTest.java | 2 +- .../thingsboard/server/controller/sql/WebsocketApiSqlTest.java | 2 +- .../server/controller/sql/WidgetTypeControllerSqlTest.java | 2 +- .../server/controller/sql/WidgetsBundleControllerSqlTest.java | 2 +- .../thingsboard/server/mqtt/AbstractMqttIntegrationTest.java | 2 +- .../org/thingsboard/server/mqtt/DbConfigurationTestRule.java | 2 +- .../java/org/thingsboard/server/mqtt/MqttNoSqlTestSuite.java | 2 +- .../java/org/thingsboard/server/mqtt/MqttSqlTestSuite.java | 2 +- .../mqtt/attributes/AbstractMqttAttributesIntegrationTest.java | 2 +- .../request/AbstractMqttAttributesRequestIntegrationTest.java | 2 +- .../AbstractMqttAttributesRequestJsonIntegrationTest.java | 2 +- .../AbstractMqttAttributesRequestProtoIntegrationTest.java | 2 +- .../nosql/MqttAttributesRequestNoSqlIntegrationTest.java | 2 +- .../sql/MqttAttributesRequestJsonSqlIntegrationTest.java | 2 +- .../sql/MqttAttributesRequestProtoSqlIntegrationTest.java | 2 +- .../request/sql/MqttAttributesRequestSqlIntegrationTest.java | 2 +- .../updates/AbstractMqttAttributesUpdatesIntegrationTest.java | 2 +- .../AbstractMqttAttributesUpdatesJsonIntegrationTest.java | 2 +- .../AbstractMqttAttributesUpdatesProtoIntegrationTest.java | 2 +- .../nosql/MqttAttributesUpdatesNoSqlIntegrationTest.java | 2 +- .../updates/sql/MqttAttributesUpdatesSqlIntegrationTest.java | 2 +- .../sql/MqttAttributesUpdatesSqlJsonIntegrationTest.java | 2 +- .../sql/MqttAttributesUpdatesSqlProtoIntegrationTest.java | 2 +- .../server/mqtt/claim/AbstractMqttClaimDeviceTest.java | 2 +- .../server/mqtt/claim/AbstractMqttClaimJsonDeviceTest.java | 2 +- .../server/mqtt/claim/AbstractMqttClaimProtoDeviceTest.java | 2 +- .../server/mqtt/claim/nosql/MqttClaimDeviceNoSqlTest.java | 2 +- .../server/mqtt/claim/sql/MqttClaimDeviceJsonSqlTest.java | 2 +- .../server/mqtt/claim/sql/MqttClaimDeviceProtoSqlTest.java | 2 +- .../server/mqtt/claim/sql/MqttClaimDeviceSqlTest.java | 2 +- .../mqtt/provision/AbstractMqttProvisionJsonDeviceTest.java | 2 +- .../mqtt/provision/AbstractMqttProvisionProtoDeviceTest.java | 2 +- .../mqtt/provision/sql/MqttProvisionDeviceJsonSqlTest.java | 2 +- .../mqtt/provision/sql/MqttProvisionDeviceProtoSqlTest.java | 2 +- .../rpc/AbstractMqttServerSideRpcDefaultIntegrationTest.java | 2 +- .../mqtt/rpc/AbstractMqttServerSideRpcIntegrationTest.java | 2 +- .../mqtt/rpc/AbstractMqttServerSideRpcJsonIntegrationTest.java | 2 +- .../rpc/AbstractMqttServerSideRpcProtoIntegrationTest.java | 2 +- .../mqtt/rpc/nosql/MqttServerSideRpcNoSqlIntegrationTest.java | 2 +- .../mqtt/rpc/sql/MqttServerSideRpcJsonSqlIntegrationTest.java | 2 +- .../mqtt/rpc/sql/MqttServerSideRpcProtoSqlIntegrationTest.java | 2 +- .../mqtt/rpc/sql/MqttServerSideRpcSqlIntegrationTest.java | 2 +- .../attributes/AbstractMqttAttributesIntegrationTest.java | 2 +- .../attributes/AbstractMqttAttributesJsonIntegrationTest.java | 2 +- .../attributes/AbstractMqttAttributesProtoIntegrationTest.java | 2 +- .../attributes/nosql/MqttAttributesNoSqlIntegrationTest.java | 2 +- .../nosql/MqttAttributesNoSqlJsonIntegrationTest.java | 2 +- .../nosql/MqttAttributesNoSqlProtoIntegrationTest.java | 2 +- .../attributes/sql/MqttAttributesSqlIntegrationTest.java | 2 +- .../attributes/sql/MqttAttributesSqlJsonIntegrationTest.java | 2 +- .../attributes/sql/MqttAttributesSqlProtoIntegrationTest.java | 2 +- .../timeseries/AbstractMqttTimeseriesIntegrationTest.java | 2 +- .../timeseries/AbstractMqttTimeseriesJsonIntegrationTest.java | 2 +- .../timeseries/AbstractMqttTimeseriesProtoIntegrationTest.java | 2 +- .../timeseries/nosql/MqttTimeseriesNoSqlIntegrationTest.java | 2 +- .../nosql/MqttTimeseriesNoSqlJsonIntegrationTest.java | 2 +- .../nosql/MqttTimeseriesNoSqlProtoIntegrationTest.java | 2 +- .../timeseries/sql/MqttTimeseriesSqlIntegrationTest.java | 2 +- .../timeseries/sql/MqttTimeseriesSqlJsonIntegrationTest.java | 2 +- .../timeseries/sql/MqttTimeseriesSqlProtoIntegrationTest.java | 2 +- .../org/thingsboard/server/rules/RuleEngineSqlTestSuite.java | 2 +- .../rules/flow/AbstractRuleEngineFlowIntegrationTest.java | 2 +- .../rules/flow/sql/RuleEngineFlowSqlIntegrationTest.java | 2 +- .../lifecycle/AbstractRuleEngineLifecycleIntegrationTest.java | 2 +- .../lifecycle/sql/RuleEngineLifecycleSqlIntegrationTest.java | 2 +- .../service/cluster/routing/HashPartitionServiceTest.java | 2 +- .../org/thingsboard/server/service/mail/TestMailService.java | 2 +- .../server/service/queue/TbMsgPackProcessingContextTest.java | 2 +- .../org/thingsboard/server/system/BaseHttpDeviceApiTest.java | 2 +- .../java/org/thingsboard/server/system/SystemSqlTestSuite.java | 2 +- .../org/thingsboard/server/system/sql/DeviceApiSqlTest.java | 2 +- common/actor/pom.xml | 2 +- .../java/org/thingsboard/server/actors/AbstractTbActor.java | 2 +- .../org/thingsboard/server/actors/DefaultTbActorSystem.java | 2 +- .../main/java/org/thingsboard/server/actors/Dispatcher.java | 2 +- .../org/thingsboard/server/actors/InitFailureStrategy.java | 2 +- .../main/java/org/thingsboard/server/actors/JsInvokeStats.java | 2 +- .../org/thingsboard/server/actors/ProcessFailureStrategy.java | 2 +- .../src/main/java/org/thingsboard/server/actors/TbActor.java | 2 +- .../java/org/thingsboard/server/actors/TbActorCreator.java | 2 +- .../main/java/org/thingsboard/server/actors/TbActorCtx.java | 2 +- .../java/org/thingsboard/server/actors/TbActorException.java | 2 +- .../src/main/java/org/thingsboard/server/actors/TbActorId.java | 2 +- .../java/org/thingsboard/server/actors/TbActorMailbox.java | 2 +- .../server/actors/TbActorNotRegisteredException.java | 2 +- .../main/java/org/thingsboard/server/actors/TbActorRef.java | 2 +- .../main/java/org/thingsboard/server/actors/TbActorSystem.java | 2 +- .../org/thingsboard/server/actors/TbActorSystemSettings.java | 2 +- .../java/org/thingsboard/server/actors/TbEntityActorId.java | 2 +- .../java/org/thingsboard/server/actors/TbStringActorId.java | 2 +- .../java/org/thingsboard/server/actors/ActorSystemTest.java | 2 +- .../test/java/org/thingsboard/server/actors/ActorTestCtx.java | 2 +- .../java/org/thingsboard/server/actors/FailedToInitActor.java | 2 +- .../test/java/org/thingsboard/server/actors/IntTbActorMsg.java | 2 +- .../java/org/thingsboard/server/actors/SlowCreateActor.java | 2 +- .../test/java/org/thingsboard/server/actors/SlowInitActor.java | 2 +- .../test/java/org/thingsboard/server/actors/TestRootActor.java | 2 +- common/dao-api/pom.xml | 2 +- .../org/thingsboard/server/dao/alarm/AlarmOperationResult.java | 2 +- .../java/org/thingsboard/server/dao/alarm/AlarmService.java | 2 +- .../java/org/thingsboard/server/dao/asset/AssetService.java | 2 +- .../thingsboard/server/dao/attributes/AttributesService.java | 2 +- .../java/org/thingsboard/server/dao/audit/AuditLogService.java | 2 +- .../server/dao/cassandra/AbstractCassandraCluster.java | 2 +- .../org/thingsboard/server/dao/cassandra/CassandraCluster.java | 2 +- .../server/dao/cassandra/CassandraDriverOptions.java | 2 +- .../server/dao/cassandra/CassandraInstallCluster.java | 2 +- .../server/dao/cassandra/guava/DefaultGuavaSession.java | 2 +- .../server/dao/cassandra/guava/GuavaDriverContext.java | 2 +- .../server/dao/cassandra/guava/GuavaMultiPageResultSet.java | 2 +- .../server/dao/cassandra/guava/GuavaRequestAsyncProcessor.java | 2 +- .../thingsboard/server/dao/cassandra/guava/GuavaSession.java | 2 +- .../server/dao/cassandra/guava/GuavaSessionBuilder.java | 2 +- .../server/dao/cassandra/guava/GuavaSessionUtils.java | 2 +- .../server/dao/component/ComponentDescriptorService.java | 2 +- .../org/thingsboard/server/dao/customer/CustomerService.java | 2 +- .../org/thingsboard/server/dao/dashboard/DashboardService.java | 2 +- .../org/thingsboard/server/dao/device/ClaimDevicesService.java | 2 +- .../server/dao/device/DeviceCredentialsService.java | 2 +- .../thingsboard/server/dao/device/DeviceProfileService.java | 2 +- .../thingsboard/server/dao/device/DeviceProvisionService.java | 2 +- .../java/org/thingsboard/server/dao/device/DeviceService.java | 2 +- .../org/thingsboard/server/dao/device/claim/ClaimData.java | 2 +- .../org/thingsboard/server/dao/device/claim/ClaimResponse.java | 2 +- .../org/thingsboard/server/dao/device/claim/ClaimResult.java | 2 +- .../server/dao/device/provision/ProvisionFailedException.java | 2 +- .../server/dao/device/provision/ProvisionRequest.java | 2 +- .../server/dao/device/provision/ProvisionResponse.java | 2 +- .../server/dao/device/provision/ProvisionResponseStatus.java | 2 +- .../java/org/thingsboard/server/dao/entity/EntityService.java | 2 +- .../thingsboard/server/dao/entityview/EntityViewService.java | 2 +- .../java/org/thingsboard/server/dao/event/EventService.java | 2 +- .../thingsboard/server/dao/nosql/CassandraStatementTask.java | 2 +- .../java/org/thingsboard/server/dao/nosql/TbResultSet.java | 2 +- .../org/thingsboard/server/dao/nosql/TbResultSetFuture.java | 2 +- .../server/dao/oauth2/OAuth2ConfigTemplateService.java | 2 +- .../java/org/thingsboard/server/dao/oauth2/OAuth2Service.java | 2 +- .../java/org/thingsboard/server/dao/oauth2/OAuth2User.java | 2 +- .../org/thingsboard/server/dao/relation/RelationService.java | 2 +- .../java/org/thingsboard/server/dao/rule/RuleChainService.java | 2 +- .../org/thingsboard/server/dao/rule/RuleNodeStateService.java | 2 +- .../thingsboard/server/dao/settings/AdminSettingsService.java | 2 +- .../thingsboard/server/dao/tenant/TbTenantProfileCache.java | 2 +- .../thingsboard/server/dao/tenant/TenantProfileService.java | 2 +- .../java/org/thingsboard/server/dao/tenant/TenantService.java | 2 +- .../thingsboard/server/dao/timeseries/TimeseriesService.java | 2 +- .../server/dao/usagerecord/ApiUsageStateService.java | 2 +- .../main/java/org/thingsboard/server/dao/user/UserService.java | 2 +- .../main/java/org/thingsboard/server/dao/util/AsyncTask.java | 2 +- .../src/main/java/org/thingsboard/server/dao/util/HsqlDao.java | 2 +- .../main/java/org/thingsboard/server/dao/util/NoSqlAnyDao.java | 2 +- .../main/java/org/thingsboard/server/dao/util/NoSqlTsDao.java | 2 +- .../java/org/thingsboard/server/dao/util/NoSqlTsLatestDao.java | 2 +- .../src/main/java/org/thingsboard/server/dao/util/PsqlDao.java | 2 +- .../org/thingsboard/server/dao/util/PsqlTsLatestAnyDao.java | 2 +- .../main/java/org/thingsboard/server/dao/util/SqlTsDao.java | 2 +- .../org/thingsboard/server/dao/util/SqlTsLatestAnyDao.java | 2 +- .../java/org/thingsboard/server/dao/util/SqlTsLatestDao.java | 2 +- .../org/thingsboard/server/dao/util/SqlTsOrTsLatestAnyDao.java | 2 +- .../java/org/thingsboard/server/dao/util/TimescaleDBTsDao.java | 2 +- .../thingsboard/server/dao/util/TimescaleDBTsLatestDao.java | 2 +- .../server/dao/util/TimescaleDBTsOrTsLatestDao.java | 2 +- .../org/thingsboard/server/dao/widget/WidgetTypeService.java | 2 +- .../thingsboard/server/dao/widget/WidgetsBundleService.java | 2 +- common/data/pom.xml | 2 +- .../java/org/thingsboard/server/common/data/AdminSettings.java | 2 +- .../java/org/thingsboard/server/common/data/ApiFeature.java | 2 +- .../org/thingsboard/server/common/data/ApiUsageRecordKey.java | 2 +- .../java/org/thingsboard/server/common/data/ApiUsageState.java | 2 +- .../server/common/data/ApiUsageStateMailMessage.java | 2 +- .../org/thingsboard/server/common/data/ApiUsageStateValue.java | 2 +- .../main/java/org/thingsboard/server/common/data/BaseData.java | 2 +- .../org/thingsboard/server/common/data/CacheConstants.java | 2 +- .../java/org/thingsboard/server/common/data/ClaimRequest.java | 2 +- .../java/org/thingsboard/server/common/data/ContactBased.java | 2 +- .../main/java/org/thingsboard/server/common/data/Customer.java | 2 +- .../java/org/thingsboard/server/common/data/Dashboard.java | 2 +- .../java/org/thingsboard/server/common/data/DashboardInfo.java | 2 +- .../java/org/thingsboard/server/common/data/DataConstants.java | 2 +- .../main/java/org/thingsboard/server/common/data/Device.java | 2 +- .../java/org/thingsboard/server/common/data/DeviceInfo.java | 2 +- .../java/org/thingsboard/server/common/data/DeviceProfile.java | 2 +- .../org/thingsboard/server/common/data/DeviceProfileInfo.java | 2 +- .../server/common/data/DeviceProfileProvisionType.java | 2 +- .../org/thingsboard/server/common/data/DeviceProfileType.java | 2 +- .../thingsboard/server/common/data/DeviceTransportType.java | 2 +- .../org/thingsboard/server/common/data/EntityFieldsData.java | 2 +- .../java/org/thingsboard/server/common/data/EntityInfo.java | 2 +- .../java/org/thingsboard/server/common/data/EntitySubtype.java | 2 +- .../java/org/thingsboard/server/common/data/EntityType.java | 2 +- .../java/org/thingsboard/server/common/data/EntityView.java | 2 +- .../org/thingsboard/server/common/data/EntityViewInfo.java | 2 +- .../main/java/org/thingsboard/server/common/data/Event.java | 2 +- .../org/thingsboard/server/common/data/HasAdditionalInfo.java | 2 +- .../java/org/thingsboard/server/common/data/HasCustomerId.java | 2 +- .../main/java/org/thingsboard/server/common/data/HasName.java | 2 +- .../java/org/thingsboard/server/common/data/HasTenantId.java | 2 +- .../org/thingsboard/server/common/data/SearchTextBased.java | 2 +- .../server/common/data/SearchTextBasedWithAdditionalInfo.java | 2 +- .../org/thingsboard/server/common/data/ShortCustomerInfo.java | 2 +- .../main/java/org/thingsboard/server/common/data/Tenant.java | 2 +- .../java/org/thingsboard/server/common/data/TenantInfo.java | 2 +- .../java/org/thingsboard/server/common/data/TenantProfile.java | 2 +- .../org/thingsboard/server/common/data/TenantProfileType.java | 2 +- .../thingsboard/server/common/data/TransportPayloadType.java | 2 +- .../java/org/thingsboard/server/common/data/UUIDConverter.java | 2 +- .../java/org/thingsboard/server/common/data/UpdateMessage.java | 2 +- .../src/main/java/org/thingsboard/server/common/data/User.java | 2 +- .../java/org/thingsboard/server/common/data/alarm/Alarm.java | 2 +- .../org/thingsboard/server/common/data/alarm/AlarmInfo.java | 2 +- .../org/thingsboard/server/common/data/alarm/AlarmQuery.java | 2 +- .../server/common/data/alarm/AlarmSearchStatus.java | 2 +- .../thingsboard/server/common/data/alarm/AlarmSeverity.java | 2 +- .../org/thingsboard/server/common/data/alarm/AlarmStatus.java | 2 +- .../java/org/thingsboard/server/common/data/asset/Asset.java | 2 +- .../org/thingsboard/server/common/data/asset/AssetInfo.java | 2 +- .../thingsboard/server/common/data/asset/AssetSearchQuery.java | 2 +- .../org/thingsboard/server/common/data/audit/ActionStatus.java | 2 +- .../org/thingsboard/server/common/data/audit/ActionType.java | 2 +- .../org/thingsboard/server/common/data/audit/AuditLog.java | 2 +- .../server/common/data/device/DeviceSearchQuery.java | 2 +- .../common/data/device/credentials/BasicMqttCredentials.java | 2 +- .../device/credentials/ProvisionDeviceCredentialsData.java | 2 +- .../common/data/device/data/DefaultDeviceConfiguration.java | 2 +- .../data/device/data/DefaultDeviceTransportConfiguration.java | 2 +- .../server/common/data/device/data/DeviceConfiguration.java | 2 +- .../thingsboard/server/common/data/device/data/DeviceData.java | 2 +- .../common/data/device/data/DeviceTransportConfiguration.java | 2 +- .../data/device/data/Lwm2mDeviceTransportConfiguration.java | 2 +- .../data/device/data/MqttDeviceTransportConfiguration.java | 2 +- .../server/common/data/device/profile/AlarmCondition.java | 2 +- .../server/common/data/device/profile/AlarmConditionSpec.java | 2 +- .../common/data/device/profile/AlarmConditionSpecType.java | 2 +- .../server/common/data/device/profile/AlarmRule.java | 2 +- .../server/common/data/device/profile/AlarmSchedule.java | 2 +- .../server/common/data/device/profile/AlarmScheduleType.java | 2 +- ...lowCreateNewDevicesDeviceProfileProvisionConfiguration.java | 2 +- .../server/common/data/device/profile/AnyTimeSchedule.java | 2 +- ...eProvisionedDevicesDeviceProfileProvisionConfiguration.java | 2 +- .../server/common/data/device/profile/CustomTimeSchedule.java | 2 +- .../common/data/device/profile/CustomTimeScheduleItem.java | 2 +- .../data/device/profile/DefaultDeviceProfileConfiguration.java | 2 +- .../profile/DefaultDeviceProfileTransportConfiguration.java | 2 +- .../server/common/data/device/profile/DeviceProfileAlarm.java | 2 +- .../common/data/device/profile/DeviceProfileConfiguration.java | 2 +- .../server/common/data/device/profile/DeviceProfileData.java | 2 +- .../device/profile/DeviceProfileProvisionConfiguration.java | 2 +- .../device/profile/DeviceProfileTransportConfiguration.java | 2 +- .../profile/DisabledDeviceProfileProvisionConfiguration.java | 2 +- .../common/data/device/profile/DurationAlarmConditionSpec.java | 2 +- .../data/device/profile/JsonTransportPayloadConfiguration.java | 2 +- .../profile/Lwm2mDeviceProfileTransportConfiguration.java | 2 +- .../profile/MqttDeviceProfileTransportConfiguration.java | 2 +- .../server/common/data/device/profile/MqttTopics.java | 2 +- .../device/profile/ProtoTransportPayloadConfiguration.java | 2 +- .../data/device/profile/ProvisionDeviceProfileCredentials.java | 2 +- .../data/device/profile/RepeatingAlarmConditionSpec.java | 2 +- .../common/data/device/profile/SimpleAlarmConditionSpec.java | 2 +- .../common/data/device/profile/SpecificTimeSchedule.java | 2 +- .../data/device/profile/TransportPayloadTypeConfiguration.java | 2 +- .../server/common/data/entityview/EntityViewSearchQuery.java | 2 +- .../server/common/data/exception/ThingsboardErrorCode.java | 2 +- .../server/common/data/exception/ThingsboardException.java | 2 +- .../org/thingsboard/server/common/data/id/AdminSettingsId.java | 2 +- .../java/org/thingsboard/server/common/data/id/AlarmId.java | 2 +- .../org/thingsboard/server/common/data/id/ApiUsageStateId.java | 2 +- .../java/org/thingsboard/server/common/data/id/AssetId.java | 2 +- .../java/org/thingsboard/server/common/data/id/AuditLogId.java | 2 +- .../server/common/data/id/ComponentDescriptorId.java | 2 +- .../java/org/thingsboard/server/common/data/id/CustomerId.java | 2 +- .../org/thingsboard/server/common/data/id/DashboardId.java | 2 +- .../thingsboard/server/common/data/id/DeviceCredentialsId.java | 2 +- .../java/org/thingsboard/server/common/data/id/DeviceId.java | 2 +- .../org/thingsboard/server/common/data/id/DeviceProfileId.java | 2 +- .../java/org/thingsboard/server/common/data/id/EntityId.java | 2 +- .../server/common/data/id/EntityIdDeserializer.java | 2 +- .../org/thingsboard/server/common/data/id/EntityIdFactory.java | 2 +- .../thingsboard/server/common/data/id/EntityIdSerializer.java | 2 +- .../org/thingsboard/server/common/data/id/EntityViewId.java | 2 +- .../java/org/thingsboard/server/common/data/id/EventId.java | 2 +- .../main/java/org/thingsboard/server/common/data/id/HasId.java | 2 +- .../java/org/thingsboard/server/common/data/id/HasUUID.java | 3 +-- .../java/org/thingsboard/server/common/data/id/IdBased.java | 2 +- .../java/org/thingsboard/server/common/data/id/NodeId.java | 2 +- .../server/common/data/id/OAuth2ClientRegistrationId.java | 2 +- .../server/common/data/id/OAuth2ClientRegistrationInfoId.java | 2 +- .../common/data/id/OAuth2ClientRegistrationTemplateId.java | 2 +- .../org/thingsboard/server/common/data/id/RuleChainId.java | 2 +- .../java/org/thingsboard/server/common/data/id/RuleNodeId.java | 2 +- .../org/thingsboard/server/common/data/id/RuleNodeStateId.java | 2 +- .../java/org/thingsboard/server/common/data/id/TenantId.java | 2 +- .../org/thingsboard/server/common/data/id/TenantProfileId.java | 2 +- .../java/org/thingsboard/server/common/data/id/UUIDBased.java | 2 +- .../thingsboard/server/common/data/id/UserCredentialsId.java | 2 +- .../java/org/thingsboard/server/common/data/id/UserId.java | 2 +- .../org/thingsboard/server/common/data/id/WidgetTypeId.java | 2 +- .../org/thingsboard/server/common/data/id/WidgetsBundleId.java | 2 +- .../org/thingsboard/server/common/data/kv/Aggregation.java | 2 +- .../org/thingsboard/server/common/data/kv/AttributeKey.java | 2 +- .../thingsboard/server/common/data/kv/AttributeKvEntry.java | 2 +- .../server/common/data/kv/BaseAttributeKvEntry.java | 2 +- .../thingsboard/server/common/data/kv/BaseDeleteTsKvQuery.java | 2 +- .../thingsboard/server/common/data/kv/BaseReadTsKvQuery.java | 2 +- .../org/thingsboard/server/common/data/kv/BaseTsKvQuery.java | 2 +- .../org/thingsboard/server/common/data/kv/BasicKvEntry.java | 2 +- .../org/thingsboard/server/common/data/kv/BasicTsKvEntry.java | 2 +- .../thingsboard/server/common/data/kv/BooleanDataEntry.java | 2 +- .../java/org/thingsboard/server/common/data/kv/DataType.java | 2 +- .../org/thingsboard/server/common/data/kv/DeleteTsKvQuery.java | 2 +- .../org/thingsboard/server/common/data/kv/DoubleDataEntry.java | 2 +- .../org/thingsboard/server/common/data/kv/JsonDataEntry.java | 2 +- .../java/org/thingsboard/server/common/data/kv/KvEntry.java | 2 +- .../org/thingsboard/server/common/data/kv/LongDataEntry.java | 2 +- .../org/thingsboard/server/common/data/kv/ReadTsKvQuery.java | 2 +- .../org/thingsboard/server/common/data/kv/StringDataEntry.java | 2 +- .../java/org/thingsboard/server/common/data/kv/TsKvEntry.java | 2 +- .../java/org/thingsboard/server/common/data/kv/TsKvQuery.java | 2 +- .../server/common/data/oauth2/ClientRegistrationDto.java | 2 +- .../org/thingsboard/server/common/data/oauth2/DomainInfo.java | 2 +- .../data/oauth2/ExtendedOAuth2ClientRegistrationInfo.java | 2 +- .../org/thingsboard/server/common/data/oauth2/MapperType.java | 2 +- .../server/common/data/oauth2/OAuth2BasicMapperConfig.java | 2 +- .../server/common/data/oauth2/OAuth2ClientInfo.java | 2 +- .../server/common/data/oauth2/OAuth2ClientRegistration.java | 2 +- .../common/data/oauth2/OAuth2ClientRegistrationInfo.java | 2 +- .../common/data/oauth2/OAuth2ClientRegistrationTemplate.java | 2 +- .../server/common/data/oauth2/OAuth2ClientsDomainParams.java | 2 +- .../server/common/data/oauth2/OAuth2ClientsParams.java | 2 +- .../server/common/data/oauth2/OAuth2CustomMapperConfig.java | 2 +- .../server/common/data/oauth2/OAuth2MapperConfig.java | 2 +- .../org/thingsboard/server/common/data/oauth2/SchemeType.java | 2 +- .../server/common/data/oauth2/TenantNameStrategyType.java | 2 +- .../server/common/data/objects/AttributesEntityView.java | 2 +- .../server/common/data/objects/TelemetryEntityView.java | 2 +- .../java/org/thingsboard/server/common/data/page/PageData.java | 2 +- .../thingsboard/server/common/data/page/PageDataIterable.java | 2 +- .../java/org/thingsboard/server/common/data/page/PageLink.java | 2 +- .../org/thingsboard/server/common/data/page/SortOrder.java | 2 +- .../org/thingsboard/server/common/data/page/TimePageLink.java | 2 +- .../server/common/data/plugin/ComponentDescriptor.java | 2 +- .../server/common/data/plugin/ComponentLifecycleEvent.java | 2 +- .../server/common/data/plugin/ComponentLifecycleState.java | 2 +- .../thingsboard/server/common/data/plugin/ComponentScope.java | 2 +- .../thingsboard/server/common/data/plugin/ComponentType.java | 2 +- .../server/common/data/query/AbstractDataQuery.java | 2 +- .../org/thingsboard/server/common/data/query/AlarmData.java | 2 +- .../server/common/data/query/AlarmDataPageLink.java | 2 +- .../thingsboard/server/common/data/query/AlarmDataQuery.java | 2 +- .../server/common/data/query/ApiUsageStateFilter.java | 2 +- .../server/common/data/query/AssetSearchQueryFilter.java | 2 +- .../thingsboard/server/common/data/query/AssetTypeFilter.java | 2 +- .../server/common/data/query/BooleanFilterPredicate.java | 2 +- .../server/common/data/query/ComplexFilterPredicate.java | 2 +- .../server/common/data/query/DeviceSearchQueryFilter.java | 2 +- .../thingsboard/server/common/data/query/DeviceTypeFilter.java | 2 +- .../org/thingsboard/server/common/data/query/DynamicValue.java | 2 +- .../server/common/data/query/DynamicValueSourceType.java | 2 +- .../thingsboard/server/common/data/query/EntityCountQuery.java | 2 +- .../org/thingsboard/server/common/data/query/EntityData.java | 2 +- .../server/common/data/query/EntityDataPageLink.java | 2 +- .../thingsboard/server/common/data/query/EntityDataQuery.java | 2 +- .../server/common/data/query/EntityDataSortOrder.java | 2 +- .../org/thingsboard/server/common/data/query/EntityFilter.java | 2 +- .../thingsboard/server/common/data/query/EntityFilterType.java | 2 +- .../org/thingsboard/server/common/data/query/EntityKey.java | 2 +- .../thingsboard/server/common/data/query/EntityKeyType.java | 2 +- .../server/common/data/query/EntityKeyValueType.java | 2 +- .../thingsboard/server/common/data/query/EntityListFilter.java | 2 +- .../thingsboard/server/common/data/query/EntityNameFilter.java | 2 +- .../server/common/data/query/EntitySearchQueryFilter.java | 2 +- .../server/common/data/query/EntityViewSearchQueryFilter.java | 2 +- .../server/common/data/query/EntityViewTypeFilter.java | 2 +- .../server/common/data/query/FilterPredicateType.java | 2 +- .../server/common/data/query/FilterPredicateValue.java | 2 +- .../org/thingsboard/server/common/data/query/KeyFilter.java | 2 +- .../server/common/data/query/KeyFilterPredicate.java | 2 +- .../server/common/data/query/NumericFilterPredicate.java | 2 +- .../server/common/data/query/RelationsQueryFilter.java | 2 +- .../server/common/data/query/SimpleKeyFilterPredicate.java | 2 +- .../server/common/data/query/SingleEntityFilter.java | 2 +- .../server/common/data/query/StringFilterPredicate.java | 2 +- .../java/org/thingsboard/server/common/data/query/TsValue.java | 2 +- .../server/common/data/relation/EntityRelation.java | 2 +- .../server/common/data/relation/EntityRelationInfo.java | 2 +- .../server/common/data/relation/EntityRelationsQuery.java | 2 +- .../server/common/data/relation/EntitySearchDirection.java | 2 +- .../server/common/data/relation/EntityTypeFilter.java | 2 +- .../server/common/data/relation/RelationTypeGroup.java | 2 +- .../server/common/data/relation/RelationsSearchParameters.java | 2 +- .../org/thingsboard/server/common/data/rpc/RpcRequest.java | 2 +- .../server/common/data/rpc/ToDeviceRpcRequestBody.java | 2 +- .../server/common/data/rule/DefaultRuleChainCreateRequest.java | 2 +- .../server/common/data/rule/NodeConnectionInfo.java | 2 +- .../org/thingsboard/server/common/data/rule/RuleChain.java | 2 +- .../server/common/data/rule/RuleChainConnectionInfo.java | 2 +- .../org/thingsboard/server/common/data/rule/RuleChainData.java | 2 +- .../server/common/data/rule/RuleChainImportResult.java | 2 +- .../thingsboard/server/common/data/rule/RuleChainMetaData.java | 2 +- .../java/org/thingsboard/server/common/data/rule/RuleNode.java | 2 +- .../org/thingsboard/server/common/data/rule/RuleNodeState.java | 2 +- .../java/org/thingsboard/server/common/data/rule/RuleType.java | 2 +- .../java/org/thingsboard/server/common/data/rule/Scope.java | 2 +- .../org/thingsboard/server/common/data/security/Authority.java | 2 +- .../server/common/data/security/DeviceCredentials.java | 2 +- .../server/common/data/security/DeviceCredentialsFilter.java | 2 +- .../server/common/data/security/DeviceCredentialsType.java | 2 +- .../server/common/data/security/DeviceTokenCredentials.java | 2 +- .../server/common/data/security/DeviceX509Credentials.java | 2 +- .../server/common/data/security/UserCredentials.java | 2 +- .../server/common/data/security/model/SecuritySettings.java | 2 +- .../server/common/data/security/model/UserPasswordPolicy.java | 2 +- .../common/data/sms/config/AwsSnsSmsProviderConfiguration.java | 2 +- .../common/data/sms/config/SmsProviderConfiguration.java | 2 +- .../server/common/data/sms/config/SmsProviderType.java | 2 +- .../server/common/data/sms/config/TestSmsRequest.java | 2 +- .../common/data/sms/config/TwilioSmsProviderConfiguration.java | 2 +- .../data/tenant/profile/DefaultTenantProfileConfiguration.java | 2 +- .../common/data/tenant/profile/TenantProfileConfiguration.java | 2 +- .../server/common/data/tenant/profile/TenantProfileData.java | 2 +- .../org/thingsboard/server/common/data/widget/WidgetType.java | 2 +- .../thingsboard/server/common/data/widget/WidgetsBundle.java | 2 +- .../org/thingsboard/server/common/data/UUIDConverterTest.java | 2 +- common/message/pom.xml | 2 +- .../java/org/thingsboard/server/common/msg/EncryptionUtil.java | 2 +- .../main/java/org/thingsboard/server/common/msg/MsgType.java | 2 +- .../java/org/thingsboard/server/common/msg/TbActorMsg.java | 2 +- .../src/main/java/org/thingsboard/server/common/msg/TbMsg.java | 2 +- .../java/org/thingsboard/server/common/msg/TbMsgDataType.java | 2 +- .../java/org/thingsboard/server/common/msg/TbMsgMetaData.java | 2 +- .../thingsboard/server/common/msg/aware/CustomerAwareMsg.java | 2 +- .../thingsboard/server/common/msg/aware/DeviceAwareMsg.java | 2 +- .../org/thingsboard/server/common/msg/aware/NodeAwareMsg.java | 2 +- .../thingsboard/server/common/msg/aware/RuleChainAwareMsg.java | 2 +- .../thingsboard/server/common/msg/aware/TenantAwareMsg.java | 2 +- .../thingsboard/server/common/msg/cluster/ToAllNodesMsg.java | 2 +- .../server/common/msg/plugin/ComponentLifecycleMsg.java | 2 +- .../server/common/msg/queue/PartitionChangeMsg.java | 2 +- .../server/common/msg/queue/QueueToRuleEngineMsg.java | 2 +- .../server/common/msg/queue/RuleEngineException.java | 2 +- .../thingsboard/server/common/msg/queue/RuleNodeException.java | 2 +- .../org/thingsboard/server/common/msg/queue/RuleNodeInfo.java | 2 +- .../org/thingsboard/server/common/msg/queue/ServiceQueue.java | 2 +- .../thingsboard/server/common/msg/queue/ServiceQueueKey.java | 2 +- .../org/thingsboard/server/common/msg/queue/ServiceType.java | 2 +- .../org/thingsboard/server/common/msg/queue/TbCallback.java | 2 +- .../org/thingsboard/server/common/msg/queue/TbMsgCallback.java | 2 +- .../server/common/msg/queue/TopicPartitionInfo.java | 2 +- .../thingsboard/server/common/msg/rpc/ToDeviceRpcRequest.java | 2 +- .../org/thingsboard/server/common/msg/session/FeatureType.java | 2 +- .../thingsboard/server/common/msg/session/SessionMsgType.java | 2 +- .../common/msg/session/ex/ProcessingTimeoutException.java | 2 +- .../server/common/msg/session/ex/SessionAuthException.java | 2 +- .../server/common/msg/session/ex/SessionException.java | 2 +- .../common/msg/timeout/DeviceActorServerSideRpcTimeoutMsg.java | 2 +- .../org/thingsboard/server/common/msg/timeout/TimeoutMsg.java | 2 +- .../thingsboard/server/common/msg/tools/SchedulerUtils.java | 2 +- .../org/thingsboard/server/common/msg/tools/TbRateLimits.java | 2 +- .../server/common/msg/tools/TbRateLimitsException.java | 2 +- common/message/src/main/proto/tbmsg.proto | 2 +- common/pom.xml | 2 +- common/queue/pom.xml | 2 +- .../main/java/org/thingsboard/server/queue/TbQueueAdmin.java | 2 +- .../java/org/thingsboard/server/queue/TbQueueCallback.java | 2 +- .../java/org/thingsboard/server/queue/TbQueueConsumer.java | 2 +- .../main/java/org/thingsboard/server/queue/TbQueueHandler.java | 2 +- .../src/main/java/org/thingsboard/server/queue/TbQueueMsg.java | 2 +- .../java/org/thingsboard/server/queue/TbQueueMsgDecoder.java | 2 +- .../java/org/thingsboard/server/queue/TbQueueMsgHeaders.java | 2 +- .../java/org/thingsboard/server/queue/TbQueueMsgMetadata.java | 2 +- .../java/org/thingsboard/server/queue/TbQueueProducer.java | 2 +- .../org/thingsboard/server/queue/TbQueueRequestTemplate.java | 2 +- .../org/thingsboard/server/queue/TbQueueResponseTemplate.java | 2 +- .../server/queue/azure/servicebus/TbServiceBusAdmin.java | 2 +- .../queue/azure/servicebus/TbServiceBusConsumerTemplate.java | 2 +- .../queue/azure/servicebus/TbServiceBusProducerTemplate.java | 2 +- .../queue/azure/servicebus/TbServiceBusQueueConfigs.java | 2 +- .../server/queue/azure/servicebus/TbServiceBusSettings.java | 2 +- .../queue/common/AbstractParallelTbQueueConsumerTemplate.java | 2 +- .../server/queue/common/AbstractTbQueueConsumerTemplate.java | 2 +- .../server/queue/common/AbstractTbQueueTemplate.java | 2 +- .../thingsboard/server/queue/common/AsyncCallbackTemplate.java | 2 +- .../org/thingsboard/server/queue/common/DefaultTbQueueMsg.java | 2 +- .../server/queue/common/DefaultTbQueueMsgHeaders.java | 2 +- .../server/queue/common/DefaultTbQueueRequestTemplate.java | 2 +- .../server/queue/common/DefaultTbQueueResponseTemplate.java | 2 +- .../server/queue/common/MultipleTbQueueCallbackWrapper.java | 2 +- .../queue/common/MultipleTbQueueTbMsgCallbackWrapper.java | 2 +- .../org/thingsboard/server/queue/common/TbProtoJsQueueMsg.java | 2 +- .../org/thingsboard/server/queue/common/TbProtoQueueMsg.java | 2 +- .../server/queue/common/TbQueueTbMsgCallbackWrapper.java | 2 +- .../server/queue/discovery/ClusterTopologyChangeEvent.java | 2 +- .../server/queue/discovery/ConsistentHashCircle.java | 2 +- .../server/queue/discovery/DefaultTbServiceInfoProvider.java | 2 +- .../thingsboard/server/queue/discovery/DiscoveryService.java | 2 +- .../server/queue/discovery/DummyDiscoveryService.java | 2 +- .../server/queue/discovery/HashPartitionService.java | 2 +- .../server/queue/discovery/PartitionChangeEvent.java | 2 +- .../thingsboard/server/queue/discovery/PartitionService.java | 2 +- .../server/queue/discovery/TbServiceInfoProvider.java | 2 +- .../thingsboard/server/queue/discovery/TenantRoutingInfo.java | 2 +- .../server/queue/discovery/TenantRoutingInfoService.java | 2 +- .../server/queue/discovery/TopicPartitionInfoKey.java | 2 +- .../thingsboard/server/queue/discovery/ZkDiscoveryService.java | 2 +- .../server/queue/environment/EnvironmentLogService.java | 2 +- .../org/thingsboard/server/queue/kafka/KafkaTbQueueMsg.java | 2 +- .../server/queue/kafka/KafkaTbQueueMsgMetadata.java | 2 +- .../java/org/thingsboard/server/queue/kafka/TbKafkaAdmin.java | 2 +- .../server/queue/kafka/TbKafkaConsumerTemplate.java | 2 +- .../org/thingsboard/server/queue/kafka/TbKafkaDecoder.java | 2 +- .../org/thingsboard/server/queue/kafka/TbKafkaEncoder.java | 2 +- .../server/queue/kafka/TbKafkaProducerTemplate.java | 2 +- .../org/thingsboard/server/queue/kafka/TbKafkaProperty.java | 2 +- .../org/thingsboard/server/queue/kafka/TbKafkaSettings.java | 2 +- .../thingsboard/server/queue/kafka/TbKafkaTopicConfigs.java | 2 +- .../org/thingsboard/server/queue/memory/InMemoryStorage.java | 2 +- .../server/queue/memory/InMemoryTbQueueConsumer.java | 2 +- .../server/queue/memory/InMemoryTbQueueProducer.java | 2 +- .../server/queue/provider/AwsSqsMonolithQueueFactory.java | 2 +- .../server/queue/provider/AwsSqsTbCoreQueueFactory.java | 2 +- .../server/queue/provider/AwsSqsTbRuleEngineQueueFactory.java | 2 +- .../server/queue/provider/AwsSqsTransportQueueFactory.java | 2 +- .../server/queue/provider/InMemoryMonolithQueueFactory.java | 2 +- .../server/queue/provider/InMemoryTbTransportQueueFactory.java | 2 +- .../server/queue/provider/KafkaMonolithQueueFactory.java | 2 +- .../server/queue/provider/KafkaTbCoreQueueFactory.java | 2 +- .../server/queue/provider/KafkaTbRuleEngineQueueFactory.java | 2 +- .../server/queue/provider/KafkaTbTransportQueueFactory.java | 2 +- .../server/queue/provider/PubSubMonolithQueueFactory.java | 2 +- .../server/queue/provider/PubSubTbCoreQueueFactory.java | 2 +- .../server/queue/provider/PubSubTbRuleEngineQueueFactory.java | 2 +- .../server/queue/provider/PubSubTransportQueueFactory.java | 2 +- .../server/queue/provider/RabbitMqMonolithQueueFactory.java | 2 +- .../server/queue/provider/RabbitMqTbCoreQueueFactory.java | 2 +- .../queue/provider/RabbitMqTbRuleEngineQueueFactory.java | 2 +- .../server/queue/provider/RabbitMqTransportQueueFactory.java | 2 +- .../server/queue/provider/ServiceBusMonolithQueueFactory.java | 2 +- .../server/queue/provider/ServiceBusTbCoreQueueFactory.java | 2 +- .../queue/provider/ServiceBusTbRuleEngineQueueFactory.java | 2 +- .../server/queue/provider/ServiceBusTransportQueueFactory.java | 2 +- .../thingsboard/server/queue/provider/TbCoreQueueFactory.java | 2 +- .../server/queue/provider/TbCoreQueueProducerProvider.java | 2 +- .../server/queue/provider/TbQueueProducerProvider.java | 2 +- .../server/queue/provider/TbRuleEngineProducerProvider.java | 2 +- .../server/queue/provider/TbRuleEngineQueueFactory.java | 2 +- .../server/queue/provider/TbTransportQueueFactory.java | 2 +- .../queue/provider/TbTransportQueueProducerProvider.java | 2 +- .../server/queue/provider/TbUsageStatsClientQueueFactory.java | 2 +- .../org/thingsboard/server/queue/pubsub/TbPubSubAdmin.java | 2 +- .../server/queue/pubsub/TbPubSubConsumerTemplate.java | 2 +- .../server/queue/pubsub/TbPubSubProducerTemplate.java | 2 +- .../org/thingsboard/server/queue/pubsub/TbPubSubSettings.java | 2 +- .../server/queue/pubsub/TbPubSubSubscriptionSettings.java | 2 +- .../org/thingsboard/server/queue/rabbitmq/TbRabbitMqAdmin.java | 2 +- .../server/queue/rabbitmq/TbRabbitMqConsumerTemplate.java | 2 +- .../server/queue/rabbitmq/TbRabbitMqProducerTemplate.java | 2 +- .../server/queue/rabbitmq/TbRabbitMqQueueArguments.java | 2 +- .../thingsboard/server/queue/rabbitmq/TbRabbitMqSettings.java | 2 +- .../server/queue/scheduler/DefaultSchedulerComponent.java | 2 +- .../thingsboard/server/queue/scheduler/SchedulerComponent.java | 2 +- .../thingsboard/server/queue/settings/TbQueueCoreSettings.java | 2 +- .../server/queue/settings/TbQueueRemoteJsInvokeSettings.java | 2 +- .../server/queue/settings/TbQueueRuleEngineSettings.java | 2 +- .../server/queue/settings/TbQueueTransportApiSettings.java | 2 +- .../queue/settings/TbQueueTransportNotificationSettings.java | 2 +- .../settings/TbRuleEngineQueueAckStrategyConfiguration.java | 2 +- .../server/queue/settings/TbRuleEngineQueueConfiguration.java | 2 +- .../settings/TbRuleEngineQueueSubmitStrategyConfiguration.java | 2 +- .../thingsboard/server/queue/sqs/AwsSqsTbQueueMsgMetadata.java | 2 +- .../java/org/thingsboard/server/queue/sqs/TbAwsSqsAdmin.java | 2 +- .../thingsboard/server/queue/sqs/TbAwsSqsConsumerTemplate.java | 2 +- .../thingsboard/server/queue/sqs/TbAwsSqsProducerTemplate.java | 2 +- .../thingsboard/server/queue/sqs/TbAwsSqsQueueAttributes.java | 2 +- .../org/thingsboard/server/queue/sqs/TbAwsSqsSettings.java | 2 +- .../server/queue/usagestats/DefaultTbApiUsageClient.java | 2 +- .../thingsboard/server/queue/usagestats/TbApiUsageClient.java | 2 +- .../org/thingsboard/server/queue/util/TbCoreComponent.java | 2 +- .../thingsboard/server/queue/util/TbRuleEngineComponent.java | 2 +- .../thingsboard/server/queue/util/TbTransportComponent.java | 2 +- common/queue/src/main/proto/jsinvoke.proto | 2 +- common/queue/src/main/proto/queue.proto | 2 +- common/stats/pom.xml | 2 +- .../org/thingsboard/server/common/stats/DefaultCounter.java | 2 +- .../thingsboard/server/common/stats/DefaultMessagesStats.java | 2 +- .../thingsboard/server/common/stats/DefaultStatsFactory.java | 2 +- .../org/thingsboard/server/common/stats/MessagesStats.java | 2 +- .../java/org/thingsboard/server/common/stats/StatsCounter.java | 2 +- .../java/org/thingsboard/server/common/stats/StatsFactory.java | 2 +- .../java/org/thingsboard/server/common/stats/StatsType.java | 2 +- common/transport/coap/pom.xml | 2 +- .../server/transport/coap/CoapTransportContext.java | 2 +- .../server/transport/coap/CoapTransportResource.java | 2 +- .../server/transport/coap/CoapTransportService.java | 2 +- .../server/transport/coap/adaptors/CoapTransportAdaptor.java | 2 +- .../server/transport/coap/adaptors/JsonCoapAdaptor.java | 2 +- .../server/transport/coap/client/DeviceEmulator.java | 2 +- common/transport/http/pom.xml | 2 +- .../thingsboard/server/transport/http/DeviceApiController.java | 2 +- .../server/transport/http/HttpTransportContext.java | 2 +- common/transport/mqtt/pom.xml | 2 +- .../server/transport/mqtt/MqttSslHandlerProvider.java | 2 +- .../server/transport/mqtt/MqttTransportContext.java | 2 +- .../server/transport/mqtt/MqttTransportHandler.java | 2 +- .../server/transport/mqtt/MqttTransportServerInitializer.java | 2 +- .../server/transport/mqtt/MqttTransportService.java | 2 +- .../server/transport/mqtt/adaptors/JsonMqttAdaptor.java | 2 +- .../server/transport/mqtt/adaptors/MqttTransportAdaptor.java | 2 +- .../server/transport/mqtt/adaptors/ProtoMqttAdaptor.java | 2 +- .../server/transport/mqtt/session/DeviceSessionCtx.java | 2 +- .../server/transport/mqtt/session/GatewayDeviceSessionCtx.java | 2 +- .../server/transport/mqtt/session/GatewaySessionHandler.java | 2 +- .../transport/mqtt/session/MqttDeviceAwareSessionContext.java | 2 +- .../server/transport/mqtt/session/MqttTopicMatcher.java | 2 +- .../server/transport/mqtt/util/AlwaysTrueTopicFilter.java | 2 +- .../server/transport/mqtt/util/EqualsTopicFilter.java | 2 +- .../server/transport/mqtt/util/MqttTopicFilter.java | 2 +- .../server/transport/mqtt/util/MqttTopicFilterFactory.java | 2 +- .../server/transport/mqtt/util/RegexTopicFilter.java | 2 +- .../org/thingsboard/server/transport/mqtt/util/SslUtil.java | 2 +- .../server/transport/mqtt/util/MqttTopicFilterFactoryTest.java | 2 +- common/transport/pom.xml | 2 +- common/transport/transport-api/pom.xml | 2 +- .../server/common/transport/SessionMsgListener.java | 2 +- .../thingsboard/server/common/transport/TransportAdaptor.java | 2 +- .../thingsboard/server/common/transport/TransportContext.java | 2 +- .../server/common/transport/TransportDeviceProfileCache.java | 2 +- .../thingsboard/server/common/transport/TransportService.java | 2 +- .../server/common/transport/TransportServiceCallback.java | 2 +- .../server/common/transport/TransportTenantProfileCache.java | 2 +- .../server/common/transport/adaptor/AdaptorException.java | 2 +- .../server/common/transport/adaptor/JsonConverter.java | 2 +- .../server/common/transport/adaptor/JsonConverterConfig.java | 2 +- .../server/common/transport/adaptor/ProtoConverter.java | 2 +- .../server/common/transport/auth/DeviceAuthResult.java | 2 +- .../server/common/transport/auth/DeviceAuthService.java | 2 +- .../server/common/transport/auth/DeviceProfileAware.java | 2 +- .../transport/auth/GetOrCreateDeviceFromGatewayResponse.java | 2 +- .../server/common/transport/auth/SessionInfoCreator.java | 2 +- .../server/common/transport/auth/TransportDeviceInfo.java | 2 +- .../transport/auth/ValidateDeviceCredentialsResponse.java | 2 +- .../transport/limits/DefaultTransportRateLimitService.java | 2 +- .../common/transport/limits/DummyTransportRateLimit.java | 2 +- .../common/transport/limits/EntityTransportRateLimits.java | 2 +- .../common/transport/limits/SimpleTransportRateLimit.java | 2 +- .../server/common/transport/limits/TransportRateLimit.java | 2 +- .../common/transport/limits/TransportRateLimitService.java | 2 +- .../common/transport/profile/TenantProfileUpdateResult.java | 2 +- .../transport/service/DefaultTransportDeviceProfileCache.java | 2 +- .../common/transport/service/DefaultTransportService.java | 2 +- .../transport/service/DefaultTransportTenantProfileCache.java | 2 +- .../server/common/transport/service/RpcRequestMetadata.java | 2 +- .../server/common/transport/service/SessionMetaData.java | 2 +- .../common/transport/service/ToRuleEngineMsgEncoder.java | 2 +- .../transport/service/ToTransportMsgResponseDecoder.java | 2 +- .../common/transport/service/TransportApiRequestEncoder.java | 2 +- .../common/transport/service/TransportApiResponseDecoder.java | 2 +- .../transport/service/TransportTenantRoutingInfoService.java | 2 +- .../common/transport/session/DeviceAwareSessionContext.java | 2 +- .../server/common/transport/session/SessionContext.java | 2 +- .../common/transport/util/DataDecodingEncodingService.java | 2 +- .../thingsboard/server/common/transport/util/JsonUtils.java | 2 +- .../server/common/transport/util/ProtoWithFSTService.java | 2 +- common/transport/transport-api/src/main/proto/transport.proto | 2 +- common/util/pom.xml | 2 +- .../org/thingsboard/common/util/AbstractListeningExecutor.java | 2 +- .../main/java/org/thingsboard/common/util/AzureIotHubUtil.java | 2 +- .../main/java/org/thingsboard/common/util/DonAsynchron.java | 2 +- .../java/org/thingsboard/common/util/ListeningExecutor.java | 2 +- .../org/thingsboard/common/util/ThingsBoardThreadFactory.java | 2 +- dao/pom.xml | 2 +- dao/src/main/java/org/thingsboard/server/dao/Dao.java | 2 +- dao/src/main/java/org/thingsboard/server/dao/DaoUtil.java | 2 +- .../main/java/org/thingsboard/server/dao/HsqlTsDaoConfig.java | 2 +- .../java/org/thingsboard/server/dao/HsqlTsLatestDaoConfig.java | 2 +- dao/src/main/java/org/thingsboard/server/dao/JpaDaoConfig.java | 2 +- .../main/java/org/thingsboard/server/dao/PsqlTsDaoConfig.java | 2 +- .../java/org/thingsboard/server/dao/PsqlTsLatestDaoConfig.java | 2 +- .../org/thingsboard/server/dao/SqlTimeseriesDaoConfig.java | 2 +- .../main/java/org/thingsboard/server/dao/TenantEntityDao.java | 2 +- .../java/org/thingsboard/server/dao/TimescaleDaoConfig.java | 2 +- .../org/thingsboard/server/dao/TimescaleTsLatestDaoConfig.java | 2 +- .../main/java/org/thingsboard/server/dao/alarm/AlarmDao.java | 2 +- .../org/thingsboard/server/dao/alarm/BaseAlarmService.java | 2 +- .../main/java/org/thingsboard/server/dao/asset/AssetDao.java | 2 +- .../java/org/thingsboard/server/dao/asset/AssetTypeFilter.java | 2 +- .../org/thingsboard/server/dao/asset/BaseAssetService.java | 2 +- .../org/thingsboard/server/dao/attributes/AttributesDao.java | 2 +- .../server/dao/attributes/BaseAttributesService.java | 2 +- .../java/org/thingsboard/server/dao/audit/AuditLogDao.java | 2 +- .../org/thingsboard/server/dao/audit/AuditLogLevelFilter.java | 2 +- .../org/thingsboard/server/dao/audit/AuditLogLevelMask.java | 2 +- .../org/thingsboard/server/dao/audit/AuditLogServiceImpl.java | 2 +- .../thingsboard/server/dao/audit/DummyAuditLogServiceImpl.java | 2 +- .../org/thingsboard/server/dao/audit/sink/AuditLogSink.java | 2 +- .../thingsboard/server/dao/audit/sink/DummyAuditLogSink.java | 2 +- .../server/dao/audit/sink/ElasticsearchAuditLogSink.java | 2 +- .../main/java/org/thingsboard/server/dao/cache/CacheSpecs.java | 2 +- .../server/dao/cache/CaffeineCacheConfiguration.java | 2 +- .../dao/cache/PreviousDeviceCredentialsIdKeyGenerator.java | 2 +- .../server/dao/cache/TBRedisCacheConfiguration.java | 2 +- .../server/dao/cache/TBRedisClusterConfiguration.java | 2 +- .../server/dao/cache/TBRedisStandaloneConfiguration.java | 2 +- .../server/dao/component/BaseComponentDescriptorService.java | 2 +- .../server/dao/component/ComponentDescriptorDao.java | 2 +- .../java/org/thingsboard/server/dao/customer/CustomerDao.java | 2 +- .../thingsboard/server/dao/customer/CustomerServiceImpl.java | 2 +- .../org/thingsboard/server/dao/dashboard/DashboardDao.java | 2 +- .../org/thingsboard/server/dao/dashboard/DashboardInfoDao.java | 2 +- .../thingsboard/server/dao/dashboard/DashboardServiceImpl.java | 2 +- .../java/org/thingsboard/server/dao/device/ClaimDataInfo.java | 2 +- .../thingsboard/server/dao/device/ClaimDevicesServiceImpl.java | 2 +- .../thingsboard/server/dao/device/DeviceCredentialsDao.java | 2 +- .../server/dao/device/DeviceCredentialsServiceImpl.java | 2 +- .../main/java/org/thingsboard/server/dao/device/DeviceDao.java | 2 +- .../org/thingsboard/server/dao/device/DeviceProfileDao.java | 2 +- .../server/dao/device/DeviceProfileServiceImpl.java | 2 +- .../org/thingsboard/server/dao/device/DeviceServiceImpl.java | 2 +- .../thingsboard/server/dao/entity/AbstractEntityService.java | 2 +- .../org/thingsboard/server/dao/entity/BaseEntityService.java | 2 +- .../java/org/thingsboard/server/dao/entity/EntityQueryDao.java | 2 +- .../org/thingsboard/server/dao/entityview/EntityViewDao.java | 2 +- .../server/dao/entityview/EntityViewServiceImpl.java | 2 +- .../org/thingsboard/server/dao/event/BaseEventService.java | 2 +- .../main/java/org/thingsboard/server/dao/event/EventDao.java | 2 +- .../thingsboard/server/dao/exception/BufferLimitException.java | 2 +- .../server/dao/exception/DataValidationException.java | 2 +- .../thingsboard/server/dao/exception/DatabaseException.java | 2 +- .../server/dao/exception/IncorrectParameterException.java | 2 +- .../main/java/org/thingsboard/server/dao/model/BaseEntity.java | 2 +- .../java/org/thingsboard/server/dao/model/BaseSqlEntity.java | 2 +- .../java/org/thingsboard/server/dao/model/ModelConstants.java | 2 +- .../org/thingsboard/server/dao/model/SearchTextEntity.java | 2 +- dao/src/main/java/org/thingsboard/server/dao/model/ToData.java | 2 +- .../thingsboard/server/dao/model/sql/AbstractAlarmEntity.java | 2 +- .../thingsboard/server/dao/model/sql/AbstractAssetEntity.java | 2 +- .../thingsboard/server/dao/model/sql/AbstractDeviceEntity.java | 2 +- .../server/dao/model/sql/AbstractEntityViewEntity.java | 2 +- .../model/sql/AbstractOAuth2ClientRegistrationInfoEntity.java | 2 +- .../thingsboard/server/dao/model/sql/AbstractTenantEntity.java | 2 +- .../thingsboard/server/dao/model/sql/AbstractTsKvEntity.java | 2 +- .../thingsboard/server/dao/model/sql/AdminSettingsEntity.java | 2 +- .../java/org/thingsboard/server/dao/model/sql/AlarmEntity.java | 2 +- .../org/thingsboard/server/dao/model/sql/AlarmInfoEntity.java | 2 +- .../thingsboard/server/dao/model/sql/ApiUsageStateEntity.java | 2 +- .../java/org/thingsboard/server/dao/model/sql/AssetEntity.java | 2 +- .../org/thingsboard/server/dao/model/sql/AssetInfoEntity.java | 2 +- .../server/dao/model/sql/AttributeKvCompositeKey.java | 2 +- .../thingsboard/server/dao/model/sql/AttributeKvEntity.java | 2 +- .../org/thingsboard/server/dao/model/sql/AuditLogEntity.java | 2 +- .../server/dao/model/sql/ComponentDescriptorEntity.java | 2 +- .../org/thingsboard/server/dao/model/sql/CustomerEntity.java | 2 +- .../org/thingsboard/server/dao/model/sql/DashboardEntity.java | 2 +- .../thingsboard/server/dao/model/sql/DashboardInfoEntity.java | 2 +- .../server/dao/model/sql/DeviceCredentialsEntity.java | 2 +- .../org/thingsboard/server/dao/model/sql/DeviceEntity.java | 2 +- .../org/thingsboard/server/dao/model/sql/DeviceInfoEntity.java | 2 +- .../thingsboard/server/dao/model/sql/DeviceProfileEntity.java | 2 +- .../org/thingsboard/server/dao/model/sql/EntityViewEntity.java | 2 +- .../thingsboard/server/dao/model/sql/EntityViewInfoEntity.java | 2 +- .../java/org/thingsboard/server/dao/model/sql/EventEntity.java | 2 +- .../model/sql/ExtendedOAuth2ClientRegistrationInfoEntity.java | 2 +- .../server/dao/model/sql/OAuth2ClientRegistrationEntity.java | 2 +- .../dao/model/sql/OAuth2ClientRegistrationInfoEntity.java | 2 +- .../dao/model/sql/OAuth2ClientRegistrationTemplateEntity.java | 2 +- .../thingsboard/server/dao/model/sql/RelationCompositeKey.java | 2 +- .../org/thingsboard/server/dao/model/sql/RelationEntity.java | 2 +- .../org/thingsboard/server/dao/model/sql/RuleChainEntity.java | 2 +- .../org/thingsboard/server/dao/model/sql/RuleNodeEntity.java | 2 +- .../thingsboard/server/dao/model/sql/RuleNodeStateEntity.java | 2 +- .../org/thingsboard/server/dao/model/sql/TenantEntity.java | 2 +- .../org/thingsboard/server/dao/model/sql/TenantInfoEntity.java | 2 +- .../thingsboard/server/dao/model/sql/TenantProfileEntity.java | 2 +- .../server/dao/model/sql/UserCredentialsEntity.java | 2 +- .../java/org/thingsboard/server/dao/model/sql/UserEntity.java | 2 +- .../org/thingsboard/server/dao/model/sql/WidgetTypeEntity.java | 2 +- .../thingsboard/server/dao/model/sql/WidgetsBundleEntity.java | 2 +- .../server/dao/model/sqlts/dictionary/TsKvDictionary.java | 2 +- .../dao/model/sqlts/dictionary/TsKvDictionaryCompositeKey.java | 2 +- .../server/dao/model/sqlts/latest/TsKvLatestCompositeKey.java | 2 +- .../server/dao/model/sqlts/latest/TsKvLatestEntity.java | 2 +- .../model/sqlts/timescale/ts/TimescaleTsKvCompositeKey.java | 2 +- .../dao/model/sqlts/timescale/ts/TimescaleTsKvEntity.java | 2 +- .../server/dao/model/sqlts/ts/TsKvCompositeKey.java | 2 +- .../org/thingsboard/server/dao/model/sqlts/ts/TsKvEntity.java | 2 +- .../server/dao/nosql/CassandraAbstractAsyncDao.java | 2 +- .../org/thingsboard/server/dao/nosql/CassandraAbstractDao.java | 2 +- .../server/dao/nosql/CassandraBufferedRateExecutor.java | 2 +- .../server/dao/oauth2/HybridClientRegistrationRepository.java | 2 +- .../server/dao/oauth2/OAuth2ClientRegistrationDao.java | 2 +- .../server/dao/oauth2/OAuth2ClientRegistrationInfoDao.java | 2 +- .../server/dao/oauth2/OAuth2ClientRegistrationTemplateDao.java | 2 +- .../server/dao/oauth2/OAuth2ConfigTemplateServiceImpl.java | 2 +- .../org/thingsboard/server/dao/oauth2/OAuth2Configuration.java | 2 +- .../org/thingsboard/server/dao/oauth2/OAuth2ServiceImpl.java | 2 +- .../java/org/thingsboard/server/dao/oauth2/OAuth2Utils.java | 2 +- .../thingsboard/server/dao/relation/BaseRelationService.java | 2 +- .../java/org/thingsboard/server/dao/relation/RelationDao.java | 2 +- .../org/thingsboard/server/dao/rule/BaseRuleChainService.java | 2 +- .../thingsboard/server/dao/rule/BaseRuleNodeStateService.java | 2 +- .../java/org/thingsboard/server/dao/rule/RuleChainDao.java | 2 +- .../main/java/org/thingsboard/server/dao/rule/RuleNodeDao.java | 2 +- .../java/org/thingsboard/server/dao/rule/RuleNodeStateDao.java | 2 +- .../java/org/thingsboard/server/dao/service/DataValidator.java | 2 +- .../org/thingsboard/server/dao/service/PaginatedRemover.java | 2 +- .../thingsboard/server/dao/service/TimePaginatedRemover.java | 2 +- .../java/org/thingsboard/server/dao/service/Validator.java | 2 +- .../org/thingsboard/server/dao/settings/AdminSettingsDao.java | 2 +- .../server/dao/settings/AdminSettingsServiceImpl.java | 2 +- .../java/org/thingsboard/server/dao/sql/JpaAbstractDao.java | 2 +- .../server/dao/sql/JpaAbstractDaoListeningExecutorService.java | 2 +- .../thingsboard/server/dao/sql/JpaAbstractSearchTextDao.java | 2 +- .../org/thingsboard/server/dao/sql/JpaExecutorService.java | 2 +- .../server/dao/sql/ScheduledLogExecutorComponent.java | 2 +- .../org/thingsboard/server/dao/sql/TbSqlBlockingQueue.java | 2 +- .../thingsboard/server/dao/sql/TbSqlBlockingQueueParams.java | 2 +- .../thingsboard/server/dao/sql/TbSqlBlockingQueueWrapper.java | 2 +- .../main/java/org/thingsboard/server/dao/sql/TbSqlQueue.java | 2 +- .../java/org/thingsboard/server/dao/sql/TbSqlQueueElement.java | 2 +- .../org/thingsboard/server/dao/sql/alarm/AlarmRepository.java | 2 +- .../java/org/thingsboard/server/dao/sql/alarm/JpaAlarmDao.java | 2 +- .../org/thingsboard/server/dao/sql/asset/AssetRepository.java | 2 +- .../java/org/thingsboard/server/dao/sql/asset/JpaAssetDao.java | 2 +- .../server/dao/sql/attributes/AttributeKvInsertRepository.java | 2 +- .../server/dao/sql/attributes/AttributeKvRepository.java | 2 +- .../dao/sql/attributes/HsqlAttributesInsertRepository.java | 2 +- .../thingsboard/server/dao/sql/attributes/JpaAttributeDao.java | 2 +- .../dao/sql/attributes/PsqlAttributesInsertRepository.java | 2 +- .../thingsboard/server/dao/sql/audit/AuditLogRepository.java | 2 +- .../org/thingsboard/server/dao/sql/audit/JpaAuditLogDao.java | 2 +- .../component/AbstractComponentDescriptorInsertRepository.java | 2 +- .../dao/sql/component/ComponentDescriptorInsertRepository.java | 2 +- .../dao/sql/component/ComponentDescriptorRepository.java | 2 +- .../sql/component/HsqlComponentDescriptorInsertRepository.java | 2 +- .../dao/sql/component/JpaBaseComponentDescriptorDao.java | 2 +- .../sql/component/PsqlComponentDescriptorInsertRepository.java | 2 +- .../server/dao/sql/customer/CustomerRepository.java | 2 +- .../thingsboard/server/dao/sql/customer/JpaCustomerDao.java | 2 +- .../server/dao/sql/dashboard/DashboardInfoRepository.java | 2 +- .../server/dao/sql/dashboard/DashboardRepository.java | 2 +- .../thingsboard/server/dao/sql/dashboard/JpaDashboardDao.java | 2 +- .../server/dao/sql/dashboard/JpaDashboardInfoDao.java | 2 +- .../server/dao/sql/device/DeviceCredentialsRepository.java | 2 +- .../server/dao/sql/device/DeviceProfileRepository.java | 2 +- .../thingsboard/server/dao/sql/device/DeviceRepository.java | 2 +- .../server/dao/sql/device/JpaDeviceCredentialsDao.java | 2 +- .../org/thingsboard/server/dao/sql/device/JpaDeviceDao.java | 2 +- .../thingsboard/server/dao/sql/device/JpaDeviceProfileDao.java | 2 +- .../server/dao/sql/entityview/EntityViewRepository.java | 2 +- .../server/dao/sql/entityview/JpaEntityViewDao.java | 2 +- .../server/dao/sql/event/AbstractEventInsertRepository.java | 2 +- .../server/dao/sql/event/EventInsertRepository.java | 2 +- .../org/thingsboard/server/dao/sql/event/EventRepository.java | 2 +- .../server/dao/sql/event/HsqlEventInsertRepository.java | 2 +- .../org/thingsboard/server/dao/sql/event/JpaBaseEventDao.java | 2 +- .../server/dao/sql/event/PsqlEventInsertRepository.java | 2 +- .../server/dao/sql/oauth2/JpaOAuth2ClientRegistrationDao.java | 2 +- .../dao/sql/oauth2/JpaOAuth2ClientRegistrationInfoDao.java | 2 +- .../dao/sql/oauth2/JpaOAuth2ClientRegistrationTemplateDao.java | 2 +- .../dao/sql/oauth2/OAuth2ClientRegistrationInfoRepository.java | 2 +- .../dao/sql/oauth2/OAuth2ClientRegistrationRepository.java | 2 +- .../sql/oauth2/OAuth2ClientRegistrationTemplateRepository.java | 2 +- .../org/thingsboard/server/dao/sql/query/AlarmDataAdapter.java | 2 +- .../thingsboard/server/dao/sql/query/AlarmQueryRepository.java | 2 +- .../server/dao/sql/query/DefaultAlarmQueryRepository.java | 2 +- .../server/dao/sql/query/DefaultEntityQueryRepository.java | 2 +- .../server/dao/sql/query/DefaultQueryLogComponent.java | 2 +- .../thingsboard/server/dao/sql/query/EntityDataAdapter.java | 2 +- .../org/thingsboard/server/dao/sql/query/EntityKeyMapping.java | 2 +- .../server/dao/sql/query/EntityQueryRepository.java | 2 +- .../thingsboard/server/dao/sql/query/JpaEntityQueryDao.java | 2 +- .../org/thingsboard/server/dao/sql/query/QueryContext.java | 2 +- .../thingsboard/server/dao/sql/query/QueryLogComponent.java | 2 +- .../thingsboard/server/dao/sql/query/QuerySecurityContext.java | 2 +- .../dao/sql/relation/AbstractRelationInsertRepository.java | 2 +- .../server/dao/sql/relation/HsqlRelationInsertRepository.java | 2 +- .../thingsboard/server/dao/sql/relation/JpaRelationDao.java | 2 +- .../server/dao/sql/relation/PsqlRelationInsertRepository.java | 2 +- .../server/dao/sql/relation/RelationInsertRepository.java | 2 +- .../server/dao/sql/relation/RelationRepository.java | 2 +- .../org/thingsboard/server/dao/sql/rule/JpaRuleChainDao.java | 2 +- .../org/thingsboard/server/dao/sql/rule/JpaRuleNodeDao.java | 2 +- .../thingsboard/server/dao/sql/rule/JpaRuleNodeStateDao.java | 2 +- .../thingsboard/server/dao/sql/rule/RuleChainRepository.java | 2 +- .../thingsboard/server/dao/sql/rule/RuleNodeRepository.java | 2 +- .../server/dao/sql/rule/RuleNodeStateRepository.java | 2 +- .../server/dao/sql/settings/AdminSettingsRepository.java | 2 +- .../server/dao/sql/settings/JpaAdminSettingsDao.java | 2 +- .../org/thingsboard/server/dao/sql/tenant/JpaTenantDao.java | 2 +- .../thingsboard/server/dao/sql/tenant/JpaTenantProfileDao.java | 2 +- .../server/dao/sql/tenant/TenantProfileRepository.java | 2 +- .../thingsboard/server/dao/sql/tenant/TenantRepository.java | 2 +- .../server/dao/sql/usagerecord/ApiUsageStateRepository.java | 2 +- .../server/dao/sql/usagerecord/JpaApiUsageStateDao.java | 2 +- .../thingsboard/server/dao/sql/user/JpaUserCredentialsDao.java | 2 +- .../java/org/thingsboard/server/dao/sql/user/JpaUserDao.java | 2 +- .../server/dao/sql/user/UserCredentialsRepository.java | 2 +- .../org/thingsboard/server/dao/sql/user/UserRepository.java | 2 +- .../thingsboard/server/dao/sql/widget/JpaWidgetTypeDao.java | 2 +- .../thingsboard/server/dao/sql/widget/JpaWidgetsBundleDao.java | 2 +- .../server/dao/sql/widget/WidgetTypeRepository.java | 2 +- .../server/dao/sql/widget/WidgetsBundleRepository.java | 2 +- .../dao/sqlts/AbstractChunkedAggregationTimeseriesDao.java | 2 +- .../thingsboard/server/dao/sqlts/AbstractSqlTimeseriesDao.java | 2 +- .../thingsboard/server/dao/sqlts/AggregationTimeseriesDao.java | 2 +- .../server/dao/sqlts/BaseAbstractSqlTimeseriesDao.java | 2 +- .../java/org/thingsboard/server/dao/sqlts/EntityContainer.java | 2 +- .../thingsboard/server/dao/sqlts/SqlTimeseriesLatestDao.java | 2 +- dao/src/main/java/org/thingsboard/server/dao/sqlts/TsKey.java | 2 +- .../server/dao/sqlts/dictionary/TsKvDictionaryRepository.java | 2 +- .../server/dao/sqlts/hsql/JpaHsqlTimeseriesDao.java | 2 +- .../server/dao/sqlts/insert/AbstractInsertRepository.java | 2 +- .../server/dao/sqlts/insert/InsertTsRepository.java | 2 +- .../server/dao/sqlts/insert/hsql/HsqlInsertTsRepository.java | 2 +- .../dao/sqlts/insert/latest/InsertLatestTsRepository.java | 2 +- .../sqlts/insert/latest/hsql/HsqlLatestInsertTsRepository.java | 2 +- .../sqlts/insert/latest/psql/PsqlLatestInsertTsRepository.java | 2 +- .../server/dao/sqlts/insert/psql/PsqlInsertTsRepository.java | 2 +- .../dao/sqlts/insert/psql/PsqlPartitioningRepository.java | 2 +- .../sqlts/insert/timescale/TimescaleInsertTsRepository.java | 2 +- .../server/dao/sqlts/latest/SearchTsKvLatestRepository.java | 2 +- .../server/dao/sqlts/latest/TsKvLatestRepository.java | 2 +- .../server/dao/sqlts/psql/JpaPsqlTimeseriesDao.java | 2 +- .../server/dao/sqlts/timescale/AggregationRepository.java | 2 +- .../server/dao/sqlts/timescale/TimescaleTimeseriesDao.java | 2 +- .../server/dao/sqlts/timescale/TsKvTimescaleRepository.java | 2 +- .../org/thingsboard/server/dao/sqlts/ts/TsKvRepository.java | 2 +- .../server/dao/tenant/DefaultTbTenantProfileCache.java | 2 +- .../main/java/org/thingsboard/server/dao/tenant/TenantDao.java | 2 +- .../org/thingsboard/server/dao/tenant/TenantProfileDao.java | 2 +- .../server/dao/tenant/TenantProfileServiceImpl.java | 2 +- .../org/thingsboard/server/dao/tenant/TenantServiceImpl.java | 2 +- .../dao/timeseries/AbstractCassandraBaseTimeseriesDao.java | 2 +- .../server/dao/timeseries/AggregatePartitionsFunction.java | 2 +- .../server/dao/timeseries/BaseTimeseriesService.java | 2 +- .../server/dao/timeseries/CassandraBaseTimeseriesDao.java | 2 +- .../dao/timeseries/CassandraBaseTimeseriesLatestDao.java | 2 +- .../server/dao/timeseries/CassandraPartitionCacheKey.java | 2 +- .../server/dao/timeseries/CassandraTsPartitionsCache.java | 2 +- .../server/dao/timeseries/NoSqlTsPartitionDate.java | 2 +- .../org/thingsboard/server/dao/timeseries/PsqlPartition.java | 2 +- .../org/thingsboard/server/dao/timeseries/QueryCursor.java | 2 +- .../server/dao/timeseries/SimpleListenableFuture.java | 2 +- .../thingsboard/server/dao/timeseries/SqlTsPartitionDate.java | 2 +- .../org/thingsboard/server/dao/timeseries/TimeseriesDao.java | 2 +- .../thingsboard/server/dao/timeseries/TimeseriesLatestDao.java | 2 +- .../server/dao/timeseries/TsInsertExecutorType.java | 2 +- .../org/thingsboard/server/dao/timeseries/TsKvQueryCursor.java | 2 +- .../thingsboard/server/dao/usagerecord/ApiUsageStateDao.java | 2 +- .../server/dao/usagerecord/ApiUsageStateServiceImpl.java | 2 +- .../org/thingsboard/server/dao/user/UserCredentialsDao.java | 2 +- dao/src/main/java/org/thingsboard/server/dao/user/UserDao.java | 2 +- .../java/org/thingsboard/server/dao/user/UserServiceImpl.java | 2 +- .../server/dao/util/AbstractBufferedRateExecutor.java | 2 +- .../java/org/thingsboard/server/dao/util/AsyncRateLimiter.java | 2 +- .../java/org/thingsboard/server/dao/util/AsyncTaskContext.java | 2 +- .../org/thingsboard/server/dao/util/BufferedRateExecutor.java | 2 +- .../thingsboard/server/dao/util/BufferedRateExecutorStats.java | 2 +- .../thingsboard/server/dao/util/TenantRateLimitException.java | 2 +- .../server/dao/util/mapping/AbstractJsonSqlTypeDescriptor.java | 2 +- .../org/thingsboard/server/dao/util/mapping/JacksonUtil.java | 2 +- .../server/dao/util/mapping/JsonBinarySqlTypeDescriptor.java | 2 +- .../thingsboard/server/dao/util/mapping/JsonBinaryType.java | 2 +- .../server/dao/util/mapping/JsonStringSqlTypeDescriptor.java | 2 +- .../thingsboard/server/dao/util/mapping/JsonStringType.java | 2 +- .../server/dao/util/mapping/JsonTypeDescriptor.java | 2 +- .../java/org/thingsboard/server/dao/widget/WidgetTypeDao.java | 2 +- .../thingsboard/server/dao/widget/WidgetTypeServiceImpl.java | 2 +- .../org/thingsboard/server/dao/widget/WidgetsBundleDao.java | 2 +- .../server/dao/widget/WidgetsBundleServiceImpl.java | 2 +- dao/src/main/resources/cassandra/schema-ts-latest.cql | 2 +- dao/src/main/resources/cassandra/schema-ts.cql | 2 +- dao/src/main/resources/sql/schema-entities-hsql.sql | 2 +- dao/src/main/resources/sql/schema-entities-idx.sql | 2 +- dao/src/main/resources/sql/schema-entities.sql | 2 +- dao/src/main/resources/sql/schema-timescale.sql | 2 +- dao/src/main/resources/sql/schema-ts-hsql.sql | 2 +- dao/src/main/resources/sql/schema-ts-psql.sql | 2 +- dao/src/main/resources/sql/schema-types-hsql.sql | 2 +- .../java/org/thingsboard/server/dao/AbstractJpaDaoTest.java | 2 +- .../org/thingsboard/server/dao/CustomCassandraCQLUnit.java | 2 +- .../test/java/org/thingsboard/server/dao/CustomSqlUnit.java | 2 +- .../test/java/org/thingsboard/server/dao/JpaDaoTestSuite.java | 2 +- .../java/org/thingsboard/server/dao/JpaDbunitTestConfig.java | 2 +- .../org/thingsboard/server/dao/NoSqlDaoServiceTestSuite.java | 2 +- .../org/thingsboard/server/dao/SqlDaoServiceTestSuite.java | 2 +- .../server/dao/nosql/CassandraPartitionsCacheTest.java | 2 +- .../thingsboard/server/dao/service/AbstractServiceTest.java | 2 +- .../server/dao/service/BaseAdminSettingsServiceTest.java | 2 +- .../thingsboard/server/dao/service/BaseAlarmServiceTest.java | 2 +- .../server/dao/service/BaseApiUsageStateServiceTest.java | 2 +- .../thingsboard/server/dao/service/BaseAssetServiceTest.java | 2 +- .../server/dao/service/BaseCustomerServiceTest.java | 2 +- .../server/dao/service/BaseDashboardServiceTest.java | 2 +- .../server/dao/service/BaseDeviceCredentialsCacheTest.java | 2 +- .../server/dao/service/BaseDeviceCredentialsServiceTest.java | 2 +- .../server/dao/service/BaseDeviceProfileServiceTest.java | 2 +- .../thingsboard/server/dao/service/BaseDeviceServiceTest.java | 2 +- .../thingsboard/server/dao/service/BaseEntityServiceTest.java | 2 +- .../dao/service/BaseOAuth2ConfigTemplateServiceTest.java | 2 +- .../thingsboard/server/dao/service/BaseOAuth2ServiceTest.java | 2 +- .../thingsboard/server/dao/service/BaseRelationCacheTest.java | 2 +- .../server/dao/service/BaseRelationServiceTest.java | 2 +- .../server/dao/service/BaseRuleChainServiceTest.java | 2 +- .../server/dao/service/BaseTenantProfileServiceTest.java | 2 +- .../thingsboard/server/dao/service/BaseTenantServiceTest.java | 2 +- .../thingsboard/server/dao/service/BaseUserServiceTest.java | 2 +- .../server/dao/service/BaseWidgetTypeServiceTest.java | 2 +- .../server/dao/service/BaseWidgetsBundleServiceTest.java | 2 +- .../java/org/thingsboard/server/dao/service/DaoNoSqlTest.java | 2 +- .../java/org/thingsboard/server/dao/service/DaoSqlTest.java | 2 +- .../dao/service/attributes/BaseAttributesServiceTest.java | 2 +- .../dao/service/attributes/sql/AttributesServiceSqlTest.java | 2 +- .../server/dao/service/event/BaseEventServiceTest.java | 2 +- .../server/dao/service/event/sql/EventServiceSqlTest.java | 2 +- .../server/dao/service/sql/AdminSettingsServiceSqlTest.java | 2 +- .../server/dao/service/sql/AlarmServiceSqlTest.java | 2 +- .../server/dao/service/sql/ApiUsageStateServiceSqlTest.java | 2 +- .../server/dao/service/sql/AssetServiceSqlTest.java | 2 +- .../server/dao/service/sql/CustomerServiceSqlTest.java | 2 +- .../server/dao/service/sql/DashboardServiceSqlTest.java | 2 +- .../dao/service/sql/DeviceCredentialsCacheServiceSqlTest.java | 2 +- .../dao/service/sql/DeviceCredentialsServiceSqlTest.java | 2 +- .../server/dao/service/sql/DeviceProfileServiceSqlTest.java | 2 +- .../server/dao/service/sql/DeviceServiceSqlTest.java | 2 +- .../server/dao/service/sql/EntityServiceSqlTest.java | 2 +- .../dao/service/sql/OAuth2ConfigTemplateServiceSqlTest.java | 2 +- .../server/dao/service/sql/OAuth2ServiceSqlTest.java | 2 +- .../server/dao/service/sql/RelationCacheSqlTest.java | 2 +- .../server/dao/service/sql/RelationServiceSqlTest.java | 2 +- .../server/dao/service/sql/RuleChainServiceSqlTest.java | 2 +- .../server/dao/service/sql/TenantProfileServiceSqlTest.java | 2 +- .../server/dao/service/sql/TenantServiceSqlTest.java | 2 +- .../thingsboard/server/dao/service/sql/UserServiceSqlTest.java | 2 +- .../server/dao/service/sql/WidgetTypeServiceSqlTest.java | 2 +- .../server/dao/service/sql/WidgetsBundleServiceSqlTest.java | 2 +- .../dao/service/timeseries/BaseTimeseriesServiceTest.java | 2 +- .../service/timeseries/nosql/TimeseriesServiceNoSqlTest.java | 2 +- .../dao/service/timeseries/sql/TimeseriesServiceSqlTest.java | 2 +- .../org/thingsboard/server/dao/sql/alarm/JpaAlarmDaoTest.java | 2 +- .../org/thingsboard/server/dao/sql/asset/JpaAssetDaoTest.java | 2 +- .../thingsboard/server/dao/sql/audit/JpaAuditLogDaoTest.java | 2 +- .../dao/sql/component/JpaBaseComponentDescriptorDaoTest.java | 2 +- .../server/dao/sql/customer/JpaCustomerDaoTest.java | 2 +- .../server/dao/sql/dashboard/JpaDashboardInfoDaoTest.java | 2 +- .../server/dao/sql/device/JpaDeviceCredentialsDaoTest.java | 2 +- .../thingsboard/server/dao/sql/device/JpaDeviceDaoTest.java | 2 +- .../thingsboard/server/dao/sql/event/JpaBaseEventDaoTest.java | 2 +- .../thingsboard/server/dao/sql/tenant/JpaTenantDaoTest.java | 2 +- .../server/dao/sql/user/JpaUserCredentialsDaoTest.java | 2 +- .../org/thingsboard/server/dao/sql/user/JpaUserDaoTest.java | 2 +- .../server/dao/sql/widget/JpaWidgetTypeDaoTest.java | 2 +- .../server/dao/sql/widget/JpaWidgetsBundleDaoTest.java | 2 +- .../test/java/org/thingsboard/server/dao/util/DaoTestUtil.java | 2 +- .../test/java/org/thingsboard/server/dao/util/SqlDbType.java | 2 +- docker/compose-utils.sh | 2 +- docker/docker-compose.aws-sqs.yml | 2 +- docker/docker-compose.confluent.yml | 2 +- docker/docker-compose.hybrid.yml | 2 +- docker/docker-compose.kafka.yml | 2 +- docker/docker-compose.postgres.volumes.yml | 2 +- docker/docker-compose.postgres.yml | 2 +- docker/docker-compose.pubsub.yml | 2 +- docker/docker-compose.rabbitmq.yml | 2 +- docker/docker-compose.service-bus.yml | 2 +- docker/docker-compose.yml | 2 +- docker/docker-create-log-folders.sh | 2 +- docker/docker-install-tb.sh | 2 +- docker/docker-remove-services.sh | 2 +- docker/docker-start-services.sh | 2 +- docker/docker-stop-services.sh | 2 +- docker/docker-update-service.sh | 2 +- docker/docker-upgrade-tb.sh | 2 +- docker/tb-transports/coap/conf/logback.xml | 2 +- docker/tb-transports/coap/conf/tb-coap-transport.conf | 2 +- docker/tb-transports/http/conf/logback.xml | 2 +- docker/tb-transports/http/conf/tb-http-transport.conf | 2 +- docker/tb-transports/mqtt/conf/logback.xml | 2 +- docker/tb-transports/mqtt/conf/tb-mqtt-transport.conf | 2 +- k8s/basic/tb-node-cache-configmap.yml | 2 +- k8s/basic/thirdparty.yml | 2 +- k8s/common/cassandra.yml | 2 +- k8s/common/database-setup.yml | 2 +- k8s/common/postgres.yml | 2 +- k8s/common/tb-coap-transport-configmap.yml | 2 +- k8s/common/tb-http-transport-configmap.yml | 2 +- k8s/common/tb-mqtt-transport-configmap.yml | 2 +- k8s/common/tb-namespace.yml | 2 +- k8s/common/tb-node-configmap.yml | 2 +- k8s/common/tb-node-hybrid-configmap.yml | 2 +- k8s/common/tb-node-postgres-configmap.yml | 2 +- k8s/common/tb-node.yml | 2 +- k8s/common/thingsboard.yml | 2 +- k8s/high-availability/tb-node-cache-configmap.yml | 2 +- k8s/high-availability/thirdparty.yml | 2 +- k8s/k8s-delete-all.sh | 2 +- k8s/k8s-delete-resources.sh | 2 +- k8s/k8s-delete-thirdparty.sh | 2 +- k8s/k8s-deploy-resources.sh | 2 +- k8s/k8s-deploy-thirdparty.sh | 2 +- k8s/k8s-install-tb.sh | 2 +- k8s/k8s-upgrade-tb.sh | 2 +- license-header-template.txt | 2 +- msa/black-box-tests/pom.xml | 2 +- .../java/org/thingsboard/server/msa/AbstractContainerTest.java | 2 +- .../java/org/thingsboard/server/msa/ContainerTestSuite.java | 2 +- .../java/org/thingsboard/server/msa/DockerComposeExecutor.java | 2 +- .../org/thingsboard/server/msa/ThingsBoardDbInstaller.java | 2 +- .../src/test/java/org/thingsboard/server/msa/WsClient.java | 2 +- .../thingsboard/server/msa/connectivity/HttpClientTest.java | 2 +- .../thingsboard/server/msa/connectivity/MqttClientTest.java | 2 +- .../server/msa/connectivity/MqttGatewayClientTest.java | 2 +- .../org/thingsboard/server/msa/mapper/AttributesResponse.java | 2 +- .../org/thingsboard/server/msa/mapper/WsTelemetryResponse.java | 2 +- msa/js-executor/api/jsExecutor.js | 2 +- msa/js-executor/api/jsInvokeMessageProcessor.js | 2 +- msa/js-executor/api/utils.js | 2 +- msa/js-executor/config/custom-environment-variables.yml | 2 +- msa/js-executor/config/default.yml | 2 +- msa/js-executor/config/logger.js | 2 +- msa/js-executor/config/tb-js-executor.conf | 2 +- msa/js-executor/docker/Dockerfile | 2 +- msa/js-executor/docker/start-js-executor.sh | 2 +- msa/js-executor/install.js | 2 +- msa/js-executor/pom.xml | 2 +- msa/js-executor/queue/awsSqsTemplate.js | 3 +-- msa/js-executor/queue/kafkaTemplate.js | 2 +- msa/js-executor/queue/pubSubTemplate.js | 3 +-- msa/js-executor/queue/rabbitmqTemplate.js | 3 +-- msa/js-executor/queue/serviceBusTemplate.js | 3 +-- msa/js-executor/server.js | 3 +-- msa/pom.xml | 2 +- msa/tb-node/docker/Dockerfile | 2 +- msa/tb-node/docker/start-tb-node.sh | 2 +- msa/tb-node/pom.xml | 2 +- msa/tb/docker-cassandra/Dockerfile | 2 +- msa/tb/docker-cassandra/start-db.sh | 2 +- msa/tb/docker-cassandra/stop-db.sh | 2 +- msa/tb/docker-postgres/Dockerfile | 2 +- msa/tb/docker-postgres/start-db.sh | 2 +- msa/tb/docker-postgres/stop-db.sh | 2 +- msa/tb/docker-tb/Dockerfile | 2 +- msa/tb/docker-tb/start-db.sh | 2 +- msa/tb/docker-tb/stop-db.sh | 2 +- msa/tb/docker/install-tb.sh | 2 +- msa/tb/docker/logback.xml | 2 +- msa/tb/docker/start-tb.sh | 2 +- msa/tb/docker/thingsboard.conf | 2 +- msa/tb/docker/upgrade-tb.sh | 2 +- msa/tb/pom.xml | 2 +- msa/transport/coap/docker/Dockerfile | 2 +- msa/transport/coap/docker/start-tb-coap-transport.sh | 2 +- msa/transport/coap/pom.xml | 2 +- msa/transport/http/docker/Dockerfile | 2 +- msa/transport/http/docker/start-tb-http-transport.sh | 2 +- msa/transport/http/pom.xml | 2 +- msa/transport/mqtt/docker/Dockerfile | 2 +- msa/transport/mqtt/docker/start-tb-mqtt-transport.sh | 2 +- msa/transport/mqtt/pom.xml | 2 +- msa/transport/pom.xml | 2 +- msa/web-ui/config/custom-environment-variables.yml | 2 +- msa/web-ui/config/default.yml | 2 +- msa/web-ui/config/logger.js | 2 +- msa/web-ui/config/tb-web-ui.conf | 2 +- msa/web-ui/docker/Dockerfile | 2 +- msa/web-ui/docker/start-web-ui.sh | 2 +- msa/web-ui/install.js | 2 +- msa/web-ui/pom.xml | 2 +- msa/web-ui/server.js | 2 +- netty-mqtt/pom.xml | 2 +- .../main/java/org/thingsboard/mqtt/ChannelClosedException.java | 2 +- .../src/main/java/org/thingsboard/mqtt/MqttChannelHandler.java | 2 +- netty-mqtt/src/main/java/org/thingsboard/mqtt/MqttClient.java | 2 +- .../src/main/java/org/thingsboard/mqtt/MqttClientCallback.java | 2 +- .../src/main/java/org/thingsboard/mqtt/MqttClientConfig.java | 2 +- .../src/main/java/org/thingsboard/mqtt/MqttClientImpl.java | 2 +- .../src/main/java/org/thingsboard/mqtt/MqttConnectResult.java | 2 +- netty-mqtt/src/main/java/org/thingsboard/mqtt/MqttHandler.java | 2 +- .../java/org/thingsboard/mqtt/MqttIncomingQos2Publish.java | 2 +- .../src/main/java/org/thingsboard/mqtt/MqttLastWill.java | 2 +- .../src/main/java/org/thingsboard/mqtt/MqttPendingPublish.java | 2 +- .../java/org/thingsboard/mqtt/MqttPendingSubscription.java | 2 +- .../java/org/thingsboard/mqtt/MqttPendingUnsubscription.java | 2 +- .../src/main/java/org/thingsboard/mqtt/MqttPingHandler.java | 2 +- .../src/main/java/org/thingsboard/mqtt/MqttSubscription.java | 2 +- .../main/java/org/thingsboard/mqtt/RetransmissionHandler.java | 2 +- packaging/java/assembly/windows.xml | 2 +- packaging/java/build.gradle | 2 +- packaging/java/scripts/install/install.sh | 2 +- packaging/java/scripts/install/install_dev_db.sh | 2 +- packaging/java/scripts/install/logback.xml | 2 +- packaging/java/scripts/install/upgrade.sh | 2 +- packaging/java/scripts/install/upgrade_dev_db.sh | 2 +- packaging/js/assembly/windows.xml | 2 +- packaging/js/build.gradle | 2 +- pom.xml | 2 +- rest-client/pom.xml | 2 +- .../src/main/java/org/thingsboard/rest/client/RestClient.java | 2 +- .../org/thingsboard/rest/client/utils/RestJsonConverter.java | 2 +- rule-engine/pom.xml | 2 +- rule-engine/rule-engine-api/pom.xml | 2 +- .../thingsboard/rule/engine/api/EmptyNodeConfiguration.java | 2 +- .../main/java/org/thingsboard/rule/engine/api/MailService.java | 2 +- .../org/thingsboard/rule/engine/api/NodeConfiguration.java | 2 +- .../java/org/thingsboard/rule/engine/api/NodeDefinition.java | 2 +- .../main/java/org/thingsboard/rule/engine/api/RpcError.java | 2 +- .../thingsboard/rule/engine/api/RuleEngineAlarmService.java | 2 +- .../rule/engine/api/RuleEngineDeviceProfileCache.java | 2 +- .../rule/engine/api/RuleEngineDeviceRpcRequest.java | 2 +- .../rule/engine/api/RuleEngineDeviceRpcResponse.java | 2 +- .../org/thingsboard/rule/engine/api/RuleEngineRpcService.java | 2 +- .../rule/engine/api/RuleEngineTelemetryService.java | 2 +- .../main/java/org/thingsboard/rule/engine/api/RuleNode.java | 2 +- .../java/org/thingsboard/rule/engine/api/ScriptEngine.java | 2 +- .../main/java/org/thingsboard/rule/engine/api/SmsService.java | 2 +- .../main/java/org/thingsboard/rule/engine/api/TbContext.java | 2 +- .../src/main/java/org/thingsboard/rule/engine/api/TbNode.java | 2 +- .../org/thingsboard/rule/engine/api/TbNodeConfiguration.java | 2 +- .../java/org/thingsboard/rule/engine/api/TbNodeException.java | 2 +- .../main/java/org/thingsboard/rule/engine/api/TbNodeState.java | 2 +- .../java/org/thingsboard/rule/engine/api/TbRelationTypes.java | 2 +- .../org/thingsboard/rule/engine/api/msg/DeviceAttributes.java | 2 +- .../engine/api/msg/DeviceAttributesEventNotificationMsg.java | 2 +- .../engine/api/msg/DeviceCredentialsUpdateNotificationMsg.java | 2 +- .../org/thingsboard/rule/engine/api/msg/DeviceMetaData.java | 2 +- .../rule/engine/api/msg/DeviceNameOrTypeUpdateMsg.java | 2 +- .../rule/engine/api/msg/ToDeviceActorNotificationMsg.java | 2 +- .../java/org/thingsboard/rule/engine/api/sms/SmsSender.java | 2 +- .../org/thingsboard/rule/engine/api/sms/SmsSenderFactory.java | 2 +- .../rule/engine/api/sms/exception/SmsException.java | 2 +- .../rule/engine/api/sms/exception/SmsParseException.java | 2 +- .../rule/engine/api/sms/exception/SmsSendException.java | 2 +- .../java/org/thingsboard/rule/engine/api/util/TbNodeUtils.java | 2 +- rule-engine/rule-engine-components/pom.xml | 2 +- .../thingsboard/rule/engine/action/TbAbstractAlarmNode.java | 2 +- .../rule/engine/action/TbAbstractAlarmNodeConfiguration.java | 2 +- .../rule/engine/action/TbAbstractCustomerActionNode.java | 2 +- .../action/TbAbstractCustomerActionNodeConfiguration.java | 2 +- .../rule/engine/action/TbAbstractRelationActionNode.java | 2 +- .../action/TbAbstractRelationActionNodeConfiguration.java | 2 +- .../java/org/thingsboard/rule/engine/action/TbAlarmResult.java | 2 +- .../thingsboard/rule/engine/action/TbAssignToCustomerNode.java | 2 +- .../engine/action/TbAssignToCustomerNodeConfiguration.java | 2 +- .../org/thingsboard/rule/engine/action/TbClearAlarmNode.java | 2 +- .../rule/engine/action/TbClearAlarmNodeConfiguration.java | 2 +- .../rule/engine/action/TbCopyAttributesToEntityViewNode.java | 2 +- .../org/thingsboard/rule/engine/action/TbCreateAlarmNode.java | 2 +- .../rule/engine/action/TbCreateAlarmNodeConfiguration.java | 2 +- .../thingsboard/rule/engine/action/TbCreateRelationNode.java | 2 +- .../rule/engine/action/TbCreateRelationNodeConfiguration.java | 2 +- .../thingsboard/rule/engine/action/TbDeleteRelationNode.java | 2 +- .../rule/engine/action/TbDeleteRelationNodeConfiguration.java | 2 +- .../java/org/thingsboard/rule/engine/action/TbLogNode.java | 2 +- .../thingsboard/rule/engine/action/TbLogNodeConfiguration.java | 2 +- .../org/thingsboard/rule/engine/action/TbMsgCountNode.java | 2 +- .../rule/engine/action/TbMsgCountNodeConfiguration.java | 2 +- .../rule/engine/action/TbSaveToCustomCassandraTableNode.java | 2 +- .../action/TbSaveToCustomCassandraTableNodeConfiguration.java | 2 +- .../rule/engine/action/TbUnassignFromCustomerNode.java | 2 +- .../engine/action/TbUnassignFromCustomerNodeConfiguration.java | 2 +- .../java/org/thingsboard/rule/engine/aws/sns/TbSnsNode.java | 2 +- .../rule/engine/aws/sns/TbSnsNodeConfiguration.java | 2 +- .../java/org/thingsboard/rule/engine/aws/sqs/TbSqsNode.java | 2 +- .../rule/engine/aws/sqs/TbSqsNodeConfiguration.java | 2 +- .../org/thingsboard/rule/engine/data/DeviceRelationsQuery.java | 2 +- .../java/org/thingsboard/rule/engine/data/RelationsQuery.java | 2 +- .../org/thingsboard/rule/engine/debug/TbMsgGeneratorNode.java | 2 +- .../rule/engine/debug/TbMsgGeneratorNodeConfiguration.java | 2 +- .../java/org/thingsboard/rule/engine/delay/TbMsgDelayNode.java | 2 +- .../rule/engine/delay/TbMsgDelayNodeConfiguration.java | 2 +- .../thingsboard/rule/engine/filter/TbCheckAlarmStatusNode.java | 2 +- .../rule/engine/filter/TbCheckAlarmStatusNodeConfig.java | 2 +- .../org/thingsboard/rule/engine/filter/TbCheckMessageNode.java | 2 +- .../rule/engine/filter/TbCheckMessageNodeConfiguration.java | 2 +- .../thingsboard/rule/engine/filter/TbCheckRelationNode.java | 2 +- .../rule/engine/filter/TbCheckRelationNodeConfiguration.java | 2 +- .../org/thingsboard/rule/engine/filter/TbJsFilterNode.java | 2 +- .../rule/engine/filter/TbJsFilterNodeConfiguration.java | 2 +- .../org/thingsboard/rule/engine/filter/TbJsSwitchNode.java | 2 +- .../rule/engine/filter/TbJsSwitchNodeConfiguration.java | 2 +- .../thingsboard/rule/engine/filter/TbMsgTypeFilterNode.java | 2 +- .../rule/engine/filter/TbMsgTypeFilterNodeConfiguration.java | 2 +- .../thingsboard/rule/engine/filter/TbMsgTypeSwitchNode.java | 2 +- .../rule/engine/filter/TbOriginatorTypeFilterNode.java | 2 +- .../engine/filter/TbOriginatorTypeFilterNodeConfiguration.java | 2 +- .../rule/engine/filter/TbOriginatorTypeSwitchNode.java | 2 +- .../main/java/org/thingsboard/rule/engine/flow/TbAckNode.java | 2 +- .../org/thingsboard/rule/engine/flow/TbCheckpointNode.java | 2 +- .../rule/engine/flow/TbCheckpointNodeConfiguration.java | 2 +- .../org/thingsboard/rule/engine/gcp/pubsub/TbPubSubNode.java | 2 +- .../rule/engine/gcp/pubsub/TbPubSubNodeConfiguration.java | 2 +- .../thingsboard/rule/engine/geo/AbstractGeofencingNode.java | 2 +- .../main/java/org/thingsboard/rule/engine/geo/Coordinates.java | 2 +- .../org/thingsboard/rule/engine/geo/EntityGeofencingState.java | 2 +- .../src/main/java/org/thingsboard/rule/engine/geo/GeoUtil.java | 2 +- .../main/java/org/thingsboard/rule/engine/geo/Perimeter.java | 2 +- .../java/org/thingsboard/rule/engine/geo/PerimeterType.java | 2 +- .../main/java/org/thingsboard/rule/engine/geo/RangeUnit.java | 2 +- .../thingsboard/rule/engine/geo/TbGpsGeofencingActionNode.java | 2 +- .../engine/geo/TbGpsGeofencingActionNodeConfiguration.java | 2 +- .../thingsboard/rule/engine/geo/TbGpsGeofencingFilterNode.java | 2 +- .../engine/geo/TbGpsGeofencingFilterNodeConfiguration.java | 2 +- .../java/org/thingsboard/rule/engine/kafka/TbKafkaNode.java | 2 +- .../rule/engine/kafka/TbKafkaNodeConfiguration.java | 2 +- .../main/java/org/thingsboard/rule/engine/mail/EmailPojo.java | 2 +- .../org/thingsboard/rule/engine/mail/TbMsgToEmailNode.java | 2 +- .../rule/engine/mail/TbMsgToEmailNodeConfiguration.java | 2 +- .../java/org/thingsboard/rule/engine/mail/TbSendEmailNode.java | 2 +- .../rule/engine/mail/TbSendEmailNodeConfiguration.java | 2 +- .../rule/engine/metadata/TbAbstractGetAttributesNode.java | 2 +- .../rule/engine/metadata/TbAbstractGetEntityDetailsNode.java | 2 +- .../metadata/TbAbstractGetEntityDetailsNodeConfiguration.java | 2 +- .../thingsboard/rule/engine/metadata/TbEntityGetAttrNode.java | 2 +- .../thingsboard/rule/engine/metadata/TbGetAttributesNode.java | 2 +- .../rule/engine/metadata/TbGetAttributesNodeConfiguration.java | 2 +- .../rule/engine/metadata/TbGetCustomerAttributeNode.java | 2 +- .../rule/engine/metadata/TbGetCustomerDetailsNode.java | 2 +- .../engine/metadata/TbGetCustomerDetailsNodeConfiguration.java | 2 +- .../thingsboard/rule/engine/metadata/TbGetDeviceAttrNode.java | 2 +- .../rule/engine/metadata/TbGetDeviceAttrNodeConfiguration.java | 2 +- .../rule/engine/metadata/TbGetEntityAttrNodeConfiguration.java | 2 +- .../engine/metadata/TbGetOriginatorFieldsConfiguration.java | 2 +- .../rule/engine/metadata/TbGetOriginatorFieldsNode.java | 2 +- .../engine/metadata/TbGetRelatedAttrNodeConfiguration.java | 2 +- .../rule/engine/metadata/TbGetRelatedAttributeNode.java | 2 +- .../thingsboard/rule/engine/metadata/TbGetTelemetryNode.java | 2 +- .../rule/engine/metadata/TbGetTelemetryNodeConfiguration.java | 2 +- .../rule/engine/metadata/TbGetTenantAttributeNode.java | 2 +- .../rule/engine/metadata/TbGetTenantDetailsNode.java | 2 +- .../engine/metadata/TbGetTenantDetailsNodeConfiguration.java | 2 +- .../main/java/org/thingsboard/rule/engine/mqtt/TbMqttNode.java | 2 +- .../thingsboard/rule/engine/mqtt/TbMqttNodeConfiguration.java | 2 +- .../rule/engine/mqtt/azure/AzureIotHubSasCredentials.java | 2 +- .../thingsboard/rule/engine/mqtt/azure/TbAzureIotHubNode.java | 2 +- .../rule/engine/mqtt/azure/TbAzureIotHubNodeConfiguration.java | 2 +- .../rule/engine/mqtt/credentials/AnonymousCredentials.java | 2 +- .../rule/engine/mqtt/credentials/BasicCredentials.java | 2 +- .../rule/engine/mqtt/credentials/CertPemClientCredentials.java | 2 +- .../rule/engine/mqtt/credentials/MqttClientCredentials.java | 2 +- .../org/thingsboard/rule/engine/profile/AlarmEvalResult.java | 2 +- .../org/thingsboard/rule/engine/profile/AlarmRuleState.java | 2 +- .../java/org/thingsboard/rule/engine/profile/AlarmState.java | 2 +- .../rule/engine/profile/AlarmStateUpdateResult.java | 2 +- .../java/org/thingsboard/rule/engine/profile/DataSnapshot.java | 2 +- .../java/org/thingsboard/rule/engine/profile/DeviceState.java | 2 +- .../org/thingsboard/rule/engine/profile/EntityKeyValue.java | 2 +- .../java/org/thingsboard/rule/engine/profile/ProfileState.java | 2 +- .../org/thingsboard/rule/engine/profile/SnapshotUpdate.java | 2 +- .../thingsboard/rule/engine/profile/TbDeviceProfileNode.java | 2 +- .../rule/engine/profile/TbDeviceProfileNodeConfiguration.java | 2 +- .../rule/engine/profile/state/PersistedAlarmRuleState.java | 2 +- .../rule/engine/profile/state/PersistedAlarmState.java | 2 +- .../rule/engine/profile/state/PersistedDeviceState.java | 2 +- .../org/thingsboard/rule/engine/rabbitmq/TbRabbitMqNode.java | 2 +- .../rule/engine/rabbitmq/TbRabbitMqNodeConfiguration.java | 2 +- .../java/org/thingsboard/rule/engine/rest/TbHttpClient.java | 2 +- .../org/thingsboard/rule/engine/rest/TbRestApiCallNode.java | 2 +- .../rule/engine/rest/TbRestApiCallNodeConfiguration.java | 2 +- .../org/thingsboard/rule/engine/rpc/TbSendRPCReplyNode.java | 2 +- .../org/thingsboard/rule/engine/rpc/TbSendRPCRequestNode.java | 2 +- .../rule/engine/rpc/TbSendRpcReplyNodeConfiguration.java | 2 +- .../rule/engine/rpc/TbSendRpcRequestNodeConfiguration.java | 2 +- .../java/org/thingsboard/rule/engine/sms/TbSendSmsNode.java | 2 +- .../rule/engine/sms/TbSendSmsNodeConfiguration.java | 2 +- .../thingsboard/rule/engine/telemetry/TbMsgAttributesNode.java | 2 +- .../engine/telemetry/TbMsgAttributesNodeConfiguration.java | 2 +- .../thingsboard/rule/engine/telemetry/TbMsgTimeseriesNode.java | 2 +- .../engine/telemetry/TbMsgTimeseriesNodeConfiguration.java | 2 +- .../rule/engine/telemetry/TelemetryNodeCallback.java | 2 +- .../rule/engine/transaction/TbSynchronizationBeginNode.java | 2 +- .../rule/engine/transaction/TbSynchronizationEndNode.java | 2 +- .../rule/engine/transform/MultipleTbMsgsCallbackWrapper.java | 2 +- .../rule/engine/transform/TbAbstractTransformNode.java | 2 +- .../rule/engine/transform/TbChangeOriginatorNode.java | 2 +- .../engine/transform/TbChangeOriginatorNodeConfiguration.java | 2 +- .../rule/engine/transform/TbMsgCallbackWrapper.java | 2 +- .../thingsboard/rule/engine/transform/TbTransformMsgNode.java | 2 +- .../rule/engine/transform/TbTransformMsgNodeConfiguration.java | 2 +- .../rule/engine/transform/TbTransformNodeConfiguration.java | 2 +- .../rule/engine/util/EntitiesAlarmOriginatorIdAsyncLoader.java | 2 +- .../rule/engine/util/EntitiesCustomerIdAsyncLoader.java | 2 +- .../rule/engine/util/EntitiesFieldsAsyncLoader.java | 2 +- .../rule/engine/util/EntitiesRelatedDeviceIdAsyncLoader.java | 2 +- .../rule/engine/util/EntitiesRelatedEntityIdAsyncLoader.java | 2 +- .../rule/engine/util/EntitiesTenantIdAsyncLoader.java | 2 +- .../java/org/thingsboard/rule/engine/util/EntityContainer.java | 2 +- .../java/org/thingsboard/rule/engine/util/EntityDetails.java | 2 +- .../org/thingsboard/rule/engine/action/TbAlarmNodeTest.java | 2 +- .../org/thingsboard/rule/engine/filter/TbJsFilterNodeTest.java | 2 +- .../org/thingsboard/rule/engine/filter/TbJsSwitchNodeTest.java | 2 +- .../org/thingsboard/rule/engine/mail/TbMsgToEmailNodeTest.java | 2 +- .../rule/engine/metadata/TbGetCustomerAttributeNodeTest.java | 2 +- .../rule/engine/profile/TbDeviceProfileNodeTest.java | 2 +- .../rule/engine/transform/TbChangeOriginatorNodeTest.java | 2 +- .../rule/engine/transform/TbTransformMsgNodeTest.java | 2 +- tools/pom.xml | 2 +- .../main/java/org/thingsboard/client/tools/MqttSslClient.java | 2 +- .../org/thingsboard/client/tools/migrator/MigratorTool.java | 2 +- .../thingsboard/client/tools/migrator/PgCaLatestMigrator.java | 2 +- .../tools/migrator/PostgresToCassandraTelemetryMigrator.java | 2 +- .../org/thingsboard/client/tools/migrator/WriterBuilder.java | 2 +- tools/src/main/python/mqtt-send-telemetry.py | 2 +- tools/src/main/python/one-way-ssl-mqtt-client.py | 2 +- tools/src/main/python/simple-mqtt-client.py | 2 +- tools/src/main/python/two-way-ssl-mqtt-client.py | 2 +- tools/src/main/shell/client.keygen.sh | 2 +- tools/src/main/shell/server.keygen.sh | 2 +- transport/coap/pom.xml | 2 +- transport/coap/src/main/conf/logback.xml | 2 +- transport/coap/src/main/conf/tb-coap-transport.conf | 2 +- .../server/coap/ThingsboardCoapTransportApplication.java | 2 +- transport/coap/src/main/resources/logback.xml | 2 +- transport/coap/src/main/resources/tb-coap-transport.yml | 2 +- transport/http/pom.xml | 2 +- transport/http/src/main/conf/logback.xml | 2 +- transport/http/src/main/conf/tb-http-transport.conf | 2 +- .../server/http/ThingsboardHttpTransportApplication.java | 2 +- transport/http/src/main/resources/logback.xml | 2 +- transport/http/src/main/resources/tb-http-transport.yml | 2 +- transport/mqtt/pom.xml | 2 +- transport/mqtt/src/main/conf/logback.xml | 2 +- transport/mqtt/src/main/conf/tb-mqtt-transport.conf | 2 +- .../server/mqtt/ThingsboardMqttTransportApplication.java | 2 +- transport/mqtt/src/main/resources/logback.xml | 2 +- transport/mqtt/src/main/resources/tb-mqtt-transport.yml | 2 +- transport/pom.xml | 2 +- ui-ngx/.editorconfig | 2 +- ui-ngx/e2e/protractor.conf.js | 2 +- ui-ngx/e2e/src/app.e2e-spec.ts | 2 +- ui-ngx/e2e/src/app.po.ts | 2 +- ui-ngx/extra-webpack.config.js | 2 +- ui-ngx/pom.xml | 2 +- ui-ngx/proxy.conf.js | 3 +-- ui-ngx/src/app/app-routing.module.ts | 2 +- ui-ngx/src/app/app.component.html | 2 +- ui-ngx/src/app/app.component.scss | 2 +- ui-ngx/src/app/app.component.ts | 2 +- ui-ngx/src/app/app.module.ts | 2 +- ui-ngx/src/app/core/api/alarm-data-subscription.ts | 2 +- ui-ngx/src/app/core/api/alarm-data.service.ts | 2 +- ui-ngx/src/app/core/api/alias-controller.ts | 2 +- ui-ngx/src/app/core/api/data-aggregator.ts | 2 +- ui-ngx/src/app/core/api/entity-data-subscription.ts | 2 +- ui-ngx/src/app/core/api/entity-data.service.ts | 2 +- ui-ngx/src/app/core/api/public-api.ts | 2 +- ui-ngx/src/app/core/api/widget-api.models.ts | 2 +- ui-ngx/src/app/core/api/widget-subscription.ts | 2 +- ui-ngx/src/app/core/auth/auth.actions.ts | 2 +- ui-ngx/src/app/core/auth/auth.models.ts | 2 +- ui-ngx/src/app/core/auth/auth.reducer.ts | 2 +- ui-ngx/src/app/core/auth/auth.selectors.ts | 2 +- ui-ngx/src/app/core/auth/auth.service.spec.ts | 2 +- ui-ngx/src/app/core/auth/auth.service.ts | 2 +- ui-ngx/src/app/core/core.module.ts | 2 +- ui-ngx/src/app/core/core.state.ts | 2 +- ui-ngx/src/app/core/css/css.js | 2 +- ui-ngx/src/app/core/guards/auth.guard.ts | 2 +- ui-ngx/src/app/core/guards/confirm-on-exit.guard.ts | 2 +- ui-ngx/src/app/core/http/admin.service.ts | 2 +- ui-ngx/src/app/core/http/alarm.service.ts | 2 +- ui-ngx/src/app/core/http/asset.service.ts | 2 +- ui-ngx/src/app/core/http/attribute.service.ts | 2 +- ui-ngx/src/app/core/http/audit-log.service.ts | 2 +- ui-ngx/src/app/core/http/component-descriptor.service.ts | 2 +- ui-ngx/src/app/core/http/customer.service.ts | 2 +- ui-ngx/src/app/core/http/dashboard.service.ts | 2 +- ui-ngx/src/app/core/http/device-profile.service.ts | 2 +- ui-ngx/src/app/core/http/device.service.ts | 2 +- ui-ngx/src/app/core/http/entity-relation.service.ts | 2 +- ui-ngx/src/app/core/http/entity-view.service.ts | 2 +- ui-ngx/src/app/core/http/entity.service.ts | 2 +- ui-ngx/src/app/core/http/event.service.ts | 2 +- ui-ngx/src/app/core/http/http-utils.ts | 2 +- ui-ngx/src/app/core/http/oauth2.service.ts | 2 +- ui-ngx/src/app/core/http/public-api.ts | 2 +- ui-ngx/src/app/core/http/queue.service.ts | 2 +- ui-ngx/src/app/core/http/rule-chain.service.ts | 2 +- ui-ngx/src/app/core/http/tenant-profile.service.ts | 2 +- ui-ngx/src/app/core/http/tenant.service.ts | 2 +- ui-ngx/src/app/core/http/user.service.ts | 2 +- ui-ngx/src/app/core/http/widget.service.ts | 2 +- ui-ngx/src/app/core/interceptors/global-http-interceptor.ts | 2 +- ui-ngx/src/app/core/interceptors/interceptor-config.ts | 2 +- ui-ngx/src/app/core/interceptors/interceptor-http-params.ts | 2 +- ui-ngx/src/app/core/interceptors/load.actions.ts | 2 +- ui-ngx/src/app/core/interceptors/load.models.ts | 2 +- ui-ngx/src/app/core/interceptors/load.reducer.ts | 2 +- ui-ngx/src/app/core/interceptors/load.selectors.ts | 2 +- ui-ngx/src/app/core/local-storage/local-storage.service.ts | 2 +- ui-ngx/src/app/core/meta-reducers/debug.reducer.ts | 2 +- .../meta-reducers/init-state-from-local-storage.reducer.ts | 2 +- ui-ngx/src/app/core/notification/notification.actions.ts | 2 +- ui-ngx/src/app/core/notification/notification.effects.ts | 2 +- ui-ngx/src/app/core/notification/notification.models.ts | 2 +- ui-ngx/src/app/core/notification/notification.reducer.ts | 2 +- ui-ngx/src/app/core/operator/enterZone.ts | 2 +- ui-ngx/src/app/core/public-api.ts | 2 +- ui-ngx/src/app/core/schema-utils.ts | 2 +- ui-ngx/src/app/core/services/broadcast.models.ts | 2 +- ui-ngx/src/app/core/services/broadcast.service.ts | 2 +- ui-ngx/src/app/core/services/dashboard-utils.service.ts | 2 +- ui-ngx/src/app/core/services/dialog.service.ts | 2 +- .../src/app/core/services/dynamic-component-factory.service.ts | 2 +- ui-ngx/src/app/core/services/item-buffer.service.ts | 2 +- ui-ngx/src/app/core/services/menu.models.ts | 2 +- ui-ngx/src/app/core/services/menu.service.ts | 2 +- ui-ngx/src/app/core/services/notification.service.ts | 2 +- ui-ngx/src/app/core/services/public-api.ts | 2 +- ui-ngx/src/app/core/services/raf.service.ts | 2 +- ui-ngx/src/app/core/services/resources.service.ts | 2 +- .../src/app/core/services/script/node-script-test.service.ts | 2 +- ui-ngx/src/app/core/services/time.service.ts | 2 +- ui-ngx/src/app/core/services/title.service.ts | 2 +- ui-ngx/src/app/core/services/utils.service.ts | 2 +- ui-ngx/src/app/core/services/window.service.ts | 2 +- ui-ngx/src/app/core/settings/settings.actions.ts | 2 +- ui-ngx/src/app/core/settings/settings.effects.ts | 2 +- ui-ngx/src/app/core/settings/settings.models.ts | 2 +- ui-ngx/src/app/core/settings/settings.reducer.ts | 2 +- ui-ngx/src/app/core/settings/settings.selectors.ts | 2 +- ui-ngx/src/app/core/settings/settings.utils.ts | 2 +- ui-ngx/src/app/core/translate/missing-translate-handler.ts | 2 +- ui-ngx/src/app/core/translate/translate-default-compiler.ts | 2 +- ui-ngx/src/app/core/translate/translate-default-parser.ts | 2 +- ui-ngx/src/app/core/utils.ts | 2 +- ui-ngx/src/app/core/ws/telemetry-websocket.service.ts | 2 +- ui-ngx/src/app/modules/common/modules-map.ts | 2 +- ui-ngx/src/app/modules/dashboard/dashboard-pages.module.ts | 2 +- .../app/modules/dashboard/dashboard-pages.routing.module.ts | 2 +- ui-ngx/src/app/modules/dashboard/dashboard-routing.module.ts | 2 +- .../home/components/alarm/alarm-details-dialog.component.html | 2 +- .../home/components/alarm/alarm-details-dialog.component.ts | 2 +- .../app/modules/home/components/alarm/alarm-table-config.ts | 2 +- .../home/components/alarm/alarm-table-header.component.html | 2 +- .../home/components/alarm/alarm-table-header.component.scss | 2 +- .../home/components/alarm/alarm-table-header.component.ts | 2 +- .../modules/home/components/alarm/alarm-table.component.html | 2 +- .../modules/home/components/alarm/alarm-table.component.scss | 2 +- .../app/modules/home/components/alarm/alarm-table.component.ts | 2 +- .../alias/aliases-entity-autocomplete.component.html | 2 +- .../components/alias/aliases-entity-autocomplete.component.ts | 2 +- .../alias/aliases-entity-select-panel.component.html | 2 +- .../alias/aliases-entity-select-panel.component.scss | 2 +- .../components/alias/aliases-entity-select-panel.component.ts | 2 +- .../home/components/alias/aliases-entity-select.component.html | 2 +- .../home/components/alias/aliases-entity-select.component.scss | 2 +- .../home/components/alias/aliases-entity-select.component.ts | 2 +- .../home/components/alias/entity-alias-dialog.component.html | 2 +- .../home/components/alias/entity-alias-dialog.component.scss | 2 +- .../home/components/alias/entity-alias-dialog.component.ts | 2 +- .../home/components/alias/entity-alias-select.component.html | 2 +- .../components/alias/entity-alias-select.component.models.ts | 2 +- .../home/components/alias/entity-alias-select.component.scss | 2 +- .../home/components/alias/entity-alias-select.component.ts | 2 +- .../home/components/alias/entity-aliases-dialog.component.html | 2 +- .../home/components/alias/entity-aliases-dialog.component.scss | 2 +- .../home/components/alias/entity-aliases-dialog.component.ts | 2 +- .../components/attribute/add-attribute-dialog.component.html | 2 +- .../components/attribute/add-attribute-dialog.component.ts | 2 +- .../attribute/add-widget-to-dashboard-dialog.component.html | 2 +- .../attribute/add-widget-to-dashboard-dialog.component.scss | 2 +- .../attribute/add-widget-to-dashboard-dialog.component.ts | 2 +- .../home/components/attribute/attribute-table.component.html | 2 +- .../home/components/attribute/attribute-table.component.scss | 2 +- .../home/components/attribute/attribute-table.component.ts | 2 +- .../attribute/edit-attribute-value-panel.component.html | 2 +- .../attribute/edit-attribute-value-panel.component.scss | 2 +- .../attribute/edit-attribute-value-panel.component.ts | 2 +- .../audit-log/audit-log-details-dialog.component.html | 2 +- .../audit-log/audit-log-details-dialog.component.scss | 2 +- .../components/audit-log/audit-log-details-dialog.component.ts | 2 +- .../home/components/audit-log/audit-log-table-config.ts | 2 +- .../home/components/audit-log/audit-log-table.component.html | 2 +- .../home/components/audit-log/audit-log-table.component.scss | 2 +- .../home/components/audit-log/audit-log-table.component.ts | 2 +- .../modules/home/components/dashboard/dashboard.component.html | 2 +- .../modules/home/components/dashboard/dashboard.component.scss | 2 +- .../modules/home/components/dashboard/dashboard.component.ts | 2 +- .../app/modules/home/components/dashboard/layout-button.scss | 2 +- .../dashboard/select-target-layout-dialog.component.html | 2 +- .../dashboard/select-target-layout-dialog.component.ts | 2 +- .../dashboard/select-target-state-dialog.component.html | 2 +- .../dashboard/select-target-state-dialog.component.ts | 2 +- .../app/modules/home/components/details-panel.component.html | 2 +- .../app/modules/home/components/details-panel.component.scss | 2 +- .../src/app/modules/home/components/details-panel.component.ts | 2 +- .../components/device/copy-device-credentials.component.html | 2 +- .../components/device/copy-device-credentials.component.ts | 2 +- .../home/components/device/device-credentials.component.html | 2 +- .../home/components/device/device-credentials.component.ts | 2 +- .../home/components/entity/add-entity-dialog.component.html | 2 +- .../home/components/entity/add-entity-dialog.component.scss | 2 +- .../home/components/entity/add-entity-dialog.component.ts | 2 +- .../modules/home/components/entity/contact-based.component.ts | 2 +- .../home/components/entity/entities-table.component.html | 2 +- .../home/components/entity/entities-table.component.scss | 2 +- .../modules/home/components/entity/entities-table.component.ts | 2 +- .../home/components/entity/entity-details-panel.component.html | 2 +- .../home/components/entity/entity-details-panel.component.scss | 2 +- .../home/components/entity/entity-details-panel.component.ts | 2 +- .../home/components/entity/entity-filter-view.component.html | 2 +- .../home/components/entity/entity-filter-view.component.scss | 2 +- .../home/components/entity/entity-filter-view.component.ts | 2 +- .../home/components/entity/entity-filter.component.html | 2 +- .../home/components/entity/entity-filter.component.scss | 2 +- .../modules/home/components/entity/entity-filter.component.ts | 2 +- .../home/components/entity/entity-table-header.component.ts | 2 +- .../modules/home/components/entity/entity-tabs.component.ts | 2 +- .../src/app/modules/home/components/entity/entity.component.ts | 2 +- .../home/components/event/event-content-dialog.component.html | 2 +- .../home/components/event/event-content-dialog.component.scss | 2 +- .../home/components/event/event-content-dialog.component.ts | 2 +- .../app/modules/home/components/event/event-table-config.ts | 2 +- .../home/components/event/event-table-header.component.html | 2 +- .../home/components/event/event-table-header.component.scss | 2 +- .../home/components/event/event-table-header.component.ts | 2 +- .../modules/home/components/event/event-table.component.html | 2 +- .../modules/home/components/event/event-table.component.scss | 2 +- .../app/modules/home/components/event/event-table.component.ts | 2 +- .../components/filter/boolean-filter-predicate.component.html | 2 +- .../components/filter/boolean-filter-predicate.component.ts | 2 +- .../filter/complex-filter-predicate-dialog.component.html | 2 +- .../filter/complex-filter-predicate-dialog.component.ts | 2 +- .../components/filter/complex-filter-predicate.component.html | 2 +- .../components/filter/complex-filter-predicate.component.ts | 2 +- .../home/components/filter/filter-dialog.component.html | 2 +- .../home/components/filter/filter-dialog.component.scss | 2 +- .../modules/home/components/filter/filter-dialog.component.ts | 2 +- .../components/filter/filter-predicate-list.component.html | 2 +- .../components/filter/filter-predicate-list.component.scss | 2 +- .../home/components/filter/filter-predicate-list.component.ts | 2 +- .../components/filter/filter-predicate-value.component.html | 2 +- .../home/components/filter/filter-predicate-value.component.ts | 2 +- .../home/components/filter/filter-predicate.component.html | 3 +-- .../home/components/filter/filter-predicate.component.ts | 2 +- .../app/modules/home/components/filter/filter-predicate.scss | 3 +-- .../home/components/filter/filter-select.component.html | 2 +- .../home/components/filter/filter-select.component.models.ts | 2 +- .../home/components/filter/filter-select.component.scss | 2 +- .../modules/home/components/filter/filter-select.component.ts | 2 +- .../modules/home/components/filter/filter-text.component.html | 2 +- .../modules/home/components/filter/filter-text.component.scss | 2 +- .../modules/home/components/filter/filter-text.component.ts | 2 +- .../components/filter/filter-user-info-dialog.component.html | 2 +- .../components/filter/filter-user-info-dialog.component.ts | 2 +- .../home/components/filter/filter-user-info.component.html | 2 +- .../home/components/filter/filter-user-info.component.ts | 2 +- .../home/components/filter/filters-dialog.component.html | 2 +- .../home/components/filter/filters-dialog.component.scss | 2 +- .../modules/home/components/filter/filters-dialog.component.ts | 2 +- .../home/components/filter/filters-edit-panel.component.html | 2 +- .../home/components/filter/filters-edit-panel.component.scss | 2 +- .../home/components/filter/filters-edit-panel.component.ts | 2 +- .../modules/home/components/filter/filters-edit.component.html | 2 +- .../modules/home/components/filter/filters-edit.component.scss | 2 +- .../modules/home/components/filter/filters-edit.component.ts | 2 +- .../home/components/filter/key-filter-dialog.component.html | 2 +- .../home/components/filter/key-filter-dialog.component.scss | 2 +- .../home/components/filter/key-filter-dialog.component.ts | 2 +- .../home/components/filter/key-filter-list.component.html | 2 +- .../home/components/filter/key-filter-list.component.scss | 2 +- .../home/components/filter/key-filter-list.component.ts | 2 +- .../components/filter/numeric-filter-predicate.component.html | 2 +- .../components/filter/numeric-filter-predicate.component.ts | 2 +- .../components/filter/string-filter-predicate.component.html | 2 +- .../components/filter/string-filter-predicate.component.ts | 2 +- .../home/components/filter/user-filter-dialog.component.html | 2 +- .../home/components/filter/user-filter-dialog.component.ts | 2 +- .../src/app/modules/home/components/home-components.module.ts | 2 +- .../components/import-export/import-dialog-csv.component.html | 2 +- .../components/import-export/import-dialog-csv.component.scss | 2 +- .../components/import-export/import-dialog-csv.component.ts | 2 +- .../home/components/import-export/import-dialog.component.html | 2 +- .../home/components/import-export/import-dialog.component.ts | 2 +- .../home/components/import-export/import-export.models.ts | 2 +- .../home/components/import-export/import-export.service.ts | 2 +- .../import-export/table-columns-assignment.component.html | 2 +- .../import-export/table-columns-assignment.component.scss | 2 +- .../import-export/table-columns-assignment.component.ts | 2 +- .../profile/add-device-profile-dialog.component.html | 2 +- .../profile/add-device-profile-dialog.component.scss | 2 +- .../components/profile/add-device-profile-dialog.component.ts | 2 +- .../profile/alarm/alarm-rule-condition-dialog.component.html | 2 +- .../profile/alarm/alarm-rule-condition-dialog.component.scss | 2 +- .../profile/alarm/alarm-rule-condition-dialog.component.ts | 2 +- .../profile/alarm/alarm-rule-condition.component.html | 2 +- .../profile/alarm/alarm-rule-condition.component.scss | 2 +- .../components/profile/alarm/alarm-rule-condition.component.ts | 2 +- .../home/components/profile/alarm/alarm-rule.component.html | 2 +- .../home/components/profile/alarm/alarm-rule.component.scss | 2 +- .../home/components/profile/alarm/alarm-rule.component.ts | 2 +- .../profile/alarm/alarm-schedule-dialog.component.html | 2 +- .../profile/alarm/alarm-schedule-dialog.component.ts | 2 +- .../profile/alarm/alarm-schedule-info.component.html | 2 +- .../profile/alarm/alarm-schedule-info.component.scss | 2 +- .../components/profile/alarm/alarm-schedule-info.component.ts | 2 +- .../components/profile/alarm/alarm-schedule.component.html | 2 +- .../components/profile/alarm/alarm-schedule.component.scss | 2 +- .../home/components/profile/alarm/alarm-schedule.component.ts | 2 +- .../components/profile/alarm/create-alarm-rules.component.html | 2 +- .../components/profile/alarm/create-alarm-rules.component.scss | 3 +-- .../components/profile/alarm/create-alarm-rules.component.ts | 2 +- .../profile/alarm/device-profile-alarm.component.html | 2 +- .../profile/alarm/device-profile-alarm.component.scss | 3 +-- .../components/profile/alarm/device-profile-alarm.component.ts | 2 +- .../profile/alarm/device-profile-alarms.component.html | 2 +- .../profile/alarm/device-profile-alarms.component.scss | 2 +- .../profile/alarm/device-profile-alarms.component.ts | 2 +- .../profile/alarm/edit-alarm-details-dialog.component.html | 2 +- .../profile/alarm/edit-alarm-details-dialog.component.ts | 2 +- .../profile/device-profile-autocomplete.component.html | 2 +- .../profile/device-profile-autocomplete.component.ts | 2 +- .../components/profile/device-profile-dialog.component.html | 2 +- .../home/components/profile/device-profile-dialog.component.ts | 2 +- .../device-profile-provision-configuration.component.html | 2 +- .../device-profile-provision-configuration.component.ts | 2 +- .../home/components/profile/device-profile.component.html | 2 +- .../home/components/profile/device-profile.component.ts | 2 +- .../device/default-device-profile-configuration.component.html | 2 +- .../device/default-device-profile-configuration.component.ts | 2 +- ...fault-device-profile-transport-configuration.component.html | 2 +- ...default-device-profile-transport-configuration.component.ts | 2 +- .../profile/device/device-profile-configuration.component.html | 2 +- .../profile/device/device-profile-configuration.component.ts | 2 +- .../device-profile-transport-configuration.component.html | 2 +- .../device/device-profile-transport-configuration.component.ts | 2 +- ...lwm2m-device-profile-transport-configuration.component.html | 2 +- .../lwm2m-device-profile-transport-configuration.component.ts | 2 +- .../mqtt-device-profile-transport-configuration.component.html | 2 +- .../mqtt-device-profile-transport-configuration.component.scss | 2 +- .../mqtt-device-profile-transport-configuration.component.ts | 2 +- .../profile/tenant-profile-autocomplete.component.html | 2 +- .../profile/tenant-profile-autocomplete.component.ts | 2 +- .../home/components/profile/tenant-profile-data.component.html | 2 +- .../home/components/profile/tenant-profile-data.component.ts | 2 +- .../components/profile/tenant-profile-dialog.component.html | 2 +- .../home/components/profile/tenant-profile-dialog.component.ts | 2 +- .../home/components/profile/tenant-profile.component.html | 2 +- .../home/components/profile/tenant-profile.component.scss | 2 +- .../home/components/profile/tenant-profile.component.ts | 2 +- .../tenant/default-tenant-profile-configuration.component.html | 2 +- .../tenant/default-tenant-profile-configuration.component.ts | 2 +- .../profile/tenant/tenant-profile-configuration.component.html | 2 +- .../profile/tenant/tenant-profile-configuration.component.ts | 2 +- ui-ngx/src/app/modules/home/components/public-api.ts | 2 +- .../home/components/relation/relation-dialog.component.html | 2 +- .../home/components/relation/relation-dialog.component.scss | 2 +- .../home/components/relation/relation-dialog.component.ts | 2 +- .../home/components/relation/relation-filters.component.html | 2 +- .../home/components/relation/relation-filters.component.scss | 2 +- .../home/components/relation/relation-filters.component.ts | 2 +- .../home/components/relation/relation-table.component.html | 2 +- .../home/components/relation/relation-table.component.scss | 2 +- .../home/components/relation/relation-table.component.ts | 2 +- .../rule-chain/rule-chain-autocomplete.component.html | 2 +- .../components/rule-chain/rule-chain-autocomplete.component.ts | 2 +- .../modules/home/components/shared-home-components.module.ts | 2 +- .../sms/aws-sns-provider-configuration.component.html | 2 +- .../components/sms/aws-sns-provider-configuration.component.ts | 2 +- .../components/sms/sms-provider-configuration.component.html | 2 +- .../components/sms/sms-provider-configuration.component.ts | 2 +- .../sms/twilio-sms-provider-configuration.component.html | 2 +- .../sms/twilio-sms-provider-configuration.component.ts | 2 +- .../widget/action/custom-action-pretty-editor.component.html | 2 +- .../widget/action/custom-action-pretty-editor.component.scss | 2 +- .../widget/action/custom-action-pretty-editor.component.ts | 2 +- .../action/custom-action-pretty-resources-tabs.component.html | 2 +- .../action/custom-action-pretty-resources-tabs.component.scss | 2 +- .../action/custom-action-pretty-resources-tabs.component.ts | 2 +- .../home/components/widget/action/custom-action.models.ts | 2 +- .../widget/action/manage-widget-actions.component.html | 2 +- .../widget/action/manage-widget-actions.component.models.ts | 2 +- .../widget/action/manage-widget-actions.component.scss | 2 +- .../widget/action/manage-widget-actions.component.ts | 2 +- .../widget/action/widget-action-dialog.component.html | 2 +- .../widget/action/widget-action-dialog.component.scss | 2 +- .../components/widget/action/widget-action-dialog.component.ts | 2 +- .../components/widget/data-key-config-dialog.component.html | 2 +- .../components/widget/data-key-config-dialog.component.scss | 2 +- .../home/components/widget/data-key-config-dialog.component.ts | 2 +- .../home/components/widget/data-key-config.component.html | 2 +- .../home/components/widget/data-key-config.component.scss | 2 +- .../home/components/widget/data-key-config.component.ts | 2 +- .../modules/home/components/widget/data-keys.component.html | 2 +- .../home/components/widget/data-keys.component.models.ts | 2 +- .../modules/home/components/widget/data-keys.component.scss | 2 +- .../app/modules/home/components/widget/data-keys.component.ts | 2 +- .../widget/dialog/custom-dialog-container.component.ts | 2 +- .../home/components/widget/dialog/custom-dialog.component.ts | 2 +- .../home/components/widget/dialog/custom-dialog.service.ts | 2 +- .../modules/home/components/widget/dynamic-widget.component.ts | 2 +- .../home/components/widget/legend-config-panel.component.html | 2 +- .../home/components/widget/legend-config-panel.component.scss | 2 +- .../home/components/widget/legend-config-panel.component.ts | 2 +- .../home/components/widget/legend-config.component.html | 2 +- .../modules/home/components/widget/legend-config.component.ts | 2 +- .../app/modules/home/components/widget/legend.component.html | 2 +- .../app/modules/home/components/widget/legend.component.scss | 2 +- .../src/app/modules/home/components/widget/legend.component.ts | 2 +- .../components/widget/lib/alarm-filter-panel.component.html | 2 +- .../components/widget/lib/alarm-filter-panel.component.scss | 2 +- .../home/components/widget/lib/alarm-filter-panel.component.ts | 2 +- .../components/widget/lib/alarms-table-widget.component.html | 2 +- .../components/widget/lib/alarms-table-widget.component.scss | 2 +- .../components/widget/lib/alarms-table-widget.component.ts | 2 +- .../home/components/widget/lib/analogue-compass.models.ts | 2 +- .../app/modules/home/components/widget/lib/analogue-compass.ts | 2 +- .../home/components/widget/lib/analogue-gauge.models.ts | 2 +- .../home/components/widget/lib/analogue-linear-gauge.models.ts | 2 +- .../home/components/widget/lib/analogue-linear-gauge.ts | 2 +- .../home/components/widget/lib/analogue-radial-gauge.models.ts | 2 +- .../home/components/widget/lib/analogue-radial-gauge.ts | 2 +- .../modules/home/components/widget/lib/canvas-digital-gauge.ts | 2 +- .../date-range-navigator-panel.component.html | 2 +- .../date-range-navigator-panel.component.scss | 2 +- .../date-range-navigator/date-range-navigator.component.html | 2 +- .../date-range-navigator/date-range-navigator.component.scss | 2 +- .../lib/date-range-navigator/date-range-navigator.component.ts | 2 +- .../lib/date-range-navigator/date-range-navigator.models.ts | 2 +- .../modules/home/components/widget/lib/digital-gauge.models.ts | 2 +- .../app/modules/home/components/widget/lib/digital-gauge.ts | 2 +- .../components/widget/lib/display-columns-panel.component.html | 2 +- .../components/widget/lib/display-columns-panel.component.scss | 2 +- .../components/widget/lib/display-columns-panel.component.ts | 2 +- .../widget/lib/entities-hierarchy-widget.component.html | 2 +- .../widget/lib/entities-hierarchy-widget.component.scss | 2 +- .../widget/lib/entities-hierarchy-widget.component.ts | 2 +- .../components/widget/lib/entities-hierarchy-widget.models.ts | 2 +- .../components/widget/lib/entities-table-widget.component.html | 2 +- .../components/widget/lib/entities-table-widget.component.scss | 2 +- .../components/widget/lib/entities-table-widget.component.ts | 2 +- .../modules/home/components/widget/lib/flot-widget.models.ts | 2 +- .../src/app/modules/home/components/widget/lib/flot-widget.ts | 2 +- .../components/widget/lib/gateway/gateway-form.component.html | 2 +- .../components/widget/lib/gateway/gateway-form.component.scss | 2 +- .../components/widget/lib/gateway/gateway-form.component.ts | 2 +- .../home/components/widget/lib/gateway/gateway-form.models.ts | 2 +- .../home/components/widget/lib/maps/common-maps-utils.ts | 2 +- .../app/modules/home/components/widget/lib/maps/leaflet-map.ts | 2 +- .../app/modules/home/components/widget/lib/maps/map-models.ts | 2 +- .../home/components/widget/lib/maps/map-widget.interface.ts | 2 +- .../app/modules/home/components/widget/lib/maps/map-widget2.ts | 2 +- .../app/modules/home/components/widget/lib/maps/maps-utils.ts | 2 +- .../app/modules/home/components/widget/lib/maps/markers.scss | 2 +- .../src/app/modules/home/components/widget/lib/maps/markers.ts | 2 +- .../src/app/modules/home/components/widget/lib/maps/polygon.ts | 2 +- .../app/modules/home/components/widget/lib/maps/polyline.ts | 2 +- .../home/components/widget/lib/maps/providers/google-map.ts | 2 +- .../home/components/widget/lib/maps/providers/here-map.ts | 2 +- .../home/components/widget/lib/maps/providers/image-map.ts | 2 +- .../modules/home/components/widget/lib/maps/providers/index.ts | 2 +- .../components/widget/lib/maps/providers/openstreet-map.ts | 2 +- .../home/components/widget/lib/maps/providers/tencent-map.ts | 2 +- .../src/app/modules/home/components/widget/lib/maps/schemes.ts | 2 +- .../components/widget/lib/multiple-input-widget.component.html | 2 +- .../components/widget/lib/multiple-input-widget.component.scss | 3 +-- .../components/widget/lib/multiple-input-widget.component.ts | 2 +- .../components/widget/lib/photo-camera-input.component.html | 2 +- .../components/widget/lib/photo-camera-input.component.scss | 2 +- .../home/components/widget/lib/photo-camera-input.component.ts | 2 +- .../modules/home/components/widget/lib/rpc/knob.component.html | 2 +- .../modules/home/components/widget/lib/rpc/knob.component.scss | 2 +- .../modules/home/components/widget/lib/rpc/knob.component.ts | 2 +- .../components/widget/lib/rpc/led-indicator.component.html | 2 +- .../components/widget/lib/rpc/led-indicator.component.scss | 2 +- .../home/components/widget/lib/rpc/led-indicator.component.ts | 2 +- .../home/components/widget/lib/rpc/round-switch.component.html | 2 +- .../home/components/widget/lib/rpc/round-switch.component.scss | 2 +- .../home/components/widget/lib/rpc/round-switch.component.ts | 2 +- .../home/components/widget/lib/rpc/rpc-widgets.module.ts | 2 +- .../home/components/widget/lib/rpc/switch.component.html | 2 +- .../home/components/widget/lib/rpc/switch.component.scss | 3 +-- .../modules/home/components/widget/lib/rpc/switch.component.ts | 2 +- .../app/modules/home/components/widget/lib/settings.models.ts | 2 +- .../modules/home/components/widget/lib/table-widget.models.ts | 2 +- .../app/modules/home/components/widget/lib/table-widget.scss | 2 +- .../widget/lib/timeseries-table-widget.component.html | 2 +- .../widget/lib/timeseries-table-widget.component.scss | 2 +- .../components/widget/lib/timeseries-table-widget.component.ts | 2 +- .../widget/trip-animation/trip-animation.component.html | 2 +- .../widget/trip-animation/trip-animation.component.scss | 3 +-- .../widget/trip-animation/trip-animation.component.ts | 2 +- .../modules/home/components/widget/widget-component.service.ts | 2 +- .../modules/home/components/widget/widget-components.module.ts | 2 +- .../home/components/widget/widget-config.component.html | 2 +- .../home/components/widget/widget-config.component.models.ts | 2 +- .../home/components/widget/widget-config.component.scss | 2 +- .../modules/home/components/widget/widget-config.component.ts | 2 +- .../app/modules/home/components/widget/widget.component.html | 2 +- .../app/modules/home/components/widget/widget.component.scss | 2 +- .../src/app/modules/home/components/widget/widget.component.ts | 2 +- .../home/components/wizard/device-wizard-dialog.component.html | 2 +- .../home/components/wizard/device-wizard-dialog.component.scss | 3 +-- .../home/components/wizard/device-wizard-dialog.component.ts | 2 +- .../dialogs/add-entities-to-customer-dialog.component.html | 2 +- .../home/dialogs/add-entities-to-customer-dialog.component.ts | 2 +- .../home/dialogs/assign-to-customer-dialog.component.html | 2 +- .../home/dialogs/assign-to-customer-dialog.component.ts | 2 +- ui-ngx/src/app/modules/home/dialogs/home-dialogs.module.ts | 2 +- ui-ngx/src/app/modules/home/dialogs/home-dialogs.service.ts | 2 +- ui-ngx/src/app/modules/home/home-routing.module.ts | 2 +- ui-ngx/src/app/modules/home/home.component.html | 2 +- ui-ngx/src/app/modules/home/home.component.scss | 2 +- ui-ngx/src/app/modules/home/home.component.ts | 2 +- ui-ngx/src/app/modules/home/home.module.ts | 2 +- ui-ngx/src/app/modules/home/menu/menu-link.component.html | 2 +- ui-ngx/src/app/modules/home/menu/menu-link.component.scss | 2 +- ui-ngx/src/app/modules/home/menu/menu-link.component.ts | 2 +- ui-ngx/src/app/modules/home/menu/menu-toggle.component.html | 2 +- ui-ngx/src/app/modules/home/menu/menu-toggle.component.scss | 2 +- ui-ngx/src/app/modules/home/menu/menu-toggle.component.ts | 2 +- ui-ngx/src/app/modules/home/menu/side-menu.component.html | 2 +- ui-ngx/src/app/modules/home/menu/side-menu.component.scss | 3 +-- ui-ngx/src/app/modules/home/menu/side-menu.component.ts | 2 +- ui-ngx/src/app/modules/home/models/contact.models.ts | 2 +- .../src/app/modules/home/models/dashboard-component.models.ts | 2 +- .../app/modules/home/models/datasource/attribute-datasource.ts | 2 +- .../app/modules/home/models/datasource/entity-datasource.ts | 2 +- .../app/modules/home/models/datasource/relation-datasource.ts | 2 +- .../modules/home/models/entity/entities-table-config.models.ts | 2 +- .../app/modules/home/models/entity/entity-component.models.ts | 2 +- .../src/app/modules/home/models/searchable-component.models.ts | 2 +- ui-ngx/src/app/modules/home/models/services.map.ts | 2 +- ui-ngx/src/app/modules/home/models/widget-component.models.ts | 2 +- .../src/app/modules/home/pages/admin/admin-routing.module.ts | 2 +- ui-ngx/src/app/modules/home/pages/admin/admin.module.ts | 2 +- .../modules/home/pages/admin/general-settings.component.html | 2 +- .../modules/home/pages/admin/general-settings.component.scss | 2 +- .../app/modules/home/pages/admin/general-settings.component.ts | 2 +- .../app/modules/home/pages/admin/mail-server.component.html | 2 +- .../app/modules/home/pages/admin/mail-server.component.scss | 2 +- .../src/app/modules/home/pages/admin/mail-server.component.ts | 2 +- .../modules/home/pages/admin/oauth2-settings.component.html | 2 +- .../modules/home/pages/admin/oauth2-settings.component.scss | 2 +- .../app/modules/home/pages/admin/oauth2-settings.component.ts | 2 +- .../modules/home/pages/admin/security-settings.component.html | 2 +- .../modules/home/pages/admin/security-settings.component.scss | 2 +- .../modules/home/pages/admin/security-settings.component.ts | 2 +- .../home/pages/admin/send-test-sms-dialog.component.html | 2 +- .../modules/home/pages/admin/send-test-sms-dialog.component.ts | 2 +- ui-ngx/src/app/modules/home/pages/admin/settings-card.scss | 2 +- .../app/modules/home/pages/admin/sms-provider.component.html | 2 +- .../app/modules/home/pages/admin/sms-provider.component.scss | 2 +- .../src/app/modules/home/pages/admin/sms-provider.component.ts | 2 +- .../modules/home/pages/api-usage/api-usage-routing.module.ts | 2 +- .../app/modules/home/pages/api-usage/api-usage.component.html | 2 +- .../app/modules/home/pages/api-usage/api-usage.component.scss | 3 +-- .../app/modules/home/pages/api-usage/api-usage.component.ts | 2 +- .../src/app/modules/home/pages/api-usage/api-usage.module.ts | 2 +- .../src/app/modules/home/pages/asset/asset-routing.module.ts | 2 +- .../modules/home/pages/asset/asset-table-header.component.html | 2 +- .../modules/home/pages/asset/asset-table-header.component.scss | 2 +- .../modules/home/pages/asset/asset-table-header.component.ts | 2 +- .../src/app/modules/home/pages/asset/asset-tabs.component.html | 2 +- .../src/app/modules/home/pages/asset/asset-tabs.component.ts | 2 +- ui-ngx/src/app/modules/home/pages/asset/asset.component.html | 2 +- ui-ngx/src/app/modules/home/pages/asset/asset.component.scss | 2 +- ui-ngx/src/app/modules/home/pages/asset/asset.component.ts | 2 +- ui-ngx/src/app/modules/home/pages/asset/asset.module.ts | 2 +- .../modules/home/pages/asset/assets-table-config.resolver.ts | 2 +- .../modules/home/pages/audit-log/audit-log-routing.module.ts | 2 +- .../src/app/modules/home/pages/audit-log/audit-log.module.ts | 2 +- .../app/modules/home/pages/customer/customer-routing.module.ts | 2 +- .../modules/home/pages/customer/customer-tabs.component.html | 2 +- .../app/modules/home/pages/customer/customer-tabs.component.ts | 2 +- .../app/modules/home/pages/customer/customer.component.html | 2 +- .../src/app/modules/home/pages/customer/customer.component.ts | 2 +- ui-ngx/src/app/modules/home/pages/customer/customer.module.ts | 2 +- .../home/pages/customer/customers-table-config.resolver.ts | 2 +- .../home/pages/dashboard/add-widget-dialog.component.html | 2 +- .../home/pages/dashboard/add-widget-dialog.component.ts | 2 +- .../modules/home/pages/dashboard/dashboard-form.component.html | 2 +- .../modules/home/pages/dashboard/dashboard-form.component.scss | 2 +- .../modules/home/pages/dashboard/dashboard-form.component.ts | 2 +- .../modules/home/pages/dashboard/dashboard-page.component.html | 2 +- .../modules/home/pages/dashboard/dashboard-page.component.scss | 2 +- .../modules/home/pages/dashboard/dashboard-page.component.ts | 2 +- .../app/modules/home/pages/dashboard/dashboard-page.models.ts | 2 +- .../modules/home/pages/dashboard/dashboard-routing.module.ts | 2 +- .../pages/dashboard/dashboard-settings-dialog.component.html | 2 +- .../pages/dashboard/dashboard-settings-dialog.component.scss | 2 +- .../pages/dashboard/dashboard-settings-dialog.component.ts | 2 +- .../modules/home/pages/dashboard/dashboard-tabs.component.html | 2 +- .../modules/home/pages/dashboard/dashboard-tabs.component.ts | 2 +- .../home/pages/dashboard/dashboard-toolbar.component.html | 2 +- .../home/pages/dashboard/dashboard-toolbar.component.scss | 2 +- .../home/pages/dashboard/dashboard-toolbar.component.ts | 2 +- .../pages/dashboard/dashboard-widget-select.component.html | 2 +- .../pages/dashboard/dashboard-widget-select.component.scss | 2 +- .../home/pages/dashboard/dashboard-widget-select.component.ts | 2 +- .../src/app/modules/home/pages/dashboard/dashboard.module.ts | 2 +- .../home/pages/dashboard/dashboards-table-config.resolver.ts | 2 +- .../modules/home/pages/dashboard/edit-widget.component.html | 2 +- .../app/modules/home/pages/dashboard/edit-widget.component.ts | 2 +- .../pages/dashboard/layout/dashboard-layout.component.html | 2 +- .../pages/dashboard/layout/dashboard-layout.component.scss | 2 +- .../home/pages/dashboard/layout/dashboard-layout.component.ts | 2 +- .../app/modules/home/pages/dashboard/layout/layout.models.ts | 2 +- .../layout/manage-dashboard-layouts-dialog.component.html | 2 +- .../layout/manage-dashboard-layouts-dialog.component.ts | 2 +- .../dashboard/make-dashboard-public-dialog.component.html | 2 +- .../pages/dashboard/make-dashboard-public-dialog.component.ts | 2 +- .../dashboard/manage-dashboard-customers-dialog.component.html | 2 +- .../dashboard/manage-dashboard-customers-dialog.component.ts | 2 +- .../dashboard/states/dashboard-state-dialog.component.html | 2 +- .../pages/dashboard/states/dashboard-state-dialog.component.ts | 2 +- .../dashboard/states/default-state-controller.component.html | 2 +- .../dashboard/states/default-state-controller.component.scss | 2 +- .../dashboard/states/default-state-controller.component.ts | 2 +- .../dashboard/states/entity-state-controller.component.html | 2 +- .../dashboard/states/entity-state-controller.component.scss | 2 +- .../dashboard/states/entity-state-controller.component.ts | 2 +- .../states/manage-dashboard-states-dialog.component.html | 2 +- .../states/manage-dashboard-states-dialog.component.models.ts | 2 +- .../states/manage-dashboard-states-dialog.component.scss | 2 +- .../states/manage-dashboard-states-dialog.component.ts | 2 +- .../home/pages/dashboard/states/state-controller.component.ts | 2 +- .../home/pages/dashboard/states/state-controller.models.ts | 2 +- .../home/pages/dashboard/states/states-component.directive.ts | 2 +- .../home/pages/dashboard/states/states-controller.module.ts | 2 +- .../home/pages/dashboard/states/states-controller.service.ts | 2 +- .../home/pages/device-profile/device-profile-routing.module.ts | 2 +- .../pages/device-profile/device-profile-tabs.component.html | 2 +- .../home/pages/device-profile/device-profile-tabs.component.ts | 2 +- .../modules/home/pages/device-profile/device-profile.module.ts | 2 +- .../device-profile/device-profiles-table-config.resolver.ts | 2 +- .../device/data/default-device-configuration.component.html | 2 +- .../device/data/default-device-configuration.component.ts | 2 +- .../data/default-device-transport-configuration.component.html | 2 +- .../data/default-device-transport-configuration.component.ts | 2 +- .../home/pages/device/data/device-configuration.component.html | 2 +- .../home/pages/device/data/device-configuration.component.ts | 2 +- .../modules/home/pages/device/data/device-data.component.html | 2 +- .../modules/home/pages/device/data/device-data.component.ts | 2 +- .../device/data/device-transport-configuration.component.html | 2 +- .../device/data/device-transport-configuration.component.ts | 2 +- .../data/lwm2m-device-transport-configuration.component.html | 2 +- .../data/lwm2m-device-transport-configuration.component.ts | 2 +- .../data/mqtt-device-transport-configuration.component.html | 2 +- .../data/mqtt-device-transport-configuration.component.ts | 2 +- .../home/pages/device/device-credentials-dialog.component.html | 2 +- .../home/pages/device/device-credentials-dialog.component.ts | 2 +- .../src/app/modules/home/pages/device/device-routing.module.ts | 2 +- .../home/pages/device/device-table-header.component.html | 2 +- .../home/pages/device/device-table-header.component.scss | 2 +- .../modules/home/pages/device/device-table-header.component.ts | 2 +- .../app/modules/home/pages/device/device-tabs.component.html | 2 +- .../src/app/modules/home/pages/device/device-tabs.component.ts | 2 +- ui-ngx/src/app/modules/home/pages/device/device.component.html | 2 +- ui-ngx/src/app/modules/home/pages/device/device.component.scss | 2 +- ui-ngx/src/app/modules/home/pages/device/device.component.ts | 2 +- ui-ngx/src/app/modules/home/pages/device/device.module.ts | 2 +- .../modules/home/pages/device/devices-table-config.resolver.ts | 2 +- .../home/pages/entity-view/entity-view-routing.module.ts | 2 +- .../pages/entity-view/entity-view-table-header.component.html | 2 +- .../pages/entity-view/entity-view-table-header.component.scss | 2 +- .../pages/entity-view/entity-view-table-header.component.ts | 2 +- .../home/pages/entity-view/entity-view-tabs.component.html | 2 +- .../home/pages/entity-view/entity-view-tabs.component.ts | 2 +- .../modules/home/pages/entity-view/entity-view.component.html | 2 +- .../modules/home/pages/entity-view/entity-view.component.scss | 2 +- .../modules/home/pages/entity-view/entity-view.component.ts | 2 +- .../app/modules/home/pages/entity-view/entity-view.module.ts | 2 +- .../pages/entity-view/entity-views-table-config.resolver.ts | 2 +- .../modules/home/pages/home-links/home-links-routing.module.ts | 2 +- .../modules/home/pages/home-links/home-links.component.html | 2 +- .../modules/home/pages/home-links/home-links.component.scss | 2 +- .../app/modules/home/pages/home-links/home-links.component.ts | 2 +- .../src/app/modules/home/pages/home-links/home-links.module.ts | 2 +- ui-ngx/src/app/modules/home/pages/home-pages.module.ts | 2 +- .../home/pages/profile/change-password-dialog.component.html | 2 +- .../home/pages/profile/change-password-dialog.component.scss | 2 +- .../home/pages/profile/change-password-dialog.component.ts | 2 +- .../app/modules/home/pages/profile/profile-routing.module.ts | 2 +- .../src/app/modules/home/pages/profile/profile.component.html | 2 +- .../src/app/modules/home/pages/profile/profile.component.scss | 2 +- ui-ngx/src/app/modules/home/pages/profile/profile.component.ts | 2 +- ui-ngx/src/app/modules/home/pages/profile/profile.module.ts | 2 +- ui-ngx/src/app/modules/home/pages/public-api.ts | 2 +- .../home/pages/rulechain/add-rule-node-dialog.component.html | 2 +- .../pages/rulechain/add-rule-node-link-dialog.component.html | 2 +- .../pages/rulechain/add-rule-node-link-dialog.component.scss | 2 +- .../modules/home/pages/rulechain/link-labels.component.html | 2 +- .../app/modules/home/pages/rulechain/link-labels.component.ts | 2 +- .../src/app/modules/home/pages/rulechain/rule-node-colors.scss | 2 +- .../home/pages/rulechain/rule-node-config.component.html | 2 +- .../home/pages/rulechain/rule-node-config.component.scss | 2 +- .../modules/home/pages/rulechain/rule-node-config.component.ts | 2 +- .../home/pages/rulechain/rule-node-details.component.html | 2 +- .../home/pages/rulechain/rule-node-details.component.scss | 2 +- .../home/pages/rulechain/rule-node-details.component.ts | 2 +- .../modules/home/pages/rulechain/rule-node-link.component.html | 2 +- .../modules/home/pages/rulechain/rule-node-link.component.ts | 2 +- .../modules/home/pages/rulechain/rulechain-page.component.html | 2 +- .../modules/home/pages/rulechain/rulechain-page.component.scss | 2 +- .../modules/home/pages/rulechain/rulechain-page.component.ts | 2 +- .../app/modules/home/pages/rulechain/rulechain-page.models.ts | 2 +- .../modules/home/pages/rulechain/rulechain-routing.module.ts | 2 +- .../modules/home/pages/rulechain/rulechain-tabs.component.html | 2 +- .../modules/home/pages/rulechain/rulechain-tabs.component.ts | 2 +- .../app/modules/home/pages/rulechain/rulechain.component.html | 2 +- .../app/modules/home/pages/rulechain/rulechain.component.scss | 2 +- .../app/modules/home/pages/rulechain/rulechain.component.ts | 2 +- .../src/app/modules/home/pages/rulechain/rulechain.module.ts | 2 +- .../home/pages/rulechain/rulechains-table-config.resolver.ts | 2 +- .../app/modules/home/pages/rulechain/rulenode.component.html | 2 +- .../app/modules/home/pages/rulechain/rulenode.component.scss | 2 +- .../src/app/modules/home/pages/rulechain/rulenode.component.ts | 2 +- .../home/pages/tenant-profile/tenant-profile-routing.module.ts | 2 +- .../pages/tenant-profile/tenant-profile-tabs.component.html | 2 +- .../home/pages/tenant-profile/tenant-profile-tabs.component.ts | 2 +- .../modules/home/pages/tenant-profile/tenant-profile.module.ts | 2 +- .../tenant-profile/tenant-profiles-table-config.resolver.ts | 2 +- .../src/app/modules/home/pages/tenant/tenant-routing.module.ts | 2 +- .../app/modules/home/pages/tenant/tenant-tabs.component.html | 2 +- .../src/app/modules/home/pages/tenant/tenant-tabs.component.ts | 2 +- ui-ngx/src/app/modules/home/pages/tenant/tenant.component.html | 2 +- ui-ngx/src/app/modules/home/pages/tenant/tenant.component.ts | 2 +- ui-ngx/src/app/modules/home/pages/tenant/tenant.module.ts | 2 +- .../modules/home/pages/tenant/tenants-table-config.resolver.ts | 2 +- .../home/pages/user/activation-link-dialog.component.html | 2 +- .../home/pages/user/activation-link-dialog.component.ts | 2 +- .../app/modules/home/pages/user/add-user-dialog.component.html | 2 +- .../app/modules/home/pages/user/add-user-dialog.component.scss | 3 +-- .../app/modules/home/pages/user/add-user-dialog.component.ts | 2 +- ui-ngx/src/app/modules/home/pages/user/user-routing.module.ts | 2 +- .../src/app/modules/home/pages/user/user-tabs.component.html | 2 +- ui-ngx/src/app/modules/home/pages/user/user-tabs.component.ts | 2 +- ui-ngx/src/app/modules/home/pages/user/user.component.html | 2 +- ui-ngx/src/app/modules/home/pages/user/user.component.scss | 2 +- ui-ngx/src/app/modules/home/pages/user/user.component.ts | 2 +- ui-ngx/src/app/modules/home/pages/user/user.module.ts | 2 +- .../app/modules/home/pages/user/users-table-config.resolver.ts | 2 +- .../pages/widget/save-widget-type-as-dialog.component.html | 2 +- .../home/pages/widget/save-widget-type-as-dialog.component.ts | 2 +- .../home/pages/widget/select-widget-type-dialog.component.html | 2 +- .../home/pages/widget/select-widget-type-dialog.component.scss | 2 +- .../home/pages/widget/select-widget-type-dialog.component.ts | 2 +- .../app/modules/home/pages/widget/widget-editor.component.html | 2 +- .../app/modules/home/pages/widget/widget-editor.component.scss | 2 +- .../app/modules/home/pages/widget/widget-editor.component.ts | 2 +- .../src/app/modules/home/pages/widget/widget-editor.models.ts | 2 +- .../modules/home/pages/widget/widget-library-routing.module.ts | 2 +- .../modules/home/pages/widget/widget-library.component.html | 2 +- .../modules/home/pages/widget/widget-library.component.scss | 2 +- .../app/modules/home/pages/widget/widget-library.component.ts | 2 +- .../src/app/modules/home/pages/widget/widget-library.module.ts | 2 +- .../modules/home/pages/widget/widgets-bundle.component.html | 2 +- .../modules/home/pages/widget/widgets-bundle.component.scss | 2 +- .../app/modules/home/pages/widget/widgets-bundle.component.ts | 2 +- .../home/pages/widget/widgets-bundles-table-config.resolver.ts | 2 +- ui-ngx/src/app/modules/home/public-api.ts | 2 +- ui-ngx/src/app/modules/login/login-routing.module.ts | 2 +- ui-ngx/src/app/modules/login/login.module.ts | 2 +- .../modules/login/pages/login/create-password.component.html | 2 +- .../modules/login/pages/login/create-password.component.scss | 2 +- .../app/modules/login/pages/login/create-password.component.ts | 2 +- ui-ngx/src/app/modules/login/pages/login/login.component.html | 2 +- ui-ngx/src/app/modules/login/pages/login/login.component.scss | 2 +- ui-ngx/src/app/modules/login/pages/login/login.component.ts | 2 +- .../login/pages/login/reset-password-request.component.html | 2 +- .../login/pages/login/reset-password-request.component.scss | 2 +- .../login/pages/login/reset-password-request.component.ts | 2 +- .../modules/login/pages/login/reset-password.component.html | 2 +- .../modules/login/pages/login/reset-password.component.scss | 2 +- .../app/modules/login/pages/login/reset-password.component.ts | 2 +- ui-ngx/src/app/shared/animations/speed-dial-fab.animations.ts | 2 +- ui-ngx/src/app/shared/components/breadcrumb.component.html | 2 +- ui-ngx/src/app/shared/components/breadcrumb.component.scss | 2 +- ui-ngx/src/app/shared/components/breadcrumb.component.ts | 2 +- ui-ngx/src/app/shared/components/breadcrumb.ts | 2 +- ui-ngx/src/app/shared/components/cheatsheet.component.ts | 2 +- .../src/app/shared/components/circular-progress.directive.ts | 2 +- ui-ngx/src/app/shared/components/color-input.component.html | 2 +- ui-ngx/src/app/shared/components/color-input.component.scss | 2 +- ui-ngx/src/app/shared/components/color-input.component.ts | 2 +- ui-ngx/src/app/shared/components/contact.component.html | 2 +- ui-ngx/src/app/shared/components/contact.component.ts | 2 +- .../shared/components/dashboard-autocomplete.component.html | 2 +- .../app/shared/components/dashboard-autocomplete.component.ts | 2 +- .../shared/components/dashboard-select-panel.component.html | 2 +- .../shared/components/dashboard-select-panel.component.scss | 2 +- .../app/shared/components/dashboard-select-panel.component.ts | 2 +- .../src/app/shared/components/dashboard-select.component.html | 2 +- .../src/app/shared/components/dashboard-select.component.scss | 2 +- ui-ngx/src/app/shared/components/dashboard-select.component.ts | 2 +- ui-ngx/src/app/shared/components/dialog.component.ts | 2 +- .../app/shared/components/dialog/alert-dialog.component.html | 2 +- .../app/shared/components/dialog/alert-dialog.component.scss | 2 +- .../src/app/shared/components/dialog/alert-dialog.component.ts | 2 +- .../components/dialog/color-picker-dialog.component.html | 2 +- .../shared/components/dialog/color-picker-dialog.component.ts | 2 +- .../app/shared/components/dialog/confirm-dialog.component.html | 2 +- .../app/shared/components/dialog/confirm-dialog.component.scss | 2 +- .../app/shared/components/dialog/confirm-dialog.component.ts | 2 +- .../components/dialog/json-object-edit-dialog.component.html | 2 +- .../components/dialog/json-object-edit-dialog.component.ts | 2 +- .../components/dialog/material-icons-dialog.component.html | 2 +- .../components/dialog/material-icons-dialog.component.scss | 2 +- .../components/dialog/material-icons-dialog.component.ts | 2 +- .../components/dialog/node-script-test-dialog.component.html | 2 +- .../components/dialog/node-script-test-dialog.component.scss | 2 +- .../components/dialog/node-script-test-dialog.component.ts | 2 +- .../app/shared/components/dialog/todo-dialog.component.html | 2 +- .../app/shared/components/dialog/todo-dialog.component.scss | 2 +- .../src/app/shared/components/dialog/todo-dialog.component.ts | 2 +- .../components/directives/tb-json-to-string.directive.ts | 2 +- .../components/entity/entity-autocomplete.component.html | 2 +- .../components/entity/entity-autocomplete.component.scss | 2 +- .../shared/components/entity/entity-autocomplete.component.ts | 2 +- .../components/entity/entity-gateway-select.component.html | 2 +- .../components/entity/entity-gateway-select.component.ts | 2 +- .../shared/components/entity/entity-keys-list.component.html | 2 +- .../shared/components/entity/entity-keys-list.component.scss | 2 +- .../app/shared/components/entity/entity-keys-list.component.ts | 2 +- .../shared/components/entity/entity-list-select.component.html | 2 +- .../shared/components/entity/entity-list-select.component.scss | 2 +- .../shared/components/entity/entity-list-select.component.ts | 2 +- .../app/shared/components/entity/entity-list.component.html | 2 +- .../app/shared/components/entity/entity-list.component.scss | 2 +- .../src/app/shared/components/entity/entity-list.component.ts | 2 +- .../app/shared/components/entity/entity-select.component.html | 2 +- .../app/shared/components/entity/entity-select.component.scss | 2 +- .../app/shared/components/entity/entity-select.component.ts | 2 +- .../entity/entity-subtype-autocomplete.component.html | 2 +- .../components/entity/entity-subtype-autocomplete.component.ts | 2 +- .../components/entity/entity-subtype-list.component.html | 2 +- .../components/entity/entity-subtype-list.component.scss | 2 +- .../shared/components/entity/entity-subtype-list.component.ts | 2 +- .../components/entity/entity-subtype-select.component.html | 2 +- .../components/entity/entity-subtype-select.component.scss | 2 +- .../components/entity/entity-subtype-select.component.ts | 2 +- .../shared/components/entity/entity-type-list.component.html | 2 +- .../app/shared/components/entity/entity-type-list.component.ts | 2 +- .../shared/components/entity/entity-type-select.component.html | 2 +- .../shared/components/entity/entity-type-select.component.scss | 2 +- .../shared/components/entity/entity-type-select.component.ts | 2 +- ui-ngx/src/app/shared/components/fab-toolbar.component.html | 2 +- ui-ngx/src/app/shared/components/fab-toolbar.component.scss | 2 +- ui-ngx/src/app/shared/components/fab-toolbar.component.ts | 2 +- ui-ngx/src/app/shared/components/file-input.component.html | 2 +- ui-ngx/src/app/shared/components/file-input.component.scss | 2 +- ui-ngx/src/app/shared/components/file-input.component.ts | 2 +- .../app/shared/components/footer-fab-buttons.component.html | 2 +- .../app/shared/components/footer-fab-buttons.component.scss | 2 +- .../src/app/shared/components/footer-fab-buttons.component.ts | 2 +- ui-ngx/src/app/shared/components/footer.component.html | 2 +- ui-ngx/src/app/shared/components/footer.component.scss | 2 +- ui-ngx/src/app/shared/components/footer.component.ts | 2 +- ui-ngx/src/app/shared/components/fullscreen.directive.ts | 2 +- ui-ngx/src/app/shared/components/help.component.html | 2 +- ui-ngx/src/app/shared/components/help.component.ts | 2 +- ui-ngx/src/app/shared/components/hotkeys.directive.ts | 2 +- ui-ngx/src/app/shared/components/image-input.component.html | 2 +- ui-ngx/src/app/shared/components/image-input.component.scss | 2 +- ui-ngx/src/app/shared/components/image-input.component.ts | 2 +- ui-ngx/src/app/shared/components/js-func.component.html | 2 +- ui-ngx/src/app/shared/components/js-func.component.scss | 2 +- ui-ngx/src/app/shared/components/js-func.component.ts | 2 +- ui-ngx/src/app/shared/components/json-content.component.html | 2 +- ui-ngx/src/app/shared/components/json-content.component.scss | 2 +- ui-ngx/src/app/shared/components/json-content.component.ts | 2 +- .../shared/components/json-form/json-form-component.models.ts | 2 +- .../app/shared/components/json-form/json-form.component.html | 2 +- .../app/shared/components/json-form/json-form.component.scss | 2 +- .../src/app/shared/components/json-form/json-form.component.ts | 2 +- .../shared/components/json-form/react/json-form-ace-editor.tsx | 2 +- .../app/shared/components/json-form/react/json-form-array.tsx | 2 +- .../components/json-form/react/json-form-base-component.tsx | 2 +- .../shared/components/json-form/react/json-form-checkbox.tsx | 2 +- .../app/shared/components/json-form/react/json-form-color.tsx | 2 +- .../app/shared/components/json-form/react/json-form-css.tsx | 2 +- .../app/shared/components/json-form/react/json-form-date.tsx | 2 +- .../shared/components/json-form/react/json-form-fieldset.tsx | 2 +- .../app/shared/components/json-form/react/json-form-help.tsx | 2 +- .../app/shared/components/json-form/react/json-form-html.tsx | 2 +- .../app/shared/components/json-form/react/json-form-icon.tsx | 2 +- .../app/shared/components/json-form/react/json-form-image.tsx | 2 +- .../shared/components/json-form/react/json-form-javascript.tsx | 2 +- .../app/shared/components/json-form/react/json-form-json.tsx | 2 +- .../app/shared/components/json-form/react/json-form-number.tsx | 2 +- .../app/shared/components/json-form/react/json-form-radios.tsx | 2 +- .../shared/components/json-form/react/json-form-rc-select.tsx | 2 +- .../app/shared/components/json-form/react/json-form-react.tsx | 2 +- .../components/json-form/react/json-form-schema-form.tsx | 2 +- .../app/shared/components/json-form/react/json-form-select.tsx | 2 +- .../app/shared/components/json-form/react/json-form-text.tsx | 2 +- .../app/shared/components/json-form/react/json-form-utils.ts | 2 +- .../app/shared/components/json-form/react/json-form.models.ts | 2 +- .../src/app/shared/components/json-form/react/json-form.scss | 2 +- .../components/json-form/react/styles/thingsboardTheme.ts | 2 +- .../src/app/shared/components/json-object-edit.component.html | 2 +- .../src/app/shared/components/json-object-edit.component.scss | 2 +- ui-ngx/src/app/shared/components/json-object-edit.component.ts | 2 +- ui-ngx/src/app/shared/components/kv-map.component.html | 2 +- ui-ngx/src/app/shared/components/kv-map.component.scss | 2 +- ui-ngx/src/app/shared/components/kv-map.component.ts | 2 +- ui-ngx/src/app/shared/components/led-light.component.html | 2 +- ui-ngx/src/app/shared/components/led-light.component.ts | 2 +- ui-ngx/src/app/shared/components/logo.component.html | 2 +- ui-ngx/src/app/shared/components/logo.component.scss | 2 +- ui-ngx/src/app/shared/components/logo.component.ts | 2 +- .../src/app/shared/components/mat-chip-draggable.directive.ts | 2 +- .../app/shared/components/material-icon-select.component.html | 2 +- .../app/shared/components/material-icon-select.component.scss | 2 +- .../app/shared/components/material-icon-select.component.ts | 2 +- .../shared/components/message-type-autocomplete.component.html | 2 +- .../shared/components/message-type-autocomplete.component.ts | 2 +- ui-ngx/src/app/shared/components/nav-tree.component.html | 2 +- ui-ngx/src/app/shared/components/nav-tree.component.scss | 2 +- ui-ngx/src/app/shared/components/nav-tree.component.ts | 2 +- ui-ngx/src/app/shared/components/page.component.ts | 2 +- ui-ngx/src/app/shared/components/public-api.ts | 2 +- .../app/shared/components/queue/queue-type-list.component.html | 2 +- .../app/shared/components/queue/queue-type-list.component.ts | 2 +- .../relation/relation-type-autocomplete.component.html | 2 +- .../relation/relation-type-autocomplete.component.ts | 2 +- ui-ngx/src/app/shared/components/snack-bar-component.html | 2 +- ui-ngx/src/app/shared/components/snack-bar-component.scss | 2 +- .../src/app/shared/components/socialshare-panel.component.html | 2 +- .../src/app/shared/components/socialshare-panel.component.scss | 2 +- .../src/app/shared/components/socialshare-panel.component.ts | 2 +- ui-ngx/src/app/shared/components/tb-anchor.component.ts | 2 +- ui-ngx/src/app/shared/components/tb-checkbox.component.html | 2 +- ui-ngx/src/app/shared/components/tb-checkbox.component.ts | 2 +- ui-ngx/src/app/shared/components/tb-error.component.ts | 2 +- .../app/shared/components/time/datetime-period.component.html | 2 +- .../app/shared/components/time/datetime-period.component.scss | 2 +- .../app/shared/components/time/datetime-period.component.ts | 2 +- ui-ngx/src/app/shared/components/time/datetime.component.html | 2 +- ui-ngx/src/app/shared/components/time/datetime.component.scss | 2 +- ui-ngx/src/app/shared/components/time/datetime.component.ts | 2 +- .../time/history-selector/history-selector.component.html | 2 +- .../time/history-selector/history-selector.component.scss | 3 +-- .../time/history-selector/history-selector.component.ts | 2 +- .../src/app/shared/components/time/timeinterval.component.html | 2 +- .../src/app/shared/components/time/timeinterval.component.scss | 2 +- .../src/app/shared/components/time/timeinterval.component.ts | 2 +- .../app/shared/components/time/timewindow-panel.component.html | 2 +- .../app/shared/components/time/timewindow-panel.component.scss | 2 +- .../app/shared/components/time/timewindow-panel.component.ts | 2 +- .../src/app/shared/components/time/timewindow.component.html | 2 +- .../src/app/shared/components/time/timewindow.component.scss | 2 +- ui-ngx/src/app/shared/components/time/timewindow.component.ts | 2 +- .../app/shared/components/time/timezone-select.component.html | 2 +- .../app/shared/components/time/timezone-select.component.ts | 2 +- ui-ngx/src/app/shared/components/toast.directive.ts | 2 +- ui-ngx/src/app/shared/components/user-menu.component.html | 2 +- ui-ngx/src/app/shared/components/user-menu.component.scss | 2 +- ui-ngx/src/app/shared/components/user-menu.component.ts | 2 +- ui-ngx/src/app/shared/components/value-input.component.html | 2 +- ui-ngx/src/app/shared/components/value-input.component.scss | 2 +- ui-ngx/src/app/shared/components/value-input.component.ts | 2 +- .../app/shared/components/widgets-bundle-select.component.html | 2 +- .../app/shared/components/widgets-bundle-select.component.scss | 2 +- .../app/shared/components/widgets-bundle-select.component.ts | 2 +- ui-ngx/src/app/shared/decorators/enumerable.ts | 2 +- ui-ngx/src/app/shared/models/ace/ace.models.ts | 2 +- ui-ngx/src/app/shared/models/ace/completion.models.ts | 2 +- ui-ngx/src/app/shared/models/ace/service-completion.models.ts | 2 +- ui-ngx/src/app/shared/models/ace/widget-completion.models.ts | 2 +- ui-ngx/src/app/shared/models/alarm.models.ts | 2 +- ui-ngx/src/app/shared/models/alias.models.ts | 2 +- ui-ngx/src/app/shared/models/asset.models.ts | 2 +- ui-ngx/src/app/shared/models/audit-log.models.ts | 2 +- ui-ngx/src/app/shared/models/authority.enum.ts | 2 +- ui-ngx/src/app/shared/models/base-data.ts | 2 +- ui-ngx/src/app/shared/models/beautify.models.ts | 2 +- ui-ngx/src/app/shared/models/component-descriptor.models.ts | 2 +- ui-ngx/src/app/shared/models/constants.ts | 2 +- ui-ngx/src/app/shared/models/contact-based.model.ts | 2 +- ui-ngx/src/app/shared/models/customer.model.ts | 2 +- ui-ngx/src/app/shared/models/dashboard.models.ts | 2 +- ui-ngx/src/app/shared/models/device.models.ts | 2 +- ui-ngx/src/app/shared/models/entity-type.models.ts | 2 +- ui-ngx/src/app/shared/models/entity-view.models.ts | 2 +- ui-ngx/src/app/shared/models/entity.models.ts | 2 +- ui-ngx/src/app/shared/models/error.models.ts | 2 +- ui-ngx/src/app/shared/models/event.models.ts | 2 +- ui-ngx/src/app/shared/models/id/alarm-id.ts | 2 +- ui-ngx/src/app/shared/models/id/asset-id.ts | 2 +- ui-ngx/src/app/shared/models/id/audit-log-id.ts | 2 +- ui-ngx/src/app/shared/models/id/customer-id.ts | 2 +- ui-ngx/src/app/shared/models/id/dashboard-id.ts | 2 +- ui-ngx/src/app/shared/models/id/device-credentials-id.ts | 2 +- ui-ngx/src/app/shared/models/id/device-id.ts | 2 +- ui-ngx/src/app/shared/models/id/device-profile-id.ts | 2 +- ui-ngx/src/app/shared/models/id/entity-id.ts | 2 +- ui-ngx/src/app/shared/models/id/entity-view-id.ts | 2 +- ui-ngx/src/app/shared/models/id/event-id.ts | 2 +- ui-ngx/src/app/shared/models/id/has-uuid.ts | 2 +- ui-ngx/src/app/shared/models/id/public-api.ts | 2 +- ui-ngx/src/app/shared/models/id/rule-chain-id.ts | 2 +- ui-ngx/src/app/shared/models/id/rule-node-id.ts | 2 +- ui-ngx/src/app/shared/models/id/tenant-id.ts | 2 +- ui-ngx/src/app/shared/models/id/tenant-profile-id.ts | 2 +- ui-ngx/src/app/shared/models/id/user-id.ts | 2 +- ui-ngx/src/app/shared/models/id/widget-type-id.ts | 2 +- ui-ngx/src/app/shared/models/id/widgets-bundle-id.ts | 2 +- ui-ngx/src/app/shared/models/login.models.ts | 2 +- ui-ngx/src/app/shared/models/material.models.ts | 2 +- ui-ngx/src/app/shared/models/oauth2.models.ts | 2 +- ui-ngx/src/app/shared/models/page/page-data.ts | 2 +- ui-ngx/src/app/shared/models/page/page-link.ts | 2 +- ui-ngx/src/app/shared/models/page/public-api.ts | 2 +- ui-ngx/src/app/shared/models/page/sort-order.ts | 2 +- ui-ngx/src/app/shared/models/public-api.ts | 2 +- ui-ngx/src/app/shared/models/query/query.models.ts | 2 +- ui-ngx/src/app/shared/models/queue.models.ts | 2 +- ui-ngx/src/app/shared/models/relation.models.ts | 2 +- ui-ngx/src/app/shared/models/rule-chain.models.ts | 2 +- ui-ngx/src/app/shared/models/rule-node.models.ts | 2 +- ui-ngx/src/app/shared/models/settings.models.ts | 2 +- ui-ngx/src/app/shared/models/telemetry/telemetry.models.ts | 2 +- ui-ngx/src/app/shared/models/tenant.model.ts | 2 +- ui-ngx/src/app/shared/models/time/time.models.ts | 2 +- ui-ngx/src/app/shared/models/user.model.ts | 2 +- ui-ngx/src/app/shared/models/widget.models.ts | 2 +- ui-ngx/src/app/shared/models/widgets-bundle.model.ts | 2 +- ui-ngx/src/app/shared/models/window-message.model.ts | 2 +- ui-ngx/src/app/shared/pipe/enum-to-array.pipe.ts | 2 +- ui-ngx/src/app/shared/pipe/highlight.pipe.ts | 2 +- ui-ngx/src/app/shared/pipe/keyboard-shortcut.pipe.ts | 2 +- ui-ngx/src/app/shared/pipe/milliseconds-to-time-string.pipe.ts | 2 +- ui-ngx/src/app/shared/pipe/nospace.pipe.ts | 2 +- ui-ngx/src/app/shared/pipe/public-api.ts | 2 +- ui-ngx/src/app/shared/pipe/tbJson.pipe.ts | 2 +- ui-ngx/src/app/shared/pipe/truncate.pipe.ts | 2 +- ui-ngx/src/app/shared/public-api.ts | 2 +- ui-ngx/src/app/shared/shared.module.ts | 2 +- ui-ngx/src/environments/environment.prod.ts | 2 +- ui-ngx/src/environments/environment.ts | 2 +- ui-ngx/src/index.html | 2 +- ui-ngx/src/karma.conf.js | 2 +- ui-ngx/src/main.ts | 2 +- ui-ngx/src/polyfills.ts | 2 +- ui-ngx/src/scss/animations.scss | 2 +- ui-ngx/src/scss/constants.scss | 2 +- ui-ngx/src/scss/fonts.scss | 2 +- ui-ngx/src/scss/mixins.scss | 2 +- ui-ngx/src/styles.scss | 2 +- ui-ngx/src/test.ts | 2 +- ui-ngx/src/theme.scss | 2 +- ui-ngx/src/typings/add-marker.d.ts | 2 +- ui-ngx/src/typings/jquery.flot.typings.d.ts | 2 +- ui-ngx/src/typings/jquery.jstree.typings.d.ts | 2 +- ui-ngx/src/typings/jquery.typings.d.ts | 2 +- ui-ngx/src/typings/leadflet-editable.d.ts | 2 +- ui-ngx/src/typings/rawloader.typings.d.ts | 2 +- ui-ngx/src/typings/split.js.typings.d.ts | 2 +- ui-ngx/src/zone-flags.ts | 2 +- 2865 files changed, 2865 insertions(+), 2884 deletions(-) diff --git a/application/pom.xml b/application/pom.xml index 8a12fe05bb..c1a49b09e3 100644 --- a/application/pom.xml +++ b/application/pom.xml @@ -1,6 +1,6 @@ -
diff --git a/ui-ngx/src/app/modules/home/components/filter/filter-predicate.component.ts b/ui-ngx/src/app/modules/home/components/filter/filter-predicate.component.ts index 43933270c2..b9e3246f7c 100644 --- a/ui-ngx/src/app/modules/home/components/filter/filter-predicate.component.ts +++ b/ui-ngx/src/app/modules/home/components/filter/filter-predicate.component.ts @@ -1,5 +1,5 @@ /// -/// Copyright © 2016-2020 The Thingsboard Authors +/// Copyright © 2016-2021 The Thingsboard Authors /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. diff --git a/ui-ngx/src/app/modules/home/components/filter/filter-predicate.scss b/ui-ngx/src/app/modules/home/components/filter/filter-predicate.scss index 4b1b99f933..e88454b8b3 100644 --- a/ui-ngx/src/app/modules/home/components/filter/filter-predicate.scss +++ b/ui-ngx/src/app/modules/home/components/filter/filter-predicate.scss @@ -1,5 +1,5 @@ /** - * Copyright © 2016-2020 The Thingsboard Authors + * Copyright © 2016-2021 The Thingsboard Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,7 +13,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - :host { .tb-hint { padding-bottom: 0; diff --git a/ui-ngx/src/app/modules/home/components/filter/filter-select.component.html b/ui-ngx/src/app/modules/home/components/filter/filter-select.component.html index 65249441ed..6821134cd5 100644 --- a/ui-ngx/src/app/modules/home/components/filter/filter-select.component.html +++ b/ui-ngx/src/app/modules/home/components/filter/filter-select.component.html @@ -1,6 +1,6 @@