fixed tests to use new dynamic source configuration
This commit is contained in:
parent
2cb05c9d2b
commit
fcba7004f9
@ -36,7 +36,7 @@ import org.thingsboard.server.common.data.cf.configuration.CalculatedFieldConfig
|
|||||||
import org.thingsboard.server.common.data.cf.configuration.Output;
|
import org.thingsboard.server.common.data.cf.configuration.Output;
|
||||||
import org.thingsboard.server.common.data.cf.configuration.OutputType;
|
import org.thingsboard.server.common.data.cf.configuration.OutputType;
|
||||||
import org.thingsboard.server.common.data.cf.configuration.ReferencedEntityKey;
|
import org.thingsboard.server.common.data.cf.configuration.ReferencedEntityKey;
|
||||||
import org.thingsboard.server.common.data.cf.configuration.RelationQueryDynamicSourceConfiguration;
|
import org.thingsboard.server.common.data.cf.configuration.RelationPathQueryDynamicSourceConfiguration;
|
||||||
import org.thingsboard.server.common.data.cf.configuration.ScriptCalculatedFieldConfiguration;
|
import org.thingsboard.server.common.data.cf.configuration.ScriptCalculatedFieldConfiguration;
|
||||||
import org.thingsboard.server.common.data.cf.configuration.SimpleCalculatedFieldConfiguration;
|
import org.thingsboard.server.common.data.cf.configuration.SimpleCalculatedFieldConfiguration;
|
||||||
import org.thingsboard.server.common.data.cf.configuration.geofencing.EntityCoordinates;
|
import org.thingsboard.server.common.data.cf.configuration.geofencing.EntityCoordinates;
|
||||||
@ -47,10 +47,12 @@ import org.thingsboard.server.common.data.id.AssetProfileId;
|
|||||||
import org.thingsboard.server.common.data.id.EntityId;
|
import org.thingsboard.server.common.data.id.EntityId;
|
||||||
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.RelationPathLevel;
|
||||||
import org.thingsboard.server.controller.CalculatedFieldControllerTest;
|
import org.thingsboard.server.controller.CalculatedFieldControllerTest;
|
||||||
import org.thingsboard.server.dao.service.DaoSqlTest;
|
import org.thingsboard.server.dao.service.DaoSqlTest;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
@ -760,19 +762,13 @@ public class CalculatedFieldIntegrationTest extends CalculatedFieldControllerTes
|
|||||||
|
|
||||||
// Zone groups: ATTRIBUTE on specific assets (one zone per group)
|
// Zone groups: ATTRIBUTE on specific assets (one zone per group)
|
||||||
ZoneGroupConfiguration allowedZonesGroup = new ZoneGroupConfiguration("zone", REPORT_TRANSITION_EVENTS_AND_PRESENCE_STATUS, false);
|
ZoneGroupConfiguration allowedZonesGroup = new ZoneGroupConfiguration("zone", REPORT_TRANSITION_EVENTS_AND_PRESENCE_STATUS, false);
|
||||||
var allowedZoneDynamicSourceConfiguration = new RelationQueryDynamicSourceConfiguration();
|
var allowedZoneDynamicSourceConfiguration = new RelationPathQueryDynamicSourceConfiguration();
|
||||||
allowedZoneDynamicSourceConfiguration.setDirection(EntitySearchDirection.FROM);
|
allowedZoneDynamicSourceConfiguration.setLevels(List.of(new RelationPathLevel(EntitySearchDirection.FROM, "AllowedZone")));
|
||||||
allowedZoneDynamicSourceConfiguration.setRelationType("AllowedZone");
|
|
||||||
allowedZoneDynamicSourceConfiguration.setMaxLevel(1);
|
|
||||||
allowedZoneDynamicSourceConfiguration.setFetchLastLevelOnly(true);
|
|
||||||
allowedZonesGroup.setRefDynamicSourceConfiguration(allowedZoneDynamicSourceConfiguration);
|
allowedZonesGroup.setRefDynamicSourceConfiguration(allowedZoneDynamicSourceConfiguration);
|
||||||
|
|
||||||
ZoneGroupConfiguration restrictedZonesGroup = new ZoneGroupConfiguration("zone", REPORT_TRANSITION_EVENTS_AND_PRESENCE_STATUS, false);
|
ZoneGroupConfiguration restrictedZonesGroup = new ZoneGroupConfiguration("zone", REPORT_TRANSITION_EVENTS_AND_PRESENCE_STATUS, false);
|
||||||
var restrictedZoneDynamicSourceConfiguration = new RelationQueryDynamicSourceConfiguration();
|
var restrictedZoneDynamicSourceConfiguration = new RelationPathQueryDynamicSourceConfiguration();
|
||||||
restrictedZoneDynamicSourceConfiguration.setDirection(EntitySearchDirection.FROM);
|
restrictedZoneDynamicSourceConfiguration.setLevels(List.of(new RelationPathLevel(EntitySearchDirection.FROM, "RestrictedZone")));
|
||||||
restrictedZoneDynamicSourceConfiguration.setRelationType("RestrictedZone");
|
|
||||||
restrictedZoneDynamicSourceConfiguration.setMaxLevel(1);
|
|
||||||
restrictedZoneDynamicSourceConfiguration.setFetchLastLevelOnly(true);
|
|
||||||
restrictedZonesGroup.setRefDynamicSourceConfiguration(restrictedZoneDynamicSourceConfiguration);
|
restrictedZonesGroup.setRefDynamicSourceConfiguration(restrictedZoneDynamicSourceConfiguration);
|
||||||
|
|
||||||
cfg.setZoneGroups(Map.of("allowedZones", allowedZonesGroup, "restrictedZones", restrictedZonesGroup));
|
cfg.setZoneGroups(Map.of("allowedZones", allowedZonesGroup, "restrictedZones", restrictedZonesGroup));
|
||||||
@ -870,11 +866,8 @@ public class CalculatedFieldIntegrationTest extends CalculatedFieldControllerTes
|
|||||||
cfg.setEntityCoordinates(new EntityCoordinates(ENTITY_ID_LATITUDE_ARGUMENT_KEY, ENTITY_ID_LONGITUDE_ARGUMENT_KEY));
|
cfg.setEntityCoordinates(new EntityCoordinates(ENTITY_ID_LATITUDE_ARGUMENT_KEY, ENTITY_ID_LONGITUDE_ARGUMENT_KEY));
|
||||||
|
|
||||||
var allowedZonesGroup = new ZoneGroupConfiguration("zone", REPORT_TRANSITION_EVENTS_AND_PRESENCE_STATUS, false);
|
var allowedZonesGroup = new ZoneGroupConfiguration("zone", REPORT_TRANSITION_EVENTS_AND_PRESENCE_STATUS, false);
|
||||||
var allowedZoneDynamicSourceConfiguration = new RelationQueryDynamicSourceConfiguration();
|
var allowedZoneDynamicSourceConfiguration = new RelationPathQueryDynamicSourceConfiguration();
|
||||||
allowedZoneDynamicSourceConfiguration.setDirection(EntitySearchDirection.FROM);
|
allowedZoneDynamicSourceConfiguration.setLevels(List.of(new RelationPathLevel(EntitySearchDirection.FROM, "AllowedZone")));
|
||||||
allowedZoneDynamicSourceConfiguration.setRelationType("AllowedZone");
|
|
||||||
allowedZoneDynamicSourceConfiguration.setMaxLevel(1);
|
|
||||||
allowedZoneDynamicSourceConfiguration.setFetchLastLevelOnly(true);
|
|
||||||
allowedZonesGroup.setRefDynamicSourceConfiguration(allowedZoneDynamicSourceConfiguration);
|
allowedZonesGroup.setRefDynamicSourceConfiguration(allowedZoneDynamicSourceConfiguration);
|
||||||
cfg.setZoneGroups(Map.of("allowedZones", allowedZonesGroup));
|
cfg.setZoneGroups(Map.of("allowedZones", allowedZonesGroup));
|
||||||
|
|
||||||
|
|||||||
@ -28,7 +28,7 @@ import org.thingsboard.server.common.data.cf.CalculatedFieldType;
|
|||||||
import org.thingsboard.server.common.data.cf.configuration.CalculatedFieldConfiguration;
|
import org.thingsboard.server.common.data.cf.configuration.CalculatedFieldConfiguration;
|
||||||
import org.thingsboard.server.common.data.cf.configuration.Output;
|
import org.thingsboard.server.common.data.cf.configuration.Output;
|
||||||
import org.thingsboard.server.common.data.cf.configuration.OutputType;
|
import org.thingsboard.server.common.data.cf.configuration.OutputType;
|
||||||
import org.thingsboard.server.common.data.cf.configuration.RelationQueryDynamicSourceConfiguration;
|
import org.thingsboard.server.common.data.cf.configuration.RelationPathQueryDynamicSourceConfiguration;
|
||||||
import org.thingsboard.server.common.data.cf.configuration.geofencing.EntityCoordinates;
|
import org.thingsboard.server.common.data.cf.configuration.geofencing.EntityCoordinates;
|
||||||
import org.thingsboard.server.common.data.cf.configuration.geofencing.GeofencingCalculatedFieldConfiguration;
|
import org.thingsboard.server.common.data.cf.configuration.geofencing.GeofencingCalculatedFieldConfiguration;
|
||||||
import org.thingsboard.server.common.data.cf.configuration.geofencing.GeofencingReportStrategy;
|
import org.thingsboard.server.common.data.cf.configuration.geofencing.GeofencingReportStrategy;
|
||||||
@ -41,6 +41,7 @@ import org.thingsboard.server.common.data.kv.DoubleDataEntry;
|
|||||||
import org.thingsboard.server.common.data.kv.JsonDataEntry;
|
import org.thingsboard.server.common.data.kv.JsonDataEntry;
|
||||||
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.RelationPathLevel;
|
||||||
import org.thingsboard.server.dao.relation.RelationService;
|
import org.thingsboard.server.dao.relation.RelationService;
|
||||||
import org.thingsboard.server.dao.usagerecord.ApiLimitService;
|
import org.thingsboard.server.dao.usagerecord.ApiLimitService;
|
||||||
import org.thingsboard.server.service.cf.CalculatedFieldResult;
|
import org.thingsboard.server.service.cf.CalculatedFieldResult;
|
||||||
@ -453,21 +454,15 @@ public class GeofencingCalculatedFieldStateTest {
|
|||||||
config.setEntityCoordinates(entityCoordinates);
|
config.setEntityCoordinates(entityCoordinates);
|
||||||
|
|
||||||
ZoneGroupConfiguration allowedZonesGroup = new ZoneGroupConfiguration("zone", reportStrategy, true);
|
ZoneGroupConfiguration allowedZonesGroup = new ZoneGroupConfiguration("zone", reportStrategy, true);
|
||||||
var allowedZoneDynamicSourceConfiguration = new RelationQueryDynamicSourceConfiguration();
|
var allowedZoneDynamicSourceConfiguration = new RelationPathQueryDynamicSourceConfiguration();
|
||||||
allowedZoneDynamicSourceConfiguration.setDirection(EntitySearchDirection.TO);
|
allowedZoneDynamicSourceConfiguration.setLevels(List.of(new RelationPathLevel(EntitySearchDirection.TO, "AllowedZone")));
|
||||||
allowedZoneDynamicSourceConfiguration.setRelationType("AllowedZone");
|
|
||||||
allowedZoneDynamicSourceConfiguration.setMaxLevel(1);
|
|
||||||
allowedZoneDynamicSourceConfiguration.setFetchLastLevelOnly(true);
|
|
||||||
allowedZonesGroup.setRefDynamicSourceConfiguration(allowedZoneDynamicSourceConfiguration);
|
allowedZonesGroup.setRefDynamicSourceConfiguration(allowedZoneDynamicSourceConfiguration);
|
||||||
allowedZonesGroup.setRelationType("CurrentZone");
|
allowedZonesGroup.setRelationType("CurrentZone");
|
||||||
allowedZonesGroup.setDirection(EntitySearchDirection.TO);
|
allowedZonesGroup.setDirection(EntitySearchDirection.TO);
|
||||||
|
|
||||||
ZoneGroupConfiguration restrictedZonesGroup = new ZoneGroupConfiguration("zone", reportStrategy, true);
|
ZoneGroupConfiguration restrictedZonesGroup = new ZoneGroupConfiguration("zone", reportStrategy, true);
|
||||||
var restrictedZoneDynamicSourceConfiguration = new RelationQueryDynamicSourceConfiguration();
|
var restrictedZoneDynamicSourceConfiguration = new RelationPathQueryDynamicSourceConfiguration();
|
||||||
restrictedZoneDynamicSourceConfiguration.setDirection(EntitySearchDirection.TO);
|
restrictedZoneDynamicSourceConfiguration.setLevels(List.of(new RelationPathLevel(EntitySearchDirection.TO, "RestrictedZone")));
|
||||||
restrictedZoneDynamicSourceConfiguration.setRelationType("RestrictedZone");
|
|
||||||
restrictedZoneDynamicSourceConfiguration.setMaxLevel(1);
|
|
||||||
restrictedZoneDynamicSourceConfiguration.setFetchLastLevelOnly(true);
|
|
||||||
restrictedZonesGroup.setRefDynamicSourceConfiguration(restrictedZoneDynamicSourceConfiguration);
|
restrictedZonesGroup.setRefDynamicSourceConfiguration(restrictedZoneDynamicSourceConfiguration);
|
||||||
restrictedZonesGroup.setRelationType("CurrentZone");
|
restrictedZonesGroup.setRelationType("CurrentZone");
|
||||||
restrictedZonesGroup.setDirection(EntitySearchDirection.TO);
|
restrictedZonesGroup.setDirection(EntitySearchDirection.TO);
|
||||||
|
|||||||
@ -31,7 +31,7 @@ public class ArgumentTest {
|
|||||||
@Test
|
@Test
|
||||||
void validateShouldReturnTrueIfDynamicSourceConfigurationIsNotNull() {
|
void validateShouldReturnTrueIfDynamicSourceConfigurationIsNotNull() {
|
||||||
var argument = new Argument();
|
var argument = new Argument();
|
||||||
argument.setRefDynamicSourceConfiguration(new RelationQueryDynamicSourceConfiguration());
|
argument.setRefDynamicSourceConfiguration(new RelationPathQueryDynamicSourceConfiguration());
|
||||||
assertThat(argument.hasDynamicSource()).isTrue();
|
assertThat(argument.hasDynamicSource()).isTrue();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -23,7 +23,7 @@ import org.thingsboard.server.common.data.AttributeScope;
|
|||||||
import org.thingsboard.server.common.data.cf.configuration.Argument;
|
import org.thingsboard.server.common.data.cf.configuration.Argument;
|
||||||
import org.thingsboard.server.common.data.cf.configuration.ArgumentType;
|
import org.thingsboard.server.common.data.cf.configuration.ArgumentType;
|
||||||
import org.thingsboard.server.common.data.cf.configuration.ReferencedEntityKey;
|
import org.thingsboard.server.common.data.cf.configuration.ReferencedEntityKey;
|
||||||
import org.thingsboard.server.common.data.cf.configuration.RelationQueryDynamicSourceConfiguration;
|
import org.thingsboard.server.common.data.cf.configuration.RelationPathQueryDynamicSourceConfiguration;
|
||||||
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;
|
||||||
|
|
||||||
@ -100,7 +100,7 @@ public class ZoneGroupConfigurationTest {
|
|||||||
@Test
|
@Test
|
||||||
void whenHasDynamicSourceCalled_shouldReturnTrueIfDynamicSourceConfigurationIsNotNull() {
|
void whenHasDynamicSourceCalled_shouldReturnTrueIfDynamicSourceConfigurationIsNotNull() {
|
||||||
var zoneGroupConfiguration = new ZoneGroupConfiguration("perimeter", REPORT_TRANSITION_EVENTS_AND_PRESENCE_STATUS, false);
|
var zoneGroupConfiguration = new ZoneGroupConfiguration("perimeter", REPORT_TRANSITION_EVENTS_AND_PRESENCE_STATUS, false);
|
||||||
zoneGroupConfiguration.setRefDynamicSourceConfiguration(new RelationQueryDynamicSourceConfiguration());
|
zoneGroupConfiguration.setRefDynamicSourceConfiguration(new RelationPathQueryDynamicSourceConfiguration());
|
||||||
assertThat(zoneGroupConfiguration.hasDynamicSource()).isTrue();
|
assertThat(zoneGroupConfiguration.hasDynamicSource()).isTrue();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -307,7 +307,7 @@ public class JpaRelationDao extends JpaAbstractDaoListeningExecutorService imple
|
|||||||
String sql = buildRelationPathSql(query);
|
String sql = buildRelationPathSql(query);
|
||||||
Object[] params = buildRelationPathParams(query);
|
Object[] params = buildRelationPathParams(query);
|
||||||
|
|
||||||
log.info("[{}] relation path query: {}", tenantId, sql);
|
log.trace("[{}] relation path query: {}", tenantId, sql);
|
||||||
|
|
||||||
return jdbcTemplate.queryForList(sql, params).stream()
|
return jdbcTemplate.queryForList(sql, params).stream()
|
||||||
.map(row -> {
|
.map(row -> {
|
||||||
|
|||||||
@ -31,7 +31,7 @@ import org.thingsboard.server.common.data.cf.configuration.CalculatedFieldConfig
|
|||||||
import org.thingsboard.server.common.data.cf.configuration.Output;
|
import org.thingsboard.server.common.data.cf.configuration.Output;
|
||||||
import org.thingsboard.server.common.data.cf.configuration.OutputType;
|
import org.thingsboard.server.common.data.cf.configuration.OutputType;
|
||||||
import org.thingsboard.server.common.data.cf.configuration.ReferencedEntityKey;
|
import org.thingsboard.server.common.data.cf.configuration.ReferencedEntityKey;
|
||||||
import org.thingsboard.server.common.data.cf.configuration.RelationQueryDynamicSourceConfiguration;
|
import org.thingsboard.server.common.data.cf.configuration.RelationPathQueryDynamicSourceConfiguration;
|
||||||
import org.thingsboard.server.common.data.cf.configuration.SimpleCalculatedFieldConfiguration;
|
import org.thingsboard.server.common.data.cf.configuration.SimpleCalculatedFieldConfiguration;
|
||||||
import org.thingsboard.server.common.data.cf.configuration.geofencing.EntityCoordinates;
|
import org.thingsboard.server.common.data.cf.configuration.geofencing.EntityCoordinates;
|
||||||
import org.thingsboard.server.common.data.cf.configuration.geofencing.GeofencingCalculatedFieldConfiguration;
|
import org.thingsboard.server.common.data.cf.configuration.geofencing.GeofencingCalculatedFieldConfiguration;
|
||||||
@ -39,15 +39,19 @@ import org.thingsboard.server.common.data.cf.configuration.geofencing.ZoneGroupC
|
|||||||
import org.thingsboard.server.common.data.id.EntityId;
|
import org.thingsboard.server.common.data.id.EntityId;
|
||||||
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.RelationPathLevel;
|
||||||
import org.thingsboard.server.dao.cf.CalculatedFieldService;
|
import org.thingsboard.server.dao.cf.CalculatedFieldService;
|
||||||
import org.thingsboard.server.dao.device.DeviceService;
|
import org.thingsboard.server.dao.device.DeviceService;
|
||||||
import org.thingsboard.server.dao.exception.DataValidationException;
|
import org.thingsboard.server.dao.exception.DataValidationException;
|
||||||
import org.thingsboard.server.dao.tenant.TbTenantProfileCache;
|
import org.thingsboard.server.dao.tenant.TbTenantProfileCache;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||||
|
import static org.mockito.Mockito.mock;
|
||||||
import static org.thingsboard.server.common.data.cf.configuration.geofencing.GeofencingReportStrategy.REPORT_TRANSITION_EVENTS_AND_PRESENCE_STATUS;
|
import static org.thingsboard.server.common.data.cf.configuration.geofencing.GeofencingReportStrategy.REPORT_TRANSITION_EVENTS_AND_PRESENCE_STATUS;
|
||||||
|
|
||||||
@DaoSqlTest
|
@DaoSqlTest
|
||||||
@ -112,10 +116,8 @@ public class CalculatedFieldServiceTest extends AbstractServiceTest {
|
|||||||
|
|
||||||
// Zone-group argument (ATTRIBUTE) — make it DYNAMIC so scheduling is enabled
|
// Zone-group argument (ATTRIBUTE) — make it DYNAMIC so scheduling is enabled
|
||||||
ZoneGroupConfiguration zoneGroupConfiguration = new ZoneGroupConfiguration("allowed", REPORT_TRANSITION_EVENTS_AND_PRESENCE_STATUS, false);
|
ZoneGroupConfiguration zoneGroupConfiguration = new ZoneGroupConfiguration("allowed", REPORT_TRANSITION_EVENTS_AND_PRESENCE_STATUS, false);
|
||||||
var dynamicSourceConfiguration = new RelationQueryDynamicSourceConfiguration();
|
var dynamicSourceConfiguration = new RelationPathQueryDynamicSourceConfiguration();
|
||||||
dynamicSourceConfiguration.setDirection(EntitySearchDirection.FROM);
|
dynamicSourceConfiguration.setLevels(List.of(new RelationPathLevel(EntitySearchDirection.FROM, EntityRelation.CONTAINS_TYPE)));
|
||||||
dynamicSourceConfiguration.setMaxLevel(1);
|
|
||||||
dynamicSourceConfiguration.setRelationType(EntityRelation.CONTAINS_TYPE);
|
|
||||||
zoneGroupConfiguration.setRefDynamicSourceConfiguration(dynamicSourceConfiguration);
|
zoneGroupConfiguration.setRefDynamicSourceConfiguration(dynamicSourceConfiguration);
|
||||||
cfg.setZoneGroups(Map.of("allowed", zoneGroupConfiguration));
|
cfg.setZoneGroups(Map.of("allowed", zoneGroupConfiguration));
|
||||||
|
|
||||||
@ -150,19 +152,26 @@ public class CalculatedFieldServiceTest extends AbstractServiceTest {
|
|||||||
// Arrange a device
|
// Arrange a device
|
||||||
Device device = createTestDevice();
|
Device device = createTestDevice();
|
||||||
|
|
||||||
// Build a valid Geofencing configuration
|
|
||||||
GeofencingCalculatedFieldConfiguration cfg = new GeofencingCalculatedFieldConfiguration();
|
GeofencingCalculatedFieldConfiguration cfg = new GeofencingCalculatedFieldConfiguration();
|
||||||
|
|
||||||
// Coordinates: TS_LATEST, no dynamic source
|
// Coordinates: TS_LATEST, no dynamic source
|
||||||
EntityCoordinates entityCoordinates = new EntityCoordinates("latitude", "longitude");
|
EntityCoordinates entityCoordinates = new EntityCoordinates("latitude", "longitude");
|
||||||
cfg.setEntityCoordinates(entityCoordinates);
|
cfg.setEntityCoordinates(entityCoordinates);
|
||||||
|
|
||||||
// Zone-group argument (ATTRIBUTE) — make it DYNAMIC so scheduling is enabled
|
int maxRelationLevel = tbTenantProfileCache.get(tenantId)
|
||||||
|
.getDefaultProfileConfiguration()
|
||||||
|
.getMaxRelationLevelPerCfArgument();
|
||||||
|
|
||||||
|
// Zone-group argument (ATTRIBUTE)
|
||||||
ZoneGroupConfiguration zoneGroupConfiguration = new ZoneGroupConfiguration( "allowed", REPORT_TRANSITION_EVENTS_AND_PRESENCE_STATUS, false);
|
ZoneGroupConfiguration zoneGroupConfiguration = new ZoneGroupConfiguration( "allowed", REPORT_TRANSITION_EVENTS_AND_PRESENCE_STATUS, false);
|
||||||
var dynamicSourceConfiguration = new RelationQueryDynamicSourceConfiguration();
|
var dynamicSourceConfiguration = new RelationPathQueryDynamicSourceConfiguration();
|
||||||
dynamicSourceConfiguration.setDirection(EntitySearchDirection.FROM);
|
|
||||||
dynamicSourceConfiguration.setMaxLevel(Integer.MAX_VALUE);
|
List<RelationPathLevel> levels = new ArrayList<>();
|
||||||
dynamicSourceConfiguration.setRelationType(EntityRelation.CONTAINS_TYPE);
|
for (int i = 0; i < maxRelationLevel + 1; i++) {
|
||||||
|
levels.add(mock(RelationPathLevel.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
dynamicSourceConfiguration.setLevels(levels);
|
||||||
zoneGroupConfiguration.setRefDynamicSourceConfiguration(dynamicSourceConfiguration);
|
zoneGroupConfiguration.setRefDynamicSourceConfiguration(dynamicSourceConfiguration);
|
||||||
cfg.setZoneGroups(Map.of("allowed", zoneGroupConfiguration));
|
cfg.setZoneGroups(Map.of("allowed", zoneGroupConfiguration));
|
||||||
|
|
||||||
@ -195,10 +204,8 @@ public class CalculatedFieldServiceTest extends AbstractServiceTest {
|
|||||||
|
|
||||||
// Zone-group argument (ATTRIBUTE) — make it DYNAMIC so scheduling is enabled
|
// Zone-group argument (ATTRIBUTE) — make it DYNAMIC so scheduling is enabled
|
||||||
ZoneGroupConfiguration zoneGroupConfiguration = new ZoneGroupConfiguration( "allowed", REPORT_TRANSITION_EVENTS_AND_PRESENCE_STATUS, false);
|
ZoneGroupConfiguration zoneGroupConfiguration = new ZoneGroupConfiguration( "allowed", REPORT_TRANSITION_EVENTS_AND_PRESENCE_STATUS, false);
|
||||||
var dynamicSourceConfiguration = new RelationQueryDynamicSourceConfiguration();
|
var dynamicSourceConfiguration = new RelationPathQueryDynamicSourceConfiguration();
|
||||||
dynamicSourceConfiguration.setDirection(EntitySearchDirection.FROM);
|
dynamicSourceConfiguration.setLevels(List.of(new RelationPathLevel(EntitySearchDirection.FROM, EntityRelation.CONTAINS_TYPE)));
|
||||||
dynamicSourceConfiguration.setMaxLevel(1);
|
|
||||||
dynamicSourceConfiguration.setRelationType(EntityRelation.CONTAINS_TYPE);
|
|
||||||
zoneGroupConfiguration.setRefDynamicSourceConfiguration(dynamicSourceConfiguration);
|
zoneGroupConfiguration.setRefDynamicSourceConfiguration(dynamicSourceConfiguration);
|
||||||
cfg.setZoneGroups(Map.of("allowed", zoneGroupConfiguration));
|
cfg.setZoneGroups(Map.of("allowed", zoneGroupConfiguration));
|
||||||
|
|
||||||
|
|||||||
@ -33,7 +33,7 @@ import org.thingsboard.server.common.data.cf.configuration.ArgumentType;
|
|||||||
import org.thingsboard.server.common.data.cf.configuration.Output;
|
import org.thingsboard.server.common.data.cf.configuration.Output;
|
||||||
import org.thingsboard.server.common.data.cf.configuration.OutputType;
|
import org.thingsboard.server.common.data.cf.configuration.OutputType;
|
||||||
import org.thingsboard.server.common.data.cf.configuration.ReferencedEntityKey;
|
import org.thingsboard.server.common.data.cf.configuration.ReferencedEntityKey;
|
||||||
import org.thingsboard.server.common.data.cf.configuration.RelationQueryDynamicSourceConfiguration;
|
import org.thingsboard.server.common.data.cf.configuration.RelationPathQueryDynamicSourceConfiguration;
|
||||||
import org.thingsboard.server.common.data.cf.configuration.ScriptCalculatedFieldConfiguration;
|
import org.thingsboard.server.common.data.cf.configuration.ScriptCalculatedFieldConfiguration;
|
||||||
import org.thingsboard.server.common.data.cf.configuration.SimpleCalculatedFieldConfiguration;
|
import org.thingsboard.server.common.data.cf.configuration.SimpleCalculatedFieldConfiguration;
|
||||||
import org.thingsboard.server.common.data.cf.configuration.geofencing.EntityCoordinates;
|
import org.thingsboard.server.common.data.cf.configuration.geofencing.EntityCoordinates;
|
||||||
@ -50,10 +50,12 @@ import org.thingsboard.server.common.data.id.TenantId;
|
|||||||
import org.thingsboard.server.common.data.id.UserId;
|
import org.thingsboard.server.common.data.id.UserId;
|
||||||
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.RelationPathLevel;
|
||||||
import org.thingsboard.server.msa.AbstractContainerTest;
|
import org.thingsboard.server.msa.AbstractContainerTest;
|
||||||
import org.thingsboard.server.msa.ui.utils.EntityPrototypes;
|
import org.thingsboard.server.msa.ui.utils.EntityPrototypes;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
@ -366,19 +368,13 @@ public class CalculatedFieldTest extends AbstractContainerTest {
|
|||||||
|
|
||||||
// Dynamic groups via relations
|
// Dynamic groups via relations
|
||||||
ZoneGroupConfiguration allowedZoneGroupConfiguration = new ZoneGroupConfiguration("zone", REPORT_TRANSITION_EVENTS_AND_PRESENCE_STATUS, false);
|
ZoneGroupConfiguration allowedZoneGroupConfiguration = new ZoneGroupConfiguration("zone", REPORT_TRANSITION_EVENTS_AND_PRESENCE_STATUS, false);
|
||||||
var allowedDynamicSourceConfiguration = new RelationQueryDynamicSourceConfiguration();
|
var allowedDynamicSourceConfiguration = new RelationPathQueryDynamicSourceConfiguration();
|
||||||
allowedDynamicSourceConfiguration.setDirection(EntitySearchDirection.FROM);
|
allowedDynamicSourceConfiguration.setLevels(List.of(new RelationPathLevel(EntitySearchDirection.FROM, "AllowedZone")));
|
||||||
allowedDynamicSourceConfiguration.setMaxLevel(1);
|
|
||||||
allowedDynamicSourceConfiguration.setFetchLastLevelOnly(true);
|
|
||||||
allowedDynamicSourceConfiguration.setRelationType("AllowedZone");
|
|
||||||
allowedZoneGroupConfiguration.setRefDynamicSourceConfiguration(allowedDynamicSourceConfiguration);
|
allowedZoneGroupConfiguration.setRefDynamicSourceConfiguration(allowedDynamicSourceConfiguration);
|
||||||
|
|
||||||
ZoneGroupConfiguration restrictedZoneGroupConfiguration = new ZoneGroupConfiguration("zone", REPORT_TRANSITION_EVENTS_AND_PRESENCE_STATUS, false);
|
ZoneGroupConfiguration restrictedZoneGroupConfiguration = new ZoneGroupConfiguration("zone", REPORT_TRANSITION_EVENTS_AND_PRESENCE_STATUS, false);
|
||||||
var restrictedDynamicSourceConfiguration = new RelationQueryDynamicSourceConfiguration();
|
var restrictedDynamicSourceConfiguration = new RelationPathQueryDynamicSourceConfiguration();
|
||||||
restrictedDynamicSourceConfiguration.setDirection(EntitySearchDirection.FROM);
|
restrictedDynamicSourceConfiguration.setLevels(List.of(new RelationPathLevel(EntitySearchDirection.FROM, "RestrictedZone")));
|
||||||
restrictedDynamicSourceConfiguration.setMaxLevel(1);
|
|
||||||
restrictedDynamicSourceConfiguration.setFetchLastLevelOnly(true);
|
|
||||||
restrictedDynamicSourceConfiguration.setRelationType("RestrictedZone");
|
|
||||||
restrictedZoneGroupConfiguration.setRefDynamicSourceConfiguration(restrictedDynamicSourceConfiguration);
|
restrictedZoneGroupConfiguration.setRefDynamicSourceConfiguration(restrictedDynamicSourceConfiguration);
|
||||||
|
|
||||||
cfg.setZoneGroups(Map.of("allowedZones", allowedZoneGroupConfiguration, "restrictedZones", restrictedZoneGroupConfiguration));
|
cfg.setZoneGroups(Map.of("allowedZones", allowedZoneGroupConfiguration, "restrictedZones", restrictedZoneGroupConfiguration));
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user