Commit 3534684588523b3d3a77d7bd697cc20520963d45

Authored by Volodymyr Babak
1 parent 77673751

Refactored first and next dao methods

Fixed NULL_UUID
Added support for running cassandra and postgres application versions
Showing 40 changed files with 394 additions and 461 deletions
@@ -241,6 +241,16 @@ @@ -241,6 +241,16 @@
241 <artifactId>mockito-all</artifactId> 241 <artifactId>mockito-all</artifactId>
242 <scope>test</scope> 242 <scope>test</scope>
243 </dependency> 243 </dependency>
  244 + <dependency>
  245 + <groupId>org.dbunit</groupId>
  246 + <artifactId>dbunit</artifactId>
  247 + <scope>test</scope>
  248 + </dependency>
  249 + <dependency>
  250 + <groupId>com.github.springtestdbunit</groupId>
  251 + <artifactId>spring-test-dbunit</artifactId>
  252 + <scope>test</scope>
  253 + </dependency>
244 </dependencies> 254 </dependencies>
245 255
246 <build> 256 <build>
@@ -16,18 +16,13 @@ @@ -16,18 +16,13 @@
16 package org.thingsboard.server; 16 package org.thingsboard.server;
17 17
18 import org.springframework.boot.SpringApplication; 18 import org.springframework.boot.SpringApplication;
19 -import org.springframework.boot.autoconfigure.EnableAutoConfiguration;  
20 -import org.springframework.boot.autoconfigure.SpringBootApplication;  
21 -import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;  
22 -import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration;  
23 -import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration; 19 +import org.springframework.boot.SpringBootConfiguration;
24 import org.springframework.context.annotation.ComponentScan; 20 import org.springframework.context.annotation.ComponentScan;
25 import springfox.documentation.swagger2.annotations.EnableSwagger2; 21 import springfox.documentation.swagger2.annotations.EnableSwagger2;
26 22
27 import java.util.Arrays; 23 import java.util.Arrays;
28 24
29 -@EnableAutoConfiguration  
30 -@SpringBootApplication 25 +@SpringBootConfiguration
31 @EnableSwagger2 26 @EnableSwagger2
32 @ComponentScan({"org.thingsboard.server"}) 27 @ComponentScan({"org.thingsboard.server"})
33 public class ThingsboardServerApplication { 28 public class ThingsboardServerApplication {
@@ -243,7 +243,4 @@ spring: @@ -243,7 +243,4 @@ spring:
243 driverClassName: "${SPRING_DRIVER_CLASS_NAME:org.postgresql.Driver}" 243 driverClassName: "${SPRING_DRIVER_CLASS_NAME:org.postgresql.Driver}"
244 url: "${SPRING_DATASOURCE_URL:jdbc:postgresql://localhost:5432/thingsboard}" 244 url: "${SPRING_DATASOURCE_URL:jdbc:postgresql://localhost:5432/thingsboard}"
245 username: "${SPRING_DATASOURCE_USERNAME:postgres}" 245 username: "${SPRING_DATASOURCE_USERNAME:postgres}"
246 - password: "${SPRING_DATASOURCE_PASSWORD:postgres}"  
247 -# autoconfigure:  
248 -# exclude:  
249 -# - org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration  
  246 + password: "${SPRING_DATASOURCE_PASSWORD:postgres}"
@@ -28,14 +28,9 @@ import org.junit.After; @@ -28,14 +28,9 @@ import org.junit.After;
28 import org.junit.Assert; 28 import org.junit.Assert;
29 import org.junit.Before; 29 import org.junit.Before;
30 import org.junit.runner.RunWith; 30 import org.junit.runner.RunWith;
31 -import org.mockito.Mockito;  
32 -import org.mockito.invocation.InvocationOnMock;  
33 -import org.mockito.stubbing.Answer;  
34 import org.springframework.beans.factory.annotation.Autowired; 31 import org.springframework.beans.factory.annotation.Autowired;
35 -import org.springframework.boot.autoconfigure.EnableAutoConfiguration;  
36 import org.springframework.boot.test.IntegrationTest; 32 import org.springframework.boot.test.IntegrationTest;
37 import org.springframework.boot.test.SpringApplicationContextLoader; 33 import org.springframework.boot.test.SpringApplicationContextLoader;
38 -import org.springframework.context.annotation.Bean;  
39 import org.springframework.context.annotation.ComponentScan; 34 import org.springframework.context.annotation.ComponentScan;
40 import org.springframework.context.annotation.Configuration; 35 import org.springframework.context.annotation.Configuration;
41 import org.springframework.http.HttpHeaders; 36 import org.springframework.http.HttpHeaders;
@@ -66,11 +61,9 @@ import org.thingsboard.server.common.data.id.UUIDBased; @@ -66,11 +61,9 @@ import org.thingsboard.server.common.data.id.UUIDBased;
66 import org.thingsboard.server.common.data.page.TextPageLink; 61 import org.thingsboard.server.common.data.page.TextPageLink;
67 import org.thingsboard.server.common.data.security.Authority; 62 import org.thingsboard.server.common.data.security.Authority;
68 import org.thingsboard.server.config.ThingsboardSecurityConfiguration; 63 import org.thingsboard.server.config.ThingsboardSecurityConfiguration;
69 -import org.thingsboard.server.exception.ThingsboardException;  
70 -import org.thingsboard.server.service.mail.MailService;  
71 import org.thingsboard.server.service.mail.TestMailService; 64 import org.thingsboard.server.service.mail.TestMailService;
72 -import org.thingsboard.server.service.security.auth.rest.LoginRequest;  
73 import org.thingsboard.server.service.security.auth.jwt.RefreshTokenRequest; 65 import org.thingsboard.server.service.security.auth.jwt.RefreshTokenRequest;
  66 +import org.thingsboard.server.service.security.auth.rest.LoginRequest;
74 67
75 import java.io.IOException; 68 import java.io.IOException;
76 import java.nio.charset.Charset; 69 import java.nio.charset.Charset;
@@ -81,9 +74,7 @@ import java.util.List; @@ -81,9 +74,7 @@ import java.util.List;
81 74
82 import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.springSecurity; 75 import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.springSecurity;
83 import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; 76 import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
84 -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.header;  
85 -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;  
86 -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; 77 +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
87 import static org.springframework.test.web.servlet.setup.MockMvcBuilders.webAppContextSetup; 78 import static org.springframework.test.web.servlet.setup.MockMvcBuilders.webAppContextSetup;
88 79
89 @ActiveProfiles("test") 80 @ActiveProfiles("test")
@@ -92,7 +83,6 @@ import static org.springframework.test.web.servlet.setup.MockMvcBuilders.webAppC @@ -92,7 +83,6 @@ import static org.springframework.test.web.servlet.setup.MockMvcBuilders.webAppC
92 @TestPropertySource(locations = {"classpath:cassandra-test.properties", "classpath:thingsboard-test.properties"}) 83 @TestPropertySource(locations = {"classpath:cassandra-test.properties", "classpath:thingsboard-test.properties"})
93 @DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS) 84 @DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)
94 @Configuration 85 @Configuration
95 -@EnableAutoConfiguration  
96 @ComponentScan({"org.thingsboard.server"}) 86 @ComponentScan({"org.thingsboard.server"})
97 @WebAppConfiguration 87 @WebAppConfiguration
98 @IntegrationTest("server.port:0") 88 @IntegrationTest("server.port:0")
@@ -113,7 +103,6 @@ public abstract class AbstractControllerTest { @@ -113,7 +103,6 @@ public abstract class AbstractControllerTest {
113 MediaType.APPLICATION_JSON.getSubtype(), 103 MediaType.APPLICATION_JSON.getSubtype(),
114 Charset.forName("utf8")); 104 Charset.forName("utf8"));
115 105
116 -  
117 protected MockMvc mockMvc; 106 protected MockMvc mockMvc;
118 107
119 protected String token; 108 protected String token;
application/src/test/java/org/thingsboard/server/controller/CassandraControllerTestSuite.java renamed from application/src/test/java/org/thingsboard/server/controller/ControllerTestSuite.java
@@ -26,7 +26,7 @@ import java.util.Arrays; @@ -26,7 +26,7 @@ import java.util.Arrays;
26 26
27 @RunWith(ClasspathSuite.class) 27 @RunWith(ClasspathSuite.class)
28 @ClassnameFilters({"org.thingsboard.server.controller.*Test"}) 28 @ClassnameFilters({"org.thingsboard.server.controller.*Test"})
29 -public class ControllerTestSuite { 29 +public class CassandraControllerTestSuite {
30 30
31 @ClassRule 31 @ClassRule
32 public static CustomCassandraCQLUnit cassandraUnit = 32 public static CustomCassandraCQLUnit cassandraUnit =
@@ -35,5 +35,4 @@ public class ControllerTestSuite { @@ -35,5 +35,4 @@ public class ControllerTestSuite {
35 new ClassPathCQLDataSet("cassandra/system-data.cql", false, false), 35 new ClassPathCQLDataSet("cassandra/system-data.cql", false, false),
36 new ClassPathCQLDataSet("system-test.cql", false, false)), 36 new ClassPathCQLDataSet("system-test.cql", false, false)),
37 "cassandra-test.yaml", 30000l); 37 "cassandra-test.yaml", 30000l);
38 -  
39 } 38 }
@@ -17,7 +17,6 @@ package org.thingsboard.server.mqtt; @@ -17,7 +17,6 @@ package org.thingsboard.server.mqtt;
17 17
18 import org.junit.runner.RunWith; 18 import org.junit.runner.RunWith;
19 import org.springframework.beans.factory.annotation.Autowired; 19 import org.springframework.beans.factory.annotation.Autowired;
20 -import org.springframework.boot.autoconfigure.EnableAutoConfiguration;  
21 import org.springframework.boot.test.IntegrationTest; 20 import org.springframework.boot.test.IntegrationTest;
22 import org.springframework.boot.test.SpringApplicationContextLoader; 21 import org.springframework.boot.test.SpringApplicationContextLoader;
23 import org.springframework.context.annotation.ComponentScan; 22 import org.springframework.context.annotation.ComponentScan;
@@ -46,7 +45,6 @@ import static org.junit.Assert.assertNotNull; @@ -46,7 +45,6 @@ import static org.junit.Assert.assertNotNull;
46 @TestPropertySource(locations = {"classpath:cassandra-test.properties", "classpath:thingsboard-test.properties"}) 45 @TestPropertySource(locations = {"classpath:cassandra-test.properties", "classpath:thingsboard-test.properties"})
47 @DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS) 46 @DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)
48 @Configuration 47 @Configuration
49 -@EnableAutoConfiguration  
50 @ComponentScan({"org.thingsboard.server"}) 48 @ComponentScan({"org.thingsboard.server"})
51 @WebAppConfiguration 49 @WebAppConfiguration
52 @IntegrationTest("server.port:8080") 50 @IntegrationTest("server.port:8080")
@@ -18,6 +18,7 @@ package org.thingsboard.server.dao; @@ -18,6 +18,7 @@ package org.thingsboard.server.dao;
18 import org.springframework.boot.autoconfigure.EnableAutoConfiguration; 18 import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
19 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; 19 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
20 import org.springframework.boot.autoconfigure.domain.EntityScan; 20 import org.springframework.boot.autoconfigure.domain.EntityScan;
  21 +import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;
21 import org.springframework.context.annotation.ComponentScan; 22 import org.springframework.context.annotation.ComponentScan;
22 import org.springframework.context.annotation.Configuration; 23 import org.springframework.context.annotation.Configuration;
23 import org.springframework.data.jpa.repository.config.EnableJpaRepositories; 24 import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
@@ -28,11 +29,11 @@ import org.springframework.transaction.annotation.EnableTransactionManagement; @@ -28,11 +29,11 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
28 */ 29 */
29 @Configuration 30 @Configuration
30 @EnableAutoConfiguration 31 @EnableAutoConfiguration
31 -@ConditionalOnProperty(prefix="sql", value="enabled",havingValue = "true", matchIfMissing = false)  
32 @ComponentScan("org.thingsboard.server.dao.sql") 32 @ComponentScan("org.thingsboard.server.dao.sql")
33 @EnableJpaRepositories("org.thingsboard.server.dao.sql") 33 @EnableJpaRepositories("org.thingsboard.server.dao.sql")
34 @EntityScan("org.thingsboard.server.dao.model.sql") 34 @EntityScan("org.thingsboard.server.dao.model.sql")
35 @EnableTransactionManagement 35 @EnableTransactionManagement
  36 +@ConditionalOnProperty(prefix = "sql", value = "enabled", havingValue = "true")
36 public class JpaDaoConfig { 37 public class JpaDaoConfig {
37 38
38 } 39 }
  1 +/**
  2 + * Copyright © 2016-2017 The Thingsboard Authors
  3 + *
  4 + * Licensed under the Apache License, Version 2.0 (the "License");
  5 + * you may not use this file except in compliance with the License.
  6 + * You may obtain a copy of the License at
  7 + *
  8 + * http://www.apache.org/licenses/LICENSE-2.0
  9 + *
  10 + * Unless required by applicable law or agreed to in writing, software
  11 + * distributed under the License is distributed on an "AS IS" BASIS,
  12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13 + * See the License for the specific language governing permissions and
  14 + * limitations under the License.
  15 + */
  16 +package org.thingsboard.server.dao;
  17 +
  18 +import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
  19 +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
  20 +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
  21 +import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration;
  22 +import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;
  23 +import org.springframework.context.annotation.Configuration;
  24 +
  25 +@Configuration
  26 +@EnableAutoConfiguration(
  27 + exclude = {
  28 + DataSourceAutoConfiguration.class,
  29 + DataSourceTransactionManagerAutoConfiguration.class,
  30 + HibernateJpaAutoConfiguration.class})
  31 +@ConditionalOnProperty(prefix = "cassandra", value = "enabled", havingValue = "true")
  32 +public class NoSqlDaoConfig {
  33 +}
dao/src/main/java/org/thingsboard/server/dao/model/sql/TenantDeviceTypeEntity.java renamed from dao/src/main/java/org/thingsboard/server/dao/model/sql/TenantDeviceTypeProjection.java
@@ -15,9 +15,14 @@ @@ -15,9 +15,14 @@
15 */ 15 */
16 package org.thingsboard.server.dao.model.sql; 16 package org.thingsboard.server.dao.model.sql;
17 17
18 -public interface TenantDeviceTypeProjection { 18 +import lombok.AllArgsConstructor;
  19 +import lombok.Data;
19 20
20 - String getTenantId(); 21 +import java.util.UUID;
21 22
22 - String getType(); 23 +@AllArgsConstructor
  24 +@Data
  25 +public class TenantDeviceTypeEntity {
  26 + private UUID tenantId;
  27 + private String type;
23 } 28 }
@@ -82,8 +82,7 @@ public abstract class JpaAbstractDao<E extends BaseEntity<D>, D> implements Dao< @@ -82,8 +82,7 @@ public abstract class JpaAbstractDao<E extends BaseEntity<D>, D> implements Dao<
82 @Override 82 @Override
83 public ListenableFuture<D> findByIdAsync(UUID key) { 83 public ListenableFuture<D> findByIdAsync(UUID key) {
84 log.debug("Get entity by key async {}", key); 84 log.debug("Get entity by key async {}", key);
85 - ListenableFuture<D> listenableFuture = service.submit(() -> DaoUtil.getData(getCrudRepository().findOne(key)));  
86 - return listenableFuture; 85 + return service.submit(() -> DaoUtil.getData(getCrudRepository().findOne(key)));
87 } 86 }
88 87
89 @Override 88 @Override
@@ -17,8 +17,8 @@ package org.thingsboard.server.dao.sql.alarm; @@ -17,8 +17,8 @@ package org.thingsboard.server.dao.sql.alarm;
17 17
18 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; 18 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
19 import org.springframework.data.jpa.repository.Query; 19 import org.springframework.data.jpa.repository.Query;
20 -import org.springframework.data.repository.CrudRepository;  
21 -import org.thingsboard.server.common.data.alarm.Alarm; 20 +import org.springframework.data.repository.PagingAndSortingRepository;
  21 +import org.springframework.data.repository.query.Param;
22 import org.thingsboard.server.dao.model.sql.AlarmEntity; 22 import org.thingsboard.server.dao.model.sql.AlarmEntity;
23 23
24 import java.util.UUID; 24 import java.util.UUID;
@@ -27,9 +27,12 @@ import java.util.UUID; @@ -27,9 +27,12 @@ import java.util.UUID;
27 * Created by Valerii Sosliuk on 5/21/2017. 27 * Created by Valerii Sosliuk on 5/21/2017.
28 */ 28 */
29 @ConditionalOnProperty(prefix = "sql", value = "enabled", havingValue = "true", matchIfMissing = false) 29 @ConditionalOnProperty(prefix = "sql", value = "enabled", havingValue = "true", matchIfMissing = false)
30 -public interface AlarmRepository extends CrudRepository<AlarmEntity, UUID> { 30 +public interface AlarmRepository extends PagingAndSortingRepository<AlarmEntity, UUID> {
31 31
32 - @Query(nativeQuery = true, value = "SELECT * FROM ALARM WHERE TENANT_ID = ?1 AND ORIGINATOR_ID = ?2 " +  
33 - "AND ?3 = ?3 AND TYPE = ?4 ORDER BY ID DESC LIMIT 1")  
34 - AlarmEntity findLatestByOriginatorAndType(UUID tenantId, UUID originatorId, int entityType, String alarmType); 32 + @Query(nativeQuery = true, value = "SELECT * FROM ALARM WHERE TENANT_ID = :tenantId AND ORIGINATOR_ID = :originatorId " +
  33 + "AND ORIGINATOR_TYPE = :entityType AND TYPE = :alarmType ORDER BY TYPE ASC, ID DESC LIMIT 1")
  34 + AlarmEntity findLatestByOriginatorAndType(@Param("tenantId") UUID tenantId,
  35 + @Param("originatorId") UUID originatorId,
  36 + @Param("entityType") int entityType,
  37 + @Param("alarmType") String alarmType);
35 } 38 }
@@ -15,7 +15,9 @@ @@ -15,7 +15,9 @@
15 */ 15 */
16 package org.thingsboard.server.dao.sql.alarm; 16 package org.thingsboard.server.dao.sql.alarm;
17 17
18 -import com.google.common.util.concurrent.*; 18 +import com.google.common.util.concurrent.AsyncFunction;
  19 +import com.google.common.util.concurrent.Futures;
  20 +import com.google.common.util.concurrent.ListenableFuture;
19 import lombok.extern.slf4j.Slf4j; 21 import lombok.extern.slf4j.Slf4j;
20 import org.springframework.beans.factory.annotation.Autowired; 22 import org.springframework.beans.factory.annotation.Autowired;
21 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; 23 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
@@ -39,7 +41,6 @@ import org.thingsboard.server.dao.sql.JpaAbstractDao; @@ -39,7 +41,6 @@ import org.thingsboard.server.dao.sql.JpaAbstractDao;
39 import java.util.ArrayList; 41 import java.util.ArrayList;
40 import java.util.List; 42 import java.util.List;
41 import java.util.UUID; 43 import java.util.UUID;
42 -import java.util.concurrent.Executors;  
43 44
44 import static org.springframework.transaction.annotation.Propagation.REQUIRES_NEW; 45 import static org.springframework.transaction.annotation.Propagation.REQUIRES_NEW;
45 46
@@ -70,9 +71,12 @@ public class JpaAlarmDao extends JpaAbstractDao<AlarmEntity, Alarm> implements A @@ -70,9 +71,12 @@ public class JpaAlarmDao extends JpaAbstractDao<AlarmEntity, Alarm> implements A
70 @Override 71 @Override
71 @Transactional(propagation = REQUIRES_NEW) 72 @Transactional(propagation = REQUIRES_NEW)
72 public ListenableFuture<Alarm> findLatestByOriginatorAndType(TenantId tenantId, EntityId originator, String type) { 73 public ListenableFuture<Alarm> findLatestByOriginatorAndType(TenantId tenantId, EntityId originator, String type) {
73 - return service.submit(() -> DaoUtil.getData(  
74 - alarmRepository.findLatestByOriginatorAndType(tenantId.getId(), originator.getId(),  
75 - originator.getEntityType().ordinal(), type))); 74 + return service.submit(() ->
  75 + DaoUtil.getData(alarmRepository.findLatestByOriginatorAndType(
  76 + tenantId.getId(),
  77 + originator.getId(),
  78 + originator.getEntityType().ordinal(),
  79 + type)));
76 } 80 }
77 81
78 @Override 82 @Override
@@ -18,12 +18,11 @@ package org.thingsboard.server.dao.sql.asset; @@ -18,12 +18,11 @@ package org.thingsboard.server.dao.sql.asset;
18 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; 18 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
19 import org.springframework.data.jpa.repository.Query; 19 import org.springframework.data.jpa.repository.Query;
20 import org.springframework.data.repository.CrudRepository; 20 import org.springframework.data.repository.CrudRepository;
21 -import org.thingsboard.server.common.data.asset.Asset; 21 +import org.springframework.data.repository.query.Param;
22 import org.thingsboard.server.common.data.asset.TenantAssetType; 22 import org.thingsboard.server.common.data.asset.TenantAssetType;
23 import org.thingsboard.server.dao.model.sql.AssetEntity; 23 import org.thingsboard.server.dao.model.sql.AssetEntity;
24 24
25 import java.util.List; 25 import java.util.List;
26 -import java.util.Optional;  
27 import java.util.UUID; 26 import java.util.UUID;
28 27
29 /** 28 /**
@@ -31,28 +30,24 @@ import java.util.UUID; @@ -31,28 +30,24 @@ import java.util.UUID;
31 */ 30 */
32 @ConditionalOnProperty(prefix = "sql", value = "enabled", havingValue = "true", matchIfMissing = false) 31 @ConditionalOnProperty(prefix = "sql", value = "enabled", havingValue = "true", matchIfMissing = false)
33 public interface AssetRepository extends CrudRepository<AssetEntity, UUID> { 32 public interface AssetRepository extends CrudRepository<AssetEntity, UUID> {
34 -//  
35 - @Query(nativeQuery = true, value = "SELECT * FROM ASSET WHERE TENANT_ID = ?2 " +  
36 - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(?3, '%')) " +  
37 - "ORDER BY ID LIMIT ?1")  
38 - List<AssetEntity> findByTenantIdFirstPage(int limit, UUID tenantId, String textSearch);  
39 33
40 - @Query(nativeQuery = true, value = "SELECT * FROM ASSET WHERE TENANT_ID = ?2 " +  
41 - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(?3, '%')) " +  
42 - "AND ID > ?4 ORDER BY ID LIMIT ?1")  
43 - List<AssetEntity> findByTenantIdNextPage(int limit, UUID tenantId, String textSearch, UUID idOffset); 34 + @Query(nativeQuery = true, value = "SELECT * FROM ASSET WHERE TENANT_ID = :tenantId " +
  35 + "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " +
  36 + "AND ID > :idOffset ORDER BY ID LIMIT :limit")
  37 + List<AssetEntity> findByTenantId(@Param("limit") int limit,
  38 + @Param("tenantId") UUID tenantId,
  39 + @Param("textSearch") String textSearch,
  40 + @Param("idOffset") UUID idOffset);
44 41
45 - @Query(nativeQuery = true, value = "SELECT * FROM ASSET WHERE TENANT_ID = ?2 " +  
46 - "AND CUSTOMER_ID = ?3 " +  
47 - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(?4, '%')) " +  
48 - "ORDER BY ID LIMIT ?1")  
49 - List<AssetEntity> findByTenantIdAndCustomerIdFirstPage(int limit, UUID tenantId, UUID customerId, String textSearch);  
50 -  
51 - @Query(nativeQuery = true, value = "SELECT * FROM ASSET WHERE TENANT_ID = ?2 " +  
52 - "AND CUSTOMER_ID = ?3 " +  
53 - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(?4, '%')) " +  
54 - "AND ID > ?5 ORDER BY ID LIMIT ?1")  
55 - List<AssetEntity> findByTenantIdAndCustomerIdNextPage(int limit, UUID tenantId, UUID customerId, String textSearch, UUID idOffset); 42 + @Query(nativeQuery = true, value = "SELECT * FROM ASSET WHERE TENANT_ID = :tenantId " +
  43 + "AND CUSTOMER_ID = :customerId " +
  44 + "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " +
  45 + "AND ID > :idOffset ORDER BY ID LIMIT :limit")
  46 + List<AssetEntity> findByTenantIdAndCustomerId(@Param("limit") int limit,
  47 + @Param("tenantId") UUID tenantId,
  48 + @Param("customerId") UUID customerId,
  49 + @Param("textSearch") String textSearch,
  50 + @Param("idOffset") UUID idOffset);
56 51
57 List<AssetEntity> findByTenantIdAndIdIn(UUID tenantId, List<UUID> assetIds); 52 List<AssetEntity> findByTenantIdAndIdIn(UUID tenantId, List<UUID> assetIds);
58 53
@@ -60,17 +55,16 @@ public interface AssetRepository extends CrudRepository<AssetEntity, UUID> { @@ -60,17 +55,16 @@ public interface AssetRepository extends CrudRepository<AssetEntity, UUID> {
60 55
61 AssetEntity findByTenantIdAndName(UUID tenantId, String name); 56 AssetEntity findByTenantIdAndName(UUID tenantId, String name);
62 57
63 - @Query(nativeQuery = true, value = "SELECT * FROM ASSET WHERE TENANT_ID = ?2 " +  
64 - "AND CUSTOMER_ID = ?3 AND TYPE = ?4 " +  
65 - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(?5, '%')) " +  
66 - "ORDER BY ID LIMIT ?1")  
67 - List<AssetEntity> findByTenantIdAndCustomerIdAndTypeFirstPage(int limit, UUID tenantId, UUID customerId, String type, String textSearch);  
68 -  
69 - @Query(nativeQuery = true, value = "SELECT * FROM ASSET WHERE TENANT_ID = ?2 " +  
70 - "AND CUSTOMER_ID = ?3 AND TYPE = ?4 " +  
71 - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(?5, '%')) " +  
72 - "AND ID > ?6 ORDER BY ID LIMIT ?1")  
73 - List<AssetEntity> findByTenantIdAndCustomerIdAndTypeNextPage(int limit, UUID tenantId, UUID customerId, String type, String textSearch, UUID idOffset); 58 + @Query(nativeQuery = true, value = "SELECT * FROM ASSET WHERE TENANT_ID = :tenantId " +
  59 + "AND CUSTOMER_ID = :customerId AND TYPE = :type " +
  60 + "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " +
  61 + "AND ID > :idOffset ORDER BY ID LIMIT :limit")
  62 + List<AssetEntity> findByTenantIdAndCustomerIdAndType(@Param("limit") int limit,
  63 + @Param("tenantId") UUID tenantId,
  64 + @Param("customerId") UUID customerId,
  65 + @Param("type") String type,
  66 + @Param("textSearch") String textSearch,
  67 + @Param("idOffset") UUID idOffset);
74 68
75 @Query(value = "SELECT NEW org.thingsboard.server.common.data.asset.TenantAssetType(a.type, a.tenantId) FROM AssetEntity a GROUP BY a.tenantId, a.type") 69 @Query(value = "SELECT NEW org.thingsboard.server.common.data.asset.TenantAssetType(a.type, a.tenantId) FROM AssetEntity a GROUP BY a.tenantId, a.type")
76 List<TenantAssetType> findTenantAssetTypes(); 70 List<TenantAssetType> findTenantAssetTypes();
@@ -16,8 +16,6 @@ @@ -16,8 +16,6 @@
16 package org.thingsboard.server.dao.sql.asset; 16 package org.thingsboard.server.dao.sql.asset;
17 17
18 import com.google.common.util.concurrent.ListenableFuture; 18 import com.google.common.util.concurrent.ListenableFuture;
19 -import com.google.common.util.concurrent.ListeningExecutorService;  
20 -import com.google.common.util.concurrent.MoreExecutors;  
21 import org.springframework.beans.factory.annotation.Autowired; 19 import org.springframework.beans.factory.annotation.Autowired;
22 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; 20 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
23 import org.springframework.data.repository.CrudRepository; 21 import org.springframework.data.repository.CrudRepository;
@@ -33,7 +31,8 @@ import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao; @@ -33,7 +31,8 @@ import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao;
33 import java.util.List; 31 import java.util.List;
34 import java.util.Optional; 32 import java.util.Optional;
35 import java.util.UUID; 33 import java.util.UUID;
36 -import java.util.concurrent.Executors; 34 +
  35 +import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID;
37 36
38 /** 37 /**
39 * Created by Valerii Sosliuk on 5/19/2017. 38 * Created by Valerii Sosliuk on 5/19/2017.
@@ -57,13 +56,12 @@ public class JpaAssetDao extends JpaAbstractSearchTextDao<AssetEntity, Asset> im @@ -57,13 +56,12 @@ public class JpaAssetDao extends JpaAbstractSearchTextDao<AssetEntity, Asset> im
57 56
58 @Override 57 @Override
59 public List<Asset> findAssetsByTenantId(UUID tenantId, TextPageLink pageLink) { 58 public List<Asset> findAssetsByTenantId(UUID tenantId, TextPageLink pageLink) {
60 - if (pageLink.getIdOffset() == null) {  
61 - return DaoUtil.convertDataList(assetRepository.findByTenantIdFirstPage(pageLink.getLimit(), tenantId,  
62 - pageLink.getTextSearch()));  
63 - } else {  
64 - return DaoUtil.convertDataList(assetRepository.findByTenantIdNextPage(pageLink.getLimit(), tenantId,  
65 - pageLink.getTextSearch(), pageLink.getIdOffset()));  
66 - } 59 + return DaoUtil.convertDataList(assetRepository
  60 + .findByTenantId(
  61 + pageLink.getLimit(),
  62 + tenantId,
  63 + pageLink.getTextSearch(),
  64 + pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset()));
67 } 65 }
68 66
69 @Override 67 @Override
@@ -74,19 +72,19 @@ public class JpaAssetDao extends JpaAbstractSearchTextDao<AssetEntity, Asset> im @@ -74,19 +72,19 @@ public class JpaAssetDao extends JpaAbstractSearchTextDao<AssetEntity, Asset> im
74 72
75 @Override 73 @Override
76 public List<Asset> findAssetsByTenantIdAndCustomerId(UUID tenantId, UUID customerId, TextPageLink pageLink) { 74 public List<Asset> findAssetsByTenantIdAndCustomerId(UUID tenantId, UUID customerId, TextPageLink pageLink) {
77 - if (pageLink.getIdOffset() == null) {  
78 - return DaoUtil.convertDataList(assetRepository.findByTenantIdAndCustomerIdFirstPage(pageLink.getLimit(), tenantId,  
79 - customerId, pageLink.getTextSearch()));  
80 - } else {  
81 - return DaoUtil.convertDataList(assetRepository.findByTenantIdAndCustomerIdNextPage(pageLink.getLimit(), tenantId,  
82 - customerId, pageLink.getTextSearch(), pageLink.getIdOffset()));  
83 - } 75 + return DaoUtil.convertDataList(assetRepository
  76 + .findByTenantIdAndCustomerId(
  77 + pageLink.getLimit(),
  78 + tenantId,
  79 + customerId,
  80 + pageLink.getTextSearch(),
  81 + pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset()));
84 } 82 }
85 83
86 @Override 84 @Override
87 public ListenableFuture<List<Asset>> findAssetsByTenantIdAndCustomerIdAndIdsAsync(UUID tenantId, UUID customerId, List<UUID> assetIds) { 85 public ListenableFuture<List<Asset>> findAssetsByTenantIdAndCustomerIdAndIdsAsync(UUID tenantId, UUID customerId, List<UUID> assetIds) {
88 return service.submit(() -> 86 return service.submit(() ->
89 - DaoUtil.convertDataList( assetRepository.findByTenantIdAndCustomerIdAndIdIn(tenantId, customerId, assetIds))); 87 + DaoUtil.convertDataList(assetRepository.findByTenantIdAndCustomerIdAndIdIn(tenantId, customerId, assetIds)));
90 } 88 }
91 89
92 @Override 90 @Override
@@ -102,13 +100,14 @@ public class JpaAssetDao extends JpaAbstractSearchTextDao<AssetEntity, Asset> im @@ -102,13 +100,14 @@ public class JpaAssetDao extends JpaAbstractSearchTextDao<AssetEntity, Asset> im
102 100
103 @Override 101 @Override
104 public List<Asset> findAssetsByTenantIdAndCustomerIdAndType(UUID tenantId, UUID customerId, String type, TextPageLink pageLink) { 102 public List<Asset> findAssetsByTenantIdAndCustomerIdAndType(UUID tenantId, UUID customerId, String type, TextPageLink pageLink) {
105 - if (pageLink.getIdOffset() == null) {  
106 - return DaoUtil.convertDataList(assetRepository.findByTenantIdAndCustomerIdAndTypeFirstPage(pageLink.getLimit(), tenantId,  
107 - customerId, type, pageLink.getTextSearch()));  
108 - } else {  
109 - return DaoUtil.convertDataList(assetRepository.findByTenantIdAndCustomerIdAndTypeNextPage(pageLink.getLimit(), tenantId,  
110 - customerId, type, pageLink.getTextSearch(), pageLink.getIdOffset()));  
111 - } 103 + return DaoUtil.convertDataList(assetRepository
  104 + .findByTenantIdAndCustomerIdAndType(
  105 + pageLink.getLimit(),
  106 + tenantId,
  107 + customerId,
  108 + type,
  109 + pageLink.getTextSearch(),
  110 + pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset()));
112 } 111 }
113 112
114 @Override 113 @Override
@@ -18,13 +18,9 @@ package org.thingsboard.server.dao.sql.component; @@ -18,13 +18,9 @@ package org.thingsboard.server.dao.sql.component;
18 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; 18 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
19 import org.springframework.data.jpa.repository.Query; 19 import org.springframework.data.jpa.repository.Query;
20 import org.springframework.data.repository.CrudRepository; 20 import org.springframework.data.repository.CrudRepository;
21 -import org.springframework.stereotype.Component;  
22 -import org.thingsboard.server.common.data.plugin.ComponentScope;  
23 -import org.thingsboard.server.common.data.plugin.ComponentType;  
24 -import org.thingsboard.server.dao.model.ToData; 21 +import org.springframework.data.repository.query.Param;
25 import org.thingsboard.server.dao.model.sql.ComponentDescriptorEntity; 22 import org.thingsboard.server.dao.model.sql.ComponentDescriptorEntity;
26 23
27 -import java.util.Collection;  
28 import java.util.List; 24 import java.util.List;
29 import java.util.UUID; 25 import java.util.UUID;
30 26
@@ -36,25 +32,22 @@ public interface ComponentDescriptorRepository extends CrudRepository<ComponentD @@ -36,25 +32,22 @@ public interface ComponentDescriptorRepository extends CrudRepository<ComponentD
36 32
37 ComponentDescriptorEntity findByClazz(String clazz); 33 ComponentDescriptorEntity findByClazz(String clazz);
38 34
39 - @Query(nativeQuery = true, value = "SELECT * FROM COMPONENT_DESCRIPTOR WHERE TYPE = ?2 " +  
40 - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(?3, '%')) " +  
41 - "ORDER BY ID LIMIT ?1")  
42 - List<ComponentDescriptorEntity> findByTypeFirstPage(int limit, String type, String textSearch);  
43 -  
44 - @Query(nativeQuery = true, value = "SELECT * FROM COMPONENT_DESCRIPTOR WHERE TYPE = ?2 " +  
45 - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(?3, '%')) " +  
46 - "AND ID > ?4 ORDER BY ID LIMIT ?1")  
47 - List<ComponentDescriptorEntity> findByTypeNextPage(int limit, String type, String textSearch, UUID idOffset);  
48 -  
49 - @Query(nativeQuery = true, value = "SELECT * FROM COMPONENT_DESCRIPTOR WHERE TYPE = ?2 " +  
50 - "AND SCOPE = ?3 AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(?4, '%')) " +  
51 - "ORDER BY ID LIMIT ?1")  
52 - List<ComponentDescriptorEntity> findByScopeAndTypeFirstPage(int limit, String type, String scope, String textSearch);  
53 -  
54 - @Query(nativeQuery = true, value = "SELECT * FROM COMPONENT_DESCRIPTOR WHERE TYPE = ?2 " +  
55 - "AND SCOPE = ?3 AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(?4, '%')) " +  
56 - "AND ID > ?5 ORDER BY ID LIMIT ?1")  
57 - List<ComponentDescriptorEntity> findByScopeAndTypeNextPage(int limit, String type, String scope, String textSearch, UUID idOffset); 35 + @Query(nativeQuery = true, value = "SELECT * FROM COMPONENT_DESCRIPTOR WHERE TYPE = :type " +
  36 + "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " +
  37 + "AND ID > :idOffset ORDER BY ID LIMIT :limit")
  38 + List<ComponentDescriptorEntity> findByType(@Param("limit") int limit,
  39 + @Param("type") String type,
  40 + @Param("textSearch") String textSearch,
  41 + @Param("idOffset") UUID idOffset);
  42 +
  43 + @Query(nativeQuery = true, value = "SELECT * FROM COMPONENT_DESCRIPTOR WHERE TYPE = :type " +
  44 + "AND SCOPE = :scope AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " +
  45 + "AND ID > :idOffset ORDER BY ID LIMIT :limit")
  46 + List<ComponentDescriptorEntity> findByScopeAndType(@Param("limit") int limit,
  47 + @Param("type") String type,
  48 + @Param("scope") String scope,
  49 + @Param("textSearch") String textSearch,
  50 + @Param("idOffset") UUID idOffset);
58 51
59 void deleteByClazz(String clazz); 52 void deleteByClazz(String clazz);
60 } 53 }
@@ -34,13 +34,15 @@ import java.util.List; @@ -34,13 +34,15 @@ import java.util.List;
34 import java.util.Optional; 34 import java.util.Optional;
35 import java.util.UUID; 35 import java.util.UUID;
36 36
  37 +import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID;
  38 +
37 /** 39 /**
38 * Created by Valerii Sosliuk on 5/6/2017. 40 * Created by Valerii Sosliuk on 5/6/2017.
39 */ 41 */
40 @Component 42 @Component
41 @ConditionalOnProperty(prefix = "sql", value = "enabled", havingValue = "true", matchIfMissing = false) 43 @ConditionalOnProperty(prefix = "sql", value = "enabled", havingValue = "true", matchIfMissing = false)
42 public class JpaBaseComponentDescriptorDao extends JpaAbstractSearchTextDao<ComponentDescriptorEntity, ComponentDescriptor> 44 public class JpaBaseComponentDescriptorDao extends JpaAbstractSearchTextDao<ComponentDescriptorEntity, ComponentDescriptor>
43 - implements ComponentDescriptorDao { 45 + implements ComponentDescriptorDao {
44 46
45 @Autowired 47 @Autowired
46 private ComponentDescriptorRepository componentDescriptorRepository; 48 private ComponentDescriptorRepository componentDescriptorRepository;
@@ -79,24 +81,23 @@ public class JpaBaseComponentDescriptorDao extends JpaAbstractSearchTextDao<Comp @@ -79,24 +81,23 @@ public class JpaBaseComponentDescriptorDao extends JpaAbstractSearchTextDao<Comp
79 81
80 @Override 82 @Override
81 public List<ComponentDescriptor> findByTypeAndPageLink(ComponentType type, TextPageLink pageLink) { 83 public List<ComponentDescriptor> findByTypeAndPageLink(ComponentType type, TextPageLink pageLink) {
82 - if (pageLink.getIdOffset() == null) {  
83 - return DaoUtil.convertDataList(componentDescriptorRepository.findByTypeFirstPage(pageLink.getLimit(),  
84 - type.toString(), pageLink.getTextSearch()));  
85 - } else {  
86 - return DaoUtil.convertDataList(componentDescriptorRepository.findByTypeNextPage(pageLink.getLimit(),  
87 - type.toString(), pageLink.getTextSearch(), pageLink.getIdOffset()));  
88 - } 84 + return DaoUtil.convertDataList(componentDescriptorRepository
  85 + .findByType(
  86 + pageLink.getLimit(),
  87 + type.toString(),
  88 + pageLink.getTextSearch(),
  89 + pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset()));
89 } 90 }
90 91
91 @Override 92 @Override
92 public List<ComponentDescriptor> findByScopeAndTypeAndPageLink(ComponentScope scope, ComponentType type, TextPageLink pageLink) { 93 public List<ComponentDescriptor> findByScopeAndTypeAndPageLink(ComponentScope scope, ComponentType type, TextPageLink pageLink) {
93 - if (pageLink.getIdOffset() == null) {  
94 - return DaoUtil.convertDataList(componentDescriptorRepository.findByScopeAndTypeFirstPage(pageLink.getLimit(),  
95 - type.toString(), scope.toString(), pageLink.getTextSearch()));  
96 - } else {  
97 - return DaoUtil.convertDataList(componentDescriptorRepository.findByScopeAndTypeNextPage(pageLink.getLimit(),  
98 - type.toString(), scope.toString(), pageLink.getTextSearch(), pageLink.getIdOffset()));  
99 - } 94 + return DaoUtil.convertDataList(componentDescriptorRepository
  95 + .findByScopeAndType(
  96 + pageLink.getLimit(),
  97 + type.toString(),
  98 + scope.toString(),
  99 + pageLink.getTextSearch(),
  100 + pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset()));
100 } 101 }
101 102
102 @Override 103 @Override
@@ -18,7 +18,7 @@ package org.thingsboard.server.dao.sql.customer; @@ -18,7 +18,7 @@ package org.thingsboard.server.dao.sql.customer;
18 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; 18 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
19 import org.springframework.data.jpa.repository.Query; 19 import org.springframework.data.jpa.repository.Query;
20 import org.springframework.data.repository.CrudRepository; 20 import org.springframework.data.repository.CrudRepository;
21 -import org.thingsboard.server.common.data.Customer; 21 +import org.springframework.data.repository.query.Param;
22 import org.thingsboard.server.dao.model.sql.CustomerEntity; 22 import org.thingsboard.server.dao.model.sql.CustomerEntity;
23 23
24 import java.util.List; 24 import java.util.List;
@@ -30,15 +30,13 @@ import java.util.UUID; @@ -30,15 +30,13 @@ import java.util.UUID;
30 @ConditionalOnProperty(prefix = "sql", value = "enabled", havingValue = "true", matchIfMissing = false) 30 @ConditionalOnProperty(prefix = "sql", value = "enabled", havingValue = "true", matchIfMissing = false)
31 public interface CustomerRepository extends CrudRepository<CustomerEntity, UUID> { 31 public interface CustomerRepository extends CrudRepository<CustomerEntity, UUID> {
32 32
33 - @Query(nativeQuery = true, value = "SELECT * FROM CUSTOMER WHERE TENANT_ID = ?2 " +  
34 - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(?3, '%')) " +  
35 - "ORDER BY ID LIMIT ?1")  
36 - List<CustomerEntity> findByTenantIdFirstPage(int limit, UUID tenantId, String textSearch);  
37 -  
38 - @Query(nativeQuery = true, value = "SELECT * FROM CUSTOMER WHERE TENANT_ID = ?2 " +  
39 - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(?3, '%')) " +  
40 - "AND ID > ?4 ORDER BY ID LIMIT ?1")  
41 - List<CustomerEntity> findByTenantIdNextPage(int limit, UUID tenantId, String textSearch, UUID idOffset); 33 + @Query(nativeQuery = true, value = "SELECT * FROM CUSTOMER WHERE TENANT_ID = :tenantId " +
  34 + "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " +
  35 + "AND ID > :idOffset ORDER BY ID LIMIT :limit")
  36 + List<CustomerEntity> findByTenantId(@Param("limit") int limit,
  37 + @Param("tenantId") UUID tenantId,
  38 + @Param("textSearch") String textSearch,
  39 + @Param("idOffset") UUID idOffset);
42 40
43 CustomerEntity findByTenantIdAndTitle(UUID tenantId, String title); 41 CustomerEntity findByTenantIdAndTitle(UUID tenantId, String title);
44 42
@@ -23,7 +23,6 @@ import org.thingsboard.server.common.data.Customer; @@ -23,7 +23,6 @@ import org.thingsboard.server.common.data.Customer;
23 import org.thingsboard.server.common.data.page.TextPageLink; 23 import org.thingsboard.server.common.data.page.TextPageLink;
24 import org.thingsboard.server.dao.DaoUtil; 24 import org.thingsboard.server.dao.DaoUtil;
25 import org.thingsboard.server.dao.customer.CustomerDao; 25 import org.thingsboard.server.dao.customer.CustomerDao;
26 -import org.thingsboard.server.dao.model.ModelConstants;  
27 import org.thingsboard.server.dao.model.sql.CustomerEntity; 26 import org.thingsboard.server.dao.model.sql.CustomerEntity;
28 import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao; 27 import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao;
29 28
@@ -31,12 +30,14 @@ import java.util.List; @@ -31,12 +30,14 @@ import java.util.List;
31 import java.util.Optional; 30 import java.util.Optional;
32 import java.util.UUID; 31 import java.util.UUID;
33 32
  33 +import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID;
  34 +
34 /** 35 /**
35 * Created by Valerii Sosliuk on 5/6/2017. 36 * Created by Valerii Sosliuk on 5/6/2017.
36 */ 37 */
37 @Component 38 @Component
38 @ConditionalOnProperty(prefix = "sql", value = "enabled", havingValue = "true", matchIfMissing = false) 39 @ConditionalOnProperty(prefix = "sql", value = "enabled", havingValue = "true", matchIfMissing = false)
39 -public class JpaCustomerDao extends JpaAbstractSearchTextDao<CustomerEntity, Customer> implements CustomerDao{ 40 +public class JpaCustomerDao extends JpaAbstractSearchTextDao<CustomerEntity, Customer> implements CustomerDao {
40 41
41 @Autowired 42 @Autowired
42 private CustomerRepository customerRepository; 43 private CustomerRepository customerRepository;
@@ -53,12 +54,8 @@ public class JpaCustomerDao extends JpaAbstractSearchTextDao<CustomerEntity, Cus @@ -53,12 +54,8 @@ public class JpaCustomerDao extends JpaAbstractSearchTextDao<CustomerEntity, Cus
53 54
54 @Override 55 @Override
55 public List<Customer> findCustomersByTenantId(UUID tenantId, TextPageLink pageLink) { 56 public List<Customer> findCustomersByTenantId(UUID tenantId, TextPageLink pageLink) {
56 - if (pageLink.getIdOffset() == null) {  
57 - return DaoUtil.convertDataList(customerRepository.findByTenantIdFirstPage(pageLink.getLimit(), tenantId, pageLink.getTextSearch()));  
58 - } else {  
59 - return DaoUtil.convertDataList(customerRepository.findByTenantIdNextPage(pageLink.getLimit(), tenantId,  
60 - pageLink.getTextSearch(), pageLink.getIdOffset()));  
61 - } 57 + return DaoUtil.convertDataList(customerRepository.findByTenantId(pageLink.getLimit(), tenantId,
  58 + pageLink.getTextSearch(), pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset()));
62 } 59 }
63 60
64 @Override 61 @Override
@@ -18,6 +18,7 @@ package org.thingsboard.server.dao.sql.dashboard; @@ -18,6 +18,7 @@ package org.thingsboard.server.dao.sql.dashboard;
18 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; 18 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
19 import org.springframework.data.jpa.repository.Query; 19 import org.springframework.data.jpa.repository.Query;
20 import org.springframework.data.repository.CrudRepository; 20 import org.springframework.data.repository.CrudRepository;
  21 +import org.springframework.data.repository.query.Param;
21 import org.thingsboard.server.dao.model.sql.DashboardInfoEntity; 22 import org.thingsboard.server.dao.model.sql.DashboardInfoEntity;
22 23
23 import java.util.List; 24 import java.util.List;
@@ -29,23 +30,20 @@ import java.util.UUID; @@ -29,23 +30,20 @@ import java.util.UUID;
29 @ConditionalOnProperty(prefix = "sql", value = "enabled", havingValue = "true", matchIfMissing = false) 30 @ConditionalOnProperty(prefix = "sql", value = "enabled", havingValue = "true", matchIfMissing = false)
30 public interface DashboardInfoRepository extends CrudRepository<DashboardInfoEntity, UUID> { 31 public interface DashboardInfoRepository extends CrudRepository<DashboardInfoEntity, UUID> {
31 32
32 - @Query(nativeQuery = true, value = "SELECT * FROM DASHBOARD WHERE TENANT_ID = ?2 " +  
33 - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(?3, '%')) " +  
34 - "ORDER BY ID LIMIT ?1")  
35 - List<DashboardInfoEntity> findByTenantIdFirstPage(int limit, UUID tenantId, String textSearch); 33 + @Query(nativeQuery = true, value = "SELECT * FROM DASHBOARD WHERE TENANT_ID = :tenantId " +
  34 + "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " +
  35 + "AND ID > :idOffset ORDER BY ID LIMIT :limit")
  36 + List<DashboardInfoEntity> findByTenantId(@Param("limit") int limit,
  37 + @Param("tenantId") UUID tenantId,
  38 + @Param("textSearch") String textSearch,
  39 + @Param("idOffset") UUID idOffset);
36 40
37 - @Query(nativeQuery = true, value = "SELECT * FROM DASHBOARD WHERE TENANT_ID = ?2 " +  
38 - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(?3, '%')) " +  
39 - "AND ID > ?4 ORDER BY ID LIMIT ?1")  
40 - List<DashboardInfoEntity> findByTenantIdNextPage(int limit, UUID tenantId, String textSearch, UUID idOffset);  
41 -  
42 - @Query(nativeQuery = true, value = "SELECT * FROM DASHBOARD WHERE TENANT_ID = ?2 " +  
43 - "AND CUSTOMER_ID = ?3 AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(?4, '%')) " +  
44 - "ORDER BY ID LIMIT ?1")  
45 - List<DashboardInfoEntity> findByTenantIdAndCustomerIdFirstPage(int limit, UUID tenantId, UUID customerId, String textSearch);  
46 -  
47 - @Query(nativeQuery = true, value = "SELECT * FROM DASHBOARD WHERE TENANT_ID = ?2 " +  
48 - "AND CUSTOMER_ID = ?3 AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(?4, '%')) " +  
49 - "AND ID > ?5 ORDER BY ID LIMIT ?1")  
50 - List<DashboardInfoEntity> findByTenantIdAndCustomerIdNextPage(int limit, UUID tenantId, UUID customerId, String textSearch, UUID idOffset); 41 + @Query(nativeQuery = true, value = "SELECT * FROM DASHBOARD WHERE TENANT_ID = :tenantId " +
  42 + "AND CUSTOMER_ID = :customerId AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " +
  43 + "AND ID > :idOffset ORDER BY ID LIMIT :limit?1")
  44 + List<DashboardInfoEntity> findByTenantIdAndCustomerId(@Param("limit") int limit,
  45 + @Param("tenantId") UUID tenantId,
  46 + @Param("customerId") UUID customerId,
  47 + @Param("textSearch") String textSearch,
  48 + @Param("idOffset") UUID idOffset);
51 } 49 }
@@ -29,7 +29,7 @@ import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao; @@ -29,7 +29,7 @@ import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao;
29 import java.util.List; 29 import java.util.List;
30 import java.util.UUID; 30 import java.util.UUID;
31 31
32 -import static org.thingsboard.server.dao.model.ModelConstants.DASHBOARD_COLUMN_FAMILY_NAME; 32 +import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID;
33 33
34 /** 34 /**
35 * Created by Valerii Sosliuk on 5/6/2017. 35 * Created by Valerii Sosliuk on 5/6/2017.
@@ -53,23 +53,22 @@ public class JpaDashboardInfoDao extends JpaAbstractSearchTextDao<DashboardInfoE @@ -53,23 +53,22 @@ public class JpaDashboardInfoDao extends JpaAbstractSearchTextDao<DashboardInfoE
53 53
54 @Override 54 @Override
55 public List<DashboardInfo> findDashboardsByTenantId(UUID tenantId, TextPageLink pageLink) { 55 public List<DashboardInfo> findDashboardsByTenantId(UUID tenantId, TextPageLink pageLink) {
56 - if (pageLink.getIdOffset() == null) {  
57 - return DaoUtil.convertDataList(dashboardInfoRepository.findByTenantIdFirstPage(  
58 - pageLink.getLimit(), tenantId, pageLink.getTextSearch()));  
59 - } else {  
60 - return DaoUtil.convertDataList(dashboardInfoRepository.findByTenantIdNextPage(  
61 - pageLink.getLimit(), tenantId, pageLink.getTextSearch(), pageLink.getIdOffset()));  
62 - } 56 + return DaoUtil.convertDataList(dashboardInfoRepository
  57 + .findByTenantId(
  58 + pageLink.getLimit(),
  59 + tenantId,
  60 + pageLink.getTextSearch(),
  61 + pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset()));
63 } 62 }
64 63
65 @Override 64 @Override
66 public List<DashboardInfo> findDashboardsByTenantIdAndCustomerId(UUID tenantId, UUID customerId, TextPageLink pageLink) { 65 public List<DashboardInfo> findDashboardsByTenantIdAndCustomerId(UUID tenantId, UUID customerId, TextPageLink pageLink) {
67 - if (pageLink.getIdOffset() == null) {  
68 - return DaoUtil.convertDataList(dashboardInfoRepository.findByTenantIdAndCustomerIdFirstPage(  
69 - pageLink.getLimit(), tenantId, customerId, pageLink.getTextSearch()));  
70 - } else {  
71 - return DaoUtil.convertDataList(dashboardInfoRepository.findByTenantIdAndCustomerIdNextPage(  
72 - pageLink.getLimit(), tenantId, customerId, pageLink.getTextSearch(), pageLink.getIdOffset()));  
73 - } 66 + return DaoUtil.convertDataList(dashboardInfoRepository
  67 + .findByTenantIdAndCustomerId(
  68 + pageLink.getLimit(),
  69 + tenantId,
  70 + customerId,
  71 + pageLink.getTextSearch(),
  72 + pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset()));
74 } 73 }
75 } 74 }
@@ -19,11 +19,9 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; @@ -19,11 +19,9 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
19 import org.springframework.data.jpa.repository.Query; 19 import org.springframework.data.jpa.repository.Query;
20 import org.springframework.data.repository.CrudRepository; 20 import org.springframework.data.repository.CrudRepository;
21 import org.springframework.data.repository.query.Param; 21 import org.springframework.data.repository.query.Param;
22 -import org.springframework.stereotype.Repository;  
23 import org.thingsboard.server.dao.model.sql.DeviceEntity; 22 import org.thingsboard.server.dao.model.sql.DeviceEntity;
24 -import org.thingsboard.server.dao.model.sql.TenantDeviceTypeProjection; 23 +import org.thingsboard.server.dao.model.sql.TenantDeviceTypeEntity;
25 24
26 -import java.util.Collection;  
27 import java.util.List; 25 import java.util.List;
28 import java.util.UUID; 26 import java.util.UUID;
29 27
@@ -74,12 +72,8 @@ public interface DeviceRepository extends CrudRepository<DeviceEntity, UUID> { @@ -74,12 +72,8 @@ public interface DeviceRepository extends CrudRepository<DeviceEntity, UUID> {
74 @Param("textSearch") String textSearch, 72 @Param("textSearch") String textSearch,
75 @Param("idOffset") UUID idOffset); 73 @Param("idOffset") UUID idOffset);
76 74
77 - // TODO: CAST was used because in other case when you try convert directly UUID field to UUID java object error throwed:  
78 - // org.hibernate.MappingException: No Dialect mapping for JDBC type: 1111  
79 - // I suppose that Spring Projection doesn't support correct mapping for this type of column  
80 - // and only Entity at the moment supports UUID  
81 - @Query(value = "SELECT DISTINCT CAST(TENANT_ID as VARCHAR) as tenantId, TYPE as type FROM DEVICE", nativeQuery = true)  
82 - List<TenantDeviceTypeProjection> findTenantDeviceTypes(); 75 + @Query(value = "SELECT DISTINCT NEW org.thingsboard.server.dao.model.sql.TenantDeviceTypeEntity(d.tenantId, d.type) FROM DeviceEntity d")
  76 + List<TenantDeviceTypeEntity> findTenantDeviceTypes();
83 77
84 DeviceEntity findByTenantIdAndName(UUID tenantId, String name); 78 DeviceEntity findByTenantIdAndName(UUID tenantId, String name);
85 79
@@ -27,7 +27,7 @@ import org.thingsboard.server.common.data.page.TextPageLink; @@ -27,7 +27,7 @@ import org.thingsboard.server.common.data.page.TextPageLink;
27 import org.thingsboard.server.dao.DaoUtil; 27 import org.thingsboard.server.dao.DaoUtil;
28 import org.thingsboard.server.dao.device.DeviceDao; 28 import org.thingsboard.server.dao.device.DeviceDao;
29 import org.thingsboard.server.dao.model.sql.DeviceEntity; 29 import org.thingsboard.server.dao.model.sql.DeviceEntity;
30 -import org.thingsboard.server.dao.model.sql.TenantDeviceTypeProjection; 30 +import org.thingsboard.server.dao.model.sql.TenantDeviceTypeEntity;
31 import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao; 31 import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao;
32 32
33 import java.util.*; 33 import java.util.*;
@@ -121,15 +121,15 @@ public class JpaDeviceDao extends JpaAbstractSearchTextDao<DeviceEntity, Device> @@ -121,15 +121,15 @@ public class JpaDeviceDao extends JpaAbstractSearchTextDao<DeviceEntity, Device>
121 121
122 @Override 122 @Override
123 public ListenableFuture<List<TenantDeviceType>> findTenantDeviceTypesAsync() { 123 public ListenableFuture<List<TenantDeviceType>> findTenantDeviceTypesAsync() {
124 - return service.submit(() -> convertTenantDeviceTypeToDto(deviceRepository.findTenantDeviceTypes())); 124 + return service.submit(() -> convertTenantDeviceTypeEntityToDto(deviceRepository.findTenantDeviceTypes()));
125 } 125 }
126 126
127 - private List<TenantDeviceType> convertTenantDeviceTypeToDto(List<TenantDeviceTypeProjection> resultSet) { 127 + private List<TenantDeviceType> convertTenantDeviceTypeEntityToDto(List<TenantDeviceTypeEntity> entities) {
128 List<TenantDeviceType> list = Collections.emptyList(); 128 List<TenantDeviceType> list = Collections.emptyList();
129 - if (resultSet != null && !resultSet.isEmpty()) { 129 + if (entities != null && !entities.isEmpty()) {
130 list = new ArrayList<>(); 130 list = new ArrayList<>();
131 - for (TenantDeviceTypeProjection object : resultSet) {  
132 - list.add(new TenantDeviceType(object.getType(), new TenantId(UUID.fromString(object.getTenantId())))); 131 + for (TenantDeviceTypeEntity entity : entities) {
  132 + list.add(new TenantDeviceType(entity.getType(), new TenantId(entity.getTenantId())));
133 } 133 }
134 } 134 }
135 return list; 135 return list;
@@ -17,14 +17,10 @@ package org.thingsboard.server.dao.sql.event; @@ -17,14 +17,10 @@ package org.thingsboard.server.dao.sql.event;
17 17
18 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; 18 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
19 import org.springframework.data.jpa.repository.JpaSpecificationExecutor; 19 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
20 -import org.springframework.data.jpa.repository.Query;  
21 import org.springframework.data.repository.CrudRepository; 20 import org.springframework.data.repository.CrudRepository;
22 -import org.springframework.data.repository.query.Param;  
23 import org.thingsboard.server.common.data.EntityType; 21 import org.thingsboard.server.common.data.EntityType;
24 -import org.thingsboard.server.common.data.Event;  
25 import org.thingsboard.server.dao.model.sql.EventEntity; 22 import org.thingsboard.server.dao.model.sql.EventEntity;
26 23
27 -import java.util.List;  
28 import java.util.UUID; 24 import java.util.UUID;
29 25
30 /** 26 /**
@@ -25,16 +25,16 @@ import org.thingsboard.server.common.data.id.TenantId; @@ -25,16 +25,16 @@ import org.thingsboard.server.common.data.id.TenantId;
25 import org.thingsboard.server.common.data.page.TextPageLink; 25 import org.thingsboard.server.common.data.page.TextPageLink;
26 import org.thingsboard.server.common.data.plugin.PluginMetaData; 26 import org.thingsboard.server.common.data.plugin.PluginMetaData;
27 import org.thingsboard.server.dao.DaoUtil; 27 import org.thingsboard.server.dao.DaoUtil;
28 -import org.thingsboard.server.dao.model.ModelConstants;  
29 import org.thingsboard.server.dao.model.sql.PluginMetaDataEntity; 28 import org.thingsboard.server.dao.model.sql.PluginMetaDataEntity;
30 import org.thingsboard.server.dao.plugin.PluginDao; 29 import org.thingsboard.server.dao.plugin.PluginDao;
31 -import org.thingsboard.server.dao.sql.JpaAbstractDao;  
32 import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao; 30 import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao;
33 31
34 import java.util.Arrays; 32 import java.util.Arrays;
35 import java.util.List; 33 import java.util.List;
36 import java.util.UUID; 34 import java.util.UUID;
37 35
  36 +import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID;
  37 +
38 /** 38 /**
39 * Created by Valerii Sosliuk on 5/1/2017. 39 * Created by Valerii Sosliuk on 5/1/2017.
40 */ 40 */
@@ -93,15 +93,13 @@ public class JpaBasePluginDao extends JpaAbstractSearchTextDao<PluginMetaDataEnt @@ -93,15 +93,13 @@ public class JpaBasePluginDao extends JpaAbstractSearchTextDao<PluginMetaDataEnt
93 93
94 @Override 94 @Override
95 public List<PluginMetaData> findByTenantIdAndPageLink(TenantId tenantId, TextPageLink pageLink) { 95 public List<PluginMetaData> findByTenantIdAndPageLink(TenantId tenantId, TextPageLink pageLink) {
96 - log.debug("Try to find здгпшты by tenantId [{}] and pageLink [{}]", tenantId, pageLink);  
97 - List<PluginMetaDataEntity> entities;  
98 - if (pageLink.getIdOffset() == null) {  
99 - entities = pluginMetaDataRepository  
100 - .findByTenantIdAndPageLinkFirstPage(pageLink.getLimit(), tenantId.getId(), pageLink.getTextSearch());  
101 - } else {  
102 - entities = pluginMetaDataRepository  
103 - .findByTenantIdAndPageLinkNextPage(pageLink.getLimit(), tenantId.getId(), pageLink.getTextSearch(), pageLink.getIdOffset());  
104 - } 96 + log.debug("Try to find plugins by tenantId [{}] and pageLink [{}]", tenantId, pageLink);
  97 + List<PluginMetaDataEntity> entities = pluginMetaDataRepository
  98 + .findByTenantIdAndPageLink(
  99 + pageLink.getLimit(),
  100 + tenantId.getId(),
  101 + pageLink.getTextSearch(),
  102 + pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset());
105 if (log.isTraceEnabled()) { 103 if (log.isTraceEnabled()) {
106 log.trace("Search result: [{}]", Arrays.toString(entities.toArray())); 104 log.trace("Search result: [{}]", Arrays.toString(entities.toArray()));
107 } else { 105 } else {
@@ -113,14 +111,13 @@ public class JpaBasePluginDao extends JpaAbstractSearchTextDao<PluginMetaDataEnt @@ -113,14 +111,13 @@ public class JpaBasePluginDao extends JpaAbstractSearchTextDao<PluginMetaDataEnt
113 @Override 111 @Override
114 public List<PluginMetaData> findAllTenantPluginsByTenantId(UUID tenantId, TextPageLink pageLink) { 112 public List<PluginMetaData> findAllTenantPluginsByTenantId(UUID tenantId, TextPageLink pageLink) {
115 log.debug("Try to find all tenant plugins by tenantId [{}] and pageLink [{}]", tenantId, pageLink); 113 log.debug("Try to find all tenant plugins by tenantId [{}] and pageLink [{}]", tenantId, pageLink);
116 - List<PluginMetaDataEntity> entities;  
117 - if (pageLink.getIdOffset() == null) {  
118 - entities = pluginMetaDataRepository  
119 - .findAllTenantPluginsByTenantIdFirstPage(pageLink.getLimit(), tenantId, pageLink.getTextSearch());  
120 - } else {  
121 - entities = pluginMetaDataRepository  
122 - .findAllTenantPluginsByTenantIdNextPage(pageLink.getLimit(), tenantId, pageLink.getTextSearch(), pageLink.getIdOffset());  
123 - } 114 + List<PluginMetaDataEntity> entities = pluginMetaDataRepository
  115 + .findAllTenantPluginsByTenantId(
  116 + pageLink.getLimit(),
  117 + tenantId,
  118 + NULL_UUID,
  119 + pageLink.getTextSearch(),
  120 + pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset());
124 if (log.isTraceEnabled()) { 121 if (log.isTraceEnabled()) {
125 log.trace("Search result: [{}]", Arrays.toString(entities.toArray())); 122 log.trace("Search result: [{}]", Arrays.toString(entities.toArray()));
126 } else { 123 } else {
@@ -18,9 +18,8 @@ package org.thingsboard.server.dao.sql.plugin; @@ -18,9 +18,8 @@ package org.thingsboard.server.dao.sql.plugin;
18 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; 18 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
19 import org.springframework.data.jpa.repository.Query; 19 import org.springframework.data.jpa.repository.Query;
20 import org.springframework.data.repository.CrudRepository; 20 import org.springframework.data.repository.CrudRepository;
21 -import org.thingsboard.server.common.data.plugin.PluginMetaData; 21 +import org.springframework.data.repository.query.Param;
22 import org.thingsboard.server.dao.model.sql.PluginMetaDataEntity; 22 import org.thingsboard.server.dao.model.sql.PluginMetaDataEntity;
23 -import org.thingsboard.server.dao.model.sql.RuleMetaDataEntity;  
24 23
25 import java.util.List; 24 import java.util.List;
26 import java.util.UUID; 25 import java.util.UUID;
@@ -33,23 +32,20 @@ public interface PluginMetaDataRepository extends CrudRepository<PluginMetaDataE @@ -33,23 +32,20 @@ public interface PluginMetaDataRepository extends CrudRepository<PluginMetaDataE
33 32
34 PluginMetaDataEntity findByApiToken(String apiToken); 33 PluginMetaDataEntity findByApiToken(String apiToken);
35 34
36 - @Query(nativeQuery = true, value = "SELECT * FROM PLUGIN WHERE TENANT_ID = ?2 " +  
37 - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(?3, '%')) " +  
38 - "ORDER BY ID LIMIT ?1")  
39 - List<PluginMetaDataEntity> findByTenantIdAndPageLinkFirstPage(int limit, UUID tenantId, String textSearch);  
40 -  
41 - @Query(nativeQuery = true, value = "SELECT * FROM PLUGIN WHERE TENANT_ID = ?2 " +  
42 - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(?3, '%')) " +  
43 - "AND ID > ?4 ORDER BY ID LIMIT ?1")  
44 - List<PluginMetaDataEntity> findByTenantIdAndPageLinkNextPage(int limit, UUID tenantId, String textSearch, UUID idOffset);  
45 -  
46 - @Query(nativeQuery = true, value = "SELECT * FROM PLUGIN WHERE (TENANT_ID = ?2 OR TENANT_ID IS NULL) " +  
47 - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(?3, '%')) " +  
48 - "ORDER BY ID LIMIT ?1")  
49 - List<PluginMetaDataEntity> findAllTenantPluginsByTenantIdFirstPage(int limit, UUID tenantId, String textSearch);  
50 -  
51 - @Query(nativeQuery = true, value = "SELECT * FROM PLUGIN WHERE (TENANT_ID = ?2 OR TENANT_ID IS NULL) " +  
52 - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(?3, '%')) " +  
53 - "AND ID > ?4 ORDER BY ID LIMIT ?1")  
54 - List<PluginMetaDataEntity> findAllTenantPluginsByTenantIdNextPage(int limit, UUID tenantId, String textSearch, UUID idOffset); 35 + @Query(nativeQuery = true, value = "SELECT * FROM PLUGIN WHERE TENANT_ID = :tenantId " +
  36 + "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " +
  37 + "AND ID > :idOffset ORDER BY ID LIMIT :limit")
  38 + List<PluginMetaDataEntity> findByTenantIdAndPageLink(@Param("limit") int limit,
  39 + @Param("tenantId") UUID tenantId,
  40 + @Param("textSearch") String textSearch,
  41 + @Param("idOffset") UUID idOffset);
  42 +
  43 + @Query(nativeQuery = true, value = "SELECT * FROM PLUGIN WHERE TENANT_ID IN (:tenantId, :nullTenantId) " +
  44 + "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " +
  45 + "AND ID > :idOffset ORDER BY ID LIMIT :limit")
  46 + List<PluginMetaDataEntity> findAllTenantPluginsByTenantId(@Param("limit") int limit,
  47 + @Param("tenantId") UUID tenantId,
  48 + @Param("nullTenantId") UUID nullTenantId,
  49 + @Param("textSearch") String textSearch,
  50 + @Param("idOffset") UUID idOffset);
55 } 51 }
@@ -21,7 +21,6 @@ import com.google.common.util.concurrent.MoreExecutors; @@ -21,7 +21,6 @@ import com.google.common.util.concurrent.MoreExecutors;
21 import lombok.extern.slf4j.Slf4j; 21 import lombok.extern.slf4j.Slf4j;
22 import org.springframework.beans.factory.annotation.Autowired; 22 import org.springframework.beans.factory.annotation.Autowired;
23 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; 23 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
24 -import org.springframework.data.repository.CrudRepository;  
25 import org.springframework.stereotype.Component; 24 import org.springframework.stereotype.Component;
26 import org.thingsboard.server.common.data.EntityType; 25 import org.thingsboard.server.common.data.EntityType;
27 import org.thingsboard.server.common.data.id.EntityId; 26 import org.thingsboard.server.common.data.id.EntityId;
@@ -32,10 +31,8 @@ import org.thingsboard.server.dao.DaoUtil; @@ -32,10 +31,8 @@ import org.thingsboard.server.dao.DaoUtil;
32 import org.thingsboard.server.dao.model.sql.RelationCompositeKey; 31 import org.thingsboard.server.dao.model.sql.RelationCompositeKey;
33 import org.thingsboard.server.dao.model.sql.RelationEntity; 32 import org.thingsboard.server.dao.model.sql.RelationEntity;
34 import org.thingsboard.server.dao.relation.RelationDao; 33 import org.thingsboard.server.dao.relation.RelationDao;
35 -import org.thingsboard.server.dao.sql.JpaAbstractDao;  
36 34
37 import java.util.List; 35 import java.util.List;
38 -import java.util.UUID;  
39 import java.util.concurrent.Executors; 36 import java.util.concurrent.Executors;
40 37
41 /** 38 /**
@@ -111,8 +108,9 @@ public class JpaRelationDao implements RelationDao { @@ -111,8 +108,9 @@ public class JpaRelationDao implements RelationDao {
111 RelationCompositeKey key = new RelationCompositeKey(relation); 108 RelationCompositeKey key = new RelationCompositeKey(relation);
112 return executorService.submit( 109 return executorService.submit(
113 () -> { 110 () -> {
  111 + boolean relationExistsBeforeDelete = relationRepository.exists(key);
114 relationRepository.delete(key); 112 relationRepository.delete(key);
115 - return !relationRepository.exists(key); 113 + return relationExistsBeforeDelete;
116 }); 114 });
117 } 115 }
118 116
@@ -127,9 +125,9 @@ public class JpaRelationDao implements RelationDao { @@ -127,9 +125,9 @@ public class JpaRelationDao implements RelationDao {
127 typeGroup.name()); 125 typeGroup.name());
128 return executorService.submit( 126 return executorService.submit(
129 () -> { 127 () -> {
130 - boolean result = relationRepository.exists(key); 128 + boolean relationExistsBeforeDelete = relationRepository.exists(key);
131 relationRepository.delete(key); 129 relationRepository.delete(key);
132 - return result; 130 + return relationExistsBeforeDelete;
133 }); 131 });
134 } 132 }
135 133
@@ -141,16 +139,17 @@ public class JpaRelationDao implements RelationDao { @@ -141,16 +139,17 @@ public class JpaRelationDao implements RelationDao {
141 139
142 return executorService.submit( 140 return executorService.submit(
143 () -> { 141 () -> {
144 - boolean result = relationRepository 142 + boolean relationExistsBeforeDelete = relationRepository
145 .findAllByFromIdAndFromType(relationEntity.getFromId(), relationEntity.getFromType()) 143 .findAllByFromIdAndFromType(relationEntity.getFromId(), relationEntity.getFromType())
146 .size() > 0; 144 .size() > 0;
147 relationRepository.delete(relationEntity); 145 relationRepository.delete(relationEntity);
148 - return result; 146 + return relationExistsBeforeDelete;
149 }); 147 });
150 } 148 }
151 149
152 @Override 150 @Override
153 public ListenableFuture<List<EntityRelation>> findRelations(EntityId from, String relationType, RelationTypeGroup typeGroup, EntityType childType, TimePageLink pageLink) { 151 public ListenableFuture<List<EntityRelation>> findRelations(EntityId from, String relationType, RelationTypeGroup typeGroup, EntityType childType, TimePageLink pageLink) {
  152 +// TODO:
154 // executorService.submit(() -> DaoUtil.convertDataList( 153 // executorService.submit(() -> DaoUtil.convertDataList(
155 // relationRepository.findRelations( 154 // relationRepository.findRelations(
156 // to.getId(), 155 // to.getId(),
@@ -15,29 +15,14 @@ @@ -15,29 +15,14 @@
15 */ 15 */
16 package org.thingsboard.server.dao.sql.relation; 16 package org.thingsboard.server.dao.sql.relation;
17 17
18 -import com.datastax.driver.core.querybuilder.QueryBuilder;  
19 -import com.datastax.driver.core.querybuilder.Select;  
20 -import com.google.common.util.concurrent.ListenableFuture;  
21 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; 18 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
22 -import org.springframework.data.jpa.repository.Query;  
23 import org.springframework.data.repository.CrudRepository; 19 import org.springframework.data.repository.CrudRepository;
24 -import org.springframework.data.repository.query.Param;  
25 -import org.thingsboard.server.common.data.EntityType;  
26 -import org.thingsboard.server.common.data.id.EntityId;  
27 -import org.thingsboard.server.common.data.page.TimePageLink;  
28 -import org.thingsboard.server.common.data.relation.EntityRelation;  
29 -import org.thingsboard.server.common.data.relation.RelationTypeGroup;  
30 -import org.thingsboard.server.dao.CassandraAbstractSearchTimeDao;  
31 -import org.thingsboard.server.dao.model.ModelConstants;  
32 import org.thingsboard.server.dao.model.sql.RelationCompositeKey; 20 import org.thingsboard.server.dao.model.sql.RelationCompositeKey;
33 import org.thingsboard.server.dao.model.sql.RelationEntity; 21 import org.thingsboard.server.dao.model.sql.RelationEntity;
34 22
35 -import java.util.Arrays;  
36 import java.util.List; 23 import java.util.List;
37 import java.util.UUID; 24 import java.util.UUID;
38 25
39 -import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;  
40 -  
41 @ConditionalOnProperty(prefix = "sql", value = "enabled", havingValue = "true") 26 @ConditionalOnProperty(prefix = "sql", value = "enabled", havingValue = "true")
42 public interface RelationRepository extends CrudRepository<RelationEntity, RelationCompositeKey> { 27 public interface RelationRepository extends CrudRepository<RelationEntity, RelationCompositeKey> {
43 28
@@ -62,46 +47,19 @@ public interface RelationRepository extends CrudRepository<RelationEntity, Relat @@ -62,46 +47,19 @@ public interface RelationRepository extends CrudRepository<RelationEntity, Relat
62 List<RelationEntity> findAllByFromIdAndFromType(UUID fromId, 47 List<RelationEntity> findAllByFromIdAndFromType(UUID fromId,
63 String fromType); 48 String fromType);
64 49
65 - @Query(nativeQuery = true, value = "SELECT * FROM DEVICE WHERE TENANT_ID = :tenantId " +  
66 - "AND CUSTOMER_ID = :customerId " +  
67 - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:searchText, '%')) " +  
68 - "AND ID > :idOffset ORDER BY ID LIMIT :limit")  
69 - List<RelationEntity> findRelations(@Param("fromId") UUID fromId,  
70 - @Param("fromType") String fromType,  
71 - @Param("toType") String toType,  
72 - @Param("relationType") String relationType,  
73 - @Param("relationTypeGroup") String relationTypeGroup,  
74 - TimePageLink pageLink); 50 +// @Query(nativeQuery = true, value = "SELECT * FROM RELATION WHERE FROM_ID = :fromId " +
  51 +// "AND FROM_TYPE = :fromType " +
  52 +// "AND TO_TYPE = :toType " +
  53 +// "AND RELATION_TYPE = :relationType " +
  54 +// "AND RELATION_TYPE_GROUP = :relationTypeGroup " +
  55 +// "AND ID > :idOffset ORDER BY RELATION_TYPE_GROUP ASC, RELATION_TYPE ASC, TO_TYPE ASC")
  56 +// List<RelationEntity> findRelations(@Param("fromId") UUID fromId,
  57 +// @Param("fromType") String fromType,
  58 +// @Param("toType") String toType,
  59 +// @Param("relationType") String relationType,
  60 +// @Param("relationTypeGroup") String relationTypeGroup,
  61 +// TimePageLink pageLink);
75 62
76 63
77 -// Select.Where query = CassandraAbstractSearchTimeDao.buildQuery(ModelConstants.RELATION_BY_TYPE_AND_CHILD_TYPE_VIEW_NAME,  
78 -// Arrays.asList(eq(ModelConstants.RELATION_FROM_ID_PROPERTY, from.getId()),  
79 -// eq(ModelConstants.RELATION_FROM_TYPE_PROPERTY, from.getEntityType().name()),  
80 -// eq(ModelConstants.RELATION_TYPE_GROUP_PROPERTY, typeGroup.name()),  
81 -// eq(ModelConstants.RELATION_TYPE_PROPERTY, relationType),  
82 -// eq(ModelConstants.RELATION_TO_TYPE_PROPERTY, childType.name())),  
83 -// Arrays.asList(QueryBuilder.asc(ModelConstants.RELATION_TYPE_GROUP_PROPERTY),  
84 -// QueryBuilder.asc(ModelConstants.RELATION_TYPE_PROPERTY),  
85 -// QueryBuilder.asc(ModelConstants.RELATION_TO_TYPE_PROPERTY)),  
86 // pageLink, ModelConstants.RELATION_TO_ID_PROPERTY); 64 // pageLink, ModelConstants.RELATION_TO_ID_PROPERTY);
87 } 65 }
88 -  
89 -// private UUID fromId;  
90 -// private String fromType;  
91 -// private UUID toId;  
92 -// private String toType;  
93 -// private String relationTypeGroup;  
94 -// private String relationType;  
95 -//  
96 -//  
97 -// ListenableFuture<Boolean> checkRelation(EntityId from, EntityId to, String relationType, RelationTypeGroup typeGroup);  
98 -//  
99 -// ListenableFuture<Boolean> saveRelation(EntityRelation relation);  
100 -//  
101 -// ListenableFuture<Boolean> deleteRelation(EntityRelation relation);  
102 -//  
103 -// ListenableFuture<Boolean> deleteRelation(EntityId from, EntityId to, String relationType, RelationTypeGroup typeGroup);  
104 -//  
105 -// ListenableFuture<Boolean> deleteOutboundRelations(EntityId entity);  
106 -//  
107 -// ListenableFuture<List<EntityRelation>> findRelations(EntityId from, String relationType, RelationTypeGroup typeGroup, EntityType toType, TimePageLink pageLink);  
@@ -25,16 +25,16 @@ import org.thingsboard.server.common.data.id.TenantId; @@ -25,16 +25,16 @@ import org.thingsboard.server.common.data.id.TenantId;
25 import org.thingsboard.server.common.data.page.TextPageLink; 25 import org.thingsboard.server.common.data.page.TextPageLink;
26 import org.thingsboard.server.common.data.rule.RuleMetaData; 26 import org.thingsboard.server.common.data.rule.RuleMetaData;
27 import org.thingsboard.server.dao.DaoUtil; 27 import org.thingsboard.server.dao.DaoUtil;
28 -import org.thingsboard.server.dao.model.ModelConstants;  
29 import org.thingsboard.server.dao.model.sql.RuleMetaDataEntity; 28 import org.thingsboard.server.dao.model.sql.RuleMetaDataEntity;
30 import org.thingsboard.server.dao.rule.RuleDao; 29 import org.thingsboard.server.dao.rule.RuleDao;
31 -import org.thingsboard.server.dao.sql.JpaAbstractDao;  
32 import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao; 30 import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao;
33 31
34 import java.util.Arrays; 32 import java.util.Arrays;
35 import java.util.List; 33 import java.util.List;
36 import java.util.UUID; 34 import java.util.UUID;
37 35
  36 +import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID;
  37 +
38 /** 38 /**
39 * Created by Valerii Sosliuk on 4/30/2017. 39 * Created by Valerii Sosliuk on 4/30/2017.
40 */ 40 */
@@ -70,14 +70,13 @@ public class JpaBaseRuleDao extends JpaAbstractSearchTextDao<RuleMetaDataEntity, @@ -70,14 +70,13 @@ public class JpaBaseRuleDao extends JpaAbstractSearchTextDao<RuleMetaDataEntity,
70 @Override 70 @Override
71 public List<RuleMetaData> findByTenantIdAndPageLink(TenantId tenantId, TextPageLink pageLink) { 71 public List<RuleMetaData> findByTenantIdAndPageLink(TenantId tenantId, TextPageLink pageLink) {
72 log.debug("Try to find rules by tenantId [{}] and pageLink [{}]", tenantId, pageLink); 72 log.debug("Try to find rules by tenantId [{}] and pageLink [{}]", tenantId, pageLink);
73 - List<RuleMetaDataEntity> entities;  
74 - if (pageLink.getIdOffset() == null) {  
75 - entities = ruleMetaDataRepository  
76 - .findByTenantIdAndPageLinkFirstPage(pageLink.getLimit(), tenantId.getId(), pageLink.getTextSearch());  
77 - } else {  
78 - entities = ruleMetaDataRepository  
79 - .findByTenantIdAndPageLinkNextPage(pageLink.getLimit(), tenantId.getId(), pageLink.getTextSearch(), pageLink.getIdOffset());  
80 - } 73 + List<RuleMetaDataEntity> entities =
  74 + ruleMetaDataRepository
  75 + .findByTenantIdAndPageLink(
  76 + pageLink.getLimit(),
  77 + tenantId.getId(),
  78 + pageLink.getTextSearch(),
  79 + pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset());
81 if (log.isTraceEnabled()) { 80 if (log.isTraceEnabled()) {
82 log.trace("Search result: [{}]", Arrays.toString(entities.toArray())); 81 log.trace("Search result: [{}]", Arrays.toString(entities.toArray()));
83 } else { 82 } else {
@@ -89,14 +88,15 @@ public class JpaBaseRuleDao extends JpaAbstractSearchTextDao<RuleMetaDataEntity, @@ -89,14 +88,15 @@ public class JpaBaseRuleDao extends JpaAbstractSearchTextDao<RuleMetaDataEntity,
89 @Override 88 @Override
90 public List<RuleMetaData> findAllTenantRulesByTenantId(UUID tenantId, TextPageLink pageLink) { 89 public List<RuleMetaData> findAllTenantRulesByTenantId(UUID tenantId, TextPageLink pageLink) {
91 log.debug("Try to find all tenant rules by tenantId [{}] and pageLink [{}]", tenantId, pageLink); 90 log.debug("Try to find all tenant rules by tenantId [{}] and pageLink [{}]", tenantId, pageLink);
92 - List<RuleMetaDataEntity> entities;  
93 - if (pageLink.getIdOffset() == null) {  
94 - entities = ruleMetaDataRepository  
95 - .findAllTenantRulesByTenantIdFirstPage(pageLink.getLimit(), tenantId, pageLink.getTextSearch());  
96 - } else {  
97 - entities = ruleMetaDataRepository  
98 - .findAllTenantRulesByTenantIdNextPage(pageLink.getLimit(), tenantId, pageLink.getTextSearch(), pageLink.getIdOffset());  
99 - } 91 + List<RuleMetaDataEntity> entities =
  92 + ruleMetaDataRepository
  93 + .findAllTenantRulesByTenantId(
  94 + pageLink.getLimit(),
  95 + tenantId,
  96 + NULL_UUID,
  97 + pageLink.getTextSearch(),
  98 + pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset());
  99 +
100 if (log.isTraceEnabled()) { 100 if (log.isTraceEnabled()) {
101 log.trace("Search result: [{}]", Arrays.toString(entities.toArray())); 101 log.trace("Search result: [{}]", Arrays.toString(entities.toArray()));
102 } else { 102 } else {
@@ -18,11 +18,9 @@ package org.thingsboard.server.dao.sql.rule; @@ -18,11 +18,9 @@ package org.thingsboard.server.dao.sql.rule;
18 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; 18 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
19 import org.springframework.data.jpa.repository.Query; 19 import org.springframework.data.jpa.repository.Query;
20 import org.springframework.data.repository.CrudRepository; 20 import org.springframework.data.repository.CrudRepository;
21 -import org.thingsboard.server.common.data.id.TenantId;  
22 -import org.thingsboard.server.dao.model.ToData; 21 +import org.springframework.data.repository.query.Param;
23 import org.thingsboard.server.dao.model.sql.RuleMetaDataEntity; 22 import org.thingsboard.server.dao.model.sql.RuleMetaDataEntity;
24 23
25 -import java.util.Collection;  
26 import java.util.List; 24 import java.util.List;
27 import java.util.UUID; 25 import java.util.UUID;
28 26
@@ -34,23 +32,20 @@ public interface RuleMetaDataRepository extends CrudRepository<RuleMetaDataEntit @@ -34,23 +32,20 @@ public interface RuleMetaDataRepository extends CrudRepository<RuleMetaDataEntit
34 32
35 List<RuleMetaDataEntity> findByPluginToken(String pluginToken); 33 List<RuleMetaDataEntity> findByPluginToken(String pluginToken);
36 34
37 - @Query(nativeQuery = true, value = "SELECT * FROM RULE WHERE TENANT_ID = ?2 " +  
38 - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(?3, '%')) " +  
39 - "ORDER BY ID LIMIT ?1")  
40 - List<RuleMetaDataEntity> findByTenantIdAndPageLinkFirstPage(int limit, UUID tenantId, String textSearch);  
41 -  
42 - @Query(nativeQuery = true, value = "SELECT * FROM RULE WHERE TENANT_ID = ?2 " +  
43 - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(?3, '%')) " +  
44 - "AND ID > ?4 ORDER BY ID LIMIT ?1")  
45 - List<RuleMetaDataEntity> findByTenantIdAndPageLinkNextPage(int limit, UUID tenantId, String textSearch, UUID idOffset);  
46 -  
47 - @Query(nativeQuery = true, value = "SELECT * FROM RULE WHERE (TENANT_ID = ?2 OR TENANT_ID IS NULL) " +  
48 - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(?3, '%')) " +  
49 - "ORDER BY ID LIMIT ?1")  
50 - List<RuleMetaDataEntity> findAllTenantRulesByTenantIdFirstPage(int limit, UUID tenantId, String textSearch);  
51 -  
52 - @Query(nativeQuery = true, value = "SELECT * FROM RULE WHERE (TENANT_ID = ?2 OR TENANT_ID IS NULL) " +  
53 - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(?3, '%')) " +  
54 - "AND ID > ?4 ORDER BY ID LIMIT ?1")  
55 - List<RuleMetaDataEntity> findAllTenantRulesByTenantIdNextPage(int limit, UUID tenantId, String textSearch, UUID idOffset); 35 + @Query(nativeQuery = true, value = "SELECT * FROM RULE WHERE TENANT_ID = :tenantId " +
  36 + "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " +
  37 + "AND ID > :idOffset ORDER BY ID LIMIT :limit")
  38 + List<RuleMetaDataEntity> findByTenantIdAndPageLink(@Param("limit") int limit,
  39 + @Param("tenantId") UUID tenantId,
  40 + @Param("textSearch") String textSearch,
  41 + @Param("idOffset") UUID idOffset);
  42 +
  43 + @Query(nativeQuery = true, value = "SELECT * FROM RULE WHERE TENANT_ID IN (:tenantId, :nullTenantId) " +
  44 + "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " +
  45 + "AND ID > :idOffset ORDER BY ID LIMIT :limit")
  46 + List<RuleMetaDataEntity> findAllTenantRulesByTenantId(@Param("limit") int limit,
  47 + @Param("tenantId") UUID tenantId,
  48 + @Param("nullTenantId") UUID nullTenantId,
  49 + @Param("textSearch") String textSearch,
  50 + @Param("idOffset") UUID idOffset);
56 } 51 }
@@ -16,7 +16,6 @@ @@ -16,7 +16,6 @@
16 package org.thingsboard.server.dao.sql.settings; 16 package org.thingsboard.server.dao.sql.settings;
17 17
18 import org.springframework.data.repository.CrudRepository; 18 import org.springframework.data.repository.CrudRepository;
19 -import org.thingsboard.server.dao.model.ToData;  
20 import org.thingsboard.server.dao.model.sql.AdminSettingsEntity; 19 import org.thingsboard.server.dao.model.sql.AdminSettingsEntity;
21 20
22 import java.util.UUID; 21 import java.util.UUID;
@@ -28,8 +28,6 @@ import org.thingsboard.server.dao.sql.JpaAbstractDao; @@ -28,8 +28,6 @@ import org.thingsboard.server.dao.sql.JpaAbstractDao;
28 28
29 import java.util.UUID; 29 import java.util.UUID;
30 30
31 -import static org.thingsboard.server.dao.model.ModelConstants.ADMIN_SETTINGS_COLUMN_FAMILY_NAME;  
32 -  
33 @Component 31 @Component
34 @Slf4j 32 @Slf4j
35 @ConditionalOnProperty(prefix = "sql", value = "enabled", havingValue = "true") 33 @ConditionalOnProperty(prefix = "sql", value = "enabled", havingValue = "true")
@@ -23,14 +23,13 @@ import org.thingsboard.server.common.data.Tenant; @@ -23,14 +23,13 @@ import org.thingsboard.server.common.data.Tenant;
23 import org.thingsboard.server.common.data.page.TextPageLink; 23 import org.thingsboard.server.common.data.page.TextPageLink;
24 import org.thingsboard.server.dao.DaoUtil; 24 import org.thingsboard.server.dao.DaoUtil;
25 import org.thingsboard.server.dao.model.sql.TenantEntity; 25 import org.thingsboard.server.dao.model.sql.TenantEntity;
26 -import org.thingsboard.server.dao.sql.JpaAbstractDao;  
27 import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao; 26 import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao;
28 import org.thingsboard.server.dao.tenant.TenantDao; 27 import org.thingsboard.server.dao.tenant.TenantDao;
29 28
30 import java.util.List; 29 import java.util.List;
31 import java.util.UUID; 30 import java.util.UUID;
32 31
33 -import static org.thingsboard.server.dao.model.ModelConstants.TENANT_COLUMN_FAMILY_NAME; 32 +import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID;
34 33
35 /** 34 /**
36 * Created by Valerii Sosliuk on 4/30/2017. 35 * Created by Valerii Sosliuk on 4/30/2017.
@@ -54,10 +53,11 @@ public class JpaTenantDao extends JpaAbstractSearchTextDao<TenantEntity, Tenant> @@ -54,10 +53,11 @@ public class JpaTenantDao extends JpaAbstractSearchTextDao<TenantEntity, Tenant>
54 53
55 @Override 54 @Override
56 public List<Tenant> findTenantsByRegion(String region, TextPageLink pageLink) { 55 public List<Tenant> findTenantsByRegion(String region, TextPageLink pageLink) {
57 - if (pageLink.getIdOffset() == null) {  
58 - return DaoUtil.convertDataList(tenantRepository.findByRegionFirstPage(pageLink.getLimit(), region, pageLink.getTextSearch()));  
59 - } else {  
60 - return DaoUtil.convertDataList(tenantRepository.findByRegionNextPage(pageLink.getLimit(), region, pageLink.getTextSearch(), pageLink.getIdOffset()));  
61 - } 56 + return DaoUtil.convertDataList(tenantRepository
  57 + .findByRegionNextPage(
  58 + pageLink.getLimit(),
  59 + region,
  60 + pageLink.getTextSearch(),
  61 + pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset()));
62 } 62 }
63 } 63 }
@@ -18,6 +18,7 @@ package org.thingsboard.server.dao.sql.tenant; @@ -18,6 +18,7 @@ package org.thingsboard.server.dao.sql.tenant;
18 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; 18 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
19 import org.springframework.data.jpa.repository.Query; 19 import org.springframework.data.jpa.repository.Query;
20 import org.springframework.data.repository.CrudRepository; 20 import org.springframework.data.repository.CrudRepository;
  21 +import org.springframework.data.repository.query.Param;
21 import org.thingsboard.server.dao.model.sql.TenantEntity; 22 import org.thingsboard.server.dao.model.sql.TenantEntity;
22 23
23 import java.util.List; 24 import java.util.List;
@@ -29,15 +30,11 @@ import java.util.UUID; @@ -29,15 +30,11 @@ import java.util.UUID;
29 @ConditionalOnProperty(prefix = "sql", value = "enabled", havingValue = "true", matchIfMissing = false) 30 @ConditionalOnProperty(prefix = "sql", value = "enabled", havingValue = "true", matchIfMissing = false)
30 public interface TenantRepository extends CrudRepository<TenantEntity, UUID> { 31 public interface TenantRepository extends CrudRepository<TenantEntity, UUID> {
31 32
32 -  
33 - @Query(nativeQuery = true, value = "SELECT * FROM TENANT WHERE REGION = ?2 " +  
34 - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(?3, '%')) " +  
35 - "ORDER BY ID LIMIT ?1")  
36 - List<TenantEntity> findByRegionFirstPage(int limit, String region, String textSearch);  
37 -  
38 -  
39 - @Query(nativeQuery = true, value = "SELECT * FROM TENANT WHERE REGION = ?2 " +  
40 - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(?3, '%')) " +  
41 - "AND ID > ?4 ORDER BY ID LIMIT ?1")  
42 - List<TenantEntity> findByRegionNextPage(int limit, String region, String textSearch, UUID idOffset); 33 + @Query(nativeQuery = true, value = "SELECT * FROM TENANT WHERE REGION = :region " +
  34 + "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " +
  35 + "AND ID > :idOffset ORDER BY ID LIMIT :limit")
  36 + List<TenantEntity> findByRegionNextPage(@Param("limit") int limit,
  37 + @Param("region") String region,
  38 + @Param("textSearch") String textSearch,
  39 + @Param("idOffset") UUID idOffset);
43 } 40 }
@@ -22,7 +22,6 @@ import org.springframework.stereotype.Component; @@ -22,7 +22,6 @@ import org.springframework.stereotype.Component;
22 import org.thingsboard.server.common.data.User; 22 import org.thingsboard.server.common.data.User;
23 import org.thingsboard.server.common.data.page.TextPageLink; 23 import org.thingsboard.server.common.data.page.TextPageLink;
24 import org.thingsboard.server.dao.DaoUtil; 24 import org.thingsboard.server.dao.DaoUtil;
25 -import org.thingsboard.server.dao.model.ModelConstants;  
26 import org.thingsboard.server.dao.model.sql.UserEntity; 25 import org.thingsboard.server.dao.model.sql.UserEntity;
27 import org.thingsboard.server.dao.sql.JpaAbstractDao; 26 import org.thingsboard.server.dao.sql.JpaAbstractDao;
28 import org.thingsboard.server.dao.user.UserDao; 27 import org.thingsboard.server.dao.user.UserDao;
@@ -30,6 +29,8 @@ import org.thingsboard.server.dao.user.UserDao; @@ -30,6 +29,8 @@ import org.thingsboard.server.dao.user.UserDao;
30 import java.util.List; 29 import java.util.List;
31 import java.util.UUID; 30 import java.util.UUID;
32 31
  32 +import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID;
  33 +
33 /** 34 /**
34 * @author Valerii Sosliuk 35 * @author Valerii Sosliuk
35 */ 36 */
@@ -57,20 +58,22 @@ public class JpaUserDao extends JpaAbstractDao<UserEntity, User> implements User @@ -57,20 +58,22 @@ public class JpaUserDao extends JpaAbstractDao<UserEntity, User> implements User
57 58
58 @Override 59 @Override
59 public List<User> findTenantAdmins(UUID tenantId, TextPageLink pageLink) { 60 public List<User> findTenantAdmins(UUID tenantId, TextPageLink pageLink) {
60 - if (pageLink.getIdOffset() == null) {  
61 - return DaoUtil.convertDataList(userRepository.findTenantAdminsFirstPage(pageLink.getLimit(), tenantId));  
62 - } else {  
63 - return DaoUtil.convertDataList(userRepository.findTenantAdminsNextPage(pageLink.getLimit(), tenantId, pageLink.getIdOffset()));  
64 - } 61 + return DaoUtil.convertDataList(
  62 + userRepository
  63 + .findTenantAdmins(
  64 + pageLink.getLimit(),
  65 + tenantId,
  66 + pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset()));
65 } 67 }
66 68
67 @Override 69 @Override
68 public List<User> findCustomerUsers(UUID tenantId, UUID customerId, TextPageLink pageLink) { 70 public List<User> findCustomerUsers(UUID tenantId, UUID customerId, TextPageLink pageLink) {
69 - if (pageLink.getIdOffset() == null) {  
70 - return DaoUtil.convertDataList(userRepository.findCustomerUsersFirstPage(pageLink.getLimit(), tenantId, customerId));  
71 - } else {  
72 - return DaoUtil.convertDataList(userRepository.findCustomerUsersNextPage(pageLink.getLimit(), tenantId,  
73 - customerId, pageLink.getIdOffset()));  
74 - } 71 + return DaoUtil.convertDataList(
  72 + userRepository
  73 + .findCustomerUsers(
  74 + pageLink.getLimit(),
  75 + tenantId,
  76 + customerId,
  77 + pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset()));
75 } 78 }
76 } 79 }
@@ -18,6 +18,7 @@ package org.thingsboard.server.dao.sql.user; @@ -18,6 +18,7 @@ package org.thingsboard.server.dao.sql.user;
18 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; 18 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
19 import org.springframework.data.jpa.repository.Query; 19 import org.springframework.data.jpa.repository.Query;
20 import org.springframework.data.repository.CrudRepository; 20 import org.springframework.data.repository.CrudRepository;
  21 +import org.springframework.data.repository.query.Param;
21 import org.thingsboard.server.dao.model.sql.UserEntity; 22 import org.thingsboard.server.dao.model.sql.UserEntity;
22 23
23 import java.util.List; 24 import java.util.List;
@@ -31,24 +32,19 @@ public interface UserRepository extends CrudRepository<UserEntity, UUID> { @@ -31,24 +32,19 @@ public interface UserRepository extends CrudRepository<UserEntity, UUID> {
31 32
32 UserEntity findByEmail(String email); 33 UserEntity findByEmail(String email);
33 34
34 - @Query(nativeQuery = true, value = "SELECT * FROM TB_USER WHERE TENANT_ID = ?2 " + 35 + @Query(nativeQuery = true, value = "SELECT * FROM TB_USER WHERE TENANT_ID = :tenantId " +
35 "AND CUSTOMER_ID IS NULL AND AUTHORITY = 'TENANT_ADMIN' " + 36 "AND CUSTOMER_ID IS NULL AND AUTHORITY = 'TENANT_ADMIN' " +
36 - "ORDER BY ID LIMIT ?1")  
37 - List<UserEntity> findTenantAdminsFirstPage(int limit, UUID tenantId);  
38 -  
39 - @Query(nativeQuery = true, value = "SELECT * FROM TB_USER WHERE TENANT_ID = ?2 " +  
40 - "AND CUSTOMER_ID IS NULL AND AUTHORITY = 'TENANT_ADMIN' " +  
41 - "AND ID > ?3 ORDER BY ID LIMIT ?1")  
42 - List<UserEntity> findTenantAdminsNextPage(int limit, UUID tenantId, UUID idOffset);  
43 -  
44 - @Query(nativeQuery = true, value = "SELECT * FROM TB_USER WHERE TENANT_ID = ?2 " +  
45 - "AND CUSTOMER_ID = ?3 AND AUTHORITY = 'CUSTOMER_USER' " +  
46 - "ORDER BY ID LIMIT ?1")  
47 - List<UserEntity> findCustomerUsersFirstPage(int limit, UUID tenantId, UUID customerId);  
48 -  
49 - @Query(nativeQuery = true, value = "SELECT * FROM TB_USER WHERE TENANT_ID = ?2 " +  
50 - "AND CUSTOMER_ID = ?3 AND AUTHORITY = 'CUSTOMER_USER' " +  
51 - "AND ID > ?4 ORDER BY ID LIMIT ?1")  
52 - List<UserEntity> findCustomerUsersNextPage(int limit, UUID tenantId, UUID customerId, UUID idOffset); 37 + "AND ID > :idOffset ORDER BY ID LIMIT :limit")
  38 + List<UserEntity> findTenantAdmins(@Param("limit") int limit,
  39 + @Param("tenantId") UUID tenantId,
  40 + @Param("idOffset") UUID idOffset);
  41 +
  42 + @Query(nativeQuery = true, value = "SELECT * FROM TB_USER WHERE TENANT_ID = :tenantId " +
  43 + "AND CUSTOMER_ID = :customerId AND AUTHORITY = 'CUSTOMER_USER' " +
  44 + "AND ID > :idOffset ORDER BY ID LIMIT :limit")
  45 + List<UserEntity> findCustomerUsers(@Param("limit") int limit,
  46 + @Param("tenantId") UUID tenantId,
  47 + @Param("customerId") UUID customerId,
  48 + @Param("idOffset") UUID idOffset);
53 49
54 } 50 }
@@ -58,34 +58,35 @@ public class JpaWidgetsBundleDao extends JpaAbstractSearchTextDao<WidgetsBundleE @@ -58,34 +58,35 @@ public class JpaWidgetsBundleDao extends JpaAbstractSearchTextDao<WidgetsBundleE
58 58
59 @Override 59 @Override
60 public List<WidgetsBundle> findSystemWidgetsBundles(TextPageLink pageLink) { 60 public List<WidgetsBundle> findSystemWidgetsBundles(TextPageLink pageLink) {
61 - if (pageLink.getIdOffset() == null) {  
62 - return DaoUtil.convertDataList(widgetsBundleRepository.findSystemWidgetsBundlesFirstPage(pageLink.getLimit(),  
63 - pageLink.getTextSearch(), NULL_UUID));  
64 - } else {  
65 - return DaoUtil.convertDataList(widgetsBundleRepository.findSystemWidgetsBundlesNextPage(pageLink.getLimit(),  
66 - pageLink.getTextSearch(), pageLink.getIdOffset(), NULL_UUID));  
67 - } 61 + return DaoUtil.convertDataList(
  62 + widgetsBundleRepository
  63 + .findSystemWidgetsBundles(
  64 + pageLink.getLimit(),
  65 + NULL_UUID,
  66 + pageLink.getTextSearch(),
  67 + pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset()));
68 } 68 }
69 69
70 @Override 70 @Override
71 public List<WidgetsBundle> findTenantWidgetsBundlesByTenantId(UUID tenantId, TextPageLink pageLink) { 71 public List<WidgetsBundle> findTenantWidgetsBundlesByTenantId(UUID tenantId, TextPageLink pageLink) {
72 - if (pageLink.getIdOffset() == null) {  
73 - return DaoUtil.convertDataList(widgetsBundleRepository.findTenantWidgetsBundlesByTenantIdFirstPage(pageLink.getLimit(),  
74 - tenantId, pageLink.getTextSearch()));  
75 - } else {  
76 - return DaoUtil.convertDataList(widgetsBundleRepository.findTenantWidgetsBundlesByTenantIdNextPage(pageLink.getLimit(),  
77 - tenantId, pageLink.getTextSearch(), pageLink.getIdOffset()));  
78 - } 72 + return DaoUtil.convertDataList(
  73 + widgetsBundleRepository
  74 + .findTenantWidgetsBundlesByTenantId(
  75 + pageLink.getLimit(),
  76 + tenantId,
  77 + pageLink.getTextSearch(),
  78 + pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset()));
79 } 79 }
80 80
81 @Override 81 @Override
82 public List<WidgetsBundle> findAllTenantWidgetsBundlesByTenantId(UUID tenantId, TextPageLink pageLink) { 82 public List<WidgetsBundle> findAllTenantWidgetsBundlesByTenantId(UUID tenantId, TextPageLink pageLink) {
83 - if (pageLink.getIdOffset() == null) {  
84 - return DaoUtil.convertDataList(widgetsBundleRepository.findAllTenantWidgetsBundlesByTenantIdFirstPage(pageLink.getLimit(),  
85 - tenantId, pageLink.getTextSearch()));  
86 - } else {  
87 - return DaoUtil.convertDataList(widgetsBundleRepository.findAllTenantWidgetsBundlesByTenantIdNextPage(pageLink.getLimit(),  
88 - tenantId, pageLink.getTextSearch(), pageLink.getIdOffset()));  
89 - } 83 + return DaoUtil.convertDataList(
  84 + widgetsBundleRepository
  85 + .findAllTenantWidgetsBundlesByTenantId(
  86 + pageLink.getLimit(),
  87 + tenantId,
  88 + NULL_UUID,
  89 + pageLink.getTextSearch(),
  90 + pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset()));
90 } 91 }
91 } 92 }
@@ -18,6 +18,7 @@ package org.thingsboard.server.dao.sql.widget; @@ -18,6 +18,7 @@ package org.thingsboard.server.dao.sql.widget;
18 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; 18 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
19 import org.springframework.data.jpa.repository.Query; 19 import org.springframework.data.jpa.repository.Query;
20 import org.springframework.data.repository.CrudRepository; 20 import org.springframework.data.repository.CrudRepository;
  21 +import org.springframework.data.repository.query.Param;
21 import org.thingsboard.server.dao.model.sql.WidgetsBundleEntity; 22 import org.thingsboard.server.dao.model.sql.WidgetsBundleEntity;
22 23
23 import java.util.List; 24 import java.util.List;
@@ -31,33 +32,28 @@ public interface WidgetsBundleRepository extends CrudRepository<WidgetsBundleEnt @@ -31,33 +32,28 @@ public interface WidgetsBundleRepository extends CrudRepository<WidgetsBundleEnt
31 32
32 WidgetsBundleEntity findWidgetsBundleByTenantIdAndAlias(UUID tenantId, String alias); 33 WidgetsBundleEntity findWidgetsBundleByTenantIdAndAlias(UUID tenantId, String alias);
33 34
34 - @Query(nativeQuery = true, value = "SELECT * FROM WIDGETS_BUNDLE WHERE TENANT_ID = ?3 " +  
35 - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(?2, '%')) " +  
36 - "ORDER BY ID LIMIT ?1")  
37 - List<WidgetsBundleEntity> findSystemWidgetsBundlesFirstPage(Integer limit, String searchText, UUID tenantId);  
38 -  
39 - @Query(nativeQuery = true, value = "SELECT * FROM WIDGETS_BUNDLE WHERE TENANT_ID = ?4 " +  
40 - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(?2, '%')) " +  
41 - "AND ID > ?3 ORDER BY ID LIMIT ?1")  
42 - List<WidgetsBundleEntity> findSystemWidgetsBundlesNextPage(Integer limit, String searchText, UUID idOffset, UUID tenantId);  
43 -  
44 - @Query(nativeQuery = true, value = "SELECT * FROM WIDGETS_BUNDLE WHERE TENANT_ID = ?2 " +  
45 - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(?3, '%')) " +  
46 - "ORDER BY ID LIMIT ?1")  
47 - List<WidgetsBundleEntity> findTenantWidgetsBundlesByTenantIdFirstPage(int limit, UUID tenantId, String textSearch);  
48 -  
49 - @Query(nativeQuery = true, value = "SELECT * FROM WIDGETS_BUNDLE WHERE TENANT_ID = ?2 " +  
50 - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(?3, '%')) " +  
51 - "AND ID > ?4 ORDER BY ID LIMIT ?1")  
52 - List<WidgetsBundleEntity> findTenantWidgetsBundlesByTenantIdNextPage(int limit, UUID tenantId, String textSearch, UUID idOffset);  
53 -  
54 - @Query(nativeQuery = true, value = "SELECT * FROM WIDGETS_BUNDLE WHERE (TENANT_ID IS NULL OR TENANT_ID = ?2) " +  
55 - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(?3, '%')) " +  
56 - "ORDER BY ID LIMIT ?1")  
57 - List<WidgetsBundleEntity> findAllTenantWidgetsBundlesByTenantIdFirstPage(int limit, UUID tenantId, String textSearch);  
58 -  
59 - @Query(nativeQuery = true, value = "SELECT * FROM WIDGETS_BUNDLE WHERE (TENANT_ID IS NULL OR TENANT_ID = ?2) " +  
60 - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(?3, '%')) " +  
61 - "AND ID > ?4 ORDER BY ID LIMIT ?1")  
62 - List<WidgetsBundleEntity> findAllTenantWidgetsBundlesByTenantIdNextPage(int limit, UUID tenantId, String textSearch, UUID idOffset); 35 + @Query(nativeQuery = true, value = "SELECT * FROM WIDGETS_BUNDLE WHERE TENANT_ID = :systemTenantId " +
  36 + "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:searchText, '%')) " +
  37 + "AND ID > :idOffset ORDER BY ID LIMIT :limit")
  38 + List<WidgetsBundleEntity> findSystemWidgetsBundles(@Param("limit") int limit,
  39 + @Param("systemTenantId") UUID systemTenantId,
  40 + @Param("searchText") String searchText,
  41 + @Param("idOffset") UUID idOffset);
  42 +
  43 + @Query(nativeQuery = true, value = "SELECT * FROM WIDGETS_BUNDLE WHERE TENANT_ID = :tenantId " +
  44 + "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " +
  45 + "AND ID > :idOffset ORDER BY ID LIMIT :limit")
  46 + List<WidgetsBundleEntity> findTenantWidgetsBundlesByTenantId(@Param("limit") int limit,
  47 + @Param("tenantId") UUID tenantId,
  48 + @Param("textSearch") String textSearch,
  49 + @Param("idOffset") UUID idOffset);
  50 +
  51 + @Query(nativeQuery = true, value = "SELECT * FROM WIDGETS_BUNDLE WHERE TENANT_ID IN (:tenantId, :nullTenantId) " +
  52 + "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " +
  53 + "AND ID > :idOffset ORDER BY ID LIMIT :limit")
  54 + List<WidgetsBundleEntity> findAllTenantWidgetsBundlesByTenantId(@Param("limit") int limit,
  55 + @Param("tenantId") UUID tenantId,
  56 + @Param("nullTenantId") UUID nullTenantId,
  57 + @Param("textSearch") String textSearch,
  58 + @Param("idOffset") UUID idOffset);
63 } 59 }
@@ -32,7 +32,8 @@ import org.springframework.test.context.support.DirtiesContextTestExecutionListe @@ -32,7 +32,8 @@ import org.springframework.test.context.support.DirtiesContextTestExecutionListe
32 @RunWith(SpringJUnit4ClassRunner.class) 32 @RunWith(SpringJUnit4ClassRunner.class)
33 @ContextConfiguration(classes = {JpaDaoConfig.class, JpaDbunitTestConfig.class}) 33 @ContextConfiguration(classes = {JpaDaoConfig.class, JpaDbunitTestConfig.class})
34 @TestPropertySource("classpath:jpa-test.properties") 34 @TestPropertySource("classpath:jpa-test.properties")
35 -@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class, 35 +@TestExecutionListeners({
  36 + DependencyInjectionTestExecutionListener.class,
36 DirtiesContextTestExecutionListener.class, 37 DirtiesContextTestExecutionListener.class,
37 DbUnitTestExecutionListener.class }) 38 DbUnitTestExecutionListener.class })
38 @DbUnitConfiguration(databaseConnection = "dbUnitDatabaseConnection") 39 @DbUnitConfiguration(databaseConnection = "dbUnitDatabaseConnection")
@@ -22,7 +22,6 @@ import com.fasterxml.jackson.databind.node.ObjectNode; @@ -22,7 +22,6 @@ import com.fasterxml.jackson.databind.node.ObjectNode;
22 import com.fasterxml.jackson.databind.node.TextNode; 22 import com.fasterxml.jackson.databind.node.TextNode;
23 import org.junit.runner.RunWith; 23 import org.junit.runner.RunWith;
24 import org.springframework.beans.factory.annotation.Autowired; 24 import org.springframework.beans.factory.annotation.Autowired;
25 -import org.springframework.boot.autoconfigure.EnableAutoConfiguration;  
26 import org.springframework.context.annotation.ComponentScan; 25 import org.springframework.context.annotation.ComponentScan;
27 import org.springframework.context.annotation.Configuration; 26 import org.springframework.context.annotation.Configuration;
28 import org.springframework.test.annotation.DirtiesContext; 27 import org.springframework.test.annotation.DirtiesContext;
@@ -68,7 +67,6 @@ import java.util.concurrent.ThreadLocalRandom; @@ -68,7 +67,6 @@ import java.util.concurrent.ThreadLocalRandom;
68 @TestPropertySource(locations = {"classpath:cassandra-test.properties", "classpath:application-test.properties"}) 67 @TestPropertySource(locations = {"classpath:cassandra-test.properties", "classpath:application-test.properties"})
69 @DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS) 68 @DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)
70 @Configuration 69 @Configuration
71 -@EnableAutoConfiguration  
72 @ComponentScan("org.thingsboard.server") 70 @ComponentScan("org.thingsboard.server")
73 public abstract class AbstractServiceTest { 71 public abstract class AbstractServiceTest {
74 72
@@ -15,8 +15,6 @@ @@ -15,8 +15,6 @@
15 */ 15 */
16 package org.thingsboard.server.dao.sql.alarm; 16 package org.thingsboard.server.dao.sql.alarm;
17 17
18 -import com.datastax.driver.core.utils.UUIDs;  
19 -import com.github.springtestdbunit.annotation.DatabaseSetup;  
20 import com.google.common.util.concurrent.ListenableFuture; 18 import com.google.common.util.concurrent.ListenableFuture;
21 import org.junit.Test; 19 import org.junit.Test;
22 import org.springframework.beans.factory.annotation.Autowired; 20 import org.springframework.beans.factory.annotation.Autowired;
@@ -25,7 +23,6 @@ import org.thingsboard.server.common.data.alarm.Alarm; @@ -25,7 +23,6 @@ import org.thingsboard.server.common.data.alarm.Alarm;
25 import org.thingsboard.server.common.data.alarm.AlarmId; 23 import org.thingsboard.server.common.data.alarm.AlarmId;
26 import org.thingsboard.server.common.data.alarm.AlarmStatus; 24 import org.thingsboard.server.common.data.alarm.AlarmStatus;
27 import org.thingsboard.server.common.data.id.DeviceId; 25 import org.thingsboard.server.common.data.id.DeviceId;
28 -import org.thingsboard.server.common.data.id.EntityId;  
29 import org.thingsboard.server.common.data.id.TenantId; 26 import org.thingsboard.server.common.data.id.TenantId;
30 import org.thingsboard.server.dao.AbstractJpaDaoTest; 27 import org.thingsboard.server.dao.AbstractJpaDaoTest;
31 import org.thingsboard.server.dao.alarm.AlarmDao; 28 import org.thingsboard.server.dao.alarm.AlarmDao;