thingsboard-developers
Changes
dao/src/main/java/org/thingsboard/server/dao/sql/component/ComponentDescriptorRepository.java 45(+45 -0)
dao/src/main/java/org/thingsboard/server/dao/sql/component/JpaBaseComponentDescriptorDao.java 98(+98 -0)
Details
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
index b090d7d..25393fb 100644
--- 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
@@ -22,15 +22,21 @@ import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Transient;
import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
import org.thingsboard.server.common.data.AdminSettings;
import org.thingsboard.server.common.data.id.AdminSettingsId;
import org.thingsboard.server.dao.model.BaseEntity;
+import java.io.IOException;
import java.util.UUID;
import static org.thingsboard.server.dao.model.ModelConstants.*;
-//@Entity
+@Data
+@Slf4j
+@Entity
@Table(name = ADMIN_SETTINGS_COLUMN_FAMILY_NAME)
public final class AdminSettingsEntity implements BaseEntity<AdminSettings> {
@@ -45,7 +51,7 @@ public final class AdminSettingsEntity implements BaseEntity<AdminSettings> {
private String key;
@Column(name = ADMIN_SETTINGS_JSON_VALUE_PROPERTY)
- private JsonNode jsonValue;
+ private String jsonValue;
public AdminSettingsEntity() {
super();
@@ -56,33 +62,21 @@ public final class AdminSettingsEntity implements BaseEntity<AdminSettings> {
this.id = adminSettings.getId().getId();
}
this.key = adminSettings.getKey();
- this.jsonValue = adminSettings.getJsonValue();
+ if (jsonValue != null) {
+ this.jsonValue = adminSettings.getJsonValue().toString();
+ }
}
-
+
+ @Override
public UUID getId() {
return id;
}
+ @Override
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;
@@ -138,7 +132,16 @@ public final class AdminSettingsEntity implements BaseEntity<AdminSettings> {
AdminSettings adminSettings = new AdminSettings(new AdminSettingsId(id));
adminSettings.setCreatedTime(UUIDs.unixTimestamp(id));
adminSettings.setKey(key);
- adminSettings.setJsonValue(jsonValue);
+ if (jsonValue != null) {
+ ObjectMapper mapper = new ObjectMapper();
+ JsonNode jsonNode = null;
+ try {
+ jsonNode = mapper.readTree(jsonValue);
+ adminSettings.setJsonValue(jsonNode);
+ } catch (IOException e) {
+ log.error(e.getMessage(), e);
+ }
+ }
return adminSettings;
}
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
index f32a89e..37fab4f 100644
--- 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
@@ -21,6 +21,9 @@ import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Transient;
import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
import org.thingsboard.server.common.data.id.ComponentDescriptorId;
import org.thingsboard.server.common.data.plugin.ComponentDescriptor;
import org.thingsboard.server.common.data.plugin.ComponentScope;
@@ -28,12 +31,12 @@ import org.thingsboard.server.common.data.plugin.ComponentType;
import org.thingsboard.server.dao.model.ModelConstants;
import org.thingsboard.server.dao.model.SearchTextEntity;
+import java.io.IOException;
import java.util.UUID;
-/**
- * @author Andrew Shvayka
- */
-//@Entity
+@Data
+@Slf4j
+@Entity
@Table(name = ModelConstants.COMPONENT_DESCRIPTOR_COLUMN_FAMILY_NAME)
public class ComponentDescriptorEntity implements SearchTextEntity<ComponentDescriptor> {
@@ -57,7 +60,7 @@ public class ComponentDescriptorEntity implements SearchTextEntity<ComponentDesc
private String clazz;
@Column(name = ModelConstants.COMPONENT_DESCRIPTOR_CONFIGURATION_DESCRIPTOR_PROPERTY)
- private JsonNode configurationDescriptor;
+ private String configurationDescriptor;
@Column(name = ModelConstants.COMPONENT_DESCRIPTOR_ACTIONS_PROPERTY)
private String actions;
@@ -77,7 +80,9 @@ public class ComponentDescriptorEntity implements SearchTextEntity<ComponentDesc
this.scope = component.getScope();
this.name = component.getName();
this.clazz = component.getClazz();
- this.configurationDescriptor = component.getConfigurationDescriptor();
+ if (configurationDescriptor != null) {
+ this.configurationDescriptor = component.getConfigurationDescriptor().toString();
+ }
this.searchText = component.getName();
}
@@ -89,7 +94,16 @@ public class ComponentDescriptorEntity implements SearchTextEntity<ComponentDesc
data.setName(this.getName());
data.setClazz(this.getClazz());
data.setActions(this.getActions());
- data.setConfigurationDescriptor(this.getConfigurationDescriptor());
+ if (configurationDescriptor != null) {
+ ObjectMapper mapper = new ObjectMapper();
+ JsonNode jsonNode = null;
+ try {
+ jsonNode = mapper.readTree(configurationDescriptor);
+ data.setConfigurationDescriptor(jsonNode);
+ } catch (IOException e) {
+ log.error(e.getMessage(), e);
+ }
+ }
return data;
}
@@ -103,54 +117,6 @@ public class ComponentDescriptorEntity implements SearchTextEntity<ComponentDesc
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;
}
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
index b651306..185505b 100644
--- 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
@@ -22,15 +22,21 @@ import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Transient;
import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
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.io.IOException;
import java.util.UUID;
-//@Entity
+@Data
+@Slf4j
+@Entity
@Table(name = ModelConstants.CUSTOMER_COLUMN_FAMILY_NAME)
public final class CustomerEntity implements SearchTextEntity<Customer> {
@@ -75,7 +81,7 @@ public final class CustomerEntity implements SearchTextEntity<Customer> {
private String email;
@Column(name = ModelConstants.CUSTOMER_ADDITIONAL_INFO_PROPERTY)
- private JsonNode additionalInfo;
+ private String additionalInfo;
public CustomerEntity() {
super();
@@ -95,105 +101,21 @@ public final class CustomerEntity implements SearchTextEntity<Customer> {
this.zip = customer.getZip();
this.phone = customer.getPhone();
this.email = customer.getEmail();
- this.additionalInfo = customer.getAdditionalInfo();
+ if (additionalInfo != null) {
+ this.additionalInfo = customer.getAdditionalInfo().toString();
+ }
}
-
+
+ @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 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;
@@ -204,10 +126,6 @@ public final class CustomerEntity implements SearchTextEntity<Customer> {
this.searchText = searchText;
}
- public String getSearchText() {
- return searchText;
- }
-
@Override
public int hashCode() {
final int prime = 31;
@@ -344,8 +262,15 @@ public final class CustomerEntity implements SearchTextEntity<Customer> {
customer.setZip(zip);
customer.setPhone(phone);
customer.setEmail(email);
- customer.setAdditionalInfo(additionalInfo);
+ if (additionalInfo != null) {
+ ObjectMapper mapper = new ObjectMapper();
+ try {
+ JsonNode jsonNode = mapper.readTree(additionalInfo);
+ customer.setAdditionalInfo(jsonNode);
+ } catch (IOException e) {
+ log.error(e.getMessage(), e);
+ }
+ }
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
index 77e12e2..1ad0f84 100644
--- 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
@@ -22,6 +22,9 @@ import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Transient;
import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
import org.thingsboard.server.common.data.Dashboard;
import org.thingsboard.server.common.data.id.CustomerId;
import org.thingsboard.server.common.data.id.DashboardId;
@@ -29,9 +32,12 @@ import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.dao.model.ModelConstants;
import org.thingsboard.server.dao.model.SearchTextEntity;
+import java.io.IOException;
import java.util.UUID;
-//@Entity
+@Data
+@Slf4j
+@Entity
@Table(name = ModelConstants.DASHBOARD_COLUMN_FAMILY_NAME)
public final class DashboardEntity implements SearchTextEntity<Dashboard> {
@@ -55,7 +61,7 @@ public final class DashboardEntity implements SearchTextEntity<Dashboard> {
private String searchText;
@Column(name = ModelConstants.DASHBOARD_CONFIGURATION_PROPERTY)
- private JsonNode configuration;
+ private String configuration;
public DashboardEntity() {
super();
@@ -72,47 +78,18 @@ public final class DashboardEntity implements SearchTextEntity<Dashboard> {
this.customerId = dashboard.getCustomerId().getId();
}
this.title = dashboard.getTitle();
- this.configuration = dashboard.getConfiguration();
+ if (configuration != null) {
+ this.configuration = dashboard.getConfiguration().toString();
+ }
}
-
+
+ @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 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
@@ -214,8 +191,16 @@ public final class DashboardEntity implements SearchTextEntity<Dashboard> {
dashboard.setCustomerId(new CustomerId(customerId));
}
dashboard.setTitle(title);
- dashboard.setConfiguration(configuration);
+ if (configuration != null) {
+ ObjectMapper mapper = new ObjectMapper();
+ JsonNode jsonNode = null;
+ try {
+ jsonNode = mapper.readTree(configuration);
+ dashboard.setConfiguration(jsonNode);
+ } catch (IOException e) {
+ log.error(e.getMessage(), e);
+ }
+ }
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
index f0a50f1..e5f1400 100644
--- 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
@@ -21,6 +21,8 @@ import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Transient;
+
+import lombok.Data;
import org.thingsboard.server.common.data.DashboardInfo;
import org.thingsboard.server.common.data.id.CustomerId;
import org.thingsboard.server.common.data.id.DashboardId;
@@ -30,7 +32,8 @@ import org.thingsboard.server.dao.model.SearchTextEntity;
import java.util.UUID;
-//@Entity
+@Data
+@Entity
@Table(name = ModelConstants.DASHBOARD_COLUMN_FAMILY_NAME)
public class DashboardInfoEntity implements SearchTextEntity<DashboardInfo> {
@@ -70,38 +73,6 @@ public class DashboardInfoEntity implements SearchTextEntity<DashboardInfo> {
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;
diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/component/ComponentDescriptorRepository.java b/dao/src/main/java/org/thingsboard/server/dao/sql/component/ComponentDescriptorRepository.java
new file mode 100644
index 0000000..a844370
--- /dev/null
+++ b/dao/src/main/java/org/thingsboard/server/dao/sql/component/ComponentDescriptorRepository.java
@@ -0,0 +1,45 @@
+package org.thingsboard.server.dao.sql.component;
+
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.CrudRepository;
+import org.springframework.stereotype.Component;
+import org.thingsboard.server.common.data.plugin.ComponentScope;
+import org.thingsboard.server.common.data.plugin.ComponentType;
+import org.thingsboard.server.dao.model.ToData;
+import org.thingsboard.server.dao.model.sql.ComponentDescriptorEntity;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.UUID;
+
+/**
+ * Created by Valerii Sosliuk on 5/6/2017.
+ */
+@ConditionalOnProperty(prefix = "sql", value = "enabled", havingValue = "true", matchIfMissing = false)
+public interface ComponentDescriptorRepository extends CrudRepository<ComponentDescriptorEntity, UUID> {
+
+ ComponentDescriptorEntity findByClazz(String clazz);
+
+ @Query(nativeQuery = true, value = "SELECT * FROM COMPONENT_DESCRIPTOR WHERE TYPE = ?2 " +
+ "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(?3, '%')) " +
+ "ORDER BY ID LIMIT ?1")
+ List<ComponentDescriptorEntity> findByTypeFirstPage(int limit, int type, String textSearch);
+
+ @Query(nativeQuery = true, value = "SELECT * FROM COMPONENT_DESCRIPTOR WHERE TYPE = ?2 " +
+ "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(?3, '%')) " +
+ "AND ID > ?4 ORDER BY ID LIMIT ?1")
+ List<ComponentDescriptorEntity> findByTypeNextPage(int limit, int type, String textSearch, UUID idOffset);
+
+ @Query(nativeQuery = true, value = "SELECT * FROM COMPONENT_DESCRIPTOR WHERE TYPE = ?2 " +
+ "AND SCOPE = ?3 AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(?4, '%')) " +
+ "ORDER BY ID LIMIT ?1")
+ List<ComponentDescriptorEntity> findByScopeAndTypeFirstPage(int limit, int type, int scope, String textSearch);
+
+ @Query(nativeQuery = true, value = "SELECT * FROM COMPONENT_DESCRIPTOR WHERE TYPE = ?2 " +
+ "AND SCOPE = ?3 AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(?4, '%')) " +
+ "AND ID > ?5 ORDER BY ID LIMIT ?1")
+ List<ComponentDescriptorEntity> findByScopeAndTypeNextPage(int limit, int type, int scope, String textSearch, UUID idOffset);
+
+ void deleteByClazz(String clazz);
+}
diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/component/JpaBaseComponentDescriptorDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/component/JpaBaseComponentDescriptorDao.java
new file mode 100644
index 0000000..e6ab86a
--- /dev/null
+++ b/dao/src/main/java/org/thingsboard/server/dao/sql/component/JpaBaseComponentDescriptorDao.java
@@ -0,0 +1,98 @@
+package org.thingsboard.server.dao.sql.component;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.data.repository.CrudRepository;
+import org.springframework.stereotype.Component;
+import org.thingsboard.server.common.data.id.ComponentDescriptorId;
+import org.thingsboard.server.common.data.page.TextPageLink;
+import org.thingsboard.server.common.data.plugin.ComponentDescriptor;
+import org.thingsboard.server.common.data.plugin.ComponentScope;
+import org.thingsboard.server.common.data.plugin.ComponentType;
+import org.thingsboard.server.dao.DaoUtil;
+import org.thingsboard.server.dao.component.ComponentDescriptorDao;
+import org.thingsboard.server.dao.model.ModelConstants;
+import org.thingsboard.server.dao.model.sql.ComponentDescriptorEntity;
+import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao;
+
+import java.util.List;
+import java.util.Optional;
+import java.util.UUID;
+
+/**
+ * Created by Valerii Sosliuk on 5/6/2017.
+ */
+@Component
+@ConditionalOnProperty(prefix = "sql", value = "enabled", havingValue = "true", matchIfMissing = false)
+public class JpaBaseComponentDescriptorDao extends JpaAbstractSearchTextDao<ComponentDescriptorEntity, ComponentDescriptor>
+ implements ComponentDescriptorDao {
+
+ @Autowired
+ private ComponentDescriptorRepository componentDescriptorRepository;
+
+ @Override
+ protected Class<ComponentDescriptorEntity> getEntityClass() {
+ return ComponentDescriptorEntity.class;
+ }
+
+ @Override
+ protected String getColumnFamilyName() {
+ return ModelConstants.COMPONENT_DESCRIPTOR_COLUMN_FAMILY_NAME;
+ }
+
+ @Override
+ protected CrudRepository<ComponentDescriptorEntity, UUID> getCrudRepository() {
+ return componentDescriptorRepository;
+ }
+
+ @Override
+ public Optional<ComponentDescriptor> saveIfNotExist(ComponentDescriptor component) {
+ boolean exists = componentDescriptorRepository.findOne(component.getId().getId()) != null;
+ if (exists) {
+ return Optional.empty();
+ }
+ return Optional.of(save(component));
+ }
+
+ @Override
+ public ComponentDescriptor findById(ComponentDescriptorId componentId) {
+ return findById(componentId.getId());
+ }
+
+ @Override
+ public ComponentDescriptor findByClazz(String clazz) {
+ return DaoUtil.getData(componentDescriptorRepository.findByClazz(clazz));
+ }
+
+ @Override
+ public List<ComponentDescriptor> findByTypeAndPageLink(ComponentType type, TextPageLink pageLink) {
+ if (pageLink.getIdOffset() == null) {
+ return DaoUtil.convertDataList(componentDescriptorRepository.findByTypeFirstPage(pageLink.getLimit(),
+ type.ordinal(), pageLink.getTextSearch()));
+ } else {
+ return DaoUtil.convertDataList(componentDescriptorRepository.findByTypeNextPage(pageLink.getLimit(),
+ type.ordinal(), pageLink.getTextSearch(), pageLink.getIdOffset()));
+ }
+ }
+
+ @Override
+ public List<ComponentDescriptor> findByScopeAndTypeAndPageLink(ComponentScope scope, ComponentType type, TextPageLink pageLink) {
+ if (pageLink.getIdOffset() == null) {
+ return DaoUtil.convertDataList(componentDescriptorRepository.findByScopeAndTypeFirstPage(pageLink.getLimit(),
+ type.ordinal(), scope.ordinal(), pageLink.getTextSearch()));
+ } else {
+ return DaoUtil.convertDataList(componentDescriptorRepository.findByScopeAndTypeNextPage(pageLink.getLimit(),
+ type.ordinal(), scope.ordinal(), pageLink.getTextSearch(), pageLink.getIdOffset()));
+ }
+ }
+
+ @Override
+ public void deleteById(ComponentDescriptorId componentId) {
+ removeById(componentId.getId());
+ }
+
+ @Override
+ public void deleteByClazz(String clazz) {
+ componentDescriptorRepository.deleteByClazz(clazz);
+ }
+}
diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/customer/CustomerRepository.java b/dao/src/main/java/org/thingsboard/server/dao/sql/customer/CustomerRepository.java
new file mode 100644
index 0000000..9616aa1
--- /dev/null
+++ b/dao/src/main/java/org/thingsboard/server/dao/sql/customer/CustomerRepository.java
@@ -0,0 +1,30 @@
+package org.thingsboard.server.dao.sql.customer;
+
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.CrudRepository;
+import org.thingsboard.server.common.data.Customer;
+import org.thingsboard.server.dao.model.sql.CustomerEntity;
+
+import java.util.List;
+import java.util.UUID;
+
+/**
+ * Created by Valerii Sosliuk on 5/6/2017.
+ */
+@ConditionalOnProperty(prefix = "sql", value = "enabled", havingValue = "true", matchIfMissing = false)
+public interface CustomerRepository extends CrudRepository<CustomerEntity, UUID> {
+
+ @Query(nativeQuery = true, value = "SELECT * FROM CUSTOMER WHERE TENANT_ID = ?2 " +
+ "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(?3, '%')) " +
+ "ORDER BY ID LIMIT ?1")
+ List<CustomerEntity> findByTenantIdFirstPage(int limit, UUID tenantId, String textSearch);
+
+ @Query(nativeQuery = true, value = "SELECT * FROM CUSTOMER WHERE TENANT_ID = ?2 " +
+ "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(?3, '%')) " +
+ "AND ID > ?4 ORDER BY ID LIMIT ?1")
+ List<CustomerEntity> findByTenantIdNextPage(int limit, UUID tenantId, String textSearch, UUID idOffset);
+
+ @Query(nativeQuery = true, value = "SELECT * FROM CUSTOMER WHERE TENANT_ID = ?1")
+ List<CustomerEntity> findByTenantId(UUID tenantId);
+}
diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/customer/JpaCustomerDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/customer/JpaCustomerDao.java
new file mode 100644
index 0000000..3d60ade
--- /dev/null
+++ b/dao/src/main/java/org/thingsboard/server/dao/sql/customer/JpaCustomerDao.java
@@ -0,0 +1,52 @@
+package org.thingsboard.server.dao.sql.customer;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.data.repository.CrudRepository;
+import org.springframework.stereotype.Component;
+import org.thingsboard.server.common.data.Customer;
+import org.thingsboard.server.common.data.page.TextPageLink;
+import org.thingsboard.server.dao.DaoUtil;
+import org.thingsboard.server.dao.customer.CustomerDao;
+import org.thingsboard.server.dao.model.ModelConstants;
+import org.thingsboard.server.dao.model.sql.CustomerEntity;
+import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao;
+
+import java.util.List;
+import java.util.UUID;
+
+/**
+ * Created by Valerii Sosliuk on 5/6/2017.
+ */
+@Component
+@ConditionalOnProperty(prefix = "sql", value = "enabled", havingValue = "true", matchIfMissing = false)
+public class JpaCustomerDao extends JpaAbstractSearchTextDao<CustomerEntity, Customer> implements CustomerDao{
+
+ @Autowired
+ private CustomerRepository customerRepository;
+
+ @Override
+ protected Class<CustomerEntity> getEntityClass() {
+ return CustomerEntity.class;
+ }
+
+ @Override
+ protected String getColumnFamilyName() {
+ return ModelConstants.CUSTOMER_COLUMN_FAMILY_NAME;
+ }
+
+ @Override
+ protected CrudRepository<CustomerEntity, UUID> getCrudRepository() {
+ return customerRepository;
+ }
+
+ @Override
+ public List<Customer> findCustomersByTenantId(UUID tenantId, TextPageLink pageLink) {
+ if (pageLink.getIdOffset() == null) {
+ return DaoUtil.convertDataList(customerRepository.findByTenantIdFirstPage(pageLink.getLimit(), tenantId, pageLink.getTextSearch()));
+ } else {
+ return DaoUtil.convertDataList(customerRepository.findByTenantIdNextPage(pageLink.getLimit(), tenantId,
+ pageLink.getTextSearch(), pageLink.getIdOffset()));
+ }
+ }
+}
diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/dashboard/DashboardInfoRepository.java b/dao/src/main/java/org/thingsboard/server/dao/sql/dashboard/DashboardInfoRepository.java
new file mode 100644
index 0000000..de9a491
--- /dev/null
+++ b/dao/src/main/java/org/thingsboard/server/dao/sql/dashboard/DashboardInfoRepository.java
@@ -0,0 +1,36 @@
+package org.thingsboard.server.dao.sql.dashboard;
+
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.CrudRepository;
+import org.thingsboard.server.dao.model.sql.DashboardInfoEntity;
+
+import java.util.List;
+import java.util.UUID;
+
+/**
+ * Created by Valerii Sosliuk on 5/6/2017.
+ */
+@ConditionalOnProperty(prefix = "sql", value = "enabled", havingValue = "true", matchIfMissing = false)
+public interface DashboardInfoRepository extends CrudRepository<DashboardInfoEntity, UUID> {
+
+ @Query(nativeQuery = true, value = "SELECT * FROM DASHBOARD WHERE TENANT_ID = ?2 " +
+ "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(?3, '%')) " +
+ "ORDER BY ID LIMIT ?1")
+ List<DashboardInfoEntity> findByTenantIdFirstPage(int limit, UUID tenantId, String textSearch);
+
+ @Query(nativeQuery = true, value = "SELECT * FROM DASHBOARD WHERE TENANT_ID = ?2 " +
+ "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(?3, '%')) " +
+ "AND ID > ?4 ORDER BY ID LIMIT ?1")
+ List<DashboardInfoEntity> findByTenantIdNextPage(int limit, UUID tenantId, String textSearch, UUID idOffset);
+
+ @Query(nativeQuery = true, value = "SELECT * FROM DASHBOARD WHERE TENANT_ID = ?2 " +
+ "AND CUSTOMER_ID = ?3 AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(?4, '%')) " +
+ "ORDER BY ID LIMIT ?1")
+ List<DashboardInfoEntity> findByTenantIdAndCustomerIdFirstPage(int limit, UUID tenantId, UUID customerId, String textSearch);
+
+ @Query(nativeQuery = true, value = "SELECT * FROM DASHBOARD WHERE TENANT_ID = ?2 " +
+ "AND CUSTOMER_ID = ?3 AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(?4, '%')) " +
+ "AND ID > ?5 ORDER BY ID LIMIT ?1")
+ List<DashboardInfoEntity> findByTenantIdAndCustomerIdNextPage(int limit, UUID tenantId, UUID customerId, String textSearch, UUID idOffset);
+}
diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/dashboard/DashboardRepository.java b/dao/src/main/java/org/thingsboard/server/dao/sql/dashboard/DashboardRepository.java
new file mode 100644
index 0000000..40b1640
--- /dev/null
+++ b/dao/src/main/java/org/thingsboard/server/dao/sql/dashboard/DashboardRepository.java
@@ -0,0 +1,14 @@
+package org.thingsboard.server.dao.sql.dashboard;
+
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.data.repository.CrudRepository;
+import org.thingsboard.server.dao.model.sql.DashboardEntity;
+
+import java.util.UUID;
+
+/**
+ * Created by Valerii Sosliuk on 5/6/2017.
+ */
+@ConditionalOnProperty(prefix = "sql", value = "enabled", havingValue = "true", matchIfMissing = false)
+public interface DashboardRepository extends CrudRepository<DashboardEntity, UUID> {
+}
diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/dashboard/JpaDashboardDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/dashboard/JpaDashboardDao.java
new file mode 100644
index 0000000..6bc51bb
--- /dev/null
+++ b/dao/src/main/java/org/thingsboard/server/dao/sql/dashboard/JpaDashboardDao.java
@@ -0,0 +1,40 @@
+package org.thingsboard.server.dao.sql.dashboard;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.data.repository.CrudRepository;
+import org.springframework.stereotype.Component;
+import org.thingsboard.server.common.data.Dashboard;
+import org.thingsboard.server.dao.dashboard.DashboardDao;
+import org.thingsboard.server.dao.model.sql.DashboardEntity;
+import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao;
+
+import java.util.UUID;
+
+import static org.thingsboard.server.dao.model.ModelConstants.DASHBOARD_COLUMN_FAMILY_NAME;
+
+/**
+ * Created by Valerii Sosliuk on 5/6/2017.
+ */
+@Component
+@ConditionalOnProperty(prefix = "sql", value = "enabled", havingValue = "true", matchIfMissing = false)
+public class JpaDashboardDao extends JpaAbstractSearchTextDao<DashboardEntity, Dashboard> implements DashboardDao {
+
+ @Autowired
+ DashboardRepository dashboardRepository;
+
+ @Override
+ protected Class<DashboardEntity> getEntityClass() {
+ return DashboardEntity.class;
+ }
+
+ @Override
+ protected String getColumnFamilyName() {
+ return DASHBOARD_COLUMN_FAMILY_NAME;
+ }
+
+ @Override
+ protected CrudRepository<DashboardEntity, UUID> getCrudRepository() {
+ return dashboardRepository;
+ }
+}
diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/dashboard/JpaDashboardInfoDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/dashboard/JpaDashboardInfoDao.java
new file mode 100644
index 0000000..bfeaec0
--- /dev/null
+++ b/dao/src/main/java/org/thingsboard/server/dao/sql/dashboard/JpaDashboardInfoDao.java
@@ -0,0 +1,65 @@
+package org.thingsboard.server.dao.sql.dashboard;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.data.repository.CrudRepository;
+import org.springframework.stereotype.Component;
+import org.thingsboard.server.common.data.DashboardInfo;
+import org.thingsboard.server.common.data.page.TextPageLink;
+import org.thingsboard.server.dao.DaoUtil;
+import org.thingsboard.server.dao.dashboard.DashboardInfoDao;
+import org.thingsboard.server.dao.model.sql.DashboardInfoEntity;
+import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao;
+
+import java.util.List;
+import java.util.UUID;
+
+import static org.thingsboard.server.dao.model.ModelConstants.DASHBOARD_COLUMN_FAMILY_NAME;
+
+/**
+ * Created by Valerii Sosliuk on 5/6/2017.
+ */
+@Component
+@ConditionalOnProperty(prefix = "sql", value = "enabled", havingValue = "true", matchIfMissing = false)
+public class JpaDashboardInfoDao extends JpaAbstractSearchTextDao<DashboardInfoEntity, DashboardInfo> implements DashboardInfoDao {
+
+ @Autowired
+ private DashboardInfoRepository dashboardInfoRepository;
+
+ @Override
+ protected Class getEntityClass() {
+ return DashboardInfoEntity.class;
+ }
+
+ @Override
+ protected String getColumnFamilyName() {
+ return DASHBOARD_COLUMN_FAMILY_NAME;
+ }
+
+ @Override
+ protected CrudRepository getCrudRepository() {
+ return dashboardInfoRepository;
+ }
+
+ @Override
+ public List<DashboardInfo> findDashboardsByTenantId(UUID tenantId, TextPageLink pageLink) {
+ if (pageLink.getIdOffset() == null) {
+ return DaoUtil.convertDataList(dashboardInfoRepository.findByTenantIdFirstPage(
+ pageLink.getLimit(), tenantId, pageLink.getTextSearch()));
+ } else {
+ return DaoUtil.convertDataList(dashboardInfoRepository.findByTenantIdNextPage(
+ pageLink.getLimit(), tenantId, pageLink.getTextSearch(), pageLink.getIdOffset()));
+ }
+ }
+
+ @Override
+ public List<DashboardInfo> findDashboardsByTenantIdAndCustomerId(UUID tenantId, UUID customerId, TextPageLink pageLink) {
+ if (pageLink.getIdOffset() == null) {
+ return DaoUtil.convertDataList(dashboardInfoRepository.findByTenantIdAndCustomerIdFirstPage(
+ pageLink.getLimit(), tenantId, customerId, pageLink.getTextSearch()));
+ } else {
+ return DaoUtil.convertDataList(dashboardInfoRepository.findByTenantIdAndCustomerIdNextPage(
+ pageLink.getLimit(), tenantId, customerId, pageLink.getTextSearch(), pageLink.getIdOffset()));
+ }
+ }
+}
diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/settings/AdminSettingsRepository.java b/dao/src/main/java/org/thingsboard/server/dao/sql/settings/AdminSettingsRepository.java
new file mode 100644
index 0000000..ce54d00
--- /dev/null
+++ b/dao/src/main/java/org/thingsboard/server/dao/sql/settings/AdminSettingsRepository.java
@@ -0,0 +1,15 @@
+package org.thingsboard.server.dao.sql.settings;
+
+import org.springframework.data.repository.CrudRepository;
+import org.thingsboard.server.dao.model.ToData;
+import org.thingsboard.server.dao.model.sql.AdminSettingsEntity;
+
+import java.util.UUID;
+
+/**
+ * Created by Valerii Sosliuk on 5/6/2017.
+ */
+public interface AdminSettingsRepository extends CrudRepository<AdminSettingsEntity, UUID> {
+
+ AdminSettingsEntity findByKey(String key);
+}
diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/settings/JpaAdminSettingsDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/settings/JpaAdminSettingsDao.java
new file mode 100644
index 0000000..98f4467
--- /dev/null
+++ b/dao/src/main/java/org/thingsboard/server/dao/sql/settings/JpaAdminSettingsDao.java
@@ -0,0 +1,42 @@
+package org.thingsboard.server.dao.sql.settings;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.repository.CrudRepository;
+import org.thingsboard.server.common.data.AdminSettings;
+import org.thingsboard.server.dao.DaoUtil;
+import org.thingsboard.server.dao.model.sql.AdminSettingsEntity;
+import org.thingsboard.server.dao.settings.AdminSettingsDao;
+import org.thingsboard.server.dao.sql.JpaAbstractDao;
+
+import java.util.UUID;
+
+import static org.thingsboard.server.dao.model.ModelConstants.ADMIN_SETTINGS_COLUMN_FAMILY_NAME;
+
+/**
+ * Created by Valerii Sosliuk on 5/6/2017.
+ */
+public class JpaAdminSettingsDao extends JpaAbstractDao<AdminSettingsEntity, AdminSettings> implements AdminSettingsDao{
+
+ @Autowired
+ private AdminSettingsRepository adminSettingsRepository;
+
+ @Override
+ protected Class<AdminSettingsEntity> getEntityClass() {
+ return AdminSettingsEntity.class;
+ }
+
+ @Override
+ protected String getColumnFamilyName() {
+ return ADMIN_SETTINGS_COLUMN_FAMILY_NAME;
+ }
+
+ @Override
+ protected CrudRepository<AdminSettingsEntity, UUID> getCrudRepository() {
+ return adminSettingsRepository;
+ }
+
+ @Override
+ public AdminSettings findByKey(String key) {
+ return DaoUtil.getData(adminSettingsRepository.findByKey(key));
+ }
+}
diff --git a/dao/src/test/java/org/thingsboard/server/dao/sql/component/JpaBaseComponentDescriptorDaoTest.java b/dao/src/test/java/org/thingsboard/server/dao/sql/component/JpaBaseComponentDescriptorDaoTest.java
new file mode 100644
index 0000000..08a90c2
--- /dev/null
+++ b/dao/src/test/java/org/thingsboard/server/dao/sql/component/JpaBaseComponentDescriptorDaoTest.java
@@ -0,0 +1,71 @@
+package org.thingsboard.server.dao.sql.component;
+
+import com.datastax.driver.core.utils.UUIDs;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.thingsboard.server.common.data.Customer;
+import org.thingsboard.server.common.data.id.ComponentDescriptorId;
+import org.thingsboard.server.common.data.page.TextPageLink;
+import org.thingsboard.server.common.data.plugin.ComponentDescriptor;
+import org.thingsboard.server.common.data.plugin.ComponentScope;
+import org.thingsboard.server.common.data.plugin.ComponentType;
+import org.thingsboard.server.dao.AbstractJpaDaoTest;
+import org.thingsboard.server.dao.component.ComponentDescriptorDao;
+
+import java.util.List;
+
+import static org.junit.Assert.assertEquals;
+
+/**
+ * Created by Valerii Sosliuk on 5/6/2017.
+ */
+public class JpaBaseComponentDescriptorDaoTest extends AbstractJpaDaoTest {
+
+ @Autowired
+ private ComponentDescriptorDao componentDescriptorDao;
+
+ @Test
+ public void findByType() {
+ for (int i = 0; i < 20; i++) {
+ createComponentDescriptor(ComponentType.PLUGIN, ComponentScope.SYSTEM, i);
+ createComponentDescriptor(ComponentType.ACTION, ComponentScope.TENANT, i + 20);
+ }
+
+ TextPageLink pageLink1 = new TextPageLink(15, "COMPONENT_");
+ List<ComponentDescriptor> components1 = componentDescriptorDao.findByTypeAndPageLink(ComponentType.PLUGIN, pageLink1);
+ assertEquals(15, components1.size());
+
+ TextPageLink pageLink2 = new TextPageLink(15, "COMPONENT_", components1.get(14).getId().getId(), null);
+ List<ComponentDescriptor> components2 = componentDescriptorDao.findByTypeAndPageLink(ComponentType.PLUGIN, pageLink2);
+ assertEquals(5, components2.size());
+ }
+
+ @Test
+ public void findByTypeAndSocpe() {
+ for (int i = 0; i < 20; i++) {
+ createComponentDescriptor(ComponentType.PLUGIN, ComponentScope.SYSTEM, i);
+ createComponentDescriptor(ComponentType.ACTION, ComponentScope.TENANT, i + 20);
+ createComponentDescriptor(ComponentType.FILTER, ComponentScope.SYSTEM, i + 40);
+ }
+
+ TextPageLink pageLink1 = new TextPageLink(15, "COMPONENT_");
+ List<ComponentDescriptor> components1 = componentDescriptorDao.findByScopeAndTypeAndPageLink(
+ ComponentScope.SYSTEM, ComponentType.FILTER, pageLink1);
+ assertEquals(15, components1.size());
+
+ TextPageLink pageLink2 = new TextPageLink(15, "COMPONENT_", components1.get(14).getId().getId(), null);
+ List<ComponentDescriptor> components2 = componentDescriptorDao.findByScopeAndTypeAndPageLink(
+ ComponentScope.SYSTEM, ComponentType.FILTER, pageLink2);
+ assertEquals(5, components2.size());
+ }
+
+ private void createComponentDescriptor(ComponentType type, ComponentScope scope, int index) {
+ ComponentDescriptor component = new ComponentDescriptor();
+ component.setId(new ComponentDescriptorId(UUIDs.timeBased()));
+ component.setType(type);
+ component.setScope(scope);
+ component.setName("COMPONENT_" + index);
+ componentDescriptorDao.save(component);
+ }
+
+}
diff --git a/dao/src/test/java/org/thingsboard/server/dao/sql/customer/JpaCustomerDaoTest.java b/dao/src/test/java/org/thingsboard/server/dao/sql/customer/JpaCustomerDaoTest.java
new file mode 100644
index 0000000..f300611
--- /dev/null
+++ b/dao/src/test/java/org/thingsboard/server/dao/sql/customer/JpaCustomerDaoTest.java
@@ -0,0 +1,52 @@
+package org.thingsboard.server.dao.sql.customer;
+
+import com.datastax.driver.core.utils.UUIDs;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+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.common.data.page.TextPageLink;
+import org.thingsboard.server.dao.AbstractJpaDaoTest;
+import org.thingsboard.server.dao.customer.CustomerDao;
+
+import java.util.List;
+import java.util.UUID;
+
+import static org.junit.Assert.assertEquals;
+
+/**
+ * Created by Valerii Sosliuk on 5/6/2017.
+ */
+public class JpaCustomerDaoTest extends AbstractJpaDaoTest {
+
+ @Autowired
+ private CustomerDao customerDao;
+
+ @Test
+ public void testFindByTenantId() {
+ UUID tenantId1 = UUIDs.timeBased();
+ UUID tenantId2 = UUIDs.timeBased();
+
+ for (int i = 0; i < 20; i++) {
+ createCustomer(tenantId1, i);
+ createCustomer(tenantId2, i * 2);
+ }
+
+ TextPageLink pageLink1 = new TextPageLink(15, "CUSTOMER");
+ List<Customer> customers1 = customerDao.findCustomersByTenantId(tenantId1, pageLink1);
+ assertEquals(15, customers1.size());
+
+ TextPageLink pageLink2 = new TextPageLink(15, "CUSTOMER", customers1.get(14).getId().getId(), null);
+ List<Customer> customers2 = customerDao.findCustomersByTenantId(tenantId1, pageLink2);
+ assertEquals(5, customers2.size());
+ }
+
+ private void createCustomer(UUID tenantId, int index) {
+ Customer customer = new Customer();
+ customer.setId(new CustomerId(UUIDs.timeBased()));
+ customer.setTenantId(new TenantId(tenantId));
+ customer.setTitle("CUSTOMER_" + index);
+ customerDao.save(customer);
+ }
+}
diff --git a/dao/src/test/java/org/thingsboard/server/dao/sql/dashboard/JpaDashboardInfoDaoTest.java b/dao/src/test/java/org/thingsboard/server/dao/sql/dashboard/JpaDashboardInfoDaoTest.java
new file mode 100644
index 0000000..1360ea4
--- /dev/null
+++ b/dao/src/test/java/org/thingsboard/server/dao/sql/dashboard/JpaDashboardInfoDaoTest.java
@@ -0,0 +1,78 @@
+package org.thingsboard.server.dao.sql.dashboard;
+
+import com.datastax.driver.core.utils.UUIDs;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+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.common.data.page.TextPageLink;
+import org.thingsboard.server.dao.AbstractJpaDaoTest;
+import org.thingsboard.server.dao.dashboard.DashboardInfoDao;
+
+import java.util.List;
+import java.util.UUID;
+
+/**
+ * Created by Valerii Sosliuk on 5/6/2017.
+ */
+public class JpaDashboardInfoDaoTest extends AbstractJpaDaoTest {
+
+ @Autowired
+ private DashboardInfoDao dashboardInfoDao;
+
+ @Test
+ public void testFindDashboardsByTenantId() {
+ UUID tenantId1 = UUIDs.timeBased();
+ UUID customerId1 = UUIDs.timeBased();
+ UUID tenantId2 = UUIDs.timeBased();
+ UUID customerId2 = UUIDs.timeBased();
+
+ for (int i = 0; i < 20; i++) {
+ createDashboard(tenantId1, customerId1, i);
+ createDashboard(tenantId2, customerId2, i * 2);
+ }
+
+ TextPageLink pageLink1 = new TextPageLink(15, "DASHBOARD");
+ List<DashboardInfo> dashboardInfos1 = dashboardInfoDao.findDashboardsByTenantId(tenantId1, pageLink1);
+ assertEquals(15, dashboardInfos1.size());
+
+ TextPageLink pageLink2 = new TextPageLink(15, "DASHBOARD", dashboardInfos1.get(14).getId().getId(), null);
+ List<DashboardInfo> dashboardInfos2 = dashboardInfoDao.findDashboardsByTenantId(tenantId1, pageLink2);
+ assertEquals(5, dashboardInfos2.size());
+ }
+
+ @Test
+ public void testFindDashboardsByTenantAndCustomerId() {
+ UUID tenantId1 = UUIDs.timeBased();
+ UUID customerId1 = UUIDs.timeBased();
+ UUID tenantId2 = UUIDs.timeBased();
+ UUID customerId2 = UUIDs.timeBased();
+
+ for (int i = 0; i < 20; i++) {
+ createDashboard(tenantId1, customerId1, i);
+ createDashboard(tenantId2, customerId2, i * 2);
+ }
+
+ TextPageLink pageLink1 = new TextPageLink(15, "DASHBOARD");
+ List<DashboardInfo> dashboardInfos1 = dashboardInfoDao.findDashboardsByTenantIdAndCustomerId(tenantId1, customerId1, pageLink1);
+ assertEquals(15, dashboardInfos1.size());
+
+ TextPageLink pageLink2 = new TextPageLink(15, "DASHBOARD", dashboardInfos1.get(14).getId().getId(), null);
+ List<DashboardInfo> dashboardInfos2 = dashboardInfoDao.findDashboardsByTenantIdAndCustomerId(tenantId1, customerId1, pageLink2);
+ assertEquals(5, dashboardInfos2.size());
+ }
+
+ private void assertEquals(int i, int size) {
+ }
+
+ private void createDashboard(UUID tenantId, UUID customerId, int index) {
+ DashboardInfo dashboardInfo = new DashboardInfo();
+ dashboardInfo.setId(new DashboardId(UUIDs.timeBased()));
+ dashboardInfo.setTenantId(new TenantId(tenantId));
+ dashboardInfo.setCustomerId(new CustomerId(customerId));
+ dashboardInfo.setTitle("DASHBOARD_" + index);
+ dashboardInfoDao.save(dashboardInfo);
+ }
+}
diff --git a/dao/src/test/java/org/thingsboard/server/dao/sql/device/JpaDeviceDaoTest.java b/dao/src/test/java/org/thingsboard/server/dao/sql/device/JpaDeviceDaoTest.java
index 4f1b315..58507af 100644
--- a/dao/src/test/java/org/thingsboard/server/dao/sql/device/JpaDeviceDaoTest.java
+++ b/dao/src/test/java/org/thingsboard/server/dao/sql/device/JpaDeviceDaoTest.java
@@ -1,13 +1,11 @@
package org.thingsboard.server.dao.sql.device;
import com.datastax.driver.core.utils.UUIDs;
-import com.github.springtestdbunit.annotation.DatabaseOperation;
-import com.github.springtestdbunit.annotation.DatabaseSetup;
-import com.github.springtestdbunit.annotation.DatabaseTearDown;
-import com.google.common.util.concurrent.*;
+import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.ListeningExecutorService;
+import com.google.common.util.concurrent.MoreExecutors;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.transaction.annotation.Transactional;
import org.thingsboard.server.common.data.Device;
import org.thingsboard.server.common.data.id.CustomerId;
import org.thingsboard.server.common.data.id.DeviceId;
@@ -17,7 +15,6 @@ import org.thingsboard.server.dao.AbstractJpaDaoTest;
import org.thingsboard.server.dao.device.DeviceDao;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.List;
import java.util.UUID;
import java.util.concurrent.ExecutionException;
@@ -29,15 +26,12 @@ import static org.junit.Assert.assertNotNull;
/**
* Created by Valerii Sosliuk on 5/6/2017.
*/
-@Transactional
public class JpaDeviceDaoTest extends AbstractJpaDaoTest {
@Autowired
private DeviceDao deviceDao;
@Test
- @DatabaseSetup(value = "classpath:dbunit/empty_dataset.xml",type = DatabaseOperation.DELETE_ALL)
- @DatabaseTearDown(value = "classpath:dbunit/empty_dataset.xml",type = DatabaseOperation.DELETE_ALL)
public void testFindDevicesByTenantId() {
UUID tenantId1 = UUIDs.timeBased();
UUID tenantId2 = UUIDs.timeBased();
@@ -55,8 +49,6 @@ public class JpaDeviceDaoTest extends AbstractJpaDaoTest {
}
@Test
- @DatabaseSetup(value = "classpath:dbunit/empty_dataset.xml",type = DatabaseOperation.DELETE_ALL)
- @DatabaseTearDown(value = "classpath:dbunit/empty_dataset.xml",type = DatabaseOperation.DELETE_ALL)
public void testFindAsync() throws ExecutionException, InterruptedException {
UUID tenantId = UUIDs.timeBased();
UUID customerId = UUIDs.timeBased();
@@ -75,8 +67,6 @@ public class JpaDeviceDaoTest extends AbstractJpaDaoTest {
}
@Test
- @DatabaseSetup(value = "classpath:dbunit/empty_dataset.xml",type = DatabaseOperation.DELETE_ALL)
- @DatabaseTearDown(value = "classpath:dbunit/empty_dataset.xml",type = DatabaseOperation.DELETE_ALL)
public void testFindDevicesByTenantIdAndIdsAsync() throws ExecutionException, InterruptedException {
UUID tenantId1 = UUIDs.timeBased();
UUID customerId1 = UUIDs.timeBased();
@@ -100,8 +90,6 @@ public class JpaDeviceDaoTest extends AbstractJpaDaoTest {
}
@Test
- @DatabaseSetup(value = "classpath:dbunit/empty_dataset.xml",type = DatabaseOperation.DELETE_ALL)
- @DatabaseTearDown(value = "classpath:dbunit/empty_dataset.xml",type = DatabaseOperation.DELETE_ALL)
public void testFindDevicesByTenantIdAndCustomerIdAndIdsAsync() throws ExecutionException, InterruptedException {
UUID tenantId1 = UUIDs.timeBased();
UUID customerId1 = UUIDs.timeBased();
diff --git a/dao/src/test/resources/jpa-test.properties b/dao/src/test/resources/jpa-test.properties
index f887e08..54025ab 100644
--- a/dao/src/test/resources/jpa-test.properties
+++ b/dao/src/test/resources/jpa-test.properties
@@ -1,10 +1,6 @@
cassandra.enabled=false
sql.enabled=true
-#sql.datasource.url=jdbc:h2:mem:thingsboard
-#sql.datasource.username=sa
-#sql.datasource.password=
-#spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.show-sql=false
spring.jpa.hibernate.ddl-auto=create-drop