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.EntityKeyType;
 | 
			
		||||
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.KeyFilter;
 | 
			
		||||
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);
 | 
			
		||||
        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
 | 
			
		||||
@ -198,11 +207,31 @@ public abstract class BaseEntityQueryControllerTest extends AbstractControllerTe
 | 
			
		||||
        Assert.assertEquals(11, data.getTotalElements());
 | 
			
		||||
        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
 | 
			
		||||
    public void testFindEntityDataByQueryWithAttributes() throws Exception {
 | 
			
		||||
 | 
			
		||||
        List<Device> devices = new ArrayList<>();
 | 
			
		||||
        List<Long> temperatures = new ArrayList<>();
 | 
			
		||||
        List<Long> highTemperatures = new ArrayList<>();
 | 
			
		||||
 | 
			
		||||
@ -26,9 +26,9 @@ import java.util.Arrays;
 | 
			
		||||
 | 
			
		||||
@RunWith(ClasspathSuite.class)
 | 
			
		||||
@ClasspathSuite.ClassnameFilters({
 | 
			
		||||
        "org.thingsboard.server.controller.sql.WebsocketApiSqlTest",
 | 
			
		||||
//        "org.thingsboard.server.controller.sql.TenantProfileControllerSqlTest",
 | 
			
		||||
//        "org.thingsboard.server.controller.sql.*Test",
 | 
			
		||||
//        "org.thingsboard.server.controller.sql.WebsocketApiSqlTest",
 | 
			
		||||
//        "org.thingsboard.server.controller.sql.EntityQueryControllerSqlTest",
 | 
			
		||||
        "org.thingsboard.server.controller.sql.*Test",
 | 
			
		||||
        })
 | 
			
		||||
public class ControllerSqlTestSuite {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -19,7 +19,7 @@ import lombok.Data;
 | 
			
		||||
import org.thingsboard.server.common.data.EntityType;
 | 
			
		||||
import org.thingsboard.server.common.data.relation.EntityRelation;
 | 
			
		||||
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 java.util.Collections;
 | 
			
		||||
@ -39,7 +39,7 @@ public class AssetSearchQuery {
 | 
			
		||||
        EntityRelationsQuery query = new EntityRelationsQuery();
 | 
			
		||||
        query.setParameters(parameters);
 | 
			
		||||
        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))));
 | 
			
		||||
        return query;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -19,7 +19,7 @@ import lombok.Data;
 | 
			
		||||
import org.thingsboard.server.common.data.EntityType;
 | 
			
		||||
import org.thingsboard.server.common.data.relation.EntityRelation;
 | 
			
		||||
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 java.util.Collections;
 | 
			
		||||
@ -36,7 +36,7 @@ public class DeviceSearchQuery {
 | 
			
		||||
        EntityRelationsQuery query = new EntityRelationsQuery();
 | 
			
		||||
        query.setParameters(parameters);
 | 
			
		||||
        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))));
 | 
			
		||||
        return query;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -19,7 +19,7 @@ import lombok.Data;
 | 
			
		||||
import org.thingsboard.server.common.data.EntityType;
 | 
			
		||||
import org.thingsboard.server.common.data.relation.EntityRelation;
 | 
			
		||||
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 java.util.Collections;
 | 
			
		||||
@ -36,7 +36,7 @@ public class EntityViewSearchQuery {
 | 
			
		||||
        EntityRelationsQuery query = new EntityRelationsQuery();
 | 
			
		||||
        query.setParameters(parameters);
 | 
			
		||||
        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))));
 | 
			
		||||
        return query;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -29,6 +29,7 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo;
 | 
			
		||||
        @JsonSubTypes.Type(value = SingleEntityFilter.class, name = "singleEntity"),
 | 
			
		||||
        @JsonSubTypes.Type(value = EntityListFilter.class, name = "entityList"),
 | 
			
		||||
        @JsonSubTypes.Type(value = EntityNameFilter.class, name = "entityName"),
 | 
			
		||||
        @JsonSubTypes.Type(value = EntityTypeFilter.class, name = "entityType"),
 | 
			
		||||
        @JsonSubTypes.Type(value = AssetTypeFilter.class, name = "assetType"),
 | 
			
		||||
        @JsonSubTypes.Type(value = DeviceTypeFilter.class, name = "deviceType"),
 | 
			
		||||
        @JsonSubTypes.Type(value = EntityViewTypeFilter.class, name = "entityViewType"),
 | 
			
		||||
 | 
			
		||||
@ -19,6 +19,7 @@ public enum EntityFilterType {
 | 
			
		||||
    SINGLE_ENTITY("singleEntity"),
 | 
			
		||||
    ENTITY_LIST("entityList"),
 | 
			
		||||
    ENTITY_NAME("entityName"),
 | 
			
		||||
    ENTITY_TYPE("entityType"),
 | 
			
		||||
    ASSET_TYPE("assetType"),
 | 
			
		||||
    DEVICE_TYPE("deviceType"),
 | 
			
		||||
    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 org.thingsboard.server.common.data.id.EntityId;
 | 
			
		||||
import org.thingsboard.server.common.data.relation.EntitySearchDirection;
 | 
			
		||||
import org.thingsboard.server.common.data.relation.EntityTypeFilter;
 | 
			
		||||
import org.thingsboard.server.common.data.relation.RelationTypeGroup;
 | 
			
		||||
import org.thingsboard.server.common.data.relation.RelationEntityTypeFilter;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
@ -33,7 +32,7 @@ public class RelationsQueryFilter implements EntityFilter {
 | 
			
		||||
 | 
			
		||||
    private EntityId rootEntity;
 | 
			
		||||
    private EntitySearchDirection direction;
 | 
			
		||||
    private List<EntityTypeFilter> filters;
 | 
			
		||||
    private List<RelationEntityTypeFilter> filters;
 | 
			
		||||
    private int maxLevel;
 | 
			
		||||
    private boolean fetchLastLevelOnly;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -26,6 +26,6 @@ import java.util.List;
 | 
			
		||||
public class EntityRelationsQuery {
 | 
			
		||||
 | 
			
		||||
    private RelationsSearchParameters parameters;
 | 
			
		||||
    private List<EntityTypeFilter> filters;
 | 
			
		||||
    private List<RelationEntityTypeFilter> filters;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -26,7 +26,7 @@ import java.util.List;
 | 
			
		||||
 */
 | 
			
		||||
@Data
 | 
			
		||||
@AllArgsConstructor
 | 
			
		||||
public class EntityTypeFilter {
 | 
			
		||||
public class RelationEntityTypeFilter {
 | 
			
		||||
 | 
			
		||||
    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.EntityRelationsQuery;
 | 
			
		||||
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.RelationsSearchParameters;
 | 
			
		||||
import org.thingsboard.server.dao.entity.EntityService;
 | 
			
		||||
@ -457,7 +457,7 @@ public class BaseRelationService implements RelationService {
 | 
			
		||||
        //boolean fetchLastLevelOnly = true;
 | 
			
		||||
        log.trace("Executing findByQuery [{}]", query);
 | 
			
		||||
        RelationsSearchParameters params = query.getParameters();
 | 
			
		||||
        final List<EntityTypeFilter> filters = query.getFilters();
 | 
			
		||||
        final List<RelationEntityTypeFilter> filters = query.getFilters();
 | 
			
		||||
        if (filters == null || filters.isEmpty()) {
 | 
			
		||||
            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) {
 | 
			
		||||
        for (EntityTypeFilter filter : filters) {
 | 
			
		||||
    private boolean matchFilters(List<RelationEntityTypeFilter> filters, EntityRelation relation, EntitySearchDirection direction) {
 | 
			
		||||
        for (RelationEntityTypeFilter filter : filters) {
 | 
			
		||||
            if (match(filter, relation, direction)) {
 | 
			
		||||
                return true;
 | 
			
		||||
            }
 | 
			
		||||
@ -584,7 +584,7 @@ public class BaseRelationService implements RelationService {
 | 
			
		||||
        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 (filter.getEntityTypes() == null || filter.getEntityTypes().isEmpty()) {
 | 
			
		||||
                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.EntityNameFilter;
 | 
			
		||||
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.EntityViewTypeFilter;
 | 
			
		||||
import org.thingsboard.server.common.data.query.RelationsQueryFilter;
 | 
			
		||||
import org.thingsboard.server.common.data.query.SingleEntityFilter;
 | 
			
		||||
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.Collections;
 | 
			
		||||
@ -488,6 +489,7 @@ public class DefaultEntityQueryRepository implements EntityQueryRepository {
 | 
			
		||||
            case ASSET_SEARCH_QUERY:
 | 
			
		||||
            case ENTITY_VIEW_SEARCH_QUERY:
 | 
			
		||||
            case API_USAGE_STATE:
 | 
			
		||||
            case ENTITY_TYPE:
 | 
			
		||||
                return "";
 | 
			
		||||
            default:
 | 
			
		||||
                throw new RuntimeException("Not implemented!");
 | 
			
		||||
@ -573,7 +575,7 @@ public class DefaultEntityQueryRepository implements EntityQueryRepository {
 | 
			
		||||
        boolean single = entityFilter.getFilters() != null && entityFilter.getFilters().size() == 1;
 | 
			
		||||
        if (entityFilter.getFilters() != null && !entityFilter.getFilters().isEmpty()) {
 | 
			
		||||
            int entityTypeFilterIdx = 0;
 | 
			
		||||
            for (EntityTypeFilter etf : entityFilter.getFilters()) {
 | 
			
		||||
            for (RelationEntityTypeFilter etf : entityFilter.getFilters()) {
 | 
			
		||||
                String etfCondition = buildEtfCondition(ctx, etf, entityFilter.getDirection(), entityTypeFilterIdx++);
 | 
			
		||||
                if (!etfCondition.isEmpty()) {
 | 
			
		||||
                    if (noConditions) {
 | 
			
		||||
@ -622,7 +624,7 @@ public class DefaultEntityQueryRepository implements EntityQueryRepository {
 | 
			
		||||
        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();
 | 
			
		||||
        String relationType = etf.getRelationType();
 | 
			
		||||
        List<EntityType> entityTypes = etf.getEntityTypes();
 | 
			
		||||
@ -728,6 +730,8 @@ public class DefaultEntityQueryRepository implements EntityQueryRepository {
 | 
			
		||||
                return ((EntityListFilter) entityFilter).getEntityType();
 | 
			
		||||
            case ENTITY_NAME:
 | 
			
		||||
                return ((EntityNameFilter) entityFilter).getEntityType();
 | 
			
		||||
            case ENTITY_TYPE:
 | 
			
		||||
                return ((EntityTypeFilter) entityFilter).getEntityType();
 | 
			
		||||
            case ASSET_TYPE:
 | 
			
		||||
            case ASSET_SEARCH_QUERY:
 | 
			
		||||
                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.relation.EntityRelation;
 | 
			
		||||
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.dao.attributes.AttributesService;
 | 
			
		||||
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);
 | 
			
		||||
        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);
 | 
			
		||||
        Assert.assertEquals(25, count);
 | 
			
		||||
 | 
			
		||||
        filter.setRootEntity(devices.get(0).getId());
 | 
			
		||||
        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);
 | 
			
		||||
        Assert.assertEquals(1, count);
 | 
			
		||||
 | 
			
		||||
@ -228,7 +228,7 @@ public abstract class BaseEntityServiceTest extends AbstractServiceTest {
 | 
			
		||||
        RelationsQueryFilter filter = new RelationsQueryFilter();
 | 
			
		||||
        filter.setRootEntity(tenantId);
 | 
			
		||||
        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(
 | 
			
		||||
                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.EntityRelationsQuery;
 | 
			
		||||
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.RelationsSearchParameters;
 | 
			
		||||
import org.thingsboard.server.dao.exception.DataValidationException;
 | 
			
		||||
@ -221,7 +221,7 @@ public abstract class BaseRelationServiceTest extends AbstractServiceTest {
 | 
			
		||||
 | 
			
		||||
        EntityRelationsQuery query = new EntityRelationsQuery();
 | 
			
		||||
        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();
 | 
			
		||||
        Assert.assertEquals(3, relations.size());
 | 
			
		||||
        Assert.assertTrue(relations.contains(relationA));
 | 
			
		||||
@ -255,7 +255,7 @@ public abstract class BaseRelationServiceTest extends AbstractServiceTest {
 | 
			
		||||
 | 
			
		||||
        EntityRelationsQuery query = new EntityRelationsQuery();
 | 
			
		||||
        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();
 | 
			
		||||
        Assert.assertEquals(2, relations.size());
 | 
			
		||||
        Assert.assertTrue(relations.contains(relationAB));
 | 
			
		||||
 | 
			
		||||
@ -17,7 +17,7 @@ package org.thingsboard.rule.engine.data;
 | 
			
		||||
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
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;
 | 
			
		||||
 | 
			
		||||
@ -26,6 +26,6 @@ public class RelationsQuery {
 | 
			
		||||
 | 
			
		||||
    private EntitySearchDirection direction;
 | 
			
		||||
    private int maxLevel = 1;
 | 
			
		||||
    private List<EntityTypeFilter> filters;
 | 
			
		||||
    private List<RelationEntityTypeFilter> filters;
 | 
			
		||||
    private boolean fetchLastLevelOnly = false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -19,7 +19,7 @@ import lombok.Data;
 | 
			
		||||
import org.thingsboard.rule.engine.data.RelationsQuery;
 | 
			
		||||
import org.thingsboard.server.common.data.relation.EntityRelation;
 | 
			
		||||
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.HashMap;
 | 
			
		||||
@ -41,8 +41,8 @@ public class TbGetRelatedAttrNodeConfiguration extends TbGetEntityAttrNodeConfig
 | 
			
		||||
        RelationsQuery relationsQuery = new RelationsQuery();
 | 
			
		||||
        relationsQuery.setDirection(EntitySearchDirection.FROM);
 | 
			
		||||
        relationsQuery.setMaxLevel(1);
 | 
			
		||||
        EntityTypeFilter entityTypeFilter = new EntityTypeFilter(EntityRelation.CONTAINS_TYPE, Collections.emptyList());
 | 
			
		||||
        relationsQuery.setFilters(Collections.singletonList(entityTypeFilter));
 | 
			
		||||
        RelationEntityTypeFilter relationEntityTypeFilter = new RelationEntityTypeFilter(EntityRelation.CONTAINS_TYPE, Collections.emptyList());
 | 
			
		||||
        relationsQuery.setFilters(Collections.singletonList(relationEntityTypeFilter));
 | 
			
		||||
        configuration.setRelationsQuery(relationsQuery);
 | 
			
		||||
 | 
			
		||||
        return configuration;
 | 
			
		||||
 | 
			
		||||
@ -20,7 +20,7 @@ import org.thingsboard.rule.engine.api.NodeConfiguration;
 | 
			
		||||
import org.thingsboard.rule.engine.data.RelationsQuery;
 | 
			
		||||
import org.thingsboard.server.common.data.relation.EntityRelation;
 | 
			
		||||
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;
 | 
			
		||||
 | 
			
		||||
@ -39,8 +39,8 @@ public class TbChangeOriginatorNodeConfiguration extends TbTransformNodeConfigur
 | 
			
		||||
        RelationsQuery relationsQuery = new RelationsQuery();
 | 
			
		||||
        relationsQuery.setDirection(EntitySearchDirection.FROM);
 | 
			
		||||
        relationsQuery.setMaxLevel(1);
 | 
			
		||||
        EntityTypeFilter entityTypeFilter = new EntityTypeFilter(EntityRelation.CONTAINS_TYPE, Collections.emptyList());
 | 
			
		||||
        relationsQuery.setFilters(Collections.singletonList(entityTypeFilter));
 | 
			
		||||
        RelationEntityTypeFilter relationEntityTypeFilter = new RelationEntityTypeFilter(EntityRelation.CONTAINS_TYPE, Collections.emptyList());
 | 
			
		||||
        relationsQuery.setFilters(Collections.singletonList(relationEntityTypeFilter));
 | 
			
		||||
        configuration.setRelationsQuery(relationsQuery);
 | 
			
		||||
 | 
			
		||||
        return configuration;
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user