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 8bba2214d6..a0f13d7ec4 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 @@ -748,13 +748,6 @@ public class DefaultDataUpdateService implements DataUpdateService { return null; } try { - List entityAliases = dashboard.getEntityAliasesConfig(); - if (entityAliases == null) { - return null; - } - for (JsonNode entityAlias : entityAliases) { - MiscUtils.updateDashboardFilterIfRequired(entityAlias); - } dashboardService.saveDashboard(dashboard); } catch (Exception e) { log.warn("Failed to update dashboard filters. Dashboard {} ", dashboard, e); diff --git a/application/src/main/java/org/thingsboard/server/service/sync/ie/importing/impl/DashboardImportService.java b/application/src/main/java/org/thingsboard/server/service/sync/ie/importing/impl/DashboardImportService.java index 245fee45b1..611b536808 100644 --- a/application/src/main/java/org/thingsboard/server/service/sync/ie/importing/impl/DashboardImportService.java +++ b/application/src/main/java/org/thingsboard/server/service/sync/ie/importing/impl/DashboardImportService.java @@ -22,9 +22,6 @@ import org.thingsboard.common.util.JacksonUtil; import org.thingsboard.server.common.data.Dashboard; import org.thingsboard.server.common.data.EntityType; import org.thingsboard.server.common.data.ShortCustomerInfo; -import org.thingsboard.server.common.data.User; -import org.thingsboard.server.common.data.edge.EdgeEventActionType; -import org.thingsboard.server.common.data.exception.ThingsboardException; import org.thingsboard.server.common.data.id.CustomerId; import org.thingsboard.server.common.data.id.DashboardId; import org.thingsboard.server.common.data.id.TenantId; @@ -32,7 +29,6 @@ import org.thingsboard.server.common.data.sync.ie.EntityExportData; import org.thingsboard.server.dao.dashboard.DashboardService; import org.thingsboard.server.queue.util.TbCoreComponent; import org.thingsboard.server.service.sync.vc.data.EntitiesImportCtx; -import org.thingsboard.server.utils.MiscUtils; import java.util.Arrays; import java.util.Collections; @@ -74,9 +70,6 @@ public class DashboardImportService extends BaseEntityImportService tsData) throws InterruptedException { CountDownLatch latch = new CountDownLatch(1); tsService.saveAndNotify(device.getTenantId(), null, device.getId(), tsData, 0, new FutureCallback() { diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/query/AssetTypeFilter.java b/common/data/src/main/java/org/thingsboard/server/common/data/query/AssetTypeFilter.java index 6212e80c8a..61a4b969a2 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/query/AssetTypeFilter.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/query/AssetTypeFilter.java @@ -29,7 +29,6 @@ public class AssetTypeFilter implements EntityFilter { @Deprecated(since = "3.5", forRemoval = true) private String assetType; - @JsonIgnore private List assetTypes; private String assetNameFilter; diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/query/DeviceTypeFilter.java b/common/data/src/main/java/org/thingsboard/server/common/data/query/DeviceTypeFilter.java index adc7a2de04..f6ac85a7f4 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/query/DeviceTypeFilter.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/query/DeviceTypeFilter.java @@ -33,7 +33,6 @@ public class DeviceTypeFilter implements EntityFilter { @Deprecated(since = "3.5", forRemoval = true) private String deviceType; - @JsonIgnore private List deviceTypes; private String deviceNameFilter; diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/query/EdgeTypeFilter.java b/common/data/src/main/java/org/thingsboard/server/common/data/query/EdgeTypeFilter.java index e31dedecfa..d51916fcc6 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/query/EdgeTypeFilter.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/query/EdgeTypeFilter.java @@ -29,7 +29,6 @@ public class EdgeTypeFilter implements EntityFilter { @Deprecated(since = "3.5", forRemoval = true) private String edgeType; - @JsonIgnore private List edgeTypes; private String edgeNameFilter; diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/query/EntityViewTypeFilter.java b/common/data/src/main/java/org/thingsboard/server/common/data/query/EntityViewTypeFilter.java index 509b4660a5..97c7efce33 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/query/EntityViewTypeFilter.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/query/EntityViewTypeFilter.java @@ -29,7 +29,6 @@ public class EntityViewTypeFilter implements EntityFilter { @Deprecated(since = "3.5", forRemoval = true) private String entityViewType; - @JsonIgnore private List entityViewTypes; private String entityViewNameFilter; 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 96d56148eb..d64f6dd246 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 @@ -15,12 +15,16 @@ */ package org.thingsboard.server.dao.dashboard; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.node.ArrayNode; +import com.fasterxml.jackson.databind.node.ObjectNode; import com.google.common.util.concurrent.ListenableFuture; import lombok.extern.slf4j.Slf4j; import org.hibernate.exception.ConstraintViolationException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.thingsboard.common.util.JacksonUtil; import org.thingsboard.server.common.data.Customer; import org.thingsboard.server.common.data.Dashboard; import org.thingsboard.server.common.data.DashboardInfo; @@ -34,6 +38,7 @@ import org.thingsboard.server.common.data.id.HasId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; +import org.thingsboard.server.common.data.query.EntityFilterType; import org.thingsboard.server.common.data.relation.EntityRelation; import org.thingsboard.server.common.data.relation.RelationTypeGroup; import org.thingsboard.server.dao.customer.CustomerDao; @@ -103,6 +108,9 @@ 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!"); @@ -110,6 +118,30 @@ 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; + } + updateFilterByTypeIfRequired(filter, EntityFilterType.ASSET_TYPE.getLabel()); + updateFilterByTypeIfRequired(filter, EntityFilterType.DEVICE_TYPE.getLabel()); + updateFilterByTypeIfRequired(filter, EntityFilterType.ENTITY_VIEW_TYPE.getLabel()); + updateFilterByTypeIfRequired(filter, EntityFilterType.EDGE_TYPE.getLabel()); + } + + private static void updateFilterByTypeIfRequired(JsonNode filter, String FILTER_TYPE_SINGULAR_LABEL) { + if (filter.get(FILTER_TYPE_SINGULAR_LABEL) == null) { + return; + } + if (FILTER_TYPE_SINGULAR_LABEL.equals(filter.get("type").asText())) { + ArrayNode filterTypes = JacksonUtil.OBJECT_MAPPER.createArrayNode(); + filterTypes.add(filter.get(FILTER_TYPE_SINGULAR_LABEL).asText()); + final String FILTER_TYPES_PLURAL_LABEL = String.format("%ss", FILTER_TYPE_SINGULAR_LABEL); + ((ObjectNode) filter).set(FILTER_TYPES_PLURAL_LABEL, filterTypes); + ((ObjectNode) filter).remove(FILTER_TYPE_SINGULAR_LABEL); + } + } + @Override public Dashboard assignDashboardToCustomer(TenantId tenantId, DashboardId dashboardId, CustomerId customerId) { Dashboard dashboard = findDashboardById(tenantId, dashboardId);