From d6965e946955a49a91960fa0e454a798e9b7b271 Mon Sep 17 00:00:00 2001 From: volodymyr-babak Date: Fri, 7 Apr 2017 20:41:19 +0300 Subject: [PATCH 1/4] Refactoring to introduce new DAO layer --- .../server/dao/AbstractSearchTimeDao.java | 13 +-- ...ao.java => CassandraAbstractAsyncDao.java} | 2 +- ...ractDao.java => CassandraAbstractDao.java} | 2 +- ...ao.java => CassandraAbstractModelDao.java} | 85 ++++++++------ ...va => CassandraAbstractSearchTextDao.java} | 19 ++-- .../java/org/thingsboard/server/dao/Dao.java | 3 +- .../org/thingsboard/server/dao/DaoUtil.java | 8 +- .../server/dao/EncryptionUtil.java | 1 - .../server/dao/attributes/AttributesDao.java | 1 + .../dao/attributes/AttributesService.java | 4 +- .../dao/attributes/BaseAttributesService.java | 5 +- ...o.java => CassandraBaseAttributesDao.java} | 14 ++- .../dao/cassandra/CassandraCluster.java | 10 +- .../dao/cassandra/CassandraQueryOptions.java | 3 - .../dao/cassandra/CassandraSocketOptions.java | 3 +- .../component/BaseComponentDescriptorDao.java | 45 ++++---- .../BaseComponentDescriptorService.java | 20 ++-- .../dao/component/ComponentDescriptorDao.java | 13 +-- ...DaoImpl.java => CassandraCustomerDao.java} | 29 ++--- .../server/dao/customer/CustomerDao.java | 13 +-- .../server/dao/customer/CustomerService.java | 10 +- .../dao/customer/CustomerServiceImpl.java | 39 +++---- .../dao/dashboard/CassandraDashboardDao.java | 37 +++++++ ...pl.java => CassandraDashboardInfoDao.java} | 14 ++- .../server/dao/dashboard/DashboardDao.java | 12 +- .../dao/dashboard/DashboardDaoImpl.java | 60 ---------- .../dao/dashboard/DashboardInfoDao.java | 18 ++- .../dao/dashboard/DashboardService.java | 28 ++--- .../dao/dashboard/DashboardServiceImpl.java | 59 +++++----- ...ava => CassandraDeviceCredentialsDao.java} | 36 +++--- ...ceDaoImpl.java => CassandraDeviceDao.java} | 41 +++---- .../dao/device/DeviceCredentialsDao.java | 15 +-- .../device/DeviceCredentialsServiceImpl.java | 20 ++-- .../server/dao/device/DeviceDao.java | 23 ++-- .../server/dao/device/DeviceServiceImpl.java | 31 ++---- .../server/dao/event/BaseEventService.java | 21 ++-- ...entDao.java => CassandraBaseEventDao.java} | 27 +++-- .../server/dao/event/EventDao.java | 15 +-- .../server/dao/event/EventService.java | 1 - .../server/dao/plugin/BasePluginService.java | 49 ++++----- ...inDao.java => CassandraBasePluginDao.java} | 39 +++---- .../server/dao/plugin/PluginDao.java | 13 +-- .../server/dao/rule/BaseRuleService.java | 39 +++---- ...RuleDao.java => CassandraBaseRuleDao.java} | 29 ++--- .../thingsboard/server/dao/rule/RuleDao.java | 13 +-- .../server/dao/service/DataValidator.java | 11 +- .../server/dao/service/PaginatedRemover.java | 38 ++++--- .../server/dao/settings/AdminSettingsDao.java | 7 +- .../dao/settings/AdminSettingsService.java | 6 +- .../settings/AdminSettingsServiceImpl.java | 18 +-- ...pl.java => CassandraAdminSettingsDao.java} | 29 ++--- ...ntDaoImpl.java => CassandraTenantDao.java} | 31 ++---- .../server/dao/tenant/TenantDao.java | 11 +- .../server/dao/tenant/TenantService.java | 12 +- .../server/dao/tenant/TenantServiceImpl.java | 37 +++---- .../dao/timeseries/BaseTimeseriesService.java | 21 +--- ...o.java => CassandraBaseTimeseriesDao.java} | 13 +-- .../server/dao/timeseries/TimeseriesDao.java | 3 +- .../dao/timeseries/TimeseriesService.java | 3 +- .../dao/timeseries/TsKvQueryCursor.java | 1 - ....java => CassandraUserCredentialsDao.java} | 39 +++---- ...UserDaoImpl.java => CassandraUserDao.java} | 42 +++---- .../server/dao/user/UserCredentialsDao.java | 23 ++-- .../thingsboard/server/dao/user/UserDao.java | 17 ++- .../server/dao/user/UserService.java | 28 ++--- .../server/dao/user/UserServiceImpl.java | 104 ++++++++---------- ...oImpl.java => CassandraWidgetTypeDao.java} | 22 ++-- ...pl.java => CassandraWidgetsBundleDao.java} | 33 ++---- .../server/dao/widget/WidgetTypeDao.java | 11 +- .../server/dao/widget/WidgetTypeService.java | 12 +- .../dao/widget/WidgetTypeServiceImpl.java | 38 ++----- .../server/dao/widget/WidgetsBundleDao.java | 15 +-- .../dao/widget/WidgetsBundleService.java | 20 ++-- .../dao/widget/WidgetsBundleServiceImpl.java | 57 ++++------ 74 files changed, 701 insertions(+), 983 deletions(-) rename dao/src/main/java/org/thingsboard/server/dao/{AbstractAsyncDao.java => CassandraAbstractAsyncDao.java} (93%) rename dao/src/main/java/org/thingsboard/server/dao/{AbstractDao.java => CassandraAbstractDao.java} (98%) rename dao/src/main/java/org/thingsboard/server/dao/{AbstractModelDao.java => CassandraAbstractModelDao.java} (64%) rename dao/src/main/java/org/thingsboard/server/dao/{AbstractSearchTextDao.java => CassandraAbstractSearchTextDao.java} (86%) rename dao/src/main/java/org/thingsboard/server/dao/attributes/{BaseAttributesDao.java => CassandraBaseAttributesDao.java} (93%) rename dao/src/main/java/org/thingsboard/server/dao/customer/{CustomerDaoImpl.java => CassandraCustomerDao.java} (78%) create mode 100644 dao/src/main/java/org/thingsboard/server/dao/dashboard/CassandraDashboardDao.java rename dao/src/main/java/org/thingsboard/server/dao/dashboard/{DashboardInfoDaoImpl.java => CassandraDashboardInfoDao.java} (79%) delete mode 100644 dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardDaoImpl.java rename dao/src/main/java/org/thingsboard/server/dao/device/{DeviceCredentialsDaoImpl.java => CassandraDeviceCredentialsDao.java} (77%) rename dao/src/main/java/org/thingsboard/server/dao/device/{DeviceDaoImpl.java => CassandraDeviceDao.java} (74%) rename dao/src/main/java/org/thingsboard/server/dao/event/{BaseEventDao.java => CassandraBaseEventDao.java} (84%) rename dao/src/main/java/org/thingsboard/server/dao/plugin/{BasePluginDao.java => CassandraBasePluginDao.java} (77%) rename dao/src/main/java/org/thingsboard/server/dao/rule/{BaseRuleDao.java => CassandraBaseRuleDao.java} (79%) rename dao/src/main/java/org/thingsboard/server/dao/settings/{AdminSettingsDaoImpl.java => CassandraAdminSettingsDao.java} (66%) rename dao/src/main/java/org/thingsboard/server/dao/tenant/{TenantDaoImpl.java => CassandraTenantDao.java} (68%) rename dao/src/main/java/org/thingsboard/server/dao/timeseries/{BaseTimeseriesDao.java => CassandraBaseTimeseriesDao.java} (98%) rename dao/src/main/java/org/thingsboard/server/dao/user/{UserCredentialsDaoImpl.java => CassandraUserCredentialsDao.java} (78%) rename dao/src/main/java/org/thingsboard/server/dao/user/{UserDaoImpl.java => CassandraUserDao.java} (83%) rename dao/src/main/java/org/thingsboard/server/dao/widget/{WidgetTypeDaoImpl.java => CassandraWidgetTypeDao.java} (78%) rename dao/src/main/java/org/thingsboard/server/dao/widget/{WidgetsBundleDaoImpl.java => CassandraWidgetsBundleDao.java} (75%) 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())); } }; From 9fbd7e5bc8d73e031b5f0f130181605bc415f17b Mon Sep 17 00:00:00 2001 From: volodymyr-babak Date: Sun, 9 Apr 2017 23:19:12 +0300 Subject: [PATCH 2/4] Refactoring DAO continue --- .../server/common/data/rule/RuleMetaData.java | 5 +- .../server/dao/CassandraAbstractModelDao.java | 9 +++ .../dao/CassandraAbstractSearchTextDao.java | 8 +-- ...va => CassandraAbstractSearchTimeDao.java} | 2 +- ... CassandraBaseComponentDescriptorDao.java} | 2 +- .../server/dao/device/DeviceServiceImpl.java | 57 ++++++++++--------- .../dao/event/CassandraBaseEventDao.java | 4 +- .../dao/exception/DatabaseException.java | 26 ++++----- .../IncorrectParameterException.java | 4 +- .../server/dao/service/PaginatedRemover.java | 8 +-- .../service/DeviceCredentialsCacheTest.java | 11 ++-- 11 files changed, 71 insertions(+), 65 deletions(-) rename dao/src/main/java/org/thingsboard/server/dao/{AbstractSearchTimeDao.java => CassandraAbstractSearchTimeDao.java} (96%) rename dao/src/main/java/org/thingsboard/server/dao/component/{BaseComponentDescriptorDao.java => CassandraBaseComponentDescriptorDao.java} (97%) diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/rule/RuleMetaData.java b/common/data/src/main/java/org/thingsboard/server/common/data/rule/RuleMetaData.java index ecbc86cd6e..ececfdd72c 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/rule/RuleMetaData.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/rule/RuleMetaData.java @@ -15,14 +15,11 @@ */ package org.thingsboard.server.common.data.rule; +import com.fasterxml.jackson.databind.JsonNode; import lombok.Data; -import lombok.ToString; import org.thingsboard.server.common.data.SearchTextBased; -import org.thingsboard.server.common.data.id.CustomerId; import org.thingsboard.server.common.data.id.RuleId; import org.thingsboard.server.common.data.id.TenantId; - -import com.fasterxml.jackson.databind.JsonNode; import org.thingsboard.server.common.data.plugin.ComponentLifecycleState; @Data diff --git a/dao/src/main/java/org/thingsboard/server/dao/CassandraAbstractModelDao.java b/dao/src/main/java/org/thingsboard/server/dao/CassandraAbstractModelDao.java index 5f5f95f037..ee9d5e0e28 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/CassandraAbstractModelDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/CassandraAbstractModelDao.java @@ -27,8 +27,10 @@ import com.google.common.base.Function; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import lombok.extern.slf4j.Slf4j; +import org.thingsboard.server.common.data.SearchTextBased; import org.thingsboard.server.dao.model.BaseEntity; import org.thingsboard.server.dao.model.ModelConstants; +import org.thingsboard.server.dao.model.SearchTextEntity; import org.thingsboard.server.dao.model.wrapper.EntityResultSet; import javax.annotation.Nullable; @@ -46,6 +48,10 @@ public abstract class CassandraAbstractModelDao, D> exte protected abstract String getColumnFamilyName(); + protected boolean isSearchTextDao() { + return false; + } + protected Mapper getMapper() { return cluster.getMapper(getColumnFamilyClass()); } @@ -144,6 +150,9 @@ public abstract class CassandraAbstractModelDao, D> exte log.error("Can't create entity for domain object {}", domain, e); throw new IllegalArgumentException("Can't create entity for domain object {" + domain + "}", e); } + if (isSearchTextDao()) { + ((SearchTextEntity) entity).setSearchText(((SearchTextEntity) entity).getSearchTextSource().toLowerCase()); + } log.debug("Saving entity {}", entity); entity = saveWithResult(entity).getEntity(); return DaoUtil.getData(entity); diff --git a/dao/src/main/java/org/thingsboard/server/dao/CassandraAbstractSearchTextDao.java b/dao/src/main/java/org/thingsboard/server/dao/CassandraAbstractSearchTextDao.java index 3217043137..735dd3050c 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/CassandraAbstractSearchTextDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/CassandraAbstractSearchTextDao.java @@ -33,11 +33,9 @@ import static com.datastax.driver.core.querybuilder.QueryBuilder.select; @Slf4j public abstract class CassandraAbstractSearchTextDao, D> extends CassandraAbstractModelDao { - public D save(D domain) { - - entity.setSearchText(entity.getSearchTextSource().toLowerCase()); - - return super.save(entity); + @Override + protected boolean isSearchTextDao() { + return true; } protected List findPageWithTextSearch(String searchView, List clauses, TextPageLink pageLink) { diff --git a/dao/src/main/java/org/thingsboard/server/dao/AbstractSearchTimeDao.java b/dao/src/main/java/org/thingsboard/server/dao/CassandraAbstractSearchTimeDao.java similarity index 96% rename from dao/src/main/java/org/thingsboard/server/dao/AbstractSearchTimeDao.java rename to dao/src/main/java/org/thingsboard/server/dao/CassandraAbstractSearchTimeDao.java index 4a10617b25..cb60ea4be7 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/AbstractSearchTimeDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/CassandraAbstractSearchTimeDao.java @@ -32,7 +32,7 @@ import java.util.UUID; import static com.datastax.driver.core.querybuilder.QueryBuilder.select; -public abstract class AbstractSearchTimeDao, D> extends CassandraAbstractModelDao { +public abstract class CassandraAbstractSearchTimeDao, D> extends CassandraAbstractModelDao { protected List findPageWithTimeSearch(String searchView, List clauses, TimePageLink pageLink) { diff --git a/dao/src/main/java/org/thingsboard/server/dao/component/BaseComponentDescriptorDao.java b/dao/src/main/java/org/thingsboard/server/dao/component/CassandraBaseComponentDescriptorDao.java similarity index 97% rename from dao/src/main/java/org/thingsboard/server/dao/component/BaseComponentDescriptorDao.java rename to dao/src/main/java/org/thingsboard/server/dao/component/CassandraBaseComponentDescriptorDao.java index 330790d81b..62eb957d16 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/component/BaseComponentDescriptorDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/component/CassandraBaseComponentDescriptorDao.java @@ -45,7 +45,7 @@ import static com.datastax.driver.core.querybuilder.QueryBuilder.select; */ @Component @Slf4j -public class BaseComponentDescriptorDao extends CassandraAbstractSearchTextDao implements ComponentDescriptorDao { +public class CassandraBaseComponentDescriptorDao extends CassandraAbstractSearchTextDao implements ComponentDescriptorDao { @Override protected Class getColumnFamilyClass() { 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 4a365949cc..258865049a 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 @@ -23,7 +23,9 @@ import org.apache.commons.lang3.RandomStringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; +import org.thingsboard.server.common.data.Customer; import org.thingsboard.server.common.data.Device; +import org.thingsboard.server.common.data.Tenant; import org.thingsboard.server.common.data.id.CustomerId; import org.thingsboard.server.common.data.id.DeviceId; import org.thingsboard.server.common.data.id.TenantId; @@ -33,9 +35,7 @@ import org.thingsboard.server.common.data.security.DeviceCredentials; import org.thingsboard.server.common.data.security.DeviceCredentialsType; import org.thingsboard.server.dao.customer.CustomerDao; import org.thingsboard.server.dao.exception.DataValidationException; -import org.thingsboard.server.dao.model.CustomerEntity; import org.thingsboard.server.dao.model.DeviceEntity; -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.tenant.TenantDao; @@ -43,9 +43,13 @@ import org.thingsboard.server.dao.tenant.TenantDao; import java.util.List; import java.util.Optional; -import static org.thingsboard.server.dao.DaoUtil.*; +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.model.ModelConstants.NULL_UUID; -import static org.thingsboard.server.dao.service.Validator.*; +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; @Service @Slf4j @@ -74,17 +78,16 @@ public class DeviceServiceImpl implements DeviceService { public ListenableFuture findDeviceByIdAsync(DeviceId deviceId) { log.trace("Executing findDeviceById [{}]", deviceId); validateId(deviceId, "Incorrect deviceId " + deviceId); - ListenableFuture deviceEntity = deviceDao.findByIdAsync(deviceId.getId()); - return Futures.transform(deviceEntity, (Function) input -> getData(input)); + return deviceDao.findByIdAsync(deviceId.getId()); } @Override 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); - if (deviceEntityOpt.isPresent()) { - return Optional.of(deviceEntityOpt.get()); + Optional deviceOpt = deviceDao.findDevicesByTenantIdAndName(tenantId.getId(), name); + if (deviceOpt.isPresent()) { + return Optional.of(deviceOpt.get()); } else { return Optional.empty(); } @@ -136,7 +139,7 @@ public class DeviceServiceImpl implements DeviceService { validateId(tenantId, "Incorrect tenantId " + tenantId); validatePageLink(pageLink, "Incorrect page link " + pageLink); List devices = deviceDao.findDevicesByTenantId(tenantId.getId(), pageLink); - return new TextPageData(devices, pageLink); + return new TextPageData<>(devices, pageLink); } @Override @@ -144,8 +147,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> devices = deviceDao.findDevicesByTenantIdAndIdsAsync(tenantId.getId(), toUUIDs(deviceIds)); - return Futures.transform(deviceEntities, (Function, List>) input -> convertDataList(input)); + return deviceDao.findDevicesByTenantIdAndIdsAsync(tenantId.getId(), toUUIDs(deviceIds)); } @@ -163,7 +165,7 @@ public class DeviceServiceImpl implements DeviceService { validateId(customerId, "Incorrect customerId " + customerId); validatePageLink(pageLink, "Incorrect page link " + pageLink); List devices = deviceDao.findDevicesByTenantIdAndCustomerId(tenantId.getId(), customerId.getId(), pageLink); - return new TextPageData(devices, pageLink); + return new TextPageData<>(devices, pageLink); } @Override @@ -172,9 +174,8 @@ public class DeviceServiceImpl implements DeviceService { validateId(tenantId, "Incorrect tenantId " + tenantId); validateId(customerId, "Incorrect customerId " + customerId); validateIds(deviceIds, "Incorrect deviceIds " + deviceIds); - ListenableFuture> deviceEntities = deviceDao.findDevicesByTenantIdCustomerIdAndIdsAsync(tenantId.getId(), + return deviceDao.findDevicesByTenantIdCustomerIdAndIdsAsync(tenantId.getId(), customerId.getId(), toUUIDs(deviceIds)); - return Futures.transform(deviceEntities, (Function, List>) input -> convertDataList(input)); } @Override @@ -201,7 +202,7 @@ public class DeviceServiceImpl implements DeviceService { protected void validateUpdate(Device device) { deviceDao.findDevicesByTenantIdAndName(device.getTenantId().getId(), device.getName()).ifPresent( d -> { - if (!d.getId().equals(device.getUuidId())) { + if (!d.getUuidId().equals(device.getUuidId())) { throw new DataValidationException("Device with such name already exists!"); } } @@ -216,7 +217,7 @@ public class DeviceServiceImpl implements DeviceService { if (device.getTenantId() == null) { throw new DataValidationException("Device should be assigned to tenant!"); } else { - TenantEntity tenant = tenantDao.findById(device.getTenantId().getId()); + Tenant tenant = tenantDao.findById(device.getTenantId().getId()); if (tenant == null) { throw new DataValidationException("Device is referencing to non-existent tenant!"); } @@ -224,32 +225,32 @@ public class DeviceServiceImpl implements DeviceService { if (device.getCustomerId() == null) { device.setCustomerId(new CustomerId(NULL_UUID)); } else if (!device.getCustomerId().getId().equals(NULL_UUID)) { - CustomerEntity customer = customerDao.findById(device.getCustomerId().getId()); + Customer customer = customerDao.findById(device.getCustomerId().getId()); if (customer == null) { throw new DataValidationException("Can't assign device to non-existent customer!"); } - if (!customer.getTenantId().equals(device.getTenantId().getId())) { + if (!customer.getTenantId().getId().equals(device.getTenantId().getId())) { throw new DataValidationException("Can't assign device to customer from different tenant!"); } } } }; - private PaginatedRemover tenantDevicesRemover = - new PaginatedRemover() { + private PaginatedRemover tenantDevicesRemover = + new PaginatedRemover() { @Override - protected List findEntities(TenantId id, TextPageLink pageLink) { + protected List findEntities(TenantId id, TextPageLink pageLink) { return deviceDao.findDevicesByTenantId(id.getId(), pageLink); } @Override - protected void removeEntity(DeviceEntity entity) { - deleteDevice(new DeviceId(entity.getId())); + protected void removeEntity(Device entity) { + deleteDevice(new DeviceId(entity.getUuidId())); } }; - class CustomerDevicesUnassigner extends PaginatedRemover { + private class CustomerDevicesUnassigner extends PaginatedRemover { private TenantId tenantId; @@ -258,13 +259,13 @@ public class DeviceServiceImpl implements DeviceService { } @Override - protected List findEntities(CustomerId id, TextPageLink pageLink) { + protected List findEntities(CustomerId id, TextPageLink pageLink) { return deviceDao.findDevicesByTenantIdAndCustomerId(tenantId.getId(), id.getId(), pageLink); } @Override - protected void removeEntity(DeviceEntity entity) { - unassignDeviceFromCustomer(new DeviceId(entity.getId())); + protected void removeEntity(Device entity) { + unassignDeviceFromCustomer(new DeviceId(entity.getUuidId())); } } diff --git a/dao/src/main/java/org/thingsboard/server/dao/event/CassandraBaseEventDao.java b/dao/src/main/java/org/thingsboard/server/dao/event/CassandraBaseEventDao.java index adfef10539..1bdf452647 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/event/CassandraBaseEventDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/event/CassandraBaseEventDao.java @@ -25,7 +25,7 @@ import org.springframework.stereotype.Component; 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.CassandraAbstractSearchTimeDao; import org.thingsboard.server.dao.DaoUtil; import org.thingsboard.server.dao.model.EventEntity; import org.thingsboard.server.dao.model.ModelConstants; @@ -41,7 +41,7 @@ import static org.thingsboard.server.dao.model.ModelConstants.*; @Component @Slf4j -public class CassandraBaseEventDao extends AbstractSearchTimeDao implements EventDao { +public class CassandraBaseEventDao extends CassandraAbstractSearchTimeDao implements EventDao { @Override protected Class getColumnFamilyClass() { diff --git a/dao/src/main/java/org/thingsboard/server/dao/exception/DatabaseException.java b/dao/src/main/java/org/thingsboard/server/dao/exception/DatabaseException.java index bb5586d63d..aa322f6505 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/exception/DatabaseException.java +++ b/dao/src/main/java/org/thingsboard/server/dao/exception/DatabaseException.java @@ -17,22 +17,22 @@ package org.thingsboard.server.dao.exception; public class DatabaseException extends RuntimeException { - private static final long serialVersionUID = 3463762014441887103L; + private static final long serialVersionUID = 3463762014441887103L; - public DatabaseException() { - super(); - } + public DatabaseException() { + super(); + } - public DatabaseException(String message, Throwable cause) { - super(message, cause); - } + public DatabaseException(String message, Throwable cause) { + super(message, cause); + } - public DatabaseException(String message) { - super(message); - } + public DatabaseException(String message) { + super(message); + } - public DatabaseException(Throwable cause) { - super(cause); - } + public DatabaseException(Throwable cause) { + super(cause); + } } diff --git a/dao/src/main/java/org/thingsboard/server/dao/exception/IncorrectParameterException.java b/dao/src/main/java/org/thingsboard/server/dao/exception/IncorrectParameterException.java index 3d6450ff2b..6600dc8213 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/exception/IncorrectParameterException.java +++ b/dao/src/main/java/org/thingsboard/server/dao/exception/IncorrectParameterException.java @@ -18,9 +18,9 @@ package org.thingsboard.server.dao.exception; public class IncorrectParameterException extends RuntimeException { - private static final long serialVersionUID = 601995650578985289L; + private static final long serialVersionUID = 601995650578985289L; - public IncorrectParameterException(String message) { + public IncorrectParameterException(String message) { super(message); } 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 98c7fd9fc2..8bdefd967b 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. diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/DeviceCredentialsCacheTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/DeviceCredentialsCacheTest.java index 6dfa3bbd14..3ccdea31aa 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/DeviceCredentialsCacheTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/DeviceCredentialsCacheTest.java @@ -36,11 +36,13 @@ import org.thingsboard.server.common.data.security.DeviceCredentialsType; import org.thingsboard.server.dao.device.DeviceCredentialsDao; import org.thingsboard.server.dao.device.DeviceCredentialsService; import org.thingsboard.server.dao.device.DeviceService; -import org.thingsboard.server.dao.model.DeviceCredentialsEntity; import java.util.UUID; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; @TestPropertySource(properties = {"cache.enabled = true"}) public class DeviceCredentialsCacheTest extends AbstractServiceTest { @@ -140,9 +142,8 @@ public class DeviceCredentialsCacheTest extends AbstractServiceTest { return null; } - private DeviceCredentialsEntity createDummyDeviceCredentialsEntity(String deviceCredentialsId) { - DeviceCredentialsEntity result = new DeviceCredentialsEntity(); - result.setId(UUIDs.timeBased()); + private DeviceCredentials createDummyDeviceCredentialsEntity(String deviceCredentialsId) { + DeviceCredentials result = new DeviceCredentials(new DeviceCredentialsId(UUIDs.timeBased())); result.setCredentialsId(deviceCredentialsId); return result; } From 2965e312610424f2fd033f859f774be59e3cafbd Mon Sep 17 00:00:00 2001 From: volodymyr-babak Date: Tue, 11 Apr 2017 11:02:57 +0300 Subject: [PATCH 3/4] Removed cassandra dependencies from services --- .../plugin/PluginProcessingContext.java | 27 ++++++++---------- .../controller/DashboardControllerTest.java | 1 - .../controller/DeviceControllerTest.java | 1 - .../server/dao/attributes/AttributesDao.java | 3 -- .../dao/attributes/AttributesService.java | 2 -- .../dao/attributes/BaseAttributesService.java | 3 -- .../server/dao/event/BaseEventService.java | 28 ++----------------- .../dao/event/CassandraBaseEventDao.java | 22 +++++++++++++++ .../dao/timeseries/BaseTimeseriesService.java | 4 --- .../server/dao/timeseries/TimeseriesDao.java | 3 -- .../dao/timeseries/TimeseriesService.java | 4 --- .../attributes/BaseAttributesServiceTest.java | 1 - .../dao/event/BaseEventServiceTest.java | 3 -- .../dao/plugin/BasePluginServiceTest.java | 13 +++------ .../server/dao/rule/BaseRuleServiceTest.java | 1 - .../dao/service/AbstractServiceTest.java | 1 - .../dao/service/CustomerServiceImplTest.java | 14 ++++------ .../dao/service/DashboardServiceImplTest.java | 1 - .../service/DeviceCredentialsCacheTest.java | 6 +--- .../DeviceCredentialsServiceImplTest.java | 1 - .../dao/service/DeviceServiceImplTest.java | 3 -- .../service/WidgetTypeServiceImplTest.java | 2 -- .../service/WidgetsBundleServiceImplTest.java | 1 - .../dao/timeseries/TimeseriesServiceTest.java | 11 ++------ 24 files changed, 48 insertions(+), 108 deletions(-) diff --git a/application/src/main/java/org/thingsboard/server/actors/plugin/PluginProcessingContext.java b/application/src/main/java/org/thingsboard/server/actors/plugin/PluginProcessingContext.java index 876b52535b..ed75b10bc7 100644 --- a/application/src/main/java/org/thingsboard/server/actors/plugin/PluginProcessingContext.java +++ b/application/src/main/java/org/thingsboard/server/actors/plugin/PluginProcessingContext.java @@ -15,16 +15,7 @@ */ package org.thingsboard.server.actors.plugin; -import java.io.IOException; -import java.util.*; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.Executor; -import java.util.concurrent.Executors; -import java.util.stream.Collectors; - -import com.datastax.driver.core.ResultSet; -import com.datastax.driver.core.ResultSetFuture; -import com.datastax.driver.core.Row; +import akka.actor.ActorRef; import com.google.common.base.Function; import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.Futures; @@ -32,18 +23,20 @@ import com.google.common.util.concurrent.ListenableFuture; import lombok.extern.slf4j.Slf4j; import org.thingsboard.server.common.data.DataConstants; import org.thingsboard.server.common.data.Device; -import org.thingsboard.server.common.data.id.*; +import org.thingsboard.server.common.data.id.CustomerId; +import org.thingsboard.server.common.data.id.DeviceId; +import org.thingsboard.server.common.data.id.PluginId; +import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.kv.AttributeKey; import org.thingsboard.server.common.data.kv.AttributeKvEntry; import org.thingsboard.server.common.data.kv.TsKvEntry; import org.thingsboard.server.common.data.kv.TsKvQuery; -import org.thingsboard.server.common.data.page.TextPageData; import org.thingsboard.server.common.data.page.TextPageLink; import org.thingsboard.server.common.msg.cluster.ServerAddress; import org.thingsboard.server.extensions.api.device.DeviceAttributesEventNotificationMsg; import org.thingsboard.server.extensions.api.plugins.PluginApiCallSecurityContext; -import org.thingsboard.server.extensions.api.plugins.PluginContext; import org.thingsboard.server.extensions.api.plugins.PluginCallback; +import org.thingsboard.server.extensions.api.plugins.PluginContext; import org.thingsboard.server.extensions.api.plugins.msg.PluginToRuleMsg; import org.thingsboard.server.extensions.api.plugins.msg.TimeoutMsg; import org.thingsboard.server.extensions.api.plugins.msg.ToDeviceRpcRequest; @@ -52,10 +45,12 @@ import org.thingsboard.server.extensions.api.plugins.rpc.RpcMsg; import org.thingsboard.server.extensions.api.plugins.ws.PluginWebsocketSessionRef; import org.thingsboard.server.extensions.api.plugins.ws.msg.PluginWebsocketMsg; -import akka.actor.ActorRef; -import org.w3c.dom.Attr; - import javax.annotation.Nullable; +import java.io.IOException; +import java.util.*; +import java.util.concurrent.Executor; +import java.util.concurrent.Executors; +import java.util.stream.Collectors; @Slf4j public final class PluginProcessingContext implements PluginContext { diff --git a/application/src/test/java/org/thingsboard/server/controller/DashboardControllerTest.java b/application/src/test/java/org/thingsboard/server/controller/DashboardControllerTest.java index e6eb243db2..329b42d152 100644 --- a/application/src/test/java/org/thingsboard/server/controller/DashboardControllerTest.java +++ b/application/src/test/java/org/thingsboard/server/controller/DashboardControllerTest.java @@ -35,7 +35,6 @@ import org.junit.Assert; import org.junit.Before; import org.junit.Test; -import com.datastax.driver.core.utils.UUIDs; import com.fasterxml.jackson.core.type.TypeReference; public class DashboardControllerTest extends AbstractControllerTest { diff --git a/application/src/test/java/org/thingsboard/server/controller/DeviceControllerTest.java b/application/src/test/java/org/thingsboard/server/controller/DeviceControllerTest.java index 69bb761c97..0f2fa12135 100644 --- a/application/src/test/java/org/thingsboard/server/controller/DeviceControllerTest.java +++ b/application/src/test/java/org/thingsboard/server/controller/DeviceControllerTest.java @@ -42,7 +42,6 @@ import org.junit.Assert; import org.junit.Before; import org.junit.Test; -import com.datastax.driver.core.utils.UUIDs; import com.fasterxml.jackson.core.type.TypeReference; public class DeviceControllerTest extends AbstractControllerTest { 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 3fb8ee2ffc..6696f39556 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,9 +15,6 @@ */ 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.EntityId; import org.thingsboard.server.common.data.kv.AttributeKvEntry; 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 ccca460917..222ffa3b1a 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,8 +15,6 @@ */ package org.thingsboard.server.dao.attributes; -// CASSANDRA ??? -import com.datastax.driver.core.ResultSet; import com.google.common.util.concurrent.ListenableFuture; import org.thingsboard.server.common.data.id.EntityId; import org.thingsboard.server.common.data.kv.AttributeKvEntry; 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 6fd734a191..5ed231bd9f 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,9 +15,6 @@ */ 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; 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 65fc5679f1..c5c4e478d8 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,15 +15,12 @@ */ 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; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.thingsboard.server.common.data.Event; import org.thingsboard.server.common.data.id.EntityId; -import org.thingsboard.server.common.data.id.EventId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.TimePageData; import org.thingsboard.server.common.data.page.TimePageLink; @@ -33,30 +30,16 @@ import org.thingsboard.server.dao.service.DataValidator; import java.util.List; import java.util.Optional; -import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID; - @Service @Slf4j public class BaseEventService implements EventService { - private final TenantId systemTenantId = new TenantId(NULL_UUID); - @Autowired public EventDao eventDao; @Override public Event save(Event event) { eventValidator.validate(event); - if (event.getTenantId() == null) { - log.trace("Save system event with predefined id {}", systemTenantId); - event.setTenantId(systemTenantId); - } - if (event.getId() == null) { - event.setId(new EventId(UUIDs.timeBased())); - } - if (StringUtils.isEmpty(event.getUid())) { - event.setUid(event.getId().toString()); - } return eventDao.save(event); } @@ -66,13 +49,6 @@ public class BaseEventService implements EventService { if (StringUtils.isEmpty(event.getUid())) { throw new DataValidationException("Event uid should be specified!."); } - if (event.getTenantId() == null) { - log.trace("Save system event with predefined id {}", systemTenantId); - event.setTenantId(systemTenantId); - } - if (event.getId() == null) { - event.setId(new EventId(UUIDs.timeBased())); - } Optional result = eventDao.saveIfNotExists(event); return result.isPresent() ? Optional.of(result.get()) : Optional.empty(); } @@ -98,13 +74,13 @@ public class BaseEventService implements EventService { @Override public TimePageData findEvents(TenantId tenantId, EntityId entityId, TimePageLink pageLink) { List events = eventDao.findEvents(tenantId.getId(), entityId, pageLink); - return new TimePageData(events, pageLink); + return new TimePageData<>(events, pageLink); } @Override public TimePageData findEvents(TenantId tenantId, EntityId entityId, String eventType, TimePageLink pageLink) { List events = eventDao.findEvents(tenantId.getId(), entityId, eventType, pageLink); - return new TimePageData(events, pageLink); + return new TimePageData<>(events, pageLink); } private DataValidator eventValidator = diff --git a/dao/src/main/java/org/thingsboard/server/dao/event/CassandraBaseEventDao.java b/dao/src/main/java/org/thingsboard/server/dao/event/CassandraBaseEventDao.java index 1bdf452647..73b9096fd8 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/event/CassandraBaseEventDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/event/CassandraBaseEventDao.java @@ -21,9 +21,12 @@ import com.datastax.driver.core.querybuilder.QueryBuilder; import com.datastax.driver.core.querybuilder.Select; import com.datastax.driver.core.utils.UUIDs; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Component; import org.thingsboard.server.common.data.Event; import org.thingsboard.server.common.data.id.EntityId; +import org.thingsboard.server.common.data.id.EventId; +import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.TimePageLink; import org.thingsboard.server.dao.CassandraAbstractSearchTimeDao; import org.thingsboard.server.dao.DaoUtil; @@ -43,6 +46,8 @@ import static org.thingsboard.server.dao.model.ModelConstants.*; @Slf4j public class CassandraBaseEventDao extends CassandraAbstractSearchTimeDao implements EventDao { + private final TenantId systemTenantId = new TenantId(NULL_UUID); + @Override protected Class getColumnFamilyClass() { return EventEntity.class; @@ -56,11 +61,28 @@ public class CassandraBaseEventDao extends CassandraAbstractSearchTimeDao saveIfNotExists(Event event) { + if (event.getTenantId() == null) { + log.trace("Save system event with predefined id {}", systemTenantId); + event.setTenantId(systemTenantId); + } + if (event.getId() == null) { + event.setId(new EventId(UUIDs.timeBased())); + } return save(new EventEntity(event), true); } 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 71102b1a8c..d58815f955 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,10 +15,6 @@ */ 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.collect.Lists; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; 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 afa5c953a1..733200d976 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,9 +15,6 @@ */ 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; 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/timeseries/TimeseriesService.java b/dao/src/main/java/org/thingsboard/server/dao/timeseries/TimeseriesService.java index 28ed5ddd89..b2bf2e02dc 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,10 +15,6 @@ */ 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.UUIDBased; import org.thingsboard.server.common.data.kv.TsKvEntry; diff --git a/dao/src/test/java/org/thingsboard/server/dao/attributes/BaseAttributesServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/attributes/BaseAttributesServiceTest.java index 559a3130e8..a9835cbe45 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/attributes/BaseAttributesServiceTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/attributes/BaseAttributesServiceTest.java @@ -15,7 +15,6 @@ */ package org.thingsboard.server.dao.attributes; -import com.datastax.driver.core.utils.UUIDs; import org.thingsboard.server.common.data.DataConstants; import org.thingsboard.server.common.data.id.DeviceId; import org.thingsboard.server.common.data.kv.AttributeKvEntry; diff --git a/dao/src/test/java/org/thingsboard/server/dao/event/BaseEventServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/event/BaseEventServiceTest.java index bdabcf48d4..b185d2c3ce 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/event/BaseEventServiceTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/event/BaseEventServiceTest.java @@ -15,8 +15,6 @@ */ package org.thingsboard.server.dao.event; -import com.datastax.driver.core.utils.UUIDs; -import org.apache.cassandra.utils.UUIDGen; import org.junit.Assert; import org.junit.Test; import org.thingsboard.server.common.data.DataConstants; @@ -34,7 +32,6 @@ import java.io.IOException; import java.time.LocalDateTime; import java.time.Month; import java.time.ZoneOffset; -import java.util.List; import java.util.Optional; public class BaseEventServiceTest extends AbstractServiceTest { diff --git a/dao/src/test/java/org/thingsboard/server/dao/plugin/BasePluginServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/plugin/BasePluginServiceTest.java index 4367c87e9f..644e2214c8 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/plugin/BasePluginServiceTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/plugin/BasePluginServiceTest.java @@ -15,22 +15,17 @@ */ package org.thingsboard.server.dao.plugin; -import java.util.UUID; - import lombok.extern.slf4j.Slf4j; +import org.junit.Assert; +import org.junit.Test; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.TextPageData; import org.thingsboard.server.common.data.page.TextPageLink; import org.thingsboard.server.common.data.plugin.PluginMetaData; -import org.thingsboard.server.common.data.rule.RuleMetaData; +import org.thingsboard.server.dao.model.ModelConstants; import org.thingsboard.server.dao.service.AbstractServiceTest; -import org.junit.Assert; -import org.junit.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import com.datastax.driver.core.utils.UUIDs; -import org.thingsboard.server.dao.model.ModelConstants; +import java.util.UUID; @Slf4j public class BasePluginServiceTest extends AbstractServiceTest { diff --git a/dao/src/test/java/org/thingsboard/server/dao/rule/BaseRuleServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/rule/BaseRuleServiceTest.java index f62f26c2fb..fe40b84edf 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/rule/BaseRuleServiceTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/rule/BaseRuleServiceTest.java @@ -15,7 +15,6 @@ */ package org.thingsboard.server.dao.rule; -import com.datastax.driver.core.utils.UUIDs; import org.junit.Assert; import org.junit.Test; import org.thingsboard.server.common.data.id.TenantId; diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/AbstractServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/AbstractServiceTest.java index f66e6eee69..01de94f365 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/AbstractServiceTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/AbstractServiceTest.java @@ -15,7 +15,6 @@ */ package org.thingsboard.server.dao.service; -import com.datastax.driver.core.utils.UUIDs; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/CustomerServiceImplTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/CustomerServiceImplTest.java index fd0b20f1ad..67ff8b0fa3 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/CustomerServiceImplTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/CustomerServiceImplTest.java @@ -15,23 +15,21 @@ */ package org.thingsboard.server.dao.service; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - import org.apache.commons.lang3.RandomStringUtils; import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; import org.thingsboard.server.common.data.Customer; import org.thingsboard.server.common.data.Tenant; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.TextPageData; import org.thingsboard.server.common.data.page.TextPageLink; import org.thingsboard.server.dao.exception.DataValidationException; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; -import com.datastax.driver.core.utils.UUIDs; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; public class CustomerServiceImplTest extends AbstractServiceTest { diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/DashboardServiceImplTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/DashboardServiceImplTest.java index 949198c553..95f9430b2d 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/DashboardServiceImplTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/DashboardServiceImplTest.java @@ -15,7 +15,6 @@ */ package org.thingsboard.server.dao.service; -import com.datastax.driver.core.utils.UUIDs; import org.apache.commons.lang3.RandomStringUtils; import org.junit.After; import org.junit.Assert; diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/DeviceCredentialsCacheTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/DeviceCredentialsCacheTest.java index 3ccdea31aa..f9068ed0d5 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/DeviceCredentialsCacheTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/DeviceCredentialsCacheTest.java @@ -15,7 +15,6 @@ */ package org.thingsboard.server.dao.service; -import com.datastax.driver.core.utils.UUIDs; import com.hazelcast.core.HazelcastInstance; import org.apache.commons.lang3.RandomStringUtils; import org.junit.After; @@ -39,10 +38,7 @@ import org.thingsboard.server.dao.device.DeviceService; import java.util.UUID; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; +import static org.mockito.Mockito.*; @TestPropertySource(properties = {"cache.enabled = true"}) public class DeviceCredentialsCacheTest extends AbstractServiceTest { diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/DeviceCredentialsServiceImplTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/DeviceCredentialsServiceImplTest.java index efdab8a08a..c31fd2babc 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/DeviceCredentialsServiceImplTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/DeviceCredentialsServiceImplTest.java @@ -15,7 +15,6 @@ */ package org.thingsboard.server.dao.service; -import com.datastax.driver.core.utils.UUIDs; import org.apache.commons.lang3.RandomStringUtils; import org.junit.After; import org.junit.Assert; diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/DeviceServiceImplTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/DeviceServiceImplTest.java index e9113d447b..8126bfaa83 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/DeviceServiceImplTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/DeviceServiceImplTest.java @@ -15,7 +15,6 @@ */ package org.thingsboard.server.dao.service; -import com.datastax.driver.core.utils.UUIDs; import org.apache.commons.lang3.RandomStringUtils; import org.junit.After; import org.junit.Assert; @@ -25,8 +24,6 @@ import org.thingsboard.server.common.data.Customer; import org.thingsboard.server.common.data.Device; import org.thingsboard.server.common.data.Tenant; import org.thingsboard.server.common.data.id.CustomerId; -import org.thingsboard.server.common.data.id.DeviceCredentialsId; -import org.thingsboard.server.common.data.id.DeviceId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.TextPageData; import org.thingsboard.server.common.data.page.TextPageLink; diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/WidgetTypeServiceImplTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/WidgetTypeServiceImplTest.java index cf3fd4bc2b..9c5fb64313 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/WidgetTypeServiceImplTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/WidgetTypeServiceImplTest.java @@ -15,7 +15,6 @@ */ package org.thingsboard.server.dao.service; -import com.datastax.driver.core.utils.UUIDs; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.After; @@ -23,7 +22,6 @@ import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.thingsboard.server.common.data.Tenant; -import org.thingsboard.server.common.data.User; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.widget.WidgetType; import org.thingsboard.server.common.data.widget.WidgetsBundle; diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/WidgetsBundleServiceImplTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/WidgetsBundleServiceImplTest.java index 6345567832..f7794626c3 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/WidgetsBundleServiceImplTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/WidgetsBundleServiceImplTest.java @@ -15,7 +15,6 @@ */ package org.thingsboard.server.dao.service; -import com.datastax.driver.core.utils.UUIDs; import org.junit.After; import org.junit.Assert; import org.junit.Before; diff --git a/dao/src/test/java/org/thingsboard/server/dao/timeseries/TimeseriesServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/timeseries/TimeseriesServiceTest.java index 134f4710c7..49b77c2b32 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/timeseries/TimeseriesServiceTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/timeseries/TimeseriesServiceTest.java @@ -15,21 +15,14 @@ */ package org.thingsboard.server.dao.timeseries; -import com.datastax.driver.core.ResultSet; -import com.datastax.driver.core.ResultSetFuture; -import com.datastax.driver.core.utils.UUIDs; import lombok.extern.slf4j.Slf4j; import org.junit.Assert; +import org.junit.Test; import org.thingsboard.server.common.data.DataConstants; import org.thingsboard.server.common.data.id.DeviceId; -import org.thingsboard.server.dao.service.AbstractServiceTest; -import org.junit.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.thingsboard.server.common.data.kv.*; +import org.thingsboard.server.dao.service.AbstractServiceTest; -import java.time.LocalDateTime; -import java.time.ZoneOffset; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; From bf7c03d49037a11763307df231272c7dd27d9d72 Mon Sep 17 00:00:00 2001 From: Valerii Sosliuk Date: Tue, 11 Apr 2017 22:09:52 -0400 Subject: [PATCH 4/4] Added JPA Entity classes and someJPA Dao-related classes --- .../server/controller/BaseController.java | 2 - .../server/controller/DeviceController.java | 3 - .../server/controller/PluginController.java | 1 - .../src/main/resources/thingsboard.yml | 12 + dao/pom.xml | 4 + .../server/dao/CassandraAbstractModelDao.java | 1 - .../thingsboard/server/dao/JpaDaoConfig.java | 42 +++ .../CassandraBaseComponentDescriptorDao.java | 2 +- .../dao/customer/CassandraCustomerDao.java | 2 +- .../dao/dashboard/CassandraDashboardDao.java | 2 +- .../dashboard/CassandraDashboardInfoDao.java | 2 +- .../device/CassandraDeviceCredentialsDao.java | 2 +- .../server/dao/device/CassandraDeviceDao.java | 2 +- .../server/dao/device/DeviceServiceImpl.java | 5 - .../dao/event/CassandraBaseEventDao.java | 2 +- .../{ => nosql}/AdminSettingsEntity.java | 3 +- .../ComponentDescriptorEntity.java | 4 +- .../dao/model/{ => nosql}/CustomerEntity.java | 47 +-- .../model/{ => nosql}/DashboardEntity.java | 4 +- .../{ => nosql}/DashboardInfoEntity.java | 7 +- .../{ => nosql}/DeviceCredentialsEntity.java | 4 +- .../dao/model/{ => nosql}/DeviceEntity.java | 20 +- .../dao/model/{ => nosql}/EventEntity.java | 22 +- .../{ => nosql}/PluginMetaDataEntity.java | 17 +- .../model/{ => nosql}/RuleMetaDataEntity.java | 31 +- .../dao/model/{ => nosql}/TenantEntity.java | 47 +-- .../{ => nosql}/UserCredentialsEntity.java | 26 +- .../dao/model/{ => nosql}/UserEntity.java | 35 +- .../model/{ => nosql}/WidgetTypeEntity.java | 4 +- .../{ => nosql}/WidgetsBundleEntity.java | 4 +- .../dao/model/sql/AdminSettingsEntity.java | 145 ++++++++ .../model/sql/ComponentDescriptorEntity.java | 164 ++++++++ .../server/dao/model/sql/CustomerEntity.java | 351 ++++++++++++++++++ .../server/dao/model/sql/DashboardEntity.java | 221 +++++++++++ .../dao/model/sql/DashboardInfoEntity.java | 199 ++++++++++ .../model/sql/DeviceCredentialsEntity.java | 187 ++++++++++ .../server/dao/model/sql/DeviceEntity.java | 213 +++++++++++ .../server/dao/model/sql/EventEntity.java | 119 ++++++ .../dao/model/sql/PluginMetaDataEntity.java | 216 +++++++++++ .../dao/model/sql/RuleMetaDataEntity.java | 228 ++++++++++++ .../server/dao/model/sql/TenantEntity.java | 351 ++++++++++++++++++ .../dao/model/sql/UserCredentialsEntity.java | 189 ++++++++++ .../server/dao/model/sql/UserEntity.java | 274 ++++++++++++++ .../dao/model/sql/WidgetTypeEntity.java | 183 +++++++++ .../dao/model/sql/WidgetsBundleEntity.java | 190 ++++++++++ .../dao/plugin/CassandraBasePluginDao.java | 2 +- .../server/dao/rule/CassandraBaseRuleDao.java | 2 +- .../settings/CassandraAdminSettingsDao.java | 2 +- .../server/dao/sql/JpaAbstractDao.java | 90 +++++ .../server/dao/sql/user/JpaRepository.java | 31 ++ .../server/dao/sql/user/JpaUserDao.java | 52 +++ .../server/dao/sql/user/UserRepository.java | 26 ++ .../server/dao/tenant/CassandraTenantDao.java | 2 +- .../dao/user/CassandraUserCredentialsDao.java | 2 +- .../server/dao/user/CassandraUserDao.java | 2 +- .../dao/widget/CassandraWidgetTypeDao.java | 2 +- .../dao/widget/CassandraWidgetsBundleDao.java | 2 +- .../dao/plugin/BasePluginServiceTest.java | 2 + pom.xml | 5 + 59 files changed, 3631 insertions(+), 180 deletions(-) create mode 100644 dao/src/main/java/org/thingsboard/server/dao/JpaDaoConfig.java rename dao/src/main/java/org/thingsboard/server/dao/model/{ => nosql}/AdminSettingsEntity.java (97%) rename dao/src/main/java/org/thingsboard/server/dao/model/{ => nosql}/ComponentDescriptorEntity.java (96%) rename dao/src/main/java/org/thingsboard/server/dao/model/{ => nosql}/CustomerEntity.java (84%) rename dao/src/main/java/org/thingsboard/server/dao/model/{ => nosql}/DashboardEntity.java (97%) rename dao/src/main/java/org/thingsboard/server/dao/model/{ => nosql}/DashboardInfoEntity.java (96%) rename dao/src/main/java/org/thingsboard/server/dao/model/{ => nosql}/DeviceCredentialsEntity.java (97%) rename dao/src/main/java/org/thingsboard/server/dao/model/{ => nosql}/DeviceEntity.java (90%) rename dao/src/main/java/org/thingsboard/server/dao/model/{ => nosql}/EventEntity.java (83%) rename dao/src/main/java/org/thingsboard/server/dao/model/{ => nosql}/PluginMetaDataEntity.java (91%) rename dao/src/main/java/org/thingsboard/server/dao/model/{ => nosql}/RuleMetaDataEntity.java (86%) rename dao/src/main/java/org/thingsboard/server/dao/model/{ => nosql}/TenantEntity.java (84%) rename dao/src/main/java/org/thingsboard/server/dao/model/{ => nosql}/UserCredentialsEntity.java (83%) rename dao/src/main/java/org/thingsboard/server/dao/model/{ => nosql}/UserEntity.java (84%) rename dao/src/main/java/org/thingsboard/server/dao/model/{ => nosql}/WidgetTypeEntity.java (97%) rename dao/src/main/java/org/thingsboard/server/dao/model/{ => nosql}/WidgetsBundleEntity.java (97%) create mode 100644 dao/src/main/java/org/thingsboard/server/dao/model/sql/AdminSettingsEntity.java create mode 100644 dao/src/main/java/org/thingsboard/server/dao/model/sql/ComponentDescriptorEntity.java create mode 100644 dao/src/main/java/org/thingsboard/server/dao/model/sql/CustomerEntity.java create mode 100644 dao/src/main/java/org/thingsboard/server/dao/model/sql/DashboardEntity.java create mode 100644 dao/src/main/java/org/thingsboard/server/dao/model/sql/DashboardInfoEntity.java create mode 100644 dao/src/main/java/org/thingsboard/server/dao/model/sql/DeviceCredentialsEntity.java create mode 100644 dao/src/main/java/org/thingsboard/server/dao/model/sql/DeviceEntity.java create mode 100644 dao/src/main/java/org/thingsboard/server/dao/model/sql/EventEntity.java create mode 100644 dao/src/main/java/org/thingsboard/server/dao/model/sql/PluginMetaDataEntity.java create mode 100644 dao/src/main/java/org/thingsboard/server/dao/model/sql/RuleMetaDataEntity.java create mode 100644 dao/src/main/java/org/thingsboard/server/dao/model/sql/TenantEntity.java create mode 100644 dao/src/main/java/org/thingsboard/server/dao/model/sql/UserCredentialsEntity.java create mode 100644 dao/src/main/java/org/thingsboard/server/dao/model/sql/UserEntity.java create mode 100644 dao/src/main/java/org/thingsboard/server/dao/model/sql/WidgetTypeEntity.java create mode 100644 dao/src/main/java/org/thingsboard/server/dao/model/sql/WidgetsBundleEntity.java create mode 100644 dao/src/main/java/org/thingsboard/server/dao/sql/JpaAbstractDao.java create mode 100644 dao/src/main/java/org/thingsboard/server/dao/sql/user/JpaRepository.java create mode 100644 dao/src/main/java/org/thingsboard/server/dao/sql/user/JpaUserDao.java create mode 100644 dao/src/main/java/org/thingsboard/server/dao/sql/user/UserRepository.java diff --git a/application/src/main/java/org/thingsboard/server/controller/BaseController.java b/application/src/main/java/org/thingsboard/server/controller/BaseController.java index 1b6696fd68..034206f73e 100644 --- a/application/src/main/java/org/thingsboard/server/controller/BaseController.java +++ b/application/src/main/java/org/thingsboard/server/controller/BaseController.java @@ -15,8 +15,6 @@ */ package org.thingsboard.server.controller; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; diff --git a/application/src/main/java/org/thingsboard/server/controller/DeviceController.java b/application/src/main/java/org/thingsboard/server/controller/DeviceController.java index b08a9640a7..3df1baef36 100644 --- a/application/src/main/java/org/thingsboard/server/controller/DeviceController.java +++ b/application/src/main/java/org/thingsboard/server/controller/DeviceController.java @@ -23,19 +23,16 @@ import org.thingsboard.server.common.data.Device; import org.thingsboard.server.common.data.id.CustomerId; import org.thingsboard.server.common.data.id.DeviceId; import org.thingsboard.server.common.data.id.TenantId; -import org.thingsboard.server.common.data.id.UUIDBased; import org.thingsboard.server.common.data.page.TextPageData; import org.thingsboard.server.common.data.page.TextPageLink; import org.thingsboard.server.common.data.security.DeviceCredentials; import org.thingsboard.server.dao.exception.IncorrectParameterException; import org.thingsboard.server.dao.model.ModelConstants; import org.thingsboard.server.exception.ThingsboardException; -import org.thingsboard.server.extensions.api.device.DeviceCredentialsUpdateNotificationMsg; import org.thingsboard.server.service.security.model.SecurityUser; import java.util.ArrayList; import java.util.List; -import java.util.UUID; @RestController @RequestMapping("/api") diff --git a/application/src/main/java/org/thingsboard/server/controller/PluginController.java b/application/src/main/java/org/thingsboard/server/controller/PluginController.java index 513266400e..5dd14ccf15 100644 --- a/application/src/main/java/org/thingsboard/server/controller/PluginController.java +++ b/application/src/main/java/org/thingsboard/server/controller/PluginController.java @@ -25,7 +25,6 @@ import org.thingsboard.server.common.data.page.TextPageLink; import org.thingsboard.server.common.data.plugin.ComponentLifecycleEvent; import org.thingsboard.server.common.data.plugin.PluginMetaData; import org.thingsboard.server.common.data.security.Authority; -import org.thingsboard.server.common.data.widget.WidgetsBundle; import org.thingsboard.server.dao.model.ModelConstants; import org.thingsboard.server.exception.ThingsboardException; diff --git a/application/src/main/resources/thingsboard.yml b/application/src/main/resources/thingsboard.yml index 778406aadf..8766e5711e 100644 --- a/application/src/main/resources/thingsboard.yml +++ b/application/src/main/resources/thingsboard.yml @@ -188,3 +188,15 @@ cache: updates: # Enable/disable updates checking. enabled: "${UPDATES_ENABLED:true}" + +cassandra: + enabled: "${CASSANDRA_ENABLED:true}" + +# SQL DAO Configuration + +sql: + enabled: "${SQL_ENABLED:false}" + datasource: + url: "${SQL_DATASOURCE_URL:jdbc:postgresql://localhost:5432/thingsboard}" + username: "${SQL_DATASOURCE_USERNAME:postgres}" + password: "${SQL_DATASOURCE_PASSWORD:postgres}" diff --git a/dao/pom.xml b/dao/pom.xml index 146b8c197e..977be95f95 100644 --- a/dao/pom.xml +++ b/dao/pom.xml @@ -150,6 +150,10 @@ org.bouncycastle bcprov-jdk15on + + org.springframework.boot + spring-boot-starter-data-jpa + diff --git a/dao/src/main/java/org/thingsboard/server/dao/CassandraAbstractModelDao.java b/dao/src/main/java/org/thingsboard/server/dao/CassandraAbstractModelDao.java index ee9d5e0e28..99c82a0cf6 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/CassandraAbstractModelDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/CassandraAbstractModelDao.java @@ -27,7 +27,6 @@ import com.google.common.base.Function; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import lombok.extern.slf4j.Slf4j; -import org.thingsboard.server.common.data.SearchTextBased; import org.thingsboard.server.dao.model.BaseEntity; import org.thingsboard.server.dao.model.ModelConstants; import org.thingsboard.server.dao.model.SearchTextEntity; diff --git a/dao/src/main/java/org/thingsboard/server/dao/JpaDaoConfig.java b/dao/src/main/java/org/thingsboard/server/dao/JpaDaoConfig.java new file mode 100644 index 0000000000..167518a6b7 --- /dev/null +++ b/dao/src/main/java/org/thingsboard/server/dao/JpaDaoConfig.java @@ -0,0 +1,42 @@ +/** + * 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; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder; +import org.springframework.context.annotation.Configuration; + +import javax.sql.DataSource; + +/** + * @author Valerii Sosliuk + */ +@Configuration +@ConditionalOnProperty(prefix="sql", value="enabled",havingValue = "true", matchIfMissing = false) +public class JpaDaoConfig { + + @Value("sql.datasource.url") + private String url; + @Value("sql.datasource.username") + private String username; + @Value("sql.datasource.password") + private String password; + + public DataSource dataSource() { + return DataSourceBuilder.create().url(url).username(username).password(password).build(); + } +} diff --git a/dao/src/main/java/org/thingsboard/server/dao/component/CassandraBaseComponentDescriptorDao.java b/dao/src/main/java/org/thingsboard/server/dao/component/CassandraBaseComponentDescriptorDao.java index 62eb957d16..0426a3372a 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/component/CassandraBaseComponentDescriptorDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/component/CassandraBaseComponentDescriptorDao.java @@ -29,7 +29,7 @@ import org.thingsboard.server.common.data.plugin.ComponentScope; import org.thingsboard.server.common.data.plugin.ComponentType; 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.nosql.ComponentDescriptorEntity; import org.thingsboard.server.dao.model.ModelConstants; import java.util.Arrays; diff --git a/dao/src/main/java/org/thingsboard/server/dao/customer/CassandraCustomerDao.java b/dao/src/main/java/org/thingsboard/server/dao/customer/CassandraCustomerDao.java index 18f35e6dc3..1bb682bdd7 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/customer/CassandraCustomerDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/customer/CassandraCustomerDao.java @@ -21,7 +21,7 @@ import org.thingsboard.server.common.data.Customer; import org.thingsboard.server.common.data.page.TextPageLink; import org.thingsboard.server.dao.CassandraAbstractSearchTextDao; import org.thingsboard.server.dao.DaoUtil; -import org.thingsboard.server.dao.model.CustomerEntity; +import org.thingsboard.server.dao.model.nosql.CustomerEntity; import org.thingsboard.server.dao.model.ModelConstants; import java.util.Arrays; 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 index 97a5c7a614..82d5a26576 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/dashboard/CassandraDashboardDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/dashboard/CassandraDashboardDao.java @@ -18,7 +18,7 @@ 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 org.thingsboard.server.dao.model.nosql.DashboardEntity; import static org.thingsboard.server.dao.model.ModelConstants.DASHBOARD_COLUMN_FAMILY_NAME; diff --git a/dao/src/main/java/org/thingsboard/server/dao/dashboard/CassandraDashboardInfoDao.java b/dao/src/main/java/org/thingsboard/server/dao/dashboard/CassandraDashboardInfoDao.java index 19527c7407..b0c3e891d3 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/dashboard/CassandraDashboardInfoDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/dashboard/CassandraDashboardInfoDao.java @@ -21,7 +21,7 @@ import org.thingsboard.server.common.data.DashboardInfo; import org.thingsboard.server.common.data.page.TextPageLink; import org.thingsboard.server.dao.CassandraAbstractSearchTextDao; import org.thingsboard.server.dao.DaoUtil; -import org.thingsboard.server.dao.model.DashboardInfoEntity; +import org.thingsboard.server.dao.model.nosql.DashboardInfoEntity; import java.util.Arrays; import java.util.Collections; diff --git a/dao/src/main/java/org/thingsboard/server/dao/device/CassandraDeviceCredentialsDao.java b/dao/src/main/java/org/thingsboard/server/dao/device/CassandraDeviceCredentialsDao.java index c96367e945..14ac5bfd45 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/device/CassandraDeviceCredentialsDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/device/CassandraDeviceCredentialsDao.java @@ -21,7 +21,7 @@ import org.springframework.stereotype.Component; import org.thingsboard.server.common.data.security.DeviceCredentials; import org.thingsboard.server.dao.CassandraAbstractModelDao; import org.thingsboard.server.dao.DaoUtil; -import org.thingsboard.server.dao.model.DeviceCredentialsEntity; +import org.thingsboard.server.dao.model.nosql.DeviceCredentialsEntity; import org.thingsboard.server.dao.model.ModelConstants; import java.util.UUID; diff --git a/dao/src/main/java/org/thingsboard/server/dao/device/CassandraDeviceDao.java b/dao/src/main/java/org/thingsboard/server/dao/device/CassandraDeviceDao.java index 814976e92a..b326fcb25e 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/device/CassandraDeviceDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/device/CassandraDeviceDao.java @@ -23,7 +23,7 @@ import org.thingsboard.server.common.data.Device; import org.thingsboard.server.common.data.page.TextPageLink; import org.thingsboard.server.dao.CassandraAbstractSearchTextDao; import org.thingsboard.server.dao.DaoUtil; -import org.thingsboard.server.dao.model.DeviceEntity; +import org.thingsboard.server.dao.model.nosql.DeviceEntity; import java.util.*; 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 258865049a..a5707ce29d 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 @@ -15,8 +15,6 @@ */ package org.thingsboard.server.dao.device; -import com.google.common.base.Function; -import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.RandomStringUtils; @@ -35,7 +33,6 @@ import org.thingsboard.server.common.data.security.DeviceCredentials; import org.thingsboard.server.common.data.security.DeviceCredentialsType; import org.thingsboard.server.dao.customer.CustomerDao; import org.thingsboard.server.dao.exception.DataValidationException; -import org.thingsboard.server.dao.model.DeviceEntity; import org.thingsboard.server.dao.service.DataValidator; import org.thingsboard.server.dao.service.PaginatedRemover; import org.thingsboard.server.dao.tenant.TenantDao; @@ -43,8 +40,6 @@ 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.model.ModelConstants.NULL_UUID; import static org.thingsboard.server.dao.service.Validator.validateId; diff --git a/dao/src/main/java/org/thingsboard/server/dao/event/CassandraBaseEventDao.java b/dao/src/main/java/org/thingsboard/server/dao/event/CassandraBaseEventDao.java index 73b9096fd8..3598d2a176 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/event/CassandraBaseEventDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/event/CassandraBaseEventDao.java @@ -30,7 +30,7 @@ import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.TimePageLink; import org.thingsboard.server.dao.CassandraAbstractSearchTimeDao; import org.thingsboard.server.dao.DaoUtil; -import org.thingsboard.server.dao.model.EventEntity; +import org.thingsboard.server.dao.model.nosql.EventEntity; import org.thingsboard.server.dao.model.ModelConstants; import java.util.Arrays; diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/AdminSettingsEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/AdminSettingsEntity.java similarity index 97% rename from dao/src/main/java/org/thingsboard/server/dao/model/AdminSettingsEntity.java rename to dao/src/main/java/org/thingsboard/server/dao/model/nosql/AdminSettingsEntity.java index 0fddbceba1..11ddd4d540 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/model/AdminSettingsEntity.java +++ b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/AdminSettingsEntity.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.thingsboard.server.dao.model; +package org.thingsboard.server.dao.model.nosql; import static org.thingsboard.server.dao.model.ModelConstants.ADMIN_SETTINGS_COLUMN_FAMILY_NAME; import static org.thingsboard.server.dao.model.ModelConstants.ADMIN_SETTINGS_JSON_VALUE_PROPERTY; @@ -24,6 +24,7 @@ import java.util.UUID; import org.thingsboard.server.common.data.AdminSettings; import org.thingsboard.server.common.data.id.AdminSettingsId; +import org.thingsboard.server.dao.model.BaseEntity; import org.thingsboard.server.dao.model.type.JsonCodec; import com.datastax.driver.core.utils.UUIDs; diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/ComponentDescriptorEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/ComponentDescriptorEntity.java similarity index 96% rename from dao/src/main/java/org/thingsboard/server/dao/model/ComponentDescriptorEntity.java rename to dao/src/main/java/org/thingsboard/server/dao/model/nosql/ComponentDescriptorEntity.java index 7a229212c6..d5cf08cf52 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/model/ComponentDescriptorEntity.java +++ b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/ComponentDescriptorEntity.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.thingsboard.server.dao.model; +package org.thingsboard.server.dao.model.nosql; import com.datastax.driver.mapping.annotations.Column; import com.datastax.driver.mapping.annotations.PartitionKey; @@ -23,6 +23,8 @@ import org.thingsboard.server.common.data.id.ComponentDescriptorId; 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.model.ModelConstants; +import org.thingsboard.server.dao.model.SearchTextEntity; import org.thingsboard.server.dao.model.type.JsonCodec; import java.util.UUID; diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/CustomerEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/CustomerEntity.java similarity index 84% rename from dao/src/main/java/org/thingsboard/server/dao/model/CustomerEntity.java rename to dao/src/main/java/org/thingsboard/server/dao/model/nosql/CustomerEntity.java index 7728b8356b..ce3dbff0af 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/model/CustomerEntity.java +++ b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/CustomerEntity.java @@ -13,28 +13,15 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.thingsboard.server.dao.model; - -import static org.thingsboard.server.dao.model.ModelConstants.ADDRESS2_PROPERTY; -import static org.thingsboard.server.dao.model.ModelConstants.ADDRESS_PROPERTY; -import static org.thingsboard.server.dao.model.ModelConstants.CITY_PROPERTY; -import static org.thingsboard.server.dao.model.ModelConstants.COUNTRY_PROPERTY; -import static org.thingsboard.server.dao.model.ModelConstants.CUSTOMER_ADDITIONAL_INFO_PROPERTY; -import static org.thingsboard.server.dao.model.ModelConstants.CUSTOMER_COLUMN_FAMILY_NAME; -import static org.thingsboard.server.dao.model.ModelConstants.CUSTOMER_TENANT_ID_PROPERTY; -import static org.thingsboard.server.dao.model.ModelConstants.CUSTOMER_TITLE_PROPERTY; -import static org.thingsboard.server.dao.model.ModelConstants.EMAIL_PROPERTY; -import static org.thingsboard.server.dao.model.ModelConstants.ID_PROPERTY; -import static org.thingsboard.server.dao.model.ModelConstants.PHONE_PROPERTY; -import static org.thingsboard.server.dao.model.ModelConstants.SEARCH_TEXT_PROPERTY; -import static org.thingsboard.server.dao.model.ModelConstants.STATE_PROPERTY; -import static org.thingsboard.server.dao.model.ModelConstants.ZIP_PROPERTY; +package org.thingsboard.server.dao.model.nosql; import java.util.UUID; import org.thingsboard.server.common.data.Customer; import org.thingsboard.server.common.data.id.CustomerId; import org.thingsboard.server.common.data.id.TenantId; +import org.thingsboard.server.dao.model.ModelConstants; +import org.thingsboard.server.dao.model.SearchTextEntity; import org.thingsboard.server.dao.model.type.JsonCodec; import com.datastax.driver.core.utils.UUIDs; @@ -44,51 +31,51 @@ import com.datastax.driver.mapping.annotations.Table; import com.datastax.driver.mapping.annotations.Transient; import com.fasterxml.jackson.databind.JsonNode; -@Table(name = CUSTOMER_COLUMN_FAMILY_NAME) +@Table(name = ModelConstants.CUSTOMER_COLUMN_FAMILY_NAME) public final class CustomerEntity implements SearchTextEntity { @Transient private static final long serialVersionUID = -7732527103760948490L; @PartitionKey(value = 0) - @Column(name = ID_PROPERTY) + @Column(name = ModelConstants.ID_PROPERTY) private UUID id; @PartitionKey(value = 1) - @Column(name = CUSTOMER_TENANT_ID_PROPERTY) + @Column(name = ModelConstants.CUSTOMER_TENANT_ID_PROPERTY) private UUID tenantId; - @Column(name = CUSTOMER_TITLE_PROPERTY) + @Column(name = ModelConstants.CUSTOMER_TITLE_PROPERTY) private String title; - @Column(name = SEARCH_TEXT_PROPERTY) + @Column(name = ModelConstants.SEARCH_TEXT_PROPERTY) private String searchText; - @Column(name = COUNTRY_PROPERTY) + @Column(name = ModelConstants.COUNTRY_PROPERTY) private String country; - @Column(name = STATE_PROPERTY) + @Column(name = ModelConstants.STATE_PROPERTY) private String state; - @Column(name = CITY_PROPERTY) + @Column(name = ModelConstants.CITY_PROPERTY) private String city; - @Column(name = ADDRESS_PROPERTY) + @Column(name = ModelConstants.ADDRESS_PROPERTY) private String address; - @Column(name = ADDRESS2_PROPERTY) + @Column(name = ModelConstants.ADDRESS2_PROPERTY) private String address2; - @Column(name = ZIP_PROPERTY) + @Column(name = ModelConstants.ZIP_PROPERTY) private String zip; - @Column(name = PHONE_PROPERTY) + @Column(name = ModelConstants.PHONE_PROPERTY) private String phone; - @Column(name = EMAIL_PROPERTY) + @Column(name = ModelConstants.EMAIL_PROPERTY) private String email; - @Column(name = CUSTOMER_ADDITIONAL_INFO_PROPERTY, codec = JsonCodec.class) + @Column(name = ModelConstants.CUSTOMER_ADDITIONAL_INFO_PROPERTY, codec = JsonCodec.class) private JsonNode additionalInfo; public CustomerEntity() { diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/DashboardEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/DashboardEntity.java similarity index 97% rename from dao/src/main/java/org/thingsboard/server/dao/model/DashboardEntity.java rename to dao/src/main/java/org/thingsboard/server/dao/model/nosql/DashboardEntity.java index 4a3c8ed581..911e9708d0 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/model/DashboardEntity.java +++ b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/DashboardEntity.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.thingsboard.server.dao.model; +package org.thingsboard.server.dao.model.nosql; import java.util.UUID; @@ -21,6 +21,8 @@ import org.thingsboard.server.common.data.Dashboard; import org.thingsboard.server.common.data.id.CustomerId; import org.thingsboard.server.common.data.id.DashboardId; import org.thingsboard.server.common.data.id.TenantId; +import org.thingsboard.server.dao.model.ModelConstants; +import org.thingsboard.server.dao.model.SearchTextEntity; import org.thingsboard.server.dao.model.type.JsonCodec; import com.datastax.driver.core.utils.UUIDs; diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/DashboardInfoEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/DashboardInfoEntity.java similarity index 96% rename from dao/src/main/java/org/thingsboard/server/dao/model/DashboardInfoEntity.java rename to dao/src/main/java/org/thingsboard/server/dao/model/nosql/DashboardInfoEntity.java index 660e23b556..2c5fe00580 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/model/DashboardInfoEntity.java +++ b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/DashboardInfoEntity.java @@ -13,23 +13,22 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.thingsboard.server.dao.model; +package org.thingsboard.server.dao.model.nosql; import java.util.UUID; -import org.thingsboard.server.common.data.Dashboard; import org.thingsboard.server.common.data.DashboardInfo; import org.thingsboard.server.common.data.id.CustomerId; import org.thingsboard.server.common.data.id.DashboardId; import org.thingsboard.server.common.data.id.TenantId; -import org.thingsboard.server.dao.model.type.JsonCodec; +import org.thingsboard.server.dao.model.ModelConstants; +import org.thingsboard.server.dao.model.SearchTextEntity; import com.datastax.driver.core.utils.UUIDs; import com.datastax.driver.mapping.annotations.Column; import com.datastax.driver.mapping.annotations.PartitionKey; import com.datastax.driver.mapping.annotations.Table; import com.datastax.driver.mapping.annotations.Transient; -import com.fasterxml.jackson.databind.JsonNode; @Table(name = ModelConstants.DASHBOARD_COLUMN_FAMILY_NAME) public class DashboardInfoEntity implements SearchTextEntity { diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/DeviceCredentialsEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/DeviceCredentialsEntity.java similarity index 97% rename from dao/src/main/java/org/thingsboard/server/dao/model/DeviceCredentialsEntity.java rename to dao/src/main/java/org/thingsboard/server/dao/model/nosql/DeviceCredentialsEntity.java index 9156f48035..32864c64a2 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/model/DeviceCredentialsEntity.java +++ b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/DeviceCredentialsEntity.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.thingsboard.server.dao.model; +package org.thingsboard.server.dao.model.nosql; import java.util.UUID; @@ -21,6 +21,8 @@ import org.thingsboard.server.common.data.id.DeviceCredentialsId; import org.thingsboard.server.common.data.id.DeviceId; import org.thingsboard.server.common.data.security.DeviceCredentials; import org.thingsboard.server.common.data.security.DeviceCredentialsType; +import org.thingsboard.server.dao.model.BaseEntity; +import org.thingsboard.server.dao.model.ModelConstants; import org.thingsboard.server.dao.model.type.DeviceCredentialsTypeCodec; import com.datastax.driver.core.utils.UUIDs; diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/DeviceEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/DeviceEntity.java similarity index 90% rename from dao/src/main/java/org/thingsboard/server/dao/model/DeviceEntity.java rename to dao/src/main/java/org/thingsboard/server/dao/model/nosql/DeviceEntity.java index 740bf2ac44..70c9a36efe 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/model/DeviceEntity.java +++ b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/DeviceEntity.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.thingsboard.server.dao.model; +package org.thingsboard.server.dao.model.nosql; import com.datastax.driver.core.utils.UUIDs; import com.datastax.driver.mapping.annotations.Column; @@ -25,37 +25,37 @@ import org.thingsboard.server.common.data.Device; import org.thingsboard.server.common.data.id.CustomerId; import org.thingsboard.server.common.data.id.DeviceId; import org.thingsboard.server.common.data.id.TenantId; +import org.thingsboard.server.dao.model.ModelConstants; +import org.thingsboard.server.dao.model.SearchTextEntity; import org.thingsboard.server.dao.model.type.JsonCodec; import java.util.UUID; -import static org.thingsboard.server.dao.model.ModelConstants.*; - -@Table(name = DEVICE_COLUMN_FAMILY_NAME) +@Table(name = ModelConstants.DEVICE_COLUMN_FAMILY_NAME) public final class DeviceEntity implements SearchTextEntity { @Transient private static final long serialVersionUID = -1265181166886910152L; @PartitionKey(value = 0) - @Column(name = ID_PROPERTY) + @Column(name = ModelConstants.ID_PROPERTY) private UUID id; @PartitionKey(value = 1) - @Column(name = DEVICE_TENANT_ID_PROPERTY) + @Column(name = ModelConstants.DEVICE_TENANT_ID_PROPERTY) private UUID tenantId; @PartitionKey(value = 2) - @Column(name = DEVICE_CUSTOMER_ID_PROPERTY) + @Column(name = ModelConstants.DEVICE_CUSTOMER_ID_PROPERTY) private UUID customerId; - @Column(name = DEVICE_NAME_PROPERTY) + @Column(name = ModelConstants.DEVICE_NAME_PROPERTY) private String name; - @Column(name = SEARCH_TEXT_PROPERTY) + @Column(name = ModelConstants.SEARCH_TEXT_PROPERTY) private String searchText; - @Column(name = DEVICE_ADDITIONAL_INFO_PROPERTY, codec = JsonCodec.class) + @Column(name = ModelConstants.DEVICE_ADDITIONAL_INFO_PROPERTY, codec = JsonCodec.class) private JsonNode additionalInfo; public DeviceEntity() { diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/EventEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/EventEntity.java similarity index 83% rename from dao/src/main/java/org/thingsboard/server/dao/model/EventEntity.java rename to dao/src/main/java/org/thingsboard/server/dao/model/nosql/EventEntity.java index fc22a8dbe7..abfcfeffb0 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/model/EventEntity.java +++ b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/EventEntity.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.thingsboard.server.dao.model; +package org.thingsboard.server.dao.model.nosql; import com.datastax.driver.core.utils.UUIDs; import com.datastax.driver.mapping.annotations.*; @@ -23,48 +23,48 @@ import lombok.NoArgsConstructor; import org.thingsboard.server.common.data.EntityType; import org.thingsboard.server.common.data.Event; import org.thingsboard.server.common.data.id.*; +import org.thingsboard.server.dao.model.BaseEntity; +import org.thingsboard.server.dao.model.ModelConstants; import org.thingsboard.server.dao.model.type.EntityTypeCodec; import org.thingsboard.server.dao.model.type.JsonCodec; import java.util.UUID; -import static org.thingsboard.server.dao.model.ModelConstants.*; - /** * @author Andrew Shvayka */ @Data @NoArgsConstructor -@Table(name = DEVICE_COLUMN_FAMILY_NAME) +@Table(name = ModelConstants.DEVICE_COLUMN_FAMILY_NAME) public class EventEntity implements BaseEntity { @Transient private static final long serialVersionUID = -1265181166886910153L; - @Column(name = ID_PROPERTY) + @Column(name = ModelConstants.ID_PROPERTY) private UUID id; @PartitionKey() - @Column(name = EVENT_TENANT_ID_PROPERTY) + @Column(name = ModelConstants.EVENT_TENANT_ID_PROPERTY) private UUID tenantId; @PartitionKey(value = 1) - @Column(name = EVENT_ENTITY_TYPE_PROPERTY, codec = EntityTypeCodec.class) + @Column(name = ModelConstants.EVENT_ENTITY_TYPE_PROPERTY, codec = EntityTypeCodec.class) private EntityType entityType; @PartitionKey(value = 2) - @Column(name = EVENT_ENTITY_ID_PROPERTY) + @Column(name = ModelConstants.EVENT_ENTITY_ID_PROPERTY) private UUID entityId; @ClusteringColumn() - @Column(name = EVENT_TYPE_PROPERTY) + @Column(name = ModelConstants.EVENT_TYPE_PROPERTY) private String eventType; @ClusteringColumn(value = 1) - @Column(name = EVENT_UID_PROPERTY) + @Column(name = ModelConstants.EVENT_UID_PROPERTY) private String eventUId; - @Column(name = EVENT_BODY_PROPERTY, codec = JsonCodec.class) + @Column(name = ModelConstants.EVENT_BODY_PROPERTY, codec = JsonCodec.class) private JsonNode body; public EventEntity(Event event) { diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/PluginMetaDataEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/PluginMetaDataEntity.java similarity index 91% rename from dao/src/main/java/org/thingsboard/server/dao/model/PluginMetaDataEntity.java rename to dao/src/main/java/org/thingsboard/server/dao/model/nosql/PluginMetaDataEntity.java index 179edc4078..caddacb340 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/model/PluginMetaDataEntity.java +++ b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/PluginMetaDataEntity.java @@ -13,31 +13,28 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.thingsboard.server.dao.model; +package org.thingsboard.server.dao.model.nosql; import com.datastax.driver.core.utils.UUIDs; -import com.datastax.driver.mapping.annotations.ClusteringColumn; -import com.datastax.driver.mapping.annotations.Column; -import com.datastax.driver.mapping.annotations.PartitionKey; -import com.datastax.driver.mapping.annotations.Table; +import com.datastax.driver.mapping.annotations.*; import com.fasterxml.jackson.databind.JsonNode; import org.thingsboard.server.common.data.id.PluginId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.plugin.ComponentLifecycleState; import org.thingsboard.server.common.data.plugin.PluginMetaData; +import org.thingsboard.server.dao.model.ModelConstants; +import org.thingsboard.server.dao.model.SearchTextEntity; import org.thingsboard.server.dao.model.type.ComponentLifecycleStateCodec; import org.thingsboard.server.dao.model.type.JsonCodec; import java.util.Objects; import java.util.UUID; -import static org.thingsboard.server.dao.model.ModelConstants.ADDITIONAL_INFO_PROPERTY; -import static org.thingsboard.server.dao.model.ModelConstants.RULE_ACTION; - @Table(name = ModelConstants.PLUGIN_COLUMN_FAMILY_NAME) public class PluginMetaDataEntity implements SearchTextEntity { - private static final long serialVersionUID = 1L; + @Transient + private static final long serialVersionUID = -5231612734979707866L; @PartitionKey @Column(name = ModelConstants.ID_PROPERTY) @@ -68,7 +65,7 @@ public class PluginMetaDataEntity implements SearchTextEntity { @Column(name = ModelConstants.SEARCH_TEXT_PROPERTY) private String searchText; - @Column(name = ADDITIONAL_INFO_PROPERTY, codec = JsonCodec.class) + @Column(name = ModelConstants.ADDITIONAL_INFO_PROPERTY, codec = JsonCodec.class) private JsonNode additionalInfo; public PluginMetaDataEntity() { diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/RuleMetaDataEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/RuleMetaDataEntity.java similarity index 86% rename from dao/src/main/java/org/thingsboard/server/dao/model/RuleMetaDataEntity.java rename to dao/src/main/java/org/thingsboard/server/dao/model/nosql/RuleMetaDataEntity.java index 419e7fd6ed..29d32fdb30 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/model/RuleMetaDataEntity.java +++ b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/RuleMetaDataEntity.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.thingsboard.server.dao.model; +package org.thingsboard.server.dao.model.nosql; import com.datastax.driver.core.utils.UUIDs; import com.datastax.driver.mapping.annotations.ClusteringColumn; @@ -26,40 +26,43 @@ import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.plugin.ComponentLifecycleState; import org.thingsboard.server.common.data.rule.RuleMetaData; import org.thingsboard.server.dao.DaoUtil; +import org.thingsboard.server.dao.model.ModelConstants; +import org.thingsboard.server.dao.model.SearchTextEntity; import org.thingsboard.server.dao.model.type.ComponentLifecycleStateCodec; import org.thingsboard.server.dao.model.type.JsonCodec; +import javax.persistence.Transient; import java.util.Objects; import java.util.UUID; -import static org.thingsboard.server.dao.model.ModelConstants.*; - -@Table(name = RULE_COLUMN_FAMILY_NAME) +@Table(name = ModelConstants.RULE_COLUMN_FAMILY_NAME) public class RuleMetaDataEntity implements SearchTextEntity { + @Transient + private static final long serialVersionUID = 4011728715100800304L; @PartitionKey - @Column(name = ID_PROPERTY) + @Column(name = ModelConstants.ID_PROPERTY) private UUID id; @ClusteringColumn - @Column(name = RULE_TENANT_ID_PROPERTY) + @Column(name = ModelConstants.RULE_TENANT_ID_PROPERTY) private UUID tenantId; - @Column(name = RULE_NAME_PROPERTY) + @Column(name = ModelConstants.RULE_NAME_PROPERTY) private String name; @Column(name = ModelConstants.RULE_STATE_PROPERTY, codec = ComponentLifecycleStateCodec.class) private ComponentLifecycleState state; - @Column(name = RULE_WEIGHT_PROPERTY) + @Column(name = ModelConstants.RULE_WEIGHT_PROPERTY) private int weight; - @Column(name = SEARCH_TEXT_PROPERTY) + @Column(name = ModelConstants.SEARCH_TEXT_PROPERTY) private String searchText; - @Column(name = RULE_PLUGIN_TOKEN_PROPERTY) + @Column(name = ModelConstants.RULE_PLUGIN_TOKEN_PROPERTY) private String pluginToken; - @Column(name = RULE_FILTERS, codec = JsonCodec.class) + @Column(name = ModelConstants.RULE_FILTERS, codec = JsonCodec.class) private JsonNode filters; - @Column(name = RULE_PROCESSOR, codec = JsonCodec.class) + @Column(name = ModelConstants.RULE_PROCESSOR, codec = JsonCodec.class) private JsonNode processor; - @Column(name = RULE_ACTION, codec = JsonCodec.class) + @Column(name = ModelConstants.RULE_ACTION, codec = JsonCodec.class) private JsonNode action; - @Column(name = ADDITIONAL_INFO_PROPERTY, codec = JsonCodec.class) + @Column(name = ModelConstants.ADDITIONAL_INFO_PROPERTY, codec = JsonCodec.class) private JsonNode additionalInfo; public RuleMetaDataEntity() { diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/TenantEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/TenantEntity.java similarity index 84% rename from dao/src/main/java/org/thingsboard/server/dao/model/TenantEntity.java rename to dao/src/main/java/org/thingsboard/server/dao/model/nosql/TenantEntity.java index d9d57c8732..a6e3ae6efb 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/model/TenantEntity.java +++ b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/TenantEntity.java @@ -13,27 +13,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.thingsboard.server.dao.model; - -import static org.thingsboard.server.dao.model.ModelConstants.ADDRESS2_PROPERTY; -import static org.thingsboard.server.dao.model.ModelConstants.ADDRESS_PROPERTY; -import static org.thingsboard.server.dao.model.ModelConstants.CITY_PROPERTY; -import static org.thingsboard.server.dao.model.ModelConstants.COUNTRY_PROPERTY; -import static org.thingsboard.server.dao.model.ModelConstants.EMAIL_PROPERTY; -import static org.thingsboard.server.dao.model.ModelConstants.ID_PROPERTY; -import static org.thingsboard.server.dao.model.ModelConstants.PHONE_PROPERTY; -import static org.thingsboard.server.dao.model.ModelConstants.STATE_PROPERTY; -import static org.thingsboard.server.dao.model.ModelConstants.TENANT_ADDITIONAL_INFO_PROPERTY; -import static org.thingsboard.server.dao.model.ModelConstants.TENANT_COLUMN_FAMILY_NAME; -import static org.thingsboard.server.dao.model.ModelConstants.TENANT_REGION_PROPERTY; -import static org.thingsboard.server.dao.model.ModelConstants.TENANT_TITLE_PROPERTY; -import static org.thingsboard.server.dao.model.ModelConstants.ZIP_PROPERTY; -import static org.thingsboard.server.dao.model.ModelConstants.SEARCH_TEXT_PROPERTY; +package org.thingsboard.server.dao.model.nosql; import java.util.UUID; import org.thingsboard.server.common.data.Tenant; import org.thingsboard.server.common.data.id.TenantId; +import org.thingsboard.server.dao.model.ModelConstants; +import org.thingsboard.server.dao.model.SearchTextEntity; import org.thingsboard.server.dao.model.type.JsonCodec; import com.datastax.driver.core.utils.UUIDs; @@ -43,50 +30,50 @@ import com.datastax.driver.mapping.annotations.Table; import com.datastax.driver.mapping.annotations.Transient; import com.fasterxml.jackson.databind.JsonNode; -@Table(name = TENANT_COLUMN_FAMILY_NAME) +@Table(name = ModelConstants.TENANT_COLUMN_FAMILY_NAME) public final class TenantEntity implements SearchTextEntity { @Transient private static final long serialVersionUID = -6198635547142409206L; @PartitionKey(value = 0) - @Column(name = ID_PROPERTY) + @Column(name = ModelConstants.ID_PROPERTY) private UUID id; - @Column(name = TENANT_TITLE_PROPERTY) + @Column(name = ModelConstants.TENANT_TITLE_PROPERTY) private String title; - @Column(name = SEARCH_TEXT_PROPERTY) + @Column(name = ModelConstants.SEARCH_TEXT_PROPERTY) private String searchText; - @Column(name = TENANT_REGION_PROPERTY) + @Column(name = ModelConstants.TENANT_REGION_PROPERTY) private String region; - @Column(name = COUNTRY_PROPERTY) + @Column(name = ModelConstants.COUNTRY_PROPERTY) private String country; - @Column(name = STATE_PROPERTY) + @Column(name = ModelConstants.STATE_PROPERTY) private String state; - @Column(name = CITY_PROPERTY) + @Column(name = ModelConstants.CITY_PROPERTY) private String city; - @Column(name = ADDRESS_PROPERTY) + @Column(name = ModelConstants.ADDRESS_PROPERTY) private String address; - @Column(name = ADDRESS2_PROPERTY) + @Column(name = ModelConstants.ADDRESS2_PROPERTY) private String address2; - @Column(name = ZIP_PROPERTY) + @Column(name = ModelConstants.ZIP_PROPERTY) private String zip; - @Column(name = PHONE_PROPERTY) + @Column(name = ModelConstants.PHONE_PROPERTY) private String phone; - @Column(name = EMAIL_PROPERTY) + @Column(name = ModelConstants.EMAIL_PROPERTY) private String email; - @Column(name = TENANT_ADDITIONAL_INFO_PROPERTY, codec = JsonCodec.class) + @Column(name = ModelConstants.TENANT_ADDITIONAL_INFO_PROPERTY, codec = JsonCodec.class) private JsonNode additionalInfo; public TenantEntity() { diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/UserCredentialsEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/UserCredentialsEntity.java similarity index 83% rename from dao/src/main/java/org/thingsboard/server/dao/model/UserCredentialsEntity.java rename to dao/src/main/java/org/thingsboard/server/dao/model/nosql/UserCredentialsEntity.java index c512441d58..d571d0fd22 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/model/UserCredentialsEntity.java +++ b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/UserCredentialsEntity.java @@ -13,15 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.thingsboard.server.dao.model; - -import static org.thingsboard.server.dao.model.ModelConstants.ID_PROPERTY; -import static org.thingsboard.server.dao.model.ModelConstants.USER_CREDENTIALS_ACTIVATE_TOKEN_PROPERTY; -import static org.thingsboard.server.dao.model.ModelConstants.USER_CREDENTIALS_COLUMN_FAMILY_NAME; -import static org.thingsboard.server.dao.model.ModelConstants.USER_CREDENTIALS_PASSWORD_PROPERTY; -import static org.thingsboard.server.dao.model.ModelConstants.USER_CREDENTIALS_USER_ID_PROPERTY; -import static org.thingsboard.server.dao.model.ModelConstants.USER_CREDENTIALS_ENABLED_PROPERTY; -import static org.thingsboard.server.dao.model.ModelConstants.USER_CREDENTIALS_RESET_TOKEN_PROPERTY; +package org.thingsboard.server.dao.model.nosql; import java.util.UUID; @@ -34,30 +26,32 @@ import com.datastax.driver.mapping.annotations.Column; import com.datastax.driver.mapping.annotations.PartitionKey; import com.datastax.driver.mapping.annotations.Table; import com.datastax.driver.mapping.annotations.Transient; +import org.thingsboard.server.dao.model.BaseEntity; +import org.thingsboard.server.dao.model.ModelConstants; -@Table(name = USER_CREDENTIALS_COLUMN_FAMILY_NAME) +@Table(name = ModelConstants.USER_CREDENTIALS_COLUMN_FAMILY_NAME) public final class UserCredentialsEntity implements BaseEntity { @Transient private static final long serialVersionUID = 1348221414123438374L; @PartitionKey(value = 0) - @Column(name = ID_PROPERTY) + @Column(name = ModelConstants.ID_PROPERTY) private UUID id; - @Column(name = USER_CREDENTIALS_USER_ID_PROPERTY) + @Column(name = ModelConstants.USER_CREDENTIALS_USER_ID_PROPERTY) private UUID userId; - @Column(name = USER_CREDENTIALS_ENABLED_PROPERTY) + @Column(name = ModelConstants.USER_CREDENTIALS_ENABLED_PROPERTY) private boolean enabled; - @Column(name = USER_CREDENTIALS_PASSWORD_PROPERTY) + @Column(name = ModelConstants.USER_CREDENTIALS_PASSWORD_PROPERTY) private String password; - @Column(name = USER_CREDENTIALS_ACTIVATE_TOKEN_PROPERTY) + @Column(name = ModelConstants.USER_CREDENTIALS_ACTIVATE_TOKEN_PROPERTY) private String activateToken; - @Column(name = USER_CREDENTIALS_RESET_TOKEN_PROPERTY) + @Column(name = ModelConstants.USER_CREDENTIALS_RESET_TOKEN_PROPERTY) private String resetToken; public UserCredentialsEntity() { diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/UserEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/UserEntity.java similarity index 84% rename from dao/src/main/java/org/thingsboard/server/dao/model/UserEntity.java rename to dao/src/main/java/org/thingsboard/server/dao/model/nosql/UserEntity.java index 5450c00868..91b9f3cd57 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/model/UserEntity.java +++ b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/UserEntity.java @@ -13,18 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.thingsboard.server.dao.model; - -import static org.thingsboard.server.dao.model.ModelConstants.ID_PROPERTY; -import static org.thingsboard.server.dao.model.ModelConstants.SEARCH_TEXT_PROPERTY; -import static org.thingsboard.server.dao.model.ModelConstants.USER_ADDITIONAL_INFO_PROPERTY; -import static org.thingsboard.server.dao.model.ModelConstants.USER_AUTHORITY_PROPERTY; -import static org.thingsboard.server.dao.model.ModelConstants.USER_COLUMN_FAMILY_NAME; -import static org.thingsboard.server.dao.model.ModelConstants.USER_CUSTOMER_ID_PROPERTY; -import static org.thingsboard.server.dao.model.ModelConstants.USER_EMAIL_PROPERTY; -import static org.thingsboard.server.dao.model.ModelConstants.USER_FIRST_NAME_PROPERTY; -import static org.thingsboard.server.dao.model.ModelConstants.USER_LAST_NAME_PROPERTY; -import static org.thingsboard.server.dao.model.ModelConstants.USER_TENANT_ID_PROPERTY; +package org.thingsboard.server.dao.model.nosql; import java.util.UUID; @@ -33,6 +22,8 @@ import org.thingsboard.server.common.data.id.CustomerId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.id.UserId; import org.thingsboard.server.common.data.security.Authority; +import org.thingsboard.server.dao.model.ModelConstants; +import org.thingsboard.server.dao.model.SearchTextEntity; import org.thingsboard.server.dao.model.type.AuthorityCodec; import org.thingsboard.server.dao.model.type.JsonCodec; @@ -43,41 +34,41 @@ import com.datastax.driver.mapping.annotations.Table; import com.datastax.driver.mapping.annotations.Transient; import com.fasterxml.jackson.databind.JsonNode; -@Table(name = USER_COLUMN_FAMILY_NAME) +@Table(name = ModelConstants.USER_COLUMN_FAMILY_NAME) public final class UserEntity implements SearchTextEntity { @Transient private static final long serialVersionUID = -7740338274987723489L; @PartitionKey(value = 0) - @Column(name = ID_PROPERTY) + @Column(name = ModelConstants.ID_PROPERTY) private UUID id; @PartitionKey(value = 1) - @Column(name = USER_TENANT_ID_PROPERTY) + @Column(name = ModelConstants.USER_TENANT_ID_PROPERTY) private UUID tenantId; @PartitionKey(value = 2) - @Column(name = USER_CUSTOMER_ID_PROPERTY) + @Column(name = ModelConstants.USER_CUSTOMER_ID_PROPERTY) private UUID customerId; @PartitionKey(value = 3) - @Column(name = USER_AUTHORITY_PROPERTY, codec = AuthorityCodec.class) + @Column(name = ModelConstants.USER_AUTHORITY_PROPERTY, codec = AuthorityCodec.class) private Authority authority; - @Column(name = USER_EMAIL_PROPERTY) + @Column(name = ModelConstants.USER_EMAIL_PROPERTY) private String email; - @Column(name = SEARCH_TEXT_PROPERTY) + @Column(name = ModelConstants.SEARCH_TEXT_PROPERTY) private String searchText; - @Column(name = USER_FIRST_NAME_PROPERTY) + @Column(name = ModelConstants.USER_FIRST_NAME_PROPERTY) private String firstName; - @Column(name = USER_LAST_NAME_PROPERTY) + @Column(name = ModelConstants.USER_LAST_NAME_PROPERTY) private String lastName; - @Column(name = USER_ADDITIONAL_INFO_PROPERTY, codec = JsonCodec.class) + @Column(name = ModelConstants.USER_ADDITIONAL_INFO_PROPERTY, codec = JsonCodec.class) private JsonNode additionalInfo; public UserEntity() { diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/WidgetTypeEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/WidgetTypeEntity.java similarity index 97% rename from dao/src/main/java/org/thingsboard/server/dao/model/WidgetTypeEntity.java rename to dao/src/main/java/org/thingsboard/server/dao/model/nosql/WidgetTypeEntity.java index 0054421584..4fd60f3889 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/model/WidgetTypeEntity.java +++ b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/WidgetTypeEntity.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.thingsboard.server.dao.model; +package org.thingsboard.server.dao.model.nosql; import com.datastax.driver.core.utils.UUIDs; import com.datastax.driver.mapping.annotations.Column; @@ -24,6 +24,8 @@ import com.fasterxml.jackson.databind.JsonNode; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.id.WidgetTypeId; import org.thingsboard.server.common.data.widget.WidgetType; +import org.thingsboard.server.dao.model.BaseEntity; +import org.thingsboard.server.dao.model.ModelConstants; import org.thingsboard.server.dao.model.type.JsonCodec; import java.util.UUID; diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/WidgetsBundleEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/WidgetsBundleEntity.java similarity index 97% rename from dao/src/main/java/org/thingsboard/server/dao/model/WidgetsBundleEntity.java rename to dao/src/main/java/org/thingsboard/server/dao/model/nosql/WidgetsBundleEntity.java index 449a1a9ed2..889f1d6c3d 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/model/WidgetsBundleEntity.java +++ b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/WidgetsBundleEntity.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.thingsboard.server.dao.model; +package org.thingsboard.server.dao.model.nosql; import com.datastax.driver.core.utils.UUIDs; @@ -24,6 +24,8 @@ import com.datastax.driver.mapping.annotations.Transient; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.id.WidgetsBundleId; import org.thingsboard.server.common.data.widget.WidgetsBundle; +import org.thingsboard.server.dao.model.ModelConstants; +import org.thingsboard.server.dao.model.SearchTextEntity; import java.nio.ByteBuffer; import java.util.UUID; diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/AdminSettingsEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/AdminSettingsEntity.java new file mode 100644 index 0000000000..40580ee1f4 --- /dev/null +++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/AdminSettingsEntity.java @@ -0,0 +1,145 @@ +/** + * 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.model.sql; + +import com.datastax.driver.core.utils.UUIDs; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Transient; +import com.fasterxml.jackson.databind.JsonNode; +import org.thingsboard.server.common.data.AdminSettings; +import org.thingsboard.server.common.data.id.AdminSettingsId; +import org.thingsboard.server.dao.model.BaseEntity; + +import java.util.UUID; + +import static org.thingsboard.server.dao.model.ModelConstants.*; + +@Entity +@Table(name = ADMIN_SETTINGS_COLUMN_FAMILY_NAME) +public final class AdminSettingsEntity implements BaseEntity { + + @Transient + private static final long serialVersionUID = 842759712850362147L; + + @Id + @Column(name = ID_PROPERTY) + private UUID id; + + @Column(name = ADMIN_SETTINGS_KEY_PROPERTY) + private String key; + + @Column(name = ADMIN_SETTINGS_JSON_VALUE_PROPERTY) + private JsonNode jsonValue; + + public AdminSettingsEntity() { + super(); + } + + public AdminSettingsEntity(AdminSettings adminSettings) { + if (adminSettings.getId() != null) { + this.id = adminSettings.getId().getId(); + } + this.key = adminSettings.getKey(); + this.jsonValue = adminSettings.getJsonValue(); + } + + public UUID getId() { + return id; + } + + public void setId(UUID id) { + this.id = id; + } + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public JsonNode getJsonValue() { + return jsonValue; + } + + public void setJsonValue(JsonNode jsonValue) { + this.jsonValue = jsonValue; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((id == null) ? 0 : id.hashCode()); + result = prime * result + ((jsonValue == null) ? 0 : jsonValue.hashCode()); + result = prime * result + ((key == null) ? 0 : key.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + AdminSettingsEntity other = (AdminSettingsEntity) obj; + if (id == null) { + if (other.id != null) + return false; + } else if (!id.equals(other.id)) + return false; + if (jsonValue == null) { + if (other.jsonValue != null) + return false; + } else if (!jsonValue.equals(other.jsonValue)) + return false; + if (key == null) { + if (other.key != null) + return false; + } else if (!key.equals(other.key)) + return false; + return true; + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("AdminSettingsEntity [id="); + builder.append(id); + builder.append(", key="); + builder.append(key); + builder.append(", jsonValue="); + builder.append(jsonValue); + builder.append("]"); + return builder.toString(); + } + + @Override + public AdminSettings toData() { + AdminSettings adminSettings = new AdminSettings(new AdminSettingsId(id)); + adminSettings.setCreatedTime(UUIDs.unixTimestamp(id)); + adminSettings.setKey(key); + adminSettings.setJsonValue(jsonValue); + return adminSettings; + } + +} \ No newline at end of file diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/ComponentDescriptorEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/ComponentDescriptorEntity.java new file mode 100644 index 0000000000..53bac762c2 --- /dev/null +++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/ComponentDescriptorEntity.java @@ -0,0 +1,164 @@ +/** + * 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.model.sql; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Transient; +import com.fasterxml.jackson.databind.JsonNode; +import org.thingsboard.server.common.data.id.ComponentDescriptorId; +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.model.ModelConstants; +import org.thingsboard.server.dao.model.SearchTextEntity; + +import java.util.UUID; + +@Entity +@Table(name = ModelConstants.COMPONENT_DESCRIPTOR_COLUMN_FAMILY_NAME) +public class ComponentDescriptorEntity implements SearchTextEntity { + + @Transient + private static final long serialVersionUID = 253590350877992402L; + + @Id + @Column(name = ModelConstants.ID_PROPERTY) + private UUID id; + + @Column(name = ModelConstants.COMPONENT_DESCRIPTOR_TYPE_PROPERTY) + private ComponentType type; + + @Column(name = ModelConstants.COMPONENT_DESCRIPTOR_SCOPE_PROPERTY) + private ComponentScope scope; + + @Column(name = ModelConstants.COMPONENT_DESCRIPTOR_NAME_PROPERTY) + private String name; + + @Column(name = ModelConstants.COMPONENT_DESCRIPTOR_CLASS_PROPERTY) + private String clazz; + + @Column(name = ModelConstants.COMPONENT_DESCRIPTOR_CONFIGURATION_DESCRIPTOR_PROPERTY) + private JsonNode configurationDescriptor; + + @Column(name = ModelConstants.COMPONENT_DESCRIPTOR_ACTIONS_PROPERTY) + private String actions; + + @Column(name = ModelConstants.SEARCH_TEXT_PROPERTY) + private String searchText; + + public ComponentDescriptorEntity() { + } + + public ComponentDescriptorEntity(ComponentDescriptor component) { + if (component.getId() != null) { + this.id = component.getId().getId(); + } + this.actions = component.getActions(); + this.type = component.getType(); + this.scope = component.getScope(); + this.name = component.getName(); + this.clazz = component.getClazz(); + this.configurationDescriptor = component.getConfigurationDescriptor(); + this.searchText = component.getName(); + } + + @Override + public ComponentDescriptor toData() { + ComponentDescriptor data = new ComponentDescriptor(new ComponentDescriptorId(id)); + data.setType(type); + data.setScope(scope); + data.setName(this.getName()); + data.setClazz(this.getClazz()); + data.setActions(this.getActions()); + data.setConfigurationDescriptor(this.getConfigurationDescriptor()); + return data; + } + + @Override + public UUID getId() { + return id; + } + + @Override + public void setId(UUID id) { + this.id = id; + } + + public String getActions() { + return actions; + } + + public void setActions(String actions) { + this.actions = actions; + } + + public ComponentType getType() { + return type; + } + + public void setType(ComponentType type) { + this.type = type; + } + + public ComponentScope getScope() { + return scope; + } + + public void setScope(ComponentScope scope) { + this.scope = scope; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getClazz() { + return clazz; + } + + public void setClazz(String clazz) { + this.clazz = clazz; + } + + public JsonNode getConfigurationDescriptor() { + return configurationDescriptor; + } + + public void setConfigurationDescriptor(JsonNode configurationDescriptor) { + this.configurationDescriptor = configurationDescriptor; + } + + public String getSearchText() { + return searchText; + } + + @Override + public void setSearchText(String searchText) { + this.searchText = searchText; + } + + @Override + public String getSearchTextSource() { + return searchText; + } +} diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/CustomerEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/CustomerEntity.java new file mode 100644 index 0000000000..bf7404f50e --- /dev/null +++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/CustomerEntity.java @@ -0,0 +1,351 @@ +/** + * 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.model.sql; + +import com.datastax.driver.core.utils.UUIDs; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Transient; +import com.fasterxml.jackson.databind.JsonNode; +import org.thingsboard.server.common.data.Customer; +import org.thingsboard.server.common.data.id.CustomerId; +import org.thingsboard.server.common.data.id.TenantId; +import org.thingsboard.server.dao.model.ModelConstants; +import org.thingsboard.server.dao.model.SearchTextEntity; + +import java.util.UUID; + +@Entity +@Table(name = ModelConstants.CUSTOMER_COLUMN_FAMILY_NAME) +public final class CustomerEntity implements SearchTextEntity { + + @Transient + private static final long serialVersionUID = 8951342124082981556L; + + @Id + @Column(name = ModelConstants.ID_PROPERTY) + private UUID id; + + @Column(name = ModelConstants.CUSTOMER_TENANT_ID_PROPERTY) + private UUID tenantId; + + @Column(name = ModelConstants.CUSTOMER_TITLE_PROPERTY) + private String title; + + @Column(name = ModelConstants.SEARCH_TEXT_PROPERTY) + private String searchText; + + @Column(name = ModelConstants.COUNTRY_PROPERTY) + private String country; + + @Column(name = ModelConstants.STATE_PROPERTY) + private String state; + + @Column(name = ModelConstants.CITY_PROPERTY) + private String city; + + @Column(name = ModelConstants.ADDRESS_PROPERTY) + private String address; + + @Column(name = ModelConstants.ADDRESS2_PROPERTY) + private String address2; + + @Column(name = ModelConstants.ZIP_PROPERTY) + private String zip; + + @Column(name = ModelConstants.PHONE_PROPERTY) + private String phone; + + @Column(name = ModelConstants.EMAIL_PROPERTY) + private String email; + + @Column(name = ModelConstants.CUSTOMER_ADDITIONAL_INFO_PROPERTY) + private JsonNode additionalInfo; + + public CustomerEntity() { + super(); + } + + public CustomerEntity(Customer customer) { + if (customer.getId() != null) { + this.id = customer.getId().getId(); + } + this.tenantId = customer.getTenantId().getId(); + this.title = customer.getTitle(); + this.country = customer.getCountry(); + this.state = customer.getState(); + this.city = customer.getCity(); + this.address = customer.getAddress(); + this.address2 = customer.getAddress2(); + this.zip = customer.getZip(); + this.phone = customer.getPhone(); + this.email = customer.getEmail(); + this.additionalInfo = customer.getAdditionalInfo(); + } + + public UUID getId() { + return id; + } + + public void setId(UUID id) { + this.id = id; + } + + public UUID getTenantId() { + return tenantId; + } + + public void setTenantId(UUID tenantId) { + this.tenantId = tenantId; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getCountry() { + return country; + } + + public void setCountry(String country) { + this.country = country; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + public String getCity() { + return city; + } + + public void setCity(String city) { + this.city = city; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getAddress2() { + return address2; + } + + public void setAddress2(String address2) { + this.address2 = address2; + } + + public String getZip() { + return zip; + } + + public void setZip(String zip) { + this.zip = zip; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public JsonNode getAdditionalInfo() { + return additionalInfo; + } + + public void setAdditionalInfo(JsonNode additionalInfo) { + this.additionalInfo = additionalInfo; + } + + @Override + public String getSearchTextSource() { + return title; + } + + @Override + public void setSearchText(String searchText) { + this.searchText = searchText; + } + + public String getSearchText() { + return searchText; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((additionalInfo == null) ? 0 : additionalInfo.hashCode()); + result = prime * result + ((address == null) ? 0 : address.hashCode()); + result = prime * result + ((address2 == null) ? 0 : address2.hashCode()); + result = prime * result + ((city == null) ? 0 : city.hashCode()); + result = prime * result + ((country == null) ? 0 : country.hashCode()); + result = prime * result + ((email == null) ? 0 : email.hashCode()); + result = prime * result + ((id == null) ? 0 : id.hashCode()); + result = prime * result + ((phone == null) ? 0 : phone.hashCode()); + result = prime * result + ((state == null) ? 0 : state.hashCode()); + result = prime * result + ((tenantId == null) ? 0 : tenantId.hashCode()); + result = prime * result + ((title == null) ? 0 : title.hashCode()); + result = prime * result + ((zip == null) ? 0 : zip.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + CustomerEntity other = (CustomerEntity) obj; + if (additionalInfo == null) { + if (other.additionalInfo != null) + return false; + } else if (!additionalInfo.equals(other.additionalInfo)) + return false; + if (address == null) { + if (other.address != null) + return false; + } else if (!address.equals(other.address)) + return false; + if (address2 == null) { + if (other.address2 != null) + return false; + } else if (!address2.equals(other.address2)) + return false; + if (city == null) { + if (other.city != null) + return false; + } else if (!city.equals(other.city)) + return false; + if (country == null) { + if (other.country != null) + return false; + } else if (!country.equals(other.country)) + return false; + if (email == null) { + if (other.email != null) + return false; + } else if (!email.equals(other.email)) + return false; + if (id == null) { + if (other.id != null) + return false; + } else if (!id.equals(other.id)) + return false; + if (phone == null) { + if (other.phone != null) + return false; + } else if (!phone.equals(other.phone)) + return false; + if (state == null) { + if (other.state != null) + return false; + } else if (!state.equals(other.state)) + return false; + if (tenantId == null) { + if (other.tenantId != null) + return false; + } else if (!tenantId.equals(other.tenantId)) + return false; + if (title == null) { + if (other.title != null) + return false; + } else if (!title.equals(other.title)) + return false; + if (zip == null) { + if (other.zip != null) + return false; + } else if (!zip.equals(other.zip)) + return false; + return true; + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("CustomerEntity [id="); + builder.append(id); + builder.append(", tenantId="); + builder.append(tenantId); + builder.append(", title="); + builder.append(title); + builder.append(", country="); + builder.append(country); + builder.append(", state="); + builder.append(state); + builder.append(", city="); + builder.append(city); + builder.append(", address="); + builder.append(address); + builder.append(", address2="); + builder.append(address2); + builder.append(", zip="); + builder.append(zip); + builder.append(", phone="); + builder.append(phone); + builder.append(", email="); + builder.append(email); + builder.append(", additionalInfo="); + builder.append(additionalInfo); + builder.append("]"); + return builder.toString(); + } + + @Override + public Customer toData() { + Customer customer = new Customer(new CustomerId(id)); + customer.setCreatedTime(UUIDs.unixTimestamp(id)); + customer.setTenantId(new TenantId(tenantId)); + customer.setTitle(title); + customer.setCountry(country); + customer.setState(state); + customer.setCity(city); + customer.setAddress(address); + customer.setAddress2(address2); + customer.setZip(zip); + customer.setPhone(phone); + customer.setEmail(email); + customer.setAdditionalInfo(additionalInfo); + return customer; + } + +} \ No newline at end of file diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/DashboardEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/DashboardEntity.java new file mode 100644 index 0000000000..12a12c1403 --- /dev/null +++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/DashboardEntity.java @@ -0,0 +1,221 @@ +/** + * 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.model.sql; + +import com.datastax.driver.core.utils.UUIDs; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Transient; +import com.fasterxml.jackson.databind.JsonNode; +import org.thingsboard.server.common.data.Dashboard; +import org.thingsboard.server.common.data.id.CustomerId; +import org.thingsboard.server.common.data.id.DashboardId; +import org.thingsboard.server.common.data.id.TenantId; +import org.thingsboard.server.dao.model.ModelConstants; +import org.thingsboard.server.dao.model.SearchTextEntity; + +import java.util.UUID; + +@Entity +@Table(name = ModelConstants.DASHBOARD_COLUMN_FAMILY_NAME) +public final class DashboardEntity implements SearchTextEntity { + + @Transient + private static final long serialVersionUID = -4838084363113078898L; + + @Id + @Column(name = ModelConstants.ID_PROPERTY) + private UUID id; + + @Column(name = ModelConstants.DASHBOARD_TENANT_ID_PROPERTY) + private UUID tenantId; + + @Column(name = ModelConstants.DASHBOARD_CUSTOMER_ID_PROPERTY) + private UUID customerId; + + @Column(name = ModelConstants.DASHBOARD_TITLE_PROPERTY) + private String title; + + @Column(name = ModelConstants.SEARCH_TEXT_PROPERTY) + private String searchText; + + @Column(name = ModelConstants.DASHBOARD_CONFIGURATION_PROPERTY) + private JsonNode configuration; + + public DashboardEntity() { + super(); + } + + public DashboardEntity(Dashboard dashboard) { + if (dashboard.getId() != null) { + this.id = dashboard.getId().getId(); + } + if (dashboard.getTenantId() != null) { + this.tenantId = dashboard.getTenantId().getId(); + } + if (dashboard.getCustomerId() != null) { + this.customerId = dashboard.getCustomerId().getId(); + } + this.title = dashboard.getTitle(); + this.configuration = dashboard.getConfiguration(); + } + + public UUID getId() { + return id; + } + + public void setId(UUID id) { + this.id = id; + } + + public UUID getTenantId() { + return tenantId; + } + + public void setTenantId(UUID tenantId) { + this.tenantId = tenantId; + } + + public UUID getCustomerId() { + return customerId; + } + + public void setCustomerId(UUID customerId) { + this.customerId = customerId; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public JsonNode getConfiguration() { + return configuration; + } + + public void setConfiguration(JsonNode configuration) { + this.configuration = configuration; + } + + @Override + public String getSearchTextSource() { + return title; + } + + @Override + public void setSearchText(String searchText) { + this.searchText = searchText; + } + + public String getSearchText() { + return searchText; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((configuration == null) ? 0 : configuration.hashCode()); + result = prime * result + ((customerId == null) ? 0 : customerId.hashCode()); + result = prime * result + ((id == null) ? 0 : id.hashCode()); + result = prime * result + ((searchText == null) ? 0 : searchText.hashCode()); + result = prime * result + ((tenantId == null) ? 0 : tenantId.hashCode()); + result = prime * result + ((title == null) ? 0 : title.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + DashboardEntity other = (DashboardEntity) obj; + if (configuration == null) { + if (other.configuration != null) + return false; + } else if (!configuration.equals(other.configuration)) + return false; + if (customerId == null) { + if (other.customerId != null) + return false; + } else if (!customerId.equals(other.customerId)) + return false; + if (id == null) { + if (other.id != null) + return false; + } else if (!id.equals(other.id)) + return false; + if (searchText == null) { + if (other.searchText != null) + return false; + } else if (!searchText.equals(other.searchText)) + return false; + if (tenantId == null) { + if (other.tenantId != null) + return false; + } else if (!tenantId.equals(other.tenantId)) + return false; + if (title == null) { + if (other.title != null) + return false; + } else if (!title.equals(other.title)) + return false; + return true; + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("DashboardEntity [id="); + builder.append(id); + builder.append(", tenantId="); + builder.append(tenantId); + builder.append(", customerId="); + builder.append(customerId); + builder.append(", title="); + builder.append(title); + builder.append(", searchText="); + builder.append(searchText); + builder.append(", configuration="); + builder.append(configuration); + builder.append("]"); + return builder.toString(); + } + + @Override + public Dashboard toData() { + Dashboard dashboard = new Dashboard(new DashboardId(id)); + dashboard.setCreatedTime(UUIDs.unixTimestamp(id)); + if (tenantId != null) { + dashboard.setTenantId(new TenantId(tenantId)); + } + if (customerId != null) { + dashboard.setCustomerId(new CustomerId(customerId)); + } + dashboard.setTitle(title); + dashboard.setConfiguration(configuration); + return dashboard; + } + +} \ No newline at end of file diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/DashboardInfoEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/DashboardInfoEntity.java new file mode 100644 index 0000000000..5fb052b55b --- /dev/null +++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/DashboardInfoEntity.java @@ -0,0 +1,199 @@ +/** + * 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.model.sql; + +import com.datastax.driver.core.utils.UUIDs; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Transient; +import org.thingsboard.server.common.data.DashboardInfo; +import org.thingsboard.server.common.data.id.CustomerId; +import org.thingsboard.server.common.data.id.DashboardId; +import org.thingsboard.server.common.data.id.TenantId; +import org.thingsboard.server.dao.model.ModelConstants; +import org.thingsboard.server.dao.model.SearchTextEntity; + +import java.util.UUID; + +@Entity +@Table(name = ModelConstants.DASHBOARD_COLUMN_FAMILY_NAME) +public class DashboardInfoEntity implements SearchTextEntity { + + @Transient + private static final long serialVersionUID = -5525675905528050250L; + + @Id + @Column(name = ModelConstants.ID_PROPERTY) + private UUID id; + + @Column(name = ModelConstants.DASHBOARD_TENANT_ID_PROPERTY) + private UUID tenantId; + + @Column(name = ModelConstants.DASHBOARD_CUSTOMER_ID_PROPERTY) + private UUID customerId; + + @Column(name = ModelConstants.DASHBOARD_TITLE_PROPERTY) + private String title; + + @Column(name = ModelConstants.SEARCH_TEXT_PROPERTY) + private String searchText; + + public DashboardInfoEntity() { + super(); + } + + public DashboardInfoEntity(DashboardInfo dashboardInfo) { + if (dashboardInfo.getId() != null) { + this.id = dashboardInfo.getId().getId(); + } + if (dashboardInfo.getTenantId() != null) { + this.tenantId = dashboardInfo.getTenantId().getId(); + } + if (dashboardInfo.getCustomerId() != null) { + this.customerId = dashboardInfo.getCustomerId().getId(); + } + this.title = dashboardInfo.getTitle(); + } + + public UUID getId() { + return id; + } + + public void setId(UUID id) { + this.id = id; + } + + public UUID getTenantId() { + return tenantId; + } + + public void setTenantId(UUID tenantId) { + this.tenantId = tenantId; + } + + public UUID getCustomerId() { + return customerId; + } + + public void setCustomerId(UUID customerId) { + this.customerId = customerId; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + @Override + public String getSearchTextSource() { + return title; + } + + @Override + public void setSearchText(String searchText) { + this.searchText = searchText; + } + + public String getSearchText() { + return searchText; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((customerId == null) ? 0 : customerId.hashCode()); + result = prime * result + ((id == null) ? 0 : id.hashCode()); + result = prime * result + ((searchText == null) ? 0 : searchText.hashCode()); + result = prime * result + ((tenantId == null) ? 0 : tenantId.hashCode()); + result = prime * result + ((title == null) ? 0 : title.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + DashboardInfoEntity other = (DashboardInfoEntity) obj; + if (customerId == null) { + if (other.customerId != null) + return false; + } else if (!customerId.equals(other.customerId)) + return false; + if (id == null) { + if (other.id != null) + return false; + } else if (!id.equals(other.id)) + return false; + if (searchText == null) { + if (other.searchText != null) + return false; + } else if (!searchText.equals(other.searchText)) + return false; + if (tenantId == null) { + if (other.tenantId != null) + return false; + } else if (!tenantId.equals(other.tenantId)) + return false; + if (title == null) { + if (other.title != null) + return false; + } else if (!title.equals(other.title)) + return false; + return true; + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("DashboardInfoEntity [id="); + builder.append(id); + builder.append(", tenantId="); + builder.append(tenantId); + builder.append(", customerId="); + builder.append(customerId); + builder.append(", title="); + builder.append(title); + builder.append(", searchText="); + builder.append(searchText); + builder.append("]"); + return builder.toString(); + } + + @Override + public DashboardInfo toData() { + DashboardInfo dashboardInfo = new DashboardInfo(new DashboardId(id)); + dashboardInfo.setCreatedTime(UUIDs.unixTimestamp(id)); + if (tenantId != null) { + dashboardInfo.setTenantId(new TenantId(tenantId)); + } + if (customerId != null) { + dashboardInfo.setCustomerId(new CustomerId(customerId)); + } + dashboardInfo.setTitle(title); + return dashboardInfo; + } + +} \ No newline at end of file diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/DeviceCredentialsEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/DeviceCredentialsEntity.java new file mode 100644 index 0000000000..de4399463d --- /dev/null +++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/DeviceCredentialsEntity.java @@ -0,0 +1,187 @@ +/** + * 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.model.sql; + +import com.datastax.driver.core.utils.UUIDs; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Transient; +import org.thingsboard.server.common.data.id.DeviceCredentialsId; +import org.thingsboard.server.common.data.id.DeviceId; +import org.thingsboard.server.common.data.security.DeviceCredentials; +import org.thingsboard.server.common.data.security.DeviceCredentialsType; +import org.thingsboard.server.dao.model.BaseEntity; +import org.thingsboard.server.dao.model.ModelConstants; + +import java.util.UUID; + +@Entity +@Table(name = ModelConstants.DEVICE_CREDENTIALS_COLUMN_FAMILY_NAME) +public final class DeviceCredentialsEntity implements BaseEntity { + + @Transient + private static final long serialVersionUID = -2512362753385470464L; + @Id + @Column(name = ModelConstants.ID_PROPERTY) + private UUID id; + + @Column(name = ModelConstants.DEVICE_CREDENTIALS_DEVICE_ID_PROPERTY) + private UUID deviceId; + + @Column(name = ModelConstants.DEVICE_CREDENTIALS_CREDENTIALS_TYPE_PROPERTY) + private DeviceCredentialsType credentialsType; + + @Column(name = ModelConstants.DEVICE_CREDENTIALS_CREDENTIALS_ID_PROPERTY) + private String credentialsId; + + @Column(name = ModelConstants.DEVICE_CREDENTIALS_CREDENTIALS_VALUE_PROPERTY) + private String credentialsValue; + + public DeviceCredentialsEntity() { + super(); + } + + public DeviceCredentialsEntity(DeviceCredentials deviceCredentials) { + if (deviceCredentials.getId() != null) { + this.id = deviceCredentials.getId().getId(); + } + if (deviceCredentials.getDeviceId() != null) { + this.deviceId = deviceCredentials.getDeviceId().getId(); + } + this.credentialsType = deviceCredentials.getCredentialsType(); + this.credentialsId = deviceCredentials.getCredentialsId(); + this.credentialsValue = deviceCredentials.getCredentialsValue(); + } + + public UUID getId() { + return id; + } + + public void setId(UUID id) { + this.id = id; + } + + public UUID getDeviceId() { + return deviceId; + } + + public void setDeviceId(UUID deviceId) { + this.deviceId = deviceId; + } + + public DeviceCredentialsType getCredentialsType() { + return credentialsType; + } + + public void setCredentialsType(DeviceCredentialsType credentialsType) { + this.credentialsType = credentialsType; + } + + public String getCredentialsId() { + return credentialsId; + } + + public void setCredentialsId(String credentialsId) { + this.credentialsId = credentialsId; + } + + public String getCredentialsValue() { + return credentialsValue; + } + + public void setCredentialsValue(String credentialsValue) { + this.credentialsValue = credentialsValue; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((credentialsId == null) ? 0 : credentialsId.hashCode()); + result = prime * result + ((credentialsType == null) ? 0 : credentialsType.hashCode()); + result = prime * result + ((credentialsValue == null) ? 0 : credentialsValue.hashCode()); + result = prime * result + ((deviceId == null) ? 0 : deviceId.hashCode()); + result = prime * result + ((id == null) ? 0 : id.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + DeviceCredentialsEntity other = (DeviceCredentialsEntity) obj; + if (credentialsId == null) { + if (other.credentialsId != null) + return false; + } else if (!credentialsId.equals(other.credentialsId)) + return false; + if (credentialsType != other.credentialsType) + return false; + if (credentialsValue == null) { + if (other.credentialsValue != null) + return false; + } else if (!credentialsValue.equals(other.credentialsValue)) + return false; + if (deviceId == null) { + if (other.deviceId != null) + return false; + } else if (!deviceId.equals(other.deviceId)) + return false; + if (id == null) { + if (other.id != null) + return false; + } else if (!id.equals(other.id)) + return false; + return true; + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("DeviceCredentialsEntity [id="); + builder.append(id); + builder.append(", deviceId="); + builder.append(deviceId); + builder.append(", credentialsType="); + builder.append(credentialsType); + builder.append(", credentialsId="); + builder.append(credentialsId); + builder.append(", credentialsValue="); + builder.append(credentialsValue); + builder.append("]"); + return builder.toString(); + } + + @Override + public DeviceCredentials toData() { + DeviceCredentials deviceCredentials = new DeviceCredentials(new DeviceCredentialsId(id)); + deviceCredentials.setCreatedTime(UUIDs.unixTimestamp(id)); + if (deviceId != null) { + deviceCredentials.setDeviceId(new DeviceId(deviceId)); + } + deviceCredentials.setCredentialsType(credentialsType); + deviceCredentials.setCredentialsId(credentialsId); + deviceCredentials.setCredentialsValue(credentialsValue); + return deviceCredentials; + } + +} \ No newline at end of file diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/DeviceEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/DeviceEntity.java new file mode 100644 index 0000000000..72c2dd5310 --- /dev/null +++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/DeviceEntity.java @@ -0,0 +1,213 @@ +/** + * 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.model.sql; + +import com.datastax.driver.core.utils.UUIDs; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Transient; +import com.fasterxml.jackson.databind.JsonNode; +import org.thingsboard.server.common.data.Device; +import org.thingsboard.server.common.data.id.CustomerId; +import org.thingsboard.server.common.data.id.DeviceId; +import org.thingsboard.server.common.data.id.TenantId; +import org.thingsboard.server.dao.model.ModelConstants; +import org.thingsboard.server.dao.model.SearchTextEntity; + +import java.util.UUID; + +@Entity +@Table(name = ModelConstants.DEVICE_COLUMN_FAMILY_NAME) +public final class DeviceEntity implements SearchTextEntity { + + @Transient + private static final long serialVersionUID = 8050086401213322856L; + + @Id + @Column(name = ModelConstants.ID_PROPERTY) + private UUID id; + + @Column(name = ModelConstants.DEVICE_TENANT_ID_PROPERTY) + private UUID tenantId; + + @Column(name = ModelConstants.DEVICE_CUSTOMER_ID_PROPERTY) + private UUID customerId; + + @Column(name = ModelConstants.DEVICE_NAME_PROPERTY) + private String name; + + @Column(name = ModelConstants.SEARCH_TEXT_PROPERTY) + private String searchText; + + @Column(name = ModelConstants.DEVICE_ADDITIONAL_INFO_PROPERTY) + private JsonNode additionalInfo; + + public DeviceEntity() { + super(); + } + + public DeviceEntity(Device device) { + if (device.getId() != null) { + this.id = device.getId().getId(); + } + if (device.getTenantId() != null) { + this.tenantId = device.getTenantId().getId(); + } + if (device.getCustomerId() != null) { + this.customerId = device.getCustomerId().getId(); + } + this.name = device.getName(); + this.additionalInfo = device.getAdditionalInfo(); + } + + public UUID getId() { + return id; + } + + public void setId(UUID id) { + this.id = id; + } + + public UUID getTenantId() { + return tenantId; + } + + public void setTenantId(UUID tenantId) { + this.tenantId = tenantId; + } + + public UUID getCustomerId() { + return customerId; + } + + public void setCustomerId(UUID customerId) { + this.customerId = customerId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public JsonNode getAdditionalInfo() { + return additionalInfo; + } + + public void setAdditionalInfo(JsonNode additionalInfo) { + this.additionalInfo = additionalInfo; + } + + @Override + public String getSearchTextSource() { + return name; + } + + @Override + public void setSearchText(String searchText) { + this.searchText = searchText; + } + + public String getSearchText() { + return searchText; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((additionalInfo == null) ? 0 : additionalInfo.hashCode()); + result = prime * result + ((customerId == null) ? 0 : customerId.hashCode()); + result = prime * result + ((id == null) ? 0 : id.hashCode()); + result = prime * result + ((name == null) ? 0 : name.hashCode()); + result = prime * result + ((tenantId == null) ? 0 : tenantId.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + DeviceEntity other = (DeviceEntity) obj; + if (additionalInfo == null) { + if (other.additionalInfo != null) + return false; + } else if (!additionalInfo.equals(other.additionalInfo)) + return false; + if (customerId == null) { + if (other.customerId != null) + return false; + } else if (!customerId.equals(other.customerId)) + return false; + if (id == null) { + if (other.id != null) + return false; + } else if (!id.equals(other.id)) + return false; + if (name == null) { + if (other.name != null) + return false; + } else if (!name.equals(other.name)) + return false; + if (tenantId == null) { + if (other.tenantId != null) + return false; + } else if (!tenantId.equals(other.tenantId)) + return false; + return true; + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("DeviceEntity [id="); + builder.append(id); + builder.append(", tenantId="); + builder.append(tenantId); + builder.append(", customerId="); + builder.append(customerId); + builder.append(", name="); + builder.append(name); + builder.append(", additionalInfo="); + builder.append(additionalInfo); + builder.append("]"); + return builder.toString(); + } + + @Override + public Device toData() { + Device device = new Device(new DeviceId(id)); + device.setCreatedTime(UUIDs.unixTimestamp(id)); + if (tenantId != null) { + device.setTenantId(new TenantId(tenantId)); + } + if (customerId != null) { + device.setCustomerId(new CustomerId(customerId)); + } + device.setName(name); + device.setAdditionalInfo(additionalInfo); + return device; + } + +} \ No newline at end of file diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/EventEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/EventEntity.java new file mode 100644 index 0000000000..4618f42b13 --- /dev/null +++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/EventEntity.java @@ -0,0 +1,119 @@ +/** + * 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.model.sql; + +import com.datastax.driver.core.utils.UUIDs; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Transient; +import com.fasterxml.jackson.databind.JsonNode; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.thingsboard.server.common.data.EntityType; +import org.thingsboard.server.common.data.Event; +import org.thingsboard.server.common.data.id.*; +import org.thingsboard.server.dao.model.BaseEntity; +import org.thingsboard.server.dao.model.ModelConstants; + +import java.util.UUID; + +@Data +@NoArgsConstructor +@Entity +@Table(name = ModelConstants.DEVICE_COLUMN_FAMILY_NAME) +public class EventEntity implements BaseEntity { + + @Transient + private static final long serialVersionUID = -5717830061727466727L; + + @Column(name = ModelConstants.ID_PROPERTY) + private UUID id; + + @Id + @Column(name = ModelConstants.EVENT_TENANT_ID_PROPERTY) + private UUID tenantId; + + @Column(name = ModelConstants.EVENT_ENTITY_TYPE_PROPERTY) + private EntityType entityType; + + @Column(name = ModelConstants.EVENT_ENTITY_ID_PROPERTY) + private UUID entityId; + + @Column(name = ModelConstants.EVENT_TYPE_PROPERTY) + private String eventType; + + @Column(name = ModelConstants.EVENT_UID_PROPERTY) + private String eventUId; + + @Column(name = ModelConstants.EVENT_BODY_PROPERTY) + private JsonNode body; + + public EventEntity(Event event) { + if (event.getId() != null) { + this.id = event.getId().getId(); + } + if (event.getTenantId() != null) { + this.tenantId = event.getTenantId().getId(); + } + if (event.getEntityId() != null) { + this.entityType = event.getEntityId().getEntityType(); + this.entityId = event.getEntityId().getId(); + } + this.eventType = event.getType(); + this.eventUId = event.getUid(); + this.body = event.getBody(); + } + + @Override + public UUID getId() { + return id; + } + + @Override + public void setId(UUID id) { + this.id = id; + } + + @Override + public Event toData() { + Event event = new Event(new EventId(id)); + event.setCreatedTime(UUIDs.unixTimestamp(id)); + event.setTenantId(new TenantId(tenantId)); + switch (entityType) { + case TENANT: + event.setEntityId(new TenantId(entityId)); + break; + case DEVICE: + event.setEntityId(new DeviceId(entityId)); + break; + case CUSTOMER: + event.setEntityId(new CustomerId(entityId)); + break; + case RULE: + event.setEntityId(new RuleId(entityId)); + break; + case PLUGIN: + event.setEntityId(new PluginId(entityId)); + break; + } + event.setBody(body); + event.setType(eventType); + event.setUid(eventUId); + return event; + } +} diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/PluginMetaDataEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/PluginMetaDataEntity.java new file mode 100644 index 0000000000..fc58f90736 --- /dev/null +++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/PluginMetaDataEntity.java @@ -0,0 +1,216 @@ +/** + * 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.model.sql; + +import com.datastax.driver.core.utils.UUIDs; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Transient; +import com.fasterxml.jackson.databind.JsonNode; +import org.thingsboard.server.common.data.id.PluginId; +import org.thingsboard.server.common.data.id.TenantId; +import org.thingsboard.server.common.data.plugin.ComponentLifecycleState; +import org.thingsboard.server.common.data.plugin.PluginMetaData; +import org.thingsboard.server.dao.model.ModelConstants; +import org.thingsboard.server.dao.model.SearchTextEntity; + +import java.util.Objects; +import java.util.UUID; + +@Entity +@Table(name = ModelConstants.PLUGIN_COLUMN_FAMILY_NAME) +public class PluginMetaDataEntity implements SearchTextEntity { + + @Transient + private static final long serialVersionUID = -6164321050824823149L; + @Id + @Column(name = ModelConstants.ID_PROPERTY) + private UUID id; + + @Column(name = ModelConstants.PLUGIN_API_TOKEN_PROPERTY) + private String apiToken; + + @Column(name = ModelConstants.PLUGIN_TENANT_ID_PROPERTY) + private UUID tenantId; + + @Column(name = ModelConstants.PLUGIN_NAME_PROPERTY) + private String name; + + @Column(name = ModelConstants.PLUGIN_CLASS_PROPERTY) + private String clazz; + + @Column(name = ModelConstants.PLUGIN_ACCESS_PROPERTY) + private boolean publicAccess; + + @Column(name = ModelConstants.PLUGIN_STATE_PROPERTY) + private ComponentLifecycleState state; + + @Column(name = ModelConstants.PLUGIN_CONFIGURATION_PROPERTY) + private JsonNode configuration; + + @Column(name = ModelConstants.SEARCH_TEXT_PROPERTY) + private String searchText; + + @Column(name = ModelConstants.ADDITIONAL_INFO_PROPERTY) + private JsonNode additionalInfo; + + public PluginMetaDataEntity() { + } + + public PluginMetaDataEntity(PluginMetaData pluginMetaData) { + if (pluginMetaData.getId() != null) { + this.id = pluginMetaData.getId().getId(); + } + this.tenantId = pluginMetaData.getTenantId().getId(); + this.apiToken = pluginMetaData.getApiToken(); + this.clazz = pluginMetaData.getClazz(); + this.name = pluginMetaData.getName(); + this.publicAccess = pluginMetaData.isPublicAccess(); + this.state = pluginMetaData.getState(); + this.configuration = pluginMetaData.getConfiguration(); + this.searchText = pluginMetaData.getName(); + this.additionalInfo = pluginMetaData.getAdditionalInfo(); + } + + @Override + public String getSearchTextSource() { + return searchText; + } + + @Override + public void setSearchText(String searchText) { + this.searchText = searchText; + } + + @Override + public UUID getId() { + return id; + } + + @Override + public void setId(UUID id) { + this.id = id; + } + + public String getApiToken() { + return apiToken; + } + + public void setApiToken(String apiToken) { + this.apiToken = apiToken; + } + + public UUID getTenantId() { + return tenantId; + } + + public void setTenantId(UUID tenantId) { + this.tenantId = tenantId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getClazz() { + return clazz; + } + + public void setClazz(String clazz) { + this.clazz = clazz; + } + + public JsonNode getConfiguration() { + return configuration; + } + + public void setConfiguration(JsonNode configuration) { + this.configuration = configuration; + } + + public boolean isPublicAccess() { + return publicAccess; + } + + public void setPublicAccess(boolean publicAccess) { + this.publicAccess = publicAccess; + } + + public ComponentLifecycleState getState() { + return state; + } + + public void setState(ComponentLifecycleState state) { + this.state = state; + } + + public String getSearchText() { + return searchText; + } + + public JsonNode getAdditionalInfo() { + return additionalInfo; + } + + public void setAdditionalInfo(JsonNode additionalInfo) { + this.additionalInfo = additionalInfo; + } + + @Override + public PluginMetaData toData() { + PluginMetaData data = new PluginMetaData(new PluginId(id)); + data.setTenantId(new TenantId(tenantId)); + data.setCreatedTime(UUIDs.unixTimestamp(id)); + data.setName(name); + data.setConfiguration(configuration); + data.setClazz(clazz); + data.setPublicAccess(publicAccess); + data.setState(state); + data.setApiToken(apiToken); + data.setAdditionalInfo(additionalInfo); + return data; + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + PluginMetaDataEntity entity = (PluginMetaDataEntity) o; + return Objects.equals(id, entity.id) && Objects.equals(apiToken, entity.apiToken) && Objects.equals(tenantId, entity.tenantId) + && Objects.equals(name, entity.name) && Objects.equals(clazz, entity.clazz) && Objects.equals(state, entity.state) + && Objects.equals(configuration, entity.configuration) + && Objects.equals(searchText, entity.searchText); + } + + @Override + public int hashCode() { + return Objects.hash(id, apiToken, tenantId, name, clazz, state, configuration, searchText); + } + + @Override + public String toString() { + return "PluginMetaDataEntity{" + "id=" + id + ", apiToken='" + apiToken + '\'' + ", tenantId=" + tenantId + ", name='" + name + '\'' + ", clazz='" + + clazz + '\'' + ", state=" + state + ", configuration=" + configuration + ", searchText='" + searchText + '\'' + '}'; + } +} diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/RuleMetaDataEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/RuleMetaDataEntity.java new file mode 100644 index 0000000000..506b74abc3 --- /dev/null +++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/RuleMetaDataEntity.java @@ -0,0 +1,228 @@ +/** + * 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.model.sql; + +import com.datastax.driver.core.utils.UUIDs; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Transient; +import com.fasterxml.jackson.databind.JsonNode; +import org.thingsboard.server.common.data.id.RuleId; +import org.thingsboard.server.common.data.id.TenantId; +import org.thingsboard.server.common.data.plugin.ComponentLifecycleState; +import org.thingsboard.server.common.data.rule.RuleMetaData; +import org.thingsboard.server.dao.DaoUtil; +import org.thingsboard.server.dao.model.ModelConstants; +import org.thingsboard.server.dao.model.SearchTextEntity; + +import java.util.Objects; +import java.util.UUID; + +@Entity +@Table(name = ModelConstants.RULE_COLUMN_FAMILY_NAME) +public class RuleMetaDataEntity implements SearchTextEntity { + + @Transient + private static final long serialVersionUID = -1506905644259463884L; + @Id + @Column(name = ModelConstants.ID_PROPERTY) + private UUID id; + @Column(name = ModelConstants.RULE_TENANT_ID_PROPERTY) + private UUID tenantId; + @Column(name = ModelConstants.RULE_NAME_PROPERTY) + private String name; + @Column(name = ModelConstants.RULE_STATE_PROPERTY) + private ComponentLifecycleState state; + @Column(name = ModelConstants.RULE_WEIGHT_PROPERTY) + private int weight; + @Column(name = ModelConstants.SEARCH_TEXT_PROPERTY) + private String searchText; + @Column(name = ModelConstants.RULE_PLUGIN_TOKEN_PROPERTY) + private String pluginToken; + @Column(name = ModelConstants.RULE_FILTERS) + private JsonNode filters; + @Column(name = ModelConstants.RULE_PROCESSOR) + private JsonNode processor; + @Column(name = ModelConstants.RULE_ACTION) + private JsonNode action; + @Column(name = ModelConstants.ADDITIONAL_INFO_PROPERTY) + private JsonNode additionalInfo; + + public RuleMetaDataEntity() { + } + + public RuleMetaDataEntity(RuleMetaData rule) { + if (rule.getId() != null) { + this.id = rule.getUuidId(); + } + this.tenantId = DaoUtil.getId(rule.getTenantId()); + this.name = rule.getName(); + this.pluginToken = rule.getPluginToken(); + this.state = rule.getState(); + this.weight = rule.getWeight(); + this.searchText = rule.getName(); + this.filters = rule.getFilters(); + this.processor = rule.getProcessor(); + this.action = rule.getAction(); + this.additionalInfo = rule.getAdditionalInfo(); + } + + @Override + public String getSearchTextSource() { + return searchText; + } + + @Override + public void setSearchText(String searchText) { + this.searchText = searchText; + } + + @Override + public UUID getId() { + return id; + } + + @Override + public void setId(UUID id) { + this.id = id; + } + + public UUID getTenantId() { + return tenantId; + } + + public void setTenantId(UUID tenantId) { + this.tenantId = tenantId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public ComponentLifecycleState getState() { + return state; + } + + public void setState(ComponentLifecycleState state) { + this.state = state; + } + + public int getWeight() { + return weight; + } + + public void setWeight(int weight) { + this.weight = weight; + } + + public String getPluginToken() { + return pluginToken; + } + + public void setPluginToken(String pluginToken) { + this.pluginToken = pluginToken; + } + + public String getSearchText() { + return searchText; + } + + public JsonNode getFilters() { + return filters; + } + + public void setFilters(JsonNode filters) { + this.filters = filters; + } + + public JsonNode getProcessor() { + return processor; + } + + public void setProcessor(JsonNode processor) { + this.processor = processor; + } + + public JsonNode getAction() { + return action; + } + + public void setAction(JsonNode action) { + this.action = action; + } + + public JsonNode getAdditionalInfo() { + return additionalInfo; + } + + public void setAdditionalInfo(JsonNode additionalInfo) { + this.additionalInfo = additionalInfo; + } + + @Override + public RuleMetaData toData() { + RuleMetaData rule = new RuleMetaData(new RuleId(id)); + rule.setTenantId(new TenantId(tenantId)); + rule.setName(name); + rule.setState(state); + rule.setWeight(weight); + rule.setCreatedTime(UUIDs.unixTimestamp(id)); + rule.setPluginToken(pluginToken); + rule.setFilters(filters); + rule.setProcessor(processor); + rule.setAction(action); + rule.setAdditionalInfo(additionalInfo); + return rule; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + RuleMetaDataEntity that = (RuleMetaDataEntity) o; + return weight == that.weight && + Objects.equals(id, that.id) && + Objects.equals(tenantId, that.tenantId) && + Objects.equals(name, that.name) && + Objects.equals(pluginToken, that.pluginToken) && + Objects.equals(state, that.state) && + Objects.equals(searchText, that.searchText); + } + + @Override + public int hashCode() { + return Objects.hash(id, tenantId, name, pluginToken, state, weight, searchText); + } + + @Override + public String toString() { + return "RuleMetaDataEntity{" + + "id=" + id + + ", tenantId=" + tenantId + + ", name='" + name + '\'' + + ", pluginToken='" + pluginToken + '\'' + + ", state='" + state + '\'' + + ", weight=" + weight + + ", searchText='" + searchText + '\'' + + '}'; + } +} diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/TenantEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/TenantEntity.java new file mode 100644 index 0000000000..06b6131799 --- /dev/null +++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/TenantEntity.java @@ -0,0 +1,351 @@ +/** + * 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.model.sql; + +import com.datastax.driver.core.utils.UUIDs; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Transient; +import org.thingsboard.server.common.data.Tenant; +import org.thingsboard.server.common.data.id.TenantId; +import org.thingsboard.server.dao.model.ModelConstants; +import org.thingsboard.server.dao.model.SearchTextEntity; +import com.fasterxml.jackson.databind.JsonNode; + +import java.util.UUID; + +@Entity +@Table(name = ModelConstants.TENANT_COLUMN_FAMILY_NAME) +public final class TenantEntity implements SearchTextEntity { + + @Transient + private static final long serialVersionUID = -4330655990232136337L; + + @Id + @Column(name = ModelConstants.ID_PROPERTY) + private UUID id; + + @Column(name = ModelConstants.TENANT_TITLE_PROPERTY) + private String title; + + @Column(name = ModelConstants.SEARCH_TEXT_PROPERTY) + private String searchText; + + @Column(name = ModelConstants.TENANT_REGION_PROPERTY) + private String region; + + @Column(name = ModelConstants.COUNTRY_PROPERTY) + private String country; + + @Column(name = ModelConstants.STATE_PROPERTY) + private String state; + + @Column(name = ModelConstants.CITY_PROPERTY) + private String city; + + @Column(name = ModelConstants.ADDRESS_PROPERTY) + private String address; + + @Column(name = ModelConstants.ADDRESS2_PROPERTY) + private String address2; + + @Column(name = ModelConstants.ZIP_PROPERTY) + private String zip; + + @Column(name = ModelConstants.PHONE_PROPERTY) + private String phone; + + @Column(name = ModelConstants.EMAIL_PROPERTY) + private String email; + + @Column(name = ModelConstants.TENANT_ADDITIONAL_INFO_PROPERTY) + private JsonNode additionalInfo; + + public TenantEntity() { + super(); + } + + public TenantEntity(Tenant tenant) { + if (tenant.getId() != null) { + this.id = tenant.getId().getId(); + } + this.title = tenant.getTitle(); + this.region = tenant.getRegion(); + this.country = tenant.getCountry(); + this.state = tenant.getState(); + this.city = tenant.getCity(); + this.address = tenant.getAddress(); + this.address2 = tenant.getAddress2(); + this.zip = tenant.getZip(); + this.phone = tenant.getPhone(); + this.email = tenant.getEmail(); + this.additionalInfo = tenant.getAdditionalInfo(); + } + + public UUID getId() { + return id; + } + + public void setId(UUID id) { + this.id = id; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getRegion() { + return region; + } + + public void setRegion(String region) { + this.region = region; + } + + public String getCountry() { + return country; + } + + public void setCountry(String country) { + this.country = country; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + public String getCity() { + return city; + } + + public void setCity(String city) { + this.city = city; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getAddress2() { + return address2; + } + + public void setAddress2(String address2) { + this.address2 = address2; + } + + public String getZip() { + return zip; + } + + public void setZip(String zip) { + this.zip = zip; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public JsonNode getAdditionalInfo() { + return additionalInfo; + } + + public void setAdditionalInfo(JsonNode additionalInfo) { + this.additionalInfo = additionalInfo; + } + + @Override + public String getSearchTextSource() { + return title; + } + + @Override + public void setSearchText(String searchText) { + this.searchText = searchText; + } + + public String getSearchText() { + return searchText; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((additionalInfo == null) ? 0 : additionalInfo.hashCode()); + result = prime * result + ((address == null) ? 0 : address.hashCode()); + result = prime * result + ((address2 == null) ? 0 : address2.hashCode()); + result = prime * result + ((city == null) ? 0 : city.hashCode()); + result = prime * result + ((country == null) ? 0 : country.hashCode()); + result = prime * result + ((email == null) ? 0 : email.hashCode()); + result = prime * result + ((id == null) ? 0 : id.hashCode()); + result = prime * result + ((phone == null) ? 0 : phone.hashCode()); + result = prime * result + ((region == null) ? 0 : region.hashCode()); + result = prime * result + ((state == null) ? 0 : state.hashCode()); + result = prime * result + ((title == null) ? 0 : title.hashCode()); + result = prime * result + ((zip == null) ? 0 : zip.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + TenantEntity other = (TenantEntity) obj; + if (additionalInfo == null) { + if (other.additionalInfo != null) + return false; + } else if (!additionalInfo.equals(other.additionalInfo)) + return false; + if (address == null) { + if (other.address != null) + return false; + } else if (!address.equals(other.address)) + return false; + if (address2 == null) { + if (other.address2 != null) + return false; + } else if (!address2.equals(other.address2)) + return false; + if (city == null) { + if (other.city != null) + return false; + } else if (!city.equals(other.city)) + return false; + if (country == null) { + if (other.country != null) + return false; + } else if (!country.equals(other.country)) + return false; + if (email == null) { + if (other.email != null) + return false; + } else if (!email.equals(other.email)) + return false; + if (id == null) { + if (other.id != null) + return false; + } else if (!id.equals(other.id)) + return false; + if (phone == null) { + if (other.phone != null) + return false; + } else if (!phone.equals(other.phone)) + return false; + if (region == null) { + if (other.region != null) + return false; + } else if (!region.equals(other.region)) + return false; + if (state == null) { + if (other.state != null) + return false; + } else if (!state.equals(other.state)) + return false; + if (title == null) { + if (other.title != null) + return false; + } else if (!title.equals(other.title)) + return false; + if (zip == null) { + if (other.zip != null) + return false; + } else if (!zip.equals(other.zip)) + return false; + return true; + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("TenantEntity [id="); + builder.append(id); + builder.append(", title="); + builder.append(title); + builder.append(", region="); + builder.append(region); + builder.append(", country="); + builder.append(country); + builder.append(", state="); + builder.append(state); + builder.append(", city="); + builder.append(city); + builder.append(", address="); + builder.append(address); + builder.append(", address2="); + builder.append(address2); + builder.append(", zip="); + builder.append(zip); + builder.append(", phone="); + builder.append(phone); + builder.append(", email="); + builder.append(email); + builder.append(", additionalInfo="); + builder.append(additionalInfo); + builder.append("]"); + return builder.toString(); + } + + @Override + public Tenant toData() { + Tenant tenant = new Tenant(new TenantId(id)); + tenant.setCreatedTime(UUIDs.unixTimestamp(id)); + tenant.setTitle(title); + tenant.setRegion(region); + tenant.setCountry(country); + tenant.setState(state); + tenant.setCity(city); + tenant.setAddress(address); + tenant.setAddress2(address2); + tenant.setZip(zip); + tenant.setPhone(phone); + tenant.setEmail(email); + tenant.setAdditionalInfo(additionalInfo); + return tenant; + } + + +} \ No newline at end of file diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/UserCredentialsEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/UserCredentialsEntity.java new file mode 100644 index 0000000000..42d4e92762 --- /dev/null +++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/UserCredentialsEntity.java @@ -0,0 +1,189 @@ +/** + * 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.model.sql; + +import com.datastax.driver.core.utils.UUIDs; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Transient; +import org.thingsboard.server.common.data.id.UserCredentialsId; +import org.thingsboard.server.common.data.id.UserId; +import org.thingsboard.server.common.data.security.UserCredentials; +import org.thingsboard.server.dao.model.BaseEntity; +import org.thingsboard.server.dao.model.ModelConstants; + +import java.util.UUID; + +@Entity +@Table(name = ModelConstants.USER_CREDENTIALS_COLUMN_FAMILY_NAME) +public final class UserCredentialsEntity implements BaseEntity { + + @Transient + private static final long serialVersionUID = 1348221414123438374L; + + @Id + @Column(name = ModelConstants.ID_PROPERTY) + private UUID id; + + @Column(name = ModelConstants.USER_CREDENTIALS_USER_ID_PROPERTY) + private UUID userId; + + @Column(name = ModelConstants.USER_CREDENTIALS_ENABLED_PROPERTY) + private boolean enabled; + + @Column(name = ModelConstants.USER_CREDENTIALS_PASSWORD_PROPERTY) + private String password; + + @Column(name = ModelConstants.USER_CREDENTIALS_ACTIVATE_TOKEN_PROPERTY) + private String activateToken; + + @Column(name = ModelConstants.USER_CREDENTIALS_RESET_TOKEN_PROPERTY) + private String resetToken; + + public UserCredentialsEntity() { + super(); + } + + public UserCredentialsEntity(UserCredentials userCredentials) { + if (userCredentials.getId() != null) { + this.id = userCredentials.getId().getId(); + } + if (userCredentials.getUserId() != null) { + this.userId = userCredentials.getUserId().getId(); + } + this.enabled = userCredentials.isEnabled(); + this.password = userCredentials.getPassword(); + this.activateToken = userCredentials.getActivateToken(); + this.resetToken = userCredentials.getResetToken(); + } + + public UUID getId() { + return id; + } + + public void setId(UUID id) { + this.id = id; + } + + public UUID getUserId() { + return userId; + } + + public void setUserId(UUID userId) { + this.userId = userId; + } + + public boolean isEnabled() { + return enabled; + } + + public void setEnabled(boolean enabled) { + this.enabled = enabled; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getActivateToken() { + return activateToken; + } + + public void setActivateToken(String activateToken) { + this.activateToken = activateToken; + } + + public String getResetToken() { + return resetToken; + } + + public void setResetToken(String resetToken) { + this.resetToken = resetToken; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((activateToken == null) ? 0 : activateToken.hashCode()); + result = prime * result + (enabled ? 1231 : 1237); + result = prime * result + ((id == null) ? 0 : id.hashCode()); + result = prime * result + ((password == null) ? 0 : password.hashCode()); + result = prime * result + ((resetToken == null) ? 0 : resetToken.hashCode()); + result = prime * result + ((userId == null) ? 0 : userId.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + UserCredentialsEntity other = (UserCredentialsEntity) obj; + if (activateToken == null) { + if (other.activateToken != null) + return false; + } else if (!activateToken.equals(other.activateToken)) + return false; + if (enabled != other.enabled) + return false; + if (id == null) { + if (other.id != null) + return false; + } else if (!id.equals(other.id)) + return false; + if (password == null) { + if (other.password != null) + return false; + } else if (!password.equals(other.password)) + return false; + if (resetToken == null) { + if (other.resetToken != null) + return false; + } else if (!resetToken.equals(other.resetToken)) + return false; + if (userId == null) { + if (other.userId != null) + return false; + } else if (!userId.equals(other.userId)) + return false; + return true; + } + + @Override + public UserCredentials toData() { + UserCredentials userCredentials = new UserCredentials(new UserCredentialsId(id)); + userCredentials.setCreatedTime(UUIDs.unixTimestamp(id)); + if (userId != null) { + userCredentials.setUserId(new UserId(userId)); + } + userCredentials.setEnabled(enabled); + userCredentials.setPassword(password); + userCredentials.setActivateToken(activateToken); + userCredentials.setResetToken(resetToken); + return userCredentials; + } + +} \ No newline at end of file diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/UserEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/UserEntity.java new file mode 100644 index 0000000000..a02341d204 --- /dev/null +++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/UserEntity.java @@ -0,0 +1,274 @@ +/** + * 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.model.sql; + +import com.datastax.driver.core.utils.UUIDs; +import com.fasterxml.jackson.databind.JsonNode; +import org.thingsboard.server.common.data.User; +import org.thingsboard.server.common.data.id.CustomerId; +import org.thingsboard.server.common.data.id.TenantId; +import org.thingsboard.server.common.data.id.UserId; +import org.thingsboard.server.common.data.security.Authority; +import org.thingsboard.server.dao.model.SearchTextEntity; +import org.thingsboard.server.dao.model.ModelConstants; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Transient; +import java.util.UUID; + +/** + * @author Valerii Sosliuk + */ +@Entity +@Table(name= ModelConstants.USER_COLUMN_FAMILY_NAME) +public class UserEntity implements SearchTextEntity { + + @Transient + private static final long serialVersionUID = 4349485207981226785L; + + @Id + @Column(name=ModelConstants.ID_PROPERTY) + private UUID id; + + @Column(name = ModelConstants.USER_TENANT_ID_PROPERTY) + private UUID tenantId; + + @Column(name = ModelConstants.USER_CUSTOMER_ID_PROPERTY) + private UUID customerId; + + @Column(name = ModelConstants.USER_AUTHORITY_PROPERTY) + private Authority authority; + + @Column(name = ModelConstants.USER_EMAIL_PROPERTY) + private String email; + + @Column(name = ModelConstants.SEARCH_TEXT_PROPERTY) + private String searchText; + + @Column(name = ModelConstants.USER_FIRST_NAME_PROPERTY) + private String firstName; + + @Column(name = ModelConstants.USER_LAST_NAME_PROPERTY) + private String lastName; + + @Column(name = ModelConstants.USER_ADDITIONAL_INFO_PROPERTY) + private JsonNode additionalInfo; + + public UserEntity(User user) { + if (user.getId() != null) { + this.id = user.getId().getId(); + } + this.authority = user.getAuthority(); + if (user.getTenantId() != null) { + this.tenantId = user.getTenantId().getId(); + } + if (user.getCustomerId() != null) { + this.customerId = user.getCustomerId().getId(); + } + this.email = user.getEmail(); + this.firstName = user.getFirstName(); + this.lastName = user.getLastName(); + this.additionalInfo = user.getAdditionalInfo(); + } + + public String getSearchText() { + return searchText; + } + + @Override + public String getSearchTextSource() { + return searchText; + } + + @Override + public void setSearchText(String searchText) { + this.searchText = searchText; + } + + @Override + public UUID getId() { + return id; + } + + @Override + public void setId(UUID id) { + this.id = id; + } + + public UUID getTenantId() { + return tenantId; + } + + public void setTenantId(UUID tenantId) { + this.tenantId = tenantId; + } + + public UUID getCustomerId() { + return customerId; + } + + public void setCustomerId(UUID customerId) { + this.customerId = customerId; + } + + public Authority getAuthority() { + return authority; + } + + public void setAuthority(Authority authority) { + this.authority = authority; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public JsonNode getAdditionalInfo() { + return additionalInfo; + } + + public void setAdditionalInfo(JsonNode additionalInfo) { + this.additionalInfo = additionalInfo; + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("UserEntity [id="); + builder.append(id); + builder.append(", authority="); + builder.append(authority); + builder.append(", tenantId="); + builder.append(tenantId); + builder.append(", customerId="); + builder.append(customerId); + builder.append(", email="); + builder.append(email); + builder.append(", firstName="); + builder.append(firstName); + builder.append(", lastName="); + builder.append(lastName); + builder.append(", additionalInfo="); + builder.append(additionalInfo); + builder.append("]"); + return builder.toString(); + } + + @Override + public User toData() { + User user = new User(new UserId(id)); + user.setCreatedTime(UUIDs.unixTimestamp(id)); + user.setAuthority(authority); + if (tenantId != null) { + user.setTenantId(new TenantId(tenantId)); + } + if (customerId != null) { + user.setCustomerId(new CustomerId(customerId)); + } + user.setEmail(email); + user.setFirstName(firstName); + user.setLastName(lastName); + user.setAdditionalInfo(additionalInfo); + return user; + } + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((additionalInfo == null) ? 0 : additionalInfo.hashCode()); + result = prime * result + ((authority == null) ? 0 : authority.hashCode()); + result = prime * result + ((customerId == null) ? 0 : customerId.hashCode()); + result = prime * result + ((email == null) ? 0 : email.hashCode()); + result = prime * result + ((firstName == null) ? 0 : firstName.hashCode()); + result = prime * result + ((id == null) ? 0 : id.hashCode()); + result = prime * result + ((lastName == null) ? 0 : lastName.hashCode()); + result = prime * result + ((tenantId == null) ? 0 : tenantId.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + UserEntity other = (UserEntity) obj; + if (additionalInfo == null) { + if (other.additionalInfo != null) + return false; + } else if (!additionalInfo.equals(other.additionalInfo)) + return false; + if (authority != other.authority) + return false; + if (customerId == null) { + if (other.customerId != null) + return false; + } else if (!customerId.equals(other.customerId)) + return false; + if (email == null) { + if (other.email != null) + return false; + } else if (!email.equals(other.email)) + return false; + if (firstName == null) { + if (other.firstName != null) + return false; + } else if (!firstName.equals(other.firstName)) + return false; + if (id == null) { + if (other.id != null) + return false; + } else if (!id.equals(other.id)) + return false; + if (lastName == null) { + if (other.lastName != null) + return false; + } else if (!lastName.equals(other.lastName)) + return false; + if (tenantId == null) { + if (other.tenantId != null) + return false; + } else if (!tenantId.equals(other.tenantId)) + return false; + return true; + } + +} diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/WidgetTypeEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/WidgetTypeEntity.java new file mode 100644 index 0000000000..6c1b949720 --- /dev/null +++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/WidgetTypeEntity.java @@ -0,0 +1,183 @@ +/** + * 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.model.sql; + +import com.datastax.driver.core.utils.UUIDs; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Transient; + +import com.datastax.driver.mapping.annotations.PartitionKey; +import com.fasterxml.jackson.databind.JsonNode; +import org.thingsboard.server.common.data.id.TenantId; +import org.thingsboard.server.common.data.id.WidgetTypeId; +import org.thingsboard.server.common.data.widget.WidgetType; +import org.thingsboard.server.dao.model.BaseEntity; +import org.thingsboard.server.dao.model.ModelConstants; + +import java.util.UUID; + +@Entity +@Table(name = ModelConstants.WIDGET_TYPE_COLUMN_FAMILY_NAME) +public final class WidgetTypeEntity implements BaseEntity { + + @Transient + private static final long serialVersionUID = -5436279069884988630L; + + @Id + @Column(name = ModelConstants.ID_PROPERTY) + private UUID id; + + @PartitionKey(value = 1) + @Column(name = ModelConstants.WIDGET_TYPE_TENANT_ID_PROPERTY) + private UUID tenantId; + + @PartitionKey(value = 2) + @Column(name = ModelConstants.WIDGET_TYPE_BUNDLE_ALIAS_PROPERTY) + private String bundleAlias; + + @Column(name = ModelConstants.WIDGET_TYPE_ALIAS_PROPERTY) + private String alias; + + @Column(name = ModelConstants.WIDGET_TYPE_NAME_PROPERTY) + private String name; + + @Column(name = ModelConstants.WIDGET_TYPE_DESCRIPTOR_PROPERTY) + private JsonNode descriptor; + + public WidgetTypeEntity() { + super(); + } + + public WidgetTypeEntity(WidgetType widgetType) { + if (widgetType.getId() != null) { + this.id = widgetType.getId().getId(); + } + if (widgetType.getTenantId() != null) { + this.tenantId = widgetType.getTenantId().getId(); + } + this.bundleAlias = widgetType.getBundleAlias(); + this.alias = widgetType.getAlias(); + this.name = widgetType.getName(); + this.descriptor = widgetType.getDescriptor(); + } + + @Override + public UUID getId() { + return id; + } + + @Override + public void setId(UUID id) { + this.id = id; + } + + public UUID getTenantId() { + return tenantId; + } + + public void setTenantId(UUID tenantId) { + this.tenantId = tenantId; + } + + public String getBundleAlias() { + return bundleAlias; + } + + public void setBundleAlias(String bundleAlias) { + this.bundleAlias = bundleAlias; + } + + public String getAlias() { + return alias; + } + + public void setAlias(String alias) { + this.alias = alias; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public JsonNode getDescriptor() { + return descriptor; + } + + public void setDescriptor(JsonNode descriptor) { + this.descriptor = descriptor; + } + + @Override + public int hashCode() { + int result = id != null ? id.hashCode() : 0; + result = 31 * result + (tenantId != null ? tenantId.hashCode() : 0); + result = 31 * result + (bundleAlias != null ? bundleAlias.hashCode() : 0); + result = 31 * result + (alias != null ? alias.hashCode() : 0); + result = 31 * result + (name != null ? name.hashCode() : 0); + result = 31 * result + (descriptor != null ? descriptor.hashCode() : 0); + return result; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + WidgetTypeEntity that = (WidgetTypeEntity) o; + + if (id != null ? !id.equals(that.id) : that.id != null) return false; + if (tenantId != null ? !tenantId.equals(that.tenantId) : that.tenantId != null) return false; + if (bundleAlias != null ? !bundleAlias.equals(that.bundleAlias) : that.bundleAlias != null) return false; + if (alias != null ? !alias.equals(that.alias) : that.alias != null) return false; + if (name != null ? !name.equals(that.name) : that.name != null) return false; + return descriptor != null ? descriptor.equals(that.descriptor) : that.descriptor == null; + } + + @Override + public String toString() { + final StringBuilder sb = new StringBuilder("WidgetTypeEntity{"); + sb.append("id=").append(id); + sb.append(", tenantId=").append(tenantId); + sb.append(", bundleAlias='").append(bundleAlias).append('\''); + sb.append(", alias='").append(alias).append('\''); + sb.append(", name='").append(name).append('\''); + sb.append(", descriptor=").append(descriptor); + sb.append('}'); + return sb.toString(); + } + + @Override + public WidgetType toData() { + WidgetType widgetType = new WidgetType(new WidgetTypeId(id)); + widgetType.setCreatedTime(UUIDs.unixTimestamp(id)); + if (tenantId != null) { + widgetType.setTenantId(new TenantId(tenantId)); + } + widgetType.setBundleAlias(bundleAlias); + widgetType.setAlias(alias); + widgetType.setName(name); + widgetType.setDescriptor(descriptor); + return widgetType; + } + +} diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/WidgetsBundleEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/WidgetsBundleEntity.java new file mode 100644 index 0000000000..c972709926 --- /dev/null +++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/WidgetsBundleEntity.java @@ -0,0 +1,190 @@ +/** + * 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.model.sql; + + +import com.datastax.driver.core.utils.UUIDs; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Transient; +import org.thingsboard.server.common.data.id.TenantId; +import org.thingsboard.server.common.data.id.WidgetsBundleId; +import org.thingsboard.server.common.data.widget.WidgetsBundle; +import org.thingsboard.server.dao.model.ModelConstants; +import org.thingsboard.server.dao.model.SearchTextEntity; + +import java.nio.ByteBuffer; +import java.util.UUID; + +@Entity +@Table(name = ModelConstants.WIDGETS_BUNDLE_COLUMN_FAMILY_NAME) +public final class WidgetsBundleEntity implements SearchTextEntity { + + @Transient + private static final long serialVersionUID = 6897035686422298096L; + + @Id + @Column(name = ModelConstants.ID_PROPERTY) + private UUID id; + + @Column(name = ModelConstants.WIDGETS_BUNDLE_TENANT_ID_PROPERTY) + private UUID tenantId; + + @Column(name = ModelConstants.WIDGETS_BUNDLE_ALIAS_PROPERTY) + private String alias; + + @Column(name = ModelConstants.WIDGETS_BUNDLE_TITLE_PROPERTY) + private String title; + + @Column(name = ModelConstants.SEARCH_TEXT_PROPERTY) + private String searchText; + + @Column(name = ModelConstants.WIDGETS_BUNDLE_IMAGE_PROPERTY) + private ByteBuffer image; + + public WidgetsBundleEntity() { + super(); + } + + public WidgetsBundleEntity(WidgetsBundle widgetsBundle) { + if (widgetsBundle.getId() != null) { + this.id = widgetsBundle.getId().getId(); + } + if (widgetsBundle.getTenantId() != null) { + this.tenantId = widgetsBundle.getTenantId().getId(); + } + this.alias = widgetsBundle.getAlias(); + this.title = widgetsBundle.getTitle(); + if (widgetsBundle.getImage() != null) { + this.image = ByteBuffer.wrap(widgetsBundle.getImage()); + } + } + + @Override + public UUID getId() { + return id; + } + + @Override + public void setId(UUID id) { + this.id = id; + } + + public UUID getTenantId() { + return tenantId; + } + + public void setTenantId(UUID tenantId) { + this.tenantId = tenantId; + } + + public String getAlias() { + return alias; + } + + public void setAlias(String alias) { + this.alias = alias; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public ByteBuffer getImage() { + return image; + } + + public void setImage(ByteBuffer image) { + this.image = image; + } + + @Override + public String getSearchTextSource() { + return title; + } + + @Override + public void setSearchText(String searchText) { + this.searchText = searchText; + } + + public String getSearchText() { + return searchText; + } + + @Override + public int hashCode() { + int result = id != null ? id.hashCode() : 0; + result = 31 * result + (tenantId != null ? tenantId.hashCode() : 0); + result = 31 * result + (alias != null ? alias.hashCode() : 0); + result = 31 * result + (title != null ? title.hashCode() : 0); + result = 31 * result + (searchText != null ? searchText.hashCode() : 0); + result = 31 * result + (image != null ? image.hashCode() : 0); + return result; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + WidgetsBundleEntity that = (WidgetsBundleEntity) o; + + if (id != null ? !id.equals(that.id) : that.id != null) return false; + if (tenantId != null ? !tenantId.equals(that.tenantId) : that.tenantId != null) return false; + if (alias != null ? !alias.equals(that.alias) : that.alias != null) return false; + if (title != null ? !title.equals(that.title) : that.title != null) return false; + if (searchText != null ? !searchText.equals(that.searchText) : that.searchText != null) return false; + return image != null ? image.equals(that.image) : that.image == null; + + } + + @Override + public String toString() { + final StringBuilder sb = new StringBuilder("WidgetsBundleEntity{"); + sb.append("id=").append(id); + sb.append(", tenantId=").append(tenantId); + sb.append(", alias='").append(alias).append('\''); + sb.append(", title='").append(title).append('\''); + sb.append(", searchText='").append(searchText).append('\''); + sb.append(", image=").append(image); + sb.append('}'); + return sb.toString(); + } + + @Override + public WidgetsBundle toData() { + WidgetsBundle widgetsBundle = new WidgetsBundle(new WidgetsBundleId(id)); + widgetsBundle.setCreatedTime(UUIDs.unixTimestamp(id)); + if (tenantId != null) { + widgetsBundle.setTenantId(new TenantId(tenantId)); + } + widgetsBundle.setAlias(alias); + widgetsBundle.setTitle(title); + if (image != null) { + byte[] imageByteArray = new byte[image.remaining()]; + image.get(imageByteArray); + widgetsBundle.setImage(imageByteArray); + } + return widgetsBundle; + } +} diff --git a/dao/src/main/java/org/thingsboard/server/dao/plugin/CassandraBasePluginDao.java b/dao/src/main/java/org/thingsboard/server/dao/plugin/CassandraBasePluginDao.java index 054a3655fb..9c196e8d3a 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/plugin/CassandraBasePluginDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/plugin/CassandraBasePluginDao.java @@ -25,7 +25,7 @@ import org.thingsboard.server.common.data.plugin.PluginMetaData; 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; +import org.thingsboard.server.dao.model.nosql.PluginMetaDataEntity; import java.util.Arrays; import java.util.List; diff --git a/dao/src/main/java/org/thingsboard/server/dao/rule/CassandraBaseRuleDao.java b/dao/src/main/java/org/thingsboard/server/dao/rule/CassandraBaseRuleDao.java index a750940968..8f62bafda3 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/rule/CassandraBaseRuleDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/rule/CassandraBaseRuleDao.java @@ -25,7 +25,7 @@ import org.thingsboard.server.common.data.rule.RuleMetaData; 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; +import org.thingsboard.server.dao.model.nosql.RuleMetaDataEntity; import java.util.Arrays; import java.util.List; diff --git a/dao/src/main/java/org/thingsboard/server/dao/settings/CassandraAdminSettingsDao.java b/dao/src/main/java/org/thingsboard/server/dao/settings/CassandraAdminSettingsDao.java index c1783bc76a..adeeed062b 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/settings/CassandraAdminSettingsDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/settings/CassandraAdminSettingsDao.java @@ -21,7 +21,7 @@ import org.springframework.stereotype.Component; import org.thingsboard.server.common.data.AdminSettings; import org.thingsboard.server.dao.CassandraAbstractModelDao; import org.thingsboard.server.dao.DaoUtil; -import org.thingsboard.server.dao.model.AdminSettingsEntity; +import org.thingsboard.server.dao.model.nosql.AdminSettingsEntity; import static com.datastax.driver.core.querybuilder.QueryBuilder.eq; import static com.datastax.driver.core.querybuilder.QueryBuilder.select; diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/JpaAbstractDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/JpaAbstractDao.java new file mode 100644 index 0000000000..a92e607472 --- /dev/null +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/JpaAbstractDao.java @@ -0,0 +1,90 @@ +/** + * 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.sql; + +import com.google.common.collect.Lists; +import com.google.common.util.concurrent.ListenableFuture; +import lombok.extern.slf4j.Slf4j; +import org.thingsboard.server.dao.Dao; +import org.thingsboard.server.dao.DaoUtil; +import org.thingsboard.server.dao.model.BaseEntity; +import org.thingsboard.server.dao.model.SearchTextEntity; +import org.thingsboard.server.dao.sql.user.JpaRepository; + +import java.util.List; +import java.util.UUID; + +/** + * @author Valerii Sosliuk + */ +@Slf4j +public abstract class JpaAbstractDao, D> implements Dao { + + protected abstract Class getColumnFamilyClass(); + + protected abstract String getColumnFamilyName(); + + protected abstract JpaRepository getCrudRepository(); + + protected boolean isSearchTextDao() { + return false; + } + + @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); + } if (isSearchTextDao()) { + ((SearchTextEntity) entity).setSearchText(((SearchTextEntity) entity).getSearchTextSource().toLowerCase()); + } + log.debug("Saving entity {}", entity); + entity = getCrudRepository().save(entity); + return DaoUtil.getData(entity); + } + + @Override + public D findById(UUID key) { + log.debug("Get entity by key {}", key); + E entity = getCrudRepository().findOne(key); + return DaoUtil.getData(entity); + } + + @Override + public ListenableFuture findByIdAsync(UUID key) { + log.debug("Get entity by key {}", key); + org.springframework.util.concurrent.ListenableFuture entityFuture = getCrudRepository().findByIdAsync(key); + // TODO: vsosliuk implement + return null; + } + + @Override + public boolean removeById(UUID key) { + getCrudRepository().delete(key); + log.debug("Remove request: {}", key); + return getCrudRepository().equals(key); + } + + @Override + public List find() { + log.debug("Get all entities from column family {}", getColumnFamilyName()); + List entities = Lists.newArrayList(getCrudRepository().findAll()); + return DaoUtil.convertDataList(entities); + } +} diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/user/JpaRepository.java b/dao/src/main/java/org/thingsboard/server/dao/sql/user/JpaRepository.java new file mode 100644 index 0000000000..0af2bf8fc0 --- /dev/null +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/user/JpaRepository.java @@ -0,0 +1,31 @@ +/** + * 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.sql.user; + +import org.springframework.data.repository.CrudRepository; +import org.springframework.scheduling.annotation.Async; +import org.springframework.util.concurrent.ListenableFuture; + +import java.io.Serializable; + +/** + * @author Valerii Sosliuk + */ +public interface JpaRepository extends CrudRepository { + + @Async + ListenableFuture findByIdAsync(ID key); +} diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/user/JpaUserDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/user/JpaUserDao.java new file mode 100644 index 0000000000..8fb14d7cff --- /dev/null +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/user/JpaUserDao.java @@ -0,0 +1,52 @@ +/** + * 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.sql.user; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.stereotype.Component; +import org.thingsboard.server.common.data.User; +import org.thingsboard.server.dao.model.ModelConstants; +import org.thingsboard.server.dao.model.sql.UserEntity; +import org.thingsboard.server.dao.sql.JpaAbstractDao; + +import java.util.UUID; + +/** + * @author Valerii Sosliuk + */ +@Component +@ConditionalOnProperty(prefix="sql", value="enabled",havingValue = "true", matchIfMissing = false) +public class JpaUserDao extends JpaAbstractDao { + + @Autowired + private UserRepository userRepository; + + @Override + protected Class getColumnFamilyClass() { + return UserEntity.class; + } + + @Override + protected String getColumnFamilyName() { + return ModelConstants.USER_COLUMN_FAMILY_NAME; + } + + @Override + protected JpaRepository getCrudRepository() { + return userRepository; + } +} diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/user/UserRepository.java b/dao/src/main/java/org/thingsboard/server/dao/sql/user/UserRepository.java new file mode 100644 index 0000000000..51364c798b --- /dev/null +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/user/UserRepository.java @@ -0,0 +1,26 @@ +/** + * 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.sql.user; + +import org.thingsboard.server.dao.model.sql.UserEntity; + +import java.util.UUID; + +/** + * @author Valerii Sosliuk + */ +public interface UserRepository extends JpaRepository { +} diff --git a/dao/src/main/java/org/thingsboard/server/dao/tenant/CassandraTenantDao.java b/dao/src/main/java/org/thingsboard/server/dao/tenant/CassandraTenantDao.java index d4d067e00f..dfefb759f6 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/tenant/CassandraTenantDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/tenant/CassandraTenantDao.java @@ -21,7 +21,7 @@ import org.thingsboard.server.common.data.Tenant; import org.thingsboard.server.common.data.page.TextPageLink; import org.thingsboard.server.dao.CassandraAbstractSearchTextDao; import org.thingsboard.server.dao.DaoUtil; -import org.thingsboard.server.dao.model.TenantEntity; +import org.thingsboard.server.dao.model.nosql.TenantEntity; import java.util.Arrays; import java.util.List; diff --git a/dao/src/main/java/org/thingsboard/server/dao/user/CassandraUserCredentialsDao.java b/dao/src/main/java/org/thingsboard/server/dao/user/CassandraUserCredentialsDao.java index b44ab6af35..22ed06af5b 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/user/CassandraUserCredentialsDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/user/CassandraUserCredentialsDao.java @@ -22,7 +22,7 @@ import org.thingsboard.server.common.data.security.UserCredentials; 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.thingsboard.server.dao.model.nosql.UserCredentialsEntity; import java.util.UUID; diff --git a/dao/src/main/java/org/thingsboard/server/dao/user/CassandraUserDao.java b/dao/src/main/java/org/thingsboard/server/dao/user/CassandraUserDao.java index 21ffa3561c..d09c84cee1 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/user/CassandraUserDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/user/CassandraUserDao.java @@ -24,7 +24,7 @@ import org.thingsboard.server.common.data.security.Authority; 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.UserEntity; +import org.thingsboard.server.dao.model.nosql.UserEntity; import java.util.Arrays; import java.util.List; diff --git a/dao/src/main/java/org/thingsboard/server/dao/widget/CassandraWidgetTypeDao.java b/dao/src/main/java/org/thingsboard/server/dao/widget/CassandraWidgetTypeDao.java index 56e6db97d9..8c2cae7516 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/widget/CassandraWidgetTypeDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/widget/CassandraWidgetTypeDao.java @@ -21,7 +21,7 @@ import org.springframework.stereotype.Component; import org.thingsboard.server.common.data.widget.WidgetType; import org.thingsboard.server.dao.CassandraAbstractModelDao; import org.thingsboard.server.dao.DaoUtil; -import org.thingsboard.server.dao.model.WidgetTypeEntity; +import org.thingsboard.server.dao.model.nosql.WidgetTypeEntity; import java.util.List; import java.util.UUID; diff --git a/dao/src/main/java/org/thingsboard/server/dao/widget/CassandraWidgetsBundleDao.java b/dao/src/main/java/org/thingsboard/server/dao/widget/CassandraWidgetsBundleDao.java index 036d754919..d43d25d273 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/widget/CassandraWidgetsBundleDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/widget/CassandraWidgetsBundleDao.java @@ -22,7 +22,7 @@ import org.thingsboard.server.common.data.page.TextPageLink; import org.thingsboard.server.common.data.widget.WidgetsBundle; import org.thingsboard.server.dao.CassandraAbstractSearchTextDao; import org.thingsboard.server.dao.DaoUtil; -import org.thingsboard.server.dao.model.WidgetsBundleEntity; +import org.thingsboard.server.dao.model.nosql.WidgetsBundleEntity; import java.util.Arrays; import java.util.List; diff --git a/dao/src/test/java/org/thingsboard/server/dao/plugin/BasePluginServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/plugin/BasePluginServiceTest.java index 644e2214c8..80acec71e4 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/plugin/BasePluginServiceTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/plugin/BasePluginServiceTest.java @@ -24,6 +24,8 @@ import org.thingsboard.server.common.data.page.TextPageLink; import org.thingsboard.server.common.data.plugin.PluginMetaData; import org.thingsboard.server.dao.model.ModelConstants; import org.thingsboard.server.dao.service.AbstractServiceTest; +import org.junit.Assert; +import org.junit.Test; import java.util.UUID; diff --git a/pom.xml b/pom.xml index 6324712dfd..64017d79a4 100755 --- a/pom.xml +++ b/pom.xml @@ -411,6 +411,11 @@ ${spring-boot.version} test + + org.springframework.boot + spring-boot-starter-data-jpa + ${spring-boot.version} + org.springframework spring-context