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