Commit 3176c208a8dce86970a402ee83abeef3a202ad52

Authored by Andrii Shvaika
1 parent ce9dcd17

Data structures

Showing 15 changed files with 230 additions and 43 deletions
@@ -21,6 +21,8 @@ import org.thingsboard.server.service.telemetry.cmd.v1.GetHistoryCmd; @@ -21,6 +21,8 @@ import org.thingsboard.server.service.telemetry.cmd.v1.GetHistoryCmd;
21 import org.thingsboard.server.service.telemetry.cmd.v1.TimeseriesSubscriptionCmd; 21 import org.thingsboard.server.service.telemetry.cmd.v1.TimeseriesSubscriptionCmd;
22 import org.thingsboard.server.service.telemetry.cmd.v2.AlarmDataCmd; 22 import org.thingsboard.server.service.telemetry.cmd.v2.AlarmDataCmd;
23 import org.thingsboard.server.service.telemetry.cmd.v2.AlarmDataUnsubscribeCmd; 23 import org.thingsboard.server.service.telemetry.cmd.v2.AlarmDataUnsubscribeCmd;
  24 +import org.thingsboard.server.service.telemetry.cmd.v2.EntityCountCmd;
  25 +import org.thingsboard.server.service.telemetry.cmd.v2.EntityCountUnsubscribeCmd;
24 import org.thingsboard.server.service.telemetry.cmd.v2.EntityDataCmd; 26 import org.thingsboard.server.service.telemetry.cmd.v2.EntityDataCmd;
25 import org.thingsboard.server.service.telemetry.cmd.v2.EntityDataUnsubscribeCmd; 27 import org.thingsboard.server.service.telemetry.cmd.v2.EntityDataUnsubscribeCmd;
26 28
@@ -46,4 +48,8 @@ public class TelemetryPluginCmdsWrapper { @@ -46,4 +48,8 @@ public class TelemetryPluginCmdsWrapper {
46 48
47 private List<AlarmDataUnsubscribeCmd> alarmDataUnsubscribeCmds; 49 private List<AlarmDataUnsubscribeCmd> alarmDataUnsubscribeCmds;
48 50
  51 + private List<EntityCountCmd> entityCountCmds;
  52 +
  53 + private List<EntityCountUnsubscribeCmd> entityCountUnsubscribeCmds;
  54 +
49 } 55 }
@@ -18,14 +18,14 @@ package org.thingsboard.server.service.telemetry.cmd.v2; @@ -18,14 +18,14 @@ package org.thingsboard.server.service.telemetry.cmd.v2;
18 import com.fasterxml.jackson.annotation.JsonCreator; 18 import com.fasterxml.jackson.annotation.JsonCreator;
19 import com.fasterxml.jackson.annotation.JsonProperty; 19 import com.fasterxml.jackson.annotation.JsonProperty;
20 import lombok.Getter; 20 import lombok.Getter;
21 -import lombok.NoArgsConstructor; 21 +import lombok.ToString;
22 import org.thingsboard.server.common.data.page.PageData; 22 import org.thingsboard.server.common.data.page.PageData;
23 import org.thingsboard.server.common.data.query.AlarmData; 23 import org.thingsboard.server.common.data.query.AlarmData;
24 -import org.thingsboard.server.common.data.query.EntityData;  
25 import org.thingsboard.server.service.telemetry.sub.SubscriptionErrorCode; 24 import org.thingsboard.server.service.telemetry.sub.SubscriptionErrorCode;
26 25
27 import java.util.List; 26 import java.util.List;
28 27
  28 +@ToString
29 public class AlarmDataUpdate extends DataUpdate<AlarmData> { 29 public class AlarmDataUpdate extends DataUpdate<AlarmData> {
30 30
31 @Getter 31 @Getter
@@ -44,8 +44,8 @@ public class AlarmDataUpdate extends DataUpdate<AlarmData> { @@ -44,8 +44,8 @@ public class AlarmDataUpdate extends DataUpdate<AlarmData> {
44 } 44 }
45 45
46 @Override 46 @Override
47 - public DataUpdateType getDataUpdateType() {  
48 - return DataUpdateType.ALARM_DATA; 47 + public CmdUpdateType getCmdUpdateType() {
  48 + return CmdUpdateType.ALARM_DATA;
49 } 49 }
50 50
51 @JsonCreator 51 @JsonCreator
  1 +/**
  2 + * Copyright © 2016-2021 The Thingsboard Authors
  3 + *
  4 + * Licensed under the Apache License, Version 2.0 (the "License");
  5 + * you may not use this file except in compliance with the License.
  6 + * You may obtain a copy of the License at
  7 + *
  8 + * http://www.apache.org/licenses/LICENSE-2.0
  9 + *
  10 + * Unless required by applicable law or agreed to in writing, software
  11 + * distributed under the License is distributed on an "AS IS" BASIS,
  12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13 + * See the License for the specific language governing permissions and
  14 + * limitations under the License.
  15 + */
  16 +package org.thingsboard.server.service.telemetry.cmd.v2;
  17 +
  18 +import lombok.AllArgsConstructor;
  19 +import lombok.Data;
  20 +
  21 +@Data
  22 +@AllArgsConstructor
  23 +public abstract class CmdUpdate {
  24 +
  25 + private final int cmdId;
  26 + private final int errorCode;
  27 + private final String errorMsg;
  28 +
  29 + public abstract CmdUpdateType getCmdUpdateType();
  30 +
  31 +}
application/src/main/java/org/thingsboard/server/service/telemetry/cmd/v2/CmdUpdateType.java renamed from application/src/main/java/org/thingsboard/server/service/telemetry/cmd/v2/DataUpdateType.java
@@ -15,7 +15,8 @@ @@ -15,7 +15,8 @@
15 */ 15 */
16 package org.thingsboard.server.service.telemetry.cmd.v2; 16 package org.thingsboard.server.service.telemetry.cmd.v2;
17 17
18 -public enum DataUpdateType { 18 +public enum CmdUpdateType {
19 ENTITY_DATA, 19 ENTITY_DATA,
20 - ALARM_DATA 20 + ALARM_DATA,
  21 + COUNT_DATA
21 } 22 }
@@ -18,21 +18,27 @@ package org.thingsboard.server.service.telemetry.cmd.v2; @@ -18,21 +18,27 @@ package org.thingsboard.server.service.telemetry.cmd.v2;
18 import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 18 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
19 import lombok.AllArgsConstructor; 19 import lombok.AllArgsConstructor;
20 import lombok.Data; 20 import lombok.Data;
  21 +import lombok.EqualsAndHashCode;
  22 +import lombok.Getter;
  23 +import lombok.ToString;
21 import org.thingsboard.server.common.data.page.PageData; 24 import org.thingsboard.server.common.data.page.PageData;
22 import org.thingsboard.server.service.telemetry.sub.SubscriptionErrorCode; 25 import org.thingsboard.server.service.telemetry.sub.SubscriptionErrorCode;
23 26
24 import java.util.List; 27 import java.util.List;
25 28
26 -@Data  
27 -@AllArgsConstructor  
28 @JsonIgnoreProperties(ignoreUnknown = true) 29 @JsonIgnoreProperties(ignoreUnknown = true)
29 -public abstract class DataUpdate<T> { 30 +public abstract class DataUpdate<T> extends CmdUpdate {
30 31
31 - private final int cmdId; 32 + @Getter
32 private final PageData<T> data; 33 private final PageData<T> data;
  34 + @Getter
33 private final List<T> update; 35 private final List<T> update;
34 - private final int errorCode;  
35 - private final String errorMsg; 36 +
  37 + public DataUpdate(int cmdId, PageData<T> data, List<T> update, int errorCode, String errorMsg) {
  38 + super(cmdId, errorCode, errorMsg);
  39 + this.data = data;
  40 + this.update = update;
  41 + }
36 42
37 public DataUpdate(int cmdId, PageData<T> data, List<T> update) { 43 public DataUpdate(int cmdId, PageData<T> data, List<T> update) {
38 this(cmdId, data, update, SubscriptionErrorCode.NO_ERROR.getCode(), null); 44 this(cmdId, data, update, SubscriptionErrorCode.NO_ERROR.getCode(), null);
@@ -42,5 +48,4 @@ public abstract class DataUpdate<T> { @@ -42,5 +48,4 @@ public abstract class DataUpdate<T> {
42 this(cmdId, null, null, errorCode, errorMsg); 48 this(cmdId, null, null, errorCode, errorMsg);
43 } 49 }
44 50
45 - public abstract DataUpdateType getDataUpdateType();  
46 } 51 }
  1 +/**
  2 + * Copyright © 2016-2021 The Thingsboard Authors
  3 + *
  4 + * Licensed under the Apache License, Version 2.0 (the "License");
  5 + * you may not use this file except in compliance with the License.
  6 + * You may obtain a copy of the License at
  7 + *
  8 + * http://www.apache.org/licenses/LICENSE-2.0
  9 + *
  10 + * Unless required by applicable law or agreed to in writing, software
  11 + * distributed under the License is distributed on an "AS IS" BASIS,
  12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13 + * See the License for the specific language governing permissions and
  14 + * limitations under the License.
  15 + */
  16 +package org.thingsboard.server.service.telemetry.cmd.v2;
  17 +
  18 +import com.fasterxml.jackson.annotation.JsonCreator;
  19 +import com.fasterxml.jackson.annotation.JsonProperty;
  20 +import lombok.Getter;
  21 +import org.thingsboard.server.common.data.query.EntityCountQuery;
  22 +import org.thingsboard.server.common.data.query.EntityDataQuery;
  23 +
  24 +public class EntityCountCmd extends DataCmd {
  25 +
  26 + @Getter
  27 + private final EntityCountQuery query;
  28 +
  29 + @JsonCreator
  30 + public EntityCountCmd(@JsonProperty("cmdId") int cmdId,
  31 + @JsonProperty("query") EntityCountQuery query) {
  32 + super(cmdId);
  33 + this.query = query;
  34 + }
  35 +}
  1 +/**
  2 + * Copyright © 2016-2021 The Thingsboard Authors
  3 + *
  4 + * Licensed under the Apache License, Version 2.0 (the "License");
  5 + * you may not use this file except in compliance with the License.
  6 + * You may obtain a copy of the License at
  7 + *
  8 + * http://www.apache.org/licenses/LICENSE-2.0
  9 + *
  10 + * Unless required by applicable law or agreed to in writing, software
  11 + * distributed under the License is distributed on an "AS IS" BASIS,
  12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13 + * See the License for the specific language governing permissions and
  14 + * limitations under the License.
  15 + */
  16 +package org.thingsboard.server.service.telemetry.cmd.v2;
  17 +
  18 +import lombok.Data;
  19 +
  20 +@Data
  21 +public class EntityCountUnsubscribeCmd implements UnsubscribeCmd {
  22 +
  23 + private final int cmdId;
  24 +
  25 +}
  1 +/**
  2 + * Copyright © 2016-2021 The Thingsboard Authors
  3 + *
  4 + * Licensed under the Apache License, Version 2.0 (the "License");
  5 + * you may not use this file except in compliance with the License.
  6 + * You may obtain a copy of the License at
  7 + *
  8 + * http://www.apache.org/licenses/LICENSE-2.0
  9 + *
  10 + * Unless required by applicable law or agreed to in writing, software
  11 + * distributed under the License is distributed on an "AS IS" BASIS,
  12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13 + * See the License for the specific language governing permissions and
  14 + * limitations under the License.
  15 + */
  16 +package org.thingsboard.server.service.telemetry.cmd.v2;
  17 +
  18 +import com.fasterxml.jackson.annotation.JsonCreator;
  19 +import com.fasterxml.jackson.annotation.JsonProperty;
  20 +import lombok.Getter;
  21 +import lombok.ToString;
  22 +import org.thingsboard.server.common.data.page.PageData;
  23 +import org.thingsboard.server.common.data.query.EntityData;
  24 +import org.thingsboard.server.service.telemetry.sub.SubscriptionErrorCode;
  25 +
  26 +import java.util.List;
  27 +
  28 +@ToString
  29 +public class EntityCountUpdate extends CmdUpdate {
  30 +
  31 + @Getter
  32 + private int count;
  33 +
  34 + public EntityCountUpdate(int cmdId, int count) {
  35 + super(cmdId, SubscriptionErrorCode.NO_ERROR.getCode(), null);
  36 + this.count = count;
  37 + }
  38 +
  39 + public EntityCountUpdate(int cmdId, int errorCode, String errorMsg) {
  40 + super(cmdId, errorCode, errorMsg);
  41 + }
  42 +
  43 + @Override
  44 + public CmdUpdateType getCmdUpdateType() {
  45 + return CmdUpdateType.COUNT_DATA;
  46 + }
  47 +
  48 + @JsonCreator
  49 + public EntityCountUpdate(@JsonProperty("cmdId") int cmdId,
  50 + @JsonProperty("count") int count,
  51 + @JsonProperty("errorCode") int errorCode,
  52 + @JsonProperty("errorMsg") String errorMsg) {
  53 + super(cmdId, errorCode, errorMsg);
  54 + this.count = count;
  55 + }
  56 +
  57 +}
@@ -16,16 +16,16 @@ @@ -16,16 +16,16 @@
16 package org.thingsboard.server.service.telemetry.cmd.v2; 16 package org.thingsboard.server.service.telemetry.cmd.v2;
17 17
18 import com.fasterxml.jackson.annotation.JsonCreator; 18 import com.fasterxml.jackson.annotation.JsonCreator;
19 -import com.fasterxml.jackson.annotation.JsonIgnoreProperties;  
20 import com.fasterxml.jackson.annotation.JsonProperty; 19 import com.fasterxml.jackson.annotation.JsonProperty;
21 import lombok.Getter; 20 import lombok.Getter;
  21 +import lombok.ToString;
22 import org.thingsboard.server.common.data.page.PageData; 22 import org.thingsboard.server.common.data.page.PageData;
23 import org.thingsboard.server.common.data.query.EntityData; 23 import org.thingsboard.server.common.data.query.EntityData;
24 import org.thingsboard.server.service.telemetry.sub.SubscriptionErrorCode; 24 import org.thingsboard.server.service.telemetry.sub.SubscriptionErrorCode;
25 25
26 import java.util.List; 26 import java.util.List;
27 27
28 - 28 +@ToString
29 public class EntityDataUpdate extends DataUpdate<EntityData> { 29 public class EntityDataUpdate extends DataUpdate<EntityData> {
30 30
31 @Getter 31 @Getter
@@ -41,8 +41,8 @@ public class EntityDataUpdate extends DataUpdate<EntityData> { @@ -41,8 +41,8 @@ public class EntityDataUpdate extends DataUpdate<EntityData> {
41 } 41 }
42 42
43 @Override 43 @Override
44 - public DataUpdateType getDataUpdateType() {  
45 - return DataUpdateType.ENTITY_DATA; 44 + public CmdUpdateType getCmdUpdateType() {
  45 + return CmdUpdateType.ENTITY_DATA;
46 } 46 }
47 47
48 @JsonCreator 48 @JsonCreator
@@ -15,8 +15,6 @@ @@ -15,8 +15,6 @@
15 */ 15 */
16 package org.thingsboard.server.service.telemetry.cmd.v2; 16 package org.thingsboard.server.service.telemetry.cmd.v2;
17 17
18 -import lombok.Data;  
19 -  
20 public interface UnsubscribeCmd { 18 public interface UnsubscribeCmd {
21 19
22 int getCmdId(); 20 int getCmdId();
@@ -29,15 +29,13 @@ public abstract class AbstractDataQuery<T extends EntityDataPageLink> extends En @@ -29,15 +29,13 @@ public abstract class AbstractDataQuery<T extends EntityDataPageLink> extends En
29 protected List<EntityKey> entityFields; 29 protected List<EntityKey> entityFields;
30 @Getter 30 @Getter
31 protected List<EntityKey> latestValues; 31 protected List<EntityKey> latestValues;
32 - @Getter  
33 - protected List<KeyFilter> keyFilters;  
34 32
35 public AbstractDataQuery() { 33 public AbstractDataQuery() {
36 super(); 34 super();
37 } 35 }
38 36
39 - public AbstractDataQuery(EntityFilter entityFilter) {  
40 - super(entityFilter); 37 + public AbstractDataQuery(EntityFilter entityFilter, List<KeyFilter> keyFilters) {
  38 + super(entityFilter, keyFilters);
41 } 39 }
42 40
43 public AbstractDataQuery(EntityFilter entityFilter, 41 public AbstractDataQuery(EntityFilter entityFilter,
@@ -45,11 +43,10 @@ public abstract class AbstractDataQuery<T extends EntityDataPageLink> extends En @@ -45,11 +43,10 @@ public abstract class AbstractDataQuery<T extends EntityDataPageLink> extends En
45 List<EntityKey> entityFields, 43 List<EntityKey> entityFields,
46 List<EntityKey> latestValues, 44 List<EntityKey> latestValues,
47 List<KeyFilter> keyFilters) { 45 List<KeyFilter> keyFilters) {
48 - super(entityFilter); 46 + super(entityFilter, keyFilters);
49 this.pageLink = pageLink; 47 this.pageLink = pageLink;
50 this.entityFields = entityFields; 48 this.entityFields = entityFields;
51 this.latestValues = latestValues; 49 this.latestValues = latestValues;
52 - this.keyFilters = keyFilters;  
53 } 50 }
54 51
55 } 52 }
@@ -30,8 +30,8 @@ public class AlarmDataQuery extends AbstractDataQuery<AlarmDataPageLink> { @@ -30,8 +30,8 @@ public class AlarmDataQuery extends AbstractDataQuery<AlarmDataPageLink> {
30 public AlarmDataQuery() { 30 public AlarmDataQuery() {
31 } 31 }
32 32
33 - public AlarmDataQuery(EntityFilter entityFilter) {  
34 - super(entityFilter); 33 + public AlarmDataQuery(EntityFilter entityFilter, List<KeyFilter> keyFilters) {
  34 + super(entityFilter, keyFilters);
35 } 35 }
36 36
37 public AlarmDataQuery(EntityFilter entityFilter, AlarmDataPageLink pageLink, List<EntityKey> entityFields, List<EntityKey> latestValues, List<KeyFilter> keyFilters, List<EntityKey> alarmFields) { 37 public AlarmDataQuery(EntityFilter entityFilter, AlarmDataPageLink pageLink, List<EntityKey> entityFields, List<EntityKey> latestValues, List<KeyFilter> keyFilters, List<EntityKey> alarmFields) {
@@ -17,14 +17,26 @@ package org.thingsboard.server.common.data.query; @@ -17,14 +17,26 @@ package org.thingsboard.server.common.data.query;
17 17
18 import lombok.Getter; 18 import lombok.Getter;
19 19
  20 +import java.util.Collections;
  21 +import java.util.List;
  22 +
20 public class EntityCountQuery { 23 public class EntityCountQuery {
21 24
22 @Getter 25 @Getter
23 private EntityFilter entityFilter; 26 private EntityFilter entityFilter;
24 27
25 - public EntityCountQuery() {} 28 + @Getter
  29 + protected List<KeyFilter> keyFilters;
  30 +
  31 + public EntityCountQuery() {
  32 + }
26 33
27 public EntityCountQuery(EntityFilter entityFilter) { 34 public EntityCountQuery(EntityFilter entityFilter) {
  35 + this(entityFilter, Collections.emptyList());
  36 + }
  37 +
  38 + public EntityCountQuery(EntityFilter entityFilter, List<KeyFilter> keyFilters) {
28 this.entityFilter = entityFilter; 39 this.entityFilter = entityFilter;
  40 + this.keyFilters = keyFilters;
29 } 41 }
30 } 42 }
@@ -27,8 +27,8 @@ public class EntityDataQuery extends AbstractDataQuery<EntityDataPageLink> { @@ -27,8 +27,8 @@ public class EntityDataQuery extends AbstractDataQuery<EntityDataPageLink> {
27 public EntityDataQuery() { 27 public EntityDataQuery() {
28 } 28 }
29 29
30 - public EntityDataQuery(EntityFilter entityFilter) {  
31 - super(entityFilter); 30 + public EntityDataQuery(EntityFilter entityFilter, List<KeyFilter> keyFilters) {
  31 + super(entityFilter, keyFilters);
32 } 32 }
33 33
34 public EntityDataQuery(EntityFilter entityFilter, EntityDataPageLink pageLink, List<EntityKey> entityFields, List<EntityKey> latestValues, List<KeyFilter> keyFilters) { 34 public EntityDataQuery(EntityFilter entityFilter, EntityDataPageLink pageLink, List<EntityKey> entityFields, List<EntityKey> latestValues, List<KeyFilter> keyFilters) {
@@ -15,9 +15,6 @@ @@ -15,9 +15,6 @@
15 */ 15 */
16 package org.thingsboard.server.dao.service; 16 package org.thingsboard.server.dao.service;
17 17
18 -import com.fasterxml.jackson.core.JsonProcessingException;  
19 -import com.fasterxml.jackson.databind.JsonMappingException;  
20 -import com.fasterxml.jackson.databind.ObjectMapper;  
21 import com.google.common.util.concurrent.Futures; 18 import com.google.common.util.concurrent.Futures;
22 import com.google.common.util.concurrent.ListenableFuture; 19 import com.google.common.util.concurrent.ListenableFuture;
23 import org.junit.After; 20 import org.junit.After;
@@ -31,25 +28,48 @@ import org.thingsboard.server.common.data.Device; @@ -31,25 +28,48 @@ import org.thingsboard.server.common.data.Device;
31 import org.thingsboard.server.common.data.EntityType; 28 import org.thingsboard.server.common.data.EntityType;
32 import org.thingsboard.server.common.data.Tenant; 29 import org.thingsboard.server.common.data.Tenant;
33 import org.thingsboard.server.common.data.asset.Asset; 30 import org.thingsboard.server.common.data.asset.Asset;
34 -import org.thingsboard.server.common.data.id.*;  
35 -import org.thingsboard.server.common.data.kv.*; 31 +import org.thingsboard.server.common.data.id.CustomerId;
  32 +import org.thingsboard.server.common.data.id.DeviceId;
  33 +import org.thingsboard.server.common.data.id.EntityId;
  34 +import org.thingsboard.server.common.data.id.TenantId;
  35 +import org.thingsboard.server.common.data.kv.AttributeKvEntry;
  36 +import org.thingsboard.server.common.data.kv.BaseAttributeKvEntry;
  37 +import org.thingsboard.server.common.data.kv.BasicTsKvEntry;
  38 +import org.thingsboard.server.common.data.kv.DoubleDataEntry;
  39 +import org.thingsboard.server.common.data.kv.KvEntry;
  40 +import org.thingsboard.server.common.data.kv.LongDataEntry;
  41 +import org.thingsboard.server.common.data.kv.StringDataEntry;
36 import org.thingsboard.server.common.data.page.PageData; 42 import org.thingsboard.server.common.data.page.PageData;
37 -import org.thingsboard.server.common.data.query.*; 43 +import org.thingsboard.server.common.data.query.AssetSearchQueryFilter;
  44 +import org.thingsboard.server.common.data.query.DeviceSearchQueryFilter;
  45 +import org.thingsboard.server.common.data.query.DeviceTypeFilter;
  46 +import org.thingsboard.server.common.data.query.EntityCountQuery;
  47 +import org.thingsboard.server.common.data.query.EntityData;
  48 +import org.thingsboard.server.common.data.query.EntityDataPageLink;
  49 +import org.thingsboard.server.common.data.query.EntityDataQuery;
  50 +import org.thingsboard.server.common.data.query.EntityDataSortOrder;
  51 +import org.thingsboard.server.common.data.query.EntityKey;
  52 +import org.thingsboard.server.common.data.query.EntityKeyType;
  53 +import org.thingsboard.server.common.data.query.EntityListFilter;
  54 +import org.thingsboard.server.common.data.query.FilterPredicateValue;
  55 +import org.thingsboard.server.common.data.query.KeyFilter;
  56 +import org.thingsboard.server.common.data.query.NumericFilterPredicate;
  57 +import org.thingsboard.server.common.data.query.RelationsQueryFilter;
  58 +import org.thingsboard.server.common.data.query.StringFilterPredicate;
38 import org.thingsboard.server.common.data.relation.EntityRelation; 59 import org.thingsboard.server.common.data.relation.EntityRelation;
39 import org.thingsboard.server.common.data.relation.EntitySearchDirection; 60 import org.thingsboard.server.common.data.relation.EntitySearchDirection;
40 import org.thingsboard.server.common.data.relation.EntityTypeFilter; 61 import org.thingsboard.server.common.data.relation.EntityTypeFilter;
41 import org.thingsboard.server.common.data.relation.RelationTypeGroup; 62 import org.thingsboard.server.common.data.relation.RelationTypeGroup;
42 -import org.thingsboard.server.common.data.rule.RuleChain;  
43 -import org.thingsboard.server.common.data.rule.RuleChainMetaData;  
44 -import org.thingsboard.server.common.data.rule.RuleNode;  
45 import org.thingsboard.server.dao.attributes.AttributesService; 63 import org.thingsboard.server.dao.attributes.AttributesService;
46 import org.thingsboard.server.dao.model.sqlts.ts.TsKvEntity; 64 import org.thingsboard.server.dao.model.sqlts.ts.TsKvEntity;
47 -import org.thingsboard.server.dao.rule.RuleChainService;  
48 import org.thingsboard.server.dao.timeseries.TimeseriesService; 65 import org.thingsboard.server.dao.timeseries.TimeseriesService;
49 -import org.thingsboard.server.dao.util.DaoTestUtil;  
50 -import org.thingsboard.server.dao.util.SqlDbType;  
51 66
52 -import java.util.*; 67 +import java.util.ArrayList;
  68 +import java.util.Arrays;
  69 +import java.util.Collections;
  70 +import java.util.Comparator;
  71 +import java.util.List;
  72 +import java.util.Random;
53 import java.util.concurrent.ExecutionException; 73 import java.util.concurrent.ExecutionException;
54 import java.util.stream.Collectors; 74 import java.util.stream.Collectors;
55 75