From 452ea5f0e42168b7e212cbae92fa98c48528cb3b Mon Sep 17 00:00:00 2001 From: zbeacon Date: Thu, 16 Dec 2021 16:37:32 +0200 Subject: [PATCH 01/13] Init commit for notifications to gateway --- .../server/controller/DeviceController.java | 4 + .../DefaultGatewayDeviceStateService.java | 137 ++++++++++++++++++ .../GatewayDeviceStateService.java | 10 ++ .../queue/DefaultTbClusterService.java | 3 + .../transport/DefaultTransportApiService.java | 13 ++ .../server/common/data/DataConstants.java | 1 + 6 files changed, 168 insertions(+) create mode 100644 application/src/main/java/org/thingsboard/server/service/gateway_device/DefaultGatewayDeviceStateService.java create mode 100644 application/src/main/java/org/thingsboard/server/service/gateway_device/GatewayDeviceStateService.java diff --git a/application/src/main/java/org/thingsboard/server/controller/DeviceController.java b/application/src/main/java/org/thingsboard/server/controller/DeviceController.java index 6ea6bdd880..9674e8eba9 100644 --- a/application/src/main/java/org/thingsboard/server/controller/DeviceController.java +++ b/application/src/main/java/org/thingsboard/server/controller/DeviceController.java @@ -74,6 +74,7 @@ import org.thingsboard.server.dao.exception.IncorrectParameterException; import org.thingsboard.server.dao.model.ModelConstants; import org.thingsboard.server.queue.util.TbCoreComponent; import org.thingsboard.server.service.device.DeviceBulkImportService; +import org.thingsboard.server.service.gateway_device.GatewayDeviceStateService; import org.thingsboard.server.service.importing.BulkImportRequest; import org.thingsboard.server.service.importing.BulkImportResult; import org.thingsboard.server.service.security.model.SecurityUser; @@ -128,6 +129,8 @@ public class DeviceController extends BaseController { private final DeviceBulkImportService deviceBulkImportService; + private final GatewayDeviceStateService gatewayDeviceStatusService; + @ApiOperation(value = "Get Device (getDeviceById)", notes = "Fetch the Device object based on the provided Device Id. " + "If the user has the authority of 'TENANT_ADMIN', the server checks that the device is owned by the same tenant. " + @@ -261,6 +264,7 @@ public class DeviceController extends BaseController { List relatedEdgeIds = findRelatedEdgeIds(getTenantId(), deviceId); + gatewayDeviceStatusService.delete(device); deviceService.deleteDevice(getCurrentUser().getTenantId(), deviceId); tbClusterService.onDeviceDeleted(device, null); diff --git a/application/src/main/java/org/thingsboard/server/service/gateway_device/DefaultGatewayDeviceStateService.java b/application/src/main/java/org/thingsboard/server/service/gateway_device/DefaultGatewayDeviceStateService.java new file mode 100644 index 0000000000..7d9168e358 --- /dev/null +++ b/application/src/main/java/org/thingsboard/server/service/gateway_device/DefaultGatewayDeviceStateService.java @@ -0,0 +1,137 @@ +package org.thingsboard.server.service.gateway_device; + +import com.fasterxml.jackson.databind.node.ArrayNode; +import com.fasterxml.jackson.databind.node.ObjectNode; +import com.google.common.util.concurrent.FutureCallback; +import com.google.common.util.concurrent.ListenableFuture; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.checkerframework.checker.nullness.qual.Nullable; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import org.thingsboard.common.util.DonAsynchron; +import org.thingsboard.common.util.JacksonUtil; +import org.thingsboard.server.common.data.DataConstants; +import org.thingsboard.server.common.data.Device; +import org.thingsboard.server.common.data.id.TenantId; +import org.thingsboard.server.common.data.kv.AttributeKvEntry; +import org.thingsboard.server.common.data.kv.BaseAttributeKvEntry; +import org.thingsboard.server.common.data.kv.JsonDataEntry; +import org.thingsboard.server.common.data.kv.KvEntry; +import org.thingsboard.server.common.data.relation.EntityRelation; +import org.thingsboard.server.common.data.relation.RelationTypeGroup; +import org.thingsboard.server.dao.attributes.AttributesService; +import org.thingsboard.server.dao.relation.RelationService; +import org.thingsboard.server.service.telemetry.TelemetrySubscriptionService; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.concurrent.atomic.AtomicBoolean; + +@Slf4j +@Service +@RequiredArgsConstructor +public class DefaultGatewayDeviceStateService implements GatewayDeviceStateService { + + private static final String RENAMED_GATEWAY_DEVICES = "renamedGatewayDevices"; + + @Lazy + @Autowired + private TelemetrySubscriptionService tsSubService; + private final AttributesService attributesService; + private final RelationService relationService; + + @Override + public void update(Device device, Device oldDevice) { + List relationToGatewayList = relationService.findByFromAndType(TenantId.SYS_TENANT_ID, device.getId(), DataConstants.LAST_CONNECTED_GATEWAY, RelationTypeGroup.COMMON); + if (!relationToGatewayList.isEmpty()) { + EntityRelation relationToGateway = relationToGatewayList.get(0); + ListenableFuture> renamedGatewayDevicesFuture = attributesService.find(device.getTenantId(), relationToGateway.getTo(), DataConstants.SHARED_SCOPE, Collections.singletonList("renamedGatewayDevices")); + DonAsynchron.withCallback(renamedGatewayDevicesFuture, renamedGatewayDevicesList -> { + ObjectNode renamedGatewayDevicesNode; + KvEntry renamedGatewayDevicesKvEntry; + String newDeviceName = device.getName(); + String oldDeviceName = oldDevice.getName(); + + if (renamedGatewayDevicesList.isEmpty()) { + renamedGatewayDevicesNode = JacksonUtil.newObjectNode(); + renamedGatewayDevicesNode.put(oldDeviceName, newDeviceName); + } else { + AttributeKvEntry receivedRenamedGatewayDevicesAttribute = renamedGatewayDevicesList.get(0); + renamedGatewayDevicesNode = (ObjectNode) JacksonUtil.toJsonNode(receivedRenamedGatewayDevicesAttribute.getValueAsString()); + if (renamedGatewayDevicesNode.findValue(newDeviceName) != null) { + // If new device name is the same like the first name + renamedGatewayDevicesNode.remove(newDeviceName); + } else if (renamedGatewayDevicesNode.findValue(oldDeviceName) == null) { + + AtomicBoolean renamedFirstTime = new AtomicBoolean(true); + + renamedGatewayDevicesNode.fields().forEachRemaining(entry -> { + // If device was renamed earlier + if (oldDeviceName.equals(entry.getValue().asText())) { + renamedGatewayDevicesNode.put(entry.getKey(), newDeviceName); + renamedFirstTime.set(false); + } + }); + if (renamedFirstTime.get()) { + renamedGatewayDevicesNode.put(oldDeviceName, newDeviceName); + } + } + } + + renamedGatewayDevicesKvEntry = new JsonDataEntry(RENAMED_GATEWAY_DEVICES, JacksonUtil.toString(renamedGatewayDevicesNode)); + saveGatewayDevicesAttribute(device, relationToGateway, renamedGatewayDevicesKvEntry); + }, + e -> log.error("Cannot get gateway renamed devices attribute", e)); + } + } + + @Override + public void delete(Device device) { + List relationToGatewayList = relationService.findByFromAndType(TenantId.SYS_TENANT_ID, device.getId(), DataConstants.LAST_CONNECTED_GATEWAY, RelationTypeGroup.COMMON); + if (!relationToGatewayList.isEmpty()) { + EntityRelation relationToGateway = relationToGatewayList.get(0); + String deletedDeviceName = device.getName(); + ListenableFuture> renamedGatewayDevicesFuture = attributesService.find(device.getTenantId(), relationToGateway.getTo(), DataConstants.SHARED_SCOPE, Collections.singletonList("renamedGatewayDevices")); + DonAsynchron.withCallback(renamedGatewayDevicesFuture, renamedGatewayDevicesList -> { + if (!renamedGatewayDevicesList.isEmpty()) { + ObjectNode renamedGatewayDevicesNode = JacksonUtil.fromString(renamedGatewayDevicesList.get(0).getValueAsString(), ObjectNode.class); + if (renamedGatewayDevicesNode != null && renamedGatewayDevicesNode.findValue(deletedDeviceName) != null) { + renamedGatewayDevicesNode.remove(deletedDeviceName); + KvEntry renamedGatewayDevicesKvEntry = new JsonDataEntry(RENAMED_GATEWAY_DEVICES, JacksonUtil.toString(renamedGatewayDevicesNode)); + saveGatewayDevicesAttribute(device, relationToGateway, renamedGatewayDevicesKvEntry); + } + } + }, e -> log.error("Cannot get gateway renamed devices attribute", e)); + ListenableFuture> deletedGatewayDevicesFuture = attributesService.find(device.getTenantId(), relationToGateway.getTo(), DataConstants.SHARED_SCOPE, Collections.singletonList("deletedGatewayDevices")); + DonAsynchron.withCallback(deletedGatewayDevicesFuture, deletedGatewayDevicesList -> { + ArrayNode deletedGatewayDevicesNode; + if (!deletedGatewayDevicesList.isEmpty()) { + deletedGatewayDevicesNode = (ArrayNode) JacksonUtil.toJsonNode(deletedGatewayDevicesList.get(0).getValueAsString()); + } else { + deletedGatewayDevicesNode = JacksonUtil.OBJECT_MAPPER.createArrayNode(); + } + deletedGatewayDevicesNode.add(deletedDeviceName); + KvEntry renamedGatewayDevicesKvEntry = new JsonDataEntry(RENAMED_GATEWAY_DEVICES, JacksonUtil.toString(deletedGatewayDevicesNode)); + saveGatewayDevicesAttribute(device, relationToGateway, renamedGatewayDevicesKvEntry); + }, e -> log.error("Cannot get gateway deleted devices attribute", e)); + } + } + + private void saveGatewayDevicesAttribute(Device device, EntityRelation relationToGateway, KvEntry renamedGatewayDevicesKvEntry) { + AttributeKvEntry attrKvEntry = new BaseAttributeKvEntry(System.currentTimeMillis(), renamedGatewayDevicesKvEntry); + tsSubService.saveAndNotify(device.getTenantId(), relationToGateway.getTo(), DataConstants.SHARED_SCOPE, List.of(attrKvEntry), true, new FutureCallback() { + @Override + public void onSuccess(@Nullable Void unused) { + log.trace("Attribute saved for gateway with ID [{}] and data [{}]", relationToGateway.getTo(), renamedGatewayDevicesKvEntry.getJsonValue()); + } + + @Override + public void onFailure(Throwable throwable) { + log.error("Cannot save gateway device attribute", throwable); + } + }); + } +} \ No newline at end of file diff --git a/application/src/main/java/org/thingsboard/server/service/gateway_device/GatewayDeviceStateService.java b/application/src/main/java/org/thingsboard/server/service/gateway_device/GatewayDeviceStateService.java new file mode 100644 index 0000000000..f086b25d5a --- /dev/null +++ b/application/src/main/java/org/thingsboard/server/service/gateway_device/GatewayDeviceStateService.java @@ -0,0 +1,10 @@ +package org.thingsboard.server.service.gateway_device; + +import org.thingsboard.server.common.data.Device; + +public interface GatewayDeviceStateService { + + void update(Device device, Device oldDevice); + + void delete(Device device); +} diff --git a/application/src/main/java/org/thingsboard/server/service/queue/DefaultTbClusterService.java b/application/src/main/java/org/thingsboard/server/service/queue/DefaultTbClusterService.java index 0a82994a42..be44c9ee40 100644 --- a/application/src/main/java/org/thingsboard/server/service/queue/DefaultTbClusterService.java +++ b/application/src/main/java/org/thingsboard/server/service/queue/DefaultTbClusterService.java @@ -61,6 +61,7 @@ import org.thingsboard.server.queue.common.MultipleTbQueueCallbackWrapper; import org.thingsboard.server.queue.common.TbProtoQueueMsg; import org.thingsboard.server.queue.discovery.PartitionService; import org.thingsboard.server.queue.provider.TbQueueProducerProvider; +import org.thingsboard.server.service.gateway_device.GatewayDeviceStateService; import org.thingsboard.server.service.ota.OtaPackageStateService; import org.thingsboard.server.service.profile.TbDeviceProfileCache; import org.thingsboard.server.common.msg.rpc.FromDeviceRpcResponse; @@ -91,6 +92,7 @@ public class DefaultTbClusterService implements TbClusterService { private final DataDecodingEncodingService encodingService; private final TbDeviceProfileCache deviceProfileCache; private final OtaPackageStateService otaPackageStateService; + private final GatewayDeviceStateService gatewayDeviceStateService; @Override public void pushMsgToCore(TenantId tenantId, EntityId entityId, ToCoreMsg msg, TbQueueCallback callback) { @@ -405,6 +407,7 @@ public class DefaultTbClusterService implements TbClusterService { broadcastEntityStateChangeEvent(device.getTenantId(), device.getId(), created ? ComponentLifecycleEvent.CREATED : ComponentLifecycleEvent.UPDATED); sendDeviceStateServiceEvent(device.getTenantId(), device.getId(), created, !created, false); otaPackageStateService.update(device, old); + gatewayDeviceStateService.update(device, old); if (!created && notifyEdge) { sendNotificationMsgToEdgeService(device.getTenantId(), null, device.getId(), null, null, EdgeEventActionType.UPDATED); } diff --git a/application/src/main/java/org/thingsboard/server/service/transport/DefaultTransportApiService.java b/application/src/main/java/org/thingsboard/server/service/transport/DefaultTransportApiService.java index 1cefefd5d1..cb4e01032f 100644 --- a/application/src/main/java/org/thingsboard/server/service/transport/DefaultTransportApiService.java +++ b/application/src/main/java/org/thingsboard/server/service/transport/DefaultTransportApiService.java @@ -56,6 +56,7 @@ import org.thingsboard.server.common.data.ota.OtaPackageUtil; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; import org.thingsboard.server.common.data.relation.EntityRelation; +import org.thingsboard.server.common.data.relation.RelationTypeGroup; import org.thingsboard.server.common.data.security.DeviceCredentials; import org.thingsboard.server.common.data.security.DeviceCredentialsType; import org.thingsboard.server.common.msg.EncryptionUtil; @@ -99,6 +100,7 @@ import org.thingsboard.server.cluster.TbClusterService; import org.thingsboard.server.service.resource.TbResourceService; import org.thingsboard.server.service.state.DeviceStateService; +import java.util.List; import java.util.Optional; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; @@ -304,6 +306,17 @@ public class DefaultTransportApiService implements TransportApiService { TbMsg tbMsg = TbMsg.newMsg(DataConstants.ENTITY_CREATED, deviceId, customerId, metaData, TbMsgDataType.JSON, mapper.writeValueAsString(entityNode)); tbClusterService.pushMsgToRuleEngine(tenantId, deviceId, tbMsg, null); } + + List currentLastConnectedGatewayRelationList = relationService.findByFromAndType(TenantId.SYS_TENANT_ID, device.getId(), DataConstants.LAST_CONNECTED_GATEWAY, RelationTypeGroup.COMMON); + EntityRelation lastConnectedGatewayRelation; + if (!currentLastConnectedGatewayRelationList.isEmpty()) { + lastConnectedGatewayRelation = currentLastConnectedGatewayRelationList.get(0); + lastConnectedGatewayRelation.setTo(gateway.getId()); + } else { + lastConnectedGatewayRelation = new EntityRelation(device.getId(), gateway.getId(), DataConstants.LAST_CONNECTED_GATEWAY); + } + relationService.saveRelationAsync(TenantId.SYS_TENANT_ID, lastConnectedGatewayRelation); + GetOrCreateDeviceFromGatewayResponseMsg.Builder builder = GetOrCreateDeviceFromGatewayResponseMsg.newBuilder() .setDeviceInfo(getDeviceInfoProto(device)); DeviceProfile deviceProfile = deviceProfileCache.get(device.getTenantId(), device.getDeviceProfileId()); diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/DataConstants.java b/common/data/src/main/java/org/thingsboard/server/common/data/DataConstants.java index 707a50dfb3..40f6c13794 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/DataConstants.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/DataConstants.java @@ -116,4 +116,5 @@ public class DataConstants { public static final String EDGE_MSG_SOURCE = "edge"; public static final String MSG_SOURCE_KEY = "source"; + public static final String LAST_CONNECTED_GATEWAY = "lastConnectedGateway"; } From 1ebf7f703906081ea7dd0ce41f2df92ed671a0bc Mon Sep 17 00:00:00 2001 From: zbeacon Date: Fri, 17 Dec 2021 10:57:46 +0200 Subject: [PATCH 02/13] Refactoring of removing devices --- .../DefaultGatewayDeviceStateService.java | 56 ++++++++++++------- 1 file changed, 37 insertions(+), 19 deletions(-) diff --git a/application/src/main/java/org/thingsboard/server/service/gateway_device/DefaultGatewayDeviceStateService.java b/application/src/main/java/org/thingsboard/server/service/gateway_device/DefaultGatewayDeviceStateService.java index 7d9168e358..f3aee5a109 100644 --- a/application/src/main/java/org/thingsboard/server/service/gateway_device/DefaultGatewayDeviceStateService.java +++ b/application/src/main/java/org/thingsboard/server/service/gateway_device/DefaultGatewayDeviceStateService.java @@ -1,5 +1,6 @@ package org.thingsboard.server.service.gateway_device; +import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.ObjectNode; import com.google.common.util.concurrent.FutureCallback; @@ -25,9 +26,10 @@ import org.thingsboard.server.dao.attributes.AttributesService; import org.thingsboard.server.dao.relation.RelationService; import org.thingsboard.server.service.telemetry.TelemetrySubscriptionService; -import java.util.ArrayList; import java.util.Collections; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.concurrent.atomic.AtomicBoolean; @Slf4j @@ -36,12 +38,12 @@ import java.util.concurrent.atomic.AtomicBoolean; public class DefaultGatewayDeviceStateService implements GatewayDeviceStateService { private static final String RENAMED_GATEWAY_DEVICES = "renamedGatewayDevices"; - + private static final String DELETED_GATEWAY_DEVICES = "deletedGatewayDevices"; + private final AttributesService attributesService; + private final RelationService relationService; @Lazy @Autowired private TelemetrySubscriptionService tsSubService; - private final AttributesService attributesService; - private final RelationService relationService; @Override public void update(Device device, Device oldDevice) { @@ -61,10 +63,10 @@ public class DefaultGatewayDeviceStateService implements GatewayDeviceStateServi } else { AttributeKvEntry receivedRenamedGatewayDevicesAttribute = renamedGatewayDevicesList.get(0); renamedGatewayDevicesNode = (ObjectNode) JacksonUtil.toJsonNode(receivedRenamedGatewayDevicesAttribute.getValueAsString()); - if (renamedGatewayDevicesNode.findValue(newDeviceName) != null) { - // If new device name is the same like the first name + if (renamedGatewayDevicesNode.findValue(newDeviceName) != null && oldDeviceName.equals(renamedGatewayDevicesNode.get(newDeviceName).asText())) { + // If a new device name is the same like the first name or another device was renamed like some existing device renamedGatewayDevicesNode.remove(newDeviceName); - } else if (renamedGatewayDevicesNode.findValue(oldDeviceName) == null) { + } else { AtomicBoolean renamedFirstTime = new AtomicBoolean(true); @@ -93,15 +95,31 @@ public class DefaultGatewayDeviceStateService implements GatewayDeviceStateServi List relationToGatewayList = relationService.findByFromAndType(TenantId.SYS_TENANT_ID, device.getId(), DataConstants.LAST_CONNECTED_GATEWAY, RelationTypeGroup.COMMON); if (!relationToGatewayList.isEmpty()) { EntityRelation relationToGateway = relationToGatewayList.get(0); - String deletedDeviceName = device.getName(); + final String[] deletedDeviceName = {device.getName()}; ListenableFuture> renamedGatewayDevicesFuture = attributesService.find(device.getTenantId(), relationToGateway.getTo(), DataConstants.SHARED_SCOPE, Collections.singletonList("renamedGatewayDevices")); DonAsynchron.withCallback(renamedGatewayDevicesFuture, renamedGatewayDevicesList -> { if (!renamedGatewayDevicesList.isEmpty()) { - ObjectNode renamedGatewayDevicesNode = JacksonUtil.fromString(renamedGatewayDevicesList.get(0).getValueAsString(), ObjectNode.class); - if (renamedGatewayDevicesNode != null && renamedGatewayDevicesNode.findValue(deletedDeviceName) != null) { - renamedGatewayDevicesNode.remove(deletedDeviceName); - KvEntry renamedGatewayDevicesKvEntry = new JsonDataEntry(RENAMED_GATEWAY_DEVICES, JacksonUtil.toString(renamedGatewayDevicesNode)); - saveGatewayDevicesAttribute(device, relationToGateway, renamedGatewayDevicesKvEntry); + ObjectNode renamedGatewayDevicesNode = (ObjectNode) JacksonUtil.toJsonNode(renamedGatewayDevicesList.get(0).getValueAsString()); + if (renamedGatewayDevicesNode != null) { + AtomicBoolean renamedListChanged = new AtomicBoolean(false); + if (renamedGatewayDevicesNode.findValue(deletedDeviceName[0]) != null) { + renamedGatewayDevicesNode.remove(deletedDeviceName[0]); + renamedListChanged.set(true); + } else { + Map renamedGatewayDevicesMap = JacksonUtil.OBJECT_MAPPER.convertValue(renamedGatewayDevicesNode, new TypeReference<>() {}); + renamedGatewayDevicesMap.forEach((key, value) -> { + // If device was renamed earlier + if (deletedDeviceName[0].equals(value)) { + renamedGatewayDevicesNode.remove(key); + deletedDeviceName[0] = key; + renamedListChanged.set(true); + } + }); + } + if (renamedListChanged.get()) { + KvEntry renamedGatewayDevicesKvEntry = new JsonDataEntry(RENAMED_GATEWAY_DEVICES, JacksonUtil.toString(renamedGatewayDevicesNode)); + saveGatewayDevicesAttribute(device, relationToGateway, renamedGatewayDevicesKvEntry); + } } } }, e -> log.error("Cannot get gateway renamed devices attribute", e)); @@ -113,19 +131,19 @@ public class DefaultGatewayDeviceStateService implements GatewayDeviceStateServi } else { deletedGatewayDevicesNode = JacksonUtil.OBJECT_MAPPER.createArrayNode(); } - deletedGatewayDevicesNode.add(deletedDeviceName); - KvEntry renamedGatewayDevicesKvEntry = new JsonDataEntry(RENAMED_GATEWAY_DEVICES, JacksonUtil.toString(deletedGatewayDevicesNode)); - saveGatewayDevicesAttribute(device, relationToGateway, renamedGatewayDevicesKvEntry); + deletedGatewayDevicesNode.add(deletedDeviceName[0]); + KvEntry deletedGatewayDevicesKvEntry = new JsonDataEntry(DELETED_GATEWAY_DEVICES, JacksonUtil.toString(deletedGatewayDevicesNode)); + saveGatewayDevicesAttribute(device, relationToGateway, deletedGatewayDevicesKvEntry); }, e -> log.error("Cannot get gateway deleted devices attribute", e)); } } - private void saveGatewayDevicesAttribute(Device device, EntityRelation relationToGateway, KvEntry renamedGatewayDevicesKvEntry) { - AttributeKvEntry attrKvEntry = new BaseAttributeKvEntry(System.currentTimeMillis(), renamedGatewayDevicesKvEntry); + private void saveGatewayDevicesAttribute(Device device, EntityRelation relationToGateway, KvEntry gatewayDevicesKvEntry) { + AttributeKvEntry attrKvEntry = new BaseAttributeKvEntry(System.currentTimeMillis(), gatewayDevicesKvEntry); tsSubService.saveAndNotify(device.getTenantId(), relationToGateway.getTo(), DataConstants.SHARED_SCOPE, List.of(attrKvEntry), true, new FutureCallback() { @Override public void onSuccess(@Nullable Void unused) { - log.trace("Attribute saved for gateway with ID [{}] and data [{}]", relationToGateway.getTo(), renamedGatewayDevicesKvEntry.getJsonValue()); + log.trace("Attribute saved for gateway with ID [{}] and data [{}]", relationToGateway.getTo(), gatewayDevicesKvEntry.getJsonValue()); } @Override From b76088892b1ca3d5a047c14172d0cf5320afd529 Mon Sep 17 00:00:00 2001 From: zbeacon Date: Fri, 17 Dec 2021 13:49:05 +0200 Subject: [PATCH 03/13] Added "handle device renaming parameter to the gateway" --- .../DefaultGatewayDeviceStateService.java | 151 ++++++++++++------ .../GatewayDeviceStateService.java | 17 ++ .../transport/DefaultTransportApiService.java | 4 + .../device-wizard-dialog.component.html | 6 + .../wizard/device-wizard-dialog.component.ts | 2 + .../home/pages/device/device.component.html | 6 + .../home/pages/device/device.component.ts | 2 + .../assets/locale/locale.constant-en_US.json | 1 + 8 files changed, 143 insertions(+), 46 deletions(-) diff --git a/application/src/main/java/org/thingsboard/server/service/gateway_device/DefaultGatewayDeviceStateService.java b/application/src/main/java/org/thingsboard/server/service/gateway_device/DefaultGatewayDeviceStateService.java index f3aee5a109..57a0b36508 100644 --- a/application/src/main/java/org/thingsboard/server/service/gateway_device/DefaultGatewayDeviceStateService.java +++ b/application/src/main/java/org/thingsboard/server/service/gateway_device/DefaultGatewayDeviceStateService.java @@ -1,6 +1,22 @@ +/** + * 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. + * 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.server.service.gateway_device; import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.ObjectNode; import com.google.common.util.concurrent.FutureCallback; @@ -15,6 +31,7 @@ import org.thingsboard.common.util.DonAsynchron; import org.thingsboard.common.util.JacksonUtil; import org.thingsboard.server.common.data.DataConstants; import org.thingsboard.server.common.data.Device; +import org.thingsboard.server.common.data.id.DeviceId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.kv.AttributeKvEntry; import org.thingsboard.server.common.data.kv.BaseAttributeKvEntry; @@ -23,11 +40,11 @@ import org.thingsboard.server.common.data.kv.KvEntry; import org.thingsboard.server.common.data.relation.EntityRelation; import org.thingsboard.server.common.data.relation.RelationTypeGroup; import org.thingsboard.server.dao.attributes.AttributesService; +import org.thingsboard.server.dao.device.DeviceService; import org.thingsboard.server.dao.relation.RelationService; import org.thingsboard.server.service.telemetry.TelemetrySubscriptionService; import java.util.Collections; -import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.atomic.AtomicBoolean; @@ -39,8 +56,11 @@ public class DefaultGatewayDeviceStateService implements GatewayDeviceStateServi private static final String RENAMED_GATEWAY_DEVICES = "renamedGatewayDevices"; private static final String DELETED_GATEWAY_DEVICES = "deletedGatewayDevices"; + private static final String HANDLE_DEVICE_RENAMING_PARAMETER = "handleDeviceRenaming"; + private final AttributesService attributesService; private final RelationService relationService; + private final DeviceService deviceService; @Lazy @Autowired private TelemetrySubscriptionService tsSubService; @@ -49,44 +69,50 @@ public class DefaultGatewayDeviceStateService implements GatewayDeviceStateServi public void update(Device device, Device oldDevice) { List relationToGatewayList = relationService.findByFromAndType(TenantId.SYS_TENANT_ID, device.getId(), DataConstants.LAST_CONNECTED_GATEWAY, RelationTypeGroup.COMMON); if (!relationToGatewayList.isEmpty()) { - EntityRelation relationToGateway = relationToGatewayList.get(0); - ListenableFuture> renamedGatewayDevicesFuture = attributesService.find(device.getTenantId(), relationToGateway.getTo(), DataConstants.SHARED_SCOPE, Collections.singletonList("renamedGatewayDevices")); - DonAsynchron.withCallback(renamedGatewayDevicesFuture, renamedGatewayDevicesList -> { - ObjectNode renamedGatewayDevicesNode; - KvEntry renamedGatewayDevicesKvEntry; - String newDeviceName = device.getName(); - String oldDeviceName = oldDevice.getName(); - - if (renamedGatewayDevicesList.isEmpty()) { - renamedGatewayDevicesNode = JacksonUtil.newObjectNode(); - renamedGatewayDevicesNode.put(oldDeviceName, newDeviceName); - } else { - AttributeKvEntry receivedRenamedGatewayDevicesAttribute = renamedGatewayDevicesList.get(0); - renamedGatewayDevicesNode = (ObjectNode) JacksonUtil.toJsonNode(receivedRenamedGatewayDevicesAttribute.getValueAsString()); - if (renamedGatewayDevicesNode.findValue(newDeviceName) != null && oldDeviceName.equals(renamedGatewayDevicesNode.get(newDeviceName).asText())) { - // If a new device name is the same like the first name or another device was renamed like some existing device - renamedGatewayDevicesNode.remove(newDeviceName); - } else { - - AtomicBoolean renamedFirstTime = new AtomicBoolean(true); - - renamedGatewayDevicesNode.fields().forEachRemaining(entry -> { - // If device was renamed earlier - if (oldDeviceName.equals(entry.getValue().asText())) { - renamedGatewayDevicesNode.put(entry.getKey(), newDeviceName); - renamedFirstTime.set(false); - } - }); - if (renamedFirstTime.get()) { + if (oldDevice != null) { + EntityRelation relationToGateway = relationToGatewayList.get(0); + + Device gatewayDevice = deviceService.findDeviceById(device.getTenantId(), (DeviceId) relationToGateway.getTo()); + if (isHandleDeviceRenamingEnabled(gatewayDevice.getAdditionalInfo())) { + ListenableFuture> renamedGatewayDevicesFuture = attributesService.find(device.getTenantId(), relationToGateway.getTo(), DataConstants.SHARED_SCOPE, Collections.singletonList("renamedGatewayDevices")); + DonAsynchron.withCallback(renamedGatewayDevicesFuture, renamedGatewayDevicesList -> { + ObjectNode renamedGatewayDevicesNode; + KvEntry renamedGatewayDevicesKvEntry; + String newDeviceName = device.getName(); + String oldDeviceName = oldDevice.getName(); + + if (renamedGatewayDevicesList.isEmpty()) { + renamedGatewayDevicesNode = JacksonUtil.newObjectNode(); renamedGatewayDevicesNode.put(oldDeviceName, newDeviceName); + } else { + AttributeKvEntry receivedRenamedGatewayDevicesAttribute = renamedGatewayDevicesList.get(0); + renamedGatewayDevicesNode = (ObjectNode) JacksonUtil.toJsonNode(receivedRenamedGatewayDevicesAttribute.getValueAsString()); + if (renamedGatewayDevicesNode.findValue(newDeviceName) != null && oldDeviceName.equals(renamedGatewayDevicesNode.get(newDeviceName).asText())) { + // If a new device name is the same like the first name or another device was renamed like some existing device + renamedGatewayDevicesNode.remove(newDeviceName); + } else { + + AtomicBoolean renamedFirstTime = new AtomicBoolean(true); + + renamedGatewayDevicesNode.fields().forEachRemaining(entry -> { + // If device was renamed earlier + if (oldDeviceName.equals(entry.getValue().asText())) { + renamedGatewayDevicesNode.put(entry.getKey(), newDeviceName); + renamedFirstTime.set(false); + } + }); + if (renamedFirstTime.get()) { + renamedGatewayDevicesNode.put(oldDeviceName, newDeviceName); + } + } } - } - } - renamedGatewayDevicesKvEntry = new JsonDataEntry(RENAMED_GATEWAY_DEVICES, JacksonUtil.toString(renamedGatewayDevicesNode)); - saveGatewayDevicesAttribute(device, relationToGateway, renamedGatewayDevicesKvEntry); - }, - e -> log.error("Cannot get gateway renamed devices attribute", e)); + renamedGatewayDevicesKvEntry = new JsonDataEntry(RENAMED_GATEWAY_DEVICES, JacksonUtil.toString(renamedGatewayDevicesNode)); + saveGatewayDevicesAttribute(device, relationToGateway, renamedGatewayDevicesKvEntry); + }, + e -> log.error("Cannot get gateway renamed devices attribute", e)); + } + } } } @@ -105,17 +131,17 @@ public class DefaultGatewayDeviceStateService implements GatewayDeviceStateServi if (renamedGatewayDevicesNode.findValue(deletedDeviceName[0]) != null) { renamedGatewayDevicesNode.remove(deletedDeviceName[0]); renamedListChanged.set(true); - } else { - Map renamedGatewayDevicesMap = JacksonUtil.OBJECT_MAPPER.convertValue(renamedGatewayDevicesNode, new TypeReference<>() {}); - renamedGatewayDevicesMap.forEach((key, value) -> { - // If device was renamed earlier - if (deletedDeviceName[0].equals(value)) { - renamedGatewayDevicesNode.remove(key); - deletedDeviceName[0] = key; - renamedListChanged.set(true); - } - }); } + Map renamedGatewayDevicesMap = JacksonUtil.OBJECT_MAPPER.convertValue(renamedGatewayDevicesNode, new TypeReference<>() { + }); + renamedGatewayDevicesMap.forEach((key, value) -> { + // If device was renamed earlier + if (deletedDeviceName[0].equals(value)) { + renamedGatewayDevicesNode.remove(key); + deletedDeviceName[0] = key; + renamedListChanged.set(true); + } + }); if (renamedListChanged.get()) { KvEntry renamedGatewayDevicesKvEntry = new JsonDataEntry(RENAMED_GATEWAY_DEVICES, JacksonUtil.toString(renamedGatewayDevicesNode)); saveGatewayDevicesAttribute(device, relationToGateway, renamedGatewayDevicesKvEntry); @@ -138,6 +164,32 @@ public class DefaultGatewayDeviceStateService implements GatewayDeviceStateServi } } + @Override + public void checkAndUpdateDeletedGatewayDevicesAttribute(Device device) { + List relationToGatewayList = relationService.findByFromAndType(TenantId.SYS_TENANT_ID, device.getId(), DataConstants.LAST_CONNECTED_GATEWAY, RelationTypeGroup.COMMON); + if (!relationToGatewayList.isEmpty()) { + EntityRelation relationToGateway = relationToGatewayList.get(0); + ListenableFuture> deletedGatewayDevicesFuture = attributesService.find(device.getTenantId(), relationToGateway.getTo(), DataConstants.SHARED_SCOPE, Collections.singletonList("deletedGatewayDevices")); + DonAsynchron.withCallback(deletedGatewayDevicesFuture, deletedGatewayDevicesList -> { + ArrayNode deletedGatewayDevicesNode; + if (!deletedGatewayDevicesList.isEmpty()) { + int deletedDeviceIndex = -1; + deletedGatewayDevicesNode = (ArrayNode) JacksonUtil.toJsonNode(deletedGatewayDevicesList.get(0).getValueAsString()); + for (int i = 0; i < deletedGatewayDevicesNode.size(); i++) { + if (deletedGatewayDevicesNode.get(i).asText().equals(device.getName())) { + deletedDeviceIndex = i; + } + } + if (deletedDeviceIndex != -1) { + deletedGatewayDevicesNode.remove(deletedDeviceIndex); + KvEntry deletedGatewayDevicesKvEntry = new JsonDataEntry(DELETED_GATEWAY_DEVICES, JacksonUtil.toString(deletedGatewayDevicesNode)); + saveGatewayDevicesAttribute(device, relationToGateway, deletedGatewayDevicesKvEntry); + } + } + }, e -> log.error("Cannot get gateway deleted devices attribute", e)); + } + } + private void saveGatewayDevicesAttribute(Device device, EntityRelation relationToGateway, KvEntry gatewayDevicesKvEntry) { AttributeKvEntry attrKvEntry = new BaseAttributeKvEntry(System.currentTimeMillis(), gatewayDevicesKvEntry); tsSubService.saveAndNotify(device.getTenantId(), relationToGateway.getTo(), DataConstants.SHARED_SCOPE, List.of(attrKvEntry), true, new FutureCallback() { @@ -152,4 +204,11 @@ public class DefaultGatewayDeviceStateService implements GatewayDeviceStateServi } }); } + + private boolean isHandleDeviceRenamingEnabled(JsonNode additionalInfo) { + if (additionalInfo.get(HANDLE_DEVICE_RENAMING_PARAMETER) != null) { + return additionalInfo.get(HANDLE_DEVICE_RENAMING_PARAMETER).asBoolean(); + } + return false; + } } \ No newline at end of file diff --git a/application/src/main/java/org/thingsboard/server/service/gateway_device/GatewayDeviceStateService.java b/application/src/main/java/org/thingsboard/server/service/gateway_device/GatewayDeviceStateService.java index f086b25d5a..d4079487a5 100644 --- a/application/src/main/java/org/thingsboard/server/service/gateway_device/GatewayDeviceStateService.java +++ b/application/src/main/java/org/thingsboard/server/service/gateway_device/GatewayDeviceStateService.java @@ -1,3 +1,18 @@ +/** + * 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. + * 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.server.service.gateway_device; import org.thingsboard.server.common.data.Device; @@ -7,4 +22,6 @@ public interface GatewayDeviceStateService { void update(Device device, Device oldDevice); void delete(Device device); + + void checkAndUpdateDeletedGatewayDevicesAttribute(Device device); } diff --git a/application/src/main/java/org/thingsboard/server/service/transport/DefaultTransportApiService.java b/application/src/main/java/org/thingsboard/server/service/transport/DefaultTransportApiService.java index cb4e01032f..929d87e5f4 100644 --- a/application/src/main/java/org/thingsboard/server/service/transport/DefaultTransportApiService.java +++ b/application/src/main/java/org/thingsboard/server/service/transport/DefaultTransportApiService.java @@ -95,6 +95,7 @@ import org.thingsboard.server.queue.common.TbProtoQueueMsg; import org.thingsboard.server.queue.util.TbCoreComponent; import org.thingsboard.server.service.apiusage.TbApiUsageStateService; import org.thingsboard.server.service.executors.DbCallbackExecutorService; +import org.thingsboard.server.service.gateway_device.GatewayDeviceStateService; import org.thingsboard.server.service.profile.TbDeviceProfileCache; import org.thingsboard.server.cluster.TbClusterService; import org.thingsboard.server.service.resource.TbResourceService; @@ -137,6 +138,7 @@ public class DefaultTransportApiService implements TransportApiService { private final TbResourceService resourceService; private final OtaPackageService otaPackageService; private final OtaPackageDataCache otaPackageDataCache; + private final GatewayDeviceStateService gatewayDeviceStateService; private final ConcurrentMap deviceCreationLocks = new ConcurrentHashMap<>(); @@ -317,6 +319,8 @@ public class DefaultTransportApiService implements TransportApiService { } relationService.saveRelationAsync(TenantId.SYS_TENANT_ID, lastConnectedGatewayRelation); + gatewayDeviceStateService.checkAndUpdateDeletedGatewayDevicesAttribute(device); + GetOrCreateDeviceFromGatewayResponseMsg.Builder builder = GetOrCreateDeviceFromGatewayResponseMsg.newBuilder() .setDeviceInfo(getDeviceInfoProto(device)); DeviceProfile deviceProfile = deviceProfileCache.get(device.getTenantId(), device.getDeviceProfileId()); diff --git a/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.html b/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.html index ae0be158d5..cac8ae4c1e 100644 --- a/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.html +++ b/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.html @@ -103,10 +103,16 @@ {{ 'device.is-gateway' | translate }} + +
{{ 'device.overwrite-activity-time' | translate }} + + {{ 'device.handle-device-renaming' | translate }} +
device.description diff --git a/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.ts b/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.ts index fdbc25107f..552e1d5eb8 100644 --- a/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.ts +++ b/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.ts @@ -109,6 +109,7 @@ export class DeviceWizardDialogComponent extends label: ['', Validators.maxLength(255)], gateway: [false], overwriteActivityTime: [false], + handleDeviceRenaming: [false], addProfileType: [0], deviceProfileId: [null, Validators.required], newDeviceProfileTitle: [{value: null, disabled: true}], @@ -326,6 +327,7 @@ export class DeviceWizardDialogComponent extends additionalInfo: { gateway: this.deviceWizardFormGroup.get('gateway').value, overwriteActivityTime: this.deviceWizardFormGroup.get('overwriteActivityTime').value, + handleDeviceRenaming: this.deviceWizardFormGroup.get('handleDeviceRenaming').value, description: this.deviceWizardFormGroup.get('description').value }, customerId: null diff --git a/ui-ngx/src/app/modules/home/pages/device/device.component.html b/ui-ngx/src/app/modules/home/pages/device/device.component.html index 1187a34f5d..1f89481fd0 100644 --- a/ui-ngx/src/app/modules/home/pages/device/device.component.html +++ b/ui-ngx/src/app/modules/home/pages/device/device.component.html @@ -128,10 +128,16 @@ {{ 'device.is-gateway' | translate }} + +
{{ 'device.overwrite-activity-time' | translate }} + + {{ 'device.handle-device-renaming' | translate }} +
device.description diff --git a/ui-ngx/src/app/modules/home/pages/device/device.component.ts b/ui-ngx/src/app/modules/home/pages/device/device.component.ts index 7cd60a89f4..cd1c78b3dd 100644 --- a/ui-ngx/src/app/modules/home/pages/device/device.component.ts +++ b/ui-ngx/src/app/modules/home/pages/device/device.component.ts @@ -92,6 +92,7 @@ export class DeviceComponent extends EntityComponent { { gateway: [entity && entity.additionalInfo ? entity.additionalInfo.gateway : false], overwriteActivityTime: [entity && entity.additionalInfo ? entity.additionalInfo.overwriteActivityTime : false], + handleDeviceRenaming: [entity && entity.additionalInfo ? entity.additionalInfo.handleDeviceRenaming : false], description: [entity && entity.additionalInfo ? entity.additionalInfo.description : ''], } ) @@ -121,6 +122,7 @@ export class DeviceComponent extends EntityComponent { additionalInfo: { gateway: entity.additionalInfo ? entity.additionalInfo.gateway : false, overwriteActivityTime: entity.additionalInfo ? entity.additionalInfo.overwriteActivityTime : false, + handleDeviceRenaming: entity.additionalInfo ? entity.additionalInfo.handleDeviceRenaming : false, description: entity.additionalInfo ? entity.additionalInfo.description : '' } }); diff --git a/ui-ngx/src/assets/locale/locale.constant-en_US.json b/ui-ngx/src/assets/locale/locale.constant-en_US.json index 3982bfedda..bfa105092f 100644 --- a/ui-ngx/src/assets/locale/locale.constant-en_US.json +++ b/ui-ngx/src/assets/locale/locale.constant-en_US.json @@ -1042,6 +1042,7 @@ "unable-delete-device-alias-text": "Device alias '{{deviceAlias}}' can't be deleted as it used by the following widget(s):
{{widgetsList}}", "is-gateway": "Is gateway", "overwrite-activity-time": "Overwrite activity time for connected device", + "handle-device-renaming": "Handle device renaming", "public": "Public", "device-public": "Device is public", "select-device": "Select device", From b82c27f4f725d29e27a9bbc24d0d5f6b2d783c7b Mon Sep 17 00:00:00 2001 From: zbeacon Date: Wed, 29 Dec 2021 17:39:11 +0200 Subject: [PATCH 04/13] Refactored to use persistent RPC --- .../DefaultGatewayDeviceStateService.java | 200 +++++------------- .../GatewayDeviceStateService.java | 2 - .../queue/DefaultTbClusterService.java | 11 +- .../rpc/DefaultTbCoreDeviceRpcService.java | 7 +- .../transport/DefaultTransportApiService.java | 6 - .../device-wizard-dialog.component.html | 6 - .../wizard/device-wizard-dialog.component.ts | 2 - .../home/pages/device/device.component.html | 6 - .../home/pages/device/device.component.ts | 2 - .../assets/locale/locale.constant-en_US.json | 1 - 10 files changed, 61 insertions(+), 182 deletions(-) diff --git a/application/src/main/java/org/thingsboard/server/service/gateway_device/DefaultGatewayDeviceStateService.java b/application/src/main/java/org/thingsboard/server/service/gateway_device/DefaultGatewayDeviceStateService.java index 57a0b36508..84b9f977ba 100644 --- a/application/src/main/java/org/thingsboard/server/service/gateway_device/DefaultGatewayDeviceStateService.java +++ b/application/src/main/java/org/thingsboard/server/service/gateway_device/DefaultGatewayDeviceStateService.java @@ -15,200 +15,98 @@ */ package org.thingsboard.server.service.gateway_device; -import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.ObjectNode; -import com.google.common.util.concurrent.FutureCallback; -import com.google.common.util.concurrent.ListenableFuture; +import com.fasterxml.jackson.databind.node.TextNode; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.checkerframework.checker.nullness.qual.Nullable; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; -import org.thingsboard.common.util.DonAsynchron; import org.thingsboard.common.util.JacksonUtil; import org.thingsboard.server.common.data.DataConstants; import org.thingsboard.server.common.data.Device; import org.thingsboard.server.common.data.id.DeviceId; import org.thingsboard.server.common.data.id.TenantId; -import org.thingsboard.server.common.data.kv.AttributeKvEntry; -import org.thingsboard.server.common.data.kv.BaseAttributeKvEntry; -import org.thingsboard.server.common.data.kv.JsonDataEntry; -import org.thingsboard.server.common.data.kv.KvEntry; import org.thingsboard.server.common.data.relation.EntityRelation; import org.thingsboard.server.common.data.relation.RelationTypeGroup; -import org.thingsboard.server.dao.attributes.AttributesService; +import org.thingsboard.server.common.data.rpc.ToDeviceRpcRequestBody; +import org.thingsboard.server.common.msg.rpc.ToDeviceRpcRequest; import org.thingsboard.server.dao.device.DeviceService; import org.thingsboard.server.dao.relation.RelationService; -import org.thingsboard.server.service.telemetry.TelemetrySubscriptionService; +import org.thingsboard.server.service.rpc.TbCoreDeviceRpcService; -import java.util.Collections; import java.util.List; -import java.util.Map; -import java.util.concurrent.atomic.AtomicBoolean; +import java.util.UUID; @Slf4j @Service @RequiredArgsConstructor public class DefaultGatewayDeviceStateService implements GatewayDeviceStateService { - private static final String RENAMED_GATEWAY_DEVICES = "renamedGatewayDevices"; - private static final String DELETED_GATEWAY_DEVICES = "deletedGatewayDevices"; - private static final String HANDLE_DEVICE_RENAMING_PARAMETER = "handleDeviceRenaming"; + private final static String DEVICE_RENAMED_METHOD_NAME = "gateway_device_renamed"; + private final static String DEVICE_DELETED_METHOD_NAME = "gateway_device_deleted"; - private final AttributesService attributesService; - private final RelationService relationService; - private final DeviceService deviceService; - @Lazy - @Autowired - private TelemetrySubscriptionService tsSubService; - @Override - public void update(Device device, Device oldDevice) { - List relationToGatewayList = relationService.findByFromAndType(TenantId.SYS_TENANT_ID, device.getId(), DataConstants.LAST_CONNECTED_GATEWAY, RelationTypeGroup.COMMON); - if (!relationToGatewayList.isEmpty()) { - if (oldDevice != null) { - EntityRelation relationToGateway = relationToGatewayList.get(0); - - Device gatewayDevice = deviceService.findDeviceById(device.getTenantId(), (DeviceId) relationToGateway.getTo()); - if (isHandleDeviceRenamingEnabled(gatewayDevice.getAdditionalInfo())) { - ListenableFuture> renamedGatewayDevicesFuture = attributesService.find(device.getTenantId(), relationToGateway.getTo(), DataConstants.SHARED_SCOPE, Collections.singletonList("renamedGatewayDevices")); - DonAsynchron.withCallback(renamedGatewayDevicesFuture, renamedGatewayDevicesList -> { - ObjectNode renamedGatewayDevicesNode; - KvEntry renamedGatewayDevicesKvEntry; - String newDeviceName = device.getName(); - String oldDeviceName = oldDevice.getName(); + @Value("${server.rest.server_side_rpc.min_timeout:5000}") + protected long minTimeout; - if (renamedGatewayDevicesList.isEmpty()) { - renamedGatewayDevicesNode = JacksonUtil.newObjectNode(); - renamedGatewayDevicesNode.put(oldDeviceName, newDeviceName); - } else { - AttributeKvEntry receivedRenamedGatewayDevicesAttribute = renamedGatewayDevicesList.get(0); - renamedGatewayDevicesNode = (ObjectNode) JacksonUtil.toJsonNode(receivedRenamedGatewayDevicesAttribute.getValueAsString()); - if (renamedGatewayDevicesNode.findValue(newDeviceName) != null && oldDeviceName.equals(renamedGatewayDevicesNode.get(newDeviceName).asText())) { - // If a new device name is the same like the first name or another device was renamed like some existing device - renamedGatewayDevicesNode.remove(newDeviceName); - } else { + @Value("${server.rest.server_side_rpc.default_timeout:10000}") + protected long defaultTimeout; - AtomicBoolean renamedFirstTime = new AtomicBoolean(true); + private final RelationService relationService; + private final DeviceService deviceService; - renamedGatewayDevicesNode.fields().forEachRemaining(entry -> { - // If device was renamed earlier - if (oldDeviceName.equals(entry.getValue().asText())) { - renamedGatewayDevicesNode.put(entry.getKey(), newDeviceName); - renamedFirstTime.set(false); - } - }); - if (renamedFirstTime.get()) { - renamedGatewayDevicesNode.put(oldDeviceName, newDeviceName); - } - } - } + @Lazy + @Autowired + private TbCoreDeviceRpcService deviceRpcService; - renamedGatewayDevicesKvEntry = new JsonDataEntry(RENAMED_GATEWAY_DEVICES, JacksonUtil.toString(renamedGatewayDevicesNode)); - saveGatewayDevicesAttribute(device, relationToGateway, renamedGatewayDevicesKvEntry); - }, - e -> log.error("Cannot get gateway renamed devices attribute", e)); - } - } - } - } @Override - public void delete(Device device) { + public void update(Device device, Device oldDevice) { List relationToGatewayList = relationService.findByFromAndType(TenantId.SYS_TENANT_ID, device.getId(), DataConstants.LAST_CONNECTED_GATEWAY, RelationTypeGroup.COMMON); if (!relationToGatewayList.isEmpty()) { EntityRelation relationToGateway = relationToGatewayList.get(0); - final String[] deletedDeviceName = {device.getName()}; - ListenableFuture> renamedGatewayDevicesFuture = attributesService.find(device.getTenantId(), relationToGateway.getTo(), DataConstants.SHARED_SCOPE, Collections.singletonList("renamedGatewayDevices")); - DonAsynchron.withCallback(renamedGatewayDevicesFuture, renamedGatewayDevicesList -> { - if (!renamedGatewayDevicesList.isEmpty()) { - ObjectNode renamedGatewayDevicesNode = (ObjectNode) JacksonUtil.toJsonNode(renamedGatewayDevicesList.get(0).getValueAsString()); - if (renamedGatewayDevicesNode != null) { - AtomicBoolean renamedListChanged = new AtomicBoolean(false); - if (renamedGatewayDevicesNode.findValue(deletedDeviceName[0]) != null) { - renamedGatewayDevicesNode.remove(deletedDeviceName[0]); - renamedListChanged.set(true); - } - Map renamedGatewayDevicesMap = JacksonUtil.OBJECT_MAPPER.convertValue(renamedGatewayDevicesNode, new TypeReference<>() { - }); - renamedGatewayDevicesMap.forEach((key, value) -> { - // If device was renamed earlier - if (deletedDeviceName[0].equals(value)) { - renamedGatewayDevicesNode.remove(key); - deletedDeviceName[0] = key; - renamedListChanged.set(true); - } - }); - if (renamedListChanged.get()) { - KvEntry renamedGatewayDevicesKvEntry = new JsonDataEntry(RENAMED_GATEWAY_DEVICES, JacksonUtil.toString(renamedGatewayDevicesNode)); - saveGatewayDevicesAttribute(device, relationToGateway, renamedGatewayDevicesKvEntry); - } - } - } - }, e -> log.error("Cannot get gateway renamed devices attribute", e)); - ListenableFuture> deletedGatewayDevicesFuture = attributesService.find(device.getTenantId(), relationToGateway.getTo(), DataConstants.SHARED_SCOPE, Collections.singletonList("deletedGatewayDevices")); - DonAsynchron.withCallback(deletedGatewayDevicesFuture, deletedGatewayDevicesList -> { - ArrayNode deletedGatewayDevicesNode; - if (!deletedGatewayDevicesList.isEmpty()) { - deletedGatewayDevicesNode = (ArrayNode) JacksonUtil.toJsonNode(deletedGatewayDevicesList.get(0).getValueAsString()); - } else { - deletedGatewayDevicesNode = JacksonUtil.OBJECT_MAPPER.createArrayNode(); - } - deletedGatewayDevicesNode.add(deletedDeviceName[0]); - KvEntry deletedGatewayDevicesKvEntry = new JsonDataEntry(DELETED_GATEWAY_DEVICES, JacksonUtil.toString(deletedGatewayDevicesNode)); - saveGatewayDevicesAttribute(device, relationToGateway, deletedGatewayDevicesKvEntry); - }, e -> log.error("Cannot get gateway deleted devices attribute", e)); + Device gatewayDevice = deviceService.findDeviceById(device.getTenantId(), (DeviceId) relationToGateway.getTo()); + ObjectNode renamedDeviceNode = JacksonUtil.newObjectNode(); + renamedDeviceNode.put(device.getName(), oldDevice.getName()); + ToDeviceRpcRequest rpcRequest = formDeviceToGatewayRPCRequest(gatewayDevice, renamedDeviceNode, DEVICE_RENAMED_METHOD_NAME); + deviceRpcService.processRestApiRpcRequest(rpcRequest, fromDeviceRpcResponse -> { + log.trace("Device renamed RPC with id: [{}] processed to gateway device with id: [{}], old device name: [{}], new device name: [{}]", + rpcRequest.getId(), gatewayDevice.getId(), oldDevice.getName(), device.getName()); + }, null); } } @Override - public void checkAndUpdateDeletedGatewayDevicesAttribute(Device device) { + public void delete(Device device) { List relationToGatewayList = relationService.findByFromAndType(TenantId.SYS_TENANT_ID, device.getId(), DataConstants.LAST_CONNECTED_GATEWAY, RelationTypeGroup.COMMON); if (!relationToGatewayList.isEmpty()) { EntityRelation relationToGateway = relationToGatewayList.get(0); - ListenableFuture> deletedGatewayDevicesFuture = attributesService.find(device.getTenantId(), relationToGateway.getTo(), DataConstants.SHARED_SCOPE, Collections.singletonList("deletedGatewayDevices")); - DonAsynchron.withCallback(deletedGatewayDevicesFuture, deletedGatewayDevicesList -> { - ArrayNode deletedGatewayDevicesNode; - if (!deletedGatewayDevicesList.isEmpty()) { - int deletedDeviceIndex = -1; - deletedGatewayDevicesNode = (ArrayNode) JacksonUtil.toJsonNode(deletedGatewayDevicesList.get(0).getValueAsString()); - for (int i = 0; i < deletedGatewayDevicesNode.size(); i++) { - if (deletedGatewayDevicesNode.get(i).asText().equals(device.getName())) { - deletedDeviceIndex = i; - } - } - if (deletedDeviceIndex != -1) { - deletedGatewayDevicesNode.remove(deletedDeviceIndex); - KvEntry deletedGatewayDevicesKvEntry = new JsonDataEntry(DELETED_GATEWAY_DEVICES, JacksonUtil.toString(deletedGatewayDevicesNode)); - saveGatewayDevicesAttribute(device, relationToGateway, deletedGatewayDevicesKvEntry); - } - } - }, e -> log.error("Cannot get gateway deleted devices attribute", e)); + Device gatewayDevice = deviceService.findDeviceById(device.getTenantId(), (DeviceId) relationToGateway.getTo()); + TextNode deletedDeviceNode = new TextNode(device.getName()); + ToDeviceRpcRequest rpcRequest = formDeviceToGatewayRPCRequest(gatewayDevice, deletedDeviceNode, DEVICE_DELETED_METHOD_NAME); + deviceRpcService.processRestApiRpcRequest(rpcRequest, fromDeviceRpcResponse -> { + log.trace("Device deleted RPC with id: [{}] processed to gateway device with id: [{}], deleted device name: [{}]", + rpcRequest.getId(), gatewayDevice.getId(), device.getName()); + }, null); } } - private void saveGatewayDevicesAttribute(Device device, EntityRelation relationToGateway, KvEntry gatewayDevicesKvEntry) { - AttributeKvEntry attrKvEntry = new BaseAttributeKvEntry(System.currentTimeMillis(), gatewayDevicesKvEntry); - tsSubService.saveAndNotify(device.getTenantId(), relationToGateway.getTo(), DataConstants.SHARED_SCOPE, List.of(attrKvEntry), true, new FutureCallback() { - @Override - public void onSuccess(@Nullable Void unused) { - log.trace("Attribute saved for gateway with ID [{}] and data [{}]", relationToGateway.getTo(), gatewayDevicesKvEntry.getJsonValue()); - } - - @Override - public void onFailure(Throwable throwable) { - log.error("Cannot save gateway device attribute", throwable); - } - }); - } - - private boolean isHandleDeviceRenamingEnabled(JsonNode additionalInfo) { - if (additionalInfo.get(HANDLE_DEVICE_RENAMING_PARAMETER) != null) { - return additionalInfo.get(HANDLE_DEVICE_RENAMING_PARAMETER).asBoolean(); - } - return false; + private ToDeviceRpcRequest formDeviceToGatewayRPCRequest(Device gatewayDevice, JsonNode deviceDataNode, String method) { + ToDeviceRpcRequestBody body = new ToDeviceRpcRequestBody(method, JacksonUtil.toString(deviceDataNode)); + long expTime = System.currentTimeMillis() + Math.max(minTimeout, defaultTimeout); + UUID rpcRequestUUID = UUID.randomUUID(); + return new ToDeviceRpcRequest(rpcRequestUUID, + gatewayDevice.getTenantId(), + gatewayDevice.getId(), + true, + expTime, + body, + true, + null, + null + ); } -} \ No newline at end of file +} diff --git a/application/src/main/java/org/thingsboard/server/service/gateway_device/GatewayDeviceStateService.java b/application/src/main/java/org/thingsboard/server/service/gateway_device/GatewayDeviceStateService.java index d4079487a5..1c06967cff 100644 --- a/application/src/main/java/org/thingsboard/server/service/gateway_device/GatewayDeviceStateService.java +++ b/application/src/main/java/org/thingsboard/server/service/gateway_device/GatewayDeviceStateService.java @@ -22,6 +22,4 @@ public interface GatewayDeviceStateService { void update(Device device, Device oldDevice); void delete(Device device); - - void checkAndUpdateDeletedGatewayDevicesAttribute(Device device); } diff --git a/application/src/main/java/org/thingsboard/server/service/queue/DefaultTbClusterService.java b/application/src/main/java/org/thingsboard/server/service/queue/DefaultTbClusterService.java index be44c9ee40..4ffc782803 100644 --- a/application/src/main/java/org/thingsboard/server/service/queue/DefaultTbClusterService.java +++ b/application/src/main/java/org/thingsboard/server/service/queue/DefaultTbClusterService.java @@ -401,13 +401,18 @@ public class DefaultTbClusterService implements TbClusterService { public void onDeviceUpdated(Device device, Device old, boolean notifyEdge) { var created = old == null; broadcastEntityChangeToTransport(device.getTenantId(), device.getId(), device, null); - if (old != null && (!device.getName().equals(old.getName()) || !device.getType().equals(old.getType()))) { - pushMsgToCore(new DeviceNameOrTypeUpdateMsg(device.getTenantId(), device.getId(), device.getName(), device.getType()), null); + if (old != null) { + boolean deviceNameChanged = !device.getName().equals(old.getName()); + if (deviceNameChanged) { + gatewayDeviceStateService.update(device, old); + } + if (deviceNameChanged || !device.getType().equals(old.getType())) { + pushMsgToCore(new DeviceNameOrTypeUpdateMsg(device.getTenantId(), device.getId(), device.getName(), device.getType()), null); + } } broadcastEntityStateChangeEvent(device.getTenantId(), device.getId(), created ? ComponentLifecycleEvent.CREATED : ComponentLifecycleEvent.UPDATED); sendDeviceStateServiceEvent(device.getTenantId(), device.getId(), created, !created, false); otaPackageStateService.update(device, old); - gatewayDeviceStateService.update(device, old); if (!created && notifyEdge) { sendNotificationMsgToEdgeService(device.getTenantId(), null, device.getId(), null, null, EdgeEventActionType.UPDATED); } diff --git a/application/src/main/java/org/thingsboard/server/service/rpc/DefaultTbCoreDeviceRpcService.java b/application/src/main/java/org/thingsboard/server/service/rpc/DefaultTbCoreDeviceRpcService.java index 2b2ade02ee..99e013d6d0 100644 --- a/application/src/main/java/org/thingsboard/server/service/rpc/DefaultTbCoreDeviceRpcService.java +++ b/application/src/main/java/org/thingsboard/server/service/rpc/DefaultTbCoreDeviceRpcService.java @@ -22,10 +22,12 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.thingsboard.common.util.ThingsBoardThreadFactory; -import org.thingsboard.server.common.data.rpc.RpcError; import org.thingsboard.server.actors.ActorSystemContext; +import org.thingsboard.server.cluster.TbClusterService; import org.thingsboard.server.common.data.DataConstants; import org.thingsboard.server.common.data.Device; +import org.thingsboard.server.common.data.User; +import org.thingsboard.server.common.data.rpc.RpcError; import org.thingsboard.server.common.msg.TbMsg; import org.thingsboard.server.common.msg.TbMsgDataType; import org.thingsboard.server.common.msg.TbMsgMetaData; @@ -34,7 +36,6 @@ import org.thingsboard.server.common.msg.rpc.ToDeviceRpcRequest; import org.thingsboard.server.dao.device.DeviceService; import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; import org.thingsboard.server.queue.util.TbCoreComponent; -import org.thingsboard.server.cluster.TbClusterService; import org.thingsboard.server.service.security.model.SecurityUser; import javax.annotation.PostConstruct; @@ -183,7 +184,7 @@ public class DefaultTbCoreDeviceRpcService implements TbCoreDeviceRpcService { entityNode.put(DataConstants.ADDITIONAL_INFO, msg.getAdditionalInfo()); try { - TbMsg tbMsg = TbMsg.newMsg(DataConstants.RPC_CALL_FROM_SERVER_TO_DEVICE, msg.getDeviceId(), currentUser.getCustomerId(), metaData, TbMsgDataType.JSON, json.writeValueAsString(entityNode)); + TbMsg tbMsg = TbMsg.newMsg(DataConstants.RPC_CALL_FROM_SERVER_TO_DEVICE, msg.getDeviceId(), Optional.ofNullable(currentUser).map(User::getCustomerId).orElse(null), metaData, TbMsgDataType.JSON, json.writeValueAsString(entityNode)); clusterService.pushMsgToRuleEngine(msg.getTenantId(), msg.getDeviceId(), tbMsg, null); } catch (JsonProcessingException e) { throw new RuntimeException(e); diff --git a/application/src/main/java/org/thingsboard/server/service/transport/DefaultTransportApiService.java b/application/src/main/java/org/thingsboard/server/service/transport/DefaultTransportApiService.java index 929d87e5f4..04e581ba6b 100644 --- a/application/src/main/java/org/thingsboard/server/service/transport/DefaultTransportApiService.java +++ b/application/src/main/java/org/thingsboard/server/service/transport/DefaultTransportApiService.java @@ -95,11 +95,9 @@ import org.thingsboard.server.queue.common.TbProtoQueueMsg; import org.thingsboard.server.queue.util.TbCoreComponent; import org.thingsboard.server.service.apiusage.TbApiUsageStateService; import org.thingsboard.server.service.executors.DbCallbackExecutorService; -import org.thingsboard.server.service.gateway_device.GatewayDeviceStateService; import org.thingsboard.server.service.profile.TbDeviceProfileCache; import org.thingsboard.server.cluster.TbClusterService; import org.thingsboard.server.service.resource.TbResourceService; -import org.thingsboard.server.service.state.DeviceStateService; import java.util.List; import java.util.Optional; @@ -130,7 +128,6 @@ public class DefaultTransportApiService implements TransportApiService { private final DeviceService deviceService; private final RelationService relationService; private final DeviceCredentialsService deviceCredentialsService; - private final DeviceStateService deviceStateService; private final DbCallbackExecutorService dbCallbackExecutorService; private final TbClusterService tbClusterService; private final DataDecodingEncodingService dataDecodingEncodingService; @@ -138,7 +135,6 @@ public class DefaultTransportApiService implements TransportApiService { private final TbResourceService resourceService; private final OtaPackageService otaPackageService; private final OtaPackageDataCache otaPackageDataCache; - private final GatewayDeviceStateService gatewayDeviceStateService; private final ConcurrentMap deviceCreationLocks = new ConcurrentHashMap<>(); @@ -319,8 +315,6 @@ public class DefaultTransportApiService implements TransportApiService { } relationService.saveRelationAsync(TenantId.SYS_TENANT_ID, lastConnectedGatewayRelation); - gatewayDeviceStateService.checkAndUpdateDeletedGatewayDevicesAttribute(device); - GetOrCreateDeviceFromGatewayResponseMsg.Builder builder = GetOrCreateDeviceFromGatewayResponseMsg.newBuilder() .setDeviceInfo(getDeviceInfoProto(device)); DeviceProfile deviceProfile = deviceProfileCache.get(device.getTenantId(), device.getDeviceProfileId()); diff --git a/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.html b/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.html index cac8ae4c1e..ae0be158d5 100644 --- a/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.html +++ b/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.html @@ -103,16 +103,10 @@ {{ 'device.is-gateway' | translate }} - -
{{ 'device.overwrite-activity-time' | translate }} - - {{ 'device.handle-device-renaming' | translate }} -
device.description diff --git a/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.ts b/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.ts index 552e1d5eb8..fdbc25107f 100644 --- a/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.ts +++ b/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.ts @@ -109,7 +109,6 @@ export class DeviceWizardDialogComponent extends label: ['', Validators.maxLength(255)], gateway: [false], overwriteActivityTime: [false], - handleDeviceRenaming: [false], addProfileType: [0], deviceProfileId: [null, Validators.required], newDeviceProfileTitle: [{value: null, disabled: true}], @@ -327,7 +326,6 @@ export class DeviceWizardDialogComponent extends additionalInfo: { gateway: this.deviceWizardFormGroup.get('gateway').value, overwriteActivityTime: this.deviceWizardFormGroup.get('overwriteActivityTime').value, - handleDeviceRenaming: this.deviceWizardFormGroup.get('handleDeviceRenaming').value, description: this.deviceWizardFormGroup.get('description').value }, customerId: null diff --git a/ui-ngx/src/app/modules/home/pages/device/device.component.html b/ui-ngx/src/app/modules/home/pages/device/device.component.html index 1f89481fd0..1187a34f5d 100644 --- a/ui-ngx/src/app/modules/home/pages/device/device.component.html +++ b/ui-ngx/src/app/modules/home/pages/device/device.component.html @@ -128,16 +128,10 @@ {{ 'device.is-gateway' | translate }} - -
{{ 'device.overwrite-activity-time' | translate }} - - {{ 'device.handle-device-renaming' | translate }} -
device.description diff --git a/ui-ngx/src/app/modules/home/pages/device/device.component.ts b/ui-ngx/src/app/modules/home/pages/device/device.component.ts index cd1c78b3dd..7cd60a89f4 100644 --- a/ui-ngx/src/app/modules/home/pages/device/device.component.ts +++ b/ui-ngx/src/app/modules/home/pages/device/device.component.ts @@ -92,7 +92,6 @@ export class DeviceComponent extends EntityComponent { { gateway: [entity && entity.additionalInfo ? entity.additionalInfo.gateway : false], overwriteActivityTime: [entity && entity.additionalInfo ? entity.additionalInfo.overwriteActivityTime : false], - handleDeviceRenaming: [entity && entity.additionalInfo ? entity.additionalInfo.handleDeviceRenaming : false], description: [entity && entity.additionalInfo ? entity.additionalInfo.description : ''], } ) @@ -122,7 +121,6 @@ export class DeviceComponent extends EntityComponent { additionalInfo: { gateway: entity.additionalInfo ? entity.additionalInfo.gateway : false, overwriteActivityTime: entity.additionalInfo ? entity.additionalInfo.overwriteActivityTime : false, - handleDeviceRenaming: entity.additionalInfo ? entity.additionalInfo.handleDeviceRenaming : false, description: entity.additionalInfo ? entity.additionalInfo.description : '' } }); diff --git a/ui-ngx/src/assets/locale/locale.constant-en_US.json b/ui-ngx/src/assets/locale/locale.constant-en_US.json index 092f944ece..807f3781a9 100644 --- a/ui-ngx/src/assets/locale/locale.constant-en_US.json +++ b/ui-ngx/src/assets/locale/locale.constant-en_US.json @@ -1045,7 +1045,6 @@ "unable-delete-device-alias-text": "Device alias '{{deviceAlias}}' can't be deleted as it used by the following widget(s):
{{widgetsList}}", "is-gateway": "Is gateway", "overwrite-activity-time": "Overwrite activity time for connected device", - "handle-device-renaming": "Handle device renaming", "public": "Public", "device-public": "Device is public", "select-device": "Select device", From d255c8d16c5b534c77a24905126dead39f4abe48 Mon Sep 17 00:00:00 2001 From: zbeacon Date: Thu, 30 Dec 2021 12:27:45 +0200 Subject: [PATCH 05/13] Refactored --- .../DefaultGatewayDeviceStateService.java | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/application/src/main/java/org/thingsboard/server/service/gateway_device/DefaultGatewayDeviceStateService.java b/application/src/main/java/org/thingsboard/server/service/gateway_device/DefaultGatewayDeviceStateService.java index 84b9f977ba..4fa6be5654 100644 --- a/application/src/main/java/org/thingsboard/server/service/gateway_device/DefaultGatewayDeviceStateService.java +++ b/application/src/main/java/org/thingsboard/server/service/gateway_device/DefaultGatewayDeviceStateService.java @@ -48,7 +48,6 @@ public class DefaultGatewayDeviceStateService implements GatewayDeviceStateServi private final static String DEVICE_RENAMED_METHOD_NAME = "gateway_device_renamed"; private final static String DEVICE_DELETED_METHOD_NAME = "gateway_device_deleted"; - @Value("${server.rest.server_side_rpc.min_timeout:5000}") protected long minTimeout; @@ -62,13 +61,10 @@ public class DefaultGatewayDeviceStateService implements GatewayDeviceStateServi @Autowired private TbCoreDeviceRpcService deviceRpcService; - @Override public void update(Device device, Device oldDevice) { - List relationToGatewayList = relationService.findByFromAndType(TenantId.SYS_TENANT_ID, device.getId(), DataConstants.LAST_CONNECTED_GATEWAY, RelationTypeGroup.COMMON); - if (!relationToGatewayList.isEmpty()) { - EntityRelation relationToGateway = relationToGatewayList.get(0); - Device gatewayDevice = deviceService.findDeviceById(device.getTenantId(), (DeviceId) relationToGateway.getTo()); + Device gatewayDevice = findGatewayDeviceByRelationFromDevice(device); + if (gatewayDevice != null) { ObjectNode renamedDeviceNode = JacksonUtil.newObjectNode(); renamedDeviceNode.put(device.getName(), oldDevice.getName()); ToDeviceRpcRequest rpcRequest = formDeviceToGatewayRPCRequest(gatewayDevice, renamedDeviceNode, DEVICE_RENAMED_METHOD_NAME); @@ -81,10 +77,8 @@ public class DefaultGatewayDeviceStateService implements GatewayDeviceStateServi @Override public void delete(Device device) { - List relationToGatewayList = relationService.findByFromAndType(TenantId.SYS_TENANT_ID, device.getId(), DataConstants.LAST_CONNECTED_GATEWAY, RelationTypeGroup.COMMON); - if (!relationToGatewayList.isEmpty()) { - EntityRelation relationToGateway = relationToGatewayList.get(0); - Device gatewayDevice = deviceService.findDeviceById(device.getTenantId(), (DeviceId) relationToGateway.getTo()); + Device gatewayDevice = findGatewayDeviceByRelationFromDevice(device); + if (gatewayDevice != null) { TextNode deletedDeviceNode = new TextNode(device.getName()); ToDeviceRpcRequest rpcRequest = formDeviceToGatewayRPCRequest(gatewayDevice, deletedDeviceNode, DEVICE_DELETED_METHOD_NAME); deviceRpcService.processRestApiRpcRequest(rpcRequest, fromDeviceRpcResponse -> { @@ -109,4 +103,13 @@ public class DefaultGatewayDeviceStateService implements GatewayDeviceStateServi null ); } + + private Device findGatewayDeviceByRelationFromDevice(Device device) { + List relationToGatewayList = relationService.findByFromAndType(TenantId.SYS_TENANT_ID, device.getId(), DataConstants.LAST_CONNECTED_GATEWAY, RelationTypeGroup.COMMON); + if (!relationToGatewayList.isEmpty()) { + EntityRelation relationToGateway = relationToGatewayList.get(0); + return deviceService.findDeviceById(device.getTenantId(), (DeviceId) relationToGateway.getTo()); + } + return null; + } } From d73e47b714498c70aefa9880a44df914e7e15a89 Mon Sep 17 00:00:00 2001 From: zbeacon Date: Fri, 14 Jan 2022 12:32:28 +0200 Subject: [PATCH 06/13] Moved lastConnectedGateway to additional info of the device, according to comments from @ashvayka --- .../DefaultGatewayDeviceStateService.java | 25 ++++------- .../transport/DefaultTransportApiService.java | 41 ++++++++++--------- 2 files changed, 30 insertions(+), 36 deletions(-) diff --git a/application/src/main/java/org/thingsboard/server/service/gateway_device/DefaultGatewayDeviceStateService.java b/application/src/main/java/org/thingsboard/server/service/gateway_device/DefaultGatewayDeviceStateService.java index 4fa6be5654..93cc92421b 100644 --- a/application/src/main/java/org/thingsboard/server/service/gateway_device/DefaultGatewayDeviceStateService.java +++ b/application/src/main/java/org/thingsboard/server/service/gateway_device/DefaultGatewayDeviceStateService.java @@ -29,15 +29,11 @@ import org.thingsboard.server.common.data.DataConstants; import org.thingsboard.server.common.data.Device; import org.thingsboard.server.common.data.id.DeviceId; import org.thingsboard.server.common.data.id.TenantId; -import org.thingsboard.server.common.data.relation.EntityRelation; -import org.thingsboard.server.common.data.relation.RelationTypeGroup; import org.thingsboard.server.common.data.rpc.ToDeviceRpcRequestBody; import org.thingsboard.server.common.msg.rpc.ToDeviceRpcRequest; import org.thingsboard.server.dao.device.DeviceService; -import org.thingsboard.server.dao.relation.RelationService; import org.thingsboard.server.service.rpc.TbCoreDeviceRpcService; -import java.util.List; import java.util.UUID; @Slf4j @@ -47,23 +43,18 @@ public class DefaultGatewayDeviceStateService implements GatewayDeviceStateServi private final static String DEVICE_RENAMED_METHOD_NAME = "gateway_device_renamed"; private final static String DEVICE_DELETED_METHOD_NAME = "gateway_device_deleted"; - + private final DeviceService deviceService; @Value("${server.rest.server_side_rpc.min_timeout:5000}") protected long minTimeout; - @Value("${server.rest.server_side_rpc.default_timeout:10000}") protected long defaultTimeout; - - private final RelationService relationService; - private final DeviceService deviceService; - @Lazy @Autowired private TbCoreDeviceRpcService deviceRpcService; @Override public void update(Device device, Device oldDevice) { - Device gatewayDevice = findGatewayDeviceByRelationFromDevice(device); + Device gatewayDevice = findGatewayDeviceByAdditionalInfoInDevice(device.getTenantId(), device.getAdditionalInfo()); if (gatewayDevice != null) { ObjectNode renamedDeviceNode = JacksonUtil.newObjectNode(); renamedDeviceNode.put(device.getName(), oldDevice.getName()); @@ -77,7 +68,7 @@ public class DefaultGatewayDeviceStateService implements GatewayDeviceStateServi @Override public void delete(Device device) { - Device gatewayDevice = findGatewayDeviceByRelationFromDevice(device); + Device gatewayDevice = findGatewayDeviceByAdditionalInfoInDevice(device.getTenantId(), device.getAdditionalInfo()); if (gatewayDevice != null) { TextNode deletedDeviceNode = new TextNode(device.getName()); ToDeviceRpcRequest rpcRequest = formDeviceToGatewayRPCRequest(gatewayDevice, deletedDeviceNode, DEVICE_DELETED_METHOD_NAME); @@ -104,11 +95,11 @@ public class DefaultGatewayDeviceStateService implements GatewayDeviceStateServi ); } - private Device findGatewayDeviceByRelationFromDevice(Device device) { - List relationToGatewayList = relationService.findByFromAndType(TenantId.SYS_TENANT_ID, device.getId(), DataConstants.LAST_CONNECTED_GATEWAY, RelationTypeGroup.COMMON); - if (!relationToGatewayList.isEmpty()) { - EntityRelation relationToGateway = relationToGatewayList.get(0); - return deviceService.findDeviceById(device.getTenantId(), (DeviceId) relationToGateway.getTo()); + private Device findGatewayDeviceByAdditionalInfoInDevice(TenantId tenantId, JsonNode deviceAdditionalInfo) { + if (deviceAdditionalInfo != null && deviceAdditionalInfo.has(DataConstants.LAST_CONNECTED_GATEWAY)) { + JsonNode lastConnectedGatewayIdNode = deviceAdditionalInfo.get(DataConstants.LAST_CONNECTED_GATEWAY); + DeviceId gatewayId = new DeviceId(UUID.fromString(lastConnectedGatewayIdNode.asText())); + return deviceService.findDeviceById(tenantId, gatewayId); } return null; } diff --git a/application/src/main/java/org/thingsboard/server/service/transport/DefaultTransportApiService.java b/application/src/main/java/org/thingsboard/server/service/transport/DefaultTransportApiService.java index 04e581ba6b..87dee3202b 100644 --- a/application/src/main/java/org/thingsboard/server/service/transport/DefaultTransportApiService.java +++ b/application/src/main/java/org/thingsboard/server/service/transport/DefaultTransportApiService.java @@ -16,6 +16,7 @@ package org.thingsboard.server.service.transport; import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; import com.google.common.util.concurrent.Futures; @@ -27,6 +28,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.thingsboard.common.util.JacksonUtil; import org.thingsboard.server.cache.ota.OtaPackageDataCache; +import org.thingsboard.server.cluster.TbClusterService; import org.thingsboard.server.common.data.ApiUsageState; import org.thingsboard.server.common.data.DataConstants; import org.thingsboard.server.common.data.Device; @@ -56,7 +58,6 @@ import org.thingsboard.server.common.data.ota.OtaPackageUtil; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; import org.thingsboard.server.common.data.relation.EntityRelation; -import org.thingsboard.server.common.data.relation.RelationTypeGroup; import org.thingsboard.server.common.data.security.DeviceCredentials; import org.thingsboard.server.common.data.security.DeviceCredentialsType; import org.thingsboard.server.common.msg.EncryptionUtil; @@ -96,10 +97,8 @@ import org.thingsboard.server.queue.util.TbCoreComponent; import org.thingsboard.server.service.apiusage.TbApiUsageStateService; import org.thingsboard.server.service.executors.DbCallbackExecutorService; import org.thingsboard.server.service.profile.TbDeviceProfileCache; -import org.thingsboard.server.cluster.TbClusterService; import org.thingsboard.server.service.resource.TbResourceService; -import java.util.List; import java.util.Optional; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; @@ -138,6 +137,10 @@ public class DefaultTransportApiService implements TransportApiService { private final ConcurrentMap deviceCreationLocks = new ConcurrentHashMap<>(); + private static boolean checkIsMqttCredentials(DeviceCredentials credentials) { + return credentials != null && DeviceCredentialsType.MQTT_BASIC.equals(credentials.getCredentialsType()); + } + @Override public ListenableFuture> handle(TbProtoQueueMsg tbProtoQueueMsg) { TransportApiRequestMsg transportApiRequestMsg = tbProtoQueueMsg.getValue(); @@ -234,10 +237,6 @@ public class DefaultTransportApiService implements TransportApiService { return getEmptyTransportApiResponseFuture(); } - private static boolean checkIsMqttCredentials(DeviceCredentials credentials) { - return credentials != null && DeviceCredentialsType.MQTT_BASIC.equals(credentials.getCredentialsType()); - } - private DeviceCredentials checkMqttCredentials(TransportProtos.ValidateBasicMqttCredRequestMsg clientCred, String credId) { return checkMqttCredentials(clientCred, deviceCredentialsService.findDeviceCredentialsByCredentialsId(credId)); } @@ -286,6 +285,9 @@ public class DefaultTransportApiService implements TransportApiService { device.setCustomerId(gateway.getCustomerId()); DeviceProfile deviceProfile = deviceProfileCache.findOrCreateDeviceProfile(gateway.getTenantId(), requestMsg.getDeviceType()); device.setDeviceProfileId(deviceProfile.getId()); + ObjectNode additionalInfo = JacksonUtil.newObjectNode(); + additionalInfo.put(DataConstants.LAST_CONNECTED_GATEWAY, gatewayId.toString()); + device.setAdditionalInfo(additionalInfo); Device savedDevice = deviceService.saveDevice(device); tbClusterService.onDeviceUpdated(savedDevice, null); device = savedDevice; @@ -303,18 +305,17 @@ public class DefaultTransportApiService implements TransportApiService { ObjectNode entityNode = mapper.valueToTree(device); TbMsg tbMsg = TbMsg.newMsg(DataConstants.ENTITY_CREATED, deviceId, customerId, metaData, TbMsgDataType.JSON, mapper.writeValueAsString(entityNode)); tbClusterService.pushMsgToRuleEngine(tenantId, deviceId, tbMsg, null); - } - - List currentLastConnectedGatewayRelationList = relationService.findByFromAndType(TenantId.SYS_TENANT_ID, device.getId(), DataConstants.LAST_CONNECTED_GATEWAY, RelationTypeGroup.COMMON); - EntityRelation lastConnectedGatewayRelation; - if (!currentLastConnectedGatewayRelationList.isEmpty()) { - lastConnectedGatewayRelation = currentLastConnectedGatewayRelationList.get(0); - lastConnectedGatewayRelation.setTo(gateway.getId()); } else { - lastConnectedGatewayRelation = new EntityRelation(device.getId(), gateway.getId(), DataConstants.LAST_CONNECTED_GATEWAY); + JsonNode deviceAdditionalInfo = device.getAdditionalInfo(); + if (deviceAdditionalInfo == null) { + deviceAdditionalInfo = JacksonUtil.newObjectNode(); + } + if (!deviceAdditionalInfo.has(DataConstants.LAST_CONNECTED_GATEWAY) || !gatewayId.toString().equals(deviceAdditionalInfo.get(DataConstants.LAST_CONNECTED_GATEWAY).asText())) { + ObjectNode newDeviceAdditionalInfo = (ObjectNode) deviceAdditionalInfo; + newDeviceAdditionalInfo.put(DataConstants.LAST_CONNECTED_GATEWAY, gatewayId.toString()); + deviceService.saveDevice(device); + } } - relationService.saveRelationAsync(TenantId.SYS_TENANT_ID, lastConnectedGatewayRelation); - GetOrCreateDeviceFromGatewayResponseMsg.Builder builder = GetOrCreateDeviceFromGatewayResponseMsg.newBuilder() .setDeviceInfo(getDeviceInfoProto(device)); DeviceProfile deviceProfile = deviceProfileCache.get(device.getTenantId(), device.getDeviceProfileId()); @@ -359,7 +360,8 @@ public class DefaultTransportApiService implements TransportApiService { dbCallbackExecutorService); } - private TransportApiResponseMsg getTransportApiResponseMsg(DeviceCredentials deviceCredentials, TransportProtos.ResponseStatus status) { + private TransportApiResponseMsg getTransportApiResponseMsg(DeviceCredentials + deviceCredentials, TransportProtos.ResponseStatus status) { if (!status.equals(TransportProtos.ResponseStatus.SUCCESS)) { return TransportApiResponseMsg.newBuilder().setProvisionDeviceResponseMsg(TransportProtos.ProvisionDeviceResponseMsg.newBuilder().setStatus(status).build()).build(); } @@ -602,7 +604,8 @@ public class DefaultTransportApiService implements TransportApiService { .build()); } - private ListenableFuture handleRegistration(TransportProtos.LwM2MRegistrationRequestMsg msg) { + private ListenableFuture handleRegistration + (TransportProtos.LwM2MRegistrationRequestMsg msg) { TenantId tenantId = new TenantId(UUID.fromString(msg.getTenantId())); String deviceName = msg.getEndpoint(); Lock deviceCreationLock = deviceCreationLocks.computeIfAbsent(deviceName, id -> new ReentrantLock()); From d1f4a025c3963dc36ccbbbbaeaa7ce40f5c6c3ef Mon Sep 17 00:00:00 2001 From: zbeacon Date: Fri, 14 Jan 2022 13:29:38 +0200 Subject: [PATCH 07/13] Changed order for device names in renaming RPC --- .../gateway_device/DefaultGatewayDeviceStateService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/src/main/java/org/thingsboard/server/service/gateway_device/DefaultGatewayDeviceStateService.java b/application/src/main/java/org/thingsboard/server/service/gateway_device/DefaultGatewayDeviceStateService.java index 93cc92421b..efe4826780 100644 --- a/application/src/main/java/org/thingsboard/server/service/gateway_device/DefaultGatewayDeviceStateService.java +++ b/application/src/main/java/org/thingsboard/server/service/gateway_device/DefaultGatewayDeviceStateService.java @@ -57,7 +57,7 @@ public class DefaultGatewayDeviceStateService implements GatewayDeviceStateServi Device gatewayDevice = findGatewayDeviceByAdditionalInfoInDevice(device.getTenantId(), device.getAdditionalInfo()); if (gatewayDevice != null) { ObjectNode renamedDeviceNode = JacksonUtil.newObjectNode(); - renamedDeviceNode.put(device.getName(), oldDevice.getName()); + renamedDeviceNode.put(oldDevice.getName(), device.getName()); ToDeviceRpcRequest rpcRequest = formDeviceToGatewayRPCRequest(gatewayDevice, renamedDeviceNode, DEVICE_RENAMED_METHOD_NAME); deviceRpcService.processRestApiRpcRequest(rpcRequest, fromDeviceRpcResponse -> { log.trace("Device renamed RPC with id: [{}] processed to gateway device with id: [{}], old device name: [{}], new device name: [{}]", From dbbdbd80bd8da1851aaa2f6cfd36f6356ada0fef Mon Sep 17 00:00:00 2001 From: zbeacon Date: Fri, 14 Jan 2022 16:38:22 +0200 Subject: [PATCH 08/13] Updated, according to changes, removed request for device, updated timeout for RPC to 1 day --- .../DefaultGatewayDeviceStateService.java | 46 ++++++++----------- 1 file changed, 20 insertions(+), 26 deletions(-) diff --git a/application/src/main/java/org/thingsboard/server/service/gateway_device/DefaultGatewayDeviceStateService.java b/application/src/main/java/org/thingsboard/server/service/gateway_device/DefaultGatewayDeviceStateService.java index efe4826780..6900225a63 100644 --- a/application/src/main/java/org/thingsboard/server/service/gateway_device/DefaultGatewayDeviceStateService.java +++ b/application/src/main/java/org/thingsboard/server/service/gateway_device/DefaultGatewayDeviceStateService.java @@ -1,12 +1,12 @@ /** * 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. * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * + *

+ * 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. @@ -21,7 +21,6 @@ import com.fasterxml.jackson.databind.node.TextNode; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.thingsboard.common.util.JacksonUtil; @@ -31,10 +30,10 @@ import org.thingsboard.server.common.data.id.DeviceId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.rpc.ToDeviceRpcRequestBody; import org.thingsboard.server.common.msg.rpc.ToDeviceRpcRequest; -import org.thingsboard.server.dao.device.DeviceService; import org.thingsboard.server.service.rpc.TbCoreDeviceRpcService; import java.util.UUID; +import java.util.concurrent.TimeUnit; @Slf4j @Service @@ -43,49 +42,45 @@ public class DefaultGatewayDeviceStateService implements GatewayDeviceStateServi private final static String DEVICE_RENAMED_METHOD_NAME = "gateway_device_renamed"; private final static String DEVICE_DELETED_METHOD_NAME = "gateway_device_deleted"; - private final DeviceService deviceService; - @Value("${server.rest.server_side_rpc.min_timeout:5000}") - protected long minTimeout; - @Value("${server.rest.server_side_rpc.default_timeout:10000}") - protected long defaultTimeout; + private final static Long rpcTimeout = TimeUnit.DAYS.toMillis(1); @Lazy @Autowired private TbCoreDeviceRpcService deviceRpcService; @Override public void update(Device device, Device oldDevice) { - Device gatewayDevice = findGatewayDeviceByAdditionalInfoInDevice(device.getTenantId(), device.getAdditionalInfo()); - if (gatewayDevice != null) { + DeviceId gatewayDeviceId = getGatewayDeviceIdFromAdditionalInfoInDevice(device.getAdditionalInfo()); + if (gatewayDeviceId != null) { ObjectNode renamedDeviceNode = JacksonUtil.newObjectNode(); renamedDeviceNode.put(oldDevice.getName(), device.getName()); - ToDeviceRpcRequest rpcRequest = formDeviceToGatewayRPCRequest(gatewayDevice, renamedDeviceNode, DEVICE_RENAMED_METHOD_NAME); + ToDeviceRpcRequest rpcRequest = formDeviceToGatewayRPCRequest(device.getTenantId(), gatewayDeviceId, renamedDeviceNode, DEVICE_RENAMED_METHOD_NAME); deviceRpcService.processRestApiRpcRequest(rpcRequest, fromDeviceRpcResponse -> { log.trace("Device renamed RPC with id: [{}] processed to gateway device with id: [{}], old device name: [{}], new device name: [{}]", - rpcRequest.getId(), gatewayDevice.getId(), oldDevice.getName(), device.getName()); + rpcRequest.getId(), gatewayDeviceId, oldDevice.getName(), device.getName()); }, null); } } @Override public void delete(Device device) { - Device gatewayDevice = findGatewayDeviceByAdditionalInfoInDevice(device.getTenantId(), device.getAdditionalInfo()); - if (gatewayDevice != null) { + DeviceId gatewayDeviceId = getGatewayDeviceIdFromAdditionalInfoInDevice(device.getAdditionalInfo()); + if (gatewayDeviceId != null) { TextNode deletedDeviceNode = new TextNode(device.getName()); - ToDeviceRpcRequest rpcRequest = formDeviceToGatewayRPCRequest(gatewayDevice, deletedDeviceNode, DEVICE_DELETED_METHOD_NAME); + ToDeviceRpcRequest rpcRequest = formDeviceToGatewayRPCRequest(device.getTenantId(), gatewayDeviceId, deletedDeviceNode, DEVICE_DELETED_METHOD_NAME); deviceRpcService.processRestApiRpcRequest(rpcRequest, fromDeviceRpcResponse -> { log.trace("Device deleted RPC with id: [{}] processed to gateway device with id: [{}], deleted device name: [{}]", - rpcRequest.getId(), gatewayDevice.getId(), device.getName()); + rpcRequest.getId(), gatewayDeviceId, device.getName()); }, null); } } - private ToDeviceRpcRequest formDeviceToGatewayRPCRequest(Device gatewayDevice, JsonNode deviceDataNode, String method) { + private ToDeviceRpcRequest formDeviceToGatewayRPCRequest(TenantId tenantId, DeviceId gatewayDeviceId, JsonNode deviceDataNode, String method) { ToDeviceRpcRequestBody body = new ToDeviceRpcRequestBody(method, JacksonUtil.toString(deviceDataNode)); - long expTime = System.currentTimeMillis() + Math.max(minTimeout, defaultTimeout); + long expTime = System.currentTimeMillis() + rpcTimeout; UUID rpcRequestUUID = UUID.randomUUID(); return new ToDeviceRpcRequest(rpcRequestUUID, - gatewayDevice.getTenantId(), - gatewayDevice.getId(), + tenantId, + gatewayDeviceId, true, expTime, body, @@ -95,11 +90,10 @@ public class DefaultGatewayDeviceStateService implements GatewayDeviceStateServi ); } - private Device findGatewayDeviceByAdditionalInfoInDevice(TenantId tenantId, JsonNode deviceAdditionalInfo) { + private DeviceId getGatewayDeviceIdFromAdditionalInfoInDevice(JsonNode deviceAdditionalInfo) { if (deviceAdditionalInfo != null && deviceAdditionalInfo.has(DataConstants.LAST_CONNECTED_GATEWAY)) { JsonNode lastConnectedGatewayIdNode = deviceAdditionalInfo.get(DataConstants.LAST_CONNECTED_GATEWAY); - DeviceId gatewayId = new DeviceId(UUID.fromString(lastConnectedGatewayIdNode.asText())); - return deviceService.findDeviceById(tenantId, gatewayId); + return new DeviceId(UUID.fromString(lastConnectedGatewayIdNode.asText())); } return null; } From ab3176f23bef262b93242fd7ea987531f0e74ab5 Mon Sep 17 00:00:00 2001 From: YevhenBondarenko Date: Mon, 17 Jan 2022 11:38:04 +0200 Subject: [PATCH 09/13] improved removing timeseries/attributes --- .../subscription/DefaultSubscriptionManagerService.java | 4 ++-- .../modules/home/models/datasource/attribute-datasource.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/application/src/main/java/org/thingsboard/server/service/subscription/DefaultSubscriptionManagerService.java b/application/src/main/java/org/thingsboard/server/service/subscription/DefaultSubscriptionManagerService.java index 98e9f966f3..096670c9a7 100644 --- a/application/src/main/java/org/thingsboard/server/service/subscription/DefaultSubscriptionManagerService.java +++ b/application/src/main/java/org/thingsboard/server/service/subscription/DefaultSubscriptionManagerService.java @@ -331,7 +331,7 @@ public class DefaultSubscriptionManagerService extends TbApplicationEventListene if (subscriptionUpdate == null) { subscriptionUpdate = new ArrayList<>(); } - subscriptionUpdate.add(new BasicTsKvEntry(0, new StringDataEntry(key, null))); + subscriptionUpdate.add(new BasicTsKvEntry(0, new StringDataEntry(key, ""))); } } return subscriptionUpdate; @@ -355,7 +355,7 @@ public class DefaultSubscriptionManagerService extends TbApplicationEventListene if (subscriptionUpdate == null) { subscriptionUpdate = new ArrayList<>(); } - subscriptionUpdate.add(new BasicTsKvEntry(0, new StringDataEntry(key, null))); + subscriptionUpdate.add(new BasicTsKvEntry(0, new StringDataEntry(key, ""))); } } return subscriptionUpdate; diff --git a/ui-ngx/src/app/modules/home/models/datasource/attribute-datasource.ts b/ui-ngx/src/app/modules/home/models/datasource/attribute-datasource.ts index 9b5cbd1598..43acf5e61b 100644 --- a/ui-ngx/src/app/modules/home/models/datasource/attribute-datasource.ts +++ b/ui-ngx/src/app/modules/home/models/datasource/attribute-datasource.ts @@ -89,7 +89,7 @@ export class AttributeDatasource implements DataSource { pageLink: PageLink): Observable> { return this.getAllAttributes(entityId, attributesScope).pipe( map((data) => { - const filteredData = data.filter(attrData => attrData.lastUpdateTs !== 0 && attrData.value !== null); + const filteredData = data.filter(attrData => attrData.lastUpdateTs !== 0 && attrData.value !== ''); return pageLink.filterData(filteredData); }) ); From f72c058030271ad42d6ede7f7bccb5630dee2c76 Mon Sep 17 00:00:00 2001 From: Andrii Shvaika Date: Mon, 17 Jan 2022 12:44:06 +0200 Subject: [PATCH 10/13] Suppress and handle WS exceptions on cluster rebalancing --- ...efaultTbEntityDataSubscriptionService.java | 33 ++++++++++++++----- .../DefaultTelemetryWebSocketService.java | 12 +++++++ .../telemetry/TelemetryWebSocketService.java | 2 ++ .../core/ws/telemetry-websocket.service.ts | 2 +- 4 files changed, 39 insertions(+), 10 deletions(-) diff --git a/application/src/main/java/org/thingsboard/server/service/subscription/DefaultTbEntityDataSubscriptionService.java b/application/src/main/java/org/thingsboard/server/service/subscription/DefaultTbEntityDataSubscriptionService.java index ac831d43ba..b35a83cdf1 100644 --- a/application/src/main/java/org/thingsboard/server/service/subscription/DefaultTbEntityDataSubscriptionService.java +++ b/application/src/main/java/org/thingsboard/server/service/subscription/DefaultTbEntityDataSubscriptionService.java @@ -27,6 +27,7 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Lazy; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; +import org.springframework.web.socket.CloseStatus; import org.thingsboard.common.util.ThingsBoardThreadFactory; import org.thingsboard.server.common.data.id.CustomerId; import org.thingsboard.server.common.data.id.TenantId; @@ -205,21 +206,30 @@ public class DefaultTbEntityDataSubscriptionService implements TbEntityDataSubsc ListenableFuture historyFuture; if (cmd.getHistoryCmd() != null) { log.trace("[{}][{}] Going to process history command: {}", session.getSessionId(), cmd.getCmdId(), cmd.getHistoryCmd()); - historyFuture = handleHistoryCmd(ctx, cmd.getHistoryCmd()); + try { + historyFuture = handleHistoryCmd(ctx, cmd.getHistoryCmd()); + } catch (RuntimeException e) { + handleWsCmdRuntimeException(ctx.getSessionId(), e, cmd); + return; + } } else { historyFuture = Futures.immediateFuture(ctx); } Futures.addCallback(historyFuture, new FutureCallback<>() { @Override public void onSuccess(@Nullable TbEntityDataSubCtx theCtx) { - if (cmd.getLatestCmd() != null) { - handleLatestCmd(theCtx, cmd.getLatestCmd()); - } else if (cmd.getTsCmd() != null) { - handleTimeSeriesCmd(theCtx, cmd.getTsCmd()); - } else if (!theCtx.isInitialDataSent()) { - EntityDataUpdate update = new EntityDataUpdate(theCtx.getCmdId(), theCtx.getData(), null, theCtx.getMaxEntitiesPerDataSubscription()); - wsService.sendWsMsg(theCtx.getSessionId(), update); - theCtx.setInitialDataSent(true); + try { + if (cmd.getLatestCmd() != null) { + handleLatestCmd(theCtx, cmd.getLatestCmd()); + } else if (cmd.getTsCmd() != null) { + handleTimeSeriesCmd(theCtx, cmd.getTsCmd()); + } else if (!theCtx.isInitialDataSent()) { + EntityDataUpdate update = new EntityDataUpdate(theCtx.getCmdId(), theCtx.getData(), null, theCtx.getMaxEntitiesPerDataSubscription()); + wsService.sendWsMsg(theCtx.getSessionId(), update); + theCtx.setInitialDataSent(true); + } + } catch (RuntimeException e) { + handleWsCmdRuntimeException(theCtx.getSessionId(), e, cmd); } } @@ -230,6 +240,11 @@ public class DefaultTbEntityDataSubscriptionService implements TbEntityDataSubsc }, wsCallBackExecutor); } + private void handleWsCmdRuntimeException(String sessionId, RuntimeException e, EntityDataCmd cmd) { + log.debug("[{}] Failed to process ws cmd: {}", sessionId, cmd, e); + wsService.close(sessionId, CloseStatus.SERVICE_RESTARTED); + } + @Override public void handleCmd(TelemetryWebSocketSessionRef session, EntityCountCmd cmd) { TbEntityCountSubCtx ctx = getSubCtx(session.getSessionId(), cmd.getCmdId()); diff --git a/application/src/main/java/org/thingsboard/server/service/telemetry/DefaultTelemetryWebSocketService.java b/application/src/main/java/org/thingsboard/server/service/telemetry/DefaultTelemetryWebSocketService.java index dfc2185807..dcea91f6eb 100644 --- a/application/src/main/java/org/thingsboard/server/service/telemetry/DefaultTelemetryWebSocketService.java +++ b/application/src/main/java/org/thingsboard/server/service/telemetry/DefaultTelemetryWebSocketService.java @@ -307,6 +307,18 @@ public class DefaultTelemetryWebSocketService implements TelemetryWebSocketServi } } + @Override + public void close(String sessionId, CloseStatus status) { + WsSessionMetaData md = wsSessionsMap.get(sessionId); + if (md != null) { + try { + msgEndpoint.close(md.getSessionRef(), status); + } catch (IOException e) { + log.warn("[{}] Failed to send session close: {}", sessionId, e); + } + } + } + private void processSessionClose(TelemetryWebSocketSessionRef sessionRef) { String sessionId = "[" + sessionRef.getSessionId() + "]"; if (maxSubscriptionsPerTenant > 0) { diff --git a/application/src/main/java/org/thingsboard/server/service/telemetry/TelemetryWebSocketService.java b/application/src/main/java/org/thingsboard/server/service/telemetry/TelemetryWebSocketService.java index c8cdbd06af..b665c3bd2c 100644 --- a/application/src/main/java/org/thingsboard/server/service/telemetry/TelemetryWebSocketService.java +++ b/application/src/main/java/org/thingsboard/server/service/telemetry/TelemetryWebSocketService.java @@ -15,6 +15,7 @@ */ package org.thingsboard.server.service.telemetry; +import org.springframework.web.socket.CloseStatus; import org.thingsboard.server.service.telemetry.cmd.v2.CmdUpdate; import org.thingsboard.server.service.telemetry.cmd.v2.DataUpdate; import org.thingsboard.server.service.telemetry.sub.TelemetrySubscriptionUpdate; @@ -32,4 +33,5 @@ public interface TelemetryWebSocketService { void sendWsMsg(String sessionId, CmdUpdate update); + void close(String sessionId, CloseStatus status); } diff --git a/ui-ngx/src/app/core/ws/telemetry-websocket.service.ts b/ui-ngx/src/app/core/ws/telemetry-websocket.service.ts index a3fc6eb767..2463e35d8a 100644 --- a/ui-ngx/src/app/core/ws/telemetry-websocket.service.ts +++ b/ui-ngx/src/app/core/ws/telemetry-websocket.service.ts @@ -332,7 +332,7 @@ export class TelemetryWebsocketService implements TelemetryService { } private onClose(closeEvent: CloseEvent) { - if (closeEvent && closeEvent.code > 1001 && closeEvent.code !== 1006) { + if (closeEvent && closeEvent.code > 1001 && closeEvent.code !== 1006 && closeEvent.code !== 1012) { this.showWsError(closeEvent.code, closeEvent.reason); } this.isOpening = false; From 3272db65015216ec67566d92a03b98a9b72173ec Mon Sep 17 00:00:00 2001 From: Viacheslav Klimov Date: Mon, 17 Jan 2022 12:50:54 +0200 Subject: [PATCH 11/13] Fix events deletion --- .../org/thingsboard/server/dao/event/BaseEventService.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/dao/src/main/java/org/thingsboard/server/dao/event/BaseEventService.java b/dao/src/main/java/org/thingsboard/server/dao/event/BaseEventService.java index 0c9cede327..a4d4501c57 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/event/BaseEventService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/event/BaseEventService.java @@ -137,10 +137,6 @@ public class BaseEventService implements EventService { eventDao.removeAllByIds(eventsPageData.getData().stream() .map(IdBased::getUuidId) .collect(Collectors.toList())); - - if (eventsPageData.hasNext()) { - eventsPageLink = eventsPageLink.nextPageLink(); - } } while (eventsPageData.hasNext()); } From da4c74287216fc6962c74f084c2eedebf06e1a64 Mon Sep 17 00:00:00 2001 From: Igor Kulikov Date: Mon, 17 Jan 2022 14:07:46 +0200 Subject: [PATCH 12/13] Update license year to 2022 --- 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 +- application/src/main/data/upgrade/3.2.1/schema_update.sql | 2 +- application/src/main/data/upgrade/3.2.1/schema_update_ttl.sql | 2 +- application/src/main/data/upgrade/3.2.2/schema_update.sql | 2 +- .../src/main/data/upgrade/3.2.2/schema_update_event.sql | 2 +- application/src/main/data/upgrade/3.2.2/schema_update_ttl.sql | 2 +- application/src/main/data/upgrade/3.3.2/schema_update.sql | 2 +- .../main/data/upgrade/3.3.2/schema_update_lwm2m_bootstrap.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 +- .../thingsboard/server/actors/ruleChain/RuleChainInputMsg.java | 2 +- .../server/actors/ruleChain/RuleChainManagerActor.java | 2 +- .../server/actors/ruleChain/RuleChainOutputMsg.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 +- .../thingsboard/server/actors/ruleChain/RuleNodeToSelfMsg.java | 2 +- .../server/actors/ruleChain/TbToRuleChainActorMsg.java | 2 +- .../server/actors/ruleChain/TbToRuleNodeActorMsg.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 +- .../thingsboard/server/controller/AbstractRpcController.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/ControllerConstants.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 +- .../java/org/thingsboard/server/controller/EdgeController.java | 2 +- .../org/thingsboard/server/controller/EdgeEventController.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 +- .../org/thingsboard/server/controller/Lwm2mController.java | 2 +- .../server/controller/OAuth2ConfigTemplateController.java | 2 +- .../org/thingsboard/server/controller/OAuth2Controller.java | 2 +- .../thingsboard/server/controller/OtaPackageController.java | 2 +- .../org/thingsboard/server/controller/QueueController.java | 2 +- .../org/thingsboard/server/controller/RpcV1Controller.java | 2 +- .../org/thingsboard/server/controller/RpcV2Controller.java | 2 +- .../org/thingsboard/server/controller/RuleChainController.java | 2 +- .../thingsboard/server/controller/SystemInfoController.java | 2 +- .../thingsboard/server/controller/TbResourceController.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 +- .../thingsboard/server/controller/UiSettingsController.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 +- .../thingsboard/server/service/action/EntityActionService.java | 2 +- .../thingsboard/server/service/apiusage/BaseApiUsageState.java | 2 +- .../server/service/apiusage/CustomerApiUsageState.java | 2 +- .../server/service/apiusage/DefaultTbApiUsageStateService.java | 2 +- .../server/service/apiusage/TbApiUsageStateService.java | 2 +- .../server/service/apiusage/TenantApiUsageState.java | 2 +- .../server/service/asset/AssetBulkImportService.java | 2 +- .../service/component/AnnotationComponentDiscoveryService.java | 2 +- .../server/service/component/ComponentDiscoveryService.java | 2 +- .../server/service/device/ClaimDevicesServiceImpl.java | 2 +- .../server/service/device/DeviceBulkImportService.java | 2 +- .../server/service/device/DeviceProvisionServiceImpl.java | 2 +- .../server/service/edge/DefaultEdgeLicenseService.java | 2 +- .../server/service/edge/DefaultEdgeNotificationService.java | 2 +- .../thingsboard/server/service/edge/EdgeBulkImportService.java | 2 +- .../thingsboard/server/service/edge/EdgeContextComponent.java | 2 +- .../thingsboard/server/service/edge/EdgeLicenseService.java | 2 +- .../server/service/edge/EdgeNotificationService.java | 2 +- .../server/service/edge/rpc/EdgeEventStorageSettings.java | 2 +- .../thingsboard/server/service/edge/rpc/EdgeEventUtils.java | 2 +- .../thingsboard/server/service/edge/rpc/EdgeGrpcService.java | 2 +- .../thingsboard/server/service/edge/rpc/EdgeGrpcSession.java | 2 +- .../thingsboard/server/service/edge/rpc/EdgeRpcService.java | 2 +- .../thingsboard/server/service/edge/rpc/EdgeSessionState.java | 2 +- .../thingsboard/server/service/edge/rpc/EdgeSyncCursor.java | 2 +- .../edge/rpc/constructor/AdminSettingsMsgConstructor.java | 2 +- .../service/edge/rpc/constructor/AlarmMsgConstructor.java | 2 +- .../service/edge/rpc/constructor/AssetMsgConstructor.java | 2 +- .../service/edge/rpc/constructor/CustomerMsgConstructor.java | 2 +- .../service/edge/rpc/constructor/DashboardMsgConstructor.java | 2 +- .../service/edge/rpc/constructor/DeviceMsgConstructor.java | 2 +- .../edge/rpc/constructor/DeviceProfileMsgConstructor.java | 2 +- .../service/edge/rpc/constructor/EntityDataMsgConstructor.java | 2 +- .../service/edge/rpc/constructor/EntityViewMsgConstructor.java | 2 +- .../service/edge/rpc/constructor/RelationMsgConstructor.java | 2 +- .../service/edge/rpc/constructor/RuleChainMsgConstructor.java | 2 +- .../service/edge/rpc/constructor/UserMsgConstructor.java | 2 +- .../service/edge/rpc/constructor/WidgetTypeMsgConstructor.java | 2 +- .../edge/rpc/constructor/WidgetsBundleMsgConstructor.java | 2 +- .../service/edge/rpc/fetch/AdminSettingsEdgeEventFetcher.java | 2 +- .../server/service/edge/rpc/fetch/AssetsEdgeEventFetcher.java | 2 +- .../service/edge/rpc/fetch/BasePageableEdgeEventFetcher.java | 2 +- .../service/edge/rpc/fetch/BaseUsersEdgeEventFetcher.java | 2 +- .../edge/rpc/fetch/BaseWidgetsBundlesEdgeEventFetcher.java | 2 +- .../service/edge/rpc/fetch/CustomerEdgeEventFetcher.java | 2 +- .../service/edge/rpc/fetch/CustomerUsersEdgeEventFetcher.java | 2 +- .../service/edge/rpc/fetch/DashboardsEdgeEventFetcher.java | 2 +- .../service/edge/rpc/fetch/DeviceProfilesEdgeEventFetcher.java | 2 +- .../server/service/edge/rpc/fetch/EdgeEventFetcher.java | 2 +- .../server/service/edge/rpc/fetch/GeneralEdgeEventFetcher.java | 2 +- .../service/edge/rpc/fetch/RuleChainsEdgeEventFetcher.java | 2 +- .../edge/rpc/fetch/SystemWidgetsBundlesEdgeEventFetcher.java | 2 +- .../edge/rpc/fetch/TenantAdminUsersEdgeEventFetcher.java | 2 +- .../edge/rpc/fetch/TenantWidgetsBundlesEdgeEventFetcher.java | 2 +- .../service/edge/rpc/processor/AdminSettingsEdgeProcessor.java | 2 +- .../server/service/edge/rpc/processor/AlarmEdgeProcessor.java | 2 +- .../server/service/edge/rpc/processor/AssetEdgeProcessor.java | 2 +- .../server/service/edge/rpc/processor/BaseEdgeProcessor.java | 2 +- .../service/edge/rpc/processor/CustomerEdgeProcessor.java | 2 +- .../service/edge/rpc/processor/DashboardEdgeProcessor.java | 2 +- .../server/service/edge/rpc/processor/DeviceEdgeProcessor.java | 2 +- .../service/edge/rpc/processor/DeviceProfileEdgeProcessor.java | 2 +- .../server/service/edge/rpc/processor/EdgeProcessor.java | 2 +- .../server/service/edge/rpc/processor/EntityEdgeProcessor.java | 2 +- .../service/edge/rpc/processor/EntityViewEdgeProcessor.java | 2 +- .../service/edge/rpc/processor/RelationEdgeProcessor.java | 2 +- .../service/edge/rpc/processor/RuleChainEdgeProcessor.java | 2 +- .../service/edge/rpc/processor/TelemetryEdgeProcessor.java | 2 +- .../server/service/edge/rpc/processor/UserEdgeProcessor.java | 2 +- .../service/edge/rpc/processor/WidgetBundleEdgeProcessor.java | 2 +- .../service/edge/rpc/processor/WidgetTypeEdgeProcessor.java | 2 +- .../service/edge/rpc/sync/DefaultEdgeRequestsService.java | 2 +- .../server/service/edge/rpc/sync/EdgeRequestsService.java | 2 +- .../server/service/executors/DbCallbackExecutorService.java | 2 +- .../server/service/executors/ExternalCallExecutorService.java | 2 +- .../server/service/executors/GrpcCallbackExecutorService.java | 2 +- .../server/service/executors/SharedEventLoopGroupService.java | 2 +- .../gateway_device/DefaultGatewayNotificationsService.java | 2 +- .../service/gateway_device/GatewayNotificationsService.java | 2 +- .../server/service/importing/AbstractBulkImportService.java | 2 +- .../server/service/importing/BulkImportColumnType.java | 2 +- .../server/service/importing/BulkImportRequest.java | 2 +- .../thingsboard/server/service/importing/BulkImportResult.java | 2 +- .../server/service/importing/ImportedEntityInfo.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/CacheCleanupService.java | 2 +- .../server/service/install/update/DataUpdateService.java | 2 +- .../service/install/update/DefaultCacheCleanupService.java | 2 +- .../service/install/update/DefaultDataUpdateService.java | 2 +- .../server/service/install/update/PaginatedUpdater.java | 2 +- .../org/thingsboard/server/service/lwm2m/LwM2MService.java | 2 +- .../org/thingsboard/server/service/lwm2m/LwM2MServiceImpl.java | 2 +- .../thingsboard/server/service/mail/DefaultMailService.java | 2 +- .../thingsboard/server/service/mail/MailExecutorService.java | 2 +- .../server/service/ota/DefaultOtaPackageStateService.java | 2 +- .../thingsboard/server/service/ota/OtaPackageStateService.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 +- .../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 +- .../server/service/queue/TbTopicWithConsumerPerPartition.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/resource/DefaultTbResourceService.java | 2 +- .../thingsboard/server/service/resource/TbResourceService.java | 2 +- .../server/service/rpc/DefaultTbCoreDeviceRpcService.java | 2 +- .../server/service/rpc/DefaultTbRuleEngineRpcService.java | 2 +- .../server/service/rpc/FromDeviceRpcResponseActorMsg.java | 2 +- .../thingsboard/server/service/rpc/LocalRequestMetaData.java | 2 +- .../org/thingsboard/server/service/rpc/RemoveRpcActorMsg.java | 2 +- .../thingsboard/server/service/rpc/TbCoreDeviceRpcService.java | 2 +- .../java/org/thingsboard/server/service/rpc/TbRpcService.java | 2 +- .../server/service/rpc/TbRuleEngineDeviceRpcService.java | 2 +- .../server/service/rpc/ToDeviceRpcRequestActorMsg.java | 2 +- .../server/service/rule/DefaultTbRuleChainService.java | 2 +- .../thingsboard/server/service/rule/TbRuleChainService.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 +- .../server/service/security/auth/TokenOutdatingService.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 +- .../service/security/auth/oauth2/AppleOAuth2ClientMapper.java | 2 +- .../server/service/security/auth/oauth2/BasicMapperUtils.java | 2 +- .../service/security/auth/oauth2/BasicOAuth2ClientMapper.java | 2 +- .../server/service/security/auth/oauth2/CookieUtils.java | 2 +- .../service/security/auth/oauth2/CustomOAuth2ClientMapper.java | 2 +- .../service/security/auth/oauth2/GithubOAuth2ClientMapper.java | 2 +- .../oauth2/HttpCookieOAuth2AuthorizationRequestRepository.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 +- .../service/security/auth/oauth2/TbOAuth2ParameterNames.java | 2 +- .../server/service/security/auth/rest/LoginRequest.java | 2 +- .../server/service/security/auth/rest/LoginResponse.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/ActivateUserRequest.java | 2 +- .../server/service/security/model/ChangePasswordRequest.java | 2 +- .../server/service/security/model/JwtTokenPair.java | 2 +- .../service/security/model/ResetPasswordEmailRequest.java | 2 +- .../server/service/security/model/ResetPasswordRequest.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/JwtTokenFactory.java | 2 +- .../service/security/model/token/OAuth2AppTokenFactory.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/TbAbstractSubCtx.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/TbEntityCountSubCtx.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/CmdUpdate.java | 2 +- .../server/service/telemetry/cmd/v2/CmdUpdateType.java | 2 +- .../thingsboard/server/service/telemetry/cmd/v2/DataCmd.java | 2 +- .../server/service/telemetry/cmd/v2/DataUpdate.java | 2 +- .../server/service/telemetry/cmd/v2/EntityCountCmd.java | 2 +- .../service/telemetry/cmd/v2/EntityCountUnsubscribeCmd.java | 2 +- .../server/service/telemetry/cmd/v2/EntityCountUpdate.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/BasicCredentialsValidationResult.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 +- .../thingsboard/server/service/ttl/AlarmsCleanUpService.java | 2 +- .../server/service/ttl/EdgeEventsCleanUpService.java | 2 +- .../thingsboard/server/service/ttl/EventsCleanUpService.java | 2 +- .../server/service/ttl/TimeseriesCleanUpService.java | 2 +- .../thingsboard/server/service/ttl/rpc/RpcCleanUpService.java | 2 +- .../server/service/update/DefaultUpdateService.java | 2 +- .../org/thingsboard/server/service/update/UpdateService.java | 2 +- .../src/main/java/org/thingsboard/server/utils/CsvUtils.java | 2 +- .../thingsboard/server/utils/EventDeduplicationExecutor.java | 2 +- .../src/main/java/org/thingsboard/server/utils/MiscUtils.java | 2 +- .../main/java/org/thingsboard/server/utils/TypeCastUtil.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 +- .../org/thingsboard/server/actors/ActorSystemContextTest.java | 2 +- .../server/actors/device/DeviceActorMessageProcessorTest.java | 2 +- .../org/thingsboard/server/actors/stats/StatsActorTest.java | 2 +- .../thingsboard/server/actors/stats/StatsPersistMsgTest.java | 2 +- .../server/cache/CaffeineCacheDefaultConfigurationTest.java | 2 +- .../thingsboard/server/controller/AbstractControllerTest.java | 2 +- .../server/controller/AbstractInMemoryStorageTest.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 +- .../thingsboard/server/controller/BaseEdgeControllerTest.java | 2 +- .../server/controller/BaseEdgeEventControllerTest.java | 2 +- .../server/controller/BaseEntityQueryControllerTest.java | 2 +- .../server/controller/BaseEntityViewControllerTest.java | 2 +- .../server/controller/BaseOtaPackageControllerTest.java | 2 +- .../thingsboard/server/controller/BaseRpcControllerTest.java | 2 +- .../server/controller/BaseRuleChainControllerTest.java | 2 +- .../server/controller/BaseTbResourceControllerTest.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/EdgeControllerSqlTest.java | 2 +- .../server/controller/sql/EdgeEventControllerSqlTest.java | 2 +- .../server/controller/sql/EntityQueryControllerSqlTest.java | 2 +- .../server/controller/sql/EntityViewControllerSqlTest.java | 2 +- .../server/controller/sql/OtaPackageControllerSqlTest.java | 2 +- .../thingsboard/server/controller/sql/RpcControllerTest.java | 2 +- .../server/controller/sql/RuleChainControllerSqlTest.java | 2 +- .../server/controller/sql/TbResourceControllerSqlTest.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 +- .../test/java/org/thingsboard/server/edge/BaseEdgeTest.java | 2 +- .../java/org/thingsboard/server/edge/EdgeSqlTestSuite.java | 2 +- .../org/thingsboard/server/edge/imitator/EdgeImitator.java | 2 +- .../test/java/org/thingsboard/server/edge/sql/EdgeSqlTest.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 +- .../org/thingsboard/server/service/ServiceSqlTestSuite.java | 2 +- .../service/cluster/routing/HashPartitionServiceTest.java | 2 +- .../edge/rpc/constructor/RuleChainMsgConstructorTest.java | 2 +- .../service/install/PsqlEntityDatabaseSchemaServiceTest.java | 2 +- .../service/install/update/DefaultDataUpdateServiceTest.java | 2 +- .../org/thingsboard/server/service/mail/TestMailService.java | 2 +- .../server/service/queue/TbMsgPackProcessingContextTest.java | 2 +- .../server/service/resource/sql/BaseTbResourceServiceTest.java | 2 +- .../server/service/security/auth/TokenOutdatingTest.java | 2 +- .../service/sql/SequentialTimeseriesPersistenceTest.java | 2 +- .../server/service/state/DefaultDeviceStateServiceTest.java | 2 +- .../server/service/ttl/EventsCleanUpServiceTest.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 +- .../server/transport/AbstractTransportIntegrationTest.java | 2 +- .../thingsboard/server/transport/TransportNoSqlTestSuite.java | 2 +- .../thingsboard/server/transport/TransportSqlTestSuite.java | 2 +- .../server/transport/coap/AbstractCoapIntegrationTest.java | 2 +- .../coap/attributes/AbstractCoapAttributesIntegrationTest.java | 2 +- .../request/AbstractCoapAttributesRequestIntegrationTest.java | 2 +- .../AbstractCoapAttributesRequestJsonIntegrationTest.java | 2 +- .../AbstractCoapAttributesRequestProtoIntegrationTest.java | 2 +- .../sql/CoapAttributesRequestJsonSqlIntegrationTest.java | 2 +- .../sql/CoapAttributesRequestProtoSqlIntegrationTest.java | 2 +- .../request/sql/CoapAttributesRequestSqlIntegrationTest.java | 2 +- .../updates/AbstractCoapAttributesUpdatesIntegrationTest.java | 2 +- .../AbstractCoapAttributesUpdatesJsonIntegrationTest.java | 2 +- .../AbstractCoapAttributesUpdatesProtoIntegrationTest.java | 2 +- .../updates/sql/CoapAttributesUpdatesSqlIntegrationTest.java | 2 +- .../sql/CoapAttributesUpdatesSqlJsonIntegrationTest.java | 2 +- .../sql/CoapAttributesUpdatesSqlProtoIntegrationTest.java | 2 +- .../transport/coap/claim/AbstractCoapClaimDeviceTest.java | 2 +- .../transport/coap/claim/AbstractCoapClaimJsonDeviceTest.java | 2 +- .../transport/coap/claim/AbstractCoapClaimProtoDeviceTest.java | 2 +- .../transport/coap/claim/sql/CoapClaimDeviceJsonSqlTest.java | 2 +- .../transport/coap/claim/sql/CoapClaimDeviceProtoSqlTest.java | 2 +- .../transport/coap/claim/sql/CoapClaimDeviceSqlTest.java | 2 +- .../coap/provision/AbstractCoapProvisionJsonDeviceTest.java | 2 +- .../coap/provision/AbstractCoapProvisionProtoDeviceTest.java | 2 +- .../coap/provision/sql/CoapProvisionDeviceJsonSqlTest.java | 2 +- .../coap/provision/sql/CoapProvisionDeviceProtoSqlTest.java | 2 +- .../rpc/AbstractCoapServerSideRpcDefaultIntegrationTest.java | 2 +- .../coap/rpc/AbstractCoapServerSideRpcIntegrationTest.java | 2 +- .../coap/rpc/AbstractCoapServerSideRpcJsonIntegrationTest.java | 2 +- .../rpc/AbstractCoapServerSideRpcProtoIntegrationTest.java | 2 +- .../coap/rpc/sql/CoapServerSideRpcJsonSqlIntegrationTest.java | 2 +- .../coap/rpc/sql/CoapServerSideRpcProtoSqlIntegrationTest.java | 2 +- .../coap/rpc/sql/CoapServerSideRpcSqlIntegrationTest.java | 2 +- .../attributes/AbstractCoapAttributesIntegrationTest.java | 2 +- .../attributes/AbstractCoapAttributesJsonIntegrationTest.java | 2 +- .../attributes/AbstractCoapAttributesProtoIntegrationTest.java | 2 +- .../attributes/sql/CoapAttributesSqlIntegrationTest.java | 2 +- .../attributes/sql/CoapAttributesSqlJsonIntegrationTest.java | 2 +- .../attributes/sql/CoapAttributesSqlProtoIntegrationTest.java | 2 +- .../timeseries/AbstractCoapTimeseriesIntegrationTest.java | 2 +- .../timeseries/AbstractCoapTimeseriesJsonIntegrationTest.java | 2 +- .../timeseries/AbstractCoapTimeseriesProtoIntegrationTest.java | 2 +- .../timeseries/nosql/CoapTimeseriesNoSqlIntegrationTest.java | 2 +- .../nosql/CoapTimeseriesNoSqlJsonIntegrationTest.java | 2 +- .../nosql/CoapTimeseriesNoSqlProtoIntegrationTest.java | 2 +- .../timeseries/sql/CoapTimeseriesSqlIntegrationTest.java | 2 +- .../timeseries/sql/CoapTimeseriesSqlJsonIntegrationTest.java | 2 +- .../timeseries/sql/CoapTimeseriesSqlProtoIntegrationTest.java | 2 +- .../server/transport/lwm2m/AbstractLwM2MIntegrationTest.java | 2 +- .../thingsboard/server/transport/lwm2m/Lwm2mTestHelper.java | 2 +- .../server/transport/lwm2m/client/FwLwM2MDevice.java | 2 +- .../server/transport/lwm2m/client/LwM2MLocationParams.java | 2 +- .../server/transport/lwm2m/client/LwM2MTestClient.java | 2 +- .../transport/lwm2m/client/LwM2mBinaryAppDataContainer.java | 2 +- .../server/transport/lwm2m/client/LwM2mLocation.java | 2 +- .../server/transport/lwm2m/client/LwM2mTemperatureSensor.java | 2 +- .../server/transport/lwm2m/client/SimpleLwM2MDevice.java | 2 +- .../server/transport/lwm2m/client/SwLwM2MDevice.java | 2 +- .../transport/lwm2m/ota/AbstractOtaLwM2MIntegrationTest.java | 2 +- .../transport/lwm2m/ota/sql/OtaLwM2MIntegrationTest.java | 2 +- .../transport/lwm2m/rpc/AbstractRpcLwM2MIntegrationTest.java | 2 +- .../transport/lwm2m/rpc/sql/RpcLwm2mIntegrationCreateTest.java | 2 +- .../transport/lwm2m/rpc/sql/RpcLwm2mIntegrationDeleteTest.java | 2 +- .../lwm2m/rpc/sql/RpcLwm2mIntegrationDiscoverTest.java | 2 +- .../lwm2m/rpc/sql/RpcLwm2mIntegrationExecuteTest.java | 2 +- .../lwm2m/rpc/sql/RpcLwm2mIntegrationObserveTest.java | 2 +- .../transport/lwm2m/rpc/sql/RpcLwm2mIntegrationReadTest.java | 2 +- .../lwm2m/rpc/sql/RpcLwm2mIntegrationWriteAttributesTest.java | 2 +- .../transport/lwm2m/rpc/sql/RpcLwm2mIntegrationWriteTest.java | 2 +- .../lwm2m/security/AbstractSecurityLwM2MIntegrationTest.java | 2 +- .../lwm2m/security/sql/NoSecLwM2MIntegrationTest.java | 2 +- .../transport/lwm2m/security/sql/PskLwm2mIntegrationTest.java | 2 +- .../transport/lwm2m/security/sql/RpkLwM2MIntegrationTest.java | 2 +- .../lwm2m/security/sql/X509_NoTrustLwM2MIntegrationTest.java | 2 +- .../lwm2m/security/sql/X509_TrustLwM2MIntegrationTest.java | 2 +- .../transport/lwm2m/server/LwM2mTransportServerHelperTest.java | 2 +- .../server/transport/mqtt/AbstractMqttIntegrationTest.java | 2 +- .../mqtt/attributes/AbstractMqttAttributesIntegrationTest.java | 2 +- ...tAttributesRequestBackwardCompatibilityIntegrationTest.java | 2 +- .../request/AbstractMqttAttributesRequestIntegrationTest.java | 2 +- .../AbstractMqttAttributesRequestJsonIntegrationTest.java | 2 +- .../AbstractMqttAttributesRequestProtoIntegrationTest.java | 2 +- ...tAttributesRequestBackwardCompatibilityIntegrationTest.java | 2 +- .../request/sql/MqttAttributesRequestIntegrationTest.java | 2 +- .../request/sql/MqttAttributesRequestJsonIntegrationTest.java | 2 +- .../request/sql/MqttAttributesRequestProtoIntegrationTest.java | 2 +- ...tAttributesUpdatesBackwardCompatibilityIntegrationTest.java | 2 +- .../updates/AbstractMqttAttributesUpdatesIntegrationTest.java | 2 +- .../AbstractMqttAttributesUpdatesJsonIntegrationTest.java | 2 +- .../AbstractMqttAttributesUpdatesProtoIntegrationTest.java | 2 +- ...tAttributesUpdatesBackwardCompatibilityIntegrationTest.java | 2 +- .../updates/sql/MqttAttributesUpdatesIntegrationTest.java | 2 +- .../updates/sql/MqttAttributesUpdatesJsonIntegrationTest.java | 2 +- .../updates/sql/MqttAttributesUpdatesProtoIntegrationTest.java | 2 +- .../AbstractMqttClaimBackwardCompatibilityDeviceTest.java | 2 +- .../transport/mqtt/claim/AbstractMqttClaimDeviceTest.java | 2 +- .../transport/mqtt/claim/AbstractMqttClaimJsonDeviceTest.java | 2 +- .../transport/mqtt/claim/AbstractMqttClaimProtoDeviceTest.java | 2 +- .../claim/sql/MqttClaimDeviceBackwardCompatibilityTest.java | 2 +- .../transport/mqtt/claim/sql/MqttClaimDeviceJsonTest.java | 2 +- .../transport/mqtt/claim/sql/MqttClaimDeviceProtoTest.java | 2 +- .../server/transport/mqtt/claim/sql/MqttClaimDeviceTest.java | 2 +- .../mqtt/credentials/sql/BasicMqttCredentialsTest.java | 2 +- .../mqtt/provision/AbstractMqttProvisionJsonDeviceTest.java | 2 +- .../mqtt/provision/AbstractMqttProvisionProtoDeviceTest.java | 2 +- .../mqtt/provision/sql/MqttProvisionDeviceJsonTest.java | 2 +- .../mqtt/provision/sql/MqttProvisionDeviceProtoTest.java | 2 +- ...tMqttServerSideRpcBackwardCompatibilityIntegrationTest.java | 2 +- .../rpc/AbstractMqttServerSideRpcDefaultIntegrationTest.java | 2 +- .../mqtt/rpc/AbstractMqttServerSideRpcIntegrationTest.java | 2 +- .../mqtt/rpc/AbstractMqttServerSideRpcJsonIntegrationTest.java | 2 +- .../rpc/AbstractMqttServerSideRpcProtoIntegrationTest.java | 2 +- .../MqttServerSideRpcBackwardCompatibilityIntegrationTest.java | 2 +- .../mqtt/rpc/sql/MqttServerSideRpcIntegrationTest.java | 2 +- .../mqtt/rpc/sql/MqttServerSideRpcJsonIntegrationTest.java | 2 +- .../mqtt/rpc/sql/MqttServerSideRpcProtoIntegrationTest.java | 2 +- .../attributes/AbstractMqttAttributesIntegrationTest.java | 2 +- .../attributes/AbstractMqttAttributesJsonIntegrationTest.java | 2 +- .../attributes/AbstractMqttAttributesProtoIntegrationTest.java | 2 +- .../attributes/sql/MqttAttributesIntegrationTest.java | 2 +- .../attributes/sql/MqttAttributesJsonIntegrationTest.java | 2 +- .../attributes/sql/MqttAttributesProtoIntegrationTest.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 +- .../server/util/EventDeduplicationExecutorTest.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 +- .../thingsboard/server/actors/TbRuleNodeUpdateException.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/cache/pom.xml | 2 +- .../src/main/java/org/thingsboard/server/cache/CacheSpecs.java | 2 +- .../thingsboard/server/cache/CaffeineCacheConfiguration.java | 2 +- .../thingsboard/server/cache/TBRedisCacheConfiguration.java | 2 +- .../thingsboard/server/cache/TBRedisClusterConfiguration.java | 2 +- .../server/cache/TBRedisStandaloneConfiguration.java | 2 +- .../thingsboard/server/cache/ota/CaffeineOtaPackageCache.java | 2 +- .../org/thingsboard/server/cache/ota/OtaPackageDataCache.java | 2 +- .../thingsboard/server/cache/ota/RedisOtaPackageDataCache.java | 2 +- .../server/cache/CaffeineCacheConfigurationTest.java | 2 +- common/cluster-api/pom.xml | 2 +- .../java/org/thingsboard/server/cluster/TbClusterService.java | 2 +- .../main/java/org/thingsboard/server/queue/QueueService.java | 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 +- common/cluster-api/src/main/proto/jsinvoke.proto | 2 +- common/cluster-api/src/main/proto/queue.proto | 2 +- common/coap-server/pom.xml | 2 +- .../org/thingsboard/server/coapserver/CoapServerContext.java | 2 +- .../org/thingsboard/server/coapserver/CoapServerService.java | 2 +- .../server/coapserver/DefaultCoapServerService.java | 2 +- .../server/coapserver/TbCoapDtlsCertificateVerifier.java | 2 +- .../server/coapserver/TbCoapDtlsSessionInMemoryStorage.java | 2 +- .../thingsboard/server/coapserver/TbCoapDtlsSessionInfo.java | 2 +- .../org/thingsboard/server/coapserver/TbCoapDtlsSettings.java | 2 +- .../thingsboard/server/coapserver/TbCoapServerComponent.java | 2 +- .../server/coapserver/TbCoapServerMessageDeliverer.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 +- .../org/thingsboard/server/dao/device/claim/ReclaimResult.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/edge/EdgeEventService.java | 2 +- .../main/java/org/thingsboard/server/dao/edge/EdgeService.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 +- .../java/org/thingsboard/server/dao/ota/OtaPackageService.java | 2 +- .../org/thingsboard/server/dao/relation/RelationService.java | 2 +- .../org/thingsboard/server/dao/resource/ResourceService.java | 2 +- .../main/java/org/thingsboard/server/dao/rpc/RpcService.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 +- .../org/thingsboard/server/common/data/CoapDeviceType.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 +- .../java/org/thingsboard/server/common/data/EdgeUtils.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/HasOtaPackage.java | 2 +- .../java/org/thingsboard/server/common/data/HasTenantId.java | 2 +- .../java/org/thingsboard/server/common/data/HomeDashboard.java | 2 +- .../org/thingsboard/server/common/data/HomeDashboardInfo.java | 2 +- .../java/org/thingsboard/server/common/data/OtaPackage.java | 2 +- .../org/thingsboard/server/common/data/OtaPackageInfo.java | 2 +- .../java/org/thingsboard/server/common/data/ResourceType.java | 2 +- .../java/org/thingsboard/server/common/data/ResourceUtils.java | 2 +- .../server/common/data/SaveDeviceWithCredentialsRequest.java | 2 +- .../server/common/data/SaveOtaPackageInfoRequest.java | 2 +- .../org/thingsboard/server/common/data/SearchTextBased.java | 2 +- .../server/common/data/SearchTextBasedWithAdditionalInfo.java | 2 +- .../org/thingsboard/server/common/data/ShortCustomerInfo.java | 2 +- .../java/org/thingsboard/server/common/data/StringUtils.java | 2 +- .../java/org/thingsboard/server/common/data/TbProperty.java | 2 +- .../java/org/thingsboard/server/common/data/TbResource.java | 2 +- .../org/thingsboard/server/common/data/TbResourceInfo.java | 2 +- .../org/thingsboard/server/common/data/TbTransportService.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 +- .../org/thingsboard/server/common/data/alarm/EntityAlarm.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 +- .../lwm2m/AbstractLwM2MBootstrapClientCredentialWithKeys.java | 2 +- .../credentials/lwm2m/AbstractLwM2MClientCredential.java | 2 +- .../lwm2m/AbstractLwM2MClientSecurityCredential.java | 2 +- .../credentials/lwm2m/LwM2MBootstrapClientCredential.java | 2 +- .../credentials/lwm2m/LwM2MBootstrapClientCredentials.java | 2 +- .../data/device/credentials/lwm2m/LwM2MClientCredential.java | 2 +- .../data/device/credentials/lwm2m/LwM2MDeviceCredentials.java | 2 +- .../data/device/credentials/lwm2m/LwM2MSecurityMode.java | 2 +- .../credentials/lwm2m/NoSecBootstrapClientCredential.java | 2 +- .../data/device/credentials/lwm2m/NoSecClientCredential.java | 2 +- .../device/credentials/lwm2m/PSKBootstrapClientCredential.java | 2 +- .../data/device/credentials/lwm2m/PSKClientCredential.java | 2 +- .../device/credentials/lwm2m/RPKBootstrapClientCredential.java | 2 +- .../data/device/credentials/lwm2m/RPKClientCredential.java | 2 +- .../credentials/lwm2m/X509BootstrapClientCredential.java | 2 +- .../data/device/credentials/lwm2m/X509ClientCredential.java | 2 +- .../data/device/data/CoapDeviceTransportConfiguration.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 +- .../thingsboard/server/common/data/device/data/PowerMode.java | 2 +- .../common/data/device/data/PowerSavingConfiguration.java | 2 +- .../data/device/data/SnmpDeviceTransportConfiguration.java | 2 +- .../server/common/data/device/profile/AlarmCondition.java | 2 +- .../common/data/device/profile/AlarmConditionFilter.java | 2 +- .../common/data/device/profile/AlarmConditionFilterKey.java | 2 +- .../common/data/device/profile/AlarmConditionKeyType.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 +- .../profile/CoapDeviceProfileTransportConfiguration.java | 2 +- .../data/device/profile/CoapDeviceTypeConfiguration.java | 2 +- .../server/common/data/device/profile/CustomTimeSchedule.java | 2 +- .../common/data/device/profile/CustomTimeScheduleItem.java | 2 +- .../device/profile/DefaultCoapDeviceTypeConfiguration.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/EfentoCoapDeviceTypeConfiguration.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 +- .../profile/SnmpDeviceProfileTransportConfiguration.java | 2 +- .../common/data/device/profile/SpecificTimeSchedule.java | 2 +- .../data/device/profile/TransportPayloadTypeConfiguration.java | 2 +- .../common/data/device/profile/lwm2m/ObjectAttributes.java | 2 +- .../common/data/device/profile/lwm2m/OtherConfiguration.java | 2 +- .../device/profile/lwm2m/TelemetryMappingConfiguration.java | 2 +- .../bootstrap/AbstractLwM2MBootstrapServerCredential.java | 2 +- .../lwm2m/bootstrap/LwM2MBootstrapServerCredential.java | 2 +- .../lwm2m/bootstrap/LwM2MBootstrapServersConfiguration.java | 2 +- .../profile/lwm2m/bootstrap/LwM2MServerSecurityConfig.java | 2 +- .../lwm2m/bootstrap/LwM2MServerSecurityConfigDefault.java | 2 +- .../lwm2m/bootstrap/NoSecLwM2MBootstrapServerCredential.java | 2 +- .../lwm2m/bootstrap/PSKLwM2MBootstrapServerCredential.java | 2 +- .../lwm2m/bootstrap/RPKLwM2MBootstrapServerCredential.java | 2 +- .../lwm2m/bootstrap/X509LwM2MBootstrapServerCredential.java | 2 +- .../java/org/thingsboard/server/common/data/edge/Edge.java | 2 +- .../org/thingsboard/server/common/data/edge/EdgeEvent.java | 2 +- .../server/common/data/edge/EdgeEventActionType.java | 2 +- .../org/thingsboard/server/common/data/edge/EdgeEventType.java | 2 +- .../java/org/thingsboard/server/common/data/edge/EdgeInfo.java | 2 +- .../thingsboard/server/common/data/edge/EdgeSearchQuery.java | 2 +- .../server/common/data/entityview/EntityViewSearchQuery.java | 2 +- .../org/thingsboard/server/common/data/event/DebugEvent.java | 2 +- .../server/common/data/event/DebugRuleChainEventFilter.java | 2 +- .../server/common/data/event/DebugRuleNodeEventFilter.java | 2 +- .../thingsboard/server/common/data/event/ErrorEventFilter.java | 2 +- .../org/thingsboard/server/common/data/event/EventFilter.java | 2 +- .../org/thingsboard/server/common/data/event/EventType.java | 2 +- .../server/common/data/event/LifeCycleEventFilter.java | 2 +- .../server/common/data/event/StatisticsEventFilter.java | 2 +- .../common/data/exception/ApiUsageLimitsExceededException.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 +- .../org/thingsboard/server/common/data/id/EdgeEventId.java | 2 +- .../java/org/thingsboard/server/common/data/id/EdgeId.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 | 2 +- .../java/org/thingsboard/server/common/data/id/IdBased.java | 2 +- .../java/org/thingsboard/server/common/data/id/NodeId.java | 2 +- .../common/data/id/OAuth2ClientRegistrationTemplateId.java | 2 +- .../org/thingsboard/server/common/data/id/OAuth2DomainId.java | 2 +- .../org/thingsboard/server/common/data/id/OAuth2MobileId.java | 2 +- .../org/thingsboard/server/common/data/id/OAuth2ParamsId.java | 2 +- .../server/common/data/id/OAuth2RegistrationId.java | 2 +- .../org/thingsboard/server/common/data/id/OtaPackageId.java | 2 +- .../main/java/org/thingsboard/server/common/data/id/RpcId.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 +- .../org/thingsboard/server/common/data/id/TbResourceId.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 +- .../server/common/data/kv/TsKvLatestRemovingResult.java | 2 +- .../java/org/thingsboard/server/common/data/kv/TsKvQuery.java | 2 +- .../thingsboard/server/common/data/lwm2m/LwM2mConstants.java | 2 +- .../thingsboard/server/common/data/lwm2m/LwM2mInstance.java | 2 +- .../org/thingsboard/server/common/data/lwm2m/LwM2mObject.java | 2 +- .../server/common/data/lwm2m/LwM2mResourceObserve.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 +- .../common/data/oauth2/OAuth2ClientRegistrationTemplate.java | 2 +- .../server/common/data/oauth2/OAuth2CustomMapperConfig.java | 2 +- .../thingsboard/server/common/data/oauth2/OAuth2Domain.java | 2 +- .../server/common/data/oauth2/OAuth2DomainInfo.java | 2 +- .../org/thingsboard/server/common/data/oauth2/OAuth2Info.java | 2 +- .../server/common/data/oauth2/OAuth2MapperConfig.java | 2 +- .../thingsboard/server/common/data/oauth2/OAuth2Mobile.java | 2 +- .../server/common/data/oauth2/OAuth2MobileInfo.java | 2 +- .../thingsboard/server/common/data/oauth2/OAuth2Params.java | 2 +- .../server/common/data/oauth2/OAuth2ParamsInfo.java | 2 +- .../server/common/data/oauth2/OAuth2Registration.java | 2 +- .../server/common/data/oauth2/OAuth2RegistrationInfo.java | 2 +- .../thingsboard/server/common/data/oauth2/PlatformType.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 +- .../thingsboard/server/common/data/ota/ChecksumAlgorithm.java | 2 +- .../org/thingsboard/server/common/data/ota/OtaPackageKey.java | 2 +- .../org/thingsboard/server/common/data/ota/OtaPackageType.java | 2 +- .../server/common/data/ota/OtaPackageUpdateStatus.java | 2 +- .../org/thingsboard/server/common/data/ota/OtaPackageUtil.java | 2 +- .../server/common/data/page/BasePageDataIterable.java | 2 +- .../java/org/thingsboard/server/common/data/page/PageData.java | 2 +- .../thingsboard/server/common/data/page/PageDataIterable.java | 2 +- .../server/common/data/page/PageDataIterableByTenant.java | 2 +- .../common/data/page/PageDataIterableByTenantIdEntityId.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 +- .../server/common/data/query/EdgeSearchQueryFilter.java | 2 +- .../thingsboard/server/common/data/query/EdgeTypeFilter.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 +- .../thingsboard/server/common/data/query/EntityTypeFilter.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/RelationEntityTypeFilter.java | 2 +- .../server/common/data/relation/RelationTypeGroup.java | 2 +- .../server/common/data/relation/RelationsSearchParameters.java | 2 +- .../main/java/org/thingsboard/server/common/data/rpc/Rpc.java | 2 +- .../java/org/thingsboard/server/common/data/rpc/RpcError.java | 2 +- .../java/org/thingsboard/server/common/data/rpc/RpcStatus.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 +- .../server/common/data/rule/RuleChainOutputLabelsUsage.java | 2 +- .../org/thingsboard/server/common/data/rule/RuleChainType.java | 2 +- .../server/common/data/rule/RuleChainUpdateResult.java | 2 +- .../java/org/thingsboard/server/common/data/rule/RuleNode.java | 2 +- .../org/thingsboard/server/common/data/rule/RuleNodeState.java | 2 +- .../server/common/data/rule/RuleNodeUpdateResult.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 +- .../common/data/security/event/UserAuthDataChangedEvent.java | 2 +- .../server/common/data/security/model/JwtToken.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 +- .../server/common/data/transport/resource/ResourceType.java | 2 +- .../common/data/transport/snmp/AuthenticationProtocol.java | 2 +- .../server/common/data/transport/snmp/PrivacyProtocol.java | 2 +- .../common/data/transport/snmp/SnmpCommunicationSpec.java | 2 +- .../server/common/data/transport/snmp/SnmpMapping.java | 2 +- .../server/common/data/transport/snmp/SnmpMethod.java | 2 +- .../server/common/data/transport/snmp/SnmpProtocolVersion.java | 2 +- .../snmp/config/MultipleMappingsSnmpCommunicationConfig.java | 2 +- .../snmp/config/RepeatingQueryingSnmpCommunicationConfig.java | 2 +- .../data/transport/snmp/config/SnmpCommunicationConfig.java | 2 +- .../impl/ClientAttributesQueryingSnmpCommunicationConfig.java | 2 +- .../impl/SharedAttributesSettingSnmpCommunicationConfig.java | 2 +- .../config/impl/TelemetryQueryingSnmpCommunicationConfig.java | 2 +- .../config/impl/ToDeviceRpcRequestSnmpCommunicationConfig.java | 2 +- .../org/thingsboard/server/common/data/validation/Length.java | 2 +- .../org/thingsboard/server/common/data/validation/NoXss.java | 2 +- .../thingsboard/server/common/data/widget/BaseWidgetType.java | 2 +- .../org/thingsboard/server/common/data/widget/WidgetType.java | 2 +- .../server/common/data/widget/WidgetTypeDetails.java | 2 +- .../thingsboard/server/common/data/widget/WidgetTypeInfo.java | 2 +- .../thingsboard/server/common/data/widget/WidgetsBundle.java | 2 +- .../org/thingsboard/server/common/data/UUIDConverterTest.java | 2 +- .../org/thingsboard/server/common/data/id/EntityIdTest.java | 2 +- common/edge-api/pom.xml | 2 +- .../thingsboard/edge/exception/EdgeConnectionException.java | 2 +- .../src/main/java/org/thingsboard/edge/rpc/EdgeGrpcClient.java | 2 +- .../src/main/java/org/thingsboard/edge/rpc/EdgeRpcClient.java | 2 +- common/edge-api/src/main/proto/edge.proto | 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 +- .../org/thingsboard/server/common/msg/TbActorStopReason.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 +- .../org/thingsboard/server/common/msg/TbMsgProcessingCtx.java | 2 +- .../server/common/msg/TbMsgProcessingStackItem.java | 2 +- .../thingsboard/server/common/msg/TbRuleEngineActorMsg.java | 2 +- .../server/common/msg/ToDeviceActorNotificationMsg.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 +- .../thingsboard/server/common/msg/edge/EdgeEventUpdateMsg.java | 2 +- .../server/common/msg/plugin/ComponentLifecycleMsg.java | 2 +- .../server/common/msg/plugin/RuleNodeUpdatedMsg.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 +- .../server/common/msg/rpc/FromDeviceRpcResponse.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 +- .../server/common/msg/queue/TopicPartitionInfoTest.java | 2 +- common/pom.xml | 2 +- common/queue/pom.xml | 2 +- .../java/org/thingsboard/server/queue/DefaultQueueService.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/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 +- .../thingsboard/server/queue/discovery/PartitionService.java | 2 +- .../server/queue/discovery/TbApplicationEventListener.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 +- .../queue/discovery/event/ClusterTopologyChangeEvent.java | 2 +- .../server/queue/discovery/event/PartitionChangeEvent.java | 2 +- .../server/queue/discovery/event/ServiceListChangedEvent.java | 2 +- .../server/queue/discovery/event/TbApplicationEvent.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/TbKafkaConsumerStatisticConfig.java | 2 +- .../server/queue/kafka/TbKafkaConsumerStatsService.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/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/AfterContextReady.java | 2 +- .../java/org/thingsboard/server/queue/util/AfterStartUp.java | 2 +- .../org/thingsboard/server/queue/util/TbCoreComponent.java | 2 +- .../server/queue/util/TbLwM2mBootstrapTransportComponent.java | 2 +- .../server/queue/util/TbLwM2mTransportComponent.java | 2 +- .../thingsboard/server/queue/util/TbRuleEngineComponent.java | 2 +- .../server/queue/util/TbSnmpTransportComponent.java | 2 +- .../thingsboard/server/queue/util/TbTransportComponent.java | 2 +- .../server/queue/common/DefaultTbQueueRequestTemplateTest.java | 2 +- .../thingsboard/server/queue/memory/InMemoryStorageTest.java | 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/AbstractCoapTransportResource.java | 2 +- .../server/transport/coap/CoapTransportContext.java | 2 +- .../server/transport/coap/CoapTransportResource.java | 2 +- .../server/transport/coap/CoapTransportService.java | 2 +- .../server/transport/coap/OtaPackageTransportResource.java | 2 +- .../server/transport/coap/TbCoapMessageObserver.java | 2 +- .../server/transport/coap/TransportConfigurationContainer.java | 2 +- .../server/transport/coap/adaptors/CoapAdaptorUtils.java | 2 +- .../server/transport/coap/adaptors/CoapTransportAdaptor.java | 2 +- .../server/transport/coap/adaptors/JsonCoapAdaptor.java | 2 +- .../server/transport/coap/adaptors/ProtoCoapAdaptor.java | 2 +- .../transport/coap/callback/AbstractSyncSessionCallback.java | 2 +- .../server/transport/coap/callback/CoapDeviceAuthCallback.java | 2 +- .../server/transport/coap/callback/CoapEfentoCallback.java | 2 +- .../server/transport/coap/callback/CoapNoOpCallback.java | 2 +- .../server/transport/coap/callback/CoapOkCallback.java | 2 +- .../coap/callback/GetAttributesSyncSessionCallback.java | 2 +- .../coap/callback/ToServerRpcSyncSessionCallback.java | 2 +- .../server/transport/coap/client/CoapClientContext.java | 2 +- .../server/transport/coap/client/DefaultCoapClientContext.java | 2 +- .../thingsboard/server/transport/coap/client/NoSecClient.java | 2 +- .../server/transport/coap/client/NoSecObserveClient.java | 2 +- .../server/transport/coap/client/SecureClientNoAuth.java | 2 +- .../server/transport/coap/client/SecureClientX509.java | 2 +- .../server/transport/coap/client/TbCoapClientState.java | 2 +- .../server/transport/coap/client/TbCoapContentFormatUtil.java | 2 +- .../server/transport/coap/client/TbCoapObservationState.java | 2 +- .../transport/coap/efento/CoapEfentoTransportResource.java | 2 +- .../transport/coap/efento/adaptor/EfentoCoapAdaptor.java | 2 +- .../server/transport/coap/efento/utils/CoapEfentoUtils.java | 2 +- .../coap/src/main/proto/proto_measurement_types.proto | 2 +- common/transport/coap/src/main/proto/proto_measurements.proto | 2 +- common/transport/http/pom.xml | 2 +- .../thingsboard/server/transport/http/DeviceApiController.java | 2 +- .../server/transport/http/HttpTransportContext.java | 2 +- common/transport/lwm2m/pom.xml | 2 +- .../lwm2m/bootstrap/LwM2MTransportBootstrapService.java | 2 +- .../transport/lwm2m/bootstrap/secure/LwM2MBootstrapConfig.java | 2 +- .../lwm2m/bootstrap/secure/LwM2MBootstrapServers.java | 2 +- .../transport/lwm2m/bootstrap/secure/LwM2MServerBootstrap.java | 2 +- .../bootstrap/secure/LwM2mDefaultBootstrapSessionManager.java | 2 +- .../bootstrap/store/LwM2MBootstrapConfigStoreTaskProvider.java | 2 +- .../lwm2m/bootstrap/store/LwM2MBootstrapSecurityStore.java | 2 +- .../lwm2m/bootstrap/store/LwM2MConfigurationChecker.java | 2 +- .../bootstrap/store/LwM2MInMemoryBootstrapConfigStore.java | 2 +- .../server/transport/lwm2m/config/LwM2MSecureServerConfig.java | 2 +- .../transport/lwm2m/config/LwM2MTransportBootstrapConfig.java | 2 +- .../transport/lwm2m/config/LwM2MTransportServerConfig.java | 2 +- .../server/transport/lwm2m/config/LwM2mVersion.java | 2 +- .../lwm2m/secure/LwM2mCredentialsSecurityInfoValidator.java | 2 +- .../server/transport/lwm2m/secure/LwM2mRPkCredentials.java | 2 +- .../server/transport/lwm2m/secure/TbLwM2MAuthorizer.java | 2 +- .../transport/lwm2m/secure/TbLwM2MDtlsCertificateVerifier.java | 2 +- .../server/transport/lwm2m/secure/TbLwM2MSecurityInfo.java | 2 +- .../server/transport/lwm2m/secure/TbX509DtlsSessionInfo.java | 2 +- .../lwm2m/secure/credentials/LwM2MClientCredentials.java | 2 +- .../transport/lwm2m/server/AbstractLwM2mTransportResource.java | 2 +- .../transport/lwm2m/server/DefaultLwM2mTransportService.java | 2 +- .../server/transport/lwm2m/server/LwM2MNetworkConfig.java | 2 +- .../server/transport/lwm2m/server/LwM2MOperationType.java | 2 +- .../server/transport/lwm2m/server/LwM2MTransportService.java | 2 +- .../server/transport/lwm2m/server/LwM2mOtaConvert.java | 2 +- .../server/transport/lwm2m/server/LwM2mQueuedRequest.java | 2 +- .../server/transport/lwm2m/server/LwM2mServerListener.java | 2 +- .../server/transport/lwm2m/server/LwM2mSessionMsgListener.java | 2 +- .../transport/lwm2m/server/LwM2mTransportCoapResource.java | 2 +- .../server/transport/lwm2m/server/LwM2mTransportContext.java | 2 +- .../transport/lwm2m/server/LwM2mTransportServerHelper.java | 2 +- .../transport/lwm2m/server/LwM2mVersionedModelProvider.java | 2 +- .../transport/lwm2m/server/adaptors/LwM2MJsonAdaptor.java | 2 +- .../transport/lwm2m/server/adaptors/LwM2MTransportAdaptor.java | 2 +- .../lwm2m/server/attributes/DefaultLwM2MAttributesService.java | 2 +- .../lwm2m/server/attributes/LwM2MAttributesService.java | 2 +- .../transport/lwm2m/server/client/LwM2MAuthException.java | 2 +- .../server/transport/lwm2m/server/client/LwM2MClientState.java | 2 +- .../lwm2m/server/client/LwM2MClientStateException.java | 2 +- .../server/transport/lwm2m/server/client/LwM2mClient.java | 2 +- .../transport/lwm2m/server/client/LwM2mClientContext.java | 2 +- .../transport/lwm2m/server/client/LwM2mClientContextImpl.java | 2 +- .../server/transport/lwm2m/server/client/ModelObject.java | 2 +- .../transport/lwm2m/server/client/ParametersAnalyzeResult.java | 2 +- .../server/transport/lwm2m/server/client/ResourceValue.java | 2 +- .../transport/lwm2m/server/client/ResultsAddKeyValueProto.java | 2 +- .../server/transport/lwm2m/server/client/TbLwM2MResource.java | 2 +- .../transport/lwm2m/server/client/TbLwM2MResourceInstance.java | 2 +- .../transport/lwm2m/server/client/TbLwM2MSingleResource.java | 2 +- .../transport/lwm2m/server/client/TbLwM2mMultipleResource.java | 2 +- .../server/transport/lwm2m/server/client/TbResourceModel.java | 2 +- .../lwm2m/server/common/LwM2MExecutorAwareService.java | 2 +- .../lwm2m/server/downlink/AbstractTbLwM2MRequestCallback.java | 2 +- .../downlink/AbstractTbLwM2MTargetedDownlinkRequest.java | 2 +- .../lwm2m/server/downlink/DefaultLwM2mDownlinkMsgHandler.java | 2 +- .../lwm2m/server/downlink/DownlinkRequestCallback.java | 2 +- .../transport/lwm2m/server/downlink/HasContentFormat.java | 2 +- .../server/transport/lwm2m/server/downlink/HasVersionedId.java | 2 +- .../transport/lwm2m/server/downlink/HasVersionedIds.java | 2 +- .../lwm2m/server/downlink/LwM2mDownlinkMsgHandler.java | 2 +- .../lwm2m/server/downlink/TbLwM2MCancelAllObserveCallback.java | 2 +- .../lwm2m/server/downlink/TbLwM2MCancelAllRequest.java | 2 +- .../lwm2m/server/downlink/TbLwM2MCancelObserveCallback.java | 2 +- .../lwm2m/server/downlink/TbLwM2MCancelObserveRequest.java | 2 +- .../transport/lwm2m/server/downlink/TbLwM2MCreateRequest.java | 2 +- .../lwm2m/server/downlink/TbLwM2MCreateResponseCallback.java | 2 +- .../transport/lwm2m/server/downlink/TbLwM2MDeleteCallback.java | 2 +- .../transport/lwm2m/server/downlink/TbLwM2MDeleteRequest.java | 2 +- .../lwm2m/server/downlink/TbLwM2MDiscoverAllRequest.java | 2 +- .../lwm2m/server/downlink/TbLwM2MDiscoverCallback.java | 2 +- .../lwm2m/server/downlink/TbLwM2MDiscoverRequest.java | 2 +- .../lwm2m/server/downlink/TbLwM2MDownlinkRequest.java | 2 +- .../lwm2m/server/downlink/TbLwM2MExecuteCallback.java | 2 +- .../transport/lwm2m/server/downlink/TbLwM2MExecuteRequest.java | 2 +- .../transport/lwm2m/server/downlink/TbLwM2MLatchCallback.java | 2 +- .../lwm2m/server/downlink/TbLwM2MObserveAllRequest.java | 2 +- .../lwm2m/server/downlink/TbLwM2MObserveCallback.java | 2 +- .../transport/lwm2m/server/downlink/TbLwM2MObserveRequest.java | 2 +- .../transport/lwm2m/server/downlink/TbLwM2MReadCallback.java | 2 +- .../transport/lwm2m/server/downlink/TbLwM2MReadRequest.java | 2 +- .../lwm2m/server/downlink/TbLwM2MTargetedCallback.java | 2 +- .../lwm2m/server/downlink/TbLwM2MUplinkTargetedCallback.java | 2 +- .../lwm2m/server/downlink/TbLwM2MWriteAttributesCallback.java | 2 +- .../lwm2m/server/downlink/TbLwM2MWriteAttributesRequest.java | 2 +- .../lwm2m/server/downlink/TbLwM2MWriteReplaceRequest.java | 2 +- .../lwm2m/server/downlink/TbLwM2MWriteResponseCallback.java | 2 +- .../lwm2m/server/downlink/TbLwM2MWriteUpdateRequest.java | 2 +- .../AbstractTbLwM2MTargetedDownlinkCompositeRequest.java | 2 +- .../downlink/composite/TbLwM2MReadCompositeCallback.java | 2 +- .../server/downlink/composite/TbLwM2MReadCompositeRequest.java | 2 +- .../downlink/composite/TbLwM2MWriteCompositeRequest.java | 2 +- .../composite/TbLwM2MWriteResponseCompositeCallback.java | 2 +- .../lwm2m/server/log/DefaultLwM2MTelemetryLogService.java | 2 +- .../transport/lwm2m/server/log/LwM2MTelemetryLogService.java | 2 +- .../server/transport/lwm2m/server/model/LwM2MModelConfig.java | 2 +- .../transport/lwm2m/server/model/LwM2MModelConfigService.java | 2 +- .../lwm2m/server/model/LwM2MModelConfigServiceImpl.java | 2 +- .../lwm2m/server/ota/DefaultLwM2MOtaUpdateService.java | 2 +- .../server/transport/lwm2m/server/ota/LwM2MClientOtaInfo.java | 2 +- .../server/transport/lwm2m/server/ota/LwM2MClientOtaState.java | 2 +- .../transport/lwm2m/server/ota/LwM2MOtaUpdateService.java | 2 +- .../lwm2m/server/ota/firmware/FirmwareDeliveryMethod.java | 2 +- .../lwm2m/server/ota/firmware/FirmwareUpdateResult.java | 2 +- .../lwm2m/server/ota/firmware/FirmwareUpdateState.java | 2 +- .../lwm2m/server/ota/firmware/LwM2MClientFwOtaInfo.java | 2 +- .../lwm2m/server/ota/firmware/LwM2MFirmwareUpdateStrategy.java | 2 +- .../lwm2m/server/ota/software/LwM2MClientSwOtaInfo.java | 2 +- .../lwm2m/server/ota/software/LwM2MSoftwareUpdateStrategy.java | 2 +- .../lwm2m/server/ota/software/SoftwareUpdateResult.java | 2 +- .../lwm2m/server/ota/software/SoftwareUpdateState.java | 2 +- .../lwm2m/server/rpc/DefaultLwM2MRpcRequestHandler.java | 2 +- .../transport/lwm2m/server/rpc/LwM2MRpcRequestHandler.java | 2 +- .../transport/lwm2m/server/rpc/LwM2MRpcRequestHeader.java | 2 +- .../transport/lwm2m/server/rpc/LwM2MRpcResponseBody.java | 2 +- .../lwm2m/server/rpc/RpcCancelAllObserveCallback.java | 2 +- .../transport/lwm2m/server/rpc/RpcCancelObserveCallback.java | 2 +- .../server/transport/lwm2m/server/rpc/RpcCreateRequest.java | 2 +- .../transport/lwm2m/server/rpc/RpcCreateResponseCallback.java | 2 +- .../server/transport/lwm2m/server/rpc/RpcDiscoverCallback.java | 2 +- .../lwm2m/server/rpc/RpcDownlinkRequestCallbackProxy.java | 2 +- .../transport/lwm2m/server/rpc/RpcEmptyResponseCallback.java | 2 +- .../server/transport/lwm2m/server/rpc/RpcLinkSetCallback.java | 2 +- .../transport/lwm2m/server/rpc/RpcLwM2MDownlinkCallback.java | 2 +- .../transport/lwm2m/server/rpc/RpcReadResponseCallback.java | 2 +- .../transport/lwm2m/server/rpc/RpcWriteAttributesRequest.java | 2 +- .../transport/lwm2m/server/rpc/RpcWriteReplaceRequest.java | 2 +- .../transport/lwm2m/server/rpc/RpcWriteUpdateRequest.java | 2 +- .../lwm2m/server/rpc/composite/RpcReadCompositeRequest.java | 2 +- .../server/rpc/composite/RpcReadResponseCompositeCallback.java | 2 +- .../lwm2m/server/rpc/composite/RpcWriteCompositeRequest.java | 2 +- .../lwm2m/server/session/DefaultLwM2MSessionManager.java | 2 +- .../transport/lwm2m/server/session/LwM2MSessionManager.java | 2 +- .../lwm2m/server/store/TbDummyLwM2MClientOtaInfoStore.java | 2 +- .../transport/lwm2m/server/store/TbDummyLwM2MClientStore.java | 2 +- .../lwm2m/server/store/TbDummyLwM2MModelConfigStore.java | 2 +- .../transport/lwm2m/server/store/TbEditableSecurityStore.java | 2 +- .../transport/lwm2m/server/store/TbInMemorySecurityStore.java | 2 +- .../lwm2m/server/store/TbL2M2MDtlsSessionInMemoryStore.java | 2 +- .../lwm2m/server/store/TbLwM2MClientOtaInfoStore.java | 2 +- .../transport/lwm2m/server/store/TbLwM2MClientStore.java | 2 +- .../lwm2m/server/store/TbLwM2MDtlsSessionRedisStore.java | 2 +- .../transport/lwm2m/server/store/TbLwM2MDtlsSessionStore.java | 2 +- .../transport/lwm2m/server/store/TbLwM2MModelConfigStore.java | 2 +- .../lwm2m/server/store/TbLwM2mRedisClientOtaInfoStore.java | 2 +- .../lwm2m/server/store/TbLwM2mRedisRegistrationStore.java | 2 +- .../lwm2m/server/store/TbLwM2mRedisSecurityStore.java | 2 +- .../transport/lwm2m/server/store/TbLwM2mSecurityStore.java | 2 +- .../transport/lwm2m/server/store/TbLwM2mStoreFactory.java | 2 +- .../transport/lwm2m/server/store/TbMainSecurityStore.java | 2 +- .../transport/lwm2m/server/store/TbRedisLwM2MClientStore.java | 2 +- .../lwm2m/server/store/TbRedisLwM2MModelConfigStore.java | 2 +- .../server/transport/lwm2m/server/store/TbSecurityStore.java | 2 +- .../lwm2m/server/uplink/DefaultLwM2mUplinkMsgHandler.java | 2 +- .../server/transport/lwm2m/server/uplink/LwM2mTypeServer.java | 2 +- .../transport/lwm2m/server/uplink/LwM2mUplinkMsgHandler.java | 2 +- .../server/transport/lwm2m/utils/LwM2MTransportUtil.java | 2 +- .../server/transport/lwm2m/utils/LwM2mValueConverterImpl.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 +- .../java/org/thingsboard/server/transport/mqtt/TopicType.java | 2 +- .../transport/mqtt/adaptors/BackwardCompatibilityAdaptor.java | 2 +- .../server/transport/mqtt/adaptors/JsonMqttAdaptor.java | 2 +- .../server/transport/mqtt/adaptors/MqttTransportAdaptor.java | 2 +- .../server/transport/mqtt/adaptors/ProtoMqttAdaptor.java | 2 +- .../org/thingsboard/server/transport/mqtt/limits/IpFilter.java | 2 +- .../server/transport/mqtt/limits/ProxyIpFilter.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 +- .../server/transport/mqtt/MqttTransportHandlerTest.java | 2 +- .../transport/mqtt/session/GatewaySessionHandlerTest.java | 2 +- .../server/transport/mqtt/util/MqttTopicFilterFactoryTest.java | 2 +- common/transport/pom.xml | 2 +- common/transport/snmp/pom.xml | 2 +- .../server/transport/snmp/SnmpTransportContext.java | 2 +- .../transport/snmp/event/ServiceListChangedEventListener.java | 2 +- .../transport/snmp/event/SnmpTransportListChangedEvent.java | 2 +- .../snmp/event/SnmpTransportListChangedEventListener.java | 2 +- .../thingsboard/server/transport/snmp/service/PduService.java | 2 +- .../transport/snmp/service/ProtoTransportEntityService.java | 2 +- .../server/transport/snmp/service/SnmpAuthService.java | 2 +- .../transport/snmp/service/SnmpTransportBalancingService.java | 2 +- .../server/transport/snmp/service/SnmpTransportService.java | 2 +- .../server/transport/snmp/session/DeviceSessionContext.java | 2 +- .../server/transport/snmp/SnmpDeviceSimulatorV2.java | 2 +- .../server/transport/snmp/SnmpDeviceSimulatorV3.java | 2 +- .../java/org/thingsboard/server/transport/snmp/SnmpTestV2.java | 2 +- .../java/org/thingsboard/server/transport/snmp/SnmpTestV3.java | 2 +- common/transport/transport-api/pom.xml | 2 +- .../server/common/transport/DeviceUpdatedEvent.java | 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 +- .../server/common/transport/TransportResourceCache.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 +- .../common/transport/config/ssl/AbstractSslCredentials.java | 2 +- .../common/transport/config/ssl/KeystoreSslCredentials.java | 2 +- .../server/common/transport/config/ssl/PemSslCredentials.java | 2 +- .../server/common/transport/config/ssl/SslCredentials.java | 2 +- .../common/transport/config/ssl/SslCredentialsConfig.java | 2 +- .../server/common/transport/config/ssl/SslCredentialsType.java | 2 +- .../config/ssl/SslCredentialsWebServerCustomizer.java | 2 +- .../transport/limits/DefaultTransportRateLimitService.java | 2 +- .../common/transport/limits/DummyTransportRateLimit.java | 2 +- .../common/transport/limits/EntityTransportRateLimits.java | 2 +- .../common/transport/limits/InetAddressRateLimitStats.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 +- .../transport/service/DefaultTransportResourceCache.java | 2 +- .../common/transport/service/DefaultTransportService.java | 2 +- .../transport/service/DefaultTransportTenantProfileCache.java | 2 +- .../server/common/transport/service/RpcRequestMetadata.java | 2 +- .../server/common/transport/service/SessionActivityData.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 +- .../org/thingsboard/server/common/transport/util/SslUtil.java | 2 +- common/transport/transport-api/src/main/proto/transport.proto | 2 +- .../transport-api/src/test/java/JsonConverterTest.java | 3 +-- 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/CollectionsUtil.java | 2 +- .../main/java/org/thingsboard/common/util/DonAsynchron.java | 2 +- .../src/main/java/org/thingsboard/common/util/JacksonUtil.java | 2 +- .../org/thingsboard/common/util/LinkedHashMapRemoveEldest.java | 2 +- .../java/org/thingsboard/common/util/ListeningExecutor.java | 2 +- .../src/main/java/org/thingsboard/common/util/TbStopWatch.java | 2 +- .../java/org/thingsboard/common/util/ThingsBoardExecutors.java | 2 +- .../common/util/ThingsBoardForkJoinWorkerThreadFactory.java | 2 +- .../org/thingsboard/common/util/ThingsBoardThreadFactory.java | 2 +- .../thingsboard/common/util/LinkedHashMapRemoveEldestTest.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 +- .../org/thingsboard/server/dao/TenantEntityWithDataDao.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 +- .../thingsboard/server/dao/attributes/AttributeCacheKey.java | 2 +- .../org/thingsboard/server/dao/attributes/AttributeUtils.java | 2 +- .../server/dao/attributes/AttributesCacheWrapper.java | 2 +- .../org/thingsboard/server/dao/attributes/AttributesDao.java | 2 +- .../server/dao/attributes/BaseAttributesService.java | 2 +- .../server/dao/attributes/CachedAttributesService.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 +- .../org/thingsboard/server/dao/cache/CacheExecutorService.java | 2 +- .../dao/cache/PreviousDeviceCredentialsIdKeyGenerator.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/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 +- .../org/thingsboard/server/dao/edge/BaseEdgeEventService.java | 2 +- dao/src/main/java/org/thingsboard/server/dao/edge/EdgeDao.java | 2 +- .../java/org/thingsboard/server/dao/edge/EdgeEventDao.java | 2 +- .../java/org/thingsboard/server/dao/edge/EdgeServiceImpl.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 +- .../dao/exception/DeviceCredentialsValidationException.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 +- .../thingsboard/server/dao/model/sql/AbstractEdgeEntity.java | 2 +- .../server/dao/model/sql/AbstractEntityViewEntity.java | 2 +- .../thingsboard/server/dao/model/sql/AbstractTenantEntity.java | 2 +- .../thingsboard/server/dao/model/sql/AbstractTsKvEntity.java | 2 +- .../server/dao/model/sql/AbstractWidgetTypeEntity.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 +- .../java/org/thingsboard/server/dao/model/sql/EdgeEntity.java | 2 +- .../org/thingsboard/server/dao/model/sql/EdgeEventEntity.java | 2 +- .../org/thingsboard/server/dao/model/sql/EdgeInfoEntity.java | 2 +- .../server/dao/model/sql/EntityAlarmCompositeKey.java | 2 +- .../thingsboard/server/dao/model/sql/EntityAlarmEntity.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 +- .../dao/model/sql/OAuth2ClientRegistrationTemplateEntity.java | 2 +- .../thingsboard/server/dao/model/sql/OAuth2DomainEntity.java | 2 +- .../thingsboard/server/dao/model/sql/OAuth2MobileEntity.java | 2 +- .../thingsboard/server/dao/model/sql/OAuth2ParamsEntity.java | 2 +- .../server/dao/model/sql/OAuth2RegistrationEntity.java | 2 +- .../org/thingsboard/server/dao/model/sql/OtaPackageEntity.java | 2 +- .../thingsboard/server/dao/model/sql/OtaPackageInfoEntity.java | 2 +- .../thingsboard/server/dao/model/sql/RelationCompositeKey.java | 2 +- .../org/thingsboard/server/dao/model/sql/RelationEntity.java | 2 +- .../java/org/thingsboard/server/dao/model/sql/RpcEntity.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/TbResourceEntity.java | 2 +- .../thingsboard/server/dao/model/sql/TbResourceInfoEntity.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 +- .../server/dao/model/sql/WidgetTypeDetailsEntity.java | 2 +- .../org/thingsboard/server/dao/model/sql/WidgetTypeEntity.java | 2 +- .../thingsboard/server/dao/model/sql/WidgetTypeInfoEntity.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/CassandraBufferedRateReadExecutor.java | 2 +- .../server/dao/nosql/CassandraBufferedRateWriteExecutor.java | 2 +- .../server/dao/oauth2/HybridClientRegistrationRepository.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/OAuth2DomainDao.java | 2 +- .../org/thingsboard/server/dao/oauth2/OAuth2MobileDao.java | 2 +- .../org/thingsboard/server/dao/oauth2/OAuth2ParamsDao.java | 2 +- .../thingsboard/server/dao/oauth2/OAuth2RegistrationDao.java | 2 +- .../org/thingsboard/server/dao/oauth2/OAuth2ServiceImpl.java | 2 +- .../java/org/thingsboard/server/dao/oauth2/OAuth2Utils.java | 2 +- .../org/thingsboard/server/dao/ota/BaseOtaPackageService.java | 2 +- .../java/org/thingsboard/server/dao/ota/OtaPackageDao.java | 2 +- .../java/org/thingsboard/server/dao/ota/OtaPackageInfoDao.java | 2 +- .../thingsboard/server/dao/relation/BaseRelationService.java | 2 +- .../java/org/thingsboard/server/dao/relation/RelationDao.java | 2 +- .../thingsboard/server/dao/resource/BaseResourceService.java | 2 +- .../org/thingsboard/server/dao/resource/TbResourceDao.java | 2 +- .../org/thingsboard/server/dao/resource/TbResourceInfoDao.java | 2 +- .../java/org/thingsboard/server/dao/rpc/BaseRpcService.java | 2 +- dao/src/main/java/org/thingsboard/server/dao/rpc/RpcDao.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 +- .../thingsboard/server/dao/service/ConstraintValidator.java | 2 +- .../java/org/thingsboard/server/dao/service/DataValidator.java | 2 +- .../org/thingsboard/server/dao/service/NoXssValidator.java | 2 +- .../org/thingsboard/server/dao/service/PaginatedRemover.java | 2 +- .../thingsboard/server/dao/service/StringLengthValidator.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 +- .../server/dao/sql/alarm/EntityAlarmRepository.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 +- .../thingsboard/server/dao/sql/edge/EdgeEventRepository.java | 2 +- .../org/thingsboard/server/dao/sql/edge/EdgeRepository.java | 2 +- .../thingsboard/server/dao/sql/edge/JpaBaseEdgeEventDao.java | 2 +- .../java/org/thingsboard/server/dao/sql/edge/JpaEdgeDao.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/EventCleanupRepository.java | 2 +- .../server/dao/sql/event/EventInsertRepository.java | 2 +- .../org/thingsboard/server/dao/sql/event/EventRepository.java | 2 +- .../server/dao/sql/event/HsqlEventCleanupRepository.java | 2 +- .../server/dao/sql/event/HsqlEventInsertRepository.java | 2 +- .../org/thingsboard/server/dao/sql/event/JpaBaseEventDao.java | 2 +- .../server/dao/sql/event/PsqlEventCleanupRepository.java | 2 +- .../server/dao/sql/event/PsqlEventInsertRepository.java | 2 +- .../dao/sql/oauth2/JpaOAuth2ClientRegistrationTemplateDao.java | 2 +- .../thingsboard/server/dao/sql/oauth2/JpaOAuth2DomainDao.java | 2 +- .../thingsboard/server/dao/sql/oauth2/JpaOAuth2MobileDao.java | 2 +- .../thingsboard/server/dao/sql/oauth2/JpaOAuth2ParamsDao.java | 2 +- .../server/dao/sql/oauth2/JpaOAuth2RegistrationDao.java | 2 +- .../sql/oauth2/OAuth2ClientRegistrationTemplateRepository.java | 2 +- .../server/dao/sql/oauth2/OAuth2DomainRepository.java | 2 +- .../server/dao/sql/oauth2/OAuth2MobileRepository.java | 2 +- .../server/dao/sql/oauth2/OAuth2ParamsRepository.java | 2 +- .../server/dao/sql/oauth2/OAuth2RegistrationRepository.java | 2 +- .../org/thingsboard/server/dao/sql/ota/JpaOtaPackageDao.java | 2 +- .../thingsboard/server/dao/sql/ota/JpaOtaPackageInfoDao.java | 2 +- .../server/dao/sql/ota/OtaPackageInfoRepository.java | 2 +- .../thingsboard/server/dao/sql/ota/OtaPackageRepository.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 +- .../thingsboard/server/dao/sql/resource/JpaTbResourceDao.java | 2 +- .../server/dao/sql/resource/JpaTbResourceInfoDao.java | 2 +- .../server/dao/sql/resource/TbResourceInfoRepository.java | 2 +- .../server/dao/sql/resource/TbResourceRepository.java | 2 +- .../java/org/thingsboard/server/dao/sql/rpc/JpaRpcDao.java | 2 +- .../java/org/thingsboard/server/dao/sql/rpc/RpcRepository.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 +- .../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-psql-addon.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 +- dao/src/main/resources/xss-policy.xml | 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 +- .../java/org/thingsboard/server/dao/PostgreSqlInitializer.java | 2 +- .../org/thingsboard/server/dao/SqlDaoServiceTestSuite.java | 2 +- .../server/dao/attributes/CachedAttributesServiceTest.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 +- .../server/dao/service/BaseEdgeEventServiceTest.java | 2 +- .../thingsboard/server/dao/service/BaseEdgeServiceTest.java | 2 +- .../thingsboard/server/dao/service/BaseEntityServiceTest.java | 2 +- .../dao/service/BaseOAuth2ConfigTemplateServiceTest.java | 2 +- .../thingsboard/server/dao/service/BaseOAuth2ServiceTest.java | 2 +- .../server/dao/service/BaseOtaPackageServiceTest.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 +- .../org/thingsboard/server/dao/service/NoXssValidatorTest.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/EdgeEventServiceSqlTest.java | 2 +- .../thingsboard/server/dao/service/sql/EdgeServiceSqlTest.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/OtaPackageServiceSqlTest.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 +- .../server/dao/sql/query/DefaultEntityQueryRepositoryTest.java | 2 +- .../server/dao/sql/query/EntityDataAdapterTest.java | 2 +- .../thingsboard/server/dao/sql/query/EntityKeyMappingTest.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.prometheus-grafana.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 +- .../monitoring/grafana/provisioning/dashboards/dashboard.yml | 2 +- .../monitoring/grafana/provisioning/datasources/datasource.yml | 2 +- docker/monitoring/prometheus/prometheus.yml | 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/lwm2m/conf/logback.xml | 2 +- docker/tb-transports/lwm2m/conf/tb-lwm2m-transport.conf | 2 +- docker/tb-transports/mqtt/conf/logback.xml | 2 +- docker/tb-transports/mqtt/conf/tb-mqtt-transport.conf | 2 +- docker/tb-transports/snmp/conf/logback.xml | 2 +- docker/tb-transports/snmp/conf/tb-snmp-transport.conf | 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/httpServer.js | 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 | 2 +- msa/js-executor/queue/kafkaTemplate.js | 2 +- msa/js-executor/queue/pubSubTemplate.js | 2 +- msa/js-executor/queue/rabbitmqTemplate.js | 2 +- msa/js-executor/queue/serviceBusTemplate.js | 2 +- msa/js-executor/server.js | 2 +- 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/lwm2m/docker/Dockerfile | 2 +- msa/transport/lwm2m/docker/start-tb-lwm2m-transport.sh | 2 +- msa/transport/lwm2m/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/transport/snmp/docker/Dockerfile | 2 +- msa/transport/snmp/docker/start-tb-snmp-transport.sh | 2 +- msa/transport/snmp/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 +- .../src/main/java/org/thingsboard/mqtt/PendingOperation.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 +- rest-client/src/main/resources/logback.xml | 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 +- .../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/TbEmail.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 +- .../thingsboard/rule/engine/api/msg/DeviceEdgeUpdateMsg.java | 2 +- .../org/thingsboard/rule/engine/api/msg/DeviceMetaData.java | 2 +- .../rule/engine/api/msg/DeviceNameOrTypeUpdateMsg.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 +- .../org/thingsboard/rule/engine/api/util/TbNodeUtilsTest.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 +- .../rule/engine/credentials/AnonymousCredentials.java | 2 +- .../thingsboard/rule/engine/credentials/BasicCredentials.java | 2 +- .../rule/engine/credentials/CertPemCredentials.java | 2 +- .../thingsboard/rule/engine/credentials/ClientCredentials.java | 2 +- .../thingsboard/rule/engine/credentials/CredentialsType.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 +- .../org/thingsboard/rule/engine/edge/TbMsgPushToCloudNode.java | 2 +- .../rule/engine/edge/TbMsgPushToCloudNodeConfiguration.java | 2 +- .../org/thingsboard/rule/engine/edge/TbMsgPushToEdgeNode.java | 2 +- .../rule/engine/edge/TbMsgPushToEdgeNodeConfiguration.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/flow/TbRuleChainInputNode.java | 2 +- .../rule/engine/flow/TbRuleChainInputNodeConfiguration.java | 2 +- .../thingsboard/rule/engine/flow/TbRuleChainOutputNode.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 +- .../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 +- .../thingsboard/rule/engine/metadata/CalculateDeltaNode.java | 2 +- .../rule/engine/metadata/CalculateDeltaNodeConfiguration.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 +- .../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 +- .../rule/engine/profile/DynamicPredicateValueCtx.java | 2 +- .../rule/engine/profile/DynamicPredicateValueCtxImpl.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 +- .../rule/engine/action/TbCreateRelationNodeTest.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/AbstractAttributeNodeTest.java | 2 +- .../rule/engine/metadata/TbGetCustomerAttributeNodeTest.java | 2 +- .../rule/engine/metadata/TbGetRelatedAttributeNodeTest.java | 2 +- .../rule/engine/metadata/TbGetTelemetryNodeTest.java | 2 +- .../rule/engine/metadata/TbGetTenantAttributeNodeTest.java | 2 +- .../org/thingsboard/rule/engine/profile/AlarmStateTest.java | 2 +- .../rule/engine/profile/TbDeviceProfileNodeTest.java | 2 +- .../org/thingsboard/rule/engine/rest/TbHttpClientTest.java | 2 +- .../thingsboard/rule/engine/rest/TbRestApiCallNodeTest.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 +- .../thingsboard/client/tools/migrator/DictionaryParser.java | 2 +- .../org/thingsboard/client/tools/migrator/MigratorTool.java | 2 +- .../org/thingsboard/client/tools/migrator/PgCaMigrator.java | 2 +- .../client/tools/migrator/RelatedEntitiesParser.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 +- .../src/main/shell/lwm2m/lwM2M_cfssl_chain_clients_for_test.sh | 2 +- tools/src/main/shell/lwm2m/lwm2m_cfssl_chain_all_for_test.sh | 2 +- .../src/main/shell/lwm2m/lwm2m_cfssl_chain_server_for_test.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/lwm2m/pom.xml | 2 +- transport/lwm2m/src/main/conf/logback.xml | 2 +- transport/lwm2m/src/main/conf/tb-lwm2m-transport.conf | 2 +- .../server/lwm2m/ThingsboardLwm2mTransportApplication.java | 2 +- transport/lwm2m/src/main/resources/logback.xml | 2 +- transport/lwm2m/src/main/resources/tb-lwm2m-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 +- transport/snmp/pom.xml | 2 +- transport/snmp/src/main/conf/logback.xml | 2 +- transport/snmp/src/main/conf/tb-snmp-transport.conf | 2 +- .../server/snmp/ThingsboardSnmpTransportApplication.java | 2 +- transport/snmp/src/main/resources/logback.xml | 2 +- transport/snmp/src/main/resources/tb-snmp-transport.yml | 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 | 2 +- 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/edge.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/ota-package.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/resource.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/ui-settings.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/help.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/mobile.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.models.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 +- .../components/dashboard-page/add-widget-dialog.component.html | 2 +- .../components/dashboard-page/add-widget-dialog.component.ts | 2 +- .../dashboard-page/dashboard-image-dialog.component.html | 2 +- .../dashboard-page/dashboard-image-dialog.component.scss | 3 +-- .../dashboard-page/dashboard-image-dialog.component.ts | 2 +- .../components/dashboard-page/dashboard-page.component.html | 2 +- .../components/dashboard-page/dashboard-page.component.scss | 2 +- .../home/components/dashboard-page/dashboard-page.component.ts | 2 +- .../home/components/dashboard-page/dashboard-page.models.ts | 2 +- .../dashboard-page/dashboard-settings-dialog.component.html | 2 +- .../dashboard-page/dashboard-settings-dialog.component.scss | 2 +- .../dashboard-page/dashboard-settings-dialog.component.ts | 2 +- .../components/dashboard-page/dashboard-state.component.html | 2 +- .../components/dashboard-page/dashboard-state.component.scss | 3 +-- .../components/dashboard-page/dashboard-state.component.ts | 2 +- .../components/dashboard-page/dashboard-toolbar.component.html | 2 +- .../components/dashboard-page/dashboard-toolbar.component.scss | 2 +- .../components/dashboard-page/dashboard-toolbar.component.ts | 2 +- .../dashboard-page/dashboard-widget-select.component.html | 2 +- .../dashboard-page/dashboard-widget-select.component.scss | 2 +- .../dashboard-page/dashboard-widget-select.component.ts | 2 +- .../home/components/dashboard-page/edit-widget.component.html | 2 +- .../home/components/dashboard-page/edit-widget.component.ts | 2 +- .../dashboard-page/layout/dashboard-layout.component.html | 2 +- .../dashboard-page/layout/dashboard-layout.component.scss | 2 +- .../dashboard-page/layout/dashboard-layout.component.ts | 2 +- .../home/components/dashboard-page/layout/layout.models.ts | 2 +- .../layout/manage-dashboard-layouts-dialog.component.html | 2 +- .../layout/manage-dashboard-layouts-dialog.component.ts | 2 +- .../states/dashboard-state-dialog.component.html | 2 +- .../dashboard-page/states/dashboard-state-dialog.component.ts | 2 +- .../states/default-state-controller.component.html | 2 +- .../states/default-state-controller.component.scss | 2 +- .../states/default-state-controller.component.ts | 2 +- .../states/entity-state-controller.component.html | 2 +- .../states/entity-state-controller.component.scss | 2 +- .../dashboard-page/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 +- .../dashboard-page/states/state-controller.component.ts | 2 +- .../dashboard-page/states/state-controller.models.ts | 2 +- .../dashboard-page/states/states-component.directive.ts | 2 +- .../dashboard-page/states/states-controller.module.ts | 2 +- .../dashboard-page/states/states-controller.service.ts | 2 +- .../dashboard-page/widget-types-panel.component.html | 2 +- .../dashboard-page/widget-types-panel.component.scss | 2 +- .../components/dashboard-page/widget-types-panel.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 +- .../device/device-credentials-lwm2m-server.component.html | 2 +- .../device/device-credentials-lwm2m-server.component.ts | 2 +- .../components/device/device-credentials-lwm2m.component.html | 2 +- .../components/device/device-credentials-lwm2m.component.scss | 2 +- .../components/device/device-credentials-lwm2m.component.ts | 2 +- .../device/device-credentials-mqtt-basic.component.html | 2 +- .../device/device-credentials-mqtt-basic.component.ts | 2 +- .../home/components/device/device-credentials.component.html | 2 +- .../home/components/device/device-credentials.component.ts | 2 +- .../home/components/device/device-credentials.module.ts | 2 +- .../modules/home/components/edge/edge-downlink-table-config.ts | 2 +- .../components/edge/edge-downlink-table-header.component.html | 2 +- .../components/edge/edge-downlink-table-header.component.scss | 2 +- .../components/edge/edge-downlink-table-header.component.ts | 2 +- .../home/components/edge/edge-downlink-table.component.html | 2 +- .../home/components/edge/edge-downlink-table.component.scss | 2 +- .../home/components/edge/edge-downlink-table.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-page.component.html | 2 +- .../home/components/entity/entity-details-page.component.scss | 2 +- .../home/components/entity/entity-details-page.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 +- .../home/components/event/event-filter-panel.component.html | 2 +- .../home/components/event/event-filter-panel.component.scss | 2 +- .../home/components/event/event-filter-panel.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 +- .../modules/home/components/filter/filter-component.models.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 | 2 +- .../home/components/filter/filter-predicate.component.ts | 2 +- .../app/modules/home/components/filter/filter-predicate.scss | 2 +- .../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 +- .../alarm/alarm-duration-predicate-value.component.html | 2 +- .../alarm/alarm-duration-predicate-value.component.scss | 3 +-- .../profile/alarm/alarm-duration-predicate-value.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 | 2 +- .../components/profile/alarm/create-alarm-rules.component.ts | 2 +- .../profile/alarm/device-profile-alarm.component.html | 2 +- .../profile/alarm/device-profile-alarm.component.scss | 2 +- .../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.scss | 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 +- .../coap-device-profile-transport-configuration.component.html | 2 +- .../coap-device-profile-transport-configuration.component.scss | 2 +- .../coap-device-profile-transport-configuration.component.ts | 2 +- .../profile/device/common/device-profile-common.module.ts | 2 +- .../profile/device/common/power-mode-setting.component.html | 2 +- .../profile/device/common/power-mode-setting.component.ts | 2 +- .../profile/device/common/time-unit-select.component.html | 2 +- .../profile/device/common/time-unit-select.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 +- .../device/lwm2m/lwm2m-attributes-dialog.component.html | 2 +- .../profile/device/lwm2m/lwm2m-attributes-dialog.component.ts | 2 +- .../device/lwm2m/lwm2m-attributes-key-list.component.html | 2 +- .../device/lwm2m/lwm2m-attributes-key-list.component.scss | 2 +- .../device/lwm2m/lwm2m-attributes-key-list.component.ts | 2 +- .../profile/device/lwm2m/lwm2m-attributes.component.html | 2 +- .../profile/device/lwm2m/lwm2m-attributes.component.ts | 2 +- .../lwm2m-bootstrap-add-config-server-dialog.component.html | 2 +- .../lwm2m-bootstrap-add-config-server-dialog.component.ts | 2 +- .../device/lwm2m/lwm2m-bootstrap-config-servers.component.html | 2 +- .../device/lwm2m/lwm2m-bootstrap-config-servers.component.ts | 2 +- .../device/lwm2m/lwm2m-device-config-server.component.html | 2 +- .../device/lwm2m/lwm2m-device-config-server.component.ts | 2 +- ...lwm2m-device-profile-transport-configuration.component.html | 2 +- ...lwm2m-device-profile-transport-configuration.component.scss | 2 +- .../lwm2m-device-profile-transport-configuration.component.ts | 2 +- .../lwm2m/lwm2m-object-add-instances-dialog.component.html | 2 +- .../lwm2m/lwm2m-object-add-instances-dialog.component.ts | 2 +- .../lwm2m/lwm2m-object-add-instances-list.component.html | 2 +- .../device/lwm2m/lwm2m-object-add-instances-list.component.ts | 2 +- .../profile/device/lwm2m/lwm2m-object-list.component.html | 2 +- .../profile/device/lwm2m/lwm2m-object-list.component.ts | 2 +- .../lwm2m-observe-attr-telemetry-instances.component.html | 2 +- .../lwm2m-observe-attr-telemetry-instances.component.scss | 2 +- .../lwm2m/lwm2m-observe-attr-telemetry-instances.component.ts | 2 +- .../lwm2m-observe-attr-telemetry-resources.component.html | 2 +- .../lwm2m-observe-attr-telemetry-resources.component.scss | 2 +- .../lwm2m/lwm2m-observe-attr-telemetry-resources.component.ts | 2 +- .../device/lwm2m/lwm2m-observe-attr-telemetry.component.html | 2 +- .../device/lwm2m/lwm2m-observe-attr-telemetry.component.scss | 2 +- .../device/lwm2m/lwm2m-observe-attr-telemetry.component.ts | 2 +- .../profile/device/lwm2m/lwm2m-profile-components.module.ts | 2 +- .../profile/device/lwm2m/lwm2m-profile-config.models.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 +- .../snmp-device-profile-communication-config.component.html | 2 +- .../snmp-device-profile-communication-config.component.scss | 2 +- .../snpm/snmp-device-profile-communication-config.component.ts | 2 +- .../device/snpm/snmp-device-profile-mapping.component.html | 2 +- .../device/snpm/snmp-device-profile-mapping.component.scss | 2 +- .../device/snpm/snmp-device-profile-mapping.component.ts | 2 +- .../snmp-device-profile-transport-configuration.component.html | 2 +- .../snmp-device-profile-transport-configuration.component.ts | 2 +- .../device/snpm/snmp-device-profile-transport.module.ts | 2 +- .../profile/tenant-profile-autocomplete.component.html | 2 +- .../profile/tenant-profile-autocomplete.component.scss | 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 +- ui-ngx/src/app/modules/home/components/tokens.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/mobile-action-editor.component.html | 2 +- .../components/widget/action/mobile-action-editor.component.ts | 2 +- .../components/widget/action/mobile-action-editor.models.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 +- .../components/widget/dialog/embed-dashboard-dialog-token.ts | 2 +- .../widget/dialog/embed-dashboard-dialog.component.html | 2 +- .../widget/dialog/embed-dashboard-dialog.component.scss | 2 +- .../widget/dialog/embed-dashboard-dialog.component.ts | 2 +- .../modules/home/components/widget/dynamic-widget.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 +- .../components/widget/lib/edges-overview-widget.component.html | 2 +- .../components/widget/lib/edges-overview-widget.component.scss | 2 +- .../components/widget/lib/edges-overview-widget.component.ts | 2 +- .../home/components/widget/lib/edges-overview-widget.models.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 +- .../components/widget/lib/json-input-widget.component.html | 3 +-- .../components/widget/lib/json-input-widget.component.scss | 3 +-- .../home/components/widget/lib/json-input-widget.component.ts | 2 +- .../home/components/widget/lib/maps/common-maps-utils.ts | 2 +- .../lib/maps/dialogs/select-entity-dialog.component.html | 2 +- .../lib/maps/dialogs/select-entity-dialog.component.scss | 2 +- .../widget/lib/maps/dialogs/select-entity-dialog.component.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 +- .../home/components/widget/lib/markdown-widget.component.html | 2 +- .../home/components/widget/lib/markdown-widget.component.ts | 2 +- .../components/widget/lib/multiple-input-widget.component.html | 2 +- .../components/widget/lib/multiple-input-widget.component.scss | 2 +- .../components/widget/lib/multiple-input-widget.component.ts | 2 +- .../widget/lib/navigation-card-widget.component.html | 2 +- .../widget/lib/navigation-card-widget.component.scss | 3 +-- .../components/widget/lib/navigation-card-widget.component.ts | 2 +- .../widget/lib/navigation-cards-widget.component.html | 2 +- .../widget/lib/navigation-cards-widget.component.scss | 2 +- .../components/widget/lib/navigation-cards-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 +- .../home/components/widget/lib/qrcode-widget.component.html | 2 +- .../home/components/widget/lib/qrcode-widget.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 | 3 +-- .../home/components/widget/lib/rpc/led-indicator.component.ts | 2 +- .../widget/lib/rpc/persistent-add-dialog.component.html | 2 +- .../widget/lib/rpc/persistent-add-dialog.component.scss | 3 +-- .../widget/lib/rpc/persistent-add-dialog.component.ts | 2 +- .../widget/lib/rpc/persistent-details-dialog.component.html | 2 +- .../widget/lib/rpc/persistent-details-dialog.component.scss | 2 +- .../widget/lib/rpc/persistent-details-dialog.component.ts | 2 +- .../widget/lib/rpc/persistent-filter-panel.component.html | 2 +- .../widget/lib/rpc/persistent-filter-panel.component.scss | 3 +-- .../widget/lib/rpc/persistent-filter-panel.component.ts | 2 +- .../components/widget/lib/rpc/persistent-table.component.html | 2 +- .../components/widget/lib/rpc/persistent-table.component.scss | 2 +- .../components/widget/lib/rpc/persistent-table.component.ts | 2 +- .../home/components/widget/lib/rpc/round-switch.component.html | 2 +- .../home/components/widget/lib/rpc/round-switch.component.scss | 3 +-- .../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 | 2 +- .../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 | 2 +- .../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 +- .../home/components/widget/widget-container.component.html | 2 +- .../home/components/widget/widget-container.component.scss | 2 +- .../home/components/widget/widget-container.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 | 2 +- .../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/add-entities-to-edge-dialog.component.html | 2 +- .../home/dialogs/add-entities-to-edge-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 | 2 +- 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 +- .../home/models/entity/entity-table-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/home-settings.component.html | 2 +- .../app/modules/home/pages/admin/home-settings.component.scss | 3 +-- .../app/modules/home/pages/admin/home-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 +- .../admin/resource/resources-library-table-config.resolve.ts | 2 +- .../home/pages/admin/resource/resources-library.component.html | 2 +- .../home/pages/admin/resource/resources-library.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 | 2 +- .../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 +- .../app/modules/home/pages/customer/customer.component.scss | 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 +- .../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-routing.module.ts | 2 +- .../modules/home/pages/dashboard/dashboard-tabs.component.html | 2 +- .../modules/home/pages/dashboard/dashboard-tabs.component.ts | 2 +- .../src/app/modules/home/pages/dashboard/dashboard.module.ts | 2 +- .../home/pages/dashboard/dashboards-table-config.resolver.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 +- .../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 +- .../data/coap-device-transport-configuration.component.html | 2 +- .../data/coap-device-transport-configuration.component.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 +- .../data/snmp-device-transport-configuration.component.html | 2 +- .../data/snmp-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 +- ui-ngx/src/app/modules/home/pages/edge/edge-routing.module.ts | 2 +- .../modules/home/pages/edge/edge-table-header.component.html | 2 +- .../modules/home/pages/edge/edge-table-header.component.scss | 2 +- .../app/modules/home/pages/edge/edge-table-header.component.ts | 2 +- .../src/app/modules/home/pages/edge/edge-tabs.component.html | 2 +- ui-ngx/src/app/modules/home/pages/edge/edge-tabs.component.ts | 2 +- ui-ngx/src/app/modules/home/pages/edge/edge.component.html | 2 +- ui-ngx/src/app/modules/home/pages/edge/edge.component.scss | 2 +- ui-ngx/src/app/modules/home/pages/edge/edge.component.ts | 2 +- ui-ngx/src/app/modules/home/pages/edge/edge.module.ts | 2 +- .../app/modules/home/pages/edge/edges-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.models.ts | 2 +- ui-ngx/src/app/modules/home/pages/home-pages.module.ts | 2 +- .../modules/home/pages/ota-update/ota-update-routing.module.ts | 2 +- .../home/pages/ota-update/ota-update-table-config.resolve.ts | 2 +- .../modules/home/pages/ota-update/ota-update.component.html | 2 +- .../app/modules/home/pages/ota-update/ota-update.component.ts | 2 +- .../src/app/modules/home/pages/ota-update/ota-update.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 +- .../rulechain/create-nested-rulechain-dialog.component.html | 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.scss | 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 | 2 +- .../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 +- .../app/shared/components/button/copy-button.component.html | 2 +- .../app/shared/components/button/copy-button.component.scss | 2 +- .../src/app/shared/components/button/copy-button.component.ts | 2 +- .../shared/components/button/toggle-password.component.html | 2 +- .../app/shared/components/button/toggle-password.component.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 +- ui-ngx/src/app/shared/components/css.component.html | 2 +- ui-ngx/src/app/shared/components/css.component.scss | 2 +- ui-ngx/src/app/shared/components/css.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 +- .../shared/components/directives/component-outlet.directive.ts | 2 +- .../components/directives/sring-template-outlet.directive.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 | 3 +-- 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-markdown.component.html | 2 +- ui-ngx/src/app/shared/components/help-markdown.component.scss | 3 +-- ui-ngx/src/app/shared/components/help-markdown.component.ts | 2 +- ui-ngx/src/app/shared/components/help-popup.component.html | 2 +- ui-ngx/src/app/shared/components/help-popup.component.scss | 3 +-- ui-ngx/src/app/shared/components/help-popup.component.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 +- .../shared/components/json-form/react/json-form-markdown.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 | 3 +-- .../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 +- .../src/app/shared/components/json-object-view.component.html | 2 +- .../src/app/shared/components/json-object-view.component.scss | 2 +- ui-ngx/src/app/shared/components/json-object-view.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 +- ui-ngx/src/app/shared/components/markdown.component.html | 2 +- ui-ngx/src/app/shared/components/markdown.component.ts | 2 +- ui-ngx/src/app/shared/components/marked-options.service.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 +- .../ota-package/ota-package-autocomplete.component.html | 2 +- .../ota-package/ota-package-autocomplete.component.scss | 2 +- .../ota-package/ota-package-autocomplete.component.ts | 2 +- ui-ngx/src/app/shared/components/page.component.ts | 2 +- ui-ngx/src/app/shared/components/popover.component.scss | 2 +- ui-ngx/src/app/shared/components/popover.component.ts | 2 +- ui-ngx/src/app/shared/components/popover.models.ts | 2 +- ui-ngx/src/app/shared/components/popover.service.ts | 2 +- .../src/app/shared/components/protobuf-content.component.html | 2 +- .../src/app/shared/components/protobuf-content.component.scss | 2 +- ui-ngx/src/app/shared/components/protobuf-content.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 | 2 +- .../time/history-selector/history-selector.component.ts | 2 +- .../shared/components/time/quick-time-interval.component.html | 2 +- .../shared/components/time/quick-time-interval.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/tokens.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-search.component.html | 2 +- .../app/shared/components/widgets-bundle-search.component.scss | 2 +- .../app/shared/components/widgets-bundle-search.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/decorators/tb-inject.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/edge.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/edge-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/ota-package-id.ts | 2 +- ui-ngx/src/app/shared/models/id/public-api.ts | 2 +- ui-ngx/src/app/shared/models/id/rpc-id.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/tb-resource-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/lwm2m-security-config.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/ota-package.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/resource.models.ts | 2 +- ui-ngx/src/app/shared/models/rpc.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/file-size.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/selectable-columns.pipe.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/assets/fonts/material-icons.css | 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 | 3 +-- 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/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/leaflet-geoman-extend.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 +- 3823 files changed, 3823 insertions(+), 3840 deletions(-) diff --git a/application/pom.xml b/application/pom.xml index 405f3b4d7d..efbc35dc6c 100644 --- a/application/pom.xml +++ b/application/pom.xml @@ -1,6 +1,6 @@ -

Date: Mon, 17 Jan 2022 14:09:21 +0200 Subject: [PATCH 13/13] UI: Fixed persistent page link not correct init in pageMode disable --- .../entity/entities-table.component.ts | 33 ++++++++++++------- 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/ui-ngx/src/app/modules/home/components/entity/entities-table.component.ts b/ui-ngx/src/app/modules/home/components/entity/entities-table.component.ts index a64a40ef64..4135c11660 100644 --- a/ui-ngx/src/app/modules/home/components/entity/entities-table.component.ts +++ b/ui-ngx/src/app/modules/home/components/entity/entities-table.component.ts @@ -217,10 +217,17 @@ export class EntitiesTableComponent extends PageComponent implements IEntitiesTa const routerQueryParams: PageQueryParam = this.route.snapshot.queryParams; let sortOrder: SortOrder = null; - if (this.entitiesTableConfig.defaultSortOrder || routerQueryParams.hasOwnProperty('direction') || routerQueryParams.hasOwnProperty('property')) { + if (this.pageMode) { + if (this.entitiesTableConfig.defaultSortOrder || routerQueryParams.hasOwnProperty('direction') || routerQueryParams.hasOwnProperty('property')) { + sortOrder = { + property: routerQueryParams?.property || this.entitiesTableConfig.defaultSortOrder.property, + direction: routerQueryParams?.direction || this.entitiesTableConfig.defaultSortOrder.direction + }; + } + } else if (this.entitiesTableConfig.defaultSortOrder){ sortOrder = { - property: routerQueryParams?.property || this.entitiesTableConfig.defaultSortOrder.property, - direction: routerQueryParams?.direction || this.entitiesTableConfig.defaultSortOrder.direction + property: this.entitiesTableConfig.defaultSortOrder.property, + direction: this.entitiesTableConfig.defaultSortOrder.direction }; } @@ -238,15 +245,17 @@ export class EntitiesTableComponent extends PageComponent implements IEntitiesTa this.pageLink = new PageLink(10, 0, null, sortOrder); } this.pageLink.pageSize = this.displayPagination ? this.defaultPageSize : MAX_SAFE_PAGE_SIZE; - if (routerQueryParams.hasOwnProperty('page')) { - this.pageLink.page = Number(routerQueryParams.page); - } - if (routerQueryParams.hasOwnProperty('pageSize')) { - this.pageLink.pageSize = Number(routerQueryParams.pageSize); - } - if (routerQueryParams.hasOwnProperty('textSearch') && !isEmptyStr(routerQueryParams.textSearch)) { - this.textSearchMode = true; - this.pageLink.textSearch = decodeURI(routerQueryParams.textSearch); + if (this.pageMode) { + if (routerQueryParams.hasOwnProperty('page')) { + this.pageLink.page = Number(routerQueryParams.page); + } + if (routerQueryParams.hasOwnProperty('pageSize')) { + this.pageLink.pageSize = Number(routerQueryParams.pageSize); + } + if (routerQueryParams.hasOwnProperty('textSearch') && !isEmptyStr(routerQueryParams.textSearch)) { + this.textSearchMode = true; + this.pageLink.textSearch = decodeURI(routerQueryParams.textSearch); + } } this.dataSource = this.entitiesTableConfig.dataSource(this.dataLoaded.bind(this)); if (this.entitiesTableConfig.onLoadAction) {