Commit 8450ca1454c064153223ac790fd59b5c54c9ea8a

Authored by VoBa
Committed by GitHub
2 parents 50cc39c7 43f52a76

Merge pull request #101 from volodymyr-babak/master

DAO refactoring
Showing 73 changed files with 2168 additions and 680 deletions

Too many changes to show.

To preserve performance only 73 of 133 files are displayed.

@@ -15,16 +15,7 @@ @@ -15,16 +15,7 @@
15 */ 15 */
16 package org.thingsboard.server.actors.plugin; 16 package org.thingsboard.server.actors.plugin;
17 17
18 -import java.io.IOException;  
19 -import java.util.*;  
20 -import java.util.concurrent.ExecutionException;  
21 -import java.util.concurrent.Executor;  
22 -import java.util.concurrent.Executors;  
23 -import java.util.stream.Collectors;  
24 -  
25 -import com.datastax.driver.core.ResultSet;  
26 -import com.datastax.driver.core.ResultSetFuture;  
27 -import com.datastax.driver.core.Row; 18 +import akka.actor.ActorRef;
28 import com.google.common.base.Function; 19 import com.google.common.base.Function;
29 import com.google.common.util.concurrent.FutureCallback; 20 import com.google.common.util.concurrent.FutureCallback;
30 import com.google.common.util.concurrent.Futures; 21 import com.google.common.util.concurrent.Futures;
@@ -32,18 +23,20 @@ import com.google.common.util.concurrent.ListenableFuture; @@ -32,18 +23,20 @@ import com.google.common.util.concurrent.ListenableFuture;
32 import lombok.extern.slf4j.Slf4j; 23 import lombok.extern.slf4j.Slf4j;
33 import org.thingsboard.server.common.data.DataConstants; 24 import org.thingsboard.server.common.data.DataConstants;
34 import org.thingsboard.server.common.data.Device; 25 import org.thingsboard.server.common.data.Device;
35 -import org.thingsboard.server.common.data.id.*; 26 +import org.thingsboard.server.common.data.id.CustomerId;
  27 +import org.thingsboard.server.common.data.id.DeviceId;
  28 +import org.thingsboard.server.common.data.id.PluginId;
  29 +import org.thingsboard.server.common.data.id.TenantId;
36 import org.thingsboard.server.common.data.kv.AttributeKey; 30 import org.thingsboard.server.common.data.kv.AttributeKey;
37 import org.thingsboard.server.common.data.kv.AttributeKvEntry; 31 import org.thingsboard.server.common.data.kv.AttributeKvEntry;
38 import org.thingsboard.server.common.data.kv.TsKvEntry; 32 import org.thingsboard.server.common.data.kv.TsKvEntry;
39 import org.thingsboard.server.common.data.kv.TsKvQuery; 33 import org.thingsboard.server.common.data.kv.TsKvQuery;
40 -import org.thingsboard.server.common.data.page.TextPageData;  
41 import org.thingsboard.server.common.data.page.TextPageLink; 34 import org.thingsboard.server.common.data.page.TextPageLink;
42 import org.thingsboard.server.common.msg.cluster.ServerAddress; 35 import org.thingsboard.server.common.msg.cluster.ServerAddress;
43 import org.thingsboard.server.extensions.api.device.DeviceAttributesEventNotificationMsg; 36 import org.thingsboard.server.extensions.api.device.DeviceAttributesEventNotificationMsg;
44 import org.thingsboard.server.extensions.api.plugins.PluginApiCallSecurityContext; 37 import org.thingsboard.server.extensions.api.plugins.PluginApiCallSecurityContext;
45 -import org.thingsboard.server.extensions.api.plugins.PluginContext;  
46 import org.thingsboard.server.extensions.api.plugins.PluginCallback; 38 import org.thingsboard.server.extensions.api.plugins.PluginCallback;
  39 +import org.thingsboard.server.extensions.api.plugins.PluginContext;
47 import org.thingsboard.server.extensions.api.plugins.msg.PluginToRuleMsg; 40 import org.thingsboard.server.extensions.api.plugins.msg.PluginToRuleMsg;
48 import org.thingsboard.server.extensions.api.plugins.msg.TimeoutMsg; 41 import org.thingsboard.server.extensions.api.plugins.msg.TimeoutMsg;
49 import org.thingsboard.server.extensions.api.plugins.msg.ToDeviceRpcRequest; 42 import org.thingsboard.server.extensions.api.plugins.msg.ToDeviceRpcRequest;
@@ -52,10 +45,12 @@ import org.thingsboard.server.extensions.api.plugins.rpc.RpcMsg; @@ -52,10 +45,12 @@ import org.thingsboard.server.extensions.api.plugins.rpc.RpcMsg;
52 import org.thingsboard.server.extensions.api.plugins.ws.PluginWebsocketSessionRef; 45 import org.thingsboard.server.extensions.api.plugins.ws.PluginWebsocketSessionRef;
53 import org.thingsboard.server.extensions.api.plugins.ws.msg.PluginWebsocketMsg; 46 import org.thingsboard.server.extensions.api.plugins.ws.msg.PluginWebsocketMsg;
54 47
55 -import akka.actor.ActorRef;  
56 -import org.w3c.dom.Attr;  
57 -  
58 import javax.annotation.Nullable; 48 import javax.annotation.Nullable;
  49 +import java.io.IOException;
  50 +import java.util.*;
  51 +import java.util.concurrent.Executor;
  52 +import java.util.concurrent.Executors;
  53 +import java.util.stream.Collectors;
59 54
60 @Slf4j 55 @Slf4j
61 public final class PluginProcessingContext implements PluginContext { 56 public final class PluginProcessingContext implements PluginContext {
@@ -15,8 +15,6 @@ @@ -15,8 +15,6 @@
15 */ 15 */
16 package org.thingsboard.server.controller; 16 package org.thingsboard.server.controller;
17 17
18 -import com.fasterxml.jackson.databind.JsonNode;  
19 -import com.fasterxml.jackson.databind.ObjectMapper;  
20 import lombok.extern.slf4j.Slf4j; 18 import lombok.extern.slf4j.Slf4j;
21 import org.apache.commons.lang3.StringUtils; 19 import org.apache.commons.lang3.StringUtils;
22 import org.springframework.beans.factory.annotation.Autowired; 20 import org.springframework.beans.factory.annotation.Autowired;
@@ -23,19 +23,16 @@ import org.thingsboard.server.common.data.Device; @@ -23,19 +23,16 @@ import org.thingsboard.server.common.data.Device;
23 import org.thingsboard.server.common.data.id.CustomerId; 23 import org.thingsboard.server.common.data.id.CustomerId;
24 import org.thingsboard.server.common.data.id.DeviceId; 24 import org.thingsboard.server.common.data.id.DeviceId;
25 import org.thingsboard.server.common.data.id.TenantId; 25 import org.thingsboard.server.common.data.id.TenantId;
26 -import org.thingsboard.server.common.data.id.UUIDBased;  
27 import org.thingsboard.server.common.data.page.TextPageData; 26 import org.thingsboard.server.common.data.page.TextPageData;
28 import org.thingsboard.server.common.data.page.TextPageLink; 27 import org.thingsboard.server.common.data.page.TextPageLink;
29 import org.thingsboard.server.common.data.security.DeviceCredentials; 28 import org.thingsboard.server.common.data.security.DeviceCredentials;
30 import org.thingsboard.server.dao.exception.IncorrectParameterException; 29 import org.thingsboard.server.dao.exception.IncorrectParameterException;
31 import org.thingsboard.server.dao.model.ModelConstants; 30 import org.thingsboard.server.dao.model.ModelConstants;
32 import org.thingsboard.server.exception.ThingsboardException; 31 import org.thingsboard.server.exception.ThingsboardException;
33 -import org.thingsboard.server.extensions.api.device.DeviceCredentialsUpdateNotificationMsg;  
34 import org.thingsboard.server.service.security.model.SecurityUser; 32 import org.thingsboard.server.service.security.model.SecurityUser;
35 33
36 import java.util.ArrayList; 34 import java.util.ArrayList;
37 import java.util.List; 35 import java.util.List;
38 -import java.util.UUID;  
39 36
40 @RestController 37 @RestController
41 @RequestMapping("/api") 38 @RequestMapping("/api")
@@ -25,7 +25,6 @@ import org.thingsboard.server.common.data.page.TextPageLink; @@ -25,7 +25,6 @@ import org.thingsboard.server.common.data.page.TextPageLink;
25 import org.thingsboard.server.common.data.plugin.ComponentLifecycleEvent; 25 import org.thingsboard.server.common.data.plugin.ComponentLifecycleEvent;
26 import org.thingsboard.server.common.data.plugin.PluginMetaData; 26 import org.thingsboard.server.common.data.plugin.PluginMetaData;
27 import org.thingsboard.server.common.data.security.Authority; 27 import org.thingsboard.server.common.data.security.Authority;
28 -import org.thingsboard.server.common.data.widget.WidgetsBundle;  
29 import org.thingsboard.server.dao.model.ModelConstants; 28 import org.thingsboard.server.dao.model.ModelConstants;
30 import org.thingsboard.server.exception.ThingsboardException; 29 import org.thingsboard.server.exception.ThingsboardException;
31 30
@@ -188,3 +188,15 @@ cache: @@ -188,3 +188,15 @@ cache:
188 updates: 188 updates:
189 # Enable/disable updates checking. 189 # Enable/disable updates checking.
190 enabled: "${UPDATES_ENABLED:true}" 190 enabled: "${UPDATES_ENABLED:true}"
  191 +
  192 +cassandra:
  193 + enabled: "${CASSANDRA_ENABLED:true}"
  194 +
  195 +# SQL DAO Configuration
  196 +
  197 +sql:
  198 + enabled: "${SQL_ENABLED:false}"
  199 + datasource:
  200 + url: "${SQL_DATASOURCE_URL:jdbc:postgresql://localhost:5432/thingsboard}"
  201 + username: "${SQL_DATASOURCE_USERNAME:postgres}"
  202 + password: "${SQL_DATASOURCE_PASSWORD:postgres}"
@@ -35,7 +35,6 @@ import org.junit.Assert; @@ -35,7 +35,6 @@ import org.junit.Assert;
35 import org.junit.Before; 35 import org.junit.Before;
36 import org.junit.Test; 36 import org.junit.Test;
37 37
38 -import com.datastax.driver.core.utils.UUIDs;  
39 import com.fasterxml.jackson.core.type.TypeReference; 38 import com.fasterxml.jackson.core.type.TypeReference;
40 39
41 public class DashboardControllerTest extends AbstractControllerTest { 40 public class DashboardControllerTest extends AbstractControllerTest {
@@ -42,7 +42,6 @@ import org.junit.Assert; @@ -42,7 +42,6 @@ import org.junit.Assert;
42 import org.junit.Before; 42 import org.junit.Before;
43 import org.junit.Test; 43 import org.junit.Test;
44 44
45 -import com.datastax.driver.core.utils.UUIDs;  
46 import com.fasterxml.jackson.core.type.TypeReference; 45 import com.fasterxml.jackson.core.type.TypeReference;
47 46
48 public class DeviceControllerTest extends AbstractControllerTest { 47 public class DeviceControllerTest extends AbstractControllerTest {
@@ -15,14 +15,11 @@ @@ -15,14 +15,11 @@
15 */ 15 */
16 package org.thingsboard.server.common.data.rule; 16 package org.thingsboard.server.common.data.rule;
17 17
  18 +import com.fasterxml.jackson.databind.JsonNode;
18 import lombok.Data; 19 import lombok.Data;
19 -import lombok.ToString;  
20 import org.thingsboard.server.common.data.SearchTextBased; 20 import org.thingsboard.server.common.data.SearchTextBased;
21 -import org.thingsboard.server.common.data.id.CustomerId;  
22 import org.thingsboard.server.common.data.id.RuleId; 21 import org.thingsboard.server.common.data.id.RuleId;
23 import org.thingsboard.server.common.data.id.TenantId; 22 import org.thingsboard.server.common.data.id.TenantId;
24 -  
25 -import com.fasterxml.jackson.databind.JsonNode;  
26 import org.thingsboard.server.common.data.plugin.ComponentLifecycleState; 23 import org.thingsboard.server.common.data.plugin.ComponentLifecycleState;
27 24
28 @Data 25 @Data
@@ -150,6 +150,10 @@ @@ -150,6 +150,10 @@
150 <groupId>org.bouncycastle</groupId> 150 <groupId>org.bouncycastle</groupId>
151 <artifactId>bcprov-jdk15on</artifactId> 151 <artifactId>bcprov-jdk15on</artifactId>
152 </dependency> 152 </dependency>
  153 + <dependency>
  154 + <groupId>org.springframework.boot</groupId>
  155 + <artifactId>spring-boot-starter-data-jpa</artifactId>
  156 + </dependency>
153 </dependencies> 157 </dependencies>
154 <build> 158 <build>
155 <plugins> 159 <plugins>
dao/src/main/java/org/thingsboard/server/dao/CassandraAbstractAsyncDao.java renamed from dao/src/main/java/org/thingsboard/server/dao/AbstractAsyncDao.java
@@ -23,7 +23,7 @@ import java.util.concurrent.Executors; @@ -23,7 +23,7 @@ import java.util.concurrent.Executors;
23 /** 23 /**
24 * Created by ashvayka on 21.02.17. 24 * Created by ashvayka on 21.02.17.
25 */ 25 */
26 -public abstract class AbstractAsyncDao extends AbstractDao { 26 +public abstract class CassandraAbstractAsyncDao extends CassandraAbstractDao {
27 27
28 protected ExecutorService readResultsProcessingExecutor; 28 protected ExecutorService readResultsProcessingExecutor;
29 29
dao/src/main/java/org/thingsboard/server/dao/CassandraAbstractDao.java renamed from dao/src/main/java/org/thingsboard/server/dao/AbstractDao.java
@@ -23,7 +23,7 @@ import org.thingsboard.server.dao.cassandra.CassandraCluster; @@ -23,7 +23,7 @@ import org.thingsboard.server.dao.cassandra.CassandraCluster;
23 import org.thingsboard.server.dao.model.type.*; 23 import org.thingsboard.server.dao.model.type.*;
24 24
25 @Slf4j 25 @Slf4j
26 -public abstract class AbstractDao { 26 +public abstract class CassandraAbstractDao {
27 27
28 @Autowired 28 @Autowired
29 protected CassandraCluster cluster; 29 protected CassandraCluster cluster;
dao/src/main/java/org/thingsboard/server/dao/CassandraAbstractModelDao.java renamed from dao/src/main/java/org/thingsboard/server/dao/AbstractModelDao.java
@@ -28,8 +28,9 @@ import com.google.common.util.concurrent.Futures; @@ -28,8 +28,9 @@ import com.google.common.util.concurrent.Futures;
28 import com.google.common.util.concurrent.ListenableFuture; 28 import com.google.common.util.concurrent.ListenableFuture;
29 import lombok.extern.slf4j.Slf4j; 29 import lombok.extern.slf4j.Slf4j;
30 import org.thingsboard.server.dao.model.BaseEntity; 30 import org.thingsboard.server.dao.model.BaseEntity;
31 -import org.thingsboard.server.dao.model.wrapper.EntityResultSet;  
32 import org.thingsboard.server.dao.model.ModelConstants; 31 import org.thingsboard.server.dao.model.ModelConstants;
  32 +import org.thingsboard.server.dao.model.SearchTextEntity;
  33 +import org.thingsboard.server.dao.model.wrapper.EntityResultSet;
33 34
34 import javax.annotation.Nullable; 35 import javax.annotation.Nullable;
35 import java.util.Collections; 36 import java.util.Collections;
@@ -37,26 +38,29 @@ import java.util.List; @@ -37,26 +38,29 @@ import java.util.List;
37 import java.util.UUID; 38 import java.util.UUID;
38 39
39 import static com.datastax.driver.core.querybuilder.QueryBuilder.eq; 40 import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;
40 -import static com.datastax.driver.core.querybuilder.QueryBuilder.lt;  
41 import static com.datastax.driver.core.querybuilder.QueryBuilder.select; 41 import static com.datastax.driver.core.querybuilder.QueryBuilder.select;
42 42
43 @Slf4j 43 @Slf4j
44 -public abstract class AbstractModelDao<T extends BaseEntity<?>> extends AbstractDao implements Dao<T> { 44 +public abstract class CassandraAbstractModelDao<E extends BaseEntity<D>, D> extends CassandraAbstractDao implements Dao<D> {
45 45
46 - protected abstract Class<T> getColumnFamilyClass(); 46 + protected abstract Class<E> getColumnFamilyClass();
47 47
48 protected abstract String getColumnFamilyName(); 48 protected abstract String getColumnFamilyName();
49 49
50 - protected Mapper<T> getMapper() { 50 + protected boolean isSearchTextDao() {
  51 + return false;
  52 + }
  53 +
  54 + protected Mapper<E> getMapper() {
51 return cluster.getMapper(getColumnFamilyClass()); 55 return cluster.getMapper(getColumnFamilyClass());
52 } 56 }
53 57
54 - protected List<T> findListByStatement(Statement statement) {  
55 - List<T> list = Collections.emptyList(); 58 + protected List<E> findListByStatement(Statement statement) {
  59 + List<E> list = Collections.emptyList();
56 if (statement != null) { 60 if (statement != null) {
57 statement.setConsistencyLevel(cluster.getDefaultReadConsistencyLevel()); 61 statement.setConsistencyLevel(cluster.getDefaultReadConsistencyLevel());
58 ResultSet resultSet = getSession().execute(statement); 62 ResultSet resultSet = getSession().execute(statement);
59 - Result<T> result = getMapper().map(resultSet); 63 + Result<E> result = getMapper().map(resultSet);
60 if (result != null) { 64 if (result != null) {
61 list = result.all(); 65 list = result.all();
62 } 66 }
@@ -64,33 +68,33 @@ public abstract class AbstractModelDao<T extends BaseEntity<?>> extends Abstract @@ -64,33 +68,33 @@ public abstract class AbstractModelDao<T extends BaseEntity<?>> extends Abstract
64 return list; 68 return list;
65 } 69 }
66 70
67 - protected ListenableFuture<List<T>> findListByStatementAsync(Statement statement) { 71 + protected ListenableFuture<List<D>> findListByStatementAsync(Statement statement) {
68 if (statement != null) { 72 if (statement != null) {
69 statement.setConsistencyLevel(cluster.getDefaultReadConsistencyLevel()); 73 statement.setConsistencyLevel(cluster.getDefaultReadConsistencyLevel());
70 ResultSetFuture resultSetFuture = getSession().executeAsync(statement); 74 ResultSetFuture resultSetFuture = getSession().executeAsync(statement);
71 - ListenableFuture<List<T>> result = Futures.transform(resultSetFuture, new Function<ResultSet, List<T>>() { 75 + return Futures.transform(resultSetFuture, new Function<ResultSet, List<D>>() {
72 @Nullable 76 @Nullable
73 @Override 77 @Override
74 - public List<T> apply(@Nullable ResultSet resultSet) {  
75 - Result<T> result = getMapper().map(resultSet); 78 + public List<D> apply(@Nullable ResultSet resultSet) {
  79 + Result<E> result = getMapper().map(resultSet);
76 if (result != null) { 80 if (result != null) {
77 - return result.all(); 81 + List<E> entities = result.all();
  82 + return DaoUtil.convertDataList(entities);
78 } else { 83 } else {
79 return Collections.emptyList(); 84 return Collections.emptyList();
80 } 85 }
81 } 86 }
82 }); 87 });
83 - return result;  
84 } 88 }
85 return Futures.immediateFuture(Collections.emptyList()); 89 return Futures.immediateFuture(Collections.emptyList());
86 } 90 }
87 91
88 - protected T findOneByStatement(Statement statement) {  
89 - T object = null; 92 + protected E findOneByStatement(Statement statement) {
  93 + E object = null;
90 if (statement != null) { 94 if (statement != null) {
91 statement.setConsistencyLevel(cluster.getDefaultReadConsistencyLevel()); 95 statement.setConsistencyLevel(cluster.getDefaultReadConsistencyLevel());
92 ResultSet resultSet = getSession().execute(statement); 96 ResultSet resultSet = getSession().execute(statement);
93 - Result<T> result = getMapper().map(resultSet); 97 + Result<E> result = getMapper().map(resultSet);
94 if (result != null) { 98 if (result != null) {
95 object = result.one(); 99 object = result.one();
96 } 100 }
@@ -98,32 +102,32 @@ public abstract class AbstractModelDao<T extends BaseEntity<?>> extends Abstract @@ -98,32 +102,32 @@ public abstract class AbstractModelDao<T extends BaseEntity<?>> extends Abstract
98 return object; 102 return object;
99 } 103 }
100 104
101 - protected ListenableFuture<T> findOneByStatementAsync(Statement statement) { 105 + protected ListenableFuture<D> findOneByStatementAsync(Statement statement) {
102 if (statement != null) { 106 if (statement != null) {
103 statement.setConsistencyLevel(cluster.getDefaultReadConsistencyLevel()); 107 statement.setConsistencyLevel(cluster.getDefaultReadConsistencyLevel());
104 ResultSetFuture resultSetFuture = getSession().executeAsync(statement); 108 ResultSetFuture resultSetFuture = getSession().executeAsync(statement);
105 - ListenableFuture<T> result = Futures.transform(resultSetFuture, new Function<ResultSet, T>() { 109 + return Futures.transform(resultSetFuture, new Function<ResultSet, D>() {
106 @Nullable 110 @Nullable
107 @Override 111 @Override
108 - public T apply(@Nullable ResultSet resultSet) {  
109 - Result<T> result = getMapper().map(resultSet); 112 + public D apply(@Nullable ResultSet resultSet) {
  113 + Result<E> result = getMapper().map(resultSet);
110 if (result != null) { 114 if (result != null) {
111 - return result.one(); 115 + E entity = result.one();
  116 + return DaoUtil.getData(entity);
112 } else { 117 } else {
113 return null; 118 return null;
114 } 119 }
115 } 120 }
116 }); 121 });
117 - return result;  
118 } 122 }
119 return Futures.immediateFuture(null); 123 return Futures.immediateFuture(null);
120 } 124 }
121 125
122 - protected Statement getSaveQuery(T dto) { 126 + protected Statement getSaveQuery(E dto) {
123 return getMapper().saveQuery(dto); 127 return getMapper().saveQuery(dto);
124 } 128 }
125 129
126 - protected EntityResultSet<T> saveWithResult(T entity) { 130 + protected EntityResultSet<E> saveWithResult(E entity) {
127 log.debug("Save entity {}", entity); 131 log.debug("Save entity {}", entity);
128 if (entity.getId() == null) { 132 if (entity.getId() == null) {
129 entity.setId(UUIDs.timeBased()); 133 entity.setId(UUIDs.timeBased());
@@ -136,34 +140,51 @@ public abstract class AbstractModelDao<T extends BaseEntity<?>> extends Abstract @@ -136,34 +140,51 @@ public abstract class AbstractModelDao<T extends BaseEntity<?>> extends Abstract
136 return new EntityResultSet<>(resultSet, entity); 140 return new EntityResultSet<>(resultSet, entity);
137 } 141 }
138 142
139 - public T save(T entity) {  
140 - return saveWithResult(entity).getEntity(); 143 + @Override
  144 + public D save(D domain) {
  145 + E entity;
  146 + try {
  147 + entity = getColumnFamilyClass().getConstructor(domain.getClass()).newInstance(domain);
  148 + } catch (Exception e) {
  149 + log.error("Can't create entity for domain object {}", domain, e);
  150 + throw new IllegalArgumentException("Can't create entity for domain object {" + domain + "}", e);
  151 + }
  152 + if (isSearchTextDao()) {
  153 + ((SearchTextEntity) entity).setSearchText(((SearchTextEntity) entity).getSearchTextSource().toLowerCase());
  154 + }
  155 + log.debug("Saving entity {}", entity);
  156 + entity = saveWithResult(entity).getEntity();
  157 + return DaoUtil.getData(entity);
141 } 158 }
142 159
143 - public T findById(UUID key) { 160 + @Override
  161 + public D findById(UUID key) {
144 log.debug("Get entity by key {}", key); 162 log.debug("Get entity by key {}", key);
145 Select.Where query = select().from(getColumnFamilyName()).where(eq(ModelConstants.ID_PROPERTY, key)); 163 Select.Where query = select().from(getColumnFamilyName()).where(eq(ModelConstants.ID_PROPERTY, key));
146 log.trace("Execute query {}", query); 164 log.trace("Execute query {}", query);
147 - return findOneByStatement(query); 165 + E entity = findOneByStatement(query);
  166 + return DaoUtil.getData(entity);
148 } 167 }
149 168
150 - public ListenableFuture<T> findByIdAsync(UUID key) { 169 + @Override
  170 + public ListenableFuture<D> findByIdAsync(UUID key) {
151 log.debug("Get entity by key {}", key); 171 log.debug("Get entity by key {}", key);
152 Select.Where query = select().from(getColumnFamilyName()).where(eq(ModelConstants.ID_PROPERTY, key)); 172 Select.Where query = select().from(getColumnFamilyName()).where(eq(ModelConstants.ID_PROPERTY, key));
153 log.trace("Execute query {}", query); 173 log.trace("Execute query {}", query);
154 return findOneByStatementAsync(query); 174 return findOneByStatementAsync(query);
155 } 175 }
156 176
157 -  
158 - public ResultSet removeById(UUID key) { 177 + @Override
  178 + public boolean removeById(UUID key) {
159 Statement delete = QueryBuilder.delete().all().from(getColumnFamilyName()).where(eq(ModelConstants.ID_PROPERTY, key)); 179 Statement delete = QueryBuilder.delete().all().from(getColumnFamilyName()).where(eq(ModelConstants.ID_PROPERTY, key));
160 log.debug("Remove request: {}", delete.toString()); 180 log.debug("Remove request: {}", delete.toString());
161 - return getSession().execute(delete); 181 + return getSession().execute(delete).wasApplied();
162 } 182 }
163 183
164 -  
165 - public List<T> find() { 184 + @Override
  185 + public List<D> find() {
166 log.debug("Get all entities from column family {}", getColumnFamilyName()); 186 log.debug("Get all entities from column family {}", getColumnFamilyName());
167 - return findListByStatement(QueryBuilder.select().all().from(getColumnFamilyName()).setConsistencyLevel(cluster.getDefaultReadConsistencyLevel())); 187 + List<E> entities = findListByStatement(QueryBuilder.select().all().from(getColumnFamilyName()).setConsistencyLevel(cluster.getDefaultReadConsistencyLevel()));
  188 + return DaoUtil.convertDataList(entities);
168 } 189 }
169 } 190 }
dao/src/main/java/org/thingsboard/server/dao/CassandraAbstractSearchTextDao.java renamed from dao/src/main/java/org/thingsboard/server/dao/AbstractSearchTextDao.java
@@ -19,27 +19,26 @@ import com.datastax.driver.core.querybuilder.Clause; @@ -19,27 +19,26 @@ import com.datastax.driver.core.querybuilder.Clause;
19 import com.datastax.driver.core.querybuilder.QueryBuilder; 19 import com.datastax.driver.core.querybuilder.QueryBuilder;
20 import com.datastax.driver.core.querybuilder.Select; 20 import com.datastax.driver.core.querybuilder.Select;
21 import com.datastax.driver.core.querybuilder.Select.Where; 21 import com.datastax.driver.core.querybuilder.Select.Where;
  22 +import lombok.extern.slf4j.Slf4j;
22 import org.apache.commons.lang3.StringUtils; 23 import org.apache.commons.lang3.StringUtils;
23 import org.thingsboard.server.common.data.page.TextPageLink; 24 import org.thingsboard.server.common.data.page.TextPageLink;
24 -import org.thingsboard.server.dao.model.SearchTextEntity;  
25 import org.thingsboard.server.dao.model.ModelConstants; 25 import org.thingsboard.server.dao.model.ModelConstants;
  26 +import org.thingsboard.server.dao.model.SearchTextEntity;
26 27
27 import java.util.List; 28 import java.util.List;
28 29
29 import static com.datastax.driver.core.querybuilder.QueryBuilder.eq; 30 import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;
30 -import static com.datastax.driver.core.querybuilder.QueryBuilder.gt;  
31 -import static com.datastax.driver.core.querybuilder.QueryBuilder.gte;  
32 -import static com.datastax.driver.core.querybuilder.QueryBuilder.lt;  
33 import static com.datastax.driver.core.querybuilder.QueryBuilder.select; 31 import static com.datastax.driver.core.querybuilder.QueryBuilder.select;
34 32
35 -public abstract class AbstractSearchTextDao<T extends SearchTextEntity<?>> extends AbstractModelDao<T> { 33 +@Slf4j
  34 +public abstract class CassandraAbstractSearchTextDao<E extends SearchTextEntity<D>, D> extends CassandraAbstractModelDao<E, D> {
36 35
37 - public T save(T entity) {  
38 - entity.setSearchText(entity.getSearchTextSource().toLowerCase());  
39 - return super.save(entity); 36 + @Override
  37 + protected boolean isSearchTextDao() {
  38 + return true;
40 } 39 }
41 -  
42 - protected List<T> findPageWithTextSearch(String searchView, List<Clause> clauses, TextPageLink pageLink) { 40 +
  41 + protected List<E> findPageWithTextSearch(String searchView, List<Clause> clauses, TextPageLink pageLink) {
43 Select select = select().from(searchView); 42 Select select = select().from(searchView);
44 Where query = select.where(); 43 Where query = select.where();
45 for (Clause clause : clauses) { 44 for (Clause clause : clauses) {
@@ -49,7 +48,7 @@ public abstract class AbstractSearchTextDao<T extends SearchTextEntity<?>> exten @@ -49,7 +48,7 @@ public abstract class AbstractSearchTextDao<T extends SearchTextEntity<?>> exten
49 if (!StringUtils.isEmpty(pageLink.getTextOffset())) { 48 if (!StringUtils.isEmpty(pageLink.getTextOffset())) {
50 query.and(eq(ModelConstants.SEARCH_TEXT_PROPERTY, pageLink.getTextOffset())); 49 query.and(eq(ModelConstants.SEARCH_TEXT_PROPERTY, pageLink.getTextOffset()));
51 query.and(QueryBuilder.lt(ModelConstants.ID_PROPERTY, pageLink.getIdOffset())); 50 query.and(QueryBuilder.lt(ModelConstants.ID_PROPERTY, pageLink.getIdOffset()));
52 - List<T> result = findListByStatement(query); 51 + List<E> result = findListByStatement(query);
53 if (result.size() < pageLink.getLimit()) { 52 if (result.size() < pageLink.getLimit()) {
54 select = select().from(searchView); 53 select = select().from(searchView);
55 query = select.where(); 54 query = select.where();
dao/src/main/java/org/thingsboard/server/dao/CassandraAbstractSearchTimeDao.java renamed from dao/src/main/java/org/thingsboard/server/dao/AbstractSearchTimeDao.java
@@ -21,34 +21,29 @@ import com.datastax.driver.core.querybuilder.QueryBuilder; @@ -21,34 +21,29 @@ import com.datastax.driver.core.querybuilder.QueryBuilder;
21 import com.datastax.driver.core.querybuilder.Select; 21 import com.datastax.driver.core.querybuilder.Select;
22 import com.datastax.driver.core.querybuilder.Select.Where; 22 import com.datastax.driver.core.querybuilder.Select.Where;
23 import com.datastax.driver.core.utils.UUIDs; 23 import com.datastax.driver.core.utils.UUIDs;
24 -import org.apache.commons.lang3.StringUtils;  
25 -import org.thingsboard.server.common.data.page.TextPageLink;  
26 import org.thingsboard.server.common.data.page.TimePageLink; 24 import org.thingsboard.server.common.data.page.TimePageLink;
27 import org.thingsboard.server.dao.model.BaseEntity; 25 import org.thingsboard.server.dao.model.BaseEntity;
28 import org.thingsboard.server.dao.model.ModelConstants; 26 import org.thingsboard.server.dao.model.ModelConstants;
29 -import org.thingsboard.server.dao.model.SearchTextEntity;  
30 27
31 import java.util.ArrayList; 28 import java.util.ArrayList;
32 import java.util.Collections; 29 import java.util.Collections;
33 import java.util.List; 30 import java.util.List;
34 import java.util.UUID; 31 import java.util.UUID;
35 32
36 -import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;  
37 import static com.datastax.driver.core.querybuilder.QueryBuilder.select; 33 import static com.datastax.driver.core.querybuilder.QueryBuilder.select;
38 34
39 -public abstract class AbstractSearchTimeDao<T extends BaseEntity<?>> extends AbstractModelDao<T> { 35 +public abstract class CassandraAbstractSearchTimeDao<E extends BaseEntity<D>, D> extends CassandraAbstractModelDao<E, D> {
40 36
41 37
42 - protected List<T> findPageWithTimeSearch(String searchView, List<Clause> clauses, TimePageLink pageLink) { 38 + protected List<E> findPageWithTimeSearch(String searchView, List<Clause> clauses, TimePageLink pageLink) {
43 return findPageWithTimeSearch(searchView, clauses, Collections.emptyList(), pageLink); 39 return findPageWithTimeSearch(searchView, clauses, Collections.emptyList(), pageLink);
44 } 40 }
45 41
46 - protected List<T> findPageWithTimeSearch(String searchView, List<Clause> clauses, Ordering ordering, TimePageLink pageLink) { 42 + protected List<E> findPageWithTimeSearch(String searchView, List<Clause> clauses, Ordering ordering, TimePageLink pageLink) {
47 return findPageWithTimeSearch(searchView, clauses, Collections.singletonList(ordering), pageLink); 43 return findPageWithTimeSearch(searchView, clauses, Collections.singletonList(ordering), pageLink);
48 } 44 }
49 45
50 -  
51 - protected List<T> findPageWithTimeSearch(String searchView, List<Clause> clauses, List<Ordering> topLevelOrderings, TimePageLink pageLink) { 46 + protected List<E> findPageWithTimeSearch(String searchView, List<Clause> clauses, List<Ordering> topLevelOrderings, TimePageLink pageLink) {
52 Select select = select().from(searchView); 47 Select select = select().from(searchView);
53 Where query = select.where(); 48 Where query = select.where();
54 for (Clause clause : clauses) { 49 for (Clause clause : clauses) {
@@ -15,7 +15,6 @@ @@ -15,7 +15,6 @@
15 */ 15 */
16 package org.thingsboard.server.dao; 16 package org.thingsboard.server.dao;
17 17
18 -import com.datastax.driver.core.ResultSet;  
19 import com.google.common.util.concurrent.ListenableFuture; 18 import com.google.common.util.concurrent.ListenableFuture;
20 19
21 import java.util.List; 20 import java.util.List;
@@ -31,6 +30,6 @@ public interface Dao<T> { @@ -31,6 +30,6 @@ public interface Dao<T> {
31 30
32 T save(T t); 31 T save(T t);
33 32
34 - ResultSet removeById(UUID id); 33 + boolean removeById(UUID id);
35 34
36 } 35 }
@@ -15,15 +15,11 @@ @@ -15,15 +15,11 @@
15 */ 15 */
16 package org.thingsboard.server.dao; 16 package org.thingsboard.server.dao;
17 17
18 -import java.util.ArrayList;  
19 -import java.util.Collection;  
20 -import java.util.Collections;  
21 -import java.util.List;  
22 -import java.util.UUID;  
23 -  
24 import org.thingsboard.server.common.data.id.UUIDBased; 18 import org.thingsboard.server.common.data.id.UUIDBased;
25 import org.thingsboard.server.dao.model.ToData; 19 import org.thingsboard.server.dao.model.ToData;
26 20
  21 +import java.util.*;
  22 +
27 public abstract class DaoUtil { 23 public abstract class DaoUtil {
28 24
29 private DaoUtil() { 25 private DaoUtil() {
@@ -15,7 +15,6 @@ @@ -15,7 +15,6 @@
15 */ 15 */
16 package org.thingsboard.server.dao; 16 package org.thingsboard.server.dao;
17 17
18 -import com.google.common.base.CharMatcher;  
19 import lombok.extern.slf4j.Slf4j; 18 import lombok.extern.slf4j.Slf4j;
20 import org.bouncycastle.crypto.digests.SHA3Digest; 19 import org.bouncycastle.crypto.digests.SHA3Digest;
21 import org.bouncycastle.pqc.math.linearalgebra.ByteUtils; 20 import org.bouncycastle.pqc.math.linearalgebra.ByteUtils;
  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;
  17 +
  18 +import org.springframework.beans.factory.annotation.Value;
  19 +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
  20 +import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
  21 +import org.springframework.context.annotation.Configuration;
  22 +
  23 +import javax.sql.DataSource;
  24 +
  25 +/**
  26 + * @author Valerii Sosliuk
  27 + */
  28 +@Configuration
  29 +@ConditionalOnProperty(prefix="sql", value="enabled",havingValue = "true", matchIfMissing = false)
  30 +public class JpaDaoConfig {
  31 +
  32 + @Value("sql.datasource.url")
  33 + private String url;
  34 + @Value("sql.datasource.username")
  35 + private String username;
  36 + @Value("sql.datasource.password")
  37 + private String password;
  38 +
  39 + public DataSource dataSource() {
  40 + return DataSourceBuilder.create().url(url).username(username).password(password).build();
  41 + }
  42 +}
@@ -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.util.concurrent.ListenableFuture; 18 import com.google.common.util.concurrent.ListenableFuture;
21 import org.thingsboard.server.common.data.id.EntityId; 19 import org.thingsboard.server.common.data.id.EntityId;
22 import org.thingsboard.server.common.data.kv.AttributeKvEntry; 20 import org.thingsboard.server.common.data.kv.AttributeKvEntry;
@@ -15,12 +15,8 @@ @@ -15,12 +15,8 @@
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.util.concurrent.ListenableFuture; 18 import com.google.common.util.concurrent.ListenableFuture;
21 -import org.thingsboard.server.common.data.id.DeviceId;  
22 import org.thingsboard.server.common.data.id.EntityId; 19 import org.thingsboard.server.common.data.id.EntityId;
23 -import org.thingsboard.server.common.data.id.UUIDBased;  
24 import org.thingsboard.server.common.data.kv.AttributeKvEntry; 20 import org.thingsboard.server.common.data.kv.AttributeKvEntry;
25 21
26 import java.util.Collection; 22 import java.util.Collection;
@@ -15,16 +15,14 @@ @@ -15,16 +15,14 @@
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;
  21 +import org.springframework.beans.factory.annotation.Autowired;
  22 +import org.springframework.stereotype.Service;
23 import org.thingsboard.server.common.data.id.EntityId; 23 import org.thingsboard.server.common.data.id.EntityId;
24 import org.thingsboard.server.common.data.kv.AttributeKvEntry; 24 import org.thingsboard.server.common.data.kv.AttributeKvEntry;
25 import org.thingsboard.server.dao.exception.IncorrectParameterException; 25 import org.thingsboard.server.dao.exception.IncorrectParameterException;
26 -import org.springframework.beans.factory.annotation.Autowired;  
27 -import org.springframework.stereotype.Service;  
28 import org.thingsboard.server.dao.service.Validator; 26 import org.thingsboard.server.dao.service.Validator;
29 27
30 import java.util.Collection; 28 import java.util.Collection;
dao/src/main/java/org/thingsboard/server/dao/attributes/CassandraBaseAttributesDao.java renamed from dao/src/main/java/org/thingsboard/server/dao/attributes/BaseAttributesDao.java
@@ -24,10 +24,11 @@ import com.google.common.util.concurrent.ListenableFuture; @@ -24,10 +24,11 @@ import com.google.common.util.concurrent.ListenableFuture;
24 import lombok.extern.slf4j.Slf4j; 24 import lombok.extern.slf4j.Slf4j;
25 import org.springframework.stereotype.Component; 25 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.dao.AbstractAsyncDao; 27 +import org.thingsboard.server.common.data.kv.AttributeKvEntry;
  28 +import org.thingsboard.server.common.data.kv.BaseAttributeKvEntry;
  29 +import org.thingsboard.server.dao.CassandraAbstractAsyncDao;
28 import org.thingsboard.server.dao.model.ModelConstants; 30 import org.thingsboard.server.dao.model.ModelConstants;
29 -import org.thingsboard.server.common.data.kv.*;  
30 -import org.thingsboard.server.dao.timeseries.BaseTimeseriesDao; 31 +import org.thingsboard.server.dao.timeseries.CassandraBaseTimeseriesDao;
31 32
32 import javax.annotation.PostConstruct; 33 import javax.annotation.PostConstruct;
33 import javax.annotation.PreDestroy; 34 import javax.annotation.PreDestroy;
@@ -37,15 +38,16 @@ import java.util.List; @@ -37,15 +38,16 @@ import java.util.List;
37 import java.util.Optional; 38 import java.util.Optional;
38 import java.util.stream.Collectors; 39 import java.util.stream.Collectors;
39 40
  41 +import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;
  42 +import static com.datastax.driver.core.querybuilder.QueryBuilder.select;
40 import static org.thingsboard.server.dao.model.ModelConstants.*; 43 import static org.thingsboard.server.dao.model.ModelConstants.*;
41 -import static com.datastax.driver.core.querybuilder.QueryBuilder.*;  
42 44
43 /** 45 /**
44 * @author Andrew Shvayka 46 * @author Andrew Shvayka
45 */ 47 */
46 @Component 48 @Component
47 @Slf4j 49 @Slf4j
48 -public class BaseAttributesDao extends AbstractAsyncDao implements AttributesDao { 50 +public class CassandraBaseAttributesDao extends CassandraAbstractAsyncDao implements AttributesDao {
49 51
50 private PreparedStatement saveStmt; 52 private PreparedStatement saveStmt;
51 53
@@ -161,7 +163,7 @@ public class BaseAttributesDao extends AbstractAsyncDao implements AttributesDao @@ -161,7 +163,7 @@ public class BaseAttributesDao extends AbstractAsyncDao implements AttributesDao
161 AttributeKvEntry attributeEntry = null; 163 AttributeKvEntry attributeEntry = null;
162 if (row != null) { 164 if (row != null) {
163 long lastUpdateTs = row.get(LAST_UPDATE_TS_COLUMN, Long.class); 165 long lastUpdateTs = row.get(LAST_UPDATE_TS_COLUMN, Long.class);
164 - attributeEntry = new BaseAttributeKvEntry(BaseTimeseriesDao.toKvEntry(row, key), lastUpdateTs); 166 + attributeEntry = new BaseAttributeKvEntry(CassandraBaseTimeseriesDao.toKvEntry(row, key), lastUpdateTs);
165 } 167 }
166 return attributeEntry; 168 return attributeEntry;
167 } 169 }
@@ -16,13 +16,8 @@ @@ -16,13 +16,8 @@
16 package org.thingsboard.server.dao.cassandra; 16 package org.thingsboard.server.dao.cassandra;
17 17
18 18
19 -import com.datastax.driver.core.Cluster;  
20 -import com.datastax.driver.core.ConsistencyLevel;  
21 -import com.datastax.driver.core.HostDistance;  
22 -import com.datastax.driver.core.PoolingOptions; 19 +import com.datastax.driver.core.*;
23 import com.datastax.driver.core.ProtocolOptions.Compression; 20 import com.datastax.driver.core.ProtocolOptions.Compression;
24 -import com.datastax.driver.core.Session;  
25 -import com.datastax.driver.core.exceptions.NoHostAvailableException;  
26 import com.datastax.driver.mapping.Mapper; 21 import com.datastax.driver.mapping.Mapper;
27 import com.datastax.driver.mapping.MappingManager; 22 import com.datastax.driver.mapping.MappingManager;
28 import lombok.Data; 23 import lombok.Data;
@@ -31,16 +26,13 @@ import org.apache.commons.lang3.StringUtils; @@ -31,16 +26,13 @@ import org.apache.commons.lang3.StringUtils;
31 import org.springframework.beans.factory.annotation.Autowired; 26 import org.springframework.beans.factory.annotation.Autowired;
32 import org.springframework.beans.factory.annotation.Value; 27 import org.springframework.beans.factory.annotation.Value;
33 import org.springframework.stereotype.Component; 28 import org.springframework.stereotype.Component;
34 -import org.thingsboard.server.dao.exception.DatabaseException;  
35 29
36 import javax.annotation.PostConstruct; 30 import javax.annotation.PostConstruct;
37 import javax.annotation.PreDestroy; 31 import javax.annotation.PreDestroy;
38 -import java.io.Closeable;  
39 import java.net.InetSocketAddress; 32 import java.net.InetSocketAddress;
40 import java.util.ArrayList; 33 import java.util.ArrayList;
41 import java.util.Collections; 34 import java.util.Collections;
42 import java.util.List; 35 import java.util.List;
43 -import java.util.StringTokenizer;  
44 36
45 @Component 37 @Component
46 @Slf4j 38 @Slf4j
@@ -21,12 +21,9 @@ import lombok.Data; @@ -21,12 +21,9 @@ import lombok.Data;
21 import org.springframework.beans.factory.annotation.Value; 21 import org.springframework.beans.factory.annotation.Value;
22 import org.springframework.context.annotation.Configuration; 22 import org.springframework.context.annotation.Configuration;
23 import org.springframework.stereotype.Component; 23 import org.springframework.stereotype.Component;
24 -import org.springframework.util.StringUtils;  
25 24
26 import javax.annotation.PostConstruct; 25 import javax.annotation.PostConstruct;
27 26
28 -import static org.apache.commons.lang3.StringUtils.isNotBlank;  
29 -  
30 @Component 27 @Component
31 @Configuration 28 @Configuration
32 @Data 29 @Data
@@ -15,13 +15,12 @@ @@ -15,13 +15,12 @@
15 */ 15 */
16 package org.thingsboard.server.dao.cassandra; 16 package org.thingsboard.server.dao.cassandra;
17 17
  18 +import com.datastax.driver.core.SocketOptions;
18 import lombok.Data; 19 import lombok.Data;
19 import org.springframework.beans.factory.annotation.Value; 20 import org.springframework.beans.factory.annotation.Value;
20 import org.springframework.context.annotation.Configuration; 21 import org.springframework.context.annotation.Configuration;
21 import org.springframework.stereotype.Component; 22 import org.springframework.stereotype.Component;
22 23
23 -import com.datastax.driver.core.SocketOptions;  
24 -  
25 import javax.annotation.PostConstruct; 24 import javax.annotation.PostConstruct;
26 25
27 @Component 26 @Component
@@ -32,16 +32,12 @@ import org.thingsboard.server.common.data.plugin.ComponentScope; @@ -32,16 +32,12 @@ import org.thingsboard.server.common.data.plugin.ComponentScope;
32 import org.thingsboard.server.common.data.plugin.ComponentType; 32 import org.thingsboard.server.common.data.plugin.ComponentType;
33 import org.thingsboard.server.dao.exception.DataValidationException; 33 import org.thingsboard.server.dao.exception.DataValidationException;
34 import org.thingsboard.server.dao.exception.IncorrectParameterException; 34 import org.thingsboard.server.dao.exception.IncorrectParameterException;
35 -import org.thingsboard.server.dao.model.ComponentDescriptorEntity;  
36 import org.thingsboard.server.dao.service.DataValidator; 35 import org.thingsboard.server.dao.service.DataValidator;
37 import org.thingsboard.server.dao.service.Validator; 36 import org.thingsboard.server.dao.service.Validator;
38 37
39 import java.util.List; 38 import java.util.List;
40 import java.util.Optional; 39 import java.util.Optional;
41 40
42 -import static org.thingsboard.server.dao.DaoUtil.convertDataList;  
43 -import static org.thingsboard.server.dao.DaoUtil.getData;  
44 -  
45 /** 41 /**
46 * @author Andrew Shvayka 42 * @author Andrew Shvayka
47 */ 43 */
@@ -55,39 +51,37 @@ public class BaseComponentDescriptorService implements ComponentDescriptorServic @@ -55,39 +51,37 @@ public class BaseComponentDescriptorService implements ComponentDescriptorServic
55 @Override 51 @Override
56 public ComponentDescriptor saveComponent(ComponentDescriptor component) { 52 public ComponentDescriptor saveComponent(ComponentDescriptor component) {
57 componentValidator.validate(component); 53 componentValidator.validate(component);
58 - Optional<ComponentDescriptorEntity> result = componentDescriptorDao.save(component); 54 + Optional<ComponentDescriptor> result = componentDescriptorDao.saveIfNotExist(component);
59 if (result.isPresent()) { 55 if (result.isPresent()) {
60 - return getData(result.get()); 56 + return result.get();
61 } else { 57 } else {
62 - return getData(componentDescriptorDao.findByClazz(component.getClazz())); 58 + return componentDescriptorDao.findByClazz(component.getClazz());
63 } 59 }
64 } 60 }
65 61
66 @Override 62 @Override
67 public ComponentDescriptor findById(ComponentDescriptorId componentId) { 63 public ComponentDescriptor findById(ComponentDescriptorId componentId) {
68 Validator.validateId(componentId, "Incorrect component id for search request."); 64 Validator.validateId(componentId, "Incorrect component id for search request.");
69 - return getData(componentDescriptorDao.findById(componentId)); 65 + return componentDescriptorDao.findById(componentId);
70 } 66 }
71 67
72 @Override 68 @Override
73 public ComponentDescriptor findByClazz(String clazz) { 69 public ComponentDescriptor findByClazz(String clazz) {
74 Validator.validateString(clazz, "Incorrect clazz for search request."); 70 Validator.validateString(clazz, "Incorrect clazz for search request.");
75 - return getData(componentDescriptorDao.findByClazz(clazz)); 71 + return componentDescriptorDao.findByClazz(clazz);
76 } 72 }
77 73
78 @Override 74 @Override
79 public TextPageData<ComponentDescriptor> findByTypeAndPageLink(ComponentType type, TextPageLink pageLink) { 75 public TextPageData<ComponentDescriptor> findByTypeAndPageLink(ComponentType type, TextPageLink pageLink) {
80 Validator.validatePageLink(pageLink, "Incorrect PageLink object for search plugin components request."); 76 Validator.validatePageLink(pageLink, "Incorrect PageLink object for search plugin components request.");
81 - List<ComponentDescriptorEntity> pluginEntities = componentDescriptorDao.findByTypeAndPageLink(type, pageLink);  
82 - List<ComponentDescriptor> components = convertDataList(pluginEntities); 77 + List<ComponentDescriptor> components = componentDescriptorDao.findByTypeAndPageLink(type, pageLink);
83 return new TextPageData<>(components, pageLink); 78 return new TextPageData<>(components, pageLink);
84 } 79 }
85 80
86 @Override 81 @Override
87 public TextPageData<ComponentDescriptor> findByScopeAndTypeAndPageLink(ComponentScope scope, ComponentType type, TextPageLink pageLink) { 82 public TextPageData<ComponentDescriptor> findByScopeAndTypeAndPageLink(ComponentScope scope, ComponentType type, TextPageLink pageLink) {
88 Validator.validatePageLink(pageLink, "Incorrect PageLink object for search plugin components request."); 83 Validator.validatePageLink(pageLink, "Incorrect PageLink object for search plugin components request.");
89 - List<ComponentDescriptorEntity> pluginEntities = componentDescriptorDao.findByScopeAndTypeAndPageLink(scope, type, pageLink);  
90 - List<ComponentDescriptor> components = convertDataList(pluginEntities); 84 + List<ComponentDescriptor> components = componentDescriptorDao.findByScopeAndTypeAndPageLink(scope, type, pageLink);
91 return new TextPageData<>(components, pageLink); 85 return new TextPageData<>(components, pageLink);
92 } 86 }
93 87
dao/src/main/java/org/thingsboard/server/dao/component/CassandraBaseComponentDescriptorDao.java renamed from dao/src/main/java/org/thingsboard/server/dao/component/BaseComponentDescriptorDao.java
@@ -27,9 +27,10 @@ import org.thingsboard.server.common.data.page.TextPageLink; @@ -27,9 +27,10 @@ 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.AbstractSearchTextDao; 30 +import org.thingsboard.server.dao.CassandraAbstractSearchTextDao;
  31 +import org.thingsboard.server.dao.DaoUtil;
  32 +import org.thingsboard.server.dao.model.nosql.ComponentDescriptorEntity;
31 import org.thingsboard.server.dao.model.ModelConstants; 33 import org.thingsboard.server.dao.model.ModelConstants;
32 -import org.thingsboard.server.dao.model.ComponentDescriptorEntity;  
33 34
34 import java.util.Arrays; 35 import java.util.Arrays;
35 import java.util.List; 36 import java.util.List;
@@ -44,7 +45,7 @@ import static com.datastax.driver.core.querybuilder.QueryBuilder.select; @@ -44,7 +45,7 @@ import static com.datastax.driver.core.querybuilder.QueryBuilder.select;
44 */ 45 */
45 @Component 46 @Component
46 @Slf4j 47 @Slf4j
47 -public class BaseComponentDescriptorDao extends AbstractSearchTextDao<ComponentDescriptorEntity> implements ComponentDescriptorDao { 48 +public class CassandraBaseComponentDescriptorDao extends CassandraAbstractSearchTextDao<ComponentDescriptorEntity, ComponentDescriptor> implements ComponentDescriptorDao {
48 49
49 @Override 50 @Override
50 protected Class<ComponentDescriptorEntity> getColumnFamilyClass() { 51 protected Class<ComponentDescriptorEntity> getColumnFamilyClass() {
@@ -57,10 +58,10 @@ public class BaseComponentDescriptorDao extends AbstractSearchTextDao<ComponentD @@ -57,10 +58,10 @@ public class BaseComponentDescriptorDao extends AbstractSearchTextDao<ComponentD
57 } 58 }
58 59
59 @Override 60 @Override
60 - public Optional<ComponentDescriptorEntity> save(ComponentDescriptor component) { 61 + public Optional<ComponentDescriptor> saveIfNotExist(ComponentDescriptor component) {
61 ComponentDescriptorEntity entity = new ComponentDescriptorEntity(component); 62 ComponentDescriptorEntity entity = new ComponentDescriptorEntity(component);
62 log.debug("Save component entity [{}]", entity); 63 log.debug("Save component entity [{}]", entity);
63 - Optional<ComponentDescriptorEntity> result = saveIfNotExist(entity); 64 + Optional<ComponentDescriptor> result = saveIfNotExist(entity);
64 if (log.isTraceEnabled()) { 65 if (log.isTraceEnabled()) {
65 log.trace("Saved result: [{}] for component entity [{}]", result.isPresent(), result.orElse(null)); 66 log.trace("Saved result: [{}] for component entity [{}]", result.isPresent(), result.orElse(null));
66 } else { 67 } else {
@@ -70,19 +71,19 @@ public class BaseComponentDescriptorDao extends AbstractSearchTextDao<ComponentD @@ -70,19 +71,19 @@ public class BaseComponentDescriptorDao extends AbstractSearchTextDao<ComponentD
70 } 71 }
71 72
72 @Override 73 @Override
73 - public ComponentDescriptorEntity findById(ComponentDescriptorId componentId) { 74 + public ComponentDescriptor findById(ComponentDescriptorId componentId) {
74 log.debug("Search component entity by id [{}]", componentId); 75 log.debug("Search component entity by id [{}]", componentId);
75 - ComponentDescriptorEntity entity = super.findById(componentId.getId()); 76 + ComponentDescriptor componentDescriptor = super.findById(componentId.getId());
76 if (log.isTraceEnabled()) { 77 if (log.isTraceEnabled()) {
77 - log.trace("Search result: [{}] for component entity [{}]", entity != null, entity); 78 + log.trace("Search result: [{}] for component entity [{}]", componentDescriptor != null, componentDescriptor);
78 } else { 79 } else {
79 - log.debug("Search result: [{}]", entity != null); 80 + log.debug("Search result: [{}]", componentDescriptor != null);
80 } 81 }
81 - return entity; 82 + return componentDescriptor;
82 } 83 }
83 84
84 @Override 85 @Override
85 - public ComponentDescriptorEntity findByClazz(String clazz) { 86 + public ComponentDescriptor findByClazz(String clazz) {
86 log.debug("Search component entity by clazz [{}]", clazz); 87 log.debug("Search component entity by clazz [{}]", clazz);
87 Select.Where query = select().from(getColumnFamilyName()).where(eq(ModelConstants.COMPONENT_DESCRIPTOR_CLASS_PROPERTY, clazz)); 88 Select.Where query = select().from(getColumnFamilyName()).where(eq(ModelConstants.COMPONENT_DESCRIPTOR_CLASS_PROPERTY, clazz));
88 log.trace("Execute query [{}]", query); 89 log.trace("Execute query [{}]", query);
@@ -92,11 +93,11 @@ public class BaseComponentDescriptorDao extends AbstractSearchTextDao<ComponentD @@ -92,11 +93,11 @@ public class BaseComponentDescriptorDao extends AbstractSearchTextDao<ComponentD
92 } else { 93 } else {
93 log.debug("Search result: [{}]", entity != null); 94 log.debug("Search result: [{}]", entity != null);
94 } 95 }
95 - return entity; 96 + return DaoUtil.getData(entity);
96 } 97 }
97 98
98 @Override 99 @Override
99 - public List<ComponentDescriptorEntity> findByTypeAndPageLink(ComponentType type, TextPageLink pageLink) { 100 + public List<ComponentDescriptor> findByTypeAndPageLink(ComponentType type, TextPageLink pageLink) {
100 log.debug("Try to find component by type [{}] and pageLink [{}]", type, pageLink); 101 log.debug("Try to find component by type [{}] and pageLink [{}]", type, pageLink);
101 List<ComponentDescriptorEntity> entities = findPageWithTextSearch(ModelConstants.COMPONENT_DESCRIPTOR_BY_TYPE_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME, 102 List<ComponentDescriptorEntity> entities = findPageWithTextSearch(ModelConstants.COMPONENT_DESCRIPTOR_BY_TYPE_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME,
102 Arrays.asList(eq(ModelConstants.COMPONENT_DESCRIPTOR_TYPE_PROPERTY, type.name())), pageLink); 103 Arrays.asList(eq(ModelConstants.COMPONENT_DESCRIPTOR_TYPE_PROPERTY, type.name())), pageLink);
@@ -105,11 +106,11 @@ public class BaseComponentDescriptorDao extends AbstractSearchTextDao<ComponentD @@ -105,11 +106,11 @@ public class BaseComponentDescriptorDao extends AbstractSearchTextDao<ComponentD
105 } else { 106 } else {
106 log.debug("Search result: [{}]", entities.size()); 107 log.debug("Search result: [{}]", entities.size());
107 } 108 }
108 - return entities; 109 + return DaoUtil.convertDataList(entities);
109 } 110 }
110 111
111 @Override 112 @Override
112 - public List<ComponentDescriptorEntity> findByScopeAndTypeAndPageLink(ComponentScope scope, ComponentType type, TextPageLink pageLink) { 113 + public List<ComponentDescriptor> findByScopeAndTypeAndPageLink(ComponentScope scope, ComponentType type, TextPageLink pageLink) {
113 log.debug("Try to find component by scope [{}] and type [{}] and pageLink [{}]", scope, type, pageLink); 114 log.debug("Try to find component by scope [{}] and type [{}] and pageLink [{}]", scope, type, pageLink);
114 List<ComponentDescriptorEntity> entities = findPageWithTextSearch(ModelConstants.COMPONENT_DESCRIPTOR_BY_SCOPE_TYPE_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME, 115 List<ComponentDescriptorEntity> entities = findPageWithTextSearch(ModelConstants.COMPONENT_DESCRIPTOR_BY_SCOPE_TYPE_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME,
115 Arrays.asList(eq(ModelConstants.COMPONENT_DESCRIPTOR_TYPE_PROPERTY, type.name()), 116 Arrays.asList(eq(ModelConstants.COMPONENT_DESCRIPTOR_TYPE_PROPERTY, type.name()),
@@ -119,20 +120,20 @@ public class BaseComponentDescriptorDao extends AbstractSearchTextDao<ComponentD @@ -119,20 +120,20 @@ public class BaseComponentDescriptorDao extends AbstractSearchTextDao<ComponentD
119 } else { 120 } else {
120 log.debug("Search result: [{}]", entities.size()); 121 log.debug("Search result: [{}]", entities.size());
121 } 122 }
122 - return entities; 123 + return DaoUtil.convertDataList(entities);
123 } 124 }
124 125
125 - public ResultSet removeById(UUID key) { 126 + public boolean removeById(UUID key) {
126 Statement delete = QueryBuilder.delete().all().from(ModelConstants.COMPONENT_DESCRIPTOR_BY_ID).where(eq(ModelConstants.ID_PROPERTY, key)); 127 Statement delete = QueryBuilder.delete().all().from(ModelConstants.COMPONENT_DESCRIPTOR_BY_ID).where(eq(ModelConstants.ID_PROPERTY, key));
127 log.debug("Remove request: {}", delete.toString()); 128 log.debug("Remove request: {}", delete.toString());
128 - return getSession().execute(delete); 129 + return getSession().execute(delete).wasApplied();
129 } 130 }
130 131
131 @Override 132 @Override
132 public void deleteById(ComponentDescriptorId id) { 133 public void deleteById(ComponentDescriptorId id) {
133 log.debug("Delete plugin meta-data entity by id [{}]", id); 134 log.debug("Delete plugin meta-data entity by id [{}]", id);
134 - ResultSet resultSet = removeById(id.getId());  
135 - log.debug("Delete result: [{}]", resultSet.wasApplied()); 135 + boolean result = removeById(id.getId());
  136 + log.debug("Delete result: [{}]", result);
136 } 137 }
137 138
138 @Override 139 @Override
@@ -144,7 +145,7 @@ public class BaseComponentDescriptorDao extends AbstractSearchTextDao<ComponentD @@ -144,7 +145,7 @@ public class BaseComponentDescriptorDao extends AbstractSearchTextDao<ComponentD
144 log.debug("Delete result: [{}]", resultSet.wasApplied()); 145 log.debug("Delete result: [{}]", resultSet.wasApplied());
145 } 146 }
146 147
147 - private Optional<ComponentDescriptorEntity> saveIfNotExist(ComponentDescriptorEntity entity) { 148 + private Optional<ComponentDescriptor> saveIfNotExist(ComponentDescriptorEntity entity) {
148 if (entity.getId() == null) { 149 if (entity.getId() == null) {
149 entity.setId(UUIDs.timeBased()); 150 entity.setId(UUIDs.timeBased());
150 } 151 }
@@ -161,7 +162,7 @@ public class BaseComponentDescriptorDao extends AbstractSearchTextDao<ComponentD @@ -161,7 +162,7 @@ public class BaseComponentDescriptorDao extends AbstractSearchTextDao<ComponentD
161 .ifNotExists() 162 .ifNotExists()
162 ); 163 );
163 if (rs.wasApplied()) { 164 if (rs.wasApplied()) {
164 - return Optional.of(entity); 165 + return Optional.of(DaoUtil.getData(entity));
165 } else { 166 } else {
166 return Optional.empty(); 167 return Optional.empty();
167 } 168 }
@@ -21,7 +21,6 @@ import org.thingsboard.server.common.data.plugin.ComponentDescriptor; @@ -21,7 +21,6 @@ import org.thingsboard.server.common.data.plugin.ComponentDescriptor;
21 import org.thingsboard.server.common.data.plugin.ComponentScope; 21 import org.thingsboard.server.common.data.plugin.ComponentScope;
22 import org.thingsboard.server.common.data.plugin.ComponentType; 22 import org.thingsboard.server.common.data.plugin.ComponentType;
23 import org.thingsboard.server.dao.Dao; 23 import org.thingsboard.server.dao.Dao;
24 -import org.thingsboard.server.dao.model.ComponentDescriptorEntity;  
25 24
26 import java.util.List; 25 import java.util.List;
27 import java.util.Optional; 26 import java.util.Optional;
@@ -29,17 +28,17 @@ import java.util.Optional; @@ -29,17 +28,17 @@ import java.util.Optional;
29 /** 28 /**
30 * @author Andrew Shvayka 29 * @author Andrew Shvayka
31 */ 30 */
32 -public interface ComponentDescriptorDao extends Dao<ComponentDescriptorEntity> { 31 +public interface ComponentDescriptorDao extends Dao<ComponentDescriptor> {
33 32
34 - Optional<ComponentDescriptorEntity> save(ComponentDescriptor component); 33 + Optional<ComponentDescriptor> saveIfNotExist(ComponentDescriptor component);
35 34
36 - ComponentDescriptorEntity findById(ComponentDescriptorId componentId); 35 + ComponentDescriptor findById(ComponentDescriptorId componentId);
37 36
38 - ComponentDescriptorEntity findByClazz(String clazz); 37 + ComponentDescriptor findByClazz(String clazz);
39 38
40 - List<ComponentDescriptorEntity> findByTypeAndPageLink(ComponentType type, TextPageLink pageLink); 39 + List<ComponentDescriptor> findByTypeAndPageLink(ComponentType type, TextPageLink pageLink);
41 40
42 - List<ComponentDescriptorEntity> findByScopeAndTypeAndPageLink(ComponentScope scope, ComponentType type, TextPageLink pageLink); 41 + List<ComponentDescriptor> findByScopeAndTypeAndPageLink(ComponentScope scope, ComponentType type, TextPageLink pageLink);
43 42
44 void deleteById(ComponentDescriptorId componentId); 43 void deleteById(ComponentDescriptorId componentId);
45 44
dao/src/main/java/org/thingsboard/server/dao/customer/CassandraCustomerDao.java renamed from dao/src/main/java/org/thingsboard/server/dao/customer/CustomerDaoImpl.java
@@ -15,24 +15,23 @@ @@ -15,24 +15,23 @@
15 */ 15 */
16 package org.thingsboard.server.dao.customer; 16 package org.thingsboard.server.dao.customer;
17 17
18 -import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;  
19 -  
20 -import java.util.Arrays;  
21 -import java.util.List;  
22 -import java.util.UUID;  
23 -  
24 import lombok.extern.slf4j.Slf4j; 18 import lombok.extern.slf4j.Slf4j;
25 import org.springframework.stereotype.Component; 19 import org.springframework.stereotype.Component;
26 import org.thingsboard.server.common.data.Customer; 20 import org.thingsboard.server.common.data.Customer;
27 import org.thingsboard.server.common.data.page.TextPageLink; 21 import org.thingsboard.server.common.data.page.TextPageLink;
28 -import org.thingsboard.server.dao.AbstractSearchTextDao;  
29 -import org.thingsboard.server.dao.model.CustomerEntity;  
30 -import org.slf4j.Logger;  
31 -import org.slf4j.LoggerFactory; 22 +import org.thingsboard.server.dao.CassandraAbstractSearchTextDao;
  23 +import org.thingsboard.server.dao.DaoUtil;
  24 +import org.thingsboard.server.dao.model.nosql.CustomerEntity;
32 import org.thingsboard.server.dao.model.ModelConstants; 25 import org.thingsboard.server.dao.model.ModelConstants;
  26 +
  27 +import java.util.Arrays;
  28 +import java.util.List;
  29 +import java.util.UUID;
  30 +
  31 +import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;
33 @Component 32 @Component
34 @Slf4j 33 @Slf4j
35 -public class CustomerDaoImpl extends AbstractSearchTextDao<CustomerEntity> implements CustomerDao { 34 +public class CassandraCustomerDao extends CassandraAbstractSearchTextDao<CustomerEntity, Customer> implements CustomerDao {
36 35
37 @Override 36 @Override
38 protected Class<CustomerEntity> getColumnFamilyClass() { 37 protected Class<CustomerEntity> getColumnFamilyClass() {
@@ -43,21 +42,15 @@ public class CustomerDaoImpl extends AbstractSearchTextDao<CustomerEntity> imple @@ -43,21 +42,15 @@ public class CustomerDaoImpl extends AbstractSearchTextDao<CustomerEntity> imple
43 protected String getColumnFamilyName() { 42 protected String getColumnFamilyName() {
44 return ModelConstants.CUSTOMER_COLUMN_FAMILY_NAME; 43 return ModelConstants.CUSTOMER_COLUMN_FAMILY_NAME;
45 } 44 }
46 -  
47 - @Override  
48 - public CustomerEntity save(Customer customer) {  
49 - log.debug("Save customer [{}] ", customer);  
50 - return save(new CustomerEntity(customer));  
51 - }  
52 45
53 @Override 46 @Override
54 - public List<CustomerEntity> findCustomersByTenantId(UUID tenantId, TextPageLink pageLink) { 47 + public List<Customer> findCustomersByTenantId(UUID tenantId, TextPageLink pageLink) {
55 log.debug("Try to find customers by tenantId [{}] and pageLink [{}]", tenantId, pageLink); 48 log.debug("Try to find customers by tenantId [{}] and pageLink [{}]", tenantId, pageLink);
56 List<CustomerEntity> customerEntities = findPageWithTextSearch(ModelConstants.CUSTOMER_BY_TENANT_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME, 49 List<CustomerEntity> customerEntities = findPageWithTextSearch(ModelConstants.CUSTOMER_BY_TENANT_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME,
57 Arrays.asList(eq(ModelConstants.CUSTOMER_TENANT_ID_PROPERTY, tenantId)), 50 Arrays.asList(eq(ModelConstants.CUSTOMER_TENANT_ID_PROPERTY, tenantId)),
58 pageLink); 51 pageLink);
59 log.trace("Found customers [{}] by tenantId [{}] and pageLink [{}]", customerEntities, tenantId, pageLink); 52 log.trace("Found customers [{}] by tenantId [{}] and pageLink [{}]", customerEntities, tenantId, pageLink);
60 - return customerEntities; 53 + return DaoUtil.convertDataList(customerEntities);
61 } 54 }
62 55
63 } 56 }
@@ -15,18 +15,17 @@ @@ -15,18 +15,17 @@
15 */ 15 */
16 package org.thingsboard.server.dao.customer; 16 package org.thingsboard.server.dao.customer;
17 17
18 -import java.util.List;  
19 -import java.util.UUID;  
20 -  
21 import org.thingsboard.server.common.data.Customer; 18 import org.thingsboard.server.common.data.Customer;
22 import org.thingsboard.server.common.data.page.TextPageLink; 19 import org.thingsboard.server.common.data.page.TextPageLink;
23 import org.thingsboard.server.dao.Dao; 20 import org.thingsboard.server.dao.Dao;
24 -import org.thingsboard.server.dao.model.CustomerEntity; 21 +
  22 +import java.util.List;
  23 +import java.util.UUID;
25 24
26 /** 25 /**
27 * The Interface CustomerDao. 26 * The Interface CustomerDao.
28 */ 27 */
29 -public interface CustomerDao extends Dao<CustomerEntity> { 28 +public interface CustomerDao extends Dao<Customer> {
30 29
31 /** 30 /**
32 * Save or update customer object 31 * Save or update customer object
@@ -34,7 +33,7 @@ public interface CustomerDao extends Dao<CustomerEntity> { @@ -34,7 +33,7 @@ public interface CustomerDao extends Dao<CustomerEntity> {
34 * @param customer the customer object 33 * @param customer the customer object
35 * @return saved customer object 34 * @return saved customer object
36 */ 35 */
37 - CustomerEntity save(Customer customer); 36 + Customer save(Customer customer);
38 37
39 /** 38 /**
40 * Find customers by tenant id and page link. 39 * Find customers by tenant id and page link.
@@ -43,6 +42,6 @@ public interface CustomerDao extends Dao<CustomerEntity> { @@ -43,6 +42,6 @@ public interface CustomerDao extends Dao<CustomerEntity> {
43 * @param pageLink the page link 42 * @param pageLink the page link
44 * @return the list of customer objects 43 * @return the list of customer objects
45 */ 44 */
46 - List<CustomerEntity> findCustomersByTenantId(UUID tenantId, TextPageLink pageLink); 45 + List<Customer> findCustomersByTenantId(UUID tenantId, TextPageLink pageLink);
47 46
48 } 47 }
@@ -23,14 +23,14 @@ import org.thingsboard.server.common.data.page.TextPageLink; @@ -23,14 +23,14 @@ import org.thingsboard.server.common.data.page.TextPageLink;
23 23
24 public interface CustomerService { 24 public interface CustomerService {
25 25
26 - public Customer findCustomerById(CustomerId customerId); 26 + Customer findCustomerById(CustomerId customerId);
27 27
28 - public Customer saveCustomer(Customer customer); 28 + Customer saveCustomer(Customer customer);
29 29
30 - public void deleteCustomer(CustomerId customerId); 30 + void deleteCustomer(CustomerId customerId);
31 31
32 - public TextPageData<Customer> findCustomersByTenantId(TenantId tenantId, TextPageLink pageLink); 32 + TextPageData<Customer> findCustomersByTenantId(TenantId tenantId, TextPageLink pageLink);
33 33
34 - public void deleteCustomersByTenantId(TenantId tenantId); 34 + void deleteCustomersByTenantId(TenantId tenantId);
35 35
36 } 36 }
@@ -15,14 +15,12 @@ @@ -15,14 +15,12 @@
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.DaoUtil.convertDataList;  
19 -import static org.thingsboard.server.dao.DaoUtil.getData;  
20 -  
21 -import java.util.List;  
22 -  
23 import lombok.extern.slf4j.Slf4j; 18 import lombok.extern.slf4j.Slf4j;
24 import org.apache.commons.lang3.StringUtils; 19 import org.apache.commons.lang3.StringUtils;
  20 +import org.springframework.beans.factory.annotation.Autowired;
  21 +import org.springframework.stereotype.Service;
25 import org.thingsboard.server.common.data.Customer; 22 import org.thingsboard.server.common.data.Customer;
  23 +import org.thingsboard.server.common.data.Tenant;
26 import org.thingsboard.server.common.data.id.CustomerId; 24 import org.thingsboard.server.common.data.id.CustomerId;
27 import org.thingsboard.server.common.data.id.TenantId; 25 import org.thingsboard.server.common.data.id.TenantId;
28 import org.thingsboard.server.common.data.page.TextPageData; 26 import org.thingsboard.server.common.data.page.TextPageData;
@@ -31,17 +29,13 @@ import org.thingsboard.server.dao.dashboard.DashboardService; @@ -31,17 +29,13 @@ import org.thingsboard.server.dao.dashboard.DashboardService;
31 import org.thingsboard.server.dao.device.DeviceService; 29 import org.thingsboard.server.dao.device.DeviceService;
32 import org.thingsboard.server.dao.exception.DataValidationException; 30 import org.thingsboard.server.dao.exception.DataValidationException;
33 import org.thingsboard.server.dao.exception.IncorrectParameterException; 31 import org.thingsboard.server.dao.exception.IncorrectParameterException;
34 -import org.thingsboard.server.dao.model.CustomerEntity;  
35 -import org.thingsboard.server.dao.model.TenantEntity;  
36 import org.thingsboard.server.dao.service.DataValidator; 32 import org.thingsboard.server.dao.service.DataValidator;
37 import org.thingsboard.server.dao.service.PaginatedRemover; 33 import org.thingsboard.server.dao.service.PaginatedRemover;
  34 +import org.thingsboard.server.dao.service.Validator;
38 import org.thingsboard.server.dao.tenant.TenantDao; 35 import org.thingsboard.server.dao.tenant.TenantDao;
39 import org.thingsboard.server.dao.user.UserService; 36 import org.thingsboard.server.dao.user.UserService;
40 -import org.slf4j.Logger;  
41 -import org.slf4j.LoggerFactory;  
42 -import org.springframework.beans.factory.annotation.Autowired;  
43 -import org.springframework.stereotype.Service;  
44 -import org.thingsboard.server.dao.service.Validator; 37 +
  38 +import java.util.List;
45 @Service 39 @Service
46 @Slf4j 40 @Slf4j
47 public class CustomerServiceImpl implements CustomerService { 41 public class CustomerServiceImpl implements CustomerService {
@@ -65,16 +59,14 @@ public class CustomerServiceImpl implements CustomerService { @@ -65,16 +59,14 @@ public class CustomerServiceImpl implements CustomerService {
65 public Customer findCustomerById(CustomerId customerId) { 59 public Customer findCustomerById(CustomerId customerId) {
66 log.trace("Executing findCustomerById [{}]", customerId); 60 log.trace("Executing findCustomerById [{}]", customerId);
67 Validator.validateId(customerId, "Incorrect customerId " + customerId); 61 Validator.validateId(customerId, "Incorrect customerId " + customerId);
68 - CustomerEntity customerEntity = customerDao.findById(customerId.getId());  
69 - return getData(customerEntity); 62 + return customerDao.findById(customerId.getId());
70 } 63 }
71 64
72 @Override 65 @Override
73 public Customer saveCustomer(Customer customer) { 66 public Customer saveCustomer(Customer customer) {
74 log.trace("Executing saveCustomer [{}]", customer); 67 log.trace("Executing saveCustomer [{}]", customer);
75 customerValidator.validate(customer); 68 customerValidator.validate(customer);
76 - CustomerEntity customerEntity = customerDao.save(customer);  
77 - return getData(customerEntity); 69 + return customerDao.save(customer);
78 } 70 }
79 71
80 @Override 72 @Override
@@ -96,8 +88,7 @@ public class CustomerServiceImpl implements CustomerService { @@ -96,8 +88,7 @@ public class CustomerServiceImpl implements CustomerService {
96 log.trace("Executing findCustomersByTenantId, tenantId [{}], pageLink [{}]", tenantId, pageLink); 88 log.trace("Executing findCustomersByTenantId, tenantId [{}], pageLink [{}]", tenantId, pageLink);
97 Validator.validateId(tenantId, "Incorrect tenantId " + tenantId); 89 Validator.validateId(tenantId, "Incorrect tenantId " + tenantId);
98 Validator.validatePageLink(pageLink, "Incorrect page link " + pageLink); 90 Validator.validatePageLink(pageLink, "Incorrect page link " + pageLink);
99 - List<CustomerEntity> customerEntities = customerDao.findCustomersByTenantId(tenantId.getId(), pageLink);  
100 - List<Customer> customers = convertDataList(customerEntities); 91 + List<Customer> customers = customerDao.findCustomersByTenantId(tenantId.getId(), pageLink);
101 return new TextPageData<Customer>(customers, pageLink); 92 return new TextPageData<Customer>(customers, pageLink);
102 } 93 }
103 94
@@ -121,7 +112,7 @@ public class CustomerServiceImpl implements CustomerService { @@ -121,7 +112,7 @@ public class CustomerServiceImpl implements CustomerService {
121 if (customer.getTenantId() == null) { 112 if (customer.getTenantId() == null) {
122 throw new DataValidationException("Customer should be assigned to tenant!"); 113 throw new DataValidationException("Customer should be assigned to tenant!");
123 } else { 114 } else {
124 - TenantEntity tenant = tenantDao.findById(customer.getTenantId().getId()); 115 + Tenant tenant = tenantDao.findById(customer.getTenantId().getId());
125 if (tenant == null) { 116 if (tenant == null) {
126 throw new DataValidationException("Customer is referencing to non-existent tenant!"); 117 throw new DataValidationException("Customer is referencing to non-existent tenant!");
127 } 118 }
@@ -129,17 +120,17 @@ public class CustomerServiceImpl implements CustomerService { @@ -129,17 +120,17 @@ public class CustomerServiceImpl implements CustomerService {
129 } 120 }
130 }; 121 };
131 122
132 - private PaginatedRemover<TenantId, CustomerEntity> customersByTenantRemover =  
133 - new PaginatedRemover<TenantId, CustomerEntity>() { 123 + private PaginatedRemover<TenantId, Customer> customersByTenantRemover =
  124 + new PaginatedRemover<TenantId, Customer>() {
134 125
135 @Override 126 @Override
136 - protected List<CustomerEntity> findEntities(TenantId id, TextPageLink pageLink) { 127 + protected List<Customer> findEntities(TenantId id, TextPageLink pageLink) {
137 return customerDao.findCustomersByTenantId(id.getId(), pageLink); 128 return customerDao.findCustomersByTenantId(id.getId(), pageLink);
138 } 129 }
139 130
140 @Override 131 @Override
141 - protected void removeEntity(CustomerEntity entity) {  
142 - deleteCustomer(new CustomerId(entity.getId())); 132 + protected void removeEntity(Customer entity) {
  133 + deleteCustomer(new CustomerId(entity.getUuidId()));
143 } 134 }
144 }; 135 };
145 } 136 }
dao/src/main/java/org/thingsboard/server/dao/dashboard/CassandraDashboardDao.java renamed from dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardDaoImpl.java
@@ -15,31 +15,15 @@ @@ -15,31 +15,15 @@
15 */ 15 */
16 package org.thingsboard.server.dao.dashboard; 16 package org.thingsboard.server.dao.dashboard;
17 17
18 -import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;  
19 -import static org.thingsboard.server.dao.model.ModelConstants.DASHBOARD_BY_CUSTOMER_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME;  
20 -import static org.thingsboard.server.dao.model.ModelConstants.DASHBOARD_BY_TENANT_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME;  
21 -import static org.thingsboard.server.dao.model.ModelConstants.DASHBOARD_COLUMN_FAMILY_NAME;  
22 -import static org.thingsboard.server.dao.model.ModelConstants.DASHBOARD_CUSTOMER_ID_PROPERTY;  
23 -import static org.thingsboard.server.dao.model.ModelConstants.DASHBOARD_TENANT_ID_PROPERTY;  
24 -import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID;  
25 -  
26 -import java.util.Arrays;  
27 -import java.util.List;  
28 -import java.util.UUID;  
29 -  
30 -import lombok.extern.slf4j.Slf4j;  
31 import org.springframework.stereotype.Component; 18 import org.springframework.stereotype.Component;
32 import org.thingsboard.server.common.data.Dashboard; 19 import org.thingsboard.server.common.data.Dashboard;
33 -import org.thingsboard.server.common.data.page.TextPageLink;  
34 -import org.thingsboard.server.dao.AbstractSearchTextDao;  
35 -import org.thingsboard.server.dao.model.DashboardEntity;  
36 -import org.slf4j.Logger;  
37 -import org.slf4j.LoggerFactory;  
38 -import org.thingsboard.server.dao.model.DashboardInfoEntity; 20 +import org.thingsboard.server.dao.CassandraAbstractSearchTextDao;
  21 +import org.thingsboard.server.dao.model.nosql.DashboardEntity;
  22 +
  23 +import static org.thingsboard.server.dao.model.ModelConstants.DASHBOARD_COLUMN_FAMILY_NAME;
39 24
40 @Component 25 @Component
41 -@Slf4j  
42 -public class DashboardDaoImpl extends AbstractSearchTextDao<DashboardEntity> implements DashboardDao { 26 +public class CassandraDashboardDao extends CassandraAbstractSearchTextDao<DashboardEntity, Dashboard> implements DashboardDao {
43 27
44 @Override 28 @Override
45 protected Class<DashboardEntity> getColumnFamilyClass() { 29 protected Class<DashboardEntity> getColumnFamilyClass() {
@@ -50,11 +34,4 @@ public class DashboardDaoImpl extends AbstractSearchTextDao<DashboardEntity> imp @@ -50,11 +34,4 @@ public class DashboardDaoImpl extends AbstractSearchTextDao<DashboardEntity> imp
50 protected String getColumnFamilyName() { 34 protected String getColumnFamilyName() {
51 return DASHBOARD_COLUMN_FAMILY_NAME; 35 return DASHBOARD_COLUMN_FAMILY_NAME;
52 } 36 }
53 -  
54 - @Override  
55 - public DashboardEntity save(Dashboard dashboard) {  
56 - log.debug("Save dashboard [{}] ", dashboard);  
57 - return save(new DashboardEntity(dashboard));  
58 - }  
59 -  
60 } 37 }
dao/src/main/java/org/thingsboard/server/dao/dashboard/CassandraDashboardInfoDao.java renamed from dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardInfoDaoImpl.java
@@ -17,9 +17,11 @@ package org.thingsboard.server.dao.dashboard; @@ -17,9 +17,11 @@ package org.thingsboard.server.dao.dashboard;
17 17
18 import lombok.extern.slf4j.Slf4j; 18 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.page.TextPageLink; 21 import org.thingsboard.server.common.data.page.TextPageLink;
21 -import org.thingsboard.server.dao.AbstractSearchTextDao;  
22 -import org.thingsboard.server.dao.model.DashboardInfoEntity; 22 +import org.thingsboard.server.dao.CassandraAbstractSearchTextDao;
  23 +import org.thingsboard.server.dao.DaoUtil;
  24 +import org.thingsboard.server.dao.model.nosql.DashboardInfoEntity;
23 25
24 import java.util.Arrays; 26 import java.util.Arrays;
25 import java.util.Collections; 27 import java.util.Collections;
@@ -31,7 +33,7 @@ import static org.thingsboard.server.dao.model.ModelConstants.*; @@ -31,7 +33,7 @@ import static org.thingsboard.server.dao.model.ModelConstants.*;
31 33
32 @Component 34 @Component
33 @Slf4j 35 @Slf4j
34 -public class DashboardInfoDaoImpl extends AbstractSearchTextDao<DashboardInfoEntity> implements DashboardInfoDao { 36 +public class CassandraDashboardInfoDao extends CassandraAbstractSearchTextDao<DashboardInfoEntity, DashboardInfo> implements DashboardInfoDao {
35 37
36 @Override 38 @Override
37 protected Class<DashboardInfoEntity> getColumnFamilyClass() { 39 protected Class<DashboardInfoEntity> getColumnFamilyClass() {
@@ -44,18 +46,18 @@ public class DashboardInfoDaoImpl extends AbstractSearchTextDao<DashboardInfoEnt @@ -44,18 +46,18 @@ public class DashboardInfoDaoImpl extends AbstractSearchTextDao<DashboardInfoEnt
44 } 46 }
45 47
46 @Override 48 @Override
47 - public List<DashboardInfoEntity> findDashboardsByTenantId(UUID tenantId, TextPageLink pageLink) { 49 + public List<DashboardInfo> findDashboardsByTenantId(UUID tenantId, TextPageLink pageLink) {
48 log.debug("Try to find dashboards by tenantId [{}] and pageLink [{}]", tenantId, pageLink); 50 log.debug("Try to find dashboards by tenantId [{}] and pageLink [{}]", tenantId, pageLink);
49 List<DashboardInfoEntity> dashboardEntities = findPageWithTextSearch(DASHBOARD_BY_TENANT_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME, 51 List<DashboardInfoEntity> dashboardEntities = findPageWithTextSearch(DASHBOARD_BY_TENANT_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME,
50 Collections.singletonList(eq(DASHBOARD_TENANT_ID_PROPERTY, tenantId)), 52 Collections.singletonList(eq(DASHBOARD_TENANT_ID_PROPERTY, tenantId)),
51 pageLink); 53 pageLink);
52 54
53 log.trace("Found dashboards [{}] by tenantId [{}] and pageLink [{}]", dashboardEntities, tenantId, pageLink); 55 log.trace("Found dashboards [{}] by tenantId [{}] and pageLink [{}]", dashboardEntities, tenantId, pageLink);
54 - return dashboardEntities; 56 + return DaoUtil.convertDataList(dashboardEntities);
55 } 57 }
56 58
57 @Override 59 @Override
58 - public List<DashboardInfoEntity> findDashboardsByTenantIdAndCustomerId(UUID tenantId, UUID customerId, TextPageLink pageLink) { 60 + public List<DashboardInfo> findDashboardsByTenantIdAndCustomerId(UUID tenantId, UUID customerId, TextPageLink pageLink) {
59 log.debug("Try to find dashboards by tenantId [{}], customerId[{}] and pageLink [{}]", tenantId, customerId, pageLink); 61 log.debug("Try to find dashboards by tenantId [{}], customerId[{}] and pageLink [{}]", tenantId, customerId, pageLink);
60 List<DashboardInfoEntity> dashboardEntities = findPageWithTextSearch(DASHBOARD_BY_CUSTOMER_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME, 62 List<DashboardInfoEntity> dashboardEntities = findPageWithTextSearch(DASHBOARD_BY_CUSTOMER_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME,
61 Arrays.asList(eq(DASHBOARD_CUSTOMER_ID_PROPERTY, customerId), 63 Arrays.asList(eq(DASHBOARD_CUSTOMER_ID_PROPERTY, customerId),
@@ -63,7 +65,7 @@ public class DashboardInfoDaoImpl extends AbstractSearchTextDao<DashboardInfoEnt @@ -63,7 +65,7 @@ public class DashboardInfoDaoImpl extends AbstractSearchTextDao<DashboardInfoEnt
63 pageLink); 65 pageLink);
64 66
65 log.trace("Found dashboards [{}] by tenantId [{}], customerId [{}] and pageLink [{}]", dashboardEntities, tenantId, customerId, pageLink); 67 log.trace("Found dashboards [{}] by tenantId [{}], customerId [{}] and pageLink [{}]", dashboardEntities, tenantId, customerId, pageLink);
66 - return dashboardEntities; 68 + return DaoUtil.convertDataList(dashboardEntities);
67 } 69 }
68 70
69 } 71 }
@@ -15,21 +15,13 @@ @@ -15,21 +15,13 @@
15 */ 15 */
16 package org.thingsboard.server.dao.dashboard; 16 package org.thingsboard.server.dao.dashboard;
17 17
18 -import java.util.List;  
19 -import java.util.UUID;  
20 -  
21 import org.thingsboard.server.common.data.Dashboard; 18 import org.thingsboard.server.common.data.Dashboard;
22 -import org.thingsboard.server.common.data.page.TextPageLink;  
23 import org.thingsboard.server.dao.Dao; 19 import org.thingsboard.server.dao.Dao;
24 -import org.thingsboard.server.dao.model.DashboardEntity;  
25 -import org.thingsboard.server.dao.model.DashboardInfoEntity;  
26 20
27 /** 21 /**
28 * The Interface DashboardDao. 22 * The Interface DashboardDao.
29 - *  
30 - * @param <T> the generic type  
31 */ 23 */
32 -public interface DashboardDao extends Dao<DashboardEntity> { 24 +public interface DashboardDao extends Dao<Dashboard> {
33 25
34 /** 26 /**
35 * Save or update dashboard object 27 * Save or update dashboard object
@@ -37,6 +29,6 @@ public interface DashboardDao extends Dao<DashboardEntity> { @@ -37,6 +29,6 @@ public interface DashboardDao extends Dao<DashboardEntity> {
37 * @param dashboard the dashboard object 29 * @param dashboard the dashboard object
38 * @return saved dashboard object 30 * @return saved dashboard object
39 */ 31 */
40 - DashboardEntity save(Dashboard dashboard); 32 + Dashboard save(Dashboard dashboard);
41 33
42 } 34 }
@@ -15,21 +15,17 @@ @@ -15,21 +15,17 @@
15 */ 15 */
16 package org.thingsboard.server.dao.dashboard; 16 package org.thingsboard.server.dao.dashboard;
17 17
18 -import java.util.List;  
19 -import java.util.UUID;  
20 -  
21 -import org.thingsboard.server.common.data.Dashboard; 18 +import org.thingsboard.server.common.data.DashboardInfo;
22 import org.thingsboard.server.common.data.page.TextPageLink; 19 import org.thingsboard.server.common.data.page.TextPageLink;
23 import org.thingsboard.server.dao.Dao; 20 import org.thingsboard.server.dao.Dao;
24 -import org.thingsboard.server.dao.model.DashboardEntity;  
25 -import org.thingsboard.server.dao.model.DashboardInfoEntity; 21 +
  22 +import java.util.List;
  23 +import java.util.UUID;
26 24
27 /** 25 /**
28 * The Interface DashboardInfoDao. 26 * The Interface DashboardInfoDao.
29 - *  
30 - * @param <T> the generic type  
31 */ 27 */
32 -public interface DashboardInfoDao extends Dao<DashboardInfoEntity> { 28 +public interface DashboardInfoDao extends Dao<DashboardInfo> {
33 29
34 /** 30 /**
35 * Find dashboards by tenantId and page link. 31 * Find dashboards by tenantId and page link.
@@ -38,7 +34,7 @@ public interface DashboardInfoDao extends Dao<DashboardInfoEntity> { @@ -38,7 +34,7 @@ public interface DashboardInfoDao extends Dao<DashboardInfoEntity> {
38 * @param pageLink the page link 34 * @param pageLink the page link
39 * @return the list of dashboard objects 35 * @return the list of dashboard objects
40 */ 36 */
41 - List<DashboardInfoEntity> findDashboardsByTenantId(UUID tenantId, TextPageLink pageLink); 37 + List<DashboardInfo> findDashboardsByTenantId(UUID tenantId, TextPageLink pageLink);
42 38
43 /** 39 /**
44 * Find dashboards by tenantId, customerId and page link. 40 * Find dashboards by tenantId, customerId and page link.
@@ -48,6 +44,6 @@ public interface DashboardInfoDao extends Dao<DashboardInfoEntity> { @@ -48,6 +44,6 @@ public interface DashboardInfoDao extends Dao<DashboardInfoEntity> {
48 * @param pageLink the page link 44 * @param pageLink the page link
49 * @return the list of dashboard objects 45 * @return the list of dashboard objects
50 */ 46 */
51 - List<DashboardInfoEntity> findDashboardsByTenantIdAndCustomerId(UUID tenantId, UUID customerId, TextPageLink pageLink); 47 + List<DashboardInfo> findDashboardsByTenantIdAndCustomerId(UUID tenantId, UUID customerId, TextPageLink pageLink);
52 48
53 } 49 }
@@ -25,22 +25,22 @@ import org.thingsboard.server.common.data.page.TextPageLink; @@ -25,22 +25,22 @@ import org.thingsboard.server.common.data.page.TextPageLink;
25 25
26 public interface DashboardService { 26 public interface DashboardService {
27 27
28 - public Dashboard findDashboardById(DashboardId dashboardId);  
29 -  
30 - public Dashboard saveDashboard(Dashboard dashboard);  
31 -  
32 - public Dashboard assignDashboardToCustomer(DashboardId dashboardId, CustomerId customerId); 28 + Dashboard findDashboardById(DashboardId dashboardId);
33 29
34 - public Dashboard unassignDashboardFromCustomer(DashboardId dashboardId); 30 + Dashboard saveDashboard(Dashboard dashboard);
35 31
36 - public void deleteDashboard(DashboardId dashboardId);  
37 -  
38 - public TextPageData<DashboardInfo> findDashboardsByTenantId(TenantId tenantId, TextPageLink pageLink); 32 + Dashboard assignDashboardToCustomer(DashboardId dashboardId, CustomerId customerId);
39 33
40 - public void deleteDashboardsByTenantId(TenantId tenantId);  
41 -  
42 - public TextPageData<DashboardInfo> findDashboardsByTenantIdAndCustomerId(TenantId tenantId, CustomerId customerId, TextPageLink pageLink); 34 + Dashboard unassignDashboardFromCustomer(DashboardId dashboardId);
  35 +
  36 + void deleteDashboard(DashboardId dashboardId);
  37 +
  38 + TextPageData<DashboardInfo> findDashboardsByTenantId(TenantId tenantId, TextPageLink pageLink);
  39 +
  40 + void deleteDashboardsByTenantId(TenantId tenantId);
  41 +
  42 + TextPageData<DashboardInfo> findDashboardsByTenantIdAndCustomerId(TenantId tenantId, CustomerId customerId, TextPageLink pageLink);
  43 +
  44 + void unassignCustomerDashboards(TenantId tenantId, CustomerId customerId);
43 45
44 - public void unassignCustomerDashboards(TenantId tenantId, CustomerId customerId);  
45 -  
46 } 46 }
@@ -15,15 +15,14 @@ @@ -15,15 +15,14 @@
15 */ 15 */
16 package org.thingsboard.server.dao.dashboard; 16 package org.thingsboard.server.dao.dashboard;
17 17
18 -import static org.thingsboard.server.dao.DaoUtil.convertDataList;  
19 -import static org.thingsboard.server.dao.DaoUtil.getData;  
20 -  
21 -import java.util.List;  
22 -  
23 import lombok.extern.slf4j.Slf4j; 18 import lombok.extern.slf4j.Slf4j;
24 import org.apache.commons.lang3.StringUtils; 19 import org.apache.commons.lang3.StringUtils;
  20 +import org.springframework.beans.factory.annotation.Autowired;
  21 +import org.springframework.stereotype.Service;
  22 +import org.thingsboard.server.common.data.Customer;
25 import org.thingsboard.server.common.data.Dashboard; 23 import org.thingsboard.server.common.data.Dashboard;
26 import org.thingsboard.server.common.data.DashboardInfo; 24 import org.thingsboard.server.common.data.DashboardInfo;
  25 +import org.thingsboard.server.common.data.Tenant;
27 import org.thingsboard.server.common.data.id.CustomerId; 26 import org.thingsboard.server.common.data.id.CustomerId;
28 import org.thingsboard.server.common.data.id.DashboardId; 27 import org.thingsboard.server.common.data.id.DashboardId;
29 import org.thingsboard.server.common.data.id.TenantId; 28 import org.thingsboard.server.common.data.id.TenantId;
@@ -31,15 +30,13 @@ import org.thingsboard.server.common.data.page.TextPageData; @@ -31,15 +30,13 @@ import org.thingsboard.server.common.data.page.TextPageData;
31 import org.thingsboard.server.common.data.page.TextPageLink; 30 import org.thingsboard.server.common.data.page.TextPageLink;
32 import org.thingsboard.server.dao.customer.CustomerDao; 31 import org.thingsboard.server.dao.customer.CustomerDao;
33 import org.thingsboard.server.dao.exception.DataValidationException; 32 import org.thingsboard.server.dao.exception.DataValidationException;
34 -import org.thingsboard.server.dao.model.*; 33 +import org.thingsboard.server.dao.model.ModelConstants;
35 import org.thingsboard.server.dao.service.DataValidator; 34 import org.thingsboard.server.dao.service.DataValidator;
36 import org.thingsboard.server.dao.service.PaginatedRemover; 35 import org.thingsboard.server.dao.service.PaginatedRemover;
37 -import org.thingsboard.server.dao.tenant.TenantDao;  
38 -import org.slf4j.Logger;  
39 -import org.slf4j.LoggerFactory;  
40 -import org.springframework.beans.factory.annotation.Autowired;  
41 -import org.springframework.stereotype.Service;  
42 import org.thingsboard.server.dao.service.Validator; 36 import org.thingsboard.server.dao.service.Validator;
  37 +import org.thingsboard.server.dao.tenant.TenantDao;
  38 +
  39 +import java.util.List;
43 40
44 @Service 41 @Service
45 @Slf4j 42 @Slf4j
@@ -61,16 +58,14 @@ public class DashboardServiceImpl implements DashboardService { @@ -61,16 +58,14 @@ public class DashboardServiceImpl implements DashboardService {
61 public Dashboard findDashboardById(DashboardId dashboardId) { 58 public Dashboard findDashboardById(DashboardId dashboardId) {
62 log.trace("Executing findDashboardById [{}]", dashboardId); 59 log.trace("Executing findDashboardById [{}]", dashboardId);
63 Validator.validateId(dashboardId, "Incorrect dashboardId " + dashboardId); 60 Validator.validateId(dashboardId, "Incorrect dashboardId " + dashboardId);
64 - DashboardEntity dashboardEntity = dashboardDao.findById(dashboardId.getId());  
65 - return getData(dashboardEntity); 61 + return dashboardDao.findById(dashboardId.getId());
66 } 62 }
67 63
68 @Override 64 @Override
69 public Dashboard saveDashboard(Dashboard dashboard) { 65 public Dashboard saveDashboard(Dashboard dashboard) {
70 log.trace("Executing saveDashboard [{}]", dashboard); 66 log.trace("Executing saveDashboard [{}]", dashboard);
71 dashboardValidator.validate(dashboard); 67 dashboardValidator.validate(dashboard);
72 - DashboardEntity dashboardEntity = dashboardDao.save(dashboard);  
73 - return getData(dashboardEntity); 68 + return dashboardDao.save(dashboard);
74 } 69 }
75 70
76 @Override 71 @Override
@@ -99,9 +94,8 @@ public class DashboardServiceImpl implements DashboardService { @@ -99,9 +94,8 @@ public class DashboardServiceImpl implements DashboardService {
99 log.trace("Executing findDashboardsByTenantId, tenantId [{}], pageLink [{}]", tenantId, pageLink); 94 log.trace("Executing findDashboardsByTenantId, tenantId [{}], pageLink [{}]", tenantId, pageLink);
100 Validator.validateId(tenantId, "Incorrect tenantId " + tenantId); 95 Validator.validateId(tenantId, "Incorrect tenantId " + tenantId);
101 Validator.validatePageLink(pageLink, "Incorrect page link " + pageLink); 96 Validator.validatePageLink(pageLink, "Incorrect page link " + pageLink);
102 - List<DashboardInfoEntity> dashboardEntities = dashboardInfoDao.findDashboardsByTenantId(tenantId.getId(), pageLink);  
103 - List<DashboardInfo> dashboards = convertDataList(dashboardEntities);  
104 - return new TextPageData<DashboardInfo>(dashboards, pageLink); 97 + List<DashboardInfo> dashboards = dashboardInfoDao.findDashboardsByTenantId(tenantId.getId(), pageLink);
  98 + return new TextPageData<>(dashboards, pageLink);
105 } 99 }
106 100
107 @Override 101 @Override
@@ -117,9 +111,8 @@ public class DashboardServiceImpl implements DashboardService { @@ -117,9 +111,8 @@ public class DashboardServiceImpl implements DashboardService {
117 Validator.validateId(tenantId, "Incorrect tenantId " + tenantId); 111 Validator.validateId(tenantId, "Incorrect tenantId " + tenantId);
118 Validator.validateId(customerId, "Incorrect customerId " + customerId); 112 Validator.validateId(customerId, "Incorrect customerId " + customerId);
119 Validator.validatePageLink(pageLink, "Incorrect page link " + pageLink); 113 Validator.validatePageLink(pageLink, "Incorrect page link " + pageLink);
120 - List<DashboardInfoEntity> dashboardEntities = dashboardInfoDao.findDashboardsByTenantIdAndCustomerId(tenantId.getId(), customerId.getId(), pageLink);  
121 - List<DashboardInfo> dashboards = convertDataList(dashboardEntities);  
122 - return new TextPageData<DashboardInfo>(dashboards, pageLink); 114 + List<DashboardInfo> dashboards = dashboardInfoDao.findDashboardsByTenantIdAndCustomerId(tenantId.getId(), customerId.getId(), pageLink);
  115 + return new TextPageData<>(dashboards, pageLink);
123 } 116 }
124 117
125 @Override 118 @Override
@@ -140,7 +133,7 @@ public class DashboardServiceImpl implements DashboardService { @@ -140,7 +133,7 @@ public class DashboardServiceImpl implements DashboardService {
140 if (dashboard.getTenantId() == null) { 133 if (dashboard.getTenantId() == null) {
141 throw new DataValidationException("Dashboard should be assigned to tenant!"); 134 throw new DataValidationException("Dashboard should be assigned to tenant!");
142 } else { 135 } else {
143 - TenantEntity tenant = tenantDao.findById(dashboard.getTenantId().getId()); 136 + Tenant tenant = tenantDao.findById(dashboard.getTenantId().getId());
144 if (tenant == null) { 137 if (tenant == null) {
145 throw new DataValidationException("Dashboard is referencing to non-existent tenant!"); 138 throw new DataValidationException("Dashboard is referencing to non-existent tenant!");
146 } 139 }
@@ -148,32 +141,32 @@ public class DashboardServiceImpl implements DashboardService { @@ -148,32 +141,32 @@ public class DashboardServiceImpl implements DashboardService {
148 if (dashboard.getCustomerId() == null) { 141 if (dashboard.getCustomerId() == null) {
149 dashboard.setCustomerId(new CustomerId(ModelConstants.NULL_UUID)); 142 dashboard.setCustomerId(new CustomerId(ModelConstants.NULL_UUID));
150 } else if (!dashboard.getCustomerId().getId().equals(ModelConstants.NULL_UUID)) { 143 } else if (!dashboard.getCustomerId().getId().equals(ModelConstants.NULL_UUID)) {
151 - CustomerEntity customer = customerDao.findById(dashboard.getCustomerId().getId()); 144 + Customer customer = customerDao.findById(dashboard.getCustomerId().getId());
152 if (customer == null) { 145 if (customer == null) {
153 throw new DataValidationException("Can't assign dashboard to non-existent customer!"); 146 throw new DataValidationException("Can't assign dashboard to non-existent customer!");
154 } 147 }
155 - if (!customer.getTenantId().equals(dashboard.getTenantId().getId())) { 148 + if (!customer.getTenantId().getId().equals(dashboard.getTenantId().getId())) {
156 throw new DataValidationException("Can't assign dashboard to customer from different tenant!"); 149 throw new DataValidationException("Can't assign dashboard to customer from different tenant!");
157 } 150 }
158 } 151 }
159 } 152 }
160 }; 153 };
161 154
162 - private PaginatedRemover<TenantId, DashboardInfoEntity> tenantDashboardsRemover =  
163 - new PaginatedRemover<TenantId, DashboardInfoEntity>() { 155 + private PaginatedRemover<TenantId, DashboardInfo> tenantDashboardsRemover =
  156 + new PaginatedRemover<TenantId, DashboardInfo>() {
164 157
165 @Override 158 @Override
166 - protected List<DashboardInfoEntity> findEntities(TenantId id, TextPageLink pageLink) { 159 + protected List<DashboardInfo> findEntities(TenantId id, TextPageLink pageLink) {
167 return dashboardInfoDao.findDashboardsByTenantId(id.getId(), pageLink); 160 return dashboardInfoDao.findDashboardsByTenantId(id.getId(), pageLink);
168 } 161 }
169 162
170 @Override 163 @Override
171 - protected void removeEntity(DashboardInfoEntity entity) {  
172 - deleteDashboard(new DashboardId(entity.getId())); 164 + protected void removeEntity(DashboardInfo entity) {
  165 + deleteDashboard(new DashboardId(entity.getUuidId()));
173 } 166 }
174 }; 167 };
175 168
176 - class CustomerDashboardsUnassigner extends PaginatedRemover<CustomerId, DashboardInfoEntity> { 169 + private class CustomerDashboardsUnassigner extends PaginatedRemover<CustomerId, DashboardInfo> {
177 170
178 private TenantId tenantId; 171 private TenantId tenantId;
179 172
@@ -182,13 +175,13 @@ public class DashboardServiceImpl implements DashboardService { @@ -182,13 +175,13 @@ public class DashboardServiceImpl implements DashboardService {
182 } 175 }
183 176
184 @Override 177 @Override
185 - protected List<DashboardInfoEntity> findEntities(CustomerId id, TextPageLink pageLink) { 178 + protected List<DashboardInfo> findEntities(CustomerId id, TextPageLink pageLink) {
186 return dashboardInfoDao.findDashboardsByTenantIdAndCustomerId(tenantId.getId(), id.getId(), pageLink); 179 return dashboardInfoDao.findDashboardsByTenantIdAndCustomerId(tenantId.getId(), id.getId(), pageLink);
187 } 180 }
188 181
189 @Override 182 @Override
190 - protected void removeEntity(DashboardInfoEntity entity) {  
191 - unassignDashboardFromCustomer(new DashboardId(entity.getId())); 183 + protected void removeEntity(DashboardInfo entity) {
  184 + unassignDashboardFromCustomer(new DashboardId(entity.getUuidId()));
192 } 185 }
193 186
194 } 187 }
dao/src/main/java/org/thingsboard/server/dao/device/CassandraDeviceCredentialsDao.java renamed from dao/src/main/java/org/thingsboard/server/dao/device/DeviceCredentialsDaoImpl.java
@@ -15,26 +15,23 @@ @@ -15,26 +15,23 @@
15 */ 15 */
16 package org.thingsboard.server.dao.device; 16 package org.thingsboard.server.dao.device;
17 17
18 -import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;  
19 -import static com.datastax.driver.core.querybuilder.QueryBuilder.select;  
20 -  
21 -import java.util.UUID;  
22 - 18 +import com.datastax.driver.core.querybuilder.Select.Where;
23 import lombok.extern.slf4j.Slf4j; 19 import lombok.extern.slf4j.Slf4j;
24 import org.springframework.stereotype.Component; 20 import org.springframework.stereotype.Component;
25 import org.thingsboard.server.common.data.security.DeviceCredentials; 21 import org.thingsboard.server.common.data.security.DeviceCredentials;
26 -import org.thingsboard.server.dao.AbstractModelDao;  
27 -import org.thingsboard.server.dao.model.DeviceCredentialsEntity;  
28 -import org.slf4j.Logger;  
29 -import org.slf4j.LoggerFactory;  
30 -import org.springframework.stereotype.Repository;  
31 -  
32 -import com.datastax.driver.core.querybuilder.Select.Where; 22 +import org.thingsboard.server.dao.CassandraAbstractModelDao;
  23 +import org.thingsboard.server.dao.DaoUtil;
  24 +import org.thingsboard.server.dao.model.nosql.DeviceCredentialsEntity;
33 import org.thingsboard.server.dao.model.ModelConstants; 25 import org.thingsboard.server.dao.model.ModelConstants;
34 26
  27 +import java.util.UUID;
  28 +
  29 +import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;
  30 +import static com.datastax.driver.core.querybuilder.QueryBuilder.select;
  31 +
35 @Component 32 @Component
36 @Slf4j 33 @Slf4j
37 -public class DeviceCredentialsDaoImpl extends AbstractModelDao<DeviceCredentialsEntity> implements DeviceCredentialsDao { 34 +public class CassandraDeviceCredentialsDao extends CassandraAbstractModelDao<DeviceCredentialsEntity, DeviceCredentials> implements DeviceCredentialsDao {
38 35
39 @Override 36 @Override
40 protected Class<DeviceCredentialsEntity> getColumnFamilyClass() { 37 protected Class<DeviceCredentialsEntity> getColumnFamilyClass() {
@@ -47,31 +44,24 @@ public class DeviceCredentialsDaoImpl extends AbstractModelDao<DeviceCredentials @@ -47,31 +44,24 @@ public class DeviceCredentialsDaoImpl extends AbstractModelDao<DeviceCredentials
47 } 44 }
48 45
49 @Override 46 @Override
50 - public DeviceCredentialsEntity findByDeviceId(UUID deviceId) { 47 + public DeviceCredentials findByDeviceId(UUID deviceId) {
51 log.debug("Try to find device credentials by deviceId [{}] ", deviceId); 48 log.debug("Try to find device credentials by deviceId [{}] ", deviceId);
52 Where query = select().from(ModelConstants.DEVICE_CREDENTIALS_BY_DEVICE_COLUMN_FAMILY_NAME) 49 Where query = select().from(ModelConstants.DEVICE_CREDENTIALS_BY_DEVICE_COLUMN_FAMILY_NAME)
53 .where(eq(ModelConstants.DEVICE_CREDENTIALS_DEVICE_ID_PROPERTY, deviceId)); 50 .where(eq(ModelConstants.DEVICE_CREDENTIALS_DEVICE_ID_PROPERTY, deviceId));
54 log.trace("Execute query {}", query); 51 log.trace("Execute query {}", query);
55 DeviceCredentialsEntity deviceCredentialsEntity = findOneByStatement(query); 52 DeviceCredentialsEntity deviceCredentialsEntity = findOneByStatement(query);
56 log.trace("Found device credentials [{}] by deviceId [{}]", deviceCredentialsEntity, deviceId); 53 log.trace("Found device credentials [{}] by deviceId [{}]", deviceCredentialsEntity, deviceId);
57 - return deviceCredentialsEntity; 54 + return DaoUtil.getData(deviceCredentialsEntity);
58 } 55 }
59 56
60 @Override 57 @Override
61 - public DeviceCredentialsEntity findByCredentialsId(String credentialsId) { 58 + public DeviceCredentials findByCredentialsId(String credentialsId) {
62 log.debug("Try to find device credentials by credentialsId [{}] ", credentialsId); 59 log.debug("Try to find device credentials by credentialsId [{}] ", credentialsId);
63 Where query = select().from(ModelConstants.DEVICE_CREDENTIALS_BY_CREDENTIALS_ID_COLUMN_FAMILY_NAME) 60 Where query = select().from(ModelConstants.DEVICE_CREDENTIALS_BY_CREDENTIALS_ID_COLUMN_FAMILY_NAME)
64 .where(eq(ModelConstants.DEVICE_CREDENTIALS_CREDENTIALS_ID_PROPERTY, credentialsId)); 61 .where(eq(ModelConstants.DEVICE_CREDENTIALS_CREDENTIALS_ID_PROPERTY, credentialsId));
65 log.trace("Execute query {}", query); 62 log.trace("Execute query {}", query);
66 DeviceCredentialsEntity deviceCredentialsEntity = findOneByStatement(query); 63 DeviceCredentialsEntity deviceCredentialsEntity = findOneByStatement(query);
67 log.trace("Found device credentials [{}] by credentialsId [{}]", deviceCredentialsEntity, credentialsId); 64 log.trace("Found device credentials [{}] by credentialsId [{}]", deviceCredentialsEntity, credentialsId);
68 - return deviceCredentialsEntity; 65 + return DaoUtil.getData(deviceCredentialsEntity);
69 } 66 }
70 -  
71 - @Override  
72 - public DeviceCredentialsEntity save(DeviceCredentials deviceCredentials) {  
73 - log.debug("Save device credentials [{}] ", deviceCredentials);  
74 - return save(new DeviceCredentialsEntity(deviceCredentials));  
75 - }  
76 -  
77 } 67 }
dao/src/main/java/org/thingsboard/server/dao/device/CassandraDeviceDao.java renamed from dao/src/main/java/org/thingsboard/server/dao/device/DeviceDaoImpl.java
@@ -15,27 +15,24 @@ @@ -15,27 +15,24 @@
15 */ 15 */
16 package org.thingsboard.server.dao.device; 16 package org.thingsboard.server.dao.device;
17 17
18 -import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;  
19 -import static com.datastax.driver.core.querybuilder.QueryBuilder.in;  
20 -import static com.datastax.driver.core.querybuilder.QueryBuilder.select;  
21 -import static org.thingsboard.server.dao.model.ModelConstants.*;  
22 -  
23 -import java.util.*;  
24 -  
25 import com.datastax.driver.core.querybuilder.Select; 18 import com.datastax.driver.core.querybuilder.Select;
26 import com.google.common.util.concurrent.ListenableFuture; 19 import com.google.common.util.concurrent.ListenableFuture;
27 import lombok.extern.slf4j.Slf4j; 20 import lombok.extern.slf4j.Slf4j;
28 import org.springframework.stereotype.Component; 21 import org.springframework.stereotype.Component;
29 import org.thingsboard.server.common.data.Device; 22 import org.thingsboard.server.common.data.Device;
30 import org.thingsboard.server.common.data.page.TextPageLink; 23 import org.thingsboard.server.common.data.page.TextPageLink;
31 -import org.thingsboard.server.dao.AbstractSearchTextDao;  
32 -import org.thingsboard.server.dao.model.DeviceEntity;  
33 -import org.slf4j.Logger;  
34 -import org.slf4j.LoggerFactory; 24 +import org.thingsboard.server.dao.CassandraAbstractSearchTextDao;
  25 +import org.thingsboard.server.dao.DaoUtil;
  26 +import org.thingsboard.server.dao.model.nosql.DeviceEntity;
  27 +
  28 +import java.util.*;
  29 +
  30 +import static com.datastax.driver.core.querybuilder.QueryBuilder.*;
  31 +import static org.thingsboard.server.dao.model.ModelConstants.*;
35 32
36 @Component 33 @Component
37 @Slf4j 34 @Slf4j
38 -public class DeviceDaoImpl extends AbstractSearchTextDao<DeviceEntity> implements DeviceDao { 35 +public class CassandraDeviceDao extends CassandraAbstractSearchTextDao<DeviceEntity, Device> implements DeviceDao {
39 36
40 @Override 37 @Override
41 protected Class<DeviceEntity> getColumnFamilyClass() { 38 protected Class<DeviceEntity> getColumnFamilyClass() {
@@ -48,23 +45,17 @@ public class DeviceDaoImpl extends AbstractSearchTextDao<DeviceEntity> implement @@ -48,23 +45,17 @@ public class DeviceDaoImpl extends AbstractSearchTextDao<DeviceEntity> implement
48 } 45 }
49 46
50 @Override 47 @Override
51 - public DeviceEntity save(Device device) {  
52 - log.debug("Save device [{}] ", device);  
53 - return save(new DeviceEntity(device));  
54 - }  
55 -  
56 - @Override  
57 - public List<DeviceEntity> findDevicesByTenantId(UUID tenantId, TextPageLink pageLink) { 48 + public List<Device> findDevicesByTenantId(UUID tenantId, TextPageLink pageLink) {
58 log.debug("Try to find devices by tenantId [{}] and pageLink [{}]", tenantId, pageLink); 49 log.debug("Try to find devices by tenantId [{}] and pageLink [{}]", tenantId, pageLink);
59 List<DeviceEntity> deviceEntities = findPageWithTextSearch(DEVICE_BY_TENANT_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME, 50 List<DeviceEntity> deviceEntities = findPageWithTextSearch(DEVICE_BY_TENANT_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME,
60 Collections.singletonList(eq(DEVICE_TENANT_ID_PROPERTY, tenantId)), pageLink); 51 Collections.singletonList(eq(DEVICE_TENANT_ID_PROPERTY, tenantId)), pageLink);
61 52
62 log.trace("Found devices [{}] by tenantId [{}] and pageLink [{}]", deviceEntities, tenantId, pageLink); 53 log.trace("Found devices [{}] by tenantId [{}] and pageLink [{}]", deviceEntities, tenantId, pageLink);
63 - return deviceEntities; 54 + return DaoUtil.convertDataList(deviceEntities);
64 } 55 }
65 56
66 @Override 57 @Override
67 - public ListenableFuture<List<DeviceEntity>> findDevicesByTenantIdAndIdsAsync(UUID tenantId, List<UUID> deviceIds) { 58 + public ListenableFuture<List<Device>> findDevicesByTenantIdAndIdsAsync(UUID tenantId, List<UUID> deviceIds) {
68 log.debug("Try to find devices by tenantId [{}] and device Ids [{}]", tenantId, deviceIds); 59 log.debug("Try to find devices by tenantId [{}] and device Ids [{}]", tenantId, deviceIds);
69 Select select = select().from(getColumnFamilyName()); 60 Select select = select().from(getColumnFamilyName());
70 Select.Where query = select.where(); 61 Select.Where query = select.where();
@@ -74,7 +65,7 @@ public class DeviceDaoImpl extends AbstractSearchTextDao<DeviceEntity> implement @@ -74,7 +65,7 @@ public class DeviceDaoImpl extends AbstractSearchTextDao<DeviceEntity> implement
74 } 65 }
75 66
76 @Override 67 @Override
77 - public List<DeviceEntity> findDevicesByTenantIdAndCustomerId(UUID tenantId, UUID customerId, TextPageLink pageLink) { 68 + public List<Device> findDevicesByTenantIdAndCustomerId(UUID tenantId, UUID customerId, TextPageLink pageLink) {
78 log.debug("Try to find devices by tenantId [{}], customerId[{}] and pageLink [{}]", tenantId, customerId, pageLink); 69 log.debug("Try to find devices by tenantId [{}], customerId[{}] and pageLink [{}]", tenantId, customerId, pageLink);
79 List<DeviceEntity> deviceEntities = findPageWithTextSearch(DEVICE_BY_CUSTOMER_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME, 70 List<DeviceEntity> deviceEntities = findPageWithTextSearch(DEVICE_BY_CUSTOMER_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME,
80 Arrays.asList(eq(DEVICE_CUSTOMER_ID_PROPERTY, customerId), 71 Arrays.asList(eq(DEVICE_CUSTOMER_ID_PROPERTY, customerId),
@@ -82,11 +73,11 @@ public class DeviceDaoImpl extends AbstractSearchTextDao<DeviceEntity> implement @@ -82,11 +73,11 @@ public class DeviceDaoImpl extends AbstractSearchTextDao<DeviceEntity> implement
82 pageLink); 73 pageLink);
83 74
84 log.trace("Found devices [{}] by tenantId [{}], customerId [{}] and pageLink [{}]", deviceEntities, tenantId, customerId, pageLink); 75 log.trace("Found devices [{}] by tenantId [{}], customerId [{}] and pageLink [{}]", deviceEntities, tenantId, customerId, pageLink);
85 - return deviceEntities; 76 + return DaoUtil.convertDataList(deviceEntities);
86 } 77 }
87 78
88 @Override 79 @Override
89 - public ListenableFuture<List<DeviceEntity>> findDevicesByTenantIdCustomerIdAndIdsAsync(UUID tenantId, UUID customerId, List<UUID> deviceIds) { 80 + public ListenableFuture<List<Device>> findDevicesByTenantIdCustomerIdAndIdsAsync(UUID tenantId, UUID customerId, List<UUID> deviceIds) {
90 log.debug("Try to find devices by tenantId [{}], customerId [{}] and device Ids [{}]", tenantId, customerId, deviceIds); 81 log.debug("Try to find devices by tenantId [{}], customerId [{}] and device Ids [{}]", tenantId, customerId, deviceIds);
91 Select select = select().from(getColumnFamilyName()); 82 Select select = select().from(getColumnFamilyName());
92 Select.Where query = select.where(); 83 Select.Where query = select.where();
@@ -97,12 +88,12 @@ public class DeviceDaoImpl extends AbstractSearchTextDao<DeviceEntity> implement @@ -97,12 +88,12 @@ public class DeviceDaoImpl extends AbstractSearchTextDao<DeviceEntity> implement
97 } 88 }
98 89
99 @Override 90 @Override
100 - public Optional<DeviceEntity> findDevicesByTenantIdAndName(UUID tenantId, String deviceName) { 91 + public Optional<Device> findDevicesByTenantIdAndName(UUID tenantId, String deviceName) {
101 Select select = select().from(DEVICE_BY_TENANT_AND_NAME_VIEW_NAME); 92 Select select = select().from(DEVICE_BY_TENANT_AND_NAME_VIEW_NAME);
102 Select.Where query = select.where(); 93 Select.Where query = select.where();
103 query.and(eq(DEVICE_TENANT_ID_PROPERTY, tenantId)); 94 query.and(eq(DEVICE_TENANT_ID_PROPERTY, tenantId));
104 query.and(eq(DEVICE_NAME_PROPERTY, deviceName)); 95 query.and(eq(DEVICE_NAME_PROPERTY, deviceName));
105 - return Optional.ofNullable(findOneByStatement(query)); 96 + return Optional.ofNullable(DaoUtil.getData(findOneByStatement(query)));
106 } 97 }
107 98
108 } 99 }
@@ -15,18 +15,15 @@ @@ -15,18 +15,15 @@
15 */ 15 */
16 package org.thingsboard.server.dao.device; 16 package org.thingsboard.server.dao.device;
17 17
18 -import java.util.UUID;  
19 -  
20 import org.thingsboard.server.common.data.security.DeviceCredentials; 18 import org.thingsboard.server.common.data.security.DeviceCredentials;
21 import org.thingsboard.server.dao.Dao; 19 import org.thingsboard.server.dao.Dao;
22 -import org.thingsboard.server.dao.model.DeviceCredentialsEntity; 20 +
  21 +import java.util.UUID;
23 22
24 /** 23 /**
25 * The Interface DeviceCredentialsDao. 24 * The Interface DeviceCredentialsDao.
26 - *  
27 - * @param <T> the generic type  
28 */ 25 */
29 -public interface DeviceCredentialsDao extends Dao<DeviceCredentialsEntity> { 26 +public interface DeviceCredentialsDao extends Dao<DeviceCredentials> {
30 27
31 /** 28 /**
32 * Save or update device credentials object 29 * Save or update device credentials object
@@ -34,7 +31,7 @@ public interface DeviceCredentialsDao extends Dao<DeviceCredentialsEntity> { @@ -34,7 +31,7 @@ public interface DeviceCredentialsDao extends Dao<DeviceCredentialsEntity> {
34 * @param deviceCredentials the device credentials object 31 * @param deviceCredentials the device credentials object
35 * @return saved device credentials object 32 * @return saved device credentials object
36 */ 33 */
37 - DeviceCredentialsEntity save(DeviceCredentials deviceCredentials); 34 + DeviceCredentials save(DeviceCredentials deviceCredentials);
38 35
39 /** 36 /**
40 * Find device credentials by device id. 37 * Find device credentials by device id.
@@ -42,7 +39,7 @@ public interface DeviceCredentialsDao extends Dao<DeviceCredentialsEntity> { @@ -42,7 +39,7 @@ public interface DeviceCredentialsDao extends Dao<DeviceCredentialsEntity> {
42 * @param deviceId the device id 39 * @param deviceId the device id
43 * @return the device credentials object 40 * @return the device credentials object
44 */ 41 */
45 - DeviceCredentialsEntity findByDeviceId(UUID deviceId); 42 + DeviceCredentials findByDeviceId(UUID deviceId);
46 43
47 /** 44 /**
48 * Find device credentials by credentials id. 45 * Find device credentials by credentials id.
@@ -50,6 +47,6 @@ public interface DeviceCredentialsDao extends Dao<DeviceCredentialsEntity> { @@ -50,6 +47,6 @@ public interface DeviceCredentialsDao extends Dao<DeviceCredentialsEntity> {
50 * @param credentialsId the credentials id 47 * @param credentialsId the credentials id
51 * @return the device credentials object 48 * @return the device credentials object
52 */ 49 */
53 - DeviceCredentialsEntity findByCredentialsId(String credentialsId); 50 + DeviceCredentials findByCredentialsId(String credentialsId);
54 51
55 } 52 }
@@ -26,10 +26,8 @@ import org.thingsboard.server.common.data.security.DeviceCredentials; @@ -26,10 +26,8 @@ import org.thingsboard.server.common.data.security.DeviceCredentials;
26 import org.thingsboard.server.common.data.security.DeviceCredentialsType; 26 import org.thingsboard.server.common.data.security.DeviceCredentialsType;
27 import org.thingsboard.server.dao.EncryptionUtil; 27 import org.thingsboard.server.dao.EncryptionUtil;
28 import org.thingsboard.server.dao.exception.DataValidationException; 28 import org.thingsboard.server.dao.exception.DataValidationException;
29 -import org.thingsboard.server.dao.model.DeviceCredentialsEntity;  
30 import org.thingsboard.server.dao.service.DataValidator; 29 import org.thingsboard.server.dao.service.DataValidator;
31 30
32 -import static org.thingsboard.server.dao.DaoUtil.getData;  
33 import static org.thingsboard.server.dao.service.Validator.validateId; 31 import static org.thingsboard.server.dao.service.Validator.validateId;
34 import static org.thingsboard.server.dao.service.Validator.validateString; 32 import static org.thingsboard.server.dao.service.Validator.validateString;
35 33
@@ -47,16 +45,14 @@ public class DeviceCredentialsServiceImpl implements DeviceCredentialsService { @@ -47,16 +45,14 @@ public class DeviceCredentialsServiceImpl implements DeviceCredentialsService {
47 public DeviceCredentials findDeviceCredentialsByDeviceId(DeviceId deviceId) { 45 public DeviceCredentials findDeviceCredentialsByDeviceId(DeviceId deviceId) {
48 log.trace("Executing findDeviceCredentialsByDeviceId [{}]", deviceId); 46 log.trace("Executing findDeviceCredentialsByDeviceId [{}]", deviceId);
49 validateId(deviceId, "Incorrect deviceId " + deviceId); 47 validateId(deviceId, "Incorrect deviceId " + deviceId);
50 - DeviceCredentialsEntity deviceCredentialsEntity = deviceCredentialsDao.findByDeviceId(deviceId.getId());  
51 - return getData(deviceCredentialsEntity); 48 + return deviceCredentialsDao.findByDeviceId(deviceId.getId());
52 } 49 }
53 50
54 @Override 51 @Override
55 public DeviceCredentials findDeviceCredentialsByCredentialsId(String credentialsId) { 52 public DeviceCredentials findDeviceCredentialsByCredentialsId(String credentialsId) {
56 log.trace("Executing findDeviceCredentialsByCredentialsId [{}]", credentialsId); 53 log.trace("Executing findDeviceCredentialsByCredentialsId [{}]", credentialsId);
57 validateString(credentialsId, "Incorrect credentialsId " + credentialsId); 54 validateString(credentialsId, "Incorrect credentialsId " + credentialsId);
58 - DeviceCredentialsEntity deviceCredentialsEntity = deviceCredentialsDao.findByCredentialsId(credentialsId);  
59 - return getData(deviceCredentialsEntity); 55 + return deviceCredentialsDao.findByCredentialsId(credentialsId);
60 } 56 }
61 57
62 @Override 58 @Override
@@ -75,7 +71,7 @@ public class DeviceCredentialsServiceImpl implements DeviceCredentialsService { @@ -75,7 +71,7 @@ public class DeviceCredentialsServiceImpl implements DeviceCredentialsService {
75 } 71 }
76 log.trace("Executing updateDeviceCredentials [{}]", deviceCredentials); 72 log.trace("Executing updateDeviceCredentials [{}]", deviceCredentials);
77 credentialsValidator.validate(deviceCredentials); 73 credentialsValidator.validate(deviceCredentials);
78 - return getData(deviceCredentialsDao.save(deviceCredentials)); 74 + return deviceCredentialsDao.save(deviceCredentials);
79 } 75 }
80 76
81 private void formatCertData(DeviceCredentials deviceCredentials) { 77 private void formatCertData(DeviceCredentials deviceCredentials) {
@@ -96,7 +92,7 @@ public class DeviceCredentialsServiceImpl implements DeviceCredentialsService { @@ -96,7 +92,7 @@ public class DeviceCredentialsServiceImpl implements DeviceCredentialsService {
96 92
97 @Override 93 @Override
98 protected void validateCreate(DeviceCredentials deviceCredentials) { 94 protected void validateCreate(DeviceCredentials deviceCredentials) {
99 - DeviceCredentialsEntity existingCredentialsEntity = deviceCredentialsDao.findByCredentialsId(deviceCredentials.getCredentialsId()); 95 + DeviceCredentials existingCredentialsEntity = deviceCredentialsDao.findByCredentialsId(deviceCredentials.getCredentialsId());
100 if (existingCredentialsEntity != null) { 96 if (existingCredentialsEntity != null) {
101 throw new DataValidationException("Create of existent device credentials!"); 97 throw new DataValidationException("Create of existent device credentials!");
102 } 98 }
@@ -104,12 +100,12 @@ public class DeviceCredentialsServiceImpl implements DeviceCredentialsService { @@ -104,12 +100,12 @@ public class DeviceCredentialsServiceImpl implements DeviceCredentialsService {
104 100
105 @Override 101 @Override
106 protected void validateUpdate(DeviceCredentials deviceCredentials) { 102 protected void validateUpdate(DeviceCredentials deviceCredentials) {
107 - DeviceCredentialsEntity existingCredentialsEntity = deviceCredentialsDao.findById(deviceCredentials.getUuidId());  
108 - if (existingCredentialsEntity == null) { 103 + DeviceCredentials existingCredentials = deviceCredentialsDao.findById(deviceCredentials.getUuidId());
  104 + if (existingCredentials == null) {
109 throw new DataValidationException("Unable to update non-existent device credentials!"); 105 throw new DataValidationException("Unable to update non-existent device credentials!");
110 } 106 }
111 - DeviceCredentialsEntity sameCredentialsIdEntity = deviceCredentialsDao.findByCredentialsId(deviceCredentials.getCredentialsId());  
112 - if (sameCredentialsIdEntity != null && !sameCredentialsIdEntity.getId().equals(deviceCredentials.getUuidId())) { 107 + DeviceCredentials sameCredentialsId = deviceCredentialsDao.findByCredentialsId(deviceCredentials.getCredentialsId());
  108 + if (sameCredentialsId != null && !sameCredentialsId.getUuidId().equals(deviceCredentials.getUuidId())) {
113 throw new DataValidationException("Specified credentials are already registered!"); 109 throw new DataValidationException("Specified credentials are already registered!");
114 } 110 }
115 } 111 }
@@ -15,21 +15,20 @@ @@ -15,21 +15,20 @@
15 */ 15 */
16 package org.thingsboard.server.dao.device; 16 package org.thingsboard.server.dao.device;
17 17
18 -import java.util.List;  
19 -import java.util.Optional;  
20 -import java.util.UUID;  
21 -  
22 import com.google.common.util.concurrent.ListenableFuture; 18 import com.google.common.util.concurrent.ListenableFuture;
23 import org.thingsboard.server.common.data.Device; 19 import org.thingsboard.server.common.data.Device;
24 import org.thingsboard.server.common.data.page.TextPageLink; 20 import org.thingsboard.server.common.data.page.TextPageLink;
25 import org.thingsboard.server.dao.Dao; 21 import org.thingsboard.server.dao.Dao;
26 -import org.thingsboard.server.dao.model.DeviceEntity; 22 +
  23 +import java.util.List;
  24 +import java.util.Optional;
  25 +import java.util.UUID;
27 26
28 /** 27 /**
29 * The Interface DeviceDao. 28 * The Interface DeviceDao.
30 * 29 *
31 */ 30 */
32 -public interface DeviceDao extends Dao<DeviceEntity> { 31 +public interface DeviceDao extends Dao<Device> {
33 32
34 /** 33 /**
35 * Save or update device object 34 * Save or update device object
@@ -37,7 +36,7 @@ public interface DeviceDao extends Dao<DeviceEntity> { @@ -37,7 +36,7 @@ public interface DeviceDao extends Dao<DeviceEntity> {
37 * @param device the device object 36 * @param device the device object
38 * @return saved device object 37 * @return saved device object
39 */ 38 */
40 - DeviceEntity save(Device device); 39 + Device save(Device device);
41 40
42 /** 41 /**
43 * Find devices by tenantId and page link. 42 * Find devices by tenantId and page link.
@@ -46,7 +45,7 @@ public interface DeviceDao extends Dao<DeviceEntity> { @@ -46,7 +45,7 @@ public interface DeviceDao extends Dao<DeviceEntity> {
46 * @param pageLink the page link 45 * @param pageLink the page link
47 * @return the list of device objects 46 * @return the list of device objects
48 */ 47 */
49 - List<DeviceEntity> findDevicesByTenantId(UUID tenantId, TextPageLink pageLink); 48 + List<Device> findDevicesByTenantId(UUID tenantId, TextPageLink pageLink);
50 49
51 /** 50 /**
52 * Find devices by tenantId and devices Ids. 51 * Find devices by tenantId and devices Ids.
@@ -55,7 +54,7 @@ public interface DeviceDao extends Dao<DeviceEntity> { @@ -55,7 +54,7 @@ public interface DeviceDao extends Dao<DeviceEntity> {
55 * @param deviceIds the device Ids 54 * @param deviceIds the device Ids
56 * @return the list of device objects 55 * @return the list of device objects
57 */ 56 */
58 - ListenableFuture<List<DeviceEntity>> findDevicesByTenantIdAndIdsAsync(UUID tenantId, List<UUID> deviceIds); 57 + ListenableFuture<List<Device>> findDevicesByTenantIdAndIdsAsync(UUID tenantId, List<UUID> deviceIds);
59 58
60 /** 59 /**
61 * Find devices by tenantId, customerId and page link. 60 * Find devices by tenantId, customerId and page link.
@@ -65,7 +64,7 @@ public interface DeviceDao extends Dao<DeviceEntity> { @@ -65,7 +64,7 @@ public interface DeviceDao extends Dao<DeviceEntity> {
65 * @param pageLink the page link 64 * @param pageLink the page link
66 * @return the list of device objects 65 * @return the list of device objects
67 */ 66 */
68 - List<DeviceEntity> findDevicesByTenantIdAndCustomerId(UUID tenantId, UUID customerId, TextPageLink pageLink); 67 + List<Device> findDevicesByTenantIdAndCustomerId(UUID tenantId, UUID customerId, TextPageLink pageLink);
69 68
70 /** 69 /**
71 * Find devices by tenantId, customerId and devices Ids. 70 * Find devices by tenantId, customerId and devices Ids.
@@ -75,7 +74,7 @@ public interface DeviceDao extends Dao<DeviceEntity> { @@ -75,7 +74,7 @@ public interface DeviceDao extends Dao<DeviceEntity> {
75 * @param deviceIds the device Ids 74 * @param deviceIds the device Ids
76 * @return the list of device objects 75 * @return the list of device objects
77 */ 76 */
78 - ListenableFuture<List<DeviceEntity>> findDevicesByTenantIdCustomerIdAndIdsAsync(UUID tenantId, UUID customerId, List<UUID> deviceIds); 77 + ListenableFuture<List<Device>> findDevicesByTenantIdCustomerIdAndIdsAsync(UUID tenantId, UUID customerId, List<UUID> deviceIds);
79 78
80 /** 79 /**
81 * Find devices by tenantId and device name. 80 * Find devices by tenantId and device name.
@@ -84,5 +83,5 @@ public interface DeviceDao extends Dao<DeviceEntity> { @@ -84,5 +83,5 @@ public interface DeviceDao extends Dao<DeviceEntity> {
84 * @param name the device name 83 * @param name the device name
85 * @return the optional device object 84 * @return the optional device object
86 */ 85 */
87 - Optional<DeviceEntity> findDevicesByTenantIdAndName(UUID tenantId, String name); 86 + Optional<Device> findDevicesByTenantIdAndName(UUID tenantId, String name);
88 } 87 }
@@ -15,15 +15,15 @@ @@ -15,15 +15,15 @@
15 */ 15 */
16 package org.thingsboard.server.dao.device; 16 package org.thingsboard.server.dao.device;
17 17
18 -import com.google.common.base.Function;  
19 -import com.google.common.util.concurrent.Futures;  
20 import com.google.common.util.concurrent.ListenableFuture; 18 import com.google.common.util.concurrent.ListenableFuture;
21 import lombok.extern.slf4j.Slf4j; 19 import lombok.extern.slf4j.Slf4j;
22 import org.apache.commons.lang3.RandomStringUtils; 20 import org.apache.commons.lang3.RandomStringUtils;
23 import org.springframework.beans.factory.annotation.Autowired; 21 import org.springframework.beans.factory.annotation.Autowired;
24 import org.springframework.stereotype.Service; 22 import org.springframework.stereotype.Service;
25 import org.springframework.util.StringUtils; 23 import org.springframework.util.StringUtils;
  24 +import org.thingsboard.server.common.data.Customer;
26 import org.thingsboard.server.common.data.Device; 25 import org.thingsboard.server.common.data.Device;
  26 +import org.thingsboard.server.common.data.Tenant;
27 import org.thingsboard.server.common.data.id.CustomerId; 27 import org.thingsboard.server.common.data.id.CustomerId;
28 import org.thingsboard.server.common.data.id.DeviceId; 28 import org.thingsboard.server.common.data.id.DeviceId;
29 import org.thingsboard.server.common.data.id.TenantId; 29 import org.thingsboard.server.common.data.id.TenantId;
@@ -33,9 +33,6 @@ import org.thingsboard.server.common.data.security.DeviceCredentials; @@ -33,9 +33,6 @@ import org.thingsboard.server.common.data.security.DeviceCredentials;
33 import org.thingsboard.server.common.data.security.DeviceCredentialsType; 33 import org.thingsboard.server.common.data.security.DeviceCredentialsType;
34 import org.thingsboard.server.dao.customer.CustomerDao; 34 import org.thingsboard.server.dao.customer.CustomerDao;
35 import org.thingsboard.server.dao.exception.DataValidationException; 35 import org.thingsboard.server.dao.exception.DataValidationException;
36 -import org.thingsboard.server.dao.model.CustomerEntity;  
37 -import org.thingsboard.server.dao.model.DeviceEntity;  
38 -import org.thingsboard.server.dao.model.TenantEntity;  
39 import org.thingsboard.server.dao.service.DataValidator; 36 import org.thingsboard.server.dao.service.DataValidator;
40 import org.thingsboard.server.dao.service.PaginatedRemover; 37 import org.thingsboard.server.dao.service.PaginatedRemover;
41 import org.thingsboard.server.dao.tenant.TenantDao; 38 import org.thingsboard.server.dao.tenant.TenantDao;
@@ -43,8 +40,6 @@ import org.thingsboard.server.dao.tenant.TenantDao; @@ -43,8 +40,6 @@ import org.thingsboard.server.dao.tenant.TenantDao;
43 import java.util.List; 40 import java.util.List;
44 import java.util.Optional; 41 import java.util.Optional;
45 42
46 -import static org.thingsboard.server.dao.DaoUtil.convertDataList;  
47 -import static org.thingsboard.server.dao.DaoUtil.getData;  
48 import static org.thingsboard.server.dao.DaoUtil.toUUIDs; 43 import static org.thingsboard.server.dao.DaoUtil.toUUIDs;
49 import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID; 44 import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID;
50 import static org.thingsboard.server.dao.service.Validator.validateId; 45 import static org.thingsboard.server.dao.service.Validator.validateId;
@@ -71,25 +66,23 @@ public class DeviceServiceImpl implements DeviceService { @@ -71,25 +66,23 @@ public class DeviceServiceImpl implements DeviceService {
71 public Device findDeviceById(DeviceId deviceId) { 66 public Device findDeviceById(DeviceId deviceId) {
72 log.trace("Executing findDeviceById [{}]", deviceId); 67 log.trace("Executing findDeviceById [{}]", deviceId);
73 validateId(deviceId, "Incorrect deviceId " + deviceId); 68 validateId(deviceId, "Incorrect deviceId " + deviceId);
74 - DeviceEntity deviceEntity = deviceDao.findById(deviceId.getId());  
75 - return getData(deviceEntity); 69 + return deviceDao.findById(deviceId.getId());
76 } 70 }
77 71
78 @Override 72 @Override
79 public ListenableFuture<Device> findDeviceByIdAsync(DeviceId deviceId) { 73 public ListenableFuture<Device> findDeviceByIdAsync(DeviceId deviceId) {
80 log.trace("Executing findDeviceById [{}]", deviceId); 74 log.trace("Executing findDeviceById [{}]", deviceId);
81 validateId(deviceId, "Incorrect deviceId " + deviceId); 75 validateId(deviceId, "Incorrect deviceId " + deviceId);
82 - ListenableFuture<DeviceEntity> deviceEntity = deviceDao.findByIdAsync(deviceId.getId());  
83 - return Futures.transform(deviceEntity, (Function<? super DeviceEntity, ? extends Device>) input -> getData(input)); 76 + return deviceDao.findByIdAsync(deviceId.getId());
84 } 77 }
85 78
86 @Override 79 @Override
87 public Optional<Device> findDeviceByTenantIdAndName(TenantId tenantId, String name) { 80 public Optional<Device> findDeviceByTenantIdAndName(TenantId tenantId, String name) {
88 log.trace("Executing findDeviceByTenantIdAndName [{}][{}]", tenantId, name); 81 log.trace("Executing findDeviceByTenantIdAndName [{}][{}]", tenantId, name);
89 validateId(tenantId, "Incorrect tenantId " + tenantId); 82 validateId(tenantId, "Incorrect tenantId " + tenantId);
90 - Optional<DeviceEntity> deviceEntityOpt = deviceDao.findDevicesByTenantIdAndName(tenantId.getId(), name);  
91 - if (deviceEntityOpt.isPresent()) {  
92 - return Optional.of(getData(deviceEntityOpt.get())); 83 + Optional<Device> deviceOpt = deviceDao.findDevicesByTenantIdAndName(tenantId.getId(), name);
  84 + if (deviceOpt.isPresent()) {
  85 + return Optional.of(deviceOpt.get());
93 } else { 86 } else {
94 return Optional.empty(); 87 return Optional.empty();
95 } 88 }
@@ -99,15 +92,15 @@ public class DeviceServiceImpl implements DeviceService { @@ -99,15 +92,15 @@ public class DeviceServiceImpl implements DeviceService {
99 public Device saveDevice(Device device) { 92 public Device saveDevice(Device device) {
100 log.trace("Executing saveDevice [{}]", device); 93 log.trace("Executing saveDevice [{}]", device);
101 deviceValidator.validate(device); 94 deviceValidator.validate(device);
102 - DeviceEntity deviceEntity = deviceDao.save(device); 95 + Device savedDevice = deviceDao.save(device);
103 if (device.getId() == null) { 96 if (device.getId() == null) {
104 DeviceCredentials deviceCredentials = new DeviceCredentials(); 97 DeviceCredentials deviceCredentials = new DeviceCredentials();
105 - deviceCredentials.setDeviceId(new DeviceId(deviceEntity.getId())); 98 + deviceCredentials.setDeviceId(new DeviceId(savedDevice.getUuidId()));
106 deviceCredentials.setCredentialsType(DeviceCredentialsType.ACCESS_TOKEN); 99 deviceCredentials.setCredentialsType(DeviceCredentialsType.ACCESS_TOKEN);
107 deviceCredentials.setCredentialsId(RandomStringUtils.randomAlphanumeric(20)); 100 deviceCredentials.setCredentialsId(RandomStringUtils.randomAlphanumeric(20));
108 deviceCredentialsService.createDeviceCredentials(deviceCredentials); 101 deviceCredentialsService.createDeviceCredentials(deviceCredentials);
109 } 102 }
110 - return getData(deviceEntity); 103 + return savedDevice;
111 } 104 }
112 105
113 @Override 106 @Override
@@ -140,9 +133,8 @@ public class DeviceServiceImpl implements DeviceService { @@ -140,9 +133,8 @@ public class DeviceServiceImpl implements DeviceService {
140 log.trace("Executing findDevicesByTenantId, tenantId [{}], pageLink [{}]", tenantId, pageLink); 133 log.trace("Executing findDevicesByTenantId, tenantId [{}], pageLink [{}]", tenantId, pageLink);
141 validateId(tenantId, "Incorrect tenantId " + tenantId); 134 validateId(tenantId, "Incorrect tenantId " + tenantId);
142 validatePageLink(pageLink, "Incorrect page link " + pageLink); 135 validatePageLink(pageLink, "Incorrect page link " + pageLink);
143 - List<DeviceEntity> deviceEntities = deviceDao.findDevicesByTenantId(tenantId.getId(), pageLink);  
144 - List<Device> devices = convertDataList(deviceEntities);  
145 - return new TextPageData<Device>(devices, pageLink); 136 + List<Device> devices = deviceDao.findDevicesByTenantId(tenantId.getId(), pageLink);
  137 + return new TextPageData<>(devices, pageLink);
146 } 138 }
147 139
148 @Override 140 @Override
@@ -150,8 +142,7 @@ public class DeviceServiceImpl implements DeviceService { @@ -150,8 +142,7 @@ public class DeviceServiceImpl implements DeviceService {
150 log.trace("Executing findDevicesByTenantIdAndIdsAsync, tenantId [{}], deviceIds [{}]", tenantId, deviceIds); 142 log.trace("Executing findDevicesByTenantIdAndIdsAsync, tenantId [{}], deviceIds [{}]", tenantId, deviceIds);
151 validateId(tenantId, "Incorrect tenantId " + tenantId); 143 validateId(tenantId, "Incorrect tenantId " + tenantId);
152 validateIds(deviceIds, "Incorrect deviceIds " + deviceIds); 144 validateIds(deviceIds, "Incorrect deviceIds " + deviceIds);
153 - ListenableFuture<List<DeviceEntity>> deviceEntities = deviceDao.findDevicesByTenantIdAndIdsAsync(tenantId.getId(), toUUIDs(deviceIds));  
154 - return Futures.transform(deviceEntities, (Function<List<DeviceEntity>, List<Device>>) input -> convertDataList(input)); 145 + return deviceDao.findDevicesByTenantIdAndIdsAsync(tenantId.getId(), toUUIDs(deviceIds));
155 } 146 }
156 147
157 148
@@ -168,9 +159,8 @@ public class DeviceServiceImpl implements DeviceService { @@ -168,9 +159,8 @@ public class DeviceServiceImpl implements DeviceService {
168 validateId(tenantId, "Incorrect tenantId " + tenantId); 159 validateId(tenantId, "Incorrect tenantId " + tenantId);
169 validateId(customerId, "Incorrect customerId " + customerId); 160 validateId(customerId, "Incorrect customerId " + customerId);
170 validatePageLink(pageLink, "Incorrect page link " + pageLink); 161 validatePageLink(pageLink, "Incorrect page link " + pageLink);
171 - List<DeviceEntity> deviceEntities = deviceDao.findDevicesByTenantIdAndCustomerId(tenantId.getId(), customerId.getId(), pageLink);  
172 - List<Device> devices = convertDataList(deviceEntities);  
173 - return new TextPageData<Device>(devices, pageLink); 162 + List<Device> devices = deviceDao.findDevicesByTenantIdAndCustomerId(tenantId.getId(), customerId.getId(), pageLink);
  163 + return new TextPageData<>(devices, pageLink);
174 } 164 }
175 165
176 @Override 166 @Override
@@ -179,9 +169,8 @@ public class DeviceServiceImpl implements DeviceService { @@ -179,9 +169,8 @@ public class DeviceServiceImpl implements DeviceService {
179 validateId(tenantId, "Incorrect tenantId " + tenantId); 169 validateId(tenantId, "Incorrect tenantId " + tenantId);
180 validateId(customerId, "Incorrect customerId " + customerId); 170 validateId(customerId, "Incorrect customerId " + customerId);
181 validateIds(deviceIds, "Incorrect deviceIds " + deviceIds); 171 validateIds(deviceIds, "Incorrect deviceIds " + deviceIds);
182 - ListenableFuture<List<DeviceEntity>> deviceEntities = deviceDao.findDevicesByTenantIdCustomerIdAndIdsAsync(tenantId.getId(), 172 + return deviceDao.findDevicesByTenantIdCustomerIdAndIdsAsync(tenantId.getId(),
183 customerId.getId(), toUUIDs(deviceIds)); 173 customerId.getId(), toUUIDs(deviceIds));
184 - return Futures.transform(deviceEntities, (Function<List<DeviceEntity>, List<Device>>) input -> convertDataList(input));  
185 } 174 }
186 175
187 @Override 176 @Override
@@ -208,7 +197,7 @@ public class DeviceServiceImpl implements DeviceService { @@ -208,7 +197,7 @@ public class DeviceServiceImpl implements DeviceService {
208 protected void validateUpdate(Device device) { 197 protected void validateUpdate(Device device) {
209 deviceDao.findDevicesByTenantIdAndName(device.getTenantId().getId(), device.getName()).ifPresent( 198 deviceDao.findDevicesByTenantIdAndName(device.getTenantId().getId(), device.getName()).ifPresent(
210 d -> { 199 d -> {
211 - if (!d.getId().equals(device.getUuidId())) { 200 + if (!d.getUuidId().equals(device.getUuidId())) {
212 throw new DataValidationException("Device with such name already exists!"); 201 throw new DataValidationException("Device with such name already exists!");
213 } 202 }
214 } 203 }
@@ -223,7 +212,7 @@ public class DeviceServiceImpl implements DeviceService { @@ -223,7 +212,7 @@ public class DeviceServiceImpl implements DeviceService {
223 if (device.getTenantId() == null) { 212 if (device.getTenantId() == null) {
224 throw new DataValidationException("Device should be assigned to tenant!"); 213 throw new DataValidationException("Device should be assigned to tenant!");
225 } else { 214 } else {
226 - TenantEntity tenant = tenantDao.findById(device.getTenantId().getId()); 215 + Tenant tenant = tenantDao.findById(device.getTenantId().getId());
227 if (tenant == null) { 216 if (tenant == null) {
228 throw new DataValidationException("Device is referencing to non-existent tenant!"); 217 throw new DataValidationException("Device is referencing to non-existent tenant!");
229 } 218 }
@@ -231,32 +220,32 @@ public class DeviceServiceImpl implements DeviceService { @@ -231,32 +220,32 @@ public class DeviceServiceImpl implements DeviceService {
231 if (device.getCustomerId() == null) { 220 if (device.getCustomerId() == null) {
232 device.setCustomerId(new CustomerId(NULL_UUID)); 221 device.setCustomerId(new CustomerId(NULL_UUID));
233 } else if (!device.getCustomerId().getId().equals(NULL_UUID)) { 222 } else if (!device.getCustomerId().getId().equals(NULL_UUID)) {
234 - CustomerEntity customer = customerDao.findById(device.getCustomerId().getId()); 223 + Customer customer = customerDao.findById(device.getCustomerId().getId());
235 if (customer == null) { 224 if (customer == null) {
236 throw new DataValidationException("Can't assign device to non-existent customer!"); 225 throw new DataValidationException("Can't assign device to non-existent customer!");
237 } 226 }
238 - if (!customer.getTenantId().equals(device.getTenantId().getId())) { 227 + if (!customer.getTenantId().getId().equals(device.getTenantId().getId())) {
239 throw new DataValidationException("Can't assign device to customer from different tenant!"); 228 throw new DataValidationException("Can't assign device to customer from different tenant!");
240 } 229 }
241 } 230 }
242 } 231 }
243 }; 232 };
244 233
245 - private PaginatedRemover<TenantId, DeviceEntity> tenantDevicesRemover =  
246 - new PaginatedRemover<TenantId, DeviceEntity>() { 234 + private PaginatedRemover<TenantId, Device> tenantDevicesRemover =
  235 + new PaginatedRemover<TenantId, Device>() {
247 236
248 @Override 237 @Override
249 - protected List<DeviceEntity> findEntities(TenantId id, TextPageLink pageLink) { 238 + protected List<Device> findEntities(TenantId id, TextPageLink pageLink) {
250 return deviceDao.findDevicesByTenantId(id.getId(), pageLink); 239 return deviceDao.findDevicesByTenantId(id.getId(), pageLink);
251 } 240 }
252 241
253 @Override 242 @Override
254 - protected void removeEntity(DeviceEntity entity) {  
255 - deleteDevice(new DeviceId(entity.getId())); 243 + protected void removeEntity(Device entity) {
  244 + deleteDevice(new DeviceId(entity.getUuidId()));
256 } 245 }
257 }; 246 };
258 247
259 - class CustomerDevicesUnassigner extends PaginatedRemover<CustomerId, DeviceEntity> { 248 + private class CustomerDevicesUnassigner extends PaginatedRemover<CustomerId, Device> {
260 249
261 private TenantId tenantId; 250 private TenantId tenantId;
262 251
@@ -265,13 +254,13 @@ public class DeviceServiceImpl implements DeviceService { @@ -265,13 +254,13 @@ public class DeviceServiceImpl implements DeviceService {
265 } 254 }
266 255
267 @Override 256 @Override
268 - protected List<DeviceEntity> findEntities(CustomerId id, TextPageLink pageLink) { 257 + protected List<Device> findEntities(CustomerId id, TextPageLink pageLink) {
269 return deviceDao.findDevicesByTenantIdAndCustomerId(tenantId.getId(), id.getId(), pageLink); 258 return deviceDao.findDevicesByTenantIdAndCustomerId(tenantId.getId(), id.getId(), pageLink);
270 } 259 }
271 260
272 @Override 261 @Override
273 - protected void removeEntity(DeviceEntity entity) {  
274 - unassignDeviceFromCustomer(new DeviceId(entity.getId())); 262 + protected void removeEntity(Device entity) {
  263 + unassignDeviceFromCustomer(new DeviceId(entity.getUuidId()));
275 } 264 }
276 265
277 } 266 }
@@ -15,51 +15,32 @@ @@ -15,51 +15,32 @@
15 */ 15 */
16 package org.thingsboard.server.dao.event; 16 package org.thingsboard.server.dao.event;
17 17
18 -import com.datastax.driver.core.utils.UUIDs;  
19 import lombok.extern.slf4j.Slf4j; 18 import lombok.extern.slf4j.Slf4j;
20 import org.apache.commons.lang3.StringUtils; 19 import org.apache.commons.lang3.StringUtils;
21 import org.springframework.beans.factory.annotation.Autowired; 20 import org.springframework.beans.factory.annotation.Autowired;
22 import org.springframework.stereotype.Service; 21 import org.springframework.stereotype.Service;
23 import org.thingsboard.server.common.data.Event; 22 import org.thingsboard.server.common.data.Event;
24 import org.thingsboard.server.common.data.id.EntityId; 23 import org.thingsboard.server.common.data.id.EntityId;
25 -import org.thingsboard.server.common.data.id.EventId;  
26 import org.thingsboard.server.common.data.id.TenantId; 24 import org.thingsboard.server.common.data.id.TenantId;
27 import org.thingsboard.server.common.data.page.TimePageData; 25 import org.thingsboard.server.common.data.page.TimePageData;
28 import org.thingsboard.server.common.data.page.TimePageLink; 26 import org.thingsboard.server.common.data.page.TimePageLink;
29 import org.thingsboard.server.dao.exception.DataValidationException; 27 import org.thingsboard.server.dao.exception.DataValidationException;
30 -import org.thingsboard.server.dao.model.EventEntity;  
31 import org.thingsboard.server.dao.service.DataValidator; 28 import org.thingsboard.server.dao.service.DataValidator;
32 29
33 import java.util.List; 30 import java.util.List;
34 import java.util.Optional; 31 import java.util.Optional;
35 32
36 -import static org.thingsboard.server.dao.DaoUtil.convertDataList;  
37 -import static org.thingsboard.server.dao.DaoUtil.getData;  
38 -import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID;  
39 -  
40 @Service 33 @Service
41 @Slf4j 34 @Slf4j
42 public class BaseEventService implements EventService { 35 public class BaseEventService implements EventService {
43 36
44 - private final TenantId systemTenantId = new TenantId(NULL_UUID);  
45 -  
46 @Autowired 37 @Autowired
47 public EventDao eventDao; 38 public EventDao eventDao;
48 39
49 @Override 40 @Override
50 public Event save(Event event) { 41 public Event save(Event event) {
51 eventValidator.validate(event); 42 eventValidator.validate(event);
52 - if (event.getTenantId() == null) {  
53 - log.trace("Save system event with predefined id {}", systemTenantId);  
54 - event.setTenantId(systemTenantId);  
55 - }  
56 - if (event.getId() == null) {  
57 - event.setId(new EventId(UUIDs.timeBased()));  
58 - }  
59 - if (StringUtils.isEmpty(event.getUid())) {  
60 - event.setUid(event.getId().toString());  
61 - }  
62 - return getData(eventDao.save(event)); 43 + return eventDao.save(event);
63 } 44 }
64 45
65 @Override 46 @Override
@@ -68,15 +49,8 @@ public class BaseEventService implements EventService { @@ -68,15 +49,8 @@ public class BaseEventService implements EventService {
68 if (StringUtils.isEmpty(event.getUid())) { 49 if (StringUtils.isEmpty(event.getUid())) {
69 throw new DataValidationException("Event uid should be specified!."); 50 throw new DataValidationException("Event uid should be specified!.");
70 } 51 }
71 - if (event.getTenantId() == null) {  
72 - log.trace("Save system event with predefined id {}", systemTenantId);  
73 - event.setTenantId(systemTenantId);  
74 - }  
75 - if (event.getId() == null) {  
76 - event.setId(new EventId(UUIDs.timeBased()));  
77 - }  
78 - Optional<EventEntity> result = eventDao.saveIfNotExists(event);  
79 - return result.isPresent() ? Optional.of(getData(result.get())) : Optional.empty(); 52 + Optional<Event> result = eventDao.saveIfNotExists(event);
  53 + return result.isPresent() ? Optional.of(result.get()) : Optional.empty();
80 } 54 }
81 55
82 @Override 56 @Override
@@ -93,23 +67,20 @@ public class BaseEventService implements EventService { @@ -93,23 +67,20 @@ public class BaseEventService implements EventService {
93 if (StringUtils.isEmpty(eventUid)) { 67 if (StringUtils.isEmpty(eventUid)) {
94 throw new DataValidationException("Event uid should be specified!."); 68 throw new DataValidationException("Event uid should be specified!.");
95 } 69 }
96 - EventEntity entity = eventDao.findEvent(tenantId.getId(), entityId, eventType, eventUid);  
97 - return entity != null ? Optional.of(getData(entity)) : Optional.empty(); 70 + Event event = eventDao.findEvent(tenantId.getId(), entityId, eventType, eventUid);
  71 + return event != null ? Optional.of(event) : Optional.empty();
98 } 72 }
99 73
100 @Override 74 @Override
101 public TimePageData<Event> findEvents(TenantId tenantId, EntityId entityId, TimePageLink pageLink) { 75 public TimePageData<Event> findEvents(TenantId tenantId, EntityId entityId, TimePageLink pageLink) {
102 - List<EventEntity> entities = eventDao.findEvents(tenantId.getId(), entityId, pageLink);  
103 - List<Event> events = convertDataList(entities);  
104 - return new TimePageData<Event>(events, pageLink); 76 + List<Event> events = eventDao.findEvents(tenantId.getId(), entityId, pageLink);
  77 + return new TimePageData<>(events, pageLink);
105 } 78 }
106 79
107 -  
108 @Override 80 @Override
109 public TimePageData<Event> findEvents(TenantId tenantId, EntityId entityId, String eventType, TimePageLink pageLink) { 81 public TimePageData<Event> findEvents(TenantId tenantId, EntityId entityId, String eventType, TimePageLink pageLink) {
110 - List<EventEntity> entities = eventDao.findEvents(tenantId.getId(), entityId, eventType, pageLink);  
111 - List<Event> events = convertDataList(entities);  
112 - return new TimePageData<Event>(events, pageLink); 82 + List<Event> events = eventDao.findEvents(tenantId.getId(), entityId, eventType, pageLink);
  83 + return new TimePageData<>(events, pageLink);
113 } 84 }
114 85
115 private DataValidator<Event> eventValidator = 86 private DataValidator<Event> eventValidator =
dao/src/main/java/org/thingsboard/server/dao/event/CassandraBaseEventDao.java renamed from dao/src/main/java/org/thingsboard/server/dao/event/BaseEventDao.java
@@ -21,12 +21,16 @@ import com.datastax.driver.core.querybuilder.QueryBuilder; @@ -21,12 +21,16 @@ import com.datastax.driver.core.querybuilder.QueryBuilder;
21 import com.datastax.driver.core.querybuilder.Select; 21 import com.datastax.driver.core.querybuilder.Select;
22 import com.datastax.driver.core.utils.UUIDs; 22 import com.datastax.driver.core.utils.UUIDs;
23 import lombok.extern.slf4j.Slf4j; 23 import lombok.extern.slf4j.Slf4j;
  24 +import org.apache.commons.lang3.StringUtils;
24 import org.springframework.stereotype.Component; 25 import org.springframework.stereotype.Component;
25 import org.thingsboard.server.common.data.Event; 26 import org.thingsboard.server.common.data.Event;
26 import org.thingsboard.server.common.data.id.EntityId; 27 import org.thingsboard.server.common.data.id.EntityId;
  28 +import org.thingsboard.server.common.data.id.EventId;
  29 +import org.thingsboard.server.common.data.id.TenantId;
27 import org.thingsboard.server.common.data.page.TimePageLink; 30 import org.thingsboard.server.common.data.page.TimePageLink;
28 -import org.thingsboard.server.dao.AbstractSearchTimeDao;  
29 -import org.thingsboard.server.dao.model.EventEntity; 31 +import org.thingsboard.server.dao.CassandraAbstractSearchTimeDao;
  32 +import org.thingsboard.server.dao.DaoUtil;
  33 +import org.thingsboard.server.dao.model.nosql.EventEntity;
30 import org.thingsboard.server.dao.model.ModelConstants; 34 import org.thingsboard.server.dao.model.ModelConstants;
31 35
32 import java.util.Arrays; 36 import java.util.Arrays;
@@ -36,13 +40,13 @@ import java.util.UUID; @@ -36,13 +40,13 @@ import java.util.UUID;
36 40
37 import static com.datastax.driver.core.querybuilder.QueryBuilder.eq; 41 import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;
38 import static com.datastax.driver.core.querybuilder.QueryBuilder.select; 42 import static com.datastax.driver.core.querybuilder.QueryBuilder.select;
39 -import static org.thingsboard.server.dao.model.ModelConstants.EVENT_BY_ID_VIEW_NAME;  
40 -import static org.thingsboard.server.dao.model.ModelConstants.EVENT_BY_TYPE_AND_ID_VIEW_NAME;  
41 -import static org.thingsboard.server.dao.model.ModelConstants.EVENT_COLUMN_FAMILY_NAME; 43 +import static org.thingsboard.server.dao.model.ModelConstants.*;
42 44
43 @Component 45 @Component
44 @Slf4j 46 @Slf4j
45 -public class BaseEventDao extends AbstractSearchTimeDao<EventEntity> implements EventDao { 47 +public class CassandraBaseEventDao extends CassandraAbstractSearchTimeDao<EventEntity, Event> implements EventDao {
  48 +
  49 + private final TenantId systemTenantId = new TenantId(NULL_UUID);
46 50
47 @Override 51 @Override
48 protected Class<EventEntity> getColumnFamilyClass() { 52 protected Class<EventEntity> getColumnFamilyClass() {
@@ -55,18 +59,35 @@ public class BaseEventDao extends AbstractSearchTimeDao<EventEntity> implements @@ -55,18 +59,35 @@ public class BaseEventDao extends AbstractSearchTimeDao<EventEntity> implements
55 } 59 }
56 60
57 @Override 61 @Override
58 - public EventEntity save(Event event) { 62 + public Event save(Event event) {
59 log.debug("Save event [{}] ", event); 63 log.debug("Save event [{}] ", event);
  64 + if (event.getTenantId() == null) {
  65 + log.trace("Save system event with predefined id {}", systemTenantId);
  66 + event.setTenantId(systemTenantId);
  67 + }
  68 + if (event.getId() == null) {
  69 + event.setId(new EventId(UUIDs.timeBased()));
  70 + }
  71 + if (StringUtils.isEmpty(event.getUid())) {
  72 + event.setUid(event.getId().toString());
  73 + }
60 return save(new EventEntity(event), false).orElse(null); 74 return save(new EventEntity(event), false).orElse(null);
61 } 75 }
62 76
63 @Override 77 @Override
64 - public Optional<EventEntity> saveIfNotExists(Event event) { 78 + public Optional<Event> saveIfNotExists(Event event) {
  79 + if (event.getTenantId() == null) {
  80 + log.trace("Save system event with predefined id {}", systemTenantId);
  81 + event.setTenantId(systemTenantId);
  82 + }
  83 + if (event.getId() == null) {
  84 + event.setId(new EventId(UUIDs.timeBased()));
  85 + }
65 return save(new EventEntity(event), true); 86 return save(new EventEntity(event), true);
66 } 87 }
67 88
68 @Override 89 @Override
69 - public EventEntity findEvent(UUID tenantId, EntityId entityId, String eventType, String eventUid) { 90 + public Event findEvent(UUID tenantId, EntityId entityId, String eventType, String eventUid) {
70 log.debug("Search event entity by [{}][{}][{}][{}]", tenantId, entityId, eventType, eventUid); 91 log.debug("Search event entity by [{}][{}][{}][{}]", tenantId, entityId, eventType, eventUid);
71 Select.Where query = select().from(getColumnFamilyName()).where( 92 Select.Where query = select().from(getColumnFamilyName()).where(
72 eq(ModelConstants.EVENT_TENANT_ID_PROPERTY, tenantId)) 93 eq(ModelConstants.EVENT_TENANT_ID_PROPERTY, tenantId))
@@ -81,11 +102,11 @@ public class BaseEventDao extends AbstractSearchTimeDao<EventEntity> implements @@ -81,11 +102,11 @@ public class BaseEventDao extends AbstractSearchTimeDao<EventEntity> implements
81 } else { 102 } else {
82 log.debug("Search result: [{}]", entity != null); 103 log.debug("Search result: [{}]", entity != null);
83 } 104 }
84 - return entity; 105 + return DaoUtil.getData(entity);
85 } 106 }
86 107
87 @Override 108 @Override
88 - public List<EventEntity> findEvents(UUID tenantId, EntityId entityId, TimePageLink pageLink) { 109 + public List<Event> findEvents(UUID tenantId, EntityId entityId, TimePageLink pageLink) {
89 log.trace("Try to find events by tenant [{}], entity [{}]and pageLink [{}]", tenantId, entityId, pageLink); 110 log.trace("Try to find events by tenant [{}], entity [{}]and pageLink [{}]", tenantId, entityId, pageLink);
90 List<EventEntity> entities = findPageWithTimeSearch(EVENT_BY_ID_VIEW_NAME, 111 List<EventEntity> entities = findPageWithTimeSearch(EVENT_BY_ID_VIEW_NAME,
91 Arrays.asList(eq(ModelConstants.EVENT_TENANT_ID_PROPERTY, tenantId), 112 Arrays.asList(eq(ModelConstants.EVENT_TENANT_ID_PROPERTY, tenantId),
@@ -93,11 +114,11 @@ public class BaseEventDao extends AbstractSearchTimeDao<EventEntity> implements @@ -93,11 +114,11 @@ public class BaseEventDao extends AbstractSearchTimeDao<EventEntity> implements
93 eq(ModelConstants.EVENT_ENTITY_ID_PROPERTY, entityId.getId())), 114 eq(ModelConstants.EVENT_ENTITY_ID_PROPERTY, entityId.getId())),
94 pageLink); 115 pageLink);
95 log.trace("Found events by tenant [{}], entity [{}] and pageLink [{}]", tenantId, entityId, pageLink); 116 log.trace("Found events by tenant [{}], entity [{}] and pageLink [{}]", tenantId, entityId, pageLink);
96 - return entities; 117 + return DaoUtil.convertDataList(entities);
97 } 118 }
98 119
99 @Override 120 @Override
100 - public List<EventEntity> findEvents(UUID tenantId, EntityId entityId, String eventType, TimePageLink pageLink) { 121 + public List<Event> findEvents(UUID tenantId, EntityId entityId, String eventType, TimePageLink pageLink) {
101 log.trace("Try to find events by tenant [{}], entity [{}], type [{}] and pageLink [{}]", tenantId, entityId, eventType, pageLink); 122 log.trace("Try to find events by tenant [{}], entity [{}], type [{}] and pageLink [{}]", tenantId, entityId, eventType, pageLink);
102 List<EventEntity> entities = findPageWithTimeSearch(EVENT_BY_TYPE_AND_ID_VIEW_NAME, 123 List<EventEntity> entities = findPageWithTimeSearch(EVENT_BY_TYPE_AND_ID_VIEW_NAME,
103 Arrays.asList(eq(ModelConstants.EVENT_TENANT_ID_PROPERTY, tenantId), 124 Arrays.asList(eq(ModelConstants.EVENT_TENANT_ID_PROPERTY, tenantId),
@@ -108,10 +129,10 @@ public class BaseEventDao extends AbstractSearchTimeDao<EventEntity> implements @@ -108,10 +129,10 @@ public class BaseEventDao extends AbstractSearchTimeDao<EventEntity> implements
108 QueryBuilder.desc(ModelConstants.EVENT_TYPE_PROPERTY), 129 QueryBuilder.desc(ModelConstants.EVENT_TYPE_PROPERTY),
109 pageLink); 130 pageLink);
110 log.trace("Found events by tenant [{}], entity [{}], type [{}] and pageLink [{}]", tenantId, entityId, eventType, pageLink); 131 log.trace("Found events by tenant [{}], entity [{}], type [{}] and pageLink [{}]", tenantId, entityId, eventType, pageLink);
111 - return entities; 132 + return DaoUtil.convertDataList(entities);
112 } 133 }
113 134
114 - private Optional<EventEntity> save(EventEntity entity, boolean ifNotExists) { 135 + private Optional<Event> save(EventEntity entity, boolean ifNotExists) {
115 if (entity.getId() == null) { 136 if (entity.getId() == null) {
116 entity.setId(UUIDs.timeBased()); 137 entity.setId(UUIDs.timeBased());
117 } 138 }
@@ -128,7 +149,7 @@ public class BaseEventDao extends AbstractSearchTimeDao<EventEntity> implements @@ -128,7 +149,7 @@ public class BaseEventDao extends AbstractSearchTimeDao<EventEntity> implements
128 } 149 }
129 ResultSet rs = executeWrite(insert); 150 ResultSet rs = executeWrite(insert);
130 if (rs.wasApplied()) { 151 if (rs.wasApplied()) {
131 - return Optional.of(entity); 152 + return Optional.of(DaoUtil.getData(entity));
132 } else { 153 } else {
133 return Optional.empty(); 154 return Optional.empty();
134 } 155 }
@@ -19,7 +19,6 @@ import org.thingsboard.server.common.data.Event; @@ -19,7 +19,6 @@ import org.thingsboard.server.common.data.Event;
19 import org.thingsboard.server.common.data.id.EntityId; 19 import org.thingsboard.server.common.data.id.EntityId;
20 import org.thingsboard.server.common.data.page.TimePageLink; 20 import org.thingsboard.server.common.data.page.TimePageLink;
21 import org.thingsboard.server.dao.Dao; 21 import org.thingsboard.server.dao.Dao;
22 -import org.thingsboard.server.dao.model.EventEntity;  
23 22
24 import java.util.List; 23 import java.util.List;
25 import java.util.Optional; 24 import java.util.Optional;
@@ -27,10 +26,8 @@ import java.util.UUID; @@ -27,10 +26,8 @@ import java.util.UUID;
27 26
28 /** 27 /**
29 * The Interface DeviceDao. 28 * The Interface DeviceDao.
30 - *  
31 - * @param <T> the generic type  
32 */ 29 */
33 -public interface EventDao extends Dao<EventEntity> { 30 +public interface EventDao extends Dao<Event> {
34 31
35 /** 32 /**
36 * Save or update event object 33 * Save or update event object
@@ -38,7 +35,7 @@ public interface EventDao extends Dao<EventEntity> { @@ -38,7 +35,7 @@ public interface EventDao extends Dao<EventEntity> {
38 * @param event the event object 35 * @param event the event object
39 * @return saved event object 36 * @return saved event object
40 */ 37 */
41 - EventEntity save(Event event); 38 + Event save(Event event);
42 39
43 /** 40 /**
44 * Save event object if it is not yet saved 41 * Save event object if it is not yet saved
@@ -46,7 +43,7 @@ public interface EventDao extends Dao<EventEntity> { @@ -46,7 +43,7 @@ public interface EventDao extends Dao<EventEntity> {
46 * @param event the event object 43 * @param event the event object
47 * @return saved event object 44 * @return saved event object
48 */ 45 */
49 - Optional<EventEntity> saveIfNotExists(Event event); 46 + Optional<Event> saveIfNotExists(Event event);
50 47
51 /** 48 /**
52 * Find event by tenantId, entityId and eventUid. 49 * Find event by tenantId, entityId and eventUid.
@@ -57,7 +54,7 @@ public interface EventDao extends Dao<EventEntity> { @@ -57,7 +54,7 @@ public interface EventDao extends Dao<EventEntity> {
57 * @param eventUid the eventUid 54 * @param eventUid the eventUid
58 * @return the event 55 * @return the event
59 */ 56 */
60 - EventEntity findEvent(UUID tenantId, EntityId entityId, String eventType, String eventUid); 57 + Event findEvent(UUID tenantId, EntityId entityId, String eventType, String eventUid);
61 58
62 /** 59 /**
63 * Find events by tenantId, entityId and pageLink. 60 * Find events by tenantId, entityId and pageLink.
@@ -67,7 +64,7 @@ public interface EventDao extends Dao<EventEntity> { @@ -67,7 +64,7 @@ public interface EventDao extends Dao<EventEntity> {
67 * @param pageLink the pageLink 64 * @param pageLink the pageLink
68 * @return the event list 65 * @return the event list
69 */ 66 */
70 - List<EventEntity> findEvents(UUID tenantId, EntityId entityId, TimePageLink pageLink); 67 + List<Event> findEvents(UUID tenantId, EntityId entityId, TimePageLink pageLink);
71 68
72 /** 69 /**
73 * Find events by tenantId, entityId, eventType and pageLink. 70 * Find events by tenantId, entityId, eventType and pageLink.
@@ -78,5 +75,5 @@ public interface EventDao extends Dao<EventEntity> { @@ -78,5 +75,5 @@ public interface EventDao extends Dao<EventEntity> {
78 * @param pageLink the pageLink 75 * @param pageLink the pageLink
79 * @return the event list 76 * @return the event list
80 */ 77 */
81 - List<EventEntity> findEvents(UUID tenantId, EntityId entityId, String eventType, TimePageLink pageLink); 78 + List<Event> findEvents(UUID tenantId, EntityId entityId, String eventType, TimePageLink pageLink);
82 } 79 }
@@ -21,7 +21,6 @@ import org.thingsboard.server.common.data.id.TenantId; @@ -21,7 +21,6 @@ import org.thingsboard.server.common.data.id.TenantId;
21 import org.thingsboard.server.common.data.page.TimePageData; 21 import org.thingsboard.server.common.data.page.TimePageData;
22 import org.thingsboard.server.common.data.page.TimePageLink; 22 import org.thingsboard.server.common.data.page.TimePageLink;
23 23
24 -import java.util.List;  
25 import java.util.Optional; 24 import java.util.Optional;
26 25
27 public interface EventService { 26 public interface EventService {
@@ -17,22 +17,22 @@ package org.thingsboard.server.dao.exception; @@ -17,22 +17,22 @@ package org.thingsboard.server.dao.exception;
17 17
18 public class DatabaseException extends RuntimeException { 18 public class DatabaseException extends RuntimeException {
19 19
20 - private static final long serialVersionUID = 3463762014441887103L; 20 + private static final long serialVersionUID = 3463762014441887103L;
21 21
22 - public DatabaseException() {  
23 - super();  
24 - } 22 + public DatabaseException() {
  23 + super();
  24 + }
25 25
26 - public DatabaseException(String message, Throwable cause) {  
27 - super(message, cause);  
28 - } 26 + public DatabaseException(String message, Throwable cause) {
  27 + super(message, cause);
  28 + }
29 29
30 - public DatabaseException(String message) {  
31 - super(message);  
32 - } 30 + public DatabaseException(String message) {
  31 + super(message);
  32 + }
33 33
34 - public DatabaseException(Throwable cause) {  
35 - super(cause);  
36 - } 34 + public DatabaseException(Throwable cause) {
  35 + super(cause);
  36 + }
37 37
38 } 38 }
@@ -18,9 +18,9 @@ package org.thingsboard.server.dao.exception; @@ -18,9 +18,9 @@ package org.thingsboard.server.dao.exception;
18 18
19 public class IncorrectParameterException extends RuntimeException { 19 public class IncorrectParameterException extends RuntimeException {
20 20
21 - private static final long serialVersionUID = 601995650578985289L; 21 + private static final long serialVersionUID = 601995650578985289L;
22 22
23 - public IncorrectParameterException(String message) { 23 + public IncorrectParameterException(String message) {
24 super(message); 24 super(message);
25 } 25 }
26 26
dao/src/main/java/org/thingsboard/server/dao/model/nosql/AdminSettingsEntity.java renamed from dao/src/main/java/org/thingsboard/server/dao/model/AdminSettingsEntity.java
@@ -13,7 +13,7 @@ @@ -13,7 +13,7 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.thingsboard.server.dao.model; 16 +package org.thingsboard.server.dao.model.nosql;
17 17
18 import static org.thingsboard.server.dao.model.ModelConstants.ADMIN_SETTINGS_COLUMN_FAMILY_NAME; 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; 19 import static org.thingsboard.server.dao.model.ModelConstants.ADMIN_SETTINGS_JSON_VALUE_PROPERTY;
@@ -24,6 +24,7 @@ import java.util.UUID; @@ -24,6 +24,7 @@ import java.util.UUID;
24 24
25 import org.thingsboard.server.common.data.AdminSettings; 25 import org.thingsboard.server.common.data.AdminSettings;
26 import org.thingsboard.server.common.data.id.AdminSettingsId; 26 import org.thingsboard.server.common.data.id.AdminSettingsId;
  27 +import org.thingsboard.server.dao.model.BaseEntity;
27 import org.thingsboard.server.dao.model.type.JsonCodec; 28 import org.thingsboard.server.dao.model.type.JsonCodec;
28 29
29 import com.datastax.driver.core.utils.UUIDs; 30 import com.datastax.driver.core.utils.UUIDs;
dao/src/main/java/org/thingsboard/server/dao/model/nosql/ComponentDescriptorEntity.java renamed from dao/src/main/java/org/thingsboard/server/dao/model/ComponentDescriptorEntity.java
@@ -13,7 +13,7 @@ @@ -13,7 +13,7 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.thingsboard.server.dao.model; 16 +package org.thingsboard.server.dao.model.nosql;
17 17
18 import com.datastax.driver.mapping.annotations.Column; 18 import com.datastax.driver.mapping.annotations.Column;
19 import com.datastax.driver.mapping.annotations.PartitionKey; 19 import com.datastax.driver.mapping.annotations.PartitionKey;
@@ -23,6 +23,8 @@ import org.thingsboard.server.common.data.id.ComponentDescriptorId; @@ -23,6 +23,8 @@ import org.thingsboard.server.common.data.id.ComponentDescriptorId;
23 import org.thingsboard.server.common.data.plugin.ComponentDescriptor; 23 import org.thingsboard.server.common.data.plugin.ComponentDescriptor;
24 import org.thingsboard.server.common.data.plugin.ComponentScope; 24 import org.thingsboard.server.common.data.plugin.ComponentScope;
25 import org.thingsboard.server.common.data.plugin.ComponentType; 25 import org.thingsboard.server.common.data.plugin.ComponentType;
  26 +import org.thingsboard.server.dao.model.ModelConstants;
  27 +import org.thingsboard.server.dao.model.SearchTextEntity;
26 import org.thingsboard.server.dao.model.type.JsonCodec; 28 import org.thingsboard.server.dao.model.type.JsonCodec;
27 29
28 import java.util.UUID; 30 import java.util.UUID;
dao/src/main/java/org/thingsboard/server/dao/model/nosql/CustomerEntity.java renamed from dao/src/main/java/org/thingsboard/server/dao/model/CustomerEntity.java
@@ -13,28 +13,15 @@ @@ -13,28 +13,15 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.thingsboard.server.dao.model;  
17 -  
18 -import static org.thingsboard.server.dao.model.ModelConstants.ADDRESS2_PROPERTY;  
19 -import static org.thingsboard.server.dao.model.ModelConstants.ADDRESS_PROPERTY;  
20 -import static org.thingsboard.server.dao.model.ModelConstants.CITY_PROPERTY;  
21 -import static org.thingsboard.server.dao.model.ModelConstants.COUNTRY_PROPERTY;  
22 -import static org.thingsboard.server.dao.model.ModelConstants.CUSTOMER_ADDITIONAL_INFO_PROPERTY;  
23 -import static org.thingsboard.server.dao.model.ModelConstants.CUSTOMER_COLUMN_FAMILY_NAME;  
24 -import static org.thingsboard.server.dao.model.ModelConstants.CUSTOMER_TENANT_ID_PROPERTY;  
25 -import static org.thingsboard.server.dao.model.ModelConstants.CUSTOMER_TITLE_PROPERTY;  
26 -import static org.thingsboard.server.dao.model.ModelConstants.EMAIL_PROPERTY;  
27 -import static org.thingsboard.server.dao.model.ModelConstants.ID_PROPERTY;  
28 -import static org.thingsboard.server.dao.model.ModelConstants.PHONE_PROPERTY;  
29 -import static org.thingsboard.server.dao.model.ModelConstants.SEARCH_TEXT_PROPERTY;  
30 -import static org.thingsboard.server.dao.model.ModelConstants.STATE_PROPERTY;  
31 -import static org.thingsboard.server.dao.model.ModelConstants.ZIP_PROPERTY; 16 +package org.thingsboard.server.dao.model.nosql;
32 17
33 import java.util.UUID; 18 import java.util.UUID;
34 19
35 import org.thingsboard.server.common.data.Customer; 20 import org.thingsboard.server.common.data.Customer;
36 import org.thingsboard.server.common.data.id.CustomerId; 21 import org.thingsboard.server.common.data.id.CustomerId;
37 import org.thingsboard.server.common.data.id.TenantId; 22 import org.thingsboard.server.common.data.id.TenantId;
  23 +import org.thingsboard.server.dao.model.ModelConstants;
  24 +import org.thingsboard.server.dao.model.SearchTextEntity;
38 import org.thingsboard.server.dao.model.type.JsonCodec; 25 import org.thingsboard.server.dao.model.type.JsonCodec;
39 26
40 import com.datastax.driver.core.utils.UUIDs; 27 import com.datastax.driver.core.utils.UUIDs;
@@ -44,51 +31,51 @@ import com.datastax.driver.mapping.annotations.Table; @@ -44,51 +31,51 @@ import com.datastax.driver.mapping.annotations.Table;
44 import com.datastax.driver.mapping.annotations.Transient; 31 import com.datastax.driver.mapping.annotations.Transient;
45 import com.fasterxml.jackson.databind.JsonNode; 32 import com.fasterxml.jackson.databind.JsonNode;
46 33
47 -@Table(name = CUSTOMER_COLUMN_FAMILY_NAME) 34 +@Table(name = ModelConstants.CUSTOMER_COLUMN_FAMILY_NAME)
48 public final class CustomerEntity implements SearchTextEntity<Customer> { 35 public final class CustomerEntity implements SearchTextEntity<Customer> {
49 36
50 @Transient 37 @Transient
51 private static final long serialVersionUID = -7732527103760948490L; 38 private static final long serialVersionUID = -7732527103760948490L;
52 39
53 @PartitionKey(value = 0) 40 @PartitionKey(value = 0)
54 - @Column(name = ID_PROPERTY) 41 + @Column(name = ModelConstants.ID_PROPERTY)
55 private UUID id; 42 private UUID id;
56 43
57 @PartitionKey(value = 1) 44 @PartitionKey(value = 1)
58 - @Column(name = CUSTOMER_TENANT_ID_PROPERTY) 45 + @Column(name = ModelConstants.CUSTOMER_TENANT_ID_PROPERTY)
59 private UUID tenantId; 46 private UUID tenantId;
60 47
61 - @Column(name = CUSTOMER_TITLE_PROPERTY) 48 + @Column(name = ModelConstants.CUSTOMER_TITLE_PROPERTY)
62 private String title; 49 private String title;
63 50
64 - @Column(name = SEARCH_TEXT_PROPERTY) 51 + @Column(name = ModelConstants.SEARCH_TEXT_PROPERTY)
65 private String searchText; 52 private String searchText;
66 53
67 - @Column(name = COUNTRY_PROPERTY) 54 + @Column(name = ModelConstants.COUNTRY_PROPERTY)
68 private String country; 55 private String country;
69 56
70 - @Column(name = STATE_PROPERTY) 57 + @Column(name = ModelConstants.STATE_PROPERTY)
71 private String state; 58 private String state;
72 59
73 - @Column(name = CITY_PROPERTY) 60 + @Column(name = ModelConstants.CITY_PROPERTY)
74 private String city; 61 private String city;
75 62
76 - @Column(name = ADDRESS_PROPERTY) 63 + @Column(name = ModelConstants.ADDRESS_PROPERTY)
77 private String address; 64 private String address;
78 65
79 - @Column(name = ADDRESS2_PROPERTY) 66 + @Column(name = ModelConstants.ADDRESS2_PROPERTY)
80 private String address2; 67 private String address2;
81 68
82 - @Column(name = ZIP_PROPERTY) 69 + @Column(name = ModelConstants.ZIP_PROPERTY)
83 private String zip; 70 private String zip;
84 71
85 - @Column(name = PHONE_PROPERTY) 72 + @Column(name = ModelConstants.PHONE_PROPERTY)
86 private String phone; 73 private String phone;
87 74
88 - @Column(name = EMAIL_PROPERTY) 75 + @Column(name = ModelConstants.EMAIL_PROPERTY)
89 private String email; 76 private String email;
90 77
91 - @Column(name = CUSTOMER_ADDITIONAL_INFO_PROPERTY, codec = JsonCodec.class) 78 + @Column(name = ModelConstants.CUSTOMER_ADDITIONAL_INFO_PROPERTY, codec = JsonCodec.class)
92 private JsonNode additionalInfo; 79 private JsonNode additionalInfo;
93 80
94 public CustomerEntity() { 81 public CustomerEntity() {
dao/src/main/java/org/thingsboard/server/dao/model/nosql/DashboardEntity.java renamed from dao/src/main/java/org/thingsboard/server/dao/model/DashboardEntity.java
@@ -13,7 +13,7 @@ @@ -13,7 +13,7 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.thingsboard.server.dao.model; 16 +package org.thingsboard.server.dao.model.nosql;
17 17
18 import java.util.UUID; 18 import java.util.UUID;
19 19
@@ -21,6 +21,8 @@ import org.thingsboard.server.common.data.Dashboard; @@ -21,6 +21,8 @@ import org.thingsboard.server.common.data.Dashboard;
21 import org.thingsboard.server.common.data.id.CustomerId; 21 import org.thingsboard.server.common.data.id.CustomerId;
22 import org.thingsboard.server.common.data.id.DashboardId; 22 import org.thingsboard.server.common.data.id.DashboardId;
23 import org.thingsboard.server.common.data.id.TenantId; 23 import org.thingsboard.server.common.data.id.TenantId;
  24 +import org.thingsboard.server.dao.model.ModelConstants;
  25 +import org.thingsboard.server.dao.model.SearchTextEntity;
24 import org.thingsboard.server.dao.model.type.JsonCodec; 26 import org.thingsboard.server.dao.model.type.JsonCodec;
25 27
26 import com.datastax.driver.core.utils.UUIDs; 28 import com.datastax.driver.core.utils.UUIDs;
dao/src/main/java/org/thingsboard/server/dao/model/nosql/DashboardInfoEntity.java renamed from dao/src/main/java/org/thingsboard/server/dao/model/DashboardInfoEntity.java
@@ -13,23 +13,22 @@ @@ -13,23 +13,22 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.thingsboard.server.dao.model; 16 +package org.thingsboard.server.dao.model.nosql;
17 17
18 import java.util.UUID; 18 import java.util.UUID;
19 19
20 -import org.thingsboard.server.common.data.Dashboard;  
21 import org.thingsboard.server.common.data.DashboardInfo; 20 import org.thingsboard.server.common.data.DashboardInfo;
22 import org.thingsboard.server.common.data.id.CustomerId; 21 import org.thingsboard.server.common.data.id.CustomerId;
23 import org.thingsboard.server.common.data.id.DashboardId; 22 import org.thingsboard.server.common.data.id.DashboardId;
24 import org.thingsboard.server.common.data.id.TenantId; 23 import org.thingsboard.server.common.data.id.TenantId;
25 -import org.thingsboard.server.dao.model.type.JsonCodec; 24 +import org.thingsboard.server.dao.model.ModelConstants;
  25 +import org.thingsboard.server.dao.model.SearchTextEntity;
26 26
27 import com.datastax.driver.core.utils.UUIDs; 27 import com.datastax.driver.core.utils.UUIDs;
28 import com.datastax.driver.mapping.annotations.Column; 28 import com.datastax.driver.mapping.annotations.Column;
29 import com.datastax.driver.mapping.annotations.PartitionKey; 29 import com.datastax.driver.mapping.annotations.PartitionKey;
30 import com.datastax.driver.mapping.annotations.Table; 30 import com.datastax.driver.mapping.annotations.Table;
31 import com.datastax.driver.mapping.annotations.Transient; 31 import com.datastax.driver.mapping.annotations.Transient;
32 -import com.fasterxml.jackson.databind.JsonNode;  
33 32
34 @Table(name = ModelConstants.DASHBOARD_COLUMN_FAMILY_NAME) 33 @Table(name = ModelConstants.DASHBOARD_COLUMN_FAMILY_NAME)
35 public class DashboardInfoEntity implements SearchTextEntity<DashboardInfo> { 34 public class DashboardInfoEntity implements SearchTextEntity<DashboardInfo> {
dao/src/main/java/org/thingsboard/server/dao/model/nosql/DeviceCredentialsEntity.java renamed from dao/src/main/java/org/thingsboard/server/dao/model/DeviceCredentialsEntity.java
@@ -13,7 +13,7 @@ @@ -13,7 +13,7 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.thingsboard.server.dao.model; 16 +package org.thingsboard.server.dao.model.nosql;
17 17
18 import java.util.UUID; 18 import java.util.UUID;
19 19
@@ -21,6 +21,8 @@ import org.thingsboard.server.common.data.id.DeviceCredentialsId; @@ -21,6 +21,8 @@ import org.thingsboard.server.common.data.id.DeviceCredentialsId;
21 import org.thingsboard.server.common.data.id.DeviceId; 21 import org.thingsboard.server.common.data.id.DeviceId;
22 import org.thingsboard.server.common.data.security.DeviceCredentials; 22 import org.thingsboard.server.common.data.security.DeviceCredentials;
23 import org.thingsboard.server.common.data.security.DeviceCredentialsType; 23 import org.thingsboard.server.common.data.security.DeviceCredentialsType;
  24 +import org.thingsboard.server.dao.model.BaseEntity;
  25 +import org.thingsboard.server.dao.model.ModelConstants;
24 import org.thingsboard.server.dao.model.type.DeviceCredentialsTypeCodec; 26 import org.thingsboard.server.dao.model.type.DeviceCredentialsTypeCodec;
25 27
26 import com.datastax.driver.core.utils.UUIDs; 28 import com.datastax.driver.core.utils.UUIDs;
dao/src/main/java/org/thingsboard/server/dao/model/nosql/DeviceEntity.java renamed from dao/src/main/java/org/thingsboard/server/dao/model/DeviceEntity.java
@@ -13,7 +13,7 @@ @@ -13,7 +13,7 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.thingsboard.server.dao.model; 16 +package org.thingsboard.server.dao.model.nosql;
17 17
18 import com.datastax.driver.core.utils.UUIDs; 18 import com.datastax.driver.core.utils.UUIDs;
19 import com.datastax.driver.mapping.annotations.Column; 19 import com.datastax.driver.mapping.annotations.Column;
@@ -25,37 +25,37 @@ import org.thingsboard.server.common.data.Device; @@ -25,37 +25,37 @@ import org.thingsboard.server.common.data.Device;
25 import org.thingsboard.server.common.data.id.CustomerId; 25 import org.thingsboard.server.common.data.id.CustomerId;
26 import org.thingsboard.server.common.data.id.DeviceId; 26 import org.thingsboard.server.common.data.id.DeviceId;
27 import org.thingsboard.server.common.data.id.TenantId; 27 import org.thingsboard.server.common.data.id.TenantId;
  28 +import org.thingsboard.server.dao.model.ModelConstants;
  29 +import org.thingsboard.server.dao.model.SearchTextEntity;
28 import org.thingsboard.server.dao.model.type.JsonCodec; 30 import org.thingsboard.server.dao.model.type.JsonCodec;
29 31
30 import java.util.UUID; 32 import java.util.UUID;
31 33
32 -import static org.thingsboard.server.dao.model.ModelConstants.*;  
33 -  
34 -@Table(name = DEVICE_COLUMN_FAMILY_NAME) 34 +@Table(name = ModelConstants.DEVICE_COLUMN_FAMILY_NAME)
35 public final class DeviceEntity implements SearchTextEntity<Device> { 35 public final class DeviceEntity implements SearchTextEntity<Device> {
36 36
37 @Transient 37 @Transient
38 private static final long serialVersionUID = -1265181166886910152L; 38 private static final long serialVersionUID = -1265181166886910152L;
39 39
40 @PartitionKey(value = 0) 40 @PartitionKey(value = 0)
41 - @Column(name = ID_PROPERTY) 41 + @Column(name = ModelConstants.ID_PROPERTY)
42 private UUID id; 42 private UUID id;
43 43
44 @PartitionKey(value = 1) 44 @PartitionKey(value = 1)
45 - @Column(name = DEVICE_TENANT_ID_PROPERTY) 45 + @Column(name = ModelConstants.DEVICE_TENANT_ID_PROPERTY)
46 private UUID tenantId; 46 private UUID tenantId;
47 47
48 @PartitionKey(value = 2) 48 @PartitionKey(value = 2)
49 - @Column(name = DEVICE_CUSTOMER_ID_PROPERTY) 49 + @Column(name = ModelConstants.DEVICE_CUSTOMER_ID_PROPERTY)
50 private UUID customerId; 50 private UUID customerId;
51 51
52 - @Column(name = DEVICE_NAME_PROPERTY) 52 + @Column(name = ModelConstants.DEVICE_NAME_PROPERTY)
53 private String name; 53 private String name;
54 54
55 - @Column(name = SEARCH_TEXT_PROPERTY) 55 + @Column(name = ModelConstants.SEARCH_TEXT_PROPERTY)
56 private String searchText; 56 private String searchText;
57 57
58 - @Column(name = DEVICE_ADDITIONAL_INFO_PROPERTY, codec = JsonCodec.class) 58 + @Column(name = ModelConstants.DEVICE_ADDITIONAL_INFO_PROPERTY, codec = JsonCodec.class)
59 private JsonNode additionalInfo; 59 private JsonNode additionalInfo;
60 60
61 public DeviceEntity() { 61 public DeviceEntity() {
dao/src/main/java/org/thingsboard/server/dao/model/nosql/EventEntity.java renamed from dao/src/main/java/org/thingsboard/server/dao/model/EventEntity.java
@@ -13,7 +13,7 @@ @@ -13,7 +13,7 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.thingsboard.server.dao.model; 16 +package org.thingsboard.server.dao.model.nosql;
17 17
18 import com.datastax.driver.core.utils.UUIDs; 18 import com.datastax.driver.core.utils.UUIDs;
19 import com.datastax.driver.mapping.annotations.*; 19 import com.datastax.driver.mapping.annotations.*;
@@ -23,48 +23,48 @@ import lombok.NoArgsConstructor; @@ -23,48 +23,48 @@ import lombok.NoArgsConstructor;
23 import org.thingsboard.server.common.data.EntityType; 23 import org.thingsboard.server.common.data.EntityType;
24 import org.thingsboard.server.common.data.Event; 24 import org.thingsboard.server.common.data.Event;
25 import org.thingsboard.server.common.data.id.*; 25 import org.thingsboard.server.common.data.id.*;
  26 +import org.thingsboard.server.dao.model.BaseEntity;
  27 +import org.thingsboard.server.dao.model.ModelConstants;
26 import org.thingsboard.server.dao.model.type.EntityTypeCodec; 28 import org.thingsboard.server.dao.model.type.EntityTypeCodec;
27 import org.thingsboard.server.dao.model.type.JsonCodec; 29 import org.thingsboard.server.dao.model.type.JsonCodec;
28 30
29 import java.util.UUID; 31 import java.util.UUID;
30 32
31 -import static org.thingsboard.server.dao.model.ModelConstants.*;  
32 -  
33 /** 33 /**
34 * @author Andrew Shvayka 34 * @author Andrew Shvayka
35 */ 35 */
36 @Data 36 @Data
37 @NoArgsConstructor 37 @NoArgsConstructor
38 -@Table(name = DEVICE_COLUMN_FAMILY_NAME) 38 +@Table(name = ModelConstants.DEVICE_COLUMN_FAMILY_NAME)
39 public class EventEntity implements BaseEntity<Event> { 39 public class EventEntity implements BaseEntity<Event> {
40 40
41 @Transient 41 @Transient
42 private static final long serialVersionUID = -1265181166886910153L; 42 private static final long serialVersionUID = -1265181166886910153L;
43 43
44 - @Column(name = ID_PROPERTY) 44 + @Column(name = ModelConstants.ID_PROPERTY)
45 private UUID id; 45 private UUID id;
46 46
47 @PartitionKey() 47 @PartitionKey()
48 - @Column(name = EVENT_TENANT_ID_PROPERTY) 48 + @Column(name = ModelConstants.EVENT_TENANT_ID_PROPERTY)
49 private UUID tenantId; 49 private UUID tenantId;
50 50
51 @PartitionKey(value = 1) 51 @PartitionKey(value = 1)
52 - @Column(name = EVENT_ENTITY_TYPE_PROPERTY, codec = EntityTypeCodec.class) 52 + @Column(name = ModelConstants.EVENT_ENTITY_TYPE_PROPERTY, codec = EntityTypeCodec.class)
53 private EntityType entityType; 53 private EntityType entityType;
54 54
55 @PartitionKey(value = 2) 55 @PartitionKey(value = 2)
56 - @Column(name = EVENT_ENTITY_ID_PROPERTY) 56 + @Column(name = ModelConstants.EVENT_ENTITY_ID_PROPERTY)
57 private UUID entityId; 57 private UUID entityId;
58 58
59 @ClusteringColumn() 59 @ClusteringColumn()
60 - @Column(name = EVENT_TYPE_PROPERTY) 60 + @Column(name = ModelConstants.EVENT_TYPE_PROPERTY)
61 private String eventType; 61 private String eventType;
62 62
63 @ClusteringColumn(value = 1) 63 @ClusteringColumn(value = 1)
64 - @Column(name = EVENT_UID_PROPERTY) 64 + @Column(name = ModelConstants.EVENT_UID_PROPERTY)
65 private String eventUId; 65 private String eventUId;
66 66
67 - @Column(name = EVENT_BODY_PROPERTY, codec = JsonCodec.class) 67 + @Column(name = ModelConstants.EVENT_BODY_PROPERTY, codec = JsonCodec.class)
68 private JsonNode body; 68 private JsonNode body;
69 69
70 public EventEntity(Event event) { 70 public EventEntity(Event event) {
dao/src/main/java/org/thingsboard/server/dao/model/nosql/PluginMetaDataEntity.java renamed from dao/src/main/java/org/thingsboard/server/dao/model/PluginMetaDataEntity.java
@@ -13,31 +13,28 @@ @@ -13,31 +13,28 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.thingsboard.server.dao.model; 16 +package org.thingsboard.server.dao.model.nosql;
17 17
18 import com.datastax.driver.core.utils.UUIDs; 18 import com.datastax.driver.core.utils.UUIDs;
19 -import com.datastax.driver.mapping.annotations.ClusteringColumn;  
20 -import com.datastax.driver.mapping.annotations.Column;  
21 -import com.datastax.driver.mapping.annotations.PartitionKey;  
22 -import com.datastax.driver.mapping.annotations.Table; 19 +import com.datastax.driver.mapping.annotations.*;
23 import com.fasterxml.jackson.databind.JsonNode; 20 import com.fasterxml.jackson.databind.JsonNode;
24 import org.thingsboard.server.common.data.id.PluginId; 21 import org.thingsboard.server.common.data.id.PluginId;
25 import org.thingsboard.server.common.data.id.TenantId; 22 import org.thingsboard.server.common.data.id.TenantId;
26 import org.thingsboard.server.common.data.plugin.ComponentLifecycleState; 23 import org.thingsboard.server.common.data.plugin.ComponentLifecycleState;
27 import org.thingsboard.server.common.data.plugin.PluginMetaData; 24 import org.thingsboard.server.common.data.plugin.PluginMetaData;
  25 +import org.thingsboard.server.dao.model.ModelConstants;
  26 +import org.thingsboard.server.dao.model.SearchTextEntity;
28 import org.thingsboard.server.dao.model.type.ComponentLifecycleStateCodec; 27 import org.thingsboard.server.dao.model.type.ComponentLifecycleStateCodec;
29 import org.thingsboard.server.dao.model.type.JsonCodec; 28 import org.thingsboard.server.dao.model.type.JsonCodec;
30 29
31 import java.util.Objects; 30 import java.util.Objects;
32 import java.util.UUID; 31 import java.util.UUID;
33 32
34 -import static org.thingsboard.server.dao.model.ModelConstants.ADDITIONAL_INFO_PROPERTY;  
35 -import static org.thingsboard.server.dao.model.ModelConstants.RULE_ACTION;  
36 -  
37 @Table(name = ModelConstants.PLUGIN_COLUMN_FAMILY_NAME) 33 @Table(name = ModelConstants.PLUGIN_COLUMN_FAMILY_NAME)
38 public class PluginMetaDataEntity implements SearchTextEntity<PluginMetaData> { 34 public class PluginMetaDataEntity implements SearchTextEntity<PluginMetaData> {
39 35
40 - private static final long serialVersionUID = 1L; 36 + @Transient
  37 + private static final long serialVersionUID = -5231612734979707866L;
41 38
42 @PartitionKey 39 @PartitionKey
43 @Column(name = ModelConstants.ID_PROPERTY) 40 @Column(name = ModelConstants.ID_PROPERTY)
@@ -68,7 +65,7 @@ public class PluginMetaDataEntity implements SearchTextEntity<PluginMetaData> { @@ -68,7 +65,7 @@ public class PluginMetaDataEntity implements SearchTextEntity<PluginMetaData> {
68 @Column(name = ModelConstants.SEARCH_TEXT_PROPERTY) 65 @Column(name = ModelConstants.SEARCH_TEXT_PROPERTY)
69 private String searchText; 66 private String searchText;
70 67
71 - @Column(name = ADDITIONAL_INFO_PROPERTY, codec = JsonCodec.class) 68 + @Column(name = ModelConstants.ADDITIONAL_INFO_PROPERTY, codec = JsonCodec.class)
72 private JsonNode additionalInfo; 69 private JsonNode additionalInfo;
73 70
74 public PluginMetaDataEntity() { 71 public PluginMetaDataEntity() {
dao/src/main/java/org/thingsboard/server/dao/model/nosql/RuleMetaDataEntity.java renamed from dao/src/main/java/org/thingsboard/server/dao/model/RuleMetaDataEntity.java
@@ -13,7 +13,7 @@ @@ -13,7 +13,7 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.thingsboard.server.dao.model; 16 +package org.thingsboard.server.dao.model.nosql;
17 17
18 import com.datastax.driver.core.utils.UUIDs; 18 import com.datastax.driver.core.utils.UUIDs;
19 import com.datastax.driver.mapping.annotations.ClusteringColumn; 19 import com.datastax.driver.mapping.annotations.ClusteringColumn;
@@ -26,40 +26,43 @@ import org.thingsboard.server.common.data.id.TenantId; @@ -26,40 +26,43 @@ import org.thingsboard.server.common.data.id.TenantId;
26 import org.thingsboard.server.common.data.plugin.ComponentLifecycleState; 26 import org.thingsboard.server.common.data.plugin.ComponentLifecycleState;
27 import org.thingsboard.server.common.data.rule.RuleMetaData; 27 import org.thingsboard.server.common.data.rule.RuleMetaData;
28 import org.thingsboard.server.dao.DaoUtil; 28 import org.thingsboard.server.dao.DaoUtil;
  29 +import org.thingsboard.server.dao.model.ModelConstants;
  30 +import org.thingsboard.server.dao.model.SearchTextEntity;
29 import org.thingsboard.server.dao.model.type.ComponentLifecycleStateCodec; 31 import org.thingsboard.server.dao.model.type.ComponentLifecycleStateCodec;
30 import org.thingsboard.server.dao.model.type.JsonCodec; 32 import org.thingsboard.server.dao.model.type.JsonCodec;
31 33
  34 +import javax.persistence.Transient;
32 import java.util.Objects; 35 import java.util.Objects;
33 import java.util.UUID; 36 import java.util.UUID;
34 37
35 -import static org.thingsboard.server.dao.model.ModelConstants.*;  
36 -  
37 -@Table(name = RULE_COLUMN_FAMILY_NAME) 38 +@Table(name = ModelConstants.RULE_COLUMN_FAMILY_NAME)
38 public class RuleMetaDataEntity implements SearchTextEntity<RuleMetaData> { 39 public class RuleMetaDataEntity implements SearchTextEntity<RuleMetaData> {
39 40
  41 + @Transient
  42 + private static final long serialVersionUID = 4011728715100800304L;
40 @PartitionKey 43 @PartitionKey
41 - @Column(name = ID_PROPERTY) 44 + @Column(name = ModelConstants.ID_PROPERTY)
42 private UUID id; 45 private UUID id;
43 @ClusteringColumn 46 @ClusteringColumn
44 - @Column(name = RULE_TENANT_ID_PROPERTY) 47 + @Column(name = ModelConstants.RULE_TENANT_ID_PROPERTY)
45 private UUID tenantId; 48 private UUID tenantId;
46 - @Column(name = RULE_NAME_PROPERTY) 49 + @Column(name = ModelConstants.RULE_NAME_PROPERTY)
47 private String name; 50 private String name;
48 @Column(name = ModelConstants.RULE_STATE_PROPERTY, codec = ComponentLifecycleStateCodec.class) 51 @Column(name = ModelConstants.RULE_STATE_PROPERTY, codec = ComponentLifecycleStateCodec.class)
49 private ComponentLifecycleState state; 52 private ComponentLifecycleState state;
50 - @Column(name = RULE_WEIGHT_PROPERTY) 53 + @Column(name = ModelConstants.RULE_WEIGHT_PROPERTY)
51 private int weight; 54 private int weight;
52 - @Column(name = SEARCH_TEXT_PROPERTY) 55 + @Column(name = ModelConstants.SEARCH_TEXT_PROPERTY)
53 private String searchText; 56 private String searchText;
54 - @Column(name = RULE_PLUGIN_TOKEN_PROPERTY) 57 + @Column(name = ModelConstants.RULE_PLUGIN_TOKEN_PROPERTY)
55 private String pluginToken; 58 private String pluginToken;
56 - @Column(name = RULE_FILTERS, codec = JsonCodec.class) 59 + @Column(name = ModelConstants.RULE_FILTERS, codec = JsonCodec.class)
57 private JsonNode filters; 60 private JsonNode filters;
58 - @Column(name = RULE_PROCESSOR, codec = JsonCodec.class) 61 + @Column(name = ModelConstants.RULE_PROCESSOR, codec = JsonCodec.class)
59 private JsonNode processor; 62 private JsonNode processor;
60 - @Column(name = RULE_ACTION, codec = JsonCodec.class) 63 + @Column(name = ModelConstants.RULE_ACTION, codec = JsonCodec.class)
61 private JsonNode action; 64 private JsonNode action;
62 - @Column(name = ADDITIONAL_INFO_PROPERTY, codec = JsonCodec.class) 65 + @Column(name = ModelConstants.ADDITIONAL_INFO_PROPERTY, codec = JsonCodec.class)
63 private JsonNode additionalInfo; 66 private JsonNode additionalInfo;
64 67
65 public RuleMetaDataEntity() { 68 public RuleMetaDataEntity() {
dao/src/main/java/org/thingsboard/server/dao/model/nosql/TenantEntity.java renamed from dao/src/main/java/org/thingsboard/server/dao/model/TenantEntity.java
@@ -13,27 +13,14 @@ @@ -13,27 +13,14 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.thingsboard.server.dao.model;  
17 -  
18 -import static org.thingsboard.server.dao.model.ModelConstants.ADDRESS2_PROPERTY;  
19 -import static org.thingsboard.server.dao.model.ModelConstants.ADDRESS_PROPERTY;  
20 -import static org.thingsboard.server.dao.model.ModelConstants.CITY_PROPERTY;  
21 -import static org.thingsboard.server.dao.model.ModelConstants.COUNTRY_PROPERTY;  
22 -import static org.thingsboard.server.dao.model.ModelConstants.EMAIL_PROPERTY;  
23 -import static org.thingsboard.server.dao.model.ModelConstants.ID_PROPERTY;  
24 -import static org.thingsboard.server.dao.model.ModelConstants.PHONE_PROPERTY;  
25 -import static org.thingsboard.server.dao.model.ModelConstants.STATE_PROPERTY;  
26 -import static org.thingsboard.server.dao.model.ModelConstants.TENANT_ADDITIONAL_INFO_PROPERTY;  
27 -import static org.thingsboard.server.dao.model.ModelConstants.TENANT_COLUMN_FAMILY_NAME;  
28 -import static org.thingsboard.server.dao.model.ModelConstants.TENANT_REGION_PROPERTY;  
29 -import static org.thingsboard.server.dao.model.ModelConstants.TENANT_TITLE_PROPERTY;  
30 -import static org.thingsboard.server.dao.model.ModelConstants.ZIP_PROPERTY;  
31 -import static org.thingsboard.server.dao.model.ModelConstants.SEARCH_TEXT_PROPERTY; 16 +package org.thingsboard.server.dao.model.nosql;
32 17
33 import java.util.UUID; 18 import java.util.UUID;
34 19
35 import org.thingsboard.server.common.data.Tenant; 20 import org.thingsboard.server.common.data.Tenant;
36 import org.thingsboard.server.common.data.id.TenantId; 21 import org.thingsboard.server.common.data.id.TenantId;
  22 +import org.thingsboard.server.dao.model.ModelConstants;
  23 +import org.thingsboard.server.dao.model.SearchTextEntity;
37 import org.thingsboard.server.dao.model.type.JsonCodec; 24 import org.thingsboard.server.dao.model.type.JsonCodec;
38 25
39 import com.datastax.driver.core.utils.UUIDs; 26 import com.datastax.driver.core.utils.UUIDs;
@@ -43,50 +30,50 @@ import com.datastax.driver.mapping.annotations.Table; @@ -43,50 +30,50 @@ import com.datastax.driver.mapping.annotations.Table;
43 import com.datastax.driver.mapping.annotations.Transient; 30 import com.datastax.driver.mapping.annotations.Transient;
44 import com.fasterxml.jackson.databind.JsonNode; 31 import com.fasterxml.jackson.databind.JsonNode;
45 32
46 -@Table(name = TENANT_COLUMN_FAMILY_NAME) 33 +@Table(name = ModelConstants.TENANT_COLUMN_FAMILY_NAME)
47 public final class TenantEntity implements SearchTextEntity<Tenant> { 34 public final class TenantEntity implements SearchTextEntity<Tenant> {
48 35
49 @Transient 36 @Transient
50 private static final long serialVersionUID = -6198635547142409206L; 37 private static final long serialVersionUID = -6198635547142409206L;
51 38
52 @PartitionKey(value = 0) 39 @PartitionKey(value = 0)
53 - @Column(name = ID_PROPERTY) 40 + @Column(name = ModelConstants.ID_PROPERTY)
54 private UUID id; 41 private UUID id;
55 42
56 - @Column(name = TENANT_TITLE_PROPERTY) 43 + @Column(name = ModelConstants.TENANT_TITLE_PROPERTY)
57 private String title; 44 private String title;
58 45
59 - @Column(name = SEARCH_TEXT_PROPERTY) 46 + @Column(name = ModelConstants.SEARCH_TEXT_PROPERTY)
60 private String searchText; 47 private String searchText;
61 48
62 - @Column(name = TENANT_REGION_PROPERTY) 49 + @Column(name = ModelConstants.TENANT_REGION_PROPERTY)
63 private String region; 50 private String region;
64 51
65 - @Column(name = COUNTRY_PROPERTY) 52 + @Column(name = ModelConstants.COUNTRY_PROPERTY)
66 private String country; 53 private String country;
67 54
68 - @Column(name = STATE_PROPERTY) 55 + @Column(name = ModelConstants.STATE_PROPERTY)
69 private String state; 56 private String state;
70 57
71 - @Column(name = CITY_PROPERTY) 58 + @Column(name = ModelConstants.CITY_PROPERTY)
72 private String city; 59 private String city;
73 60
74 - @Column(name = ADDRESS_PROPERTY) 61 + @Column(name = ModelConstants.ADDRESS_PROPERTY)
75 private String address; 62 private String address;
76 63
77 - @Column(name = ADDRESS2_PROPERTY) 64 + @Column(name = ModelConstants.ADDRESS2_PROPERTY)
78 private String address2; 65 private String address2;
79 66
80 - @Column(name = ZIP_PROPERTY) 67 + @Column(name = ModelConstants.ZIP_PROPERTY)
81 private String zip; 68 private String zip;
82 69
83 - @Column(name = PHONE_PROPERTY) 70 + @Column(name = ModelConstants.PHONE_PROPERTY)
84 private String phone; 71 private String phone;
85 72
86 - @Column(name = EMAIL_PROPERTY) 73 + @Column(name = ModelConstants.EMAIL_PROPERTY)
87 private String email; 74 private String email;
88 75
89 - @Column(name = TENANT_ADDITIONAL_INFO_PROPERTY, codec = JsonCodec.class) 76 + @Column(name = ModelConstants.TENANT_ADDITIONAL_INFO_PROPERTY, codec = JsonCodec.class)
90 private JsonNode additionalInfo; 77 private JsonNode additionalInfo;
91 78
92 public TenantEntity() { 79 public TenantEntity() {
dao/src/main/java/org/thingsboard/server/dao/model/nosql/UserCredentialsEntity.java renamed from dao/src/main/java/org/thingsboard/server/dao/model/UserCredentialsEntity.java
@@ -13,15 +13,7 @@ @@ -13,15 +13,7 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.thingsboard.server.dao.model;  
17 -  
18 -import static org.thingsboard.server.dao.model.ModelConstants.ID_PROPERTY;  
19 -import static org.thingsboard.server.dao.model.ModelConstants.USER_CREDENTIALS_ACTIVATE_TOKEN_PROPERTY;  
20 -import static org.thingsboard.server.dao.model.ModelConstants.USER_CREDENTIALS_COLUMN_FAMILY_NAME;  
21 -import static org.thingsboard.server.dao.model.ModelConstants.USER_CREDENTIALS_PASSWORD_PROPERTY;  
22 -import static org.thingsboard.server.dao.model.ModelConstants.USER_CREDENTIALS_USER_ID_PROPERTY;  
23 -import static org.thingsboard.server.dao.model.ModelConstants.USER_CREDENTIALS_ENABLED_PROPERTY;  
24 -import static org.thingsboard.server.dao.model.ModelConstants.USER_CREDENTIALS_RESET_TOKEN_PROPERTY; 16 +package org.thingsboard.server.dao.model.nosql;
25 17
26 import java.util.UUID; 18 import java.util.UUID;
27 19
@@ -34,30 +26,32 @@ import com.datastax.driver.mapping.annotations.Column; @@ -34,30 +26,32 @@ import com.datastax.driver.mapping.annotations.Column;
34 import com.datastax.driver.mapping.annotations.PartitionKey; 26 import com.datastax.driver.mapping.annotations.PartitionKey;
35 import com.datastax.driver.mapping.annotations.Table; 27 import com.datastax.driver.mapping.annotations.Table;
36 import com.datastax.driver.mapping.annotations.Transient; 28 import com.datastax.driver.mapping.annotations.Transient;
  29 +import org.thingsboard.server.dao.model.BaseEntity;
  30 +import org.thingsboard.server.dao.model.ModelConstants;
37 31
38 -@Table(name = USER_CREDENTIALS_COLUMN_FAMILY_NAME) 32 +@Table(name = ModelConstants.USER_CREDENTIALS_COLUMN_FAMILY_NAME)
39 public final class UserCredentialsEntity implements BaseEntity<UserCredentials> { 33 public final class UserCredentialsEntity implements BaseEntity<UserCredentials> {
40 34
41 @Transient 35 @Transient
42 private static final long serialVersionUID = 1348221414123438374L; 36 private static final long serialVersionUID = 1348221414123438374L;
43 37
44 @PartitionKey(value = 0) 38 @PartitionKey(value = 0)
45 - @Column(name = ID_PROPERTY) 39 + @Column(name = ModelConstants.ID_PROPERTY)
46 private UUID id; 40 private UUID id;
47 41
48 - @Column(name = USER_CREDENTIALS_USER_ID_PROPERTY) 42 + @Column(name = ModelConstants.USER_CREDENTIALS_USER_ID_PROPERTY)
49 private UUID userId; 43 private UUID userId;
50 44
51 - @Column(name = USER_CREDENTIALS_ENABLED_PROPERTY) 45 + @Column(name = ModelConstants.USER_CREDENTIALS_ENABLED_PROPERTY)
52 private boolean enabled; 46 private boolean enabled;
53 47
54 - @Column(name = USER_CREDENTIALS_PASSWORD_PROPERTY) 48 + @Column(name = ModelConstants.USER_CREDENTIALS_PASSWORD_PROPERTY)
55 private String password; 49 private String password;
56 50
57 - @Column(name = USER_CREDENTIALS_ACTIVATE_TOKEN_PROPERTY) 51 + @Column(name = ModelConstants.USER_CREDENTIALS_ACTIVATE_TOKEN_PROPERTY)
58 private String activateToken; 52 private String activateToken;
59 53
60 - @Column(name = USER_CREDENTIALS_RESET_TOKEN_PROPERTY) 54 + @Column(name = ModelConstants.USER_CREDENTIALS_RESET_TOKEN_PROPERTY)
61 private String resetToken; 55 private String resetToken;
62 56
63 public UserCredentialsEntity() { 57 public UserCredentialsEntity() {
dao/src/main/java/org/thingsboard/server/dao/model/nosql/UserEntity.java renamed from dao/src/main/java/org/thingsboard/server/dao/model/UserEntity.java
@@ -13,18 +13,7 @@ @@ -13,18 +13,7 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.thingsboard.server.dao.model;  
17 -  
18 -import static org.thingsboard.server.dao.model.ModelConstants.ID_PROPERTY;  
19 -import static org.thingsboard.server.dao.model.ModelConstants.SEARCH_TEXT_PROPERTY;  
20 -import static org.thingsboard.server.dao.model.ModelConstants.USER_ADDITIONAL_INFO_PROPERTY;  
21 -import static org.thingsboard.server.dao.model.ModelConstants.USER_AUTHORITY_PROPERTY;  
22 -import static org.thingsboard.server.dao.model.ModelConstants.USER_COLUMN_FAMILY_NAME;  
23 -import static org.thingsboard.server.dao.model.ModelConstants.USER_CUSTOMER_ID_PROPERTY;  
24 -import static org.thingsboard.server.dao.model.ModelConstants.USER_EMAIL_PROPERTY;  
25 -import static org.thingsboard.server.dao.model.ModelConstants.USER_FIRST_NAME_PROPERTY;  
26 -import static org.thingsboard.server.dao.model.ModelConstants.USER_LAST_NAME_PROPERTY;  
27 -import static org.thingsboard.server.dao.model.ModelConstants.USER_TENANT_ID_PROPERTY; 16 +package org.thingsboard.server.dao.model.nosql;
28 17
29 import java.util.UUID; 18 import java.util.UUID;
30 19
@@ -33,6 +22,8 @@ import org.thingsboard.server.common.data.id.CustomerId; @@ -33,6 +22,8 @@ import org.thingsboard.server.common.data.id.CustomerId;
33 import org.thingsboard.server.common.data.id.TenantId; 22 import org.thingsboard.server.common.data.id.TenantId;
34 import org.thingsboard.server.common.data.id.UserId; 23 import org.thingsboard.server.common.data.id.UserId;
35 import org.thingsboard.server.common.data.security.Authority; 24 import org.thingsboard.server.common.data.security.Authority;
  25 +import org.thingsboard.server.dao.model.ModelConstants;
  26 +import org.thingsboard.server.dao.model.SearchTextEntity;
36 import org.thingsboard.server.dao.model.type.AuthorityCodec; 27 import org.thingsboard.server.dao.model.type.AuthorityCodec;
37 import org.thingsboard.server.dao.model.type.JsonCodec; 28 import org.thingsboard.server.dao.model.type.JsonCodec;
38 29
@@ -43,41 +34,41 @@ import com.datastax.driver.mapping.annotations.Table; @@ -43,41 +34,41 @@ import com.datastax.driver.mapping.annotations.Table;
43 import com.datastax.driver.mapping.annotations.Transient; 34 import com.datastax.driver.mapping.annotations.Transient;
44 import com.fasterxml.jackson.databind.JsonNode; 35 import com.fasterxml.jackson.databind.JsonNode;
45 36
46 -@Table(name = USER_COLUMN_FAMILY_NAME) 37 +@Table(name = ModelConstants.USER_COLUMN_FAMILY_NAME)
47 public final class UserEntity implements SearchTextEntity<User> { 38 public final class UserEntity implements SearchTextEntity<User> {
48 39
49 @Transient 40 @Transient
50 private static final long serialVersionUID = -7740338274987723489L; 41 private static final long serialVersionUID = -7740338274987723489L;
51 42
52 @PartitionKey(value = 0) 43 @PartitionKey(value = 0)
53 - @Column(name = ID_PROPERTY) 44 + @Column(name = ModelConstants.ID_PROPERTY)
54 private UUID id; 45 private UUID id;
55 46
56 @PartitionKey(value = 1) 47 @PartitionKey(value = 1)
57 - @Column(name = USER_TENANT_ID_PROPERTY) 48 + @Column(name = ModelConstants.USER_TENANT_ID_PROPERTY)
58 private UUID tenantId; 49 private UUID tenantId;
59 50
60 @PartitionKey(value = 2) 51 @PartitionKey(value = 2)
61 - @Column(name = USER_CUSTOMER_ID_PROPERTY) 52 + @Column(name = ModelConstants.USER_CUSTOMER_ID_PROPERTY)
62 private UUID customerId; 53 private UUID customerId;
63 54
64 @PartitionKey(value = 3) 55 @PartitionKey(value = 3)
65 - @Column(name = USER_AUTHORITY_PROPERTY, codec = AuthorityCodec.class) 56 + @Column(name = ModelConstants.USER_AUTHORITY_PROPERTY, codec = AuthorityCodec.class)
66 private Authority authority; 57 private Authority authority;
67 58
68 - @Column(name = USER_EMAIL_PROPERTY) 59 + @Column(name = ModelConstants.USER_EMAIL_PROPERTY)
69 private String email; 60 private String email;
70 61
71 - @Column(name = SEARCH_TEXT_PROPERTY) 62 + @Column(name = ModelConstants.SEARCH_TEXT_PROPERTY)
72 private String searchText; 63 private String searchText;
73 64
74 - @Column(name = USER_FIRST_NAME_PROPERTY) 65 + @Column(name = ModelConstants.USER_FIRST_NAME_PROPERTY)
75 private String firstName; 66 private String firstName;
76 67
77 - @Column(name = USER_LAST_NAME_PROPERTY) 68 + @Column(name = ModelConstants.USER_LAST_NAME_PROPERTY)
78 private String lastName; 69 private String lastName;
79 70
80 - @Column(name = USER_ADDITIONAL_INFO_PROPERTY, codec = JsonCodec.class) 71 + @Column(name = ModelConstants.USER_ADDITIONAL_INFO_PROPERTY, codec = JsonCodec.class)
81 private JsonNode additionalInfo; 72 private JsonNode additionalInfo;
82 73
83 public UserEntity() { 74 public UserEntity() {
dao/src/main/java/org/thingsboard/server/dao/model/nosql/WidgetTypeEntity.java renamed from dao/src/main/java/org/thingsboard/server/dao/model/WidgetTypeEntity.java
@@ -13,7 +13,7 @@ @@ -13,7 +13,7 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.thingsboard.server.dao.model; 16 +package org.thingsboard.server.dao.model.nosql;
17 17
18 import com.datastax.driver.core.utils.UUIDs; 18 import com.datastax.driver.core.utils.UUIDs;
19 import com.datastax.driver.mapping.annotations.Column; 19 import com.datastax.driver.mapping.annotations.Column;
@@ -24,6 +24,8 @@ import com.fasterxml.jackson.databind.JsonNode; @@ -24,6 +24,8 @@ import com.fasterxml.jackson.databind.JsonNode;
24 import org.thingsboard.server.common.data.id.TenantId; 24 import org.thingsboard.server.common.data.id.TenantId;
25 import org.thingsboard.server.common.data.id.WidgetTypeId; 25 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;
  28 +import org.thingsboard.server.dao.model.ModelConstants;
27 import org.thingsboard.server.dao.model.type.JsonCodec; 29 import org.thingsboard.server.dao.model.type.JsonCodec;
28 30
29 import java.util.UUID; 31 import java.util.UUID;
dao/src/main/java/org/thingsboard/server/dao/model/nosql/WidgetsBundleEntity.java renamed from dao/src/main/java/org/thingsboard/server/dao/model/WidgetsBundleEntity.java
@@ -13,7 +13,7 @@ @@ -13,7 +13,7 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.thingsboard.server.dao.model; 16 +package org.thingsboard.server.dao.model.nosql;
17 17
18 18
19 import com.datastax.driver.core.utils.UUIDs; 19 import com.datastax.driver.core.utils.UUIDs;
@@ -24,6 +24,8 @@ import com.datastax.driver.mapping.annotations.Transient; @@ -24,6 +24,8 @@ import com.datastax.driver.mapping.annotations.Transient;
24 import org.thingsboard.server.common.data.id.TenantId; 24 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.ModelConstants;
  28 +import org.thingsboard.server.dao.model.SearchTextEntity;
27 29
28 import java.nio.ByteBuffer; 30 import java.nio.ByteBuffer;
29 import java.util.UUID; 31 import java.util.UUID;
  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.sql;
  17 +
  18 +import com.datastax.driver.core.utils.UUIDs;
  19 +import javax.persistence.Column;
  20 +import javax.persistence.Entity;
  21 +import javax.persistence.Id;
  22 +import javax.persistence.Table;
  23 +import javax.persistence.Transient;
  24 +import com.fasterxml.jackson.databind.JsonNode;
  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 +
  29 +import java.util.UUID;
  30 +
  31 +import static org.thingsboard.server.dao.model.ModelConstants.*;
  32 +
  33 +@Entity
  34 +@Table(name = ADMIN_SETTINGS_COLUMN_FAMILY_NAME)
  35 +public final class AdminSettingsEntity implements BaseEntity<AdminSettings> {
  36 +
  37 + @Transient
  38 + private static final long serialVersionUID = 842759712850362147L;
  39 +
  40 + @Id
  41 + @Column(name = ID_PROPERTY)
  42 + private UUID id;
  43 +
  44 + @Column(name = ADMIN_SETTINGS_KEY_PROPERTY)
  45 + private String key;
  46 +
  47 + @Column(name = ADMIN_SETTINGS_JSON_VALUE_PROPERTY)
  48 + private JsonNode jsonValue;
  49 +
  50 + public AdminSettingsEntity() {
  51 + super();
  52 + }
  53 +
  54 + public AdminSettingsEntity(AdminSettings adminSettings) {
  55 + if (adminSettings.getId() != null) {
  56 + this.id = adminSettings.getId().getId();
  57 + }
  58 + this.key = adminSettings.getKey();
  59 + this.jsonValue = adminSettings.getJsonValue();
  60 + }
  61 +
  62 + public UUID getId() {
  63 + return id;
  64 + }
  65 +
  66 + public void setId(UUID id) {
  67 + this.id = id;
  68 + }
  69 +
  70 + public String getKey() {
  71 + return key;
  72 + }
  73 +
  74 + public void setKey(String key) {
  75 + this.key = key;
  76 + }
  77 +
  78 + public JsonNode getJsonValue() {
  79 + return jsonValue;
  80 + }
  81 +
  82 + public void setJsonValue(JsonNode jsonValue) {
  83 + this.jsonValue = jsonValue;
  84 + }
  85 +
  86 + @Override
  87 + public int hashCode() {
  88 + final int prime = 31;
  89 + int result = 1;
  90 + result = prime * result + ((id == null) ? 0 : id.hashCode());
  91 + result = prime * result + ((jsonValue == null) ? 0 : jsonValue.hashCode());
  92 + result = prime * result + ((key == null) ? 0 : key.hashCode());
  93 + return result;
  94 + }
  95 +
  96 + @Override
  97 + public boolean equals(Object obj) {
  98 + if (this == obj)
  99 + return true;
  100 + if (obj == null)
  101 + return false;
  102 + if (getClass() != obj.getClass())
  103 + return false;
  104 + AdminSettingsEntity other = (AdminSettingsEntity) obj;
  105 + if (id == null) {
  106 + if (other.id != null)
  107 + return false;
  108 + } else if (!id.equals(other.id))
  109 + return false;
  110 + if (jsonValue == null) {
  111 + if (other.jsonValue != null)
  112 + return false;
  113 + } else if (!jsonValue.equals(other.jsonValue))
  114 + return false;
  115 + if (key == null) {
  116 + if (other.key != null)
  117 + return false;
  118 + } else if (!key.equals(other.key))
  119 + return false;
  120 + return true;
  121 + }
  122 +
  123 + @Override
  124 + public String toString() {
  125 + StringBuilder builder = new StringBuilder();
  126 + builder.append("AdminSettingsEntity [id=");
  127 + builder.append(id);
  128 + builder.append(", key=");
  129 + builder.append(key);
  130 + builder.append(", jsonValue=");
  131 + builder.append(jsonValue);
  132 + builder.append("]");
  133 + return builder.toString();
  134 + }
  135 +
  136 + @Override
  137 + public AdminSettings toData() {
  138 + AdminSettings adminSettings = new AdminSettings(new AdminSettingsId(id));
  139 + adminSettings.setCreatedTime(UUIDs.unixTimestamp(id));
  140 + adminSettings.setKey(key);
  141 + adminSettings.setJsonValue(jsonValue);
  142 + return adminSettings;
  143 + }
  144 +
  145 +}
  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.sql;
  17 +
  18 +import javax.persistence.Column;
  19 +import javax.persistence.Entity;
  20 +import javax.persistence.Id;
  21 +import javax.persistence.Table;
  22 +import javax.persistence.Transient;
  23 +import com.fasterxml.jackson.databind.JsonNode;
  24 +import org.thingsboard.server.common.data.id.ComponentDescriptorId;
  25 +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.ComponentType;
  28 +import org.thingsboard.server.dao.model.ModelConstants;
  29 +import org.thingsboard.server.dao.model.SearchTextEntity;
  30 +
  31 +import java.util.UUID;
  32 +
  33 +@Entity
  34 +@Table(name = ModelConstants.COMPONENT_DESCRIPTOR_COLUMN_FAMILY_NAME)
  35 +public class ComponentDescriptorEntity implements SearchTextEntity<ComponentDescriptor> {
  36 +
  37 + @Transient
  38 + private static final long serialVersionUID = 253590350877992402L;
  39 +
  40 + @Id
  41 + @Column(name = ModelConstants.ID_PROPERTY)
  42 + private UUID id;
  43 +
  44 + @Column(name = ModelConstants.COMPONENT_DESCRIPTOR_TYPE_PROPERTY)
  45 + private ComponentType type;
  46 +
  47 + @Column(name = ModelConstants.COMPONENT_DESCRIPTOR_SCOPE_PROPERTY)
  48 + private ComponentScope scope;
  49 +
  50 + @Column(name = ModelConstants.COMPONENT_DESCRIPTOR_NAME_PROPERTY)
  51 + private String name;
  52 +
  53 + @Column(name = ModelConstants.COMPONENT_DESCRIPTOR_CLASS_PROPERTY)
  54 + private String clazz;
  55 +
  56 + @Column(name = ModelConstants.COMPONENT_DESCRIPTOR_CONFIGURATION_DESCRIPTOR_PROPERTY)
  57 + private JsonNode configurationDescriptor;
  58 +
  59 + @Column(name = ModelConstants.COMPONENT_DESCRIPTOR_ACTIONS_PROPERTY)
  60 + private String actions;
  61 +
  62 + @Column(name = ModelConstants.SEARCH_TEXT_PROPERTY)
  63 + private String searchText;
  64 +
  65 + public ComponentDescriptorEntity() {
  66 + }
  67 +
  68 + public ComponentDescriptorEntity(ComponentDescriptor component) {
  69 + if (component.getId() != null) {
  70 + this.id = component.getId().getId();
  71 + }
  72 + this.actions = component.getActions();
  73 + this.type = component.getType();
  74 + this.scope = component.getScope();
  75 + this.name = component.getName();
  76 + this.clazz = component.getClazz();
  77 + this.configurationDescriptor = component.getConfigurationDescriptor();
  78 + this.searchText = component.getName();
  79 + }
  80 +
  81 + @Override
  82 + public ComponentDescriptor toData() {
  83 + ComponentDescriptor data = new ComponentDescriptor(new ComponentDescriptorId(id));
  84 + data.setType(type);
  85 + data.setScope(scope);
  86 + data.setName(this.getName());
  87 + data.setClazz(this.getClazz());
  88 + data.setActions(this.getActions());
  89 + data.setConfigurationDescriptor(this.getConfigurationDescriptor());
  90 + return data;
  91 + }
  92 +
  93 + @Override
  94 + public UUID getId() {
  95 + return id;
  96 + }
  97 +
  98 + @Override
  99 + public void setId(UUID id) {
  100 + this.id = id;
  101 + }
  102 +
  103 + public String getActions() {
  104 + return actions;
  105 + }
  106 +
  107 + public void setActions(String actions) {
  108 + this.actions = actions;
  109 + }
  110 +
  111 + public ComponentType getType() {
  112 + return type;
  113 + }
  114 +
  115 + public void setType(ComponentType type) {
  116 + this.type = type;
  117 + }
  118 +
  119 + public ComponentScope getScope() {
  120 + return scope;
  121 + }
  122 +
  123 + public void setScope(ComponentScope scope) {
  124 + this.scope = scope;
  125 + }
  126 +
  127 + public String getName() {
  128 + return name;
  129 + }
  130 +
  131 + public void setName(String name) {
  132 + this.name = name;
  133 + }
  134 +
  135 + public String getClazz() {
  136 + return clazz;
  137 + }
  138 +
  139 + public void setClazz(String clazz) {
  140 + this.clazz = clazz;
  141 + }
  142 +
  143 + public JsonNode getConfigurationDescriptor() {
  144 + return configurationDescriptor;
  145 + }
  146 +
  147 + public void setConfigurationDescriptor(JsonNode configurationDescriptor) {
  148 + this.configurationDescriptor = configurationDescriptor;
  149 + }
  150 +
  151 + public String getSearchText() {
  152 + return searchText;
  153 + }
  154 +
  155 + @Override
  156 + public void setSearchText(String searchText) {
  157 + this.searchText = searchText;
  158 + }
  159 +
  160 + @Override
  161 + public String getSearchTextSource() {
  162 + return searchText;
  163 + }
  164 +}
  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.sql;
  17 +
  18 +import com.datastax.driver.core.utils.UUIDs;
  19 +import javax.persistence.Column;
  20 +import javax.persistence.Entity;
  21 +import javax.persistence.Id;
  22 +import javax.persistence.Table;
  23 +import javax.persistence.Transient;
  24 +import com.fasterxml.jackson.databind.JsonNode;
  25 +import org.thingsboard.server.common.data.Customer;
  26 +import org.thingsboard.server.common.data.id.CustomerId;
  27 +import org.thingsboard.server.common.data.id.TenantId;
  28 +import org.thingsboard.server.dao.model.ModelConstants;
  29 +import org.thingsboard.server.dao.model.SearchTextEntity;
  30 +
  31 +import java.util.UUID;
  32 +
  33 +@Entity
  34 +@Table(name = ModelConstants.CUSTOMER_COLUMN_FAMILY_NAME)
  35 +public final class CustomerEntity implements SearchTextEntity<Customer> {
  36 +
  37 + @Transient
  38 + private static final long serialVersionUID = 8951342124082981556L;
  39 +
  40 + @Id
  41 + @Column(name = ModelConstants.ID_PROPERTY)
  42 + private UUID id;
  43 +
  44 + @Column(name = ModelConstants.CUSTOMER_TENANT_ID_PROPERTY)
  45 + private UUID tenantId;
  46 +
  47 + @Column(name = ModelConstants.CUSTOMER_TITLE_PROPERTY)
  48 + private String title;
  49 +
  50 + @Column(name = ModelConstants.SEARCH_TEXT_PROPERTY)
  51 + private String searchText;
  52 +
  53 + @Column(name = ModelConstants.COUNTRY_PROPERTY)
  54 + private String country;
  55 +
  56 + @Column(name = ModelConstants.STATE_PROPERTY)
  57 + private String state;
  58 +
  59 + @Column(name = ModelConstants.CITY_PROPERTY)
  60 + private String city;
  61 +
  62 + @Column(name = ModelConstants.ADDRESS_PROPERTY)
  63 + private String address;
  64 +
  65 + @Column(name = ModelConstants.ADDRESS2_PROPERTY)
  66 + private String address2;
  67 +
  68 + @Column(name = ModelConstants.ZIP_PROPERTY)
  69 + private String zip;
  70 +
  71 + @Column(name = ModelConstants.PHONE_PROPERTY)
  72 + private String phone;
  73 +
  74 + @Column(name = ModelConstants.EMAIL_PROPERTY)
  75 + private String email;
  76 +
  77 + @Column(name = ModelConstants.CUSTOMER_ADDITIONAL_INFO_PROPERTY)
  78 + private JsonNode additionalInfo;
  79 +
  80 + public CustomerEntity() {
  81 + super();
  82 + }
  83 +
  84 + public CustomerEntity(Customer customer) {
  85 + if (customer.getId() != null) {
  86 + this.id = customer.getId().getId();
  87 + }
  88 + this.tenantId = customer.getTenantId().getId();
  89 + this.title = customer.getTitle();
  90 + this.country = customer.getCountry();
  91 + this.state = customer.getState();
  92 + this.city = customer.getCity();
  93 + this.address = customer.getAddress();
  94 + this.address2 = customer.getAddress2();
  95 + this.zip = customer.getZip();
  96 + this.phone = customer.getPhone();
  97 + this.email = customer.getEmail();
  98 + this.additionalInfo = customer.getAdditionalInfo();
  99 + }
  100 +
  101 + public UUID getId() {
  102 + return id;
  103 + }
  104 +
  105 + public void setId(UUID id) {
  106 + this.id = id;
  107 + }
  108 +
  109 + public UUID getTenantId() {
  110 + return tenantId;
  111 + }
  112 +
  113 + public void setTenantId(UUID tenantId) {
  114 + this.tenantId = tenantId;
  115 + }
  116 +
  117 + public String getTitle() {
  118 + return title;
  119 + }
  120 +
  121 + public void setTitle(String title) {
  122 + this.title = title;
  123 + }
  124 +
  125 + public String getCountry() {
  126 + return country;
  127 + }
  128 +
  129 + public void setCountry(String country) {
  130 + this.country = country;
  131 + }
  132 +
  133 + public String getState() {
  134 + return state;
  135 + }
  136 +
  137 + public void setState(String state) {
  138 + this.state = state;
  139 + }
  140 +
  141 + public String getCity() {
  142 + return city;
  143 + }
  144 +
  145 + public void setCity(String city) {
  146 + this.city = city;
  147 + }
  148 +
  149 + public String getAddress() {
  150 + return address;
  151 + }
  152 +
  153 + public void setAddress(String address) {
  154 + this.address = address;
  155 + }
  156 +
  157 + public String getAddress2() {
  158 + return address2;
  159 + }
  160 +
  161 + public void setAddress2(String address2) {
  162 + this.address2 = address2;
  163 + }
  164 +
  165 + public String getZip() {
  166 + return zip;
  167 + }
  168 +
  169 + public void setZip(String zip) {
  170 + this.zip = zip;
  171 + }
  172 +
  173 + public String getPhone() {
  174 + return phone;
  175 + }
  176 +
  177 + public void setPhone(String phone) {
  178 + this.phone = phone;
  179 + }
  180 +
  181 + public String getEmail() {
  182 + return email;
  183 + }
  184 +
  185 + public void setEmail(String email) {
  186 + this.email = email;
  187 + }
  188 +
  189 + public JsonNode getAdditionalInfo() {
  190 + return additionalInfo;
  191 + }
  192 +
  193 + public void setAdditionalInfo(JsonNode additionalInfo) {
  194 + this.additionalInfo = additionalInfo;
  195 + }
  196 +
  197 + @Override
  198 + public String getSearchTextSource() {
  199 + return title;
  200 + }
  201 +
  202 + @Override
  203 + public void setSearchText(String searchText) {
  204 + this.searchText = searchText;
  205 + }
  206 +
  207 + public String getSearchText() {
  208 + return searchText;
  209 + }
  210 +
  211 + @Override
  212 + public int hashCode() {
  213 + final int prime = 31;
  214 + int result = 1;
  215 + result = prime * result + ((additionalInfo == null) ? 0 : additionalInfo.hashCode());
  216 + result = prime * result + ((address == null) ? 0 : address.hashCode());
  217 + result = prime * result + ((address2 == null) ? 0 : address2.hashCode());
  218 + result = prime * result + ((city == null) ? 0 : city.hashCode());
  219 + result = prime * result + ((country == null) ? 0 : country.hashCode());
  220 + result = prime * result + ((email == null) ? 0 : email.hashCode());
  221 + result = prime * result + ((id == null) ? 0 : id.hashCode());
  222 + result = prime * result + ((phone == null) ? 0 : phone.hashCode());
  223 + result = prime * result + ((state == null) ? 0 : state.hashCode());
  224 + result = prime * result + ((tenantId == null) ? 0 : tenantId.hashCode());
  225 + result = prime * result + ((title == null) ? 0 : title.hashCode());
  226 + result = prime * result + ((zip == null) ? 0 : zip.hashCode());
  227 + return result;
  228 + }
  229 +
  230 + @Override
  231 + public boolean equals(Object obj) {
  232 + if (this == obj)
  233 + return true;
  234 + if (obj == null)
  235 + return false;
  236 + if (getClass() != obj.getClass())
  237 + return false;
  238 + CustomerEntity other = (CustomerEntity) obj;
  239 + if (additionalInfo == null) {
  240 + if (other.additionalInfo != null)
  241 + return false;
  242 + } else if (!additionalInfo.equals(other.additionalInfo))
  243 + return false;
  244 + if (address == null) {
  245 + if (other.address != null)
  246 + return false;
  247 + } else if (!address.equals(other.address))
  248 + return false;
  249 + if (address2 == null) {
  250 + if (other.address2 != null)
  251 + return false;
  252 + } else if (!address2.equals(other.address2))
  253 + return false;
  254 + if (city == null) {
  255 + if (other.city != null)
  256 + return false;
  257 + } else if (!city.equals(other.city))
  258 + return false;
  259 + if (country == null) {
  260 + if (other.country != null)
  261 + return false;
  262 + } else if (!country.equals(other.country))
  263 + return false;
  264 + if (email == null) {
  265 + if (other.email != null)
  266 + return false;
  267 + } else if (!email.equals(other.email))
  268 + return false;
  269 + if (id == null) {
  270 + if (other.id != null)
  271 + return false;
  272 + } else if (!id.equals(other.id))
  273 + return false;
  274 + if (phone == null) {
  275 + if (other.phone != null)
  276 + return false;
  277 + } else if (!phone.equals(other.phone))
  278 + return false;
  279 + if (state == null) {
  280 + if (other.state != null)
  281 + return false;
  282 + } else if (!state.equals(other.state))
  283 + return false;
  284 + if (tenantId == null) {
  285 + if (other.tenantId != null)
  286 + return false;
  287 + } else if (!tenantId.equals(other.tenantId))
  288 + return false;
  289 + if (title == null) {
  290 + if (other.title != null)
  291 + return false;
  292 + } else if (!title.equals(other.title))
  293 + return false;
  294 + if (zip == null) {
  295 + if (other.zip != null)
  296 + return false;
  297 + } else if (!zip.equals(other.zip))
  298 + return false;
  299 + return true;
  300 + }
  301 +
  302 + @Override
  303 + public String toString() {
  304 + StringBuilder builder = new StringBuilder();
  305 + builder.append("CustomerEntity [id=");
  306 + builder.append(id);
  307 + builder.append(", tenantId=");
  308 + builder.append(tenantId);
  309 + builder.append(", title=");
  310 + builder.append(title);
  311 + builder.append(", country=");
  312 + builder.append(country);
  313 + builder.append(", state=");
  314 + builder.append(state);
  315 + builder.append(", city=");
  316 + builder.append(city);
  317 + builder.append(", address=");
  318 + builder.append(address);
  319 + builder.append(", address2=");
  320 + builder.append(address2);
  321 + builder.append(", zip=");
  322 + builder.append(zip);
  323 + builder.append(", phone=");
  324 + builder.append(phone);
  325 + builder.append(", email=");
  326 + builder.append(email);
  327 + builder.append(", additionalInfo=");
  328 + builder.append(additionalInfo);
  329 + builder.append("]");
  330 + return builder.toString();
  331 + }
  332 +
  333 + @Override
  334 + public Customer toData() {
  335 + Customer customer = new Customer(new CustomerId(id));
  336 + customer.setCreatedTime(UUIDs.unixTimestamp(id));
  337 + customer.setTenantId(new TenantId(tenantId));
  338 + customer.setTitle(title);
  339 + customer.setCountry(country);
  340 + customer.setState(state);
  341 + customer.setCity(city);
  342 + customer.setAddress(address);
  343 + customer.setAddress2(address2);
  344 + customer.setZip(zip);
  345 + customer.setPhone(phone);
  346 + customer.setEmail(email);
  347 + customer.setAdditionalInfo(additionalInfo);
  348 + return customer;
  349 + }
  350 +
  351 +}
  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.sql;
  17 +
  18 +import com.datastax.driver.core.utils.UUIDs;
  19 +import javax.persistence.Column;
  20 +import javax.persistence.Entity;
  21 +import javax.persistence.Id;
  22 +import javax.persistence.Table;
  23 +import javax.persistence.Transient;
  24 +import com.fasterxml.jackson.databind.JsonNode;
  25 +import org.thingsboard.server.common.data.Dashboard;
  26 +import org.thingsboard.server.common.data.id.CustomerId;
  27 +import org.thingsboard.server.common.data.id.DashboardId;
  28 +import org.thingsboard.server.common.data.id.TenantId;
  29 +import org.thingsboard.server.dao.model.ModelConstants;
  30 +import org.thingsboard.server.dao.model.SearchTextEntity;
  31 +
  32 +import java.util.UUID;
  33 +
  34 +@Entity
  35 +@Table(name = ModelConstants.DASHBOARD_COLUMN_FAMILY_NAME)
  36 +public final class DashboardEntity implements SearchTextEntity<Dashboard> {
  37 +
  38 + @Transient
  39 + private static final long serialVersionUID = -4838084363113078898L;
  40 +
  41 + @Id
  42 + @Column(name = ModelConstants.ID_PROPERTY)
  43 + private UUID id;
  44 +
  45 + @Column(name = ModelConstants.DASHBOARD_TENANT_ID_PROPERTY)
  46 + private UUID tenantId;
  47 +
  48 + @Column(name = ModelConstants.DASHBOARD_CUSTOMER_ID_PROPERTY)
  49 + private UUID customerId;
  50 +
  51 + @Column(name = ModelConstants.DASHBOARD_TITLE_PROPERTY)
  52 + private String title;
  53 +
  54 + @Column(name = ModelConstants.SEARCH_TEXT_PROPERTY)
  55 + private String searchText;
  56 +
  57 + @Column(name = ModelConstants.DASHBOARD_CONFIGURATION_PROPERTY)
  58 + private JsonNode configuration;
  59 +
  60 + public DashboardEntity() {
  61 + super();
  62 + }
  63 +
  64 + public DashboardEntity(Dashboard dashboard) {
  65 + if (dashboard.getId() != null) {
  66 + this.id = dashboard.getId().getId();
  67 + }
  68 + if (dashboard.getTenantId() != null) {
  69 + this.tenantId = dashboard.getTenantId().getId();
  70 + }
  71 + if (dashboard.getCustomerId() != null) {
  72 + this.customerId = dashboard.getCustomerId().getId();
  73 + }
  74 + this.title = dashboard.getTitle();
  75 + this.configuration = dashboard.getConfiguration();
  76 + }
  77 +
  78 + public UUID getId() {
  79 + return id;
  80 + }
  81 +
  82 + public void setId(UUID id) {
  83 + this.id = id;
  84 + }
  85 +
  86 + public UUID getTenantId() {
  87 + return tenantId;
  88 + }
  89 +
  90 + public void setTenantId(UUID tenantId) {
  91 + this.tenantId = tenantId;
  92 + }
  93 +
  94 + public UUID getCustomerId() {
  95 + return customerId;
  96 + }
  97 +
  98 + public void setCustomerId(UUID customerId) {
  99 + this.customerId = customerId;
  100 + }
  101 +
  102 + public String getTitle() {
  103 + return title;
  104 + }
  105 +
  106 + public void setTitle(String title) {
  107 + this.title = title;
  108 + }
  109 +
  110 + public JsonNode getConfiguration() {
  111 + return configuration;
  112 + }
  113 +
  114 + public void setConfiguration(JsonNode configuration) {
  115 + this.configuration = configuration;
  116 + }
  117 +
  118 + @Override
  119 + public String getSearchTextSource() {
  120 + return title;
  121 + }
  122 +
  123 + @Override
  124 + public void setSearchText(String searchText) {
  125 + this.searchText = searchText;
  126 + }
  127 +
  128 + public String getSearchText() {
  129 + return searchText;
  130 + }
  131 +
  132 + @Override
  133 + public int hashCode() {
  134 + final int prime = 31;
  135 + int result = 1;
  136 + result = prime * result + ((configuration == null) ? 0 : configuration.hashCode());
  137 + result = prime * result + ((customerId == null) ? 0 : customerId.hashCode());
  138 + result = prime * result + ((id == null) ? 0 : id.hashCode());
  139 + result = prime * result + ((searchText == null) ? 0 : searchText.hashCode());
  140 + result = prime * result + ((tenantId == null) ? 0 : tenantId.hashCode());
  141 + result = prime * result + ((title == null) ? 0 : title.hashCode());
  142 + return result;
  143 + }
  144 +
  145 + @Override
  146 + public boolean equals(Object obj) {
  147 + if (this == obj)
  148 + return true;
  149 + if (obj == null)
  150 + return false;
  151 + if (getClass() != obj.getClass())
  152 + return false;
  153 + DashboardEntity other = (DashboardEntity) obj;
  154 + if (configuration == null) {
  155 + if (other.configuration != null)
  156 + return false;
  157 + } else if (!configuration.equals(other.configuration))
  158 + return false;
  159 + if (customerId == null) {
  160 + if (other.customerId != null)
  161 + return false;
  162 + } else if (!customerId.equals(other.customerId))
  163 + return false;
  164 + if (id == null) {
  165 + if (other.id != null)
  166 + return false;
  167 + } else if (!id.equals(other.id))
  168 + return false;
  169 + if (searchText == null) {
  170 + if (other.searchText != null)
  171 + return false;
  172 + } else if (!searchText.equals(other.searchText))
  173 + return false;
  174 + if (tenantId == null) {
  175 + if (other.tenantId != null)
  176 + return false;
  177 + } else if (!tenantId.equals(other.tenantId))
  178 + return false;
  179 + if (title == null) {
  180 + if (other.title != null)
  181 + return false;
  182 + } else if (!title.equals(other.title))
  183 + return false;
  184 + return true;
  185 + }
  186 +
  187 + @Override
  188 + public String toString() {
  189 + StringBuilder builder = new StringBuilder();
  190 + builder.append("DashboardEntity [id=");
  191 + builder.append(id);
  192 + builder.append(", tenantId=");
  193 + builder.append(tenantId);
  194 + builder.append(", customerId=");
  195 + builder.append(customerId);
  196 + builder.append(", title=");
  197 + builder.append(title);
  198 + builder.append(", searchText=");
  199 + builder.append(searchText);
  200 + builder.append(", configuration=");
  201 + builder.append(configuration);
  202 + builder.append("]");
  203 + return builder.toString();
  204 + }
  205 +
  206 + @Override
  207 + public Dashboard toData() {
  208 + Dashboard dashboard = new Dashboard(new DashboardId(id));
  209 + dashboard.setCreatedTime(UUIDs.unixTimestamp(id));
  210 + if (tenantId != null) {
  211 + dashboard.setTenantId(new TenantId(tenantId));
  212 + }
  213 + if (customerId != null) {
  214 + dashboard.setCustomerId(new CustomerId(customerId));
  215 + }
  216 + dashboard.setTitle(title);
  217 + dashboard.setConfiguration(configuration);
  218 + return dashboard;
  219 + }
  220 +
  221 +}
  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.sql;
  17 +
  18 +import com.datastax.driver.core.utils.UUIDs;
  19 +import javax.persistence.Column;
  20 +import javax.persistence.Entity;
  21 +import javax.persistence.Id;
  22 +import javax.persistence.Table;
  23 +import javax.persistence.Transient;
  24 +import org.thingsboard.server.common.data.DashboardInfo;
  25 +import org.thingsboard.server.common.data.id.CustomerId;
  26 +import org.thingsboard.server.common.data.id.DashboardId;
  27 +import org.thingsboard.server.common.data.id.TenantId;
  28 +import org.thingsboard.server.dao.model.ModelConstants;
  29 +import org.thingsboard.server.dao.model.SearchTextEntity;
  30 +
  31 +import java.util.UUID;
  32 +
  33 +@Entity
  34 +@Table(name = ModelConstants.DASHBOARD_COLUMN_FAMILY_NAME)
  35 +public class DashboardInfoEntity implements SearchTextEntity<DashboardInfo> {
  36 +
  37 + @Transient
  38 + private static final long serialVersionUID = -5525675905528050250L;
  39 +
  40 + @Id
  41 + @Column(name = ModelConstants.ID_PROPERTY)
  42 + private UUID id;
  43 +
  44 + @Column(name = ModelConstants.DASHBOARD_TENANT_ID_PROPERTY)
  45 + private UUID tenantId;
  46 +
  47 + @Column(name = ModelConstants.DASHBOARD_CUSTOMER_ID_PROPERTY)
  48 + private UUID customerId;
  49 +
  50 + @Column(name = ModelConstants.DASHBOARD_TITLE_PROPERTY)
  51 + private String title;
  52 +
  53 + @Column(name = ModelConstants.SEARCH_TEXT_PROPERTY)
  54 + private String searchText;
  55 +
  56 + public DashboardInfoEntity() {
  57 + super();
  58 + }
  59 +
  60 + public DashboardInfoEntity(DashboardInfo dashboardInfo) {
  61 + if (dashboardInfo.getId() != null) {
  62 + this.id = dashboardInfo.getId().getId();
  63 + }
  64 + if (dashboardInfo.getTenantId() != null) {
  65 + this.tenantId = dashboardInfo.getTenantId().getId();
  66 + }
  67 + if (dashboardInfo.getCustomerId() != null) {
  68 + this.customerId = dashboardInfo.getCustomerId().getId();
  69 + }
  70 + this.title = dashboardInfo.getTitle();
  71 + }
  72 +
  73 + public UUID getId() {
  74 + return id;
  75 + }
  76 +
  77 + public void setId(UUID id) {
  78 + this.id = id;
  79 + }
  80 +
  81 + public UUID getTenantId() {
  82 + return tenantId;
  83 + }
  84 +
  85 + public void setTenantId(UUID tenantId) {
  86 + this.tenantId = tenantId;
  87 + }
  88 +
  89 + public UUID getCustomerId() {
  90 + return customerId;
  91 + }
  92 +
  93 + public void setCustomerId(UUID customerId) {
  94 + this.customerId = customerId;
  95 + }
  96 +
  97 + public String getTitle() {
  98 + return title;
  99 + }
  100 +
  101 + public void setTitle(String title) {
  102 + this.title = title;
  103 + }
  104 +
  105 + @Override
  106 + public String getSearchTextSource() {
  107 + return title;
  108 + }
  109 +
  110 + @Override
  111 + public void setSearchText(String searchText) {
  112 + this.searchText = searchText;
  113 + }
  114 +
  115 + public String getSearchText() {
  116 + return searchText;
  117 + }
  118 +
  119 + @Override
  120 + public int hashCode() {
  121 + final int prime = 31;
  122 + int result = 1;
  123 + result = prime * result + ((customerId == null) ? 0 : customerId.hashCode());
  124 + result = prime * result + ((id == null) ? 0 : id.hashCode());
  125 + result = prime * result + ((searchText == null) ? 0 : searchText.hashCode());
  126 + result = prime * result + ((tenantId == null) ? 0 : tenantId.hashCode());
  127 + result = prime * result + ((title == null) ? 0 : title.hashCode());
  128 + return result;
  129 + }
  130 +
  131 + @Override
  132 + public boolean equals(Object obj) {
  133 + if (this == obj)
  134 + return true;
  135 + if (obj == null)
  136 + return false;
  137 + if (getClass() != obj.getClass())
  138 + return false;
  139 + DashboardInfoEntity other = (DashboardInfoEntity) obj;
  140 + if (customerId == null) {
  141 + if (other.customerId != null)
  142 + return false;
  143 + } else if (!customerId.equals(other.customerId))
  144 + return false;
  145 + if (id == null) {
  146 + if (other.id != null)
  147 + return false;
  148 + } else if (!id.equals(other.id))
  149 + return false;
  150 + if (searchText == null) {
  151 + if (other.searchText != null)
  152 + return false;
  153 + } else if (!searchText.equals(other.searchText))
  154 + return false;
  155 + if (tenantId == null) {
  156 + if (other.tenantId != null)
  157 + return false;
  158 + } else if (!tenantId.equals(other.tenantId))
  159 + return false;
  160 + if (title == null) {
  161 + if (other.title != null)
  162 + return false;
  163 + } else if (!title.equals(other.title))
  164 + return false;
  165 + return true;
  166 + }
  167 +
  168 + @Override
  169 + public String toString() {
  170 + StringBuilder builder = new StringBuilder();
  171 + builder.append("DashboardInfoEntity [id=");
  172 + builder.append(id);
  173 + builder.append(", tenantId=");
  174 + builder.append(tenantId);
  175 + builder.append(", customerId=");
  176 + builder.append(customerId);
  177 + builder.append(", title=");
  178 + builder.append(title);
  179 + builder.append(", searchText=");
  180 + builder.append(searchText);
  181 + builder.append("]");
  182 + return builder.toString();
  183 + }
  184 +
  185 + @Override
  186 + public DashboardInfo toData() {
  187 + DashboardInfo dashboardInfo = new DashboardInfo(new DashboardId(id));
  188 + dashboardInfo.setCreatedTime(UUIDs.unixTimestamp(id));
  189 + if (tenantId != null) {
  190 + dashboardInfo.setTenantId(new TenantId(tenantId));
  191 + }
  192 + if (customerId != null) {
  193 + dashboardInfo.setCustomerId(new CustomerId(customerId));
  194 + }
  195 + dashboardInfo.setTitle(title);
  196 + return dashboardInfo;
  197 + }
  198 +
  199 +}
  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.sql;
  17 +
  18 +import com.datastax.driver.core.utils.UUIDs;
  19 +import javax.persistence.Column;
  20 +import javax.persistence.Entity;
  21 +import javax.persistence.Id;
  22 +import javax.persistence.Table;
  23 +import javax.persistence.Transient;
  24 +import org.thingsboard.server.common.data.id.DeviceCredentialsId;
  25 +import org.thingsboard.server.common.data.id.DeviceId;
  26 +import org.thingsboard.server.common.data.security.DeviceCredentials;
  27 +import org.thingsboard.server.common.data.security.DeviceCredentialsType;
  28 +import org.thingsboard.server.dao.model.BaseEntity;
  29 +import org.thingsboard.server.dao.model.ModelConstants;
  30 +
  31 +import java.util.UUID;
  32 +
  33 +@Entity
  34 +@Table(name = ModelConstants.DEVICE_CREDENTIALS_COLUMN_FAMILY_NAME)
  35 +public final class DeviceCredentialsEntity implements BaseEntity<DeviceCredentials> {
  36 +
  37 + @Transient
  38 + private static final long serialVersionUID = -2512362753385470464L;
  39 + @Id
  40 + @Column(name = ModelConstants.ID_PROPERTY)
  41 + private UUID id;
  42 +
  43 + @Column(name = ModelConstants.DEVICE_CREDENTIALS_DEVICE_ID_PROPERTY)
  44 + private UUID deviceId;
  45 +
  46 + @Column(name = ModelConstants.DEVICE_CREDENTIALS_CREDENTIALS_TYPE_PROPERTY)
  47 + private DeviceCredentialsType credentialsType;
  48 +
  49 + @Column(name = ModelConstants.DEVICE_CREDENTIALS_CREDENTIALS_ID_PROPERTY)
  50 + private String credentialsId;
  51 +
  52 + @Column(name = ModelConstants.DEVICE_CREDENTIALS_CREDENTIALS_VALUE_PROPERTY)
  53 + private String credentialsValue;
  54 +
  55 + public DeviceCredentialsEntity() {
  56 + super();
  57 + }
  58 +
  59 + public DeviceCredentialsEntity(DeviceCredentials deviceCredentials) {
  60 + if (deviceCredentials.getId() != null) {
  61 + this.id = deviceCredentials.getId().getId();
  62 + }
  63 + if (deviceCredentials.getDeviceId() != null) {
  64 + this.deviceId = deviceCredentials.getDeviceId().getId();
  65 + }
  66 + this.credentialsType = deviceCredentials.getCredentialsType();
  67 + this.credentialsId = deviceCredentials.getCredentialsId();
  68 + this.credentialsValue = deviceCredentials.getCredentialsValue();
  69 + }
  70 +
  71 + public UUID getId() {
  72 + return id;
  73 + }
  74 +
  75 + public void setId(UUID id) {
  76 + this.id = id;
  77 + }
  78 +
  79 + public UUID getDeviceId() {
  80 + return deviceId;
  81 + }
  82 +
  83 + public void setDeviceId(UUID deviceId) {
  84 + this.deviceId = deviceId;
  85 + }
  86 +
  87 + public DeviceCredentialsType getCredentialsType() {
  88 + return credentialsType;
  89 + }
  90 +
  91 + public void setCredentialsType(DeviceCredentialsType credentialsType) {
  92 + this.credentialsType = credentialsType;
  93 + }
  94 +
  95 + public String getCredentialsId() {
  96 + return credentialsId;
  97 + }
  98 +
  99 + public void setCredentialsId(String credentialsId) {
  100 + this.credentialsId = credentialsId;
  101 + }
  102 +
  103 + public String getCredentialsValue() {
  104 + return credentialsValue;
  105 + }
  106 +
  107 + public void setCredentialsValue(String credentialsValue) {
  108 + this.credentialsValue = credentialsValue;
  109 + }
  110 +
  111 + @Override
  112 + public int hashCode() {
  113 + final int prime = 31;
  114 + int result = 1;
  115 + result = prime * result + ((credentialsId == null) ? 0 : credentialsId.hashCode());
  116 + result = prime * result + ((credentialsType == null) ? 0 : credentialsType.hashCode());
  117 + result = prime * result + ((credentialsValue == null) ? 0 : credentialsValue.hashCode());
  118 + result = prime * result + ((deviceId == null) ? 0 : deviceId.hashCode());
  119 + result = prime * result + ((id == null) ? 0 : id.hashCode());
  120 + return result;
  121 + }
  122 +
  123 + @Override
  124 + public boolean equals(Object obj) {
  125 + if (this == obj)
  126 + return true;
  127 + if (obj == null)
  128 + return false;
  129 + if (getClass() != obj.getClass())
  130 + return false;
  131 + DeviceCredentialsEntity other = (DeviceCredentialsEntity) obj;
  132 + if (credentialsId == null) {
  133 + if (other.credentialsId != null)
  134 + return false;
  135 + } else if (!credentialsId.equals(other.credentialsId))
  136 + return false;
  137 + if (credentialsType != other.credentialsType)
  138 + return false;
  139 + if (credentialsValue == null) {
  140 + if (other.credentialsValue != null)
  141 + return false;
  142 + } else if (!credentialsValue.equals(other.credentialsValue))
  143 + return false;
  144 + if (deviceId == null) {
  145 + if (other.deviceId != null)
  146 + return false;
  147 + } else if (!deviceId.equals(other.deviceId))
  148 + return false;
  149 + if (id == null) {
  150 + if (other.id != null)
  151 + return false;
  152 + } else if (!id.equals(other.id))
  153 + return false;
  154 + return true;
  155 + }
  156 +
  157 + @Override
  158 + public String toString() {
  159 + StringBuilder builder = new StringBuilder();
  160 + builder.append("DeviceCredentialsEntity [id=");
  161 + builder.append(id);
  162 + builder.append(", deviceId=");
  163 + builder.append(deviceId);
  164 + builder.append(", credentialsType=");
  165 + builder.append(credentialsType);
  166 + builder.append(", credentialsId=");
  167 + builder.append(credentialsId);
  168 + builder.append(", credentialsValue=");
  169 + builder.append(credentialsValue);
  170 + builder.append("]");
  171 + return builder.toString();
  172 + }
  173 +
  174 + @Override
  175 + public DeviceCredentials toData() {
  176 + DeviceCredentials deviceCredentials = new DeviceCredentials(new DeviceCredentialsId(id));
  177 + deviceCredentials.setCreatedTime(UUIDs.unixTimestamp(id));
  178 + if (deviceId != null) {
  179 + deviceCredentials.setDeviceId(new DeviceId(deviceId));
  180 + }
  181 + deviceCredentials.setCredentialsType(credentialsType);
  182 + deviceCredentials.setCredentialsId(credentialsId);
  183 + deviceCredentials.setCredentialsValue(credentialsValue);
  184 + return deviceCredentials;
  185 + }
  186 +
  187 +}
  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.sql;
  17 +
  18 +import com.datastax.driver.core.utils.UUIDs;
  19 +import javax.persistence.Column;
  20 +import javax.persistence.Entity;
  21 +import javax.persistence.Id;
  22 +import javax.persistence.Table;
  23 +import javax.persistence.Transient;
  24 +import com.fasterxml.jackson.databind.JsonNode;
  25 +import org.thingsboard.server.common.data.Device;
  26 +import org.thingsboard.server.common.data.id.CustomerId;
  27 +import org.thingsboard.server.common.data.id.DeviceId;
  28 +import org.thingsboard.server.common.data.id.TenantId;
  29 +import org.thingsboard.server.dao.model.ModelConstants;
  30 +import org.thingsboard.server.dao.model.SearchTextEntity;
  31 +
  32 +import java.util.UUID;
  33 +
  34 +@Entity
  35 +@Table(name = ModelConstants.DEVICE_COLUMN_FAMILY_NAME)
  36 +public final class DeviceEntity implements SearchTextEntity<Device> {
  37 +
  38 + @Transient
  39 + private static final long serialVersionUID = 8050086401213322856L;
  40 +
  41 + @Id
  42 + @Column(name = ModelConstants.ID_PROPERTY)
  43 + private UUID id;
  44 +
  45 + @Column(name = ModelConstants.DEVICE_TENANT_ID_PROPERTY)
  46 + private UUID tenantId;
  47 +
  48 + @Column(name = ModelConstants.DEVICE_CUSTOMER_ID_PROPERTY)
  49 + private UUID customerId;
  50 +
  51 + @Column(name = ModelConstants.DEVICE_NAME_PROPERTY)
  52 + private String name;
  53 +
  54 + @Column(name = ModelConstants.SEARCH_TEXT_PROPERTY)
  55 + private String searchText;
  56 +
  57 + @Column(name = ModelConstants.DEVICE_ADDITIONAL_INFO_PROPERTY)
  58 + private JsonNode additionalInfo;
  59 +
  60 + public DeviceEntity() {
  61 + super();
  62 + }
  63 +
  64 + public DeviceEntity(Device device) {
  65 + if (device.getId() != null) {
  66 + this.id = device.getId().getId();
  67 + }
  68 + if (device.getTenantId() != null) {
  69 + this.tenantId = device.getTenantId().getId();
  70 + }
  71 + if (device.getCustomerId() != null) {
  72 + this.customerId = device.getCustomerId().getId();
  73 + }
  74 + this.name = device.getName();
  75 + this.additionalInfo = device.getAdditionalInfo();
  76 + }
  77 +
  78 + public UUID getId() {
  79 + return id;
  80 + }
  81 +
  82 + public void setId(UUID id) {
  83 + this.id = id;
  84 + }
  85 +
  86 + public UUID getTenantId() {
  87 + return tenantId;
  88 + }
  89 +
  90 + public void setTenantId(UUID tenantId) {
  91 + this.tenantId = tenantId;
  92 + }
  93 +
  94 + public UUID getCustomerId() {
  95 + return customerId;
  96 + }
  97 +
  98 + public void setCustomerId(UUID customerId) {
  99 + this.customerId = customerId;
  100 + }
  101 +
  102 + public String getName() {
  103 + return name;
  104 + }
  105 +
  106 + public void setName(String name) {
  107 + this.name = name;
  108 + }
  109 +
  110 + public JsonNode getAdditionalInfo() {
  111 + return additionalInfo;
  112 + }
  113 +
  114 + public void setAdditionalInfo(JsonNode additionalInfo) {
  115 + this.additionalInfo = additionalInfo;
  116 + }
  117 +
  118 + @Override
  119 + public String getSearchTextSource() {
  120 + return name;
  121 + }
  122 +
  123 + @Override
  124 + public void setSearchText(String searchText) {
  125 + this.searchText = searchText;
  126 + }
  127 +
  128 + public String getSearchText() {
  129 + return searchText;
  130 + }
  131 +
  132 + @Override
  133 + public int hashCode() {
  134 + final int prime = 31;
  135 + int result = 1;
  136 + result = prime * result + ((additionalInfo == null) ? 0 : additionalInfo.hashCode());
  137 + result = prime * result + ((customerId == null) ? 0 : customerId.hashCode());
  138 + result = prime * result + ((id == null) ? 0 : id.hashCode());
  139 + result = prime * result + ((name == null) ? 0 : name.hashCode());
  140 + result = prime * result + ((tenantId == null) ? 0 : tenantId.hashCode());
  141 + return result;
  142 + }
  143 +
  144 + @Override
  145 + public boolean equals(Object obj) {
  146 + if (this == obj)
  147 + return true;
  148 + if (obj == null)
  149 + return false;
  150 + if (getClass() != obj.getClass())
  151 + return false;
  152 + DeviceEntity other = (DeviceEntity) obj;
  153 + if (additionalInfo == null) {
  154 + if (other.additionalInfo != null)
  155 + return false;
  156 + } else if (!additionalInfo.equals(other.additionalInfo))
  157 + return false;
  158 + if (customerId == null) {
  159 + if (other.customerId != null)
  160 + return false;
  161 + } else if (!customerId.equals(other.customerId))
  162 + return false;
  163 + if (id == null) {
  164 + if (other.id != null)
  165 + return false;
  166 + } else if (!id.equals(other.id))
  167 + return false;
  168 + if (name == null) {
  169 + if (other.name != null)
  170 + return false;
  171 + } else if (!name.equals(other.name))
  172 + return false;
  173 + if (tenantId == null) {
  174 + if (other.tenantId != null)
  175 + return false;
  176 + } else if (!tenantId.equals(other.tenantId))
  177 + return false;
  178 + return true;
  179 + }
  180 +
  181 + @Override
  182 + public String toString() {
  183 + StringBuilder builder = new StringBuilder();
  184 + builder.append("DeviceEntity [id=");
  185 + builder.append(id);
  186 + builder.append(", tenantId=");
  187 + builder.append(tenantId);
  188 + builder.append(", customerId=");
  189 + builder.append(customerId);
  190 + builder.append(", name=");
  191 + builder.append(name);
  192 + builder.append(", additionalInfo=");
  193 + builder.append(additionalInfo);
  194 + builder.append("]");
  195 + return builder.toString();
  196 + }
  197 +
  198 + @Override
  199 + public Device toData() {
  200 + Device device = new Device(new DeviceId(id));
  201 + device.setCreatedTime(UUIDs.unixTimestamp(id));
  202 + if (tenantId != null) {
  203 + device.setTenantId(new TenantId(tenantId));
  204 + }
  205 + if (customerId != null) {
  206 + device.setCustomerId(new CustomerId(customerId));
  207 + }
  208 + device.setName(name);
  209 + device.setAdditionalInfo(additionalInfo);
  210 + return device;
  211 + }
  212 +
  213 +}
  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.sql;
  17 +
  18 +import com.datastax.driver.core.utils.UUIDs;
  19 +import javax.persistence.Column;
  20 +import javax.persistence.Entity;
  21 +import javax.persistence.Id;
  22 +import javax.persistence.Table;
  23 +import javax.persistence.Transient;
  24 +import com.fasterxml.jackson.databind.JsonNode;
  25 +import lombok.Data;
  26 +import lombok.NoArgsConstructor;
  27 +import org.thingsboard.server.common.data.EntityType;
  28 +import org.thingsboard.server.common.data.Event;
  29 +import org.thingsboard.server.common.data.id.*;
  30 +import org.thingsboard.server.dao.model.BaseEntity;
  31 +import org.thingsboard.server.dao.model.ModelConstants;
  32 +
  33 +import java.util.UUID;
  34 +
  35 +@Data
  36 +@NoArgsConstructor
  37 +@Entity
  38 +@Table(name = ModelConstants.DEVICE_COLUMN_FAMILY_NAME)
  39 +public class EventEntity implements BaseEntity<Event> {
  40 +
  41 + @Transient
  42 + private static final long serialVersionUID = -5717830061727466727L;
  43 +
  44 + @Column(name = ModelConstants.ID_PROPERTY)
  45 + private UUID id;
  46 +
  47 + @Id
  48 + @Column(name = ModelConstants.EVENT_TENANT_ID_PROPERTY)
  49 + private UUID tenantId;
  50 +
  51 + @Column(name = ModelConstants.EVENT_ENTITY_TYPE_PROPERTY)
  52 + private EntityType entityType;
  53 +
  54 + @Column(name = ModelConstants.EVENT_ENTITY_ID_PROPERTY)
  55 + private UUID entityId;
  56 +
  57 + @Column(name = ModelConstants.EVENT_TYPE_PROPERTY)
  58 + private String eventType;
  59 +
  60 + @Column(name = ModelConstants.EVENT_UID_PROPERTY)
  61 + private String eventUId;
  62 +
  63 + @Column(name = ModelConstants.EVENT_BODY_PROPERTY)
  64 + private JsonNode body;
  65 +
  66 + public EventEntity(Event event) {
  67 + if (event.getId() != null) {
  68 + this.id = event.getId().getId();
  69 + }
  70 + if (event.getTenantId() != null) {
  71 + this.tenantId = event.getTenantId().getId();
  72 + }
  73 + if (event.getEntityId() != null) {
  74 + this.entityType = event.getEntityId().getEntityType();
  75 + this.entityId = event.getEntityId().getId();
  76 + }
  77 + this.eventType = event.getType();
  78 + this.eventUId = event.getUid();
  79 + this.body = event.getBody();
  80 + }
  81 +
  82 + @Override
  83 + public UUID getId() {
  84 + return id;
  85 + }
  86 +
  87 + @Override
  88 + public void setId(UUID id) {
  89 + this.id = id;
  90 + }
  91 +
  92 + @Override
  93 + public Event toData() {
  94 + Event event = new Event(new EventId(id));
  95 + event.setCreatedTime(UUIDs.unixTimestamp(id));
  96 + event.setTenantId(new TenantId(tenantId));
  97 + switch (entityType) {
  98 + case TENANT:
  99 + event.setEntityId(new TenantId(entityId));
  100 + break;
  101 + case DEVICE:
  102 + event.setEntityId(new DeviceId(entityId));
  103 + break;
  104 + case CUSTOMER:
  105 + event.setEntityId(new CustomerId(entityId));
  106 + break;
  107 + case RULE:
  108 + event.setEntityId(new RuleId(entityId));
  109 + break;
  110 + case PLUGIN:
  111 + event.setEntityId(new PluginId(entityId));
  112 + break;
  113 + }
  114 + event.setBody(body);
  115 + event.setType(eventType);
  116 + event.setUid(eventUId);
  117 + return event;
  118 + }
  119 +}