diff --git a/dao/src/main/java/org/thingsboard/server/dao/AbstractSearchTimeDao.java b/dao/src/main/java/org/thingsboard/server/dao/AbstractSearchTimeDao.java index 5852e3c7e3..4a10617b25 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/AbstractSearchTimeDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/AbstractSearchTimeDao.java @@ -21,34 +21,29 @@ import com.datastax.driver.core.querybuilder.QueryBuilder; import com.datastax.driver.core.querybuilder.Select; import com.datastax.driver.core.querybuilder.Select.Where; import com.datastax.driver.core.utils.UUIDs; -import org.apache.commons.lang3.StringUtils; -import org.thingsboard.server.common.data.page.TextPageLink; import org.thingsboard.server.common.data.page.TimePageLink; import org.thingsboard.server.dao.model.BaseEntity; import org.thingsboard.server.dao.model.ModelConstants; -import org.thingsboard.server.dao.model.SearchTextEntity; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.UUID; -import static com.datastax.driver.core.querybuilder.QueryBuilder.eq; import static com.datastax.driver.core.querybuilder.QueryBuilder.select; -public abstract class AbstractSearchTimeDao> extends AbstractModelDao { +public abstract class AbstractSearchTimeDao, D> extends CassandraAbstractModelDao { - protected List findPageWithTimeSearch(String searchView, List clauses, TimePageLink pageLink) { + protected List findPageWithTimeSearch(String searchView, List clauses, TimePageLink pageLink) { return findPageWithTimeSearch(searchView, clauses, Collections.emptyList(), pageLink); } - protected List findPageWithTimeSearch(String searchView, List clauses, Ordering ordering, TimePageLink pageLink) { + protected List findPageWithTimeSearch(String searchView, List clauses, Ordering ordering, TimePageLink pageLink) { return findPageWithTimeSearch(searchView, clauses, Collections.singletonList(ordering), pageLink); } - - protected List findPageWithTimeSearch(String searchView, List clauses, List topLevelOrderings, TimePageLink pageLink) { + protected List findPageWithTimeSearch(String searchView, List clauses, List topLevelOrderings, TimePageLink pageLink) { Select select = select().from(searchView); Where query = select.where(); for (Clause clause : clauses) { diff --git a/dao/src/main/java/org/thingsboard/server/dao/AbstractAsyncDao.java b/dao/src/main/java/org/thingsboard/server/dao/CassandraAbstractAsyncDao.java similarity index 93% rename from dao/src/main/java/org/thingsboard/server/dao/AbstractAsyncDao.java rename to dao/src/main/java/org/thingsboard/server/dao/CassandraAbstractAsyncDao.java index 9b9368d45d..f241f2ca8b 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/AbstractAsyncDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/CassandraAbstractAsyncDao.java @@ -23,7 +23,7 @@ import java.util.concurrent.Executors; /** * Created by ashvayka on 21.02.17. */ -public abstract class AbstractAsyncDao extends AbstractDao { +public abstract class CassandraAbstractAsyncDao extends CassandraAbstractDao { protected ExecutorService readResultsProcessingExecutor; diff --git a/dao/src/main/java/org/thingsboard/server/dao/AbstractDao.java b/dao/src/main/java/org/thingsboard/server/dao/CassandraAbstractDao.java similarity index 98% rename from dao/src/main/java/org/thingsboard/server/dao/AbstractDao.java rename to dao/src/main/java/org/thingsboard/server/dao/CassandraAbstractDao.java index 5968477dc6..bd7346acf3 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/AbstractDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/CassandraAbstractDao.java @@ -23,7 +23,7 @@ import org.thingsboard.server.dao.cassandra.CassandraCluster; import org.thingsboard.server.dao.model.type.*; @Slf4j -public abstract class AbstractDao { +public abstract class CassandraAbstractDao { @Autowired protected CassandraCluster cluster; diff --git a/dao/src/main/java/org/thingsboard/server/dao/AbstractModelDao.java b/dao/src/main/java/org/thingsboard/server/dao/CassandraAbstractModelDao.java similarity index 64% rename from dao/src/main/java/org/thingsboard/server/dao/AbstractModelDao.java rename to dao/src/main/java/org/thingsboard/server/dao/CassandraAbstractModelDao.java index 01346b0da9..5f5f95f037 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/AbstractModelDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/CassandraAbstractModelDao.java @@ -28,8 +28,8 @@ import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import lombok.extern.slf4j.Slf4j; import org.thingsboard.server.dao.model.BaseEntity; -import org.thingsboard.server.dao.model.wrapper.EntityResultSet; import org.thingsboard.server.dao.model.ModelConstants; +import org.thingsboard.server.dao.model.wrapper.EntityResultSet; import javax.annotation.Nullable; import java.util.Collections; @@ -37,26 +37,25 @@ import java.util.List; import java.util.UUID; import static com.datastax.driver.core.querybuilder.QueryBuilder.eq; -import static com.datastax.driver.core.querybuilder.QueryBuilder.lt; import static com.datastax.driver.core.querybuilder.QueryBuilder.select; @Slf4j -public abstract class AbstractModelDao> extends AbstractDao implements Dao { +public abstract class CassandraAbstractModelDao, D> extends CassandraAbstractDao implements Dao { - protected abstract Class getColumnFamilyClass(); + protected abstract Class getColumnFamilyClass(); protected abstract String getColumnFamilyName(); - protected Mapper getMapper() { + protected Mapper getMapper() { return cluster.getMapper(getColumnFamilyClass()); } - protected List findListByStatement(Statement statement) { - List list = Collections.emptyList(); + protected List findListByStatement(Statement statement) { + List list = Collections.emptyList(); if (statement != null) { statement.setConsistencyLevel(cluster.getDefaultReadConsistencyLevel()); ResultSet resultSet = getSession().execute(statement); - Result result = getMapper().map(resultSet); + Result result = getMapper().map(resultSet); if (result != null) { list = result.all(); } @@ -64,33 +63,33 @@ public abstract class AbstractModelDao> extends Abstract return list; } - protected ListenableFuture> findListByStatementAsync(Statement statement) { + protected ListenableFuture> findListByStatementAsync(Statement statement) { if (statement != null) { statement.setConsistencyLevel(cluster.getDefaultReadConsistencyLevel()); ResultSetFuture resultSetFuture = getSession().executeAsync(statement); - ListenableFuture> result = Futures.transform(resultSetFuture, new Function>() { + return Futures.transform(resultSetFuture, new Function>() { @Nullable @Override - public List apply(@Nullable ResultSet resultSet) { - Result result = getMapper().map(resultSet); + public List apply(@Nullable ResultSet resultSet) { + Result result = getMapper().map(resultSet); if (result != null) { - return result.all(); + List entities = result.all(); + return DaoUtil.convertDataList(entities); } else { return Collections.emptyList(); } } }); - return result; } return Futures.immediateFuture(Collections.emptyList()); } - protected T findOneByStatement(Statement statement) { - T object = null; + protected E findOneByStatement(Statement statement) { + E object = null; if (statement != null) { statement.setConsistencyLevel(cluster.getDefaultReadConsistencyLevel()); ResultSet resultSet = getSession().execute(statement); - Result result = getMapper().map(resultSet); + Result result = getMapper().map(resultSet); if (result != null) { object = result.one(); } @@ -98,32 +97,32 @@ public abstract class AbstractModelDao> extends Abstract return object; } - protected ListenableFuture findOneByStatementAsync(Statement statement) { + protected ListenableFuture findOneByStatementAsync(Statement statement) { if (statement != null) { statement.setConsistencyLevel(cluster.getDefaultReadConsistencyLevel()); ResultSetFuture resultSetFuture = getSession().executeAsync(statement); - ListenableFuture result = Futures.transform(resultSetFuture, new Function() { + return Futures.transform(resultSetFuture, new Function() { @Nullable @Override - public T apply(@Nullable ResultSet resultSet) { - Result result = getMapper().map(resultSet); + public D apply(@Nullable ResultSet resultSet) { + Result result = getMapper().map(resultSet); if (result != null) { - return result.one(); + E entity = result.one(); + return DaoUtil.getData(entity); } else { return null; } } }); - return result; } return Futures.immediateFuture(null); } - protected Statement getSaveQuery(T dto) { + protected Statement getSaveQuery(E dto) { return getMapper().saveQuery(dto); } - protected EntityResultSet saveWithResult(T entity) { + protected EntityResultSet saveWithResult(E entity) { log.debug("Save entity {}", entity); if (entity.getId() == null) { entity.setId(UUIDs.timeBased()); @@ -136,34 +135,48 @@ public abstract class AbstractModelDao> extends Abstract return new EntityResultSet<>(resultSet, entity); } - public T save(T entity) { - return saveWithResult(entity).getEntity(); + @Override + public D save(D domain) { + E entity; + try { + entity = getColumnFamilyClass().getConstructor(domain.getClass()).newInstance(domain); + } catch (Exception e) { + log.error("Can't create entity for domain object {}", domain, e); + throw new IllegalArgumentException("Can't create entity for domain object {" + domain + "}", e); + } + log.debug("Saving entity {}", entity); + entity = saveWithResult(entity).getEntity(); + return DaoUtil.getData(entity); } - public T findById(UUID key) { + @Override + public D findById(UUID key) { log.debug("Get entity by key {}", key); Select.Where query = select().from(getColumnFamilyName()).where(eq(ModelConstants.ID_PROPERTY, key)); log.trace("Execute query {}", query); - return findOneByStatement(query); + E entity = findOneByStatement(query); + return DaoUtil.getData(entity); } - public ListenableFuture findByIdAsync(UUID key) { + @Override + public ListenableFuture findByIdAsync(UUID key) { log.debug("Get entity by key {}", key); Select.Where query = select().from(getColumnFamilyName()).where(eq(ModelConstants.ID_PROPERTY, key)); log.trace("Execute query {}", query); return findOneByStatementAsync(query); } - - public ResultSet removeById(UUID key) { + @Override + public boolean removeById(UUID key) { Statement delete = QueryBuilder.delete().all().from(getColumnFamilyName()).where(eq(ModelConstants.ID_PROPERTY, key)); log.debug("Remove request: {}", delete.toString()); - return getSession().execute(delete); + return getSession().execute(delete).wasApplied(); } - - public List find() { + @Override + public List find() { log.debug("Get all entities from column family {}", getColumnFamilyName()); - return findListByStatement(QueryBuilder.select().all().from(getColumnFamilyName()).setConsistencyLevel(cluster.getDefaultReadConsistencyLevel())); + List entities = findListByStatement(QueryBuilder.select().all().from(getColumnFamilyName()).setConsistencyLevel(cluster.getDefaultReadConsistencyLevel())); + return DaoUtil.convertDataList(entities); } } diff --git a/dao/src/main/java/org/thingsboard/server/dao/AbstractSearchTextDao.java b/dao/src/main/java/org/thingsboard/server/dao/CassandraAbstractSearchTextDao.java similarity index 86% rename from dao/src/main/java/org/thingsboard/server/dao/AbstractSearchTextDao.java rename to dao/src/main/java/org/thingsboard/server/dao/CassandraAbstractSearchTextDao.java index 51aa20d0d7..3217043137 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/AbstractSearchTextDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/CassandraAbstractSearchTextDao.java @@ -19,27 +19,28 @@ import com.datastax.driver.core.querybuilder.Clause; import com.datastax.driver.core.querybuilder.QueryBuilder; import com.datastax.driver.core.querybuilder.Select; import com.datastax.driver.core.querybuilder.Select.Where; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.thingsboard.server.common.data.page.TextPageLink; -import org.thingsboard.server.dao.model.SearchTextEntity; import org.thingsboard.server.dao.model.ModelConstants; +import org.thingsboard.server.dao.model.SearchTextEntity; import java.util.List; import static com.datastax.driver.core.querybuilder.QueryBuilder.eq; -import static com.datastax.driver.core.querybuilder.QueryBuilder.gt; -import static com.datastax.driver.core.querybuilder.QueryBuilder.gte; -import static com.datastax.driver.core.querybuilder.QueryBuilder.lt; import static com.datastax.driver.core.querybuilder.QueryBuilder.select; -public abstract class AbstractSearchTextDao> extends AbstractModelDao { +@Slf4j +public abstract class CassandraAbstractSearchTextDao, D> extends CassandraAbstractModelDao { + + public D save(D domain) { - public T save(T entity) { entity.setSearchText(entity.getSearchTextSource().toLowerCase()); + return super.save(entity); } - - protected List findPageWithTextSearch(String searchView, List clauses, TextPageLink pageLink) { + + protected List findPageWithTextSearch(String searchView, List clauses, TextPageLink pageLink) { Select select = select().from(searchView); Where query = select.where(); for (Clause clause : clauses) { @@ -49,7 +50,7 @@ public abstract class AbstractSearchTextDao> exten if (!StringUtils.isEmpty(pageLink.getTextOffset())) { query.and(eq(ModelConstants.SEARCH_TEXT_PROPERTY, pageLink.getTextOffset())); query.and(QueryBuilder.lt(ModelConstants.ID_PROPERTY, pageLink.getIdOffset())); - List result = findListByStatement(query); + List result = findListByStatement(query); if (result.size() < pageLink.getLimit()) { select = select().from(searchView); query = select.where(); diff --git a/dao/src/main/java/org/thingsboard/server/dao/Dao.java b/dao/src/main/java/org/thingsboard/server/dao/Dao.java index 2703cdc23a..f0580eba3e 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/Dao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/Dao.java @@ -15,7 +15,6 @@ */ package org.thingsboard.server.dao; -import com.datastax.driver.core.ResultSet; import com.google.common.util.concurrent.ListenableFuture; import java.util.List; @@ -31,6 +30,6 @@ public interface Dao { T save(T t); - ResultSet removeById(UUID id); + boolean removeById(UUID id); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/DaoUtil.java b/dao/src/main/java/org/thingsboard/server/dao/DaoUtil.java index 27499bb1bd..42823a1e68 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/DaoUtil.java +++ b/dao/src/main/java/org/thingsboard/server/dao/DaoUtil.java @@ -15,15 +15,11 @@ */ package org.thingsboard.server.dao; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import java.util.UUID; - import org.thingsboard.server.common.data.id.UUIDBased; import org.thingsboard.server.dao.model.ToData; +import java.util.*; + public abstract class DaoUtil { private DaoUtil() { diff --git a/dao/src/main/java/org/thingsboard/server/dao/EncryptionUtil.java b/dao/src/main/java/org/thingsboard/server/dao/EncryptionUtil.java index 9a4e592e07..1d74d30a08 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/EncryptionUtil.java +++ b/dao/src/main/java/org/thingsboard/server/dao/EncryptionUtil.java @@ -15,7 +15,6 @@ */ package org.thingsboard.server.dao; -import com.google.common.base.CharMatcher; import lombok.extern.slf4j.Slf4j; import org.bouncycastle.crypto.digests.SHA3Digest; import org.bouncycastle.pqc.math.linearalgebra.ByteUtils; diff --git a/dao/src/main/java/org/thingsboard/server/dao/attributes/AttributesDao.java b/dao/src/main/java/org/thingsboard/server/dao/attributes/AttributesDao.java index ae58d4d9c6..3fb8ee2ffc 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/attributes/AttributesDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/attributes/AttributesDao.java @@ -15,6 +15,7 @@ */ package org.thingsboard.server.dao.attributes; +// CASSANDRA ??? import com.datastax.driver.core.ResultSet; import com.datastax.driver.core.ResultSetFuture; import com.google.common.util.concurrent.ListenableFuture; diff --git a/dao/src/main/java/org/thingsboard/server/dao/attributes/AttributesService.java b/dao/src/main/java/org/thingsboard/server/dao/attributes/AttributesService.java index 6bf9fb2bd5..ccca460917 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/attributes/AttributesService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/attributes/AttributesService.java @@ -15,12 +15,10 @@ */ package org.thingsboard.server.dao.attributes; +// CASSANDRA ??? import com.datastax.driver.core.ResultSet; -import com.datastax.driver.core.ResultSetFuture; import com.google.common.util.concurrent.ListenableFuture; -import org.thingsboard.server.common.data.id.DeviceId; import org.thingsboard.server.common.data.id.EntityId; -import org.thingsboard.server.common.data.id.UUIDBased; import org.thingsboard.server.common.data.kv.AttributeKvEntry; import java.util.Collection; diff --git a/dao/src/main/java/org/thingsboard/server/dao/attributes/BaseAttributesService.java b/dao/src/main/java/org/thingsboard/server/dao/attributes/BaseAttributesService.java index 43612419d0..6fd734a191 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/attributes/BaseAttributesService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/attributes/BaseAttributesService.java @@ -15,16 +15,17 @@ */ package org.thingsboard.server.dao.attributes; +// CASSANDRA ??? import com.datastax.driver.core.ResultSet; import com.datastax.driver.core.ResultSetFuture; import com.google.common.collect.Lists; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; import org.thingsboard.server.common.data.id.EntityId; import org.thingsboard.server.common.data.kv.AttributeKvEntry; import org.thingsboard.server.dao.exception.IncorrectParameterException; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; import org.thingsboard.server.dao.service.Validator; import java.util.Collection; diff --git a/dao/src/main/java/org/thingsboard/server/dao/attributes/BaseAttributesDao.java b/dao/src/main/java/org/thingsboard/server/dao/attributes/CassandraBaseAttributesDao.java similarity index 93% rename from dao/src/main/java/org/thingsboard/server/dao/attributes/BaseAttributesDao.java rename to dao/src/main/java/org/thingsboard/server/dao/attributes/CassandraBaseAttributesDao.java index fd50f4d2ef..f19dee4d61 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/attributes/BaseAttributesDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/attributes/CassandraBaseAttributesDao.java @@ -24,10 +24,11 @@ import com.google.common.util.concurrent.ListenableFuture; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import org.thingsboard.server.common.data.id.EntityId; -import org.thingsboard.server.dao.AbstractAsyncDao; +import org.thingsboard.server.common.data.kv.AttributeKvEntry; +import org.thingsboard.server.common.data.kv.BaseAttributeKvEntry; +import org.thingsboard.server.dao.CassandraAbstractAsyncDao; import org.thingsboard.server.dao.model.ModelConstants; -import org.thingsboard.server.common.data.kv.*; -import org.thingsboard.server.dao.timeseries.BaseTimeseriesDao; +import org.thingsboard.server.dao.timeseries.CassandraBaseTimeseriesDao; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; @@ -37,15 +38,16 @@ import java.util.List; import java.util.Optional; import java.util.stream.Collectors; +import static com.datastax.driver.core.querybuilder.QueryBuilder.eq; +import static com.datastax.driver.core.querybuilder.QueryBuilder.select; import static org.thingsboard.server.dao.model.ModelConstants.*; -import static com.datastax.driver.core.querybuilder.QueryBuilder.*; /** * @author Andrew Shvayka */ @Component @Slf4j -public class BaseAttributesDao extends AbstractAsyncDao implements AttributesDao { +public class CassandraBaseAttributesDao extends CassandraAbstractAsyncDao implements AttributesDao { private PreparedStatement saveStmt; @@ -161,7 +163,7 @@ public class BaseAttributesDao extends AbstractAsyncDao implements AttributesDao AttributeKvEntry attributeEntry = null; if (row != null) { long lastUpdateTs = row.get(LAST_UPDATE_TS_COLUMN, Long.class); - attributeEntry = new BaseAttributeKvEntry(BaseTimeseriesDao.toKvEntry(row, key), lastUpdateTs); + attributeEntry = new BaseAttributeKvEntry(CassandraBaseTimeseriesDao.toKvEntry(row, key), lastUpdateTs); } return attributeEntry; } diff --git a/dao/src/main/java/org/thingsboard/server/dao/cassandra/CassandraCluster.java b/dao/src/main/java/org/thingsboard/server/dao/cassandra/CassandraCluster.java index 62e376245a..efe05f8fb8 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/cassandra/CassandraCluster.java +++ b/dao/src/main/java/org/thingsboard/server/dao/cassandra/CassandraCluster.java @@ -16,13 +16,8 @@ package org.thingsboard.server.dao.cassandra; -import com.datastax.driver.core.Cluster; -import com.datastax.driver.core.ConsistencyLevel; -import com.datastax.driver.core.HostDistance; -import com.datastax.driver.core.PoolingOptions; +import com.datastax.driver.core.*; import com.datastax.driver.core.ProtocolOptions.Compression; -import com.datastax.driver.core.Session; -import com.datastax.driver.core.exceptions.NoHostAvailableException; import com.datastax.driver.mapping.Mapper; import com.datastax.driver.mapping.MappingManager; import lombok.Data; @@ -31,16 +26,13 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; -import org.thingsboard.server.dao.exception.DatabaseException; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; -import java.io.Closeable; import java.net.InetSocketAddress; import java.util.ArrayList; import java.util.Collections; import java.util.List; -import java.util.StringTokenizer; @Component @Slf4j diff --git a/dao/src/main/java/org/thingsboard/server/dao/cassandra/CassandraQueryOptions.java b/dao/src/main/java/org/thingsboard/server/dao/cassandra/CassandraQueryOptions.java index d5460b0081..27ac661231 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/cassandra/CassandraQueryOptions.java +++ b/dao/src/main/java/org/thingsboard/server/dao/cassandra/CassandraQueryOptions.java @@ -21,12 +21,9 @@ import lombok.Data; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; import org.springframework.stereotype.Component; -import org.springframework.util.StringUtils; import javax.annotation.PostConstruct; -import static org.apache.commons.lang3.StringUtils.isNotBlank; - @Component @Configuration @Data diff --git a/dao/src/main/java/org/thingsboard/server/dao/cassandra/CassandraSocketOptions.java b/dao/src/main/java/org/thingsboard/server/dao/cassandra/CassandraSocketOptions.java index c6f51d108e..b4cb7ba120 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/cassandra/CassandraSocketOptions.java +++ b/dao/src/main/java/org/thingsboard/server/dao/cassandra/CassandraSocketOptions.java @@ -15,13 +15,12 @@ */ package org.thingsboard.server.dao.cassandra; +import com.datastax.driver.core.SocketOptions; import lombok.Data; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; import org.springframework.stereotype.Component; -import com.datastax.driver.core.SocketOptions; - import javax.annotation.PostConstruct; @Component diff --git a/dao/src/main/java/org/thingsboard/server/dao/component/BaseComponentDescriptorDao.java b/dao/src/main/java/org/thingsboard/server/dao/component/BaseComponentDescriptorDao.java index 7c43a765ae..330790d81b 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/component/BaseComponentDescriptorDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/component/BaseComponentDescriptorDao.java @@ -27,9 +27,10 @@ import org.thingsboard.server.common.data.page.TextPageLink; import org.thingsboard.server.common.data.plugin.ComponentDescriptor; import org.thingsboard.server.common.data.plugin.ComponentScope; import org.thingsboard.server.common.data.plugin.ComponentType; -import org.thingsboard.server.dao.AbstractSearchTextDao; -import org.thingsboard.server.dao.model.ModelConstants; +import org.thingsboard.server.dao.CassandraAbstractSearchTextDao; +import org.thingsboard.server.dao.DaoUtil; import org.thingsboard.server.dao.model.ComponentDescriptorEntity; +import org.thingsboard.server.dao.model.ModelConstants; import java.util.Arrays; import java.util.List; @@ -44,7 +45,7 @@ import static com.datastax.driver.core.querybuilder.QueryBuilder.select; */ @Component @Slf4j -public class BaseComponentDescriptorDao extends AbstractSearchTextDao implements ComponentDescriptorDao { +public class BaseComponentDescriptorDao extends CassandraAbstractSearchTextDao implements ComponentDescriptorDao { @Override protected Class getColumnFamilyClass() { @@ -57,10 +58,10 @@ public class BaseComponentDescriptorDao extends AbstractSearchTextDao save(ComponentDescriptor component) { + public Optional saveIfNotExist(ComponentDescriptor component) { ComponentDescriptorEntity entity = new ComponentDescriptorEntity(component); log.debug("Save component entity [{}]", entity); - Optional result = saveIfNotExist(entity); + Optional result = saveIfNotExist(entity); if (log.isTraceEnabled()) { log.trace("Saved result: [{}] for component entity [{}]", result.isPresent(), result.orElse(null)); } else { @@ -70,19 +71,19 @@ public class BaseComponentDescriptorDao extends AbstractSearchTextDao findByTypeAndPageLink(ComponentType type, TextPageLink pageLink) { + public List findByTypeAndPageLink(ComponentType type, TextPageLink pageLink) { log.debug("Try to find component by type [{}] and pageLink [{}]", type, pageLink); List entities = findPageWithTextSearch(ModelConstants.COMPONENT_DESCRIPTOR_BY_TYPE_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME, Arrays.asList(eq(ModelConstants.COMPONENT_DESCRIPTOR_TYPE_PROPERTY, type.name())), pageLink); @@ -105,11 +106,11 @@ public class BaseComponentDescriptorDao extends AbstractSearchTextDao findByScopeAndTypeAndPageLink(ComponentScope scope, ComponentType type, TextPageLink pageLink) { + public List findByScopeAndTypeAndPageLink(ComponentScope scope, ComponentType type, TextPageLink pageLink) { log.debug("Try to find component by scope [{}] and type [{}] and pageLink [{}]", scope, type, pageLink); List entities = findPageWithTextSearch(ModelConstants.COMPONENT_DESCRIPTOR_BY_SCOPE_TYPE_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME, Arrays.asList(eq(ModelConstants.COMPONENT_DESCRIPTOR_TYPE_PROPERTY, type.name()), @@ -119,20 +120,20 @@ public class BaseComponentDescriptorDao extends AbstractSearchTextDao saveIfNotExist(ComponentDescriptorEntity entity) { + private Optional saveIfNotExist(ComponentDescriptorEntity entity) { if (entity.getId() == null) { entity.setId(UUIDs.timeBased()); } @@ -161,7 +162,7 @@ public class BaseComponentDescriptorDao extends AbstractSearchTextDao result = componentDescriptorDao.save(component); + Optional result = componentDescriptorDao.saveIfNotExist(component); if (result.isPresent()) { - return getData(result.get()); + return result.get(); } else { - return getData(componentDescriptorDao.findByClazz(component.getClazz())); + return componentDescriptorDao.findByClazz(component.getClazz()); } } @Override public ComponentDescriptor findById(ComponentDescriptorId componentId) { Validator.validateId(componentId, "Incorrect component id for search request."); - return getData(componentDescriptorDao.findById(componentId)); + return componentDescriptorDao.findById(componentId); } @Override public ComponentDescriptor findByClazz(String clazz) { Validator.validateString(clazz, "Incorrect clazz for search request."); - return getData(componentDescriptorDao.findByClazz(clazz)); + return componentDescriptorDao.findByClazz(clazz); } @Override public TextPageData findByTypeAndPageLink(ComponentType type, TextPageLink pageLink) { Validator.validatePageLink(pageLink, "Incorrect PageLink object for search plugin components request."); - List pluginEntities = componentDescriptorDao.findByTypeAndPageLink(type, pageLink); - List components = convertDataList(pluginEntities); + List components = componentDescriptorDao.findByTypeAndPageLink(type, pageLink); return new TextPageData<>(components, pageLink); } @Override public TextPageData findByScopeAndTypeAndPageLink(ComponentScope scope, ComponentType type, TextPageLink pageLink) { Validator.validatePageLink(pageLink, "Incorrect PageLink object for search plugin components request."); - List pluginEntities = componentDescriptorDao.findByScopeAndTypeAndPageLink(scope, type, pageLink); - List components = convertDataList(pluginEntities); + List components = componentDescriptorDao.findByScopeAndTypeAndPageLink(scope, type, pageLink); return new TextPageData<>(components, pageLink); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/component/ComponentDescriptorDao.java b/dao/src/main/java/org/thingsboard/server/dao/component/ComponentDescriptorDao.java index 0496068d33..cfbcaae8dd 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/component/ComponentDescriptorDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/component/ComponentDescriptorDao.java @@ -21,7 +21,6 @@ import org.thingsboard.server.common.data.plugin.ComponentDescriptor; import org.thingsboard.server.common.data.plugin.ComponentScope; import org.thingsboard.server.common.data.plugin.ComponentType; import org.thingsboard.server.dao.Dao; -import org.thingsboard.server.dao.model.ComponentDescriptorEntity; import java.util.List; import java.util.Optional; @@ -29,17 +28,17 @@ import java.util.Optional; /** * @author Andrew Shvayka */ -public interface ComponentDescriptorDao extends Dao { +public interface ComponentDescriptorDao extends Dao { - Optional save(ComponentDescriptor component); + Optional saveIfNotExist(ComponentDescriptor component); - ComponentDescriptorEntity findById(ComponentDescriptorId componentId); + ComponentDescriptor findById(ComponentDescriptorId componentId); - ComponentDescriptorEntity findByClazz(String clazz); + ComponentDescriptor findByClazz(String clazz); - List findByTypeAndPageLink(ComponentType type, TextPageLink pageLink); + List findByTypeAndPageLink(ComponentType type, TextPageLink pageLink); - List findByScopeAndTypeAndPageLink(ComponentScope scope, ComponentType type, TextPageLink pageLink); + List findByScopeAndTypeAndPageLink(ComponentScope scope, ComponentType type, TextPageLink pageLink); void deleteById(ComponentDescriptorId componentId); diff --git a/dao/src/main/java/org/thingsboard/server/dao/customer/CustomerDaoImpl.java b/dao/src/main/java/org/thingsboard/server/dao/customer/CassandraCustomerDao.java similarity index 78% rename from dao/src/main/java/org/thingsboard/server/dao/customer/CustomerDaoImpl.java rename to dao/src/main/java/org/thingsboard/server/dao/customer/CassandraCustomerDao.java index 7b53836274..18f35e6dc3 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/customer/CustomerDaoImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/customer/CassandraCustomerDao.java @@ -15,24 +15,23 @@ */ package org.thingsboard.server.dao.customer; -import static com.datastax.driver.core.querybuilder.QueryBuilder.eq; - -import java.util.Arrays; -import java.util.List; -import java.util.UUID; - import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import org.thingsboard.server.common.data.Customer; import org.thingsboard.server.common.data.page.TextPageLink; -import org.thingsboard.server.dao.AbstractSearchTextDao; +import org.thingsboard.server.dao.CassandraAbstractSearchTextDao; +import org.thingsboard.server.dao.DaoUtil; import org.thingsboard.server.dao.model.CustomerEntity; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.thingsboard.server.dao.model.ModelConstants; + +import java.util.Arrays; +import java.util.List; +import java.util.UUID; + +import static com.datastax.driver.core.querybuilder.QueryBuilder.eq; @Component @Slf4j -public class CustomerDaoImpl extends AbstractSearchTextDao implements CustomerDao { +public class CassandraCustomerDao extends CassandraAbstractSearchTextDao implements CustomerDao { @Override protected Class getColumnFamilyClass() { @@ -43,21 +42,15 @@ public class CustomerDaoImpl extends AbstractSearchTextDao imple protected String getColumnFamilyName() { return ModelConstants.CUSTOMER_COLUMN_FAMILY_NAME; } - - @Override - public CustomerEntity save(Customer customer) { - log.debug("Save customer [{}] ", customer); - return save(new CustomerEntity(customer)); - } @Override - public List findCustomersByTenantId(UUID tenantId, TextPageLink pageLink) { + public List findCustomersByTenantId(UUID tenantId, TextPageLink pageLink) { log.debug("Try to find customers by tenantId [{}] and pageLink [{}]", tenantId, pageLink); List customerEntities = findPageWithTextSearch(ModelConstants.CUSTOMER_BY_TENANT_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME, Arrays.asList(eq(ModelConstants.CUSTOMER_TENANT_ID_PROPERTY, tenantId)), pageLink); log.trace("Found customers [{}] by tenantId [{}] and pageLink [{}]", customerEntities, tenantId, pageLink); - return customerEntities; + return DaoUtil.convertDataList(customerEntities); } } diff --git a/dao/src/main/java/org/thingsboard/server/dao/customer/CustomerDao.java b/dao/src/main/java/org/thingsboard/server/dao/customer/CustomerDao.java index 6d7247b3a6..e26fc986bf 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/customer/CustomerDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/customer/CustomerDao.java @@ -15,18 +15,17 @@ */ package org.thingsboard.server.dao.customer; -import java.util.List; -import java.util.UUID; - import org.thingsboard.server.common.data.Customer; import org.thingsboard.server.common.data.page.TextPageLink; import org.thingsboard.server.dao.Dao; -import org.thingsboard.server.dao.model.CustomerEntity; + +import java.util.List; +import java.util.UUID; /** * The Interface CustomerDao. */ -public interface CustomerDao extends Dao { +public interface CustomerDao extends Dao { /** * Save or update customer object @@ -34,7 +33,7 @@ public interface CustomerDao extends Dao { * @param customer the customer object * @return saved customer object */ - CustomerEntity save(Customer customer); + Customer save(Customer customer); /** * Find customers by tenant id and page link. @@ -43,6 +42,6 @@ public interface CustomerDao extends Dao { * @param pageLink the page link * @return the list of customer objects */ - List findCustomersByTenantId(UUID tenantId, TextPageLink pageLink); + List findCustomersByTenantId(UUID tenantId, TextPageLink pageLink); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/customer/CustomerService.java b/dao/src/main/java/org/thingsboard/server/dao/customer/CustomerService.java index 70321a20b0..566d71818e 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/customer/CustomerService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/customer/CustomerService.java @@ -23,14 +23,14 @@ import org.thingsboard.server.common.data.page.TextPageLink; public interface CustomerService { - public Customer findCustomerById(CustomerId customerId); + Customer findCustomerById(CustomerId customerId); - public Customer saveCustomer(Customer customer); + Customer saveCustomer(Customer customer); - public void deleteCustomer(CustomerId customerId); + void deleteCustomer(CustomerId customerId); - public TextPageData findCustomersByTenantId(TenantId tenantId, TextPageLink pageLink); + TextPageData findCustomersByTenantId(TenantId tenantId, TextPageLink pageLink); - public void deleteCustomersByTenantId(TenantId tenantId); + void deleteCustomersByTenantId(TenantId tenantId); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/customer/CustomerServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/customer/CustomerServiceImpl.java index 18ead42d5a..3e9e472c06 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/customer/CustomerServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/customer/CustomerServiceImpl.java @@ -15,14 +15,12 @@ */ package org.thingsboard.server.dao.customer; -import static org.thingsboard.server.dao.DaoUtil.convertDataList; -import static org.thingsboard.server.dao.DaoUtil.getData; - -import java.util.List; - import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; import org.thingsboard.server.common.data.Customer; +import org.thingsboard.server.common.data.Tenant; import org.thingsboard.server.common.data.id.CustomerId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.TextPageData; @@ -31,17 +29,13 @@ import org.thingsboard.server.dao.dashboard.DashboardService; import org.thingsboard.server.dao.device.DeviceService; import org.thingsboard.server.dao.exception.DataValidationException; import org.thingsboard.server.dao.exception.IncorrectParameterException; -import org.thingsboard.server.dao.model.CustomerEntity; -import org.thingsboard.server.dao.model.TenantEntity; import org.thingsboard.server.dao.service.DataValidator; import org.thingsboard.server.dao.service.PaginatedRemover; +import org.thingsboard.server.dao.service.Validator; import org.thingsboard.server.dao.tenant.TenantDao; import org.thingsboard.server.dao.user.UserService; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.thingsboard.server.dao.service.Validator; + +import java.util.List; @Service @Slf4j public class CustomerServiceImpl implements CustomerService { @@ -65,16 +59,14 @@ public class CustomerServiceImpl implements CustomerService { public Customer findCustomerById(CustomerId customerId) { log.trace("Executing findCustomerById [{}]", customerId); Validator.validateId(customerId, "Incorrect customerId " + customerId); - CustomerEntity customerEntity = customerDao.findById(customerId.getId()); - return getData(customerEntity); + return customerDao.findById(customerId.getId()); } @Override public Customer saveCustomer(Customer customer) { log.trace("Executing saveCustomer [{}]", customer); customerValidator.validate(customer); - CustomerEntity customerEntity = customerDao.save(customer); - return getData(customerEntity); + return customerDao.save(customer); } @Override @@ -96,8 +88,7 @@ public class CustomerServiceImpl implements CustomerService { log.trace("Executing findCustomersByTenantId, tenantId [{}], pageLink [{}]", tenantId, pageLink); Validator.validateId(tenantId, "Incorrect tenantId " + tenantId); Validator.validatePageLink(pageLink, "Incorrect page link " + pageLink); - List customerEntities = customerDao.findCustomersByTenantId(tenantId.getId(), pageLink); - List customers = convertDataList(customerEntities); + List customers = customerDao.findCustomersByTenantId(tenantId.getId(), pageLink); return new TextPageData(customers, pageLink); } @@ -121,7 +112,7 @@ public class CustomerServiceImpl implements CustomerService { if (customer.getTenantId() == null) { throw new DataValidationException("Customer should be assigned to tenant!"); } else { - TenantEntity tenant = tenantDao.findById(customer.getTenantId().getId()); + Tenant tenant = tenantDao.findById(customer.getTenantId().getId()); if (tenant == null) { throw new DataValidationException("Customer is referencing to non-existent tenant!"); } @@ -129,17 +120,17 @@ public class CustomerServiceImpl implements CustomerService { } }; - private PaginatedRemover customersByTenantRemover = - new PaginatedRemover() { + private PaginatedRemover customersByTenantRemover = + new PaginatedRemover() { @Override - protected List findEntities(TenantId id, TextPageLink pageLink) { + protected List findEntities(TenantId id, TextPageLink pageLink) { return customerDao.findCustomersByTenantId(id.getId(), pageLink); } @Override - protected void removeEntity(CustomerEntity entity) { - deleteCustomer(new CustomerId(entity.getId())); + protected void removeEntity(Customer entity) { + deleteCustomer(new CustomerId(entity.getUuidId())); } }; } diff --git a/dao/src/main/java/org/thingsboard/server/dao/dashboard/CassandraDashboardDao.java b/dao/src/main/java/org/thingsboard/server/dao/dashboard/CassandraDashboardDao.java new file mode 100644 index 0000000000..97a5c7a614 --- /dev/null +++ b/dao/src/main/java/org/thingsboard/server/dao/dashboard/CassandraDashboardDao.java @@ -0,0 +1,37 @@ +/** + * Copyright © 2016-2017 The Thingsboard Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.server.dao.dashboard; + +import org.springframework.stereotype.Component; +import org.thingsboard.server.common.data.Dashboard; +import org.thingsboard.server.dao.CassandraAbstractSearchTextDao; +import org.thingsboard.server.dao.model.DashboardEntity; + +import static org.thingsboard.server.dao.model.ModelConstants.DASHBOARD_COLUMN_FAMILY_NAME; + +@Component +public class CassandraDashboardDao extends CassandraAbstractSearchTextDao implements DashboardDao { + + @Override + protected Class getColumnFamilyClass() { + return DashboardEntity.class; + } + + @Override + protected String getColumnFamilyName() { + return DASHBOARD_COLUMN_FAMILY_NAME; + } +} diff --git a/dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardInfoDaoImpl.java b/dao/src/main/java/org/thingsboard/server/dao/dashboard/CassandraDashboardInfoDao.java similarity index 79% rename from dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardInfoDaoImpl.java rename to dao/src/main/java/org/thingsboard/server/dao/dashboard/CassandraDashboardInfoDao.java index 007bc8d7bb..19527c7407 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardInfoDaoImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/dashboard/CassandraDashboardInfoDao.java @@ -17,8 +17,10 @@ package org.thingsboard.server.dao.dashboard; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; +import org.thingsboard.server.common.data.DashboardInfo; import org.thingsboard.server.common.data.page.TextPageLink; -import org.thingsboard.server.dao.AbstractSearchTextDao; +import org.thingsboard.server.dao.CassandraAbstractSearchTextDao; +import org.thingsboard.server.dao.DaoUtil; import org.thingsboard.server.dao.model.DashboardInfoEntity; import java.util.Arrays; @@ -31,7 +33,7 @@ import static org.thingsboard.server.dao.model.ModelConstants.*; @Component @Slf4j -public class DashboardInfoDaoImpl extends AbstractSearchTextDao implements DashboardInfoDao { +public class CassandraDashboardInfoDao extends CassandraAbstractSearchTextDao implements DashboardInfoDao { @Override protected Class getColumnFamilyClass() { @@ -44,18 +46,18 @@ public class DashboardInfoDaoImpl extends AbstractSearchTextDao findDashboardsByTenantId(UUID tenantId, TextPageLink pageLink) { + public List findDashboardsByTenantId(UUID tenantId, TextPageLink pageLink) { log.debug("Try to find dashboards by tenantId [{}] and pageLink [{}]", tenantId, pageLink); List dashboardEntities = findPageWithTextSearch(DASHBOARD_BY_TENANT_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME, Collections.singletonList(eq(DASHBOARD_TENANT_ID_PROPERTY, tenantId)), pageLink); log.trace("Found dashboards [{}] by tenantId [{}] and pageLink [{}]", dashboardEntities, tenantId, pageLink); - return dashboardEntities; + return DaoUtil.convertDataList(dashboardEntities); } @Override - public List findDashboardsByTenantIdAndCustomerId(UUID tenantId, UUID customerId, TextPageLink pageLink) { + public List findDashboardsByTenantIdAndCustomerId(UUID tenantId, UUID customerId, TextPageLink pageLink) { log.debug("Try to find dashboards by tenantId [{}], customerId[{}] and pageLink [{}]", tenantId, customerId, pageLink); List dashboardEntities = findPageWithTextSearch(DASHBOARD_BY_CUSTOMER_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME, Arrays.asList(eq(DASHBOARD_CUSTOMER_ID_PROPERTY, customerId), @@ -63,7 +65,7 @@ public class DashboardInfoDaoImpl extends AbstractSearchTextDao the generic type */ -public interface DashboardDao extends Dao { +public interface DashboardDao extends Dao { /** * Save or update dashboard object @@ -37,6 +29,6 @@ public interface DashboardDao extends Dao { * @param dashboard the dashboard object * @return saved dashboard object */ - DashboardEntity save(Dashboard dashboard); + Dashboard save(Dashboard dashboard); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardDaoImpl.java b/dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardDaoImpl.java deleted file mode 100644 index 23546fde69..0000000000 --- a/dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardDaoImpl.java +++ /dev/null @@ -1,60 +0,0 @@ -/** - * Copyright © 2016-2017 The Thingsboard Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.thingsboard.server.dao.dashboard; - -import static com.datastax.driver.core.querybuilder.QueryBuilder.eq; -import static org.thingsboard.server.dao.model.ModelConstants.DASHBOARD_BY_CUSTOMER_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME; -import static org.thingsboard.server.dao.model.ModelConstants.DASHBOARD_BY_TENANT_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME; -import static org.thingsboard.server.dao.model.ModelConstants.DASHBOARD_COLUMN_FAMILY_NAME; -import static org.thingsboard.server.dao.model.ModelConstants.DASHBOARD_CUSTOMER_ID_PROPERTY; -import static org.thingsboard.server.dao.model.ModelConstants.DASHBOARD_TENANT_ID_PROPERTY; -import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID; - -import java.util.Arrays; -import java.util.List; -import java.util.UUID; - -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; -import org.thingsboard.server.common.data.Dashboard; -import org.thingsboard.server.common.data.page.TextPageLink; -import org.thingsboard.server.dao.AbstractSearchTextDao; -import org.thingsboard.server.dao.model.DashboardEntity; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.thingsboard.server.dao.model.DashboardInfoEntity; - -@Component -@Slf4j -public class DashboardDaoImpl extends AbstractSearchTextDao implements DashboardDao { - - @Override - protected Class getColumnFamilyClass() { - return DashboardEntity.class; - } - - @Override - protected String getColumnFamilyName() { - return DASHBOARD_COLUMN_FAMILY_NAME; - } - - @Override - public DashboardEntity save(Dashboard dashboard) { - log.debug("Save dashboard [{}] ", dashboard); - return save(new DashboardEntity(dashboard)); - } - -} diff --git a/dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardInfoDao.java b/dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardInfoDao.java index 9852b358be..a26bd1410f 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardInfoDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardInfoDao.java @@ -15,21 +15,17 @@ */ package org.thingsboard.server.dao.dashboard; -import java.util.List; -import java.util.UUID; - -import org.thingsboard.server.common.data.Dashboard; +import org.thingsboard.server.common.data.DashboardInfo; import org.thingsboard.server.common.data.page.TextPageLink; import org.thingsboard.server.dao.Dao; -import org.thingsboard.server.dao.model.DashboardEntity; -import org.thingsboard.server.dao.model.DashboardInfoEntity; + +import java.util.List; +import java.util.UUID; /** * The Interface DashboardInfoDao. - * - * @param the generic type */ -public interface DashboardInfoDao extends Dao { +public interface DashboardInfoDao extends Dao { /** * Find dashboards by tenantId and page link. @@ -38,7 +34,7 @@ public interface DashboardInfoDao extends Dao { * @param pageLink the page link * @return the list of dashboard objects */ - List findDashboardsByTenantId(UUID tenantId, TextPageLink pageLink); + List findDashboardsByTenantId(UUID tenantId, TextPageLink pageLink); /** * Find dashboards by tenantId, customerId and page link. @@ -48,6 +44,6 @@ public interface DashboardInfoDao extends Dao { * @param pageLink the page link * @return the list of dashboard objects */ - List findDashboardsByTenantIdAndCustomerId(UUID tenantId, UUID customerId, TextPageLink pageLink); + List findDashboardsByTenantIdAndCustomerId(UUID tenantId, UUID customerId, TextPageLink pageLink); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardService.java b/dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardService.java index 8c860646bd..b49b5b44fe 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardService.java @@ -25,22 +25,22 @@ import org.thingsboard.server.common.data.page.TextPageLink; public interface DashboardService { - public Dashboard findDashboardById(DashboardId dashboardId); - - public Dashboard saveDashboard(Dashboard dashboard); - - public Dashboard assignDashboardToCustomer(DashboardId dashboardId, CustomerId customerId); + Dashboard findDashboardById(DashboardId dashboardId); - public Dashboard unassignDashboardFromCustomer(DashboardId dashboardId); + Dashboard saveDashboard(Dashboard dashboard); - public void deleteDashboard(DashboardId dashboardId); - - public TextPageData findDashboardsByTenantId(TenantId tenantId, TextPageLink pageLink); + Dashboard assignDashboardToCustomer(DashboardId dashboardId, CustomerId customerId); - public void deleteDashboardsByTenantId(TenantId tenantId); - - public TextPageData findDashboardsByTenantIdAndCustomerId(TenantId tenantId, CustomerId customerId, TextPageLink pageLink); + Dashboard unassignDashboardFromCustomer(DashboardId dashboardId); + + void deleteDashboard(DashboardId dashboardId); + + TextPageData findDashboardsByTenantId(TenantId tenantId, TextPageLink pageLink); + + void deleteDashboardsByTenantId(TenantId tenantId); + + TextPageData findDashboardsByTenantIdAndCustomerId(TenantId tenantId, CustomerId customerId, TextPageLink pageLink); + + void unassignCustomerDashboards(TenantId tenantId, CustomerId customerId); - public void unassignCustomerDashboards(TenantId tenantId, CustomerId customerId); - } diff --git a/dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardServiceImpl.java index 2e0abfbdfd..fca73c4ae4 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardServiceImpl.java @@ -15,15 +15,14 @@ */ package org.thingsboard.server.dao.dashboard; -import static org.thingsboard.server.dao.DaoUtil.convertDataList; -import static org.thingsboard.server.dao.DaoUtil.getData; - -import java.util.List; - import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.thingsboard.server.common.data.Customer; import org.thingsboard.server.common.data.Dashboard; import org.thingsboard.server.common.data.DashboardInfo; +import org.thingsboard.server.common.data.Tenant; import org.thingsboard.server.common.data.id.CustomerId; import org.thingsboard.server.common.data.id.DashboardId; import org.thingsboard.server.common.data.id.TenantId; @@ -31,15 +30,13 @@ import org.thingsboard.server.common.data.page.TextPageData; import org.thingsboard.server.common.data.page.TextPageLink; import org.thingsboard.server.dao.customer.CustomerDao; import org.thingsboard.server.dao.exception.DataValidationException; -import org.thingsboard.server.dao.model.*; +import org.thingsboard.server.dao.model.ModelConstants; import org.thingsboard.server.dao.service.DataValidator; import org.thingsboard.server.dao.service.PaginatedRemover; -import org.thingsboard.server.dao.tenant.TenantDao; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; import org.thingsboard.server.dao.service.Validator; +import org.thingsboard.server.dao.tenant.TenantDao; + +import java.util.List; @Service @Slf4j @@ -61,16 +58,14 @@ public class DashboardServiceImpl implements DashboardService { public Dashboard findDashboardById(DashboardId dashboardId) { log.trace("Executing findDashboardById [{}]", dashboardId); Validator.validateId(dashboardId, "Incorrect dashboardId " + dashboardId); - DashboardEntity dashboardEntity = dashboardDao.findById(dashboardId.getId()); - return getData(dashboardEntity); + return dashboardDao.findById(dashboardId.getId()); } @Override public Dashboard saveDashboard(Dashboard dashboard) { log.trace("Executing saveDashboard [{}]", dashboard); dashboardValidator.validate(dashboard); - DashboardEntity dashboardEntity = dashboardDao.save(dashboard); - return getData(dashboardEntity); + return dashboardDao.save(dashboard); } @Override @@ -99,9 +94,8 @@ public class DashboardServiceImpl implements DashboardService { log.trace("Executing findDashboardsByTenantId, tenantId [{}], pageLink [{}]", tenantId, pageLink); Validator.validateId(tenantId, "Incorrect tenantId " + tenantId); Validator.validatePageLink(pageLink, "Incorrect page link " + pageLink); - List dashboardEntities = dashboardInfoDao.findDashboardsByTenantId(tenantId.getId(), pageLink); - List dashboards = convertDataList(dashboardEntities); - return new TextPageData(dashboards, pageLink); + List dashboards = dashboardInfoDao.findDashboardsByTenantId(tenantId.getId(), pageLink); + return new TextPageData<>(dashboards, pageLink); } @Override @@ -117,9 +111,8 @@ public class DashboardServiceImpl implements DashboardService { Validator.validateId(tenantId, "Incorrect tenantId " + tenantId); Validator.validateId(customerId, "Incorrect customerId " + customerId); Validator.validatePageLink(pageLink, "Incorrect page link " + pageLink); - List dashboardEntities = dashboardInfoDao.findDashboardsByTenantIdAndCustomerId(tenantId.getId(), customerId.getId(), pageLink); - List dashboards = convertDataList(dashboardEntities); - return new TextPageData(dashboards, pageLink); + List dashboards = dashboardInfoDao.findDashboardsByTenantIdAndCustomerId(tenantId.getId(), customerId.getId(), pageLink); + return new TextPageData<>(dashboards, pageLink); } @Override @@ -140,7 +133,7 @@ public class DashboardServiceImpl implements DashboardService { if (dashboard.getTenantId() == null) { throw new DataValidationException("Dashboard should be assigned to tenant!"); } else { - TenantEntity tenant = tenantDao.findById(dashboard.getTenantId().getId()); + Tenant tenant = tenantDao.findById(dashboard.getTenantId().getId()); if (tenant == null) { throw new DataValidationException("Dashboard is referencing to non-existent tenant!"); } @@ -148,32 +141,32 @@ public class DashboardServiceImpl implements DashboardService { if (dashboard.getCustomerId() == null) { dashboard.setCustomerId(new CustomerId(ModelConstants.NULL_UUID)); } else if (!dashboard.getCustomerId().getId().equals(ModelConstants.NULL_UUID)) { - CustomerEntity customer = customerDao.findById(dashboard.getCustomerId().getId()); + Customer customer = customerDao.findById(dashboard.getCustomerId().getId()); if (customer == null) { throw new DataValidationException("Can't assign dashboard to non-existent customer!"); } - if (!customer.getTenantId().equals(dashboard.getTenantId().getId())) { + if (!customer.getTenantId().getId().equals(dashboard.getTenantId().getId())) { throw new DataValidationException("Can't assign dashboard to customer from different tenant!"); } } } }; - private PaginatedRemover tenantDashboardsRemover = - new PaginatedRemover() { + private PaginatedRemover tenantDashboardsRemover = + new PaginatedRemover() { @Override - protected List findEntities(TenantId id, TextPageLink pageLink) { + protected List findEntities(TenantId id, TextPageLink pageLink) { return dashboardInfoDao.findDashboardsByTenantId(id.getId(), pageLink); } @Override - protected void removeEntity(DashboardInfoEntity entity) { - deleteDashboard(new DashboardId(entity.getId())); + protected void removeEntity(DashboardInfo entity) { + deleteDashboard(new DashboardId(entity.getUuidId())); } }; - class CustomerDashboardsUnassigner extends PaginatedRemover { + private class CustomerDashboardsUnassigner extends PaginatedRemover { private TenantId tenantId; @@ -182,13 +175,13 @@ public class DashboardServiceImpl implements DashboardService { } @Override - protected List findEntities(CustomerId id, TextPageLink pageLink) { + protected List findEntities(CustomerId id, TextPageLink pageLink) { return dashboardInfoDao.findDashboardsByTenantIdAndCustomerId(tenantId.getId(), id.getId(), pageLink); } @Override - protected void removeEntity(DashboardInfoEntity entity) { - unassignDashboardFromCustomer(new DashboardId(entity.getId())); + protected void removeEntity(DashboardInfo entity) { + unassignDashboardFromCustomer(new DashboardId(entity.getUuidId())); } } diff --git a/dao/src/main/java/org/thingsboard/server/dao/device/DeviceCredentialsDaoImpl.java b/dao/src/main/java/org/thingsboard/server/dao/device/CassandraDeviceCredentialsDao.java similarity index 77% rename from dao/src/main/java/org/thingsboard/server/dao/device/DeviceCredentialsDaoImpl.java rename to dao/src/main/java/org/thingsboard/server/dao/device/CassandraDeviceCredentialsDao.java index 68fbc8ca64..c96367e945 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/device/DeviceCredentialsDaoImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/device/CassandraDeviceCredentialsDao.java @@ -15,26 +15,23 @@ */ package org.thingsboard.server.dao.device; -import static com.datastax.driver.core.querybuilder.QueryBuilder.eq; -import static com.datastax.driver.core.querybuilder.QueryBuilder.select; - -import java.util.UUID; - +import com.datastax.driver.core.querybuilder.Select.Where; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import org.thingsboard.server.common.data.security.DeviceCredentials; -import org.thingsboard.server.dao.AbstractModelDao; +import org.thingsboard.server.dao.CassandraAbstractModelDao; +import org.thingsboard.server.dao.DaoUtil; import org.thingsboard.server.dao.model.DeviceCredentialsEntity; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Repository; - -import com.datastax.driver.core.querybuilder.Select.Where; import org.thingsboard.server.dao.model.ModelConstants; +import java.util.UUID; + +import static com.datastax.driver.core.querybuilder.QueryBuilder.eq; +import static com.datastax.driver.core.querybuilder.QueryBuilder.select; + @Component @Slf4j -public class DeviceCredentialsDaoImpl extends AbstractModelDao implements DeviceCredentialsDao { +public class CassandraDeviceCredentialsDao extends CassandraAbstractModelDao implements DeviceCredentialsDao { @Override protected Class getColumnFamilyClass() { @@ -47,31 +44,24 @@ public class DeviceCredentialsDaoImpl extends AbstractModelDao implements DeviceDao { +public class CassandraDeviceDao extends CassandraAbstractSearchTextDao implements DeviceDao { @Override protected Class getColumnFamilyClass() { @@ -48,23 +45,17 @@ public class DeviceDaoImpl extends AbstractSearchTextDao implement } @Override - public DeviceEntity save(Device device) { - log.debug("Save device [{}] ", device); - return save(new DeviceEntity(device)); - } - - @Override - public List findDevicesByTenantId(UUID tenantId, TextPageLink pageLink) { + public List findDevicesByTenantId(UUID tenantId, TextPageLink pageLink) { log.debug("Try to find devices by tenantId [{}] and pageLink [{}]", tenantId, pageLink); List deviceEntities = findPageWithTextSearch(DEVICE_BY_TENANT_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME, Collections.singletonList(eq(DEVICE_TENANT_ID_PROPERTY, tenantId)), pageLink); log.trace("Found devices [{}] by tenantId [{}] and pageLink [{}]", deviceEntities, tenantId, pageLink); - return deviceEntities; + return DaoUtil.convertDataList(deviceEntities); } @Override - public ListenableFuture> findDevicesByTenantIdAndIdsAsync(UUID tenantId, List deviceIds) { + public ListenableFuture> findDevicesByTenantIdAndIdsAsync(UUID tenantId, List deviceIds) { log.debug("Try to find devices by tenantId [{}] and device Ids [{}]", tenantId, deviceIds); Select select = select().from(getColumnFamilyName()); Select.Where query = select.where(); @@ -74,7 +65,7 @@ public class DeviceDaoImpl extends AbstractSearchTextDao implement } @Override - public List findDevicesByTenantIdAndCustomerId(UUID tenantId, UUID customerId, TextPageLink pageLink) { + public List findDevicesByTenantIdAndCustomerId(UUID tenantId, UUID customerId, TextPageLink pageLink) { log.debug("Try to find devices by tenantId [{}], customerId[{}] and pageLink [{}]", tenantId, customerId, pageLink); List deviceEntities = findPageWithTextSearch(DEVICE_BY_CUSTOMER_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME, Arrays.asList(eq(DEVICE_CUSTOMER_ID_PROPERTY, customerId), @@ -82,11 +73,11 @@ public class DeviceDaoImpl extends AbstractSearchTextDao implement pageLink); log.trace("Found devices [{}] by tenantId [{}], customerId [{}] and pageLink [{}]", deviceEntities, tenantId, customerId, pageLink); - return deviceEntities; + return DaoUtil.convertDataList(deviceEntities); } @Override - public ListenableFuture> findDevicesByTenantIdCustomerIdAndIdsAsync(UUID tenantId, UUID customerId, List deviceIds) { + public ListenableFuture> findDevicesByTenantIdCustomerIdAndIdsAsync(UUID tenantId, UUID customerId, List deviceIds) { log.debug("Try to find devices by tenantId [{}], customerId [{}] and device Ids [{}]", tenantId, customerId, deviceIds); Select select = select().from(getColumnFamilyName()); Select.Where query = select.where(); @@ -97,12 +88,12 @@ public class DeviceDaoImpl extends AbstractSearchTextDao implement } @Override - public Optional findDevicesByTenantIdAndName(UUID tenantId, String deviceName) { + public Optional findDevicesByTenantIdAndName(UUID tenantId, String deviceName) { Select select = select().from(DEVICE_BY_TENANT_AND_NAME_VIEW_NAME); Select.Where query = select.where(); query.and(eq(DEVICE_TENANT_ID_PROPERTY, tenantId)); query.and(eq(DEVICE_NAME_PROPERTY, deviceName)); - return Optional.ofNullable(findOneByStatement(query)); + return Optional.ofNullable(DaoUtil.getData(findOneByStatement(query))); } } diff --git a/dao/src/main/java/org/thingsboard/server/dao/device/DeviceCredentialsDao.java b/dao/src/main/java/org/thingsboard/server/dao/device/DeviceCredentialsDao.java index 89a4a025c5..c13129ad1d 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/device/DeviceCredentialsDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/device/DeviceCredentialsDao.java @@ -15,18 +15,15 @@ */ package org.thingsboard.server.dao.device; -import java.util.UUID; - import org.thingsboard.server.common.data.security.DeviceCredentials; import org.thingsboard.server.dao.Dao; -import org.thingsboard.server.dao.model.DeviceCredentialsEntity; + +import java.util.UUID; /** * The Interface DeviceCredentialsDao. - * - * @param the generic type */ -public interface DeviceCredentialsDao extends Dao { +public interface DeviceCredentialsDao extends Dao { /** * Save or update device credentials object @@ -34,7 +31,7 @@ public interface DeviceCredentialsDao extends Dao { * @param deviceCredentials the device credentials object * @return saved device credentials object */ - DeviceCredentialsEntity save(DeviceCredentials deviceCredentials); + DeviceCredentials save(DeviceCredentials deviceCredentials); /** * Find device credentials by device id. @@ -42,7 +39,7 @@ public interface DeviceCredentialsDao extends Dao { * @param deviceId the device id * @return the device credentials object */ - DeviceCredentialsEntity findByDeviceId(UUID deviceId); + DeviceCredentials findByDeviceId(UUID deviceId); /** * Find device credentials by credentials id. @@ -50,6 +47,6 @@ public interface DeviceCredentialsDao extends Dao { * @param credentialsId the credentials id * @return the device credentials object */ - DeviceCredentialsEntity findByCredentialsId(String credentialsId); + DeviceCredentials findByCredentialsId(String credentialsId); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/device/DeviceCredentialsServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/device/DeviceCredentialsServiceImpl.java index 10e329ad4d..ae2322121c 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/device/DeviceCredentialsServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/device/DeviceCredentialsServiceImpl.java @@ -26,10 +26,8 @@ import org.thingsboard.server.common.data.security.DeviceCredentials; import org.thingsboard.server.common.data.security.DeviceCredentialsType; import org.thingsboard.server.dao.EncryptionUtil; import org.thingsboard.server.dao.exception.DataValidationException; -import org.thingsboard.server.dao.model.DeviceCredentialsEntity; import org.thingsboard.server.dao.service.DataValidator; -import static org.thingsboard.server.dao.DaoUtil.getData; import static org.thingsboard.server.dao.service.Validator.validateId; import static org.thingsboard.server.dao.service.Validator.validateString; @@ -47,16 +45,14 @@ public class DeviceCredentialsServiceImpl implements DeviceCredentialsService { public DeviceCredentials findDeviceCredentialsByDeviceId(DeviceId deviceId) { log.trace("Executing findDeviceCredentialsByDeviceId [{}]", deviceId); validateId(deviceId, "Incorrect deviceId " + deviceId); - DeviceCredentialsEntity deviceCredentialsEntity = deviceCredentialsDao.findByDeviceId(deviceId.getId()); - return getData(deviceCredentialsEntity); + return deviceCredentialsDao.findByDeviceId(deviceId.getId()); } @Override public DeviceCredentials findDeviceCredentialsByCredentialsId(String credentialsId) { log.trace("Executing findDeviceCredentialsByCredentialsId [{}]", credentialsId); validateString(credentialsId, "Incorrect credentialsId " + credentialsId); - DeviceCredentialsEntity deviceCredentialsEntity = deviceCredentialsDao.findByCredentialsId(credentialsId); - return getData(deviceCredentialsEntity); + return deviceCredentialsDao.findByCredentialsId(credentialsId); } @Override @@ -75,7 +71,7 @@ public class DeviceCredentialsServiceImpl implements DeviceCredentialsService { } log.trace("Executing updateDeviceCredentials [{}]", deviceCredentials); credentialsValidator.validate(deviceCredentials); - return getData(deviceCredentialsDao.save(deviceCredentials)); + return deviceCredentialsDao.save(deviceCredentials); } private void formatCertData(DeviceCredentials deviceCredentials) { @@ -96,7 +92,7 @@ public class DeviceCredentialsServiceImpl implements DeviceCredentialsService { @Override protected void validateCreate(DeviceCredentials deviceCredentials) { - DeviceCredentialsEntity existingCredentialsEntity = deviceCredentialsDao.findByCredentialsId(deviceCredentials.getCredentialsId()); + DeviceCredentials existingCredentialsEntity = deviceCredentialsDao.findByCredentialsId(deviceCredentials.getCredentialsId()); if (existingCredentialsEntity != null) { throw new DataValidationException("Create of existent device credentials!"); } @@ -104,12 +100,12 @@ public class DeviceCredentialsServiceImpl implements DeviceCredentialsService { @Override protected void validateUpdate(DeviceCredentials deviceCredentials) { - DeviceCredentialsEntity existingCredentialsEntity = deviceCredentialsDao.findById(deviceCredentials.getUuidId()); - if (existingCredentialsEntity == null) { + DeviceCredentials existingCredentials = deviceCredentialsDao.findById(deviceCredentials.getUuidId()); + if (existingCredentials == null) { throw new DataValidationException("Unable to update non-existent device credentials!"); } - DeviceCredentialsEntity sameCredentialsIdEntity = deviceCredentialsDao.findByCredentialsId(deviceCredentials.getCredentialsId()); - if (sameCredentialsIdEntity != null && !sameCredentialsIdEntity.getId().equals(deviceCredentials.getUuidId())) { + DeviceCredentials sameCredentialsId = deviceCredentialsDao.findByCredentialsId(deviceCredentials.getCredentialsId()); + if (sameCredentialsId != null && !sameCredentialsId.getUuidId().equals(deviceCredentials.getUuidId())) { throw new DataValidationException("Specified credentials are already registered!"); } } diff --git a/dao/src/main/java/org/thingsboard/server/dao/device/DeviceDao.java b/dao/src/main/java/org/thingsboard/server/dao/device/DeviceDao.java index b8d395c8e2..86d2f8f7e6 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/device/DeviceDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/device/DeviceDao.java @@ -15,21 +15,20 @@ */ package org.thingsboard.server.dao.device; -import java.util.List; -import java.util.Optional; -import java.util.UUID; - import com.google.common.util.concurrent.ListenableFuture; import org.thingsboard.server.common.data.Device; import org.thingsboard.server.common.data.page.TextPageLink; import org.thingsboard.server.dao.Dao; -import org.thingsboard.server.dao.model.DeviceEntity; + +import java.util.List; +import java.util.Optional; +import java.util.UUID; /** * The Interface DeviceDao. * */ -public interface DeviceDao extends Dao { +public interface DeviceDao extends Dao { /** * Save or update device object @@ -37,7 +36,7 @@ public interface DeviceDao extends Dao { * @param device the device object * @return saved device object */ - DeviceEntity save(Device device); + Device save(Device device); /** * Find devices by tenantId and page link. @@ -46,7 +45,7 @@ public interface DeviceDao extends Dao { * @param pageLink the page link * @return the list of device objects */ - List findDevicesByTenantId(UUID tenantId, TextPageLink pageLink); + List findDevicesByTenantId(UUID tenantId, TextPageLink pageLink); /** * Find devices by tenantId and devices Ids. @@ -55,7 +54,7 @@ public interface DeviceDao extends Dao { * @param deviceIds the device Ids * @return the list of device objects */ - ListenableFuture> findDevicesByTenantIdAndIdsAsync(UUID tenantId, List deviceIds); + ListenableFuture> findDevicesByTenantIdAndIdsAsync(UUID tenantId, List deviceIds); /** * Find devices by tenantId, customerId and page link. @@ -65,7 +64,7 @@ public interface DeviceDao extends Dao { * @param pageLink the page link * @return the list of device objects */ - List findDevicesByTenantIdAndCustomerId(UUID tenantId, UUID customerId, TextPageLink pageLink); + List findDevicesByTenantIdAndCustomerId(UUID tenantId, UUID customerId, TextPageLink pageLink); /** * Find devices by tenantId, customerId and devices Ids. @@ -75,7 +74,7 @@ public interface DeviceDao extends Dao { * @param deviceIds the device Ids * @return the list of device objects */ - ListenableFuture> findDevicesByTenantIdCustomerIdAndIdsAsync(UUID tenantId, UUID customerId, List deviceIds); + ListenableFuture> findDevicesByTenantIdCustomerIdAndIdsAsync(UUID tenantId, UUID customerId, List deviceIds); /** * Find devices by tenantId and device name. @@ -84,5 +83,5 @@ public interface DeviceDao extends Dao { * @param name the device name * @return the optional device object */ - Optional findDevicesByTenantIdAndName(UUID tenantId, String name); + Optional findDevicesByTenantIdAndName(UUID tenantId, String name); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/device/DeviceServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/device/DeviceServiceImpl.java index 3d1ce31349..4a365949cc 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/device/DeviceServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/device/DeviceServiceImpl.java @@ -43,13 +43,9 @@ import org.thingsboard.server.dao.tenant.TenantDao; import java.util.List; import java.util.Optional; -import static org.thingsboard.server.dao.DaoUtil.convertDataList; -import static org.thingsboard.server.dao.DaoUtil.getData; -import static org.thingsboard.server.dao.DaoUtil.toUUIDs; +import static org.thingsboard.server.dao.DaoUtil.*; import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID; -import static org.thingsboard.server.dao.service.Validator.validateId; -import static org.thingsboard.server.dao.service.Validator.validateIds; -import static org.thingsboard.server.dao.service.Validator.validatePageLink; +import static org.thingsboard.server.dao.service.Validator.*; @Service @Slf4j @@ -71,15 +67,14 @@ public class DeviceServiceImpl implements DeviceService { public Device findDeviceById(DeviceId deviceId) { log.trace("Executing findDeviceById [{}]", deviceId); validateId(deviceId, "Incorrect deviceId " + deviceId); - DeviceEntity deviceEntity = deviceDao.findById(deviceId.getId()); - return getData(deviceEntity); + return deviceDao.findById(deviceId.getId()); } @Override public ListenableFuture findDeviceByIdAsync(DeviceId deviceId) { log.trace("Executing findDeviceById [{}]", deviceId); validateId(deviceId, "Incorrect deviceId " + deviceId); - ListenableFuture deviceEntity = deviceDao.findByIdAsync(deviceId.getId()); + ListenableFuture deviceEntity = deviceDao.findByIdAsync(deviceId.getId()); return Futures.transform(deviceEntity, (Function) input -> getData(input)); } @@ -87,9 +82,9 @@ public class DeviceServiceImpl implements DeviceService { public Optional findDeviceByTenantIdAndName(TenantId tenantId, String name) { log.trace("Executing findDeviceByTenantIdAndName [{}][{}]", tenantId, name); validateId(tenantId, "Incorrect tenantId " + tenantId); - Optional deviceEntityOpt = deviceDao.findDevicesByTenantIdAndName(tenantId.getId(), name); + Optional deviceEntityOpt = deviceDao.findDevicesByTenantIdAndName(tenantId.getId(), name); if (deviceEntityOpt.isPresent()) { - return Optional.of(getData(deviceEntityOpt.get())); + return Optional.of(deviceEntityOpt.get()); } else { return Optional.empty(); } @@ -99,15 +94,15 @@ public class DeviceServiceImpl implements DeviceService { public Device saveDevice(Device device) { log.trace("Executing saveDevice [{}]", device); deviceValidator.validate(device); - DeviceEntity deviceEntity = deviceDao.save(device); + Device savedDevice = deviceDao.save(device); if (device.getId() == null) { DeviceCredentials deviceCredentials = new DeviceCredentials(); - deviceCredentials.setDeviceId(new DeviceId(deviceEntity.getId())); + deviceCredentials.setDeviceId(new DeviceId(savedDevice.getUuidId())); deviceCredentials.setCredentialsType(DeviceCredentialsType.ACCESS_TOKEN); deviceCredentials.setCredentialsId(RandomStringUtils.randomAlphanumeric(20)); deviceCredentialsService.createDeviceCredentials(deviceCredentials); } - return getData(deviceEntity); + return savedDevice; } @Override @@ -140,8 +135,7 @@ public class DeviceServiceImpl implements DeviceService { log.trace("Executing findDevicesByTenantId, tenantId [{}], pageLink [{}]", tenantId, pageLink); validateId(tenantId, "Incorrect tenantId " + tenantId); validatePageLink(pageLink, "Incorrect page link " + pageLink); - List deviceEntities = deviceDao.findDevicesByTenantId(tenantId.getId(), pageLink); - List devices = convertDataList(deviceEntities); + List devices = deviceDao.findDevicesByTenantId(tenantId.getId(), pageLink); return new TextPageData(devices, pageLink); } @@ -150,7 +144,7 @@ public class DeviceServiceImpl implements DeviceService { log.trace("Executing findDevicesByTenantIdAndIdsAsync, tenantId [{}], deviceIds [{}]", tenantId, deviceIds); validateId(tenantId, "Incorrect tenantId " + tenantId); validateIds(deviceIds, "Incorrect deviceIds " + deviceIds); - ListenableFuture> deviceEntities = deviceDao.findDevicesByTenantIdAndIdsAsync(tenantId.getId(), toUUIDs(deviceIds)); + ListenableFuture> devices = deviceDao.findDevicesByTenantIdAndIdsAsync(tenantId.getId(), toUUIDs(deviceIds)); return Futures.transform(deviceEntities, (Function, List>) input -> convertDataList(input)); } @@ -168,8 +162,7 @@ public class DeviceServiceImpl implements DeviceService { validateId(tenantId, "Incorrect tenantId " + tenantId); validateId(customerId, "Incorrect customerId " + customerId); validatePageLink(pageLink, "Incorrect page link " + pageLink); - List deviceEntities = deviceDao.findDevicesByTenantIdAndCustomerId(tenantId.getId(), customerId.getId(), pageLink); - List devices = convertDataList(deviceEntities); + List devices = deviceDao.findDevicesByTenantIdAndCustomerId(tenantId.getId(), customerId.getId(), pageLink); return new TextPageData(devices, pageLink); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/event/BaseEventService.java b/dao/src/main/java/org/thingsboard/server/dao/event/BaseEventService.java index 625f1f58ff..65fc5679f1 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/event/BaseEventService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/event/BaseEventService.java @@ -15,6 +15,7 @@ */ package org.thingsboard.server.dao.event; +// CASSANDRA ??? import com.datastax.driver.core.utils.UUIDs; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -27,14 +28,11 @@ import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.TimePageData; import org.thingsboard.server.common.data.page.TimePageLink; import org.thingsboard.server.dao.exception.DataValidationException; -import org.thingsboard.server.dao.model.EventEntity; import org.thingsboard.server.dao.service.DataValidator; import java.util.List; import java.util.Optional; -import static org.thingsboard.server.dao.DaoUtil.convertDataList; -import static org.thingsboard.server.dao.DaoUtil.getData; import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID; @Service @@ -59,7 +57,7 @@ public class BaseEventService implements EventService { if (StringUtils.isEmpty(event.getUid())) { event.setUid(event.getId().toString()); } - return getData(eventDao.save(event)); + return eventDao.save(event); } @Override @@ -75,8 +73,8 @@ public class BaseEventService implements EventService { if (event.getId() == null) { event.setId(new EventId(UUIDs.timeBased())); } - Optional result = eventDao.saveIfNotExists(event); - return result.isPresent() ? Optional.of(getData(result.get())) : Optional.empty(); + Optional result = eventDao.saveIfNotExists(event); + return result.isPresent() ? Optional.of(result.get()) : Optional.empty(); } @Override @@ -93,22 +91,19 @@ public class BaseEventService implements EventService { if (StringUtils.isEmpty(eventUid)) { throw new DataValidationException("Event uid should be specified!."); } - EventEntity entity = eventDao.findEvent(tenantId.getId(), entityId, eventType, eventUid); - return entity != null ? Optional.of(getData(entity)) : Optional.empty(); + Event event = eventDao.findEvent(tenantId.getId(), entityId, eventType, eventUid); + return event != null ? Optional.of(event) : Optional.empty(); } @Override public TimePageData findEvents(TenantId tenantId, EntityId entityId, TimePageLink pageLink) { - List entities = eventDao.findEvents(tenantId.getId(), entityId, pageLink); - List events = convertDataList(entities); + List events = eventDao.findEvents(tenantId.getId(), entityId, pageLink); return new TimePageData(events, pageLink); } - @Override public TimePageData findEvents(TenantId tenantId, EntityId entityId, String eventType, TimePageLink pageLink) { - List entities = eventDao.findEvents(tenantId.getId(), entityId, eventType, pageLink); - List events = convertDataList(entities); + List events = eventDao.findEvents(tenantId.getId(), entityId, eventType, pageLink); return new TimePageData(events, pageLink); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/event/BaseEventDao.java b/dao/src/main/java/org/thingsboard/server/dao/event/CassandraBaseEventDao.java similarity index 84% rename from dao/src/main/java/org/thingsboard/server/dao/event/BaseEventDao.java rename to dao/src/main/java/org/thingsboard/server/dao/event/CassandraBaseEventDao.java index ce50466a8b..adfef10539 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/event/BaseEventDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/event/CassandraBaseEventDao.java @@ -26,6 +26,7 @@ import org.thingsboard.server.common.data.Event; import org.thingsboard.server.common.data.id.EntityId; import org.thingsboard.server.common.data.page.TimePageLink; import org.thingsboard.server.dao.AbstractSearchTimeDao; +import org.thingsboard.server.dao.DaoUtil; import org.thingsboard.server.dao.model.EventEntity; import org.thingsboard.server.dao.model.ModelConstants; @@ -36,13 +37,11 @@ import java.util.UUID; import static com.datastax.driver.core.querybuilder.QueryBuilder.eq; import static com.datastax.driver.core.querybuilder.QueryBuilder.select; -import static org.thingsboard.server.dao.model.ModelConstants.EVENT_BY_ID_VIEW_NAME; -import static org.thingsboard.server.dao.model.ModelConstants.EVENT_BY_TYPE_AND_ID_VIEW_NAME; -import static org.thingsboard.server.dao.model.ModelConstants.EVENT_COLUMN_FAMILY_NAME; +import static org.thingsboard.server.dao.model.ModelConstants.*; @Component @Slf4j -public class BaseEventDao extends AbstractSearchTimeDao implements EventDao { +public class CassandraBaseEventDao extends AbstractSearchTimeDao implements EventDao { @Override protected Class getColumnFamilyClass() { @@ -55,18 +54,18 @@ public class BaseEventDao extends AbstractSearchTimeDao implements } @Override - public EventEntity save(Event event) { + public Event save(Event event) { log.debug("Save event [{}] ", event); return save(new EventEntity(event), false).orElse(null); } @Override - public Optional saveIfNotExists(Event event) { + public Optional saveIfNotExists(Event event) { return save(new EventEntity(event), true); } @Override - public EventEntity findEvent(UUID tenantId, EntityId entityId, String eventType, String eventUid) { + public Event findEvent(UUID tenantId, EntityId entityId, String eventType, String eventUid) { log.debug("Search event entity by [{}][{}][{}][{}]", tenantId, entityId, eventType, eventUid); Select.Where query = select().from(getColumnFamilyName()).where( eq(ModelConstants.EVENT_TENANT_ID_PROPERTY, tenantId)) @@ -81,11 +80,11 @@ public class BaseEventDao extends AbstractSearchTimeDao implements } else { log.debug("Search result: [{}]", entity != null); } - return entity; + return DaoUtil.getData(entity); } @Override - public List findEvents(UUID tenantId, EntityId entityId, TimePageLink pageLink) { + public List findEvents(UUID tenantId, EntityId entityId, TimePageLink pageLink) { log.trace("Try to find events by tenant [{}], entity [{}]and pageLink [{}]", tenantId, entityId, pageLink); List entities = findPageWithTimeSearch(EVENT_BY_ID_VIEW_NAME, Arrays.asList(eq(ModelConstants.EVENT_TENANT_ID_PROPERTY, tenantId), @@ -93,11 +92,11 @@ public class BaseEventDao extends AbstractSearchTimeDao implements eq(ModelConstants.EVENT_ENTITY_ID_PROPERTY, entityId.getId())), pageLink); log.trace("Found events by tenant [{}], entity [{}] and pageLink [{}]", tenantId, entityId, pageLink); - return entities; + return DaoUtil.convertDataList(entities); } @Override - public List findEvents(UUID tenantId, EntityId entityId, String eventType, TimePageLink pageLink) { + public List findEvents(UUID tenantId, EntityId entityId, String eventType, TimePageLink pageLink) { log.trace("Try to find events by tenant [{}], entity [{}], type [{}] and pageLink [{}]", tenantId, entityId, eventType, pageLink); List entities = findPageWithTimeSearch(EVENT_BY_TYPE_AND_ID_VIEW_NAME, Arrays.asList(eq(ModelConstants.EVENT_TENANT_ID_PROPERTY, tenantId), @@ -108,10 +107,10 @@ public class BaseEventDao extends AbstractSearchTimeDao implements QueryBuilder.desc(ModelConstants.EVENT_TYPE_PROPERTY), pageLink); log.trace("Found events by tenant [{}], entity [{}], type [{}] and pageLink [{}]", tenantId, entityId, eventType, pageLink); - return entities; + return DaoUtil.convertDataList(entities); } - private Optional save(EventEntity entity, boolean ifNotExists) { + private Optional save(EventEntity entity, boolean ifNotExists) { if (entity.getId() == null) { entity.setId(UUIDs.timeBased()); } @@ -128,7 +127,7 @@ public class BaseEventDao extends AbstractSearchTimeDao implements } ResultSet rs = executeWrite(insert); if (rs.wasApplied()) { - return Optional.of(entity); + return Optional.of(DaoUtil.getData(entity)); } else { return Optional.empty(); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/event/EventDao.java b/dao/src/main/java/org/thingsboard/server/dao/event/EventDao.java index 1556a5c089..846c4768d6 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/event/EventDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/event/EventDao.java @@ -19,7 +19,6 @@ import org.thingsboard.server.common.data.Event; import org.thingsboard.server.common.data.id.EntityId; import org.thingsboard.server.common.data.page.TimePageLink; import org.thingsboard.server.dao.Dao; -import org.thingsboard.server.dao.model.EventEntity; import java.util.List; import java.util.Optional; @@ -27,10 +26,8 @@ import java.util.UUID; /** * The Interface DeviceDao. - * - * @param the generic type */ -public interface EventDao extends Dao { +public interface EventDao extends Dao { /** * Save or update event object @@ -38,7 +35,7 @@ public interface EventDao extends Dao { * @param event the event object * @return saved event object */ - EventEntity save(Event event); + Event save(Event event); /** * Save event object if it is not yet saved @@ -46,7 +43,7 @@ public interface EventDao extends Dao { * @param event the event object * @return saved event object */ - Optional saveIfNotExists(Event event); + Optional saveIfNotExists(Event event); /** * Find event by tenantId, entityId and eventUid. @@ -57,7 +54,7 @@ public interface EventDao extends Dao { * @param eventUid the eventUid * @return the event */ - EventEntity findEvent(UUID tenantId, EntityId entityId, String eventType, String eventUid); + Event findEvent(UUID tenantId, EntityId entityId, String eventType, String eventUid); /** * Find events by tenantId, entityId and pageLink. @@ -67,7 +64,7 @@ public interface EventDao extends Dao { * @param pageLink the pageLink * @return the event list */ - List findEvents(UUID tenantId, EntityId entityId, TimePageLink pageLink); + List findEvents(UUID tenantId, EntityId entityId, TimePageLink pageLink); /** * Find events by tenantId, entityId, eventType and pageLink. @@ -78,5 +75,5 @@ public interface EventDao extends Dao { * @param pageLink the pageLink * @return the event list */ - List findEvents(UUID tenantId, EntityId entityId, String eventType, TimePageLink pageLink); + List findEvents(UUID tenantId, EntityId entityId, String eventType, TimePageLink pageLink); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/event/EventService.java b/dao/src/main/java/org/thingsboard/server/dao/event/EventService.java index 9237c89331..1fb40f1943 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/event/EventService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/event/EventService.java @@ -21,7 +21,6 @@ import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.TimePageData; import org.thingsboard.server.common.data.page.TimePageLink; -import java.util.List; import java.util.Optional; public interface EventService { diff --git a/dao/src/main/java/org/thingsboard/server/dao/plugin/BasePluginService.java b/dao/src/main/java/org/thingsboard/server/dao/plugin/BasePluginService.java index 99560d2b8a..b9b73c6c89 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/plugin/BasePluginService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/plugin/BasePluginService.java @@ -17,8 +17,6 @@ package org.thingsboard.server.dao.plugin; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.thingsboard.server.common.data.id.PluginId; @@ -29,13 +27,12 @@ import org.thingsboard.server.common.data.plugin.ComponentDescriptor; import org.thingsboard.server.common.data.plugin.ComponentLifecycleState; import org.thingsboard.server.common.data.plugin.ComponentType; import org.thingsboard.server.common.data.plugin.PluginMetaData; +import org.thingsboard.server.common.data.rule.RuleMetaData; import org.thingsboard.server.dao.component.ComponentDescriptorService; import org.thingsboard.server.dao.exception.DataValidationException; import org.thingsboard.server.dao.exception.DatabaseException; import org.thingsboard.server.dao.exception.IncorrectParameterException; import org.thingsboard.server.dao.model.ModelConstants; -import org.thingsboard.server.dao.model.PluginMetaDataEntity; -import org.thingsboard.server.dao.model.RuleMetaDataEntity; import org.thingsboard.server.dao.rule.RuleDao; import org.thingsboard.server.dao.service.DataValidator; import org.thingsboard.server.dao.service.PaginatedRemover; @@ -46,9 +43,6 @@ import java.util.List; import java.util.UUID; import java.util.stream.Collectors; -import static org.thingsboard.server.dao.DaoUtil.convertDataList; -import static org.thingsboard.server.dao.DaoUtil.getData; - @Service @Slf4j public class BasePluginService implements PluginService { @@ -73,7 +67,7 @@ public class BasePluginService implements PluginService { plugin.setTenantId(SYSTEM_TENANT); } if (plugin.getId() != null) { - PluginMetaData oldVersion = getData(pluginDao.findById(plugin.getId())); + PluginMetaData oldVersion = pluginDao.findById(plugin.getId()); if (plugin.getState() == null) { plugin.setState(oldVersion.getState()); } else if (plugin.getState() != oldVersion.getState()) { @@ -92,33 +86,32 @@ public class BasePluginService implements PluginService { } else if (!ComponentType.PLUGIN.equals(descriptor.getType())) { throw new IncorrectParameterException("Plugin class is actually " + descriptor.getType() + "!"); } - PluginMetaDataEntity entity = pluginDao.findByApiToken(plugin.getApiToken()); - if (entity != null && (plugin.getId() == null || !entity.getId().equals(plugin.getId().getId()))) { + PluginMetaData savedPlugin = pluginDao.findByApiToken(plugin.getApiToken()); + if (savedPlugin != null && (plugin.getId() == null || !savedPlugin.getId().getId().equals(plugin.getId().getId()))) { throw new IncorrectParameterException("API token is already reserved!"); } if (!componentDescriptorService.validate(descriptor, plugin.getConfiguration())) { throw new IncorrectParameterException("Filters configuration is not valid!"); } - return getData(pluginDao.save(plugin)); + return pluginDao.save(plugin); } @Override public PluginMetaData findPluginById(PluginId pluginId) { Validator.validateId(pluginId, "Incorrect plugin id for search request."); - return getData(pluginDao.findById(pluginId)); + return pluginDao.findById(pluginId); } @Override public PluginMetaData findPluginByApiToken(String apiToken) { Validator.validateString(apiToken, "Incorrect plugin apiToken for search request."); - return getData(pluginDao.findByApiToken(apiToken)); + return pluginDao.findByApiToken(apiToken); } @Override public TextPageData findSystemPlugins(TextPageLink pageLink) { Validator.validatePageLink(pageLink, "Incorrect PageLink object for search system plugin request."); - List pluginEntities = pluginDao.findByTenantIdAndPageLink(SYSTEM_TENANT, pageLink); - List plugins = convertDataList(pluginEntities); + List plugins = pluginDao.findByTenantIdAndPageLink(SYSTEM_TENANT, pageLink); return new TextPageData<>(plugins, pageLink); } @@ -126,8 +119,7 @@ public class BasePluginService implements PluginService { public TextPageData findTenantPlugins(TenantId tenantId, TextPageLink pageLink) { Validator.validateId(tenantId, "Incorrect tenant id for search plugins request."); Validator.validatePageLink(pageLink, "Incorrect PageLink object for search plugin request."); - List pluginEntities = pluginDao.findByTenantIdAndPageLink(tenantId, pageLink); - List plugins = convertDataList(pluginEntities); + List plugins = pluginDao.findByTenantIdAndPageLink(tenantId, pageLink); return new TextPageData<>(plugins, pageLink); } @@ -152,8 +144,7 @@ public class BasePluginService implements PluginService { log.trace("Executing findAllTenantPluginsByTenantIdAndPageLink, tenantId [{}], pageLink [{}]", tenantId, pageLink); Validator.validateId(tenantId, "Incorrect tenantId " + tenantId); Validator.validatePageLink(pageLink, "Incorrect page link " + pageLink); - List pluginsEntities = pluginDao.findAllTenantPluginsByTenantId(tenantId.getId(), pageLink); - List plugins = convertDataList(pluginsEntities); + List plugins = pluginDao.findAllTenantPluginsByTenantId(tenantId.getId(), pageLink); return new TextPageData<>(plugins, pageLink); } @@ -181,8 +172,8 @@ public class BasePluginService implements PluginService { @Override public void suspendPluginById(PluginId pluginId) { - PluginMetaDataEntity plugin = pluginDao.findById(pluginId); - List affectedRules = ruleDao.findRulesByPlugin(plugin.getApiToken()) + PluginMetaData plugin = pluginDao.findById(pluginId); + List affectedRules = ruleDao.findRulesByPlugin(plugin.getApiToken()) .stream().filter(rule -> rule.getState() == ComponentLifecycleState.ACTIVE).collect(Collectors.toList()); if (affectedRules.isEmpty()) { updateLifeCycleState(pluginId, ComponentLifecycleState.SUSPENDED); @@ -193,7 +184,7 @@ public class BasePluginService implements PluginService { private void updateLifeCycleState(PluginId pluginId, ComponentLifecycleState state) { Validator.validateId(pluginId, "Incorrect plugin id for state change request."); - PluginMetaDataEntity plugin = pluginDao.findById(pluginId); + PluginMetaData plugin = pluginDao.findById(pluginId); if (plugin != null) { plugin.setState(state); pluginDao.save(plugin); @@ -209,8 +200,8 @@ public class BasePluginService implements PluginService { } private void checkRulesAndDelete(UUID pluginId) { - PluginMetaDataEntity plugin = pluginDao.findById(pluginId); - List affectedRules = ruleDao.findRulesByPlugin(plugin.getApiToken()); + PluginMetaData plugin = pluginDao.findById(pluginId); + List affectedRules = ruleDao.findRulesByPlugin(plugin.getApiToken()); if (affectedRules.isEmpty()) { pluginDao.deleteById(pluginId); } else { @@ -244,17 +235,17 @@ public class BasePluginService implements PluginService { } }; - private PaginatedRemover tenantPluginRemover = - new PaginatedRemover() { + private PaginatedRemover tenantPluginRemover = + new PaginatedRemover() { @Override - protected List findEntities(TenantId id, TextPageLink pageLink) { + protected List findEntities(TenantId id, TextPageLink pageLink) { return pluginDao.findByTenantIdAndPageLink(id, pageLink); } @Override - protected void removeEntity(PluginMetaDataEntity entity) { - checkRulesAndDelete(entity.getId()); + protected void removeEntity(PluginMetaData entity) { + checkRulesAndDelete(entity.getUuidId()); } }; } diff --git a/dao/src/main/java/org/thingsboard/server/dao/plugin/BasePluginDao.java b/dao/src/main/java/org/thingsboard/server/dao/plugin/CassandraBasePluginDao.java similarity index 77% rename from dao/src/main/java/org/thingsboard/server/dao/plugin/BasePluginDao.java rename to dao/src/main/java/org/thingsboard/server/dao/plugin/CassandraBasePluginDao.java index ae721541a6..054a3655fb 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/plugin/BasePluginDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/plugin/CassandraBasePluginDao.java @@ -15,17 +15,15 @@ */ package org.thingsboard.server.dao.plugin; -import com.datastax.driver.core.ResultSet; import com.datastax.driver.core.querybuilder.Select; import lombok.extern.slf4j.Slf4j; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import org.thingsboard.server.common.data.id.PluginId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.TextPageLink; import org.thingsboard.server.common.data.plugin.PluginMetaData; -import org.thingsboard.server.dao.AbstractSearchTextDao; +import org.thingsboard.server.dao.CassandraAbstractSearchTextDao; +import org.thingsboard.server.dao.DaoUtil; import org.thingsboard.server.dao.model.ModelConstants; import org.thingsboard.server.dao.model.PluginMetaDataEntity; @@ -38,7 +36,7 @@ import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID; @Component @Slf4j -public class BasePluginDao extends AbstractSearchTextDao implements PluginDao { +public class CassandraBasePluginDao extends CassandraAbstractSearchTextDao implements PluginDao { @Override protected Class getColumnFamilyClass() { @@ -51,24 +49,19 @@ public class BasePluginDao extends AbstractSearchTextDao i } @Override - public PluginMetaDataEntity save(PluginMetaData plugin) { - return save(new PluginMetaDataEntity(plugin)); - } - - @Override - public PluginMetaDataEntity findById(PluginId pluginId) { + public PluginMetaData findById(PluginId pluginId) { log.debug("Search plugin meta-data entity by id [{}]", pluginId); - PluginMetaDataEntity entity = super.findById(pluginId.getId()); + PluginMetaData pluginMetaData = super.findById(pluginId.getId()); if (log.isTraceEnabled()) { - log.trace("Search result: [{}] for plugin entity [{}]", entity != null, entity); + log.trace("Search result: [{}] for plugin entity [{}]", pluginMetaData != null, pluginMetaData); } else { - log.debug("Search result: [{}]", entity != null); + log.debug("Search result: [{}]", pluginMetaData != null); } - return entity; + return pluginMetaData; } @Override - public PluginMetaDataEntity findByApiToken(String apiToken) { + public PluginMetaData findByApiToken(String apiToken) { log.debug("Search plugin meta-data entity by api token [{}]", apiToken); Select.Where query = select().from(ModelConstants.PLUGIN_BY_API_TOKEN_COLUMN_FAMILY_NAME).where(eq(ModelConstants.PLUGIN_API_TOKEN_PROPERTY, apiToken)); log.trace("Execute query [{}]", query); @@ -78,14 +71,14 @@ public class BasePluginDao extends AbstractSearchTextDao i } else { log.debug("Search result: [{}]", entity != null); } - return entity; + return DaoUtil.getData(entity); } @Override public void deleteById(UUID id) { log.debug("Delete plugin meta-data entity by id [{}]", id); - ResultSet resultSet = removeById(id); - log.debug("Delete result: [{}]", resultSet.wasApplied()); + boolean result = removeById(id); + log.debug("Delete result: [{}]", result); } @Override @@ -94,7 +87,7 @@ public class BasePluginDao extends AbstractSearchTextDao i } @Override - public List findByTenantIdAndPageLink(TenantId tenantId, TextPageLink pageLink) { + public List findByTenantIdAndPageLink(TenantId tenantId, TextPageLink pageLink) { log.debug("Try to find plugins by tenantId [{}] and pageLink [{}]", tenantId, pageLink); List entities = findPageWithTextSearch(ModelConstants.PLUGIN_BY_TENANT_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME, Arrays.asList(eq(ModelConstants.PLUGIN_TENANT_ID_PROPERTY, tenantId.getId())), pageLink); @@ -103,11 +96,11 @@ public class BasePluginDao extends AbstractSearchTextDao i } else { log.debug("Search result: [{}]", entities.size()); } - return entities; + return DaoUtil.convertDataList(entities); } @Override - public List findAllTenantPluginsByTenantId(UUID tenantId, TextPageLink pageLink) { + public List findAllTenantPluginsByTenantId(UUID tenantId, TextPageLink pageLink) { log.debug("Try to find all tenant plugins by tenantId [{}] and pageLink [{}]", tenantId, pageLink); List pluginEntities = findPageWithTextSearch(ModelConstants.PLUGIN_BY_TENANT_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME, Arrays.asList(in(ModelConstants.PLUGIN_TENANT_ID_PROPERTY, Arrays.asList(NULL_UUID, tenantId))), @@ -117,7 +110,7 @@ public class BasePluginDao extends AbstractSearchTextDao i } else { log.debug("Search result: [{}]", pluginEntities.size()); } - return pluginEntities; + return DaoUtil.convertDataList(pluginEntities); } } diff --git a/dao/src/main/java/org/thingsboard/server/dao/plugin/PluginDao.java b/dao/src/main/java/org/thingsboard/server/dao/plugin/PluginDao.java index 0adf1257f6..1a48b2069f 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/plugin/PluginDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/plugin/PluginDao.java @@ -20,24 +20,23 @@ import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.TextPageLink; import org.thingsboard.server.common.data.plugin.PluginMetaData; import org.thingsboard.server.dao.Dao; -import org.thingsboard.server.dao.model.PluginMetaDataEntity; import java.util.List; import java.util.UUID; -public interface PluginDao extends Dao { +public interface PluginDao extends Dao { - PluginMetaDataEntity save(PluginMetaData plugin); + PluginMetaData save(PluginMetaData plugin); - PluginMetaDataEntity findById(PluginId pluginId); + PluginMetaData findById(PluginId pluginId); - PluginMetaDataEntity findByApiToken(String apiToken); + PluginMetaData findByApiToken(String apiToken); void deleteById(UUID id); void deleteById(PluginId pluginId); - List findByTenantIdAndPageLink(TenantId tenantId, TextPageLink pageLink); + List findByTenantIdAndPageLink(TenantId tenantId, TextPageLink pageLink); /** * Find all tenant plugins (including system) by tenantId and page link. @@ -46,6 +45,6 @@ public interface PluginDao extends Dao { * @param pageLink the page link * @return the list of plugins objects */ - List findAllTenantPluginsByTenantId(UUID tenantId, TextPageLink pageLink); + List findAllTenantPluginsByTenantId(UUID tenantId, TextPageLink pageLink); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleService.java b/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleService.java index e57c9f99d5..87e35ed3e1 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleService.java @@ -34,7 +34,6 @@ import org.thingsboard.server.dao.component.ComponentDescriptorService; import org.thingsboard.server.dao.exception.DataValidationException; import org.thingsboard.server.dao.exception.DatabaseException; import org.thingsboard.server.dao.exception.IncorrectParameterException; -import org.thingsboard.server.dao.model.RuleMetaDataEntity; import org.thingsboard.server.dao.plugin.PluginService; import org.thingsboard.server.dao.service.DataValidator; import org.thingsboard.server.dao.service.PaginatedRemover; @@ -45,8 +44,6 @@ import java.util.Arrays; import java.util.List; import java.util.function.Function; -import static org.thingsboard.server.dao.DaoUtil.convertDataList; -import static org.thingsboard.server.dao.DaoUtil.getData; import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID; import static org.thingsboard.server.dao.service.Validator.validateId; import static org.thingsboard.server.dao.service.Validator.validatePageLink; @@ -74,7 +71,7 @@ public class BaseRuleService implements RuleService { rule.setTenantId(systemTenantId); } if (rule.getId() != null) { - RuleMetaData oldVersion = getData(ruleDao.findById(rule.getId())); + RuleMetaData oldVersion = ruleDao.findById(rule.getId()); if (rule.getState() == null) { rule.setState(oldVersion.getState()); } else if (rule.getState() != oldVersion.getState()) { @@ -94,7 +91,7 @@ public class BaseRuleService implements RuleService { } validateComponentJson(rule.getAction(), ComponentType.ACTION); validateRuleAndPluginState(rule); - return getData(ruleDao.save(rule)); + return ruleDao.save(rule); } private void validateFilters(JsonNode filtersJson) { @@ -163,30 +160,27 @@ public class BaseRuleService implements RuleService { @Override public RuleMetaData findRuleById(RuleId ruleId) { validateId(ruleId, "Incorrect rule id for search rule request."); - return getData(ruleDao.findById(ruleId.getId())); + return ruleDao.findById(ruleId.getId()); } @Override public List findPluginRules(String pluginToken) { - List ruleEntities = ruleDao.findRulesByPlugin(pluginToken); - return convertDataList(ruleEntities); + return ruleDao.findRulesByPlugin(pluginToken); } @Override public TextPageData findSystemRules(TextPageLink pageLink) { validatePageLink(pageLink, "Incorrect PageLink object for search rule request."); - List ruleEntities = ruleDao.findByTenantIdAndPageLink(systemTenantId, pageLink); - List plugins = convertDataList(ruleEntities); - return new TextPageData<>(plugins, pageLink); + List rules = ruleDao.findByTenantIdAndPageLink(systemTenantId, pageLink); + return new TextPageData<>(rules, pageLink); } @Override public TextPageData findTenantRules(TenantId tenantId, TextPageLink pageLink) { validateId(tenantId, "Incorrect tenant id for search rule request."); validatePageLink(pageLink, "Incorrect PageLink object for search rule request."); - List ruleEntities = ruleDao.findByTenantIdAndPageLink(tenantId, pageLink); - List plugins = convertDataList(ruleEntities); - return new TextPageData<>(plugins, pageLink); + List rules = ruleDao.findByTenantIdAndPageLink(tenantId, pageLink); + return new TextPageData<>(rules, pageLink); } @Override @@ -210,8 +204,7 @@ public class BaseRuleService implements RuleService { log.trace("Executing findAllTenantRulesByTenantIdAndPageLink, tenantId [{}], pageLink [{}]", tenantId, pageLink); Validator.validateId(tenantId, "Incorrect tenantId " + tenantId); Validator.validatePageLink(pageLink, "Incorrect page link " + pageLink); - List rulesEntities = ruleDao.findAllTenantRulesByTenantId(tenantId.getId(), pageLink); - List rules = convertDataList(rulesEntities); + List rules = ruleDao.findAllTenantRulesByTenantId(tenantId.getId(), pageLink); return new TextPageData<>(rules, pageLink); } @@ -251,10 +244,10 @@ public class BaseRuleService implements RuleService { private void updateLifeCycleState(RuleId ruleId, ComponentLifecycleState state) { Validator.validateId(ruleId, "Incorrect rule id for state change request."); - RuleMetaDataEntity rule = ruleDao.findById(ruleId); + RuleMetaData rule = ruleDao.findById(ruleId); if (rule != null) { rule.setState(state); - validateRuleAndPluginState(getData(rule)); + validateRuleAndPluginState(rule); ruleDao.save(rule); } else { throw new DatabaseException("Plugin not found!"); @@ -277,17 +270,17 @@ public class BaseRuleService implements RuleService { } }; - private PaginatedRemover tenantRulesRemover = - new PaginatedRemover() { + private PaginatedRemover tenantRulesRemover = + new PaginatedRemover() { @Override - protected List findEntities(TenantId id, TextPageLink pageLink) { + protected List findEntities(TenantId id, TextPageLink pageLink) { return ruleDao.findByTenantIdAndPageLink(id, pageLink); } @Override - protected void removeEntity(RuleMetaDataEntity entity) { - ruleDao.deleteById(entity.getId()); + protected void removeEntity(RuleMetaData entity) { + ruleDao.deleteById(entity.getUuidId()); } }; diff --git a/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleDao.java b/dao/src/main/java/org/thingsboard/server/dao/rule/CassandraBaseRuleDao.java similarity index 79% rename from dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleDao.java rename to dao/src/main/java/org/thingsboard/server/dao/rule/CassandraBaseRuleDao.java index 9f75c2907d..a750940968 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/rule/CassandraBaseRuleDao.java @@ -15,7 +15,6 @@ */ package org.thingsboard.server.dao.rule; -import com.datastax.driver.core.ResultSet; import com.datastax.driver.core.querybuilder.Select; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -23,7 +22,8 @@ import org.thingsboard.server.common.data.id.RuleId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.TextPageLink; import org.thingsboard.server.common.data.rule.RuleMetaData; -import org.thingsboard.server.dao.AbstractSearchTextDao; +import org.thingsboard.server.dao.CassandraAbstractSearchTextDao; +import org.thingsboard.server.dao.DaoUtil; import org.thingsboard.server.dao.model.ModelConstants; import org.thingsboard.server.dao.model.RuleMetaDataEntity; @@ -36,7 +36,7 @@ import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID; @Component @Slf4j -public class BaseRuleDao extends AbstractSearchTextDao implements RuleDao { +public class CassandraBaseRuleDao extends CassandraAbstractSearchTextDao implements RuleDao { @Override protected Class getColumnFamilyClass() { @@ -49,17 +49,12 @@ public class BaseRuleDao extends AbstractSearchTextDao imple } @Override - public RuleMetaDataEntity findById(RuleId ruleId) { + public RuleMetaData findById(RuleId ruleId) { return findById(ruleId.getId()); } @Override - public RuleMetaDataEntity save(RuleMetaData rule) { - return save(new RuleMetaDataEntity(rule)); - } - - @Override - public List findByTenantIdAndPageLink(TenantId tenantId, TextPageLink pageLink) { + public List findByTenantIdAndPageLink(TenantId tenantId, TextPageLink pageLink) { log.debug("Try to find rules by tenantId [{}] and pageLink [{}]", tenantId, pageLink); List entities = findPageWithTextSearch(ModelConstants.RULE_BY_TENANT_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME, Arrays.asList(eq(ModelConstants.RULE_TENANT_ID_PROPERTY, tenantId.getId())), pageLink); @@ -68,11 +63,11 @@ public class BaseRuleDao extends AbstractSearchTextDao imple } else { log.debug("Search result: [{}]", entities.size()); } - return entities; + return DaoUtil.convertDataList(entities); } @Override - public List findAllTenantRulesByTenantId(UUID tenantId, TextPageLink pageLink) { + public List findAllTenantRulesByTenantId(UUID tenantId, TextPageLink pageLink) { log.debug("Try to find all tenant rules by tenantId [{}] and pageLink [{}]", tenantId, pageLink); List entities = findPageWithTextSearch(ModelConstants.RULE_BY_TENANT_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME, Arrays.asList(in(ModelConstants.RULE_TENANT_ID_PROPERTY, Arrays.asList(NULL_UUID, tenantId))), @@ -82,23 +77,23 @@ public class BaseRuleDao extends AbstractSearchTextDao imple } else { log.debug("Search result: [{}]", entities.size()); } - return entities; + return DaoUtil.convertDataList(entities); } @Override - public List findRulesByPlugin(String pluginToken) { + public List findRulesByPlugin(String pluginToken) { log.debug("Search rules by api token [{}]", pluginToken); Select select = select().from(ModelConstants.RULE_BY_PLUGIN_TOKEN); Select.Where query = select.where(); query.and(eq(ModelConstants.RULE_PLUGIN_TOKEN_PROPERTY, pluginToken)); - return findListByStatement(query); + return DaoUtil.convertDataList(findListByStatement(query)); } @Override public void deleteById(UUID id) { log.debug("Delete rule meta-data entity by id [{}]", id); - ResultSet resultSet = removeById(id); - log.debug("Delete result: [{}]", resultSet.wasApplied()); + boolean result = removeById(id); + log.debug("Delete result: [{}]", result); } @Override diff --git a/dao/src/main/java/org/thingsboard/server/dao/rule/RuleDao.java b/dao/src/main/java/org/thingsboard/server/dao/rule/RuleDao.java index c2d09c7593..ea12b74767 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/rule/RuleDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/rule/RuleDao.java @@ -20,20 +20,19 @@ import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.TextPageLink; import org.thingsboard.server.common.data.rule.RuleMetaData; import org.thingsboard.server.dao.Dao; -import org.thingsboard.server.dao.model.RuleMetaDataEntity; import java.util.List; import java.util.UUID; -public interface RuleDao extends Dao { +public interface RuleDao extends Dao { - RuleMetaDataEntity save(RuleMetaData rule); + RuleMetaData save(RuleMetaData rule); - RuleMetaDataEntity findById(RuleId ruleId); + RuleMetaData findById(RuleId ruleId); - List findRulesByPlugin(String pluginToken); + List findRulesByPlugin(String pluginToken); - List findByTenantIdAndPageLink(TenantId tenantId, TextPageLink pageLink); + List findByTenantIdAndPageLink(TenantId tenantId, TextPageLink pageLink); /** * Find all tenant rules (including system) by tenantId and page link. @@ -42,7 +41,7 @@ public interface RuleDao extends Dao { * @param pageLink the page link * @return the list of rules objects */ - List findAllTenantRulesByTenantId(UUID tenantId, TextPageLink pageLink); + List findAllTenantRulesByTenantId(UUID tenantId, TextPageLink pageLink); void deleteById(UUID id); diff --git a/dao/src/main/java/org/thingsboard/server/dao/service/DataValidator.java b/dao/src/main/java/org/thingsboard/server/dao/service/DataValidator.java index 2f3aef7ae0..e460cd0c68 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/service/DataValidator.java +++ b/dao/src/main/java/org/thingsboard/server/dao/service/DataValidator.java @@ -15,18 +15,15 @@ */ package org.thingsboard.server.dao.service; -import java.util.HashSet; -import java.util.Iterator; -import java.util.Set; - +import com.fasterxml.jackson.databind.JsonNode; import lombok.extern.slf4j.Slf4j; import org.apache.commons.validator.routines.EmailValidator; import org.thingsboard.server.common.data.BaseData; import org.thingsboard.server.dao.exception.DataValidationException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.databind.JsonNode; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; @Slf4j public abstract class DataValidator> { diff --git a/dao/src/main/java/org/thingsboard/server/dao/service/PaginatedRemover.java b/dao/src/main/java/org/thingsboard/server/dao/service/PaginatedRemover.java index 554a3c1e31..98c7fd9fc2 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/service/PaginatedRemover.java +++ b/dao/src/main/java/org/thingsboard/server/dao/service/PaginatedRemover.java @@ -1,12 +1,12 @@ /** * Copyright © 2016-2017 The Thingsboard Authors - * + *

* Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * + *

+ * http://www.apache.org/licenses/LICENSE-2.0 + *

* Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -15,33 +15,35 @@ */ package org.thingsboard.server.dao.service; +import org.thingsboard.server.common.data.id.IdBased; +import org.thingsboard.server.common.data.page.TextPageLink; + import java.util.List; import java.util.UUID; -import org.thingsboard.server.common.data.page.TextPageLink; -import org.thingsboard.server.dao.model.BaseEntity; +public abstract class PaginatedRemover> { -public abstract class PaginatedRemover> { + private static final int DEFAULT_LIMIT = 100; public void removeEntitites(I id) { - TextPageLink pageLink = new TextPageLink(100); + TextPageLink pageLink = new TextPageLink(DEFAULT_LIMIT); boolean hasNext = true; while (hasNext) { - List entities = findEntities(id, pageLink); - for (E entity : entities) { + List entities = findEntities(id, pageLink); + for (D entity : entities) { removeEntity(entity); } hasNext = entities.size() == pageLink.getLimit(); if (hasNext) { - int index = entities.size()-1; - UUID idOffset = entities.get(index).getId(); + int index = entities.size() - 1; + UUID idOffset = entities.get(index).getUuidId(); pageLink.setIdOffset(idOffset); } - } + } } - - protected abstract List findEntities(I id, TextPageLink pageLink); - - protected abstract void removeEntity(E entity); - + + protected abstract List findEntities(I id, TextPageLink pageLink); + + protected abstract void removeEntity(D entity); + } diff --git a/dao/src/main/java/org/thingsboard/server/dao/settings/AdminSettingsDao.java b/dao/src/main/java/org/thingsboard/server/dao/settings/AdminSettingsDao.java index c5c6768a14..b0ed852881 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/settings/AdminSettingsDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/settings/AdminSettingsDao.java @@ -17,9 +17,8 @@ package org.thingsboard.server.dao.settings; import org.thingsboard.server.common.data.AdminSettings; import org.thingsboard.server.dao.Dao; -import org.thingsboard.server.dao.model.AdminSettingsEntity; -public interface AdminSettingsDao extends Dao { +public interface AdminSettingsDao extends Dao { /** * Save or update admin settings object @@ -27,7 +26,7 @@ public interface AdminSettingsDao extends Dao { * @param adminSettings the admin settings object * @return saved admin settings object */ - AdminSettingsEntity save(AdminSettings adminSettings); + AdminSettings save(AdminSettings adminSettings); /** * Find admin settings by key. @@ -35,6 +34,6 @@ public interface AdminSettingsDao extends Dao { * @param key the key * @return the admin settings object */ - AdminSettingsEntity findByKey(String key); + AdminSettings findByKey(String key); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/settings/AdminSettingsService.java b/dao/src/main/java/org/thingsboard/server/dao/settings/AdminSettingsService.java index 4c6e7ce1a9..49576b1ae2 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/settings/AdminSettingsService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/settings/AdminSettingsService.java @@ -20,10 +20,10 @@ import org.thingsboard.server.common.data.id.AdminSettingsId; public interface AdminSettingsService { - public AdminSettings findAdminSettingsById(AdminSettingsId adminSettingsId); + AdminSettings findAdminSettingsById(AdminSettingsId adminSettingsId); - public AdminSettings findAdminSettingsByKey(String key); + AdminSettings findAdminSettingsByKey(String key); - public AdminSettings saveAdminSettings(AdminSettings adminSettings); + AdminSettings saveAdminSettings(AdminSettings adminSettings); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/settings/AdminSettingsServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/settings/AdminSettingsServiceImpl.java index c6d1a6b01e..6bfa293848 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/settings/AdminSettingsServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/settings/AdminSettingsServiceImpl.java @@ -15,19 +15,14 @@ */ package org.thingsboard.server.dao.settings; -import static org.thingsboard.server.dao.DaoUtil.getData; - import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; import org.thingsboard.server.common.data.AdminSettings; import org.thingsboard.server.common.data.id.AdminSettingsId; import org.thingsboard.server.dao.exception.DataValidationException; -import org.thingsboard.server.dao.model.AdminSettingsEntity; import org.thingsboard.server.dao.service.DataValidator; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; import org.thingsboard.server.dao.service.Validator; @Service @@ -41,24 +36,21 @@ public class AdminSettingsServiceImpl implements AdminSettingsService { public AdminSettings findAdminSettingsById(AdminSettingsId adminSettingsId) { log.trace("Executing findAdminSettingsById [{}]", adminSettingsId); Validator.validateId(adminSettingsId, "Incorrect adminSettingsId " + adminSettingsId); - AdminSettingsEntity adminSettingsEntity = adminSettingsDao.findById(adminSettingsId.getId()); - return getData(adminSettingsEntity); + return adminSettingsDao.findById(adminSettingsId.getId()); } @Override public AdminSettings findAdminSettingsByKey(String key) { log.trace("Executing findAdminSettingsByKey [{}]", key); Validator.validateString(key, "Incorrect key " + key); - AdminSettingsEntity adminSettingsEntity = adminSettingsDao.findByKey(key); - return getData(adminSettingsEntity); + return adminSettingsDao.findByKey(key); } @Override public AdminSettings saveAdminSettings(AdminSettings adminSettings) { log.trace("Executing saveAdminSettings [{}]", adminSettings); adminSettingsValidator.validate(adminSettings); - AdminSettingsEntity adminSettingsEntity = adminSettingsDao.save(adminSettings); - return getData(adminSettingsEntity); + return adminSettingsDao.save(adminSettings); } private DataValidator adminSettingsValidator = diff --git a/dao/src/main/java/org/thingsboard/server/dao/settings/AdminSettingsDaoImpl.java b/dao/src/main/java/org/thingsboard/server/dao/settings/CassandraAdminSettingsDao.java similarity index 66% rename from dao/src/main/java/org/thingsboard/server/dao/settings/AdminSettingsDaoImpl.java rename to dao/src/main/java/org/thingsboard/server/dao/settings/CassandraAdminSettingsDao.java index bb67289f5c..c1783bc76a 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/settings/AdminSettingsDaoImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/settings/CassandraAdminSettingsDao.java @@ -15,26 +15,21 @@ */ package org.thingsboard.server.dao.settings; -import static com.datastax.driver.core.querybuilder.QueryBuilder.eq; -import static com.datastax.driver.core.querybuilder.QueryBuilder.select; -import static org.thingsboard.server.dao.model.ModelConstants.ADMIN_SETTINGS_BY_KEY_COLUMN_FAMILY_NAME; -import static org.thingsboard.server.dao.model.ModelConstants.ADMIN_SETTINGS_COLUMN_FAMILY_NAME; -import static org.thingsboard.server.dao.model.ModelConstants.ADMIN_SETTINGS_KEY_PROPERTY; - +import com.datastax.driver.core.querybuilder.Select.Where; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import org.thingsboard.server.common.data.AdminSettings; -import org.thingsboard.server.dao.AbstractModelDao; +import org.thingsboard.server.dao.CassandraAbstractModelDao; +import org.thingsboard.server.dao.DaoUtil; import org.thingsboard.server.dao.model.AdminSettingsEntity; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Repository; -import com.datastax.driver.core.querybuilder.Select.Where; +import static com.datastax.driver.core.querybuilder.QueryBuilder.eq; +import static com.datastax.driver.core.querybuilder.QueryBuilder.select; +import static org.thingsboard.server.dao.model.ModelConstants.*; @Component @Slf4j -public class AdminSettingsDaoImpl extends AbstractModelDao implements AdminSettingsDao { +public class CassandraAdminSettingsDao extends CassandraAbstractModelDao implements AdminSettingsDao { @Override protected Class getColumnFamilyClass() { @@ -45,21 +40,15 @@ public class AdminSettingsDaoImpl extends AbstractModelDao protected String getColumnFamilyName() { return ADMIN_SETTINGS_COLUMN_FAMILY_NAME; } - - @Override - public AdminSettingsEntity save(AdminSettings adminSettings) { - log.debug("Save admin settings [{}] ", adminSettings); - return save(new AdminSettingsEntity(adminSettings)); - } @Override - public AdminSettingsEntity findByKey(String key) { + public AdminSettings findByKey(String key) { log.debug("Try to find admin settings by key [{}] ", key); Where query = select().from(ADMIN_SETTINGS_BY_KEY_COLUMN_FAMILY_NAME).where(eq(ADMIN_SETTINGS_KEY_PROPERTY, key)); log.trace("Execute query {}", query); AdminSettingsEntity adminSettingsEntity = findOneByStatement(query); log.trace("Found admin settings [{}] by key [{}]", adminSettingsEntity, key); - return adminSettingsEntity; + return DaoUtil.getData(adminSettingsEntity); } } diff --git a/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantDaoImpl.java b/dao/src/main/java/org/thingsboard/server/dao/tenant/CassandraTenantDao.java similarity index 68% rename from dao/src/main/java/org/thingsboard/server/dao/tenant/TenantDaoImpl.java rename to dao/src/main/java/org/thingsboard/server/dao/tenant/CassandraTenantDao.java index b9ed4e251f..d4d067e00f 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantDaoImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/tenant/CassandraTenantDao.java @@ -15,26 +15,23 @@ */ package org.thingsboard.server.dao.tenant; -import static com.datastax.driver.core.querybuilder.QueryBuilder.eq; -import static org.thingsboard.server.dao.model.ModelConstants.TENANT_BY_REGION_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME; -import static org.thingsboard.server.dao.model.ModelConstants.TENANT_COLUMN_FAMILY_NAME; -import static org.thingsboard.server.dao.model.ModelConstants.TENANT_REGION_PROPERTY; - -import java.util.Arrays; -import java.util.List; - import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import org.thingsboard.server.common.data.Tenant; import org.thingsboard.server.common.data.page.TextPageLink; -import org.thingsboard.server.dao.AbstractSearchTextDao; +import org.thingsboard.server.dao.CassandraAbstractSearchTextDao; +import org.thingsboard.server.dao.DaoUtil; import org.thingsboard.server.dao.model.TenantEntity; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; + +import java.util.Arrays; +import java.util.List; + +import static com.datastax.driver.core.querybuilder.QueryBuilder.eq; +import static org.thingsboard.server.dao.model.ModelConstants.*; @Component @Slf4j -public class TenantDaoImpl extends AbstractSearchTextDao implements TenantDao { +public class CassandraTenantDao extends CassandraAbstractSearchTextDao implements TenantDao { @Override protected Class getColumnFamilyClass() { @@ -45,21 +42,15 @@ public class TenantDaoImpl extends AbstractSearchTextDao implement protected String getColumnFamilyName() { return TENANT_COLUMN_FAMILY_NAME; } - - @Override - public TenantEntity save(Tenant tenant) { - log.debug("Save tenant [{}] ", tenant); - return save(new TenantEntity(tenant)); - } @Override - public List findTenantsByRegion(String region, TextPageLink pageLink) { + public List findTenantsByRegion(String region, TextPageLink pageLink) { log.debug("Try to find tenants by region [{}] and pageLink [{}]", region, pageLink); List tenantEntities = findPageWithTextSearch(TENANT_BY_REGION_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME, Arrays.asList(eq(TENANT_REGION_PROPERTY, region)), pageLink); log.trace("Found tenants [{}] by region [{}] and pageLink [{}]", tenantEntities, region, pageLink); - return tenantEntities; + return DaoUtil.convertDataList(tenantEntities); } } diff --git a/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantDao.java b/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantDao.java index c1b71fc934..9c230d97b1 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantDao.java @@ -15,14 +15,13 @@ */ package org.thingsboard.server.dao.tenant; -import java.util.List; - import org.thingsboard.server.common.data.Tenant; import org.thingsboard.server.common.data.page.TextPageLink; import org.thingsboard.server.dao.Dao; -import org.thingsboard.server.dao.model.TenantEntity; -public interface TenantDao extends Dao { +import java.util.List; + +public interface TenantDao extends Dao { /** * Save or update tenant object @@ -30,7 +29,7 @@ public interface TenantDao extends Dao { * @param tenant the tenant object * @return saved tenant object */ - TenantEntity save(Tenant tenant); + Tenant save(Tenant tenant); /** * Find tenants by region and page link. @@ -39,6 +38,6 @@ public interface TenantDao extends Dao { * @param pageLink the page link * @return the list of tenant objects */ - List findTenantsByRegion(String region, TextPageLink pageLink); + List findTenantsByRegion(String region, TextPageLink pageLink); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantService.java b/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantService.java index 7e56e19c4d..13b5090bc3 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantService.java @@ -22,16 +22,14 @@ import org.thingsboard.server.common.data.page.TextPageLink; public interface TenantService { - public Tenant findTenantById(TenantId tenantId); + Tenant findTenantById(TenantId tenantId); - public Tenant saveTenant(Tenant tenant); + Tenant saveTenant(Tenant tenant); - public void deleteTenant(TenantId tenantId); + void deleteTenant(TenantId tenantId); - public TextPageData findTenants(TextPageLink pageLink); + TextPageData findTenants(TextPageLink pageLink); - //public TextPageData findTenantsByTitle(String title, PageLink pageLink); - - public void deleteTenants(); + void deleteTenants(); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantServiceImpl.java index 9deb828fa5..976cb71748 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantServiceImpl.java @@ -15,13 +15,10 @@ */ package org.thingsboard.server.dao.tenant; -import static org.thingsboard.server.dao.DaoUtil.convertDataList; -import static org.thingsboard.server.dao.DaoUtil.getData; - -import java.util.List; - import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; import org.thingsboard.server.common.data.Tenant; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.TextPageData; @@ -30,19 +27,16 @@ import org.thingsboard.server.dao.customer.CustomerService; import org.thingsboard.server.dao.dashboard.DashboardService; import org.thingsboard.server.dao.device.DeviceService; import org.thingsboard.server.dao.exception.DataValidationException; -import org.thingsboard.server.dao.model.TenantEntity; import org.thingsboard.server.dao.plugin.PluginService; import org.thingsboard.server.dao.rule.RuleService; import org.thingsboard.server.dao.service.DataValidator; import org.thingsboard.server.dao.service.PaginatedRemover; -import org.thingsboard.server.dao.user.UserService; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; import org.thingsboard.server.dao.service.Validator; +import org.thingsboard.server.dao.user.UserService; import org.thingsboard.server.dao.widget.WidgetsBundleService; +import java.util.List; + @Service @Slf4j public class TenantServiceImpl implements TenantService { @@ -77,8 +71,7 @@ public class TenantServiceImpl implements TenantService { public Tenant findTenantById(TenantId tenantId) { log.trace("Executing findTenantById [{}]", tenantId); Validator.validateId(tenantId, "Incorrect tenantId " + tenantId); - TenantEntity tenantEntity = tenantDao.findById(tenantId.getId()); - return getData(tenantEntity); + return tenantDao.findById(tenantId.getId()); } @Override @@ -86,8 +79,7 @@ public class TenantServiceImpl implements TenantService { log.trace("Executing saveTenant [{}]", tenant); tenant.setRegion(DEFAULT_TENANT_REGION); tenantValidator.validate(tenant); - TenantEntity tenantEntity = tenantDao.save(tenant); - return getData(tenantEntity); + return tenantDao.save(tenant); } @Override @@ -108,9 +100,8 @@ public class TenantServiceImpl implements TenantService { public TextPageData findTenants(TextPageLink pageLink) { log.trace("Executing findTenants pageLink [{}]", pageLink); Validator.validatePageLink(pageLink, "Incorrect page link " + pageLink); - List tenantEntities = tenantDao.findTenantsByRegion(DEFAULT_TENANT_REGION, pageLink); - List tenants = convertDataList(tenantEntities); - return new TextPageData(tenants, pageLink); + List tenants = tenantDao.findTenantsByRegion(DEFAULT_TENANT_REGION, pageLink); + return new TextPageData<>(tenants, pageLink); } @Override @@ -132,17 +123,17 @@ public class TenantServiceImpl implements TenantService { } }; - private PaginatedRemover tenantsRemover = - new PaginatedRemover() { + private PaginatedRemover tenantsRemover = + new PaginatedRemover() { @Override - protected List findEntities(String region, TextPageLink pageLink) { + protected List findEntities(String region, TextPageLink pageLink) { return tenantDao.findTenantsByRegion(region, pageLink); } @Override - protected void removeEntity(TenantEntity entity) { - deleteTenant(new TenantId(entity.getId())); + protected void removeEntity(Tenant entity) { + deleteTenant(new TenantId(entity.getUuidId())); } }; } diff --git a/dao/src/main/java/org/thingsboard/server/dao/timeseries/BaseTimeseriesService.java b/dao/src/main/java/org/thingsboard/server/dao/timeseries/BaseTimeseriesService.java index f27ed6e605..71102b1a8c 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/timeseries/BaseTimeseriesService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/timeseries/BaseTimeseriesService.java @@ -15,34 +15,25 @@ */ package org.thingsboard.server.dao.timeseries; +// CASSANDRA ??? import com.datastax.driver.core.ResultSet; import com.datastax.driver.core.ResultSetFuture; import com.datastax.driver.core.Row; -import com.google.common.base.Function; import com.google.common.collect.Lists; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; import org.thingsboard.server.common.data.id.UUIDBased; -import org.thingsboard.server.common.data.kv.BaseTsKvQuery; import org.thingsboard.server.common.data.kv.TsKvEntry; import org.thingsboard.server.common.data.kv.TsKvQuery; import org.thingsboard.server.dao.exception.IncorrectParameterException; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Service; import org.thingsboard.server.dao.service.Validator; -import javax.annotation.Nullable; -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; -import java.time.Instant; -import java.time.LocalDateTime; -import java.time.ZoneOffset; -import java.util.*; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.stream.Collectors; +import java.util.Collection; +import java.util.List; +import java.util.UUID; import static org.apache.commons.lang3.StringUtils.isBlank; diff --git a/dao/src/main/java/org/thingsboard/server/dao/timeseries/BaseTimeseriesDao.java b/dao/src/main/java/org/thingsboard/server/dao/timeseries/CassandraBaseTimeseriesDao.java similarity index 98% rename from dao/src/main/java/org/thingsboard/server/dao/timeseries/BaseTimeseriesDao.java rename to dao/src/main/java/org/thingsboard/server/dao/timeseries/CassandraBaseTimeseriesDao.java index cbf27fa9ac..738c5aa63c 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/timeseries/BaseTimeseriesDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/timeseries/CassandraBaseTimeseriesDao.java @@ -28,8 +28,7 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import org.thingsboard.server.common.data.kv.*; import org.thingsboard.server.common.data.kv.DataType; -import org.thingsboard.server.dao.AbstractAsyncDao; -import org.thingsboard.server.dao.AbstractDao; +import org.thingsboard.server.dao.CassandraAbstractAsyncDao; import org.thingsboard.server.dao.model.ModelConstants; import javax.annotation.Nullable; @@ -38,20 +37,20 @@ import javax.annotation.PreDestroy; import java.time.Instant; import java.time.LocalDateTime; import java.time.ZoneOffset; -import java.util.*; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import java.util.UUID; import java.util.stream.Collectors; import static com.datastax.driver.core.querybuilder.QueryBuilder.eq; -import static com.datastax.driver.core.querybuilder.QueryBuilder.select; /** * @author Andrew Shvayka */ @Component @Slf4j -public class BaseTimeseriesDao extends AbstractAsyncDao implements TimeseriesDao { +public class CassandraBaseTimeseriesDao extends CassandraAbstractAsyncDao implements TimeseriesDao { //@Value("${cassandra.query.min_aggregation_step_ms}") //TODO: diff --git a/dao/src/main/java/org/thingsboard/server/dao/timeseries/TimeseriesDao.java b/dao/src/main/java/org/thingsboard/server/dao/timeseries/TimeseriesDao.java index 177003ddf2..afa5c953a1 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/timeseries/TimeseriesDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/timeseries/TimeseriesDao.java @@ -15,6 +15,7 @@ */ package org.thingsboard.server.dao.timeseries; +// CASSANDRA ??? import com.datastax.driver.core.ResultSetFuture; import com.datastax.driver.core.Row; import com.google.common.util.concurrent.ListenableFuture; @@ -22,8 +23,6 @@ import org.thingsboard.server.common.data.kv.TsKvEntry; import org.thingsboard.server.common.data.kv.TsKvQuery; import java.util.List; -import java.util.Optional; -import java.util.Set; import java.util.UUID; /** diff --git a/dao/src/main/java/org/thingsboard/server/dao/timeseries/TimeseriesService.java b/dao/src/main/java/org/thingsboard/server/dao/timeseries/TimeseriesService.java index cd53e9468f..28ed5ddd89 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/timeseries/TimeseriesService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/timeseries/TimeseriesService.java @@ -15,18 +15,17 @@ */ package org.thingsboard.server.dao.timeseries; +// CASSANDRA ??? import com.datastax.driver.core.ResultSet; import com.datastax.driver.core.ResultSetFuture; import com.datastax.driver.core.Row; import com.google.common.util.concurrent.ListenableFuture; -import org.thingsboard.server.common.data.id.DeviceId; import org.thingsboard.server.common.data.id.UUIDBased; import org.thingsboard.server.common.data.kv.TsKvEntry; import org.thingsboard.server.common.data.kv.TsKvQuery; import java.util.Collection; import java.util.List; -import java.util.Set; /** * @author Andrew Shvayka diff --git a/dao/src/main/java/org/thingsboard/server/dao/timeseries/TsKvQueryCursor.java b/dao/src/main/java/org/thingsboard/server/dao/timeseries/TsKvQueryCursor.java index cad1232d68..ed537339f2 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/timeseries/TsKvQueryCursor.java +++ b/dao/src/main/java/org/thingsboard/server/dao/timeseries/TsKvQueryCursor.java @@ -15,7 +15,6 @@ */ package org.thingsboard.server.dao.timeseries; -import lombok.Data; import lombok.Getter; import org.thingsboard.server.common.data.kv.TsKvEntry; import org.thingsboard.server.common.data.kv.TsKvQuery; diff --git a/dao/src/main/java/org/thingsboard/server/dao/user/UserCredentialsDaoImpl.java b/dao/src/main/java/org/thingsboard/server/dao/user/CassandraUserCredentialsDao.java similarity index 78% rename from dao/src/main/java/org/thingsboard/server/dao/user/UserCredentialsDaoImpl.java rename to dao/src/main/java/org/thingsboard/server/dao/user/CassandraUserCredentialsDao.java index a40c1a9269..b44ab6af35 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/user/UserCredentialsDaoImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/user/CassandraUserCredentialsDao.java @@ -15,26 +15,23 @@ */ package org.thingsboard.server.dao.user; -import static com.datastax.driver.core.querybuilder.QueryBuilder.eq; -import static com.datastax.driver.core.querybuilder.QueryBuilder.select; - -import java.util.UUID; - +import com.datastax.driver.core.querybuilder.Select.Where; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import org.thingsboard.server.common.data.security.UserCredentials; -import org.thingsboard.server.dao.AbstractModelDao; +import org.thingsboard.server.dao.CassandraAbstractModelDao; +import org.thingsboard.server.dao.DaoUtil; +import org.thingsboard.server.dao.model.ModelConstants; import org.thingsboard.server.dao.model.UserCredentialsEntity; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Repository; -import com.datastax.driver.core.querybuilder.Select.Where; -import org.thingsboard.server.dao.model.ModelConstants; +import java.util.UUID; + +import static com.datastax.driver.core.querybuilder.QueryBuilder.eq; +import static com.datastax.driver.core.querybuilder.QueryBuilder.select; @Component @Slf4j -public class UserCredentialsDaoImpl extends AbstractModelDao implements UserCredentialsDao { +public class CassandraUserCredentialsDao extends CassandraAbstractModelDao implements UserCredentialsDao { @Override protected Class getColumnFamilyClass() { @@ -47,41 +44,35 @@ public class UserCredentialsDaoImpl extends AbstractModelDao implements UserDao { +public class CassandraUserDao extends CassandraAbstractSearchTextDao implements UserDao { @Override protected Class getColumnFamilyClass() { @@ -50,23 +48,17 @@ public class UserDaoImpl extends AbstractSearchTextDao implements Us } @Override - public UserEntity findByEmail(String email) { + public User findByEmail(String email) { log.debug("Try to find user by email [{}] ", email); Where query = select().from(ModelConstants.USER_BY_EMAIL_COLUMN_FAMILY_NAME).where(eq(ModelConstants.USER_EMAIL_PROPERTY, email)); log.trace("Execute query {}", query); UserEntity userEntity = findOneByStatement(query); log.trace("Found user [{}] by email [{}]", userEntity, email); - return userEntity; - } - - @Override - public UserEntity save(User user) { - log.debug("Save user [{}] ", user); - return save(new UserEntity(user)); + return DaoUtil.getData(userEntity); } @Override - public List findTenantAdmins(UUID tenantId, TextPageLink pageLink) { + public List findTenantAdmins(UUID tenantId, TextPageLink pageLink) { log.debug("Try to find tenant admin users by tenantId [{}] and pageLink [{}]", tenantId, pageLink); List userEntities = findPageWithTextSearch(ModelConstants.USER_BY_TENANT_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME, Arrays.asList(eq(ModelConstants.USER_TENANT_ID_PROPERTY, tenantId), @@ -74,11 +66,11 @@ public class UserDaoImpl extends AbstractSearchTextDao implements Us eq(ModelConstants.USER_AUTHORITY_PROPERTY, Authority.TENANT_ADMIN.name())), pageLink); log.trace("Found tenant admin users [{}] by tenantId [{}] and pageLink [{}]", userEntities, tenantId, pageLink); - return userEntities; + return DaoUtil.convertDataList(userEntities); } @Override - public List findCustomerUsers(UUID tenantId, UUID customerId, TextPageLink pageLink) { + public List findCustomerUsers(UUID tenantId, UUID customerId, TextPageLink pageLink) { log.debug("Try to find customer users by tenantId [{}], customerId [{}] and pageLink [{}]", tenantId, customerId, pageLink); List userEntities = findPageWithTextSearch(ModelConstants.USER_BY_CUSTOMER_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME, Arrays.asList(eq(ModelConstants.USER_TENANT_ID_PROPERTY, tenantId), @@ -86,7 +78,7 @@ public class UserDaoImpl extends AbstractSearchTextDao implements Us eq(ModelConstants.USER_AUTHORITY_PROPERTY, Authority.CUSTOMER_USER.name())), pageLink); log.trace("Found customer users [{}] by tenantId [{}], customerId [{}] and pageLink [{}]", userEntities, tenantId, customerId, pageLink); - return userEntities; + return DaoUtil.convertDataList(userEntities); } } diff --git a/dao/src/main/java/org/thingsboard/server/dao/user/UserCredentialsDao.java b/dao/src/main/java/org/thingsboard/server/dao/user/UserCredentialsDao.java index 52045bc2ed..5861fa1d61 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/user/UserCredentialsDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/user/UserCredentialsDao.java @@ -15,18 +15,15 @@ */ package org.thingsboard.server.dao.user; -import java.util.UUID; - import org.thingsboard.server.common.data.security.UserCredentials; import org.thingsboard.server.dao.Dao; -import org.thingsboard.server.dao.model.UserCredentialsEntity; + +import java.util.UUID; /** * The Interface UserCredentialsDao. - * - * @param the generic type */ -public interface UserCredentialsDao extends Dao { +public interface UserCredentialsDao extends Dao { /** * Save or update user credentials object @@ -34,7 +31,7 @@ public interface UserCredentialsDao extends Dao { * @param userCredentials the user credentials object * @return saved user credentials object */ - UserCredentialsEntity save(UserCredentials userCredentials); + UserCredentials save(UserCredentials userCredentials); /** * Find user credentials by user id. @@ -42,22 +39,22 @@ public interface UserCredentialsDao extends Dao { * @param userId the user id * @return the user credentials object */ - UserCredentialsEntity findByUserId(UUID userId); - + UserCredentials findByUserId(UUID userId); + /** * Find user credentials by activate token. * * @param activateToken the activate token * @return the user credentials object */ - UserCredentialsEntity findByActivateToken(String activateToken); - + UserCredentials findByActivateToken(String activateToken); + /** * Find user credentials by reset token. * * @param resetToken the reset token * @return the user credentials object */ - UserCredentialsEntity findByResetToken(String resetToken); - + UserCredentials findByResetToken(String resetToken); + } diff --git a/dao/src/main/java/org/thingsboard/server/dao/user/UserDao.java b/dao/src/main/java/org/thingsboard/server/dao/user/UserDao.java index e84d68b5e7..292099a798 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/user/UserDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/user/UserDao.java @@ -15,15 +15,14 @@ */ package org.thingsboard.server.dao.user; -import java.util.List; -import java.util.UUID; - import org.thingsboard.server.common.data.User; import org.thingsboard.server.common.data.page.TextPageLink; import org.thingsboard.server.dao.Dao; -import org.thingsboard.server.dao.model.UserEntity; -public interface UserDao extends Dao { +import java.util.List; +import java.util.UUID; + +public interface UserDao extends Dao { /** * Save or update user object @@ -31,7 +30,7 @@ public interface UserDao extends Dao { * @param user the user object * @return saved user entity */ - UserEntity save(User user); + User save(User user); /** * Find user by email. @@ -39,7 +38,7 @@ public interface UserDao extends Dao { * @param email the email * @return the user entity */ - UserEntity findByEmail(String email); + User findByEmail(String email); /** * Find tenant admin users by tenantId and page link. @@ -48,7 +47,7 @@ public interface UserDao extends Dao { * @param pageLink the page link * @return the list of user entities */ - List findTenantAdmins(UUID tenantId, TextPageLink pageLink); + List findTenantAdmins(UUID tenantId, TextPageLink pageLink); /** * Find customer users by tenantId, customerId and page link. @@ -58,6 +57,6 @@ public interface UserDao extends Dao { * @param pageLink the page link * @return the list of user entities */ - List findCustomerUsers(UUID tenantId, UUID customerId, TextPageLink pageLink); + List findCustomerUsers(UUID tenantId, UUID customerId, TextPageLink pageLink); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/user/UserService.java b/dao/src/main/java/org/thingsboard/server/dao/user/UserService.java index f4043a0d6e..92380c6f89 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/user/UserService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/user/UserService.java @@ -25,32 +25,32 @@ import org.thingsboard.server.common.data.security.UserCredentials; public interface UserService { - public User findUserById(UserId userId); + User findUserById(UserId userId); - public User findUserByEmail(String email); + User findUserByEmail(String email); - public User saveUser(User user); + User saveUser(User user); - public UserCredentials findUserCredentialsByUserId(UserId userId); + UserCredentials findUserCredentialsByUserId(UserId userId); - public UserCredentials findUserCredentialsByActivateToken(String activateToken); + UserCredentials findUserCredentialsByActivateToken(String activateToken); - public UserCredentials findUserCredentialsByResetToken(String resetToken); + UserCredentials findUserCredentialsByResetToken(String resetToken); - public UserCredentials saveUserCredentials(UserCredentials userCredentials); + UserCredentials saveUserCredentials(UserCredentials userCredentials); - public UserCredentials activateUserCredentials(String activateToken, String password); + UserCredentials activateUserCredentials(String activateToken, String password); - public UserCredentials requestPasswordReset(String email); + UserCredentials requestPasswordReset(String email); - public void deleteUser(UserId userId); + void deleteUser(UserId userId); - public TextPageData findTenantAdmins(TenantId tenantId, TextPageLink pageLink); + TextPageData findTenantAdmins(TenantId tenantId, TextPageLink pageLink); - public void deleteTenantAdmins(TenantId tenantId); + void deleteTenantAdmins(TenantId tenantId); - public TextPageData findCustomerUsers(TenantId tenantId, CustomerId customerId, TextPageLink pageLink); + TextPageData findCustomerUsers(TenantId tenantId, CustomerId customerId, TextPageLink pageLink); - public void deleteCustomerUsers(TenantId tenantId, CustomerId customerId); + void deleteCustomerUsers(TenantId tenantId, CustomerId customerId); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/user/UserServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/user/UserServiceImpl.java index 9ad91021f1..7f4d6c07fb 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/user/UserServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/user/UserServiceImpl.java @@ -15,17 +15,13 @@ */ package org.thingsboard.server.dao.user; -import static org.thingsboard.server.dao.DaoUtil.convertDataList; -import static org.thingsboard.server.dao.DaoUtil.getData; -import static org.thingsboard.server.dao.service.Validator.validateId; -import static org.thingsboard.server.dao.service.Validator.validatePageLink; -import static org.thingsboard.server.dao.service.Validator.validateString; - -import java.util.List; - import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.RandomStringUtils; import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.thingsboard.server.common.data.Customer; +import org.thingsboard.server.common.data.Tenant; import org.thingsboard.server.common.data.User; import org.thingsboard.server.common.data.id.CustomerId; import org.thingsboard.server.common.data.id.TenantId; @@ -37,19 +33,21 @@ import org.thingsboard.server.common.data.security.UserCredentials; import org.thingsboard.server.dao.customer.CustomerDao; import org.thingsboard.server.dao.exception.DataValidationException; import org.thingsboard.server.dao.exception.IncorrectParameterException; -import org.thingsboard.server.dao.model.*; +import org.thingsboard.server.dao.model.ModelConstants; import org.thingsboard.server.dao.service.DataValidator; import org.thingsboard.server.dao.service.PaginatedRemover; import org.thingsboard.server.dao.tenant.TenantDao; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; + +import java.util.List; + +import static org.thingsboard.server.dao.service.Validator.*; @Service @Slf4j public class UserServiceImpl implements UserService { + private static final int DEFAULT_TOKEN_LENGTH = 30; + @Autowired private UserDao userDao; @@ -66,63 +64,57 @@ public class UserServiceImpl implements UserService { public User findUserByEmail(String email) { log.trace("Executing findUserByEmail [{}]", email); validateString(email, "Incorrect email " + email); - UserEntity userEntity = userDao.findByEmail(email); - return getData(userEntity); + return userDao.findByEmail(email); } @Override public User findUserById(UserId userId) { log.trace("Executing findUserById [{}]", userId); validateId(userId, "Incorrect userId " + userId); - UserEntity userEntity = userDao.findById(userId.getId()); - return getData(userEntity); + return userDao.findById(userId.getId()); } @Override public User saveUser(User user) { log.trace("Executing saveUser [{}]", user); userValidator.validate(user); - UserEntity userEntity = userDao.save(user); + User savedUser = userDao.save(user); if (user.getId() == null) { UserCredentials userCredentials = new UserCredentials(); userCredentials.setEnabled(false); - userCredentials.setActivateToken(RandomStringUtils.randomAlphanumeric(30)); - userCredentials.setUserId(new UserId(userEntity.getId())); + userCredentials.setActivateToken(RandomStringUtils.randomAlphanumeric(DEFAULT_TOKEN_LENGTH)); + userCredentials.setUserId(new UserId(savedUser.getUuidId())); userCredentialsDao.save(userCredentials); } - return getData(userEntity); + return savedUser; } @Override public UserCredentials findUserCredentialsByUserId(UserId userId) { log.trace("Executing findUserCredentialsByUserId [{}]", userId); validateId(userId, "Incorrect userId " + userId); - UserCredentialsEntity userCredentialsEntity = userCredentialsDao.findByUserId(userId.getId()); - return getData(userCredentialsEntity); + return userCredentialsDao.findByUserId(userId.getId()); } @Override public UserCredentials findUserCredentialsByActivateToken(String activateToken) { log.trace("Executing findUserCredentialsByActivateToken [{}]", activateToken); validateString(activateToken, "Incorrect activateToken " + activateToken); - UserCredentialsEntity userCredentialsEntity = userCredentialsDao.findByActivateToken(activateToken); - return getData(userCredentialsEntity); + return userCredentialsDao.findByActivateToken(activateToken); } @Override public UserCredentials findUserCredentialsByResetToken(String resetToken) { log.trace("Executing findUserCredentialsByResetToken [{}]", resetToken); validateString(resetToken, "Incorrect resetToken " + resetToken); - UserCredentialsEntity userCredentialsEntity = userCredentialsDao.findByResetToken(resetToken); - return getData(userCredentialsEntity); + return userCredentialsDao.findByResetToken(resetToken); } @Override public UserCredentials saveUserCredentials(UserCredentials userCredentials) { log.trace("Executing saveUserCredentials [{}]", userCredentials); userCredentialsValidator.validate(userCredentials); - UserCredentialsEntity userCredentialsEntity = userCredentialsDao.save(userCredentials); - return getData(userCredentialsEntity); + return userCredentialsDao.save(userCredentials); } @Override @@ -130,11 +122,10 @@ public class UserServiceImpl implements UserService { log.trace("Executing activateUserCredentials activateToken [{}], password [{}]", activateToken, password); validateString(activateToken, "Incorrect activateToken " + activateToken); validateString(password, "Incorrect password " + password); - UserCredentialsEntity userCredentialsEntity = userCredentialsDao.findByActivateToken(activateToken); - if (userCredentialsEntity == null) { + UserCredentials userCredentials = userCredentialsDao.findByActivateToken(activateToken); + if (userCredentials == null) { throw new IncorrectParameterException(String.format("Unable to find user credentials by activateToken [%s]", activateToken)); } - UserCredentials userCredentials = getData(userCredentialsEntity); if (userCredentials.isEnabled()) { throw new IncorrectParameterException("User credentials already activated"); } @@ -149,16 +140,15 @@ public class UserServiceImpl implements UserService { public UserCredentials requestPasswordReset(String email) { log.trace("Executing requestPasswordReset email [{}]", email); validateString(email, "Incorrect email " + email); - UserEntity userEntity = userDao.findByEmail(email); - if (userEntity == null) { + User user = userDao.findByEmail(email); + if (user == null) { throw new IncorrectParameterException(String.format("Unable to find user by email [%s]", email)); } - UserCredentialsEntity userCredentialsEntity = userCredentialsDao.findByUserId(userEntity.getId()); - UserCredentials userCredentials = getData(userCredentialsEntity); + UserCredentials userCredentials = userCredentialsDao.findByUserId(user.getUuidId()); if (!userCredentials.isEnabled()) { throw new IncorrectParameterException("Unable to reset password for inactive user"); } - userCredentials.setResetToken(RandomStringUtils.randomAlphanumeric(30)); + userCredentials.setResetToken(RandomStringUtils.randomAlphanumeric(DEFAULT_TOKEN_LENGTH)); return saveUserCredentials(userCredentials); } @@ -167,8 +157,8 @@ public class UserServiceImpl implements UserService { public void deleteUser(UserId userId) { log.trace("Executing deleteUser [{}]", userId); validateId(userId, "Incorrect userId " + userId); - UserCredentialsEntity userCredentialsEntity = userCredentialsDao.findByUserId(userId.getId()); - userCredentialsDao.removeById(userCredentialsEntity.getId()); + UserCredentials userCredentials = userCredentialsDao.findByUserId(userId.getId()); + userCredentialsDao.removeById(userCredentials.getUuidId()); userDao.removeById(userId.getId()); } @@ -177,9 +167,8 @@ public class UserServiceImpl implements UserService { log.trace("Executing findTenantAdmins, tenantId [{}], pageLink [{}]", tenantId, pageLink); validateId(tenantId, "Incorrect tenantId " + tenantId); validatePageLink(pageLink, "Incorrect page link " + pageLink); - List userEntities = userDao.findTenantAdmins(tenantId.getId(), pageLink); - List users = convertDataList(userEntities); - return new TextPageData(users, pageLink); + List users = userDao.findTenantAdmins(tenantId.getId(), pageLink); + return new TextPageData<>(users, pageLink); } @Override @@ -195,9 +184,8 @@ public class UserServiceImpl implements UserService { validateId(tenantId, "Incorrect tenantId " + tenantId); validateId(customerId, "Incorrect customerId " + customerId); validatePageLink(pageLink, "Incorrect page link " + pageLink); - List userEntities = userDao.findCustomerUsers(tenantId.getId(), customerId.getId(), pageLink); - List users = convertDataList(userEntities); - return new TextPageData(users, pageLink); + List users = userDao.findCustomerUsers(tenantId.getId(), customerId.getId(), pageLink); + return new TextPageData<>(users, pageLink); } @Override @@ -266,16 +254,16 @@ public class UserServiceImpl implements UserService { + " already present in database!"); } if (!tenantId.getId().equals(ModelConstants.NULL_UUID)) { - TenantEntity tenant = tenantDao.findById(user.getTenantId().getId()); + Tenant tenant = tenantDao.findById(user.getTenantId().getId()); if (tenant == null) { throw new DataValidationException("User is referencing to non-existent tenant!"); } } if (!customerId.getId().equals(ModelConstants.NULL_UUID)) { - CustomerEntity customer = customerDao.findById(user.getCustomerId().getId()); + Customer customer = customerDao.findById(user.getCustomerId().getId()); if (customer == null) { throw new DataValidationException("User is referencing to non-existent customer!"); - } else if (!customer.getTenantId().equals(tenantId.getId())) { + } else if (!customer.getTenantId().getId().equals(tenantId.getId())) { throw new DataValidationException("User can't be assigned to customer from different tenant!"); } } @@ -303,7 +291,7 @@ public class UserServiceImpl implements UserService { throw new DataValidationException("Enabled user credentials can't have activate token!"); } } - UserCredentialsEntity existingUserCredentialsEntity = userCredentialsDao.findById(userCredentials.getId().getId()); + UserCredentials existingUserCredentialsEntity = userCredentialsDao.findById(userCredentials.getId().getId()); if (existingUserCredentialsEntity == null) { throw new DataValidationException("Unable to update non-existent user credentials!"); } @@ -314,21 +302,21 @@ public class UserServiceImpl implements UserService { } }; - private PaginatedRemover tenantAdminsRemover = - new PaginatedRemover() { + private PaginatedRemover tenantAdminsRemover = + new PaginatedRemover() { @Override - protected List findEntities(TenantId id, TextPageLink pageLink) { + protected List findEntities(TenantId id, TextPageLink pageLink) { return userDao.findTenantAdmins(id.getId(), pageLink); } @Override - protected void removeEntity(UserEntity entity) { - deleteUser(new UserId(entity.getId())); + protected void removeEntity(User entity) { + deleteUser(new UserId(entity.getUuidId())); } }; - class CustomerUsersRemover extends PaginatedRemover { + private class CustomerUsersRemover extends PaginatedRemover { private TenantId tenantId; @@ -337,14 +325,14 @@ public class UserServiceImpl implements UserService { } @Override - protected List findEntities(CustomerId id, TextPageLink pageLink) { + protected List findEntities(CustomerId id, TextPageLink pageLink) { return userDao.findCustomerUsers(tenantId.getId(), id.getId(), pageLink); } @Override - protected void removeEntity(UserEntity entity) { - deleteUser(new UserId(entity.getId())); + protected void removeEntity(User entity) { + deleteUser(new UserId(entity.getUuidId())); } } diff --git a/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetTypeDaoImpl.java b/dao/src/main/java/org/thingsboard/server/dao/widget/CassandraWidgetTypeDao.java similarity index 78% rename from dao/src/main/java/org/thingsboard/server/dao/widget/WidgetTypeDaoImpl.java rename to dao/src/main/java/org/thingsboard/server/dao/widget/CassandraWidgetTypeDao.java index 8b50713267..56e6db97d9 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetTypeDaoImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/widget/CassandraWidgetTypeDao.java @@ -17,12 +17,10 @@ package org.thingsboard.server.dao.widget; import com.datastax.driver.core.querybuilder.Select.Where; import lombok.extern.slf4j.Slf4j; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; -import org.springframework.stereotype.Repository; import org.thingsboard.server.common.data.widget.WidgetType; -import org.thingsboard.server.dao.AbstractModelDao; +import org.thingsboard.server.dao.CassandraAbstractModelDao; +import org.thingsboard.server.dao.DaoUtil; import org.thingsboard.server.dao.model.WidgetTypeEntity; import java.util.List; @@ -34,7 +32,7 @@ import static org.thingsboard.server.dao.model.ModelConstants.*; @Component @Slf4j -public class WidgetTypeDaoImpl extends AbstractModelDao implements WidgetTypeDao { +public class CassandraWidgetTypeDao extends CassandraAbstractModelDao implements WidgetTypeDao { @Override protected Class getColumnFamilyClass() { @@ -47,13 +45,7 @@ public class WidgetTypeDaoImpl extends AbstractModelDao implem } @Override - public WidgetTypeEntity save(WidgetType widgetType) { - log.debug("Save widget type [{}] ", widgetType); - return save(new WidgetTypeEntity(widgetType)); - } - - @Override - public List findWidgetTypesByTenantIdAndBundleAlias(UUID tenantId, String bundleAlias) { + public List findWidgetTypesByTenantIdAndBundleAlias(UUID tenantId, String bundleAlias) { log.debug("Try to find widget types by tenantId [{}] and bundleAlias [{}]", tenantId, bundleAlias); Where query = select().from(WIDGET_TYPE_BY_TENANT_AND_ALIASES_COLUMN_FAMILY_NAME) .where() @@ -61,11 +53,11 @@ public class WidgetTypeDaoImpl extends AbstractModelDao implem .and(eq(WIDGET_TYPE_BUNDLE_ALIAS_PROPERTY, bundleAlias)); List widgetTypesEntities = findListByStatement(query); log.trace("Found widget types [{}] by tenantId [{}] and bundleAlias [{}]", widgetTypesEntities, tenantId, bundleAlias); - return widgetTypesEntities; + return DaoUtil.convertDataList(widgetTypesEntities); } @Override - public WidgetTypeEntity findByTenantIdBundleAliasAndAlias(UUID tenantId, String bundleAlias, String alias) { + public WidgetType findByTenantIdBundleAliasAndAlias(UUID tenantId, String bundleAlias, String alias) { log.debug("Try to find widget type by tenantId [{}], bundleAlias [{}] and alias [{}]", tenantId, bundleAlias, alias); Where query = select().from(WIDGET_TYPE_BY_TENANT_AND_ALIASES_COLUMN_FAMILY_NAME) .where() @@ -76,7 +68,7 @@ public class WidgetTypeDaoImpl extends AbstractModelDao implem WidgetTypeEntity widgetTypeEntity = findOneByStatement(query); log.trace("Found widget type [{}] by tenantId [{}], bundleAlias [{}] and alias [{}]", widgetTypeEntity, tenantId, bundleAlias, alias); - return widgetTypeEntity; + return DaoUtil.getData(widgetTypeEntity); } } diff --git a/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleDaoImpl.java b/dao/src/main/java/org/thingsboard/server/dao/widget/CassandraWidgetsBundleDao.java similarity index 75% rename from dao/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleDaoImpl.java rename to dao/src/main/java/org/thingsboard/server/dao/widget/CassandraWidgetsBundleDao.java index b9a8055248..036d754919 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleDaoImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/widget/CassandraWidgetsBundleDao.java @@ -17,26 +17,23 @@ package org.thingsboard.server.dao.widget; import com.datastax.driver.core.querybuilder.Select; import lombok.extern.slf4j.Slf4j; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import org.thingsboard.server.common.data.page.TextPageLink; import org.thingsboard.server.common.data.widget.WidgetsBundle; -import org.thingsboard.server.dao.AbstractSearchTextDao; +import org.thingsboard.server.dao.CassandraAbstractSearchTextDao; +import org.thingsboard.server.dao.DaoUtil; import org.thingsboard.server.dao.model.WidgetsBundleEntity; import java.util.Arrays; import java.util.List; import java.util.UUID; -import static com.datastax.driver.core.querybuilder.QueryBuilder.eq; -import static com.datastax.driver.core.querybuilder.QueryBuilder.in; -import static com.datastax.driver.core.querybuilder.QueryBuilder.select; +import static com.datastax.driver.core.querybuilder.QueryBuilder.*; import static org.thingsboard.server.dao.model.ModelConstants.*; @Component @Slf4j -public class WidgetsBundleDaoImpl extends AbstractSearchTextDao implements WidgetsBundleDao { +public class CassandraWidgetsBundleDao extends CassandraAbstractSearchTextDao implements WidgetsBundleDao { @Override protected Class getColumnFamilyClass() { @@ -49,13 +46,7 @@ public class WidgetsBundleDaoImpl extends AbstractSearchTextDao findSystemWidgetsBundles(TextPageLink pageLink) { + public List findSystemWidgetsBundles(TextPageLink pageLink) { log.debug("Try to find system widgets bundles by pageLink [{}]", pageLink); List widgetsBundlesEntities = findPageWithTextSearch(WIDGETS_BUNDLE_BY_TENANT_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME, Arrays.asList(eq(WIDGETS_BUNDLE_TENANT_ID_PROPERTY, NULL_UUID)), pageLink); log.trace("Found system widgets bundles [{}] by pageLink [{}]", widgetsBundlesEntities, pageLink); - return widgetsBundlesEntities; + return DaoUtil.convertDataList(widgetsBundlesEntities); } @Override - public List findTenantWidgetsBundlesByTenantId(UUID tenantId, TextPageLink pageLink) { + public List findTenantWidgetsBundlesByTenantId(UUID tenantId, TextPageLink pageLink) { log.debug("Try to find tenant widgets bundles by tenantId [{}] and pageLink [{}]", tenantId, pageLink); List widgetsBundlesEntities = findPageWithTextSearch(WIDGETS_BUNDLE_BY_TENANT_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME, Arrays.asList(eq(WIDGETS_BUNDLE_TENANT_ID_PROPERTY, tenantId)), pageLink); log.trace("Found tenant widgets bundles [{}] by tenantId [{}] and pageLink [{}]", widgetsBundlesEntities, tenantId, pageLink); - return widgetsBundlesEntities; + return DaoUtil.convertDataList(widgetsBundlesEntities); } @Override - public List findAllTenantWidgetsBundlesByTenantId(UUID tenantId, TextPageLink pageLink) { + public List findAllTenantWidgetsBundlesByTenantId(UUID tenantId, TextPageLink pageLink) { log.debug("Try to find all tenant widgets bundles by tenantId [{}] and pageLink [{}]", tenantId, pageLink); List widgetsBundlesEntities = findPageWithTextSearch(WIDGETS_BUNDLE_BY_TENANT_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME, Arrays.asList(in(WIDGETS_BUNDLE_TENANT_ID_PROPERTY, Arrays.asList(NULL_UUID, tenantId))), pageLink); log.trace("Found all tenant widgets bundles [{}] by tenantId [{}] and pageLink [{}]", widgetsBundlesEntities, tenantId, pageLink); - return widgetsBundlesEntities; + return DaoUtil.convertDataList(widgetsBundlesEntities); } } diff --git a/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetTypeDao.java b/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetTypeDao.java index dd85c10528..dce706499d 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetTypeDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetTypeDao.java @@ -17,17 +17,14 @@ package org.thingsboard.server.dao.widget; import org.thingsboard.server.common.data.widget.WidgetType; import org.thingsboard.server.dao.Dao; -import org.thingsboard.server.dao.model.WidgetTypeEntity; import java.util.List; import java.util.UUID; /** * The Interface WidgetTypeDao. - * - * @param the generic type */ -public interface WidgetTypeDao extends Dao { +public interface WidgetTypeDao extends Dao { /** * Save or update widget type object @@ -35,7 +32,7 @@ public interface WidgetTypeDao extends Dao { * @param widgetType the widget type object * @return saved widget type object */ - WidgetTypeEntity save(WidgetType widgetType); + WidgetType save(WidgetType widgetType); /** * Find widget types by tenantId and bundleAlias. @@ -44,7 +41,7 @@ public interface WidgetTypeDao extends Dao { * @param bundleAlias the bundle alias * @return the list of widget types objects */ - List findWidgetTypesByTenantIdAndBundleAlias(UUID tenantId, String bundleAlias); + List findWidgetTypesByTenantIdAndBundleAlias(UUID tenantId, String bundleAlias); /** * Find widget type by tenantId, bundleAlias and alias. @@ -54,6 +51,6 @@ public interface WidgetTypeDao extends Dao { * @param alias the alias * @return the widget type object */ - WidgetTypeEntity findByTenantIdBundleAliasAndAlias(UUID tenantId, String bundleAlias, String alias); + WidgetType findByTenantIdBundleAliasAndAlias(UUID tenantId, String bundleAlias, String alias); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetTypeService.java b/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetTypeService.java index 5ff931c5f4..dcc70f78a3 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetTypeService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetTypeService.java @@ -23,16 +23,16 @@ import java.util.List; public interface WidgetTypeService { - public WidgetType findWidgetTypeById(WidgetTypeId widgetTypeId); + WidgetType findWidgetTypeById(WidgetTypeId widgetTypeId); - public WidgetType saveWidgetType(WidgetType widgetType); + WidgetType saveWidgetType(WidgetType widgetType); - public void deleteWidgetType(WidgetTypeId widgetTypeId); + void deleteWidgetType(WidgetTypeId widgetTypeId); - public List findWidgetTypesByTenantIdAndBundleAlias(TenantId tenantId, String bundleAlias); + List findWidgetTypesByTenantIdAndBundleAlias(TenantId tenantId, String bundleAlias); - public WidgetType findWidgetTypeByTenantIdBundleAliasAndAlias(TenantId tenantId, String bundleAlias, String alias); + WidgetType findWidgetTypeByTenantIdBundleAliasAndAlias(TenantId tenantId, String bundleAlias, String alias); - public void deleteWidgetTypesByTenantIdAndBundleAlias(TenantId tenantId, String bundleAlias); + void deleteWidgetTypesByTenantIdAndBundleAlias(TenantId tenantId, String bundleAlias); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetTypeServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetTypeServiceImpl.java index 45a0c711ee..f533f715bd 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetTypeServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetTypeServiceImpl.java @@ -17,8 +17,6 @@ package org.thingsboard.server.dao.widget; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.thingsboard.server.common.data.Tenant; @@ -28,19 +26,12 @@ import org.thingsboard.server.common.data.widget.WidgetType; import org.thingsboard.server.common.data.widget.WidgetsBundle; import org.thingsboard.server.dao.exception.DataValidationException; import org.thingsboard.server.dao.model.ModelConstants; -import org.thingsboard.server.dao.model.TenantEntity; -import org.thingsboard.server.dao.model.WidgetTypeEntity; -import org.thingsboard.server.dao.model.WidgetsBundleEntity; import org.thingsboard.server.dao.service.DataValidator; import org.thingsboard.server.dao.service.Validator; import org.thingsboard.server.dao.tenant.TenantDao; -import org.thingsboard.server.dao.tenant.TenantService; import java.util.List; -import static org.thingsboard.server.dao.DaoUtil.convertDataList; -import static org.thingsboard.server.dao.DaoUtil.getData; - @Service @Slf4j public class WidgetTypeServiceImpl implements WidgetTypeService { @@ -58,16 +49,14 @@ public class WidgetTypeServiceImpl implements WidgetTypeService { public WidgetType findWidgetTypeById(WidgetTypeId widgetTypeId) { log.trace("Executing findWidgetTypeById [{}]", widgetTypeId); Validator.validateId(widgetTypeId, "Incorrect widgetTypeId " + widgetTypeId); - WidgetTypeEntity widgetTypeEntity = widgetTypeDao.findById(widgetTypeId.getId()); - return getData(widgetTypeEntity); + return widgetTypeDao.findById(widgetTypeId.getId()); } @Override public WidgetType saveWidgetType(WidgetType widgetType) { log.trace("Executing saveWidgetType [{}]", widgetType); widgetTypeValidator.validate(widgetType); - WidgetTypeEntity widgetTypeEntity = widgetTypeDao.save(widgetType); - return getData(widgetTypeEntity); + return widgetTypeDao.save(widgetType); } @Override @@ -82,8 +71,7 @@ public class WidgetTypeServiceImpl implements WidgetTypeService { log.trace("Executing findWidgetTypesByTenantIdAndBundleAlias, tenantId [{}], bundleAlias [{}]", tenantId, bundleAlias); Validator.validateId(tenantId, "Incorrect tenantId " + tenantId); Validator.validateString(bundleAlias, "Incorrect bundleAlias " + bundleAlias); - List widgetTypesEntities = widgetTypeDao.findWidgetTypesByTenantIdAndBundleAlias(tenantId.getId(), bundleAlias); - return convertDataList(widgetTypesEntities); + return widgetTypeDao.findWidgetTypesByTenantIdAndBundleAlias(tenantId.getId(), bundleAlias); } @Override @@ -92,8 +80,7 @@ public class WidgetTypeServiceImpl implements WidgetTypeService { Validator.validateId(tenantId, "Incorrect tenantId " + tenantId); Validator.validateString(bundleAlias, "Incorrect bundleAlias " + bundleAlias); Validator.validateString(alias, "Incorrect alias " + alias); - WidgetTypeEntity widgetTypeEntity = widgetTypeDao.findByTenantIdBundleAliasAndAlias(tenantId.getId(), bundleAlias, alias); - return getData(widgetTypeEntity); + return widgetTypeDao.findByTenantIdBundleAliasAndAlias(tenantId.getId(), bundleAlias, alias); } @Override @@ -101,9 +88,9 @@ public class WidgetTypeServiceImpl implements WidgetTypeService { log.trace("Executing deleteWidgetTypesByTenantIdAndBundleAlias, tenantId [{}], bundleAlias [{}]", tenantId, bundleAlias); Validator.validateId(tenantId, "Incorrect tenantId " + tenantId); Validator.validateString(bundleAlias, "Incorrect bundleAlias " + bundleAlias); - List widgetTypesEntities = widgetTypeDao.findWidgetTypesByTenantIdAndBundleAlias(tenantId.getId(), bundleAlias); - for (WidgetTypeEntity widgetTypeEntity : widgetTypesEntities) { - deleteWidgetType(new WidgetTypeId(widgetTypeEntity.getId())); + List widgetTypes = widgetTypeDao.findWidgetTypesByTenantIdAndBundleAlias(tenantId.getId(), bundleAlias); + for (WidgetType widgetType : widgetTypes) { + deleteWidgetType(new WidgetTypeId(widgetType.getUuidId())); } } @@ -124,7 +111,7 @@ public class WidgetTypeServiceImpl implements WidgetTypeService { widgetType.setTenantId(new TenantId(ModelConstants.NULL_UUID)); } if (!widgetType.getTenantId().getId().equals(ModelConstants.NULL_UUID)) { - TenantEntity tenant = tenantDao.findById(widgetType.getTenantId().getId()); + Tenant tenant = tenantDao.findById(widgetType.getTenantId().getId()); if (tenant == null) { throw new DataValidationException("Widget type is referencing to non-existent tenant!"); } @@ -133,8 +120,7 @@ public class WidgetTypeServiceImpl implements WidgetTypeService { @Override protected void validateCreate(WidgetType widgetType) { - - WidgetsBundleEntity widgetsBundle = widgetsBundleService.findWidgetsBundleByTenantIdAndAlias(widgetType.getTenantId().getId(), widgetType.getBundleAlias()); + WidgetsBundle widgetsBundle = widgetsBundleService.findWidgetsBundleByTenantIdAndAlias(widgetType.getTenantId().getId(), widgetType.getBundleAlias()); if (widgetsBundle == null) { throw new DataValidationException("Widget type is referencing to non-existent widgets bundle!"); } @@ -142,7 +128,7 @@ public class WidgetTypeServiceImpl implements WidgetTypeService { String alias = widgetType.getName().toLowerCase().replaceAll("\\W+", "_"); String originalAlias = alias; int c = 1; - WidgetTypeEntity withSameAlias; + WidgetType withSameAlias; do { withSameAlias = widgetTypeDao.findByTenantIdBundleAliasAndAlias(widgetType.getTenantId().getId(), widgetType.getBundleAlias(), alias); if (withSameAlias != null) { @@ -154,8 +140,8 @@ public class WidgetTypeServiceImpl implements WidgetTypeService { @Override protected void validateUpdate(WidgetType widgetType) { - WidgetTypeEntity storedWidgetType = widgetTypeDao.findById(widgetType.getId().getId()); - if (!storedWidgetType.getTenantId().equals(widgetType.getTenantId().getId())) { + WidgetType storedWidgetType = widgetTypeDao.findById(widgetType.getId().getId()); + if (!storedWidgetType.getTenantId().getId().equals(widgetType.getTenantId().getId())) { throw new DataValidationException("Can't move existing widget type to different tenant!"); } if (!storedWidgetType.getBundleAlias().equals(widgetType.getBundleAlias())) { diff --git a/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleDao.java b/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleDao.java index 0e04f91acd..d8c604449b 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleDao.java @@ -18,17 +18,14 @@ package org.thingsboard.server.dao.widget; import org.thingsboard.server.common.data.page.TextPageLink; import org.thingsboard.server.common.data.widget.WidgetsBundle; import org.thingsboard.server.dao.Dao; -import org.thingsboard.server.dao.model.WidgetsBundleEntity; import java.util.List; import java.util.UUID; /** * The Interface WidgetsBundleDao. - * - * @param the generic type */ -public interface WidgetsBundleDao extends Dao { +public interface WidgetsBundleDao extends Dao { /** * Save or update widgets bundle object @@ -36,7 +33,7 @@ public interface WidgetsBundleDao extends Dao { * @param widgetsBundle the widgets bundle object * @return saved widgets bundle object */ - WidgetsBundleEntity save(WidgetsBundle widgetsBundle); + WidgetsBundle save(WidgetsBundle widgetsBundle); /** * Find widgets bundle by tenantId and alias. @@ -45,7 +42,7 @@ public interface WidgetsBundleDao extends Dao { * @param alias the alias * @return the widgets bundle object */ - WidgetsBundleEntity findWidgetsBundleByTenantIdAndAlias(UUID tenantId, String alias); + WidgetsBundle findWidgetsBundleByTenantIdAndAlias(UUID tenantId, String alias); /** * Find system widgets bundles by page link. @@ -53,7 +50,7 @@ public interface WidgetsBundleDao extends Dao { * @param pageLink the page link * @return the list of widgets bundles objects */ - List findSystemWidgetsBundles(TextPageLink pageLink); + List findSystemWidgetsBundles(TextPageLink pageLink); /** * Find tenant widgets bundles by tenantId and page link. @@ -62,7 +59,7 @@ public interface WidgetsBundleDao extends Dao { * @param pageLink the page link * @return the list of widgets bundles objects */ - List findTenantWidgetsBundlesByTenantId(UUID tenantId, TextPageLink pageLink); + List findTenantWidgetsBundlesByTenantId(UUID tenantId, TextPageLink pageLink); /** * Find all tenant widgets bundles (including system) by tenantId and page link. @@ -71,7 +68,7 @@ public interface WidgetsBundleDao extends Dao { * @param pageLink the page link * @return the list of widgets bundles objects */ - List findAllTenantWidgetsBundlesByTenantId(UUID tenantId, TextPageLink pageLink); + List findAllTenantWidgetsBundlesByTenantId(UUID tenantId, TextPageLink pageLink); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleService.java b/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleService.java index 4b91c26cc8..27f9211a6a 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleService.java @@ -25,24 +25,24 @@ import java.util.List; public interface WidgetsBundleService { - public WidgetsBundle findWidgetsBundleById(WidgetsBundleId widgetsBundleId); + WidgetsBundle findWidgetsBundleById(WidgetsBundleId widgetsBundleId); - public WidgetsBundle saveWidgetsBundle(WidgetsBundle widgetsBundle); + WidgetsBundle saveWidgetsBundle(WidgetsBundle widgetsBundle); - public void deleteWidgetsBundle(WidgetsBundleId widgetsBundleId); + void deleteWidgetsBundle(WidgetsBundleId widgetsBundleId); - public WidgetsBundle findWidgetsBundleByTenantIdAndAlias(TenantId tenantId, String alias); + WidgetsBundle findWidgetsBundleByTenantIdAndAlias(TenantId tenantId, String alias); - public TextPageData findSystemWidgetsBundlesByPageLink(TextPageLink pageLink); + TextPageData findSystemWidgetsBundlesByPageLink(TextPageLink pageLink); - public List findSystemWidgetsBundles(); + List findSystemWidgetsBundles(); - public TextPageData findTenantWidgetsBundlesByTenantId(TenantId tenantId, TextPageLink pageLink); + TextPageData findTenantWidgetsBundlesByTenantId(TenantId tenantId, TextPageLink pageLink); - public TextPageData findAllTenantWidgetsBundlesByTenantIdAndPageLink(TenantId tenantId, TextPageLink pageLink); + TextPageData findAllTenantWidgetsBundlesByTenantIdAndPageLink(TenantId tenantId, TextPageLink pageLink); - public List findAllTenantWidgetsBundlesByTenantId(TenantId tenantId); + List findAllTenantWidgetsBundlesByTenantId(TenantId tenantId); - public void deleteWidgetsBundlesByTenantId(TenantId tenantId); + void deleteWidgetsBundlesByTenantId(TenantId tenantId); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleServiceImpl.java index 2262e14e8a..9e90acaf3e 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleServiceImpl.java @@ -17,10 +17,9 @@ package org.thingsboard.server.dao.widget; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.thingsboard.server.common.data.Tenant; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.id.WidgetsBundleId; import org.thingsboard.server.common.data.page.TextPageData; @@ -29,8 +28,6 @@ import org.thingsboard.server.common.data.widget.WidgetsBundle; import org.thingsboard.server.dao.exception.DataValidationException; import org.thingsboard.server.dao.exception.IncorrectParameterException; import org.thingsboard.server.dao.model.ModelConstants; -import org.thingsboard.server.dao.model.TenantEntity; -import org.thingsboard.server.dao.model.WidgetsBundleEntity; import org.thingsboard.server.dao.service.DataValidator; import org.thingsboard.server.dao.service.PaginatedRemover; import org.thingsboard.server.dao.service.Validator; @@ -39,13 +36,12 @@ import org.thingsboard.server.dao.tenant.TenantDao; import java.util.ArrayList; import java.util.List; -import static org.thingsboard.server.dao.DaoUtil.convertDataList; -import static org.thingsboard.server.dao.DaoUtil.getData; - @Service @Slf4j public class WidgetsBundleServiceImpl implements WidgetsBundleService { + private static final int DEFAULT_WIDGETS_BUNDLE_LIMIT = 300; + @Autowired private WidgetsBundleDao widgetsBundleDao; @@ -59,16 +55,14 @@ public class WidgetsBundleServiceImpl implements WidgetsBundleService { public WidgetsBundle findWidgetsBundleById(WidgetsBundleId widgetsBundleId) { log.trace("Executing findWidgetsBundleById [{}]", widgetsBundleId); Validator.validateId(widgetsBundleId, "Incorrect widgetsBundleId " + widgetsBundleId); - WidgetsBundleEntity widgetsBundleEntity = widgetsBundleDao.findById(widgetsBundleId.getId()); - return getData(widgetsBundleEntity); + return widgetsBundleDao.findById(widgetsBundleId.getId()); } @Override public WidgetsBundle saveWidgetsBundle(WidgetsBundle widgetsBundle) { log.trace("Executing saveWidgetsBundle [{}]", widgetsBundle); widgetsBundleValidator.validate(widgetsBundle); - WidgetsBundleEntity widgetsBundleEntity = widgetsBundleDao.save(widgetsBundle); - return getData(widgetsBundleEntity); + return widgetsBundleDao.save(widgetsBundle); } @Override @@ -88,25 +82,22 @@ public class WidgetsBundleServiceImpl implements WidgetsBundleService { log.trace("Executing findWidgetsBundleByTenantIdAndAlias, tenantId [{}], alias [{}]", tenantId, alias); Validator.validateId(tenantId, "Incorrect tenantId " + tenantId); Validator.validateString(alias, "Incorrect alias " + alias); - WidgetsBundleEntity widgetsBundleEntity = widgetsBundleDao.findWidgetsBundleByTenantIdAndAlias(tenantId.getId(), alias); - return getData(widgetsBundleEntity); + return widgetsBundleDao.findWidgetsBundleByTenantIdAndAlias(tenantId.getId(), alias); } @Override public TextPageData findSystemWidgetsBundlesByPageLink(TextPageLink pageLink) { log.trace("Executing findSystemWidgetsBundles, pageLink [{}]", pageLink); Validator.validatePageLink(pageLink, "Incorrect page link " + pageLink); - List widgetsBundlesEntities = widgetsBundleDao.findSystemWidgetsBundles(pageLink); - List widgetsBundles = convertDataList(widgetsBundlesEntities); - return new TextPageData<>(widgetsBundles, pageLink); + return new TextPageData<>(widgetsBundleDao.findSystemWidgetsBundles(pageLink), pageLink); } @Override public List findSystemWidgetsBundles() { log.trace("Executing findSystemWidgetsBundles"); List widgetsBundles = new ArrayList<>(); - TextPageLink pageLink = new TextPageLink(300); - TextPageData pageData = null; + TextPageLink pageLink = new TextPageLink(DEFAULT_WIDGETS_BUNDLE_LIMIT); + TextPageData pageData; do { pageData = findSystemWidgetsBundlesByPageLink(pageLink); widgetsBundles.addAll(pageData.getData()); @@ -122,9 +113,7 @@ public class WidgetsBundleServiceImpl implements WidgetsBundleService { log.trace("Executing findTenantWidgetsBundlesByTenantId, tenantId [{}], pageLink [{}]", tenantId, pageLink); Validator.validateId(tenantId, "Incorrect tenantId " + tenantId); Validator.validatePageLink(pageLink, "Incorrect page link " + pageLink); - List widgetsBundlesEntities = widgetsBundleDao.findTenantWidgetsBundlesByTenantId(tenantId.getId(), pageLink); - List widgetsBundles = convertDataList(widgetsBundlesEntities); - return new TextPageData<>(widgetsBundles, pageLink); + return new TextPageData<>(widgetsBundleDao.findTenantWidgetsBundlesByTenantId(tenantId.getId(), pageLink), pageLink); } @Override @@ -132,9 +121,7 @@ public class WidgetsBundleServiceImpl implements WidgetsBundleService { log.trace("Executing findAllTenantWidgetsBundlesByTenantIdAndPageLink, tenantId [{}], pageLink [{}]", tenantId, pageLink); Validator.validateId(tenantId, "Incorrect tenantId " + tenantId); Validator.validatePageLink(pageLink, "Incorrect page link " + pageLink); - List widgetsBundlesEntities = widgetsBundleDao.findAllTenantWidgetsBundlesByTenantId(tenantId.getId(), pageLink); - List widgetsBundles = convertDataList(widgetsBundlesEntities); - return new TextPageData<>(widgetsBundles, pageLink); + return new TextPageData<>(widgetsBundleDao.findAllTenantWidgetsBundlesByTenantId(tenantId.getId(), pageLink), pageLink); } @Override @@ -142,8 +129,8 @@ public class WidgetsBundleServiceImpl implements WidgetsBundleService { log.trace("Executing findAllTenantWidgetsBundlesByTenantId, tenantId [{}]", tenantId); Validator.validateId(tenantId, "Incorrect tenantId " + tenantId); List widgetsBundles = new ArrayList<>(); - TextPageLink pageLink = new TextPageLink(300); - TextPageData pageData = null; + TextPageLink pageLink = new TextPageLink(DEFAULT_WIDGETS_BUNDLE_LIMIT); + TextPageData pageData; do { pageData = findAllTenantWidgetsBundlesByTenantIdAndPageLink(tenantId, pageLink); widgetsBundles.addAll(pageData.getData()); @@ -173,7 +160,7 @@ public class WidgetsBundleServiceImpl implements WidgetsBundleService { widgetsBundle.setTenantId(new TenantId(ModelConstants.NULL_UUID)); } if (!widgetsBundle.getTenantId().getId().equals(ModelConstants.NULL_UUID)) { - TenantEntity tenant = tenantDao.findById(widgetsBundle.getTenantId().getId()); + Tenant tenant = tenantDao.findById(widgetsBundle.getTenantId().getId()); if (tenant == null) { throw new DataValidationException("Widgets bundle is referencing to non-existent tenant!"); } @@ -185,7 +172,7 @@ public class WidgetsBundleServiceImpl implements WidgetsBundleService { String alias = widgetsBundle.getTitle().toLowerCase().replaceAll("\\W+", "_"); String originalAlias = alias; int c = 1; - WidgetsBundleEntity withSameAlias; + WidgetsBundle withSameAlias; do { withSameAlias = widgetsBundleDao.findWidgetsBundleByTenantIdAndAlias(widgetsBundle.getTenantId().getId(), alias); if (withSameAlias != null) { @@ -197,8 +184,8 @@ public class WidgetsBundleServiceImpl implements WidgetsBundleService { @Override protected void validateUpdate(WidgetsBundle widgetsBundle) { - WidgetsBundleEntity storedWidgetsBundle = widgetsBundleDao.findById(widgetsBundle.getId().getId()); - if (!storedWidgetsBundle.getTenantId().equals(widgetsBundle.getTenantId().getId())) { + WidgetsBundle storedWidgetsBundle = widgetsBundleDao.findById(widgetsBundle.getId().getId()); + if (!storedWidgetsBundle.getTenantId().getId().equals(widgetsBundle.getTenantId().getId())) { throw new DataValidationException("Can't move existing widgets bundle to different tenant!"); } if (!storedWidgetsBundle.getAlias().equals(widgetsBundle.getAlias())) { @@ -208,17 +195,17 @@ public class WidgetsBundleServiceImpl implements WidgetsBundleService { }; - private PaginatedRemover tenantWidgetsBundleRemover = - new PaginatedRemover() { + private PaginatedRemover tenantWidgetsBundleRemover = + new PaginatedRemover() { @Override - protected List findEntities(TenantId id, TextPageLink pageLink) { + protected List findEntities(TenantId id, TextPageLink pageLink) { return widgetsBundleDao.findTenantWidgetsBundlesByTenantId(id.getId(), pageLink); } @Override - protected void removeEntity(WidgetsBundleEntity entity) { - deleteWidgetsBundle(new WidgetsBundleId(entity.getId())); + protected void removeEntity(WidgetsBundle entity) { + deleteWidgetsBundle(new WidgetsBundleId(entity.getUuidId())); } };