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