Commit d6965e946955a49a91960fa0e454a798e9b7b271

Authored by volodymyr-babak
1 parent 68ad4445

Refactoring to introduce new DAO layer

Showing 73 changed files with 668 additions and 950 deletions
... ... @@ -21,34 +21,29 @@ import com.datastax.driver.core.querybuilder.QueryBuilder;
21 21 import com.datastax.driver.core.querybuilder.Select;
22 22 import com.datastax.driver.core.querybuilder.Select.Where;
23 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 24 import org.thingsboard.server.common.data.page.TimePageLink;
27 25 import org.thingsboard.server.dao.model.BaseEntity;
28 26 import org.thingsboard.server.dao.model.ModelConstants;
29   -import org.thingsboard.server.dao.model.SearchTextEntity;
30 27
31 28 import java.util.ArrayList;
32 29 import java.util.Collections;
33 30 import java.util.List;
34 31 import java.util.UUID;
35 32
36   -import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;
37 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 AbstractSearchTimeDao<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 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 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 47 Select select = select().from(searchView);
53 48 Where query = select.where();
54 49 for (Clause clause : clauses) {
... ...
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 23 /**
24 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 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 23 import org.thingsboard.server.dao.model.type.*;
24 24
25 25 @Slf4j
26   -public abstract class AbstractDao {
  26 +public abstract class CassandraAbstractDao {
27 27
28 28 @Autowired
29 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,8 @@ import com.google.common.util.concurrent.Futures;
28 28 import com.google.common.util.concurrent.ListenableFuture;
29 29 import lombok.extern.slf4j.Slf4j;
30 30 import org.thingsboard.server.dao.model.BaseEntity;
31   -import org.thingsboard.server.dao.model.wrapper.EntityResultSet;
32 31 import org.thingsboard.server.dao.model.ModelConstants;
  32 +import org.thingsboard.server.dao.model.wrapper.EntityResultSet;
33 33
34 34 import javax.annotation.Nullable;
35 35 import java.util.Collections;
... ... @@ -37,26 +37,25 @@ import java.util.List;
37 37 import java.util.UUID;
38 38
39 39 import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;
40   -import static com.datastax.driver.core.querybuilder.QueryBuilder.lt;
41 40 import static com.datastax.driver.core.querybuilder.QueryBuilder.select;
42 41
43 42 @Slf4j
44   -public abstract class AbstractModelDao<T extends BaseEntity<?>> extends AbstractDao implements Dao<T> {
  43 +public abstract class CassandraAbstractModelDao<E extends BaseEntity<D>, D> extends CassandraAbstractDao implements Dao<D> {
45 44
46   - protected abstract Class<T> getColumnFamilyClass();
  45 + protected abstract Class<E> getColumnFamilyClass();
47 46
48 47 protected abstract String getColumnFamilyName();
49 48
50   - protected Mapper<T> getMapper() {
  49 + protected Mapper<E> getMapper() {
51 50 return cluster.getMapper(getColumnFamilyClass());
52 51 }
53 52
54   - protected List<T> findListByStatement(Statement statement) {
55   - List<T> list = Collections.emptyList();
  53 + protected List<E> findListByStatement(Statement statement) {
  54 + List<E> list = Collections.emptyList();
56 55 if (statement != null) {
57 56 statement.setConsistencyLevel(cluster.getDefaultReadConsistencyLevel());
58 57 ResultSet resultSet = getSession().execute(statement);
59   - Result<T> result = getMapper().map(resultSet);
  58 + Result<E> result = getMapper().map(resultSet);
60 59 if (result != null) {
61 60 list = result.all();
62 61 }
... ... @@ -64,33 +63,33 @@ public abstract class AbstractModelDao<T extends BaseEntity<?>> extends Abstract
64 63 return list;
65 64 }
66 65
67   - protected ListenableFuture<List<T>> findListByStatementAsync(Statement statement) {
  66 + protected ListenableFuture<List<D>> findListByStatementAsync(Statement statement) {
68 67 if (statement != null) {
69 68 statement.setConsistencyLevel(cluster.getDefaultReadConsistencyLevel());
70 69 ResultSetFuture resultSetFuture = getSession().executeAsync(statement);
71   - ListenableFuture<List<T>> result = Futures.transform(resultSetFuture, new Function<ResultSet, List<T>>() {
  70 + return Futures.transform(resultSetFuture, new Function<ResultSet, List<D>>() {
72 71 @Nullable
73 72 @Override
74   - public List<T> apply(@Nullable ResultSet resultSet) {
75   - Result<T> result = getMapper().map(resultSet);
  73 + public List<D> apply(@Nullable ResultSet resultSet) {
  74 + Result<E> result = getMapper().map(resultSet);
76 75 if (result != null) {
77   - return result.all();
  76 + List<E> entities = result.all();
  77 + return DaoUtil.convertDataList(entities);
78 78 } else {
79 79 return Collections.emptyList();
80 80 }
81 81 }
82 82 });
83   - return result;
84 83 }
85 84 return Futures.immediateFuture(Collections.emptyList());
86 85 }
87 86
88   - protected T findOneByStatement(Statement statement) {
89   - T object = null;
  87 + protected E findOneByStatement(Statement statement) {
  88 + E object = null;
90 89 if (statement != null) {
91 90 statement.setConsistencyLevel(cluster.getDefaultReadConsistencyLevel());
92 91 ResultSet resultSet = getSession().execute(statement);
93   - Result<T> result = getMapper().map(resultSet);
  92 + Result<E> result = getMapper().map(resultSet);
94 93 if (result != null) {
95 94 object = result.one();
96 95 }
... ... @@ -98,32 +97,32 @@ public abstract class AbstractModelDao<T extends BaseEntity<?>> extends Abstract
98 97 return object;
99 98 }
100 99
101   - protected ListenableFuture<T> findOneByStatementAsync(Statement statement) {
  100 + protected ListenableFuture<D> findOneByStatementAsync(Statement statement) {
102 101 if (statement != null) {
103 102 statement.setConsistencyLevel(cluster.getDefaultReadConsistencyLevel());
104 103 ResultSetFuture resultSetFuture = getSession().executeAsync(statement);
105   - ListenableFuture<T> result = Futures.transform(resultSetFuture, new Function<ResultSet, T>() {
  104 + return Futures.transform(resultSetFuture, new Function<ResultSet, D>() {
106 105 @Nullable
107 106 @Override
108   - public T apply(@Nullable ResultSet resultSet) {
109   - Result<T> result = getMapper().map(resultSet);
  107 + public D apply(@Nullable ResultSet resultSet) {
  108 + Result<E> result = getMapper().map(resultSet);
110 109 if (result != null) {
111   - return result.one();
  110 + E entity = result.one();
  111 + return DaoUtil.getData(entity);
112 112 } else {
113 113 return null;
114 114 }
115 115 }
116 116 });
117   - return result;
118 117 }
119 118 return Futures.immediateFuture(null);
120 119 }
121 120
122   - protected Statement getSaveQuery(T dto) {
  121 + protected Statement getSaveQuery(E dto) {
123 122 return getMapper().saveQuery(dto);
124 123 }
125 124
126   - protected EntityResultSet<T> saveWithResult(T entity) {
  125 + protected EntityResultSet<E> saveWithResult(E entity) {
127 126 log.debug("Save entity {}", entity);
128 127 if (entity.getId() == null) {
129 128 entity.setId(UUIDs.timeBased());
... ... @@ -136,34 +135,48 @@ public abstract class AbstractModelDao<T extends BaseEntity<?>> extends Abstract
136 135 return new EntityResultSet<>(resultSet, entity);
137 136 }
138 137
139   - public T save(T entity) {
140   - return saveWithResult(entity).getEntity();
  138 + @Override
  139 + public D save(D domain) {
  140 + E entity;
  141 + try {
  142 + entity = getColumnFamilyClass().getConstructor(domain.getClass()).newInstance(domain);
  143 + } catch (Exception e) {
  144 + log.error("Can't create entity for domain object {}", domain, e);
  145 + throw new IllegalArgumentException("Can't create entity for domain object {" + domain + "}", e);
  146 + }
  147 + log.debug("Saving entity {}", entity);
  148 + entity = saveWithResult(entity).getEntity();
  149 + return DaoUtil.getData(entity);
141 150 }
142 151
143   - public T findById(UUID key) {
  152 + @Override
  153 + public D findById(UUID key) {
144 154 log.debug("Get entity by key {}", key);
145 155 Select.Where query = select().from(getColumnFamilyName()).where(eq(ModelConstants.ID_PROPERTY, key));
146 156 log.trace("Execute query {}", query);
147   - return findOneByStatement(query);
  157 + E entity = findOneByStatement(query);
  158 + return DaoUtil.getData(entity);
148 159 }
149 160
150   - public ListenableFuture<T> findByIdAsync(UUID key) {
  161 + @Override
  162 + public ListenableFuture<D> findByIdAsync(UUID key) {
151 163 log.debug("Get entity by key {}", key);
152 164 Select.Where query = select().from(getColumnFamilyName()).where(eq(ModelConstants.ID_PROPERTY, key));
153 165 log.trace("Execute query {}", query);
154 166 return findOneByStatementAsync(query);
155 167 }
156 168
157   -
158   - public ResultSet removeById(UUID key) {
  169 + @Override
  170 + public boolean removeById(UUID key) {
159 171 Statement delete = QueryBuilder.delete().all().from(getColumnFamilyName()).where(eq(ModelConstants.ID_PROPERTY, key));
160 172 log.debug("Remove request: {}", delete.toString());
161   - return getSession().execute(delete);
  173 + return getSession().execute(delete).wasApplied();
162 174 }
163 175
164   -
165   - public List<T> find() {
  176 + @Override
  177 + public List<D> find() {
166 178 log.debug("Get all entities from column family {}", getColumnFamilyName());
167   - return findListByStatement(QueryBuilder.select().all().from(getColumnFamilyName()).setConsistencyLevel(cluster.getDefaultReadConsistencyLevel()));
  179 + List<E> entities = findListByStatement(QueryBuilder.select().all().from(getColumnFamilyName()).setConsistencyLevel(cluster.getDefaultReadConsistencyLevel()));
  180 + return DaoUtil.convertDataList(entities);
168 181 }
169 182 }
... ...
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,28 @@ import com.datastax.driver.core.querybuilder.Clause;
19 19 import com.datastax.driver.core.querybuilder.QueryBuilder;
20 20 import com.datastax.driver.core.querybuilder.Select;
21 21 import com.datastax.driver.core.querybuilder.Select.Where;
  22 +import lombok.extern.slf4j.Slf4j;
22 23 import org.apache.commons.lang3.StringUtils;
23 24 import org.thingsboard.server.common.data.page.TextPageLink;
24   -import org.thingsboard.server.dao.model.SearchTextEntity;
25 25 import org.thingsboard.server.dao.model.ModelConstants;
  26 +import org.thingsboard.server.dao.model.SearchTextEntity;
26 27
27 28 import java.util.List;
28 29
29 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 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> {
  35 +
  36 + public D save(D domain) {
36 37
37   - public T save(T entity) {
38 38 entity.setSearchText(entity.getSearchTextSource().toLowerCase());
  39 +
39 40 return super.save(entity);
40 41 }
41   -
42   - protected List<T> findPageWithTextSearch(String searchView, List<Clause> clauses, TextPageLink pageLink) {
  42 +
  43 + protected List<E> findPageWithTextSearch(String searchView, List<Clause> clauses, TextPageLink pageLink) {
43 44 Select select = select().from(searchView);
44 45 Where query = select.where();
45 46 for (Clause clause : clauses) {
... ... @@ -49,7 +50,7 @@ public abstract class AbstractSearchTextDao<T extends SearchTextEntity<?>> exten
49 50 if (!StringUtils.isEmpty(pageLink.getTextOffset())) {
50 51 query.and(eq(ModelConstants.SEARCH_TEXT_PROPERTY, pageLink.getTextOffset()));
51 52 query.and(QueryBuilder.lt(ModelConstants.ID_PROPERTY, pageLink.getIdOffset()));
52   - List<T> result = findListByStatement(query);
  53 + List<E> result = findListByStatement(query);
53 54 if (result.size() < pageLink.getLimit()) {
54 55 select = select().from(searchView);
55 56 query = select.where();
... ...
... ... @@ -15,7 +15,6 @@
15 15 */
16 16 package org.thingsboard.server.dao;
17 17
18   -import com.datastax.driver.core.ResultSet;
19 18 import com.google.common.util.concurrent.ListenableFuture;
20 19
21 20 import java.util.List;
... ... @@ -31,6 +30,6 @@ public interface Dao<T> {
31 30
32 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 */
16 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 18 import org.thingsboard.server.common.data.id.UUIDBased;
25 19 import org.thingsboard.server.dao.model.ToData;
26 20
  21 +import java.util.*;
  22 +
27 23 public abstract class DaoUtil {
28 24
29 25 private DaoUtil() {
... ...
... ... @@ -15,7 +15,6 @@
15 15 */
16 16 package org.thingsboard.server.dao;
17 17
18   -import com.google.common.base.CharMatcher;
19 18 import lombok.extern.slf4j.Slf4j;
20 19 import org.bouncycastle.crypto.digests.SHA3Digest;
21 20 import org.bouncycastle.pqc.math.linearalgebra.ByteUtils;
... ...
... ... @@ -15,6 +15,7 @@
15 15 */
16 16 package org.thingsboard.server.dao.attributes;
17 17
  18 +// CASSANDRA ???
18 19 import com.datastax.driver.core.ResultSet;
19 20 import com.datastax.driver.core.ResultSetFuture;
20 21 import com.google.common.util.concurrent.ListenableFuture;
... ...
... ... @@ -15,12 +15,10 @@
15 15 */
16 16 package org.thingsboard.server.dao.attributes;
17 17
  18 +// CASSANDRA ???
18 19 import com.datastax.driver.core.ResultSet;
19   -import com.datastax.driver.core.ResultSetFuture;
20 20 import com.google.common.util.concurrent.ListenableFuture;
21   -import org.thingsboard.server.common.data.id.DeviceId;
22 21 import org.thingsboard.server.common.data.id.EntityId;
23   -import org.thingsboard.server.common.data.id.UUIDBased;
24 22 import org.thingsboard.server.common.data.kv.AttributeKvEntry;
25 23
26 24 import java.util.Collection;
... ...
... ... @@ -15,16 +15,17 @@
15 15 */
16 16 package org.thingsboard.server.dao.attributes;
17 17
  18 +// CASSANDRA ???
18 19 import com.datastax.driver.core.ResultSet;
19 20 import com.datastax.driver.core.ResultSetFuture;
20 21 import com.google.common.collect.Lists;
21 22 import com.google.common.util.concurrent.Futures;
22 23 import com.google.common.util.concurrent.ListenableFuture;
  24 +import org.springframework.beans.factory.annotation.Autowired;
  25 +import org.springframework.stereotype.Service;
23 26 import org.thingsboard.server.common.data.id.EntityId;
24 27 import org.thingsboard.server.common.data.kv.AttributeKvEntry;
25 28 import org.thingsboard.server.dao.exception.IncorrectParameterException;
26   -import org.springframework.beans.factory.annotation.Autowired;
27   -import org.springframework.stereotype.Service;
28 29 import org.thingsboard.server.dao.service.Validator;
29 30
30 31 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 24 import lombok.extern.slf4j.Slf4j;
25 25 import org.springframework.stereotype.Component;
26 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 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 33 import javax.annotation.PostConstruct;
33 34 import javax.annotation.PreDestroy;
... ... @@ -37,15 +38,16 @@ import java.util.List;
37 38 import java.util.Optional;
38 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 43 import static org.thingsboard.server.dao.model.ModelConstants.*;
41   -import static com.datastax.driver.core.querybuilder.QueryBuilder.*;
42 44
43 45 /**
44 46 * @author Andrew Shvayka
45 47 */
46 48 @Component
47 49 @Slf4j
48   -public class BaseAttributesDao extends AbstractAsyncDao implements AttributesDao {
  50 +public class CassandraBaseAttributesDao extends CassandraAbstractAsyncDao implements AttributesDao {
49 51
50 52 private PreparedStatement saveStmt;
51 53
... ... @@ -161,7 +163,7 @@ public class BaseAttributesDao extends AbstractAsyncDao implements AttributesDao
161 163 AttributeKvEntry attributeEntry = null;
162 164 if (row != null) {
163 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 168 return attributeEntry;
167 169 }
... ...
... ... @@ -16,13 +16,8 @@
16 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 20 import com.datastax.driver.core.ProtocolOptions.Compression;
24   -import com.datastax.driver.core.Session;
25   -import com.datastax.driver.core.exceptions.NoHostAvailableException;
26 21 import com.datastax.driver.mapping.Mapper;
27 22 import com.datastax.driver.mapping.MappingManager;
28 23 import lombok.Data;
... ... @@ -31,16 +26,13 @@ import org.apache.commons.lang3.StringUtils;
31 26 import org.springframework.beans.factory.annotation.Autowired;
32 27 import org.springframework.beans.factory.annotation.Value;
33 28 import org.springframework.stereotype.Component;
34   -import org.thingsboard.server.dao.exception.DatabaseException;
35 29
36 30 import javax.annotation.PostConstruct;
37 31 import javax.annotation.PreDestroy;
38   -import java.io.Closeable;
39 32 import java.net.InetSocketAddress;
40 33 import java.util.ArrayList;
41 34 import java.util.Collections;
42 35 import java.util.List;
43   -import java.util.StringTokenizer;
44 36
45 37 @Component
46 38 @Slf4j
... ...
... ... @@ -21,12 +21,9 @@ import lombok.Data;
21 21 import org.springframework.beans.factory.annotation.Value;
22 22 import org.springframework.context.annotation.Configuration;
23 23 import org.springframework.stereotype.Component;
24   -import org.springframework.util.StringUtils;
25 24
26 25 import javax.annotation.PostConstruct;
27 26
28   -import static org.apache.commons.lang3.StringUtils.isNotBlank;
29   -
30 27 @Component
31 28 @Configuration
32 29 @Data
... ...
... ... @@ -15,13 +15,12 @@
15 15 */
16 16 package org.thingsboard.server.dao.cassandra;
17 17
  18 +import com.datastax.driver.core.SocketOptions;
18 19 import lombok.Data;
19 20 import org.springframework.beans.factory.annotation.Value;
20 21 import org.springframework.context.annotation.Configuration;
21 22 import org.springframework.stereotype.Component;
22 23
23   -import com.datastax.driver.core.SocketOptions;
24   -
25 24 import javax.annotation.PostConstruct;
26 25
27 26 @Component
... ...
... ... @@ -27,9 +27,10 @@ import org.thingsboard.server.common.data.page.TextPageLink;
27 27 import org.thingsboard.server.common.data.plugin.ComponentDescriptor;
28 28 import org.thingsboard.server.common.data.plugin.ComponentScope;
29 29 import org.thingsboard.server.common.data.plugin.ComponentType;
30   -import org.thingsboard.server.dao.AbstractSearchTextDao;
31   -import org.thingsboard.server.dao.model.ModelConstants;
  30 +import org.thingsboard.server.dao.CassandraAbstractSearchTextDao;
  31 +import org.thingsboard.server.dao.DaoUtil;
32 32 import org.thingsboard.server.dao.model.ComponentDescriptorEntity;
  33 +import org.thingsboard.server.dao.model.ModelConstants;
33 34
34 35 import java.util.Arrays;
35 36 import java.util.List;
... ... @@ -44,7 +45,7 @@ import static com.datastax.driver.core.querybuilder.QueryBuilder.select;
44 45 */
45 46 @Component
46 47 @Slf4j
47   -public class BaseComponentDescriptorDao extends AbstractSearchTextDao<ComponentDescriptorEntity> implements ComponentDescriptorDao {
  48 +public class BaseComponentDescriptorDao extends CassandraAbstractSearchTextDao<ComponentDescriptorEntity, ComponentDescriptor> implements ComponentDescriptorDao {
48 49
49 50 @Override
50 51 protected Class<ComponentDescriptorEntity> getColumnFamilyClass() {
... ... @@ -57,10 +58,10 @@ public class BaseComponentDescriptorDao extends AbstractSearchTextDao<ComponentD
57 58 }
58 59
59 60 @Override
60   - public Optional<ComponentDescriptorEntity> save(ComponentDescriptor component) {
  61 + public Optional<ComponentDescriptor> saveIfNotExist(ComponentDescriptor component) {
61 62 ComponentDescriptorEntity entity = new ComponentDescriptorEntity(component);
62 63 log.debug("Save component entity [{}]", entity);
63   - Optional<ComponentDescriptorEntity> result = saveIfNotExist(entity);
  64 + Optional<ComponentDescriptor> result = saveIfNotExist(entity);
64 65 if (log.isTraceEnabled()) {
65 66 log.trace("Saved result: [{}] for component entity [{}]", result.isPresent(), result.orElse(null));
66 67 } else {
... ... @@ -70,19 +71,19 @@ public class BaseComponentDescriptorDao extends AbstractSearchTextDao<ComponentD
70 71 }
71 72
72 73 @Override
73   - public ComponentDescriptorEntity findById(ComponentDescriptorId componentId) {
  74 + public ComponentDescriptor findById(ComponentDescriptorId componentId) {
74 75 log.debug("Search component entity by id [{}]", componentId);
75   - ComponentDescriptorEntity entity = super.findById(componentId.getId());
  76 + ComponentDescriptor componentDescriptor = super.findById(componentId.getId());
76 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 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 85 @Override
85   - public ComponentDescriptorEntity findByClazz(String clazz) {
  86 + public ComponentDescriptor findByClazz(String clazz) {
86 87 log.debug("Search component entity by clazz [{}]", clazz);
87 88 Select.Where query = select().from(getColumnFamilyName()).where(eq(ModelConstants.COMPONENT_DESCRIPTOR_CLASS_PROPERTY, clazz));
88 89 log.trace("Execute query [{}]", query);
... ... @@ -92,11 +93,11 @@ public class BaseComponentDescriptorDao extends AbstractSearchTextDao<ComponentD
92 93 } else {
93 94 log.debug("Search result: [{}]", entity != null);
94 95 }
95   - return entity;
  96 + return DaoUtil.getData(entity);
96 97 }
97 98
98 99 @Override
99   - public List<ComponentDescriptorEntity> findByTypeAndPageLink(ComponentType type, TextPageLink pageLink) {
  100 + public List<ComponentDescriptor> findByTypeAndPageLink(ComponentType type, TextPageLink pageLink) {
100 101 log.debug("Try to find component by type [{}] and pageLink [{}]", type, pageLink);
101 102 List<ComponentDescriptorEntity> entities = findPageWithTextSearch(ModelConstants.COMPONENT_DESCRIPTOR_BY_TYPE_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME,
102 103 Arrays.asList(eq(ModelConstants.COMPONENT_DESCRIPTOR_TYPE_PROPERTY, type.name())), pageLink);
... ... @@ -105,11 +106,11 @@ public class BaseComponentDescriptorDao extends AbstractSearchTextDao<ComponentD
105 106 } else {
106 107 log.debug("Search result: [{}]", entities.size());
107 108 }
108   - return entities;
  109 + return DaoUtil.convertDataList(entities);
109 110 }
110 111
111 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 114 log.debug("Try to find component by scope [{}] and type [{}] and pageLink [{}]", scope, type, pageLink);
114 115 List<ComponentDescriptorEntity> entities = findPageWithTextSearch(ModelConstants.COMPONENT_DESCRIPTOR_BY_SCOPE_TYPE_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME,
115 116 Arrays.asList(eq(ModelConstants.COMPONENT_DESCRIPTOR_TYPE_PROPERTY, type.name()),
... ... @@ -119,20 +120,20 @@ public class BaseComponentDescriptorDao extends AbstractSearchTextDao<ComponentD
119 120 } else {
120 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 127 Statement delete = QueryBuilder.delete().all().from(ModelConstants.COMPONENT_DESCRIPTOR_BY_ID).where(eq(ModelConstants.ID_PROPERTY, key));
127 128 log.debug("Remove request: {}", delete.toString());
128   - return getSession().execute(delete);
  129 + return getSession().execute(delete).wasApplied();
129 130 }
130 131
131 132 @Override
132 133 public void deleteById(ComponentDescriptorId id) {
133 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 139 @Override
... ... @@ -144,7 +145,7 @@ public class BaseComponentDescriptorDao extends AbstractSearchTextDao<ComponentD
144 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 149 if (entity.getId() == null) {
149 150 entity.setId(UUIDs.timeBased());
150 151 }
... ... @@ -161,7 +162,7 @@ public class BaseComponentDescriptorDao extends AbstractSearchTextDao<ComponentD
161 162 .ifNotExists()
162 163 );
163 164 if (rs.wasApplied()) {
164   - return Optional.of(entity);
  165 + return Optional.of(DaoUtil.getData(entity));
165 166 } else {
166 167 return Optional.empty();
167 168 }
... ...
... ... @@ -32,16 +32,12 @@ import org.thingsboard.server.common.data.plugin.ComponentScope;
32 32 import org.thingsboard.server.common.data.plugin.ComponentType;
33 33 import org.thingsboard.server.dao.exception.DataValidationException;
34 34 import org.thingsboard.server.dao.exception.IncorrectParameterException;
35   -import org.thingsboard.server.dao.model.ComponentDescriptorEntity;
36 35 import org.thingsboard.server.dao.service.DataValidator;
37 36 import org.thingsboard.server.dao.service.Validator;
38 37
39 38 import java.util.List;
40 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 42 * @author Andrew Shvayka
47 43 */
... ... @@ -55,39 +51,37 @@ public class BaseComponentDescriptorService implements ComponentDescriptorServic
55 51 @Override
56 52 public ComponentDescriptor saveComponent(ComponentDescriptor component) {
57 53 componentValidator.validate(component);
58   - Optional<ComponentDescriptorEntity> result = componentDescriptorDao.save(component);
  54 + Optional<ComponentDescriptor> result = componentDescriptorDao.saveIfNotExist(component);
59 55 if (result.isPresent()) {
60   - return getData(result.get());
  56 + return result.get();
61 57 } else {
62   - return getData(componentDescriptorDao.findByClazz(component.getClazz()));
  58 + return componentDescriptorDao.findByClazz(component.getClazz());
63 59 }
64 60 }
65 61
66 62 @Override
67 63 public ComponentDescriptor findById(ComponentDescriptorId componentId) {
68 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 68 @Override
73 69 public ComponentDescriptor findByClazz(String clazz) {
74 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 74 @Override
79 75 public TextPageData<ComponentDescriptor> findByTypeAndPageLink(ComponentType type, TextPageLink pageLink) {
80 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 78 return new TextPageData<>(components, pageLink);
84 79 }
85 80
86 81 @Override
87 82 public TextPageData<ComponentDescriptor> findByScopeAndTypeAndPageLink(ComponentScope scope, ComponentType type, TextPageLink pageLink) {
88 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 85 return new TextPageData<>(components, pageLink);
92 86 }
93 87
... ...
... ... @@ -21,7 +21,6 @@ import org.thingsboard.server.common.data.plugin.ComponentDescriptor;
21 21 import org.thingsboard.server.common.data.plugin.ComponentScope;
22 22 import org.thingsboard.server.common.data.plugin.ComponentType;
23 23 import org.thingsboard.server.dao.Dao;
24   -import org.thingsboard.server.dao.model.ComponentDescriptorEntity;
25 24
26 25 import java.util.List;
27 26 import java.util.Optional;
... ... @@ -29,17 +28,17 @@ import java.util.Optional;
29 28 /**
30 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 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 15 */
16 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 18 import lombok.extern.slf4j.Slf4j;
25 19 import org.springframework.stereotype.Component;
26 20 import org.thingsboard.server.common.data.Customer;
27 21 import org.thingsboard.server.common.data.page.TextPageLink;
28   -import org.thingsboard.server.dao.AbstractSearchTextDao;
  22 +import org.thingsboard.server.dao.CassandraAbstractSearchTextDao;
  23 +import org.thingsboard.server.dao.DaoUtil;
29 24 import org.thingsboard.server.dao.model.CustomerEntity;
30   -import org.slf4j.Logger;
31   -import org.slf4j.LoggerFactory;
32 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 32 @Component
34 33 @Slf4j
35   -public class CustomerDaoImpl extends AbstractSearchTextDao<CustomerEntity> implements CustomerDao {
  34 +public class CassandraCustomerDao extends CassandraAbstractSearchTextDao<CustomerEntity, Customer> implements CustomerDao {
36 35
37 36 @Override
38 37 protected Class<CustomerEntity> getColumnFamilyClass() {
... ... @@ -43,21 +42,15 @@ public class CustomerDaoImpl extends AbstractSearchTextDao<CustomerEntity> imple
43 42 protected String getColumnFamilyName() {
44 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 46 @Override
54   - public List<CustomerEntity> findCustomersByTenantId(UUID tenantId, TextPageLink pageLink) {
  47 + public List<Customer> findCustomersByTenantId(UUID tenantId, TextPageLink pageLink) {
55 48 log.debug("Try to find customers by tenantId [{}] and pageLink [{}]", tenantId, pageLink);
56 49 List<CustomerEntity> customerEntities = findPageWithTextSearch(ModelConstants.CUSTOMER_BY_TENANT_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME,
57 50 Arrays.asList(eq(ModelConstants.CUSTOMER_TENANT_ID_PROPERTY, tenantId)),
58 51 pageLink);
59 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 15 */
16 16 package org.thingsboard.server.dao.customer;
17 17
18   -import java.util.List;
19   -import java.util.UUID;
20   -
21 18 import org.thingsboard.server.common.data.Customer;
22 19 import org.thingsboard.server.common.data.page.TextPageLink;
23 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 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 31 * Save or update customer object
... ... @@ -34,7 +33,7 @@ public interface CustomerDao extends Dao<CustomerEntity> {
34 33 * @param customer the customer object
35 34 * @return saved customer object
36 35 */
37   - CustomerEntity save(Customer customer);
  36 + Customer save(Customer customer);
38 37
39 38 /**
40 39 * Find customers by tenant id and page link.
... ... @@ -43,6 +42,6 @@ public interface CustomerDao extends Dao<CustomerEntity> {
43 42 * @param pageLink the page link
44 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 23
24 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 15 */
16 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 18 import lombok.extern.slf4j.Slf4j;
24 19 import org.apache.commons.lang3.StringUtils;
  20 +import org.springframework.beans.factory.annotation.Autowired;
  21 +import org.springframework.stereotype.Service;
25 22 import org.thingsboard.server.common.data.Customer;
  23 +import org.thingsboard.server.common.data.Tenant;
26 24 import org.thingsboard.server.common.data.id.CustomerId;
27 25 import org.thingsboard.server.common.data.id.TenantId;
28 26 import org.thingsboard.server.common.data.page.TextPageData;
... ... @@ -31,17 +29,13 @@ import org.thingsboard.server.dao.dashboard.DashboardService;
31 29 import org.thingsboard.server.dao.device.DeviceService;
32 30 import org.thingsboard.server.dao.exception.DataValidationException;
33 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 32 import org.thingsboard.server.dao.service.DataValidator;
37 33 import org.thingsboard.server.dao.service.PaginatedRemover;
  34 +import org.thingsboard.server.dao.service.Validator;
38 35 import org.thingsboard.server.dao.tenant.TenantDao;
39 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 39 @Service
46 40 @Slf4j
47 41 public class CustomerServiceImpl implements CustomerService {
... ... @@ -65,16 +59,14 @@ public class CustomerServiceImpl implements CustomerService {
65 59 public Customer findCustomerById(CustomerId customerId) {
66 60 log.trace("Executing findCustomerById [{}]", customerId);
67 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 65 @Override
73 66 public Customer saveCustomer(Customer customer) {
74 67 log.trace("Executing saveCustomer [{}]", customer);
75 68 customerValidator.validate(customer);
76   - CustomerEntity customerEntity = customerDao.save(customer);
77   - return getData(customerEntity);
  69 + return customerDao.save(customer);
78 70 }
79 71
80 72 @Override
... ... @@ -96,8 +88,7 @@ public class CustomerServiceImpl implements CustomerService {
96 88 log.trace("Executing findCustomersByTenantId, tenantId [{}], pageLink [{}]", tenantId, pageLink);
97 89 Validator.validateId(tenantId, "Incorrect tenantId " + tenantId);
98 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 92 return new TextPageData<Customer>(customers, pageLink);
102 93 }
103 94
... ... @@ -121,7 +112,7 @@ public class CustomerServiceImpl implements CustomerService {
121 112 if (customer.getTenantId() == null) {
122 113 throw new DataValidationException("Customer should be assigned to tenant!");
123 114 } else {
124   - TenantEntity tenant = tenantDao.findById(customer.getTenantId().getId());
  115 + Tenant tenant = tenantDao.findById(customer.getTenantId().getId());
125 116 if (tenant == null) {
126 117 throw new DataValidationException("Customer is referencing to non-existent tenant!");
127 118 }
... ... @@ -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 126 @Override
136   - protected List<CustomerEntity> findEntities(TenantId id, TextPageLink pageLink) {
  127 + protected List<Customer> findEntities(TenantId id, TextPageLink pageLink) {
137 128 return customerDao.findCustomersByTenantId(id.getId(), pageLink);
138 129 }
139 130
140 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 15 */
16 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 18 import org.springframework.stereotype.Component;
32 19 import org.thingsboard.server.common.data.Dashboard;
33   -import org.thingsboard.server.common.data.page.TextPageLink;
34   -import org.thingsboard.server.dao.AbstractSearchTextDao;
  20 +import org.thingsboard.server.dao.CassandraAbstractSearchTextDao;
35 21 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;
  22 +
  23 +import static org.thingsboard.server.dao.model.ModelConstants.DASHBOARD_COLUMN_FAMILY_NAME;
39 24
40 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 28 @Override
45 29 protected Class<DashboardEntity> getColumnFamilyClass() {
... ... @@ -50,11 +34,4 @@ public class DashboardDaoImpl extends AbstractSearchTextDao<DashboardEntity> imp
50 34 protected String getColumnFamilyName() {
51 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,8 +17,10 @@ package org.thingsboard.server.dao.dashboard;
17 17
18 18 import lombok.extern.slf4j.Slf4j;
19 19 import org.springframework.stereotype.Component;
  20 +import org.thingsboard.server.common.data.DashboardInfo;
20 21 import org.thingsboard.server.common.data.page.TextPageLink;
21   -import org.thingsboard.server.dao.AbstractSearchTextDao;
  22 +import org.thingsboard.server.dao.CassandraAbstractSearchTextDao;
  23 +import org.thingsboard.server.dao.DaoUtil;
22 24 import org.thingsboard.server.dao.model.DashboardInfoEntity;
23 25
24 26 import java.util.Arrays;
... ... @@ -31,7 +33,7 @@ import static org.thingsboard.server.dao.model.ModelConstants.*;
31 33
32 34 @Component
33 35 @Slf4j
34   -public class DashboardInfoDaoImpl extends AbstractSearchTextDao<DashboardInfoEntity> implements DashboardInfoDao {
  36 +public class CassandraDashboardInfoDao extends CassandraAbstractSearchTextDao<DashboardInfoEntity, DashboardInfo> implements DashboardInfoDao {
35 37
36 38 @Override
37 39 protected Class<DashboardInfoEntity> getColumnFamilyClass() {
... ... @@ -44,18 +46,18 @@ public class DashboardInfoDaoImpl extends AbstractSearchTextDao<DashboardInfoEnt
44 46 }
45 47
46 48 @Override
47   - public List<DashboardInfoEntity> findDashboardsByTenantId(UUID tenantId, TextPageLink pageLink) {
  49 + public List<DashboardInfo> findDashboardsByTenantId(UUID tenantId, TextPageLink pageLink) {
48 50 log.debug("Try to find dashboards by tenantId [{}] and pageLink [{}]", tenantId, pageLink);
49 51 List<DashboardInfoEntity> dashboardEntities = findPageWithTextSearch(DASHBOARD_BY_TENANT_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME,
50 52 Collections.singletonList(eq(DASHBOARD_TENANT_ID_PROPERTY, tenantId)),
51 53 pageLink);
52 54
53 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 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 61 log.debug("Try to find dashboards by tenantId [{}], customerId[{}] and pageLink [{}]", tenantId, customerId, pageLink);
60 62 List<DashboardInfoEntity> dashboardEntities = findPageWithTextSearch(DASHBOARD_BY_CUSTOMER_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME,
61 63 Arrays.asList(eq(DASHBOARD_CUSTOMER_ID_PROPERTY, customerId),
... ... @@ -63,7 +65,7 @@ public class DashboardInfoDaoImpl extends AbstractSearchTextDao<DashboardInfoEnt
63 65 pageLink);
64 66
65 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 15 */
16 16 package org.thingsboard.server.dao.dashboard;
17 17
18   -import java.util.List;
19   -import java.util.UUID;
20   -
21 18 import org.thingsboard.server.common.data.Dashboard;
22   -import org.thingsboard.server.common.data.page.TextPageLink;
23 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 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 27 * Save or update dashboard object
... ... @@ -37,6 +29,6 @@ public interface DashboardDao extends Dao<DashboardEntity> {
37 29 * @param dashboard the dashboard object
38 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 15 */
16 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 19 import org.thingsboard.server.common.data.page.TextPageLink;
23 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 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 31 * Find dashboards by tenantId and page link.
... ... @@ -38,7 +34,7 @@ public interface DashboardInfoDao extends Dao<DashboardInfoEntity> {
38 34 * @param pageLink the page link
39 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 40 * Find dashboards by tenantId, customerId and page link.
... ... @@ -48,6 +44,6 @@ public interface DashboardInfoDao extends Dao<DashboardInfoEntity> {
48 44 * @param pageLink the page link
49 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 25
26 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 */
16 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 18 import lombok.extern.slf4j.Slf4j;
24 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 23 import org.thingsboard.server.common.data.Dashboard;
26 24 import org.thingsboard.server.common.data.DashboardInfo;
  25 +import org.thingsboard.server.common.data.Tenant;
27 26 import org.thingsboard.server.common.data.id.CustomerId;
28 27 import org.thingsboard.server.common.data.id.DashboardId;
29 28 import org.thingsboard.server.common.data.id.TenantId;
... ... @@ -31,15 +30,13 @@ import org.thingsboard.server.common.data.page.TextPageData;
31 30 import org.thingsboard.server.common.data.page.TextPageLink;
32 31 import org.thingsboard.server.dao.customer.CustomerDao;
33 32 import org.thingsboard.server.dao.exception.DataValidationException;
34   -import org.thingsboard.server.dao.model.*;
  33 +import org.thingsboard.server.dao.model.ModelConstants;
35 34 import org.thingsboard.server.dao.service.DataValidator;
36 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 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 41 @Service
45 42 @Slf4j
... ... @@ -61,16 +58,14 @@ public class DashboardServiceImpl implements DashboardService {
61 58 public Dashboard findDashboardById(DashboardId dashboardId) {
62 59 log.trace("Executing findDashboardById [{}]", dashboardId);
63 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 64 @Override
69 65 public Dashboard saveDashboard(Dashboard dashboard) {
70 66 log.trace("Executing saveDashboard [{}]", dashboard);
71 67 dashboardValidator.validate(dashboard);
72   - DashboardEntity dashboardEntity = dashboardDao.save(dashboard);
73   - return getData(dashboardEntity);
  68 + return dashboardDao.save(dashboard);
74 69 }
75 70
76 71 @Override
... ... @@ -99,9 +94,8 @@ public class DashboardServiceImpl implements DashboardService {
99 94 log.trace("Executing findDashboardsByTenantId, tenantId [{}], pageLink [{}]", tenantId, pageLink);
100 95 Validator.validateId(tenantId, "Incorrect tenantId " + tenantId);
101 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 101 @Override
... ... @@ -117,9 +111,8 @@ public class DashboardServiceImpl implements DashboardService {
117 111 Validator.validateId(tenantId, "Incorrect tenantId " + tenantId);
118 112 Validator.validateId(customerId, "Incorrect customerId " + customerId);
119 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 118 @Override
... ... @@ -140,7 +133,7 @@ public class DashboardServiceImpl implements DashboardService {
140 133 if (dashboard.getTenantId() == null) {
141 134 throw new DataValidationException("Dashboard should be assigned to tenant!");
142 135 } else {
143   - TenantEntity tenant = tenantDao.findById(dashboard.getTenantId().getId());
  136 + Tenant tenant = tenantDao.findById(dashboard.getTenantId().getId());
144 137 if (tenant == null) {
145 138 throw new DataValidationException("Dashboard is referencing to non-existent tenant!");
146 139 }
... ... @@ -148,32 +141,32 @@ public class DashboardServiceImpl implements DashboardService {
148 141 if (dashboard.getCustomerId() == null) {
149 142 dashboard.setCustomerId(new CustomerId(ModelConstants.NULL_UUID));
150 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 145 if (customer == null) {
153 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 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 158 @Override
166   - protected List<DashboardInfoEntity> findEntities(TenantId id, TextPageLink pageLink) {
  159 + protected List<DashboardInfo> findEntities(TenantId id, TextPageLink pageLink) {
167 160 return dashboardInfoDao.findDashboardsByTenantId(id.getId(), pageLink);
168 161 }
169 162
170 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 171 private TenantId tenantId;
179 172
... ... @@ -182,13 +175,13 @@ public class DashboardServiceImpl implements DashboardService {
182 175 }
183 176
184 177 @Override
185   - protected List<DashboardInfoEntity> findEntities(CustomerId id, TextPageLink pageLink) {
  178 + protected List<DashboardInfo> findEntities(CustomerId id, TextPageLink pageLink) {
186 179 return dashboardInfoDao.findDashboardsByTenantIdAndCustomerId(tenantId.getId(), id.getId(), pageLink);
187 180 }
188 181
189 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 15 */
16 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 19 import lombok.extern.slf4j.Slf4j;
24 20 import org.springframework.stereotype.Component;
25 21 import org.thingsboard.server.common.data.security.DeviceCredentials;
26   -import org.thingsboard.server.dao.AbstractModelDao;
  22 +import org.thingsboard.server.dao.CassandraAbstractModelDao;
  23 +import org.thingsboard.server.dao.DaoUtil;
27 24 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;
33 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 32 @Component
36 33 @Slf4j
37   -public class DeviceCredentialsDaoImpl extends AbstractModelDao<DeviceCredentialsEntity> implements DeviceCredentialsDao {
  34 +public class CassandraDeviceCredentialsDao extends CassandraAbstractModelDao<DeviceCredentialsEntity, DeviceCredentials> implements DeviceCredentialsDao {
38 35
39 36 @Override
40 37 protected Class<DeviceCredentialsEntity> getColumnFamilyClass() {
... ... @@ -47,31 +44,24 @@ public class DeviceCredentialsDaoImpl extends AbstractModelDao<DeviceCredentials
47 44 }
48 45
49 46 @Override
50   - public DeviceCredentialsEntity findByDeviceId(UUID deviceId) {
  47 + public DeviceCredentials findByDeviceId(UUID deviceId) {
51 48 log.debug("Try to find device credentials by deviceId [{}] ", deviceId);
52 49 Where query = select().from(ModelConstants.DEVICE_CREDENTIALS_BY_DEVICE_COLUMN_FAMILY_NAME)
53 50 .where(eq(ModelConstants.DEVICE_CREDENTIALS_DEVICE_ID_PROPERTY, deviceId));
54 51 log.trace("Execute query {}", query);
55 52 DeviceCredentialsEntity deviceCredentialsEntity = findOneByStatement(query);
56 53 log.trace("Found device credentials [{}] by deviceId [{}]", deviceCredentialsEntity, deviceId);
57   - return deviceCredentialsEntity;
  54 + return DaoUtil.getData(deviceCredentialsEntity);
58 55 }
59 56
60 57 @Override
61   - public DeviceCredentialsEntity findByCredentialsId(String credentialsId) {
  58 + public DeviceCredentials findByCredentialsId(String credentialsId) {
62 59 log.debug("Try to find device credentials by credentialsId [{}] ", credentialsId);
63 60 Where query = select().from(ModelConstants.DEVICE_CREDENTIALS_BY_CREDENTIALS_ID_COLUMN_FAMILY_NAME)
64 61 .where(eq(ModelConstants.DEVICE_CREDENTIALS_CREDENTIALS_ID_PROPERTY, credentialsId));
65 62 log.trace("Execute query {}", query);
66 63 DeviceCredentialsEntity deviceCredentialsEntity = findOneByStatement(query);
67 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 15 */
16 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 18 import com.datastax.driver.core.querybuilder.Select;
26 19 import com.google.common.util.concurrent.ListenableFuture;
27 20 import lombok.extern.slf4j.Slf4j;
28 21 import org.springframework.stereotype.Component;
29 22 import org.thingsboard.server.common.data.Device;
30 23 import org.thingsboard.server.common.data.page.TextPageLink;
31   -import org.thingsboard.server.dao.AbstractSearchTextDao;
  24 +import org.thingsboard.server.dao.CassandraAbstractSearchTextDao;
  25 +import org.thingsboard.server.dao.DaoUtil;
32 26 import org.thingsboard.server.dao.model.DeviceEntity;
33   -import org.slf4j.Logger;
34   -import org.slf4j.LoggerFactory;
  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 33 @Component
37 34 @Slf4j
38   -public class DeviceDaoImpl extends AbstractSearchTextDao<DeviceEntity> implements DeviceDao {
  35 +public class CassandraDeviceDao extends CassandraAbstractSearchTextDao<DeviceEntity, Device> implements DeviceDao {
39 36
40 37 @Override
41 38 protected Class<DeviceEntity> getColumnFamilyClass() {
... ... @@ -48,23 +45,17 @@ public class DeviceDaoImpl extends AbstractSearchTextDao<DeviceEntity> implement
48 45 }
49 46
50 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 49 log.debug("Try to find devices by tenantId [{}] and pageLink [{}]", tenantId, pageLink);
59 50 List<DeviceEntity> deviceEntities = findPageWithTextSearch(DEVICE_BY_TENANT_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME,
60 51 Collections.singletonList(eq(DEVICE_TENANT_ID_PROPERTY, tenantId)), pageLink);
61 52
62 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 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 59 log.debug("Try to find devices by tenantId [{}] and device Ids [{}]", tenantId, deviceIds);
69 60 Select select = select().from(getColumnFamilyName());
70 61 Select.Where query = select.where();
... ... @@ -74,7 +65,7 @@ public class DeviceDaoImpl extends AbstractSearchTextDao<DeviceEntity> implement
74 65 }
75 66
76 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 69 log.debug("Try to find devices by tenantId [{}], customerId[{}] and pageLink [{}]", tenantId, customerId, pageLink);
79 70 List<DeviceEntity> deviceEntities = findPageWithTextSearch(DEVICE_BY_CUSTOMER_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME,
80 71 Arrays.asList(eq(DEVICE_CUSTOMER_ID_PROPERTY, customerId),
... ... @@ -82,11 +73,11 @@ public class DeviceDaoImpl extends AbstractSearchTextDao<DeviceEntity> implement
82 73 pageLink);
83 74
84 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 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 81 log.debug("Try to find devices by tenantId [{}], customerId [{}] and device Ids [{}]", tenantId, customerId, deviceIds);
91 82 Select select = select().from(getColumnFamilyName());
92 83 Select.Where query = select.where();
... ... @@ -97,12 +88,12 @@ public class DeviceDaoImpl extends AbstractSearchTextDao<DeviceEntity> implement
97 88 }
98 89
99 90 @Override
100   - public Optional<DeviceEntity> findDevicesByTenantIdAndName(UUID tenantId, String deviceName) {
  91 + public Optional<Device> findDevicesByTenantIdAndName(UUID tenantId, String deviceName) {
101 92 Select select = select().from(DEVICE_BY_TENANT_AND_NAME_VIEW_NAME);
102 93 Select.Where query = select.where();
103 94 query.and(eq(DEVICE_TENANT_ID_PROPERTY, tenantId));
104 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 15 */
16 16 package org.thingsboard.server.dao.device;
17 17
18   -import java.util.UUID;
19   -
20 18 import org.thingsboard.server.common.data.security.DeviceCredentials;
21 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 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 29 * Save or update device credentials object
... ... @@ -34,7 +31,7 @@ public interface DeviceCredentialsDao extends Dao<DeviceCredentialsEntity> {
34 31 * @param deviceCredentials the device credentials object
35 32 * @return saved device credentials object
36 33 */
37   - DeviceCredentialsEntity save(DeviceCredentials deviceCredentials);
  34 + DeviceCredentials save(DeviceCredentials deviceCredentials);
38 35
39 36 /**
40 37 * Find device credentials by device id.
... ... @@ -42,7 +39,7 @@ public interface DeviceCredentialsDao extends Dao<DeviceCredentialsEntity> {
42 39 * @param deviceId the device id
43 40 * @return the device credentials object
44 41 */
45   - DeviceCredentialsEntity findByDeviceId(UUID deviceId);
  42 + DeviceCredentials findByDeviceId(UUID deviceId);
46 43
47 44 /**
48 45 * Find device credentials by credentials id.
... ... @@ -50,6 +47,6 @@ public interface DeviceCredentialsDao extends Dao<DeviceCredentialsEntity> {
50 47 * @param credentialsId the credentials id
51 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 26 import org.thingsboard.server.common.data.security.DeviceCredentialsType;
27 27 import org.thingsboard.server.dao.EncryptionUtil;
28 28 import org.thingsboard.server.dao.exception.DataValidationException;
29   -import org.thingsboard.server.dao.model.DeviceCredentialsEntity;
30 29 import org.thingsboard.server.dao.service.DataValidator;
31 30
32   -import static org.thingsboard.server.dao.DaoUtil.getData;
33 31 import static org.thingsboard.server.dao.service.Validator.validateId;
34 32 import static org.thingsboard.server.dao.service.Validator.validateString;
35 33
... ... @@ -47,16 +45,14 @@ public class DeviceCredentialsServiceImpl implements DeviceCredentialsService {
47 45 public DeviceCredentials findDeviceCredentialsByDeviceId(DeviceId deviceId) {
48 46 log.trace("Executing findDeviceCredentialsByDeviceId [{}]", deviceId);
49 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 51 @Override
55 52 public DeviceCredentials findDeviceCredentialsByCredentialsId(String credentialsId) {
56 53 log.trace("Executing findDeviceCredentialsByCredentialsId [{}]", credentialsId);
57 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 58 @Override
... ... @@ -75,7 +71,7 @@ public class DeviceCredentialsServiceImpl implements DeviceCredentialsService {
75 71 }
76 72 log.trace("Executing updateDeviceCredentials [{}]", deviceCredentials);
77 73 credentialsValidator.validate(deviceCredentials);
78   - return getData(deviceCredentialsDao.save(deviceCredentials));
  74 + return deviceCredentialsDao.save(deviceCredentials);
79 75 }
80 76
81 77 private void formatCertData(DeviceCredentials deviceCredentials) {
... ... @@ -96,7 +92,7 @@ public class DeviceCredentialsServiceImpl implements DeviceCredentialsService {
96 92
97 93 @Override
98 94 protected void validateCreate(DeviceCredentials deviceCredentials) {
99   - DeviceCredentialsEntity existingCredentialsEntity = deviceCredentialsDao.findByCredentialsId(deviceCredentials.getCredentialsId());
  95 + DeviceCredentials existingCredentialsEntity = deviceCredentialsDao.findByCredentialsId(deviceCredentials.getCredentialsId());
100 96 if (existingCredentialsEntity != null) {
101 97 throw new DataValidationException("Create of existent device credentials!");
102 98 }
... ... @@ -104,12 +100,12 @@ public class DeviceCredentialsServiceImpl implements DeviceCredentialsService {
104 100
105 101 @Override
106 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 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 109 throw new DataValidationException("Specified credentials are already registered!");
114 110 }
115 111 }
... ...
... ... @@ -15,21 +15,20 @@
15 15 */
16 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 18 import com.google.common.util.concurrent.ListenableFuture;
23 19 import org.thingsboard.server.common.data.Device;
24 20 import org.thingsboard.server.common.data.page.TextPageLink;
25 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 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 34 * Save or update device object
... ... @@ -37,7 +36,7 @@ public interface DeviceDao extends Dao<DeviceEntity> {
37 36 * @param device the device object
38 37 * @return saved device object
39 38 */
40   - DeviceEntity save(Device device);
  39 + Device save(Device device);
41 40
42 41 /**
43 42 * Find devices by tenantId and page link.
... ... @@ -46,7 +45,7 @@ public interface DeviceDao extends Dao<DeviceEntity> {
46 45 * @param pageLink the page link
47 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 51 * Find devices by tenantId and devices Ids.
... ... @@ -55,7 +54,7 @@ public interface DeviceDao extends Dao<DeviceEntity> {
55 54 * @param deviceIds the device Ids
56 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 60 * Find devices by tenantId, customerId and page link.
... ... @@ -65,7 +64,7 @@ public interface DeviceDao extends Dao<DeviceEntity> {
65 64 * @param pageLink the page link
66 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 70 * Find devices by tenantId, customerId and devices Ids.
... ... @@ -75,7 +74,7 @@ public interface DeviceDao extends Dao<DeviceEntity> {
75 74 * @param deviceIds the device Ids
76 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 80 * Find devices by tenantId and device name.
... ... @@ -84,5 +83,5 @@ public interface DeviceDao extends Dao<DeviceEntity> {
84 83 * @param name the device name
85 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 }
... ...
... ... @@ -43,13 +43,9 @@ import org.thingsboard.server.dao.tenant.TenantDao;
43 43 import java.util.List;
44 44 import java.util.Optional;
45 45
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;
  46 +import static org.thingsboard.server.dao.DaoUtil.*;
49 47 import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID;
50   -import static org.thingsboard.server.dao.service.Validator.validateId;
51   -import static org.thingsboard.server.dao.service.Validator.validateIds;
52   -import static org.thingsboard.server.dao.service.Validator.validatePageLink;
  48 +import static org.thingsboard.server.dao.service.Validator.*;
53 49
54 50 @Service
55 51 @Slf4j
... ... @@ -71,15 +67,14 @@ public class DeviceServiceImpl implements DeviceService {
71 67 public Device findDeviceById(DeviceId deviceId) {
72 68 log.trace("Executing findDeviceById [{}]", deviceId);
73 69 validateId(deviceId, "Incorrect deviceId " + deviceId);
74   - DeviceEntity deviceEntity = deviceDao.findById(deviceId.getId());
75   - return getData(deviceEntity);
  70 + return deviceDao.findById(deviceId.getId());
76 71 }
77 72
78 73 @Override
79 74 public ListenableFuture<Device> findDeviceByIdAsync(DeviceId deviceId) {
80 75 log.trace("Executing findDeviceById [{}]", deviceId);
81 76 validateId(deviceId, "Incorrect deviceId " + deviceId);
82   - ListenableFuture<DeviceEntity> deviceEntity = deviceDao.findByIdAsync(deviceId.getId());
  77 + ListenableFuture<Device> deviceEntity = deviceDao.findByIdAsync(deviceId.getId());
83 78 return Futures.transform(deviceEntity, (Function<? super DeviceEntity, ? extends Device>) input -> getData(input));
84 79 }
85 80
... ... @@ -87,9 +82,9 @@ public class DeviceServiceImpl implements DeviceService {
87 82 public Optional<Device> findDeviceByTenantIdAndName(TenantId tenantId, String name) {
88 83 log.trace("Executing findDeviceByTenantIdAndName [{}][{}]", tenantId, name);
89 84 validateId(tenantId, "Incorrect tenantId " + tenantId);
90   - Optional<DeviceEntity> deviceEntityOpt = deviceDao.findDevicesByTenantIdAndName(tenantId.getId(), name);
  85 + Optional<Device> deviceEntityOpt = deviceDao.findDevicesByTenantIdAndName(tenantId.getId(), name);
91 86 if (deviceEntityOpt.isPresent()) {
92   - return Optional.of(getData(deviceEntityOpt.get()));
  87 + return Optional.of(deviceEntityOpt.get());
93 88 } else {
94 89 return Optional.empty();
95 90 }
... ... @@ -99,15 +94,15 @@ public class DeviceServiceImpl implements DeviceService {
99 94 public Device saveDevice(Device device) {
100 95 log.trace("Executing saveDevice [{}]", device);
101 96 deviceValidator.validate(device);
102   - DeviceEntity deviceEntity = deviceDao.save(device);
  97 + Device savedDevice = deviceDao.save(device);
103 98 if (device.getId() == null) {
104 99 DeviceCredentials deviceCredentials = new DeviceCredentials();
105   - deviceCredentials.setDeviceId(new DeviceId(deviceEntity.getId()));
  100 + deviceCredentials.setDeviceId(new DeviceId(savedDevice.getUuidId()));
106 101 deviceCredentials.setCredentialsType(DeviceCredentialsType.ACCESS_TOKEN);
107 102 deviceCredentials.setCredentialsId(RandomStringUtils.randomAlphanumeric(20));
108 103 deviceCredentialsService.createDeviceCredentials(deviceCredentials);
109 104 }
110   - return getData(deviceEntity);
  105 + return savedDevice;
111 106 }
112 107
113 108 @Override
... ... @@ -140,8 +135,7 @@ public class DeviceServiceImpl implements DeviceService {
140 135 log.trace("Executing findDevicesByTenantId, tenantId [{}], pageLink [{}]", tenantId, pageLink);
141 136 validateId(tenantId, "Incorrect tenantId " + tenantId);
142 137 validatePageLink(pageLink, "Incorrect page link " + pageLink);
143   - List<DeviceEntity> deviceEntities = deviceDao.findDevicesByTenantId(tenantId.getId(), pageLink);
144   - List<Device> devices = convertDataList(deviceEntities);
  138 + List<Device> devices = deviceDao.findDevicesByTenantId(tenantId.getId(), pageLink);
145 139 return new TextPageData<Device>(devices, pageLink);
146 140 }
147 141
... ... @@ -150,7 +144,7 @@ public class DeviceServiceImpl implements DeviceService {
150 144 log.trace("Executing findDevicesByTenantIdAndIdsAsync, tenantId [{}], deviceIds [{}]", tenantId, deviceIds);
151 145 validateId(tenantId, "Incorrect tenantId " + tenantId);
152 146 validateIds(deviceIds, "Incorrect deviceIds " + deviceIds);
153   - ListenableFuture<List<DeviceEntity>> deviceEntities = deviceDao.findDevicesByTenantIdAndIdsAsync(tenantId.getId(), toUUIDs(deviceIds));
  147 + ListenableFuture<List<Device>> devices = deviceDao.findDevicesByTenantIdAndIdsAsync(tenantId.getId(), toUUIDs(deviceIds));
154 148 return Futures.transform(deviceEntities, (Function<List<DeviceEntity>, List<Device>>) input -> convertDataList(input));
155 149 }
156 150
... ... @@ -168,8 +162,7 @@ public class DeviceServiceImpl implements DeviceService {
168 162 validateId(tenantId, "Incorrect tenantId " + tenantId);
169 163 validateId(customerId, "Incorrect customerId " + customerId);
170 164 validatePageLink(pageLink, "Incorrect page link " + pageLink);
171   - List<DeviceEntity> deviceEntities = deviceDao.findDevicesByTenantIdAndCustomerId(tenantId.getId(), customerId.getId(), pageLink);
172   - List<Device> devices = convertDataList(deviceEntities);
  165 + List<Device> devices = deviceDao.findDevicesByTenantIdAndCustomerId(tenantId.getId(), customerId.getId(), pageLink);
173 166 return new TextPageData<Device>(devices, pageLink);
174 167 }
175 168
... ...
... ... @@ -15,6 +15,7 @@
15 15 */
16 16 package org.thingsboard.server.dao.event;
17 17
  18 +// CASSANDRA ???
18 19 import com.datastax.driver.core.utils.UUIDs;
19 20 import lombok.extern.slf4j.Slf4j;
20 21 import org.apache.commons.lang3.StringUtils;
... ... @@ -27,14 +28,11 @@ import org.thingsboard.server.common.data.id.TenantId;
27 28 import org.thingsboard.server.common.data.page.TimePageData;
28 29 import org.thingsboard.server.common.data.page.TimePageLink;
29 30 import org.thingsboard.server.dao.exception.DataValidationException;
30   -import org.thingsboard.server.dao.model.EventEntity;
31 31 import org.thingsboard.server.dao.service.DataValidator;
32 32
33 33 import java.util.List;
34 34 import java.util.Optional;
35 35
36   -import static org.thingsboard.server.dao.DaoUtil.convertDataList;
37   -import static org.thingsboard.server.dao.DaoUtil.getData;
38 36 import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID;
39 37
40 38 @Service
... ... @@ -59,7 +57,7 @@ public class BaseEventService implements EventService {
59 57 if (StringUtils.isEmpty(event.getUid())) {
60 58 event.setUid(event.getId().toString());
61 59 }
62   - return getData(eventDao.save(event));
  60 + return eventDao.save(event);
63 61 }
64 62
65 63 @Override
... ... @@ -75,8 +73,8 @@ public class BaseEventService implements EventService {
75 73 if (event.getId() == null) {
76 74 event.setId(new EventId(UUIDs.timeBased()));
77 75 }
78   - Optional<EventEntity> result = eventDao.saveIfNotExists(event);
79   - return result.isPresent() ? Optional.of(getData(result.get())) : Optional.empty();
  76 + Optional<Event> result = eventDao.saveIfNotExists(event);
  77 + return result.isPresent() ? Optional.of(result.get()) : Optional.empty();
80 78 }
81 79
82 80 @Override
... ... @@ -93,22 +91,19 @@ public class BaseEventService implements EventService {
93 91 if (StringUtils.isEmpty(eventUid)) {
94 92 throw new DataValidationException("Event uid should be specified!.");
95 93 }
96   - EventEntity entity = eventDao.findEvent(tenantId.getId(), entityId, eventType, eventUid);
97   - return entity != null ? Optional.of(getData(entity)) : Optional.empty();
  94 + Event event = eventDao.findEvent(tenantId.getId(), entityId, eventType, eventUid);
  95 + return event != null ? Optional.of(event) : Optional.empty();
98 96 }
99 97
100 98 @Override
101 99 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);
  100 + List<Event> events = eventDao.findEvents(tenantId.getId(), entityId, pageLink);
104 101 return new TimePageData<Event>(events, pageLink);
105 102 }
106 103
107   -
108 104 @Override
109 105 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);
  106 + List<Event> events = eventDao.findEvents(tenantId.getId(), entityId, eventType, pageLink);
112 107 return new TimePageData<Event>(events, pageLink);
113 108 }
114 109
... ...
dao/src/main/java/org/thingsboard/server/dao/event/CassandraBaseEventDao.java renamed from dao/src/main/java/org/thingsboard/server/dao/event/BaseEventDao.java
... ... @@ -26,6 +26,7 @@ import org.thingsboard.server.common.data.Event;
26 26 import org.thingsboard.server.common.data.id.EntityId;
27 27 import org.thingsboard.server.common.data.page.TimePageLink;
28 28 import org.thingsboard.server.dao.AbstractSearchTimeDao;
  29 +import org.thingsboard.server.dao.DaoUtil;
29 30 import org.thingsboard.server.dao.model.EventEntity;
30 31 import org.thingsboard.server.dao.model.ModelConstants;
31 32
... ... @@ -36,13 +37,11 @@ import java.util.UUID;
36 37
37 38 import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;
38 39 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;
  40 +import static org.thingsboard.server.dao.model.ModelConstants.*;
42 41
43 42 @Component
44 43 @Slf4j
45   -public class BaseEventDao extends AbstractSearchTimeDao<EventEntity> implements EventDao {
  44 +public class CassandraBaseEventDao extends AbstractSearchTimeDao<EventEntity, Event> implements EventDao {
46 45
47 46 @Override
48 47 protected Class<EventEntity> getColumnFamilyClass() {
... ... @@ -55,18 +54,18 @@ public class BaseEventDao extends AbstractSearchTimeDao<EventEntity> implements
55 54 }
56 55
57 56 @Override
58   - public EventEntity save(Event event) {
  57 + public Event save(Event event) {
59 58 log.debug("Save event [{}] ", event);
60 59 return save(new EventEntity(event), false).orElse(null);
61 60 }
62 61
63 62 @Override
64   - public Optional<EventEntity> saveIfNotExists(Event event) {
  63 + public Optional<Event> saveIfNotExists(Event event) {
65 64 return save(new EventEntity(event), true);
66 65 }
67 66
68 67 @Override
69   - public EventEntity findEvent(UUID tenantId, EntityId entityId, String eventType, String eventUid) {
  68 + public Event findEvent(UUID tenantId, EntityId entityId, String eventType, String eventUid) {
70 69 log.debug("Search event entity by [{}][{}][{}][{}]", tenantId, entityId, eventType, eventUid);
71 70 Select.Where query = select().from(getColumnFamilyName()).where(
72 71 eq(ModelConstants.EVENT_TENANT_ID_PROPERTY, tenantId))
... ... @@ -81,11 +80,11 @@ public class BaseEventDao extends AbstractSearchTimeDao<EventEntity> implements
81 80 } else {
82 81 log.debug("Search result: [{}]", entity != null);
83 82 }
84   - return entity;
  83 + return DaoUtil.getData(entity);
85 84 }
86 85
87 86 @Override
88   - public List<EventEntity> findEvents(UUID tenantId, EntityId entityId, TimePageLink pageLink) {
  87 + public List<Event> findEvents(UUID tenantId, EntityId entityId, TimePageLink pageLink) {
89 88 log.trace("Try to find events by tenant [{}], entity [{}]and pageLink [{}]", tenantId, entityId, pageLink);
90 89 List<EventEntity> entities = findPageWithTimeSearch(EVENT_BY_ID_VIEW_NAME,
91 90 Arrays.asList(eq(ModelConstants.EVENT_TENANT_ID_PROPERTY, tenantId),
... ... @@ -93,11 +92,11 @@ public class BaseEventDao extends AbstractSearchTimeDao<EventEntity> implements
93 92 eq(ModelConstants.EVENT_ENTITY_ID_PROPERTY, entityId.getId())),
94 93 pageLink);
95 94 log.trace("Found events by tenant [{}], entity [{}] and pageLink [{}]", tenantId, entityId, pageLink);
96   - return entities;
  95 + return DaoUtil.convertDataList(entities);
97 96 }
98 97
99 98 @Override
100   - public List<EventEntity> findEvents(UUID tenantId, EntityId entityId, String eventType, TimePageLink pageLink) {
  99 + public List<Event> findEvents(UUID tenantId, EntityId entityId, String eventType, TimePageLink pageLink) {
101 100 log.trace("Try to find events by tenant [{}], entity [{}], type [{}] and pageLink [{}]", tenantId, entityId, eventType, pageLink);
102 101 List<EventEntity> entities = findPageWithTimeSearch(EVENT_BY_TYPE_AND_ID_VIEW_NAME,
103 102 Arrays.asList(eq(ModelConstants.EVENT_TENANT_ID_PROPERTY, tenantId),
... ... @@ -108,10 +107,10 @@ public class BaseEventDao extends AbstractSearchTimeDao<EventEntity> implements
108 107 QueryBuilder.desc(ModelConstants.EVENT_TYPE_PROPERTY),
109 108 pageLink);
110 109 log.trace("Found events by tenant [{}], entity [{}], type [{}] and pageLink [{}]", tenantId, entityId, eventType, pageLink);
111   - return entities;
  110 + return DaoUtil.convertDataList(entities);
112 111 }
113 112
114   - private Optional<EventEntity> save(EventEntity entity, boolean ifNotExists) {
  113 + private Optional<Event> save(EventEntity entity, boolean ifNotExists) {
115 114 if (entity.getId() == null) {
116 115 entity.setId(UUIDs.timeBased());
117 116 }
... ... @@ -128,7 +127,7 @@ public class BaseEventDao extends AbstractSearchTimeDao<EventEntity> implements
128 127 }
129 128 ResultSet rs = executeWrite(insert);
130 129 if (rs.wasApplied()) {
131   - return Optional.of(entity);
  130 + return Optional.of(DaoUtil.getData(entity));
132 131 } else {
133 132 return Optional.empty();
134 133 }
... ...
... ... @@ -19,7 +19,6 @@ import org.thingsboard.server.common.data.Event;
19 19 import org.thingsboard.server.common.data.id.EntityId;
20 20 import org.thingsboard.server.common.data.page.TimePageLink;
21 21 import org.thingsboard.server.dao.Dao;
22   -import org.thingsboard.server.dao.model.EventEntity;
23 22
24 23 import java.util.List;
25 24 import java.util.Optional;
... ... @@ -27,10 +26,8 @@ import java.util.UUID;
27 26
28 27 /**
29 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 33 * Save or update event object
... ... @@ -38,7 +35,7 @@ public interface EventDao extends Dao<EventEntity> {
38 35 * @param event the event object
39 36 * @return saved event object
40 37 */
41   - EventEntity save(Event event);
  38 + Event save(Event event);
42 39
43 40 /**
44 41 * Save event object if it is not yet saved
... ... @@ -46,7 +43,7 @@ public interface EventDao extends Dao<EventEntity> {
46 43 * @param event the event object
47 44 * @return saved event object
48 45 */
49   - Optional<EventEntity> saveIfNotExists(Event event);
  46 + Optional<Event> saveIfNotExists(Event event);
50 47
51 48 /**
52 49 * Find event by tenantId, entityId and eventUid.
... ... @@ -57,7 +54,7 @@ public interface EventDao extends Dao<EventEntity> {
57 54 * @param eventUid the eventUid
58 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 60 * Find events by tenantId, entityId and pageLink.
... ... @@ -67,7 +64,7 @@ public interface EventDao extends Dao<EventEntity> {
67 64 * @param pageLink the pageLink
68 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 70 * Find events by tenantId, entityId, eventType and pageLink.
... ... @@ -78,5 +75,5 @@ public interface EventDao extends Dao<EventEntity> {
78 75 * @param pageLink the pageLink
79 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 21 import org.thingsboard.server.common.data.page.TimePageData;
22 22 import org.thingsboard.server.common.data.page.TimePageLink;
23 23
24   -import java.util.List;
25 24 import java.util.Optional;
26 25
27 26 public interface EventService {
... ...
... ... @@ -17,8 +17,6 @@ package org.thingsboard.server.dao.plugin;
17 17
18 18 import lombok.extern.slf4j.Slf4j;
19 19 import org.apache.commons.lang3.StringUtils;
20   -import org.slf4j.Logger;
21   -import org.slf4j.LoggerFactory;
22 20 import org.springframework.beans.factory.annotation.Autowired;
23 21 import org.springframework.stereotype.Service;
24 22 import org.thingsboard.server.common.data.id.PluginId;
... ... @@ -29,13 +27,12 @@ import org.thingsboard.server.common.data.plugin.ComponentDescriptor;
29 27 import org.thingsboard.server.common.data.plugin.ComponentLifecycleState;
30 28 import org.thingsboard.server.common.data.plugin.ComponentType;
31 29 import org.thingsboard.server.common.data.plugin.PluginMetaData;
  30 +import org.thingsboard.server.common.data.rule.RuleMetaData;
32 31 import org.thingsboard.server.dao.component.ComponentDescriptorService;
33 32 import org.thingsboard.server.dao.exception.DataValidationException;
34 33 import org.thingsboard.server.dao.exception.DatabaseException;
35 34 import org.thingsboard.server.dao.exception.IncorrectParameterException;
36 35 import org.thingsboard.server.dao.model.ModelConstants;
37   -import org.thingsboard.server.dao.model.PluginMetaDataEntity;
38   -import org.thingsboard.server.dao.model.RuleMetaDataEntity;
39 36 import org.thingsboard.server.dao.rule.RuleDao;
40 37 import org.thingsboard.server.dao.service.DataValidator;
41 38 import org.thingsboard.server.dao.service.PaginatedRemover;
... ... @@ -46,9 +43,6 @@ import java.util.List;
46 43 import java.util.UUID;
47 44 import java.util.stream.Collectors;
48 45
49   -import static org.thingsboard.server.dao.DaoUtil.convertDataList;
50   -import static org.thingsboard.server.dao.DaoUtil.getData;
51   -
52 46 @Service
53 47 @Slf4j
54 48 public class BasePluginService implements PluginService {
... ... @@ -73,7 +67,7 @@ public class BasePluginService implements PluginService {
73 67 plugin.setTenantId(SYSTEM_TENANT);
74 68 }
75 69 if (plugin.getId() != null) {
76   - PluginMetaData oldVersion = getData(pluginDao.findById(plugin.getId()));
  70 + PluginMetaData oldVersion = pluginDao.findById(plugin.getId());
77 71 if (plugin.getState() == null) {
78 72 plugin.setState(oldVersion.getState());
79 73 } else if (plugin.getState() != oldVersion.getState()) {
... ... @@ -92,33 +86,32 @@ public class BasePluginService implements PluginService {
92 86 } else if (!ComponentType.PLUGIN.equals(descriptor.getType())) {
93 87 throw new IncorrectParameterException("Plugin class is actually " + descriptor.getType() + "!");
94 88 }
95   - PluginMetaDataEntity entity = pluginDao.findByApiToken(plugin.getApiToken());
96   - if (entity != null && (plugin.getId() == null || !entity.getId().equals(plugin.getId().getId()))) {
  89 + PluginMetaData savedPlugin = pluginDao.findByApiToken(plugin.getApiToken());
  90 + if (savedPlugin != null && (plugin.getId() == null || !savedPlugin.getId().getId().equals(plugin.getId().getId()))) {
97 91 throw new IncorrectParameterException("API token is already reserved!");
98 92 }
99 93 if (!componentDescriptorService.validate(descriptor, plugin.getConfiguration())) {
100 94 throw new IncorrectParameterException("Filters configuration is not valid!");
101 95 }
102   - return getData(pluginDao.save(plugin));
  96 + return pluginDao.save(plugin);
103 97 }
104 98
105 99 @Override
106 100 public PluginMetaData findPluginById(PluginId pluginId) {
107 101 Validator.validateId(pluginId, "Incorrect plugin id for search request.");
108   - return getData(pluginDao.findById(pluginId));
  102 + return pluginDao.findById(pluginId);
109 103 }
110 104
111 105 @Override
112 106 public PluginMetaData findPluginByApiToken(String apiToken) {
113 107 Validator.validateString(apiToken, "Incorrect plugin apiToken for search request.");
114   - return getData(pluginDao.findByApiToken(apiToken));
  108 + return pluginDao.findByApiToken(apiToken);
115 109 }
116 110
117 111 @Override
118 112 public TextPageData<PluginMetaData> findSystemPlugins(TextPageLink pageLink) {
119 113 Validator.validatePageLink(pageLink, "Incorrect PageLink object for search system plugin request.");
120   - List<PluginMetaDataEntity> pluginEntities = pluginDao.findByTenantIdAndPageLink(SYSTEM_TENANT, pageLink);
121   - List<PluginMetaData> plugins = convertDataList(pluginEntities);
  114 + List<PluginMetaData> plugins = pluginDao.findByTenantIdAndPageLink(SYSTEM_TENANT, pageLink);
122 115 return new TextPageData<>(plugins, pageLink);
123 116 }
124 117
... ... @@ -126,8 +119,7 @@ public class BasePluginService implements PluginService {
126 119 public TextPageData<PluginMetaData> findTenantPlugins(TenantId tenantId, TextPageLink pageLink) {
127 120 Validator.validateId(tenantId, "Incorrect tenant id for search plugins request.");
128 121 Validator.validatePageLink(pageLink, "Incorrect PageLink object for search plugin request.");
129   - List<PluginMetaDataEntity> pluginEntities = pluginDao.findByTenantIdAndPageLink(tenantId, pageLink);
130   - List<PluginMetaData> plugins = convertDataList(pluginEntities);
  122 + List<PluginMetaData> plugins = pluginDao.findByTenantIdAndPageLink(tenantId, pageLink);
131 123 return new TextPageData<>(plugins, pageLink);
132 124 }
133 125
... ... @@ -152,8 +144,7 @@ public class BasePluginService implements PluginService {
152 144 log.trace("Executing findAllTenantPluginsByTenantIdAndPageLink, tenantId [{}], pageLink [{}]", tenantId, pageLink);
153 145 Validator.validateId(tenantId, "Incorrect tenantId " + tenantId);
154 146 Validator.validatePageLink(pageLink, "Incorrect page link " + pageLink);
155   - List<PluginMetaDataEntity> pluginsEntities = pluginDao.findAllTenantPluginsByTenantId(tenantId.getId(), pageLink);
156   - List<PluginMetaData> plugins = convertDataList(pluginsEntities);
  147 + List<PluginMetaData> plugins = pluginDao.findAllTenantPluginsByTenantId(tenantId.getId(), pageLink);
157 148 return new TextPageData<>(plugins, pageLink);
158 149 }
159 150
... ... @@ -181,8 +172,8 @@ public class BasePluginService implements PluginService {
181 172
182 173 @Override
183 174 public void suspendPluginById(PluginId pluginId) {
184   - PluginMetaDataEntity plugin = pluginDao.findById(pluginId);
185   - List<RuleMetaDataEntity> affectedRules = ruleDao.findRulesByPlugin(plugin.getApiToken())
  175 + PluginMetaData plugin = pluginDao.findById(pluginId);
  176 + List<RuleMetaData> affectedRules = ruleDao.findRulesByPlugin(plugin.getApiToken())
186 177 .stream().filter(rule -> rule.getState() == ComponentLifecycleState.ACTIVE).collect(Collectors.toList());
187 178 if (affectedRules.isEmpty()) {
188 179 updateLifeCycleState(pluginId, ComponentLifecycleState.SUSPENDED);
... ... @@ -193,7 +184,7 @@ public class BasePluginService implements PluginService {
193 184
194 185 private void updateLifeCycleState(PluginId pluginId, ComponentLifecycleState state) {
195 186 Validator.validateId(pluginId, "Incorrect plugin id for state change request.");
196   - PluginMetaDataEntity plugin = pluginDao.findById(pluginId);
  187 + PluginMetaData plugin = pluginDao.findById(pluginId);
197 188 if (plugin != null) {
198 189 plugin.setState(state);
199 190 pluginDao.save(plugin);
... ... @@ -209,8 +200,8 @@ public class BasePluginService implements PluginService {
209 200 }
210 201
211 202 private void checkRulesAndDelete(UUID pluginId) {
212   - PluginMetaDataEntity plugin = pluginDao.findById(pluginId);
213   - List<RuleMetaDataEntity> affectedRules = ruleDao.findRulesByPlugin(plugin.getApiToken());
  203 + PluginMetaData plugin = pluginDao.findById(pluginId);
  204 + List<RuleMetaData> affectedRules = ruleDao.findRulesByPlugin(plugin.getApiToken());
214 205 if (affectedRules.isEmpty()) {
215 206 pluginDao.deleteById(pluginId);
216 207 } else {
... ... @@ -244,17 +235,17 @@ public class BasePluginService implements PluginService {
244 235 }
245 236 };
246 237
247   - private PaginatedRemover<TenantId, PluginMetaDataEntity> tenantPluginRemover =
248   - new PaginatedRemover<TenantId, PluginMetaDataEntity>() {
  238 + private PaginatedRemover<TenantId, PluginMetaData> tenantPluginRemover =
  239 + new PaginatedRemover<TenantId, PluginMetaData>() {
249 240
250 241 @Override
251   - protected List<PluginMetaDataEntity> findEntities(TenantId id, TextPageLink pageLink) {
  242 + protected List<PluginMetaData> findEntities(TenantId id, TextPageLink pageLink) {
252 243 return pluginDao.findByTenantIdAndPageLink(id, pageLink);
253 244 }
254 245
255 246 @Override
256   - protected void removeEntity(PluginMetaDataEntity entity) {
257   - checkRulesAndDelete(entity.getId());
  247 + protected void removeEntity(PluginMetaData entity) {
  248 + checkRulesAndDelete(entity.getUuidId());
258 249 }
259 250 };
260 251 }
... ...
dao/src/main/java/org/thingsboard/server/dao/plugin/CassandraBasePluginDao.java renamed from dao/src/main/java/org/thingsboard/server/dao/plugin/BasePluginDao.java
... ... @@ -15,17 +15,15 @@
15 15 */
16 16 package org.thingsboard.server.dao.plugin;
17 17
18   -import com.datastax.driver.core.ResultSet;
19 18 import com.datastax.driver.core.querybuilder.Select;
20 19 import lombok.extern.slf4j.Slf4j;
21   -import org.slf4j.Logger;
22   -import org.slf4j.LoggerFactory;
23 20 import org.springframework.stereotype.Component;
24 21 import org.thingsboard.server.common.data.id.PluginId;
25 22 import org.thingsboard.server.common.data.id.TenantId;
26 23 import org.thingsboard.server.common.data.page.TextPageLink;
27 24 import org.thingsboard.server.common.data.plugin.PluginMetaData;
28   -import org.thingsboard.server.dao.AbstractSearchTextDao;
  25 +import org.thingsboard.server.dao.CassandraAbstractSearchTextDao;
  26 +import org.thingsboard.server.dao.DaoUtil;
29 27 import org.thingsboard.server.dao.model.ModelConstants;
30 28 import org.thingsboard.server.dao.model.PluginMetaDataEntity;
31 29
... ... @@ -38,7 +36,7 @@ import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID;
38 36
39 37 @Component
40 38 @Slf4j
41   -public class BasePluginDao extends AbstractSearchTextDao<PluginMetaDataEntity> implements PluginDao {
  39 +public class CassandraBasePluginDao extends CassandraAbstractSearchTextDao<PluginMetaDataEntity, PluginMetaData> implements PluginDao {
42 40
43 41 @Override
44 42 protected Class<PluginMetaDataEntity> getColumnFamilyClass() {
... ... @@ -51,24 +49,19 @@ public class BasePluginDao extends AbstractSearchTextDao<PluginMetaDataEntity> i
51 49 }
52 50
53 51 @Override
54   - public PluginMetaDataEntity save(PluginMetaData plugin) {
55   - return save(new PluginMetaDataEntity(plugin));
56   - }
57   -
58   - @Override
59   - public PluginMetaDataEntity findById(PluginId pluginId) {
  52 + public PluginMetaData findById(PluginId pluginId) {
60 53 log.debug("Search plugin meta-data entity by id [{}]", pluginId);
61   - PluginMetaDataEntity entity = super.findById(pluginId.getId());
  54 + PluginMetaData pluginMetaData = super.findById(pluginId.getId());
62 55 if (log.isTraceEnabled()) {
63   - log.trace("Search result: [{}] for plugin entity [{}]", entity != null, entity);
  56 + log.trace("Search result: [{}] for plugin entity [{}]", pluginMetaData != null, pluginMetaData);
64 57 } else {
65   - log.debug("Search result: [{}]", entity != null);
  58 + log.debug("Search result: [{}]", pluginMetaData != null);
66 59 }
67   - return entity;
  60 + return pluginMetaData;
68 61 }
69 62
70 63 @Override
71   - public PluginMetaDataEntity findByApiToken(String apiToken) {
  64 + public PluginMetaData findByApiToken(String apiToken) {
72 65 log.debug("Search plugin meta-data entity by api token [{}]", apiToken);
73 66 Select.Where query = select().from(ModelConstants.PLUGIN_BY_API_TOKEN_COLUMN_FAMILY_NAME).where(eq(ModelConstants.PLUGIN_API_TOKEN_PROPERTY, apiToken));
74 67 log.trace("Execute query [{}]", query);
... ... @@ -78,14 +71,14 @@ public class BasePluginDao extends AbstractSearchTextDao<PluginMetaDataEntity> i
78 71 } else {
79 72 log.debug("Search result: [{}]", entity != null);
80 73 }
81   - return entity;
  74 + return DaoUtil.getData(entity);
82 75 }
83 76
84 77 @Override
85 78 public void deleteById(UUID id) {
86 79 log.debug("Delete plugin meta-data entity by id [{}]", id);
87   - ResultSet resultSet = removeById(id);
88   - log.debug("Delete result: [{}]", resultSet.wasApplied());
  80 + boolean result = removeById(id);
  81 + log.debug("Delete result: [{}]", result);
89 82 }
90 83
91 84 @Override
... ... @@ -94,7 +87,7 @@ public class BasePluginDao extends AbstractSearchTextDao<PluginMetaDataEntity> i
94 87 }
95 88
96 89 @Override
97   - public List<PluginMetaDataEntity> findByTenantIdAndPageLink(TenantId tenantId, TextPageLink pageLink) {
  90 + public List<PluginMetaData> findByTenantIdAndPageLink(TenantId tenantId, TextPageLink pageLink) {
98 91 log.debug("Try to find plugins by tenantId [{}] and pageLink [{}]", tenantId, pageLink);
99 92 List<PluginMetaDataEntity> entities = findPageWithTextSearch(ModelConstants.PLUGIN_BY_TENANT_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME,
100 93 Arrays.asList(eq(ModelConstants.PLUGIN_TENANT_ID_PROPERTY, tenantId.getId())), pageLink);
... ... @@ -103,11 +96,11 @@ public class BasePluginDao extends AbstractSearchTextDao<PluginMetaDataEntity> i
103 96 } else {
104 97 log.debug("Search result: [{}]", entities.size());
105 98 }
106   - return entities;
  99 + return DaoUtil.convertDataList(entities);
107 100 }
108 101
109 102 @Override
110   - public List<PluginMetaDataEntity> findAllTenantPluginsByTenantId(UUID tenantId, TextPageLink pageLink) {
  103 + public List<PluginMetaData> findAllTenantPluginsByTenantId(UUID tenantId, TextPageLink pageLink) {
111 104 log.debug("Try to find all tenant plugins by tenantId [{}] and pageLink [{}]", tenantId, pageLink);
112 105 List<PluginMetaDataEntity> pluginEntities = findPageWithTextSearch(ModelConstants.PLUGIN_BY_TENANT_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME,
113 106 Arrays.asList(in(ModelConstants.PLUGIN_TENANT_ID_PROPERTY, Arrays.asList(NULL_UUID, tenantId))),
... ... @@ -117,7 +110,7 @@ public class BasePluginDao extends AbstractSearchTextDao<PluginMetaDataEntity> i
117 110 } else {
118 111 log.debug("Search result: [{}]", pluginEntities.size());
119 112 }
120   - return pluginEntities;
  113 + return DaoUtil.convertDataList(pluginEntities);
121 114 }
122 115
123 116 }
... ...
... ... @@ -20,24 +20,23 @@ import org.thingsboard.server.common.data.id.TenantId;
20 20 import org.thingsboard.server.common.data.page.TextPageLink;
21 21 import org.thingsboard.server.common.data.plugin.PluginMetaData;
22 22 import org.thingsboard.server.dao.Dao;
23   -import org.thingsboard.server.dao.model.PluginMetaDataEntity;
24 23
25 24 import java.util.List;
26 25 import java.util.UUID;
27 26
28   -public interface PluginDao extends Dao<PluginMetaDataEntity> {
  27 +public interface PluginDao extends Dao<PluginMetaData> {
29 28
30   - PluginMetaDataEntity save(PluginMetaData plugin);
  29 + PluginMetaData save(PluginMetaData plugin);
31 30
32   - PluginMetaDataEntity findById(PluginId pluginId);
  31 + PluginMetaData findById(PluginId pluginId);
33 32
34   - PluginMetaDataEntity findByApiToken(String apiToken);
  33 + PluginMetaData findByApiToken(String apiToken);
35 34
36 35 void deleteById(UUID id);
37 36
38 37 void deleteById(PluginId pluginId);
39 38
40   - List<PluginMetaDataEntity> findByTenantIdAndPageLink(TenantId tenantId, TextPageLink pageLink);
  39 + List<PluginMetaData> findByTenantIdAndPageLink(TenantId tenantId, TextPageLink pageLink);
41 40
42 41 /**
43 42 * Find all tenant plugins (including system) by tenantId and page link.
... ... @@ -46,6 +45,6 @@ public interface PluginDao extends Dao<PluginMetaDataEntity> {
46 45 * @param pageLink the page link
47 46 * @return the list of plugins objects
48 47 */
49   - List<PluginMetaDataEntity> findAllTenantPluginsByTenantId(UUID tenantId, TextPageLink pageLink);
  48 + List<PluginMetaData> findAllTenantPluginsByTenantId(UUID tenantId, TextPageLink pageLink);
50 49
51 50 }
... ...
... ... @@ -34,7 +34,6 @@ import org.thingsboard.server.dao.component.ComponentDescriptorService;
34 34 import org.thingsboard.server.dao.exception.DataValidationException;
35 35 import org.thingsboard.server.dao.exception.DatabaseException;
36 36 import org.thingsboard.server.dao.exception.IncorrectParameterException;
37   -import org.thingsboard.server.dao.model.RuleMetaDataEntity;
38 37 import org.thingsboard.server.dao.plugin.PluginService;
39 38 import org.thingsboard.server.dao.service.DataValidator;
40 39 import org.thingsboard.server.dao.service.PaginatedRemover;
... ... @@ -45,8 +44,6 @@ import java.util.Arrays;
45 44 import java.util.List;
46 45 import java.util.function.Function;
47 46
48   -import static org.thingsboard.server.dao.DaoUtil.convertDataList;
49   -import static org.thingsboard.server.dao.DaoUtil.getData;
50 47 import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID;
51 48 import static org.thingsboard.server.dao.service.Validator.validateId;
52 49 import static org.thingsboard.server.dao.service.Validator.validatePageLink;
... ... @@ -74,7 +71,7 @@ public class BaseRuleService implements RuleService {
74 71 rule.setTenantId(systemTenantId);
75 72 }
76 73 if (rule.getId() != null) {
77   - RuleMetaData oldVersion = getData(ruleDao.findById(rule.getId()));
  74 + RuleMetaData oldVersion = ruleDao.findById(rule.getId());
78 75 if (rule.getState() == null) {
79 76 rule.setState(oldVersion.getState());
80 77 } else if (rule.getState() != oldVersion.getState()) {
... ... @@ -94,7 +91,7 @@ public class BaseRuleService implements RuleService {
94 91 }
95 92 validateComponentJson(rule.getAction(), ComponentType.ACTION);
96 93 validateRuleAndPluginState(rule);
97   - return getData(ruleDao.save(rule));
  94 + return ruleDao.save(rule);
98 95 }
99 96
100 97 private void validateFilters(JsonNode filtersJson) {
... ... @@ -163,30 +160,27 @@ public class BaseRuleService implements RuleService {
163 160 @Override
164 161 public RuleMetaData findRuleById(RuleId ruleId) {
165 162 validateId(ruleId, "Incorrect rule id for search rule request.");
166   - return getData(ruleDao.findById(ruleId.getId()));
  163 + return ruleDao.findById(ruleId.getId());
167 164 }
168 165
169 166 @Override
170 167 public List<RuleMetaData> findPluginRules(String pluginToken) {
171   - List<RuleMetaDataEntity> ruleEntities = ruleDao.findRulesByPlugin(pluginToken);
172   - return convertDataList(ruleEntities);
  168 + return ruleDao.findRulesByPlugin(pluginToken);
173 169 }
174 170
175 171 @Override
176 172 public TextPageData<RuleMetaData> findSystemRules(TextPageLink pageLink) {
177 173 validatePageLink(pageLink, "Incorrect PageLink object for search rule request.");
178   - List<RuleMetaDataEntity> ruleEntities = ruleDao.findByTenantIdAndPageLink(systemTenantId, pageLink);
179   - List<RuleMetaData> plugins = convertDataList(ruleEntities);
180   - return new TextPageData<>(plugins, pageLink);
  174 + List<RuleMetaData> rules = ruleDao.findByTenantIdAndPageLink(systemTenantId, pageLink);
  175 + return new TextPageData<>(rules, pageLink);
181 176 }
182 177
183 178 @Override
184 179 public TextPageData<RuleMetaData> findTenantRules(TenantId tenantId, TextPageLink pageLink) {
185 180 validateId(tenantId, "Incorrect tenant id for search rule request.");
186 181 validatePageLink(pageLink, "Incorrect PageLink object for search rule request.");
187   - List<RuleMetaDataEntity> ruleEntities = ruleDao.findByTenantIdAndPageLink(tenantId, pageLink);
188   - List<RuleMetaData> plugins = convertDataList(ruleEntities);
189   - return new TextPageData<>(plugins, pageLink);
  182 + List<RuleMetaData> rules = ruleDao.findByTenantIdAndPageLink(tenantId, pageLink);
  183 + return new TextPageData<>(rules, pageLink);
190 184 }
191 185
192 186 @Override
... ... @@ -210,8 +204,7 @@ public class BaseRuleService implements RuleService {
210 204 log.trace("Executing findAllTenantRulesByTenantIdAndPageLink, tenantId [{}], pageLink [{}]", tenantId, pageLink);
211 205 Validator.validateId(tenantId, "Incorrect tenantId " + tenantId);
212 206 Validator.validatePageLink(pageLink, "Incorrect page link " + pageLink);
213   - List<RuleMetaDataEntity> rulesEntities = ruleDao.findAllTenantRulesByTenantId(tenantId.getId(), pageLink);
214   - List<RuleMetaData> rules = convertDataList(rulesEntities);
  207 + List<RuleMetaData> rules = ruleDao.findAllTenantRulesByTenantId(tenantId.getId(), pageLink);
215 208 return new TextPageData<>(rules, pageLink);
216 209 }
217 210
... ... @@ -251,10 +244,10 @@ public class BaseRuleService implements RuleService {
251 244
252 245 private void updateLifeCycleState(RuleId ruleId, ComponentLifecycleState state) {
253 246 Validator.validateId(ruleId, "Incorrect rule id for state change request.");
254   - RuleMetaDataEntity rule = ruleDao.findById(ruleId);
  247 + RuleMetaData rule = ruleDao.findById(ruleId);
255 248 if (rule != null) {
256 249 rule.setState(state);
257   - validateRuleAndPluginState(getData(rule));
  250 + validateRuleAndPluginState(rule);
258 251 ruleDao.save(rule);
259 252 } else {
260 253 throw new DatabaseException("Plugin not found!");
... ... @@ -277,17 +270,17 @@ public class BaseRuleService implements RuleService {
277 270 }
278 271 };
279 272
280   - private PaginatedRemover<TenantId, RuleMetaDataEntity> tenantRulesRemover =
281   - new PaginatedRemover<TenantId, RuleMetaDataEntity>() {
  273 + private PaginatedRemover<TenantId, RuleMetaData> tenantRulesRemover =
  274 + new PaginatedRemover<TenantId, RuleMetaData>() {
282 275
283 276 @Override
284   - protected List<RuleMetaDataEntity> findEntities(TenantId id, TextPageLink pageLink) {
  277 + protected List<RuleMetaData> findEntities(TenantId id, TextPageLink pageLink) {
285 278 return ruleDao.findByTenantIdAndPageLink(id, pageLink);
286 279 }
287 280
288 281 @Override
289   - protected void removeEntity(RuleMetaDataEntity entity) {
290   - ruleDao.deleteById(entity.getId());
  282 + protected void removeEntity(RuleMetaData entity) {
  283 + ruleDao.deleteById(entity.getUuidId());
291 284 }
292 285 };
293 286
... ...
dao/src/main/java/org/thingsboard/server/dao/rule/CassandraBaseRuleDao.java renamed from dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleDao.java
... ... @@ -15,7 +15,6 @@
15 15 */
16 16 package org.thingsboard.server.dao.rule;
17 17
18   -import com.datastax.driver.core.ResultSet;
19 18 import com.datastax.driver.core.querybuilder.Select;
20 19 import lombok.extern.slf4j.Slf4j;
21 20 import org.springframework.stereotype.Component;
... ... @@ -23,7 +22,8 @@ import org.thingsboard.server.common.data.id.RuleId;
23 22 import org.thingsboard.server.common.data.id.TenantId;
24 23 import org.thingsboard.server.common.data.page.TextPageLink;
25 24 import org.thingsboard.server.common.data.rule.RuleMetaData;
26   -import org.thingsboard.server.dao.AbstractSearchTextDao;
  25 +import org.thingsboard.server.dao.CassandraAbstractSearchTextDao;
  26 +import org.thingsboard.server.dao.DaoUtil;
27 27 import org.thingsboard.server.dao.model.ModelConstants;
28 28 import org.thingsboard.server.dao.model.RuleMetaDataEntity;
29 29
... ... @@ -36,7 +36,7 @@ import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID;
36 36
37 37 @Component
38 38 @Slf4j
39   -public class BaseRuleDao extends AbstractSearchTextDao<RuleMetaDataEntity> implements RuleDao {
  39 +public class CassandraBaseRuleDao extends CassandraAbstractSearchTextDao<RuleMetaDataEntity, RuleMetaData> implements RuleDao {
40 40
41 41 @Override
42 42 protected Class<RuleMetaDataEntity> getColumnFamilyClass() {
... ... @@ -49,17 +49,12 @@ public class BaseRuleDao extends AbstractSearchTextDao<RuleMetaDataEntity> imple
49 49 }
50 50
51 51 @Override
52   - public RuleMetaDataEntity findById(RuleId ruleId) {
  52 + public RuleMetaData findById(RuleId ruleId) {
53 53 return findById(ruleId.getId());
54 54 }
55 55
56 56 @Override
57   - public RuleMetaDataEntity save(RuleMetaData rule) {
58   - return save(new RuleMetaDataEntity(rule));
59   - }
60   -
61   - @Override
62   - public List<RuleMetaDataEntity> findByTenantIdAndPageLink(TenantId tenantId, TextPageLink pageLink) {
  57 + public List<RuleMetaData> findByTenantIdAndPageLink(TenantId tenantId, TextPageLink pageLink) {
63 58 log.debug("Try to find rules by tenantId [{}] and pageLink [{}]", tenantId, pageLink);
64 59 List<RuleMetaDataEntity> entities = findPageWithTextSearch(ModelConstants.RULE_BY_TENANT_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME,
65 60 Arrays.asList(eq(ModelConstants.RULE_TENANT_ID_PROPERTY, tenantId.getId())), pageLink);
... ... @@ -68,11 +63,11 @@ public class BaseRuleDao extends AbstractSearchTextDao<RuleMetaDataEntity> imple
68 63 } else {
69 64 log.debug("Search result: [{}]", entities.size());
70 65 }
71   - return entities;
  66 + return DaoUtil.convertDataList(entities);
72 67 }
73 68
74 69 @Override
75   - public List<RuleMetaDataEntity> findAllTenantRulesByTenantId(UUID tenantId, TextPageLink pageLink) {
  70 + public List<RuleMetaData> findAllTenantRulesByTenantId(UUID tenantId, TextPageLink pageLink) {
76 71 log.debug("Try to find all tenant rules by tenantId [{}] and pageLink [{}]", tenantId, pageLink);
77 72 List<RuleMetaDataEntity> entities = findPageWithTextSearch(ModelConstants.RULE_BY_TENANT_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME,
78 73 Arrays.asList(in(ModelConstants.RULE_TENANT_ID_PROPERTY, Arrays.asList(NULL_UUID, tenantId))),
... ... @@ -82,23 +77,23 @@ public class BaseRuleDao extends AbstractSearchTextDao<RuleMetaDataEntity> imple
82 77 } else {
83 78 log.debug("Search result: [{}]", entities.size());
84 79 }
85   - return entities;
  80 + return DaoUtil.convertDataList(entities);
86 81 }
87 82
88 83 @Override
89   - public List<RuleMetaDataEntity> findRulesByPlugin(String pluginToken) {
  84 + public List<RuleMetaData> findRulesByPlugin(String pluginToken) {
90 85 log.debug("Search rules by api token [{}]", pluginToken);
91 86 Select select = select().from(ModelConstants.RULE_BY_PLUGIN_TOKEN);
92 87 Select.Where query = select.where();
93 88 query.and(eq(ModelConstants.RULE_PLUGIN_TOKEN_PROPERTY, pluginToken));
94   - return findListByStatement(query);
  89 + return DaoUtil.convertDataList(findListByStatement(query));
95 90 }
96 91
97 92 @Override
98 93 public void deleteById(UUID id) {
99 94 log.debug("Delete rule meta-data entity by id [{}]", id);
100   - ResultSet resultSet = removeById(id);
101   - log.debug("Delete result: [{}]", resultSet.wasApplied());
  95 + boolean result = removeById(id);
  96 + log.debug("Delete result: [{}]", result);
102 97 }
103 98
104 99 @Override
... ...
... ... @@ -20,20 +20,19 @@ import org.thingsboard.server.common.data.id.TenantId;
20 20 import org.thingsboard.server.common.data.page.TextPageLink;
21 21 import org.thingsboard.server.common.data.rule.RuleMetaData;
22 22 import org.thingsboard.server.dao.Dao;
23   -import org.thingsboard.server.dao.model.RuleMetaDataEntity;
24 23
25 24 import java.util.List;
26 25 import java.util.UUID;
27 26
28   -public interface RuleDao extends Dao<RuleMetaDataEntity> {
  27 +public interface RuleDao extends Dao<RuleMetaData> {
29 28
30   - RuleMetaDataEntity save(RuleMetaData rule);
  29 + RuleMetaData save(RuleMetaData rule);
31 30
32   - RuleMetaDataEntity findById(RuleId ruleId);
  31 + RuleMetaData findById(RuleId ruleId);
33 32
34   - List<RuleMetaDataEntity> findRulesByPlugin(String pluginToken);
  33 + List<RuleMetaData> findRulesByPlugin(String pluginToken);
35 34
36   - List<RuleMetaDataEntity> findByTenantIdAndPageLink(TenantId tenantId, TextPageLink pageLink);
  35 + List<RuleMetaData> findByTenantIdAndPageLink(TenantId tenantId, TextPageLink pageLink);
37 36
38 37 /**
39 38 * Find all tenant rules (including system) by tenantId and page link.
... ... @@ -42,7 +41,7 @@ public interface RuleDao extends Dao<RuleMetaDataEntity> {
42 41 * @param pageLink the page link
43 42 * @return the list of rules objects
44 43 */
45   - List<RuleMetaDataEntity> findAllTenantRulesByTenantId(UUID tenantId, TextPageLink pageLink);
  44 + List<RuleMetaData> findAllTenantRulesByTenantId(UUID tenantId, TextPageLink pageLink);
46 45
47 46 void deleteById(UUID id);
48 47
... ...
... ... @@ -15,18 +15,15 @@
15 15 */
16 16 package org.thingsboard.server.dao.service;
17 17
18   -import java.util.HashSet;
19   -import java.util.Iterator;
20   -import java.util.Set;
21   -
  18 +import com.fasterxml.jackson.databind.JsonNode;
22 19 import lombok.extern.slf4j.Slf4j;
23 20 import org.apache.commons.validator.routines.EmailValidator;
24 21 import org.thingsboard.server.common.data.BaseData;
25 22 import org.thingsboard.server.dao.exception.DataValidationException;
26   -import org.slf4j.Logger;
27   -import org.slf4j.LoggerFactory;
28 23
29   -import com.fasterxml.jackson.databind.JsonNode;
  24 +import java.util.HashSet;
  25 +import java.util.Iterator;
  26 +import java.util.Set;
30 27
31 28 @Slf4j
32 29 public abstract class DataValidator<D extends BaseData<?>> {
... ...
1 1 /**
2 2 * Copyright © 2016-2017 The Thingsboard Authors
3   - *
  3 + * <p>
4 4 * Licensed under the Apache License, Version 2.0 (the "License");
5 5 * you may not use this file except in compliance with the License.
6 6 * You may obtain a copy of the License at
7   - *
8   - * http://www.apache.org/licenses/LICENSE-2.0
9   - *
  7 + * <p>
  8 + * http://www.apache.org/licenses/LICENSE-2.0
  9 + * <p>
10 10 * Unless required by applicable law or agreed to in writing, software
11 11 * distributed under the License is distributed on an "AS IS" BASIS,
12 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
... ... @@ -15,33 +15,35 @@
15 15 */
16 16 package org.thingsboard.server.dao.service;
17 17
  18 +import org.thingsboard.server.common.data.id.IdBased;
  19 +import org.thingsboard.server.common.data.page.TextPageLink;
  20 +
18 21 import java.util.List;
19 22 import java.util.UUID;
20 23
21   -import org.thingsboard.server.common.data.page.TextPageLink;
22   -import org.thingsboard.server.dao.model.BaseEntity;
  24 +public abstract class PaginatedRemover<I, D extends IdBased<?>> {
23 25
24   -public abstract class PaginatedRemover<I, E extends BaseEntity<?>> {
  26 + private static final int DEFAULT_LIMIT = 100;
25 27
26 28 public void removeEntitites(I id) {
27   - TextPageLink pageLink = new TextPageLink(100);
  29 + TextPageLink pageLink = new TextPageLink(DEFAULT_LIMIT);
28 30 boolean hasNext = true;
29 31 while (hasNext) {
30   - List<E> entities = findEntities(id, pageLink);
31   - for (E entity : entities) {
  32 + List<D> entities = findEntities(id, pageLink);
  33 + for (D entity : entities) {
32 34 removeEntity(entity);
33 35 }
34 36 hasNext = entities.size() == pageLink.getLimit();
35 37 if (hasNext) {
36   - int index = entities.size()-1;
37   - UUID idOffset = entities.get(index).getId();
  38 + int index = entities.size() - 1;
  39 + UUID idOffset = entities.get(index).getUuidId();
38 40 pageLink.setIdOffset(idOffset);
39 41 }
40   - }
  42 + }
41 43 }
42   -
43   - protected abstract List<E> findEntities(I id, TextPageLink pageLink);
44   -
45   - protected abstract void removeEntity(E entity);
46   -
  44 +
  45 + protected abstract List<D> findEntities(I id, TextPageLink pageLink);
  46 +
  47 + protected abstract void removeEntity(D entity);
  48 +
47 49 }
... ...
... ... @@ -17,9 +17,8 @@ package org.thingsboard.server.dao.settings;
17 17
18 18 import org.thingsboard.server.common.data.AdminSettings;
19 19 import org.thingsboard.server.dao.Dao;
20   -import org.thingsboard.server.dao.model.AdminSettingsEntity;
21 20
22   -public interface AdminSettingsDao extends Dao<AdminSettingsEntity> {
  21 +public interface AdminSettingsDao extends Dao<AdminSettings> {
23 22
24 23 /**
25 24 * Save or update admin settings object
... ... @@ -27,7 +26,7 @@ public interface AdminSettingsDao extends Dao<AdminSettingsEntity> {
27 26 * @param adminSettings the admin settings object
28 27 * @return saved admin settings object
29 28 */
30   - AdminSettingsEntity save(AdminSettings adminSettings);
  29 + AdminSettings save(AdminSettings adminSettings);
31 30
32 31 /**
33 32 * Find admin settings by key.
... ... @@ -35,6 +34,6 @@ public interface AdminSettingsDao extends Dao<AdminSettingsEntity> {
35 34 * @param key the key
36 35 * @return the admin settings object
37 36 */
38   - AdminSettingsEntity findByKey(String key);
  37 + AdminSettings findByKey(String key);
39 38
40 39 }
... ...
... ... @@ -20,10 +20,10 @@ import org.thingsboard.server.common.data.id.AdminSettingsId;
20 20
21 21 public interface AdminSettingsService {
22 22
23   - public AdminSettings findAdminSettingsById(AdminSettingsId adminSettingsId);
  23 + AdminSettings findAdminSettingsById(AdminSettingsId adminSettingsId);
24 24
25   - public AdminSettings findAdminSettingsByKey(String key);
  25 + AdminSettings findAdminSettingsByKey(String key);
26 26
27   - public AdminSettings saveAdminSettings(AdminSettings adminSettings);
  27 + AdminSettings saveAdminSettings(AdminSettings adminSettings);
28 28
29 29 }
... ...
... ... @@ -15,19 +15,14 @@
15 15 */
16 16 package org.thingsboard.server.dao.settings;
17 17
18   -import static org.thingsboard.server.dao.DaoUtil.getData;
19   -
20 18 import lombok.extern.slf4j.Slf4j;
21 19 import org.apache.commons.lang3.StringUtils;
  20 +import org.springframework.beans.factory.annotation.Autowired;
  21 +import org.springframework.stereotype.Service;
22 22 import org.thingsboard.server.common.data.AdminSettings;
23 23 import org.thingsboard.server.common.data.id.AdminSettingsId;
24 24 import org.thingsboard.server.dao.exception.DataValidationException;
25   -import org.thingsboard.server.dao.model.AdminSettingsEntity;
26 25 import org.thingsboard.server.dao.service.DataValidator;
27   -import org.slf4j.Logger;
28   -import org.slf4j.LoggerFactory;
29   -import org.springframework.beans.factory.annotation.Autowired;
30   -import org.springframework.stereotype.Service;
31 26 import org.thingsboard.server.dao.service.Validator;
32 27
33 28 @Service
... ... @@ -41,24 +36,21 @@ public class AdminSettingsServiceImpl implements AdminSettingsService {
41 36 public AdminSettings findAdminSettingsById(AdminSettingsId adminSettingsId) {
42 37 log.trace("Executing findAdminSettingsById [{}]", adminSettingsId);
43 38 Validator.validateId(adminSettingsId, "Incorrect adminSettingsId " + adminSettingsId);
44   - AdminSettingsEntity adminSettingsEntity = adminSettingsDao.findById(adminSettingsId.getId());
45   - return getData(adminSettingsEntity);
  39 + return adminSettingsDao.findById(adminSettingsId.getId());
46 40 }
47 41
48 42 @Override
49 43 public AdminSettings findAdminSettingsByKey(String key) {
50 44 log.trace("Executing findAdminSettingsByKey [{}]", key);
51 45 Validator.validateString(key, "Incorrect key " + key);
52   - AdminSettingsEntity adminSettingsEntity = adminSettingsDao.findByKey(key);
53   - return getData(adminSettingsEntity);
  46 + return adminSettingsDao.findByKey(key);
54 47 }
55 48
56 49 @Override
57 50 public AdminSettings saveAdminSettings(AdminSettings adminSettings) {
58 51 log.trace("Executing saveAdminSettings [{}]", adminSettings);
59 52 adminSettingsValidator.validate(adminSettings);
60   - AdminSettingsEntity adminSettingsEntity = adminSettingsDao.save(adminSettings);
61   - return getData(adminSettingsEntity);
  53 + return adminSettingsDao.save(adminSettings);
62 54 }
63 55
64 56 private DataValidator<AdminSettings> adminSettingsValidator =
... ...
dao/src/main/java/org/thingsboard/server/dao/settings/CassandraAdminSettingsDao.java renamed from dao/src/main/java/org/thingsboard/server/dao/settings/AdminSettingsDaoImpl.java
... ... @@ -15,26 +15,21 @@
15 15 */
16 16 package org.thingsboard.server.dao.settings;
17 17
18   -import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;
19   -import static com.datastax.driver.core.querybuilder.QueryBuilder.select;
20   -import static org.thingsboard.server.dao.model.ModelConstants.ADMIN_SETTINGS_BY_KEY_COLUMN_FAMILY_NAME;
21   -import static org.thingsboard.server.dao.model.ModelConstants.ADMIN_SETTINGS_COLUMN_FAMILY_NAME;
22   -import static org.thingsboard.server.dao.model.ModelConstants.ADMIN_SETTINGS_KEY_PROPERTY;
23   -
  18 +import com.datastax.driver.core.querybuilder.Select.Where;
24 19 import lombok.extern.slf4j.Slf4j;
25 20 import org.springframework.stereotype.Component;
26 21 import org.thingsboard.server.common.data.AdminSettings;
27   -import org.thingsboard.server.dao.AbstractModelDao;
  22 +import org.thingsboard.server.dao.CassandraAbstractModelDao;
  23 +import org.thingsboard.server.dao.DaoUtil;
28 24 import org.thingsboard.server.dao.model.AdminSettingsEntity;
29   -import org.slf4j.Logger;
30   -import org.slf4j.LoggerFactory;
31   -import org.springframework.stereotype.Repository;
32 25
33   -import com.datastax.driver.core.querybuilder.Select.Where;
  26 +import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;
  27 +import static com.datastax.driver.core.querybuilder.QueryBuilder.select;
  28 +import static org.thingsboard.server.dao.model.ModelConstants.*;
34 29
35 30 @Component
36 31 @Slf4j
37   -public class AdminSettingsDaoImpl extends AbstractModelDao<AdminSettingsEntity> implements AdminSettingsDao {
  32 +public class CassandraAdminSettingsDao extends CassandraAbstractModelDao<AdminSettingsEntity, AdminSettings> implements AdminSettingsDao {
38 33
39 34 @Override
40 35 protected Class<AdminSettingsEntity> getColumnFamilyClass() {
... ... @@ -45,21 +40,15 @@ public class AdminSettingsDaoImpl extends AbstractModelDao<AdminSettingsEntity>
45 40 protected String getColumnFamilyName() {
46 41 return ADMIN_SETTINGS_COLUMN_FAMILY_NAME;
47 42 }
48   -
49   - @Override
50   - public AdminSettingsEntity save(AdminSettings adminSettings) {
51   - log.debug("Save admin settings [{}] ", adminSettings);
52   - return save(new AdminSettingsEntity(adminSettings));
53   - }
54 43
55 44 @Override
56   - public AdminSettingsEntity findByKey(String key) {
  45 + public AdminSettings findByKey(String key) {
57 46 log.debug("Try to find admin settings by key [{}] ", key);
58 47 Where query = select().from(ADMIN_SETTINGS_BY_KEY_COLUMN_FAMILY_NAME).where(eq(ADMIN_SETTINGS_KEY_PROPERTY, key));
59 48 log.trace("Execute query {}", query);
60 49 AdminSettingsEntity adminSettingsEntity = findOneByStatement(query);
61 50 log.trace("Found admin settings [{}] by key [{}]", adminSettingsEntity, key);
62   - return adminSettingsEntity;
  51 + return DaoUtil.getData(adminSettingsEntity);
63 52 }
64 53
65 54 }
... ...
dao/src/main/java/org/thingsboard/server/dao/tenant/CassandraTenantDao.java renamed from dao/src/main/java/org/thingsboard/server/dao/tenant/TenantDaoImpl.java
... ... @@ -15,26 +15,23 @@
15 15 */
16 16 package org.thingsboard.server.dao.tenant;
17 17
18   -import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;
19   -import static org.thingsboard.server.dao.model.ModelConstants.TENANT_BY_REGION_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME;
20   -import static org.thingsboard.server.dao.model.ModelConstants.TENANT_COLUMN_FAMILY_NAME;
21   -import static org.thingsboard.server.dao.model.ModelConstants.TENANT_REGION_PROPERTY;
22   -
23   -import java.util.Arrays;
24   -import java.util.List;
25   -
26 18 import lombok.extern.slf4j.Slf4j;
27 19 import org.springframework.stereotype.Component;
28 20 import org.thingsboard.server.common.data.Tenant;
29 21 import org.thingsboard.server.common.data.page.TextPageLink;
30   -import org.thingsboard.server.dao.AbstractSearchTextDao;
  22 +import org.thingsboard.server.dao.CassandraAbstractSearchTextDao;
  23 +import org.thingsboard.server.dao.DaoUtil;
31 24 import org.thingsboard.server.dao.model.TenantEntity;
32   -import org.slf4j.Logger;
33   -import org.slf4j.LoggerFactory;
  25 +
  26 +import java.util.Arrays;
  27 +import java.util.List;
  28 +
  29 +import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;
  30 +import static org.thingsboard.server.dao.model.ModelConstants.*;
34 31
35 32 @Component
36 33 @Slf4j
37   -public class TenantDaoImpl extends AbstractSearchTextDao<TenantEntity> implements TenantDao {
  34 +public class CassandraTenantDao extends CassandraAbstractSearchTextDao<TenantEntity, Tenant> implements TenantDao {
38 35
39 36 @Override
40 37 protected Class<TenantEntity> getColumnFamilyClass() {
... ... @@ -45,21 +42,15 @@ public class TenantDaoImpl extends AbstractSearchTextDao<TenantEntity> implement
45 42 protected String getColumnFamilyName() {
46 43 return TENANT_COLUMN_FAMILY_NAME;
47 44 }
48   -
49   - @Override
50   - public TenantEntity save(Tenant tenant) {
51   - log.debug("Save tenant [{}] ", tenant);
52   - return save(new TenantEntity(tenant));
53   - }
54 45
55 46 @Override
56   - public List<TenantEntity> findTenantsByRegion(String region, TextPageLink pageLink) {
  47 + public List<Tenant> findTenantsByRegion(String region, TextPageLink pageLink) {
57 48 log.debug("Try to find tenants by region [{}] and pageLink [{}]", region, pageLink);
58 49 List<TenantEntity> tenantEntities = findPageWithTextSearch(TENANT_BY_REGION_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME,
59 50 Arrays.asList(eq(TENANT_REGION_PROPERTY, region)),
60 51 pageLink);
61 52 log.trace("Found tenants [{}] by region [{}] and pageLink [{}]", tenantEntities, region, pageLink);
62   - return tenantEntities;
  53 + return DaoUtil.convertDataList(tenantEntities);
63 54 }
64 55
65 56 }
... ...
... ... @@ -15,14 +15,13 @@
15 15 */
16 16 package org.thingsboard.server.dao.tenant;
17 17
18   -import java.util.List;
19   -
20 18 import org.thingsboard.server.common.data.Tenant;
21 19 import org.thingsboard.server.common.data.page.TextPageLink;
22 20 import org.thingsboard.server.dao.Dao;
23   -import org.thingsboard.server.dao.model.TenantEntity;
24 21
25   -public interface TenantDao extends Dao<TenantEntity> {
  22 +import java.util.List;
  23 +
  24 +public interface TenantDao extends Dao<Tenant> {
26 25
27 26 /**
28 27 * Save or update tenant object
... ... @@ -30,7 +29,7 @@ public interface TenantDao extends Dao<TenantEntity> {
30 29 * @param tenant the tenant object
31 30 * @return saved tenant object
32 31 */
33   - TenantEntity save(Tenant tenant);
  32 + Tenant save(Tenant tenant);
34 33
35 34 /**
36 35 * Find tenants by region and page link.
... ... @@ -39,6 +38,6 @@ public interface TenantDao extends Dao<TenantEntity> {
39 38 * @param pageLink the page link
40 39 * @return the list of tenant objects
41 40 */
42   - List<TenantEntity> findTenantsByRegion(String region, TextPageLink pageLink);
  41 + List<Tenant> findTenantsByRegion(String region, TextPageLink pageLink);
43 42
44 43 }
... ...
... ... @@ -22,16 +22,14 @@ import org.thingsboard.server.common.data.page.TextPageLink;
22 22
23 23 public interface TenantService {
24 24
25   - public Tenant findTenantById(TenantId tenantId);
  25 + Tenant findTenantById(TenantId tenantId);
26 26
27   - public Tenant saveTenant(Tenant tenant);
  27 + Tenant saveTenant(Tenant tenant);
28 28
29   - public void deleteTenant(TenantId tenantId);
  29 + void deleteTenant(TenantId tenantId);
30 30
31   - public TextPageData<Tenant> findTenants(TextPageLink pageLink);
  31 + TextPageData<Tenant> findTenants(TextPageLink pageLink);
32 32
33   - //public TextPageData<Tenant> findTenantsByTitle(String title, PageLink pageLink);
34   -
35   - public void deleteTenants();
  33 + void deleteTenants();
36 34
37 35 }
... ...
... ... @@ -15,13 +15,10 @@
15 15 */
16 16 package org.thingsboard.server.dao.tenant;
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 18 import lombok.extern.slf4j.Slf4j;
24 19 import org.apache.commons.lang3.StringUtils;
  20 +import org.springframework.beans.factory.annotation.Autowired;
  21 +import org.springframework.stereotype.Service;
25 22 import org.thingsboard.server.common.data.Tenant;
26 23 import org.thingsboard.server.common.data.id.TenantId;
27 24 import org.thingsboard.server.common.data.page.TextPageData;
... ... @@ -30,19 +27,16 @@ import org.thingsboard.server.dao.customer.CustomerService;
30 27 import org.thingsboard.server.dao.dashboard.DashboardService;
31 28 import org.thingsboard.server.dao.device.DeviceService;
32 29 import org.thingsboard.server.dao.exception.DataValidationException;
33   -import org.thingsboard.server.dao.model.TenantEntity;
34 30 import org.thingsboard.server.dao.plugin.PluginService;
35 31 import org.thingsboard.server.dao.rule.RuleService;
36 32 import org.thingsboard.server.dao.service.DataValidator;
37 33 import org.thingsboard.server.dao.service.PaginatedRemover;
38   -import org.thingsboard.server.dao.user.UserService;
39   -import org.slf4j.Logger;
40   -import org.slf4j.LoggerFactory;
41   -import org.springframework.beans.factory.annotation.Autowired;
42   -import org.springframework.stereotype.Service;
43 34 import org.thingsboard.server.dao.service.Validator;
  35 +import org.thingsboard.server.dao.user.UserService;
44 36 import org.thingsboard.server.dao.widget.WidgetsBundleService;
45 37
  38 +import java.util.List;
  39 +
46 40 @Service
47 41 @Slf4j
48 42 public class TenantServiceImpl implements TenantService {
... ... @@ -77,8 +71,7 @@ public class TenantServiceImpl implements TenantService {
77 71 public Tenant findTenantById(TenantId tenantId) {
78 72 log.trace("Executing findTenantById [{}]", tenantId);
79 73 Validator.validateId(tenantId, "Incorrect tenantId " + tenantId);
80   - TenantEntity tenantEntity = tenantDao.findById(tenantId.getId());
81   - return getData(tenantEntity);
  74 + return tenantDao.findById(tenantId.getId());
82 75 }
83 76
84 77 @Override
... ... @@ -86,8 +79,7 @@ public class TenantServiceImpl implements TenantService {
86 79 log.trace("Executing saveTenant [{}]", tenant);
87 80 tenant.setRegion(DEFAULT_TENANT_REGION);
88 81 tenantValidator.validate(tenant);
89   - TenantEntity tenantEntity = tenantDao.save(tenant);
90   - return getData(tenantEntity);
  82 + return tenantDao.save(tenant);
91 83 }
92 84
93 85 @Override
... ... @@ -108,9 +100,8 @@ public class TenantServiceImpl implements TenantService {
108 100 public TextPageData<Tenant> findTenants(TextPageLink pageLink) {
109 101 log.trace("Executing findTenants pageLink [{}]", pageLink);
110 102 Validator.validatePageLink(pageLink, "Incorrect page link " + pageLink);
111   - List<TenantEntity> tenantEntities = tenantDao.findTenantsByRegion(DEFAULT_TENANT_REGION, pageLink);
112   - List<Tenant> tenants = convertDataList(tenantEntities);
113   - return new TextPageData<Tenant>(tenants, pageLink);
  103 + List<Tenant> tenants = tenantDao.findTenantsByRegion(DEFAULT_TENANT_REGION, pageLink);
  104 + return new TextPageData<>(tenants, pageLink);
114 105 }
115 106
116 107 @Override
... ... @@ -132,17 +123,17 @@ public class TenantServiceImpl implements TenantService {
132 123 }
133 124 };
134 125
135   - private PaginatedRemover<String, TenantEntity> tenantsRemover =
136   - new PaginatedRemover<String, TenantEntity>() {
  126 + private PaginatedRemover<String, Tenant> tenantsRemover =
  127 + new PaginatedRemover<String, Tenant>() {
137 128
138 129 @Override
139   - protected List<TenantEntity> findEntities(String region, TextPageLink pageLink) {
  130 + protected List<Tenant> findEntities(String region, TextPageLink pageLink) {
140 131 return tenantDao.findTenantsByRegion(region, pageLink);
141 132 }
142 133
143 134 @Override
144   - protected void removeEntity(TenantEntity entity) {
145   - deleteTenant(new TenantId(entity.getId()));
  135 + protected void removeEntity(Tenant entity) {
  136 + deleteTenant(new TenantId(entity.getUuidId()));
146 137 }
147 138 };
148 139 }
... ...
... ... @@ -15,34 +15,25 @@
15 15 */
16 16 package org.thingsboard.server.dao.timeseries;
17 17
  18 +// CASSANDRA ???
18 19 import com.datastax.driver.core.ResultSet;
19 20 import com.datastax.driver.core.ResultSetFuture;
20 21 import com.datastax.driver.core.Row;
21   -import com.google.common.base.Function;
22 22 import com.google.common.collect.Lists;
23 23 import com.google.common.util.concurrent.Futures;
24 24 import com.google.common.util.concurrent.ListenableFuture;
25 25 import lombok.extern.slf4j.Slf4j;
  26 +import org.springframework.beans.factory.annotation.Autowired;
  27 +import org.springframework.stereotype.Service;
26 28 import org.thingsboard.server.common.data.id.UUIDBased;
27   -import org.thingsboard.server.common.data.kv.BaseTsKvQuery;
28 29 import org.thingsboard.server.common.data.kv.TsKvEntry;
29 30 import org.thingsboard.server.common.data.kv.TsKvQuery;
30 31 import org.thingsboard.server.dao.exception.IncorrectParameterException;
31   -import org.springframework.beans.factory.annotation.Autowired;
32   -import org.springframework.beans.factory.annotation.Value;
33   -import org.springframework.stereotype.Service;
34 32 import org.thingsboard.server.dao.service.Validator;
35 33
36   -import javax.annotation.Nullable;
37   -import javax.annotation.PostConstruct;
38   -import javax.annotation.PreDestroy;
39   -import java.time.Instant;
40   -import java.time.LocalDateTime;
41   -import java.time.ZoneOffset;
42   -import java.util.*;
43   -import java.util.concurrent.ExecutorService;
44   -import java.util.concurrent.Executors;
45   -import java.util.stream.Collectors;
  34 +import java.util.Collection;
  35 +import java.util.List;
  36 +import java.util.UUID;
46 37
47 38 import static org.apache.commons.lang3.StringUtils.isBlank;
48 39
... ...
dao/src/main/java/org/thingsboard/server/dao/timeseries/CassandraBaseTimeseriesDao.java renamed from dao/src/main/java/org/thingsboard/server/dao/timeseries/BaseTimeseriesDao.java
... ... @@ -28,8 +28,7 @@ import org.springframework.beans.factory.annotation.Value;
28 28 import org.springframework.stereotype.Component;
29 29 import org.thingsboard.server.common.data.kv.*;
30 30 import org.thingsboard.server.common.data.kv.DataType;
31   -import org.thingsboard.server.dao.AbstractAsyncDao;
32   -import org.thingsboard.server.dao.AbstractDao;
  31 +import org.thingsboard.server.dao.CassandraAbstractAsyncDao;
33 32 import org.thingsboard.server.dao.model.ModelConstants;
34 33
35 34 import javax.annotation.Nullable;
... ... @@ -38,20 +37,20 @@ import javax.annotation.PreDestroy;
38 37 import java.time.Instant;
39 38 import java.time.LocalDateTime;
40 39 import java.time.ZoneOffset;
41   -import java.util.*;
42   -import java.util.concurrent.ExecutorService;
43   -import java.util.concurrent.Executors;
  40 +import java.util.ArrayList;
  41 +import java.util.List;
  42 +import java.util.Optional;
  43 +import java.util.UUID;
44 44 import java.util.stream.Collectors;
45 45
46 46 import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;
47   -import static com.datastax.driver.core.querybuilder.QueryBuilder.select;
48 47
49 48 /**
50 49 * @author Andrew Shvayka
51 50 */
52 51 @Component
53 52 @Slf4j
54   -public class BaseTimeseriesDao extends AbstractAsyncDao implements TimeseriesDao {
  53 +public class CassandraBaseTimeseriesDao extends CassandraAbstractAsyncDao implements TimeseriesDao {
55 54
56 55 //@Value("${cassandra.query.min_aggregation_step_ms}")
57 56 //TODO:
... ...
... ... @@ -15,6 +15,7 @@
15 15 */
16 16 package org.thingsboard.server.dao.timeseries;
17 17
  18 +// CASSANDRA ???
18 19 import com.datastax.driver.core.ResultSetFuture;
19 20 import com.datastax.driver.core.Row;
20 21 import com.google.common.util.concurrent.ListenableFuture;
... ... @@ -22,8 +23,6 @@ import org.thingsboard.server.common.data.kv.TsKvEntry;
22 23 import org.thingsboard.server.common.data.kv.TsKvQuery;
23 24
24 25 import java.util.List;
25   -import java.util.Optional;
26   -import java.util.Set;
27 26 import java.util.UUID;
28 27
29 28 /**
... ...
... ... @@ -15,18 +15,17 @@
15 15 */
16 16 package org.thingsboard.server.dao.timeseries;
17 17
  18 +// CASSANDRA ???
18 19 import com.datastax.driver.core.ResultSet;
19 20 import com.datastax.driver.core.ResultSetFuture;
20 21 import com.datastax.driver.core.Row;
21 22 import com.google.common.util.concurrent.ListenableFuture;
22   -import org.thingsboard.server.common.data.id.DeviceId;
23 23 import org.thingsboard.server.common.data.id.UUIDBased;
24 24 import org.thingsboard.server.common.data.kv.TsKvEntry;
25 25 import org.thingsboard.server.common.data.kv.TsKvQuery;
26 26
27 27 import java.util.Collection;
28 28 import java.util.List;
29   -import java.util.Set;
30 29
31 30 /**
32 31 * @author Andrew Shvayka
... ...
... ... @@ -15,7 +15,6 @@
15 15 */
16 16 package org.thingsboard.server.dao.timeseries;
17 17
18   -import lombok.Data;
19 18 import lombok.Getter;
20 19 import org.thingsboard.server.common.data.kv.TsKvEntry;
21 20 import org.thingsboard.server.common.data.kv.TsKvQuery;
... ...
dao/src/main/java/org/thingsboard/server/dao/user/CassandraUserCredentialsDao.java renamed from dao/src/main/java/org/thingsboard/server/dao/user/UserCredentialsDaoImpl.java
... ... @@ -15,26 +15,23 @@
15 15 */
16 16 package org.thingsboard.server.dao.user;
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 19 import lombok.extern.slf4j.Slf4j;
24 20 import org.springframework.stereotype.Component;
25 21 import org.thingsboard.server.common.data.security.UserCredentials;
26   -import org.thingsboard.server.dao.AbstractModelDao;
  22 +import org.thingsboard.server.dao.CassandraAbstractModelDao;
  23 +import org.thingsboard.server.dao.DaoUtil;
  24 +import org.thingsboard.server.dao.model.ModelConstants;
27 25 import org.thingsboard.server.dao.model.UserCredentialsEntity;
28   -import org.slf4j.Logger;
29   -import org.slf4j.LoggerFactory;
30   -import org.springframework.stereotype.Repository;
31 26
32   -import com.datastax.driver.core.querybuilder.Select.Where;
33   -import org.thingsboard.server.dao.model.ModelConstants;
  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;
34 31
35 32 @Component
36 33 @Slf4j
37   -public class UserCredentialsDaoImpl extends AbstractModelDao<UserCredentialsEntity> implements UserCredentialsDao {
  34 +public class CassandraUserCredentialsDao extends CassandraAbstractModelDao<UserCredentialsEntity, UserCredentials> implements UserCredentialsDao {
38 35
39 36 @Override
40 37 protected Class<UserCredentialsEntity> getColumnFamilyClass() {
... ... @@ -47,41 +44,35 @@ public class UserCredentialsDaoImpl extends AbstractModelDao<UserCredentialsEnti
47 44 }
48 45
49 46 @Override
50   - public UserCredentialsEntity save(UserCredentials userCredentials) {
51   - log.debug("Save user credentials [{}] ", userCredentials);
52   - return save(new UserCredentialsEntity(userCredentials));
53   - }
54   -
55   - @Override
56   - public UserCredentialsEntity findByUserId(UUID userId) {
  47 + public UserCredentials findByUserId(UUID userId) {
57 48 log.debug("Try to find user credentials by userId [{}] ", userId);
58 49 Where query = select().from(ModelConstants.USER_CREDENTIALS_BY_USER_COLUMN_FAMILY_NAME).where(eq(ModelConstants.USER_CREDENTIALS_USER_ID_PROPERTY, userId));
59 50 log.trace("Execute query {}", query);
60 51 UserCredentialsEntity userCredentialsEntity = findOneByStatement(query);
61 52 log.trace("Found user credentials [{}] by userId [{}]", userCredentialsEntity, userId);
62   - return userCredentialsEntity;
  53 + return DaoUtil.getData(userCredentialsEntity);
63 54 }
64 55
65 56 @Override
66   - public UserCredentialsEntity findByActivateToken(String activateToken) {
  57 + public UserCredentials findByActivateToken(String activateToken) {
67 58 log.debug("Try to find user credentials by activateToken [{}] ", activateToken);
68 59 Where query = select().from(ModelConstants.USER_CREDENTIALS_BY_ACTIVATE_TOKEN_COLUMN_FAMILY_NAME)
69 60 .where(eq(ModelConstants.USER_CREDENTIALS_ACTIVATE_TOKEN_PROPERTY, activateToken));
70 61 log.trace("Execute query {}", query);
71 62 UserCredentialsEntity userCredentialsEntity = findOneByStatement(query);
72 63 log.trace("Found user credentials [{}] by activateToken [{}]", userCredentialsEntity, activateToken);
73   - return userCredentialsEntity;
  64 + return DaoUtil.getData(userCredentialsEntity);
74 65 }
75 66
76 67 @Override
77   - public UserCredentialsEntity findByResetToken(String resetToken) {
  68 + public UserCredentials findByResetToken(String resetToken) {
78 69 log.debug("Try to find user credentials by resetToken [{}] ", resetToken);
79 70 Where query = select().from(ModelConstants.USER_CREDENTIALS_BY_RESET_TOKEN_COLUMN_FAMILY_NAME)
80 71 .where(eq(ModelConstants.USER_CREDENTIALS_RESET_TOKEN_PROPERTY, resetToken));
81 72 log.trace("Execute query {}", query);
82 73 UserCredentialsEntity userCredentialsEntity = findOneByStatement(query);
83 74 log.trace("Found user credentials [{}] by resetToken [{}]", userCredentialsEntity, resetToken);
84   - return userCredentialsEntity;
  75 + return DaoUtil.getData(userCredentialsEntity);
85 76 }
86 77
87 78 }
... ...
dao/src/main/java/org/thingsboard/server/dao/user/CassandraUserDao.java renamed from dao/src/main/java/org/thingsboard/server/dao/user/UserDaoImpl.java
... ... @@ -15,29 +15,27 @@
15 15 */
16 16 package org.thingsboard.server.dao.user;
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.Arrays;
22   -import java.util.List;
23   -import java.util.UUID;
24   -
  18 +import com.datastax.driver.core.querybuilder.Select.Where;
25 19 import lombok.extern.slf4j.Slf4j;
26 20 import org.springframework.stereotype.Component;
27 21 import org.thingsboard.server.common.data.User;
28 22 import org.thingsboard.server.common.data.page.TextPageLink;
29 23 import org.thingsboard.server.common.data.security.Authority;
30   -import org.thingsboard.server.dao.AbstractSearchTextDao;
  24 +import org.thingsboard.server.dao.CassandraAbstractSearchTextDao;
  25 +import org.thingsboard.server.dao.DaoUtil;
  26 +import org.thingsboard.server.dao.model.ModelConstants;
31 27 import org.thingsboard.server.dao.model.UserEntity;
32   -import org.slf4j.Logger;
33   -import org.slf4j.LoggerFactory;
34 28
35   -import com.datastax.driver.core.querybuilder.Select.Where;
36   -import org.thingsboard.server.dao.model.ModelConstants;
  29 +import java.util.Arrays;
  30 +import java.util.List;
  31 +import java.util.UUID;
  32 +
  33 +import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;
  34 +import static com.datastax.driver.core.querybuilder.QueryBuilder.select;
37 35
38 36 @Component
39 37 @Slf4j
40   -public class UserDaoImpl extends AbstractSearchTextDao<UserEntity> implements UserDao {
  38 +public class CassandraUserDao extends CassandraAbstractSearchTextDao<UserEntity, User> implements UserDao {
41 39
42 40 @Override
43 41 protected Class<UserEntity> getColumnFamilyClass() {
... ... @@ -50,23 +48,17 @@ public class UserDaoImpl extends AbstractSearchTextDao<UserEntity> implements Us
50 48 }
51 49
52 50 @Override
53   - public UserEntity findByEmail(String email) {
  51 + public User findByEmail(String email) {
54 52 log.debug("Try to find user by email [{}] ", email);
55 53 Where query = select().from(ModelConstants.USER_BY_EMAIL_COLUMN_FAMILY_NAME).where(eq(ModelConstants.USER_EMAIL_PROPERTY, email));
56 54 log.trace("Execute query {}", query);
57 55 UserEntity userEntity = findOneByStatement(query);
58 56 log.trace("Found user [{}] by email [{}]", userEntity, email);
59   - return userEntity;
60   - }
61   -
62   - @Override
63   - public UserEntity save(User user) {
64   - log.debug("Save user [{}] ", user);
65   - return save(new UserEntity(user));
  57 + return DaoUtil.getData(userEntity);
66 58 }
67 59
68 60 @Override
69   - public List<UserEntity> findTenantAdmins(UUID tenantId, TextPageLink pageLink) {
  61 + public List<User> findTenantAdmins(UUID tenantId, TextPageLink pageLink) {
70 62 log.debug("Try to find tenant admin users by tenantId [{}] and pageLink [{}]", tenantId, pageLink);
71 63 List<UserEntity> userEntities = findPageWithTextSearch(ModelConstants.USER_BY_TENANT_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME,
72 64 Arrays.asList(eq(ModelConstants.USER_TENANT_ID_PROPERTY, tenantId),
... ... @@ -74,11 +66,11 @@ public class UserDaoImpl extends AbstractSearchTextDao<UserEntity> implements Us
74 66 eq(ModelConstants.USER_AUTHORITY_PROPERTY, Authority.TENANT_ADMIN.name())),
75 67 pageLink);
76 68 log.trace("Found tenant admin users [{}] by tenantId [{}] and pageLink [{}]", userEntities, tenantId, pageLink);
77   - return userEntities;
  69 + return DaoUtil.convertDataList(userEntities);
78 70 }
79 71
80 72 @Override
81   - public List<UserEntity> findCustomerUsers(UUID tenantId, UUID customerId, TextPageLink pageLink) {
  73 + public List<User> findCustomerUsers(UUID tenantId, UUID customerId, TextPageLink pageLink) {
82 74 log.debug("Try to find customer users by tenantId [{}], customerId [{}] and pageLink [{}]", tenantId, customerId, pageLink);
83 75 List<UserEntity> userEntities = findPageWithTextSearch(ModelConstants.USER_BY_CUSTOMER_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME,
84 76 Arrays.asList(eq(ModelConstants.USER_TENANT_ID_PROPERTY, tenantId),
... ... @@ -86,7 +78,7 @@ public class UserDaoImpl extends AbstractSearchTextDao<UserEntity> implements Us
86 78 eq(ModelConstants.USER_AUTHORITY_PROPERTY, Authority.CUSTOMER_USER.name())),
87 79 pageLink);
88 80 log.trace("Found customer users [{}] by tenantId [{}], customerId [{}] and pageLink [{}]", userEntities, tenantId, customerId, pageLink);
89   - return userEntities;
  81 + return DaoUtil.convertDataList(userEntities);
90 82 }
91 83
92 84 }
... ...
... ... @@ -15,18 +15,15 @@
15 15 */
16 16 package org.thingsboard.server.dao.user;
17 17
18   -import java.util.UUID;
19   -
20 18 import org.thingsboard.server.common.data.security.UserCredentials;
21 19 import org.thingsboard.server.dao.Dao;
22   -import org.thingsboard.server.dao.model.UserCredentialsEntity;
  20 +
  21 +import java.util.UUID;
23 22
24 23 /**
25 24 * The Interface UserCredentialsDao.
26   - *
27   - * @param <T> the generic type
28 25 */
29   -public interface UserCredentialsDao extends Dao<UserCredentialsEntity> {
  26 +public interface UserCredentialsDao extends Dao<UserCredentials> {
30 27
31 28 /**
32 29 * Save or update user credentials object
... ... @@ -34,7 +31,7 @@ public interface UserCredentialsDao extends Dao<UserCredentialsEntity> {
34 31 * @param userCredentials the user credentials object
35 32 * @return saved user credentials object
36 33 */
37   - UserCredentialsEntity save(UserCredentials userCredentials);
  34 + UserCredentials save(UserCredentials userCredentials);
38 35
39 36 /**
40 37 * Find user credentials by user id.
... ... @@ -42,22 +39,22 @@ public interface UserCredentialsDao extends Dao<UserCredentialsEntity> {
42 39 * @param userId the user id
43 40 * @return the user credentials object
44 41 */
45   - UserCredentialsEntity findByUserId(UUID userId);
46   -
  42 + UserCredentials findByUserId(UUID userId);
  43 +
47 44 /**
48 45 * Find user credentials by activate token.
49 46 *
50 47 * @param activateToken the activate token
51 48 * @return the user credentials object
52 49 */
53   - UserCredentialsEntity findByActivateToken(String activateToken);
54   -
  50 + UserCredentials findByActivateToken(String activateToken);
  51 +
55 52 /**
56 53 * Find user credentials by reset token.
57 54 *
58 55 * @param resetToken the reset token
59 56 * @return the user credentials object
60 57 */
61   - UserCredentialsEntity findByResetToken(String resetToken);
62   -
  58 + UserCredentials findByResetToken(String resetToken);
  59 +
63 60 }
... ...
... ... @@ -15,15 +15,14 @@
15 15 */
16 16 package org.thingsboard.server.dao.user;
17 17
18   -import java.util.List;
19   -import java.util.UUID;
20   -
21 18 import org.thingsboard.server.common.data.User;
22 19 import org.thingsboard.server.common.data.page.TextPageLink;
23 20 import org.thingsboard.server.dao.Dao;
24   -import org.thingsboard.server.dao.model.UserEntity;
25 21
26   -public interface UserDao extends Dao<UserEntity> {
  22 +import java.util.List;
  23 +import java.util.UUID;
  24 +
  25 +public interface UserDao extends Dao<User> {
27 26
28 27 /**
29 28 * Save or update user object
... ... @@ -31,7 +30,7 @@ public interface UserDao extends Dao<UserEntity> {
31 30 * @param user the user object
32 31 * @return saved user entity
33 32 */
34   - UserEntity save(User user);
  33 + User save(User user);
35 34
36 35 /**
37 36 * Find user by email.
... ... @@ -39,7 +38,7 @@ public interface UserDao extends Dao<UserEntity> {
39 38 * @param email the email
40 39 * @return the user entity
41 40 */
42   - UserEntity findByEmail(String email);
  41 + User findByEmail(String email);
43 42
44 43 /**
45 44 * Find tenant admin users by tenantId and page link.
... ... @@ -48,7 +47,7 @@ public interface UserDao extends Dao<UserEntity> {
48 47 * @param pageLink the page link
49 48 * @return the list of user entities
50 49 */
51   - List<UserEntity> findTenantAdmins(UUID tenantId, TextPageLink pageLink);
  50 + List<User> findTenantAdmins(UUID tenantId, TextPageLink pageLink);
52 51
53 52 /**
54 53 * Find customer users by tenantId, customerId and page link.
... ... @@ -58,6 +57,6 @@ public interface UserDao extends Dao<UserEntity> {
58 57 * @param pageLink the page link
59 58 * @return the list of user entities
60 59 */
61   - List<UserEntity> findCustomerUsers(UUID tenantId, UUID customerId, TextPageLink pageLink);
  60 + List<User> findCustomerUsers(UUID tenantId, UUID customerId, TextPageLink pageLink);
62 61
63 62 }
... ...
... ... @@ -25,32 +25,32 @@ import org.thingsboard.server.common.data.security.UserCredentials;
25 25
26 26 public interface UserService {
27 27
28   - public User findUserById(UserId userId);
  28 + User findUserById(UserId userId);
29 29
30   - public User findUserByEmail(String email);
  30 + User findUserByEmail(String email);
31 31
32   - public User saveUser(User user);
  32 + User saveUser(User user);
33 33
34   - public UserCredentials findUserCredentialsByUserId(UserId userId);
  34 + UserCredentials findUserCredentialsByUserId(UserId userId);
35 35
36   - public UserCredentials findUserCredentialsByActivateToken(String activateToken);
  36 + UserCredentials findUserCredentialsByActivateToken(String activateToken);
37 37
38   - public UserCredentials findUserCredentialsByResetToken(String resetToken);
  38 + UserCredentials findUserCredentialsByResetToken(String resetToken);
39 39
40   - public UserCredentials saveUserCredentials(UserCredentials userCredentials);
  40 + UserCredentials saveUserCredentials(UserCredentials userCredentials);
41 41
42   - public UserCredentials activateUserCredentials(String activateToken, String password);
  42 + UserCredentials activateUserCredentials(String activateToken, String password);
43 43
44   - public UserCredentials requestPasswordReset(String email);
  44 + UserCredentials requestPasswordReset(String email);
45 45
46   - public void deleteUser(UserId userId);
  46 + void deleteUser(UserId userId);
47 47
48   - public TextPageData<User> findTenantAdmins(TenantId tenantId, TextPageLink pageLink);
  48 + TextPageData<User> findTenantAdmins(TenantId tenantId, TextPageLink pageLink);
49 49
50   - public void deleteTenantAdmins(TenantId tenantId);
  50 + void deleteTenantAdmins(TenantId tenantId);
51 51
52   - public TextPageData<User> findCustomerUsers(TenantId tenantId, CustomerId customerId, TextPageLink pageLink);
  52 + TextPageData<User> findCustomerUsers(TenantId tenantId, CustomerId customerId, TextPageLink pageLink);
53 53
54   - public void deleteCustomerUsers(TenantId tenantId, CustomerId customerId);
  54 + void deleteCustomerUsers(TenantId tenantId, CustomerId customerId);
55 55
56 56 }
... ...
... ... @@ -15,17 +15,13 @@
15 15 */
16 16 package org.thingsboard.server.dao.user;
17 17
18   -import static org.thingsboard.server.dao.DaoUtil.convertDataList;
19   -import static org.thingsboard.server.dao.DaoUtil.getData;
20   -import static org.thingsboard.server.dao.service.Validator.validateId;
21   -import static org.thingsboard.server.dao.service.Validator.validatePageLink;
22   -import static org.thingsboard.server.dao.service.Validator.validateString;
23   -
24   -import java.util.List;
25   -
26 18 import lombok.extern.slf4j.Slf4j;
27 19 import org.apache.commons.lang3.RandomStringUtils;
28 20 import org.apache.commons.lang3.StringUtils;
  21 +import org.springframework.beans.factory.annotation.Autowired;
  22 +import org.springframework.stereotype.Service;
  23 +import org.thingsboard.server.common.data.Customer;
  24 +import org.thingsboard.server.common.data.Tenant;
29 25 import org.thingsboard.server.common.data.User;
30 26 import org.thingsboard.server.common.data.id.CustomerId;
31 27 import org.thingsboard.server.common.data.id.TenantId;
... ... @@ -37,19 +33,21 @@ import org.thingsboard.server.common.data.security.UserCredentials;
37 33 import org.thingsboard.server.dao.customer.CustomerDao;
38 34 import org.thingsboard.server.dao.exception.DataValidationException;
39 35 import org.thingsboard.server.dao.exception.IncorrectParameterException;
40   -import org.thingsboard.server.dao.model.*;
  36 +import org.thingsboard.server.dao.model.ModelConstants;
41 37 import org.thingsboard.server.dao.service.DataValidator;
42 38 import org.thingsboard.server.dao.service.PaginatedRemover;
43 39 import org.thingsboard.server.dao.tenant.TenantDao;
44   -import org.slf4j.Logger;
45   -import org.slf4j.LoggerFactory;
46   -import org.springframework.beans.factory.annotation.Autowired;
47   -import org.springframework.stereotype.Service;
  40 +
  41 +import java.util.List;
  42 +
  43 +import static org.thingsboard.server.dao.service.Validator.*;
48 44
49 45 @Service
50 46 @Slf4j
51 47 public class UserServiceImpl implements UserService {
52 48
  49 + private static final int DEFAULT_TOKEN_LENGTH = 30;
  50 +
53 51 @Autowired
54 52 private UserDao userDao;
55 53
... ... @@ -66,63 +64,57 @@ public class UserServiceImpl implements UserService {
66 64 public User findUserByEmail(String email) {
67 65 log.trace("Executing findUserByEmail [{}]", email);
68 66 validateString(email, "Incorrect email " + email);
69   - UserEntity userEntity = userDao.findByEmail(email);
70   - return getData(userEntity);
  67 + return userDao.findByEmail(email);
71 68 }
72 69
73 70 @Override
74 71 public User findUserById(UserId userId) {
75 72 log.trace("Executing findUserById [{}]", userId);
76 73 validateId(userId, "Incorrect userId " + userId);
77   - UserEntity userEntity = userDao.findById(userId.getId());
78   - return getData(userEntity);
  74 + return userDao.findById(userId.getId());
79 75 }
80 76
81 77 @Override
82 78 public User saveUser(User user) {
83 79 log.trace("Executing saveUser [{}]", user);
84 80 userValidator.validate(user);
85   - UserEntity userEntity = userDao.save(user);
  81 + User savedUser = userDao.save(user);
86 82 if (user.getId() == null) {
87 83 UserCredentials userCredentials = new UserCredentials();
88 84 userCredentials.setEnabled(false);
89   - userCredentials.setActivateToken(RandomStringUtils.randomAlphanumeric(30));
90   - userCredentials.setUserId(new UserId(userEntity.getId()));
  85 + userCredentials.setActivateToken(RandomStringUtils.randomAlphanumeric(DEFAULT_TOKEN_LENGTH));
  86 + userCredentials.setUserId(new UserId(savedUser.getUuidId()));
91 87 userCredentialsDao.save(userCredentials);
92 88 }
93   - return getData(userEntity);
  89 + return savedUser;
94 90 }
95 91
96 92 @Override
97 93 public UserCredentials findUserCredentialsByUserId(UserId userId) {
98 94 log.trace("Executing findUserCredentialsByUserId [{}]", userId);
99 95 validateId(userId, "Incorrect userId " + userId);
100   - UserCredentialsEntity userCredentialsEntity = userCredentialsDao.findByUserId(userId.getId());
101   - return getData(userCredentialsEntity);
  96 + return userCredentialsDao.findByUserId(userId.getId());
102 97 }
103 98
104 99 @Override
105 100 public UserCredentials findUserCredentialsByActivateToken(String activateToken) {
106 101 log.trace("Executing findUserCredentialsByActivateToken [{}]", activateToken);
107 102 validateString(activateToken, "Incorrect activateToken " + activateToken);
108   - UserCredentialsEntity userCredentialsEntity = userCredentialsDao.findByActivateToken(activateToken);
109   - return getData(userCredentialsEntity);
  103 + return userCredentialsDao.findByActivateToken(activateToken);
110 104 }
111 105
112 106 @Override
113 107 public UserCredentials findUserCredentialsByResetToken(String resetToken) {
114 108 log.trace("Executing findUserCredentialsByResetToken [{}]", resetToken);
115 109 validateString(resetToken, "Incorrect resetToken " + resetToken);
116   - UserCredentialsEntity userCredentialsEntity = userCredentialsDao.findByResetToken(resetToken);
117   - return getData(userCredentialsEntity);
  110 + return userCredentialsDao.findByResetToken(resetToken);
118 111 }
119 112
120 113 @Override
121 114 public UserCredentials saveUserCredentials(UserCredentials userCredentials) {
122 115 log.trace("Executing saveUserCredentials [{}]", userCredentials);
123 116 userCredentialsValidator.validate(userCredentials);
124   - UserCredentialsEntity userCredentialsEntity = userCredentialsDao.save(userCredentials);
125   - return getData(userCredentialsEntity);
  117 + return userCredentialsDao.save(userCredentials);
126 118 }
127 119
128 120 @Override
... ... @@ -130,11 +122,10 @@ public class UserServiceImpl implements UserService {
130 122 log.trace("Executing activateUserCredentials activateToken [{}], password [{}]", activateToken, password);
131 123 validateString(activateToken, "Incorrect activateToken " + activateToken);
132 124 validateString(password, "Incorrect password " + password);
133   - UserCredentialsEntity userCredentialsEntity = userCredentialsDao.findByActivateToken(activateToken);
134   - if (userCredentialsEntity == null) {
  125 + UserCredentials userCredentials = userCredentialsDao.findByActivateToken(activateToken);
  126 + if (userCredentials == null) {
135 127 throw new IncorrectParameterException(String.format("Unable to find user credentials by activateToken [%s]", activateToken));
136 128 }
137   - UserCredentials userCredentials = getData(userCredentialsEntity);
138 129 if (userCredentials.isEnabled()) {
139 130 throw new IncorrectParameterException("User credentials already activated");
140 131 }
... ... @@ -149,16 +140,15 @@ public class UserServiceImpl implements UserService {
149 140 public UserCredentials requestPasswordReset(String email) {
150 141 log.trace("Executing requestPasswordReset email [{}]", email);
151 142 validateString(email, "Incorrect email " + email);
152   - UserEntity userEntity = userDao.findByEmail(email);
153   - if (userEntity == null) {
  143 + User user = userDao.findByEmail(email);
  144 + if (user == null) {
154 145 throw new IncorrectParameterException(String.format("Unable to find user by email [%s]", email));
155 146 }
156   - UserCredentialsEntity userCredentialsEntity = userCredentialsDao.findByUserId(userEntity.getId());
157   - UserCredentials userCredentials = getData(userCredentialsEntity);
  147 + UserCredentials userCredentials = userCredentialsDao.findByUserId(user.getUuidId());
158 148 if (!userCredentials.isEnabled()) {
159 149 throw new IncorrectParameterException("Unable to reset password for inactive user");
160 150 }
161   - userCredentials.setResetToken(RandomStringUtils.randomAlphanumeric(30));
  151 + userCredentials.setResetToken(RandomStringUtils.randomAlphanumeric(DEFAULT_TOKEN_LENGTH));
162 152 return saveUserCredentials(userCredentials);
163 153 }
164 154
... ... @@ -167,8 +157,8 @@ public class UserServiceImpl implements UserService {
167 157 public void deleteUser(UserId userId) {
168 158 log.trace("Executing deleteUser [{}]", userId);
169 159 validateId(userId, "Incorrect userId " + userId);
170   - UserCredentialsEntity userCredentialsEntity = userCredentialsDao.findByUserId(userId.getId());
171   - userCredentialsDao.removeById(userCredentialsEntity.getId());
  160 + UserCredentials userCredentials = userCredentialsDao.findByUserId(userId.getId());
  161 + userCredentialsDao.removeById(userCredentials.getUuidId());
172 162 userDao.removeById(userId.getId());
173 163 }
174 164
... ... @@ -177,9 +167,8 @@ public class UserServiceImpl implements UserService {
177 167 log.trace("Executing findTenantAdmins, tenantId [{}], pageLink [{}]", tenantId, pageLink);
178 168 validateId(tenantId, "Incorrect tenantId " + tenantId);
179 169 validatePageLink(pageLink, "Incorrect page link " + pageLink);
180   - List<UserEntity> userEntities = userDao.findTenantAdmins(tenantId.getId(), pageLink);
181   - List<User> users = convertDataList(userEntities);
182   - return new TextPageData<User>(users, pageLink);
  170 + List<User> users = userDao.findTenantAdmins(tenantId.getId(), pageLink);
  171 + return new TextPageData<>(users, pageLink);
183 172 }
184 173
185 174 @Override
... ... @@ -195,9 +184,8 @@ public class UserServiceImpl implements UserService {
195 184 validateId(tenantId, "Incorrect tenantId " + tenantId);
196 185 validateId(customerId, "Incorrect customerId " + customerId);
197 186 validatePageLink(pageLink, "Incorrect page link " + pageLink);
198   - List<UserEntity> userEntities = userDao.findCustomerUsers(tenantId.getId(), customerId.getId(), pageLink);
199   - List<User> users = convertDataList(userEntities);
200   - return new TextPageData<User>(users, pageLink);
  187 + List<User> users = userDao.findCustomerUsers(tenantId.getId(), customerId.getId(), pageLink);
  188 + return new TextPageData<>(users, pageLink);
201 189 }
202 190
203 191 @Override
... ... @@ -266,16 +254,16 @@ public class UserServiceImpl implements UserService {
266 254 + " already present in database!");
267 255 }
268 256 if (!tenantId.getId().equals(ModelConstants.NULL_UUID)) {
269   - TenantEntity tenant = tenantDao.findById(user.getTenantId().getId());
  257 + Tenant tenant = tenantDao.findById(user.getTenantId().getId());
270 258 if (tenant == null) {
271 259 throw new DataValidationException("User is referencing to non-existent tenant!");
272 260 }
273 261 }
274 262 if (!customerId.getId().equals(ModelConstants.NULL_UUID)) {
275   - CustomerEntity customer = customerDao.findById(user.getCustomerId().getId());
  263 + Customer customer = customerDao.findById(user.getCustomerId().getId());
276 264 if (customer == null) {
277 265 throw new DataValidationException("User is referencing to non-existent customer!");
278   - } else if (!customer.getTenantId().equals(tenantId.getId())) {
  266 + } else if (!customer.getTenantId().getId().equals(tenantId.getId())) {
279 267 throw new DataValidationException("User can't be assigned to customer from different tenant!");
280 268 }
281 269 }
... ... @@ -303,7 +291,7 @@ public class UserServiceImpl implements UserService {
303 291 throw new DataValidationException("Enabled user credentials can't have activate token!");
304 292 }
305 293 }
306   - UserCredentialsEntity existingUserCredentialsEntity = userCredentialsDao.findById(userCredentials.getId().getId());
  294 + UserCredentials existingUserCredentialsEntity = userCredentialsDao.findById(userCredentials.getId().getId());
307 295 if (existingUserCredentialsEntity == null) {
308 296 throw new DataValidationException("Unable to update non-existent user credentials!");
309 297 }
... ... @@ -314,21 +302,21 @@ public class UserServiceImpl implements UserService {
314 302 }
315 303 };
316 304
317   - private PaginatedRemover<TenantId, UserEntity> tenantAdminsRemover =
318   - new PaginatedRemover<TenantId, UserEntity>() {
  305 + private PaginatedRemover<TenantId, User> tenantAdminsRemover =
  306 + new PaginatedRemover<TenantId, User>() {
319 307
320 308 @Override
321   - protected List<UserEntity> findEntities(TenantId id, TextPageLink pageLink) {
  309 + protected List<User> findEntities(TenantId id, TextPageLink pageLink) {
322 310 return userDao.findTenantAdmins(id.getId(), pageLink);
323 311 }
324 312
325 313 @Override
326   - protected void removeEntity(UserEntity entity) {
327   - deleteUser(new UserId(entity.getId()));
  314 + protected void removeEntity(User entity) {
  315 + deleteUser(new UserId(entity.getUuidId()));
328 316 }
329 317 };
330 318
331   - class CustomerUsersRemover extends PaginatedRemover<CustomerId, UserEntity> {
  319 + private class CustomerUsersRemover extends PaginatedRemover<CustomerId, User> {
332 320
333 321 private TenantId tenantId;
334 322
... ... @@ -337,14 +325,14 @@ public class UserServiceImpl implements UserService {
337 325 }
338 326
339 327 @Override
340   - protected List<UserEntity> findEntities(CustomerId id, TextPageLink pageLink) {
  328 + protected List<User> findEntities(CustomerId id, TextPageLink pageLink) {
341 329 return userDao.findCustomerUsers(tenantId.getId(), id.getId(), pageLink);
342 330
343 331 }
344 332
345 333 @Override
346   - protected void removeEntity(UserEntity entity) {
347   - deleteUser(new UserId(entity.getId()));
  334 + protected void removeEntity(User entity) {
  335 + deleteUser(new UserId(entity.getUuidId()));
348 336 }
349 337
350 338 }
... ...
dao/src/main/java/org/thingsboard/server/dao/widget/CassandraWidgetTypeDao.java renamed from dao/src/main/java/org/thingsboard/server/dao/widget/WidgetTypeDaoImpl.java
... ... @@ -17,12 +17,10 @@ package org.thingsboard.server.dao.widget;
17 17
18 18 import com.datastax.driver.core.querybuilder.Select.Where;
19 19 import lombok.extern.slf4j.Slf4j;
20   -import org.slf4j.Logger;
21   -import org.slf4j.LoggerFactory;
22 20 import org.springframework.stereotype.Component;
23   -import org.springframework.stereotype.Repository;
24 21 import org.thingsboard.server.common.data.widget.WidgetType;
25   -import org.thingsboard.server.dao.AbstractModelDao;
  22 +import org.thingsboard.server.dao.CassandraAbstractModelDao;
  23 +import org.thingsboard.server.dao.DaoUtil;
26 24 import org.thingsboard.server.dao.model.WidgetTypeEntity;
27 25
28 26 import java.util.List;
... ... @@ -34,7 +32,7 @@ import static org.thingsboard.server.dao.model.ModelConstants.*;
34 32
35 33 @Component
36 34 @Slf4j
37   -public class WidgetTypeDaoImpl extends AbstractModelDao<WidgetTypeEntity> implements WidgetTypeDao {
  35 +public class CassandraWidgetTypeDao extends CassandraAbstractModelDao<WidgetTypeEntity, WidgetType> implements WidgetTypeDao {
38 36
39 37 @Override
40 38 protected Class<WidgetTypeEntity> getColumnFamilyClass() {
... ... @@ -47,13 +45,7 @@ public class WidgetTypeDaoImpl extends AbstractModelDao<WidgetTypeEntity> implem
47 45 }
48 46
49 47 @Override
50   - public WidgetTypeEntity save(WidgetType widgetType) {
51   - log.debug("Save widget type [{}] ", widgetType);
52   - return save(new WidgetTypeEntity(widgetType));
53   - }
54   -
55   - @Override
56   - public List<WidgetTypeEntity> findWidgetTypesByTenantIdAndBundleAlias(UUID tenantId, String bundleAlias) {
  48 + public List<WidgetType> findWidgetTypesByTenantIdAndBundleAlias(UUID tenantId, String bundleAlias) {
57 49 log.debug("Try to find widget types by tenantId [{}] and bundleAlias [{}]", tenantId, bundleAlias);
58 50 Where query = select().from(WIDGET_TYPE_BY_TENANT_AND_ALIASES_COLUMN_FAMILY_NAME)
59 51 .where()
... ... @@ -61,11 +53,11 @@ public class WidgetTypeDaoImpl extends AbstractModelDao<WidgetTypeEntity> implem
61 53 .and(eq(WIDGET_TYPE_BUNDLE_ALIAS_PROPERTY, bundleAlias));
62 54 List<WidgetTypeEntity> widgetTypesEntities = findListByStatement(query);
63 55 log.trace("Found widget types [{}] by tenantId [{}] and bundleAlias [{}]", widgetTypesEntities, tenantId, bundleAlias);
64   - return widgetTypesEntities;
  56 + return DaoUtil.convertDataList(widgetTypesEntities);
65 57 }
66 58
67 59 @Override
68   - public WidgetTypeEntity findByTenantIdBundleAliasAndAlias(UUID tenantId, String bundleAlias, String alias) {
  60 + public WidgetType findByTenantIdBundleAliasAndAlias(UUID tenantId, String bundleAlias, String alias) {
69 61 log.debug("Try to find widget type by tenantId [{}], bundleAlias [{}] and alias [{}]", tenantId, bundleAlias, alias);
70 62 Where query = select().from(WIDGET_TYPE_BY_TENANT_AND_ALIASES_COLUMN_FAMILY_NAME)
71 63 .where()
... ... @@ -76,7 +68,7 @@ public class WidgetTypeDaoImpl extends AbstractModelDao<WidgetTypeEntity> implem
76 68 WidgetTypeEntity widgetTypeEntity = findOneByStatement(query);
77 69 log.trace("Found widget type [{}] by tenantId [{}], bundleAlias [{}] and alias [{}]",
78 70 widgetTypeEntity, tenantId, bundleAlias, alias);
79   - return widgetTypeEntity;
  71 + return DaoUtil.getData(widgetTypeEntity);
80 72 }
81 73
82 74 }
... ...
dao/src/main/java/org/thingsboard/server/dao/widget/CassandraWidgetsBundleDao.java renamed from dao/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleDaoImpl.java
... ... @@ -17,26 +17,23 @@ package org.thingsboard.server.dao.widget;
17 17
18 18 import com.datastax.driver.core.querybuilder.Select;
19 19 import lombok.extern.slf4j.Slf4j;
20   -import org.slf4j.Logger;
21   -import org.slf4j.LoggerFactory;
22 20 import org.springframework.stereotype.Component;
23 21 import org.thingsboard.server.common.data.page.TextPageLink;
24 22 import org.thingsboard.server.common.data.widget.WidgetsBundle;
25   -import org.thingsboard.server.dao.AbstractSearchTextDao;
  23 +import org.thingsboard.server.dao.CassandraAbstractSearchTextDao;
  24 +import org.thingsboard.server.dao.DaoUtil;
26 25 import org.thingsboard.server.dao.model.WidgetsBundleEntity;
27 26
28 27 import java.util.Arrays;
29 28 import java.util.List;
30 29 import java.util.UUID;
31 30
32   -import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;
33   -import static com.datastax.driver.core.querybuilder.QueryBuilder.in;
34   -import static com.datastax.driver.core.querybuilder.QueryBuilder.select;
  31 +import static com.datastax.driver.core.querybuilder.QueryBuilder.*;
35 32 import static org.thingsboard.server.dao.model.ModelConstants.*;
36 33
37 34 @Component
38 35 @Slf4j
39   -public class WidgetsBundleDaoImpl extends AbstractSearchTextDao<WidgetsBundleEntity> implements WidgetsBundleDao {
  36 +public class CassandraWidgetsBundleDao extends CassandraAbstractSearchTextDao<WidgetsBundleEntity, WidgetsBundle> implements WidgetsBundleDao {
40 37
41 38 @Override
42 39 protected Class<WidgetsBundleEntity> getColumnFamilyClass() {
... ... @@ -49,13 +46,7 @@ public class WidgetsBundleDaoImpl extends AbstractSearchTextDao<WidgetsBundleEnt
49 46 }
50 47
51 48 @Override
52   - public WidgetsBundleEntity save(WidgetsBundle widgetsBundle) {
53   - log.debug("Save widgets bundle [{}] ", widgetsBundle);
54   - return save(new WidgetsBundleEntity(widgetsBundle));
55   - }
56   -
57   - @Override
58   - public WidgetsBundleEntity findWidgetsBundleByTenantIdAndAlias(UUID tenantId, String alias) {
  49 + public WidgetsBundle findWidgetsBundleByTenantIdAndAlias(UUID tenantId, String alias) {
59 50 log.debug("Try to find widgets bundle by tenantId [{}] and alias [{}]", tenantId, alias);
60 51 Select.Where query = select().from(WIDGETS_BUNDLE_BY_TENANT_AND_ALIAS_COLUMN_FAMILY_NAME)
61 52 .where()
... ... @@ -65,37 +56,37 @@ public class WidgetsBundleDaoImpl extends AbstractSearchTextDao<WidgetsBundleEnt
65 56 WidgetsBundleEntity widgetsBundleEntity = findOneByStatement(query);
66 57 log.trace("Found widgets bundle [{}] by tenantId [{}] and alias [{}]",
67 58 widgetsBundleEntity, tenantId, alias);
68   - return widgetsBundleEntity;
  59 + return DaoUtil.getData(widgetsBundleEntity);
69 60 }
70 61
71 62 @Override
72   - public List<WidgetsBundleEntity> findSystemWidgetsBundles(TextPageLink pageLink) {
  63 + public List<WidgetsBundle> findSystemWidgetsBundles(TextPageLink pageLink) {
73 64 log.debug("Try to find system widgets bundles by pageLink [{}]", pageLink);
74 65 List<WidgetsBundleEntity> widgetsBundlesEntities = findPageWithTextSearch(WIDGETS_BUNDLE_BY_TENANT_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME,
75 66 Arrays.asList(eq(WIDGETS_BUNDLE_TENANT_ID_PROPERTY, NULL_UUID)),
76 67 pageLink);
77 68 log.trace("Found system widgets bundles [{}] by pageLink [{}]", widgetsBundlesEntities, pageLink);
78   - return widgetsBundlesEntities;
  69 + return DaoUtil.convertDataList(widgetsBundlesEntities);
79 70 }
80 71
81 72 @Override
82   - public List<WidgetsBundleEntity> findTenantWidgetsBundlesByTenantId(UUID tenantId, TextPageLink pageLink) {
  73 + public List<WidgetsBundle> findTenantWidgetsBundlesByTenantId(UUID tenantId, TextPageLink pageLink) {
83 74 log.debug("Try to find tenant widgets bundles by tenantId [{}] and pageLink [{}]", tenantId, pageLink);
84 75 List<WidgetsBundleEntity> widgetsBundlesEntities = findPageWithTextSearch(WIDGETS_BUNDLE_BY_TENANT_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME,
85 76 Arrays.asList(eq(WIDGETS_BUNDLE_TENANT_ID_PROPERTY, tenantId)),
86 77 pageLink);
87 78 log.trace("Found tenant widgets bundles [{}] by tenantId [{}] and pageLink [{}]", widgetsBundlesEntities, tenantId, pageLink);
88   - return widgetsBundlesEntities;
  79 + return DaoUtil.convertDataList(widgetsBundlesEntities);
89 80 }
90 81
91 82 @Override
92   - public List<WidgetsBundleEntity> findAllTenantWidgetsBundlesByTenantId(UUID tenantId, TextPageLink pageLink) {
  83 + public List<WidgetsBundle> findAllTenantWidgetsBundlesByTenantId(UUID tenantId, TextPageLink pageLink) {
93 84 log.debug("Try to find all tenant widgets bundles by tenantId [{}] and pageLink [{}]", tenantId, pageLink);
94 85 List<WidgetsBundleEntity> widgetsBundlesEntities = findPageWithTextSearch(WIDGETS_BUNDLE_BY_TENANT_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME,
95 86 Arrays.asList(in(WIDGETS_BUNDLE_TENANT_ID_PROPERTY, Arrays.asList(NULL_UUID, tenantId))),
96 87 pageLink);
97 88 log.trace("Found all tenant widgets bundles [{}] by tenantId [{}] and pageLink [{}]", widgetsBundlesEntities, tenantId, pageLink);
98   - return widgetsBundlesEntities;
  89 + return DaoUtil.convertDataList(widgetsBundlesEntities);
99 90 }
100 91
101 92 }
... ...
... ... @@ -17,17 +17,14 @@ package org.thingsboard.server.dao.widget;
17 17
18 18 import org.thingsboard.server.common.data.widget.WidgetType;
19 19 import org.thingsboard.server.dao.Dao;
20   -import org.thingsboard.server.dao.model.WidgetTypeEntity;
21 20
22 21 import java.util.List;
23 22 import java.util.UUID;
24 23
25 24 /**
26 25 * The Interface WidgetTypeDao.
27   - *
28   - * @param <T> the generic type
29 26 */
30   -public interface WidgetTypeDao extends Dao<WidgetTypeEntity> {
  27 +public interface WidgetTypeDao extends Dao<WidgetType> {
31 28
32 29 /**
33 30 * Save or update widget type object
... ... @@ -35,7 +32,7 @@ public interface WidgetTypeDao extends Dao<WidgetTypeEntity> {
35 32 * @param widgetType the widget type object
36 33 * @return saved widget type object
37 34 */
38   - WidgetTypeEntity save(WidgetType widgetType);
  35 + WidgetType save(WidgetType widgetType);
39 36
40 37 /**
41 38 * Find widget types by tenantId and bundleAlias.
... ... @@ -44,7 +41,7 @@ public interface WidgetTypeDao extends Dao<WidgetTypeEntity> {
44 41 * @param bundleAlias the bundle alias
45 42 * @return the list of widget types objects
46 43 */
47   - List<WidgetTypeEntity> findWidgetTypesByTenantIdAndBundleAlias(UUID tenantId, String bundleAlias);
  44 + List<WidgetType> findWidgetTypesByTenantIdAndBundleAlias(UUID tenantId, String bundleAlias);
48 45
49 46 /**
50 47 * Find widget type by tenantId, bundleAlias and alias.
... ... @@ -54,6 +51,6 @@ public interface WidgetTypeDao extends Dao<WidgetTypeEntity> {
54 51 * @param alias the alias
55 52 * @return the widget type object
56 53 */
57   - WidgetTypeEntity findByTenantIdBundleAliasAndAlias(UUID tenantId, String bundleAlias, String alias);
  54 + WidgetType findByTenantIdBundleAliasAndAlias(UUID tenantId, String bundleAlias, String alias);
58 55
59 56 }
... ...
... ... @@ -23,16 +23,16 @@ import java.util.List;
23 23
24 24 public interface WidgetTypeService {
25 25
26   - public WidgetType findWidgetTypeById(WidgetTypeId widgetTypeId);
  26 + WidgetType findWidgetTypeById(WidgetTypeId widgetTypeId);
27 27
28   - public WidgetType saveWidgetType(WidgetType widgetType);
  28 + WidgetType saveWidgetType(WidgetType widgetType);
29 29
30   - public void deleteWidgetType(WidgetTypeId widgetTypeId);
  30 + void deleteWidgetType(WidgetTypeId widgetTypeId);
31 31
32   - public List<WidgetType> findWidgetTypesByTenantIdAndBundleAlias(TenantId tenantId, String bundleAlias);
  32 + List<WidgetType> findWidgetTypesByTenantIdAndBundleAlias(TenantId tenantId, String bundleAlias);
33 33
34   - public WidgetType findWidgetTypeByTenantIdBundleAliasAndAlias(TenantId tenantId, String bundleAlias, String alias);
  34 + WidgetType findWidgetTypeByTenantIdBundleAliasAndAlias(TenantId tenantId, String bundleAlias, String alias);
35 35
36   - public void deleteWidgetTypesByTenantIdAndBundleAlias(TenantId tenantId, String bundleAlias);
  36 + void deleteWidgetTypesByTenantIdAndBundleAlias(TenantId tenantId, String bundleAlias);
37 37
38 38 }
... ...
... ... @@ -17,8 +17,6 @@ package org.thingsboard.server.dao.widget;
17 17
18 18 import lombok.extern.slf4j.Slf4j;
19 19 import org.apache.commons.lang3.StringUtils;
20   -import org.slf4j.Logger;
21   -import org.slf4j.LoggerFactory;
22 20 import org.springframework.beans.factory.annotation.Autowired;
23 21 import org.springframework.stereotype.Service;
24 22 import org.thingsboard.server.common.data.Tenant;
... ... @@ -28,19 +26,12 @@ import org.thingsboard.server.common.data.widget.WidgetType;
28 26 import org.thingsboard.server.common.data.widget.WidgetsBundle;
29 27 import org.thingsboard.server.dao.exception.DataValidationException;
30 28 import org.thingsboard.server.dao.model.ModelConstants;
31   -import org.thingsboard.server.dao.model.TenantEntity;
32   -import org.thingsboard.server.dao.model.WidgetTypeEntity;
33   -import org.thingsboard.server.dao.model.WidgetsBundleEntity;
34 29 import org.thingsboard.server.dao.service.DataValidator;
35 30 import org.thingsboard.server.dao.service.Validator;
36 31 import org.thingsboard.server.dao.tenant.TenantDao;
37   -import org.thingsboard.server.dao.tenant.TenantService;
38 32
39 33 import java.util.List;
40 34
41   -import static org.thingsboard.server.dao.DaoUtil.convertDataList;
42   -import static org.thingsboard.server.dao.DaoUtil.getData;
43   -
44 35 @Service
45 36 @Slf4j
46 37 public class WidgetTypeServiceImpl implements WidgetTypeService {
... ... @@ -58,16 +49,14 @@ public class WidgetTypeServiceImpl implements WidgetTypeService {
58 49 public WidgetType findWidgetTypeById(WidgetTypeId widgetTypeId) {
59 50 log.trace("Executing findWidgetTypeById [{}]", widgetTypeId);
60 51 Validator.validateId(widgetTypeId, "Incorrect widgetTypeId " + widgetTypeId);
61   - WidgetTypeEntity widgetTypeEntity = widgetTypeDao.findById(widgetTypeId.getId());
62   - return getData(widgetTypeEntity);
  52 + return widgetTypeDao.findById(widgetTypeId.getId());
63 53 }
64 54
65 55 @Override
66 56 public WidgetType saveWidgetType(WidgetType widgetType) {
67 57 log.trace("Executing saveWidgetType [{}]", widgetType);
68 58 widgetTypeValidator.validate(widgetType);
69   - WidgetTypeEntity widgetTypeEntity = widgetTypeDao.save(widgetType);
70   - return getData(widgetTypeEntity);
  59 + return widgetTypeDao.save(widgetType);
71 60 }
72 61
73 62 @Override
... ... @@ -82,8 +71,7 @@ public class WidgetTypeServiceImpl implements WidgetTypeService {
82 71 log.trace("Executing findWidgetTypesByTenantIdAndBundleAlias, tenantId [{}], bundleAlias [{}]", tenantId, bundleAlias);
83 72 Validator.validateId(tenantId, "Incorrect tenantId " + tenantId);
84 73 Validator.validateString(bundleAlias, "Incorrect bundleAlias " + bundleAlias);
85   - List<WidgetTypeEntity> widgetTypesEntities = widgetTypeDao.findWidgetTypesByTenantIdAndBundleAlias(tenantId.getId(), bundleAlias);
86   - return convertDataList(widgetTypesEntities);
  74 + return widgetTypeDao.findWidgetTypesByTenantIdAndBundleAlias(tenantId.getId(), bundleAlias);
87 75 }
88 76
89 77 @Override
... ... @@ -92,8 +80,7 @@ public class WidgetTypeServiceImpl implements WidgetTypeService {
92 80 Validator.validateId(tenantId, "Incorrect tenantId " + tenantId);
93 81 Validator.validateString(bundleAlias, "Incorrect bundleAlias " + bundleAlias);
94 82 Validator.validateString(alias, "Incorrect alias " + alias);
95   - WidgetTypeEntity widgetTypeEntity = widgetTypeDao.findByTenantIdBundleAliasAndAlias(tenantId.getId(), bundleAlias, alias);
96   - return getData(widgetTypeEntity);
  83 + return widgetTypeDao.findByTenantIdBundleAliasAndAlias(tenantId.getId(), bundleAlias, alias);
97 84 }
98 85
99 86 @Override
... ... @@ -101,9 +88,9 @@ public class WidgetTypeServiceImpl implements WidgetTypeService {
101 88 log.trace("Executing deleteWidgetTypesByTenantIdAndBundleAlias, tenantId [{}], bundleAlias [{}]", tenantId, bundleAlias);
102 89 Validator.validateId(tenantId, "Incorrect tenantId " + tenantId);
103 90 Validator.validateString(bundleAlias, "Incorrect bundleAlias " + bundleAlias);
104   - List<WidgetTypeEntity> widgetTypesEntities = widgetTypeDao.findWidgetTypesByTenantIdAndBundleAlias(tenantId.getId(), bundleAlias);
105   - for (WidgetTypeEntity widgetTypeEntity : widgetTypesEntities) {
106   - deleteWidgetType(new WidgetTypeId(widgetTypeEntity.getId()));
  91 + List<WidgetType> widgetTypes = widgetTypeDao.findWidgetTypesByTenantIdAndBundleAlias(tenantId.getId(), bundleAlias);
  92 + for (WidgetType widgetType : widgetTypes) {
  93 + deleteWidgetType(new WidgetTypeId(widgetType.getUuidId()));
107 94 }
108 95 }
109 96
... ... @@ -124,7 +111,7 @@ public class WidgetTypeServiceImpl implements WidgetTypeService {
124 111 widgetType.setTenantId(new TenantId(ModelConstants.NULL_UUID));
125 112 }
126 113 if (!widgetType.getTenantId().getId().equals(ModelConstants.NULL_UUID)) {
127   - TenantEntity tenant = tenantDao.findById(widgetType.getTenantId().getId());
  114 + Tenant tenant = tenantDao.findById(widgetType.getTenantId().getId());
128 115 if (tenant == null) {
129 116 throw new DataValidationException("Widget type is referencing to non-existent tenant!");
130 117 }
... ... @@ -133,8 +120,7 @@ public class WidgetTypeServiceImpl implements WidgetTypeService {
133 120
134 121 @Override
135 122 protected void validateCreate(WidgetType widgetType) {
136   -
137   - WidgetsBundleEntity widgetsBundle = widgetsBundleService.findWidgetsBundleByTenantIdAndAlias(widgetType.getTenantId().getId(), widgetType.getBundleAlias());
  123 + WidgetsBundle widgetsBundle = widgetsBundleService.findWidgetsBundleByTenantIdAndAlias(widgetType.getTenantId().getId(), widgetType.getBundleAlias());
138 124 if (widgetsBundle == null) {
139 125 throw new DataValidationException("Widget type is referencing to non-existent widgets bundle!");
140 126 }
... ... @@ -142,7 +128,7 @@ public class WidgetTypeServiceImpl implements WidgetTypeService {
142 128 String alias = widgetType.getName().toLowerCase().replaceAll("\\W+", "_");
143 129 String originalAlias = alias;
144 130 int c = 1;
145   - WidgetTypeEntity withSameAlias;
  131 + WidgetType withSameAlias;
146 132 do {
147 133 withSameAlias = widgetTypeDao.findByTenantIdBundleAliasAndAlias(widgetType.getTenantId().getId(), widgetType.getBundleAlias(), alias);
148 134 if (withSameAlias != null) {
... ... @@ -154,8 +140,8 @@ public class WidgetTypeServiceImpl implements WidgetTypeService {
154 140
155 141 @Override
156 142 protected void validateUpdate(WidgetType widgetType) {
157   - WidgetTypeEntity storedWidgetType = widgetTypeDao.findById(widgetType.getId().getId());
158   - if (!storedWidgetType.getTenantId().equals(widgetType.getTenantId().getId())) {
  143 + WidgetType storedWidgetType = widgetTypeDao.findById(widgetType.getId().getId());
  144 + if (!storedWidgetType.getTenantId().getId().equals(widgetType.getTenantId().getId())) {
159 145 throw new DataValidationException("Can't move existing widget type to different tenant!");
160 146 }
161 147 if (!storedWidgetType.getBundleAlias().equals(widgetType.getBundleAlias())) {
... ...
... ... @@ -18,17 +18,14 @@ package org.thingsboard.server.dao.widget;
18 18 import org.thingsboard.server.common.data.page.TextPageLink;
19 19 import org.thingsboard.server.common.data.widget.WidgetsBundle;
20 20 import org.thingsboard.server.dao.Dao;
21   -import org.thingsboard.server.dao.model.WidgetsBundleEntity;
22 21
23 22 import java.util.List;
24 23 import java.util.UUID;
25 24
26 25 /**
27 26 * The Interface WidgetsBundleDao.
28   - *
29   - * @param <T> the generic type
30 27 */
31   -public interface WidgetsBundleDao extends Dao<WidgetsBundleEntity> {
  28 +public interface WidgetsBundleDao extends Dao<WidgetsBundle> {
32 29
33 30 /**
34 31 * Save or update widgets bundle object
... ... @@ -36,7 +33,7 @@ public interface WidgetsBundleDao extends Dao<WidgetsBundleEntity> {
36 33 * @param widgetsBundle the widgets bundle object
37 34 * @return saved widgets bundle object
38 35 */
39   - WidgetsBundleEntity save(WidgetsBundle widgetsBundle);
  36 + WidgetsBundle save(WidgetsBundle widgetsBundle);
40 37
41 38 /**
42 39 * Find widgets bundle by tenantId and alias.
... ... @@ -45,7 +42,7 @@ public interface WidgetsBundleDao extends Dao<WidgetsBundleEntity> {
45 42 * @param alias the alias
46 43 * @return the widgets bundle object
47 44 */
48   - WidgetsBundleEntity findWidgetsBundleByTenantIdAndAlias(UUID tenantId, String alias);
  45 + WidgetsBundle findWidgetsBundleByTenantIdAndAlias(UUID tenantId, String alias);
49 46
50 47 /**
51 48 * Find system widgets bundles by page link.
... ... @@ -53,7 +50,7 @@ public interface WidgetsBundleDao extends Dao<WidgetsBundleEntity> {
53 50 * @param pageLink the page link
54 51 * @return the list of widgets bundles objects
55 52 */
56   - List<WidgetsBundleEntity> findSystemWidgetsBundles(TextPageLink pageLink);
  53 + List<WidgetsBundle> findSystemWidgetsBundles(TextPageLink pageLink);
57 54
58 55 /**
59 56 * Find tenant widgets bundles by tenantId and page link.
... ... @@ -62,7 +59,7 @@ public interface WidgetsBundleDao extends Dao<WidgetsBundleEntity> {
62 59 * @param pageLink the page link
63 60 * @return the list of widgets bundles objects
64 61 */
65   - List<WidgetsBundleEntity> findTenantWidgetsBundlesByTenantId(UUID tenantId, TextPageLink pageLink);
  62 + List<WidgetsBundle> findTenantWidgetsBundlesByTenantId(UUID tenantId, TextPageLink pageLink);
66 63
67 64 /**
68 65 * Find all tenant widgets bundles (including system) by tenantId and page link.
... ... @@ -71,7 +68,7 @@ public interface WidgetsBundleDao extends Dao<WidgetsBundleEntity> {
71 68 * @param pageLink the page link
72 69 * @return the list of widgets bundles objects
73 70 */
74   - List<WidgetsBundleEntity> findAllTenantWidgetsBundlesByTenantId(UUID tenantId, TextPageLink pageLink);
  71 + List<WidgetsBundle> findAllTenantWidgetsBundlesByTenantId(UUID tenantId, TextPageLink pageLink);
75 72
76 73 }
77 74
... ...
... ... @@ -25,24 +25,24 @@ import java.util.List;
25 25
26 26 public interface WidgetsBundleService {
27 27
28   - public WidgetsBundle findWidgetsBundleById(WidgetsBundleId widgetsBundleId);
  28 + WidgetsBundle findWidgetsBundleById(WidgetsBundleId widgetsBundleId);
29 29
30   - public WidgetsBundle saveWidgetsBundle(WidgetsBundle widgetsBundle);
  30 + WidgetsBundle saveWidgetsBundle(WidgetsBundle widgetsBundle);
31 31
32   - public void deleteWidgetsBundle(WidgetsBundleId widgetsBundleId);
  32 + void deleteWidgetsBundle(WidgetsBundleId widgetsBundleId);
33 33
34   - public WidgetsBundle findWidgetsBundleByTenantIdAndAlias(TenantId tenantId, String alias);
  34 + WidgetsBundle findWidgetsBundleByTenantIdAndAlias(TenantId tenantId, String alias);
35 35
36   - public TextPageData<WidgetsBundle> findSystemWidgetsBundlesByPageLink(TextPageLink pageLink);
  36 + TextPageData<WidgetsBundle> findSystemWidgetsBundlesByPageLink(TextPageLink pageLink);
37 37
38   - public List<WidgetsBundle> findSystemWidgetsBundles();
  38 + List<WidgetsBundle> findSystemWidgetsBundles();
39 39
40   - public TextPageData<WidgetsBundle> findTenantWidgetsBundlesByTenantId(TenantId tenantId, TextPageLink pageLink);
  40 + TextPageData<WidgetsBundle> findTenantWidgetsBundlesByTenantId(TenantId tenantId, TextPageLink pageLink);
41 41
42   - public TextPageData<WidgetsBundle> findAllTenantWidgetsBundlesByTenantIdAndPageLink(TenantId tenantId, TextPageLink pageLink);
  42 + TextPageData<WidgetsBundle> findAllTenantWidgetsBundlesByTenantIdAndPageLink(TenantId tenantId, TextPageLink pageLink);
43 43
44   - public List<WidgetsBundle> findAllTenantWidgetsBundlesByTenantId(TenantId tenantId);
  44 + List<WidgetsBundle> findAllTenantWidgetsBundlesByTenantId(TenantId tenantId);
45 45
46   - public void deleteWidgetsBundlesByTenantId(TenantId tenantId);
  46 + void deleteWidgetsBundlesByTenantId(TenantId tenantId);
47 47
48 48 }
... ...
... ... @@ -17,10 +17,9 @@ package org.thingsboard.server.dao.widget;
17 17
18 18 import lombok.extern.slf4j.Slf4j;
19 19 import org.apache.commons.lang3.StringUtils;
20   -import org.slf4j.Logger;
21   -import org.slf4j.LoggerFactory;
22 20 import org.springframework.beans.factory.annotation.Autowired;
23 21 import org.springframework.stereotype.Service;
  22 +import org.thingsboard.server.common.data.Tenant;
24 23 import org.thingsboard.server.common.data.id.TenantId;
25 24 import org.thingsboard.server.common.data.id.WidgetsBundleId;
26 25 import org.thingsboard.server.common.data.page.TextPageData;
... ... @@ -29,8 +28,6 @@ import org.thingsboard.server.common.data.widget.WidgetsBundle;
29 28 import org.thingsboard.server.dao.exception.DataValidationException;
30 29 import org.thingsboard.server.dao.exception.IncorrectParameterException;
31 30 import org.thingsboard.server.dao.model.ModelConstants;
32   -import org.thingsboard.server.dao.model.TenantEntity;
33   -import org.thingsboard.server.dao.model.WidgetsBundleEntity;
34 31 import org.thingsboard.server.dao.service.DataValidator;
35 32 import org.thingsboard.server.dao.service.PaginatedRemover;
36 33 import org.thingsboard.server.dao.service.Validator;
... ... @@ -39,13 +36,12 @@ import org.thingsboard.server.dao.tenant.TenantDao;
39 36 import java.util.ArrayList;
40 37 import java.util.List;
41 38
42   -import static org.thingsboard.server.dao.DaoUtil.convertDataList;
43   -import static org.thingsboard.server.dao.DaoUtil.getData;
44   -
45 39 @Service
46 40 @Slf4j
47 41 public class WidgetsBundleServiceImpl implements WidgetsBundleService {
48 42
  43 + private static final int DEFAULT_WIDGETS_BUNDLE_LIMIT = 300;
  44 +
49 45 @Autowired
50 46 private WidgetsBundleDao widgetsBundleDao;
51 47
... ... @@ -59,16 +55,14 @@ public class WidgetsBundleServiceImpl implements WidgetsBundleService {
59 55 public WidgetsBundle findWidgetsBundleById(WidgetsBundleId widgetsBundleId) {
60 56 log.trace("Executing findWidgetsBundleById [{}]", widgetsBundleId);
61 57 Validator.validateId(widgetsBundleId, "Incorrect widgetsBundleId " + widgetsBundleId);
62   - WidgetsBundleEntity widgetsBundleEntity = widgetsBundleDao.findById(widgetsBundleId.getId());
63   - return getData(widgetsBundleEntity);
  58 + return widgetsBundleDao.findById(widgetsBundleId.getId());
64 59 }
65 60
66 61 @Override
67 62 public WidgetsBundle saveWidgetsBundle(WidgetsBundle widgetsBundle) {
68 63 log.trace("Executing saveWidgetsBundle [{}]", widgetsBundle);
69 64 widgetsBundleValidator.validate(widgetsBundle);
70   - WidgetsBundleEntity widgetsBundleEntity = widgetsBundleDao.save(widgetsBundle);
71   - return getData(widgetsBundleEntity);
  65 + return widgetsBundleDao.save(widgetsBundle);
72 66 }
73 67
74 68 @Override
... ... @@ -88,25 +82,22 @@ public class WidgetsBundleServiceImpl implements WidgetsBundleService {
88 82 log.trace("Executing findWidgetsBundleByTenantIdAndAlias, tenantId [{}], alias [{}]", tenantId, alias);
89 83 Validator.validateId(tenantId, "Incorrect tenantId " + tenantId);
90 84 Validator.validateString(alias, "Incorrect alias " + alias);
91   - WidgetsBundleEntity widgetsBundleEntity = widgetsBundleDao.findWidgetsBundleByTenantIdAndAlias(tenantId.getId(), alias);
92   - return getData(widgetsBundleEntity);
  85 + return widgetsBundleDao.findWidgetsBundleByTenantIdAndAlias(tenantId.getId(), alias);
93 86 }
94 87
95 88 @Override
96 89 public TextPageData<WidgetsBundle> findSystemWidgetsBundlesByPageLink(TextPageLink pageLink) {
97 90 log.trace("Executing findSystemWidgetsBundles, pageLink [{}]", pageLink);
98 91 Validator.validatePageLink(pageLink, "Incorrect page link " + pageLink);
99   - List<WidgetsBundleEntity> widgetsBundlesEntities = widgetsBundleDao.findSystemWidgetsBundles(pageLink);
100   - List<WidgetsBundle> widgetsBundles = convertDataList(widgetsBundlesEntities);
101   - return new TextPageData<>(widgetsBundles, pageLink);
  92 + return new TextPageData<>(widgetsBundleDao.findSystemWidgetsBundles(pageLink), pageLink);
102 93 }
103 94
104 95 @Override
105 96 public List<WidgetsBundle> findSystemWidgetsBundles() {
106 97 log.trace("Executing findSystemWidgetsBundles");
107 98 List<WidgetsBundle> widgetsBundles = new ArrayList<>();
108   - TextPageLink pageLink = new TextPageLink(300);
109   - TextPageData<WidgetsBundle> pageData = null;
  99 + TextPageLink pageLink = new TextPageLink(DEFAULT_WIDGETS_BUNDLE_LIMIT);
  100 + TextPageData<WidgetsBundle> pageData;
110 101 do {
111 102 pageData = findSystemWidgetsBundlesByPageLink(pageLink);
112 103 widgetsBundles.addAll(pageData.getData());
... ... @@ -122,9 +113,7 @@ public class WidgetsBundleServiceImpl implements WidgetsBundleService {
122 113 log.trace("Executing findTenantWidgetsBundlesByTenantId, tenantId [{}], pageLink [{}]", tenantId, pageLink);
123 114 Validator.validateId(tenantId, "Incorrect tenantId " + tenantId);
124 115 Validator.validatePageLink(pageLink, "Incorrect page link " + pageLink);
125   - List<WidgetsBundleEntity> widgetsBundlesEntities = widgetsBundleDao.findTenantWidgetsBundlesByTenantId(tenantId.getId(), pageLink);
126   - List<WidgetsBundle> widgetsBundles = convertDataList(widgetsBundlesEntities);
127   - return new TextPageData<>(widgetsBundles, pageLink);
  116 + return new TextPageData<>(widgetsBundleDao.findTenantWidgetsBundlesByTenantId(tenantId.getId(), pageLink), pageLink);
128 117 }
129 118
130 119 @Override
... ... @@ -132,9 +121,7 @@ public class WidgetsBundleServiceImpl implements WidgetsBundleService {
132 121 log.trace("Executing findAllTenantWidgetsBundlesByTenantIdAndPageLink, tenantId [{}], pageLink [{}]", tenantId, pageLink);
133 122 Validator.validateId(tenantId, "Incorrect tenantId " + tenantId);
134 123 Validator.validatePageLink(pageLink, "Incorrect page link " + pageLink);
135   - List<WidgetsBundleEntity> widgetsBundlesEntities = widgetsBundleDao.findAllTenantWidgetsBundlesByTenantId(tenantId.getId(), pageLink);
136   - List<WidgetsBundle> widgetsBundles = convertDataList(widgetsBundlesEntities);
137   - return new TextPageData<>(widgetsBundles, pageLink);
  124 + return new TextPageData<>(widgetsBundleDao.findAllTenantWidgetsBundlesByTenantId(tenantId.getId(), pageLink), pageLink);
138 125 }
139 126
140 127 @Override
... ... @@ -142,8 +129,8 @@ public class WidgetsBundleServiceImpl implements WidgetsBundleService {
142 129 log.trace("Executing findAllTenantWidgetsBundlesByTenantId, tenantId [{}]", tenantId);
143 130 Validator.validateId(tenantId, "Incorrect tenantId " + tenantId);
144 131 List<WidgetsBundle> widgetsBundles = new ArrayList<>();
145   - TextPageLink pageLink = new TextPageLink(300);
146   - TextPageData<WidgetsBundle> pageData = null;
  132 + TextPageLink pageLink = new TextPageLink(DEFAULT_WIDGETS_BUNDLE_LIMIT);
  133 + TextPageData<WidgetsBundle> pageData;
147 134 do {
148 135 pageData = findAllTenantWidgetsBundlesByTenantIdAndPageLink(tenantId, pageLink);
149 136 widgetsBundles.addAll(pageData.getData());
... ... @@ -173,7 +160,7 @@ public class WidgetsBundleServiceImpl implements WidgetsBundleService {
173 160 widgetsBundle.setTenantId(new TenantId(ModelConstants.NULL_UUID));
174 161 }
175 162 if (!widgetsBundle.getTenantId().getId().equals(ModelConstants.NULL_UUID)) {
176   - TenantEntity tenant = tenantDao.findById(widgetsBundle.getTenantId().getId());
  163 + Tenant tenant = tenantDao.findById(widgetsBundle.getTenantId().getId());
177 164 if (tenant == null) {
178 165 throw new DataValidationException("Widgets bundle is referencing to non-existent tenant!");
179 166 }
... ... @@ -185,7 +172,7 @@ public class WidgetsBundleServiceImpl implements WidgetsBundleService {
185 172 String alias = widgetsBundle.getTitle().toLowerCase().replaceAll("\\W+", "_");
186 173 String originalAlias = alias;
187 174 int c = 1;
188   - WidgetsBundleEntity withSameAlias;
  175 + WidgetsBundle withSameAlias;
189 176 do {
190 177 withSameAlias = widgetsBundleDao.findWidgetsBundleByTenantIdAndAlias(widgetsBundle.getTenantId().getId(), alias);
191 178 if (withSameAlias != null) {
... ... @@ -197,8 +184,8 @@ public class WidgetsBundleServiceImpl implements WidgetsBundleService {
197 184
198 185 @Override
199 186 protected void validateUpdate(WidgetsBundle widgetsBundle) {
200   - WidgetsBundleEntity storedWidgetsBundle = widgetsBundleDao.findById(widgetsBundle.getId().getId());
201   - if (!storedWidgetsBundle.getTenantId().equals(widgetsBundle.getTenantId().getId())) {
  187 + WidgetsBundle storedWidgetsBundle = widgetsBundleDao.findById(widgetsBundle.getId().getId());
  188 + if (!storedWidgetsBundle.getTenantId().getId().equals(widgetsBundle.getTenantId().getId())) {
202 189 throw new DataValidationException("Can't move existing widgets bundle to different tenant!");
203 190 }
204 191 if (!storedWidgetsBundle.getAlias().equals(widgetsBundle.getAlias())) {
... ... @@ -208,17 +195,17 @@ public class WidgetsBundleServiceImpl implements WidgetsBundleService {
208 195
209 196 };
210 197
211   - private PaginatedRemover<TenantId, WidgetsBundleEntity> tenantWidgetsBundleRemover =
212   - new PaginatedRemover<TenantId, WidgetsBundleEntity>() {
  198 + private PaginatedRemover<TenantId, WidgetsBundle> tenantWidgetsBundleRemover =
  199 + new PaginatedRemover<TenantId, WidgetsBundle>() {
213 200
214 201 @Override
215   - protected List<WidgetsBundleEntity> findEntities(TenantId id, TextPageLink pageLink) {
  202 + protected List<WidgetsBundle> findEntities(TenantId id, TextPageLink pageLink) {
216 203 return widgetsBundleDao.findTenantWidgetsBundlesByTenantId(id.getId(), pageLink);
217 204 }
218 205
219 206 @Override
220   - protected void removeEntity(WidgetsBundleEntity entity) {
221   - deleteWidgetsBundle(new WidgetsBundleId(entity.getId()));
  207 + protected void removeEntity(WidgetsBundle entity) {
  208 + deleteWidgetsBundle(new WidgetsBundleId(entity.getUuidId()));
222 209 }
223 210 };
224 211
... ...