diff --git a/application/src/main/java/org/thingsboard/server/install/ThingsboardInstallService.java b/application/src/main/java/org/thingsboard/server/install/ThingsboardInstallService.java index c2bbafe015..c0f4bd5cf4 100644 --- a/application/src/main/java/org/thingsboard/server/install/ThingsboardInstallService.java +++ b/application/src/main/java/org/thingsboard/server/install/ThingsboardInstallService.java @@ -240,7 +240,6 @@ public class ThingsboardInstallService { case "3.4.4": log.info("Upgrading ThingsBoard from version 3.4.4 to 3.5.0 ..."); databaseEntitiesUpgradeService.upgradeDatabase("3.4.4"); - dataUpdateService.updateData("3.4.4"); log.info("Updating system data..."); systemDataLoaderService.updateSystemWidgets(); break; 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 849982c53b..f5f36c31ac 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 @@ -30,7 +30,6 @@ import org.thingsboard.rule.engine.flow.TbRuleChainInputNode; import org.thingsboard.rule.engine.flow.TbRuleChainInputNodeConfiguration; import org.thingsboard.rule.engine.profile.TbDeviceProfileNode; import org.thingsboard.rule.engine.profile.TbDeviceProfileNodeConfiguration; -import org.thingsboard.server.common.data.DashboardInfo; import org.thingsboard.server.common.data.DataConstants; import org.thingsboard.server.common.data.EntityView; import org.thingsboard.server.common.data.Tenant; @@ -39,7 +38,6 @@ import org.thingsboard.server.common.data.alarm.Alarm; import org.thingsboard.server.common.data.alarm.AlarmInfo; import org.thingsboard.server.common.data.alarm.AlarmQuery; import org.thingsboard.server.common.data.alarm.AlarmSeverity; -import org.thingsboard.server.common.data.id.DashboardId; import org.thingsboard.server.common.data.id.EntityViewId; import org.thingsboard.server.common.data.id.RuleChainId; import org.thingsboard.server.common.data.id.RuleNodeId; @@ -209,10 +207,6 @@ public class DefaultDataUpdateService implements DataUpdateService { log.info("Skipping edge events migration"); } break; - case "3.4.4": - log.info("Updating data from version 3.4.4 to 3.5.0 ..."); - tenantsDashboardsFiltersUpdater.updateEntities(); - break; default: throw new RuntimeException("Unable to update data, unsupported fromVersion: " + fromVersion); } @@ -690,73 +684,4 @@ public class DefaultDataUpdateService implements DataUpdateService { return Boolean.parseBoolean(env); } } - - private final PaginatedUpdater tenantsDashboardsFiltersUpdater = - new PaginatedUpdater<>() { - - @Override - protected String getName() { - return "Tenants dashboards filters updater"; - } - - @Override - protected boolean forceReportTotal() { - return true; - } - - @Override - protected PageData findEntities(String region, PageLink pageLink) { - return tenantService.findTenants(pageLink); - } - - @Override - protected void updateEntity(Tenant tenant) { - updateTenantDashboardsFilters(tenant.getId()); - } - }; - - private void updateTenantDashboardsFilters(TenantId tenantId) { - for (String filterTypeForUpdate : DataConstants.DASHBOARD_FILTER_TYPES_FOR_UPDATE) { - PageLink pageLink = new PageLink(100); - PageData pageData = dashboardService.findDashboardsByTenantIdAndConfigurationText(tenantId, filterTypeForUpdate, pageLink); - boolean hasNext = true; - while (hasNext) { - List>> updateFutures = new ArrayList<>(); - for (DashboardInfo dashboardInfo : pageData.getData()) { - updateFutures.add(updateDashboardFilters(tenantId, dashboardInfo)); - } - - try { - Futures.allAsList(updateFutures).get(); - } catch (InterruptedException | ExecutionException e) { - log.error("Failed to update dashboards filters", e); - } - - if (pageData.hasNext()) { - pageLink = pageLink.nextPageLink(); - pageData = dashboardService.findDashboardsByTenantIdAndConfigurationText(tenantId, filterTypeForUpdate, pageLink); - } else { - hasNext = false; - } - } - - } - } - - private ListenableFuture> updateDashboardFilters(TenantId tenantId, DashboardInfo dashboardInfo) { - DashboardId dashboardId = dashboardInfo.getId(); - return Futures.transform(dashboardService.findDashboardByIdAsync(tenantId, dashboardId), dashboard -> { - if (dashboard == null || dashboard.getConfiguration() == null) { - return null; - } - try { - dashboardService.saveDashboard(dashboard); - } catch (Exception e) { - log.warn("Failed to update dashboard filters. Dashboard {} ", dashboard, e); - } - return null; - }, MoreExecutors.directExecutor()); - } - - } 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 110ba9f53f..c38ecd5c29 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 @@ -69,7 +69,4 @@ public interface DashboardService extends EntityDaoService { DashboardInfo findFirstDashboardInfoByTenantIdAndName(TenantId tenantId, String name); List findTenantDashboardsByTitle(TenantId tenantId, String title); - - PageData findDashboardsByTenantIdAndConfigurationText(TenantId tenantId, String searchText, PageLink pageLink); - } diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/DataConstants.java b/common/data/src/main/java/org/thingsboard/server/common/data/DataConstants.java index 950c4c9d8f..2b44d46b4e 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/DataConstants.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/DataConstants.java @@ -130,10 +130,4 @@ public class DataConstants { public static final String HP_QUEUE_TOPIC = "tb_rule_engine.hp"; public static final String SQ_QUEUE_NAME = "SequentialByOriginator"; public static final String SQ_QUEUE_TOPIC = "tb_rule_engine.sq"; - - public static final List DASHBOARD_FILTER_TYPES_FOR_UPDATE = Arrays.asList( - EntityFilterType.ASSET_TYPE.getLabel(), - EntityFilterType.DEVICE_TYPE.getLabel(), - EntityFilterType.ENTITY_VIEW_TYPE.getLabel(), - EntityFilterType.EDGE_TYPE.getLabel()); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardInfoDao.java b/dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardInfoDao.java index 4b365e5ed1..e8eb1d7a50 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardInfoDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardInfoDao.java @@ -76,7 +76,4 @@ public interface DashboardInfoDao extends Dao { PageData findDashboardsByTenantIdAndEdgeId(UUID tenantId, UUID edgeId, PageLink pageLink); DashboardInfo findFirstByTenantIdAndName(UUID tenantId, String name); - - PageData findByTenantIdAndConfigurationText(UUID tenantId, String searchText, PageLink pageLink); - } 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 21dea65229..b6044e89bc 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 @@ -108,9 +108,6 @@ public class DashboardServiceImpl extends AbstractEntityService implements Dashb log.trace("Executing saveDashboard [{}]", dashboard); dashboardValidator.validate(dashboard, DashboardInfo::getTenantId); try { - for (JsonNode entityAlias : dashboard.getEntityAliasesConfig()) { - updateDashboardFilterIfRequired(entityAlias); - } return dashboardDao.save(dashboard.getTenantId(), dashboard); } catch (Exception e) { checkConstraintViolation(e, "dashboard_external_id_unq_key", "Dashboard with such external id already exists!"); @@ -118,29 +115,6 @@ public class DashboardServiceImpl extends AbstractEntityService implements Dashb } } - private static void updateDashboardFilterIfRequired(JsonNode entityAlias) { - JsonNode filter = entityAlias.get("filter"); - if (filter == null || filter.get("type") == null) { - return; - } - for (String filterTypeForUpdate : DataConstants.DASHBOARD_FILTER_TYPES_FOR_UPDATE) { - updateFilterByTypeIfRequired(filter, filterTypeForUpdate); - } - } - - private static void updateFilterByTypeIfRequired(JsonNode filter, String filterTypeSingularLabel) { - if (filter.get(filterTypeSingularLabel) == null) { - return; - } - if (filterTypeSingularLabel.equals(filter.get("type").asText())) { - ArrayNode filterTypes = JacksonUtil.OBJECT_MAPPER.createArrayNode(); - filterTypes.add(filter.get(filterTypeSingularLabel).asText()); - final String filterTypesPluralLabel = String.format("%ss", filterTypeSingularLabel); - ((ObjectNode) filter).set(filterTypesPluralLabel, filterTypes); - ((ObjectNode) filter).remove(filterTypeSingularLabel); - } - } - @Override public Dashboard assignDashboardToCustomer(TenantId tenantId, DashboardId dashboardId, CustomerId customerId) { Dashboard dashboard = findDashboardById(tenantId, dashboardId); @@ -327,12 +301,6 @@ public class DashboardServiceImpl extends AbstractEntityService implements Dashb public List findTenantDashboardsByTitle(TenantId tenantId, String title) { return dashboardDao.findByTenantIdAndTitle(tenantId.getId(), title); } - - @Override - public PageData findDashboardsByTenantIdAndConfigurationText(TenantId tenantId, String searchText, PageLink pageLink) { - return dashboardInfoDao.findByTenantIdAndConfigurationText(tenantId.getId(), searchText, pageLink); - } - private PaginatedRemover tenantDashboardsRemover = new PaginatedRemover() { diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/dashboard/DashboardInfoRepository.java b/dao/src/main/java/org/thingsboard/server/dao/sql/dashboard/DashboardInfoRepository.java index b48020b617..26459b28af 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/dashboard/DashboardInfoRepository.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/dashboard/DashboardInfoRepository.java @@ -71,10 +71,4 @@ public interface DashboardInfoRepository extends JpaRepository findByTenantIdAndConfigurationText(@Param("tenantId") UUID tenantId, - @Param("searchText") String searchText, - Pageable pageable); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/dashboard/JpaDashboardInfoDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/dashboard/JpaDashboardInfoDao.java index 4a22008eb7..c12770cf79 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/dashboard/JpaDashboardInfoDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/dashboard/JpaDashboardInfoDao.java @@ -118,14 +118,4 @@ public class JpaDashboardInfoDao extends JpaAbstractSearchTextDao findByTenantIdAndConfigurationText(UUID tenantId, String searchText, PageLink pageLink) { - log.debug("Try to find dashboards by tenantId [{}], configuration text [{}] and pageLink [{}]", tenantId, searchText, pageLink); - return DaoUtil.toPageData(dashboardInfoRepository - .findByTenantIdAndConfigurationText( - tenantId, - searchText, - DaoUtil.toPageable(pageLink))); - } } diff --git a/ui-ngx/src/app/core/services/dashboard-utils.service.ts b/ui-ngx/src/app/core/services/dashboard-utils.service.ts index 394e55ff4c..2d4e6af94b 100644 --- a/ui-ngx/src/app/core/services/dashboard-utils.service.ts +++ b/ui-ngx/src/app/core/services/dashboard-utils.service.ts @@ -604,6 +604,47 @@ export class DashboardUtilsService { delete entityAlias.entityType; delete entityAlias.entityFilter; } + entityAlias = this.validateAndUpdateEntityAliasSingleTypeFilters(entityAlias); + return entityAlias; + } + + private validateAndUpdateEntityAliasSingleTypeFilters(entityAlias: EntityAlias): EntityAlias { + if (entityAlias.filter.type === AliasFilterType.deviceType) { + if (entityAlias.filter.deviceType) { + if (!entityAlias.filter.deviceTypes) { + entityAlias.filter.deviceTypes = []; + } + entityAlias.filter.deviceTypes.push(entityAlias.filter.deviceType); + delete entityAlias.filter.deviceType; + } + } + if (entityAlias.filter.type === AliasFilterType.assetType) { + if (entityAlias.filter.assetType) { + if (!entityAlias.filter.assetTypes) { + entityAlias.filter.assetTypes = []; + } + entityAlias.filter.assetTypes.push(entityAlias.filter.assetType); + delete entityAlias.filter.assetType; + } + } + if (entityAlias.filter.type === AliasFilterType.entityViewType) { + if (entityAlias.filter.entityViewType) { + if (!entityAlias.filter.entityViewTypes) { + entityAlias.filter.entityViewTypes = []; + } + entityAlias.filter.entityViewTypes.push(entityAlias.filter.entityViewType); + delete entityAlias.filter.entityViewType; + } + } + if (entityAlias.filter.type === AliasFilterType.edgeType) { + if (entityAlias.filter.edgeType) { + if (!entityAlias.filter.edgeTypes) { + entityAlias.filter.edgeTypes = []; + } + entityAlias.filter.edgeTypes.push(entityAlias.filter.edgeType); + delete entityAlias.filter.edgeType; + } + } return entityAlias; } diff --git a/ui-ngx/src/app/shared/models/alias.models.ts b/ui-ngx/src/app/shared/models/alias.models.ts index e0fb82404b..3f141834a4 100644 --- a/ui-ngx/src/app/shared/models/alias.models.ts +++ b/ui-ngx/src/app/shared/models/alias.models.ts @@ -86,21 +86,25 @@ export interface StateEntityFilter { } export interface AssetTypeFilter { + assetType?: string; // deprecated assetTypes?: string[]; assetNameFilter?: string; } export interface DeviceTypeFilter { + deviceType?: string; // deprecated deviceTypes?: string[]; deviceNameFilter?: string; } export interface EdgeTypeFilter { + edgeType?: string; // deprecated edgeTypes?: string[]; edgeNameFilter?: string; } export interface EntityViewFilter { + entityViewType?: string; // deprecated entityViewTypes?: string[]; entityViewNameFilter?: string; }