From 661480ff3950dc6343f2d6bbcf0083837a7ffaae Mon Sep 17 00:00:00 2001 From: ShvaykaD Date: Fri, 9 Dec 2022 17:33:17 +0200 Subject: [PATCH 1/5] base entity service improvement: init commit --- common/dao-api/pom.xml | 4 + .../server/dao/alarm/AlarmService.java | 3 +- .../server/dao/asset/AssetProfileService.java | 3 +- .../server/dao/asset/AssetService.java | 3 +- .../server/dao/audit/AuditLogService.java | 3 +- .../server/dao/customer/CustomerService.java | 3 +- .../dao/dashboard/DashboardService.java | 3 +- .../dao/device/DeviceProfileService.java | 4 +- .../server/dao/device/DeviceService.java | 3 +- .../server/dao/edge/EdgeService.java | 3 +- .../server/dao/entity/EntityService.java | 4 +- .../dao/entity/EntityServiceBeanFactory.java | 43 ++++++ .../dao/entity/SimpleEntityService.java | 39 +++++ .../dao/entityview/EntityViewService.java | 3 +- .../server/dao/event/EventService.java | 3 +- .../server/dao/ota/OtaPackageService.java | 3 +- .../server/dao/queue/QueueService.java | 3 +- .../server/dao/resource/ResourceService.java | 3 +- .../server/dao/rpc/RpcService.java | 3 +- .../server/dao/rule/RuleChainService.java | 3 +- .../dao/tenant/TenantProfileService.java | 3 +- .../server/dao/tenant/TenantService.java | 3 +- .../dao/usagerecord/ApiUsageStateService.java | 3 +- .../server/dao/user/UserService.java | 3 +- .../server/dao/widget/WidgetTypeService.java | 3 +- .../dao/widget/WidgetsBundleService.java | 3 +- dao/pom.xml | 4 + .../server/dao/alarm/BaseAlarmService.java | 30 +++- .../dao/asset/AssetProfileServiceImpl.java | 11 +- .../server/dao/asset/BaseAssetService.java | 16 +- .../server/dao/audit/AuditLogServiceImpl.java | 10 +- .../dao/customer/CustomerServiceImpl.java | 15 +- .../dao/dashboard/DashboardServiceImpl.java | 9 +- .../dao/device/DeviceProfileServiceImpl.java | 11 +- .../server/dao/device/DeviceServiceImpl.java | 15 +- .../server/dao/edge/EdgeServiceImpl.java | 15 +- .../server/dao/entity/BaseEntityService.java | 139 ++---------------- .../dao/entityview/EntityViewServiceImpl.java | 15 +- .../server/dao/event/BaseEventService.java | 2 +- .../server/dao/ota/BaseOtaPackageService.java | 9 +- .../server/dao/queue/BaseQueueService.java | 11 +- .../dao/relation/BaseRelationService.java | 9 +- .../dao/resource/BaseResourceService.java | 9 +- .../server/dao/rpc/BaseRpcService.java | 2 +- .../server/dao/rule/BaseRuleChainService.java | 12 +- .../dao/tenant/TenantProfileServiceImpl.java | 11 +- .../server/dao/tenant/TenantServiceImpl.java | 9 +- .../usagerecord/ApiUsageStateServiceImpl.java | 2 +- .../server/dao/user/UserServiceImpl.java | 16 +- .../util/AbstractBufferedRateExecutor.java | 4 +- .../dao/widget/WidgetTypeServiceImpl.java | 2 +- .../dao/widget/WidgetsBundleServiceImpl.java | 11 +- .../BaseEntityServiceBeanFactoryTest.java | 46 ++++++ .../sql/EntityServiceBeanFactorySqlTest.java | 24 +++ pom.xml | 6 + 55 files changed, 441 insertions(+), 191 deletions(-) create mode 100644 common/dao-api/src/main/java/org/thingsboard/server/dao/entity/EntityServiceBeanFactory.java create mode 100644 common/dao-api/src/main/java/org/thingsboard/server/dao/entity/SimpleEntityService.java create mode 100644 dao/src/test/java/org/thingsboard/server/dao/service/BaseEntityServiceBeanFactoryTest.java create mode 100644 dao/src/test/java/org/thingsboard/server/dao/service/sql/EntityServiceBeanFactorySqlTest.java diff --git a/common/dao-api/pom.xml b/common/dao-api/pom.xml index 527249e999..a748c33ac6 100644 --- a/common/dao-api/pom.xml +++ b/common/dao-api/pom.xml @@ -115,6 +115,10 @@ awaitility test + + org.apache.commons + commons-text + diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/alarm/AlarmService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/alarm/AlarmService.java index b8041aa3fc..b0a4f551b1 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/alarm/AlarmService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/alarm/AlarmService.java @@ -30,13 +30,14 @@ import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.query.AlarmData; import org.thingsboard.server.common.data.query.AlarmDataQuery; +import org.thingsboard.server.dao.entity.SimpleEntityService; import java.util.Collection; /** * Created by ashvayka on 11.05.17. */ -public interface AlarmService { +public interface AlarmService extends SimpleEntityService { AlarmOperationResult createOrUpdateAlarm(Alarm alarm); diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/asset/AssetProfileService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/asset/AssetProfileService.java index c86463336a..d5a723acb1 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/asset/AssetProfileService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/asset/AssetProfileService.java @@ -21,8 +21,9 @@ import org.thingsboard.server.common.data.id.AssetProfileId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; +import org.thingsboard.server.dao.entity.SimpleEntityService; -public interface AssetProfileService { +public interface AssetProfileService extends SimpleEntityService { AssetProfile findAssetProfileById(TenantId tenantId, AssetProfileId assetProfileId); diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/asset/AssetService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/asset/AssetService.java index 955444ac52..0766ad0df9 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/asset/AssetService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/asset/AssetService.java @@ -27,10 +27,11 @@ import org.thingsboard.server.common.data.id.EdgeId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; +import org.thingsboard.server.dao.entity.SimpleEntityService; import java.util.List; -public interface AssetService { +public interface AssetService extends SimpleEntityService { AssetInfo findAssetInfoById(TenantId tenantId, AssetId assetId); diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/audit/AuditLogService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/audit/AuditLogService.java index 01b3bf4b5e..9f4b05420c 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/audit/AuditLogService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/audit/AuditLogService.java @@ -25,10 +25,11 @@ import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.id.UserId; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.TimePageLink; +import org.thingsboard.server.dao.entity.SimpleEntityService; import java.util.List; -public interface AuditLogService { +public interface AuditLogService extends SimpleEntityService { PageData findAuditLogsByTenantIdAndCustomerId(TenantId tenantId, CustomerId customerId, List actionTypes, TimePageLink pageLink); diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/customer/CustomerService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/customer/CustomerService.java index 3f28512946..3a13d596fb 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/customer/CustomerService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/customer/CustomerService.java @@ -21,10 +21,11 @@ import org.thingsboard.server.common.data.id.CustomerId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; +import org.thingsboard.server.dao.entity.SimpleEntityService; import java.util.Optional; -public interface CustomerService { +public interface CustomerService extends SimpleEntityService { Customer findCustomerById(TenantId tenantId, CustomerId customerId); diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/dashboard/DashboardService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/dashboard/DashboardService.java index 4032797b5b..280b9b4034 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/dashboard/DashboardService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/dashboard/DashboardService.java @@ -24,10 +24,11 @@ import org.thingsboard.server.common.data.id.EdgeId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; +import org.thingsboard.server.dao.entity.SimpleEntityService; import java.util.List; -public interface DashboardService { +public interface DashboardService extends SimpleEntityService { Dashboard findDashboardById(TenantId tenantId, DashboardId dashboardId); diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/device/DeviceProfileService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/device/DeviceProfileService.java index fdf3b8e594..eac99d5fab 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/device/DeviceProfileService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/device/DeviceProfileService.java @@ -17,13 +17,13 @@ package org.thingsboard.server.dao.device; import org.thingsboard.server.common.data.DeviceProfile; import org.thingsboard.server.common.data.DeviceProfileInfo; -import org.thingsboard.server.common.data.EntityInfo; import org.thingsboard.server.common.data.id.DeviceProfileId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; +import org.thingsboard.server.dao.entity.SimpleEntityService; -public interface DeviceProfileService { +public interface DeviceProfileService extends SimpleEntityService { DeviceProfile findDeviceProfileById(TenantId tenantId, DeviceProfileId deviceProfileId); diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/device/DeviceService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/device/DeviceService.java index d68e8e1bf6..027011c007 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/device/DeviceService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/device/DeviceService.java @@ -33,11 +33,12 @@ import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; import org.thingsboard.server.common.data.security.DeviceCredentials; import org.thingsboard.server.dao.device.provision.ProvisionRequest; +import org.thingsboard.server.dao.entity.SimpleEntityService; import java.util.List; import java.util.UUID; -public interface DeviceService { +public interface DeviceService extends SimpleEntityService { DeviceInfo findDeviceInfoById(TenantId tenantId, DeviceId deviceId); diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/edge/EdgeService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/edge/EdgeService.java index b3372bf30c..589d90c6c0 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/edge/EdgeService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/edge/EdgeService.java @@ -26,11 +26,12 @@ import org.thingsboard.server.common.data.id.EntityId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; +import org.thingsboard.server.dao.entity.SimpleEntityService; import java.util.List; import java.util.Optional; -public interface EdgeService { +public interface EdgeService extends SimpleEntityService { Edge findEdgeById(TenantId tenantId, EdgeId edgeId); diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/entity/EntityService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/entity/EntityService.java index 986da96d46..161c1e2b97 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/entity/EntityService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/entity/EntityService.java @@ -24,9 +24,11 @@ import org.thingsboard.server.common.data.query.EntityCountQuery; import org.thingsboard.server.common.data.query.EntityData; import org.thingsboard.server.common.data.query.EntityDataQuery; +import java.util.Optional; + public interface EntityService { - ListenableFuture fetchEntityNameAsync(TenantId tenantId, EntityId entityId); + ListenableFuture> fetchEntityNameAsync(TenantId tenantId, EntityId entityId); CustomerId fetchEntityCustomerId(TenantId tenantId, EntityId entityId); diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/entity/EntityServiceBeanFactory.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/entity/EntityServiceBeanFactory.java new file mode 100644 index 0000000000..2bc47eba80 --- /dev/null +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/entity/EntityServiceBeanFactory.java @@ -0,0 +1,43 @@ +/** + * Copyright © 2016-2022 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.dao.entity; + +import org.apache.commons.text.CaseUtils; +import org.springframework.beans.factory.BeanFactory; +import org.springframework.stereotype.Service; +import org.thingsboard.server.common.data.EntityType; + +@Service +public class EntityServiceBeanFactory { + + private static final String SERVICE_SUFFIX = "DaoService"; + + private final BeanFactory beanFactory; + + public EntityServiceBeanFactory(BeanFactory beanFactory) { + this.beanFactory = beanFactory; + } + + public SimpleEntityService getServiceByEntityType(EntityType entityType) { + String beanName = EntityType.RULE_NODE.equals(entityType) ? getBeanName(EntityType.RULE_CHAIN) : getBeanName(entityType); + return beanFactory.getBean(beanName, SimpleEntityService.class); + } + + private String getBeanName(EntityType entityType) { + return CaseUtils.toCamelCase(entityType.name(), true, '_') + SERVICE_SUFFIX; + } + +} diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/entity/SimpleEntityService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/entity/SimpleEntityService.java new file mode 100644 index 0000000000..52889613ac --- /dev/null +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/entity/SimpleEntityService.java @@ -0,0 +1,39 @@ +/** + * Copyright © 2016-2022 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.dao.entity; + +import com.google.common.util.concurrent.Futures; +import com.google.common.util.concurrent.ListenableFuture; +import org.thingsboard.server.common.data.HasName; +import org.thingsboard.server.common.data.id.CustomerId; +import org.thingsboard.server.common.data.id.EntityId; +import org.thingsboard.server.common.data.id.TenantId; + +import static org.thingsboard.server.common.data.id.EntityId.NULL_UUID; + +public interface SimpleEntityService { + + CustomerId NULL_CUSTOMER_ID = new CustomerId(NULL_UUID); + + default ListenableFuture fetchHasNameEntityAsync(TenantId tenantId, EntityId entityId) { + return Futures.immediateFuture(null); + } + + default CustomerId getCustomerId(TenantId tenantId, EntityId entityId) { + return NULL_CUSTOMER_ID; + } + +} diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/entityview/EntityViewService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/entityview/EntityViewService.java index bb790c78cb..a5900a6106 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/entityview/EntityViewService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/entityview/EntityViewService.java @@ -27,13 +27,14 @@ import org.thingsboard.server.common.data.id.EntityViewId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; +import org.thingsboard.server.dao.entity.SimpleEntityService; import java.util.List; /** * Created by Victor Basanets on 8/27/2017. */ -public interface EntityViewService { +public interface EntityViewService extends SimpleEntityService { EntityView saveEntityView(EntityView entityView); diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/event/EventService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/event/EventService.java index 3b0de80811..a5149b4153 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/event/EventService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/event/EventService.java @@ -24,10 +24,11 @@ import org.thingsboard.server.common.data.id.EntityId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.TimePageLink; +import org.thingsboard.server.dao.entity.SimpleEntityService; import java.util.List; -public interface EventService { +public interface EventService extends SimpleEntityService { ListenableFuture saveAsync(Event event); diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/ota/OtaPackageService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/ota/OtaPackageService.java index c643ae4797..6ed9b904b0 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/ota/OtaPackageService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/ota/OtaPackageService.java @@ -25,10 +25,11 @@ import org.thingsboard.server.common.data.ota.ChecksumAlgorithm; import org.thingsboard.server.common.data.ota.OtaPackageType; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; +import org.thingsboard.server.dao.entity.SimpleEntityService; import java.nio.ByteBuffer; -public interface OtaPackageService { +public interface OtaPackageService extends SimpleEntityService { OtaPackageInfo saveOtaPackageInfo(OtaPackageInfo otaPackageInfo, boolean isUrl); diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/queue/QueueService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/queue/QueueService.java index acc3190da9..bb7d0650c9 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/queue/QueueService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/queue/QueueService.java @@ -20,10 +20,11 @@ import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; import org.thingsboard.server.common.data.queue.Queue; +import org.thingsboard.server.dao.entity.SimpleEntityService; import java.util.List; -public interface QueueService { +public interface QueueService extends SimpleEntityService { Queue saveQueue(Queue queue); diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/resource/ResourceService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/resource/ResourceService.java index 1cce5ae62a..8a706f70d4 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/resource/ResourceService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/resource/ResourceService.java @@ -23,10 +23,11 @@ import org.thingsboard.server.common.data.id.TbResourceId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; +import org.thingsboard.server.dao.entity.SimpleEntityService; import java.util.List; -public interface ResourceService { +public interface ResourceService extends SimpleEntityService { TbResource saveResource(TbResource resource); TbResource getResource(TenantId tenantId, ResourceType resourceType, String resourceId); diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/rpc/RpcService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/rpc/RpcService.java index 25a82e6113..e881bf080a 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/rpc/RpcService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/rpc/RpcService.java @@ -23,8 +23,9 @@ import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; import org.thingsboard.server.common.data.rpc.Rpc; import org.thingsboard.server.common.data.rpc.RpcStatus; +import org.thingsboard.server.dao.entity.SimpleEntityService; -public interface RpcService { +public interface RpcService extends SimpleEntityService { Rpc save(Rpc rpc); void deleteRpc(TenantId tenantId, RpcId id); diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/rule/RuleChainService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/rule/RuleChainService.java index 9a856ae66a..1e194b5278 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/rule/RuleChainService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/rule/RuleChainService.java @@ -31,6 +31,7 @@ import org.thingsboard.server.common.data.rule.RuleChainMetaData; import org.thingsboard.server.common.data.rule.RuleChainType; import org.thingsboard.server.common.data.rule.RuleChainUpdateResult; import org.thingsboard.server.common.data.rule.RuleNode; +import org.thingsboard.server.dao.entity.SimpleEntityService; import java.util.Collection; import java.util.List; @@ -38,7 +39,7 @@ import java.util.List; /** * Created by igor on 3/12/18. */ -public interface RuleChainService { +public interface RuleChainService extends SimpleEntityService { RuleChain saveRuleChain(RuleChain ruleChain); diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/tenant/TenantProfileService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/tenant/TenantProfileService.java index c15ac84b3a..984f12cd59 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/tenant/TenantProfileService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/tenant/TenantProfileService.java @@ -21,8 +21,9 @@ import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.id.TenantProfileId; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; +import org.thingsboard.server.dao.entity.SimpleEntityService; -public interface TenantProfileService { +public interface TenantProfileService extends SimpleEntityService { TenantProfile findTenantProfileById(TenantId tenantId, TenantProfileId tenantProfileId); diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/tenant/TenantService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/tenant/TenantService.java index 2dcccc843f..d73717640a 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/tenant/TenantService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/tenant/TenantService.java @@ -22,10 +22,11 @@ import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.id.TenantProfileId; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; +import org.thingsboard.server.dao.entity.SimpleEntityService; import java.util.List; -public interface TenantService { +public interface TenantService extends SimpleEntityService { Tenant findTenantById(TenantId tenantId); diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/usagerecord/ApiUsageStateService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/usagerecord/ApiUsageStateService.java index 44950d2803..0c13c7b490 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/usagerecord/ApiUsageStateService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/usagerecord/ApiUsageStateService.java @@ -19,8 +19,9 @@ import org.thingsboard.server.common.data.ApiUsageState; import org.thingsboard.server.common.data.id.ApiUsageStateId; import org.thingsboard.server.common.data.id.EntityId; import org.thingsboard.server.common.data.id.TenantId; +import org.thingsboard.server.dao.entity.SimpleEntityService; -public interface ApiUsageStateService { +public interface ApiUsageStateService extends SimpleEntityService { ApiUsageState createDefaultApiUsageState(TenantId id, EntityId entityId); diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/user/UserService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/user/UserService.java index 76891e950f..8d85a5f309 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/user/UserService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/user/UserService.java @@ -24,8 +24,9 @@ import org.thingsboard.server.common.data.id.UserId; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; import org.thingsboard.server.common.data.security.UserCredentials; +import org.thingsboard.server.dao.entity.SimpleEntityService; -public interface UserService { +public interface UserService extends SimpleEntityService { User findUserById(TenantId tenantId, UserId userId); diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/widget/WidgetTypeService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/widget/WidgetTypeService.java index 15875bfb9a..b21e2177a2 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/widget/WidgetTypeService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/widget/WidgetTypeService.java @@ -20,10 +20,11 @@ import org.thingsboard.server.common.data.id.WidgetTypeId; import org.thingsboard.server.common.data.widget.WidgetType; import org.thingsboard.server.common.data.widget.WidgetTypeDetails; import org.thingsboard.server.common.data.widget.WidgetTypeInfo; +import org.thingsboard.server.dao.entity.SimpleEntityService; import java.util.List; -public interface WidgetTypeService { +public interface WidgetTypeService extends SimpleEntityService { WidgetType findWidgetTypeById(TenantId tenantId, WidgetTypeId widgetTypeId); diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleService.java index f9a5844606..5a6a05264c 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleService.java @@ -20,10 +20,11 @@ import org.thingsboard.server.common.data.id.WidgetsBundleId; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; import org.thingsboard.server.common.data.widget.WidgetsBundle; +import org.thingsboard.server.dao.entity.SimpleEntityService; import java.util.List; -public interface WidgetsBundleService { +public interface WidgetsBundleService extends SimpleEntityService { WidgetsBundle findWidgetsBundleById(TenantId tenantId, WidgetsBundleId widgetsBundleId); diff --git a/dao/pom.xml b/dao/pom.xml index 8de92c3640..7ccd82eb80 100644 --- a/dao/pom.xml +++ b/dao/pom.xml @@ -108,6 +108,10 @@ org.apache.commons commons-lang3 + + org.apache.commons + commons-text + commons-collections commons-collections diff --git a/dao/src/main/java/org/thingsboard/server/dao/alarm/BaseAlarmService.java b/dao/src/main/java/org/thingsboard/server/dao/alarm/BaseAlarmService.java index e6012602f1..9333c8d578 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/alarm/BaseAlarmService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/alarm/BaseAlarmService.java @@ -27,6 +27,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import org.thingsboard.common.util.ThingsBoardThreadFactory; +import org.thingsboard.server.common.data.HasName; import org.thingsboard.server.common.data.alarm.Alarm; import org.thingsboard.server.common.data.alarm.AlarmInfo; import org.thingsboard.server.common.data.alarm.AlarmQuery; @@ -48,6 +49,7 @@ import org.thingsboard.server.common.data.relation.EntitySearchDirection; import org.thingsboard.server.common.data.relation.RelationsSearchParameters; import org.thingsboard.server.dao.entity.AbstractEntityService; import org.thingsboard.server.dao.entity.EntityService; +import org.thingsboard.server.dao.entity.SimpleEntityService; import org.thingsboard.server.dao.service.DataValidator; import javax.annotation.Nullable; @@ -67,7 +69,7 @@ import java.util.stream.Stream; import static org.thingsboard.server.dao.service.Validator.validateId; -@Service +@Service("AlarmDaoService") @Slf4j public class BaseAlarmService extends AbstractEntityService implements AlarmService { @@ -283,8 +285,8 @@ public class BaseAlarmService extends AbstractEntityService implements AlarmServ a -> { AlarmInfo alarmInfo = new AlarmInfo(a); return Futures.transform( - entityService.fetchEntityNameAsync(tenantId, alarmInfo.getOriginator()), originatorName -> { - alarmInfo.setOriginatorName(originatorName); + entityService.fetchEntityNameAsync(tenantId, alarmInfo.getOriginator()), originatorNameOpt -> { + alarmInfo.setOriginatorName(originatorNameOpt.isEmpty() ? "N/A" : originatorNameOpt.get()); return alarmInfo; }, MoreExecutors.directExecutor()); }, MoreExecutors.directExecutor()); @@ -312,11 +314,8 @@ public class BaseAlarmService extends AbstractEntityService implements AlarmServ List> alarmFutures = new ArrayList<>(alarms.getData().size()); for (AlarmInfo alarmInfo : alarms.getData()) { alarmFutures.add(Futures.transform( - entityService.fetchEntityNameAsync(tenantId, alarmInfo.getOriginator()), originatorName -> { - if (originatorName == null) { - originatorName = "Deleted"; - } - alarmInfo.setOriginatorName(originatorName); + entityService.fetchEntityNameAsync(tenantId, alarmInfo.getOriginator()), originatorNameOpt -> { + alarmInfo.setOriginatorName(originatorNameOpt.isEmpty() ? "Deleted" : originatorNameOpt.get()); return alarmInfo; }, MoreExecutors.directExecutor() )); @@ -409,4 +408,19 @@ public class BaseAlarmService extends AbstractEntityService implements AlarmServ Alarm entity = alarmDao.findAlarmById(tenantId, alarmId.getId()); return function.apply(entity); } + + @Override + public ListenableFuture fetchHasNameEntityAsync(TenantId tenantId, EntityId entityId) { + return findAlarmByIdAsync(tenantId, new AlarmId(entityId.getId())); + } + + @Override + public CustomerId getCustomerId(TenantId tenantId, EntityId entityId) { + try { + Alarm alarm = findAlarmByIdAsync(tenantId, new AlarmId(entityId.getId())).get(); + return alarm != null ? alarm.getCustomerId() : SimpleEntityService.NULL_CUSTOMER_ID; + } catch (Exception e) { + return SimpleEntityService.NULL_CUSTOMER_ID; + } + } } diff --git a/dao/src/main/java/org/thingsboard/server/dao/asset/AssetProfileServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/asset/AssetProfileServiceImpl.java index 58470cfc6b..5710b14503 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/asset/AssetProfileServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/asset/AssetProfileServiceImpl.java @@ -15,17 +15,21 @@ */ package org.thingsboard.server.dao.asset; +import com.google.common.util.concurrent.Futures; +import com.google.common.util.concurrent.ListenableFuture; import lombok.extern.slf4j.Slf4j; import org.hibernate.exception.ConstraintViolationException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.event.TransactionalEventListener; +import org.thingsboard.server.common.data.HasName; import org.thingsboard.server.common.data.StringUtils; import org.thingsboard.server.common.data.asset.Asset; import org.thingsboard.server.common.data.asset.AssetProfile; import org.thingsboard.server.common.data.asset.AssetProfileInfo; import org.thingsboard.server.common.data.id.AssetProfileId; +import org.thingsboard.server.common.data.id.EntityId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; @@ -41,7 +45,7 @@ import java.util.Map; import static org.thingsboard.server.dao.service.Validator.validateId; -@Service +@Service("AssetProfileDaoService") @Slf4j public class AssetProfileServiceImpl extends AbstractCachedEntityService implements AssetProfileService { @@ -264,6 +268,11 @@ public class AssetProfileServiceImpl extends AbstractCachedEntityService fetchHasNameEntityAsync(TenantId tenantId, EntityId entityId) { + return Futures.immediateFuture(findAssetProfileById(tenantId, new AssetProfileId(entityId.getId()))); + } + private PaginatedRemover tenantAssetProfilesRemover = new PaginatedRemover<>() { diff --git a/dao/src/main/java/org/thingsboard/server/dao/asset/BaseAssetService.java b/dao/src/main/java/org/thingsboard/server/dao/asset/BaseAssetService.java index 15d6df1327..ff57516c52 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/asset/BaseAssetService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/asset/BaseAssetService.java @@ -27,6 +27,7 @@ import org.springframework.transaction.event.TransactionalEventListener; import org.thingsboard.server.common.data.EntitySubtype; import org.thingsboard.server.common.data.EntityType; import org.thingsboard.server.common.data.EntityView; +import org.thingsboard.server.common.data.HasName; import org.thingsboard.server.common.data.StringUtils; import org.thingsboard.server.common.data.asset.Asset; import org.thingsboard.server.common.data.asset.AssetInfo; @@ -45,6 +46,7 @@ import org.thingsboard.server.common.data.relation.EntityRelation; import org.thingsboard.server.common.data.relation.EntitySearchDirection; import org.thingsboard.server.common.data.relation.RelationTypeGroup; import org.thingsboard.server.dao.entity.AbstractCachedEntityService; +import org.thingsboard.server.dao.entity.SimpleEntityService; import org.thingsboard.server.dao.exception.DataValidationException; import org.thingsboard.server.dao.service.DataValidator; import org.thingsboard.server.dao.service.PaginatedRemover; @@ -61,7 +63,7 @@ import static org.thingsboard.server.dao.service.Validator.validateIds; import static org.thingsboard.server.dao.service.Validator.validatePageLink; import static org.thingsboard.server.dao.service.Validator.validateString; -@Service +@Service("AssetDaoService") @Slf4j public class BaseAssetService extends AbstractCachedEntityService implements AssetService { @@ -429,4 +431,16 @@ public class BaseAssetService extends AbstractCachedEntityService fetchHasNameEntityAsync(TenantId tenantId, EntityId entityId) { + return findAssetByIdAsync(tenantId, new AssetId(entityId.getId())); + } + + @Override + public CustomerId getCustomerId(TenantId tenantId, EntityId entityId) { + Asset asset = findAssetById(tenantId, new AssetId(entityId.getId())); + return asset != null ? asset.getCustomerId() : SimpleEntityService.NULL_CUSTOMER_ID; + } + } diff --git a/dao/src/main/java/org/thingsboard/server/dao/audit/AuditLogServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/audit/AuditLogServiceImpl.java index 8bb862bea5..1afd76ed56 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/audit/AuditLogServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/audit/AuditLogServiceImpl.java @@ -53,6 +53,7 @@ import org.thingsboard.server.dao.service.DataValidator; import java.io.PrintWriter; import java.io.StringWriter; import java.util.List; +import java.util.Optional; import java.util.UUID; import java.util.stream.Collectors; @@ -60,7 +61,7 @@ import static org.thingsboard.server.dao.service.Validator.validateEntityId; import static org.thingsboard.server.dao.service.Validator.validateId; @Slf4j -@Service +@Service("AuditLogDaoService") @ConditionalOnProperty(prefix = "audit-log", value = "enabled", havingValue = "true") public class AuditLogServiceImpl implements AuditLogService { @@ -121,13 +122,14 @@ public class AuditLogServiceImpl implements AuditLogService { JsonNode actionData = constructActionData(entityId, entity, actionType, additionalInfo); ActionStatus actionStatus = ActionStatus.SUCCESS; String failureDetails = ""; - String entityName = ""; + String entityName = "N/A"; if (entity != null) { entityName = entity.getName(); } else { try { - entityName = entityService.fetchEntityNameAsync(tenantId, entityId).get(); - } catch (Exception ex) { + Optional entityNameOpt = entityService.fetchEntityNameAsync(tenantId, entityId).get(); + entityName = entityNameOpt.orElse(entityName); + } catch (Exception ignored) { } } if (e != null) { diff --git a/dao/src/main/java/org/thingsboard/server/dao/customer/CustomerServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/customer/CustomerServiceImpl.java index 093ad4b65c..a28798de60 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/customer/CustomerServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/customer/CustomerServiceImpl.java @@ -24,7 +24,9 @@ import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.thingsboard.server.common.data.Customer; +import org.thingsboard.server.common.data.HasName; import org.thingsboard.server.common.data.id.CustomerId; +import org.thingsboard.server.common.data.id.EntityId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; @@ -44,7 +46,7 @@ import java.util.Optional; import static org.thingsboard.server.dao.service.Validator.validateId; -@Service +@Service("CustomerDaoService") @Slf4j public class CustomerServiceImpl extends AbstractEntityService implements CustomerService { @@ -178,4 +180,15 @@ public class CustomerServiceImpl extends AbstractEntityService implements Custom deleteCustomer(tenantId, new CustomerId(entity.getUuidId())); } }; + + @Override + public ListenableFuture fetchHasNameEntityAsync(TenantId tenantId, EntityId entityId) { + return findCustomerByIdAsync(tenantId, new CustomerId(entityId.getId())); + } + + @Override + public CustomerId getCustomerId(TenantId tenantId, EntityId entityId) { + // todo ask Andrew why we are not checking for parent customer. + return new CustomerId(entityId.getId()); + } } diff --git a/dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardServiceImpl.java index 2de73826e3..eadd6deaf0 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardServiceImpl.java @@ -24,10 +24,12 @@ import org.springframework.transaction.annotation.Transactional; import org.thingsboard.server.common.data.Customer; import org.thingsboard.server.common.data.Dashboard; import org.thingsboard.server.common.data.DashboardInfo; +import org.thingsboard.server.common.data.HasName; import org.thingsboard.server.common.data.edge.Edge; import org.thingsboard.server.common.data.id.CustomerId; import org.thingsboard.server.common.data.id.DashboardId; import org.thingsboard.server.common.data.id.EdgeId; +import org.thingsboard.server.common.data.id.EntityId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; @@ -45,7 +47,7 @@ import java.util.List; import static org.thingsboard.server.dao.service.Validator.validateId; -@Service +@Service("DashboardDaoService") @Slf4j public class DashboardServiceImpl extends AbstractEntityService implements DashboardService { @@ -307,6 +309,11 @@ public class DashboardServiceImpl extends AbstractEntityService implements Dashb } }; + @Override + public ListenableFuture fetchHasNameEntityAsync(TenantId tenantId, EntityId entityId) { + return findDashboardByIdAsync(tenantId, new DashboardId(entityId.getId())); + } + private class CustomerDashboardsUnassigner extends PaginatedRemover { private Customer customer; diff --git a/dao/src/main/java/org/thingsboard/server/dao/device/DeviceProfileServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/device/DeviceProfileServiceImpl.java index 40d190162f..f7972bdcaa 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/device/DeviceProfileServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/device/DeviceProfileServiceImpl.java @@ -15,6 +15,8 @@ */ package org.thingsboard.server.dao.device; +import com.google.common.util.concurrent.Futures; +import com.google.common.util.concurrent.ListenableFuture; import lombok.extern.slf4j.Slf4j; import org.hibernate.exception.ConstraintViolationException; import org.springframework.beans.factory.annotation.Autowired; @@ -28,12 +30,14 @@ import org.thingsboard.server.common.data.DeviceProfileInfo; import org.thingsboard.server.common.data.DeviceProfileProvisionType; import org.thingsboard.server.common.data.DeviceProfileType; import org.thingsboard.server.common.data.DeviceTransportType; +import org.thingsboard.server.common.data.HasName; import org.thingsboard.server.common.data.StringUtils; import org.thingsboard.server.common.data.device.profile.DefaultDeviceProfileConfiguration; import org.thingsboard.server.common.data.device.profile.DefaultDeviceProfileTransportConfiguration; import org.thingsboard.server.common.data.device.profile.DeviceProfileData; import org.thingsboard.server.common.data.device.profile.DisabledDeviceProfileProvisionConfiguration; import org.thingsboard.server.common.data.id.DeviceProfileId; +import org.thingsboard.server.common.data.id.EntityId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; @@ -50,7 +54,7 @@ import java.util.Map; import static org.thingsboard.server.dao.service.Validator.validateId; -@Service +@Service("DeviceProfileDaoService") @Slf4j public class DeviceProfileServiceImpl extends AbstractCachedEntityService implements DeviceProfileService { @@ -286,6 +290,11 @@ public class DeviceProfileServiceImpl extends AbstractCachedEntityService fetchHasNameEntityAsync(TenantId tenantId, EntityId entityId) { + return Futures.immediateFuture(findDeviceProfileById(tenantId, new DeviceProfileId(entityId.getId()))); + } + private PaginatedRemover tenantDeviceProfilesRemover = new PaginatedRemover<>() { diff --git a/dao/src/main/java/org/thingsboard/server/dao/device/DeviceServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/device/DeviceServiceImpl.java index 486570dc2e..cdcb98e6d0 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/device/DeviceServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/device/DeviceServiceImpl.java @@ -37,6 +37,7 @@ import org.thingsboard.server.common.data.DeviceTransportType; import org.thingsboard.server.common.data.EntitySubtype; import org.thingsboard.server.common.data.EntityType; import org.thingsboard.server.common.data.EntityView; +import org.thingsboard.server.common.data.HasName; import org.thingsboard.server.common.data.StringUtils; import org.thingsboard.server.common.data.device.DeviceSearchQuery; import org.thingsboard.server.common.data.device.credentials.BasicMqttCredentials; @@ -66,6 +67,7 @@ import org.thingsboard.server.dao.device.provision.ProvisionFailedException; import org.thingsboard.server.dao.device.provision.ProvisionRequest; import org.thingsboard.server.dao.device.provision.ProvisionResponseStatus; import org.thingsboard.server.dao.entity.AbstractCachedEntityService; +import org.thingsboard.server.dao.entity.SimpleEntityService; import org.thingsboard.server.dao.event.EventService; import org.thingsboard.server.dao.exception.DataValidationException; import org.thingsboard.server.dao.service.DataValidator; @@ -85,7 +87,7 @@ import static org.thingsboard.server.dao.service.Validator.validateIds; import static org.thingsboard.server.dao.service.Validator.validatePageLink; import static org.thingsboard.server.dao.service.Validator.validateString; -@Service +@Service("DeviceDaoService") @Slf4j public class DeviceServiceImpl extends AbstractCachedEntityService implements DeviceService { @@ -705,4 +707,15 @@ public class DeviceServiceImpl extends AbstractCachedEntityService fetchHasNameEntityAsync(TenantId tenantId, EntityId entityId) { + return findDeviceByIdAsync(tenantId, new DeviceId(entityId.getId())); + } + + @Override + public CustomerId getCustomerId(TenantId tenantId, EntityId entityId) { + Device device = findDeviceById(tenantId, new DeviceId(entityId.getId())); + return device != null ? device.getCustomerId() : SimpleEntityService.NULL_CUSTOMER_ID; + } } diff --git a/dao/src/main/java/org/thingsboard/server/dao/edge/EdgeServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/edge/EdgeServiceImpl.java index 3ab3f6d905..5f2176bb50 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/edge/EdgeServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/edge/EdgeServiceImpl.java @@ -32,6 +32,7 @@ import org.springframework.transaction.event.TransactionalEventListener; import org.thingsboard.common.util.JacksonUtil; import org.thingsboard.server.common.data.EntitySubtype; import org.thingsboard.server.common.data.EntityType; +import org.thingsboard.server.common.data.HasName; import org.thingsboard.server.common.data.StringUtils; import org.thingsboard.server.common.data.User; import org.thingsboard.server.common.data.edge.Edge; @@ -52,6 +53,7 @@ import org.thingsboard.server.common.data.relation.EntitySearchDirection; import org.thingsboard.server.common.data.rule.RuleChain; import org.thingsboard.server.common.data.rule.RuleNode; import org.thingsboard.server.dao.entity.AbstractCachedEntityService; +import org.thingsboard.server.dao.entity.SimpleEntityService; import org.thingsboard.server.dao.exception.DataValidationException; import org.thingsboard.server.dao.relation.RelationService; import org.thingsboard.server.dao.rule.RuleChainService; @@ -75,7 +77,7 @@ import static org.thingsboard.server.dao.service.Validator.validateIds; import static org.thingsboard.server.dao.service.Validator.validatePageLink; import static org.thingsboard.server.dao.service.Validator.validateString; -@Service +@Service("EdgeDaoService") @Slf4j public class EdgeServiceImpl extends AbstractCachedEntityService implements EdgeService { @@ -519,4 +521,15 @@ public class EdgeServiceImpl extends AbstractCachedEntityService fetchHasNameEntityAsync(TenantId tenantId, EntityId entityId) { + return findEdgeByIdAsync(tenantId, new EdgeId(entityId.getId())); + } + + @Override + public CustomerId getCustomerId(TenantId tenantId, EntityId entityId) { + Edge edge = findEdgeById(tenantId, new EdgeId(entityId.getId())); + return edge != null ? edge.getCustomerId() : SimpleEntityService.NULL_CUSTOMER_ID; + } } diff --git a/dao/src/main/java/org/thingsboard/server/dao/entity/BaseEntityService.java b/dao/src/main/java/org/thingsboard/server/dao/entity/BaseEntityService.java index 49cea353fb..4e69823492 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/entity/BaseEntityService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/entity/BaseEntityService.java @@ -23,21 +23,10 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; -import org.thingsboard.server.common.data.HasCustomerId; import org.thingsboard.server.common.data.HasName; -import org.thingsboard.server.common.data.id.AlarmId; -import org.thingsboard.server.common.data.id.AssetId; import org.thingsboard.server.common.data.id.CustomerId; -import org.thingsboard.server.common.data.id.DashboardId; -import org.thingsboard.server.common.data.id.DeviceId; -import org.thingsboard.server.common.data.id.EdgeId; import org.thingsboard.server.common.data.id.EntityId; -import org.thingsboard.server.common.data.id.EntityViewId; -import org.thingsboard.server.common.data.id.OtaPackageId; -import org.thingsboard.server.common.data.id.RuleChainId; -import org.thingsboard.server.common.data.id.TbResourceId; import org.thingsboard.server.common.data.id.TenantId; -import org.thingsboard.server.common.data.id.UserId; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.query.EntityCountQuery; import org.thingsboard.server.common.data.query.EntityData; @@ -58,7 +47,8 @@ import org.thingsboard.server.dao.rule.RuleChainService; import org.thingsboard.server.dao.tenant.TenantService; import org.thingsboard.server.dao.user.UserService; -import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID; +import java.util.Optional; + import static org.thingsboard.server.dao.service.Validator.validateId; /** @@ -71,41 +61,11 @@ public class BaseEntityService extends AbstractEntityService implements EntitySe public static final String INCORRECT_TENANT_ID = "Incorrect tenantId "; public static final String INCORRECT_CUSTOMER_ID = "Incorrect customerId "; - @Autowired - private AssetService assetService; - - @Autowired - private DeviceService deviceService; - - @Autowired - private EntityViewService entityViewService; - - @Autowired - private TenantService tenantService; - - @Autowired - private CustomerService customerService; - - @Autowired - private UserService userService; - - @Autowired - private DashboardService dashboardService; - - @Autowired - private AlarmService alarmService; - - @Autowired - private RuleChainService ruleChainService; - @Autowired private EntityQueryDao entityQueryDao; @Autowired - private ResourceService resourceService; - - @Autowired - private OtaPackageService otaPackageService; + EntityServiceBeanFactory entityServiceBeanFactory; @Override public long countEntitiesByQuery(TenantId tenantId, CustomerId customerId, EntityCountQuery query) { @@ -125,100 +85,19 @@ public class BaseEntityService extends AbstractEntityService implements EntitySe return this.entityQueryDao.findEntityDataByQuery(tenantId, customerId, query); } - //TODO: 3.1 Remove this from project. @Override - public ListenableFuture fetchEntityNameAsync(TenantId tenantId, EntityId entityId) { + public ListenableFuture> fetchEntityNameAsync(TenantId tenantId, EntityId entityId) { log.trace("Executing fetchEntityNameAsync [{}]", entityId); - ListenableFuture entityName; - ListenableFuture hasName; - switch (entityId.getEntityType()) { - case ASSET: - hasName = assetService.findAssetByIdAsync(tenantId, new AssetId(entityId.getId())); - break; - case DEVICE: - hasName = deviceService.findDeviceByIdAsync(tenantId, new DeviceId(entityId.getId())); - break; - case ENTITY_VIEW: - hasName = entityViewService.findEntityViewByIdAsync(tenantId, new EntityViewId(entityId.getId())); - break; - case TENANT: - hasName = tenantService.findTenantByIdAsync(tenantId, TenantId.fromUUID(entityId.getId())); - break; - case CUSTOMER: - hasName = customerService.findCustomerByIdAsync(tenantId, new CustomerId(entityId.getId())); - break; - case USER: - hasName = userService.findUserByIdAsync(tenantId, new UserId(entityId.getId())); - break; - case DASHBOARD: - hasName = dashboardService.findDashboardInfoByIdAsync(tenantId, new DashboardId(entityId.getId())); - break; - case ALARM: - hasName = alarmService.findAlarmByIdAsync(tenantId, new AlarmId(entityId.getId())); - break; - case RULE_CHAIN: - hasName = ruleChainService.findRuleChainByIdAsync(tenantId, new RuleChainId(entityId.getId())); - break; - case EDGE: - hasName = edgeService.findEdgeByIdAsync(tenantId, new EdgeId(entityId.getId())); - break; - case TB_RESOURCE: - hasName = resourceService.findResourceInfoByIdAsync(tenantId, new TbResourceId(entityId.getId())); - break; - case OTA_PACKAGE: - hasName = otaPackageService.findOtaPackageInfoByIdAsync(tenantId, new OtaPackageId(entityId.getId())); - break; - default: - throw new IllegalStateException("Not Implemented!"); - } - entityName = Futures.transform(hasName, (Function) hasName1 -> hasName1 != null ? hasName1.getName() : null, MoreExecutors.directExecutor()); - return entityName; + SimpleEntityService fetchEntityService = entityServiceBeanFactory.getServiceByEntityType(entityId.getEntityType()); + return Futures.transform(fetchEntityService.fetchHasNameEntityAsync(tenantId, entityId), + hasName -> hasName != null ? Optional.of(hasName.getName()) : Optional.empty(), MoreExecutors.directExecutor()); } @Override public CustomerId fetchEntityCustomerId(TenantId tenantId, EntityId entityId) { log.trace("Executing fetchEntityCustomerId [{}]", entityId); - HasCustomerId hasCustomerId = null; - switch (entityId.getEntityType()) { - case TENANT: - case RULE_CHAIN: - case RULE_NODE: - case DASHBOARD: - case WIDGETS_BUNDLE: - case WIDGET_TYPE: - case TENANT_PROFILE: - case DEVICE_PROFILE: - case ASSET_PROFILE: - case API_USAGE_STATE: - case TB_RESOURCE: - case OTA_PACKAGE: - break; - case CUSTOMER: - hasCustomerId = () -> new CustomerId(entityId.getId()); - break; - case USER: - hasCustomerId = userService.findUserById(tenantId, new UserId(entityId.getId())); - break; - case ASSET: - hasCustomerId = assetService.findAssetById(tenantId, new AssetId(entityId.getId())); - break; - case DEVICE: - hasCustomerId = deviceService.findDeviceById(tenantId, new DeviceId(entityId.getId())); - break; - case ALARM: - try { - hasCustomerId = alarmService.findAlarmByIdAsync(tenantId, new AlarmId(entityId.getId())).get(); - } catch (Exception e) { - } - break; - case ENTITY_VIEW: - hasCustomerId = entityViewService.findEntityViewById(tenantId, new EntityViewId(entityId.getId())); - break; - case EDGE: - hasCustomerId = edgeService.findEdgeById(tenantId, new EdgeId(entityId.getId())); - break; - } - return hasCustomerId != null ? hasCustomerId.getCustomerId() : new CustomerId(NULL_UUID); + SimpleEntityService fetchEntityService = entityServiceBeanFactory.getServiceByEntityType(entityId.getEntityType()); + return fetchEntityService.getCustomerId(tenantId, entityId); } private static void validateEntityCountQuery(EntityCountQuery query) { diff --git a/dao/src/main/java/org/thingsboard/server/dao/entityview/EntityViewServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/entityview/EntityViewServiceImpl.java index f9b6ee076a..eb345516c0 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/entityview/EntityViewServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/entityview/EntityViewServiceImpl.java @@ -28,6 +28,7 @@ import org.thingsboard.server.common.data.EntitySubtype; import org.thingsboard.server.common.data.EntityType; import org.thingsboard.server.common.data.EntityView; import org.thingsboard.server.common.data.EntityViewInfo; +import org.thingsboard.server.common.data.HasName; import org.thingsboard.server.common.data.StringUtils; import org.thingsboard.server.common.data.edge.Edge; import org.thingsboard.server.common.data.entityview.EntityViewSearchQuery; @@ -42,6 +43,7 @@ import org.thingsboard.server.common.data.relation.EntityRelation; import org.thingsboard.server.common.data.relation.EntitySearchDirection; import org.thingsboard.server.common.data.relation.RelationTypeGroup; import org.thingsboard.server.dao.entity.AbstractCachedEntityService; +import org.thingsboard.server.dao.entity.SimpleEntityService; import org.thingsboard.server.dao.exception.DataValidationException; import org.thingsboard.server.dao.service.DataValidator; import org.thingsboard.server.dao.service.PaginatedRemover; @@ -61,7 +63,7 @@ import static org.thingsboard.server.dao.service.Validator.validateString; /** * Created by Victor Basanets on 8/28/2017. */ -@Service +@Service("EntityViewDaoService") @Slf4j public class EntityViewServiceImpl extends AbstractCachedEntityService implements EntityViewService { @@ -408,4 +410,15 @@ public class EntityViewServiceImpl extends AbstractCachedEntityService fetchHasNameEntityAsync(TenantId tenantId, EntityId entityId) { + return findEntityViewByIdAsync(tenantId, new EntityViewId(entityId.getId())); + } + + @Override + public CustomerId getCustomerId(TenantId tenantId, EntityId entityId) { + EntityView entityView = findEntityViewById(tenantId, new EntityViewId(entityId.getId())); + return entityView != null ? entityView.getCustomerId() : SimpleEntityService.NULL_CUSTOMER_ID; + } } 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 26e6b611ec..2cd8f2db57 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 @@ -41,7 +41,7 @@ import java.util.function.BiConsumer; import java.util.function.Function; import java.util.stream.Collectors; -@Service +@Service("EventDaoService") @Slf4j public class BaseEventService implements EventService { diff --git a/dao/src/main/java/org/thingsboard/server/dao/ota/BaseOtaPackageService.java b/dao/src/main/java/org/thingsboard/server/dao/ota/BaseOtaPackageService.java index 841ff82441..ada68de7f3 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/ota/BaseOtaPackageService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/ota/BaseOtaPackageService.java @@ -24,10 +24,12 @@ import org.hibernate.exception.ConstraintViolationException; import org.springframework.stereotype.Service; import org.springframework.transaction.event.TransactionalEventListener; import org.thingsboard.server.cache.ota.OtaPackageDataCache; +import org.thingsboard.server.common.data.HasName; import org.thingsboard.server.common.data.OtaPackage; import org.thingsboard.server.common.data.OtaPackageInfo; import org.thingsboard.server.common.data.StringUtils; import org.thingsboard.server.common.data.id.DeviceProfileId; +import org.thingsboard.server.common.data.id.EntityId; import org.thingsboard.server.common.data.id.OtaPackageId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.ota.ChecksumAlgorithm; @@ -45,7 +47,7 @@ import java.util.Optional; import static org.thingsboard.server.dao.service.Validator.validateId; import static org.thingsboard.server.dao.service.Validator.validatePageLink; -@Service +@Service("OtaPackageDaoService") @Slf4j @RequiredArgsConstructor public class BaseOtaPackageService extends AbstractCachedEntityService implements OtaPackageService { @@ -234,4 +236,9 @@ public class BaseOtaPackageService extends AbstractCachedEntityService fetchHasNameEntityAsync(TenantId tenantId, EntityId entityId) { + return findOtaPackageInfoByIdAsync(tenantId, new OtaPackageId(entityId.getId())); + } + } diff --git a/dao/src/main/java/org/thingsboard/server/dao/queue/BaseQueueService.java b/dao/src/main/java/org/thingsboard/server/dao/queue/BaseQueueService.java index 45b5b2cc7e..d47c9fb3d3 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/queue/BaseQueueService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/queue/BaseQueueService.java @@ -15,13 +15,17 @@ */ package org.thingsboard.server.dao.queue; +import com.google.common.util.concurrent.Futures; +import com.google.common.util.concurrent.ListenableFuture; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.hibernate.exception.ConstraintViolationException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; +import org.thingsboard.server.common.data.HasName; import org.thingsboard.server.common.data.TenantProfile; +import org.thingsboard.server.common.data.id.EntityId; import org.thingsboard.server.common.data.id.QueueId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.PageData; @@ -36,7 +40,7 @@ import org.thingsboard.server.dao.tenant.TbTenantProfileCache; import java.util.List; -@Service +@Service("QueueDaoService") @Slf4j @RequiredArgsConstructor public class BaseQueueService extends AbstractEntityService implements QueueService { @@ -119,6 +123,11 @@ public class BaseQueueService extends AbstractEntityService implements QueueServ tenantQueuesRemover.removeEntities(tenantId, tenantId); } + @Override + public ListenableFuture fetchHasNameEntityAsync(TenantId tenantId, EntityId entityId) { + return Futures.immediateFuture(findQueueById(tenantId, new QueueId(entityId.getId()))); + } + private PaginatedRemover tenantQueuesRemover = new PaginatedRemover<>() { diff --git a/dao/src/main/java/org/thingsboard/server/dao/relation/BaseRelationService.java b/dao/src/main/java/org/thingsboard/server/dao/relation/BaseRelationService.java index ceda7eb52c..fb82f3efbd 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/relation/BaseRelationService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/relation/BaseRelationService.java @@ -57,6 +57,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.Queue; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; @@ -71,7 +72,7 @@ import static org.thingsboard.server.dao.service.Validator.validateId; /** * Created by ashvayka on 28.04.17. */ -@Service +@Service("RelationDaoService") @Slf4j public class BaseRelationService implements RelationService { @@ -374,10 +375,10 @@ public class BaseRelationService implements RelationService { private ListenableFuture fetchRelationInfoAsync(TenantId tenantId, EntityRelation relation, Function entityIdGetter, BiConsumer entityNameSetter) { - ListenableFuture entityName = entityService.fetchEntityNameAsync(tenantId, entityIdGetter.apply(relation)); - return Futures.transform(entityName, entityName1 -> { + ListenableFuture> entityNameFuture = entityService.fetchEntityNameAsync(tenantId, entityIdGetter.apply(relation)); + return Futures.transform(entityNameFuture, nameOpt -> { EntityRelationInfo entityRelationInfo1 = new EntityRelationInfo(relation); - entityNameSetter.accept(entityRelationInfo1, entityName1); + entityNameSetter.accept(entityRelationInfo1, nameOpt.orElse("N/A")); return entityRelationInfo1; }, MoreExecutors.directExecutor()); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/resource/BaseResourceService.java b/dao/src/main/java/org/thingsboard/server/dao/resource/BaseResourceService.java index dd13f5b200..88e5eb8a05 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/resource/BaseResourceService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/resource/BaseResourceService.java @@ -20,9 +20,11 @@ import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.hibernate.exception.ConstraintViolationException; import org.springframework.stereotype.Service; +import org.thingsboard.server.common.data.HasName; import org.thingsboard.server.common.data.ResourceType; import org.thingsboard.server.common.data.TbResource; import org.thingsboard.server.common.data.TbResourceInfo; +import org.thingsboard.server.common.data.id.EntityId; import org.thingsboard.server.common.data.id.TbResourceId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.PageData; @@ -38,7 +40,7 @@ import java.util.Optional; import static org.thingsboard.server.dao.device.DeviceServiceImpl.INCORRECT_TENANT_ID; import static org.thingsboard.server.dao.service.Validator.validateId; -@Service +@Service("TbResourceDaoService") @Slf4j @AllArgsConstructor public class BaseResourceService implements ResourceService { @@ -134,6 +136,11 @@ public class BaseResourceService implements ResourceService { tenantResourcesRemover.removeEntities(tenantId, tenantId); } + @Override + public ListenableFuture fetchHasNameEntityAsync(TenantId tenantId, EntityId entityId) { + return findResourceInfoByIdAsync(tenantId, new TbResourceId(entityId.getId())); + } + @Override public long sumDataSizeByTenantId(TenantId tenantId) { return resourceDao.sumDataSizeByTenantId(tenantId); diff --git a/dao/src/main/java/org/thingsboard/server/dao/rpc/BaseRpcService.java b/dao/src/main/java/org/thingsboard/server/dao/rpc/BaseRpcService.java index 13afd60aba..604cda0b36 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/rpc/BaseRpcService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/rpc/BaseRpcService.java @@ -31,7 +31,7 @@ import org.thingsboard.server.dao.service.PaginatedRemover; import static org.thingsboard.server.dao.service.Validator.validateId; import static org.thingsboard.server.dao.service.Validator.validatePageLink; -@Service +@Service("RpcDaoService") @Slf4j @RequiredArgsConstructor public class BaseRpcService implements RpcService { diff --git a/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleChainService.java b/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleChainService.java index 1d11d34b2d..9625f400c1 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleChainService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleChainService.java @@ -29,6 +29,7 @@ import org.springframework.transaction.annotation.Transactional; import org.thingsboard.common.util.JacksonUtil; import org.thingsboard.server.common.data.BaseData; import org.thingsboard.server.common.data.EntityType; +import org.thingsboard.server.common.data.HasName; import org.thingsboard.server.common.data.edge.Edge; import org.thingsboard.server.common.data.id.EdgeId; import org.thingsboard.server.common.data.id.EntityId; @@ -77,7 +78,7 @@ import static org.thingsboard.server.dao.service.Validator.validateString; /** * Created by igor on 3/12/18. */ -@Service +@Service("RuleChainDaoService") @Slf4j public class BaseRuleChainService extends AbstractEntityService implements RuleChainService { @@ -758,6 +759,15 @@ public class BaseRuleChainService extends AbstractEntityService implements RuleC deleteEntityRelations(tenantId, ruleChainId); } + + @Override + public ListenableFuture fetchHasNameEntityAsync(TenantId tenantId, EntityId entityId) { + if (EntityType.RULE_NODE.equals(entityId.getEntityType())) { + return findRuleNodeByIdAsync(tenantId, new RuleNodeId(entityId.getId())); + } + return findRuleChainByIdAsync(tenantId, new RuleChainId(entityId.getId())); + } + private List getRuleChainToNodeRelations(TenantId tenantId, RuleChainId ruleChainId) { return relationService.findByFrom(tenantId, ruleChainId, RelationTypeGroup.RULE_CHAIN); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantProfileServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantProfileServiceImpl.java index a1ffde92d5..4993199dfd 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantProfileServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantProfileServiceImpl.java @@ -15,13 +15,17 @@ */ package org.thingsboard.server.dao.tenant; +import com.google.common.util.concurrent.Futures; +import com.google.common.util.concurrent.ListenableFuture; import lombok.extern.slf4j.Slf4j; import org.hibernate.exception.ConstraintViolationException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.event.TransactionalEventListener; import org.thingsboard.server.common.data.EntityInfo; +import org.thingsboard.server.common.data.HasName; import org.thingsboard.server.common.data.TenantProfile; +import org.thingsboard.server.common.data.id.EntityId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.id.TenantProfileId; import org.thingsboard.server.common.data.page.PageData; @@ -39,7 +43,7 @@ import java.util.List; import static org.thingsboard.server.dao.service.Validator.validateId; -@Service +@Service("TenantProfileDaoService") @Slf4j public class TenantProfileServiceImpl extends AbstractCachedEntityService implements TenantProfileService { @@ -204,6 +208,11 @@ public class TenantProfileServiceImpl extends AbstractCachedEntityService fetchHasNameEntityAsync(TenantId tenantId, EntityId entityId) { + return Futures.immediateFuture(findTenantProfileById(tenantId, new TenantProfileId(entityId.getId()))); + } + private final PaginatedRemover tenantProfilesRemover = new PaginatedRemover<>() { diff --git a/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantServiceImpl.java index 7c5d951c2a..91160f415e 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantServiceImpl.java @@ -23,9 +23,11 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.event.TransactionalEventListener; import org.thingsboard.server.cache.TbTransactionalCache; +import org.thingsboard.server.common.data.HasName; import org.thingsboard.server.common.data.Tenant; import org.thingsboard.server.common.data.TenantInfo; import org.thingsboard.server.common.data.TenantProfile; +import org.thingsboard.server.common.data.id.EntityId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.id.TenantProfileId; import org.thingsboard.server.common.data.page.PageData; @@ -54,7 +56,7 @@ import java.util.List; import static org.thingsboard.server.dao.service.Validator.validateId; -@Service +@Service("TenantDaoService") @Slf4j public class TenantServiceImpl extends AbstractCachedEntityService implements TenantService { @@ -256,4 +258,9 @@ public class TenantServiceImpl extends AbstractCachedEntityService fetchHasNameEntityAsync(TenantId tenantId, EntityId entityId) { + return findTenantByIdAsync(tenantId, new TenantId(entityId.getId())); + } } diff --git a/dao/src/main/java/org/thingsboard/server/dao/usagerecord/ApiUsageStateServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/usagerecord/ApiUsageStateServiceImpl.java index f2bd8e47c1..ebd5b0b96f 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/usagerecord/ApiUsageStateServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/usagerecord/ApiUsageStateServiceImpl.java @@ -45,7 +45,7 @@ import java.util.Objects; import static org.thingsboard.server.dao.service.Validator.validateId; -@Service +@Service("ApiUsageStateDaoService") @Slf4j public class ApiUsageStateServiceImpl extends AbstractEntityService implements ApiUsageStateService { public static final String INCORRECT_TENANT_ID = "Incorrect tenantId "; diff --git a/dao/src/main/java/org/thingsboard/server/dao/user/UserServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/user/UserServiceImpl.java index 41d121b889..4dd848af0a 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/user/UserServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/user/UserServiceImpl.java @@ -28,9 +28,11 @@ import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.thingsboard.common.util.JacksonUtil; +import org.thingsboard.server.common.data.HasName; import org.thingsboard.server.common.data.StringUtils; import org.thingsboard.server.common.data.User; import org.thingsboard.server.common.data.id.CustomerId; +import org.thingsboard.server.common.data.id.EntityId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.id.UserCredentialsId; import org.thingsboard.server.common.data.id.UserId; @@ -39,6 +41,7 @@ import org.thingsboard.server.common.data.page.PageLink; import org.thingsboard.server.common.data.security.UserCredentials; import org.thingsboard.server.common.data.security.event.UserCredentialsInvalidationEvent; import org.thingsboard.server.dao.entity.AbstractEntityService; +import org.thingsboard.server.dao.entity.SimpleEntityService; import org.thingsboard.server.dao.exception.IncorrectParameterException; import org.thingsboard.server.dao.service.DataValidator; import org.thingsboard.server.dao.service.PaginatedRemover; @@ -50,7 +53,7 @@ import static org.thingsboard.server.dao.service.Validator.validateId; import static org.thingsboard.server.dao.service.Validator.validatePageLink; import static org.thingsboard.server.dao.service.Validator.validateString; -@Service +@Service("UserDaoService") @Slf4j @RequiredArgsConstructor public class UserServiceImpl extends AbstractEntityService implements UserService { @@ -397,4 +400,15 @@ public class UserServiceImpl extends AbstractEntityService implements UserServic } }; + @Override + public ListenableFuture fetchHasNameEntityAsync(TenantId tenantId, EntityId entityId) { + return findUserByIdAsync(tenantId, new UserId(entityId.getId())); + } + + @Override + public CustomerId getCustomerId(TenantId tenantId, EntityId entityId) { + User user = findUserById(tenantId, new UserId(entityId.getId())); + return user != null ? user.getCustomerId() : SimpleEntityService.NULL_CUSTOMER_ID; + } + } diff --git a/dao/src/main/java/org/thingsboard/server/dao/util/AbstractBufferedRateExecutor.java b/dao/src/main/java/org/thingsboard/server/dao/util/AbstractBufferedRateExecutor.java index 4c45239921..089c565591 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/util/AbstractBufferedRateExecutor.java +++ b/dao/src/main/java/org/thingsboard/server/dao/util/AbstractBufferedRateExecutor.java @@ -44,6 +44,7 @@ import org.thingsboard.server.dao.tenant.TbTenantProfileCache; import javax.annotation.Nullable; import java.util.HashMap; import java.util.Map; +import java.util.Optional; import java.util.UUID; import java.util.concurrent.BlockingQueue; import java.util.concurrent.ConcurrentHashMap; @@ -327,7 +328,8 @@ public abstract class AbstractBufferedRateExecutor { try { - return entityService.fetchEntityNameAsync(TenantId.SYS_TENANT_ID, tenantId).get(); + ListenableFuture> nameOpt = entityService.fetchEntityNameAsync(TenantId.SYS_TENANT_ID, tenantId); + return nameOpt.get().orElse("N/A"); } catch (Exception e) { log.error("[{}] Failed to get tenant name", tenantId, e); return "N/A"; diff --git a/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetTypeServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetTypeServiceImpl.java index 9b64dc0d68..d2cab9bd46 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetTypeServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetTypeServiceImpl.java @@ -28,7 +28,7 @@ import org.thingsboard.server.dao.service.Validator; import java.util.List; -@Service +@Service("WidgetTypeDaoService") @Slf4j public class WidgetTypeServiceImpl implements WidgetTypeService { diff --git a/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleServiceImpl.java index 737043ccba..fb519b11fa 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleServiceImpl.java @@ -15,9 +15,13 @@ */ package org.thingsboard.server.dao.widget; +import com.google.common.util.concurrent.Futures; +import com.google.common.util.concurrent.ListenableFuture; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.thingsboard.server.common.data.HasName; +import org.thingsboard.server.common.data.id.EntityId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.id.WidgetsBundleId; import org.thingsboard.server.common.data.page.PageData; @@ -32,7 +36,7 @@ import org.thingsboard.server.dao.service.Validator; import java.util.ArrayList; import java.util.List; -@Service +@Service("WidgetsBundleDaoService") @Slf4j public class WidgetsBundleServiceImpl implements WidgetsBundleService { @@ -151,6 +155,11 @@ public class WidgetsBundleServiceImpl implements WidgetsBundleService { tenantWidgetsBundleRemover.removeEntities(tenantId, tenantId); } + @Override + public ListenableFuture fetchHasNameEntityAsync(TenantId tenantId, EntityId entityId) { + return Futures.immediateFuture(findWidgetsBundleById(tenantId, new WidgetsBundleId(entityId.getId()))); + } + private PaginatedRemover tenantWidgetsBundleRemover = new PaginatedRemover() { diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/BaseEntityServiceBeanFactoryTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/BaseEntityServiceBeanFactoryTest.java new file mode 100644 index 0000000000..d9b907d825 --- /dev/null +++ b/dao/src/test/java/org/thingsboard/server/dao/service/BaseEntityServiceBeanFactoryTest.java @@ -0,0 +1,46 @@ +/** + * Copyright © 2016-2022 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.dao.service; + +import lombok.extern.slf4j.Slf4j; +import org.assertj.core.api.Assertions; +import org.junit.Assert; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.thingsboard.server.common.data.EntityType; +import org.thingsboard.server.dao.entity.EntityServiceBeanFactory; +import org.thingsboard.server.dao.rule.BaseRuleChainService; + +@Slf4j +public abstract class BaseEntityServiceBeanFactoryTest extends AbstractServiceTest { + + @Autowired + private EntityServiceBeanFactory entityServiceBeanFactory; + + @Test + public void givenAllEntityTypes_whenGetServiceByEntityTypeCalled_thenNoExceptionsThrows() { + for (EntityType entityType : EntityType.values()) { + Assertions.assertThatCode(() -> entityServiceBeanFactory.getServiceByEntityType(entityType)) + .doesNotThrowAnyException(); + } + } + + @Test + public void givenRuleNodeEntityType_whenGetServiceByEntityTypeCalled_thenReturnedRuleChainDaoService() { + Assert.assertTrue(entityServiceBeanFactory.getServiceByEntityType(EntityType.RULE_NODE) instanceof BaseRuleChainService); + } + +} diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/sql/EntityServiceBeanFactorySqlTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/sql/EntityServiceBeanFactorySqlTest.java new file mode 100644 index 0000000000..48fd73db75 --- /dev/null +++ b/dao/src/test/java/org/thingsboard/server/dao/service/sql/EntityServiceBeanFactorySqlTest.java @@ -0,0 +1,24 @@ +/** + * Copyright © 2016-2022 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.dao.service.sql; + +import org.thingsboard.server.dao.service.BaseEntityServiceBeanFactoryTest; +import org.thingsboard.server.dao.service.DaoSqlTest; + +@DaoSqlTest +public class EntityServiceBeanFactorySqlTest extends BaseEntityServiceBeanFactoryTest { + +} diff --git a/pom.xml b/pom.xml index 132bb5b6bc..941f356111 100755 --- a/pom.xml +++ b/pom.xml @@ -61,6 +61,7 @@ 2.11.0 1.2 1.4 + 1.9 4.5.13 4.4.14 2.8.1 @@ -1363,6 +1364,11 @@ commons-csv ${commons-csv.version} + + org.apache.commons + commons-text + ${commons-text.version} + org.apache.httpcomponents httpclient From 0bef324a1f5c3eca4a4660e55b506c7a1fd49944 Mon Sep 17 00:00:00 2001 From: ShvaykaD Date: Mon, 12 Dec 2022 19:18:45 +0200 Subject: [PATCH 2/5] refactoring after review --- .../server/dao/alarm/AlarmService.java | 4 +- .../server/dao/asset/AssetProfileService.java | 4 +- .../server/dao/asset/AssetService.java | 4 +- .../server/dao/audit/AuditLogService.java | 4 +- .../server/dao/customer/CustomerService.java | 4 +- .../dao/dashboard/DashboardService.java | 4 +- .../dao/device/DeviceProfileService.java | 4 +- .../server/dao/device/DeviceService.java | 4 +- .../server/dao/edge/EdgeService.java | 4 +- .../server/dao/entity/EntityService.java | 3 +- .../dao/entity/EntityServiceBeanFactory.java | 4 +- ...ntityService.java => TbEntityService.java} | 12 +++--- .../dao/entityview/EntityViewService.java | 4 +- .../server/dao/event/EventService.java | 4 +- .../server/dao/ota/OtaPackageService.java | 4 +- .../server/dao/queue/QueueService.java | 4 +- .../server/dao/resource/ResourceService.java | 4 +- .../server/dao/rpc/RpcService.java | 4 +- .../server/dao/rule/RuleChainService.java | 4 +- .../dao/tenant/TenantProfileService.java | 4 +- .../server/dao/tenant/TenantService.java | 4 +- .../dao/usagerecord/ApiUsageStateService.java | 4 +- .../server/dao/user/UserService.java | 4 +- .../server/dao/widget/WidgetTypeService.java | 4 +- .../dao/widget/WidgetsBundleService.java | 4 +- .../server/dao/alarm/BaseAlarmService.java | 32 +++++++--------- .../dao/asset/AssetProfileServiceImpl.java | 9 ++--- .../server/dao/asset/BaseAssetService.java | 11 +++--- .../server/dao/audit/AuditLogServiceImpl.java | 8 +++- .../dao/audit/DummyAuditLogServiceImpl.java | 10 ++++- .../dao/customer/CustomerServiceImpl.java | 7 ++-- .../dao/dashboard/DashboardServiceImpl.java | 7 ++-- .../dao/device/DeviceProfileServiceImpl.java | 9 ++--- .../server/dao/device/DeviceServiceImpl.java | 11 +++--- .../server/dao/edge/EdgeServiceImpl.java | 10 ++--- .../server/dao/entity/BaseEntityService.java | 37 ++++++++----------- .../dao/entityview/EntityViewServiceImpl.java | 11 +++--- .../server/dao/event/BaseEventService.java | 8 ++++ .../server/dao/ota/BaseOtaPackageService.java | 6 +-- .../server/dao/queue/BaseQueueService.java | 9 ++--- .../dao/relation/BaseRelationService.java | 12 +++--- .../dao/resource/BaseResourceService.java | 6 +-- .../server/dao/rpc/BaseRpcService.java | 9 +++++ .../server/dao/rule/BaseRuleChainService.java | 11 +++--- .../dao/tenant/TenantProfileServiceImpl.java | 9 ++--- .../server/dao/tenant/TenantServiceImpl.java | 7 ++-- .../usagerecord/ApiUsageStateServiceImpl.java | 6 +++ .../server/dao/user/UserServiceImpl.java | 11 +++--- .../util/AbstractBufferedRateExecutor.java | 4 +- .../dao/widget/WidgetTypeServiceImpl.java | 8 ++++ .../dao/widget/WidgetsBundleServiceImpl.java | 9 ++--- 51 files changed, 206 insertions(+), 178 deletions(-) rename common/dao-api/src/main/java/org/thingsboard/server/dao/entity/{SimpleEntityService.java => TbEntityService.java} (75%) diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/alarm/AlarmService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/alarm/AlarmService.java index b0a4f551b1..4bd1eb79fc 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/alarm/AlarmService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/alarm/AlarmService.java @@ -30,14 +30,14 @@ import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.query.AlarmData; import org.thingsboard.server.common.data.query.AlarmDataQuery; -import org.thingsboard.server.dao.entity.SimpleEntityService; +import org.thingsboard.server.dao.entity.TbEntityService; import java.util.Collection; /** * Created by ashvayka on 11.05.17. */ -public interface AlarmService extends SimpleEntityService { +public interface AlarmService extends TbEntityService { AlarmOperationResult createOrUpdateAlarm(Alarm alarm); diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/asset/AssetProfileService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/asset/AssetProfileService.java index d5a723acb1..c8200812dc 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/asset/AssetProfileService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/asset/AssetProfileService.java @@ -21,9 +21,9 @@ import org.thingsboard.server.common.data.id.AssetProfileId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; -import org.thingsboard.server.dao.entity.SimpleEntityService; +import org.thingsboard.server.dao.entity.TbEntityService; -public interface AssetProfileService extends SimpleEntityService { +public interface AssetProfileService extends TbEntityService { AssetProfile findAssetProfileById(TenantId tenantId, AssetProfileId assetProfileId); diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/asset/AssetService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/asset/AssetService.java index 0766ad0df9..fc8f8ca88e 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/asset/AssetService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/asset/AssetService.java @@ -27,11 +27,11 @@ import org.thingsboard.server.common.data.id.EdgeId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; -import org.thingsboard.server.dao.entity.SimpleEntityService; +import org.thingsboard.server.dao.entity.TbEntityService; import java.util.List; -public interface AssetService extends SimpleEntityService { +public interface AssetService extends TbEntityService { AssetInfo findAssetInfoById(TenantId tenantId, AssetId assetId); diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/audit/AuditLogService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/audit/AuditLogService.java index 9f4b05420c..c810971ee5 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/audit/AuditLogService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/audit/AuditLogService.java @@ -25,11 +25,11 @@ import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.id.UserId; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.TimePageLink; -import org.thingsboard.server.dao.entity.SimpleEntityService; +import org.thingsboard.server.dao.entity.TbEntityService; import java.util.List; -public interface AuditLogService extends SimpleEntityService { +public interface AuditLogService extends TbEntityService { PageData findAuditLogsByTenantIdAndCustomerId(TenantId tenantId, CustomerId customerId, List actionTypes, TimePageLink pageLink); diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/customer/CustomerService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/customer/CustomerService.java index 3a13d596fb..d8a904d7c1 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/customer/CustomerService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/customer/CustomerService.java @@ -21,11 +21,11 @@ import org.thingsboard.server.common.data.id.CustomerId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; -import org.thingsboard.server.dao.entity.SimpleEntityService; +import org.thingsboard.server.dao.entity.TbEntityService; import java.util.Optional; -public interface CustomerService extends SimpleEntityService { +public interface CustomerService extends TbEntityService { Customer findCustomerById(TenantId tenantId, CustomerId customerId); diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/dashboard/DashboardService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/dashboard/DashboardService.java index 280b9b4034..9f7f3ae3e0 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/dashboard/DashboardService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/dashboard/DashboardService.java @@ -24,11 +24,11 @@ import org.thingsboard.server.common.data.id.EdgeId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; -import org.thingsboard.server.dao.entity.SimpleEntityService; +import org.thingsboard.server.dao.entity.TbEntityService; import java.util.List; -public interface DashboardService extends SimpleEntityService { +public interface DashboardService extends TbEntityService { Dashboard findDashboardById(TenantId tenantId, DashboardId dashboardId); diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/device/DeviceProfileService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/device/DeviceProfileService.java index eac99d5fab..ec5673ce15 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/device/DeviceProfileService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/device/DeviceProfileService.java @@ -21,9 +21,9 @@ import org.thingsboard.server.common.data.id.DeviceProfileId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; -import org.thingsboard.server.dao.entity.SimpleEntityService; +import org.thingsboard.server.dao.entity.TbEntityService; -public interface DeviceProfileService extends SimpleEntityService { +public interface DeviceProfileService extends TbEntityService { DeviceProfile findDeviceProfileById(TenantId tenantId, DeviceProfileId deviceProfileId); diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/device/DeviceService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/device/DeviceService.java index 027011c007..9ce266e12a 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/device/DeviceService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/device/DeviceService.java @@ -33,12 +33,12 @@ import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; import org.thingsboard.server.common.data.security.DeviceCredentials; import org.thingsboard.server.dao.device.provision.ProvisionRequest; -import org.thingsboard.server.dao.entity.SimpleEntityService; +import org.thingsboard.server.dao.entity.TbEntityService; import java.util.List; import java.util.UUID; -public interface DeviceService extends SimpleEntityService { +public interface DeviceService extends TbEntityService { DeviceInfo findDeviceInfoById(TenantId tenantId, DeviceId deviceId); diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/edge/EdgeService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/edge/EdgeService.java index 589d90c6c0..b9fb6d8fcf 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/edge/EdgeService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/edge/EdgeService.java @@ -26,12 +26,12 @@ import org.thingsboard.server.common.data.id.EntityId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; -import org.thingsboard.server.dao.entity.SimpleEntityService; +import org.thingsboard.server.dao.entity.TbEntityService; import java.util.List; import java.util.Optional; -public interface EdgeService extends SimpleEntityService { +public interface EdgeService extends TbEntityService { Edge findEdgeById(TenantId tenantId, EdgeId edgeId); diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/entity/EntityService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/entity/EntityService.java index 161c1e2b97..9362dbef7a 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/entity/EntityService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/entity/EntityService.java @@ -15,7 +15,6 @@ */ package org.thingsboard.server.dao.entity; -import com.google.common.util.concurrent.ListenableFuture; import org.thingsboard.server.common.data.id.CustomerId; import org.thingsboard.server.common.data.id.EntityId; import org.thingsboard.server.common.data.id.TenantId; @@ -28,7 +27,7 @@ import java.util.Optional; public interface EntityService { - ListenableFuture> fetchEntityNameAsync(TenantId tenantId, EntityId entityId); + Optional fetchEntityName(TenantId tenantId, EntityId entityId); CustomerId fetchEntityCustomerId(TenantId tenantId, EntityId entityId); diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/entity/EntityServiceBeanFactory.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/entity/EntityServiceBeanFactory.java index 2bc47eba80..ff91d16d72 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/entity/EntityServiceBeanFactory.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/entity/EntityServiceBeanFactory.java @@ -31,9 +31,9 @@ public class EntityServiceBeanFactory { this.beanFactory = beanFactory; } - public SimpleEntityService getServiceByEntityType(EntityType entityType) { + public TbEntityService getServiceByEntityType(EntityType entityType) { String beanName = EntityType.RULE_NODE.equals(entityType) ? getBeanName(EntityType.RULE_CHAIN) : getBeanName(entityType); - return beanFactory.getBean(beanName, SimpleEntityService.class); + return beanFactory.getBean(beanName, TbEntityService.class); } private String getBeanName(EntityType entityType) { diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/entity/SimpleEntityService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/entity/TbEntityService.java similarity index 75% rename from common/dao-api/src/main/java/org/thingsboard/server/dao/entity/SimpleEntityService.java rename to common/dao-api/src/main/java/org/thingsboard/server/dao/entity/TbEntityService.java index 52889613ac..bbea98179b 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/entity/SimpleEntityService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/entity/TbEntityService.java @@ -15,22 +15,20 @@ */ package org.thingsboard.server.dao.entity; -import com.google.common.util.concurrent.Futures; -import com.google.common.util.concurrent.ListenableFuture; -import org.thingsboard.server.common.data.HasName; import org.thingsboard.server.common.data.id.CustomerId; import org.thingsboard.server.common.data.id.EntityId; +import org.thingsboard.server.common.data.id.HasId; import org.thingsboard.server.common.data.id.TenantId; +import java.util.Optional; + import static org.thingsboard.server.common.data.id.EntityId.NULL_UUID; -public interface SimpleEntityService { +public interface TbEntityService { CustomerId NULL_CUSTOMER_ID = new CustomerId(NULL_UUID); - default ListenableFuture fetchHasNameEntityAsync(TenantId tenantId, EntityId entityId) { - return Futures.immediateFuture(null); - } + Optional> fetchEntity(TenantId tenantId, EntityId entityId); default CustomerId getCustomerId(TenantId tenantId, EntityId entityId) { return NULL_CUSTOMER_ID; diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/entityview/EntityViewService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/entityview/EntityViewService.java index a5900a6106..7d0cb1211d 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/entityview/EntityViewService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/entityview/EntityViewService.java @@ -27,14 +27,14 @@ import org.thingsboard.server.common.data.id.EntityViewId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; -import org.thingsboard.server.dao.entity.SimpleEntityService; +import org.thingsboard.server.dao.entity.TbEntityService; import java.util.List; /** * Created by Victor Basanets on 8/27/2017. */ -public interface EntityViewService extends SimpleEntityService { +public interface EntityViewService extends TbEntityService { EntityView saveEntityView(EntityView entityView); diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/event/EventService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/event/EventService.java index a5149b4153..00e6bea2de 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/event/EventService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/event/EventService.java @@ -24,11 +24,11 @@ import org.thingsboard.server.common.data.id.EntityId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.TimePageLink; -import org.thingsboard.server.dao.entity.SimpleEntityService; +import org.thingsboard.server.dao.entity.TbEntityService; import java.util.List; -public interface EventService extends SimpleEntityService { +public interface EventService extends TbEntityService { ListenableFuture saveAsync(Event event); diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/ota/OtaPackageService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/ota/OtaPackageService.java index 6ed9b904b0..fe44038ccb 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/ota/OtaPackageService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/ota/OtaPackageService.java @@ -25,11 +25,11 @@ import org.thingsboard.server.common.data.ota.ChecksumAlgorithm; import org.thingsboard.server.common.data.ota.OtaPackageType; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; -import org.thingsboard.server.dao.entity.SimpleEntityService; +import org.thingsboard.server.dao.entity.TbEntityService; import java.nio.ByteBuffer; -public interface OtaPackageService extends SimpleEntityService { +public interface OtaPackageService extends TbEntityService { OtaPackageInfo saveOtaPackageInfo(OtaPackageInfo otaPackageInfo, boolean isUrl); diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/queue/QueueService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/queue/QueueService.java index bb7d0650c9..02b465602e 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/queue/QueueService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/queue/QueueService.java @@ -20,11 +20,11 @@ import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; import org.thingsboard.server.common.data.queue.Queue; -import org.thingsboard.server.dao.entity.SimpleEntityService; +import org.thingsboard.server.dao.entity.TbEntityService; import java.util.List; -public interface QueueService extends SimpleEntityService { +public interface QueueService extends TbEntityService { Queue saveQueue(Queue queue); diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/resource/ResourceService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/resource/ResourceService.java index 8a706f70d4..1f6cba7062 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/resource/ResourceService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/resource/ResourceService.java @@ -23,11 +23,11 @@ import org.thingsboard.server.common.data.id.TbResourceId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; -import org.thingsboard.server.dao.entity.SimpleEntityService; +import org.thingsboard.server.dao.entity.TbEntityService; import java.util.List; -public interface ResourceService extends SimpleEntityService { +public interface ResourceService extends TbEntityService { TbResource saveResource(TbResource resource); TbResource getResource(TenantId tenantId, ResourceType resourceType, String resourceId); diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/rpc/RpcService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/rpc/RpcService.java index e881bf080a..431fdb5bda 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/rpc/RpcService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/rpc/RpcService.java @@ -23,9 +23,9 @@ import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; import org.thingsboard.server.common.data.rpc.Rpc; import org.thingsboard.server.common.data.rpc.RpcStatus; -import org.thingsboard.server.dao.entity.SimpleEntityService; +import org.thingsboard.server.dao.entity.TbEntityService; -public interface RpcService extends SimpleEntityService { +public interface RpcService extends TbEntityService { Rpc save(Rpc rpc); void deleteRpc(TenantId tenantId, RpcId id); diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/rule/RuleChainService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/rule/RuleChainService.java index 1e194b5278..8baf3783e7 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/rule/RuleChainService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/rule/RuleChainService.java @@ -31,7 +31,7 @@ import org.thingsboard.server.common.data.rule.RuleChainMetaData; import org.thingsboard.server.common.data.rule.RuleChainType; import org.thingsboard.server.common.data.rule.RuleChainUpdateResult; import org.thingsboard.server.common.data.rule.RuleNode; -import org.thingsboard.server.dao.entity.SimpleEntityService; +import org.thingsboard.server.dao.entity.TbEntityService; import java.util.Collection; import java.util.List; @@ -39,7 +39,7 @@ import java.util.List; /** * Created by igor on 3/12/18. */ -public interface RuleChainService extends SimpleEntityService { +public interface RuleChainService extends TbEntityService { RuleChain saveRuleChain(RuleChain ruleChain); diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/tenant/TenantProfileService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/tenant/TenantProfileService.java index 984f12cd59..91b1d70a61 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/tenant/TenantProfileService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/tenant/TenantProfileService.java @@ -21,9 +21,9 @@ import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.id.TenantProfileId; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; -import org.thingsboard.server.dao.entity.SimpleEntityService; +import org.thingsboard.server.dao.entity.TbEntityService; -public interface TenantProfileService extends SimpleEntityService { +public interface TenantProfileService extends TbEntityService { TenantProfile findTenantProfileById(TenantId tenantId, TenantProfileId tenantProfileId); diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/tenant/TenantService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/tenant/TenantService.java index d73717640a..8186623ed2 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/tenant/TenantService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/tenant/TenantService.java @@ -22,11 +22,11 @@ import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.id.TenantProfileId; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; -import org.thingsboard.server.dao.entity.SimpleEntityService; +import org.thingsboard.server.dao.entity.TbEntityService; import java.util.List; -public interface TenantService extends SimpleEntityService { +public interface TenantService extends TbEntityService { Tenant findTenantById(TenantId tenantId); diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/usagerecord/ApiUsageStateService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/usagerecord/ApiUsageStateService.java index 0c13c7b490..93fd1d1f00 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/usagerecord/ApiUsageStateService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/usagerecord/ApiUsageStateService.java @@ -19,9 +19,9 @@ import org.thingsboard.server.common.data.ApiUsageState; import org.thingsboard.server.common.data.id.ApiUsageStateId; import org.thingsboard.server.common.data.id.EntityId; import org.thingsboard.server.common.data.id.TenantId; -import org.thingsboard.server.dao.entity.SimpleEntityService; +import org.thingsboard.server.dao.entity.TbEntityService; -public interface ApiUsageStateService extends SimpleEntityService { +public interface ApiUsageStateService extends TbEntityService { ApiUsageState createDefaultApiUsageState(TenantId id, EntityId entityId); diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/user/UserService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/user/UserService.java index 8d85a5f309..53e89d7a51 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/user/UserService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/user/UserService.java @@ -24,9 +24,9 @@ import org.thingsboard.server.common.data.id.UserId; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; import org.thingsboard.server.common.data.security.UserCredentials; -import org.thingsboard.server.dao.entity.SimpleEntityService; +import org.thingsboard.server.dao.entity.TbEntityService; -public interface UserService extends SimpleEntityService { +public interface UserService extends TbEntityService { User findUserById(TenantId tenantId, UserId userId); diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/widget/WidgetTypeService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/widget/WidgetTypeService.java index b21e2177a2..d2a4e8ee2a 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/widget/WidgetTypeService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/widget/WidgetTypeService.java @@ -20,11 +20,11 @@ import org.thingsboard.server.common.data.id.WidgetTypeId; import org.thingsboard.server.common.data.widget.WidgetType; import org.thingsboard.server.common.data.widget.WidgetTypeDetails; import org.thingsboard.server.common.data.widget.WidgetTypeInfo; -import org.thingsboard.server.dao.entity.SimpleEntityService; +import org.thingsboard.server.dao.entity.TbEntityService; import java.util.List; -public interface WidgetTypeService extends SimpleEntityService { +public interface WidgetTypeService extends TbEntityService { WidgetType findWidgetTypeById(TenantId tenantId, WidgetTypeId widgetTypeId); diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleService.java index 5a6a05264c..d0ef55a91e 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleService.java @@ -20,11 +20,11 @@ import org.thingsboard.server.common.data.id.WidgetsBundleId; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; import org.thingsboard.server.common.data.widget.WidgetsBundle; -import org.thingsboard.server.dao.entity.SimpleEntityService; +import org.thingsboard.server.dao.entity.TbEntityService; import java.util.List; -public interface WidgetsBundleService extends SimpleEntityService { +public interface WidgetsBundleService extends TbEntityService { WidgetsBundle findWidgetsBundleById(TenantId tenantId, WidgetsBundleId widgetsBundleId); diff --git a/dao/src/main/java/org/thingsboard/server/dao/alarm/BaseAlarmService.java b/dao/src/main/java/org/thingsboard/server/dao/alarm/BaseAlarmService.java index 9333c8d578..bf41420f40 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/alarm/BaseAlarmService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/alarm/BaseAlarmService.java @@ -27,7 +27,6 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import org.thingsboard.common.util.ThingsBoardThreadFactory; -import org.thingsboard.server.common.data.HasName; import org.thingsboard.server.common.data.alarm.Alarm; import org.thingsboard.server.common.data.alarm.AlarmInfo; import org.thingsboard.server.common.data.alarm.AlarmQuery; @@ -39,6 +38,7 @@ import org.thingsboard.server.common.data.exception.ApiUsageLimitsExceededExcept import org.thingsboard.server.common.data.id.AlarmId; import org.thingsboard.server.common.data.id.CustomerId; import org.thingsboard.server.common.data.id.EntityId; +import org.thingsboard.server.common.data.id.HasId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.query.AlarmData; @@ -49,7 +49,7 @@ import org.thingsboard.server.common.data.relation.EntitySearchDirection; import org.thingsboard.server.common.data.relation.RelationsSearchParameters; import org.thingsboard.server.dao.entity.AbstractEntityService; import org.thingsboard.server.dao.entity.EntityService; -import org.thingsboard.server.dao.entity.SimpleEntityService; +import org.thingsboard.server.dao.entity.TbEntityService; import org.thingsboard.server.dao.service.DataValidator; import javax.annotation.Nullable; @@ -60,6 +60,7 @@ import java.util.Collection; import java.util.Collections; import java.util.LinkedHashSet; import java.util.List; +import java.util.Optional; import java.util.Set; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; @@ -281,14 +282,12 @@ public class BaseAlarmService extends AbstractEntityService implements AlarmServ public ListenableFuture findAlarmInfoByIdAsync(TenantId tenantId, AlarmId alarmId) { log.trace("Executing findAlarmInfoByIdAsync [{}]", alarmId); validateId(alarmId, "Incorrect alarmId " + alarmId); - return Futures.transformAsync(alarmDao.findAlarmByIdAsync(tenantId, alarmId.getId()), + return Futures.transform(alarmDao.findAlarmByIdAsync(tenantId, alarmId.getId()), a -> { AlarmInfo alarmInfo = new AlarmInfo(a); - return Futures.transform( - entityService.fetchEntityNameAsync(tenantId, alarmInfo.getOriginator()), originatorNameOpt -> { - alarmInfo.setOriginatorName(originatorNameOpt.isEmpty() ? "N/A" : originatorNameOpt.get()); - return alarmInfo; - }, MoreExecutors.directExecutor()); + Optional originatorNameOpt = entityService.fetchEntityName(tenantId, alarmInfo.getOriginator()); + alarmInfo.setOriginatorName(originatorNameOpt.isEmpty() ? "N/A" : originatorNameOpt.get()); + return alarmInfo; }, MoreExecutors.directExecutor()); } @@ -313,12 +312,9 @@ public class BaseAlarmService extends AbstractEntityService implements AlarmServ private ListenableFuture> fetchAlarmsOriginators(TenantId tenantId, PageData alarms) { List> alarmFutures = new ArrayList<>(alarms.getData().size()); for (AlarmInfo alarmInfo : alarms.getData()) { - alarmFutures.add(Futures.transform( - entityService.fetchEntityNameAsync(tenantId, alarmInfo.getOriginator()), originatorNameOpt -> { - alarmInfo.setOriginatorName(originatorNameOpt.isEmpty() ? "Deleted" : originatorNameOpt.get()); - return alarmInfo; - }, MoreExecutors.directExecutor() - )); + Optional originatorNameOpt = entityService.fetchEntityName(tenantId, alarmInfo.getOriginator()); + alarmInfo.setOriginatorName(originatorNameOpt.isEmpty() ? "Deleted" : originatorNameOpt.get()); + alarmFutures.add(Futures.immediateFuture(alarmInfo)); } return Futures.transform(Futures.successfulAsList(alarmFutures), alarmInfos -> new PageData<>(alarmInfos, alarms.getTotalPages(), alarms.getTotalElements(), @@ -410,17 +406,17 @@ public class BaseAlarmService extends AbstractEntityService implements AlarmServ } @Override - public ListenableFuture fetchHasNameEntityAsync(TenantId tenantId, EntityId entityId) { - return findAlarmByIdAsync(tenantId, new AlarmId(entityId.getId())); + public Optional> fetchEntity(TenantId tenantId, EntityId entityId) { + return Optional.of(findAlarmById(tenantId, new AlarmId(entityId.getId()))); } @Override public CustomerId getCustomerId(TenantId tenantId, EntityId entityId) { try { Alarm alarm = findAlarmByIdAsync(tenantId, new AlarmId(entityId.getId())).get(); - return alarm != null ? alarm.getCustomerId() : SimpleEntityService.NULL_CUSTOMER_ID; + return alarm != null ? alarm.getCustomerId() : TbEntityService.NULL_CUSTOMER_ID; } catch (Exception e) { - return SimpleEntityService.NULL_CUSTOMER_ID; + return TbEntityService.NULL_CUSTOMER_ID; } } } diff --git a/dao/src/main/java/org/thingsboard/server/dao/asset/AssetProfileServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/asset/AssetProfileServiceImpl.java index 5710b14503..f0abff89c4 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/asset/AssetProfileServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/asset/AssetProfileServiceImpl.java @@ -15,21 +15,19 @@ */ package org.thingsboard.server.dao.asset; -import com.google.common.util.concurrent.Futures; -import com.google.common.util.concurrent.ListenableFuture; import lombok.extern.slf4j.Slf4j; import org.hibernate.exception.ConstraintViolationException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.event.TransactionalEventListener; -import org.thingsboard.server.common.data.HasName; import org.thingsboard.server.common.data.StringUtils; import org.thingsboard.server.common.data.asset.Asset; import org.thingsboard.server.common.data.asset.AssetProfile; import org.thingsboard.server.common.data.asset.AssetProfileInfo; import org.thingsboard.server.common.data.id.AssetProfileId; import org.thingsboard.server.common.data.id.EntityId; +import org.thingsboard.server.common.data.id.HasId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; @@ -42,6 +40,7 @@ import org.thingsboard.server.dao.service.Validator; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Optional; import static org.thingsboard.server.dao.service.Validator.validateId; @@ -269,8 +268,8 @@ public class AssetProfileServiceImpl extends AbstractCachedEntityService fetchHasNameEntityAsync(TenantId tenantId, EntityId entityId) { - return Futures.immediateFuture(findAssetProfileById(tenantId, new AssetProfileId(entityId.getId()))); + public Optional> fetchEntity(TenantId tenantId, EntityId entityId) { + return Optional.of(findAssetProfileById(tenantId, new AssetProfileId(entityId.getId()))); } private PaginatedRemover tenantAssetProfilesRemover = diff --git a/dao/src/main/java/org/thingsboard/server/dao/asset/BaseAssetService.java b/dao/src/main/java/org/thingsboard/server/dao/asset/BaseAssetService.java index ff57516c52..6f24f5a5eb 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/asset/BaseAssetService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/asset/BaseAssetService.java @@ -27,7 +27,6 @@ import org.springframework.transaction.event.TransactionalEventListener; import org.thingsboard.server.common.data.EntitySubtype; import org.thingsboard.server.common.data.EntityType; import org.thingsboard.server.common.data.EntityView; -import org.thingsboard.server.common.data.HasName; import org.thingsboard.server.common.data.StringUtils; import org.thingsboard.server.common.data.asset.Asset; import org.thingsboard.server.common.data.asset.AssetInfo; @@ -39,6 +38,7 @@ import org.thingsboard.server.common.data.id.AssetProfileId; import org.thingsboard.server.common.data.id.CustomerId; import org.thingsboard.server.common.data.id.EdgeId; import org.thingsboard.server.common.data.id.EntityId; +import org.thingsboard.server.common.data.id.HasId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; @@ -46,7 +46,7 @@ import org.thingsboard.server.common.data.relation.EntityRelation; import org.thingsboard.server.common.data.relation.EntitySearchDirection; import org.thingsboard.server.common.data.relation.RelationTypeGroup; import org.thingsboard.server.dao.entity.AbstractCachedEntityService; -import org.thingsboard.server.dao.entity.SimpleEntityService; +import org.thingsboard.server.dao.entity.TbEntityService; import org.thingsboard.server.dao.exception.DataValidationException; import org.thingsboard.server.dao.service.DataValidator; import org.thingsboard.server.dao.service.PaginatedRemover; @@ -55,6 +55,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; +import java.util.Optional; import java.util.stream.Collectors; import static org.thingsboard.server.dao.DaoUtil.toUUIDs; @@ -433,14 +434,14 @@ public class BaseAssetService extends AbstractCachedEntityService fetchHasNameEntityAsync(TenantId tenantId, EntityId entityId) { - return findAssetByIdAsync(tenantId, new AssetId(entityId.getId())); + public Optional> fetchEntity(TenantId tenantId, EntityId entityId) { + return Optional.of(findAssetById(tenantId, new AssetId(entityId.getId()))); } @Override public CustomerId getCustomerId(TenantId tenantId, EntityId entityId) { Asset asset = findAssetById(tenantId, new AssetId(entityId.getId())); - return asset != null ? asset.getCustomerId() : SimpleEntityService.NULL_CUSTOMER_ID; + return asset != null ? asset.getCustomerId() : TbEntityService.NULL_CUSTOMER_ID; } } diff --git a/dao/src/main/java/org/thingsboard/server/dao/audit/AuditLogServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/audit/AuditLogServiceImpl.java index 1afd76ed56..2ee07fd30c 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/audit/AuditLogServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/audit/AuditLogServiceImpl.java @@ -36,6 +36,7 @@ import org.thingsboard.server.common.data.audit.AuditLog; import org.thingsboard.server.common.data.id.AuditLogId; import org.thingsboard.server.common.data.id.CustomerId; import org.thingsboard.server.common.data.id.EntityId; +import org.thingsboard.server.common.data.id.HasId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.id.UserId; import org.thingsboard.server.common.data.kv.AttributeKvEntry; @@ -127,7 +128,7 @@ public class AuditLogServiceImpl implements AuditLogService { entityName = entity.getName(); } else { try { - Optional entityNameOpt = entityService.fetchEntityNameAsync(tenantId, entityId).get(); + Optional entityNameOpt = entityService.fetchEntityName(tenantId, entityId); entityName = entityNameOpt.orElse(entityName); } catch (Exception ignored) { } @@ -405,4 +406,9 @@ public class AuditLogServiceImpl implements AuditLogService { return Futures.allAsList(futures); } + @Override + public Optional> fetchEntity(TenantId tenantId, EntityId entityId) { + return Optional.empty(); + } + } diff --git a/dao/src/main/java/org/thingsboard/server/dao/audit/DummyAuditLogServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/audit/DummyAuditLogServiceImpl.java index 8f4ebb9102..40b3b77c2e 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/audit/DummyAuditLogServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/audit/DummyAuditLogServiceImpl.java @@ -23,14 +23,16 @@ import org.thingsboard.server.common.data.audit.ActionType; import org.thingsboard.server.common.data.audit.AuditLog; import org.thingsboard.server.common.data.id.CustomerId; import org.thingsboard.server.common.data.id.EntityId; +import org.thingsboard.server.common.data.id.HasId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.id.UserId; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.TimePageLink; import java.util.List; +import java.util.Optional; -@Service +@Service("AuditLogDaoService") @ConditionalOnProperty(prefix = "audit-log", value = "enabled", havingValue = "false") public class DummyAuditLogServiceImpl implements AuditLogService { @@ -58,4 +60,10 @@ public class DummyAuditLogServiceImpl implements AuditLogService { public ListenableFuture> logEntityAction(TenantId tenantId, CustomerId customerId, UserId userId, String userName, I entityId, E entity, ActionType actionType, Exception e, Object... additionalInfo) { return null; } + + @Override + public Optional> fetchEntity(TenantId tenantId, EntityId entityId) { + return Optional.empty(); + } + } diff --git a/dao/src/main/java/org/thingsboard/server/dao/customer/CustomerServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/customer/CustomerServiceImpl.java index a28798de60..f9b602031d 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/customer/CustomerServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/customer/CustomerServiceImpl.java @@ -24,9 +24,9 @@ import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.thingsboard.server.common.data.Customer; -import org.thingsboard.server.common.data.HasName; import org.thingsboard.server.common.data.id.CustomerId; import org.thingsboard.server.common.data.id.EntityId; +import org.thingsboard.server.common.data.id.HasId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; @@ -182,13 +182,12 @@ public class CustomerServiceImpl extends AbstractEntityService implements Custom }; @Override - public ListenableFuture fetchHasNameEntityAsync(TenantId tenantId, EntityId entityId) { - return findCustomerByIdAsync(tenantId, new CustomerId(entityId.getId())); + public Optional> fetchEntity(TenantId tenantId, EntityId entityId) { + return Optional.of(findCustomerById(tenantId, new CustomerId(entityId.getId()))); } @Override public CustomerId getCustomerId(TenantId tenantId, EntityId entityId) { - // todo ask Andrew why we are not checking for parent customer. return new CustomerId(entityId.getId()); } } diff --git a/dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardServiceImpl.java index eadd6deaf0..d9649a8f79 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardServiceImpl.java @@ -24,12 +24,12 @@ import org.springframework.transaction.annotation.Transactional; import org.thingsboard.server.common.data.Customer; import org.thingsboard.server.common.data.Dashboard; import org.thingsboard.server.common.data.DashboardInfo; -import org.thingsboard.server.common.data.HasName; import org.thingsboard.server.common.data.edge.Edge; import org.thingsboard.server.common.data.id.CustomerId; import org.thingsboard.server.common.data.id.DashboardId; import org.thingsboard.server.common.data.id.EdgeId; import org.thingsboard.server.common.data.id.EntityId; +import org.thingsboard.server.common.data.id.HasId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; @@ -44,6 +44,7 @@ import org.thingsboard.server.dao.service.PaginatedRemover; import org.thingsboard.server.dao.service.Validator; import java.util.List; +import java.util.Optional; import static org.thingsboard.server.dao.service.Validator.validateId; @@ -310,8 +311,8 @@ public class DashboardServiceImpl extends AbstractEntityService implements Dashb }; @Override - public ListenableFuture fetchHasNameEntityAsync(TenantId tenantId, EntityId entityId) { - return findDashboardByIdAsync(tenantId, new DashboardId(entityId.getId())); + public Optional> fetchEntity(TenantId tenantId, EntityId entityId) { + return Optional.of(findDashboardById(tenantId, new DashboardId(entityId.getId()))); } private class CustomerDashboardsUnassigner extends PaginatedRemover { diff --git a/dao/src/main/java/org/thingsboard/server/dao/device/DeviceProfileServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/device/DeviceProfileServiceImpl.java index f7972bdcaa..ee43e6152b 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/device/DeviceProfileServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/device/DeviceProfileServiceImpl.java @@ -15,8 +15,6 @@ */ package org.thingsboard.server.dao.device; -import com.google.common.util.concurrent.Futures; -import com.google.common.util.concurrent.ListenableFuture; import lombok.extern.slf4j.Slf4j; import org.hibernate.exception.ConstraintViolationException; import org.springframework.beans.factory.annotation.Autowired; @@ -30,7 +28,6 @@ import org.thingsboard.server.common.data.DeviceProfileInfo; import org.thingsboard.server.common.data.DeviceProfileProvisionType; import org.thingsboard.server.common.data.DeviceProfileType; import org.thingsboard.server.common.data.DeviceTransportType; -import org.thingsboard.server.common.data.HasName; import org.thingsboard.server.common.data.StringUtils; import org.thingsboard.server.common.data.device.profile.DefaultDeviceProfileConfiguration; import org.thingsboard.server.common.data.device.profile.DefaultDeviceProfileTransportConfiguration; @@ -38,6 +35,7 @@ import org.thingsboard.server.common.data.device.profile.DeviceProfileData; import org.thingsboard.server.common.data.device.profile.DisabledDeviceProfileProvisionConfiguration; import org.thingsboard.server.common.data.id.DeviceProfileId; import org.thingsboard.server.common.data.id.EntityId; +import org.thingsboard.server.common.data.id.HasId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; @@ -51,6 +49,7 @@ import org.thingsboard.server.dao.service.Validator; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Optional; import static org.thingsboard.server.dao.service.Validator.validateId; @@ -291,8 +290,8 @@ public class DeviceProfileServiceImpl extends AbstractCachedEntityService fetchHasNameEntityAsync(TenantId tenantId, EntityId entityId) { - return Futures.immediateFuture(findDeviceProfileById(tenantId, new DeviceProfileId(entityId.getId()))); + public Optional> fetchEntity(TenantId tenantId, EntityId entityId) { + return Optional.of(findDeviceProfileById(tenantId, new DeviceProfileId(entityId.getId()))); } private PaginatedRemover tenantDeviceProfilesRemover = diff --git a/dao/src/main/java/org/thingsboard/server/dao/device/DeviceServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/device/DeviceServiceImpl.java index cdcb98e6d0..66a58b02b1 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/device/DeviceServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/device/DeviceServiceImpl.java @@ -37,7 +37,6 @@ import org.thingsboard.server.common.data.DeviceTransportType; import org.thingsboard.server.common.data.EntitySubtype; import org.thingsboard.server.common.data.EntityType; import org.thingsboard.server.common.data.EntityView; -import org.thingsboard.server.common.data.HasName; import org.thingsboard.server.common.data.StringUtils; import org.thingsboard.server.common.data.device.DeviceSearchQuery; import org.thingsboard.server.common.data.device.credentials.BasicMqttCredentials; @@ -54,6 +53,7 @@ import org.thingsboard.server.common.data.id.DeviceId; import org.thingsboard.server.common.data.id.DeviceProfileId; import org.thingsboard.server.common.data.id.EdgeId; import org.thingsboard.server.common.data.id.EntityId; +import org.thingsboard.server.common.data.id.HasId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.ota.OtaPackageType; import org.thingsboard.server.common.data.page.PageData; @@ -67,7 +67,7 @@ import org.thingsboard.server.dao.device.provision.ProvisionFailedException; import org.thingsboard.server.dao.device.provision.ProvisionRequest; import org.thingsboard.server.dao.device.provision.ProvisionResponseStatus; import org.thingsboard.server.dao.entity.AbstractCachedEntityService; -import org.thingsboard.server.dao.entity.SimpleEntityService; +import org.thingsboard.server.dao.entity.TbEntityService; import org.thingsboard.server.dao.event.EventService; import org.thingsboard.server.dao.exception.DataValidationException; import org.thingsboard.server.dao.service.DataValidator; @@ -78,6 +78,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; +import java.util.Optional; import java.util.UUID; import java.util.stream.Collectors; @@ -709,13 +710,13 @@ public class DeviceServiceImpl extends AbstractCachedEntityService fetchHasNameEntityAsync(TenantId tenantId, EntityId entityId) { - return findDeviceByIdAsync(tenantId, new DeviceId(entityId.getId())); + public Optional> fetchEntity(TenantId tenantId, EntityId entityId) { + return Optional.of(findDeviceById(tenantId, new DeviceId(entityId.getId()))); } @Override public CustomerId getCustomerId(TenantId tenantId, EntityId entityId) { Device device = findDeviceById(tenantId, new DeviceId(entityId.getId())); - return device != null ? device.getCustomerId() : SimpleEntityService.NULL_CUSTOMER_ID; + return device != null ? device.getCustomerId() : TbEntityService.NULL_CUSTOMER_ID; } } diff --git a/dao/src/main/java/org/thingsboard/server/dao/edge/EdgeServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/edge/EdgeServiceImpl.java index 5f2176bb50..94b6926760 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/edge/EdgeServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/edge/EdgeServiceImpl.java @@ -32,7 +32,6 @@ import org.springframework.transaction.event.TransactionalEventListener; import org.thingsboard.common.util.JacksonUtil; import org.thingsboard.server.common.data.EntitySubtype; import org.thingsboard.server.common.data.EntityType; -import org.thingsboard.server.common.data.HasName; import org.thingsboard.server.common.data.StringUtils; import org.thingsboard.server.common.data.User; import org.thingsboard.server.common.data.edge.Edge; @@ -41,6 +40,7 @@ import org.thingsboard.server.common.data.edge.EdgeSearchQuery; import org.thingsboard.server.common.data.id.CustomerId; import org.thingsboard.server.common.data.id.EdgeId; import org.thingsboard.server.common.data.id.EntityId; +import org.thingsboard.server.common.data.id.HasId; import org.thingsboard.server.common.data.id.IdBased; import org.thingsboard.server.common.data.id.RuleChainId; import org.thingsboard.server.common.data.id.TenantId; @@ -53,7 +53,7 @@ import org.thingsboard.server.common.data.relation.EntitySearchDirection; import org.thingsboard.server.common.data.rule.RuleChain; import org.thingsboard.server.common.data.rule.RuleNode; import org.thingsboard.server.dao.entity.AbstractCachedEntityService; -import org.thingsboard.server.dao.entity.SimpleEntityService; +import org.thingsboard.server.dao.entity.TbEntityService; import org.thingsboard.server.dao.exception.DataValidationException; import org.thingsboard.server.dao.relation.RelationService; import org.thingsboard.server.dao.rule.RuleChainService; @@ -523,13 +523,13 @@ public class EdgeServiceImpl extends AbstractCachedEntityService fetchHasNameEntityAsync(TenantId tenantId, EntityId entityId) { - return findEdgeByIdAsync(tenantId, new EdgeId(entityId.getId())); + public Optional> fetchEntity(TenantId tenantId, EntityId entityId) { + return Optional.of(findEdgeById(tenantId, new EdgeId(entityId.getId()))); } @Override public CustomerId getCustomerId(TenantId tenantId, EntityId entityId) { Edge edge = findEdgeById(tenantId, new EdgeId(entityId.getId())); - return edge != null ? edge.getCustomerId() : SimpleEntityService.NULL_CUSTOMER_ID; + return edge != null ? edge.getCustomerId() : TbEntityService.NULL_CUSTOMER_ID; } } diff --git a/dao/src/main/java/org/thingsboard/server/dao/entity/BaseEntityService.java b/dao/src/main/java/org/thingsboard/server/dao/entity/BaseEntityService.java index 4e69823492..b224a05b33 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/entity/BaseEntityService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/entity/BaseEntityService.java @@ -15,10 +15,6 @@ */ package org.thingsboard.server.dao.entity; -import com.google.common.base.Function; -import com.google.common.util.concurrent.Futures; -import com.google.common.util.concurrent.ListenableFuture; -import com.google.common.util.concurrent.MoreExecutors; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -26,6 +22,7 @@ import org.springframework.util.CollectionUtils; import org.thingsboard.server.common.data.HasName; import org.thingsboard.server.common.data.id.CustomerId; import org.thingsboard.server.common.data.id.EntityId; +import org.thingsboard.server.common.data.id.HasId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.query.EntityCountQuery; @@ -34,18 +31,7 @@ import org.thingsboard.server.common.data.query.EntityDataPageLink; import org.thingsboard.server.common.data.query.EntityDataQuery; import org.thingsboard.server.common.data.query.EntityFilterType; import org.thingsboard.server.common.data.query.RelationsQueryFilter; -import org.thingsboard.server.dao.alarm.AlarmService; -import org.thingsboard.server.dao.asset.AssetService; -import org.thingsboard.server.dao.customer.CustomerService; -import org.thingsboard.server.dao.dashboard.DashboardService; -import org.thingsboard.server.dao.device.DeviceService; -import org.thingsboard.server.dao.entityview.EntityViewService; import org.thingsboard.server.dao.exception.IncorrectParameterException; -import org.thingsboard.server.dao.ota.OtaPackageService; -import org.thingsboard.server.dao.resource.ResourceService; -import org.thingsboard.server.dao.rule.RuleChainService; -import org.thingsboard.server.dao.tenant.TenantService; -import org.thingsboard.server.dao.user.UserService; import java.util.Optional; @@ -86,18 +72,25 @@ public class BaseEntityService extends AbstractEntityService implements EntitySe } @Override - public ListenableFuture> fetchEntityNameAsync(TenantId tenantId, EntityId entityId) { - log.trace("Executing fetchEntityNameAsync [{}]", entityId); - SimpleEntityService fetchEntityService = entityServiceBeanFactory.getServiceByEntityType(entityId.getEntityType()); - return Futures.transform(fetchEntityService.fetchHasNameEntityAsync(tenantId, entityId), - hasName -> hasName != null ? Optional.of(hasName.getName()) : Optional.empty(), MoreExecutors.directExecutor()); + public Optional fetchEntityName(TenantId tenantId, EntityId entityId) { + log.trace("Executing fetchEntityName [{}]", entityId); + TbEntityService tbEntityService = entityServiceBeanFactory.getServiceByEntityType(entityId.getEntityType()); + Optional> hasIdOpt = tbEntityService.fetchEntity(tenantId, entityId); + if (hasIdOpt.isPresent()) { + HasId hasId = hasIdOpt.get(); + if (hasId instanceof HasName) { + HasName hasName = (HasName) hasId; + return Optional.of(hasName.getName()); + } + } + return Optional.empty(); } @Override public CustomerId fetchEntityCustomerId(TenantId tenantId, EntityId entityId) { log.trace("Executing fetchEntityCustomerId [{}]", entityId); - SimpleEntityService fetchEntityService = entityServiceBeanFactory.getServiceByEntityType(entityId.getEntityType()); - return fetchEntityService.getCustomerId(tenantId, entityId); + TbEntityService tbEntityService = entityServiceBeanFactory.getServiceByEntityType(entityId.getEntityType()); + return tbEntityService.getCustomerId(tenantId, entityId); } private static void validateEntityCountQuery(EntityCountQuery query) { diff --git a/dao/src/main/java/org/thingsboard/server/dao/entityview/EntityViewServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/entityview/EntityViewServiceImpl.java index eb345516c0..042aa62152 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/entityview/EntityViewServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/entityview/EntityViewServiceImpl.java @@ -28,7 +28,6 @@ import org.thingsboard.server.common.data.EntitySubtype; import org.thingsboard.server.common.data.EntityType; import org.thingsboard.server.common.data.EntityView; import org.thingsboard.server.common.data.EntityViewInfo; -import org.thingsboard.server.common.data.HasName; import org.thingsboard.server.common.data.StringUtils; import org.thingsboard.server.common.data.edge.Edge; import org.thingsboard.server.common.data.entityview.EntityViewSearchQuery; @@ -36,6 +35,7 @@ import org.thingsboard.server.common.data.id.CustomerId; import org.thingsboard.server.common.data.id.EdgeId; import org.thingsboard.server.common.data.id.EntityId; import org.thingsboard.server.common.data.id.EntityViewId; +import org.thingsboard.server.common.data.id.HasId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; @@ -43,7 +43,7 @@ import org.thingsboard.server.common.data.relation.EntityRelation; import org.thingsboard.server.common.data.relation.EntitySearchDirection; import org.thingsboard.server.common.data.relation.RelationTypeGroup; import org.thingsboard.server.dao.entity.AbstractCachedEntityService; -import org.thingsboard.server.dao.entity.SimpleEntityService; +import org.thingsboard.server.dao.entity.TbEntityService; import org.thingsboard.server.dao.exception.DataValidationException; import org.thingsboard.server.dao.service.DataValidator; import org.thingsboard.server.dao.service.PaginatedRemover; @@ -54,6 +54,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; +import java.util.Optional; import java.util.stream.Collectors; import static org.thingsboard.server.dao.service.Validator.validateId; @@ -412,13 +413,13 @@ public class EntityViewServiceImpl extends AbstractCachedEntityService fetchHasNameEntityAsync(TenantId tenantId, EntityId entityId) { - return findEntityViewByIdAsync(tenantId, new EntityViewId(entityId.getId())); + public Optional> fetchEntity(TenantId tenantId, EntityId entityId) { + return Optional.of(findEntityViewById(tenantId, new EntityViewId(entityId.getId()))); } @Override public CustomerId getCustomerId(TenantId tenantId, EntityId entityId) { EntityView entityView = findEntityViewById(tenantId, new EntityViewId(entityId.getId())); - return entityView != null ? entityView.getCustomerId() : SimpleEntityService.NULL_CUSTOMER_ID; + return entityView != null ? entityView.getCustomerId() : TbEntityService.NULL_CUSTOMER_ID; } } 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 2cd8f2db57..de4683f6b4 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 @@ -31,12 +31,14 @@ import org.thingsboard.server.common.data.event.LifecycleEvent; import org.thingsboard.server.common.data.event.RuleChainDebugEvent; import org.thingsboard.server.common.data.event.RuleNodeDebugEvent; import org.thingsboard.server.common.data.id.EntityId; +import org.thingsboard.server.common.data.id.HasId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.TimePageLink; import org.thingsboard.server.dao.service.DataValidator; import java.util.List; +import java.util.Optional; import java.util.function.BiConsumer; import java.util.function.Function; import java.util.stream.Collectors; @@ -148,4 +150,10 @@ public class BaseEventService implements EventService { private List convert(EntityType entityType, List list) { return list == null ? null : list.stream().map(e -> e.toInfo(entityType)).collect(Collectors.toList()); } + + @Override + public Optional> fetchEntity(TenantId tenantId, EntityId entityId) { + return Optional.empty(); + } + } diff --git a/dao/src/main/java/org/thingsboard/server/dao/ota/BaseOtaPackageService.java b/dao/src/main/java/org/thingsboard/server/dao/ota/BaseOtaPackageService.java index ada68de7f3..c6f34035a7 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/ota/BaseOtaPackageService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/ota/BaseOtaPackageService.java @@ -24,12 +24,12 @@ import org.hibernate.exception.ConstraintViolationException; import org.springframework.stereotype.Service; import org.springframework.transaction.event.TransactionalEventListener; import org.thingsboard.server.cache.ota.OtaPackageDataCache; -import org.thingsboard.server.common.data.HasName; import org.thingsboard.server.common.data.OtaPackage; import org.thingsboard.server.common.data.OtaPackageInfo; import org.thingsboard.server.common.data.StringUtils; import org.thingsboard.server.common.data.id.DeviceProfileId; import org.thingsboard.server.common.data.id.EntityId; +import org.thingsboard.server.common.data.id.HasId; import org.thingsboard.server.common.data.id.OtaPackageId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.ota.ChecksumAlgorithm; @@ -237,8 +237,8 @@ public class BaseOtaPackageService extends AbstractCachedEntityService fetchHasNameEntityAsync(TenantId tenantId, EntityId entityId) { - return findOtaPackageInfoByIdAsync(tenantId, new OtaPackageId(entityId.getId())); + public Optional> fetchEntity(TenantId tenantId, EntityId entityId) { + return Optional.of(findOtaPackageInfoById(tenantId, new OtaPackageId(entityId.getId()))); } } diff --git a/dao/src/main/java/org/thingsboard/server/dao/queue/BaseQueueService.java b/dao/src/main/java/org/thingsboard/server/dao/queue/BaseQueueService.java index d47c9fb3d3..93fa0bbac8 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/queue/BaseQueueService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/queue/BaseQueueService.java @@ -15,17 +15,15 @@ */ package org.thingsboard.server.dao.queue; -import com.google.common.util.concurrent.Futures; -import com.google.common.util.concurrent.ListenableFuture; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.hibernate.exception.ConstraintViolationException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; -import org.thingsboard.server.common.data.HasName; import org.thingsboard.server.common.data.TenantProfile; import org.thingsboard.server.common.data.id.EntityId; +import org.thingsboard.server.common.data.id.HasId; import org.thingsboard.server.common.data.id.QueueId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.PageData; @@ -39,6 +37,7 @@ import org.thingsboard.server.dao.service.Validator; import org.thingsboard.server.dao.tenant.TbTenantProfileCache; import java.util.List; +import java.util.Optional; @Service("QueueDaoService") @Slf4j @@ -124,8 +123,8 @@ public class BaseQueueService extends AbstractEntityService implements QueueServ } @Override - public ListenableFuture fetchHasNameEntityAsync(TenantId tenantId, EntityId entityId) { - return Futures.immediateFuture(findQueueById(tenantId, new QueueId(entityId.getId()))); + public Optional> fetchEntity(TenantId tenantId, EntityId entityId) { + return Optional.of(findQueueById(tenantId, new QueueId(entityId.getId()))); } private PaginatedRemover tenantQueuesRemover = diff --git a/dao/src/main/java/org/thingsboard/server/dao/relation/BaseRelationService.java b/dao/src/main/java/org/thingsboard/server/dao/relation/BaseRelationService.java index fb82f3efbd..ade00a785b 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/relation/BaseRelationService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/relation/BaseRelationService.java @@ -72,7 +72,7 @@ import static org.thingsboard.server.dao.service.Validator.validateId; /** * Created by ashvayka on 28.04.17. */ -@Service("RelationDaoService") +@Service() @Slf4j public class BaseRelationService implements RelationService { @@ -375,12 +375,10 @@ public class BaseRelationService implements RelationService { private ListenableFuture fetchRelationInfoAsync(TenantId tenantId, EntityRelation relation, Function entityIdGetter, BiConsumer entityNameSetter) { - ListenableFuture> entityNameFuture = entityService.fetchEntityNameAsync(tenantId, entityIdGetter.apply(relation)); - return Futures.transform(entityNameFuture, nameOpt -> { - EntityRelationInfo entityRelationInfo1 = new EntityRelationInfo(relation); - entityNameSetter.accept(entityRelationInfo1, nameOpt.orElse("N/A")); - return entityRelationInfo1; - }, MoreExecutors.directExecutor()); + Optional entityNameOpt = entityService.fetchEntityName(tenantId, entityIdGetter.apply(relation)); + EntityRelationInfo relationInfo = new EntityRelationInfo(relation); + entityNameSetter.accept(relationInfo, entityNameOpt.orElse("N/A")); + return Futures.immediateFuture(relationInfo); } @Override diff --git a/dao/src/main/java/org/thingsboard/server/dao/resource/BaseResourceService.java b/dao/src/main/java/org/thingsboard/server/dao/resource/BaseResourceService.java index 88e5eb8a05..8c38ee249e 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/resource/BaseResourceService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/resource/BaseResourceService.java @@ -20,11 +20,11 @@ import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.hibernate.exception.ConstraintViolationException; import org.springframework.stereotype.Service; -import org.thingsboard.server.common.data.HasName; import org.thingsboard.server.common.data.ResourceType; import org.thingsboard.server.common.data.TbResource; import org.thingsboard.server.common.data.TbResourceInfo; import org.thingsboard.server.common.data.id.EntityId; +import org.thingsboard.server.common.data.id.HasId; import org.thingsboard.server.common.data.id.TbResourceId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.PageData; @@ -137,8 +137,8 @@ public class BaseResourceService implements ResourceService { } @Override - public ListenableFuture fetchHasNameEntityAsync(TenantId tenantId, EntityId entityId) { - return findResourceInfoByIdAsync(tenantId, new TbResourceId(entityId.getId())); + public Optional> fetchEntity(TenantId tenantId, EntityId entityId) { + return Optional.of(findResourceInfoById(tenantId, new TbResourceId(entityId.getId()))); } @Override diff --git a/dao/src/main/java/org/thingsboard/server/dao/rpc/BaseRpcService.java b/dao/src/main/java/org/thingsboard/server/dao/rpc/BaseRpcService.java index 604cda0b36..b8857f5537 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/rpc/BaseRpcService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/rpc/BaseRpcService.java @@ -20,6 +20,8 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.thingsboard.server.common.data.id.DeviceId; +import org.thingsboard.server.common.data.id.EntityId; +import org.thingsboard.server.common.data.id.HasId; import org.thingsboard.server.common.data.id.RpcId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.PageData; @@ -28,6 +30,8 @@ import org.thingsboard.server.common.data.rpc.Rpc; import org.thingsboard.server.common.data.rpc.RpcStatus; import org.thingsboard.server.dao.service.PaginatedRemover; +import java.util.Optional; + import static org.thingsboard.server.dao.service.Validator.validateId; import static org.thingsboard.server.dao.service.Validator.validatePageLink; @@ -93,6 +97,11 @@ public class BaseRpcService implements RpcService { return rpcDao.findAllByDeviceId(tenantId, deviceId, pageLink); } + @Override + public Optional> fetchEntity(TenantId tenantId, EntityId entityId) { + return Optional.of(findById(tenantId, new RpcId(entityId.getId()))); + } + private PaginatedRemover tenantRpcRemover = new PaginatedRemover<>() { @Override diff --git a/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleChainService.java b/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleChainService.java index 9625f400c1..7837660ee4 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleChainService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleChainService.java @@ -29,10 +29,10 @@ import org.springframework.transaction.annotation.Transactional; import org.thingsboard.common.util.JacksonUtil; import org.thingsboard.server.common.data.BaseData; import org.thingsboard.server.common.data.EntityType; -import org.thingsboard.server.common.data.HasName; import org.thingsboard.server.common.data.edge.Edge; import org.thingsboard.server.common.data.id.EdgeId; import org.thingsboard.server.common.data.id.EntityId; +import org.thingsboard.server.common.data.id.HasId; import org.thingsboard.server.common.data.id.RuleChainId; import org.thingsboard.server.common.data.id.RuleNodeId; import org.thingsboard.server.common.data.id.TenantId; @@ -761,11 +761,10 @@ public class BaseRuleChainService extends AbstractEntityService implements RuleC @Override - public ListenableFuture fetchHasNameEntityAsync(TenantId tenantId, EntityId entityId) { - if (EntityType.RULE_NODE.equals(entityId.getEntityType())) { - return findRuleNodeByIdAsync(tenantId, new RuleNodeId(entityId.getId())); - } - return findRuleChainByIdAsync(tenantId, new RuleChainId(entityId.getId())); + public Optional> fetchEntity(TenantId tenantId, EntityId entityId) { + return EntityType.RULE_NODE.equals(entityId.getEntityType()) ? + Optional.of(findRuleNodeById(tenantId, new RuleNodeId(entityId.getId()))) : + Optional.of(findRuleChainById(tenantId, new RuleChainId(entityId.getId()))); } private List getRuleChainToNodeRelations(TenantId tenantId, RuleChainId ruleChainId) { diff --git a/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantProfileServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantProfileServiceImpl.java index 4993199dfd..fc28d461e2 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantProfileServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantProfileServiceImpl.java @@ -15,17 +15,15 @@ */ package org.thingsboard.server.dao.tenant; -import com.google.common.util.concurrent.Futures; -import com.google.common.util.concurrent.ListenableFuture; import lombok.extern.slf4j.Slf4j; import org.hibernate.exception.ConstraintViolationException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.event.TransactionalEventListener; import org.thingsboard.server.common.data.EntityInfo; -import org.thingsboard.server.common.data.HasName; import org.thingsboard.server.common.data.TenantProfile; import org.thingsboard.server.common.data.id.EntityId; +import org.thingsboard.server.common.data.id.HasId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.id.TenantProfileId; import org.thingsboard.server.common.data.page.PageData; @@ -40,6 +38,7 @@ import org.thingsboard.server.dao.service.Validator; import java.util.ArrayList; import java.util.List; +import java.util.Optional; import static org.thingsboard.server.dao.service.Validator.validateId; @@ -209,8 +208,8 @@ public class TenantProfileServiceImpl extends AbstractCachedEntityService fetchHasNameEntityAsync(TenantId tenantId, EntityId entityId) { - return Futures.immediateFuture(findTenantProfileById(tenantId, new TenantProfileId(entityId.getId()))); + public Optional> fetchEntity(TenantId tenantId, EntityId entityId) { + return Optional.of(findTenantProfileById(tenantId, new TenantProfileId(entityId.getId()))); } private final PaginatedRemover tenantProfilesRemover = diff --git a/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantServiceImpl.java index 91160f415e..c849199e74 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantServiceImpl.java @@ -23,11 +23,11 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.event.TransactionalEventListener; import org.thingsboard.server.cache.TbTransactionalCache; -import org.thingsboard.server.common.data.HasName; import org.thingsboard.server.common.data.Tenant; import org.thingsboard.server.common.data.TenantInfo; import org.thingsboard.server.common.data.TenantProfile; import org.thingsboard.server.common.data.id.EntityId; +import org.thingsboard.server.common.data.id.HasId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.id.TenantProfileId; import org.thingsboard.server.common.data.page.PageData; @@ -53,6 +53,7 @@ import org.thingsboard.server.dao.user.UserService; import org.thingsboard.server.dao.widget.WidgetsBundleService; import java.util.List; +import java.util.Optional; import static org.thingsboard.server.dao.service.Validator.validateId; @@ -260,7 +261,7 @@ public class TenantServiceImpl extends AbstractCachedEntityService fetchHasNameEntityAsync(TenantId tenantId, EntityId entityId) { - return findTenantByIdAsync(tenantId, new TenantId(entityId.getId())); + public Optional> fetchEntity(TenantId tenantId, EntityId entityId) { + return Optional.of(findTenantById(new TenantId(entityId.getId()))); } } diff --git a/dao/src/main/java/org/thingsboard/server/dao/usagerecord/ApiUsageStateServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/usagerecord/ApiUsageStateServiceImpl.java index ebd5b0b96f..f5c586acec 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/usagerecord/ApiUsageStateServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/usagerecord/ApiUsageStateServiceImpl.java @@ -27,6 +27,7 @@ import org.thingsboard.server.common.data.Tenant; import org.thingsboard.server.common.data.TenantProfile; import org.thingsboard.server.common.data.id.ApiUsageStateId; import org.thingsboard.server.common.data.id.EntityId; +import org.thingsboard.server.common.data.id.HasId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.kv.BasicTsKvEntry; import org.thingsboard.server.common.data.kv.LongDataEntry; @@ -42,6 +43,7 @@ import org.thingsboard.server.dao.timeseries.TimeseriesService; import java.util.ArrayList; import java.util.List; import java.util.Objects; +import java.util.Optional; import static org.thingsboard.server.dao.service.Validator.validateId; @@ -161,4 +163,8 @@ public class ApiUsageStateServiceImpl extends AbstractEntityService implements A return apiUsageStateDao.findById(tenantId, id.getId()); } + @Override + public Optional> fetchEntity(TenantId tenantId, EntityId entityId) { + return Optional.of(findApiUsageStateById(tenantId, new ApiUsageStateId(entityId.getId()))); + } } diff --git a/dao/src/main/java/org/thingsboard/server/dao/user/UserServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/user/UserServiceImpl.java index 4dd848af0a..2e231eeb23 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/user/UserServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/user/UserServiceImpl.java @@ -28,11 +28,11 @@ import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.thingsboard.common.util.JacksonUtil; -import org.thingsboard.server.common.data.HasName; import org.thingsboard.server.common.data.StringUtils; import org.thingsboard.server.common.data.User; import org.thingsboard.server.common.data.id.CustomerId; import org.thingsboard.server.common.data.id.EntityId; +import org.thingsboard.server.common.data.id.HasId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.id.UserCredentialsId; import org.thingsboard.server.common.data.id.UserId; @@ -41,13 +41,14 @@ import org.thingsboard.server.common.data.page.PageLink; import org.thingsboard.server.common.data.security.UserCredentials; import org.thingsboard.server.common.data.security.event.UserCredentialsInvalidationEvent; import org.thingsboard.server.dao.entity.AbstractEntityService; -import org.thingsboard.server.dao.entity.SimpleEntityService; +import org.thingsboard.server.dao.entity.TbEntityService; import org.thingsboard.server.dao.exception.IncorrectParameterException; import org.thingsboard.server.dao.service.DataValidator; import org.thingsboard.server.dao.service.PaginatedRemover; import java.util.HashMap; import java.util.Map; +import java.util.Optional; import static org.thingsboard.server.dao.service.Validator.validateId; import static org.thingsboard.server.dao.service.Validator.validatePageLink; @@ -401,14 +402,14 @@ public class UserServiceImpl extends AbstractEntityService implements UserServic }; @Override - public ListenableFuture fetchHasNameEntityAsync(TenantId tenantId, EntityId entityId) { - return findUserByIdAsync(tenantId, new UserId(entityId.getId())); + public Optional> fetchEntity(TenantId tenantId, EntityId entityId) { + return Optional.of(findUserById(tenantId, new UserId(entityId.getId()))); } @Override public CustomerId getCustomerId(TenantId tenantId, EntityId entityId) { User user = findUserById(tenantId, new UserId(entityId.getId())); - return user != null ? user.getCustomerId() : SimpleEntityService.NULL_CUSTOMER_ID; + return user != null ? user.getCustomerId() : TbEntityService.NULL_CUSTOMER_ID; } } diff --git a/dao/src/main/java/org/thingsboard/server/dao/util/AbstractBufferedRateExecutor.java b/dao/src/main/java/org/thingsboard/server/dao/util/AbstractBufferedRateExecutor.java index 089c565591..26ae0de259 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/util/AbstractBufferedRateExecutor.java +++ b/dao/src/main/java/org/thingsboard/server/dao/util/AbstractBufferedRateExecutor.java @@ -328,8 +328,8 @@ public abstract class AbstractBufferedRateExecutor { try { - ListenableFuture> nameOpt = entityService.fetchEntityNameAsync(TenantId.SYS_TENANT_ID, tenantId); - return nameOpt.get().orElse("N/A"); + Optional entityNameOpt = entityService.fetchEntityName(TenantId.SYS_TENANT_ID, tenantId); + return entityNameOpt.orElse("N/A"); } catch (Exception e) { log.error("[{}] Failed to get tenant name", tenantId, e); return "N/A"; diff --git a/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetTypeServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetTypeServiceImpl.java index d2cab9bd46..b1aa3c4db4 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetTypeServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetTypeServiceImpl.java @@ -18,6 +18,8 @@ package org.thingsboard.server.dao.widget; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.thingsboard.server.common.data.id.EntityId; +import org.thingsboard.server.common.data.id.HasId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.id.WidgetTypeId; import org.thingsboard.server.common.data.widget.WidgetType; @@ -27,6 +29,7 @@ import org.thingsboard.server.dao.service.DataValidator; import org.thingsboard.server.dao.service.Validator; import java.util.List; +import java.util.Optional; @Service("WidgetTypeDaoService") @Slf4j @@ -112,4 +115,9 @@ public class WidgetTypeServiceImpl implements WidgetTypeService { } } + @Override + public Optional> fetchEntity(TenantId tenantId, EntityId entityId) { + findWidgetTypeById(tenantId, new WidgetTypeId(entityId.getId())); + return Optional.of(findWidgetTypeById(tenantId, new WidgetTypeId(entityId.getId()))); + } } diff --git a/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleServiceImpl.java index fb519b11fa..d745cf22d2 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleServiceImpl.java @@ -15,13 +15,11 @@ */ package org.thingsboard.server.dao.widget; -import com.google.common.util.concurrent.Futures; -import com.google.common.util.concurrent.ListenableFuture; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import org.thingsboard.server.common.data.HasName; import org.thingsboard.server.common.data.id.EntityId; +import org.thingsboard.server.common.data.id.HasId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.id.WidgetsBundleId; import org.thingsboard.server.common.data.page.PageData; @@ -35,6 +33,7 @@ import org.thingsboard.server.dao.service.Validator; import java.util.ArrayList; import java.util.List; +import java.util.Optional; @Service("WidgetsBundleDaoService") @Slf4j @@ -156,8 +155,8 @@ public class WidgetsBundleServiceImpl implements WidgetsBundleService { } @Override - public ListenableFuture fetchHasNameEntityAsync(TenantId tenantId, EntityId entityId) { - return Futures.immediateFuture(findWidgetsBundleById(tenantId, new WidgetsBundleId(entityId.getId()))); + public Optional> fetchEntity(TenantId tenantId, EntityId entityId) { + return Optional.of(findWidgetsBundleById(tenantId, new WidgetsBundleId(entityId.getId()))); } private PaginatedRemover tenantWidgetsBundleRemover = From e21cae2a43bc90f4267eec9bda20dce1c5f3bc34 Mon Sep 17 00:00:00 2001 From: ShvaykaD Date: Mon, 12 Dec 2022 19:32:40 +0200 Subject: [PATCH 3/5] fix typo in BaseRelationService --- .../thingsboard/server/dao/relation/BaseRelationService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dao/src/main/java/org/thingsboard/server/dao/relation/BaseRelationService.java b/dao/src/main/java/org/thingsboard/server/dao/relation/BaseRelationService.java index ade00a785b..320e7661fc 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/relation/BaseRelationService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/relation/BaseRelationService.java @@ -72,7 +72,7 @@ import static org.thingsboard.server.dao.service.Validator.validateId; /** * Created by ashvayka on 28.04.17. */ -@Service() +@Service @Slf4j public class BaseRelationService implements RelationService { From f167c7c48be5f60b11591ac573112b6d6b4e531f Mon Sep 17 00:00:00 2001 From: ShvaykaD Date: Wed, 14 Dec 2022 12:30:27 +0200 Subject: [PATCH 4/5] code cleanup after review --- .../update/DefaultDataUpdateService.java | 2 +- .../server/dao/entity/EntityService.java | 2 +- .../server/dao/entity/TbEntityService.java | 9 --------- .../server/dao/alarm/BaseAlarmService.java | 14 ++------------ .../dao/asset/AssetProfileServiceImpl.java | 2 +- .../server/dao/asset/BaseAssetService.java | 9 +-------- .../dao/customer/CustomerServiceImpl.java | 6 +----- .../dao/dashboard/DashboardServiceImpl.java | 2 +- .../dao/device/DeviceProfileServiceImpl.java | 2 +- .../server/dao/device/DeviceServiceImpl.java | 8 +------- .../server/dao/edge/EdgeServiceImpl.java | 8 +------- .../server/dao/entity/BaseEntityService.java | 17 ++++++++++++++--- .../dao/entityview/EntityViewServiceImpl.java | 8 +------- .../server/dao/ota/BaseOtaPackageService.java | 2 +- .../server/dao/queue/BaseQueueService.java | 2 +- .../dao/resource/BaseResourceService.java | 2 +- .../server/dao/rpc/BaseRpcService.java | 2 +- .../server/dao/rule/BaseRuleChainService.java | 7 ++++--- .../dao/tenant/TenantProfileServiceImpl.java | 2 +- .../server/dao/tenant/TenantServiceImpl.java | 2 +- .../usagerecord/ApiUsageStateServiceImpl.java | 2 +- .../server/dao/user/UserServiceImpl.java | 9 +-------- .../dao/widget/WidgetTypeServiceImpl.java | 4 ++-- .../dao/widget/WidgetsBundleServiceImpl.java | 2 +- 24 files changed, 41 insertions(+), 84 deletions(-) diff --git a/application/src/main/java/org/thingsboard/server/service/install/update/DefaultDataUpdateService.java b/application/src/main/java/org/thingsboard/server/service/install/update/DefaultDataUpdateService.java index ee34bd7f23..9532bc3044 100644 --- a/application/src/main/java/org/thingsboard/server/service/install/update/DefaultDataUpdateService.java +++ b/application/src/main/java/org/thingsboard/server/service/install/update/DefaultDataUpdateService.java @@ -561,7 +561,7 @@ public class DefaultDataUpdateService implements DataUpdateService { while (hasNext) { for (Alarm alarm : alarms.getData()) { if (alarm.getCustomerId() == null && alarm.getOriginator() != null) { - alarm.setCustomerId(entityService.fetchEntityCustomerId(tenantId, alarm.getOriginator())); + alarm.setCustomerId(entityService.fetchEntityCustomerId(tenantId, alarm.getOriginator()).get()); alarmDao.save(tenantId, alarm); } if (processed.incrementAndGet() % 1000 == 0) { diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/entity/EntityService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/entity/EntityService.java index 9362dbef7a..aa5c70867f 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/entity/EntityService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/entity/EntityService.java @@ -29,7 +29,7 @@ public interface EntityService { Optional fetchEntityName(TenantId tenantId, EntityId entityId); - CustomerId fetchEntityCustomerId(TenantId tenantId, EntityId entityId); + Optional fetchEntityCustomerId(TenantId tenantId, EntityId entityId); long countEntitiesByQuery(TenantId tenantId, CustomerId customerId, EntityCountQuery query); diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/entity/TbEntityService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/entity/TbEntityService.java index bbea98179b..0ce6a75b80 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/entity/TbEntityService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/entity/TbEntityService.java @@ -15,23 +15,14 @@ */ package org.thingsboard.server.dao.entity; -import org.thingsboard.server.common.data.id.CustomerId; import org.thingsboard.server.common.data.id.EntityId; import org.thingsboard.server.common.data.id.HasId; import org.thingsboard.server.common.data.id.TenantId; import java.util.Optional; -import static org.thingsboard.server.common.data.id.EntityId.NULL_UUID; - public interface TbEntityService { - CustomerId NULL_CUSTOMER_ID = new CustomerId(NULL_UUID); - Optional> fetchEntity(TenantId tenantId, EntityId entityId); - default CustomerId getCustomerId(TenantId tenantId, EntityId entityId) { - return NULL_CUSTOMER_ID; - } - } diff --git a/dao/src/main/java/org/thingsboard/server/dao/alarm/BaseAlarmService.java b/dao/src/main/java/org/thingsboard/server/dao/alarm/BaseAlarmService.java index bf41420f40..f73ee2b9e1 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/alarm/BaseAlarmService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/alarm/BaseAlarmService.java @@ -49,7 +49,6 @@ import org.thingsboard.server.common.data.relation.EntitySearchDirection; import org.thingsboard.server.common.data.relation.RelationsSearchParameters; import org.thingsboard.server.dao.entity.AbstractEntityService; import org.thingsboard.server.dao.entity.EntityService; -import org.thingsboard.server.dao.entity.TbEntityService; import org.thingsboard.server.dao.service.DataValidator; import javax.annotation.Nullable; @@ -115,7 +114,7 @@ public class BaseAlarmService extends AbstractEntityService implements AlarmServ if (alarm.getEndTs() == 0L) { alarm.setEndTs(alarm.getStartTs()); } - alarm.setCustomerId(entityService.fetchEntityCustomerId(alarm.getTenantId(), alarm.getOriginator())); + alarm.setCustomerId(entityService.fetchEntityCustomerId(alarm.getTenantId(), alarm.getOriginator()).get()); if (alarm.getId() == null) { Alarm existing = alarmDao.findLatestByOriginatorAndType(alarm.getTenantId(), alarm.getOriginator(), alarm.getType()); if (existing == null || existing.getStatus().isCleared()) { @@ -407,16 +406,7 @@ public class BaseAlarmService extends AbstractEntityService implements AlarmServ @Override public Optional> fetchEntity(TenantId tenantId, EntityId entityId) { - return Optional.of(findAlarmById(tenantId, new AlarmId(entityId.getId()))); + return Optional.ofNullable(findAlarmById(tenantId, new AlarmId(entityId.getId()))); } - @Override - public CustomerId getCustomerId(TenantId tenantId, EntityId entityId) { - try { - Alarm alarm = findAlarmByIdAsync(tenantId, new AlarmId(entityId.getId())).get(); - return alarm != null ? alarm.getCustomerId() : TbEntityService.NULL_CUSTOMER_ID; - } catch (Exception e) { - return TbEntityService.NULL_CUSTOMER_ID; - } - } } diff --git a/dao/src/main/java/org/thingsboard/server/dao/asset/AssetProfileServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/asset/AssetProfileServiceImpl.java index f0abff89c4..75de5ba5d0 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/asset/AssetProfileServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/asset/AssetProfileServiceImpl.java @@ -269,7 +269,7 @@ public class AssetProfileServiceImpl extends AbstractCachedEntityService> fetchEntity(TenantId tenantId, EntityId entityId) { - return Optional.of(findAssetProfileById(tenantId, new AssetProfileId(entityId.getId()))); + return Optional.ofNullable(findAssetProfileById(tenantId, new AssetProfileId(entityId.getId()))); } private PaginatedRemover tenantAssetProfilesRemover = diff --git a/dao/src/main/java/org/thingsboard/server/dao/asset/BaseAssetService.java b/dao/src/main/java/org/thingsboard/server/dao/asset/BaseAssetService.java index 6f24f5a5eb..e65a886833 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/asset/BaseAssetService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/asset/BaseAssetService.java @@ -46,7 +46,6 @@ import org.thingsboard.server.common.data.relation.EntityRelation; import org.thingsboard.server.common.data.relation.EntitySearchDirection; import org.thingsboard.server.common.data.relation.RelationTypeGroup; import org.thingsboard.server.dao.entity.AbstractCachedEntityService; -import org.thingsboard.server.dao.entity.TbEntityService; import org.thingsboard.server.dao.exception.DataValidationException; import org.thingsboard.server.dao.service.DataValidator; import org.thingsboard.server.dao.service.PaginatedRemover; @@ -435,13 +434,7 @@ public class BaseAssetService extends AbstractCachedEntityService> fetchEntity(TenantId tenantId, EntityId entityId) { - return Optional.of(findAssetById(tenantId, new AssetId(entityId.getId()))); - } - - @Override - public CustomerId getCustomerId(TenantId tenantId, EntityId entityId) { - Asset asset = findAssetById(tenantId, new AssetId(entityId.getId())); - return asset != null ? asset.getCustomerId() : TbEntityService.NULL_CUSTOMER_ID; + return Optional.ofNullable(findAssetById(tenantId, new AssetId(entityId.getId()))); } } diff --git a/dao/src/main/java/org/thingsboard/server/dao/customer/CustomerServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/customer/CustomerServiceImpl.java index f9b602031d..aad5de33f7 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/customer/CustomerServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/customer/CustomerServiceImpl.java @@ -183,11 +183,7 @@ public class CustomerServiceImpl extends AbstractEntityService implements Custom @Override public Optional> fetchEntity(TenantId tenantId, EntityId entityId) { - return Optional.of(findCustomerById(tenantId, new CustomerId(entityId.getId()))); + return Optional.ofNullable(findCustomerById(tenantId, new CustomerId(entityId.getId()))); } - @Override - public CustomerId getCustomerId(TenantId tenantId, EntityId entityId) { - return new CustomerId(entityId.getId()); - } } diff --git a/dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardServiceImpl.java index d9649a8f79..d40c559856 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardServiceImpl.java @@ -312,7 +312,7 @@ public class DashboardServiceImpl extends AbstractEntityService implements Dashb @Override public Optional> fetchEntity(TenantId tenantId, EntityId entityId) { - return Optional.of(findDashboardById(tenantId, new DashboardId(entityId.getId()))); + return Optional.ofNullable(findDashboardById(tenantId, new DashboardId(entityId.getId()))); } private class CustomerDashboardsUnassigner extends PaginatedRemover { diff --git a/dao/src/main/java/org/thingsboard/server/dao/device/DeviceProfileServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/device/DeviceProfileServiceImpl.java index ee43e6152b..e459d3f48d 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/device/DeviceProfileServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/device/DeviceProfileServiceImpl.java @@ -291,7 +291,7 @@ public class DeviceProfileServiceImpl extends AbstractCachedEntityService> fetchEntity(TenantId tenantId, EntityId entityId) { - return Optional.of(findDeviceProfileById(tenantId, new DeviceProfileId(entityId.getId()))); + return Optional.ofNullable(findDeviceProfileById(tenantId, new DeviceProfileId(entityId.getId()))); } private PaginatedRemover tenantDeviceProfilesRemover = diff --git a/dao/src/main/java/org/thingsboard/server/dao/device/DeviceServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/device/DeviceServiceImpl.java index 66a58b02b1..d095e3d96c 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/device/DeviceServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/device/DeviceServiceImpl.java @@ -67,7 +67,6 @@ import org.thingsboard.server.dao.device.provision.ProvisionFailedException; import org.thingsboard.server.dao.device.provision.ProvisionRequest; import org.thingsboard.server.dao.device.provision.ProvisionResponseStatus; import org.thingsboard.server.dao.entity.AbstractCachedEntityService; -import org.thingsboard.server.dao.entity.TbEntityService; import org.thingsboard.server.dao.event.EventService; import org.thingsboard.server.dao.exception.DataValidationException; import org.thingsboard.server.dao.service.DataValidator; @@ -711,12 +710,7 @@ public class DeviceServiceImpl extends AbstractCachedEntityService> fetchEntity(TenantId tenantId, EntityId entityId) { - return Optional.of(findDeviceById(tenantId, new DeviceId(entityId.getId()))); + return Optional.ofNullable(findDeviceById(tenantId, new DeviceId(entityId.getId()))); } - @Override - public CustomerId getCustomerId(TenantId tenantId, EntityId entityId) { - Device device = findDeviceById(tenantId, new DeviceId(entityId.getId())); - return device != null ? device.getCustomerId() : TbEntityService.NULL_CUSTOMER_ID; - } } diff --git a/dao/src/main/java/org/thingsboard/server/dao/edge/EdgeServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/edge/EdgeServiceImpl.java index 94b6926760..68763786ef 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/edge/EdgeServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/edge/EdgeServiceImpl.java @@ -53,7 +53,6 @@ import org.thingsboard.server.common.data.relation.EntitySearchDirection; import org.thingsboard.server.common.data.rule.RuleChain; import org.thingsboard.server.common.data.rule.RuleNode; import org.thingsboard.server.dao.entity.AbstractCachedEntityService; -import org.thingsboard.server.dao.entity.TbEntityService; import org.thingsboard.server.dao.exception.DataValidationException; import org.thingsboard.server.dao.relation.RelationService; import org.thingsboard.server.dao.rule.RuleChainService; @@ -524,12 +523,7 @@ public class EdgeServiceImpl extends AbstractCachedEntityService> fetchEntity(TenantId tenantId, EntityId entityId) { - return Optional.of(findEdgeById(tenantId, new EdgeId(entityId.getId()))); + return Optional.ofNullable(findEdgeById(tenantId, new EdgeId(entityId.getId()))); } - @Override - public CustomerId getCustomerId(TenantId tenantId, EntityId entityId) { - Edge edge = findEdgeById(tenantId, new EdgeId(entityId.getId())); - return edge != null ? edge.getCustomerId() : TbEntityService.NULL_CUSTOMER_ID; - } } diff --git a/dao/src/main/java/org/thingsboard/server/dao/entity/BaseEntityService.java b/dao/src/main/java/org/thingsboard/server/dao/entity/BaseEntityService.java index b224a05b33..688d3cef7a 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/entity/BaseEntityService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/entity/BaseEntityService.java @@ -19,6 +19,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; +import org.thingsboard.server.common.data.HasCustomerId; import org.thingsboard.server.common.data.HasName; import org.thingsboard.server.common.data.id.CustomerId; import org.thingsboard.server.common.data.id.EntityId; @@ -35,6 +36,7 @@ import org.thingsboard.server.dao.exception.IncorrectParameterException; import java.util.Optional; +import static org.thingsboard.server.common.data.id.EntityId.NULL_UUID; import static org.thingsboard.server.dao.service.Validator.validateId; /** @@ -46,6 +48,7 @@ public class BaseEntityService extends AbstractEntityService implements EntitySe public static final String INCORRECT_TENANT_ID = "Incorrect tenantId "; public static final String INCORRECT_CUSTOMER_ID = "Incorrect customerId "; + public static final CustomerId NULL_CUSTOMER_ID = new CustomerId(NULL_UUID); @Autowired private EntityQueryDao entityQueryDao; @@ -80,17 +83,25 @@ public class BaseEntityService extends AbstractEntityService implements EntitySe HasId hasId = hasIdOpt.get(); if (hasId instanceof HasName) { HasName hasName = (HasName) hasId; - return Optional.of(hasName.getName()); + return Optional.ofNullable(hasName.getName()); } } return Optional.empty(); } @Override - public CustomerId fetchEntityCustomerId(TenantId tenantId, EntityId entityId) { + public Optional fetchEntityCustomerId(TenantId tenantId, EntityId entityId) { log.trace("Executing fetchEntityCustomerId [{}]", entityId); TbEntityService tbEntityService = entityServiceBeanFactory.getServiceByEntityType(entityId.getEntityType()); - return tbEntityService.getCustomerId(tenantId, entityId); + Optional> hasIdOpt = tbEntityService.fetchEntity(tenantId, entityId); + if (hasIdOpt.isPresent()) { + HasId hasId = hasIdOpt.get(); + if (hasId instanceof HasCustomerId) { + HasCustomerId hasCustomerId = (HasCustomerId) hasId; + return Optional.ofNullable(hasCustomerId.getCustomerId()); + } + } + return Optional.of(NULL_CUSTOMER_ID); } private static void validateEntityCountQuery(EntityCountQuery query) { diff --git a/dao/src/main/java/org/thingsboard/server/dao/entityview/EntityViewServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/entityview/EntityViewServiceImpl.java index 042aa62152..f828be9235 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/entityview/EntityViewServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/entityview/EntityViewServiceImpl.java @@ -43,7 +43,6 @@ import org.thingsboard.server.common.data.relation.EntityRelation; import org.thingsboard.server.common.data.relation.EntitySearchDirection; import org.thingsboard.server.common.data.relation.RelationTypeGroup; import org.thingsboard.server.dao.entity.AbstractCachedEntityService; -import org.thingsboard.server.dao.entity.TbEntityService; import org.thingsboard.server.dao.exception.DataValidationException; import org.thingsboard.server.dao.service.DataValidator; import org.thingsboard.server.dao.service.PaginatedRemover; @@ -414,12 +413,7 @@ public class EntityViewServiceImpl extends AbstractCachedEntityService> fetchEntity(TenantId tenantId, EntityId entityId) { - return Optional.of(findEntityViewById(tenantId, new EntityViewId(entityId.getId()))); + return Optional.ofNullable(findEntityViewById(tenantId, new EntityViewId(entityId.getId()))); } - @Override - public CustomerId getCustomerId(TenantId tenantId, EntityId entityId) { - EntityView entityView = findEntityViewById(tenantId, new EntityViewId(entityId.getId())); - return entityView != null ? entityView.getCustomerId() : TbEntityService.NULL_CUSTOMER_ID; - } } diff --git a/dao/src/main/java/org/thingsboard/server/dao/ota/BaseOtaPackageService.java b/dao/src/main/java/org/thingsboard/server/dao/ota/BaseOtaPackageService.java index c6f34035a7..0345ed2369 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/ota/BaseOtaPackageService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/ota/BaseOtaPackageService.java @@ -238,7 +238,7 @@ public class BaseOtaPackageService extends AbstractCachedEntityService> fetchEntity(TenantId tenantId, EntityId entityId) { - return Optional.of(findOtaPackageInfoById(tenantId, new OtaPackageId(entityId.getId()))); + return Optional.ofNullable(findOtaPackageInfoById(tenantId, new OtaPackageId(entityId.getId()))); } } diff --git a/dao/src/main/java/org/thingsboard/server/dao/queue/BaseQueueService.java b/dao/src/main/java/org/thingsboard/server/dao/queue/BaseQueueService.java index 93fa0bbac8..a05eb12218 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/queue/BaseQueueService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/queue/BaseQueueService.java @@ -124,7 +124,7 @@ public class BaseQueueService extends AbstractEntityService implements QueueServ @Override public Optional> fetchEntity(TenantId tenantId, EntityId entityId) { - return Optional.of(findQueueById(tenantId, new QueueId(entityId.getId()))); + return Optional.ofNullable(findQueueById(tenantId, new QueueId(entityId.getId()))); } private PaginatedRemover tenantQueuesRemover = diff --git a/dao/src/main/java/org/thingsboard/server/dao/resource/BaseResourceService.java b/dao/src/main/java/org/thingsboard/server/dao/resource/BaseResourceService.java index 8c38ee249e..9d72a331de 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/resource/BaseResourceService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/resource/BaseResourceService.java @@ -138,7 +138,7 @@ public class BaseResourceService implements ResourceService { @Override public Optional> fetchEntity(TenantId tenantId, EntityId entityId) { - return Optional.of(findResourceInfoById(tenantId, new TbResourceId(entityId.getId()))); + return Optional.ofNullable(findResourceInfoById(tenantId, new TbResourceId(entityId.getId()))); } @Override diff --git a/dao/src/main/java/org/thingsboard/server/dao/rpc/BaseRpcService.java b/dao/src/main/java/org/thingsboard/server/dao/rpc/BaseRpcService.java index b8857f5537..e56fd832ec 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/rpc/BaseRpcService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/rpc/BaseRpcService.java @@ -99,7 +99,7 @@ public class BaseRpcService implements RpcService { @Override public Optional> fetchEntity(TenantId tenantId, EntityId entityId) { - return Optional.of(findById(tenantId, new RpcId(entityId.getId()))); + return Optional.ofNullable(findById(tenantId, new RpcId(entityId.getId()))); } private PaginatedRemover tenantRpcRemover = diff --git a/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleChainService.java b/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleChainService.java index 7837660ee4..d6b9e123fb 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleChainService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleChainService.java @@ -762,9 +762,10 @@ public class BaseRuleChainService extends AbstractEntityService implements RuleC @Override public Optional> fetchEntity(TenantId tenantId, EntityId entityId) { - return EntityType.RULE_NODE.equals(entityId.getEntityType()) ? - Optional.of(findRuleNodeById(tenantId, new RuleNodeId(entityId.getId()))) : - Optional.of(findRuleChainById(tenantId, new RuleChainId(entityId.getId()))); + HasId hasId = EntityType.RULE_NODE.equals(entityId.getEntityType()) ? + findRuleNodeById(tenantId, new RuleNodeId(entityId.getId())) : + findRuleChainById(tenantId, new RuleChainId(entityId.getId())); + return Optional.ofNullable(hasId); } private List getRuleChainToNodeRelations(TenantId tenantId, RuleChainId ruleChainId) { diff --git a/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantProfileServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantProfileServiceImpl.java index fc28d461e2..03479e4483 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantProfileServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantProfileServiceImpl.java @@ -209,7 +209,7 @@ public class TenantProfileServiceImpl extends AbstractCachedEntityService> fetchEntity(TenantId tenantId, EntityId entityId) { - return Optional.of(findTenantProfileById(tenantId, new TenantProfileId(entityId.getId()))); + return Optional.ofNullable(findTenantProfileById(tenantId, new TenantProfileId(entityId.getId()))); } private final PaginatedRemover tenantProfilesRemover = diff --git a/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantServiceImpl.java index c849199e74..04f42ed3e2 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantServiceImpl.java @@ -262,6 +262,6 @@ public class TenantServiceImpl extends AbstractCachedEntityService> fetchEntity(TenantId tenantId, EntityId entityId) { - return Optional.of(findTenantById(new TenantId(entityId.getId()))); + return Optional.ofNullable(findTenantById(new TenantId(entityId.getId()))); } } diff --git a/dao/src/main/java/org/thingsboard/server/dao/usagerecord/ApiUsageStateServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/usagerecord/ApiUsageStateServiceImpl.java index f5c586acec..4c6a3472ee 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/usagerecord/ApiUsageStateServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/usagerecord/ApiUsageStateServiceImpl.java @@ -165,6 +165,6 @@ public class ApiUsageStateServiceImpl extends AbstractEntityService implements A @Override public Optional> fetchEntity(TenantId tenantId, EntityId entityId) { - return Optional.of(findApiUsageStateById(tenantId, new ApiUsageStateId(entityId.getId()))); + return Optional.ofNullable(findApiUsageStateById(tenantId, new ApiUsageStateId(entityId.getId()))); } } diff --git a/dao/src/main/java/org/thingsboard/server/dao/user/UserServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/user/UserServiceImpl.java index 2e231eeb23..28912d3571 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/user/UserServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/user/UserServiceImpl.java @@ -41,7 +41,6 @@ import org.thingsboard.server.common.data.page.PageLink; import org.thingsboard.server.common.data.security.UserCredentials; import org.thingsboard.server.common.data.security.event.UserCredentialsInvalidationEvent; import org.thingsboard.server.dao.entity.AbstractEntityService; -import org.thingsboard.server.dao.entity.TbEntityService; import org.thingsboard.server.dao.exception.IncorrectParameterException; import org.thingsboard.server.dao.service.DataValidator; import org.thingsboard.server.dao.service.PaginatedRemover; @@ -403,13 +402,7 @@ public class UserServiceImpl extends AbstractEntityService implements UserServic @Override public Optional> fetchEntity(TenantId tenantId, EntityId entityId) { - return Optional.of(findUserById(tenantId, new UserId(entityId.getId()))); - } - - @Override - public CustomerId getCustomerId(TenantId tenantId, EntityId entityId) { - User user = findUserById(tenantId, new UserId(entityId.getId())); - return user != null ? user.getCustomerId() : TbEntityService.NULL_CUSTOMER_ID; + return Optional.ofNullable(findUserById(tenantId, new UserId(entityId.getId()))); } } diff --git a/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetTypeServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetTypeServiceImpl.java index b1aa3c4db4..e5e9360698 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetTypeServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetTypeServiceImpl.java @@ -117,7 +117,7 @@ public class WidgetTypeServiceImpl implements WidgetTypeService { @Override public Optional> fetchEntity(TenantId tenantId, EntityId entityId) { - findWidgetTypeById(tenantId, new WidgetTypeId(entityId.getId())); - return Optional.of(findWidgetTypeById(tenantId, new WidgetTypeId(entityId.getId()))); + return Optional.ofNullable(findWidgetTypeById(tenantId, new WidgetTypeId(entityId.getId()))); } + } diff --git a/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleServiceImpl.java index d745cf22d2..474ac247ba 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleServiceImpl.java @@ -156,7 +156,7 @@ public class WidgetsBundleServiceImpl implements WidgetsBundleService { @Override public Optional> fetchEntity(TenantId tenantId, EntityId entityId) { - return Optional.of(findWidgetsBundleById(tenantId, new WidgetsBundleId(entityId.getId()))); + return Optional.ofNullable(findWidgetsBundleById(tenantId, new WidgetsBundleId(entityId.getId()))); } private PaginatedRemover tenantWidgetsBundleRemover = From 7d9f43792750317ddb489620edba23c46fd4b03a Mon Sep 17 00:00:00 2001 From: ShvaykaD Date: Wed, 14 Dec 2022 12:37:19 +0200 Subject: [PATCH 5/5] rollback optional changes for fetchEntityCustomerId method --- .../service/install/update/DefaultDataUpdateService.java | 2 +- .../org/thingsboard/server/dao/entity/EntityService.java | 2 +- .../org/thingsboard/server/dao/alarm/BaseAlarmService.java | 2 +- .../thingsboard/server/dao/entity/BaseEntityService.java | 6 +++--- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/application/src/main/java/org/thingsboard/server/service/install/update/DefaultDataUpdateService.java b/application/src/main/java/org/thingsboard/server/service/install/update/DefaultDataUpdateService.java index 9532bc3044..ee34bd7f23 100644 --- a/application/src/main/java/org/thingsboard/server/service/install/update/DefaultDataUpdateService.java +++ b/application/src/main/java/org/thingsboard/server/service/install/update/DefaultDataUpdateService.java @@ -561,7 +561,7 @@ public class DefaultDataUpdateService implements DataUpdateService { while (hasNext) { for (Alarm alarm : alarms.getData()) { if (alarm.getCustomerId() == null && alarm.getOriginator() != null) { - alarm.setCustomerId(entityService.fetchEntityCustomerId(tenantId, alarm.getOriginator()).get()); + alarm.setCustomerId(entityService.fetchEntityCustomerId(tenantId, alarm.getOriginator())); alarmDao.save(tenantId, alarm); } if (processed.incrementAndGet() % 1000 == 0) { diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/entity/EntityService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/entity/EntityService.java index aa5c70867f..9362dbef7a 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/entity/EntityService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/entity/EntityService.java @@ -29,7 +29,7 @@ public interface EntityService { Optional fetchEntityName(TenantId tenantId, EntityId entityId); - Optional fetchEntityCustomerId(TenantId tenantId, EntityId entityId); + CustomerId fetchEntityCustomerId(TenantId tenantId, EntityId entityId); long countEntitiesByQuery(TenantId tenantId, CustomerId customerId, EntityCountQuery query); diff --git a/dao/src/main/java/org/thingsboard/server/dao/alarm/BaseAlarmService.java b/dao/src/main/java/org/thingsboard/server/dao/alarm/BaseAlarmService.java index f73ee2b9e1..abc2712bbc 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/alarm/BaseAlarmService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/alarm/BaseAlarmService.java @@ -114,7 +114,7 @@ public class BaseAlarmService extends AbstractEntityService implements AlarmServ if (alarm.getEndTs() == 0L) { alarm.setEndTs(alarm.getStartTs()); } - alarm.setCustomerId(entityService.fetchEntityCustomerId(alarm.getTenantId(), alarm.getOriginator()).get()); + alarm.setCustomerId(entityService.fetchEntityCustomerId(alarm.getTenantId(), alarm.getOriginator())); if (alarm.getId() == null) { Alarm existing = alarmDao.findLatestByOriginatorAndType(alarm.getTenantId(), alarm.getOriginator(), alarm.getType()); if (existing == null || existing.getStatus().isCleared()) { diff --git a/dao/src/main/java/org/thingsboard/server/dao/entity/BaseEntityService.java b/dao/src/main/java/org/thingsboard/server/dao/entity/BaseEntityService.java index 688d3cef7a..6d76785792 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/entity/BaseEntityService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/entity/BaseEntityService.java @@ -90,7 +90,7 @@ public class BaseEntityService extends AbstractEntityService implements EntitySe } @Override - public Optional fetchEntityCustomerId(TenantId tenantId, EntityId entityId) { + public CustomerId fetchEntityCustomerId(TenantId tenantId, EntityId entityId) { log.trace("Executing fetchEntityCustomerId [{}]", entityId); TbEntityService tbEntityService = entityServiceBeanFactory.getServiceByEntityType(entityId.getEntityType()); Optional> hasIdOpt = tbEntityService.fetchEntity(tenantId, entityId); @@ -98,10 +98,10 @@ public class BaseEntityService extends AbstractEntityService implements EntitySe HasId hasId = hasIdOpt.get(); if (hasId instanceof HasCustomerId) { HasCustomerId hasCustomerId = (HasCustomerId) hasId; - return Optional.ofNullable(hasCustomerId.getCustomerId()); + return hasCustomerId.getCustomerId(); } } - return Optional.of(NULL_CUSTOMER_ID); + return NULL_CUSTOMER_ID; } private static void validateEntityCountQuery(EntityCountQuery query) {