Commit d8bbdfba688af93bc58c90e2a0397a6fc676870f

Authored by Igor Kulikov
2 parents 5a68110b e476817b

Merge branch 'feature/TB-70' of github.com:thingsboard/thingsboard into feature/TB-70

Showing 100 changed files with 756 additions and 672 deletions

Too many changes to show.

To preserve performance only 100 of 134 files are displayed.

... ... @@ -6,19 +6,35 @@
6 6 },
7 7 "widgetTypes": [
8 8 {
9   - "alias": "device_terminal",
10   - "name": "Device terminal",
  9 + "alias": "rpc_debug_terminal",
  10 + "name": "RPC debug terminal",
11 11 "descriptor": {
12 12 "type": "rpc",
13 13 "sizeX": 9.5,
14 14 "sizeY": 5.5,
15 15 "resources": [],
16   - "templateHtml": "<div style=\"height: 100%;\" id=\"device-terminal\"></div>",
  16 + "templateHtml": "<div style=\"height: 100%; overflow-y: auto;\" id=\"device-terminal\"></div>",
17 17 "templateCss": ".cmd .cursor.blink {\n -webkit-animation-name: terminal-underline;\n -moz-animation-name: terminal-underline;\n -ms-animation-name: terminal-underline;\n animation-name: terminal-underline;\n}\n.terminal .inverted, .cmd .inverted {\n border-bottom-color: #aaa;\n}\n",
18   - "controllerScript": "var requestTimeout = 500;\n\nself.onInit = function() {\n var subscription = self.ctx.defaultSubscription;\n var rpcEnabled = subscription.rpcEnabled;\n var deviceName = 'Simulated';\n var prompt;\n if (subscription.targetDeviceName && subscription.targetDeviceName.length) {\n deviceName = subscription.targetDeviceName;\n }\n if (self.ctx.settings.requestTimeout) {\n requestTimeout = self.ctx.settings.requestTimeout;\n }\n var greetings = 'Welcome to ThingsBoard RPC commands terminal.\\n\\n';\n if (!rpcEnabled) {\n greetings += 'Target device is not set!\\n\\n';\n prompt = '';\n } else {\n greetings += 'Current target device for RPC commands: [[b;#fff;]' + deviceName + ']\\n\\n';\n greetings += 'Please type [[b;#fff;]\\'help\\'] to see usage.\\n';\n prompt = '[[b;#8bc34a;]' + deviceName +']> ';\n }\n \n var terminal = $('#device-terminal', self.ctx.$container).terminal(\n function(command) {\n if (command !== '') {\n try {\n var localCommand = angular.copy(command).trim();\n if (localCommand == 'help') {\n printUsage(this);\n } else {\n var cmdObj = $.terminal.parse_command(localCommand);\n if (cmdObj.args.length > 1) {\n this.error(\"Wrong number of arguments!\");\n this.echo(' ');\n } else {\n var params;\n if (cmdObj.args.length && cmdObj.args[0]) {\n try {\n params = JSON.parse(cmdObj.args[0]);\n } catch (e) {\n params = cmdObj.args[0];\n }\n }\n performRpc(this, cmdObj.name, params);\n }\n }\n } catch(e) {\n this.error(new String(e));\n }\n } else {\n this.echo('');\n }\n }, {\n greetings: greetings,\n prompt: prompt\n });\n \n if (!rpcEnabled) {\n terminal.error('No RPC target detected!').pause();\n }\n}\n\n\nfunction printUsage(terminal) {\n var commandsListText = '\\n[[b;#fff;]Usage:]\\n';\n commandsListText += ' <method> [params body]\\n\\n';\n commandsListText += '[[b;#fff;]Example 1:]\\n'; \n commandsListText += ' myRemoteMethod1 myText\\n\\n'; \n commandsListText += '[[b;#fff;]Example 2:]\\n'; \n commandsListText += ' myOtherRemoteMethod \"{\\\\\"key1\\\\\": 2, \\\\\"key2\\\\\": \\\\\"myVal\\\\\"}\"\\n'; \n terminal.echo(new String(commandsListText));\n}\n\nfunction performRpc(terminal, method, params) {\n terminal.pause();\n self.ctx.controlApi.sendTwoWayCommand(method, params, requestTimeout).then(\n function success(responseBody) {\n terminal.echo(JSON.stringify(responseBody));\n terminal.echo(' ');\n terminal.resume();\n },\n function fail() {\n var errorText = self.ctx.defaultSubscription.rpcErrorText;\n terminal.error(errorText);\n terminal.echo(' ');\n terminal.resume();\n }\n );\n}\n\n \nself.onDestroy = function() {\n}\n",
  18 + "controllerScript": "var requestTimeout = 500;\n\nself.onInit = function() {\n var subscription = self.ctx.defaultSubscription;\n var rpcEnabled = subscription.rpcEnabled;\n var deviceName = 'Simulated';\n var prompt;\n if (subscription.targetDeviceName && subscription.targetDeviceName.length) {\n deviceName = subscription.targetDeviceName;\n }\n if (self.ctx.settings.requestTimeout) {\n requestTimeout = self.ctx.settings.requestTimeout;\n }\n var greetings = 'Welcome to ThingsBoard RPC debug terminal.\\n\\n';\n if (!rpcEnabled) {\n greetings += 'Target device is not set!\\n\\n';\n prompt = '';\n } else {\n greetings += 'Current target device for RPC commands: [[b;#fff;]' + deviceName + ']\\n\\n';\n greetings += 'Please type [[b;#fff;]\\'help\\'] to see usage.\\n';\n prompt = '[[b;#8bc34a;]' + deviceName +']> ';\n }\n \n var terminal = $('#device-terminal', self.ctx.$container).terminal(\n function(command) {\n if (command !== '') {\n try {\n var localCommand = angular.copy(command).trim();\n if (localCommand == 'help') {\n printUsage(this);\n } else {\n var cmdObj = $.terminal.parse_command(localCommand);\n if (cmdObj.args.length > 1) {\n this.error(\"Wrong number of arguments!\");\n this.echo(' ');\n } else {\n var params;\n if (cmdObj.args.length && cmdObj.args[0]) {\n try {\n params = JSON.parse(cmdObj.args[0]);\n } catch (e) {\n params = cmdObj.args[0];\n }\n }\n performRpc(this, cmdObj.name, params);\n }\n }\n } catch(e) {\n this.error(new String(e));\n }\n } else {\n this.echo('');\n }\n }, {\n greetings: greetings,\n prompt: prompt\n });\n \n if (!rpcEnabled) {\n terminal.error('No RPC target detected!').pause();\n }\n}\n\n\nfunction printUsage(terminal) {\n var commandsListText = '\\n[[b;#fff;]Usage:]\\n';\n commandsListText += ' <method> [params body]\\n\\n';\n commandsListText += '[[b;#fff;]Example 1:]\\n'; \n commandsListText += ' myRemoteMethod1 myText\\n\\n'; \n commandsListText += '[[b;#fff;]Example 2:]\\n'; \n commandsListText += ' myOtherRemoteMethod \"{\\\\\"key1\\\\\": 2, \\\\\"key2\\\\\": \\\\\"myVal\\\\\"}\"\\n'; \n terminal.echo(new String(commandsListText));\n}\n\nfunction performRpc(terminal, method, params) {\n terminal.pause();\n self.ctx.controlApi.sendTwoWayCommand(method, params, requestTimeout).then(\n function success(responseBody) {\n terminal.echo(JSON.stringify(responseBody));\n terminal.echo(' ');\n terminal.resume();\n },\n function fail() {\n var errorText = self.ctx.defaultSubscription.rpcErrorText;\n terminal.error(errorText);\n terminal.echo(' ');\n terminal.resume();\n }\n );\n}\n\n \nself.onDestroy = function() {\n}\n",
19 19 "settingsSchema": "{\n \"schema\": {\n \"type\": \"object\",\n \"title\": \"Settings\",\n \"properties\": {\n \"requestTimeout\": {\n \"title\": \"RPC request timeout (ms)\",\n \"type\": \"number\",\n \"default\": 500\n }\n },\n \"required\": [\"requestTimeout\"]\n },\n \"form\": [\n \"requestTimeout\"\n ]\n}",
20 20 "dataKeySettingsSchema": "{}\n",
21   - "defaultConfig": "{\"targetDeviceAliases\":[],\"showTitle\":true,\"backgroundColor\":\"#010101\",\"color\":\"rgba(255, 254, 254, 0.87)\",\"padding\":\"0px\",\"settings\":{\"parseGpioStatusFunction\":\"return body[pin] === true;\",\"gpioStatusChangeRequest\":{\"method\":\"setGpioStatus\",\"paramsBody\":\"{\\n \\\"pin\\\": \\\"{$pin}\\\",\\n \\\"enabled\\\": \\\"{$enabled}\\\"\\n}\"},\"requestTimeout\":500,\"switchPanelBackgroundColor\":\"#b71c1c\",\"gpioStatusRequest\":{\"method\":\"getGpioStatus\",\"paramsBody\":\"{}\"},\"gpioList\":[{\"pin\":1,\"label\":\"GPIO 1\",\"row\":0,\"col\":0,\"_uniqueKey\":0},{\"pin\":2,\"label\":\"GPIO 2\",\"row\":0,\"col\":1,\"_uniqueKey\":1},{\"pin\":3,\"label\":\"GPIO 3\",\"row\":1,\"col\":0,\"_uniqueKey\":2}]},\"title\":\"Device terminal\",\"dropShadow\":true,\"enableFullscreen\":true,\"widgetStyle\":{},\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"useDashboardTimewindow\":true,\"showLegend\":false,\"actions\":{}}"
  21 + "defaultConfig": "{\"targetDeviceAliases\":[],\"showTitle\":true,\"backgroundColor\":\"#010101\",\"color\":\"rgba(255, 254, 254, 0.87)\",\"padding\":\"0px\",\"settings\":{\"parseGpioStatusFunction\":\"return body[pin] === true;\",\"gpioStatusChangeRequest\":{\"method\":\"setGpioStatus\",\"paramsBody\":\"{\\n \\\"pin\\\": \\\"{$pin}\\\",\\n \\\"enabled\\\": \\\"{$enabled}\\\"\\n}\"},\"requestTimeout\":500,\"switchPanelBackgroundColor\":\"#b71c1c\",\"gpioStatusRequest\":{\"method\":\"getGpioStatus\",\"paramsBody\":\"{}\"},\"gpioList\":[{\"pin\":1,\"label\":\"GPIO 1\",\"row\":0,\"col\":0,\"_uniqueKey\":0},{\"pin\":2,\"label\":\"GPIO 2\",\"row\":0,\"col\":1,\"_uniqueKey\":1},{\"pin\":3,\"label\":\"GPIO 3\",\"row\":1,\"col\":0,\"_uniqueKey\":2}]},\"title\":\"RPC debug terminal\",\"dropShadow\":true,\"enableFullscreen\":true,\"widgetStyle\":{},\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"useDashboardTimewindow\":true,\"showLegend\":false,\"actions\":{}}"
  22 + }
  23 + },
  24 + {
  25 + "alias": "rpc_remote_shell",
  26 + "name": "RPC remote shell",
  27 + "descriptor": {
  28 + "type": "rpc",
  29 + "sizeX": 9.5,
  30 + "sizeY": 5.5,
  31 + "resources": [],
  32 + "templateHtml": "<div style=\"height: 100%; overflow-y: auto;\" id=\"device-terminal\"></div>",
  33 + "templateCss": ".cmd .cursor.blink {\n -webkit-animation-name: terminal-underline;\n -moz-animation-name: terminal-underline;\n -ms-animation-name: terminal-underline;\n animation-name: terminal-underline;\n}\n.terminal .inverted, .cmd .inverted {\n border-bottom-color: #aaa;\n}\n",
  34 + "controllerScript": "var requestTimeout = 500;\nconst commandStatusPollingInterval = 200;\n\nconst welcome = 'Welcome to ThingsBoard RPC remote shell.\\n';\n\nvar terminal, rpcEnabled, simulated, deviceName, cwd;\nvar commandExecuting = false;\n\nself.onInit = function() {\n var subscription = self.ctx.defaultSubscription;\n rpcEnabled = subscription.rpcEnabled;\n if (subscription.targetDeviceName && subscription.targetDeviceName.length) {\n deviceName = subscription.targetDeviceName;\n } else {\n deviceName = 'Simulated';\n simulated = true;\n }\n if (self.ctx.settings.requestTimeout) {\n requestTimeout = self.ctx.settings.requestTimeout;\n }\n \n terminal = $('#device-terminal', self.ctx.$container).terminal(\n function (command) {\n if (command && command.trim().length) {\n try {\n if (simulated) {\n this.echo(command);\n } else {\n sendCommand(this, command);\n }\n } catch(e) {\n this.error(new String(e));\n }\n } else {\n this.echo('');\n }\n }, {\n greetings: false,\n prompt: rpcEnabled ? currentPrompt : '',\n name: 'shell',\n pauseEvents: false,\n keydown: (e, term) => {\n if ((e.which == 67 || e.which == 68) && e.ctrlKey) { // CTRL+C || CTRL+D\n if (commandExecuting) {\n terminateCommand(term);\n return false;\n }\n }\n },\n onInit: initTerm\n }\n );\n}\n\nfunction initTerm(terminal) {\n terminal.echo(welcome);\n if (!rpcEnabled) {\n terminal.error('Target device is not set!\\n');\n } else {\n terminal.echo(`Current target device for RPC terminal: [[b;#fff;]${deviceName}]\\n`);\n if (!simulated) {\n terminal.pause();\n getTermInfo(terminal,\n (remoteTermInfo) => {\n if (remoteTermInfo) {\n terminal.echo(`Remote platform info:`);\n terminal.echo(`OS: [[b;#fff;]${remoteTermInfo.platform}]`);\n if (remoteTermInfo.release) {\n terminal.echo(`OS release: [[b;#fff;]${remoteTermInfo.release}]`);\n }\n terminal.echo('\\r');\n } else {\n terminal.echo('[[;#f00;]Unable to get remote platform info.\\nDevice is not responding.]\\n');\n }\n terminal.resume();\n });\n }\n }\n}\n\nfunction currentPrompt(callback) {\n if (cwd) {\n callback('[[b;#2196f3;]' + deviceName +']: [[b;#8bc34a;]' + cwd +']> ');\n } else {\n callback('[[b;#8bc34a;]' + deviceName +']> ');\n }\n}\n\nfunction getTermInfo(terminal, callback) {\n self.ctx.controlApi.sendTwoWayCommand('getTermInfo', null, requestTimeout).then(\n (termInfo) => {\n cwd = termInfo.cwd;\n if (callback) {\n callback(termInfo);\n } \n },\n () => {\n if (callback) {\n callback(null);\n }\n }\n );\n}\n\nfunction sendCommand(terminal, command) {\n terminal.pause();\n var sendCommandRequest = {\n command: command,\n cwd: cwd\n };\n self.ctx.controlApi.sendTwoWayCommand('sendCommand', sendCommandRequest, requestTimeout).then(\n (responseBody) => {\n if (responseBody && responseBody.ok) {\n commandExecuting = true;\n setTimeout( pollCommandStatus.bind(null,terminal), commandStatusPollingInterval );\n } else {\n var error = responseBody ? responseBody.error : 'Unhandled error.';\n terminal.error(error);\n terminal.resume();\n }\n },\n () => {\n onRpcError(terminal);\n }\n );\n}\n\nfunction terminateCommand(terminal) {\n self.ctx.controlApi.sendTwoWayCommand('terminateCommand', null, requestTimeout).then(\n (responseBody) => {\n if (!responseBody.ok) {\n commandExecuting = false;\n terminal.error(responseBody.error);\n terminal.resume();\n } \n },\n () => {\n onRpcError(terminal);\n }\n ); \n}\n\nfunction onRpcError(terminal) {\n var errorText = self.ctx.defaultSubscription.rpcErrorText;\n terminal.error(errorText);\n terminal.resume();\n}\n\nfunction pollCommandStatus(terminal) {\n self.ctx.controlApi.sendTwoWayCommand('getCommandStatus', null, requestTimeout).then(\n (commandStatusResponse) => {\n commandStatusResponse.data.forEach((dataElement) => {\n if (dataElement.stdout) {\n terminal.echo(dataElement.stdout);\n }\n if (dataElement.stderr) {\n terminal.error(dataElement.stderr);\n }\n }); \n if (commandStatusResponse.done) {\n commandExecuting = false;\n cwd = commandStatusResponse.cwd;\n terminal.resume();\n } else {\n var interval = commandStatusPollingInterval;\n if (!commandStatusResponse.data.length) {\n interval *=5;\n }\n setTimeout( pollCommandStatus.bind(null,terminal), interval );\n }\n },\n () => {\n commandExecuting = false;\n onRpcError(terminal);\n }\n );\n}\n\nself.onResize = function () {\n if (terminal) {\n terminal.resize(self.ctx.width, self.ctx.height);\n }\n}\n\nself.onDestroy = function() {\n}\n",
  35 + "settingsSchema": "{\n \"schema\": {\n \"type\": \"object\",\n \"title\": \"Settings\",\n \"properties\": {\n \"requestTimeout\": {\n \"title\": \"RPC request timeout (ms)\",\n \"type\": \"number\",\n \"default\": 500\n }\n },\n \"required\": [\"requestTimeout\"]\n },\n \"form\": [\n \"requestTimeout\"\n ]\n}",
  36 + "dataKeySettingsSchema": "{}\n",
  37 + "defaultConfig": "{\"targetDeviceAliases\":[],\"showTitle\":true,\"backgroundColor\":\"#010101\",\"color\":\"rgba(255, 254, 254, 0.87)\",\"padding\":\"0px\",\"settings\":{\"parseGpioStatusFunction\":\"return body[pin] === true;\",\"gpioStatusChangeRequest\":{\"method\":\"setGpioStatus\",\"paramsBody\":\"{\\n \\\"pin\\\": \\\"{$pin}\\\",\\n \\\"enabled\\\": \\\"{$enabled}\\\"\\n}\"},\"requestTimeout\":500,\"switchPanelBackgroundColor\":\"#b71c1c\",\"gpioStatusRequest\":{\"method\":\"getGpioStatus\",\"paramsBody\":\"{}\"},\"gpioList\":[{\"pin\":1,\"label\":\"GPIO 1\",\"row\":0,\"col\":0,\"_uniqueKey\":0},{\"pin\":2,\"label\":\"GPIO 2\",\"row\":0,\"col\":1,\"_uniqueKey\":1},{\"pin\":3,\"label\":\"GPIO 3\",\"row\":1,\"col\":0,\"_uniqueKey\":2}]},\"title\":\"RPC remote shell\",\"dropShadow\":true,\"enableFullscreen\":true,\"widgetStyle\":{},\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"useDashboardTimewindow\":true,\"showLegend\":false,\"actions\":{}}"
22 38 }
23 39 }
24 40 ]
... ...
... ... @@ -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 }
... ...