Commit fe8b776540ba6fbb2f32ef0cf183ec1df348080e

Authored by Andrew Shvayka
Committed by GitHub
2 parents 4268e109 320aee18

Merge pull request #204 from thingsboard/feature/uuids-refactoring

Refactoring from UUIDs to Strings in SQL DAO to support ordering
Showing 100 changed files with 742 additions and 673 deletions

Too many changes to show.

To preserve performance only 100 of 133 files are displayed.

... ... @@ -106,7 +106,7 @@ coap:
106 106 timeout: "${COAP_TIMEOUT:10000}"
107 107
108 108 database:
109   - type: "${DATABASE_TYPE:cassandra}" # cassandra OR sql
  109 + type: "${DATABASE_TYPE:sql}" # cassandra OR sql
110 110
111 111 # Cassandra driver configuration parameters
112 112 cassandra:
... ...
... ... @@ -66,6 +66,11 @@
66 66 <artifactId>mockito-all</artifactId>
67 67 <scope>test</scope>
68 68 </dependency>
  69 + <dependency>
  70 + <groupId>com.datastax.cassandra</groupId>
  71 + <artifactId>cassandra-driver-core</artifactId>
  72 + <scope>test</scope>
  73 + </dependency>
69 74 </dependencies>
70 75
71 76 <build>
... ...
  1 +/**
  2 + * Copyright © 2016-2017 The Thingsboard Authors
  3 + *
  4 + * Licensed under the Apache License, Version 2.0 (the "License");
  5 + * you may not use this file except in compliance with the License.
  6 + * You may obtain a copy of the License at
  7 + *
  8 + * http://www.apache.org/licenses/LICENSE-2.0
  9 + *
  10 + * Unless required by applicable law or agreed to in writing, software
  11 + * distributed under the License is distributed on an "AS IS" BASIS,
  12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13 + * See the License for the specific language governing permissions and
  14 + * limitations under the License.
  15 + */
  16 +package org.thingsboard.server.common.data;
  17 +
  18 +import java.util.List;
  19 +import java.util.UUID;
  20 +import java.util.stream.Collectors;
  21 +
  22 +/**
  23 + * Created by ashvayka on 13.07.17.
  24 + */
  25 +public class UUIDConverter {
  26 +
  27 + public static UUID fromString(String src) {
  28 + return UUID.fromString(src.substring(7, 15) + "-" + src.substring(3, 7) + "-1"
  29 + + src.substring(0, 3) + "-" + src.substring(15, 19) + "-" + src.substring(19));
  30 + }
  31 +
  32 + public static String fromTimeUUID(UUID src) {
  33 + if (src.version() != 1) {
  34 + throw new IllegalArgumentException("Not a time UUID!");
  35 + }
  36 + String str = src.toString();
  37 + // 58e0a7d7-eebc-11d8-9669-0800200c9a66 => 1d8eebc58e0a7d796690800200c9a66. Note that [11d8] -> [1d8]
  38 + return str.substring(15, 18) + str.substring(9, 13) + str.substring(0, 8) + str.substring(19, 23) + str.substring(24);
  39 + }
  40 +
  41 + public static List<String> fromTimeUUIDs(List<UUID> uuids) {
  42 + if (uuids == null) {
  43 + return null;
  44 + }
  45 + return uuids.stream().map(UUIDConverter::fromTimeUUID).collect(Collectors.toList());
  46 + }
  47 +
  48 +}
  49 +
... ...
... ... @@ -15,6 +15,7 @@
15 15 */
16 16 package org.thingsboard.server.common.data.asset;
17 17
  18 +import org.thingsboard.server.common.data.UUIDConverter;
18 19 import org.thingsboard.server.common.data.id.TenantId;
19 20
20 21 import java.util.UUID;
... ... @@ -40,6 +41,11 @@ public class TenantAssetType {
40 41 this.tenantId = new TenantId(tenantId);
41 42 }
42 43
  44 + public TenantAssetType(String type, String tenantId) {
  45 + this.type = type;
  46 + this.tenantId = new TenantId(UUIDConverter.fromString(tenantId));
  47 + }
  48 +
43 49 public String getType() {
44 50 return type;
45 51 }
... ...
  1 +/**
  2 + * Copyright © 2016-2017 The Thingsboard Authors
  3 + *
  4 + * Licensed under the Apache License, Version 2.0 (the "License");
  5 + * you may not use this file except in compliance with the License.
  6 + * You may obtain a copy of the License at
  7 + *
  8 + * http://www.apache.org/licenses/LICENSE-2.0
  9 + *
  10 + * Unless required by applicable law or agreed to in writing, software
  11 + * distributed under the License is distributed on an "AS IS" BASIS,
  12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13 + * See the License for the specific language governing permissions and
  14 + * limitations under the License.
  15 + */
  16 +package org.thingsboard.server.common.data;
  17 +
  18 +import com.datastax.driver.core.utils.UUIDs;
  19 +import org.junit.Assert;
  20 +import org.junit.Test;
  21 +import org.junit.runner.RunWith;
  22 +import org.mockito.runners.MockitoJUnitRunner;
  23 +
  24 +import java.util.Random;
  25 +import java.util.UUID;
  26 +
  27 +/**
  28 + * Created by ashvayka on 14.07.17.
  29 + */
  30 +@RunWith(MockitoJUnitRunner.class)
  31 +public class UUIDConverterTest {
  32 +
  33 + @Test
  34 + public void basicUuidToStringTest() {
  35 + UUID original = UUID.fromString("58e0a7d7-eebc-11d8-9669-0800200c9a66");
  36 + String result = UUIDConverter.fromTimeUUID(original);
  37 + Assert.assertEquals("1d8eebc58e0a7d796690800200c9a66", result);
  38 + }
  39 +
  40 + @Test
  41 + public void basicStringToUUIDTest() {
  42 + UUID result = UUIDConverter.fromString("1d8eebc58e0a7d796690800200c9a66");
  43 + Assert.assertEquals(UUID.fromString("58e0a7d7-eebc-11d8-9669-0800200c9a66"), result);
  44 + }
  45 +
  46 + @Test(expected = IllegalArgumentException.class)
  47 + public void nonV1UuidToStringTest() {
  48 + UUIDConverter.fromTimeUUID(UUID.fromString("58e0a7d7-eebc-01d8-9669-0800200c9a66"));
  49 + }
  50 +
  51 + @Test
  52 + public void basicUuidComperisonTest() {
  53 + Random r = new Random(System.currentTimeMillis());
  54 + for (int i = 0; i < 100000; i++) {
  55 + long ts = System.currentTimeMillis() + 1000 * 60 * 60 * 24 * 365 * 10;
  56 + long before = (long) (Math.random() * ts);
  57 + long after = (long) (Math.random() * ts);
  58 + if (before > after) {
  59 + long tmp = after;
  60 + after = before;
  61 + before = tmp;
  62 + }
  63 +
  64 + String beforeStr = UUIDConverter.fromTimeUUID(UUIDs.startOf(before));
  65 + String afterStr = UUIDConverter.fromTimeUUID(UUIDs.startOf(after));
  66 +
  67 + if (afterStr.compareTo(beforeStr) < 0) {
  68 + System.out.println("Before: " + before + " | " + beforeStr);
  69 + System.out.println("After: " + after + " | " + afterStr);
  70 + }
  71 + Assert.assertTrue(afterStr.compareTo(beforeStr) >= 0);
  72 + }
  73 + }
  74 +
  75 +
  76 +}
... ...
... ... @@ -47,7 +47,6 @@ import javax.annotation.PostConstruct;
47 47 import javax.annotation.PreDestroy;
48 48 import java.util.ArrayList;
49 49 import java.util.List;
50   -import java.util.UUID;
51 50 import java.util.concurrent.ExecutionException;
52 51 import java.util.concurrent.ExecutorService;
53 52 import java.util.concurrent.Executors;
... ...
... ... @@ -33,11 +33,11 @@ import org.thingsboard.server.common.data.id.EntityId;
33 33 import org.thingsboard.server.common.data.id.TenantId;
34 34 import org.thingsboard.server.common.data.relation.EntityRelation;
35 35 import org.thingsboard.server.common.data.relation.RelationTypeGroup;
36   -import org.thingsboard.server.dao.nosql.CassandraAbstractModelDao;
37   -import org.thingsboard.server.dao.util.NoSqlDao;
38 36 import org.thingsboard.server.dao.model.ModelConstants;
39 37 import org.thingsboard.server.dao.model.nosql.AlarmEntity;
  38 +import org.thingsboard.server.dao.nosql.CassandraAbstractModelDao;
40 39 import org.thingsboard.server.dao.relation.RelationDao;
  40 +import org.thingsboard.server.dao.util.NoSqlDao;
41 41
42 42 import java.util.ArrayList;
43 43 import java.util.List;
... ...
... ... @@ -20,7 +20,6 @@ import org.thingsboard.server.common.data.asset.Asset;
20 20 import org.thingsboard.server.common.data.asset.TenantAssetType;
21 21 import org.thingsboard.server.common.data.page.TextPageLink;
22 22 import org.thingsboard.server.dao.Dao;
23   -import org.thingsboard.server.dao.model.TenantAssetTypeEntity;
24 23
25 24 import java.util.List;
26 25 import java.util.Optional;
... ...
... ... @@ -18,9 +18,9 @@ package org.thingsboard.server.dao.asset;
18 18 import lombok.Data;
19 19 import org.thingsboard.server.common.data.EntityType;
20 20 import org.thingsboard.server.common.data.relation.EntityRelation;
21   -import org.thingsboard.server.dao.relation.RelationsSearchParameters;
22 21 import org.thingsboard.server.dao.relation.EntityRelationsQuery;
23 22 import org.thingsboard.server.dao.relation.EntityTypeFilter;
  23 +import org.thingsboard.server.dao.relation.RelationsSearchParameters;
24 24
25 25 import javax.annotation.Nullable;
26 26 import java.util.Collections;
... ...
... ... @@ -51,7 +51,7 @@ import java.util.List;
51 51 import java.util.Optional;
52 52 import java.util.stream.Collectors;
53 53
54   -import static org.thingsboard.server.dao.DaoUtil.*;
  54 +import static org.thingsboard.server.dao.DaoUtil.toUUIDs;
55 55 import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID;
56 56 import static org.thingsboard.server.dao.service.Validator.*;
57 57
... ...
... ... @@ -27,11 +27,11 @@ import org.springframework.stereotype.Component;
27 27 import org.thingsboard.server.common.data.asset.Asset;
28 28 import org.thingsboard.server.common.data.asset.TenantAssetType;
29 29 import org.thingsboard.server.common.data.page.TextPageLink;
30   -import org.thingsboard.server.dao.nosql.CassandraAbstractSearchTextDao;
31 30 import org.thingsboard.server.dao.DaoUtil;
32   -import org.thingsboard.server.dao.util.NoSqlDao;
33 31 import org.thingsboard.server.dao.model.TenantAssetTypeEntity;
34 32 import org.thingsboard.server.dao.model.nosql.AssetEntity;
  33 +import org.thingsboard.server.dao.nosql.CassandraAbstractSearchTextDao;
  34 +import org.thingsboard.server.dao.util.NoSqlDao;
35 35
36 36 import javax.annotation.Nullable;
37 37 import java.util.*;
... ...
... ... @@ -15,8 +15,6 @@
15 15 */
16 16 package org.thingsboard.server.dao.attributes;
17 17
18   -import com.datastax.driver.core.ResultSet;
19   -import com.datastax.driver.core.ResultSetFuture;
20 18 import com.google.common.collect.Lists;
21 19 import com.google.common.util.concurrent.Futures;
22 20 import com.google.common.util.concurrent.ListenableFuture;
... ...
... ... @@ -26,10 +26,10 @@ import org.springframework.stereotype.Component;
26 26 import org.thingsboard.server.common.data.id.EntityId;
27 27 import org.thingsboard.server.common.data.kv.AttributeKvEntry;
28 28 import org.thingsboard.server.common.data.kv.BaseAttributeKvEntry;
29   -import org.thingsboard.server.dao.nosql.CassandraAbstractAsyncDao;
30   -import org.thingsboard.server.dao.util.NoSqlDao;
31 29 import org.thingsboard.server.dao.model.ModelConstants;
  30 +import org.thingsboard.server.dao.nosql.CassandraAbstractAsyncDao;
32 31 import org.thingsboard.server.dao.timeseries.CassandraBaseTimeseriesDao;
  32 +import org.thingsboard.server.dao.util.NoSqlDao;
33 33
34 34 import javax.annotation.PostConstruct;
35 35 import javax.annotation.PreDestroy;
... ...
... ... @@ -17,9 +17,10 @@ package org.thingsboard.server.dao.cassandra;
17 17
18 18 import org.springframework.beans.factory.annotation.Value;
19 19 import org.springframework.stereotype.Component;
20   -import javax.annotation.PostConstruct;
21 20 import org.thingsboard.server.dao.util.NoSqlDao;
22 21
  22 +import javax.annotation.PostConstruct;
  23 +
23 24 @Component
24 25 @NoSqlDao
25 26 public class CassandraCluster extends AbstractCassandraCluster {
... ...
... ... @@ -27,11 +27,11 @@ import org.thingsboard.server.common.data.page.TextPageLink;
27 27 import org.thingsboard.server.common.data.plugin.ComponentDescriptor;
28 28 import org.thingsboard.server.common.data.plugin.ComponentScope;
29 29 import org.thingsboard.server.common.data.plugin.ComponentType;
30   -import org.thingsboard.server.dao.nosql.CassandraAbstractSearchTextDao;
31 30 import org.thingsboard.server.dao.DaoUtil;
32   -import org.thingsboard.server.dao.util.NoSqlDao;
33 31 import org.thingsboard.server.dao.model.ModelConstants;
34 32 import org.thingsboard.server.dao.model.nosql.ComponentDescriptorEntity;
  33 +import org.thingsboard.server.dao.nosql.CassandraAbstractSearchTextDao;
  34 +import org.thingsboard.server.dao.util.NoSqlDao;
35 35
36 36 import java.util.Arrays;
37 37 import java.util.List;
... ...
... ... @@ -20,11 +20,11 @@ import lombok.extern.slf4j.Slf4j;
20 20 import org.springframework.stereotype.Component;
21 21 import org.thingsboard.server.common.data.Customer;
22 22 import org.thingsboard.server.common.data.page.TextPageLink;
23   -import org.thingsboard.server.dao.nosql.CassandraAbstractSearchTextDao;
24 23 import org.thingsboard.server.dao.DaoUtil;
25   -import org.thingsboard.server.dao.util.NoSqlDao;
26 24 import org.thingsboard.server.dao.model.ModelConstants;
27 25 import org.thingsboard.server.dao.model.nosql.CustomerEntity;
  26 +import org.thingsboard.server.dao.nosql.CassandraAbstractSearchTextDao;
  27 +import org.thingsboard.server.dao.util.NoSqlDao;
28 28
29 29 import java.util.Arrays;
30 30 import java.util.List;
... ...
... ... @@ -15,12 +15,12 @@
15 15 */
16 16 package org.thingsboard.server.dao.customer;
17 17
18   -import java.util.Optional;
19 18 import org.thingsboard.server.common.data.Customer;
20 19 import org.thingsboard.server.common.data.page.TextPageLink;
21 20 import org.thingsboard.server.dao.Dao;
22 21
23 22 import java.util.List;
  23 +import java.util.Optional;
24 24 import java.util.UUID;
25 25
26 26 /**
... ...
... ... @@ -15,12 +15,6 @@
15 15 */
16 16 package org.thingsboard.server.dao.customer;
17 17
18   -import static org.thingsboard.server.dao.service.Validator.validateId;
19   -
20   -import java.io.IOException;
21   -import java.util.List;
22   -import java.util.Optional;
23   -
24 18 import com.fasterxml.jackson.databind.JsonNode;
25 19 import com.fasterxml.jackson.databind.ObjectMapper;
26 20 import com.google.common.util.concurrent.ListenableFuture;
... ... @@ -45,6 +39,12 @@ import org.thingsboard.server.dao.service.Validator;
45 39 import org.thingsboard.server.dao.tenant.TenantDao;
46 40 import org.thingsboard.server.dao.user.UserService;
47 41
  42 +import java.io.IOException;
  43 +import java.util.List;
  44 +import java.util.Optional;
  45 +
  46 +import static org.thingsboard.server.dao.service.Validator.validateId;
  47 +
48 48 @Service
49 49 @Slf4j
50 50 public class CustomerServiceImpl extends AbstractEntityService implements CustomerService {
... ...
... ... @@ -17,9 +17,9 @@ package org.thingsboard.server.dao.dashboard;
17 17
18 18 import org.springframework.stereotype.Component;
19 19 import org.thingsboard.server.common.data.Dashboard;
  20 +import org.thingsboard.server.dao.model.nosql.DashboardEntity;
20 21 import org.thingsboard.server.dao.nosql.CassandraAbstractSearchTextDao;
21 22 import org.thingsboard.server.dao.util.NoSqlDao;
22   -import org.thingsboard.server.dao.model.nosql.DashboardEntity;
23 23
24 24 import static org.thingsboard.server.dao.model.ModelConstants.DASHBOARD_COLUMN_FAMILY_NAME;
25 25
... ...
... ... @@ -19,10 +19,10 @@ import lombok.extern.slf4j.Slf4j;
19 19 import org.springframework.stereotype.Component;
20 20 import org.thingsboard.server.common.data.DashboardInfo;
21 21 import org.thingsboard.server.common.data.page.TextPageLink;
22   -import org.thingsboard.server.dao.nosql.CassandraAbstractSearchTextDao;
23 22 import org.thingsboard.server.dao.DaoUtil;
24   -import org.thingsboard.server.dao.util.NoSqlDao;
25 23 import org.thingsboard.server.dao.model.nosql.DashboardInfoEntity;
  24 +import org.thingsboard.server.dao.nosql.CassandraAbstractSearchTextDao;
  25 +import org.thingsboard.server.dao.util.NoSqlDao;
26 26
27 27 import java.util.Arrays;
28 28 import java.util.Collections;
... ...
... ... @@ -19,11 +19,11 @@ import com.datastax.driver.core.querybuilder.Select.Where;
19 19 import lombok.extern.slf4j.Slf4j;
20 20 import org.springframework.stereotype.Component;
21 21 import org.thingsboard.server.common.data.security.DeviceCredentials;
22   -import org.thingsboard.server.dao.nosql.CassandraAbstractModelDao;
23 22 import org.thingsboard.server.dao.DaoUtil;
24   -import org.thingsboard.server.dao.util.NoSqlDao;
25 23 import org.thingsboard.server.dao.model.ModelConstants;
26 24 import org.thingsboard.server.dao.model.nosql.DeviceCredentialsEntity;
  25 +import org.thingsboard.server.dao.nosql.CassandraAbstractModelDao;
  26 +import org.thingsboard.server.dao.util.NoSqlDao;
27 27
28 28 import java.util.UUID;
29 29
... ...
... ... @@ -27,11 +27,11 @@ import org.springframework.stereotype.Component;
27 27 import org.thingsboard.server.common.data.Device;
28 28 import org.thingsboard.server.common.data.TenantDeviceType;
29 29 import org.thingsboard.server.common.data.page.TextPageLink;
30   -import org.thingsboard.server.dao.nosql.CassandraAbstractSearchTextDao;
31 30 import org.thingsboard.server.dao.DaoUtil;
32   -import org.thingsboard.server.dao.util.NoSqlDao;
33 31 import org.thingsboard.server.dao.model.TenantDeviceTypeEntity;
34 32 import org.thingsboard.server.dao.model.nosql.DeviceEntity;
  33 +import org.thingsboard.server.dao.nosql.CassandraAbstractSearchTextDao;
  34 +import org.thingsboard.server.dao.util.NoSqlDao;
35 35
36 36 import javax.annotation.Nullable;
37 37 import java.util.*;
... ...
... ... @@ -20,7 +20,6 @@ import org.thingsboard.server.common.data.Device;
20 20 import org.thingsboard.server.common.data.TenantDeviceType;
21 21 import org.thingsboard.server.common.data.page.TextPageLink;
22 22 import org.thingsboard.server.dao.Dao;
23   -import org.thingsboard.server.dao.model.TenantDeviceTypeEntity;
24 23
25 24 import java.util.List;
26 25 import java.util.Optional;
... ...
... ... @@ -21,7 +21,7 @@ import com.google.common.util.concurrent.ListenableFuture;
21 21 import lombok.extern.slf4j.Slf4j;
22 22 import org.springframework.beans.factory.annotation.Autowired;
23 23 import org.springframework.stereotype.Service;
24   -import org.thingsboard.server.common.data.*;
  24 +import org.thingsboard.server.common.data.HasName;
25 25 import org.thingsboard.server.common.data.alarm.AlarmId;
26 26 import org.thingsboard.server.common.data.id.*;
27 27 import org.thingsboard.server.dao.alarm.AlarmService;
... ...
... ... @@ -28,11 +28,11 @@ import org.thingsboard.server.common.data.id.EntityId;
28 28 import org.thingsboard.server.common.data.id.EventId;
29 29 import org.thingsboard.server.common.data.id.TenantId;
30 30 import org.thingsboard.server.common.data.page.TimePageLink;
31   -import org.thingsboard.server.dao.nosql.CassandraAbstractSearchTimeDao;
32 31 import org.thingsboard.server.dao.DaoUtil;
33   -import org.thingsboard.server.dao.util.NoSqlDao;
34 32 import org.thingsboard.server.dao.model.ModelConstants;
35 33 import org.thingsboard.server.dao.model.nosql.EventEntity;
  34 +import org.thingsboard.server.dao.nosql.CassandraAbstractSearchTimeDao;
  35 +import org.thingsboard.server.dao.util.NoSqlDao;
36 36
37 37 import java.util.Arrays;
38 38 import java.util.List;
... ...
  1 +/**
  2 + * Copyright © 2016-2017 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.dao.model;
  17 +
  18 +import lombok.Data;
  19 +import org.thingsboard.server.common.data.UUIDConverter;
  20 +
  21 +import javax.persistence.Column;
  22 +import javax.persistence.Id;
  23 +import javax.persistence.MappedSuperclass;
  24 +import java.util.UUID;
  25 +
  26 +/**
  27 + * Created by ashvayka on 13.07.17.
  28 + */
  29 +@Data
  30 +@MappedSuperclass
  31 +public abstract class BaseSqlEntity<D> implements BaseEntity<D> {
  32 +
  33 + @Id
  34 + @Column(name = ModelConstants.ID_PROPERTY)
  35 + protected String id;
  36 +
  37 + @Override
  38 + public UUID getId() {
  39 + if (id == null) {
  40 + return null;
  41 + }
  42 + return UUIDConverter.fromString(id);
  43 + }
  44 +
  45 + public void setId(UUID id) {
  46 + this.id = UUIDConverter.fromTimeUUID(id);
  47 + }
  48 +
  49 + protected UUID toUUID(String src){
  50 + return UUIDConverter.fromString(src);
  51 + }
  52 +
  53 + protected String toString(UUID timeUUID){
  54 + return UUIDConverter.fromTimeUUID(timeUUID);
  55 + }
  56 +
  57 +}
... ...
... ... @@ -15,18 +15,20 @@
15 15 */
16 16 package org.thingsboard.server.dao.model;
17 17
18   -import java.util.UUID;
19   -
20 18 import com.datastax.driver.core.utils.UUIDs;
21 19 import org.apache.commons.lang3.ArrayUtils;
  20 +import org.thingsboard.server.common.data.UUIDConverter;
22 21 import org.thingsboard.server.common.data.kv.Aggregation;
23 22
  23 +import java.util.UUID;
  24 +
24 25 public class ModelConstants {
25 26
26 27 private ModelConstants() {
27 28 }
28 29
29 30 public static UUID NULL_UUID = UUIDs.startOf(0);
  31 + public static String NULL_UUID_STR = UUIDConverter.fromTimeUUID(NULL_UUID);
30 32
31 33 /**
32 34 * Generic constants.
... ...
... ... @@ -15,24 +15,20 @@
15 15 */
16 16 package org.thingsboard.server.dao.model.nosql;
17 17
18   -import static org.thingsboard.server.dao.model.ModelConstants.ADMIN_SETTINGS_COLUMN_FAMILY_NAME;
19   -import static org.thingsboard.server.dao.model.ModelConstants.ADMIN_SETTINGS_JSON_VALUE_PROPERTY;
20   -import static org.thingsboard.server.dao.model.ModelConstants.ADMIN_SETTINGS_KEY_PROPERTY;
21   -import static org.thingsboard.server.dao.model.ModelConstants.ID_PROPERTY;
22   -
23   -import java.util.UUID;
24   -
25   -import org.thingsboard.server.common.data.AdminSettings;
26   -import org.thingsboard.server.common.data.id.AdminSettingsId;
27   -import org.thingsboard.server.dao.model.BaseEntity;
28   -import org.thingsboard.server.dao.model.type.JsonCodec;
29   -
30 18 import com.datastax.driver.core.utils.UUIDs;
31 19 import com.datastax.driver.mapping.annotations.Column;
32 20 import com.datastax.driver.mapping.annotations.PartitionKey;
33 21 import com.datastax.driver.mapping.annotations.Table;
34 22 import com.datastax.driver.mapping.annotations.Transient;
35 23 import com.fasterxml.jackson.databind.JsonNode;
  24 +import org.thingsboard.server.common.data.AdminSettings;
  25 +import org.thingsboard.server.common.data.id.AdminSettingsId;
  26 +import org.thingsboard.server.dao.model.BaseEntity;
  27 +import org.thingsboard.server.dao.model.type.JsonCodec;
  28 +
  29 +import java.util.UUID;
  30 +
  31 +import static org.thingsboard.server.dao.model.ModelConstants.*;
36 32
37 33 @Table(name = ADMIN_SETTINGS_COLUMN_FAMILY_NAME)
38 34 public final class AdminSettingsEntity implements BaseEntity<AdminSettings> {
... ...
... ... @@ -15,20 +15,19 @@
15 15 */
16 16 package org.thingsboard.server.dao.model.nosql;
17 17
18   -import java.util.UUID;
19   -
20   -import org.thingsboard.server.common.data.Customer;
21   -import org.thingsboard.server.common.data.id.CustomerId;
22   -import org.thingsboard.server.common.data.id.TenantId;
23   -import org.thingsboard.server.dao.model.SearchTextEntity;
24   -import org.thingsboard.server.dao.model.type.JsonCodec;
25   -
26 18 import com.datastax.driver.core.utils.UUIDs;
27 19 import com.datastax.driver.mapping.annotations.Column;
28 20 import com.datastax.driver.mapping.annotations.PartitionKey;
29 21 import com.datastax.driver.mapping.annotations.Table;
30 22 import com.datastax.driver.mapping.annotations.Transient;
31 23 import com.fasterxml.jackson.databind.JsonNode;
  24 +import org.thingsboard.server.common.data.Customer;
  25 +import org.thingsboard.server.common.data.id.CustomerId;
  26 +import org.thingsboard.server.common.data.id.TenantId;
  27 +import org.thingsboard.server.dao.model.SearchTextEntity;
  28 +import org.thingsboard.server.dao.model.type.JsonCodec;
  29 +
  30 +import java.util.UUID;
32 31
33 32 import static org.thingsboard.server.dao.model.ModelConstants.*;
34 33
... ...
... ... @@ -15,8 +15,12 @@
15 15 */
16 16 package org.thingsboard.server.dao.model.nosql;
17 17
18   -import java.util.UUID;
19   -
  18 +import com.datastax.driver.core.utils.UUIDs;
  19 +import com.datastax.driver.mapping.annotations.Column;
  20 +import com.datastax.driver.mapping.annotations.PartitionKey;
  21 +import com.datastax.driver.mapping.annotations.Table;
  22 +import com.datastax.driver.mapping.annotations.Transient;
  23 +import com.fasterxml.jackson.databind.JsonNode;
20 24 import org.thingsboard.server.common.data.Dashboard;
21 25 import org.thingsboard.server.common.data.id.CustomerId;
22 26 import org.thingsboard.server.common.data.id.DashboardId;
... ... @@ -24,12 +28,7 @@ import org.thingsboard.server.common.data.id.TenantId;
24 28 import org.thingsboard.server.dao.model.SearchTextEntity;
25 29 import org.thingsboard.server.dao.model.type.JsonCodec;
26 30
27   -import com.datastax.driver.core.utils.UUIDs;
28   -import com.datastax.driver.mapping.annotations.Column;
29   -import com.datastax.driver.mapping.annotations.PartitionKey;
30   -import com.datastax.driver.mapping.annotations.Table;
31   -import com.datastax.driver.mapping.annotations.Transient;
32   -import com.fasterxml.jackson.databind.JsonNode;
  31 +import java.util.UUID;
33 32
34 33 import static org.thingsboard.server.dao.model.ModelConstants.*;
35 34
... ...
... ... @@ -15,19 +15,18 @@
15 15 */
16 16 package org.thingsboard.server.dao.model.nosql;
17 17
18   -import java.util.UUID;
19   -
  18 +import com.datastax.driver.core.utils.UUIDs;
  19 +import com.datastax.driver.mapping.annotations.Column;
  20 +import com.datastax.driver.mapping.annotations.PartitionKey;
  21 +import com.datastax.driver.mapping.annotations.Table;
  22 +import com.datastax.driver.mapping.annotations.Transient;
20 23 import org.thingsboard.server.common.data.DashboardInfo;
21 24 import org.thingsboard.server.common.data.id.CustomerId;
22 25 import org.thingsboard.server.common.data.id.DashboardId;
23 26 import org.thingsboard.server.common.data.id.TenantId;
24 27 import org.thingsboard.server.dao.model.SearchTextEntity;
25 28
26   -import com.datastax.driver.core.utils.UUIDs;
27   -import com.datastax.driver.mapping.annotations.Column;
28   -import com.datastax.driver.mapping.annotations.PartitionKey;
29   -import com.datastax.driver.mapping.annotations.Table;
30   -import com.datastax.driver.mapping.annotations.Transient;
  29 +import java.util.UUID;
31 30
32 31 import static org.thingsboard.server.dao.model.ModelConstants.*;
33 32
... ...
... ... @@ -15,8 +15,11 @@
15 15 */
16 16 package org.thingsboard.server.dao.model.nosql;
17 17
18   -import java.util.UUID;
19   -
  18 +import com.datastax.driver.core.utils.UUIDs;
  19 +import com.datastax.driver.mapping.annotations.Column;
  20 +import com.datastax.driver.mapping.annotations.PartitionKey;
  21 +import com.datastax.driver.mapping.annotations.Table;
  22 +import com.datastax.driver.mapping.annotations.Transient;
20 23 import org.thingsboard.server.common.data.id.DeviceCredentialsId;
21 24 import org.thingsboard.server.common.data.id.DeviceId;
22 25 import org.thingsboard.server.common.data.security.DeviceCredentials;
... ... @@ -24,11 +27,7 @@ import org.thingsboard.server.common.data.security.DeviceCredentialsType;
24 27 import org.thingsboard.server.dao.model.BaseEntity;
25 28 import org.thingsboard.server.dao.model.type.DeviceCredentialsTypeCodec;
26 29
27   -import com.datastax.driver.core.utils.UUIDs;
28   -import com.datastax.driver.mapping.annotations.Column;
29   -import com.datastax.driver.mapping.annotations.PartitionKey;
30   -import com.datastax.driver.mapping.annotations.Table;
31   -import com.datastax.driver.mapping.annotations.Transient;
  30 +import java.util.UUID;
32 31
33 32 import static org.thingsboard.server.dao.model.ModelConstants.*;
34 33
... ...
... ... @@ -28,10 +28,10 @@ import org.thingsboard.server.common.data.id.TenantId;
28 28 import org.thingsboard.server.dao.model.SearchTextEntity;
29 29 import org.thingsboard.server.dao.model.type.JsonCodec;
30 30
31   -import static org.thingsboard.server.dao.model.ModelConstants.*;
32   -
33 31 import java.util.UUID;
34 32
  33 +import static org.thingsboard.server.dao.model.ModelConstants.*;
  34 +
35 35 @Table(name = DEVICE_COLUMN_FAMILY_NAME)
36 36 public final class DeviceEntity implements SearchTextEntity<Device> {
37 37
... ...
... ... @@ -26,11 +26,11 @@ import org.thingsboard.server.dao.model.SearchTextEntity;
26 26 import org.thingsboard.server.dao.model.type.ComponentLifecycleStateCodec;
27 27 import org.thingsboard.server.dao.model.type.JsonCodec;
28 28
29   -import static org.thingsboard.server.dao.model.ModelConstants.*;
30   -
31 29 import java.util.Objects;
32 30 import java.util.UUID;
33 31
  32 +import static org.thingsboard.server.dao.model.ModelConstants.*;
  33 +
34 34 @Table(name = PLUGIN_COLUMN_FAMILY_NAME)
35 35 public class PluginMetaDataEntity implements SearchTextEntity<PluginMetaData> {
36 36
... ...
... ... @@ -30,12 +30,12 @@ import org.thingsboard.server.dao.model.SearchTextEntity;
30 30 import org.thingsboard.server.dao.model.type.ComponentLifecycleStateCodec;
31 31 import org.thingsboard.server.dao.model.type.JsonCodec;
32 32
33   -import static org.thingsboard.server.dao.model.ModelConstants.*;
34   -
35 33 import javax.persistence.Transient;
36 34 import java.util.Objects;
37 35 import java.util.UUID;
38 36
  37 +import static org.thingsboard.server.dao.model.ModelConstants.*;
  38 +
39 39 @Table(name = RULE_COLUMN_FAMILY_NAME)
40 40 public class RuleMetaDataEntity implements SearchTextEntity<RuleMetaData> {
41 41
... ...
... ... @@ -15,19 +15,19 @@
15 15 */
16 16 package org.thingsboard.server.dao.model.nosql;
17 17
18   -import java.util.UUID;
19   -
20   -import org.thingsboard.server.common.data.Tenant;
21   -import org.thingsboard.server.common.data.id.TenantId;
22   -import org.thingsboard.server.dao.model.SearchTextEntity;
23   -import org.thingsboard.server.dao.model.type.JsonCodec;
24   -
25 18 import com.datastax.driver.core.utils.UUIDs;
26 19 import com.datastax.driver.mapping.annotations.Column;
27 20 import com.datastax.driver.mapping.annotations.PartitionKey;
28 21 import com.datastax.driver.mapping.annotations.Table;
29 22 import com.datastax.driver.mapping.annotations.Transient;
30 23 import com.fasterxml.jackson.databind.JsonNode;
  24 +import org.thingsboard.server.common.data.Tenant;
  25 +import org.thingsboard.server.common.data.id.TenantId;
  26 +import org.thingsboard.server.dao.model.SearchTextEntity;
  27 +import org.thingsboard.server.dao.model.type.JsonCodec;
  28 +
  29 +import java.util.UUID;
  30 +
31 31 import static org.thingsboard.server.dao.model.ModelConstants.*;
32 32
33 33 @Table(name = TENANT_COLUMN_FAMILY_NAME)
... ...
... ... @@ -15,18 +15,18 @@
15 15 */
16 16 package org.thingsboard.server.dao.model.nosql;
17 17
18   -import java.util.UUID;
19   -
20   -import org.thingsboard.server.common.data.id.UserCredentialsId;
21   -import org.thingsboard.server.common.data.id.UserId;
22   -import org.thingsboard.server.common.data.security.UserCredentials;
23   -
24 18 import com.datastax.driver.core.utils.UUIDs;
25 19 import com.datastax.driver.mapping.annotations.Column;
26 20 import com.datastax.driver.mapping.annotations.PartitionKey;
27 21 import com.datastax.driver.mapping.annotations.Table;
28 22 import com.datastax.driver.mapping.annotations.Transient;
  23 +import org.thingsboard.server.common.data.id.UserCredentialsId;
  24 +import org.thingsboard.server.common.data.id.UserId;
  25 +import org.thingsboard.server.common.data.security.UserCredentials;
29 26 import org.thingsboard.server.dao.model.BaseEntity;
  27 +
  28 +import java.util.UUID;
  29 +
30 30 import static org.thingsboard.server.dao.model.ModelConstants.*;
31 31
32 32 @Table(name = USER_CREDENTIALS_COLUMN_FAMILY_NAME)
... ...
... ... @@ -15,8 +15,12 @@
15 15 */
16 16 package org.thingsboard.server.dao.model.nosql;
17 17
18   -import java.util.UUID;
19   -
  18 +import com.datastax.driver.core.utils.UUIDs;
  19 +import com.datastax.driver.mapping.annotations.Column;
  20 +import com.datastax.driver.mapping.annotations.PartitionKey;
  21 +import com.datastax.driver.mapping.annotations.Table;
  22 +import com.datastax.driver.mapping.annotations.Transient;
  23 +import com.fasterxml.jackson.databind.JsonNode;
20 24 import org.thingsboard.server.common.data.User;
21 25 import org.thingsboard.server.common.data.id.CustomerId;
22 26 import org.thingsboard.server.common.data.id.TenantId;
... ... @@ -26,12 +30,8 @@ import org.thingsboard.server.dao.model.SearchTextEntity;
26 30 import org.thingsboard.server.dao.model.type.AuthorityCodec;
27 31 import org.thingsboard.server.dao.model.type.JsonCodec;
28 32
29   -import com.datastax.driver.core.utils.UUIDs;
30   -import com.datastax.driver.mapping.annotations.Column;
31   -import com.datastax.driver.mapping.annotations.PartitionKey;
32   -import com.datastax.driver.mapping.annotations.Table;
33   -import com.datastax.driver.mapping.annotations.Transient;
34   -import com.fasterxml.jackson.databind.JsonNode;
  33 +import java.util.UUID;
  34 +
35 35 import static org.thingsboard.server.dao.model.ModelConstants.*;
36 36
37 37 @Table(name = USER_COLUMN_FAMILY_NAME)
... ...
... ... @@ -26,10 +26,11 @@ import org.thingsboard.server.common.data.id.WidgetTypeId;
26 26 import org.thingsboard.server.common.data.widget.WidgetType;
27 27 import org.thingsboard.server.dao.model.BaseEntity;
28 28 import org.thingsboard.server.dao.model.type.JsonCodec;
29   -import static org.thingsboard.server.dao.model.ModelConstants.*;
30 29
31 30 import java.util.UUID;
32 31
  32 +import static org.thingsboard.server.dao.model.ModelConstants.*;
  33 +
33 34 @Table(name = WIDGET_TYPE_COLUMN_FAMILY_NAME)
34 35 public final class WidgetTypeEntity implements BaseEntity<WidgetType> {
35 36
... ...
... ... @@ -25,11 +25,12 @@ import org.thingsboard.server.common.data.id.TenantId;
25 25 import org.thingsboard.server.common.data.id.WidgetsBundleId;
26 26 import org.thingsboard.server.common.data.widget.WidgetsBundle;
27 27 import org.thingsboard.server.dao.model.SearchTextEntity;
28   -import static org.thingsboard.server.dao.model.ModelConstants.*;
29 28
30 29 import java.nio.ByteBuffer;
31 30 import java.util.UUID;
32 31
  32 +import static org.thingsboard.server.dao.model.ModelConstants.*;
  33 +
33 34 @Table(name = WIDGETS_BUNDLE_COLUMN_FAMILY_NAME)
34 35 public final class WidgetsBundleEntity implements SearchTextEntity<WidgetsBundle> {
35 36
... ...
... ... @@ -18,31 +18,33 @@ package org.thingsboard.server.dao.model.sql;
18 18 import com.datastax.driver.core.utils.UUIDs;
19 19 import com.fasterxml.jackson.databind.JsonNode;
20 20 import lombok.Data;
  21 +import lombok.EqualsAndHashCode;
21 22 import org.hibernate.annotations.Type;
22 23 import org.hibernate.annotations.TypeDef;
23 24 import org.thingsboard.server.common.data.AdminSettings;
  25 +import org.thingsboard.server.common.data.UUIDConverter;
24 26 import org.thingsboard.server.common.data.id.AdminSettingsId;
25 27 import org.thingsboard.server.dao.model.BaseEntity;
  28 +import org.thingsboard.server.dao.model.BaseSqlEntity;
26 29 import org.thingsboard.server.dao.util.mapping.JsonStringType;
27 30
28   -import javax.persistence.*;
29   -import java.util.UUID;
  31 +import javax.persistence.Column;
  32 +import javax.persistence.Entity;
  33 +import javax.persistence.Table;
  34 +import javax.persistence.Transient;
30 35
31 36 import static org.thingsboard.server.dao.model.ModelConstants.*;
32 37
33 38 @Data
  39 +@EqualsAndHashCode(callSuper = true)
34 40 @Entity
35 41 @TypeDef(name = "json", typeClass = JsonStringType.class)
36 42 @Table(name = ADMIN_SETTINGS_COLUMN_FAMILY_NAME)
37   -public final class AdminSettingsEntity implements BaseEntity<AdminSettings> {
  43 +public final class AdminSettingsEntity extends BaseSqlEntity<AdminSettings> implements BaseEntity<AdminSettings> {
38 44
39 45 @Transient
40 46 private static final long serialVersionUID = 842759712850362147L;
41 47
42   - @Id
43   - @Column(name = ID_PROPERTY)
44   - private UUID id;
45   -
46 48 @Column(name = ADMIN_SETTINGS_KEY_PROPERTY)
47 49 private String key;
48 50
... ... @@ -56,26 +58,16 @@ public final class AdminSettingsEntity implements BaseEntity<AdminSettings> {
56 58
57 59 public AdminSettingsEntity(AdminSettings adminSettings) {
58 60 if (adminSettings.getId() != null) {
59   - this.id = adminSettings.getId().getId();
  61 + this.setId(adminSettings.getId().getId());
60 62 }
61 63 this.key = adminSettings.getKey();
62 64 this.jsonValue = adminSettings.getJsonValue();
63 65 }
64 66
65 67 @Override
66   - public UUID getId() {
67   - return id;
68   - }
69   -
70   - @Override
71   - public void setId(UUID id) {
72   - this.id = id;
73   - }
74   -
75   - @Override
76 68 public AdminSettings toData() {
77   - AdminSettings adminSettings = new AdminSettings(new AdminSettingsId(id));
78   - adminSettings.setCreatedTime(UUIDs.unixTimestamp(id));
  69 + AdminSettings adminSettings = new AdminSettings(new AdminSettingsId(UUIDConverter.fromString(id)));
  70 + adminSettings.setCreatedTime(UUIDs.unixTimestamp(UUIDConverter.fromString(id)));
79 71 adminSettings.setKey(key);
80 72 adminSettings.setJsonValue(jsonValue);
81 73 return adminSettings;
... ...
... ... @@ -18,9 +18,11 @@ package org.thingsboard.server.dao.model.sql;
18 18 import com.datastax.driver.core.utils.UUIDs;
19 19 import com.fasterxml.jackson.databind.JsonNode;
20 20 import lombok.Data;
  21 +import lombok.EqualsAndHashCode;
21 22 import org.hibernate.annotations.Type;
22 23 import org.hibernate.annotations.TypeDef;
23 24 import org.thingsboard.server.common.data.EntityType;
  25 +import org.thingsboard.server.common.data.UUIDConverter;
24 26 import org.thingsboard.server.common.data.alarm.Alarm;
25 27 import org.thingsboard.server.common.data.alarm.AlarmId;
26 28 import org.thingsboard.server.common.data.alarm.AlarmSeverity;
... ... @@ -28,32 +30,29 @@ import org.thingsboard.server.common.data.alarm.AlarmStatus;
28 30 import org.thingsboard.server.common.data.id.EntityIdFactory;
29 31 import org.thingsboard.server.common.data.id.TenantId;
30 32 import org.thingsboard.server.dao.model.BaseEntity;
  33 +import org.thingsboard.server.dao.model.BaseSqlEntity;
31 34 import org.thingsboard.server.dao.model.ModelConstants;
32 35 import org.thingsboard.server.dao.util.mapping.JsonStringType;
33 36
34 37 import javax.persistence.*;
35   -import java.util.UUID;
36 38
37 39 import static org.thingsboard.server.dao.model.ModelConstants.*;
38 40
39 41 @Data
  42 +@EqualsAndHashCode(callSuper = true)
40 43 @Entity
41 44 @TypeDef(name = "json", typeClass = JsonStringType.class)
42 45 @Table(name = ALARM_COLUMN_FAMILY_NAME)
43   -public final class AlarmEntity implements BaseEntity<Alarm> {
  46 +public final class AlarmEntity extends BaseSqlEntity<Alarm> implements BaseEntity<Alarm> {
44 47
45 48 @Transient
46 49 private static final long serialVersionUID = -339979717281685984L;
47 50
48   - @Id
49   - @Column(name = ID_PROPERTY)
50   - private UUID id;
51   -
52 51 @Column(name = ALARM_TENANT_ID_PROPERTY)
53   - private UUID tenantId;
  52 + private String tenantId;
54 53
55 54 @Column(name = ALARM_ORIGINATOR_ID_PROPERTY)
56   - private UUID originatorId;
  55 + private String originatorId;
57 56
58 57 @Column(name = ALARM_ORIGINATOR_TYPE_PROPERTY)
59 58 private EntityType originatorType;
... ... @@ -94,13 +93,13 @@ public final class AlarmEntity implements BaseEntity<Alarm> {
94 93
95 94 public AlarmEntity(Alarm alarm) {
96 95 if (alarm.getId() != null) {
97   - this.id = alarm.getId().getId();
  96 + this.setId(alarm.getId().getId());
98 97 }
99 98 if (alarm.getTenantId() != null) {
100   - this.tenantId = alarm.getTenantId().getId();
  99 + this.tenantId = UUIDConverter.fromTimeUUID(alarm.getTenantId().getId());
101 100 }
102 101 this.type = alarm.getType();
103   - this.originatorId = alarm.getOriginator().getId();
  102 + this.originatorId = UUIDConverter.fromTimeUUID(alarm.getOriginator().getId());
104 103 this.originatorType = alarm.getOriginator().getEntityType();
105 104 this.type = alarm.getType();
106 105 this.severity = alarm.getSeverity();
... ... @@ -115,12 +114,12 @@ public final class AlarmEntity implements BaseEntity<Alarm> {
115 114
116 115 @Override
117 116 public Alarm toData() {
118   - Alarm alarm = new Alarm(new AlarmId(id));
119   - alarm.setCreatedTime(UUIDs.unixTimestamp(id));
  117 + Alarm alarm = new Alarm(new AlarmId(UUIDConverter.fromString(id)));
  118 + alarm.setCreatedTime(UUIDs.unixTimestamp(UUIDConverter.fromString(id)));
120 119 if (tenantId != null) {
121   - alarm.setTenantId(new TenantId(tenantId));
  120 + alarm.setTenantId(new TenantId(UUIDConverter.fromString(tenantId)));
122 121 }
123   - alarm.setOriginator(EntityIdFactory.getByTypeAndUuid(originatorType, originatorId));
  122 + alarm.setOriginator(EntityIdFactory.getByTypeAndUuid(originatorType, UUIDConverter.fromString(originatorId)));
124 123 alarm.setType(type);
125 124 alarm.setSeverity(severity);
126 125 alarm.setStatus(status);
... ...
... ... @@ -18,39 +18,41 @@ package org.thingsboard.server.dao.model.sql;
18 18 import com.datastax.driver.core.utils.UUIDs;
19 19 import com.fasterxml.jackson.databind.JsonNode;
20 20 import lombok.Data;
  21 +import lombok.EqualsAndHashCode;
21 22 import org.hibernate.annotations.Type;
22 23 import org.hibernate.annotations.TypeDef;
  24 +import org.thingsboard.server.common.data.UUIDConverter;
23 25 import org.thingsboard.server.common.data.asset.Asset;
24 26 import org.thingsboard.server.common.data.id.AssetId;
25 27 import org.thingsboard.server.common.data.id.CustomerId;
26 28 import org.thingsboard.server.common.data.id.TenantId;
  29 +import org.thingsboard.server.dao.model.BaseSqlEntity;
27 30 import org.thingsboard.server.dao.model.ModelConstants;
28 31 import org.thingsboard.server.dao.model.SearchTextEntity;
29 32 import org.thingsboard.server.dao.util.mapping.JsonStringType;
30 33
31   -import javax.persistence.*;
32   -import java.util.UUID;
  34 +import javax.persistence.Column;
  35 +import javax.persistence.Entity;
  36 +import javax.persistence.Table;
  37 +import javax.persistence.Transient;
33 38
34 39 import static org.thingsboard.server.dao.model.ModelConstants.*;
35 40
36 41 @Data
  42 +@EqualsAndHashCode(callSuper = true)
37 43 @Entity
38 44 @TypeDef(name = "json", typeClass = JsonStringType.class)
39 45 @Table(name = ASSET_COLUMN_FAMILY_NAME)
40   -public final class AssetEntity implements SearchTextEntity<Asset> {
  46 +public final class AssetEntity extends BaseSqlEntity<Asset> implements SearchTextEntity<Asset> {
41 47
42 48 @Transient
43 49 private static final long serialVersionUID = -4089175869616037592L;
44 50
45   - @Id
46   - @Column(name = ID_PROPERTY)
47   - private UUID id;
48   -
49 51 @Column(name = ASSET_TENANT_ID_PROPERTY)
50   - private UUID tenantId;
  52 + private String tenantId;
51 53
52 54 @Column(name = ASSET_CUSTOMER_ID_PROPERTY)
53   - private UUID customerId;
  55 + private String customerId;
54 56
55 57 @Column(name = ASSET_NAME_PROPERTY)
56 58 private String name;
... ... @@ -71,13 +73,13 @@ public final class AssetEntity implements SearchTextEntity<Asset> {
71 73
72 74 public AssetEntity(Asset asset) {
73 75 if (asset.getId() != null) {
74   - this.id = asset.getId().getId();
  76 + this.setId(asset.getId().getId());
75 77 }
76 78 if (asset.getTenantId() != null) {
77   - this.tenantId = asset.getTenantId().getId();
  79 + this.tenantId = UUIDConverter.fromTimeUUID(asset.getTenantId().getId());
78 80 }
79 81 if (asset.getCustomerId() != null) {
80   - this.customerId = asset.getCustomerId().getId();
  82 + this.customerId = UUIDConverter.fromTimeUUID(asset.getCustomerId().getId());
81 83 }
82 84 this.name = asset.getName();
83 85 this.type = asset.getType();
... ... @@ -100,13 +102,13 @@ public final class AssetEntity implements SearchTextEntity<Asset> {
100 102
101 103 @Override
102 104 public Asset toData() {
103   - Asset asset = new Asset(new AssetId(id));
104   - asset.setCreatedTime(UUIDs.unixTimestamp(id));
  105 + Asset asset = new Asset(new AssetId(UUIDConverter.fromString(id)));
  106 + asset.setCreatedTime(UUIDs.unixTimestamp(UUIDConverter.fromString(id)));
105 107 if (tenantId != null) {
106   - asset.setTenantId(new TenantId(tenantId));
  108 + asset.setTenantId(new TenantId(UUIDConverter.fromString(tenantId)));
107 109 }
108 110 if (customerId != null) {
109   - asset.setCustomerId(new CustomerId(customerId));
  111 + asset.setCustomerId(new CustomerId(UUIDConverter.fromString(customerId)));
110 112 }
111 113 asset.setName(name);
112 114 asset.setType(type);
... ...
... ... @@ -21,14 +21,13 @@ import lombok.NoArgsConstructor;
21 21 import org.thingsboard.server.common.data.EntityType;
22 22
23 23 import java.io.Serializable;
24   -import java.util.UUID;
25 24
26 25 @Data
27 26 @AllArgsConstructor
28 27 @NoArgsConstructor
29 28 public class AttributeKvCompositeKey implements Serializable {
30 29 private EntityType entityType;
31   - private UUID entityId;
  30 + private String entityId;
32 31 private String attributeType;
33 32 private String attributeKey;
34 33 }
... ...
... ... @@ -22,7 +22,6 @@ import org.thingsboard.server.dao.model.ToData;
22 22
23 23 import javax.persistence.*;
24 24 import java.io.Serializable;
25   -import java.util.UUID;
26 25
27 26 import static org.thingsboard.server.dao.model.ModelConstants.*;
28 27
... ... @@ -39,7 +38,7 @@ public class AttributeKvEntity implements ToData<AttributeKvEntry>, Serializable
39 38
40 39 @Id
41 40 @Column(name = ENTITY_ID_COLUMN)
42   - private UUID entityId;
  41 + private String entityId;
43 42
44 43 @Id
45 44 @Column(name = ATTRIBUTE_TYPE_COLUMN)
... ...
... ... @@ -17,32 +17,30 @@ package org.thingsboard.server.dao.model.sql;
17 17
18 18 import com.fasterxml.jackson.databind.JsonNode;
19 19 import lombok.Data;
  20 +import lombok.EqualsAndHashCode;
20 21 import org.hibernate.annotations.Type;
21 22 import org.hibernate.annotations.TypeDef;
22 23 import org.thingsboard.server.common.data.id.ComponentDescriptorId;
23 24 import org.thingsboard.server.common.data.plugin.ComponentDescriptor;
24 25 import org.thingsboard.server.common.data.plugin.ComponentScope;
25 26 import org.thingsboard.server.common.data.plugin.ComponentType;
  27 +import org.thingsboard.server.dao.model.BaseSqlEntity;
26 28 import org.thingsboard.server.dao.model.ModelConstants;
27 29 import org.thingsboard.server.dao.model.SearchTextEntity;
28 30 import org.thingsboard.server.dao.util.mapping.JsonStringType;
29 31
30 32 import javax.persistence.*;
31   -import java.util.UUID;
32 33
33 34 @Data
  35 +@EqualsAndHashCode(callSuper = true)
34 36 @Entity
35 37 @TypeDef(name = "json", typeClass = JsonStringType.class)
36 38 @Table(name = ModelConstants.COMPONENT_DESCRIPTOR_COLUMN_FAMILY_NAME)
37   -public class ComponentDescriptorEntity implements SearchTextEntity<ComponentDescriptor> {
  39 +public class ComponentDescriptorEntity extends BaseSqlEntity<ComponentDescriptor> implements SearchTextEntity<ComponentDescriptor> {
38 40
39 41 @Transient
40 42 private static final long serialVersionUID = 253590350877992402L;
41 43
42   - @Id
43   - @Column(name = ModelConstants.ID_PROPERTY)
44   - private UUID id;
45   -
46 44 @Enumerated(EnumType.STRING)
47 45 @Column(name = ModelConstants.COMPONENT_DESCRIPTOR_TYPE_PROPERTY)
48 46 private ComponentType type;
... ... @@ -72,7 +70,7 @@ public class ComponentDescriptorEntity implements SearchTextEntity<ComponentDesc
72 70
73 71 public ComponentDescriptorEntity(ComponentDescriptor component) {
74 72 if (component.getId() != null) {
75   - this.id = component.getId().getId();
  73 + this.setId(component.getId().getId());
76 74 }
77 75 this.actions = component.getActions();
78 76 this.type = component.getType();
... ... @@ -85,7 +83,7 @@ public class ComponentDescriptorEntity implements SearchTextEntity<ComponentDesc
85 83
86 84 @Override
87 85 public ComponentDescriptor toData() {
88   - ComponentDescriptor data = new ComponentDescriptor(new ComponentDescriptorId(id));
  86 + ComponentDescriptor data = new ComponentDescriptor(new ComponentDescriptorId(this.getId()));
89 87 data.setType(type);
90 88 data.setScope(scope);
91 89 data.setName(this.getName());
... ... @@ -95,16 +93,6 @@ public class ComponentDescriptorEntity implements SearchTextEntity<ComponentDesc
95 93 return data;
96 94 }
97 95
98   - @Override
99   - public UUID getId() {
100   - return id;
101   - }
102   -
103   - @Override
104   - public void setId(UUID id) {
105   - this.id = id;
106   - }
107   -
108 96 public String getSearchText() {
109 97 return searchText;
110 98 }
... ...
... ... @@ -18,33 +18,35 @@ package org.thingsboard.server.dao.model.sql;
18 18 import com.datastax.driver.core.utils.UUIDs;
19 19 import com.fasterxml.jackson.databind.JsonNode;
20 20 import lombok.Data;
  21 +import lombok.EqualsAndHashCode;
21 22 import org.hibernate.annotations.Type;
22 23 import org.hibernate.annotations.TypeDef;
23 24 import org.thingsboard.server.common.data.Customer;
  25 +import org.thingsboard.server.common.data.UUIDConverter;
24 26 import org.thingsboard.server.common.data.id.CustomerId;
25 27 import org.thingsboard.server.common.data.id.TenantId;
  28 +import org.thingsboard.server.dao.model.BaseSqlEntity;
26 29 import org.thingsboard.server.dao.model.ModelConstants;
27 30 import org.thingsboard.server.dao.model.SearchTextEntity;
28 31 import org.thingsboard.server.dao.util.mapping.JsonStringType;
29 32
30   -import javax.persistence.*;
31   -import java.util.UUID;
  33 +import javax.persistence.Column;
  34 +import javax.persistence.Entity;
  35 +import javax.persistence.Table;
  36 +import javax.persistence.Transient;
32 37
33 38 @Data
  39 +@EqualsAndHashCode(callSuper = true)
34 40 @Entity
35 41 @TypeDef(name = "json", typeClass = JsonStringType.class)
36 42 @Table(name = ModelConstants.CUSTOMER_COLUMN_FAMILY_NAME)
37   -public final class CustomerEntity implements SearchTextEntity<Customer> {
  43 +public final class CustomerEntity extends BaseSqlEntity<Customer> implements SearchTextEntity<Customer> {
38 44
39 45 @Transient
40 46 private static final long serialVersionUID = 8951342124082981556L;
41 47
42   - @Id
43   - @Column(name = ModelConstants.ID_PROPERTY)
44   - private UUID id;
45   -
46 48 @Column(name = ModelConstants.CUSTOMER_TENANT_ID_PROPERTY)
47   - private UUID tenantId;
  49 + private String tenantId;
48 50
49 51 @Column(name = ModelConstants.CUSTOMER_TITLE_PROPERTY)
50 52 private String title;
... ... @@ -86,9 +88,9 @@ public final class CustomerEntity implements SearchTextEntity<Customer> {
86 88
87 89 public CustomerEntity(Customer customer) {
88 90 if (customer.getId() != null) {
89   - this.id = customer.getId().getId();
  91 + this.setId(customer.getId().getId());
90 92 }
91   - this.tenantId = customer.getTenantId().getId();
  93 + this.tenantId = UUIDConverter.fromTimeUUID(customer.getTenantId().getId());
92 94 this.title = customer.getTitle();
93 95 this.country = customer.getCountry();
94 96 this.state = customer.getState();
... ... @@ -102,16 +104,6 @@ public final class CustomerEntity implements SearchTextEntity<Customer> {
102 104 }
103 105
104 106 @Override
105   - public UUID getId() {
106   - return id;
107   - }
108   -
109   - @Override
110   - public void setId(UUID id) {
111   - this.id = id;
112   - }
113   -
114   - @Override
115 107 public String getSearchTextSource() {
116 108 return title;
117 109 }
... ... @@ -123,9 +115,9 @@ public final class CustomerEntity implements SearchTextEntity<Customer> {
123 115
124 116 @Override
125 117 public Customer toData() {
126   - Customer customer = new Customer(new CustomerId(id));
127   - customer.setCreatedTime(UUIDs.unixTimestamp(id));
128   - customer.setTenantId(new TenantId(tenantId));
  118 + Customer customer = new Customer(new CustomerId(getId()));
  119 + customer.setCreatedTime(UUIDs.unixTimestamp(getId()));
  120 + customer.setTenantId(new TenantId(UUIDConverter.fromString(tenantId)));
129 121 customer.setTitle(title);
130 122 customer.setCountry(country);
131 123 customer.setState(state);
... ...
... ... @@ -18,37 +18,38 @@ package org.thingsboard.server.dao.model.sql;
18 18 import com.datastax.driver.core.utils.UUIDs;
19 19 import com.fasterxml.jackson.databind.JsonNode;
20 20 import lombok.Data;
  21 +import lombok.EqualsAndHashCode;
21 22 import org.hibernate.annotations.Type;
22 23 import org.hibernate.annotations.TypeDef;
23 24 import org.thingsboard.server.common.data.Dashboard;
24 25 import org.thingsboard.server.common.data.id.CustomerId;
25 26 import org.thingsboard.server.common.data.id.DashboardId;
26 27 import org.thingsboard.server.common.data.id.TenantId;
  28 +import org.thingsboard.server.dao.model.BaseSqlEntity;
27 29 import org.thingsboard.server.dao.model.ModelConstants;
28 30 import org.thingsboard.server.dao.model.SearchTextEntity;
29 31 import org.thingsboard.server.dao.util.mapping.JsonStringType;
30 32
31   -import javax.persistence.*;
32   -import java.util.UUID;
  33 +import javax.persistence.Column;
  34 +import javax.persistence.Entity;
  35 +import javax.persistence.Table;
  36 +import javax.persistence.Transient;
33 37
34 38 @Data
  39 +@EqualsAndHashCode(callSuper = true)
35 40 @Entity
36 41 @TypeDef(name = "json", typeClass = JsonStringType.class)
37 42 @Table(name = ModelConstants.DASHBOARD_COLUMN_FAMILY_NAME)
38   -public final class DashboardEntity implements SearchTextEntity<Dashboard> {
  43 +public final class DashboardEntity extends BaseSqlEntity<Dashboard> implements SearchTextEntity<Dashboard> {
39 44
40 45 @Transient
41 46 private static final long serialVersionUID = -4838084363113078898L;
42 47
43   - @Id
44   - @Column(name = ModelConstants.ID_PROPERTY)
45   - private UUID id;
46   -
47 48 @Column(name = ModelConstants.DASHBOARD_TENANT_ID_PROPERTY)
48   - private UUID tenantId;
  49 + private String tenantId;
49 50
50 51 @Column(name = ModelConstants.DASHBOARD_CUSTOMER_ID_PROPERTY)
51   - private UUID customerId;
  52 + private String customerId;
52 53
53 54 @Column(name = ModelConstants.DASHBOARD_TITLE_PROPERTY)
54 55 private String title;
... ... @@ -66,13 +67,13 @@ public final class DashboardEntity implements SearchTextEntity<Dashboard> {
66 67
67 68 public DashboardEntity(Dashboard dashboard) {
68 69 if (dashboard.getId() != null) {
69   - this.id = dashboard.getId().getId();
  70 + this.setId(dashboard.getId().getId());
70 71 }
71 72 if (dashboard.getTenantId() != null) {
72   - this.tenantId = dashboard.getTenantId().getId();
  73 + this.tenantId = toString(dashboard.getTenantId().getId());
73 74 }
74 75 if (dashboard.getCustomerId() != null) {
75   - this.customerId = dashboard.getCustomerId().getId();
  76 + this.customerId = toString(dashboard.getCustomerId().getId());
76 77 }
77 78 this.title = dashboard.getTitle();
78 79 this.configuration = dashboard.getConfiguration();
... ... @@ -90,13 +91,13 @@ public final class DashboardEntity implements SearchTextEntity<Dashboard> {
90 91
91 92 @Override
92 93 public Dashboard toData() {
93   - Dashboard dashboard = new Dashboard(new DashboardId(id));
94   - dashboard.setCreatedTime(UUIDs.unixTimestamp(id));
  94 + Dashboard dashboard = new Dashboard(new DashboardId(this.getId()));
  95 + dashboard.setCreatedTime(UUIDs.unixTimestamp(this.getId()));
95 96 if (tenantId != null) {
96   - dashboard.setTenantId(new TenantId(tenantId));
  97 + dashboard.setTenantId(new TenantId(toUUID(tenantId)));
97 98 }
98 99 if (customerId != null) {
99   - dashboard.setCustomerId(new CustomerId(customerId));
  100 + dashboard.setCustomerId(new CustomerId(toUUID(customerId)));
100 101 }
101 102 dashboard.setTitle(title);
102 103 dashboard.setConfiguration(configuration);
... ...
... ... @@ -17,33 +17,34 @@ package org.thingsboard.server.dao.model.sql;
17 17
18 18 import com.datastax.driver.core.utils.UUIDs;
19 19 import lombok.Data;
  20 +import lombok.EqualsAndHashCode;
20 21 import org.thingsboard.server.common.data.DashboardInfo;
21 22 import org.thingsboard.server.common.data.id.CustomerId;
22 23 import org.thingsboard.server.common.data.id.DashboardId;
23 24 import org.thingsboard.server.common.data.id.TenantId;
  25 +import org.thingsboard.server.dao.model.BaseSqlEntity;
24 26 import org.thingsboard.server.dao.model.ModelConstants;
25 27 import org.thingsboard.server.dao.model.SearchTextEntity;
26 28
27   -import javax.persistence.*;
28   -import java.util.UUID;
  29 +import javax.persistence.Column;
  30 +import javax.persistence.Entity;
  31 +import javax.persistence.Table;
  32 +import javax.persistence.Transient;
29 33
30 34 @Data
  35 +@EqualsAndHashCode(callSuper = true)
31 36 @Entity
32 37 @Table(name = ModelConstants.DASHBOARD_COLUMN_FAMILY_NAME)
33   -public class DashboardInfoEntity implements SearchTextEntity<DashboardInfo> {
  38 +public class DashboardInfoEntity extends BaseSqlEntity<DashboardInfo> implements SearchTextEntity<DashboardInfo> {
34 39
35 40 @Transient
36 41 private static final long serialVersionUID = -5525675905528050250L;
37 42
38   - @Id
39   - @Column(name = ModelConstants.ID_PROPERTY)
40   - private UUID id;
41   -
42 43 @Column(name = ModelConstants.DASHBOARD_TENANT_ID_PROPERTY)
43   - private UUID tenantId;
  44 + private String tenantId;
44 45
45 46 @Column(name = ModelConstants.DASHBOARD_CUSTOMER_ID_PROPERTY)
46   - private UUID customerId;
  47 + private String customerId;
47 48
48 49 @Column(name = ModelConstants.DASHBOARD_TITLE_PROPERTY)
49 50 private String title;
... ... @@ -57,13 +58,13 @@ public class DashboardInfoEntity implements SearchTextEntity<DashboardInfo> {
57 58
58 59 public DashboardInfoEntity(DashboardInfo dashboardInfo) {
59 60 if (dashboardInfo.getId() != null) {
60   - this.id = dashboardInfo.getId().getId();
  61 + this.setId(dashboardInfo.getId().getId());
61 62 }
62 63 if (dashboardInfo.getTenantId() != null) {
63   - this.tenantId = dashboardInfo.getTenantId().getId();
  64 + this.tenantId = toString(dashboardInfo.getTenantId().getId());
64 65 }
65 66 if (dashboardInfo.getCustomerId() != null) {
66   - this.customerId = dashboardInfo.getCustomerId().getId();
  67 + this.customerId = toString(dashboardInfo.getCustomerId().getId());
67 68 }
68 69 this.title = dashboardInfo.getTitle();
69 70 }
... ... @@ -84,13 +85,13 @@ public class DashboardInfoEntity implements SearchTextEntity<DashboardInfo> {
84 85
85 86 @Override
86 87 public DashboardInfo toData() {
87   - DashboardInfo dashboardInfo = new DashboardInfo(new DashboardId(id));
88   - dashboardInfo.setCreatedTime(UUIDs.unixTimestamp(id));
  88 + DashboardInfo dashboardInfo = new DashboardInfo(new DashboardId(getId()));
  89 + dashboardInfo.setCreatedTime(UUIDs.unixTimestamp(getId()));
89 90 if (tenantId != null) {
90   - dashboardInfo.setTenantId(new TenantId(tenantId));
  91 + dashboardInfo.setTenantId(new TenantId(toUUID(tenantId)));
91 92 }
92 93 if (customerId != null) {
93   - dashboardInfo.setCustomerId(new CustomerId(customerId));
  94 + dashboardInfo.setCustomerId(new CustomerId(toUUID(customerId)));
94 95 }
95 96 dashboardInfo.setTitle(title);
96 97 return dashboardInfo;
... ...
... ... @@ -17,29 +17,28 @@ package org.thingsboard.server.dao.model.sql;
17 17
18 18 import com.datastax.driver.core.utils.UUIDs;
19 19 import lombok.Data;
  20 +import lombok.EqualsAndHashCode;
20 21 import org.thingsboard.server.common.data.id.DeviceCredentialsId;
21 22 import org.thingsboard.server.common.data.id.DeviceId;
22 23 import org.thingsboard.server.common.data.security.DeviceCredentials;
23 24 import org.thingsboard.server.common.data.security.DeviceCredentialsType;
24 25 import org.thingsboard.server.dao.model.BaseEntity;
  26 +import org.thingsboard.server.dao.model.BaseSqlEntity;
25 27 import org.thingsboard.server.dao.model.ModelConstants;
26 28
27 29 import javax.persistence.*;
28   -import java.util.UUID;
29 30
30 31 @Data
  32 +@EqualsAndHashCode(callSuper = true)
31 33 @Entity
32 34 @Table(name = ModelConstants.DEVICE_CREDENTIALS_COLUMN_FAMILY_NAME)
33   -public final class DeviceCredentialsEntity implements BaseEntity<DeviceCredentials> {
  35 +public final class DeviceCredentialsEntity extends BaseSqlEntity<DeviceCredentials> implements BaseEntity<DeviceCredentials> {
34 36
35 37 @Transient
36 38 private static final long serialVersionUID = -2512362753385470464L;
37   - @Id
38   - @Column(name = ModelConstants.ID_PROPERTY)
39   - private UUID id;
40   -
  39 +
41 40 @Column(name = ModelConstants.DEVICE_CREDENTIALS_DEVICE_ID_PROPERTY)
42   - private UUID deviceId;
  41 + private String deviceId;
43 42
44 43 @Enumerated(EnumType.STRING)
45 44 @Column(name = ModelConstants.DEVICE_CREDENTIALS_CREDENTIALS_TYPE_PROPERTY)
... ... @@ -57,22 +56,22 @@ public final class DeviceCredentialsEntity implements BaseEntity<DeviceCredentia
57 56
58 57 public DeviceCredentialsEntity(DeviceCredentials deviceCredentials) {
59 58 if (deviceCredentials.getId() != null) {
60   - this.id = deviceCredentials.getId().getId();
  59 + this.setId(deviceCredentials.getId().getId());
61 60 }
62 61 if (deviceCredentials.getDeviceId() != null) {
63   - this.deviceId = deviceCredentials.getDeviceId().getId();
  62 + this.deviceId = toString(deviceCredentials.getDeviceId().getId());
64 63 }
65 64 this.credentialsType = deviceCredentials.getCredentialsType();
66 65 this.credentialsId = deviceCredentials.getCredentialsId();
67   - this.credentialsValue = deviceCredentials.getCredentialsValue();
  66 + this.credentialsValue = deviceCredentials.getCredentialsValue();
68 67 }
69   -
  68 +
70 69 @Override
71 70 public DeviceCredentials toData() {
72   - DeviceCredentials deviceCredentials = new DeviceCredentials(new DeviceCredentialsId(id));
73   - deviceCredentials.setCreatedTime(UUIDs.unixTimestamp(id));
  71 + DeviceCredentials deviceCredentials = new DeviceCredentials(new DeviceCredentialsId(getId()));
  72 + deviceCredentials.setCreatedTime(UUIDs.unixTimestamp(getId()));
74 73 if (deviceId != null) {
75   - deviceCredentials.setDeviceId(new DeviceId(deviceId));
  74 + deviceCredentials.setDeviceId(new DeviceId(toUUID(deviceId)));
76 75 }
77 76 deviceCredentials.setCredentialsType(credentialsType);
78 77 deviceCredentials.setCredentialsId(credentialsId);
... ...
... ... @@ -18,44 +18,45 @@ package org.thingsboard.server.dao.model.sql;
18 18 import com.datastax.driver.core.utils.UUIDs;
19 19 import com.fasterxml.jackson.databind.JsonNode;
20 20 import lombok.Data;
  21 +import lombok.EqualsAndHashCode;
21 22 import org.hibernate.annotations.Type;
22 23 import org.hibernate.annotations.TypeDef;
23 24 import org.thingsboard.server.common.data.Device;
24 25 import org.thingsboard.server.common.data.id.CustomerId;
25 26 import org.thingsboard.server.common.data.id.DeviceId;
26 27 import org.thingsboard.server.common.data.id.TenantId;
  28 +import org.thingsboard.server.dao.model.BaseSqlEntity;
27 29 import org.thingsboard.server.dao.model.ModelConstants;
28 30 import org.thingsboard.server.dao.model.SearchTextEntity;
29 31 import org.thingsboard.server.dao.util.mapping.JsonStringType;
30 32
31   -import javax.persistence.*;
32   -import java.util.UUID;
  33 +import javax.persistence.Column;
  34 +import javax.persistence.Entity;
  35 +import javax.persistence.Table;
  36 +import javax.persistence.Transient;
33 37
34 38 @Data
  39 +@EqualsAndHashCode(callSuper = true)
35 40 @Entity
36 41 @TypeDef(name = "json", typeClass = JsonStringType.class)
37 42 @Table(name = ModelConstants.DEVICE_COLUMN_FAMILY_NAME)
38   -public final class DeviceEntity implements SearchTextEntity<Device> {
  43 +public final class DeviceEntity extends BaseSqlEntity<Device> implements SearchTextEntity<Device> {
39 44
40 45 @Transient
41 46 private static final long serialVersionUID = 8050086401213322856L;
42 47
43   - @Id
44   - @Column(name = ModelConstants.ID_PROPERTY)
45   - private UUID id;
46   -
47 48 @Column(name = ModelConstants.DEVICE_TENANT_ID_PROPERTY)
48   - private UUID tenantId;
  49 + private String tenantId;
49 50
50 51 @Column(name = ModelConstants.DEVICE_CUSTOMER_ID_PROPERTY)
51   - private UUID customerId;
  52 + private String customerId;
52 53
53 54 @Column(name = ModelConstants.DEVICE_TYPE_PROPERTY)
54 55 private String type;
55 56
56 57 @Column(name = ModelConstants.DEVICE_NAME_PROPERTY)
57 58 private String name;
58   -
  59 +
59 60 @Column(name = ModelConstants.SEARCH_TEXT_PROPERTY)
60 61 private String searchText;
61 62
... ... @@ -69,13 +70,13 @@ public final class DeviceEntity implements SearchTextEntity<Device> {
69 70
70 71 public DeviceEntity(Device device) {
71 72 if (device.getId() != null) {
72   - this.id = device.getId().getId();
  73 + this.setId(device.getId().getId());
73 74 }
74 75 if (device.getTenantId() != null) {
75   - this.tenantId = device.getTenantId().getId();
  76 + this.tenantId = toString(device.getTenantId().getId());
76 77 }
77 78 if (device.getCustomerId() != null) {
78   - this.customerId = device.getCustomerId().getId();
  79 + this.customerId = toString(device.getCustomerId().getId());
79 80 }
80 81 this.name = device.getName();
81 82 this.type = device.getType();
... ... @@ -91,16 +92,16 @@ public final class DeviceEntity implements SearchTextEntity<Device> {
91 92 public void setSearchText(String searchText) {
92 93 this.searchText = searchText;
93 94 }
94   -
  95 +
95 96 @Override
96 97 public Device toData() {
97   - Device device = new Device(new DeviceId(id));
98   - device.setCreatedTime(UUIDs.unixTimestamp(id));
  98 + Device device = new Device(new DeviceId(getId()));
  99 + device.setCreatedTime(UUIDs.unixTimestamp(getId()));
99 100 if (tenantId != null) {
100   - device.setTenantId(new TenantId(tenantId));
  101 + device.setTenantId(new TenantId(toUUID(tenantId)));
101 102 }
102 103 if (customerId != null) {
103   - device.setCustomerId(new CustomerId(customerId));
  104 + device.setCustomerId(new CustomerId(toUUID(customerId)));
104 105 }
105 106 device.setName(name);
106 107 device.setType(type);
... ...
... ... @@ -18,43 +18,43 @@ package org.thingsboard.server.dao.model.sql;
18 18 import com.datastax.driver.core.utils.UUIDs;
19 19 import com.fasterxml.jackson.databind.JsonNode;
20 20 import lombok.Data;
  21 +import lombok.EqualsAndHashCode;
21 22 import lombok.NoArgsConstructor;
22 23 import org.hibernate.annotations.Type;
23 24 import org.hibernate.annotations.TypeDef;
24 25 import org.thingsboard.server.common.data.EntityType;
25 26 import org.thingsboard.server.common.data.Event;
26   -import org.thingsboard.server.common.data.id.*;
  27 +import org.thingsboard.server.common.data.id.EntityIdFactory;
  28 +import org.thingsboard.server.common.data.id.EventId;
  29 +import org.thingsboard.server.common.data.id.TenantId;
27 30 import org.thingsboard.server.dao.model.BaseEntity;
  31 +import org.thingsboard.server.dao.model.BaseSqlEntity;
28 32 import org.thingsboard.server.dao.util.mapping.JsonStringType;
29 33
30 34 import javax.persistence.*;
31   -import java.util.UUID;
32 35
33 36 import static org.thingsboard.server.dao.model.ModelConstants.*;
34 37
35 38 @Data
  39 +@EqualsAndHashCode(callSuper = true)
36 40 @Entity
37 41 @TypeDef(name = "json", typeClass = JsonStringType.class)
38 42 @Table(name = EVENT_COLUMN_FAMILY_NAME)
39 43 @NoArgsConstructor
40   -public class EventEntity implements BaseEntity<Event> {
  44 +public class EventEntity extends BaseSqlEntity<Event> implements BaseEntity<Event> {
41 45
42 46 @Transient
43 47 private static final long serialVersionUID = -5717830061727466727L;
44 48
45   - @Id
46   - @Column(name = ID_PROPERTY)
47   - private UUID id;
48   -
49 49 @Column(name = EVENT_TENANT_ID_PROPERTY)
50   - private UUID tenantId;
  50 + private String tenantId;
51 51
52 52 @Enumerated(EnumType.STRING)
53 53 @Column(name = EVENT_ENTITY_TYPE_PROPERTY)
54 54 private EntityType entityType;
55 55
56 56 @Column(name = EVENT_ENTITY_ID_PROPERTY)
57   - private UUID entityId;
  57 + private String entityId;
58 58
59 59 @Column(name = EVENT_TYPE_PROPERTY)
60 60 private String eventType;
... ... @@ -68,52 +68,27 @@ public class EventEntity implements BaseEntity<Event> {
68 68
69 69 public EventEntity(Event event) {
70 70 if (event.getId() != null) {
71   - this.id = event.getId().getId();
  71 + this.setId(event.getId().getId());
72 72 }
73 73 if (event.getTenantId() != null) {
74   - this.tenantId = event.getTenantId().getId();
  74 + this.tenantId = toString(event.getTenantId().getId());
75 75 }
76 76 if (event.getEntityId() != null) {
77 77 this.entityType = event.getEntityId().getEntityType();
78   - this.entityId = event.getEntityId().getId();
  78 + this.entityId = toString(event.getEntityId().getId());
79 79 }
80 80 this.eventType = event.getType();
81 81 this.eventUid = event.getUid();
82 82 this.body = event.getBody();
83 83 }
84 84
85   - @Override
86   - public UUID getId() {
87   - return id;
88   - }
89   -
90   - @Override
91   - public void setId(UUID id) {
92   - this.id = id;
93   - }
94 85
95 86 @Override
96 87 public Event toData() {
97   - Event event = new Event(new EventId(id));
98   - event.setCreatedTime(UUIDs.unixTimestamp(id));
99   - event.setTenantId(new TenantId(tenantId));
100   - switch (entityType) {
101   - case TENANT:
102   - event.setEntityId(new TenantId(entityId));
103   - break;
104   - case DEVICE:
105   - event.setEntityId(new DeviceId(entityId));
106   - break;
107   - case CUSTOMER:
108   - event.setEntityId(new CustomerId(entityId));
109   - break;
110   - case RULE:
111   - event.setEntityId(new RuleId(entityId));
112   - break;
113   - case PLUGIN:
114   - event.setEntityId(new PluginId(entityId));
115   - break;
116   - }
  88 + Event event = new Event(new EventId(getId()));
  89 + event.setCreatedTime(UUIDs.unixTimestamp(getId()));
  90 + event.setTenantId(new TenantId(toUUID(tenantId)));
  91 + event.setEntityId(EntityIdFactory.getByTypeAndUuid(entityType, toUUID(entityId)));
117 92 event.setBody(body);
118 93 event.setType(eventType);
119 94 event.setUid(eventUid);
... ...
... ... @@ -18,36 +18,38 @@ package org.thingsboard.server.dao.model.sql;
18 18 import com.datastax.driver.core.utils.UUIDs;
19 19 import com.fasterxml.jackson.databind.JsonNode;
20 20 import lombok.Data;
  21 +import lombok.EqualsAndHashCode;
21 22 import org.hibernate.annotations.Type;
22 23 import org.hibernate.annotations.TypeDef;
23 24 import org.thingsboard.server.common.data.id.PluginId;
24 25 import org.thingsboard.server.common.data.id.TenantId;
25 26 import org.thingsboard.server.common.data.plugin.ComponentLifecycleState;
26 27 import org.thingsboard.server.common.data.plugin.PluginMetaData;
  28 +import org.thingsboard.server.dao.model.BaseSqlEntity;
27 29 import org.thingsboard.server.dao.model.ModelConstants;
28 30 import org.thingsboard.server.dao.model.SearchTextEntity;
29 31 import org.thingsboard.server.dao.util.mapping.JsonStringType;
30 32
31 33 import javax.persistence.*;
32   -import java.util.UUID;
  34 +
  35 +import static org.thingsboard.server.common.data.UUIDConverter.fromString;
  36 +import static org.thingsboard.server.common.data.UUIDConverter.fromTimeUUID;
33 37
34 38 @Data
  39 +@EqualsAndHashCode(callSuper = true)
35 40 @Entity
36 41 @TypeDef(name = "json", typeClass = JsonStringType.class)
37 42 @Table(name = ModelConstants.PLUGIN_COLUMN_FAMILY_NAME)
38   -public class PluginMetaDataEntity implements SearchTextEntity<PluginMetaData> {
  43 +public class PluginMetaDataEntity extends BaseSqlEntity<PluginMetaData> implements SearchTextEntity<PluginMetaData> {
39 44
40 45 @Transient
41 46 private static final long serialVersionUID = -6164321050824823149L;
42   - @Id
43   - @Column(name = ModelConstants.ID_PROPERTY)
44   - private UUID id;
45 47
46 48 @Column(name = ModelConstants.PLUGIN_API_TOKEN_PROPERTY)
47 49 private String apiToken;
48 50
49 51 @Column(name = ModelConstants.PLUGIN_TENANT_ID_PROPERTY)
50   - private UUID tenantId;
  52 + private String tenantId;
51 53
52 54 @Column(name = ModelConstants.PLUGIN_NAME_PROPERTY)
53 55 private String name;
... ... @@ -78,9 +80,9 @@ public class PluginMetaDataEntity implements SearchTextEntity<PluginMetaData> {
78 80
79 81 public PluginMetaDataEntity(PluginMetaData pluginMetaData) {
80 82 if (pluginMetaData.getId() != null) {
81   - this.id = pluginMetaData.getId().getId();
  83 + this.setId(pluginMetaData.getId().getId());
82 84 }
83   - this.tenantId = pluginMetaData.getTenantId().getId();
  85 + this.tenantId = fromTimeUUID(pluginMetaData.getTenantId().getId());
84 86 this.apiToken = pluginMetaData.getApiToken();
85 87 this.clazz = pluginMetaData.getClazz();
86 88 this.name = pluginMetaData.getName();
... ... @@ -102,20 +104,10 @@ public class PluginMetaDataEntity implements SearchTextEntity<PluginMetaData> {
102 104 }
103 105
104 106 @Override
105   - public UUID getId() {
106   - return id;
107   - }
108   -
109   - @Override
110   - public void setId(UUID id) {
111   - this.id = id;
112   - }
113   -
114   - @Override
115 107 public PluginMetaData toData() {
116   - PluginMetaData data = new PluginMetaData(new PluginId(id));
117   - data.setTenantId(new TenantId(tenantId));
118   - data.setCreatedTime(UUIDs.unixTimestamp(id));
  108 + PluginMetaData data = new PluginMetaData(new PluginId(getId()));
  109 + data.setTenantId(new TenantId(fromString(tenantId)));
  110 + data.setCreatedTime(UUIDs.unixTimestamp(getId()));
119 111 data.setName(name);
120 112 data.setClazz(clazz);
121 113 data.setPublicAccess(publicAccess);
... ...
... ... @@ -18,11 +18,11 @@ package org.thingsboard.server.dao.model.sql;
18 18 import lombok.AllArgsConstructor;
19 19 import lombok.Data;
20 20 import lombok.NoArgsConstructor;
  21 +import org.thingsboard.server.common.data.UUIDConverter;
21 22 import org.thingsboard.server.common.data.relation.EntityRelation;
22 23
23 24 import javax.persistence.Transient;
24 25 import java.io.Serializable;
25   -import java.util.UUID;
26 26
27 27 @NoArgsConstructor
28 28 @AllArgsConstructor
... ... @@ -32,17 +32,17 @@ public class RelationCompositeKey implements Serializable {
32 32 @Transient
33 33 private static final long serialVersionUID = -4089175869616037592L;
34 34
35   - private UUID fromId;
  35 + private String fromId;
36 36 private String fromType;
37   - private UUID toId;
  37 + private String toId;
38 38 private String toType;
39 39 private String relationType;
40 40 private String relationTypeGroup;
41 41
42 42 public RelationCompositeKey(EntityRelation relation) {
43   - this.fromId = relation.getFrom().getId();
  43 + this.fromId = UUIDConverter.fromTimeUUID(relation.getFrom().getId());
44 44 this.fromType = relation.getFrom().getEntityType().name();
45   - this.toId = relation.getTo().getId();
  45 + this.toId = UUIDConverter.fromTimeUUID(relation.getTo().getId());
46 46 this.toType = relation.getTo().getEntityType().name();
47 47 this.relationType = relation.getType();
48 48 this.relationTypeGroup = relation.getTypeGroup().name();
... ...
... ... @@ -19,6 +19,7 @@ import com.fasterxml.jackson.databind.JsonNode;
19 19 import lombok.Data;
20 20 import org.hibernate.annotations.Type;
21 21 import org.hibernate.annotations.TypeDef;
  22 +import org.thingsboard.server.common.data.UUIDConverter;
22 23 import org.thingsboard.server.common.data.id.EntityIdFactory;
23 24 import org.thingsboard.server.common.data.relation.EntityRelation;
24 25 import org.thingsboard.server.common.data.relation.RelationTypeGroup;
... ... @@ -26,7 +27,6 @@ import org.thingsboard.server.dao.model.ToData;
26 27 import org.thingsboard.server.dao.util.mapping.JsonStringType;
27 28
28 29 import javax.persistence.*;
29   -import java.util.UUID;
30 30
31 31 import static org.thingsboard.server.dao.model.ModelConstants.*;
32 32
... ... @@ -39,7 +39,7 @@ public final class RelationEntity implements ToData<EntityRelation> {
39 39
40 40 @Id
41 41 @Column(name = RELATION_FROM_ID_PROPERTY)
42   - private UUID fromId;
  42 + private String fromId;
43 43
44 44 @Id
45 45 @Column(name = RELATION_FROM_TYPE_PROPERTY)
... ... @@ -47,7 +47,7 @@ public final class RelationEntity implements ToData<EntityRelation> {
47 47
48 48 @Id
49 49 @Column(name = RELATION_TO_ID_PROPERTY)
50   - private UUID toId;
  50 + private String toId;
51 51
52 52 @Id
53 53 @Column(name = RELATION_TO_TYPE_PROPERTY)
... ... @@ -71,11 +71,11 @@ public final class RelationEntity implements ToData<EntityRelation> {
71 71
72 72 public RelationEntity(EntityRelation relation) {
73 73 if (relation.getTo() != null) {
74   - this.toId = relation.getTo().getId();
  74 + this.toId = UUIDConverter.fromTimeUUID(relation.getTo().getId());
75 75 this.toType = relation.getTo().getEntityType().name();
76 76 }
77 77 if (relation.getFrom() != null) {
78   - this.fromId = relation.getFrom().getId();
  78 + this.fromId = UUIDConverter.fromTimeUUID(relation.getFrom().getId());
79 79 this.fromType = relation.getFrom().getEntityType().name();
80 80 }
81 81 this.relationType = relation.getType();
... ... @@ -87,10 +87,10 @@ public final class RelationEntity implements ToData<EntityRelation> {
87 87 public EntityRelation toData() {
88 88 EntityRelation relation = new EntityRelation();
89 89 if (toId != null && toType != null) {
90   - relation.setTo(EntityIdFactory.getByTypeAndUuid(toType, toId));
  90 + relation.setTo(EntityIdFactory.getByTypeAndUuid(toType, UUIDConverter.fromString(toId)));
91 91 }
92 92 if (fromId != null && fromType != null) {
93   - relation.setFrom(EntityIdFactory.getByTypeAndUuid(fromType, fromId));
  93 + relation.setFrom(EntityIdFactory.getByTypeAndUuid(fromType, UUIDConverter.fromString(fromId)));
94 94 }
95 95 relation.setType(relationType);
96 96 relation.setTypeGroup(RelationTypeGroup.valueOf(relationTypeGroup));
... ...
... ... @@ -18,6 +18,7 @@ package org.thingsboard.server.dao.model.sql;
18 18 import com.datastax.driver.core.utils.UUIDs;
19 19 import com.fasterxml.jackson.databind.JsonNode;
20 20 import lombok.Data;
  21 +import lombok.EqualsAndHashCode;
21 22 import org.hibernate.annotations.Type;
22 23 import org.hibernate.annotations.TypeDef;
23 24 import org.thingsboard.server.common.data.id.RuleId;
... ... @@ -25,27 +26,25 @@ import org.thingsboard.server.common.data.id.TenantId;
25 26 import org.thingsboard.server.common.data.plugin.ComponentLifecycleState;
26 27 import org.thingsboard.server.common.data.rule.RuleMetaData;
27 28 import org.thingsboard.server.dao.DaoUtil;
  29 +import org.thingsboard.server.dao.model.BaseSqlEntity;
28 30 import org.thingsboard.server.dao.model.ModelConstants;
29 31 import org.thingsboard.server.dao.model.SearchTextEntity;
30 32 import org.thingsboard.server.dao.util.mapping.JsonStringType;
31 33
32 34 import javax.persistence.*;
33   -import java.util.UUID;
34 35
35 36 @Data
  37 +@EqualsAndHashCode(callSuper = true)
36 38 @Entity
37 39 @TypeDef(name = "json", typeClass = JsonStringType.class)
38 40 @Table(name = ModelConstants.RULE_COLUMN_FAMILY_NAME)
39   -public class RuleMetaDataEntity implements SearchTextEntity<RuleMetaData> {
  41 +public class RuleMetaDataEntity extends BaseSqlEntity<RuleMetaData> implements SearchTextEntity<RuleMetaData> {
40 42
41 43 @Transient
42 44 private static final long serialVersionUID = -1506905644259463884L;
43   - @Id
44   - @Column(name = ModelConstants.ID_PROPERTY)
45   - private UUID id;
46 45
47 46 @Column(name = ModelConstants.RULE_TENANT_ID_PROPERTY)
48   - private UUID tenantId;
  47 + private String tenantId;
49 48
50 49 @Column(name = ModelConstants.RULE_NAME_PROPERTY)
51 50 private String name;
... ... @@ -84,9 +83,9 @@ public class RuleMetaDataEntity implements SearchTextEntity<RuleMetaData> {
84 83
85 84 public RuleMetaDataEntity(RuleMetaData rule) {
86 85 if (rule.getId() != null) {
87   - this.id = rule.getUuidId();
  86 + this.setId(rule.getUuidId());
88 87 }
89   - this.tenantId = DaoUtil.getId(rule.getTenantId());
  88 + this.tenantId = toString(DaoUtil.getId(rule.getTenantId()));
90 89 this.name = rule.getName();
91 90 this.pluginToken = rule.getPluginToken();
92 91 this.state = rule.getState();
... ... @@ -109,23 +108,13 @@ public class RuleMetaDataEntity implements SearchTextEntity<RuleMetaData> {
109 108 }
110 109
111 110 @Override
112   - public UUID getId() {
113   - return id;
114   - }
115   -
116   - @Override
117   - public void setId(UUID id) {
118   - this.id = id;
119   - }
120   -
121   - @Override
122 111 public RuleMetaData toData() {
123   - RuleMetaData rule = new RuleMetaData(new RuleId(id));
124   - rule.setTenantId(new TenantId(tenantId));
  112 + RuleMetaData rule = new RuleMetaData(new RuleId(getId()));
  113 + rule.setTenantId(new TenantId(toUUID(tenantId)));
125 114 rule.setName(name);
126 115 rule.setState(state);
127 116 rule.setWeight(weight);
128   - rule.setCreatedTime(UUIDs.unixTimestamp(id));
  117 + rule.setCreatedTime(UUIDs.unixTimestamp(getId()));
129 118 rule.setPluginToken(pluginToken);
130 119 rule.setFilters(filters);
131 120 rule.setProcessor(processor);
... ...
... ... @@ -18,11 +18,9 @@ package org.thingsboard.server.dao.model.sql;
18 18 import lombok.AllArgsConstructor;
19 19 import lombok.Data;
20 20
21   -import java.util.UUID;
22   -
23 21 @AllArgsConstructor
24 22 @Data
25 23 public class TenantDeviceTypeEntity {
26   - private UUID tenantId;
  24 + private String tenantId;
27 25 private String type;
28 26 }
... ...
... ... @@ -18,30 +18,31 @@ package org.thingsboard.server.dao.model.sql;
18 18 import com.datastax.driver.core.utils.UUIDs;
19 19 import com.fasterxml.jackson.databind.JsonNode;
20 20 import lombok.Data;
  21 +import lombok.EqualsAndHashCode;
21 22 import org.hibernate.annotations.Type;
22 23 import org.hibernate.annotations.TypeDef;
23 24 import org.thingsboard.server.common.data.Tenant;
24 25 import org.thingsboard.server.common.data.id.TenantId;
  26 +import org.thingsboard.server.dao.model.BaseSqlEntity;
25 27 import org.thingsboard.server.dao.model.ModelConstants;
26 28 import org.thingsboard.server.dao.model.SearchTextEntity;
27 29 import org.thingsboard.server.dao.util.mapping.JsonStringType;
28 30
29   -import javax.persistence.*;
30   -import java.util.UUID;
  31 +import javax.persistence.Column;
  32 +import javax.persistence.Entity;
  33 +import javax.persistence.Table;
  34 +import javax.persistence.Transient;
31 35
32 36 @Data
  37 +@EqualsAndHashCode(callSuper = true)
33 38 @Entity
34 39 @TypeDef(name = "json", typeClass = JsonStringType.class)
35 40 @Table(name = ModelConstants.TENANT_COLUMN_FAMILY_NAME)
36   -public final class TenantEntity implements SearchTextEntity<Tenant> {
  41 +public final class TenantEntity extends BaseSqlEntity<Tenant> implements SearchTextEntity<Tenant> {
37 42
38 43 @Transient
39 44 private static final long serialVersionUID = -4330655990232136337L;
40 45
41   - @Id
42   - @Column(name = ModelConstants.ID_PROPERTY)
43   - private UUID id;
44   -
45 46 @Column(name = ModelConstants.TENANT_TITLE_PROPERTY)
46 47 private String title;
47 48
... ... @@ -75,7 +76,7 @@ public final class TenantEntity implements SearchTextEntity<Tenant> {
75 76 @Column(name = ModelConstants.EMAIL_PROPERTY)
76 77 private String email;
77 78
78   - @Type(type="json")
  79 + @Type(type = "json")
79 80 @Column(name = ModelConstants.TENANT_ADDITIONAL_INFO_PROPERTY)
80 81 private JsonNode additionalInfo;
81 82
... ... @@ -85,7 +86,7 @@ public final class TenantEntity implements SearchTextEntity<Tenant> {
85 86
86 87 public TenantEntity(Tenant tenant) {
87 88 if (tenant.getId() != null) {
88   - this.id = tenant.getId().getId();
  89 + this.setId(tenant.getId().getId());
89 90 }
90 91 this.title = tenant.getTitle();
91 92 this.region = tenant.getRegion();
... ... @@ -116,8 +117,8 @@ public final class TenantEntity implements SearchTextEntity<Tenant> {
116 117
117 118 @Override
118 119 public Tenant toData() {
119   - Tenant tenant = new Tenant(new TenantId(id));
120   - tenant.setCreatedTime(UUIDs.unixTimestamp(id));
  120 + Tenant tenant = new Tenant(new TenantId(getId()));
  121 + tenant.setCreatedTime(UUIDs.unixTimestamp(getId()));
121 122 tenant.setTitle(title);
122 123 tenant.setRegion(region);
123 124 tenant.setCountry(country);
... ...
... ... @@ -22,18 +22,17 @@ import org.thingsboard.server.common.data.EntityType;
22 22
23 23 import javax.persistence.Transient;
24 24 import java.io.Serializable;
25   -import java.util.UUID;
26 25
27 26 @Data
28 27 @AllArgsConstructor
29 28 @NoArgsConstructor
30   -public class TsKvCompositeKey implements Serializable{
  29 +public class TsKvCompositeKey implements Serializable {
31 30
32 31 @Transient
33 32 private static final long serialVersionUID = -4089175869616037523L;
34 33
35 34 private EntityType entityType;
36   - private UUID entityId;
  35 + private String entityId;
37 36 private String key;
38 37 private long ts;
39 38 }
\ No newline at end of file
... ...
... ... @@ -21,7 +21,6 @@ import org.thingsboard.server.common.data.kv.*;
21 21 import org.thingsboard.server.dao.model.ToData;
22 22
23 23 import javax.persistence.*;
24   -import java.util.UUID;
25 24
26 25 import static org.thingsboard.server.dao.model.ModelConstants.*;
27 26
... ... @@ -69,7 +68,7 @@ public final class TsKvEntity implements ToData<TsKvEntry> {
69 68
70 69 @Id
71 70 @Column(name = ENTITY_ID_COLUMN)
72   - private UUID entityId;
  71 + private String entityId;
73 72
74 73 @Id
75 74 @Column(name = KEY_COLUMN)
... ...
... ... @@ -15,12 +15,13 @@
15 15 */
16 16 package org.thingsboard.server.dao.model.sql;
17 17
18   -import lombok.*;
  18 +import lombok.AllArgsConstructor;
  19 +import lombok.Data;
  20 +import lombok.NoArgsConstructor;
19 21 import org.thingsboard.server.common.data.EntityType;
20 22
21 23 import javax.persistence.Transient;
22 24 import java.io.Serializable;
23   -import java.util.UUID;
24 25
25 26 @Data
26 27 @NoArgsConstructor
... ... @@ -31,6 +32,6 @@ public class TsKvLatestCompositeKey implements Serializable{
31 32 private static final long serialVersionUID = -4089175869616037523L;
32 33
33 34 private EntityType entityType;
34   - private UUID entityId;
  35 + private String entityId;
35 36 private String key;
36 37 }
\ No newline at end of file
... ...
... ... @@ -21,7 +21,6 @@ import org.thingsboard.server.common.data.kv.*;
21 21 import org.thingsboard.server.dao.model.ToData;
22 22
23 23 import javax.persistence.*;
24   -import java.util.UUID;
25 24
26 25 import static org.thingsboard.server.dao.model.ModelConstants.*;
27 26
... ... @@ -31,6 +30,8 @@ import static org.thingsboard.server.dao.model.ModelConstants.*;
31 30 @IdClass(TsKvLatestCompositeKey.class)
32 31 public final class TsKvLatestEntity implements ToData<TsKvEntry> {
33 32
  33 +
  34 + //TODO: reafctor this and TsKvEntity to avoid code duplicates
34 35 @Id
35 36 @Enumerated(EnumType.STRING)
36 37 @Column(name = ENTITY_TYPE_COLUMN)
... ... @@ -38,7 +39,7 @@ public final class TsKvLatestEntity implements ToData<TsKvEntry> {
38 39
39 40 @Id
40 41 @Column(name = ENTITY_ID_COLUMN)
41   - private UUID entityId;
  42 + private String entityId;
42 43
43 44 @Id
44 45 @Column(name = KEY_COLUMN)
... ...
... ... @@ -17,29 +17,30 @@ package org.thingsboard.server.dao.model.sql;
17 17
18 18 import com.datastax.driver.core.utils.UUIDs;
19 19 import lombok.Data;
  20 +import lombok.EqualsAndHashCode;
20 21 import org.thingsboard.server.common.data.id.UserCredentialsId;
21 22 import org.thingsboard.server.common.data.id.UserId;
22 23 import org.thingsboard.server.common.data.security.UserCredentials;
23 24 import org.thingsboard.server.dao.model.BaseEntity;
  25 +import org.thingsboard.server.dao.model.BaseSqlEntity;
24 26 import org.thingsboard.server.dao.model.ModelConstants;
25 27
26   -import javax.persistence.*;
27   -import java.util.UUID;
  28 +import javax.persistence.Column;
  29 +import javax.persistence.Entity;
  30 +import javax.persistence.Table;
  31 +import javax.persistence.Transient;
28 32
29 33 @Data
  34 +@EqualsAndHashCode(callSuper = true)
30 35 @Entity
31 36 @Table(name = ModelConstants.USER_CREDENTIALS_COLUMN_FAMILY_NAME)
32   -public final class UserCredentialsEntity implements BaseEntity<UserCredentials> {
  37 +public final class UserCredentialsEntity extends BaseSqlEntity<UserCredentials> implements BaseEntity<UserCredentials> {
33 38
34 39 @Transient
35 40 private static final long serialVersionUID = -3989724854149114846L;
36 41
37   - @Id
38   - @Column(name = ModelConstants.ID_PROPERTY)
39   - private UUID id;
40   -
41 42 @Column(name = ModelConstants.USER_CREDENTIALS_USER_ID_PROPERTY, unique = true)
42   - private UUID userId;
  43 + private String userId;
43 44
44 45 @Column(name = ModelConstants.USER_CREDENTIALS_ENABLED_PROPERTY)
45 46 private boolean enabled;
... ... @@ -59,10 +60,10 @@ public final class UserCredentialsEntity implements BaseEntity<UserCredentials>
59 60
60 61 public UserCredentialsEntity(UserCredentials userCredentials) {
61 62 if (userCredentials.getId() != null) {
62   - this.id = userCredentials.getId().getId();
  63 + this.setId(userCredentials.getId().getId());
63 64 }
64 65 if (userCredentials.getUserId() != null) {
65   - this.userId = userCredentials.getUserId().getId();
  66 + this.userId = toString(userCredentials.getUserId().getId());
66 67 }
67 68 this.enabled = userCredentials.isEnabled();
68 69 this.password = userCredentials.getPassword();
... ... @@ -72,10 +73,10 @@ public final class UserCredentialsEntity implements BaseEntity<UserCredentials>
72 73
73 74 @Override
74 75 public UserCredentials toData() {
75   - UserCredentials userCredentials = new UserCredentials(new UserCredentialsId(id));
76   - userCredentials.setCreatedTime(UUIDs.unixTimestamp(id));
  76 + UserCredentials userCredentials = new UserCredentials(new UserCredentialsId(getId()));
  77 + userCredentials.setCreatedTime(UUIDs.unixTimestamp(getId()));
77 78 if (userId != null) {
78   - userCredentials.setUserId(new UserId(userId));
  79 + userCredentials.setUserId(new UserId(toUUID(userId)));
79 80 }
80 81 userCredentials.setEnabled(enabled);
81 82 userCredentials.setPassword(password);
... ... @@ -84,13 +85,4 @@ public final class UserCredentialsEntity implements BaseEntity<UserCredentials>
84 85 return userCredentials;
85 86 }
86 87
87   - @Override
88   - public UUID getId() {
89   - return id;
90   - }
91   -
92   - @Override
93   - public void setId(UUID id) {
94   - this.id = id;
95   - }
96 88 }
\ No newline at end of file
... ...
... ... @@ -18,6 +18,7 @@ package org.thingsboard.server.dao.model.sql;
18 18 import com.datastax.driver.core.utils.UUIDs;
19 19 import com.fasterxml.jackson.databind.JsonNode;
20 20 import lombok.Data;
  21 +import lombok.EqualsAndHashCode;
21 22 import org.hibernate.annotations.Type;
22 23 import org.hibernate.annotations.TypeDef;
23 24 import org.thingsboard.server.common.data.User;
... ... @@ -25,33 +26,33 @@ import org.thingsboard.server.common.data.id.CustomerId;
25 26 import org.thingsboard.server.common.data.id.TenantId;
26 27 import org.thingsboard.server.common.data.id.UserId;
27 28 import org.thingsboard.server.common.data.security.Authority;
  29 +import org.thingsboard.server.dao.model.BaseSqlEntity;
28 30 import org.thingsboard.server.dao.model.ModelConstants;
29 31 import org.thingsboard.server.dao.model.SearchTextEntity;
30 32 import org.thingsboard.server.dao.util.mapping.JsonStringType;
31 33
32 34 import javax.persistence.*;
33   -import java.util.UUID;
  35 +
  36 +import static org.thingsboard.server.common.data.UUIDConverter.fromString;
  37 +import static org.thingsboard.server.common.data.UUIDConverter.fromTimeUUID;
34 38
35 39 /**
36 40 * Created by Valerii Sosliuk on 4/21/2017.
37 41 */
38 42 @Data
  43 +@EqualsAndHashCode(callSuper = true)
39 44 @Entity
40 45 @TypeDef(name = "json", typeClass = JsonStringType.class)
41 46 @Table(name = ModelConstants.USER_PG_HIBERNATE_COLUMN_FAMILY_NAME)
42   -public class UserEntity implements SearchTextEntity<User> {
  47 +public class UserEntity extends BaseSqlEntity<User> implements SearchTextEntity<User> {
43 48 @Transient
44 49 private static final long serialVersionUID = -271106508790582977L;
45 50
46   - @Id
47   - @Column(name = ModelConstants.ID_PROPERTY)
48   - private UUID id;
49   -
50 51 @Column(name = ModelConstants.USER_TENANT_ID_PROPERTY)
51   - private UUID tenantId;
  52 + private String tenantId;
52 53
53 54 @Column(name = ModelConstants.USER_CUSTOMER_ID_PROPERTY)
54   - private UUID customerId;
  55 + private String customerId;
55 56
56 57 @Enumerated(EnumType.STRING)
57 58 @Column(name = ModelConstants.USER_AUTHORITY_PROPERTY)
... ... @@ -69,7 +70,7 @@ public class UserEntity implements SearchTextEntity<User> {
69 70 @Column(name = ModelConstants.USER_LAST_NAME_PROPERTY)
70 71 private String lastName;
71 72
72   - @Type(type="json")
  73 + @Type(type = "json")
73 74 @Column(name = ModelConstants.USER_ADDITIONAL_INFO_PROPERTY)
74 75 private JsonNode additionalInfo;
75 76
... ... @@ -78,14 +79,14 @@ public class UserEntity implements SearchTextEntity<User> {
78 79
79 80 public UserEntity(User user) {
80 81 if (user.getId() != null) {
81   - this.id = user.getId().getId();
  82 + this.setId(user.getId().getId());
82 83 }
83 84 this.authority = user.getAuthority();
84 85 if (user.getTenantId() != null) {
85   - this.tenantId = user.getTenantId().getId();
  86 + this.tenantId = fromTimeUUID(user.getTenantId().getId());
86 87 }
87 88 if (user.getCustomerId() != null) {
88   - this.customerId = user.getCustomerId().getId();
  89 + this.customerId = fromTimeUUID(user.getCustomerId().getId());
89 90 }
90 91 this.email = user.getEmail();
91 92 this.firstName = user.getFirstName();
... ... @@ -104,25 +105,15 @@ public class UserEntity implements SearchTextEntity<User> {
104 105 }
105 106
106 107 @Override
107   - public UUID getId() {
108   - return id;
109   - }
110   -
111   - @Override
112   - public void setId(UUID id) {
113   - this.id = id;
114   - }
115   -
116   - @Override
117 108 public User toData() {
118   - User user = new User(new UserId(id));
119   - user.setCreatedTime(UUIDs.unixTimestamp(id));
  109 + User user = new User(new UserId(getId()));
  110 + user.setCreatedTime(UUIDs.unixTimestamp(getId()));
120 111 user.setAuthority(authority);
121 112 if (tenantId != null) {
122   - user.setTenantId(new TenantId(tenantId));
  113 + user.setTenantId(new TenantId(fromString(tenantId)));
123 114 }
124 115 if (customerId != null) {
125   - user.setCustomerId(new CustomerId(customerId));
  116 + user.setCustomerId(new CustomerId(fromString(customerId)));
126 117 }
127 118 user.setEmail(email);
128 119 user.setFirstName(firstName);
... ...
... ... @@ -18,33 +18,34 @@ package org.thingsboard.server.dao.model.sql;
18 18 import com.datastax.driver.core.utils.UUIDs;
19 19 import com.fasterxml.jackson.databind.JsonNode;
20 20 import lombok.Data;
  21 +import lombok.EqualsAndHashCode;
21 22 import org.hibernate.annotations.Type;
22 23 import org.hibernate.annotations.TypeDef;
23 24 import org.thingsboard.server.common.data.id.TenantId;
24 25 import org.thingsboard.server.common.data.id.WidgetTypeId;
25 26 import org.thingsboard.server.common.data.widget.WidgetType;
26 27 import org.thingsboard.server.dao.model.BaseEntity;
  28 +import org.thingsboard.server.dao.model.BaseSqlEntity;
27 29 import org.thingsboard.server.dao.model.ModelConstants;
28 30 import org.thingsboard.server.dao.util.mapping.JsonStringType;
29 31
30   -import javax.persistence.*;
31   -import java.util.UUID;
  32 +import javax.persistence.Column;
  33 +import javax.persistence.Entity;
  34 +import javax.persistence.Table;
  35 +import javax.persistence.Transient;
32 36
33 37 @Data
  38 +@EqualsAndHashCode(callSuper = true)
34 39 @Entity
35 40 @TypeDef(name = "json", typeClass = JsonStringType.class)
36 41 @Table(name = ModelConstants.WIDGET_TYPE_COLUMN_FAMILY_NAME)
37   -public final class WidgetTypeEntity implements BaseEntity<WidgetType> {
  42 +public final class WidgetTypeEntity extends BaseSqlEntity<WidgetType> implements BaseEntity<WidgetType> {
38 43
39 44 @Transient
40 45 private static final long serialVersionUID = -5436279069884988630L;
41 46
42   - @Id
43   - @Column(name = ModelConstants.ID_PROPERTY)
44   - private UUID id;
45   -
46 47 @Column(name = ModelConstants.WIDGET_TYPE_TENANT_ID_PROPERTY)
47   - private UUID tenantId;
  48 + private String tenantId;
48 49
49 50 @Column(name = ModelConstants.WIDGET_TYPE_BUNDLE_ALIAS_PROPERTY)
50 51 private String bundleAlias;
... ... @@ -65,10 +66,10 @@ public final class WidgetTypeEntity implements BaseEntity<WidgetType> {
65 66
66 67 public WidgetTypeEntity(WidgetType widgetType) {
67 68 if (widgetType.getId() != null) {
68   - this.id = widgetType.getId().getId();
  69 + this.setId(widgetType.getId().getId());
69 70 }
70 71 if (widgetType.getTenantId() != null) {
71   - this.tenantId = widgetType.getTenantId().getId();
  72 + this.tenantId = toString(widgetType.getTenantId().getId());
72 73 }
73 74 this.bundleAlias = widgetType.getBundleAlias();
74 75 this.alias = widgetType.getAlias();
... ... @@ -77,21 +78,11 @@ public final class WidgetTypeEntity implements BaseEntity<WidgetType> {
77 78 }
78 79
79 80 @Override
80   - public UUID getId() {
81   - return id;
82   - }
83   -
84   - @Override
85   - public void setId(UUID id) {
86   - this.id = id;
87   - }
88   -
89   - @Override
90 81 public WidgetType toData() {
91   - WidgetType widgetType = new WidgetType(new WidgetTypeId(id));
92   - widgetType.setCreatedTime(UUIDs.unixTimestamp(id));
  82 + WidgetType widgetType = new WidgetType(new WidgetTypeId(getId()));
  83 + widgetType.setCreatedTime(UUIDs.unixTimestamp(getId()));
93 84 if (tenantId != null) {
94   - widgetType.setTenantId(new TenantId(tenantId));
  85 + widgetType.setTenantId(new TenantId(toUUID(tenantId)));
95 86 }
96 87 widgetType.setBundleAlias(bundleAlias);
97 88 widgetType.setAlias(alias);
... ...
... ... @@ -18,29 +18,31 @@ package org.thingsboard.server.dao.model.sql;
18 18
19 19 import com.datastax.driver.core.utils.UUIDs;
20 20 import lombok.Data;
  21 +import lombok.EqualsAndHashCode;
  22 +import org.thingsboard.server.common.data.UUIDConverter;
21 23 import org.thingsboard.server.common.data.id.TenantId;
22 24 import org.thingsboard.server.common.data.id.WidgetsBundleId;
23 25 import org.thingsboard.server.common.data.widget.WidgetsBundle;
  26 +import org.thingsboard.server.dao.model.BaseSqlEntity;
24 27 import org.thingsboard.server.dao.model.ModelConstants;
25 28 import org.thingsboard.server.dao.model.SearchTextEntity;
26 29
27   -import javax.persistence.*;
28   -import java.util.UUID;
  30 +import javax.persistence.Column;
  31 +import javax.persistence.Entity;
  32 +import javax.persistence.Table;
  33 +import javax.persistence.Transient;
29 34
30 35 @Data
  36 +@EqualsAndHashCode(callSuper = true)
31 37 @Entity
32 38 @Table(name = ModelConstants.WIDGETS_BUNDLE_COLUMN_FAMILY_NAME)
33   -public final class WidgetsBundleEntity implements SearchTextEntity<WidgetsBundle> {
  39 +public final class WidgetsBundleEntity extends BaseSqlEntity<WidgetsBundle> implements SearchTextEntity<WidgetsBundle> {
34 40
35 41 @Transient
36 42 private static final long serialVersionUID = 6897035686422298096L;
37 43
38   - @Id
39   - @Column(name = ModelConstants.ID_PROPERTY)
40   - private UUID id;
41   -
42 44 @Column(name = ModelConstants.WIDGETS_BUNDLE_TENANT_ID_PROPERTY)
43   - private UUID tenantId;
  45 + private String tenantId;
44 46
45 47 @Column(name = ModelConstants.WIDGETS_BUNDLE_ALIAS_PROPERTY)
46 48 private String alias;
... ... @@ -57,26 +59,16 @@ public final class WidgetsBundleEntity implements SearchTextEntity<WidgetsBundle
57 59
58 60 public WidgetsBundleEntity(WidgetsBundle widgetsBundle) {
59 61 if (widgetsBundle.getId() != null) {
60   - this.id = widgetsBundle.getId().getId();
  62 + this.setId(widgetsBundle.getId().getId());
61 63 }
62 64 if (widgetsBundle.getTenantId() != null) {
63   - this.tenantId = widgetsBundle.getTenantId().getId();
  65 + this.tenantId = UUIDConverter.fromTimeUUID(widgetsBundle.getTenantId().getId());
64 66 }
65 67 this.alias = widgetsBundle.getAlias();
66 68 this.title = widgetsBundle.getTitle();
67 69 }
68 70
69 71 @Override
70   - public UUID getId() {
71   - return id;
72   - }
73   -
74   - @Override
75   - public void setId(UUID id) {
76   - this.id = id;
77   - }
78   -
79   - @Override
80 72 public String getSearchTextSource() {
81 73 return title;
82 74 }
... ... @@ -88,10 +80,10 @@ public final class WidgetsBundleEntity implements SearchTextEntity<WidgetsBundle
88 80
89 81 @Override
90 82 public WidgetsBundle toData() {
91   - WidgetsBundle widgetsBundle = new WidgetsBundle(new WidgetsBundleId(id));
92   - widgetsBundle.setCreatedTime(UUIDs.unixTimestamp(id));
  83 + WidgetsBundle widgetsBundle = new WidgetsBundle(new WidgetsBundleId(UUIDConverter.fromString(id)));
  84 + widgetsBundle.setCreatedTime(UUIDs.unixTimestamp(UUIDConverter.fromString(id)));
93 85 if (tenantId != null) {
94   - widgetsBundle.setTenantId(new TenantId(tenantId));
  86 + widgetsBundle.setTenantId(new TenantId(UUIDConverter.fromString(tenantId)));
95 87 }
96 88 widgetsBundle.setAlias(alias);
97 89 widgetsBundle.setTitle(title);
... ...
... ... @@ -17,8 +17,6 @@ package org.thingsboard.server.dao.model.type;
17 17
18 18 import com.datastax.driver.extras.codecs.enums.EnumNameCodec;
19 19 import org.thingsboard.server.common.data.alarm.AlarmSeverity;
20   -import org.thingsboard.server.common.data.alarm.AlarmStatus;
21   -import org.thingsboard.server.dao.alarm.AlarmService;
22 20
23 21 public class AlarmSeverityCodec extends EnumNameCodec<AlarmSeverity> {
24 22
... ...
... ... @@ -15,9 +15,8 @@
15 15 */
16 16 package org.thingsboard.server.dao.model.type;
17 17
18   -import org.thingsboard.server.common.data.security.Authority;
19   -
20 18 import com.datastax.driver.extras.codecs.enums.EnumNameCodec;
  19 +import org.thingsboard.server.common.data.security.Authority;
21 20
22 21 public class AuthorityCodec extends EnumNameCodec<Authority> {
23 22
... ...
... ... @@ -17,7 +17,6 @@ package org.thingsboard.server.dao.model.type;
17 17
18 18 import com.datastax.driver.extras.codecs.enums.EnumNameCodec;
19 19 import org.thingsboard.server.common.data.plugin.ComponentLifecycleState;
20   -import org.thingsboard.server.common.data.security.Authority;
21 20
22 21 public class ComponentLifecycleStateCodec extends EnumNameCodec<ComponentLifecycleState> {
23 22
... ...
... ... @@ -17,7 +17,6 @@ package org.thingsboard.server.dao.model.type;
17 17
18 18 import com.datastax.driver.extras.codecs.enums.EnumNameCodec;
19 19 import org.thingsboard.server.common.data.plugin.ComponentScope;
20   -import org.thingsboard.server.common.data.plugin.ComponentType;
21 20
22 21 public class ComponentScopeCodec extends EnumNameCodec<ComponentScope> {
23 22
... ...
... ... @@ -16,7 +16,6 @@
16 16 package org.thingsboard.server.dao.model.type;
17 17
18 18 import com.datastax.driver.extras.codecs.enums.EnumNameCodec;
19   -import org.thingsboard.server.common.data.plugin.ComponentLifecycleState;
20 19 import org.thingsboard.server.common.data.plugin.ComponentType;
21 20
22 21 public class ComponentTypeCodec extends EnumNameCodec<ComponentType> {
... ...
... ... @@ -15,9 +15,8 @@
15 15 */
16 16 package org.thingsboard.server.dao.model.type;
17 17
18   -import org.thingsboard.server.common.data.security.DeviceCredentialsType;
19   -
20 18 import com.datastax.driver.extras.codecs.enums.EnumNameCodec;
  19 +import org.thingsboard.server.common.data.security.DeviceCredentialsType;
21 20
22 21 public class DeviceCredentialsTypeCodec extends EnumNameCodec<DeviceCredentialsType> {
23 22
... ...
... ... @@ -17,7 +17,6 @@ package org.thingsboard.server.dao.model.type;
17 17
18 18 import com.datastax.driver.extras.codecs.enums.EnumNameCodec;
19 19 import org.thingsboard.server.common.data.EntityType;
20   -import org.thingsboard.server.common.data.plugin.ComponentType;
21 20
22 21 public class EntityTypeCodec extends EnumNameCodec<EntityType> {
23 22
... ...
... ... @@ -15,9 +15,8 @@
15 15 */
16 16 package org.thingsboard.server.dao.model.type;
17 17
18   -import org.thingsboard.server.common.data.relation.RelationTypeGroup;
19   -
20 18 import com.datastax.driver.extras.codecs.enums.EnumNameCodec;
  19 +import org.thingsboard.server.common.data.relation.RelationTypeGroup;
21 20
22 21 public class RelationTypeGroupCodec extends EnumNameCodec<RelationTypeGroup> {
23 22
... ...
... ... @@ -22,11 +22,11 @@ import org.thingsboard.server.common.data.id.PluginId;
22 22 import org.thingsboard.server.common.data.id.TenantId;
23 23 import org.thingsboard.server.common.data.page.TextPageLink;
24 24 import org.thingsboard.server.common.data.plugin.PluginMetaData;
25   -import org.thingsboard.server.dao.nosql.CassandraAbstractSearchTextDao;
26 25 import org.thingsboard.server.dao.DaoUtil;
27   -import org.thingsboard.server.dao.util.NoSqlDao;
28 26 import org.thingsboard.server.dao.model.ModelConstants;
29 27 import org.thingsboard.server.dao.model.nosql.PluginMetaDataEntity;
  28 +import org.thingsboard.server.dao.nosql.CassandraAbstractSearchTextDao;
  29 +import org.thingsboard.server.dao.util.NoSqlDao;
30 30
31 31 import java.util.Arrays;
32 32 import java.util.List;
... ...
... ... @@ -28,11 +28,11 @@ import org.thingsboard.server.common.data.id.EntityIdFactory;
28 28 import org.thingsboard.server.common.data.page.TimePageLink;
29 29 import org.thingsboard.server.common.data.relation.EntityRelation;
30 30 import org.thingsboard.server.common.data.relation.RelationTypeGroup;
  31 +import org.thingsboard.server.dao.model.ModelConstants;
  32 +import org.thingsboard.server.dao.model.type.RelationTypeGroupCodec;
31 33 import org.thingsboard.server.dao.nosql.CassandraAbstractAsyncDao;
32 34 import org.thingsboard.server.dao.nosql.CassandraAbstractSearchTimeDao;
33 35 import org.thingsboard.server.dao.util.NoSqlDao;
34   -import org.thingsboard.server.dao.model.ModelConstants;
35   -import org.thingsboard.server.dao.model.type.RelationTypeGroupCodec;
36 36
37 37 import javax.annotation.PostConstruct;
38 38 import java.util.ArrayList;
... ...
... ... @@ -22,11 +22,11 @@ import org.thingsboard.server.common.data.id.RuleId;
22 22 import org.thingsboard.server.common.data.id.TenantId;
23 23 import org.thingsboard.server.common.data.page.TextPageLink;
24 24 import org.thingsboard.server.common.data.rule.RuleMetaData;
25   -import org.thingsboard.server.dao.nosql.CassandraAbstractSearchTextDao;
26 25 import org.thingsboard.server.dao.DaoUtil;
27   -import org.thingsboard.server.dao.util.NoSqlDao;
28 26 import org.thingsboard.server.dao.model.ModelConstants;
29 27 import org.thingsboard.server.dao.model.nosql.RuleMetaDataEntity;
  28 +import org.thingsboard.server.dao.nosql.CassandraAbstractSearchTextDao;
  29 +import org.thingsboard.server.dao.util.NoSqlDao;
30 30
31 31 import java.util.Arrays;
32 32 import java.util.List;
... ...
... ... @@ -19,10 +19,10 @@ import com.datastax.driver.core.querybuilder.Select.Where;
19 19 import lombok.extern.slf4j.Slf4j;
20 20 import org.springframework.stereotype.Component;
21 21 import org.thingsboard.server.common.data.AdminSettings;
22   -import org.thingsboard.server.dao.nosql.CassandraAbstractModelDao;
23 22 import org.thingsboard.server.dao.DaoUtil;
24   -import org.thingsboard.server.dao.util.NoSqlDao;
25 23 import org.thingsboard.server.dao.model.nosql.AdminSettingsEntity;
  24 +import org.thingsboard.server.dao.nosql.CassandraAbstractModelDao;
  25 +import org.thingsboard.server.dao.util.NoSqlDao;
26 26
27 27 import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;
28 28 import static com.datastax.driver.core.querybuilder.QueryBuilder.select;
... ...
... ... @@ -28,6 +28,8 @@ import org.thingsboard.server.dao.model.BaseEntity;
28 28 import java.util.List;
29 29 import java.util.UUID;
30 30
  31 +import static org.thingsboard.server.common.data.UUIDConverter.fromTimeUUID;
  32 +
31 33 /**
32 34 * @author Valerii Sosliuk
33 35 */
... ... @@ -38,7 +40,7 @@ public abstract class JpaAbstractDao<E extends BaseEntity<D>, D>
38 40
39 41 protected abstract Class<E> getEntityClass();
40 42
41   - protected abstract CrudRepository<E, UUID> getCrudRepository();
  43 + protected abstract CrudRepository<E, String> getCrudRepository();
42 44
43 45 protected void setSearchText(E entity) {}
44 46
... ... @@ -64,19 +66,20 @@ public abstract class JpaAbstractDao<E extends BaseEntity<D>, D>
64 66 @Override
65 67 public D findById(UUID key) {
66 68 log.debug("Get entity by key {}", key);
67   - E entity = getCrudRepository().findOne(key);
  69 + E entity = getCrudRepository().findOne(fromTimeUUID(key));
68 70 return DaoUtil.getData(entity);
69 71 }
70 72
71 73 @Override
72 74 public ListenableFuture<D> findByIdAsync(UUID key) {
73 75 log.debug("Get entity by key async {}", key);
74   - return service.submit(() -> DaoUtil.getData(getCrudRepository().findOne(key)));
  76 + return service.submit(() -> DaoUtil.getData(getCrudRepository().findOne(fromTimeUUID(key))));
75 77 }
76 78
77 79 @Override
78 80 @Transactional
79   - public boolean removeById(UUID key) {
  81 + public boolean removeById(UUID id) {
  82 + String key = fromTimeUUID(id);
80 83 getCrudRepository().delete(key);
81 84 log.debug("Remove request: {}", key);
82 85 return getCrudRepository().findOne(key) == null;
... ...
... ... @@ -17,9 +17,9 @@ package org.thingsboard.server.dao.sql;
17 17
18 18 import com.datastax.driver.core.utils.UUIDs;
19 19 import org.springframework.data.jpa.domain.Specification;
  20 +import org.thingsboard.server.common.data.UUIDConverter;
20 21 import org.thingsboard.server.common.data.page.TimePageLink;
21 22 import org.thingsboard.server.dao.model.BaseEntity;
22   -import static org.thingsboard.server.dao.model.ModelConstants.*;
23 23
24 24 import javax.persistence.criteria.CriteriaBuilder;
25 25 import javax.persistence.criteria.CriteriaQuery;
... ... @@ -41,30 +41,30 @@ public abstract class JpaAbstractSearchTimeDao<E extends BaseEntity<D>, D> exten
41 41 List<Predicate> predicates = new ArrayList<>();
42 42 if (pageLink.isAscOrder()) {
43 43 if (pageLink.getIdOffset() != null) {
44   - Predicate lowerBound = criteriaBuilder.greaterThan(root.get(idColumn), pageLink.getIdOffset());
  44 + Predicate lowerBound = criteriaBuilder.greaterThan(root.get(idColumn), UUIDConverter.fromTimeUUID(pageLink.getIdOffset()));
45 45 predicates.add(lowerBound);
46 46 } else if (pageLink.getStartTime() != null) {
47 47 UUID startOf = UUIDs.startOf(pageLink.getStartTime());
48   - Predicate lowerBound = criteriaBuilder.greaterThanOrEqualTo(root.get(idColumn), startOf);
  48 + Predicate lowerBound = criteriaBuilder.greaterThanOrEqualTo(root.get(idColumn), UUIDConverter.fromTimeUUID(startOf));
49 49 predicates.add(lowerBound);
50 50 }
51 51 if (pageLink.getEndTime() != null) {
52 52 UUID endOf = UUIDs.endOf(pageLink.getEndTime());
53   - Predicate upperBound = criteriaBuilder.lessThanOrEqualTo(root.get(idColumn), endOf);
  53 + Predicate upperBound = criteriaBuilder.lessThanOrEqualTo(root.get(idColumn), UUIDConverter.fromTimeUUID(endOf));
54 54 predicates.add(upperBound);
55 55 }
56 56 } else {
57 57 if (pageLink.getIdOffset() != null) {
58   - Predicate lowerBound = criteriaBuilder.lessThan(root.get(idColumn), pageLink.getIdOffset());
  58 + Predicate lowerBound = criteriaBuilder.lessThan(root.get(idColumn), UUIDConverter.fromTimeUUID(pageLink.getIdOffset()));
59 59 predicates.add(lowerBound);
60 60 } else if (pageLink.getEndTime() != null) {
61 61 UUID endOf = UUIDs.endOf(pageLink.getEndTime());
62   - Predicate lowerBound = criteriaBuilder.lessThanOrEqualTo(root.get(idColumn), endOf);
  62 + Predicate lowerBound = criteriaBuilder.lessThanOrEqualTo(root.get(idColumn), UUIDConverter.fromTimeUUID(endOf));
63 63 predicates.add(lowerBound);
64 64 }
65 65 if (pageLink.getStartTime() != null) {
66 66 UUID startOf = UUIDs.startOf(pageLink.getStartTime());
67   - Predicate upperBound = criteriaBuilder.greaterThanOrEqualTo(root.get(idColumn), startOf);
  67 + Predicate upperBound = criteriaBuilder.greaterThanOrEqualTo(root.get(idColumn), UUIDConverter.fromTimeUUID(startOf));
68 68 predicates.add(upperBound);
69 69 }
70 70 }
... ...
... ... @@ -20,22 +20,21 @@ import org.springframework.data.jpa.repository.Query;
20 20 import org.springframework.data.repository.CrudRepository;
21 21 import org.springframework.data.repository.query.Param;
22 22 import org.thingsboard.server.common.data.EntityType;
23   -import org.thingsboard.server.dao.util.SqlDao;
24 23 import org.thingsboard.server.dao.model.sql.AlarmEntity;
  24 +import org.thingsboard.server.dao.util.SqlDao;
25 25
26 26 import java.util.List;
27   -import java.util.UUID;
28 27
29 28 /**
30 29 * Created by Valerii Sosliuk on 5/21/2017.
31 30 */
32 31 @SqlDao
33   -public interface AlarmRepository extends CrudRepository<AlarmEntity, UUID> {
  32 +public interface AlarmRepository extends CrudRepository<AlarmEntity, String> {
34 33
35 34 @Query("SELECT a FROM AlarmEntity a WHERE a.tenantId = :tenantId AND a.originatorId = :originatorId " +
36 35 "AND a.originatorType = :entityType AND a.type = :alarmType ORDER BY a.type ASC, a.id DESC")
37   - List<AlarmEntity> findLatestByOriginatorAndType(@Param("tenantId") UUID tenantId,
38   - @Param("originatorId") UUID originatorId,
  36 + List<AlarmEntity> findLatestByOriginatorAndType(@Param("tenantId") String tenantId,
  37 + @Param("originatorId") String originatorId,
39 38 @Param("entityType") EntityType entityType,
40 39 @Param("alarmType") String alarmType,
41 40 Pageable pageable);
... ...
... ... @@ -24,8 +24,8 @@ import org.springframework.beans.factory.annotation.Autowired;
24 24 import org.springframework.data.domain.PageRequest;
25 25 import org.springframework.data.repository.CrudRepository;
26 26 import org.springframework.stereotype.Component;
27   -import org.springframework.transaction.annotation.Transactional;
28 27 import org.thingsboard.server.common.data.EntityType;
  28 +import org.thingsboard.server.common.data.UUIDConverter;
29 29 import org.thingsboard.server.common.data.alarm.Alarm;
30 30 import org.thingsboard.server.common.data.alarm.AlarmInfo;
31 31 import org.thingsboard.server.common.data.alarm.AlarmQuery;
... ... @@ -37,17 +37,15 @@ import org.thingsboard.server.common.data.relation.RelationTypeGroup;
37 37 import org.thingsboard.server.dao.DaoUtil;
38 38 import org.thingsboard.server.dao.alarm.AlarmDao;
39 39 import org.thingsboard.server.dao.alarm.BaseAlarmService;
40   -import org.thingsboard.server.dao.util.SqlDao;
41 40 import org.thingsboard.server.dao.model.sql.AlarmEntity;
42 41 import org.thingsboard.server.dao.relation.RelationDao;
43 42 import org.thingsboard.server.dao.sql.JpaAbstractDao;
  43 +import org.thingsboard.server.dao.util.SqlDao;
44 44
45 45 import java.util.ArrayList;
46 46 import java.util.List;
47 47 import java.util.UUID;
48 48
49   -import static org.springframework.transaction.annotation.Propagation.REQUIRES_NEW;
50   -
51 49 /**
52 50 * Created by Valerii Sosliuk on 5/19/2017.
53 51 */
... ... @@ -68,7 +66,7 @@ public class JpaAlarmDao extends JpaAbstractDao<AlarmEntity, Alarm> implements A
68 66 }
69 67
70 68 @Override
71   - protected CrudRepository<AlarmEntity, UUID> getCrudRepository() {
  69 + protected CrudRepository<AlarmEntity, String> getCrudRepository() {
72 70 return alarmRepository;
73 71 }
74 72
... ... @@ -76,8 +74,8 @@ public class JpaAlarmDao extends JpaAbstractDao<AlarmEntity, Alarm> implements A
76 74 public ListenableFuture<Alarm> findLatestByOriginatorAndType(TenantId tenantId, EntityId originator, String type) {
77 75 return service.submit(() -> {
78 76 List<AlarmEntity> latest = alarmRepository.findLatestByOriginatorAndType(
79   - tenantId.getId(),
80   - originator.getId(),
  77 + UUIDConverter.fromTimeUUID(tenantId.getId()),
  78 + UUIDConverter.fromTimeUUID(originator.getId()),
81 79 originator.getEntityType(),
82 80 type,
83 81 new PageRequest(0, 1));
... ...
... ... @@ -24,57 +24,56 @@ import org.thingsboard.server.dao.model.sql.AssetEntity;
24 24 import org.thingsboard.server.dao.util.SqlDao;
25 25
26 26 import java.util.List;
27   -import java.util.UUID;
28 27
29 28 /**
30 29 * Created by Valerii Sosliuk on 5/21/2017.
31 30 */
32 31 @SqlDao
33   -public interface AssetRepository extends CrudRepository<AssetEntity, UUID> {
  32 +public interface AssetRepository extends CrudRepository<AssetEntity, String> {
34 33
35 34 @Query("SELECT a FROM AssetEntity a WHERE a.tenantId = :tenantId " +
36 35 "AND LOWER(a.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " +
37 36 "AND a.id > :idOffset ORDER BY a.id")
38   - List<AssetEntity> findByTenantId(@Param("tenantId") UUID tenantId,
  37 + List<AssetEntity> findByTenantId(@Param("tenantId") String tenantId,
39 38 @Param("textSearch") String textSearch,
40   - @Param("idOffset") UUID idOffset,
  39 + @Param("idOffset") String idOffset,
41 40 Pageable pageable);
42 41
43 42 @Query("SELECT a FROM AssetEntity a WHERE a.tenantId = :tenantId " +
44 43 "AND a.customerId = :customerId " +
45 44 "AND LOWER(a.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " +
46 45 "AND a.id > :idOffset ORDER BY a.id")
47   - List<AssetEntity> findByTenantIdAndCustomerId(@Param("tenantId") UUID tenantId,
48   - @Param("customerId") UUID customerId,
  46 + List<AssetEntity> findByTenantIdAndCustomerId(@Param("tenantId") String tenantId,
  47 + @Param("customerId") String customerId,
49 48 @Param("textSearch") String textSearch,
50   - @Param("idOffset") UUID idOffset,
  49 + @Param("idOffset") String idOffset,
51 50 Pageable pageable);
52 51
53   - List<AssetEntity> findByTenantIdAndIdIn(UUID tenantId, List<UUID> assetIds);
  52 + List<AssetEntity> findByTenantIdAndIdIn(String tenantId, List<String> assetIds);
54 53
55   - List<AssetEntity> findByTenantIdAndCustomerIdAndIdIn(UUID tenantId, UUID customerId, List<UUID> assetIds);
  54 + List<AssetEntity> findByTenantIdAndCustomerIdAndIdIn(String tenantId, String customerId, List<String> assetIds);
56 55
57   - AssetEntity findByTenantIdAndName(UUID tenantId, String name);
  56 + AssetEntity findByTenantIdAndName(String tenantId, String name);
58 57
59 58 @Query("SELECT a FROM AssetEntity a WHERE a.tenantId = :tenantId " +
60 59 "AND a.type = :type " +
61 60 "AND LOWER(a.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " +
62 61 "AND a.id > :idOffset ORDER BY a.id")
63   - List<AssetEntity> findByTenantIdAndType(@Param("tenantId") UUID tenantId,
  62 + List<AssetEntity> findByTenantIdAndType(@Param("tenantId") String tenantId,
64 63 @Param("type") String type,
65 64 @Param("textSearch") String textSearch,
66   - @Param("idOffset") UUID idOffset,
  65 + @Param("idOffset") String idOffset,
67 66 Pageable pageable);
68 67
69 68 @Query("SELECT a FROM AssetEntity a WHERE a.tenantId = :tenantId " +
70 69 "AND a.customerId = :customerId AND a.type = :type " +
71 70 "AND LOWER(a.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " +
72 71 "AND a.id > :idOffset ORDER BY a.id")
73   - List<AssetEntity> findByTenantIdAndCustomerIdAndType(@Param("tenantId") UUID tenantId,
74   - @Param("customerId") UUID customerId,
  72 + List<AssetEntity> findByTenantIdAndCustomerIdAndType(@Param("tenantId") String tenantId,
  73 + @Param("customerId") String customerId,
75 74 @Param("type") String type,
76 75 @Param("textSearch") String textSearch,
77   - @Param("idOffset") UUID idOffset,
  76 + @Param("idOffset") String idOffset,
78 77 Pageable pageable);
79 78
80 79 @Query("SELECT NEW org.thingsboard.server.common.data.asset.TenantAssetType(a.type, a.tenantId) FROM AssetEntity a GROUP BY a.tenantId, a.type")
... ...
... ... @@ -24,17 +24,19 @@ import org.thingsboard.server.common.data.asset.Asset;
24 24 import org.thingsboard.server.common.data.asset.TenantAssetType;
25 25 import org.thingsboard.server.common.data.page.TextPageLink;
26 26 import org.thingsboard.server.dao.DaoUtil;
27   -import org.thingsboard.server.dao.util.SqlDao;
28 27 import org.thingsboard.server.dao.asset.AssetDao;
29 28 import org.thingsboard.server.dao.model.sql.AssetEntity;
30 29 import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao;
  30 +import org.thingsboard.server.dao.util.SqlDao;
31 31
32 32 import java.util.List;
33 33 import java.util.Objects;
34 34 import java.util.Optional;
35 35 import java.util.UUID;
36 36
37   -import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID;
  37 +import static org.thingsboard.server.common.data.UUIDConverter.fromTimeUUID;
  38 +import static org.thingsboard.server.common.data.UUIDConverter.fromTimeUUIDs;
  39 +import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID_STR;
38 40
39 41 /**
40 42 * Created by Valerii Sosliuk on 5/19/2017.
... ... @@ -52,7 +54,7 @@ public class JpaAssetDao extends JpaAbstractSearchTextDao<AssetEntity, Asset> im
52 54 }
53 55
54 56 @Override
55   - protected CrudRepository<AssetEntity, UUID> getCrudRepository() {
  57 + protected CrudRepository<AssetEntity, String> getCrudRepository() {
56 58 return assetRepository;
57 59 }
58 60
... ... @@ -60,38 +62,38 @@ public class JpaAssetDao extends JpaAbstractSearchTextDao<AssetEntity, Asset> im
60 62 public List<Asset> findAssetsByTenantId(UUID tenantId, TextPageLink pageLink) {
61 63 return DaoUtil.convertDataList(assetRepository
62 64 .findByTenantId(
63   - tenantId,
  65 + fromTimeUUID(tenantId),
64 66 Objects.toString(pageLink.getTextSearch(), ""),
65   - pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(),
  67 + pageLink.getIdOffset() == null ? NULL_UUID_STR : fromTimeUUID(pageLink.getIdOffset()),
66 68 new PageRequest(0, pageLink.getLimit())));
67 69 }
68 70
69 71 @Override
70 72 public ListenableFuture<List<Asset>> findAssetsByTenantIdAndIdsAsync(UUID tenantId, List<UUID> assetIds) {
71 73 return service.submit(() ->
72   - DaoUtil.convertDataList(assetRepository.findByTenantIdAndIdIn(tenantId, assetIds)));
  74 + DaoUtil.convertDataList(assetRepository.findByTenantIdAndIdIn(fromTimeUUID(tenantId), fromTimeUUIDs(assetIds))));
73 75 }
74 76
75 77 @Override
76 78 public List<Asset> findAssetsByTenantIdAndCustomerId(UUID tenantId, UUID customerId, TextPageLink pageLink) {
77 79 return DaoUtil.convertDataList(assetRepository
78 80 .findByTenantIdAndCustomerId(
79   - tenantId,
80   - customerId,
  81 + fromTimeUUID(tenantId),
  82 + fromTimeUUID(customerId),
81 83 Objects.toString(pageLink.getTextSearch(), ""),
82   - pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(),
  84 + pageLink.getIdOffset() == null ? NULL_UUID_STR : fromTimeUUID(pageLink.getIdOffset()),
83 85 new PageRequest(0, pageLink.getLimit())));
84 86 }
85 87
86 88 @Override
87 89 public ListenableFuture<List<Asset>> findAssetsByTenantIdAndCustomerIdAndIdsAsync(UUID tenantId, UUID customerId, List<UUID> assetIds) {
88 90 return service.submit(() ->
89   - DaoUtil.convertDataList(assetRepository.findByTenantIdAndCustomerIdAndIdIn(tenantId, customerId, assetIds)));
  91 + DaoUtil.convertDataList(assetRepository.findByTenantIdAndCustomerIdAndIdIn(fromTimeUUID(tenantId), fromTimeUUID(customerId), fromTimeUUIDs(assetIds))));
90 92 }
91 93
92 94 @Override
93 95 public Optional<Asset> findAssetsByTenantIdAndName(UUID tenantId, String name) {
94   - Asset asset = DaoUtil.getData(assetRepository.findByTenantIdAndName(tenantId, name));
  96 + Asset asset = DaoUtil.getData(assetRepository.findByTenantIdAndName(fromTimeUUID(tenantId), name));
95 97 return Optional.ofNullable(asset);
96 98 }
97 99
... ... @@ -99,10 +101,10 @@ public class JpaAssetDao extends JpaAbstractSearchTextDao<AssetEntity, Asset> im
99 101 public List<Asset> findAssetsByTenantIdAndType(UUID tenantId, String type, TextPageLink pageLink) {
100 102 return DaoUtil.convertDataList(assetRepository
101 103 .findByTenantIdAndType(
102   - tenantId,
  104 + fromTimeUUID(tenantId),
103 105 type,
104 106 Objects.toString(pageLink.getTextSearch(), ""),
105   - pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(),
  107 + pageLink.getIdOffset() == null ? NULL_UUID_STR : fromTimeUUID(pageLink.getIdOffset()),
106 108 new PageRequest(0, pageLink.getLimit())));
107 109 }
108 110
... ... @@ -110,11 +112,11 @@ public class JpaAssetDao extends JpaAbstractSearchTextDao<AssetEntity, Asset> im
110 112 public List<Asset> findAssetsByTenantIdAndCustomerIdAndType(UUID tenantId, UUID customerId, String type, TextPageLink pageLink) {
111 113 return DaoUtil.convertDataList(assetRepository
112 114 .findByTenantIdAndCustomerIdAndType(
113   - tenantId,
114   - customerId,
  115 + fromTimeUUID(tenantId),
  116 + fromTimeUUID(customerId),
115 117 type,
116 118 Objects.toString(pageLink.getTextSearch(), ""),
117   - pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(),
  119 + pageLink.getIdOffset() == null ? NULL_UUID_STR : fromTimeUUID(pageLink.getIdOffset()),
118 120 new PageRequest(0, pageLink.getLimit())));
119 121 }
120 122
... ...
... ... @@ -17,18 +17,17 @@ package org.thingsboard.server.dao.sql.attributes;
17 17
18 18 import org.springframework.data.repository.CrudRepository;
19 19 import org.thingsboard.server.common.data.EntityType;
20   -import org.thingsboard.server.dao.util.SqlDao;
21 20 import org.thingsboard.server.dao.model.sql.AttributeKvCompositeKey;
22 21 import org.thingsboard.server.dao.model.sql.AttributeKvEntity;
  22 +import org.thingsboard.server.dao.util.SqlDao;
23 23
24 24 import java.util.List;
25   -import java.util.UUID;
26 25
27 26 @SqlDao
28 27 public interface AttributeKvRepository extends CrudRepository<AttributeKvEntity, AttributeKvCompositeKey> {
29 28
30 29 List<AttributeKvEntity> findAllByEntityTypeAndEntityIdAndAttributeType(EntityType entityType,
31   - UUID entityId,
  30 + String entityId,
32 31 String attributeType);
33 32 }
34 33
... ...
... ... @@ -20,20 +20,23 @@ import com.google.common.util.concurrent.ListenableFuture;
20 20 import lombok.extern.slf4j.Slf4j;
21 21 import org.springframework.beans.factory.annotation.Autowired;
22 22 import org.springframework.stereotype.Component;
  23 +import org.thingsboard.server.common.data.UUIDConverter;
23 24 import org.thingsboard.server.common.data.id.EntityId;
24 25 import org.thingsboard.server.common.data.kv.AttributeKvEntry;
25 26 import org.thingsboard.server.dao.DaoUtil;
26   -import org.thingsboard.server.dao.util.SqlDao;
27 27 import org.thingsboard.server.dao.attributes.AttributesDao;
28 28 import org.thingsboard.server.dao.model.sql.AttributeKvCompositeKey;
29 29 import org.thingsboard.server.dao.model.sql.AttributeKvEntity;
30 30 import org.thingsboard.server.dao.sql.JpaAbstractDaoListeningExecutorService;
  31 +import org.thingsboard.server.dao.util.SqlDao;
31 32
32 33 import java.util.Collection;
33 34 import java.util.List;
34 35 import java.util.Optional;
35 36 import java.util.stream.Collectors;
36 37
  38 +import static org.thingsboard.server.common.data.UUIDConverter.fromTimeUUID;
  39 +
37 40 @Component
38 41 @Slf4j
39 42 @SqlDao
... ... @@ -45,11 +48,7 @@ public class JpaAttributeDao extends JpaAbstractDaoListeningExecutorService impl
45 48 @Override
46 49 public ListenableFuture<Optional<AttributeKvEntry>> find(EntityId entityId, String attributeType, String attributeKey) {
47 50 AttributeKvCompositeKey compositeKey =
48   - new AttributeKvCompositeKey(
49   - entityId.getEntityType(),
50   - entityId.getId(),
51   - attributeType,
52   - attributeKey);
  51 + getAttributeKvCompositeKey(entityId, attributeType, attributeKey);
53 52 return service.submit(() ->
54 53 Optional.of(DaoUtil.getData(attributeKvRepository.findOne(compositeKey))));
55 54 }
... ... @@ -60,11 +59,7 @@ public class JpaAttributeDao extends JpaAbstractDaoListeningExecutorService impl
60 59 attributeKeys
61 60 .stream()
62 61 .map(attributeKey ->
63   - new AttributeKvCompositeKey(
64   - entityId.getEntityType(),
65   - entityId.getId(),
66   - attributeType,
67   - attributeKey))
  62 + getAttributeKvCompositeKey(entityId, attributeType, attributeKey))
68 63 .collect(Collectors.toList());
69 64 return service.submit(() ->
70 65 DaoUtil.convertDataList(Lists.newArrayList(attributeKvRepository.findAll(compositeKeys))));
... ... @@ -76,7 +71,7 @@ public class JpaAttributeDao extends JpaAbstractDaoListeningExecutorService impl
76 71 DaoUtil.convertDataList(Lists.newArrayList(
77 72 attributeKvRepository.findAllByEntityTypeAndEntityIdAndAttributeType(
78 73 entityId.getEntityType(),
79   - entityId.getId(),
  74 + UUIDConverter.fromTimeUUID(entityId.getId()),
80 75 attributeType))));
81 76 }
82 77
... ... @@ -84,7 +79,7 @@ public class JpaAttributeDao extends JpaAbstractDaoListeningExecutorService impl
84 79 public ListenableFuture<Void> save(EntityId entityId, String attributeType, AttributeKvEntry attribute) {
85 80 AttributeKvEntity entity = new AttributeKvEntity();
86 81 entity.setEntityType(entityId.getEntityType());
87   - entity.setEntityId(entityId.getId());
  82 + entity.setEntityId(fromTimeUUID(entityId.getId()));
88 83 entity.setAttributeType(attributeType);
89 84 entity.setAttributeKey(attribute.getKey());
90 85 entity.setLastUpdateTs(attribute.getLastUpdateTs());
... ... @@ -105,7 +100,7 @@ public class JpaAttributeDao extends JpaAbstractDaoListeningExecutorService impl
105 100 .map(key -> {
106 101 AttributeKvEntity entityToDelete = new AttributeKvEntity();
107 102 entityToDelete.setEntityType(entityId.getEntityType());
108   - entityToDelete.setEntityId(entityId.getId());
  103 + entityToDelete.setEntityId(fromTimeUUID(entityId.getId()));
109 104 entityToDelete.setAttributeType(attributeType);
110 105 entityToDelete.setAttributeKey(key);
111 106 return entityToDelete;
... ... @@ -116,4 +111,12 @@ public class JpaAttributeDao extends JpaAbstractDaoListeningExecutorService impl
116 111 return null;
117 112 });
118 113 }
  114 +
  115 + private AttributeKvCompositeKey getAttributeKvCompositeKey(EntityId entityId, String attributeType, String attributeKey) {
  116 + return new AttributeKvCompositeKey(
  117 + entityId.getEntityType(),
  118 + fromTimeUUID(entityId.getId()),
  119 + attributeType,
  120 + attributeKey);
  121 + }
119 122 }
... ...
... ... @@ -21,8 +21,8 @@ import org.springframework.data.repository.CrudRepository;
21 21 import org.springframework.data.repository.query.Param;
22 22 import org.thingsboard.server.common.data.plugin.ComponentScope;
23 23 import org.thingsboard.server.common.data.plugin.ComponentType;
24   -import org.thingsboard.server.dao.util.SqlDao;
25 24 import org.thingsboard.server.dao.model.sql.ComponentDescriptorEntity;
  25 +import org.thingsboard.server.dao.util.SqlDao;
26 26
27 27 import java.util.List;
28 28 import java.util.UUID;
... ... @@ -31,7 +31,7 @@ import java.util.UUID;
31 31 * Created by Valerii Sosliuk on 5/6/2017.
32 32 */
33 33 @SqlDao
34   -public interface ComponentDescriptorRepository extends CrudRepository<ComponentDescriptorEntity, UUID> {
  34 +public interface ComponentDescriptorRepository extends CrudRepository<ComponentDescriptorEntity, String> {
35 35
36 36 ComponentDescriptorEntity findByClazz(String clazz);
37 37
... ... @@ -40,7 +40,7 @@ public interface ComponentDescriptorRepository extends CrudRepository<ComponentD
40 40 "AND cd.id > :idOffset ORDER BY cd.id")
41 41 List<ComponentDescriptorEntity> findByType(@Param("type") ComponentType type,
42 42 @Param("textSearch") String textSearch,
43   - @Param("idOffset") UUID idOffset,
  43 + @Param("idOffset") String idOffset,
44 44 Pageable pageable);
45 45
46 46 @Query("SELECT cd FROM ComponentDescriptorEntity cd WHERE cd.type = :type " +
... ... @@ -49,7 +49,7 @@ public interface ComponentDescriptorRepository extends CrudRepository<ComponentD
49 49 List<ComponentDescriptorEntity> findByScopeAndType(@Param("type") ComponentType type,
50 50 @Param("scope") ComponentScope scope,
51 51 @Param("textSearch") String textSearch,
52   - @Param("idOffset") UUID idOffset,
  52 + @Param("idOffset") String idOffset,
53 53 Pageable pageable);
54 54
55 55 void deleteByClazz(String clazz);
... ...
... ... @@ -20,23 +20,23 @@ import org.springframework.beans.factory.annotation.Autowired;
20 20 import org.springframework.data.domain.PageRequest;
21 21 import org.springframework.data.repository.CrudRepository;
22 22 import org.springframework.stereotype.Component;
  23 +import org.thingsboard.server.common.data.UUIDConverter;
23 24 import org.thingsboard.server.common.data.id.ComponentDescriptorId;
24 25 import org.thingsboard.server.common.data.page.TextPageLink;
25 26 import org.thingsboard.server.common.data.plugin.ComponentDescriptor;
26 27 import org.thingsboard.server.common.data.plugin.ComponentScope;
27 28 import org.thingsboard.server.common.data.plugin.ComponentType;
28 29 import org.thingsboard.server.dao.DaoUtil;
29   -import org.thingsboard.server.dao.util.SqlDao;
30 30 import org.thingsboard.server.dao.component.ComponentDescriptorDao;
31 31 import org.thingsboard.server.dao.model.sql.ComponentDescriptorEntity;
32 32 import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao;
  33 +import org.thingsboard.server.dao.util.SqlDao;
33 34
34 35 import java.util.List;
35 36 import java.util.Objects;
36 37 import java.util.Optional;
37   -import java.util.UUID;
38 38
39   -import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID;
  39 +import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID_STR;
40 40
41 41 /**
42 42 * Created by Valerii Sosliuk on 5/6/2017.
... ... @@ -55,7 +55,7 @@ public class JpaBaseComponentDescriptorDao extends JpaAbstractSearchTextDao<Comp
55 55 }
56 56
57 57 @Override
58   - protected CrudRepository<ComponentDescriptorEntity, UUID> getCrudRepository() {
  58 + protected CrudRepository<ComponentDescriptorEntity, String> getCrudRepository() {
59 59 return componentDescriptorRepository;
60 60 }
61 61
... ... @@ -64,8 +64,7 @@ public class JpaBaseComponentDescriptorDao extends JpaAbstractSearchTextDao<Comp
64 64 if (component.getId() == null) {
65 65 component.setId(new ComponentDescriptorId(UUIDs.timeBased()));
66 66 }
67   - boolean exists = componentDescriptorRepository.findOne(component.getId().getId()) != null;
68   - if (!exists) {
  67 + if (componentDescriptorRepository.findOne(UUIDConverter.fromTimeUUID(component.getId().getId())) == null) {
69 68 return Optional.of(save(component));
70 69 }
71 70 return Optional.empty();
... ... @@ -87,7 +86,7 @@ public class JpaBaseComponentDescriptorDao extends JpaAbstractSearchTextDao<Comp
87 86 .findByType(
88 87 type,
89 88 Objects.toString(pageLink.getTextSearch(), ""),
90   - pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(),
  89 + pageLink.getIdOffset() == null ? NULL_UUID_STR : UUIDConverter.fromTimeUUID(pageLink.getIdOffset()),
91 90 new PageRequest(0, pageLink.getLimit())));
92 91 }
93 92
... ... @@ -98,7 +97,7 @@ public class JpaBaseComponentDescriptorDao extends JpaAbstractSearchTextDao<Comp
98 97 type,
99 98 scope,
100 99 Objects.toString(pageLink.getTextSearch(), ""),
101   - pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(),
  100 + pageLink.getIdOffset() == null ? NULL_UUID_STR : UUIDConverter.fromTimeUUID(pageLink.getIdOffset()),
102 101 new PageRequest(0, pageLink.getLimit())));
103 102 }
104 103
... ...
... ... @@ -19,26 +19,25 @@ import org.springframework.data.domain.Pageable;
19 19 import org.springframework.data.jpa.repository.Query;
20 20 import org.springframework.data.repository.CrudRepository;
21 21 import org.springframework.data.repository.query.Param;
22   -import org.thingsboard.server.dao.util.SqlDao;
23 22 import org.thingsboard.server.dao.model.sql.CustomerEntity;
  23 +import org.thingsboard.server.dao.util.SqlDao;
24 24
25 25 import java.util.List;
26   -import java.util.UUID;
27 26
28 27 /**
29 28 * Created by Valerii Sosliuk on 5/6/2017.
30 29 */
31 30 @SqlDao
32   -public interface CustomerRepository extends CrudRepository<CustomerEntity, UUID> {
  31 +public interface CustomerRepository extends CrudRepository<CustomerEntity, String> {
33 32
34 33 @Query("SELECT c FROM CustomerEntity c WHERE c.tenantId = :tenantId " +
35 34 "AND LOWER(c.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " +
36 35 "AND c.id > :idOffset ORDER BY c.id")
37   - List<CustomerEntity> findByTenantId(@Param("tenantId") UUID tenantId,
  36 + List<CustomerEntity> findByTenantId(@Param("tenantId") String tenantId,
38 37 @Param("textSearch") String textSearch,
39   - @Param("idOffset") UUID idOffset,
  38 + @Param("idOffset") String idOffset,
40 39 Pageable pageable);
41 40
42   - CustomerEntity findByTenantIdAndTitle(UUID tenantId, String title);
  41 + CustomerEntity findByTenantIdAndTitle(String tenantId, String title);
43 42
44 43 }
... ...
... ... @@ -20,19 +20,20 @@ import org.springframework.data.domain.PageRequest;
20 20 import org.springframework.data.repository.CrudRepository;
21 21 import org.springframework.stereotype.Component;
22 22 import org.thingsboard.server.common.data.Customer;
  23 +import org.thingsboard.server.common.data.UUIDConverter;
23 24 import org.thingsboard.server.common.data.page.TextPageLink;
24 25 import org.thingsboard.server.dao.DaoUtil;
25   -import org.thingsboard.server.dao.util.SqlDao;
26 26 import org.thingsboard.server.dao.customer.CustomerDao;
27 27 import org.thingsboard.server.dao.model.sql.CustomerEntity;
28 28 import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao;
  29 +import org.thingsboard.server.dao.util.SqlDao;
29 30
30 31 import java.util.List;
31 32 import java.util.Objects;
32 33 import java.util.Optional;
33 34 import java.util.UUID;
34 35
35   -import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID;
  36 +import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID_STR;
36 37
37 38 /**
38 39 * Created by Valerii Sosliuk on 5/6/2017.
... ... @@ -50,22 +51,22 @@ public class JpaCustomerDao extends JpaAbstractSearchTextDao<CustomerEntity, Cus
50 51 }
51 52
52 53 @Override
53   - protected CrudRepository<CustomerEntity, UUID> getCrudRepository() {
  54 + protected CrudRepository<CustomerEntity, String> getCrudRepository() {
54 55 return customerRepository;
55 56 }
56 57
57 58 @Override
58 59 public List<Customer> findCustomersByTenantId(UUID tenantId, TextPageLink pageLink) {
59 60 return DaoUtil.convertDataList(customerRepository.findByTenantId(
60   - tenantId,
  61 + UUIDConverter.fromTimeUUID(tenantId),
61 62 Objects.toString(pageLink.getTextSearch(), ""),
62   - pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(),
  63 + pageLink.getIdOffset() == null ? NULL_UUID_STR : UUIDConverter.fromTimeUUID(pageLink.getIdOffset()),
63 64 new PageRequest(0, pageLink.getLimit())));
64 65 }
65 66
66 67 @Override
67 68 public Optional<Customer> findCustomersByTenantIdAndTitle(UUID tenantId, String title) {
68   - Customer customer = DaoUtil.getData(customerRepository.findByTenantIdAndTitle(tenantId, title));
  69 + Customer customer = DaoUtil.getData(customerRepository.findByTenantIdAndTitle(UUIDConverter.fromTimeUUID(tenantId), title));
69 70 return Optional.ofNullable(customer);
70 71 }
71 72 }
... ...
... ... @@ -19,8 +19,8 @@ import org.springframework.data.domain.Pageable;
19 19 import org.springframework.data.jpa.repository.Query;
20 20 import org.springframework.data.repository.CrudRepository;
21 21 import org.springframework.data.repository.query.Param;
22   -import org.thingsboard.server.dao.util.SqlDao;
23 22 import org.thingsboard.server.dao.model.sql.DashboardInfoEntity;
  23 +import org.thingsboard.server.dao.util.SqlDao;
24 24
25 25 import java.util.List;
26 26 import java.util.UUID;
... ... @@ -29,22 +29,22 @@ import java.util.UUID;
29 29 * Created by Valerii Sosliuk on 5/6/2017.
30 30 */
31 31 @SqlDao
32   -public interface DashboardInfoRepository extends CrudRepository<DashboardInfoEntity, UUID> {
  32 +public interface DashboardInfoRepository extends CrudRepository<DashboardInfoEntity, String> {
33 33
34 34 @Query("SELECT di FROM DashboardInfoEntity di WHERE di.tenantId = :tenantId " +
35 35 "AND LOWER(di.searchText) LIKE LOWER(CONCAT(:searchText, '%')) " +
36 36 "AND di.id > :idOffset ORDER BY di.id")
37   - List<DashboardInfoEntity> findByTenantId(@Param("tenantId") UUID tenantId,
  37 + List<DashboardInfoEntity> findByTenantId(@Param("tenantId") String tenantId,
38 38 @Param("searchText") String searchText,
39   - @Param("idOffset") UUID idOffset,
  39 + @Param("idOffset") String idOffset,
40 40 Pageable pageable);
41 41
42 42 @Query("SELECT di FROM DashboardInfoEntity di WHERE di.tenantId = :tenantId " +
43 43 "AND di.customerId = :customerId AND LOWER(di.searchText) LIKE LOWER(CONCAT(:searchText, '%')) " +
44 44 "AND di.id > :idOffset ORDER BY di.id")
45   - List<DashboardInfoEntity> findByTenantIdAndCustomerId(@Param("tenantId") UUID tenantId,
46   - @Param("customerId") UUID customerId,
  45 + List<DashboardInfoEntity> findByTenantIdAndCustomerId(@Param("tenantId") String tenantId,
  46 + @Param("customerId") String customerId,
47 47 @Param("searchText") String searchText,
48   - @Param("idOffset") UUID idOffset,
  48 + @Param("idOffset") String idOffset,
49 49 Pageable pageable);
50 50 }
... ...
... ... @@ -16,14 +16,12 @@
16 16 package org.thingsboard.server.dao.sql.dashboard;
17 17
18 18 import org.springframework.data.repository.CrudRepository;
19   -import org.thingsboard.server.dao.util.SqlDao;
20 19 import org.thingsboard.server.dao.model.sql.DashboardEntity;
21   -
22   -import java.util.UUID;
  20 +import org.thingsboard.server.dao.util.SqlDao;
23 21
24 22 /**
25 23 * Created by Valerii Sosliuk on 5/6/2017.
26 24 */
27 25 @SqlDao
28   -public interface DashboardRepository extends CrudRepository<DashboardEntity, UUID> {
  26 +public interface DashboardRepository extends CrudRepository<DashboardEntity, String> {
29 27 }
... ...
... ... @@ -19,12 +19,10 @@ import org.springframework.beans.factory.annotation.Autowired;
19 19 import org.springframework.data.repository.CrudRepository;
20 20 import org.springframework.stereotype.Component;
21 21 import org.thingsboard.server.common.data.Dashboard;
22   -import org.thingsboard.server.dao.util.SqlDao;
23 22 import org.thingsboard.server.dao.dashboard.DashboardDao;
24 23 import org.thingsboard.server.dao.model.sql.DashboardEntity;
25 24 import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao;
26   -
27   -import java.util.UUID;
  25 +import org.thingsboard.server.dao.util.SqlDao;
28 26
29 27 /**
30 28 * Created by Valerii Sosliuk on 5/6/2017.
... ... @@ -42,7 +40,7 @@ public class JpaDashboardDao extends JpaAbstractSearchTextDao<DashboardEntity, D
42 40 }
43 41
44 42 @Override
45   - protected CrudRepository<DashboardEntity, UUID> getCrudRepository() {
  43 + protected CrudRepository<DashboardEntity, String> getCrudRepository() {
46 44 return dashboardRepository;
47 45 }
48 46 }
... ...
... ... @@ -20,18 +20,19 @@ import org.springframework.data.domain.PageRequest;
20 20 import org.springframework.data.repository.CrudRepository;
21 21 import org.springframework.stereotype.Component;
22 22 import org.thingsboard.server.common.data.DashboardInfo;
  23 +import org.thingsboard.server.common.data.UUIDConverter;
23 24 import org.thingsboard.server.common.data.page.TextPageLink;
24 25 import org.thingsboard.server.dao.DaoUtil;
25   -import org.thingsboard.server.dao.util.SqlDao;
26 26 import org.thingsboard.server.dao.dashboard.DashboardInfoDao;
27 27 import org.thingsboard.server.dao.model.sql.DashboardInfoEntity;
28 28 import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao;
  29 +import org.thingsboard.server.dao.util.SqlDao;
29 30
30 31 import java.util.List;
31 32 import java.util.Objects;
32 33 import java.util.UUID;
33 34
34   -import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID;
  35 +import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID_STR;
35 36
36 37 /**
37 38 * Created by Valerii Sosliuk on 5/6/2017.
... ... @@ -57,9 +58,9 @@ public class JpaDashboardInfoDao extends JpaAbstractSearchTextDao<DashboardInfoE
57 58 public List<DashboardInfo> findDashboardsByTenantId(UUID tenantId, TextPageLink pageLink) {
58 59 return DaoUtil.convertDataList(dashboardInfoRepository
59 60 .findByTenantId(
60   - tenantId,
  61 + UUIDConverter.fromTimeUUID(tenantId),
61 62 Objects.toString(pageLink.getTextSearch(), ""),
62   - pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(),
  63 + pageLink.getIdOffset() == null ? NULL_UUID_STR : UUIDConverter.fromTimeUUID(pageLink.getIdOffset()),
63 64 new PageRequest(0, pageLink.getLimit())));
64 65 }
65 66
... ... @@ -67,10 +68,10 @@ public class JpaDashboardInfoDao extends JpaAbstractSearchTextDao<DashboardInfoE
67 68 public List<DashboardInfo> findDashboardsByTenantIdAndCustomerId(UUID tenantId, UUID customerId, TextPageLink pageLink) {
68 69 return DaoUtil.convertDataList(dashboardInfoRepository
69 70 .findByTenantIdAndCustomerId(
70   - tenantId,
71   - customerId,
  71 + UUIDConverter.fromTimeUUID(tenantId),
  72 + UUIDConverter.fromTimeUUID(customerId),
72 73 Objects.toString(pageLink.getTextSearch(), ""),
73   - pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(),
  74 + pageLink.getIdOffset() == null ? NULL_UUID_STR : UUIDConverter.fromTimeUUID(pageLink.getIdOffset()),
74 75 new PageRequest(0, pageLink.getLimit())));
75 76 }
76 77 }
... ...
... ... @@ -16,18 +16,16 @@
16 16 package org.thingsboard.server.dao.sql.device;
17 17
18 18 import org.springframework.data.repository.CrudRepository;
19   -import org.thingsboard.server.dao.util.SqlDao;
20 19 import org.thingsboard.server.dao.model.sql.DeviceCredentialsEntity;
21   -
22   -import java.util.UUID;
  20 +import org.thingsboard.server.dao.util.SqlDao;
23 21
24 22 /**
25 23 * Created by Valerii Sosliuk on 5/6/2017.
26 24 */
27 25 @SqlDao
28   -public interface DeviceCredentialsRepository extends CrudRepository<DeviceCredentialsEntity, UUID> {
  26 +public interface DeviceCredentialsRepository extends CrudRepository<DeviceCredentialsEntity, String> {
29 27
30   - DeviceCredentialsEntity findByDeviceId(UUID deviceId);
  28 + DeviceCredentialsEntity findByDeviceId(String deviceId);
31 29
32 30 DeviceCredentialsEntity findByCredentialsId(String credentialsId);
33 31 }
... ...
... ... @@ -19,46 +19,45 @@ import org.springframework.data.domain.Pageable;
19 19 import org.springframework.data.jpa.repository.Query;
20 20 import org.springframework.data.repository.CrudRepository;
21 21 import org.springframework.data.repository.query.Param;
22   -import org.thingsboard.server.dao.util.SqlDao;
23 22 import org.thingsboard.server.dao.model.sql.DeviceEntity;
24 23 import org.thingsboard.server.dao.model.sql.TenantDeviceTypeEntity;
  24 +import org.thingsboard.server.dao.util.SqlDao;
25 25
26 26 import java.util.List;
27   -import java.util.UUID;
28 27
29 28 /**
30 29 * Created by Valerii Sosliuk on 5/6/2017.
31 30 */
32 31 @SqlDao
33   -public interface DeviceRepository extends CrudRepository<DeviceEntity, UUID> {
  32 +public interface DeviceRepository extends CrudRepository<DeviceEntity, String> {
34 33
35 34
36 35 @Query("SELECT d FROM DeviceEntity d WHERE d.tenantId = :tenantId " +
37 36 "AND d.customerId = :customerId " +
38 37 "AND LOWER(d.searchText) LIKE LOWER(CONCAT(:searchText, '%')) " +
39 38 "AND d.id > :idOffset ORDER BY d.id")
40   - List<DeviceEntity> findByTenantIdAndCustomerId(@Param("tenantId") UUID tenantId,
41   - @Param("customerId") UUID customerId,
  39 + List<DeviceEntity> findByTenantIdAndCustomerId(@Param("tenantId") String tenantId,
  40 + @Param("customerId") String customerId,
42 41 @Param("searchText") String searchText,
43   - @Param("idOffset") UUID idOffset,
  42 + @Param("idOffset") String idOffset,
44 43 Pageable pageable);
45 44
46 45 @Query("SELECT d FROM DeviceEntity d WHERE d.tenantId = :tenantId " +
47 46 "AND LOWER(d.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " +
48 47 "AND d.id > :idOffset ORDER BY d.id")
49   - List<DeviceEntity> findByTenantId(@Param("tenantId") UUID tenantId,
  48 + List<DeviceEntity> findByTenantId(@Param("tenantId") String tenantId,
50 49 @Param("textSearch") String textSearch,
51   - @Param("idOffset") UUID idOffset,
  50 + @Param("idOffset") String idOffset,
52 51 Pageable pageable);
53 52
54 53 @Query("SELECT d FROM DeviceEntity d WHERE d.tenantId = :tenantId " +
55 54 "AND d.type = :type " +
56 55 "AND LOWER(d.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " +
57 56 "AND d.id > :idOffset ORDER BY d.id")
58   - List<DeviceEntity> findByTenantIdAndType(@Param("tenantId") UUID tenantId,
  57 + List<DeviceEntity> findByTenantIdAndType(@Param("tenantId") String tenantId,
59 58 @Param("type") String type,
60 59 @Param("textSearch") String textSearch,
61   - @Param("idOffset") UUID idOffset,
  60 + @Param("idOffset") String idOffset,
62 61 Pageable pageable);
63 62
64 63 @Query("SELECT d FROM DeviceEntity d WHERE d.tenantId = :tenantId " +
... ... @@ -66,19 +65,19 @@ public interface DeviceRepository extends CrudRepository<DeviceEntity, UUID> {
66 65 "AND d.type = :type " +
67 66 "AND LOWER(d.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " +
68 67 "AND d.id > :idOffset ORDER BY d.id")
69   - List<DeviceEntity> findByTenantIdAndCustomerIdAndType(@Param("tenantId") UUID tenantId,
70   - @Param("customerId") UUID customerId,
  68 + List<DeviceEntity> findByTenantIdAndCustomerIdAndType(@Param("tenantId") String tenantId,
  69 + @Param("customerId") String customerId,
71 70 @Param("type") String type,
72 71 @Param("textSearch") String textSearch,
73   - @Param("idOffset") UUID idOffset,
  72 + @Param("idOffset") String idOffset,
74 73 Pageable pageable);
75 74
76 75 @Query("SELECT DISTINCT NEW org.thingsboard.server.dao.model.sql.TenantDeviceTypeEntity(d.tenantId, d.type) FROM DeviceEntity d")
77 76 List<TenantDeviceTypeEntity> findTenantDeviceTypes();
78 77
79   - DeviceEntity findByTenantIdAndName(UUID tenantId, String name);
  78 + DeviceEntity findByTenantIdAndName(String tenantId, String name);
80 79
81   - List<DeviceEntity> findDevicesByTenantIdAndCustomerIdAndIdIn(UUID tenantId, UUID customerId, List<UUID> deviceIds);
  80 + List<DeviceEntity> findDevicesByTenantIdAndCustomerIdAndIdIn(String tenantId, String customerId, List<String> deviceIds);
82 81
83   - List<DeviceEntity> findDevicesByTenantIdAndIdIn(UUID tenantId, List<UUID> deviceIds);
  82 + List<DeviceEntity> findDevicesByTenantIdAndIdIn(String tenantId, List<String> deviceIds);
84 83 }
... ...
... ... @@ -18,12 +18,13 @@ package org.thingsboard.server.dao.sql.device;
18 18 import org.springframework.beans.factory.annotation.Autowired;
19 19 import org.springframework.data.repository.CrudRepository;
20 20 import org.springframework.stereotype.Component;
  21 +import org.thingsboard.server.common.data.UUIDConverter;
21 22 import org.thingsboard.server.common.data.security.DeviceCredentials;
22 23 import org.thingsboard.server.dao.DaoUtil;
23   -import org.thingsboard.server.dao.util.SqlDao;
24 24 import org.thingsboard.server.dao.device.DeviceCredentialsDao;
25 25 import org.thingsboard.server.dao.model.sql.DeviceCredentialsEntity;
26 26 import org.thingsboard.server.dao.sql.JpaAbstractDao;
  27 +import org.thingsboard.server.dao.util.SqlDao;
27 28
28 29 import java.util.UUID;
29 30
... ... @@ -43,13 +44,13 @@ public class JpaDeviceCredentialsDao extends JpaAbstractDao<DeviceCredentialsEnt
43 44 }
44 45
45 46 @Override
46   - protected CrudRepository<DeviceCredentialsEntity, UUID> getCrudRepository() {
  47 + protected CrudRepository<DeviceCredentialsEntity, String> getCrudRepository() {
47 48 return deviceCredentialsRepository;
48 49 }
49 50
50 51 @Override
51 52 public DeviceCredentials findByDeviceId(UUID deviceId) {
52   - return DaoUtil.getData(deviceCredentialsRepository.findByDeviceId(deviceId));
  53 + return DaoUtil.getData(deviceCredentialsRepository.findByDeviceId(UUIDConverter.fromTimeUUID(deviceId)));
53 54 }
54 55
55 56 @Override
... ...
... ... @@ -22,18 +22,21 @@ import org.springframework.data.repository.CrudRepository;
22 22 import org.springframework.stereotype.Component;
23 23 import org.thingsboard.server.common.data.Device;
24 24 import org.thingsboard.server.common.data.TenantDeviceType;
  25 +import org.thingsboard.server.common.data.UUIDConverter;
25 26 import org.thingsboard.server.common.data.id.TenantId;
26 27 import org.thingsboard.server.common.data.page.TextPageLink;
27 28 import org.thingsboard.server.dao.DaoUtil;
28   -import org.thingsboard.server.dao.util.SqlDao;
29 29 import org.thingsboard.server.dao.device.DeviceDao;
30 30 import org.thingsboard.server.dao.model.sql.DeviceEntity;
31 31 import org.thingsboard.server.dao.model.sql.TenantDeviceTypeEntity;
32 32 import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao;
  33 +import org.thingsboard.server.dao.util.SqlDao;
33 34
34 35 import java.util.*;
35 36
36   -import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID;
  37 +import static org.thingsboard.server.common.data.UUIDConverter.fromTimeUUID;
  38 +import static org.thingsboard.server.common.data.UUIDConverter.fromTimeUUIDs;
  39 +import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID_STR;
37 40
38 41 /**
39 42 * Created by Valerii Sosliuk on 5/6/2017.
... ... @@ -51,7 +54,7 @@ public class JpaDeviceDao extends JpaAbstractSearchTextDao<DeviceEntity, Device>
51 54 }
52 55
53 56 @Override
54   - protected CrudRepository<DeviceEntity, UUID> getCrudRepository() {
  57 + protected CrudRepository<DeviceEntity, String> getCrudRepository() {
55 58 return deviceRepository;
56 59 }
57 60
... ... @@ -59,37 +62,37 @@ public class JpaDeviceDao extends JpaAbstractSearchTextDao<DeviceEntity, Device>
59 62 public List<Device> findDevicesByTenantId(UUID tenantId, TextPageLink pageLink) {
60 63 return DaoUtil.convertDataList(
61 64 deviceRepository.findByTenantId(
62   - tenantId,
  65 + fromTimeUUID(tenantId),
63 66 Objects.toString(pageLink.getTextSearch(), ""),
64   - pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(),
  67 + pageLink.getIdOffset() == null ? NULL_UUID_STR : fromTimeUUID(pageLink.getIdOffset()),
65 68 new PageRequest(0, pageLink.getLimit())));
66 69 }
67 70
68 71 @Override
69 72 public ListenableFuture<List<Device>> findDevicesByTenantIdAndIdsAsync(UUID tenantId, List<UUID> deviceIds) {
70   - return service.submit(() -> DaoUtil.convertDataList(deviceRepository.findDevicesByTenantIdAndIdIn(tenantId, deviceIds)));
  73 + return service.submit(() -> DaoUtil.convertDataList(deviceRepository.findDevicesByTenantIdAndIdIn(UUIDConverter.fromTimeUUID(tenantId), fromTimeUUIDs(deviceIds))));
71 74 }
72 75
73 76 @Override
74 77 public List<Device> findDevicesByTenantIdAndCustomerId(UUID tenantId, UUID customerId, TextPageLink pageLink) {
75 78 return DaoUtil.convertDataList(
76 79 deviceRepository.findByTenantIdAndCustomerId(
77   - tenantId,
78   - customerId,
  80 + fromTimeUUID(tenantId),
  81 + fromTimeUUID(customerId),
79 82 Objects.toString(pageLink.getTextSearch(), ""),
80   - pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(),
  83 + pageLink.getIdOffset() == null ? NULL_UUID_STR : fromTimeUUID(pageLink.getIdOffset()),
81 84 new PageRequest(0, pageLink.getLimit())));
82 85 }
83 86
84 87 @Override
85 88 public ListenableFuture<List<Device>> findDevicesByTenantIdCustomerIdAndIdsAsync(UUID tenantId, UUID customerId, List<UUID> deviceIds) {
86 89 return service.submit(() -> DaoUtil.convertDataList(
87   - deviceRepository.findDevicesByTenantIdAndCustomerIdAndIdIn(tenantId, customerId, deviceIds)));
  90 + deviceRepository.findDevicesByTenantIdAndCustomerIdAndIdIn(fromTimeUUID(tenantId), fromTimeUUID(customerId), fromTimeUUIDs(deviceIds))));
88 91 }
89 92
90 93 @Override
91 94 public Optional<Device> findDeviceByTenantIdAndName(UUID tenantId, String name) {
92   - Device device = DaoUtil.getData(deviceRepository.findByTenantIdAndName(tenantId, name));
  95 + Device device = DaoUtil.getData(deviceRepository.findByTenantIdAndName(fromTimeUUID(tenantId), name));
93 96 return Optional.ofNullable(device);
94 97 }
95 98
... ... @@ -97,10 +100,10 @@ public class JpaDeviceDao extends JpaAbstractSearchTextDao<DeviceEntity, Device>
97 100 public List<Device> findDevicesByTenantIdAndType(UUID tenantId, String type, TextPageLink pageLink) {
98 101 return DaoUtil.convertDataList(
99 102 deviceRepository.findByTenantIdAndType(
100   - tenantId,
  103 + fromTimeUUID(tenantId),
101 104 type,
102 105 Objects.toString(pageLink.getTextSearch(), ""),
103   - pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(),
  106 + pageLink.getIdOffset() == null ? NULL_UUID_STR : fromTimeUUID(pageLink.getIdOffset()),
104 107 new PageRequest(0, pageLink.getLimit())));
105 108 }
106 109
... ... @@ -108,11 +111,11 @@ public class JpaDeviceDao extends JpaAbstractSearchTextDao<DeviceEntity, Device>
108 111 public List<Device> findDevicesByTenantIdAndCustomerIdAndType(UUID tenantId, UUID customerId, String type, TextPageLink pageLink) {
109 112 return DaoUtil.convertDataList(
110 113 deviceRepository.findByTenantIdAndCustomerIdAndType(
111   - tenantId,
112   - customerId,
  114 + fromTimeUUID(tenantId),
  115 + fromTimeUUID(customerId),
113 116 type,
114 117 Objects.toString(pageLink.getTextSearch(), ""),
115   - pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(),
  118 + pageLink.getIdOffset() == null ? NULL_UUID_STR : fromTimeUUID(pageLink.getIdOffset()),
116 119 new PageRequest(0, pageLink.getLimit())));
117 120 }
118 121
... ... @@ -126,7 +129,7 @@ public class JpaDeviceDao extends JpaAbstractSearchTextDao<DeviceEntity, Device>
126 129 if (entities != null && !entities.isEmpty()) {
127 130 list = new ArrayList<>();
128 131 for (TenantDeviceTypeEntity entity : entities) {
129   - list.add(new TenantDeviceType(entity.getType(), new TenantId(entity.getTenantId())));
  132 + list.add(new TenantDeviceType(entity.getType(), new TenantId(UUIDConverter.fromString(entity.getTenantId()))));
130 133 }
131 134 }
132 135 return list;
... ...
... ... @@ -21,21 +21,19 @@ import org.thingsboard.server.common.data.EntityType;
21 21 import org.thingsboard.server.dao.model.sql.EventEntity;
22 22 import org.thingsboard.server.dao.util.SqlDao;
23 23
24   -import java.util.UUID;
25   -
26 24 /**
27 25 * Created by Valerii Sosliuk on 5/3/2017.
28 26 */
29 27 @SqlDao
30   -public interface EventRepository extends CrudRepository<EventEntity, UUID>, JpaSpecificationExecutor<EventEntity> {
  28 +public interface EventRepository extends CrudRepository<EventEntity, String>, JpaSpecificationExecutor<EventEntity> {
31 29
32   - EventEntity findByTenantIdAndEntityTypeAndEntityIdAndEventTypeAndEventUid(UUID tenantId,
  30 + EventEntity findByTenantIdAndEntityTypeAndEntityIdAndEventTypeAndEventUid(String tenantId,
33 31 EntityType entityType,
34   - UUID entityId,
  32 + String entityId,
35 33 String eventType,
36 34 String eventUid);
37 35
38   - EventEntity findByTenantIdAndEntityTypeAndEntityId(UUID tenantId,
  36 + EventEntity findByTenantIdAndEntityTypeAndEntityId(String tenantId,
39 37 EntityType entityType,
40   - UUID entityId);
  38 + String entityId);
41 39 }
... ...
... ... @@ -26,14 +26,15 @@ import org.springframework.data.jpa.domain.Specification;
26 26 import org.springframework.data.repository.CrudRepository;
27 27 import org.springframework.stereotype.Component;
28 28 import org.thingsboard.server.common.data.Event;
  29 +import org.thingsboard.server.common.data.UUIDConverter;
29 30 import org.thingsboard.server.common.data.id.EntityId;
30 31 import org.thingsboard.server.common.data.id.EventId;
31 32 import org.thingsboard.server.common.data.page.TimePageLink;
32 33 import org.thingsboard.server.dao.DaoUtil;
33   -import org.thingsboard.server.dao.util.SqlDao;
34 34 import org.thingsboard.server.dao.event.EventDao;
35 35 import org.thingsboard.server.dao.model.sql.EventEntity;
36 36 import org.thingsboard.server.dao.sql.JpaAbstractSearchTimeDao;
  37 +import org.thingsboard.server.dao.util.SqlDao;
37 38
38 39 import javax.persistence.criteria.CriteriaBuilder;
39 40 import javax.persistence.criteria.CriteriaQuery;
... ... @@ -67,7 +68,7 @@ public class JpaBaseEventDao extends JpaAbstractSearchTimeDao<EventEntity, Event
67 68 }
68 69
69 70 @Override
70   - protected CrudRepository<EventEntity, UUID> getCrudRepository() {
  71 + protected CrudRepository<EventEntity, String> getCrudRepository() {
71 72 return eventRepository;
72 73 }
73 74
... ... @@ -91,7 +92,7 @@ public class JpaBaseEventDao extends JpaAbstractSearchTimeDao<EventEntity, Event
91 92 @Override
92 93 public Event findEvent(UUID tenantId, EntityId entityId, String eventType, String eventUid) {
93 94 return DaoUtil.getData(eventRepository.findByTenantIdAndEntityTypeAndEntityIdAndEventTypeAndEventUid(
94   - tenantId, entityId.getEntityType(), entityId.getId(), eventType, eventUid));
  95 + UUIDConverter.fromTimeUUID(tenantId), entityId.getEntityType(), UUIDConverter.fromTimeUUID(entityId.getId()), eventType, eventUid));
95 96 }
96 97
97 98 @Override
... ... @@ -112,7 +113,7 @@ public class JpaBaseEventDao extends JpaAbstractSearchTimeDao<EventEntity, Event
112 113 log.debug("Save event [{}] ", entity);
113 114 if (entity.getTenantId() == null) {
114 115 log.trace("Save system event with predefined id {}", systemTenantId);
115   - entity.setTenantId(systemTenantId);
  116 + entity.setTenantId(UUIDConverter.fromTimeUUID(systemTenantId));
116 117 }
117 118 if (entity.getId() == null) {
118 119 entity.setId(UUIDs.timeBased());
... ... @@ -133,13 +134,13 @@ public class JpaBaseEventDao extends JpaAbstractSearchTimeDao<EventEntity, Event
133 134 public Predicate toPredicate(Root<EventEntity> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
134 135 List<Predicate> predicates = new ArrayList<Predicate>();
135 136 if (tenantId != null) {
136   - Predicate tenantIdPredicate = criteriaBuilder.equal(root.get("tenantId"), tenantId);
  137 + Predicate tenantIdPredicate = criteriaBuilder.equal(root.get("tenantId"), UUIDConverter.fromTimeUUID(tenantId));
137 138 predicates.add(tenantIdPredicate);
138 139 }
139 140 if (entityId != null) {
140 141 Predicate entityTypePredicate = criteriaBuilder.equal(root.get("entityType"), entityId.getEntityType());
141 142 predicates.add(entityTypePredicate);
142   - Predicate entityIdPredicate = criteriaBuilder.equal(root.get("entityId"), entityId.getId());
  143 + Predicate entityIdPredicate = criteriaBuilder.equal(root.get("entityId"), UUIDConverter.fromTimeUUID(entityId.getId()));
143 144 predicates.add(entityIdPredicate);
144 145 }
145 146 if (eventType != null) {
... ...