New Alias
This commit is contained in:
parent
1e9016cb47
commit
f8d1fff4cc
@ -44,6 +44,7 @@ import org.thingsboard.server.common.data.query.EntityDataSortOrder;
|
|||||||
import org.thingsboard.server.common.data.query.EntityKey;
|
import org.thingsboard.server.common.data.query.EntityKey;
|
||||||
import org.thingsboard.server.common.data.query.EntityKeyType;
|
import org.thingsboard.server.common.data.query.EntityKeyType;
|
||||||
import org.thingsboard.server.common.data.query.EntityListFilter;
|
import org.thingsboard.server.common.data.query.EntityListFilter;
|
||||||
|
import org.thingsboard.server.common.data.query.EntityTypeFilter;
|
||||||
import org.thingsboard.server.common.data.query.FilterPredicateValue;
|
import org.thingsboard.server.common.data.query.FilterPredicateValue;
|
||||||
import org.thingsboard.server.common.data.query.KeyFilter;
|
import org.thingsboard.server.common.data.query.KeyFilter;
|
||||||
import org.thingsboard.server.common.data.query.NumericFilterPredicate;
|
import org.thingsboard.server.common.data.query.NumericFilterPredicate;
|
||||||
@ -132,6 +133,14 @@ public abstract class BaseEntityQueryControllerTest extends AbstractControllerTe
|
|||||||
|
|
||||||
count = doPostWithResponse("/api/entitiesQuery/count", countQuery, Long.class);
|
count = doPostWithResponse("/api/entitiesQuery/count", countQuery, Long.class);
|
||||||
Assert.assertEquals(97, count.longValue());
|
Assert.assertEquals(97, count.longValue());
|
||||||
|
|
||||||
|
EntityTypeFilter filter2 = new EntityTypeFilter();
|
||||||
|
filter2.setEntityType(EntityType.DEVICE);
|
||||||
|
|
||||||
|
EntityCountQuery countQuery2 = new EntityCountQuery(filter2);
|
||||||
|
|
||||||
|
Long count2 = doPostWithResponse("/api/entitiesQuery/count", countQuery2, Long.class);
|
||||||
|
Assert.assertEquals(97, count2.longValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -198,11 +207,31 @@ public abstract class BaseEntityQueryControllerTest extends AbstractControllerTe
|
|||||||
Assert.assertEquals(11, data.getTotalElements());
|
Assert.assertEquals(11, data.getTotalElements());
|
||||||
Assert.assertEquals("Device19", data.getData().get(0).getLatest().get(EntityKeyType.ENTITY_FIELD).get("name").getValue());
|
Assert.assertEquals("Device19", data.getData().get(0).getLatest().get(EntityKeyType.ENTITY_FIELD).get("name").getValue());
|
||||||
|
|
||||||
|
|
||||||
|
EntityTypeFilter filter2 = new EntityTypeFilter();
|
||||||
|
filter2.setEntityType(EntityType.DEVICE);
|
||||||
|
|
||||||
|
EntityDataSortOrder sortOrder2 = new EntityDataSortOrder(
|
||||||
|
new EntityKey(EntityKeyType.ENTITY_FIELD, "createdTime"), EntityDataSortOrder.Direction.ASC
|
||||||
|
);
|
||||||
|
EntityDataPageLink pageLink2 = new EntityDataPageLink(10, 0, null, sortOrder2);
|
||||||
|
List<EntityKey> entityFields2 = Collections.singletonList(new EntityKey(EntityKeyType.ENTITY_FIELD, "name"));
|
||||||
|
|
||||||
|
EntityDataQuery query2 = new EntityDataQuery(filter2, pageLink2, entityFields2, null, null);
|
||||||
|
|
||||||
|
PageData<EntityData> data2 =
|
||||||
|
doPostWithTypedResponse("/api/entitiesQuery/find", query2, new TypeReference<PageData<EntityData>>() {
|
||||||
|
});
|
||||||
|
|
||||||
|
Assert.assertEquals(97, data2.getTotalElements());
|
||||||
|
Assert.assertEquals(10, data2.getTotalPages());
|
||||||
|
Assert.assertTrue(data2.hasNext());
|
||||||
|
Assert.assertEquals(10, data2.getData().size());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testFindEntityDataByQueryWithAttributes() throws Exception {
|
public void testFindEntityDataByQueryWithAttributes() throws Exception {
|
||||||
|
|
||||||
List<Device> devices = new ArrayList<>();
|
List<Device> devices = new ArrayList<>();
|
||||||
List<Long> temperatures = new ArrayList<>();
|
List<Long> temperatures = new ArrayList<>();
|
||||||
List<Long> highTemperatures = new ArrayList<>();
|
List<Long> highTemperatures = new ArrayList<>();
|
||||||
|
|||||||
@ -26,9 +26,9 @@ import java.util.Arrays;
|
|||||||
|
|
||||||
@RunWith(ClasspathSuite.class)
|
@RunWith(ClasspathSuite.class)
|
||||||
@ClasspathSuite.ClassnameFilters({
|
@ClasspathSuite.ClassnameFilters({
|
||||||
"org.thingsboard.server.controller.sql.WebsocketApiSqlTest",
|
// "org.thingsboard.server.controller.sql.WebsocketApiSqlTest",
|
||||||
// "org.thingsboard.server.controller.sql.TenantProfileControllerSqlTest",
|
// "org.thingsboard.server.controller.sql.EntityQueryControllerSqlTest",
|
||||||
// "org.thingsboard.server.controller.sql.*Test",
|
"org.thingsboard.server.controller.sql.*Test",
|
||||||
})
|
})
|
||||||
public class ControllerSqlTestSuite {
|
public class ControllerSqlTestSuite {
|
||||||
|
|
||||||
|
|||||||
@ -19,7 +19,7 @@ import lombok.Data;
|
|||||||
import org.thingsboard.server.common.data.EntityType;
|
import org.thingsboard.server.common.data.EntityType;
|
||||||
import org.thingsboard.server.common.data.relation.EntityRelation;
|
import org.thingsboard.server.common.data.relation.EntityRelation;
|
||||||
import org.thingsboard.server.common.data.relation.EntityRelationsQuery;
|
import org.thingsboard.server.common.data.relation.EntityRelationsQuery;
|
||||||
import org.thingsboard.server.common.data.relation.EntityTypeFilter;
|
import org.thingsboard.server.common.data.relation.RelationEntityTypeFilter;
|
||||||
import org.thingsboard.server.common.data.relation.RelationsSearchParameters;
|
import org.thingsboard.server.common.data.relation.RelationsSearchParameters;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
@ -39,7 +39,7 @@ public class AssetSearchQuery {
|
|||||||
EntityRelationsQuery query = new EntityRelationsQuery();
|
EntityRelationsQuery query = new EntityRelationsQuery();
|
||||||
query.setParameters(parameters);
|
query.setParameters(parameters);
|
||||||
query.setFilters(
|
query.setFilters(
|
||||||
Collections.singletonList(new EntityTypeFilter(relationType == null ? EntityRelation.CONTAINS_TYPE : relationType,
|
Collections.singletonList(new RelationEntityTypeFilter(relationType == null ? EntityRelation.CONTAINS_TYPE : relationType,
|
||||||
Collections.singletonList(EntityType.ASSET))));
|
Collections.singletonList(EntityType.ASSET))));
|
||||||
return query;
|
return query;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -19,7 +19,7 @@ import lombok.Data;
|
|||||||
import org.thingsboard.server.common.data.EntityType;
|
import org.thingsboard.server.common.data.EntityType;
|
||||||
import org.thingsboard.server.common.data.relation.EntityRelation;
|
import org.thingsboard.server.common.data.relation.EntityRelation;
|
||||||
import org.thingsboard.server.common.data.relation.EntityRelationsQuery;
|
import org.thingsboard.server.common.data.relation.EntityRelationsQuery;
|
||||||
import org.thingsboard.server.common.data.relation.EntityTypeFilter;
|
import org.thingsboard.server.common.data.relation.RelationEntityTypeFilter;
|
||||||
import org.thingsboard.server.common.data.relation.RelationsSearchParameters;
|
import org.thingsboard.server.common.data.relation.RelationsSearchParameters;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
@ -36,7 +36,7 @@ public class DeviceSearchQuery {
|
|||||||
EntityRelationsQuery query = new EntityRelationsQuery();
|
EntityRelationsQuery query = new EntityRelationsQuery();
|
||||||
query.setParameters(parameters);
|
query.setParameters(parameters);
|
||||||
query.setFilters(
|
query.setFilters(
|
||||||
Collections.singletonList(new EntityTypeFilter(relationType == null ? EntityRelation.CONTAINS_TYPE : relationType,
|
Collections.singletonList(new RelationEntityTypeFilter(relationType == null ? EntityRelation.CONTAINS_TYPE : relationType,
|
||||||
Collections.singletonList(EntityType.DEVICE))));
|
Collections.singletonList(EntityType.DEVICE))));
|
||||||
return query;
|
return query;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -19,7 +19,7 @@ import lombok.Data;
|
|||||||
import org.thingsboard.server.common.data.EntityType;
|
import org.thingsboard.server.common.data.EntityType;
|
||||||
import org.thingsboard.server.common.data.relation.EntityRelation;
|
import org.thingsboard.server.common.data.relation.EntityRelation;
|
||||||
import org.thingsboard.server.common.data.relation.EntityRelationsQuery;
|
import org.thingsboard.server.common.data.relation.EntityRelationsQuery;
|
||||||
import org.thingsboard.server.common.data.relation.EntityTypeFilter;
|
import org.thingsboard.server.common.data.relation.RelationEntityTypeFilter;
|
||||||
import org.thingsboard.server.common.data.relation.RelationsSearchParameters;
|
import org.thingsboard.server.common.data.relation.RelationsSearchParameters;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
@ -36,7 +36,7 @@ public class EntityViewSearchQuery {
|
|||||||
EntityRelationsQuery query = new EntityRelationsQuery();
|
EntityRelationsQuery query = new EntityRelationsQuery();
|
||||||
query.setParameters(parameters);
|
query.setParameters(parameters);
|
||||||
query.setFilters(
|
query.setFilters(
|
||||||
Collections.singletonList(new EntityTypeFilter(relationType == null ? EntityRelation.CONTAINS_TYPE : relationType,
|
Collections.singletonList(new RelationEntityTypeFilter(relationType == null ? EntityRelation.CONTAINS_TYPE : relationType,
|
||||||
Collections.singletonList(EntityType.ENTITY_VIEW))));
|
Collections.singletonList(EntityType.ENTITY_VIEW))));
|
||||||
return query;
|
return query;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -29,6 +29,7 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo;
|
|||||||
@JsonSubTypes.Type(value = SingleEntityFilter.class, name = "singleEntity"),
|
@JsonSubTypes.Type(value = SingleEntityFilter.class, name = "singleEntity"),
|
||||||
@JsonSubTypes.Type(value = EntityListFilter.class, name = "entityList"),
|
@JsonSubTypes.Type(value = EntityListFilter.class, name = "entityList"),
|
||||||
@JsonSubTypes.Type(value = EntityNameFilter.class, name = "entityName"),
|
@JsonSubTypes.Type(value = EntityNameFilter.class, name = "entityName"),
|
||||||
|
@JsonSubTypes.Type(value = EntityTypeFilter.class, name = "entityType"),
|
||||||
@JsonSubTypes.Type(value = AssetTypeFilter.class, name = "assetType"),
|
@JsonSubTypes.Type(value = AssetTypeFilter.class, name = "assetType"),
|
||||||
@JsonSubTypes.Type(value = DeviceTypeFilter.class, name = "deviceType"),
|
@JsonSubTypes.Type(value = DeviceTypeFilter.class, name = "deviceType"),
|
||||||
@JsonSubTypes.Type(value = EntityViewTypeFilter.class, name = "entityViewType"),
|
@JsonSubTypes.Type(value = EntityViewTypeFilter.class, name = "entityViewType"),
|
||||||
|
|||||||
@ -19,6 +19,7 @@ public enum EntityFilterType {
|
|||||||
SINGLE_ENTITY("singleEntity"),
|
SINGLE_ENTITY("singleEntity"),
|
||||||
ENTITY_LIST("entityList"),
|
ENTITY_LIST("entityList"),
|
||||||
ENTITY_NAME("entityName"),
|
ENTITY_NAME("entityName"),
|
||||||
|
ENTITY_TYPE("entityType"),
|
||||||
ASSET_TYPE("assetType"),
|
ASSET_TYPE("assetType"),
|
||||||
DEVICE_TYPE("deviceType"),
|
DEVICE_TYPE("deviceType"),
|
||||||
ENTITY_VIEW_TYPE("entityViewType"),
|
ENTITY_VIEW_TYPE("entityViewType"),
|
||||||
|
|||||||
@ -0,0 +1,30 @@
|
|||||||
|
/**
|
||||||
|
* Copyright © 2016-2021 The Thingsboard Authors
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package org.thingsboard.server.common.data.query;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import org.thingsboard.server.common.data.EntityType;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class EntityTypeFilter implements EntityFilter {
|
||||||
|
@Override
|
||||||
|
public EntityFilterType getType() {
|
||||||
|
return EntityFilterType.ENTITY_TYPE;
|
||||||
|
}
|
||||||
|
|
||||||
|
private EntityType entityType;
|
||||||
|
|
||||||
|
}
|
||||||
@ -18,8 +18,7 @@ package org.thingsboard.server.common.data.query;
|
|||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import org.thingsboard.server.common.data.id.EntityId;
|
import org.thingsboard.server.common.data.id.EntityId;
|
||||||
import org.thingsboard.server.common.data.relation.EntitySearchDirection;
|
import org.thingsboard.server.common.data.relation.EntitySearchDirection;
|
||||||
import org.thingsboard.server.common.data.relation.EntityTypeFilter;
|
import org.thingsboard.server.common.data.relation.RelationEntityTypeFilter;
|
||||||
import org.thingsboard.server.common.data.relation.RelationTypeGroup;
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@ -33,7 +32,7 @@ public class RelationsQueryFilter implements EntityFilter {
|
|||||||
|
|
||||||
private EntityId rootEntity;
|
private EntityId rootEntity;
|
||||||
private EntitySearchDirection direction;
|
private EntitySearchDirection direction;
|
||||||
private List<EntityTypeFilter> filters;
|
private List<RelationEntityTypeFilter> filters;
|
||||||
private int maxLevel;
|
private int maxLevel;
|
||||||
private boolean fetchLastLevelOnly;
|
private boolean fetchLastLevelOnly;
|
||||||
|
|
||||||
|
|||||||
@ -26,6 +26,6 @@ import java.util.List;
|
|||||||
public class EntityRelationsQuery {
|
public class EntityRelationsQuery {
|
||||||
|
|
||||||
private RelationsSearchParameters parameters;
|
private RelationsSearchParameters parameters;
|
||||||
private List<EntityTypeFilter> filters;
|
private List<RelationEntityTypeFilter> filters;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -26,7 +26,7 @@ import java.util.List;
|
|||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
public class EntityTypeFilter {
|
public class RelationEntityTypeFilter {
|
||||||
|
|
||||||
private String relationType;
|
private String relationType;
|
||||||
|
|
||||||
@ -35,7 +35,7 @@ import org.thingsboard.server.common.data.relation.EntityRelation;
|
|||||||
import org.thingsboard.server.common.data.relation.EntityRelationInfo;
|
import org.thingsboard.server.common.data.relation.EntityRelationInfo;
|
||||||
import org.thingsboard.server.common.data.relation.EntityRelationsQuery;
|
import org.thingsboard.server.common.data.relation.EntityRelationsQuery;
|
||||||
import org.thingsboard.server.common.data.relation.EntitySearchDirection;
|
import org.thingsboard.server.common.data.relation.EntitySearchDirection;
|
||||||
import org.thingsboard.server.common.data.relation.EntityTypeFilter;
|
import org.thingsboard.server.common.data.relation.RelationEntityTypeFilter;
|
||||||
import org.thingsboard.server.common.data.relation.RelationTypeGroup;
|
import org.thingsboard.server.common.data.relation.RelationTypeGroup;
|
||||||
import org.thingsboard.server.common.data.relation.RelationsSearchParameters;
|
import org.thingsboard.server.common.data.relation.RelationsSearchParameters;
|
||||||
import org.thingsboard.server.dao.entity.EntityService;
|
import org.thingsboard.server.dao.entity.EntityService;
|
||||||
@ -457,7 +457,7 @@ public class BaseRelationService implements RelationService {
|
|||||||
//boolean fetchLastLevelOnly = true;
|
//boolean fetchLastLevelOnly = true;
|
||||||
log.trace("Executing findByQuery [{}]", query);
|
log.trace("Executing findByQuery [{}]", query);
|
||||||
RelationsSearchParameters params = query.getParameters();
|
RelationsSearchParameters params = query.getParameters();
|
||||||
final List<EntityTypeFilter> filters = query.getFilters();
|
final List<RelationEntityTypeFilter> filters = query.getFilters();
|
||||||
if (filters == null || filters.isEmpty()) {
|
if (filters == null || filters.isEmpty()) {
|
||||||
log.debug("Filters are not set [{}]", query);
|
log.debug("Filters are not set [{}]", query);
|
||||||
}
|
}
|
||||||
@ -575,8 +575,8 @@ public class BaseRelationService implements RelationService {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean matchFilters(List<EntityTypeFilter> filters, EntityRelation relation, EntitySearchDirection direction) {
|
private boolean matchFilters(List<RelationEntityTypeFilter> filters, EntityRelation relation, EntitySearchDirection direction) {
|
||||||
for (EntityTypeFilter filter : filters) {
|
for (RelationEntityTypeFilter filter : filters) {
|
||||||
if (match(filter, relation, direction)) {
|
if (match(filter, relation, direction)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -584,7 +584,7 @@ public class BaseRelationService implements RelationService {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean match(EntityTypeFilter filter, EntityRelation relation, EntitySearchDirection direction) {
|
private boolean match(RelationEntityTypeFilter filter, EntityRelation relation, EntitySearchDirection direction) {
|
||||||
if (StringUtils.isEmpty(filter.getRelationType()) || filter.getRelationType().equals(relation.getType())) {
|
if (StringUtils.isEmpty(filter.getRelationType()) || filter.getRelationType().equals(relation.getType())) {
|
||||||
if (filter.getEntityTypes() == null || filter.getEntityTypes().isEmpty()) {
|
if (filter.getEntityTypes() == null || filter.getEntityTypes().isEmpty()) {
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@ -40,12 +40,13 @@ import org.thingsboard.server.common.data.query.EntityKeyType;
|
|||||||
import org.thingsboard.server.common.data.query.EntityListFilter;
|
import org.thingsboard.server.common.data.query.EntityListFilter;
|
||||||
import org.thingsboard.server.common.data.query.EntityNameFilter;
|
import org.thingsboard.server.common.data.query.EntityNameFilter;
|
||||||
import org.thingsboard.server.common.data.query.EntitySearchQueryFilter;
|
import org.thingsboard.server.common.data.query.EntitySearchQueryFilter;
|
||||||
|
import org.thingsboard.server.common.data.query.EntityTypeFilter;
|
||||||
import org.thingsboard.server.common.data.query.EntityViewSearchQueryFilter;
|
import org.thingsboard.server.common.data.query.EntityViewSearchQueryFilter;
|
||||||
import org.thingsboard.server.common.data.query.EntityViewTypeFilter;
|
import org.thingsboard.server.common.data.query.EntityViewTypeFilter;
|
||||||
import org.thingsboard.server.common.data.query.RelationsQueryFilter;
|
import org.thingsboard.server.common.data.query.RelationsQueryFilter;
|
||||||
import org.thingsboard.server.common.data.query.SingleEntityFilter;
|
import org.thingsboard.server.common.data.query.SingleEntityFilter;
|
||||||
import org.thingsboard.server.common.data.relation.EntitySearchDirection;
|
import org.thingsboard.server.common.data.relation.EntitySearchDirection;
|
||||||
import org.thingsboard.server.common.data.relation.EntityTypeFilter;
|
import org.thingsboard.server.common.data.relation.RelationEntityTypeFilter;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
@ -488,6 +489,7 @@ public class DefaultEntityQueryRepository implements EntityQueryRepository {
|
|||||||
case ASSET_SEARCH_QUERY:
|
case ASSET_SEARCH_QUERY:
|
||||||
case ENTITY_VIEW_SEARCH_QUERY:
|
case ENTITY_VIEW_SEARCH_QUERY:
|
||||||
case API_USAGE_STATE:
|
case API_USAGE_STATE:
|
||||||
|
case ENTITY_TYPE:
|
||||||
return "";
|
return "";
|
||||||
default:
|
default:
|
||||||
throw new RuntimeException("Not implemented!");
|
throw new RuntimeException("Not implemented!");
|
||||||
@ -573,7 +575,7 @@ public class DefaultEntityQueryRepository implements EntityQueryRepository {
|
|||||||
boolean single = entityFilter.getFilters() != null && entityFilter.getFilters().size() == 1;
|
boolean single = entityFilter.getFilters() != null && entityFilter.getFilters().size() == 1;
|
||||||
if (entityFilter.getFilters() != null && !entityFilter.getFilters().isEmpty()) {
|
if (entityFilter.getFilters() != null && !entityFilter.getFilters().isEmpty()) {
|
||||||
int entityTypeFilterIdx = 0;
|
int entityTypeFilterIdx = 0;
|
||||||
for (EntityTypeFilter etf : entityFilter.getFilters()) {
|
for (RelationEntityTypeFilter etf : entityFilter.getFilters()) {
|
||||||
String etfCondition = buildEtfCondition(ctx, etf, entityFilter.getDirection(), entityTypeFilterIdx++);
|
String etfCondition = buildEtfCondition(ctx, etf, entityFilter.getDirection(), entityTypeFilterIdx++);
|
||||||
if (!etfCondition.isEmpty()) {
|
if (!etfCondition.isEmpty()) {
|
||||||
if (noConditions) {
|
if (noConditions) {
|
||||||
@ -622,7 +624,7 @@ public class DefaultEntityQueryRepository implements EntityQueryRepository {
|
|||||||
return "( " + selectFields + from + ")";
|
return "( " + selectFields + from + ")";
|
||||||
}
|
}
|
||||||
|
|
||||||
private String buildEtfCondition(QueryContext ctx, EntityTypeFilter etf, EntitySearchDirection direction, int entityTypeFilterIdx) {
|
private String buildEtfCondition(QueryContext ctx, RelationEntityTypeFilter etf, EntitySearchDirection direction, int entityTypeFilterIdx) {
|
||||||
StringBuilder whereFilter = new StringBuilder();
|
StringBuilder whereFilter = new StringBuilder();
|
||||||
String relationType = etf.getRelationType();
|
String relationType = etf.getRelationType();
|
||||||
List<EntityType> entityTypes = etf.getEntityTypes();
|
List<EntityType> entityTypes = etf.getEntityTypes();
|
||||||
@ -728,6 +730,8 @@ public class DefaultEntityQueryRepository implements EntityQueryRepository {
|
|||||||
return ((EntityListFilter) entityFilter).getEntityType();
|
return ((EntityListFilter) entityFilter).getEntityType();
|
||||||
case ENTITY_NAME:
|
case ENTITY_NAME:
|
||||||
return ((EntityNameFilter) entityFilter).getEntityType();
|
return ((EntityNameFilter) entityFilter).getEntityType();
|
||||||
|
case ENTITY_TYPE:
|
||||||
|
return ((EntityTypeFilter) entityFilter).getEntityType();
|
||||||
case ASSET_TYPE:
|
case ASSET_TYPE:
|
||||||
case ASSET_SEARCH_QUERY:
|
case ASSET_SEARCH_QUERY:
|
||||||
return EntityType.ASSET;
|
return EntityType.ASSET;
|
||||||
|
|||||||
@ -58,7 +58,7 @@ import org.thingsboard.server.common.data.query.RelationsQueryFilter;
|
|||||||
import org.thingsboard.server.common.data.query.StringFilterPredicate;
|
import org.thingsboard.server.common.data.query.StringFilterPredicate;
|
||||||
import org.thingsboard.server.common.data.relation.EntityRelation;
|
import org.thingsboard.server.common.data.relation.EntityRelation;
|
||||||
import org.thingsboard.server.common.data.relation.EntitySearchDirection;
|
import org.thingsboard.server.common.data.relation.EntitySearchDirection;
|
||||||
import org.thingsboard.server.common.data.relation.EntityTypeFilter;
|
import org.thingsboard.server.common.data.relation.RelationEntityTypeFilter;
|
||||||
import org.thingsboard.server.common.data.relation.RelationTypeGroup;
|
import org.thingsboard.server.common.data.relation.RelationTypeGroup;
|
||||||
import org.thingsboard.server.dao.attributes.AttributesService;
|
import org.thingsboard.server.dao.attributes.AttributesService;
|
||||||
import org.thingsboard.server.dao.model.sqlts.ts.TsKvEntity;
|
import org.thingsboard.server.dao.model.sqlts.ts.TsKvEntity;
|
||||||
@ -160,13 +160,13 @@ public abstract class BaseEntityServiceTest extends AbstractServiceTest {
|
|||||||
long count = entityService.countEntitiesByQuery(tenantId, new CustomerId(CustomerId.NULL_UUID), countQuery);
|
long count = entityService.countEntitiesByQuery(tenantId, new CustomerId(CustomerId.NULL_UUID), countQuery);
|
||||||
Assert.assertEquals(30, count);
|
Assert.assertEquals(30, count);
|
||||||
|
|
||||||
filter.setFilters(Collections.singletonList(new EntityTypeFilter("Contains", Collections.singletonList(EntityType.DEVICE))));
|
filter.setFilters(Collections.singletonList(new RelationEntityTypeFilter("Contains", Collections.singletonList(EntityType.DEVICE))));
|
||||||
count = entityService.countEntitiesByQuery(tenantId, new CustomerId(CustomerId.NULL_UUID), countQuery);
|
count = entityService.countEntitiesByQuery(tenantId, new CustomerId(CustomerId.NULL_UUID), countQuery);
|
||||||
Assert.assertEquals(25, count);
|
Assert.assertEquals(25, count);
|
||||||
|
|
||||||
filter.setRootEntity(devices.get(0).getId());
|
filter.setRootEntity(devices.get(0).getId());
|
||||||
filter.setDirection(EntitySearchDirection.TO);
|
filter.setDirection(EntitySearchDirection.TO);
|
||||||
filter.setFilters(Collections.singletonList(new EntityTypeFilter("Manages", Collections.singletonList(EntityType.TENANT))));
|
filter.setFilters(Collections.singletonList(new RelationEntityTypeFilter("Manages", Collections.singletonList(EntityType.TENANT))));
|
||||||
count = entityService.countEntitiesByQuery(tenantId, new CustomerId(CustomerId.NULL_UUID), countQuery);
|
count = entityService.countEntitiesByQuery(tenantId, new CustomerId(CustomerId.NULL_UUID), countQuery);
|
||||||
Assert.assertEquals(1, count);
|
Assert.assertEquals(1, count);
|
||||||
|
|
||||||
@ -228,7 +228,7 @@ public abstract class BaseEntityServiceTest extends AbstractServiceTest {
|
|||||||
RelationsQueryFilter filter = new RelationsQueryFilter();
|
RelationsQueryFilter filter = new RelationsQueryFilter();
|
||||||
filter.setRootEntity(tenantId);
|
filter.setRootEntity(tenantId);
|
||||||
filter.setDirection(EntitySearchDirection.FROM);
|
filter.setDirection(EntitySearchDirection.FROM);
|
||||||
filter.setFilters(Collections.singletonList(new EntityTypeFilter("Contains", Collections.singletonList(EntityType.DEVICE))));
|
filter.setFilters(Collections.singletonList(new RelationEntityTypeFilter("Contains", Collections.singletonList(EntityType.DEVICE))));
|
||||||
|
|
||||||
EntityDataSortOrder sortOrder = new EntityDataSortOrder(
|
EntityDataSortOrder sortOrder = new EntityDataSortOrder(
|
||||||
new EntityKey(EntityKeyType.ENTITY_FIELD, "createdTime"), EntityDataSortOrder.Direction.ASC
|
new EntityKey(EntityKeyType.ENTITY_FIELD, "createdTime"), EntityDataSortOrder.Direction.ASC
|
||||||
|
|||||||
@ -26,7 +26,7 @@ import org.thingsboard.server.common.data.id.DeviceId;
|
|||||||
import org.thingsboard.server.common.data.relation.EntityRelation;
|
import org.thingsboard.server.common.data.relation.EntityRelation;
|
||||||
import org.thingsboard.server.common.data.relation.EntityRelationsQuery;
|
import org.thingsboard.server.common.data.relation.EntityRelationsQuery;
|
||||||
import org.thingsboard.server.common.data.relation.EntitySearchDirection;
|
import org.thingsboard.server.common.data.relation.EntitySearchDirection;
|
||||||
import org.thingsboard.server.common.data.relation.EntityTypeFilter;
|
import org.thingsboard.server.common.data.relation.RelationEntityTypeFilter;
|
||||||
import org.thingsboard.server.common.data.relation.RelationTypeGroup;
|
import org.thingsboard.server.common.data.relation.RelationTypeGroup;
|
||||||
import org.thingsboard.server.common.data.relation.RelationsSearchParameters;
|
import org.thingsboard.server.common.data.relation.RelationsSearchParameters;
|
||||||
import org.thingsboard.server.dao.exception.DataValidationException;
|
import org.thingsboard.server.dao.exception.DataValidationException;
|
||||||
@ -221,7 +221,7 @@ public abstract class BaseRelationServiceTest extends AbstractServiceTest {
|
|||||||
|
|
||||||
EntityRelationsQuery query = new EntityRelationsQuery();
|
EntityRelationsQuery query = new EntityRelationsQuery();
|
||||||
query.setParameters(new RelationsSearchParameters(assetA, EntitySearchDirection.FROM, -1, false));
|
query.setParameters(new RelationsSearchParameters(assetA, EntitySearchDirection.FROM, -1, false));
|
||||||
query.setFilters(Collections.singletonList(new EntityTypeFilter(EntityRelation.CONTAINS_TYPE, Collections.singletonList(EntityType.ASSET))));
|
query.setFilters(Collections.singletonList(new RelationEntityTypeFilter(EntityRelation.CONTAINS_TYPE, Collections.singletonList(EntityType.ASSET))));
|
||||||
List<EntityRelation> relations = relationService.findByQuery(SYSTEM_TENANT_ID, query).get();
|
List<EntityRelation> relations = relationService.findByQuery(SYSTEM_TENANT_ID, query).get();
|
||||||
Assert.assertEquals(3, relations.size());
|
Assert.assertEquals(3, relations.size());
|
||||||
Assert.assertTrue(relations.contains(relationA));
|
Assert.assertTrue(relations.contains(relationA));
|
||||||
@ -255,7 +255,7 @@ public abstract class BaseRelationServiceTest extends AbstractServiceTest {
|
|||||||
|
|
||||||
EntityRelationsQuery query = new EntityRelationsQuery();
|
EntityRelationsQuery query = new EntityRelationsQuery();
|
||||||
query.setParameters(new RelationsSearchParameters(assetA, EntitySearchDirection.FROM, -1, false));
|
query.setParameters(new RelationsSearchParameters(assetA, EntitySearchDirection.FROM, -1, false));
|
||||||
query.setFilters(Collections.singletonList(new EntityTypeFilter(EntityRelation.CONTAINS_TYPE, Collections.singletonList(EntityType.ASSET))));
|
query.setFilters(Collections.singletonList(new RelationEntityTypeFilter(EntityRelation.CONTAINS_TYPE, Collections.singletonList(EntityType.ASSET))));
|
||||||
List<EntityRelation> relations = relationService.findByQuery(SYSTEM_TENANT_ID, query).get();
|
List<EntityRelation> relations = relationService.findByQuery(SYSTEM_TENANT_ID, query).get();
|
||||||
Assert.assertEquals(2, relations.size());
|
Assert.assertEquals(2, relations.size());
|
||||||
Assert.assertTrue(relations.contains(relationAB));
|
Assert.assertTrue(relations.contains(relationAB));
|
||||||
|
|||||||
@ -17,7 +17,7 @@ package org.thingsboard.rule.engine.data;
|
|||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import org.thingsboard.server.common.data.relation.EntitySearchDirection;
|
import org.thingsboard.server.common.data.relation.EntitySearchDirection;
|
||||||
import org.thingsboard.server.common.data.relation.EntityTypeFilter;
|
import org.thingsboard.server.common.data.relation.RelationEntityTypeFilter;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@ -26,6 +26,6 @@ public class RelationsQuery {
|
|||||||
|
|
||||||
private EntitySearchDirection direction;
|
private EntitySearchDirection direction;
|
||||||
private int maxLevel = 1;
|
private int maxLevel = 1;
|
||||||
private List<EntityTypeFilter> filters;
|
private List<RelationEntityTypeFilter> filters;
|
||||||
private boolean fetchLastLevelOnly = false;
|
private boolean fetchLastLevelOnly = false;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -19,7 +19,7 @@ import lombok.Data;
|
|||||||
import org.thingsboard.rule.engine.data.RelationsQuery;
|
import org.thingsboard.rule.engine.data.RelationsQuery;
|
||||||
import org.thingsboard.server.common.data.relation.EntityRelation;
|
import org.thingsboard.server.common.data.relation.EntityRelation;
|
||||||
import org.thingsboard.server.common.data.relation.EntitySearchDirection;
|
import org.thingsboard.server.common.data.relation.EntitySearchDirection;
|
||||||
import org.thingsboard.server.common.data.relation.EntityTypeFilter;
|
import org.thingsboard.server.common.data.relation.RelationEntityTypeFilter;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@ -41,8 +41,8 @@ public class TbGetRelatedAttrNodeConfiguration extends TbGetEntityAttrNodeConfig
|
|||||||
RelationsQuery relationsQuery = new RelationsQuery();
|
RelationsQuery relationsQuery = new RelationsQuery();
|
||||||
relationsQuery.setDirection(EntitySearchDirection.FROM);
|
relationsQuery.setDirection(EntitySearchDirection.FROM);
|
||||||
relationsQuery.setMaxLevel(1);
|
relationsQuery.setMaxLevel(1);
|
||||||
EntityTypeFilter entityTypeFilter = new EntityTypeFilter(EntityRelation.CONTAINS_TYPE, Collections.emptyList());
|
RelationEntityTypeFilter relationEntityTypeFilter = new RelationEntityTypeFilter(EntityRelation.CONTAINS_TYPE, Collections.emptyList());
|
||||||
relationsQuery.setFilters(Collections.singletonList(entityTypeFilter));
|
relationsQuery.setFilters(Collections.singletonList(relationEntityTypeFilter));
|
||||||
configuration.setRelationsQuery(relationsQuery);
|
configuration.setRelationsQuery(relationsQuery);
|
||||||
|
|
||||||
return configuration;
|
return configuration;
|
||||||
|
|||||||
@ -20,7 +20,7 @@ import org.thingsboard.rule.engine.api.NodeConfiguration;
|
|||||||
import org.thingsboard.rule.engine.data.RelationsQuery;
|
import org.thingsboard.rule.engine.data.RelationsQuery;
|
||||||
import org.thingsboard.server.common.data.relation.EntityRelation;
|
import org.thingsboard.server.common.data.relation.EntityRelation;
|
||||||
import org.thingsboard.server.common.data.relation.EntitySearchDirection;
|
import org.thingsboard.server.common.data.relation.EntitySearchDirection;
|
||||||
import org.thingsboard.server.common.data.relation.EntityTypeFilter;
|
import org.thingsboard.server.common.data.relation.RelationEntityTypeFilter;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
|
||||||
@ -39,8 +39,8 @@ public class TbChangeOriginatorNodeConfiguration extends TbTransformNodeConfigur
|
|||||||
RelationsQuery relationsQuery = new RelationsQuery();
|
RelationsQuery relationsQuery = new RelationsQuery();
|
||||||
relationsQuery.setDirection(EntitySearchDirection.FROM);
|
relationsQuery.setDirection(EntitySearchDirection.FROM);
|
||||||
relationsQuery.setMaxLevel(1);
|
relationsQuery.setMaxLevel(1);
|
||||||
EntityTypeFilter entityTypeFilter = new EntityTypeFilter(EntityRelation.CONTAINS_TYPE, Collections.emptyList());
|
RelationEntityTypeFilter relationEntityTypeFilter = new RelationEntityTypeFilter(EntityRelation.CONTAINS_TYPE, Collections.emptyList());
|
||||||
relationsQuery.setFilters(Collections.singletonList(entityTypeFilter));
|
relationsQuery.setFilters(Collections.singletonList(relationEntityTypeFilter));
|
||||||
configuration.setRelationsQuery(relationsQuery);
|
configuration.setRelationsQuery(relationsQuery);
|
||||||
|
|
||||||
return configuration;
|
return configuration;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user