Browse Source

Removed check of deprecated entity alias filter type from backend to frontend

pull/8026/head
Volodymyr Babak 4 years ago
parent
commit
c2b1a948da
  1. 1
      application/src/main/java/org/thingsboard/server/install/ThingsboardInstallService.java
  2. 75
      application/src/main/java/org/thingsboard/server/service/install/update/DefaultDataUpdateService.java
  3. 3
      common/dao-api/src/main/java/org/thingsboard/server/dao/dashboard/DashboardService.java
  4. 6
      common/data/src/main/java/org/thingsboard/server/common/data/DataConstants.java
  5. 3
      dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardInfoDao.java
  6. 32
      dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardServiceImpl.java
  7. 6
      dao/src/main/java/org/thingsboard/server/dao/sql/dashboard/DashboardInfoRepository.java
  8. 10
      dao/src/main/java/org/thingsboard/server/dao/sql/dashboard/JpaDashboardInfoDao.java
  9. 41
      ui-ngx/src/app/core/services/dashboard-utils.service.ts
  10. 4
      ui-ngx/src/app/shared/models/alias.models.ts

1
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;

75
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<String, Tenant> tenantsDashboardsFiltersUpdater =
new PaginatedUpdater<>() {
@Override
protected String getName() {
return "Tenants dashboards filters updater";
}
@Override
protected boolean forceReportTotal() {
return true;
}
@Override
protected PageData<Tenant> 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<DashboardInfo> pageData = dashboardService.findDashboardsByTenantIdAndConfigurationText(tenantId, filterTypeForUpdate, pageLink);
boolean hasNext = true;
while (hasNext) {
List<ListenableFuture<List<Void>>> 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<List<Void>> 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());
}
}

3
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<Dashboard> findTenantDashboardsByTitle(TenantId tenantId, String title);
PageData<DashboardInfo> findDashboardsByTenantIdAndConfigurationText(TenantId tenantId, String searchText, PageLink pageLink);
}

6
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<String> DASHBOARD_FILTER_TYPES_FOR_UPDATE = Arrays.asList(
EntityFilterType.ASSET_TYPE.getLabel(),
EntityFilterType.DEVICE_TYPE.getLabel(),
EntityFilterType.ENTITY_VIEW_TYPE.getLabel(),
EntityFilterType.EDGE_TYPE.getLabel());
}

3
dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardInfoDao.java

@ -76,7 +76,4 @@ public interface DashboardInfoDao extends Dao<DashboardInfo> {
PageData<DashboardInfo> findDashboardsByTenantIdAndEdgeId(UUID tenantId, UUID edgeId, PageLink pageLink);
DashboardInfo findFirstByTenantIdAndName(UUID tenantId, String name);
PageData<DashboardInfo> findByTenantIdAndConfigurationText(UUID tenantId, String searchText, PageLink pageLink);
}

32
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<Dashboard> findTenantDashboardsByTitle(TenantId tenantId, String title) {
return dashboardDao.findByTenantIdAndTitle(tenantId.getId(), title);
}
@Override
public PageData<DashboardInfo> findDashboardsByTenantIdAndConfigurationText(TenantId tenantId, String searchText, PageLink pageLink) {
return dashboardInfoDao.findByTenantIdAndConfigurationText(tenantId.getId(), searchText, pageLink);
}
private PaginatedRemover<TenantId, DashboardInfo> tenantDashboardsRemover =
new PaginatedRemover<TenantId, DashboardInfo>() {

6
dao/src/main/java/org/thingsboard/server/dao/sql/dashboard/DashboardInfoRepository.java

@ -71,10 +71,4 @@ public interface DashboardInfoRepository extends JpaRepository<DashboardInfoEnti
@Param("edgeId") UUID edgeId,
@Param("searchText") String searchText,
Pageable pageable);
@Query("SELECT d FROM DashboardEntity d WHERE d.tenantId = :tenantId " +
"AND LOWER(d.configuration) LIKE LOWER(CONCAT('%', :searchText, '%'))")
Page<DashboardInfoEntity> findByTenantIdAndConfigurationText(@Param("tenantId") UUID tenantId,
@Param("searchText") String searchText,
Pageable pageable);
}

10
dao/src/main/java/org/thingsboard/server/dao/sql/dashboard/JpaDashboardInfoDao.java

@ -118,14 +118,4 @@ public class JpaDashboardInfoDao extends JpaAbstractSearchTextDao<DashboardInfoE
public DashboardInfo findFirstByTenantIdAndName(UUID tenantId, String name) {
return DaoUtil.getData(dashboardInfoRepository.findFirstByTenantIdAndTitle(tenantId, name));
}
@Override
public PageData<DashboardInfo> 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)));
}
}

41
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;
}

4
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;
}

Loading…
Cancel
Save