thingsboard-aplcache
Changes
application/src/main/java/org/thingsboard/server/service/install/DefaultDataUpdateService.java 4(+0 -4)
application/src/test/java/org/thingsboard/server/controller/BaseEntityViewControllerTest.java 44(+27 -17)
dao/src/main/resources/cassandra/schema.cql 26(+2 -24)
Details
diff --git a/application/src/main/data/upgrade/2.1.1/schema_update.cql b/application/src/main/data/upgrade/2.1.1/schema_update.cql
index 888f43c..a633634 100644
--- a/application/src/main/data/upgrade/2.1.1/schema_update.cql
+++ b/application/src/main/data/upgrade/2.1.1/schema_update.cql
@@ -14,10 +14,9 @@
-- limitations under the License.
--
-DROP MATERIALIZED VIEW IF EXISTS thingsboard.entity_views_by_tenant_and_name;
-DROP MATERIALIZED VIEW IF EXISTS thingsboard.entity_views_by_tenant_and_entity;
-DROP MATERIALIZED VIEW IF EXISTS thingsboard.entity_views_by_tenant_and_customer;
-DROP MATERIALIZED VIEW IF EXISTS thingsboard.entity_views_by_tenant_and_customer_and_entity;
+DROP MATERIALIZED VIEW IF EXISTS thingsboard.entity_view_by_tenant_and_name;
+DROP MATERIALIZED VIEW IF EXISTS thingsboard.entity_view_by_tenant_and_search_text;
+DROP MATERIALIZED VIEW IF EXISTS thingsboard.entity_view_by_tenant_and_customer;
DROP TABLE IF EXISTS thingsboard.entity_views;
@@ -36,7 +35,7 @@ CREATE TABLE IF NOT EXISTS thingsboard.entity_views (
PRIMARY KEY (id, entity_id, tenant_id, customer_id)
);
-CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.entity_views_by_tenant_and_name AS
+CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.entity_view_by_tenant_and_name AS
SELECT *
from thingsboard.entity_views
WHERE tenant_id IS NOT NULL
@@ -58,18 +57,7 @@ CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.entity_view_by_tenant_and_sea
PRIMARY KEY (tenant_id, search_text, id, customer_id, entity_id)
WITH CLUSTERING ORDER BY (search_text ASC, id DESC, customer_id DESC);
-CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.entity_view_by_tenant_and_entity AS
- SELECT *
- from thingsboard.entity_views
- WHERE tenant_id IS NOT NULL
- AND customer_id IS NOT NULL
- AND entity_id IS NOT NULL
- AND search_text IS NOT NULL
- AND id IS NOT NULL
- PRIMARY KEY (tenant_id, entity_id, search_text, id, customer_id)
- WITH CLUSTERING ORDER BY (entity_id ASC, search_text ASC, id DESC, customer_id DESC);
-
-CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.entity_views_by_tenant_and_customer AS
+CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.entity_view_by_tenant_and_customer AS
SELECT *
from thingsboard.entity_views
WHERE tenant_id IS NOT NULL
@@ -79,14 +67,3 @@ CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.entity_views_by_tenant_and_cu
AND id IS NOT NULL
PRIMARY KEY (tenant_id, customer_id, search_text, id, entity_id)
WITH CLUSTERING ORDER BY (customer_id DESC, search_text ASC, id DESC);
-
-CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.entity_views_by_tenant_and_customer_and_entity AS
- SELECT *
- from thingsboard.entity_views
- WHERE tenant_id IS NOT NULL
- AND customer_id IS NOT NULL
- AND entity_id IS NOT NULL
- AND search_text IS NOT NULL
- AND id IS NOT NULL
- PRIMARY KEY (tenant_id, customer_id, entity_id, search_text, id)
- WITH CLUSTERING ORDER BY (customer_id DESC, entity_id ASC, search_text ASC, id DESC);
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 347b054..5b2dab6 100644
--- a/application/src/main/java/org/thingsboard/server/install/ThingsboardInstallService.java
+++ b/application/src/main/java/org/thingsboard/server/install/ThingsboardInstallService.java
@@ -93,8 +93,6 @@ public class ThingsboardInstallService {
databaseUpgradeService.upgradeDatabase("2.0.0");
- dataUpdateService.updateData("2.0.0");
-
log.info("Updating system data...");
systemDataLoaderService.deleteSystemWidgetBundle("charts");
diff --git a/application/src/main/java/org/thingsboard/server/service/install/DefaultDataUpdateService.java b/application/src/main/java/org/thingsboard/server/service/install/DefaultDataUpdateService.java
index 0194a5d..5daebcc 100644
--- a/application/src/main/java/org/thingsboard/server/service/install/DefaultDataUpdateService.java
+++ b/application/src/main/java/org/thingsboard/server/service/install/DefaultDataUpdateService.java
@@ -49,10 +49,6 @@ public class DefaultDataUpdateService implements DataUpdateService {
log.info("Updating data from version 1.4.0 to 2.0.0 ...");
tenantsDefaultRuleChainUpdater.updateEntities(null);
break;
- case "2.0.0":
- log.info("Updating data from version 2.0.0 to 2.1.1 ...");
- tenantsDefaultRuleChainUpdater.updateEntities(null);
- break;
default:
throw new RuntimeException("Unable to update data, unsupported fromVersion: " + fromVersion);
}
diff --git a/application/src/main/java/org/thingsboard/server/service/security/AccessValidator.java b/application/src/main/java/org/thingsboard/server/service/security/AccessValidator.java
index 7f4f23a..eaf1018 100644
--- a/application/src/main/java/org/thingsboard/server/service/security/AccessValidator.java
+++ b/application/src/main/java/org/thingsboard/server/service/security/AccessValidator.java
@@ -30,7 +30,15 @@ import org.thingsboard.server.common.data.EntityView;
import org.thingsboard.server.common.data.Tenant;
import org.thingsboard.server.common.data.asset.Asset;
import org.thingsboard.server.common.data.exception.ThingsboardException;
-import org.thingsboard.server.common.data.id.*;
+import org.thingsboard.server.common.data.id.AssetId;
+import org.thingsboard.server.common.data.id.CustomerId;
+import org.thingsboard.server.common.data.id.DeviceId;
+import org.thingsboard.server.common.data.id.EntityId;
+import org.thingsboard.server.common.data.id.EntityIdFactory;
+import org.thingsboard.server.common.data.id.EntityViewId;
+import org.thingsboard.server.common.data.id.RuleChainId;
+import org.thingsboard.server.common.data.id.RuleNodeId;
+import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.data.rule.RuleChain;
import org.thingsboard.server.common.data.rule.RuleNode;
import org.thingsboard.server.controller.HttpValidationCallback;
diff --git a/application/src/test/java/org/thingsboard/server/controller/BaseEntityViewControllerTest.java b/application/src/test/java/org/thingsboard/server/controller/BaseEntityViewControllerTest.java
index 5c62e6a..98ca7c2 100644
--- a/application/src/test/java/org/thingsboard/server/controller/BaseEntityViewControllerTest.java
+++ b/application/src/test/java/org/thingsboard/server/controller/BaseEntityViewControllerTest.java
@@ -22,7 +22,11 @@ import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
-import org.thingsboard.server.common.data.*;
+import org.thingsboard.server.common.data.Customer;
+import org.thingsboard.server.common.data.Device;
+import org.thingsboard.server.common.data.EntityView;
+import org.thingsboard.server.common.data.Tenant;
+import org.thingsboard.server.common.data.User;
import org.thingsboard.server.common.data.id.CustomerId;
import org.thingsboard.server.common.data.objects.AttributesEntityView;
import org.thingsboard.server.common.data.objects.TelemetryEntityView;
@@ -31,7 +35,10 @@ import org.thingsboard.server.common.data.page.TextPageLink;
import org.thingsboard.server.common.data.security.Authority;
import org.thingsboard.server.dao.model.ModelConstants;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
import static org.hamcrest.Matchers.containsString;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@@ -43,7 +50,6 @@ public abstract class BaseEntityViewControllerTest extends AbstractControllerTes
private Tenant savedTenant;
private User tenantAdmin;
private Device testDevice;
- private TelemetryEntityView obj;
@Before
public void beforeTest() throws Exception {
@@ -67,14 +73,6 @@ public abstract class BaseEntityViewControllerTest extends AbstractControllerTes
device.setName("Test device");
device.setType("default");
testDevice = doPost("/api/device", device, Device.class);
- obj = new TelemetryEntityView(
- Arrays.asList("109L", "209L"),
- new AttributesEntityView(
- Arrays.asList("caKey1", "caKey2"),
- Arrays.asList("saKey1", "saKey2", "saKey3"),
- Arrays.asList("shKey1", "shKey2", "shKey3", "shKey4")
- )
- );
}
@After
@@ -239,14 +237,16 @@ public abstract class BaseEntityViewControllerTest extends AbstractControllerTes
doDelete("/api/customer/entityView/" + view.getId().getId().toString()).andExpect(status().isOk());
}
TextPageData<EntityView> pageData = doGetTypedWithPageLink(urlTemplate,
- new TypeReference<TextPageData<EntityView>>(){}, new TextPageLink(4, name1));
+ new TypeReference<TextPageData<EntityView>>() {
+ }, new TextPageLink(4, name1));
Assert.assertFalse(pageData.hasNext());
Assert.assertEquals(0, pageData.getData().size());
for (EntityView view : loadedNamesOfView2) {
doDelete("/api/customer/entityView/" + view.getId().getId().toString()).andExpect(status().isOk());
}
- pageData = doGetTypedWithPageLink(urlTemplate, new TypeReference<TextPageData<EntityView>>(){},
+ pageData = doGetTypedWithPageLink(urlTemplate, new TypeReference<TextPageData<EntityView>>() {
+ },
new TextPageLink(4, name2));
Assert.assertFalse(pageData.hasNext());
Assert.assertEquals(0, pageData.getData().size());
@@ -287,14 +287,16 @@ public abstract class BaseEntityViewControllerTest extends AbstractControllerTes
doDelete("/api/entityView/" + view.getId().getId().toString()).andExpect(status().isOk());
}
TextPageData<EntityView> pageData = doGetTypedWithPageLink("/api/tenant/entityViews?",
- new TypeReference<TextPageData<EntityView>>(){}, new TextPageLink(4, name1));
+ new TypeReference<TextPageData<EntityView>>() {
+ }, new TextPageLink(4, name1));
Assert.assertFalse(pageData.hasNext());
Assert.assertEquals(0, pageData.getData().size());
for (EntityView view : loadedNamesOfView2) {
doDelete("/api/entityView/" + view.getId().getId().toString()).andExpect(status().isOk());
}
- pageData = doGetTypedWithPageLink("/api/tenant/entityViews?", new TypeReference<TextPageData<EntityView>>(){},
+ pageData = doGetTypedWithPageLink("/api/tenant/entityViews?", new TypeReference<TextPageData<EntityView>>() {
+ },
new TextPageLink(4, name2));
Assert.assertFalse(pageData.hasNext());
Assert.assertEquals(0, pageData.getData().size());
@@ -305,7 +307,14 @@ public abstract class BaseEntityViewControllerTest extends AbstractControllerTes
view.setEntityId(testDevice.getId());
view.setTenantId(savedTenant.getId());
view.setName(name);
- view.setKeys(new TelemetryEntityView(obj));
+
+ view.setKeys(new TelemetryEntityView(
+ Arrays.asList("109L", "209L"),
+ new AttributesEntityView(
+ Arrays.asList("caKey1", "caKey2"),
+ Arrays.asList("saKey1", "saKey2", "saKey3"),
+ Arrays.asList("shKey1", "shKey2", "shKey3", "shKey4"))));
+
return doPost("/api/entityView", view, EntityView.class);
}
@@ -346,7 +355,8 @@ public abstract class BaseEntityViewControllerTest extends AbstractControllerTes
List<EntityView> loadedItems = new ArrayList<>();
TextPageData<EntityView> pageData;
do {
- pageData = doGetTypedWithPageLink(urlTemplate, new TypeReference<TextPageData<EntityView>>(){}, pageLink);
+ pageData = doGetTypedWithPageLink(urlTemplate, new TypeReference<TextPageData<EntityView>>() {
+ }, pageLink);
loadedItems.addAll(pageData.getData());
if (pageData.hasNext()) {
pageLink = pageData.getNextPageLink();
diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/EntityView.java b/common/data/src/main/java/org/thingsboard/server/common/data/EntityView.java
index b86c605..25b066d 100644
--- a/common/data/src/main/java/org/thingsboard/server/common/data/EntityView.java
+++ b/common/data/src/main/java/org/thingsboard/server/common/data/EntityView.java
@@ -15,7 +15,9 @@
*/
package org.thingsboard.server.common.data;
-import lombok.*;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
import org.thingsboard.server.common.data.id.CustomerId;
import org.thingsboard.server.common.data.id.EntityId;
import org.thingsboard.server.common.data.id.EntityViewId;
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 36b250d..9d96f3a 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
@@ -32,6 +32,7 @@ import org.thingsboard.server.dao.asset.AssetService;
import org.thingsboard.server.dao.dashboard.DashboardService;
import org.thingsboard.server.dao.device.DeviceService;
import org.thingsboard.server.dao.entity.AbstractEntityService;
+import org.thingsboard.server.dao.entityview.EntityViewService;
import org.thingsboard.server.dao.exception.DataValidationException;
import org.thingsboard.server.dao.exception.IncorrectParameterException;
import org.thingsboard.server.dao.service.DataValidator;
@@ -70,6 +71,9 @@ public class CustomerServiceImpl extends AbstractEntityService implements Custom
private DeviceService deviceService;
@Autowired
+ private EntityViewService entityViewService;
+
+ @Autowired
private DashboardService dashboardService;
@Override
@@ -113,6 +117,7 @@ public class CustomerServiceImpl extends AbstractEntityService implements Custom
dashboardService.unassignCustomerDashboards(customerId);
assetService.unassignCustomerAssets(customer.getTenantId(), customerId);
deviceService.unassignCustomerDevices(customer.getTenantId(), customerId);
+ entityViewService.unassignCustomerEntityViews(customer.getTenantId(), customerId);
userService.deleteCustomerUsers(customer.getTenantId(), customerId);
deleteEntityRelations(customerId);
customerDao.removeById(customerId.getId());
diff --git a/dao/src/main/java/org/thingsboard/server/dao/entityview/CassandraEntityViewDao.java b/dao/src/main/java/org/thingsboard/server/dao/entityview/CassandraEntityViewDao.java
index 98f6105..e866bc8 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/entityview/CassandraEntityViewDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/entityview/CassandraEntityViewDao.java
@@ -30,11 +30,23 @@ import org.thingsboard.server.dao.model.nosql.EntityViewEntity;
import org.thingsboard.server.dao.nosql.CassandraAbstractSearchTextDao;
import org.thingsboard.server.dao.util.NoSqlDao;
-import java.util.*;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Optional;
+import java.util.UUID;
import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;
import static com.datastax.driver.core.querybuilder.QueryBuilder.select;
-import static org.thingsboard.server.dao.model.ModelConstants.*;
+import static org.thingsboard.server.dao.model.ModelConstants.CUSTOMER_ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_ID_COLUMN;
+import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_VIEW_BY_TENANT_AND_CUSTOMER_AND_SEARCH_TEXT;
+import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_VIEW_BY_TENANT_AND_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_VIEW_BY_TENANT_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_VIEW_NAME_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_VIEW_TABLE_FAMILY_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_VIEW_TENANT_ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.TENANT_ID_PROPERTY;
/**
* Created by Victor Basanets on 9/06/2017.
@@ -85,19 +97,6 @@ public class CassandraEntityViewDao extends CassandraAbstractSearchTextDao<Entit
}
@Override
- public List<EntityView> findEntityViewByTenantIdAndEntityId(UUID tenantId, UUID entityId, TextPageLink pageLink) {
- log.debug("Try to find entity views by tenantId [{}], entityId [{}] and pageLink [{}]",
- tenantId, entityId, pageLink);
- List<EntityViewEntity> entityViewEntities = findPageWithTextSearch(
- ENTITY_VIEW_BY_TENANT_AND_ENTITY_AND_SEARCH_TEXT,
- Arrays.asList(eq(CUSTOMER_ID_PROPERTY, entityId), eq(TENANT_ID_PROPERTY, tenantId)),
- pageLink);
- log.trace("Found entity views [{}] by tenantId [{}], entityId [{}] and pageLink [{}]",
- entityViewEntities, tenantId, entityId, pageLink);
- return DaoUtil.convertDataList(entityViewEntities);
- }
-
- @Override
public List<EntityView> findEntityViewsByTenantIdAndCustomerId(UUID tenantId, UUID customerId, TextPageLink pageLink) {
log.debug("Try to find entity views by tenantId [{}], customerId[{}] and pageLink [{}]",
tenantId, customerId, pageLink);
@@ -111,26 +110,6 @@ public class CassandraEntityViewDao extends CassandraAbstractSearchTextDao<Entit
}
@Override
- public List<EntityView> findEntityViewsByTenantIdAndCustomerIdAndEntityId(UUID tenantId,
- UUID customerId,
- UUID entityId,
- TextPageLink pageLink) {
-
- log.debug("Try to find entity views by tenantId [{}], customerId [{}], entityId [{}] and pageLink [{}]",
- tenantId, customerId, entityId, pageLink);
- List<EntityViewEntity> entityViewEntities = findPageWithTextSearch(
- ENTITY_VIEW_BY_TENANT_AND_CUSTOMER_AND_ENTITY_AND_SEARCH_TEXT,
- Arrays.asList(
- eq(TENANT_ID_PROPERTY, tenantId),
- eq(CUSTOMER_ID_PROPERTY, customerId),
- eq(ENTITY_ID_COLUMN, entityId)),
- pageLink);
- log.trace("Found devices [{}] by tenantId [{}], customerId [{}], entityId [{}] and pageLink [{}]",
- entityViewEntities, tenantId, customerId, entityId, pageLink);
- return DaoUtil.convertDataList(entityViewEntities);
- }
-
- @Override
public ListenableFuture<List<EntityView>> findEntityViewsByTenantIdAndEntityIdAsync(UUID tenantId, UUID entityId) {
log.debug("Try to find entity views by tenantId [{}] and entityId [{}]", tenantId, entityId);
Select.Where query = select().from(getColumnFamilyName()).where();
diff --git a/dao/src/main/java/org/thingsboard/server/dao/entityview/EntityViewDao.java b/dao/src/main/java/org/thingsboard/server/dao/entityview/EntityViewDao.java
index be643ef..742cb92 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/entityview/EntityViewDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/entityview/EntityViewDao.java
@@ -57,18 +57,6 @@ public interface EntityViewDao extends Dao<EntityView> {
Optional<EntityView> findEntityViewByTenantIdAndName(UUID tenantId, String name);
/**
- * Find entity views by tenantId, entityId and page link.
- *
- * @param tenantId the tenantId
- * @param entityId the entityId
- * @param pageLink the page link
- * @return the list of entity view objects
- */
- List<EntityView> findEntityViewByTenantIdAndEntityId(UUID tenantId,
- UUID entityId,
- TextPageLink pageLink);
-
- /**
* Find entity views by tenantId, customerId and page link.
*
* @param tenantId the tenantId
@@ -80,19 +68,6 @@ public interface EntityViewDao extends Dao<EntityView> {
UUID customerId,
TextPageLink pageLink);
- /**
- * Find entity views by tenantId, customerId, entityId and page link.
- *
- * @param tenantId the tenantId
- * @param customerId the customerId
- * @param entityId the entityId
- * @param pageLink the page link
- * @return the list of entity view objects
- */
- List<EntityView> findEntityViewsByTenantIdAndCustomerIdAndEntityId(UUID tenantId,
- UUID customerId,
- UUID entityId,
- TextPageLink pageLink);
ListenableFuture<List<EntityView>> findEntityViewsByTenantIdAndEntityIdAsync(UUID tenantId, UUID entityId);
}
diff --git a/dao/src/main/java/org/thingsboard/server/dao/entityview/EntityViewService.java b/dao/src/main/java/org/thingsboard/server/dao/entityview/EntityViewService.java
index b9c238a..89b7e2f 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/entityview/EntityViewService.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/entityview/EntityViewService.java
@@ -16,14 +16,12 @@
package org.thingsboard.server.dao.entityview;
import com.google.common.util.concurrent.ListenableFuture;
-import org.thingsboard.server.common.data.Device;
-import org.thingsboard.server.common.data.EntitySubtype;
-import org.thingsboard.server.common.data.EntityType;
import org.thingsboard.server.common.data.EntityView;
-import org.thingsboard.server.common.data.Tenant;
-import org.thingsboard.server.common.data.device.DeviceSearchQuery;
import org.thingsboard.server.common.data.entityview.EntityViewSearchQuery;
-import org.thingsboard.server.common.data.id.*;
+import org.thingsboard.server.common.data.id.CustomerId;
+import org.thingsboard.server.common.data.id.EntityId;
+import org.thingsboard.server.common.data.id.EntityViewId;
+import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.data.page.TextPageData;
import org.thingsboard.server.common.data.page.TextPageLink;
@@ -36,8 +34,6 @@ public interface EntityViewService {
EntityView findEntityViewById(EntityViewId entityViewId);
- EntityView findEntityViewByTenantIdAndName(TenantId tenantId, String name);
-
EntityView saveEntityView(EntityView entityView);
EntityView assignEntityViewToCustomer(EntityViewId entityViewId, CustomerId customerId);
@@ -48,19 +44,11 @@ public interface EntityViewService {
TextPageData<EntityView> findEntityViewByTenantId(TenantId tenantId, TextPageLink pageLink);
- TextPageData<EntityView> findEntityViewByTenantIdAndEntityId(TenantId tenantId, EntityId entityId,
- TextPageLink pageLink);
-
- void deleteEntityViewByTenantId(TenantId tenantId);
+ void deleteEntityViewsByTenantId(TenantId tenantId);
TextPageData<EntityView> findEntityViewsByTenantIdAndCustomerId(TenantId tenantId, CustomerId customerId,
TextPageLink pageLink);
- TextPageData<EntityView> findEntityViewsByTenantIdAndCustomerIdAndEntityId(TenantId tenantId,
- CustomerId customerId,
- EntityId entityId,
- TextPageLink pageLink);
-
void unassignCustomerEntityViews(TenantId tenantId, CustomerId customerId);
ListenableFuture<EntityView> findEntityViewByIdAsync(EntityViewId entityViewId);
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 c13261c..dd3e61d 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
@@ -96,15 +96,6 @@ public class EntityViewServiceImpl extends AbstractEntityService implements Enti
return entityViewDao.findById(entityViewId.getId());
}
- @Cacheable(cacheNames = ENTITY_VIEW_CACHE, key = "{#tenantId, #name}")
- @Override
- public EntityView findEntityViewByTenantIdAndName(TenantId tenantId, String name) {
- log.trace("Executing findEntityViewByTenantIdAndName [{}][{}]", tenantId, name);
- validateId(tenantId, INCORRECT_TENANT_ID + tenantId);
- return entityViewDao.findEntityViewByTenantIdAndName(tenantId.getId(), name)
- .orElse(null);
- }
-
@CacheEvict(cacheNames = ENTITY_VIEW_CACHE, key = "{#entityView.tenantId, #entityView.name}")
@Override
public EntityView saveEntityView(EntityView entityView) {
@@ -187,24 +178,8 @@ public class EntityViewServiceImpl extends AbstractEntityService implements Enti
}
@Override
- public TextPageData<EntityView> findEntityViewByTenantIdAndEntityId(TenantId tenantId, EntityId entityId,
- TextPageLink pageLink) {
-
- log.trace("Executing findEntityViewByTenantIdAndType, tenantId [{}], entityId [{}], pageLink [{}]",
- tenantId, entityId, pageLink);
-
- validateId(tenantId, INCORRECT_TENANT_ID + tenantId);
- validateString(entityId.toString(), "Incorrect entityId " + entityId.toString());
- validatePageLink(pageLink, INCORRECT_PAGE_LINK + pageLink);
- List<EntityView> entityViews = entityViewDao.findEntityViewByTenantIdAndEntityId(tenantId.getId(),
- entityId.getId(), pageLink);
-
- return new TextPageData<>(entityViews, pageLink);
- }
-
- @Override
- public void deleteEntityViewByTenantId(TenantId tenantId) {
- log.trace("Executing deleteEntityViewByTenantId, tenantId [{}]", tenantId);
+ public void deleteEntityViewsByTenantId(TenantId tenantId) {
+ log.trace("Executing deleteEntityViewsByTenantId, tenantId [{}]", tenantId);
validateId(tenantId, INCORRECT_TENANT_ID + tenantId);
tenantEntityViewRemover.removeEntities(tenantId);
}
@@ -226,25 +201,6 @@ public class EntityViewServiceImpl extends AbstractEntityService implements Enti
}
@Override
- public TextPageData<EntityView> findEntityViewsByTenantIdAndCustomerIdAndEntityId(TenantId tenantId,
- CustomerId customerId,
- EntityId entityId,
- TextPageLink pageLink) {
-
- log.trace("Executing findEntityViewsByTenantIdAndCustomerIdAndType, tenantId [{}], customerId [{}]," +
- " entityId [{}], pageLink [{}]", tenantId, customerId, entityId, pageLink);
-
- validateId(tenantId, INCORRECT_TENANT_ID + tenantId);
- validateId(customerId, INCORRECT_CUSTOMER_ID + customerId);
- validateString(entityId.toString(), "Incorrect entityId " + entityId.toString());
- validatePageLink(pageLink, INCORRECT_PAGE_LINK + pageLink);
- List<EntityView> entityViews = entityViewDao.findEntityViewsByTenantIdAndCustomerIdAndEntityId(
- tenantId.getId(), customerId.getId(), entityId.getId(), pageLink);
-
- return new TextPageData<>(entityViews, pageLink);
- }
-
- @Override
public void unassignCustomerEntityViews(TenantId tenantId, CustomerId customerId) {
log.trace("Executing unassignCustomerEntityViews, tenantId [{}], customerId [{}]", tenantId, customerId);
validateId(tenantId, INCORRECT_TENANT_ID + tenantId);
diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/ModelConstants.java b/dao/src/main/java/org/thingsboard/server/dao/model/ModelConstants.java
index 45d0ff9..9890ff6 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/model/ModelConstants.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/model/ModelConstants.java
@@ -150,15 +150,13 @@ public class ModelConstants {
public static final String ENTITY_VIEW_TENANT_ID_PROPERTY = TENANT_ID_PROPERTY;
public static final String ENTITY_VIEW_CUSTOMER_ID_PROPERTY = CUSTOMER_ID_PROPERTY;
public static final String ENTITY_VIEW_NAME_PROPERTY = DEVICE_NAME_PROPERTY;
- public static final String ENTITY_VIEW_BY_TENANT_AND_CUSTOMER_AND_ENTITY_AND_SEARCH_TEXT = "entity_views_by_tenant_and_customer_and_entity";
- public static final String ENTITY_VIEW_BY_TENANT_AND_CUSTOMER_AND_SEARCH_TEXT = "entity_views_by_tenant_and_customer";
+ public static final String ENTITY_VIEW_BY_TENANT_AND_CUSTOMER_AND_SEARCH_TEXT = "entity_view_by_tenant_and_customer";
public static final String ENTITY_VIEW_KEYS_PROPERTY = "keys";
public static final String ENTITY_VIEW_START_TS_PROPERTY = "start_ts";
public static final String ENTITY_VIEW_END_TS_PROPERTY = "end_ts";
public static final String ENTITY_VIEW_ADDITIONAL_INFO_PROPERTY = ADDITIONAL_INFO_PROPERTY;
public static final String ENTITY_VIEW_BY_TENANT_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME = "entity_view_by_tenant_and_search_text";
- public static final String ENTITY_VIEW_BY_TENANT_AND_NAME = "entity_views_by_tenant_and_name";
- public static final String ENTITY_VIEW_BY_TENANT_AND_ENTITY_AND_SEARCH_TEXT = "entity_view_by_tenant_and_entity";
+ public static final String ENTITY_VIEW_BY_TENANT_AND_NAME = "entity_view_by_tenant_and_name";
/**
* Cassandra audit log constants.
diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/nosql/EntityViewEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/EntityViewEntity.java
index 79dd497..eb7f4fe 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/model/nosql/EntityViewEntity.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/EntityViewEntity.java
@@ -24,10 +24,14 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
+import lombok.extern.slf4j.Slf4j;
import org.hibernate.annotations.Type;
import org.thingsboard.server.common.data.EntityType;
import org.thingsboard.server.common.data.EntityView;
-import org.thingsboard.server.common.data.id.*;
+import org.thingsboard.server.common.data.id.CustomerId;
+import org.thingsboard.server.common.data.id.EntityIdFactory;
+import org.thingsboard.server.common.data.id.EntityViewId;
+import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.data.objects.TelemetryEntityView;
import org.thingsboard.server.dao.model.ModelConstants;
import org.thingsboard.server.dao.model.SearchTextEntity;
@@ -48,6 +52,7 @@ import static org.thingsboard.server.dao.model.ModelConstants.ID_PROPERTY;
@Table(name = ENTITY_VIEW_TABLE_FAMILY_NAME)
@EqualsAndHashCode
@ToString
+@Slf4j
public class EntityViewEntity implements SearchTextEntity<EntityView> {
@PartitionKey(value = 0)
@@ -112,7 +117,7 @@ public class EntityViewEntity implements SearchTextEntity<EntityView> {
try {
this.keys = mapper.writeValueAsString(entityView.getKeys());
} catch (IOException e) {
- e.printStackTrace();
+ log.error("Unable to serialize entity view keys!", e);
}
this.startTs = entityView.getStartTimeMs();
this.endTs = entityView.getEndTimeMs();
@@ -142,7 +147,7 @@ public class EntityViewEntity implements SearchTextEntity<EntityView> {
try {
entityView.setKeys(mapper.readValue(keys, TelemetryEntityView.class));
} catch (IOException e) {
- e.printStackTrace();
+ log.error("Unable to read entity view keys!", e);
}
entityView.setStartTimeMs(startTs);
entityView.setEndTimeMs(endTs);
diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/EntityViewEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/EntityViewEntity.java
index 96d187c..60f6951 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/model/sql/EntityViewEntity.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/EntityViewEntity.java
@@ -20,18 +20,26 @@ import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
+import lombok.extern.slf4j.Slf4j;
import org.hibernate.annotations.Type;
import org.hibernate.annotations.TypeDef;
import org.thingsboard.server.common.data.EntityType;
import org.thingsboard.server.common.data.EntityView;
-import org.thingsboard.server.common.data.id.*;
+import org.thingsboard.server.common.data.id.CustomerId;
+import org.thingsboard.server.common.data.id.EntityIdFactory;
+import org.thingsboard.server.common.data.id.EntityViewId;
+import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.data.objects.TelemetryEntityView;
import org.thingsboard.server.dao.model.BaseSqlEntity;
import org.thingsboard.server.dao.model.ModelConstants;
import org.thingsboard.server.dao.model.SearchTextEntity;
import org.thingsboard.server.dao.util.mapping.JsonStringType;
-import javax.persistence.*;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.Table;
import java.io.IOException;
import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_TYPE_PROPERTY;
@@ -45,6 +53,7 @@ import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_TYPE_PROPER
@Entity
@TypeDef(name = "json", typeClass = JsonStringType.class)
@Table(name = ModelConstants.ENTITY_VIEW_TABLE_FAMILY_NAME)
+@Slf4j
public class EntityViewEntity extends BaseSqlEntity<EntityView> implements SearchTextEntity<EntityView> {
@Column(name = ModelConstants.ENTITY_VIEW_ENTITY_ID_PROPERTY)
@@ -103,7 +112,7 @@ public class EntityViewEntity extends BaseSqlEntity<EntityView> implements Searc
try {
this.keys = mapper.writeValueAsString(entityView.getKeys());
} catch (IOException e) {
- e.printStackTrace();
+ log.error("Unable to serialize entity view keys!", e);
}
this.startTs = entityView.getStartTimeMs();
this.endTs = entityView.getEndTimeMs();
@@ -139,7 +148,7 @@ public class EntityViewEntity extends BaseSqlEntity<EntityView> implements Searc
try {
entityView.setKeys(mapper.readValue(keys, TelemetryEntityView.class));
} catch (IOException e) {
- e.printStackTrace();
+ log.error("Unable to read entity view keys!", e);
}
entityView.setStartTimeMs(startTs);
entityView.setEndTimeMs(endTs);
diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/entityview/EntityViewRepository.java b/dao/src/main/java/org/thingsboard/server/dao/sql/entityview/EntityViewRepository.java
index f1ee3fd..0f5fdf5 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/sql/entityview/EntityViewRepository.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/sql/entityview/EntityViewRepository.java
@@ -41,16 +41,6 @@ public interface EntityViewRepository extends CrudRepository<EntityViewEntity, S
Pageable pageable);
@Query("SELECT e FROM EntityViewEntity e WHERE e.tenantId = :tenantId " +
- "AND e.entityId = :entityId " +
- "AND LOWER(e.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " +
- "AND e.id > :idOffset ORDER BY e.id")
- List<EntityViewEntity> findByTenantIdAndEntityId(@Param("tenantId") String tenantId,
- @Param("entityId") String entityId,
- @Param("textSearch") String textSearch,
- @Param("idOffset") String idOffset,
- Pageable pageable);
-
- @Query("SELECT e FROM EntityViewEntity e WHERE e.tenantId = :tenantId " +
"AND e.customerId = :customerId " +
"AND LOWER(e.searchText) LIKE LOWER(CONCAT(:searchText, '%')) " +
"AND e.id > :idOffset ORDER BY e.id")
@@ -60,25 +50,7 @@ public interface EntityViewRepository extends CrudRepository<EntityViewEntity, S
@Param("idOffset") String idOffset,
Pageable pageable);
- @Query("SELECT e FROM EntityViewEntity e WHERE e.tenantId = :tenantId " +
- "AND e.customerId = :customerId " +
- "AND e.entityId = :entityId " +
- "AND LOWER(e.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " +
- "AND e.id > :idOffset ORDER BY e.id")
- List<EntityViewEntity> findByTenantIdAndCustomerIdAndEntityId(@Param("tenantId") String tenantId,
- @Param("customerId") String customerId,
- @Param("entityId") String entityId,
- @Param("textSearch") String textSearch,
- @Param("idOffset") String idOffset,
- Pageable pageable);
-
EntityViewEntity findByTenantIdAndName(String tenantId, String name);
- List<EntityViewEntity> findAllByTenantIdAndCustomerIdAndIdIn(String tenantId,
- String customerId,
- List<String> entityViewsIds);
-
- List<EntityViewEntity> findAllByTenantIdAndIdIn(String tenantId, List<String> entityViewsIds);
-
List<EntityViewEntity> findAllByTenantIdAndEntityId(String tenantId, String entityId);
}
diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/entityview/JpaEntityViewDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/entityview/JpaEntityViewDao.java
index 4ff21ab..0cd1b2b 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/sql/entityview/JpaEntityViewDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/sql/entityview/JpaEntityViewDao.java
@@ -53,7 +53,7 @@ public class JpaEntityViewDao extends JpaAbstractSearchTextDao<EntityViewEntity,
implements EntityViewDao {
@Autowired
- EntityViewRepository entityViewRepository;
+ private EntityViewRepository entityViewRepository;
@Override
protected Class<EntityViewEntity> getEntityClass() {
@@ -82,19 +82,6 @@ public class JpaEntityViewDao extends JpaAbstractSearchTextDao<EntityViewEntity,
}
@Override
- public List<EntityView> findEntityViewByTenantIdAndEntityId(UUID tenantId,
- UUID entityId,
- TextPageLink pageLink) {
- return DaoUtil.convertDataList(
- entityViewRepository.findByTenantIdAndEntityId(
- fromTimeUUID(tenantId),
- fromTimeUUID(entityId),
- Objects.toString(pageLink.getTextSearch(), ""),
- pageLink.getIdOffset() == null ? NULL_UUID_STR : fromTimeUUID(pageLink.getIdOffset()),
- new PageRequest(0, pageLink.getLimit())));
- }
-
- @Override
public List<EntityView> findEntityViewsByTenantIdAndCustomerId(UUID tenantId,
UUID customerId,
TextPageLink pageLink) {
@@ -109,22 +96,6 @@ public class JpaEntityViewDao extends JpaAbstractSearchTextDao<EntityViewEntity,
}
@Override
- public List<EntityView> findEntityViewsByTenantIdAndCustomerIdAndEntityId(UUID tenantId,
- UUID customerId,
- UUID entityId,
- TextPageLink pageLink) {
- return DaoUtil.convertDataList(
- entityViewRepository.findByTenantIdAndCustomerIdAndEntityId(
- fromTimeUUID(tenantId),
- fromTimeUUID(customerId),
- fromTimeUUID(entityId),
- Objects.toString(pageLink.getTextSearch(), ""),
- pageLink.getIdOffset() == null ? NULL_UUID_STR : fromTimeUUID(pageLink.getIdOffset()),
- new PageRequest(0, pageLink.getLimit())
- ));
- }
-
- @Override
public ListenableFuture<List<EntityView>> findEntityViewsByTenantIdAndEntityIdAsync(UUID tenantId, UUID entityId) {
return service.submit(() -> DaoUtil.convertDataList(
entityViewRepository.findAllByTenantIdAndEntityId(UUIDConverter.fromTimeUUID(tenantId), UUIDConverter.fromTimeUUID(entityId))));
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 d92c941..a94e715 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
@@ -29,6 +29,7 @@ import org.thingsboard.server.dao.customer.CustomerService;
import org.thingsboard.server.dao.dashboard.DashboardService;
import org.thingsboard.server.dao.device.DeviceService;
import org.thingsboard.server.dao.entity.AbstractEntityService;
+import org.thingsboard.server.dao.entityview.EntityViewService;
import org.thingsboard.server.dao.exception.DataValidationException;
import org.thingsboard.server.dao.rule.RuleChainService;
import org.thingsboard.server.dao.service.DataValidator;
@@ -64,6 +65,9 @@ public class TenantServiceImpl extends AbstractEntityService implements TenantSe
private DeviceService deviceService;
@Autowired
+ private EntityViewService entityViewService;
+
+ @Autowired
private WidgetsBundleService widgetsBundleService;
@Autowired
@@ -103,6 +107,7 @@ public class TenantServiceImpl extends AbstractEntityService implements TenantSe
dashboardService.deleteDashboardsByTenantId(tenantId);
assetService.deleteAssetsByTenantId(tenantId);
deviceService.deleteDevicesByTenantId(tenantId);
+ entityViewService.deleteEntityViewsByTenantId(tenantId);
userService.deleteTenantAdmins(tenantId);
ruleChainService.deleteRuleChainsByTenantId(tenantId);
tenantDao.removeById(tenantId.getId());
dao/src/main/resources/cassandra/schema.cql 26(+2 -24)
diff --git a/dao/src/main/resources/cassandra/schema.cql b/dao/src/main/resources/cassandra/schema.cql
index 4645420..07cecd0 100644
--- a/dao/src/main/resources/cassandra/schema.cql
+++ b/dao/src/main/resources/cassandra/schema.cql
@@ -674,7 +674,7 @@ CREATE TABLE IF NOT EXISTS thingsboard.entity_views (
PRIMARY KEY (id, entity_id, tenant_id, customer_id)
);
-CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.entity_views_by_tenant_and_name AS
+CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.entity_view_by_tenant_and_name AS
SELECT *
from thingsboard.entity_views
WHERE tenant_id IS NOT NULL
@@ -696,18 +696,7 @@ CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.entity_view_by_tenant_and_sea
PRIMARY KEY (tenant_id, search_text, id, customer_id, entity_id)
WITH CLUSTERING ORDER BY (search_text ASC, id DESC, customer_id DESC);
-CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.entity_view_by_tenant_and_entity AS
- SELECT *
- from thingsboard.entity_views
- WHERE tenant_id IS NOT NULL
- AND customer_id IS NOT NULL
- AND entity_id IS NOT NULL
- AND search_text IS NOT NULL
- AND id IS NOT NULL
- PRIMARY KEY (tenant_id, entity_id, search_text, id, customer_id)
- WITH CLUSTERING ORDER BY (entity_id ASC, search_text ASC, id DESC, customer_id DESC);
-
-CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.entity_views_by_tenant_and_customer AS
+CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.entity_view_by_tenant_and_customer AS
SELECT *
from thingsboard.entity_views
WHERE tenant_id IS NOT NULL
@@ -717,14 +706,3 @@ CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.entity_views_by_tenant_and_cu
AND id IS NOT NULL
PRIMARY KEY (tenant_id, customer_id, search_text, id, entity_id)
WITH CLUSTERING ORDER BY (customer_id DESC, search_text ASC, id DESC);
-
-CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.entity_views_by_tenant_and_customer_and_entity AS
- SELECT *
- from thingsboard.entity_views
- WHERE tenant_id IS NOT NULL
- AND customer_id IS NOT NULL
- AND entity_id IS NOT NULL
- AND search_text IS NOT NULL
- AND id IS NOT NULL
- PRIMARY KEY (tenant_id, customer_id, entity_id, search_text, id)
- WITH CLUSTERING ORDER BY (customer_id DESC, entity_id ASC, search_text ASC, id DESC);
diff --git a/dao/src/test/resources/sql/drop-all-tables.sql b/dao/src/test/resources/sql/drop-all-tables.sql
index ebc04b3..b1fb72c 100644
--- a/dao/src/test/resources/sql/drop-all-tables.sql
+++ b/dao/src/test/resources/sql/drop-all-tables.sql
@@ -19,4 +19,4 @@ DROP TABLE IF EXISTS widget_type;
DROP TABLE IF EXISTS widgets_bundle;
DROP TABLE IF EXISTS rule_node;
DROP TABLE IF EXISTS rule_chain;
-DROP TABLE IF EXISTS entity_views;
\ No newline at end of file
+DROP TABLE IF EXISTS entity_views;