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/pom.xml b/common/dao-api/pom.xml index f56582a786..cba811343a 100644 --- a/common/dao-api/pom.xml +++ b/common/dao-api/pom.xml @@ -115,10 +115,6 @@ 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 4bd1eb79fc..70f8f00ebb 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.TbEntityService; +import org.thingsboard.server.dao.entity.EntityDaoService; import java.util.Collection; /** * Created by ashvayka on 11.05.17. */ -public interface AlarmService extends TbEntityService { +public interface AlarmService extends EntityDaoService { 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 c8200812dc..1d702c7ec0 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.TbEntityService; +import org.thingsboard.server.dao.entity.EntityDaoService; -public interface AssetProfileService extends TbEntityService { +public interface AssetProfileService extends EntityDaoService { 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 fc8f8ca88e..721386b2c7 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.TbEntityService; +import org.thingsboard.server.dao.entity.EntityDaoService; import java.util.List; -public interface AssetService extends TbEntityService { +public interface AssetService extends EntityDaoService { 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 c810971ee5..01b3bf4b5e 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,10 @@ 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.TbEntityService; import java.util.List; -public interface AuditLogService extends TbEntityService { +public interface AuditLogService { 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 d8a904d7c1..12fcc04768 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.TbEntityService; +import org.thingsboard.server.dao.entity.EntityDaoService; import java.util.Optional; -public interface CustomerService extends TbEntityService { +public interface CustomerService extends EntityDaoService { 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 9f7f3ae3e0..e718e53367 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.TbEntityService; +import org.thingsboard.server.dao.entity.EntityDaoService; import java.util.List; -public interface DashboardService extends TbEntityService { +public interface DashboardService extends EntityDaoService { 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 ec5673ce15..2e65e159cd 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.TbEntityService; +import org.thingsboard.server.dao.entity.EntityDaoService; -public interface DeviceProfileService extends TbEntityService { +public interface DeviceProfileService extends EntityDaoService { 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 9ce266e12a..4c4bcd4d40 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.TbEntityService; +import org.thingsboard.server.dao.entity.EntityDaoService; import java.util.List; import java.util.UUID; -public interface DeviceService extends TbEntityService { +public interface DeviceService extends EntityDaoService { 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 b9fb6d8fcf..b7f5ecfc45 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.TbEntityService; +import org.thingsboard.server.dao.entity.EntityDaoService; import java.util.List; import java.util.Optional; -public interface EdgeService extends TbEntityService { +public interface EdgeService extends EntityDaoService { Edge findEdgeById(TenantId tenantId, EdgeId edgeId); 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/EntityDaoService.java similarity index 81% rename from common/dao-api/src/main/java/org/thingsboard/server/dao/entity/TbEntityService.java rename to common/dao-api/src/main/java/org/thingsboard/server/dao/entity/EntityDaoService.java index 0ce6a75b80..f8a7c4a5b9 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/EntityDaoService.java @@ -15,14 +15,17 @@ */ package org.thingsboard.server.dao.entity; +import org.thingsboard.server.common.data.EntityType; 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; -public interface TbEntityService { +public interface EntityDaoService { - Optional> fetchEntity(TenantId tenantId, EntityId entityId); + Optional> findEntity(TenantId tenantId, EntityId entityId); + + EntityType getEntityType(); } 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/EntityServiceBeanFactory.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/entity/EntityServiceBeanFactory.java deleted file mode 100644 index ff91d16d72..0000000000 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/entity/EntityServiceBeanFactory.java +++ /dev/null @@ -1,43 +0,0 @@ -/** - * 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 TbEntityService getServiceByEntityType(EntityType entityType) { - String beanName = EntityType.RULE_NODE.equals(entityType) ? getBeanName(EntityType.RULE_CHAIN) : getBeanName(entityType); - return beanFactory.getBean(beanName, TbEntityService.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/EntityServiceRegistry.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/entity/EntityServiceRegistry.java new file mode 100644 index 0000000000..3bbaa8f06e --- /dev/null +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/entity/EntityServiceRegistry.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.entity; + +import org.thingsboard.server.common.data.EntityType; + +public interface EntityServiceRegistry { + + EntityDaoService getServiceByEntityType(EntityType entityType); + +} 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 7d0cb1211d..f3efd99528 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.TbEntityService; +import org.thingsboard.server.dao.entity.EntityDaoService; import java.util.List; /** * Created by Victor Basanets on 8/27/2017. */ -public interface EntityViewService extends TbEntityService { +public interface EntityViewService extends EntityDaoService { 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 00e6bea2de..3b0de80811 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,10 @@ 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.TbEntityService; import java.util.List; -public interface EventService extends TbEntityService { +public interface EventService { 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 fe44038ccb..09d37fd81a 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.TbEntityService; +import org.thingsboard.server.dao.entity.EntityDaoService; import java.nio.ByteBuffer; -public interface OtaPackageService extends TbEntityService { +public interface OtaPackageService extends EntityDaoService { 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 02b465602e..f9bb3e834d 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.TbEntityService; +import org.thingsboard.server.dao.entity.EntityDaoService; import java.util.List; -public interface QueueService extends TbEntityService { +public interface QueueService extends EntityDaoService { 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 1f6cba7062..04b4044ca0 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,12 @@ 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.TbEntityService; +import org.thingsboard.server.dao.entity.EntityDaoService; import java.util.List; -public interface ResourceService extends TbEntityService { +public interface ResourceService extends EntityDaoService { + 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 431fdb5bda..319247e84e 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,10 @@ 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.TbEntityService; +import org.thingsboard.server.dao.entity.EntityDaoService; + +public interface RpcService extends EntityDaoService { -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 8baf3783e7..20d4667a3c 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.TbEntityService; +import org.thingsboard.server.dao.entity.EntityDaoService; 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 TbEntityService { +public interface RuleChainService extends EntityDaoService { 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 91b1d70a61..1728837569 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.TbEntityService; +import org.thingsboard.server.dao.entity.EntityDaoService; -public interface TenantProfileService extends TbEntityService { +public interface TenantProfileService extends EntityDaoService { 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 8186623ed2..af7c4c5892 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.TbEntityService; +import org.thingsboard.server.dao.entity.EntityDaoService; import java.util.List; -public interface TenantService extends TbEntityService { +public interface TenantService extends EntityDaoService { 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 93fd1d1f00..50208c859d 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.TbEntityService; +import org.thingsboard.server.dao.entity.EntityDaoService; -public interface ApiUsageStateService extends TbEntityService { +public interface ApiUsageStateService extends EntityDaoService { 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 53e89d7a51..d52f11e548 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.TbEntityService; +import org.thingsboard.server.dao.entity.EntityDaoService; -public interface UserService extends TbEntityService { +public interface UserService extends EntityDaoService { 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 d2a4e8ee2a..52beb62a25 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.TbEntityService; +import org.thingsboard.server.dao.entity.EntityDaoService; import java.util.List; -public interface WidgetTypeService extends TbEntityService { +public interface WidgetTypeService extends EntityDaoService { 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 d0ef55a91e..c037cfb612 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.TbEntityService; +import org.thingsboard.server.dao.entity.EntityDaoService; import java.util.List; -public interface WidgetsBundleService extends TbEntityService { +public interface WidgetsBundleService extends EntityDaoService { WidgetsBundle findWidgetsBundleById(TenantId tenantId, WidgetsBundleId widgetsBundleId); diff --git a/dao/pom.xml b/dao/pom.xml index aed4a98c9a..5335492759 100644 --- a/dao/pom.xml +++ b/dao/pom.xml @@ -108,10 +108,6 @@ 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 aed28fc2aa..c76be82956 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.EntityType; import org.thingsboard.server.common.data.alarm.Alarm; import org.thingsboard.server.common.data.alarm.AlarmInfo; import org.thingsboard.server.common.data.alarm.AlarmQuery; @@ -115,7 +116,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()) { @@ -286,8 +287,8 @@ public class BaseAlarmService extends AbstractEntityService implements AlarmServ return Futures.transform(alarmDao.findAlarmByIdAsync(tenantId, alarmId.getId()), a -> { AlarmInfo alarmInfo = new AlarmInfo(a); - Optional originatorNameOpt = entityService.fetchEntityName(tenantId, alarmInfo.getOriginator()); - alarmInfo.setOriginatorName(originatorNameOpt.isEmpty() ? "N/A" : originatorNameOpt.get()); + alarmInfo.setOriginatorName( + entityService.fetchEntityName(tenantId, alarmInfo.getOriginator()).orElse("N/A")); return alarmInfo; }, MoreExecutors.directExecutor()); } @@ -313,8 +314,8 @@ 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()) { - Optional originatorNameOpt = entityService.fetchEntityName(tenantId, alarmInfo.getOriginator()); - alarmInfo.setOriginatorName(originatorNameOpt.isEmpty() ? "Deleted" : originatorNameOpt.get()); + alarmInfo.setOriginatorName( + entityService.fetchEntityName(tenantId, alarmInfo.getOriginator()).orElse("Deleted")); alarmFutures.add(Futures.immediateFuture(alarmInfo)); } return Futures.transform(Futures.successfulAsList(alarmFutures), @@ -407,8 +408,13 @@ public class BaseAlarmService extends AbstractEntityService implements AlarmServ } @Override - public Optional> fetchEntity(TenantId tenantId, EntityId entityId) { + public Optional> findEntity(TenantId tenantId, EntityId entityId) { return Optional.ofNullable(findAlarmById(tenantId, new AlarmId(entityId.getId()))); } + @Override + public EntityType getEntityType() { + return EntityType.ALARM; + } + } 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 75de5ba5d0..98e7bbc488 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 @@ -21,6 +21,7 @@ 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.EntityType; import org.thingsboard.server.common.data.StringUtils; import org.thingsboard.server.common.data.asset.Asset; import org.thingsboard.server.common.data.asset.AssetProfile; @@ -268,10 +269,15 @@ public class AssetProfileServiceImpl extends AbstractCachedEntityService> fetchEntity(TenantId tenantId, EntityId entityId) { + public Optional> findEntity(TenantId tenantId, EntityId entityId) { return Optional.ofNullable(findAssetProfileById(tenantId, new AssetProfileId(entityId.getId()))); } + @Override + public EntityType getEntityType() { + return EntityType.ASSET_PROFILE; + } + 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 e65a886833..e8db9e5601 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 @@ -433,8 +433,13 @@ public class BaseAssetService extends AbstractCachedEntityService> fetchEntity(TenantId tenantId, EntityId entityId) { + public Optional> findEntity(TenantId tenantId, EntityId entityId) { return Optional.ofNullable(findAssetById(tenantId, new AssetId(entityId.getId()))); } + @Override + public EntityType getEntityType() { + return EntityType.ASSET; + } + } 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 2ee07fd30c..8e7a1cdd17 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,7 +36,6 @@ 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; @@ -54,7 +53,6 @@ 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; @@ -62,7 +60,7 @@ import static org.thingsboard.server.dao.service.Validator.validateEntityId; import static org.thingsboard.server.dao.service.Validator.validateId; @Slf4j -@Service("AuditLogDaoService") +@Service @ConditionalOnProperty(prefix = "audit-log", value = "enabled", havingValue = "true") public class AuditLogServiceImpl implements AuditLogService { @@ -128,8 +126,7 @@ public class AuditLogServiceImpl implements AuditLogService { entityName = entity.getName(); } else { try { - Optional entityNameOpt = entityService.fetchEntityName(tenantId, entityId); - entityName = entityNameOpt.orElse(entityName); + entityName = entityService.fetchEntityName(tenantId, entityId).orElse(entityName); } catch (Exception ignored) { } } @@ -406,9 +403,4 @@ 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 40b3b77c2e..0b1efaf82e 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,16 +23,14 @@ 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("AuditLogDaoService") +@Service @ConditionalOnProperty(prefix = "audit-log", value = "enabled", havingValue = "false") public class DummyAuditLogServiceImpl implements AuditLogService { @@ -61,9 +59,4 @@ public class DummyAuditLogServiceImpl implements AuditLogService { 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 aad5de33f7..a1ca76cb85 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,6 +24,7 @@ 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.EntityType; import org.thingsboard.server.common.data.id.CustomerId; import org.thingsboard.server.common.data.id.EntityId; import org.thingsboard.server.common.data.id.HasId; @@ -182,8 +183,13 @@ public class CustomerServiceImpl extends AbstractEntityService implements Custom }; @Override - public Optional> fetchEntity(TenantId tenantId, EntityId entityId) { + public Optional> findEntity(TenantId tenantId, EntityId entityId) { return Optional.ofNullable(findCustomerById(tenantId, new CustomerId(entityId.getId()))); } + @Override + public EntityType getEntityType() { + return EntityType.CUSTOMER; + } + } 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 d40c559856..1f72b7c677 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,6 +24,7 @@ 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.EntityType; import org.thingsboard.server.common.data.edge.Edge; import org.thingsboard.server.common.data.id.CustomerId; import org.thingsboard.server.common.data.id.DashboardId; @@ -311,10 +312,15 @@ public class DashboardServiceImpl extends AbstractEntityService implements Dashb }; @Override - public Optional> fetchEntity(TenantId tenantId, EntityId entityId) { + public Optional> findEntity(TenantId tenantId, EntityId entityId) { return Optional.ofNullable(findDashboardById(tenantId, new DashboardId(entityId.getId()))); } + @Override + public EntityType getEntityType() { + return EntityType.DASHBOARD; + } + 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 e459d3f48d..9dad6a22d9 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 @@ -28,6 +28,7 @@ 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.EntityType; 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; @@ -290,10 +291,15 @@ public class DeviceProfileServiceImpl extends AbstractCachedEntityService> fetchEntity(TenantId tenantId, EntityId entityId) { + public Optional> findEntity(TenantId tenantId, EntityId entityId) { return Optional.ofNullable(findDeviceProfileById(tenantId, new DeviceProfileId(entityId.getId()))); } + @Override + public EntityType getEntityType() { + return EntityType.DEVICE_PROFILE; + } + 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 d095e3d96c..e5ae9de626 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 @@ -709,8 +709,13 @@ public class DeviceServiceImpl extends AbstractCachedEntityService> fetchEntity(TenantId tenantId, EntityId entityId) { + public Optional> findEntity(TenantId tenantId, EntityId entityId) { return Optional.ofNullable(findDeviceById(tenantId, new DeviceId(entityId.getId()))); } + @Override + public EntityType getEntityType() { + return EntityType.DEVICE; + } + } 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 68763786ef..2f77856628 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 @@ -522,8 +522,13 @@ public class EdgeServiceImpl extends AbstractCachedEntityService> fetchEntity(TenantId tenantId, EntityId entityId) { + public Optional> findEntity(TenantId tenantId, EntityId entityId) { return Optional.ofNullable(findEdgeById(tenantId, new EdgeId(entityId.getId()))); } + @Override + public EntityType getEntityType() { + return EntityType.EDGE; + } + } 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 07e9f9f1a8..0a9b3c631a 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 @@ -54,7 +54,7 @@ public class BaseEntityService extends AbstractEntityService implements EntitySe private EntityQueryDao entityQueryDao; @Autowired - EntityServiceBeanFactory entityServiceBeanFactory; + EntityServiceRegistry entityServiceRegistry; @Override public long countEntitiesByQuery(TenantId tenantId, CustomerId customerId, EntityCountQuery query) { @@ -77,8 +77,8 @@ public class BaseEntityService extends AbstractEntityService implements EntitySe @Override public Optional fetchEntityName(TenantId tenantId, EntityId entityId) { log.trace("Executing fetchEntityName [{}]", entityId); - TbEntityService tbEntityService = entityServiceBeanFactory.getServiceByEntityType(entityId.getEntityType()); - Optional> hasIdOpt = tbEntityService.fetchEntity(tenantId, entityId); + EntityDaoService entityDaoService = entityServiceRegistry.getServiceByEntityType(entityId.getEntityType()); + Optional> hasIdOpt = entityDaoService.findEntity(tenantId, entityId); if (hasIdOpt.isPresent()) { HasId hasId = hasIdOpt.get(); if (hasId instanceof HasName) { @@ -90,18 +90,22 @@ public class BaseEntityService extends AbstractEntityService implements EntitySe } @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()); - Optional> hasIdOpt = tbEntityService.fetchEntity(tenantId, entityId); + EntityDaoService entityDaoService = entityServiceRegistry.getServiceByEntityType(entityId.getEntityType()); + Optional> hasIdOpt = entityDaoService.findEntity(tenantId, entityId); if (hasIdOpt.isPresent()) { HasId hasId = hasIdOpt.get(); if (hasId instanceof HasCustomerId) { HasCustomerId hasCustomerId = (HasCustomerId) hasId; - return hasCustomerId.getCustomerId(); + CustomerId customerId = hasCustomerId.getCustomerId(); + if (customerId == null) { + customerId = NULL_CUSTOMER_ID; + } + return Optional.of(customerId); } } - return NULL_CUSTOMER_ID; + return Optional.of(NULL_CUSTOMER_ID); } private static void validateEntityCountQuery(EntityCountQuery query) { diff --git a/dao/src/main/java/org/thingsboard/server/dao/entity/DefaultEntityServiceRegistry.java b/dao/src/main/java/org/thingsboard/server/dao/entity/DefaultEntityServiceRegistry.java new file mode 100644 index 0000000000..d93381f66c --- /dev/null +++ b/dao/src/main/java/org/thingsboard/server/dao/entity/DefaultEntityServiceRegistry.java @@ -0,0 +1,53 @@ +/** + * 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.springframework.context.ApplicationContext; +import org.springframework.stereotype.Service; +import org.thingsboard.server.common.data.EntityType; + +import javax.annotation.PostConstruct; +import java.util.HashMap; +import java.util.Map; + +@Service +public class DefaultEntityServiceRegistry implements EntityServiceRegistry { + + private final ApplicationContext applicationContext; + private final Map entityDaoServicesMap; + + public DefaultEntityServiceRegistry(ApplicationContext applicationContext) { + this.applicationContext = applicationContext; + this.entityDaoServicesMap = new HashMap<>(); + } + + @PostConstruct + public void init() { + applicationContext.getBeansOfType(EntityDaoService.class).values().forEach(entityDaoService -> { + EntityType entityType = entityDaoService.getEntityType(); + entityDaoServicesMap.put(entityType, entityDaoService); + if (EntityType.RULE_CHAIN.equals(entityType)) { + entityDaoServicesMap.put(EntityType.RULE_NODE, entityDaoService); + } + }); + } + + @Override + public EntityDaoService getServiceByEntityType(EntityType entityType) { + return entityDaoServicesMap.get(entityType); + } + +} 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 f828be9235..a510c9d50d 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 @@ -412,8 +412,13 @@ public class EntityViewServiceImpl extends AbstractCachedEntityService> fetchEntity(TenantId tenantId, EntityId entityId) { + public Optional> findEntity(TenantId tenantId, EntityId entityId) { return Optional.ofNullable(findEntityViewById(tenantId, new EntityViewId(entityId.getId()))); } + @Override + public EntityType getEntityType() { + return EntityType.ENTITY_VIEW; + } + } 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 de4683f6b4..55a98a9549 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,19 +31,17 @@ 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; -@Service("EventDaoService") +@Service @Slf4j public class BaseEventService implements EventService { @@ -151,9 +149,4 @@ public class BaseEventService implements EventService { 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 0345ed2369..5a4625cd5b 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,6 +24,7 @@ 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.EntityType; import org.thingsboard.server.common.data.OtaPackage; import org.thingsboard.server.common.data.OtaPackageInfo; import org.thingsboard.server.common.data.StringUtils; @@ -237,8 +238,13 @@ public class BaseOtaPackageService extends AbstractCachedEntityService> fetchEntity(TenantId tenantId, EntityId entityId) { + public Optional> findEntity(TenantId tenantId, EntityId entityId) { return Optional.ofNullable(findOtaPackageInfoById(tenantId, new OtaPackageId(entityId.getId()))); } + @Override + public EntityType getEntityType() { + return EntityType.OTA_PACKAGE; + } + } 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 a05eb12218..b48f26ac25 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 @@ -21,6 +21,7 @@ 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.EntityType; import org.thingsboard.server.common.data.TenantProfile; import org.thingsboard.server.common.data.id.EntityId; import org.thingsboard.server.common.data.id.HasId; @@ -123,10 +124,15 @@ public class BaseQueueService extends AbstractEntityService implements QueueServ } @Override - public Optional> fetchEntity(TenantId tenantId, EntityId entityId) { + public Optional> findEntity(TenantId tenantId, EntityId entityId) { return Optional.ofNullable(findQueueById(tenantId, new QueueId(entityId.getId()))); } + @Override + public EntityType getEntityType() { + return EntityType.QUEUE; + } + 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 320e7661fc..5cd57b557e 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 @@ -375,9 +375,9 @@ public class BaseRelationService implements RelationService { private ListenableFuture fetchRelationInfoAsync(TenantId tenantId, EntityRelation relation, Function entityIdGetter, BiConsumer entityNameSetter) { - Optional entityNameOpt = entityService.fetchEntityName(tenantId, entityIdGetter.apply(relation)); EntityRelationInfo relationInfo = new EntityRelationInfo(relation); - entityNameSetter.accept(relationInfo, entityNameOpt.orElse("N/A")); + entityNameSetter.accept(relationInfo, + entityService.fetchEntityName(tenantId, entityIdGetter.apply(relation)).orElse("N/A")); return Futures.immediateFuture(relationInfo); } 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 9d72a331de..5988970ad5 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,6 +20,7 @@ import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.hibernate.exception.ConstraintViolationException; import org.springframework.stereotype.Service; +import org.thingsboard.server.common.data.EntityType; import org.thingsboard.server.common.data.ResourceType; import org.thingsboard.server.common.data.TbResource; import org.thingsboard.server.common.data.TbResourceInfo; @@ -137,10 +138,15 @@ public class BaseResourceService implements ResourceService { } @Override - public Optional> fetchEntity(TenantId tenantId, EntityId entityId) { + public Optional> findEntity(TenantId tenantId, EntityId entityId) { return Optional.ofNullable(findResourceInfoById(tenantId, new TbResourceId(entityId.getId()))); } + @Override + public EntityType getEntityType() { + return EntityType.TB_RESOURCE; + } + @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 e56fd832ec..27c4b37145 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 @@ -19,6 +19,7 @@ import com.google.common.util.concurrent.ListenableFuture; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import org.thingsboard.server.common.data.EntityType; import org.thingsboard.server.common.data.id.DeviceId; import org.thingsboard.server.common.data.id.EntityId; import org.thingsboard.server.common.data.id.HasId; @@ -98,10 +99,15 @@ public class BaseRpcService implements RpcService { } @Override - public Optional> fetchEntity(TenantId tenantId, EntityId entityId) { + public Optional> findEntity(TenantId tenantId, EntityId entityId) { return Optional.ofNullable(findById(tenantId, new RpcId(entityId.getId()))); } + @Override + public EntityType getEntityType() { + return EntityType.RPC; + } + 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 d6b9e123fb..e5fa0c28da 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 @@ -761,13 +761,18 @@ public class BaseRuleChainService extends AbstractEntityService implements RuleC @Override - public Optional> fetchEntity(TenantId tenantId, EntityId entityId) { + public Optional> findEntity(TenantId tenantId, EntityId entityId) { HasId hasId = EntityType.RULE_NODE.equals(entityId.getEntityType()) ? findRuleNodeById(tenantId, new RuleNodeId(entityId.getId())) : findRuleChainById(tenantId, new RuleChainId(entityId.getId())); return Optional.ofNullable(hasId); } + @Override + public EntityType getEntityType() { + return EntityType.RULE_CHAIN; + } + 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 03479e4483..078bf77626 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 @@ -21,6 +21,7 @@ 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.EntityType; import org.thingsboard.server.common.data.TenantProfile; import org.thingsboard.server.common.data.id.EntityId; import org.thingsboard.server.common.data.id.HasId; @@ -208,10 +209,15 @@ public class TenantProfileServiceImpl extends AbstractCachedEntityService> fetchEntity(TenantId tenantId, EntityId entityId) { + public Optional> findEntity(TenantId tenantId, EntityId entityId) { return Optional.ofNullable(findTenantProfileById(tenantId, new TenantProfileId(entityId.getId()))); } + @Override + public EntityType getEntityType() { + return EntityType.TENANT_PROFILE; + } + 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 04f42ed3e2..106ac695d8 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,6 +23,7 @@ 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.EntityType; import org.thingsboard.server.common.data.Tenant; import org.thingsboard.server.common.data.TenantInfo; import org.thingsboard.server.common.data.TenantProfile; @@ -261,7 +262,13 @@ public class TenantServiceImpl extends AbstractCachedEntityService> fetchEntity(TenantId tenantId, EntityId entityId) { + public Optional> findEntity(TenantId tenantId, EntityId entityId) { return Optional.ofNullable(findTenantById(new TenantId(entityId.getId()))); } + + @Override + public EntityType getEntityType() { + return EntityType.TENANT; + } + } 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 4c6a3472ee..b8c55d876b 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 @@ -164,7 +164,13 @@ public class ApiUsageStateServiceImpl extends AbstractEntityService implements A } @Override - public Optional> fetchEntity(TenantId tenantId, EntityId entityId) { + public Optional> findEntity(TenantId tenantId, EntityId entityId) { return Optional.ofNullable(findApiUsageStateById(tenantId, new ApiUsageStateId(entityId.getId()))); } + + @Override + public EntityType getEntityType() { + return EntityType.API_USAGE_STATE; + } + } 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 28912d3571..912a10b44c 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,6 +28,7 @@ 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.EntityType; import org.thingsboard.server.common.data.StringUtils; import org.thingsboard.server.common.data.User; import org.thingsboard.server.common.data.id.CustomerId; @@ -401,8 +402,13 @@ public class UserServiceImpl extends AbstractEntityService implements UserServic }; @Override - public Optional> fetchEntity(TenantId tenantId, EntityId entityId) { + public Optional> findEntity(TenantId tenantId, EntityId entityId) { return Optional.ofNullable(findUserById(tenantId, new UserId(entityId.getId()))); } + @Override + public EntityType getEntityType() { + return EntityType.USER; + } + } 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 26ae0de259..b6b6c5efa7 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 @@ -327,12 +327,12 @@ public abstract class AbstractBufferedRateExecutor { + String defaultName = "N/A"; try { - Optional entityNameOpt = entityService.fetchEntityName(TenantId.SYS_TENANT_ID, tenantId); - return entityNameOpt.orElse("N/A"); + return entityService.fetchEntityName(TenantId.SYS_TENANT_ID, tenantId).orElse(defaultName); } catch (Exception e) { log.error("[{}] Failed to get tenant name", tenantId, e); - return "N/A"; + return defaultName; } }); log.info("[{}][{}] Rate limited requests: {}", tenantId, name, rateLimitedRequests); 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 e5e9360698..a26fc49c78 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,7 @@ 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.EntityType; import org.thingsboard.server.common.data.id.EntityId; import org.thingsboard.server.common.data.id.HasId; import org.thingsboard.server.common.data.id.TenantId; @@ -116,8 +117,13 @@ public class WidgetTypeServiceImpl implements WidgetTypeService { } @Override - public Optional> fetchEntity(TenantId tenantId, EntityId entityId) { + public Optional> findEntity(TenantId tenantId, EntityId entityId) { return Optional.ofNullable(findWidgetTypeById(tenantId, new WidgetTypeId(entityId.getId()))); } + @Override + public EntityType getEntityType() { + return EntityType.WIDGET_TYPE; + } + } 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 474ac247ba..e32366e3a3 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 @@ -18,6 +18,7 @@ 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.EntityType; import org.thingsboard.server.common.data.id.EntityId; import org.thingsboard.server.common.data.id.HasId; import org.thingsboard.server.common.data.id.TenantId; @@ -155,10 +156,15 @@ public class WidgetsBundleServiceImpl implements WidgetsBundleService { } @Override - public Optional> fetchEntity(TenantId tenantId, EntityId entityId) { + public Optional> findEntity(TenantId tenantId, EntityId entityId) { return Optional.ofNullable(findWidgetsBundleById(tenantId, new WidgetsBundleId(entityId.getId()))); } + @Override + public EntityType getEntityType() { + return EntityType.WIDGETS_BUNDLE; + } + 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/BaseEntityServiceRegistryTest.java similarity index 60% rename from dao/src/test/java/org/thingsboard/server/dao/service/BaseEntityServiceBeanFactoryTest.java rename to dao/src/test/java/org/thingsboard/server/dao/service/BaseEntityServiceRegistryTest.java index d9b907d825..81c6159d4a 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/BaseEntityServiceBeanFactoryTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/BaseEntityServiceRegistryTest.java @@ -16,31 +16,31 @@ 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; +import org.thingsboard.server.dao.entity.EntityDaoService; +import org.thingsboard.server.dao.entity.EntityServiceRegistry; +import org.thingsboard.server.dao.rule.RuleChainService; @Slf4j -public abstract class BaseEntityServiceBeanFactoryTest extends AbstractServiceTest { +public abstract class BaseEntityServiceRegistryTest extends AbstractServiceTest { @Autowired - private EntityServiceBeanFactory entityServiceBeanFactory; + private EntityServiceRegistry entityServiceRegistry; @Test - public void givenAllEntityTypes_whenGetServiceByEntityTypeCalled_thenNoExceptionsThrows() { + public void givenAllEntityTypes_whenGetServiceByEntityTypeCalled_thenAllBeansExists() { for (EntityType entityType : EntityType.values()) { - Assertions.assertThatCode(() -> entityServiceBeanFactory.getServiceByEntityType(entityType)) - .doesNotThrowAnyException(); + EntityDaoService entityDaoService = entityServiceRegistry.getServiceByEntityType(entityType); + Assert.assertNotNull("entityDaoService bean is missed for type: " + entityType.name(), entityDaoService); } } @Test - public void givenRuleNodeEntityType_whenGetServiceByEntityTypeCalled_thenReturnedRuleChainDaoService() { - Assert.assertTrue(entityServiceBeanFactory.getServiceByEntityType(EntityType.RULE_NODE) instanceof BaseRuleChainService); + public void givenRuleNodeEntityType_whenGetServiceByEntityTypeCalled_thenReturnedRuleChainService() { + Assert.assertTrue(entityServiceRegistry.getServiceByEntityType(EntityType.RULE_NODE) instanceof RuleChainService); } } 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/EntityServiceRegistrySqlTest.java similarity index 81% rename from dao/src/test/java/org/thingsboard/server/dao/service/sql/EntityServiceBeanFactorySqlTest.java rename to dao/src/test/java/org/thingsboard/server/dao/service/sql/EntityServiceRegistrySqlTest.java index 48fd73db75..40d6d2ae77 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/sql/EntityServiceBeanFactorySqlTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/sql/EntityServiceRegistrySqlTest.java @@ -15,10 +15,10 @@ */ package org.thingsboard.server.dao.service.sql; -import org.thingsboard.server.dao.service.BaseEntityServiceBeanFactoryTest; +import org.thingsboard.server.dao.service.BaseEntityServiceRegistryTest; import org.thingsboard.server.dao.service.DaoSqlTest; @DaoSqlTest -public class EntityServiceBeanFactorySqlTest extends BaseEntityServiceBeanFactoryTest { +public class EntityServiceRegistrySqlTest extends BaseEntityServiceRegistryTest { } diff --git a/pom.xml b/pom.xml index 036a7dc4b8..1a907304dc 100755 --- a/pom.xml +++ b/pom.xml @@ -61,7 +61,6 @@ 2.11.0 1.2 1.4 - 1.9 4.5.13 4.4.14 2.8.1 @@ -1365,11 +1364,6 @@ commons-csv ${commons-csv.version} - - org.apache.commons - commons-text - ${commons-text.version} - org.apache.httpcomponents httpclient