Commit f8d1fff4cc346f1867a729d1a9c1ed389bf2cfb5

Authored by Andrii Shvaika
1 parent 1e9016cb

New Alias

Showing 18 changed files with 102 additions and 38 deletions
@@ -44,6 +44,7 @@ import org.thingsboard.server.common.data.query.EntityDataSortOrder; @@ -44,6 +44,7 @@ import org.thingsboard.server.common.data.query.EntityDataSortOrder;
44 import org.thingsboard.server.common.data.query.EntityKey; 44 import org.thingsboard.server.common.data.query.EntityKey;
45 import org.thingsboard.server.common.data.query.EntityKeyType; 45 import org.thingsboard.server.common.data.query.EntityKeyType;
46 import org.thingsboard.server.common.data.query.EntityListFilter; 46 import org.thingsboard.server.common.data.query.EntityListFilter;
  47 +import org.thingsboard.server.common.data.query.EntityTypeFilter;
47 import org.thingsboard.server.common.data.query.FilterPredicateValue; 48 import org.thingsboard.server.common.data.query.FilterPredicateValue;
48 import org.thingsboard.server.common.data.query.KeyFilter; 49 import org.thingsboard.server.common.data.query.KeyFilter;
49 import org.thingsboard.server.common.data.query.NumericFilterPredicate; 50 import org.thingsboard.server.common.data.query.NumericFilterPredicate;
@@ -132,6 +133,14 @@ public abstract class BaseEntityQueryControllerTest extends AbstractControllerTe @@ -132,6 +133,14 @@ public abstract class BaseEntityQueryControllerTest extends AbstractControllerTe
132 133
133 count = doPostWithResponse("/api/entitiesQuery/count", countQuery, Long.class); 134 count = doPostWithResponse("/api/entitiesQuery/count", countQuery, Long.class);
134 Assert.assertEquals(97, count.longValue()); 135 Assert.assertEquals(97, count.longValue());
  136 +
  137 + EntityTypeFilter filter2 = new EntityTypeFilter();
  138 + filter2.setEntityType(EntityType.DEVICE);
  139 +
  140 + EntityCountQuery countQuery2 = new EntityCountQuery(filter2);
  141 +
  142 + Long count2 = doPostWithResponse("/api/entitiesQuery/count", countQuery2, Long.class);
  143 + Assert.assertEquals(97, count2.longValue());
135 } 144 }
136 145
137 @Test 146 @Test
@@ -198,11 +207,31 @@ public abstract class BaseEntityQueryControllerTest extends AbstractControllerTe @@ -198,11 +207,31 @@ public abstract class BaseEntityQueryControllerTest extends AbstractControllerTe
198 Assert.assertEquals(11, data.getTotalElements()); 207 Assert.assertEquals(11, data.getTotalElements());
199 Assert.assertEquals("Device19", data.getData().get(0).getLatest().get(EntityKeyType.ENTITY_FIELD).get("name").getValue()); 208 Assert.assertEquals("Device19", data.getData().get(0).getLatest().get(EntityKeyType.ENTITY_FIELD).get("name").getValue());
200 209
  210 +
  211 + EntityTypeFilter filter2 = new EntityTypeFilter();
  212 + filter2.setEntityType(EntityType.DEVICE);
  213 +
  214 + EntityDataSortOrder sortOrder2 = new EntityDataSortOrder(
  215 + new EntityKey(EntityKeyType.ENTITY_FIELD, "createdTime"), EntityDataSortOrder.Direction.ASC
  216 + );
  217 + EntityDataPageLink pageLink2 = new EntityDataPageLink(10, 0, null, sortOrder2);
  218 + List<EntityKey> entityFields2 = Collections.singletonList(new EntityKey(EntityKeyType.ENTITY_FIELD, "name"));
  219 +
  220 + EntityDataQuery query2 = new EntityDataQuery(filter2, pageLink2, entityFields2, null, null);
  221 +
  222 + PageData<EntityData> data2 =
  223 + doPostWithTypedResponse("/api/entitiesQuery/find", query2, new TypeReference<PageData<EntityData>>() {
  224 + });
  225 +
  226 + Assert.assertEquals(97, data2.getTotalElements());
  227 + Assert.assertEquals(10, data2.getTotalPages());
  228 + Assert.assertTrue(data2.hasNext());
  229 + Assert.assertEquals(10, data2.getData().size());
  230 +
201 } 231 }
202 232
203 @Test 233 @Test
204 public void testFindEntityDataByQueryWithAttributes() throws Exception { 234 public void testFindEntityDataByQueryWithAttributes() throws Exception {
205 -  
206 List<Device> devices = new ArrayList<>(); 235 List<Device> devices = new ArrayList<>();
207 List<Long> temperatures = new ArrayList<>(); 236 List<Long> temperatures = new ArrayList<>();
208 List<Long> highTemperatures = new ArrayList<>(); 237 List<Long> highTemperatures = new ArrayList<>();
@@ -26,9 +26,9 @@ import java.util.Arrays; @@ -26,9 +26,9 @@ import java.util.Arrays;
26 26
27 @RunWith(ClasspathSuite.class) 27 @RunWith(ClasspathSuite.class)
28 @ClasspathSuite.ClassnameFilters({ 28 @ClasspathSuite.ClassnameFilters({
29 - "org.thingsboard.server.controller.sql.WebsocketApiSqlTest",  
30 -// "org.thingsboard.server.controller.sql.TenantProfileControllerSqlTest",  
31 -// "org.thingsboard.server.controller.sql.*Test", 29 +// "org.thingsboard.server.controller.sql.WebsocketApiSqlTest",
  30 +// "org.thingsboard.server.controller.sql.EntityQueryControllerSqlTest",
  31 + "org.thingsboard.server.controller.sql.*Test",
32 }) 32 })
33 public class ControllerSqlTestSuite { 33 public class ControllerSqlTestSuite {
34 34
@@ -19,7 +19,7 @@ import lombok.Data; @@ -19,7 +19,7 @@ import lombok.Data;
19 import org.thingsboard.server.common.data.EntityType; 19 import org.thingsboard.server.common.data.EntityType;
20 import org.thingsboard.server.common.data.relation.EntityRelation; 20 import org.thingsboard.server.common.data.relation.EntityRelation;
21 import org.thingsboard.server.common.data.relation.EntityRelationsQuery; 21 import org.thingsboard.server.common.data.relation.EntityRelationsQuery;
22 -import org.thingsboard.server.common.data.relation.EntityTypeFilter; 22 +import org.thingsboard.server.common.data.relation.RelationEntityTypeFilter;
23 import org.thingsboard.server.common.data.relation.RelationsSearchParameters; 23 import org.thingsboard.server.common.data.relation.RelationsSearchParameters;
24 24
25 import java.util.Collections; 25 import java.util.Collections;
@@ -39,7 +39,7 @@ public class AssetSearchQuery { @@ -39,7 +39,7 @@ public class AssetSearchQuery {
39 EntityRelationsQuery query = new EntityRelationsQuery(); 39 EntityRelationsQuery query = new EntityRelationsQuery();
40 query.setParameters(parameters); 40 query.setParameters(parameters);
41 query.setFilters( 41 query.setFilters(
42 - Collections.singletonList(new EntityTypeFilter(relationType == null ? EntityRelation.CONTAINS_TYPE : relationType, 42 + Collections.singletonList(new RelationEntityTypeFilter(relationType == null ? EntityRelation.CONTAINS_TYPE : relationType,
43 Collections.singletonList(EntityType.ASSET)))); 43 Collections.singletonList(EntityType.ASSET))));
44 return query; 44 return query;
45 } 45 }
@@ -19,7 +19,7 @@ import lombok.Data; @@ -19,7 +19,7 @@ import lombok.Data;
19 import org.thingsboard.server.common.data.EntityType; 19 import org.thingsboard.server.common.data.EntityType;
20 import org.thingsboard.server.common.data.relation.EntityRelation; 20 import org.thingsboard.server.common.data.relation.EntityRelation;
21 import org.thingsboard.server.common.data.relation.EntityRelationsQuery; 21 import org.thingsboard.server.common.data.relation.EntityRelationsQuery;
22 -import org.thingsboard.server.common.data.relation.EntityTypeFilter; 22 +import org.thingsboard.server.common.data.relation.RelationEntityTypeFilter;
23 import org.thingsboard.server.common.data.relation.RelationsSearchParameters; 23 import org.thingsboard.server.common.data.relation.RelationsSearchParameters;
24 24
25 import java.util.Collections; 25 import java.util.Collections;
@@ -36,7 +36,7 @@ public class DeviceSearchQuery { @@ -36,7 +36,7 @@ public class DeviceSearchQuery {
36 EntityRelationsQuery query = new EntityRelationsQuery(); 36 EntityRelationsQuery query = new EntityRelationsQuery();
37 query.setParameters(parameters); 37 query.setParameters(parameters);
38 query.setFilters( 38 query.setFilters(
39 - Collections.singletonList(new EntityTypeFilter(relationType == null ? EntityRelation.CONTAINS_TYPE : relationType, 39 + Collections.singletonList(new RelationEntityTypeFilter(relationType == null ? EntityRelation.CONTAINS_TYPE : relationType,
40 Collections.singletonList(EntityType.DEVICE)))); 40 Collections.singletonList(EntityType.DEVICE))));
41 return query; 41 return query;
42 } 42 }
@@ -19,7 +19,7 @@ import lombok.Data; @@ -19,7 +19,7 @@ import lombok.Data;
19 import org.thingsboard.server.common.data.EntityType; 19 import org.thingsboard.server.common.data.EntityType;
20 import org.thingsboard.server.common.data.relation.EntityRelation; 20 import org.thingsboard.server.common.data.relation.EntityRelation;
21 import org.thingsboard.server.common.data.relation.EntityRelationsQuery; 21 import org.thingsboard.server.common.data.relation.EntityRelationsQuery;
22 -import org.thingsboard.server.common.data.relation.EntityTypeFilter; 22 +import org.thingsboard.server.common.data.relation.RelationEntityTypeFilter;
23 import org.thingsboard.server.common.data.relation.RelationsSearchParameters; 23 import org.thingsboard.server.common.data.relation.RelationsSearchParameters;
24 24
25 import java.util.Collections; 25 import java.util.Collections;
@@ -36,7 +36,7 @@ public class EntityViewSearchQuery { @@ -36,7 +36,7 @@ public class EntityViewSearchQuery {
36 EntityRelationsQuery query = new EntityRelationsQuery(); 36 EntityRelationsQuery query = new EntityRelationsQuery();
37 query.setParameters(parameters); 37 query.setParameters(parameters);
38 query.setFilters( 38 query.setFilters(
39 - Collections.singletonList(new EntityTypeFilter(relationType == null ? EntityRelation.CONTAINS_TYPE : relationType, 39 + Collections.singletonList(new RelationEntityTypeFilter(relationType == null ? EntityRelation.CONTAINS_TYPE : relationType,
40 Collections.singletonList(EntityType.ENTITY_VIEW)))); 40 Collections.singletonList(EntityType.ENTITY_VIEW))));
41 return query; 41 return query;
42 } 42 }
@@ -29,6 +29,7 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo; @@ -29,6 +29,7 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo;
29 @JsonSubTypes.Type(value = SingleEntityFilter.class, name = "singleEntity"), 29 @JsonSubTypes.Type(value = SingleEntityFilter.class, name = "singleEntity"),
30 @JsonSubTypes.Type(value = EntityListFilter.class, name = "entityList"), 30 @JsonSubTypes.Type(value = EntityListFilter.class, name = "entityList"),
31 @JsonSubTypes.Type(value = EntityNameFilter.class, name = "entityName"), 31 @JsonSubTypes.Type(value = EntityNameFilter.class, name = "entityName"),
  32 + @JsonSubTypes.Type(value = EntityTypeFilter.class, name = "entityType"),
32 @JsonSubTypes.Type(value = AssetTypeFilter.class, name = "assetType"), 33 @JsonSubTypes.Type(value = AssetTypeFilter.class, name = "assetType"),
33 @JsonSubTypes.Type(value = DeviceTypeFilter.class, name = "deviceType"), 34 @JsonSubTypes.Type(value = DeviceTypeFilter.class, name = "deviceType"),
34 @JsonSubTypes.Type(value = EntityViewTypeFilter.class, name = "entityViewType"), 35 @JsonSubTypes.Type(value = EntityViewTypeFilter.class, name = "entityViewType"),
@@ -19,6 +19,7 @@ public enum EntityFilterType { @@ -19,6 +19,7 @@ public enum EntityFilterType {
19 SINGLE_ENTITY("singleEntity"), 19 SINGLE_ENTITY("singleEntity"),
20 ENTITY_LIST("entityList"), 20 ENTITY_LIST("entityList"),
21 ENTITY_NAME("entityName"), 21 ENTITY_NAME("entityName"),
  22 + ENTITY_TYPE("entityType"),
22 ASSET_TYPE("assetType"), 23 ASSET_TYPE("assetType"),
23 DEVICE_TYPE("deviceType"), 24 DEVICE_TYPE("deviceType"),
24 ENTITY_VIEW_TYPE("entityViewType"), 25 ENTITY_VIEW_TYPE("entityViewType"),
  1 +/**
  2 + * Copyright © 2016-2021 The Thingsboard Authors
  3 + *
  4 + * Licensed under the Apache License, Version 2.0 (the "License");
  5 + * you may not use this file except in compliance with the License.
  6 + * You may obtain a copy of the License at
  7 + *
  8 + * http://www.apache.org/licenses/LICENSE-2.0
  9 + *
  10 + * Unless required by applicable law or agreed to in writing, software
  11 + * distributed under the License is distributed on an "AS IS" BASIS,
  12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13 + * See the License for the specific language governing permissions and
  14 + * limitations under the License.
  15 + */
  16 +package org.thingsboard.server.common.data.query;
  17 +
  18 +import lombok.Data;
  19 +import org.thingsboard.server.common.data.EntityType;
  20 +
  21 +@Data
  22 +public class EntityTypeFilter implements EntityFilter {
  23 + @Override
  24 + public EntityFilterType getType() {
  25 + return EntityFilterType.ENTITY_TYPE;
  26 + }
  27 +
  28 + private EntityType entityType;
  29 +
  30 +}
@@ -18,8 +18,7 @@ package org.thingsboard.server.common.data.query; @@ -18,8 +18,7 @@ package org.thingsboard.server.common.data.query;
18 import lombok.Data; 18 import lombok.Data;
19 import org.thingsboard.server.common.data.id.EntityId; 19 import org.thingsboard.server.common.data.id.EntityId;
20 import org.thingsboard.server.common.data.relation.EntitySearchDirection; 20 import org.thingsboard.server.common.data.relation.EntitySearchDirection;
21 -import org.thingsboard.server.common.data.relation.EntityTypeFilter;  
22 -import org.thingsboard.server.common.data.relation.RelationTypeGroup; 21 +import org.thingsboard.server.common.data.relation.RelationEntityTypeFilter;
23 22
24 import java.util.List; 23 import java.util.List;
25 24
@@ -33,7 +32,7 @@ public class RelationsQueryFilter implements EntityFilter { @@ -33,7 +32,7 @@ public class RelationsQueryFilter implements EntityFilter {
33 32
34 private EntityId rootEntity; 33 private EntityId rootEntity;
35 private EntitySearchDirection direction; 34 private EntitySearchDirection direction;
36 - private List<EntityTypeFilter> filters; 35 + private List<RelationEntityTypeFilter> filters;
37 private int maxLevel; 36 private int maxLevel;
38 private boolean fetchLastLevelOnly; 37 private boolean fetchLastLevelOnly;
39 38
@@ -26,6 +26,6 @@ import java.util.List; @@ -26,6 +26,6 @@ import java.util.List;
26 public class EntityRelationsQuery { 26 public class EntityRelationsQuery {
27 27
28 private RelationsSearchParameters parameters; 28 private RelationsSearchParameters parameters;
29 - private List<EntityTypeFilter> filters; 29 + private List<RelationEntityTypeFilter> filters;
30 30
31 } 31 }
common/data/src/main/java/org/thingsboard/server/common/data/relation/RelationEntityTypeFilter.java renamed from common/data/src/main/java/org/thingsboard/server/common/data/relation/EntityTypeFilter.java
@@ -26,7 +26,7 @@ import java.util.List; @@ -26,7 +26,7 @@ import java.util.List;
26 */ 26 */
27 @Data 27 @Data
28 @AllArgsConstructor 28 @AllArgsConstructor
29 -public class EntityTypeFilter { 29 +public class RelationEntityTypeFilter {
30 30
31 private String relationType; 31 private String relationType;
32 32
@@ -35,7 +35,7 @@ import org.thingsboard.server.common.data.relation.EntityRelation; @@ -35,7 +35,7 @@ import org.thingsboard.server.common.data.relation.EntityRelation;
35 import org.thingsboard.server.common.data.relation.EntityRelationInfo; 35 import org.thingsboard.server.common.data.relation.EntityRelationInfo;
36 import org.thingsboard.server.common.data.relation.EntityRelationsQuery; 36 import org.thingsboard.server.common.data.relation.EntityRelationsQuery;
37 import org.thingsboard.server.common.data.relation.EntitySearchDirection; 37 import org.thingsboard.server.common.data.relation.EntitySearchDirection;
38 -import org.thingsboard.server.common.data.relation.EntityTypeFilter; 38 +import org.thingsboard.server.common.data.relation.RelationEntityTypeFilter;
39 import org.thingsboard.server.common.data.relation.RelationTypeGroup; 39 import org.thingsboard.server.common.data.relation.RelationTypeGroup;
40 import org.thingsboard.server.common.data.relation.RelationsSearchParameters; 40 import org.thingsboard.server.common.data.relation.RelationsSearchParameters;
41 import org.thingsboard.server.dao.entity.EntityService; 41 import org.thingsboard.server.dao.entity.EntityService;
@@ -457,7 +457,7 @@ public class BaseRelationService implements RelationService { @@ -457,7 +457,7 @@ public class BaseRelationService implements RelationService {
457 //boolean fetchLastLevelOnly = true; 457 //boolean fetchLastLevelOnly = true;
458 log.trace("Executing findByQuery [{}]", query); 458 log.trace("Executing findByQuery [{}]", query);
459 RelationsSearchParameters params = query.getParameters(); 459 RelationsSearchParameters params = query.getParameters();
460 - final List<EntityTypeFilter> filters = query.getFilters(); 460 + final List<RelationEntityTypeFilter> filters = query.getFilters();
461 if (filters == null || filters.isEmpty()) { 461 if (filters == null || filters.isEmpty()) {
462 log.debug("Filters are not set [{}]", query); 462 log.debug("Filters are not set [{}]", query);
463 } 463 }
@@ -575,8 +575,8 @@ public class BaseRelationService implements RelationService { @@ -575,8 +575,8 @@ public class BaseRelationService implements RelationService {
575 }; 575 };
576 } 576 }
577 577
578 - private boolean matchFilters(List<EntityTypeFilter> filters, EntityRelation relation, EntitySearchDirection direction) {  
579 - for (EntityTypeFilter filter : filters) { 578 + private boolean matchFilters(List<RelationEntityTypeFilter> filters, EntityRelation relation, EntitySearchDirection direction) {
  579 + for (RelationEntityTypeFilter filter : filters) {
580 if (match(filter, relation, direction)) { 580 if (match(filter, relation, direction)) {
581 return true; 581 return true;
582 } 582 }
@@ -584,7 +584,7 @@ public class BaseRelationService implements RelationService { @@ -584,7 +584,7 @@ public class BaseRelationService implements RelationService {
584 return false; 584 return false;
585 } 585 }
586 586
587 - private boolean match(EntityTypeFilter filter, EntityRelation relation, EntitySearchDirection direction) { 587 + private boolean match(RelationEntityTypeFilter filter, EntityRelation relation, EntitySearchDirection direction) {
588 if (StringUtils.isEmpty(filter.getRelationType()) || filter.getRelationType().equals(relation.getType())) { 588 if (StringUtils.isEmpty(filter.getRelationType()) || filter.getRelationType().equals(relation.getType())) {
589 if (filter.getEntityTypes() == null || filter.getEntityTypes().isEmpty()) { 589 if (filter.getEntityTypes() == null || filter.getEntityTypes().isEmpty()) {
590 return true; 590 return true;
@@ -40,12 +40,13 @@ import org.thingsboard.server.common.data.query.EntityKeyType; @@ -40,12 +40,13 @@ import org.thingsboard.server.common.data.query.EntityKeyType;
40 import org.thingsboard.server.common.data.query.EntityListFilter; 40 import org.thingsboard.server.common.data.query.EntityListFilter;
41 import org.thingsboard.server.common.data.query.EntityNameFilter; 41 import org.thingsboard.server.common.data.query.EntityNameFilter;
42 import org.thingsboard.server.common.data.query.EntitySearchQueryFilter; 42 import org.thingsboard.server.common.data.query.EntitySearchQueryFilter;
  43 +import org.thingsboard.server.common.data.query.EntityTypeFilter;
43 import org.thingsboard.server.common.data.query.EntityViewSearchQueryFilter; 44 import org.thingsboard.server.common.data.query.EntityViewSearchQueryFilter;
44 import org.thingsboard.server.common.data.query.EntityViewTypeFilter; 45 import org.thingsboard.server.common.data.query.EntityViewTypeFilter;
45 import org.thingsboard.server.common.data.query.RelationsQueryFilter; 46 import org.thingsboard.server.common.data.query.RelationsQueryFilter;
46 import org.thingsboard.server.common.data.query.SingleEntityFilter; 47 import org.thingsboard.server.common.data.query.SingleEntityFilter;
47 import org.thingsboard.server.common.data.relation.EntitySearchDirection; 48 import org.thingsboard.server.common.data.relation.EntitySearchDirection;
48 -import org.thingsboard.server.common.data.relation.EntityTypeFilter; 49 +import org.thingsboard.server.common.data.relation.RelationEntityTypeFilter;
49 50
50 import java.util.Arrays; 51 import java.util.Arrays;
51 import java.util.Collections; 52 import java.util.Collections;
@@ -488,6 +489,7 @@ public class DefaultEntityQueryRepository implements EntityQueryRepository { @@ -488,6 +489,7 @@ public class DefaultEntityQueryRepository implements EntityQueryRepository {
488 case ASSET_SEARCH_QUERY: 489 case ASSET_SEARCH_QUERY:
489 case ENTITY_VIEW_SEARCH_QUERY: 490 case ENTITY_VIEW_SEARCH_QUERY:
490 case API_USAGE_STATE: 491 case API_USAGE_STATE:
  492 + case ENTITY_TYPE:
491 return ""; 493 return "";
492 default: 494 default:
493 throw new RuntimeException("Not implemented!"); 495 throw new RuntimeException("Not implemented!");
@@ -573,7 +575,7 @@ public class DefaultEntityQueryRepository implements EntityQueryRepository { @@ -573,7 +575,7 @@ public class DefaultEntityQueryRepository implements EntityQueryRepository {
573 boolean single = entityFilter.getFilters() != null && entityFilter.getFilters().size() == 1; 575 boolean single = entityFilter.getFilters() != null && entityFilter.getFilters().size() == 1;
574 if (entityFilter.getFilters() != null && !entityFilter.getFilters().isEmpty()) { 576 if (entityFilter.getFilters() != null && !entityFilter.getFilters().isEmpty()) {
575 int entityTypeFilterIdx = 0; 577 int entityTypeFilterIdx = 0;
576 - for (EntityTypeFilter etf : entityFilter.getFilters()) { 578 + for (RelationEntityTypeFilter etf : entityFilter.getFilters()) {
577 String etfCondition = buildEtfCondition(ctx, etf, entityFilter.getDirection(), entityTypeFilterIdx++); 579 String etfCondition = buildEtfCondition(ctx, etf, entityFilter.getDirection(), entityTypeFilterIdx++);
578 if (!etfCondition.isEmpty()) { 580 if (!etfCondition.isEmpty()) {
579 if (noConditions) { 581 if (noConditions) {
@@ -622,7 +624,7 @@ public class DefaultEntityQueryRepository implements EntityQueryRepository { @@ -622,7 +624,7 @@ public class DefaultEntityQueryRepository implements EntityQueryRepository {
622 return "( " + selectFields + from + ")"; 624 return "( " + selectFields + from + ")";
623 } 625 }
624 626
625 - private String buildEtfCondition(QueryContext ctx, EntityTypeFilter etf, EntitySearchDirection direction, int entityTypeFilterIdx) { 627 + private String buildEtfCondition(QueryContext ctx, RelationEntityTypeFilter etf, EntitySearchDirection direction, int entityTypeFilterIdx) {
626 StringBuilder whereFilter = new StringBuilder(); 628 StringBuilder whereFilter = new StringBuilder();
627 String relationType = etf.getRelationType(); 629 String relationType = etf.getRelationType();
628 List<EntityType> entityTypes = etf.getEntityTypes(); 630 List<EntityType> entityTypes = etf.getEntityTypes();
@@ -728,6 +730,8 @@ public class DefaultEntityQueryRepository implements EntityQueryRepository { @@ -728,6 +730,8 @@ public class DefaultEntityQueryRepository implements EntityQueryRepository {
728 return ((EntityListFilter) entityFilter).getEntityType(); 730 return ((EntityListFilter) entityFilter).getEntityType();
729 case ENTITY_NAME: 731 case ENTITY_NAME:
730 return ((EntityNameFilter) entityFilter).getEntityType(); 732 return ((EntityNameFilter) entityFilter).getEntityType();
  733 + case ENTITY_TYPE:
  734 + return ((EntityTypeFilter) entityFilter).getEntityType();
731 case ASSET_TYPE: 735 case ASSET_TYPE:
732 case ASSET_SEARCH_QUERY: 736 case ASSET_SEARCH_QUERY:
733 return EntityType.ASSET; 737 return EntityType.ASSET;
@@ -58,7 +58,7 @@ import org.thingsboard.server.common.data.query.RelationsQueryFilter; @@ -58,7 +58,7 @@ import org.thingsboard.server.common.data.query.RelationsQueryFilter;
58 import org.thingsboard.server.common.data.query.StringFilterPredicate; 58 import org.thingsboard.server.common.data.query.StringFilterPredicate;
59 import org.thingsboard.server.common.data.relation.EntityRelation; 59 import org.thingsboard.server.common.data.relation.EntityRelation;
60 import org.thingsboard.server.common.data.relation.EntitySearchDirection; 60 import org.thingsboard.server.common.data.relation.EntitySearchDirection;
61 -import org.thingsboard.server.common.data.relation.EntityTypeFilter; 61 +import org.thingsboard.server.common.data.relation.RelationEntityTypeFilter;
62 import org.thingsboard.server.common.data.relation.RelationTypeGroup; 62 import org.thingsboard.server.common.data.relation.RelationTypeGroup;
63 import org.thingsboard.server.dao.attributes.AttributesService; 63 import org.thingsboard.server.dao.attributes.AttributesService;
64 import org.thingsboard.server.dao.model.sqlts.ts.TsKvEntity; 64 import org.thingsboard.server.dao.model.sqlts.ts.TsKvEntity;
@@ -160,13 +160,13 @@ public abstract class BaseEntityServiceTest extends AbstractServiceTest { @@ -160,13 +160,13 @@ public abstract class BaseEntityServiceTest extends AbstractServiceTest {
160 long count = entityService.countEntitiesByQuery(tenantId, new CustomerId(CustomerId.NULL_UUID), countQuery); 160 long count = entityService.countEntitiesByQuery(tenantId, new CustomerId(CustomerId.NULL_UUID), countQuery);
161 Assert.assertEquals(30, count); 161 Assert.assertEquals(30, count);
162 162
163 - filter.setFilters(Collections.singletonList(new EntityTypeFilter("Contains", Collections.singletonList(EntityType.DEVICE)))); 163 + filter.setFilters(Collections.singletonList(new RelationEntityTypeFilter("Contains", Collections.singletonList(EntityType.DEVICE))));
164 count = entityService.countEntitiesByQuery(tenantId, new CustomerId(CustomerId.NULL_UUID), countQuery); 164 count = entityService.countEntitiesByQuery(tenantId, new CustomerId(CustomerId.NULL_UUID), countQuery);
165 Assert.assertEquals(25, count); 165 Assert.assertEquals(25, count);
166 166
167 filter.setRootEntity(devices.get(0).getId()); 167 filter.setRootEntity(devices.get(0).getId());
168 filter.setDirection(EntitySearchDirection.TO); 168 filter.setDirection(EntitySearchDirection.TO);
169 - filter.setFilters(Collections.singletonList(new EntityTypeFilter("Manages", Collections.singletonList(EntityType.TENANT)))); 169 + filter.setFilters(Collections.singletonList(new RelationEntityTypeFilter("Manages", Collections.singletonList(EntityType.TENANT))));
170 count = entityService.countEntitiesByQuery(tenantId, new CustomerId(CustomerId.NULL_UUID), countQuery); 170 count = entityService.countEntitiesByQuery(tenantId, new CustomerId(CustomerId.NULL_UUID), countQuery);
171 Assert.assertEquals(1, count); 171 Assert.assertEquals(1, count);
172 172
@@ -228,7 +228,7 @@ public abstract class BaseEntityServiceTest extends AbstractServiceTest { @@ -228,7 +228,7 @@ public abstract class BaseEntityServiceTest extends AbstractServiceTest {
228 RelationsQueryFilter filter = new RelationsQueryFilter(); 228 RelationsQueryFilter filter = new RelationsQueryFilter();
229 filter.setRootEntity(tenantId); 229 filter.setRootEntity(tenantId);
230 filter.setDirection(EntitySearchDirection.FROM); 230 filter.setDirection(EntitySearchDirection.FROM);
231 - filter.setFilters(Collections.singletonList(new EntityTypeFilter("Contains", Collections.singletonList(EntityType.DEVICE)))); 231 + filter.setFilters(Collections.singletonList(new RelationEntityTypeFilter("Contains", Collections.singletonList(EntityType.DEVICE))));
232 232
233 EntityDataSortOrder sortOrder = new EntityDataSortOrder( 233 EntityDataSortOrder sortOrder = new EntityDataSortOrder(
234 new EntityKey(EntityKeyType.ENTITY_FIELD, "createdTime"), EntityDataSortOrder.Direction.ASC 234 new EntityKey(EntityKeyType.ENTITY_FIELD, "createdTime"), EntityDataSortOrder.Direction.ASC
@@ -26,7 +26,7 @@ import org.thingsboard.server.common.data.id.DeviceId; @@ -26,7 +26,7 @@ import org.thingsboard.server.common.data.id.DeviceId;
26 import org.thingsboard.server.common.data.relation.EntityRelation; 26 import org.thingsboard.server.common.data.relation.EntityRelation;
27 import org.thingsboard.server.common.data.relation.EntityRelationsQuery; 27 import org.thingsboard.server.common.data.relation.EntityRelationsQuery;
28 import org.thingsboard.server.common.data.relation.EntitySearchDirection; 28 import org.thingsboard.server.common.data.relation.EntitySearchDirection;
29 -import org.thingsboard.server.common.data.relation.EntityTypeFilter; 29 +import org.thingsboard.server.common.data.relation.RelationEntityTypeFilter;
30 import org.thingsboard.server.common.data.relation.RelationTypeGroup; 30 import org.thingsboard.server.common.data.relation.RelationTypeGroup;
31 import org.thingsboard.server.common.data.relation.RelationsSearchParameters; 31 import org.thingsboard.server.common.data.relation.RelationsSearchParameters;
32 import org.thingsboard.server.dao.exception.DataValidationException; 32 import org.thingsboard.server.dao.exception.DataValidationException;
@@ -221,7 +221,7 @@ public abstract class BaseRelationServiceTest extends AbstractServiceTest { @@ -221,7 +221,7 @@ public abstract class BaseRelationServiceTest extends AbstractServiceTest {
221 221
222 EntityRelationsQuery query = new EntityRelationsQuery(); 222 EntityRelationsQuery query = new EntityRelationsQuery();
223 query.setParameters(new RelationsSearchParameters(assetA, EntitySearchDirection.FROM, -1, false)); 223 query.setParameters(new RelationsSearchParameters(assetA, EntitySearchDirection.FROM, -1, false));
224 - query.setFilters(Collections.singletonList(new EntityTypeFilter(EntityRelation.CONTAINS_TYPE, Collections.singletonList(EntityType.ASSET)))); 224 + query.setFilters(Collections.singletonList(new RelationEntityTypeFilter(EntityRelation.CONTAINS_TYPE, Collections.singletonList(EntityType.ASSET))));
225 List<EntityRelation> relations = relationService.findByQuery(SYSTEM_TENANT_ID, query).get(); 225 List<EntityRelation> relations = relationService.findByQuery(SYSTEM_TENANT_ID, query).get();
226 Assert.assertEquals(3, relations.size()); 226 Assert.assertEquals(3, relations.size());
227 Assert.assertTrue(relations.contains(relationA)); 227 Assert.assertTrue(relations.contains(relationA));
@@ -255,7 +255,7 @@ public abstract class BaseRelationServiceTest extends AbstractServiceTest { @@ -255,7 +255,7 @@ public abstract class BaseRelationServiceTest extends AbstractServiceTest {
255 255
256 EntityRelationsQuery query = new EntityRelationsQuery(); 256 EntityRelationsQuery query = new EntityRelationsQuery();
257 query.setParameters(new RelationsSearchParameters(assetA, EntitySearchDirection.FROM, -1, false)); 257 query.setParameters(new RelationsSearchParameters(assetA, EntitySearchDirection.FROM, -1, false));
258 - query.setFilters(Collections.singletonList(new EntityTypeFilter(EntityRelation.CONTAINS_TYPE, Collections.singletonList(EntityType.ASSET)))); 258 + query.setFilters(Collections.singletonList(new RelationEntityTypeFilter(EntityRelation.CONTAINS_TYPE, Collections.singletonList(EntityType.ASSET))));
259 List<EntityRelation> relations = relationService.findByQuery(SYSTEM_TENANT_ID, query).get(); 259 List<EntityRelation> relations = relationService.findByQuery(SYSTEM_TENANT_ID, query).get();
260 Assert.assertEquals(2, relations.size()); 260 Assert.assertEquals(2, relations.size());
261 Assert.assertTrue(relations.contains(relationAB)); 261 Assert.assertTrue(relations.contains(relationAB));
@@ -17,7 +17,7 @@ package org.thingsboard.rule.engine.data; @@ -17,7 +17,7 @@ package org.thingsboard.rule.engine.data;
17 17
18 import lombok.Data; 18 import lombok.Data;
19 import org.thingsboard.server.common.data.relation.EntitySearchDirection; 19 import org.thingsboard.server.common.data.relation.EntitySearchDirection;
20 -import org.thingsboard.server.common.data.relation.EntityTypeFilter; 20 +import org.thingsboard.server.common.data.relation.RelationEntityTypeFilter;
21 21
22 import java.util.List; 22 import java.util.List;
23 23
@@ -26,6 +26,6 @@ public class RelationsQuery { @@ -26,6 +26,6 @@ public class RelationsQuery {
26 26
27 private EntitySearchDirection direction; 27 private EntitySearchDirection direction;
28 private int maxLevel = 1; 28 private int maxLevel = 1;
29 - private List<EntityTypeFilter> filters; 29 + private List<RelationEntityTypeFilter> filters;
30 private boolean fetchLastLevelOnly = false; 30 private boolean fetchLastLevelOnly = false;
31 } 31 }
@@ -19,7 +19,7 @@ import lombok.Data; @@ -19,7 +19,7 @@ import lombok.Data;
19 import org.thingsboard.rule.engine.data.RelationsQuery; 19 import org.thingsboard.rule.engine.data.RelationsQuery;
20 import org.thingsboard.server.common.data.relation.EntityRelation; 20 import org.thingsboard.server.common.data.relation.EntityRelation;
21 import org.thingsboard.server.common.data.relation.EntitySearchDirection; 21 import org.thingsboard.server.common.data.relation.EntitySearchDirection;
22 -import org.thingsboard.server.common.data.relation.EntityTypeFilter; 22 +import org.thingsboard.server.common.data.relation.RelationEntityTypeFilter;
23 23
24 import java.util.Collections; 24 import java.util.Collections;
25 import java.util.HashMap; 25 import java.util.HashMap;
@@ -41,8 +41,8 @@ public class TbGetRelatedAttrNodeConfiguration extends TbGetEntityAttrNodeConfig @@ -41,8 +41,8 @@ public class TbGetRelatedAttrNodeConfiguration extends TbGetEntityAttrNodeConfig
41 RelationsQuery relationsQuery = new RelationsQuery(); 41 RelationsQuery relationsQuery = new RelationsQuery();
42 relationsQuery.setDirection(EntitySearchDirection.FROM); 42 relationsQuery.setDirection(EntitySearchDirection.FROM);
43 relationsQuery.setMaxLevel(1); 43 relationsQuery.setMaxLevel(1);
44 - EntityTypeFilter entityTypeFilter = new EntityTypeFilter(EntityRelation.CONTAINS_TYPE, Collections.emptyList());  
45 - relationsQuery.setFilters(Collections.singletonList(entityTypeFilter)); 44 + RelationEntityTypeFilter relationEntityTypeFilter = new RelationEntityTypeFilter(EntityRelation.CONTAINS_TYPE, Collections.emptyList());
  45 + relationsQuery.setFilters(Collections.singletonList(relationEntityTypeFilter));
46 configuration.setRelationsQuery(relationsQuery); 46 configuration.setRelationsQuery(relationsQuery);
47 47
48 return configuration; 48 return configuration;
@@ -20,7 +20,7 @@ import org.thingsboard.rule.engine.api.NodeConfiguration; @@ -20,7 +20,7 @@ import org.thingsboard.rule.engine.api.NodeConfiguration;
20 import org.thingsboard.rule.engine.data.RelationsQuery; 20 import org.thingsboard.rule.engine.data.RelationsQuery;
21 import org.thingsboard.server.common.data.relation.EntityRelation; 21 import org.thingsboard.server.common.data.relation.EntityRelation;
22 import org.thingsboard.server.common.data.relation.EntitySearchDirection; 22 import org.thingsboard.server.common.data.relation.EntitySearchDirection;
23 -import org.thingsboard.server.common.data.relation.EntityTypeFilter; 23 +import org.thingsboard.server.common.data.relation.RelationEntityTypeFilter;
24 24
25 import java.util.Collections; 25 import java.util.Collections;
26 26
@@ -39,8 +39,8 @@ public class TbChangeOriginatorNodeConfiguration extends TbTransformNodeConfigur @@ -39,8 +39,8 @@ public class TbChangeOriginatorNodeConfiguration extends TbTransformNodeConfigur
39 RelationsQuery relationsQuery = new RelationsQuery(); 39 RelationsQuery relationsQuery = new RelationsQuery();
40 relationsQuery.setDirection(EntitySearchDirection.FROM); 40 relationsQuery.setDirection(EntitySearchDirection.FROM);
41 relationsQuery.setMaxLevel(1); 41 relationsQuery.setMaxLevel(1);
42 - EntityTypeFilter entityTypeFilter = new EntityTypeFilter(EntityRelation.CONTAINS_TYPE, Collections.emptyList());  
43 - relationsQuery.setFilters(Collections.singletonList(entityTypeFilter)); 42 + RelationEntityTypeFilter relationEntityTypeFilter = new RelationEntityTypeFilter(EntityRelation.CONTAINS_TYPE, Collections.emptyList());
  43 + relationsQuery.setFilters(Collections.singletonList(relationEntityTypeFilter));
44 configuration.setRelationsQuery(relationsQuery); 44 configuration.setRelationsQuery(relationsQuery);
45 45
46 return configuration; 46 return configuration;