From bf7c03d49037a11763307df231272c7dd27d9d72 Mon Sep 17 00:00:00 2001 From: Valerii Sosliuk Date: Tue, 11 Apr 2017 22:09:52 -0400 Subject: [PATCH] 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