Commit 3534684588523b3d3a77d7bd697cc20520963d45
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 | 241 | <artifactId>mockito-all</artifactId> |
242 | 242 | <scope>test</scope> |
243 | 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 | 254 | </dependencies> |
245 | 255 | |
246 | 256 | <build> | ... | ... |
... | ... | @@ -16,18 +16,13 @@ |
16 | 16 | package org.thingsboard.server; |
17 | 17 | |
18 | 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 | 20 | import org.springframework.context.annotation.ComponentScan; |
25 | 21 | import springfox.documentation.swagger2.annotations.EnableSwagger2; |
26 | 22 | |
27 | 23 | import java.util.Arrays; |
28 | 24 | |
29 | -@EnableAutoConfiguration | |
30 | -@SpringBootApplication | |
25 | +@SpringBootConfiguration | |
31 | 26 | @EnableSwagger2 |
32 | 27 | @ComponentScan({"org.thingsboard.server"}) |
33 | 28 | public class ThingsboardServerApplication { | ... | ... |
... | ... | @@ -243,7 +243,4 @@ spring: |
243 | 243 | driverClassName: "${SPRING_DRIVER_CLASS_NAME:org.postgresql.Driver}" |
244 | 244 | url: "${SPRING_DATASOURCE_URL:jdbc:postgresql://localhost:5432/thingsboard}" |
245 | 245 | username: "${SPRING_DATASOURCE_USERNAME:postgres}" |
246 | - password: "${SPRING_DATASOURCE_PASSWORD:postgres}" | |
247 | -# autoconfigure: | |
248 | -# exclude: | |
249 | -# - org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration | |
\ No newline at end of file | ||
246 | + password: "${SPRING_DATASOURCE_PASSWORD:postgres}" | |
\ No newline at end of file | ... | ... |
... | ... | @@ -28,14 +28,9 @@ import org.junit.After; |
28 | 28 | import org.junit.Assert; |
29 | 29 | import org.junit.Before; |
30 | 30 | import org.junit.runner.RunWith; |
31 | -import org.mockito.Mockito; | |
32 | -import org.mockito.invocation.InvocationOnMock; | |
33 | -import org.mockito.stubbing.Answer; | |
34 | 31 | import org.springframework.beans.factory.annotation.Autowired; |
35 | -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; | |
36 | 32 | import org.springframework.boot.test.IntegrationTest; |
37 | 33 | import org.springframework.boot.test.SpringApplicationContextLoader; |
38 | -import org.springframework.context.annotation.Bean; | |
39 | 34 | import org.springframework.context.annotation.ComponentScan; |
40 | 35 | import org.springframework.context.annotation.Configuration; |
41 | 36 | import org.springframework.http.HttpHeaders; |
... | ... | @@ -66,11 +61,9 @@ import org.thingsboard.server.common.data.id.UUIDBased; |
66 | 61 | import org.thingsboard.server.common.data.page.TextPageLink; |
67 | 62 | import org.thingsboard.server.common.data.security.Authority; |
68 | 63 | import org.thingsboard.server.config.ThingsboardSecurityConfiguration; |
69 | -import org.thingsboard.server.exception.ThingsboardException; | |
70 | -import org.thingsboard.server.service.mail.MailService; | |
71 | 64 | import org.thingsboard.server.service.mail.TestMailService; |
72 | -import org.thingsboard.server.service.security.auth.rest.LoginRequest; | |
73 | 65 | import org.thingsboard.server.service.security.auth.jwt.RefreshTokenRequest; |
66 | +import org.thingsboard.server.service.security.auth.rest.LoginRequest; | |
74 | 67 | |
75 | 68 | import java.io.IOException; |
76 | 69 | import java.nio.charset.Charset; |
... | ... | @@ -81,9 +74,7 @@ import java.util.List; |
81 | 74 | |
82 | 75 | import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.springSecurity; |
83 | 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 | 78 | import static org.springframework.test.web.servlet.setup.MockMvcBuilders.webAppContextSetup; |
88 | 79 | |
89 | 80 | @ActiveProfiles("test") |
... | ... | @@ -92,7 +83,6 @@ import static org.springframework.test.web.servlet.setup.MockMvcBuilders.webAppC |
92 | 83 | @TestPropertySource(locations = {"classpath:cassandra-test.properties", "classpath:thingsboard-test.properties"}) |
93 | 84 | @DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS) |
94 | 85 | @Configuration |
95 | -@EnableAutoConfiguration | |
96 | 86 | @ComponentScan({"org.thingsboard.server"}) |
97 | 87 | @WebAppConfiguration |
98 | 88 | @IntegrationTest("server.port:0") |
... | ... | @@ -113,7 +103,6 @@ public abstract class AbstractControllerTest { |
113 | 103 | MediaType.APPLICATION_JSON.getSubtype(), |
114 | 104 | Charset.forName("utf8")); |
115 | 105 | |
116 | - | |
117 | 106 | protected MockMvc mockMvc; |
118 | 107 | |
119 | 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 | 26 | |
27 | 27 | @RunWith(ClasspathSuite.class) |
28 | 28 | @ClassnameFilters({"org.thingsboard.server.controller.*Test"}) |
29 | -public class ControllerTestSuite { | |
29 | +public class CassandraControllerTestSuite { | |
30 | 30 | |
31 | 31 | @ClassRule |
32 | 32 | public static CustomCassandraCQLUnit cassandraUnit = |
... | ... | @@ -35,5 +35,4 @@ public class ControllerTestSuite { |
35 | 35 | new ClassPathCQLDataSet("cassandra/system-data.cql", false, false), |
36 | 36 | new ClassPathCQLDataSet("system-test.cql", false, false)), |
37 | 37 | "cassandra-test.yaml", 30000l); |
38 | - | |
39 | 38 | } | ... | ... |
... | ... | @@ -17,7 +17,6 @@ package org.thingsboard.server.mqtt; |
17 | 17 | |
18 | 18 | import org.junit.runner.RunWith; |
19 | 19 | import org.springframework.beans.factory.annotation.Autowired; |
20 | -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; | |
21 | 20 | import org.springframework.boot.test.IntegrationTest; |
22 | 21 | import org.springframework.boot.test.SpringApplicationContextLoader; |
23 | 22 | import org.springframework.context.annotation.ComponentScan; |
... | ... | @@ -46,7 +45,6 @@ import static org.junit.Assert.assertNotNull; |
46 | 45 | @TestPropertySource(locations = {"classpath:cassandra-test.properties", "classpath:thingsboard-test.properties"}) |
47 | 46 | @DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS) |
48 | 47 | @Configuration |
49 | -@EnableAutoConfiguration | |
50 | 48 | @ComponentScan({"org.thingsboard.server"}) |
51 | 49 | @WebAppConfiguration |
52 | 50 | @IntegrationTest("server.port:8080") | ... | ... |
... | ... | @@ -18,6 +18,7 @@ package org.thingsboard.server.dao; |
18 | 18 | import org.springframework.boot.autoconfigure.EnableAutoConfiguration; |
19 | 19 | import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; |
20 | 20 | import org.springframework.boot.autoconfigure.domain.EntityScan; |
21 | +import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration; | |
21 | 22 | import org.springframework.context.annotation.ComponentScan; |
22 | 23 | import org.springframework.context.annotation.Configuration; |
23 | 24 | import org.springframework.data.jpa.repository.config.EnableJpaRepositories; |
... | ... | @@ -28,11 +29,11 @@ import org.springframework.transaction.annotation.EnableTransactionManagement; |
28 | 29 | */ |
29 | 30 | @Configuration |
30 | 31 | @EnableAutoConfiguration |
31 | -@ConditionalOnProperty(prefix="sql", value="enabled",havingValue = "true", matchIfMissing = false) | |
32 | 32 | @ComponentScan("org.thingsboard.server.dao.sql") |
33 | 33 | @EnableJpaRepositories("org.thingsboard.server.dao.sql") |
34 | 34 | @EntityScan("org.thingsboard.server.dao.model.sql") |
35 | 35 | @EnableTransactionManagement |
36 | +@ConditionalOnProperty(prefix = "sql", value = "enabled", havingValue = "true") | |
36 | 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 | 15 | */ |
16 | 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 | 82 | @Override |
83 | 83 | public ListenableFuture<D> findByIdAsync(UUID key) { |
84 | 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 | 88 | @Override | ... | ... |
... | ... | @@ -17,8 +17,8 @@ package org.thingsboard.server.dao.sql.alarm; |
17 | 17 | |
18 | 18 | import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; |
19 | 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 | 22 | import org.thingsboard.server.dao.model.sql.AlarmEntity; |
23 | 23 | |
24 | 24 | import java.util.UUID; |
... | ... | @@ -27,9 +27,12 @@ import java.util.UUID; |
27 | 27 | * Created by Valerii Sosliuk on 5/21/2017. |
28 | 28 | */ |
29 | 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 | 15 | */ |
16 | 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 | 21 | import lombok.extern.slf4j.Slf4j; |
20 | 22 | import org.springframework.beans.factory.annotation.Autowired; |
21 | 23 | import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; |
... | ... | @@ -39,7 +41,6 @@ import org.thingsboard.server.dao.sql.JpaAbstractDao; |
39 | 41 | import java.util.ArrayList; |
40 | 42 | import java.util.List; |
41 | 43 | import java.util.UUID; |
42 | -import java.util.concurrent.Executors; | |
43 | 44 | |
44 | 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 | 71 | @Override |
71 | 72 | @Transactional(propagation = REQUIRES_NEW) |
72 | 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 | 82 | @Override | ... | ... |
... | ... | @@ -18,12 +18,11 @@ package org.thingsboard.server.dao.sql.asset; |
18 | 18 | import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; |
19 | 19 | import org.springframework.data.jpa.repository.Query; |
20 | 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 | 22 | import org.thingsboard.server.common.data.asset.TenantAssetType; |
23 | 23 | import org.thingsboard.server.dao.model.sql.AssetEntity; |
24 | 24 | |
25 | 25 | import java.util.List; |
26 | -import java.util.Optional; | |
27 | 26 | import java.util.UUID; |
28 | 27 | |
29 | 28 | /** |
... | ... | @@ -31,28 +30,24 @@ import java.util.UUID; |
31 | 30 | */ |
32 | 31 | @ConditionalOnProperty(prefix = "sql", value = "enabled", havingValue = "true", matchIfMissing = false) |
33 | 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 | 52 | List<AssetEntity> findByTenantIdAndIdIn(UUID tenantId, List<UUID> assetIds); |
58 | 53 | |
... | ... | @@ -60,17 +55,16 @@ public interface AssetRepository extends CrudRepository<AssetEntity, UUID> { |
60 | 55 | |
61 | 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 | 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 | 70 | List<TenantAssetType> findTenantAssetTypes(); | ... | ... |
... | ... | @@ -16,8 +16,6 @@ |
16 | 16 | package org.thingsboard.server.dao.sql.asset; |
17 | 17 | |
18 | 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 | 19 | import org.springframework.beans.factory.annotation.Autowired; |
22 | 20 | import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; |
23 | 21 | import org.springframework.data.repository.CrudRepository; |
... | ... | @@ -33,7 +31,8 @@ import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao; |
33 | 31 | import java.util.List; |
34 | 32 | import java.util.Optional; |
35 | 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 | 38 | * Created by Valerii Sosliuk on 5/19/2017. |
... | ... | @@ -57,13 +56,12 @@ public class JpaAssetDao extends JpaAbstractSearchTextDao<AssetEntity, Asset> im |
57 | 56 | |
58 | 57 | @Override |
59 | 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 | 67 | @Override |
... | ... | @@ -74,19 +72,19 @@ public class JpaAssetDao extends JpaAbstractSearchTextDao<AssetEntity, Asset> im |
74 | 72 | |
75 | 73 | @Override |
76 | 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 | 84 | @Override |
87 | 85 | public ListenableFuture<List<Asset>> findAssetsByTenantIdAndCustomerIdAndIdsAsync(UUID tenantId, UUID customerId, List<UUID> assetIds) { |
88 | 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 | 90 | @Override |
... | ... | @@ -102,13 +100,14 @@ public class JpaAssetDao extends JpaAbstractSearchTextDao<AssetEntity, Asset> im |
102 | 100 | |
103 | 101 | @Override |
104 | 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 | 113 | @Override | ... | ... |
... | ... | @@ -18,13 +18,9 @@ package org.thingsboard.server.dao.sql.component; |
18 | 18 | import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; |
19 | 19 | import org.springframework.data.jpa.repository.Query; |
20 | 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 | 22 | import org.thingsboard.server.dao.model.sql.ComponentDescriptorEntity; |
26 | 23 | |
27 | -import java.util.Collection; | |
28 | 24 | import java.util.List; |
29 | 25 | import java.util.UUID; |
30 | 26 | |
... | ... | @@ -36,25 +32,22 @@ public interface ComponentDescriptorRepository extends CrudRepository<ComponentD |
36 | 32 | |
37 | 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 | 52 | void deleteByClazz(String clazz); |
60 | 53 | } | ... | ... |
... | ... | @@ -34,13 +34,15 @@ import java.util.List; |
34 | 34 | import java.util.Optional; |
35 | 35 | import java.util.UUID; |
36 | 36 | |
37 | +import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID; | |
38 | + | |
37 | 39 | /** |
38 | 40 | * Created by Valerii Sosliuk on 5/6/2017. |
39 | 41 | */ |
40 | 42 | @Component |
41 | 43 | @ConditionalOnProperty(prefix = "sql", value = "enabled", havingValue = "true", matchIfMissing = false) |
42 | 44 | public class JpaBaseComponentDescriptorDao extends JpaAbstractSearchTextDao<ComponentDescriptorEntity, ComponentDescriptor> |
43 | - implements ComponentDescriptorDao { | |
45 | + implements ComponentDescriptorDao { | |
44 | 46 | |
45 | 47 | @Autowired |
46 | 48 | private ComponentDescriptorRepository componentDescriptorRepository; |
... | ... | @@ -79,24 +81,23 @@ public class JpaBaseComponentDescriptorDao extends JpaAbstractSearchTextDao<Comp |
79 | 81 | |
80 | 82 | @Override |
81 | 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 | 92 | @Override |
92 | 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 | 103 | @Override | ... | ... |
... | ... | @@ -18,7 +18,7 @@ package org.thingsboard.server.dao.sql.customer; |
18 | 18 | import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; |
19 | 19 | import org.springframework.data.jpa.repository.Query; |
20 | 20 | import org.springframework.data.repository.CrudRepository; |
21 | -import org.thingsboard.server.common.data.Customer; | |
21 | +import org.springframework.data.repository.query.Param; | |
22 | 22 | import org.thingsboard.server.dao.model.sql.CustomerEntity; |
23 | 23 | |
24 | 24 | import java.util.List; |
... | ... | @@ -30,15 +30,13 @@ import java.util.UUID; |
30 | 30 | @ConditionalOnProperty(prefix = "sql", value = "enabled", havingValue = "true", matchIfMissing = false) |
31 | 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 | 41 | CustomerEntity findByTenantIdAndTitle(UUID tenantId, String title); |
44 | 42 | ... | ... |
... | ... | @@ -23,7 +23,6 @@ import org.thingsboard.server.common.data.Customer; |
23 | 23 | import org.thingsboard.server.common.data.page.TextPageLink; |
24 | 24 | import org.thingsboard.server.dao.DaoUtil; |
25 | 25 | import org.thingsboard.server.dao.customer.CustomerDao; |
26 | -import org.thingsboard.server.dao.model.ModelConstants; | |
27 | 26 | import org.thingsboard.server.dao.model.sql.CustomerEntity; |
28 | 27 | import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao; |
29 | 28 | |
... | ... | @@ -31,12 +30,14 @@ import java.util.List; |
31 | 30 | import java.util.Optional; |
32 | 31 | import java.util.UUID; |
33 | 32 | |
33 | +import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID; | |
34 | + | |
34 | 35 | /** |
35 | 36 | * Created by Valerii Sosliuk on 5/6/2017. |
36 | 37 | */ |
37 | 38 | @Component |
38 | 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 | 42 | @Autowired |
42 | 43 | private CustomerRepository customerRepository; |
... | ... | @@ -53,12 +54,8 @@ public class JpaCustomerDao extends JpaAbstractSearchTextDao<CustomerEntity, Cus |
53 | 54 | |
54 | 55 | @Override |
55 | 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 | 61 | @Override | ... | ... |
... | ... | @@ -18,6 +18,7 @@ package org.thingsboard.server.dao.sql.dashboard; |
18 | 18 | import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; |
19 | 19 | import org.springframework.data.jpa.repository.Query; |
20 | 20 | import org.springframework.data.repository.CrudRepository; |
21 | +import org.springframework.data.repository.query.Param; | |
21 | 22 | import org.thingsboard.server.dao.model.sql.DashboardInfoEntity; |
22 | 23 | |
23 | 24 | import java.util.List; |
... | ... | @@ -29,23 +30,20 @@ import java.util.UUID; |
29 | 30 | @ConditionalOnProperty(prefix = "sql", value = "enabled", havingValue = "true", matchIfMissing = false) |
30 | 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 | 29 | import java.util.List; |
30 | 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 | 35 | * Created by Valerii Sosliuk on 5/6/2017. |
... | ... | @@ -53,23 +53,22 @@ public class JpaDashboardInfoDao extends JpaAbstractSearchTextDao<DashboardInfoE |
53 | 53 | |
54 | 54 | @Override |
55 | 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 | 64 | @Override |
66 | 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 | 19 | import org.springframework.data.jpa.repository.Query; |
20 | 20 | import org.springframework.data.repository.CrudRepository; |
21 | 21 | import org.springframework.data.repository.query.Param; |
22 | -import org.springframework.stereotype.Repository; | |
23 | 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 | 25 | import java.util.List; |
28 | 26 | import java.util.UUID; |
29 | 27 | |
... | ... | @@ -74,12 +72,8 @@ public interface DeviceRepository extends CrudRepository<DeviceEntity, UUID> { |
74 | 72 | @Param("textSearch") String textSearch, |
75 | 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 | 78 | DeviceEntity findByTenantIdAndName(UUID tenantId, String name); |
85 | 79 | ... | ... |
... | ... | @@ -27,7 +27,7 @@ import org.thingsboard.server.common.data.page.TextPageLink; |
27 | 27 | import org.thingsboard.server.dao.DaoUtil; |
28 | 28 | import org.thingsboard.server.dao.device.DeviceDao; |
29 | 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 | 31 | import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao; |
32 | 32 | |
33 | 33 | import java.util.*; |
... | ... | @@ -121,15 +121,15 @@ public class JpaDeviceDao extends JpaAbstractSearchTextDao<DeviceEntity, Device> |
121 | 121 | |
122 | 122 | @Override |
123 | 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 | 128 | List<TenantDeviceType> list = Collections.emptyList(); |
129 | - if (resultSet != null && !resultSet.isEmpty()) { | |
129 | + if (entities != null && !entities.isEmpty()) { | |
130 | 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 | 135 | return list; | ... | ... |
... | ... | @@ -17,14 +17,10 @@ package org.thingsboard.server.dao.sql.event; |
17 | 17 | |
18 | 18 | import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; |
19 | 19 | import org.springframework.data.jpa.repository.JpaSpecificationExecutor; |
20 | -import org.springframework.data.jpa.repository.Query; | |
21 | 20 | import org.springframework.data.repository.CrudRepository; |
22 | -import org.springframework.data.repository.query.Param; | |
23 | 21 | import org.thingsboard.server.common.data.EntityType; |
24 | -import org.thingsboard.server.common.data.Event; | |
25 | 22 | import org.thingsboard.server.dao.model.sql.EventEntity; |
26 | 23 | |
27 | -import java.util.List; | |
28 | 24 | import java.util.UUID; |
29 | 25 | |
30 | 26 | /** | ... | ... |
... | ... | @@ -25,16 +25,16 @@ import org.thingsboard.server.common.data.id.TenantId; |
25 | 25 | import org.thingsboard.server.common.data.page.TextPageLink; |
26 | 26 | import org.thingsboard.server.common.data.plugin.PluginMetaData; |
27 | 27 | import org.thingsboard.server.dao.DaoUtil; |
28 | -import org.thingsboard.server.dao.model.ModelConstants; | |
29 | 28 | import org.thingsboard.server.dao.model.sql.PluginMetaDataEntity; |
30 | 29 | import org.thingsboard.server.dao.plugin.PluginDao; |
31 | -import org.thingsboard.server.dao.sql.JpaAbstractDao; | |
32 | 30 | import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao; |
33 | 31 | |
34 | 32 | import java.util.Arrays; |
35 | 33 | import java.util.List; |
36 | 34 | import java.util.UUID; |
37 | 35 | |
36 | +import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID; | |
37 | + | |
38 | 38 | /** |
39 | 39 | * Created by Valerii Sosliuk on 5/1/2017. |
40 | 40 | */ |
... | ... | @@ -93,15 +93,13 @@ public class JpaBasePluginDao extends JpaAbstractSearchTextDao<PluginMetaDataEnt |
93 | 93 | |
94 | 94 | @Override |
95 | 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 | 103 | if (log.isTraceEnabled()) { |
106 | 104 | log.trace("Search result: [{}]", Arrays.toString(entities.toArray())); |
107 | 105 | } else { |
... | ... | @@ -113,14 +111,13 @@ public class JpaBasePluginDao extends JpaAbstractSearchTextDao<PluginMetaDataEnt |
113 | 111 | @Override |
114 | 112 | public List<PluginMetaData> findAllTenantPluginsByTenantId(UUID tenantId, TextPageLink pageLink) { |
115 | 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 | 121 | if (log.isTraceEnabled()) { |
125 | 122 | log.trace("Search result: [{}]", Arrays.toString(entities.toArray())); |
126 | 123 | } else { | ... | ... |
... | ... | @@ -18,9 +18,8 @@ package org.thingsboard.server.dao.sql.plugin; |
18 | 18 | import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; |
19 | 19 | import org.springframework.data.jpa.repository.Query; |
20 | 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 | 22 | import org.thingsboard.server.dao.model.sql.PluginMetaDataEntity; |
23 | -import org.thingsboard.server.dao.model.sql.RuleMetaDataEntity; | |
24 | 23 | |
25 | 24 | import java.util.List; |
26 | 25 | import java.util.UUID; |
... | ... | @@ -33,23 +32,20 @@ public interface PluginMetaDataRepository extends CrudRepository<PluginMetaDataE |
33 | 32 | |
34 | 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 | 21 | import lombok.extern.slf4j.Slf4j; |
22 | 22 | import org.springframework.beans.factory.annotation.Autowired; |
23 | 23 | import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; |
24 | -import org.springframework.data.repository.CrudRepository; | |
25 | 24 | import org.springframework.stereotype.Component; |
26 | 25 | import org.thingsboard.server.common.data.EntityType; |
27 | 26 | import org.thingsboard.server.common.data.id.EntityId; |
... | ... | @@ -32,10 +31,8 @@ import org.thingsboard.server.dao.DaoUtil; |
32 | 31 | import org.thingsboard.server.dao.model.sql.RelationCompositeKey; |
33 | 32 | import org.thingsboard.server.dao.model.sql.RelationEntity; |
34 | 33 | import org.thingsboard.server.dao.relation.RelationDao; |
35 | -import org.thingsboard.server.dao.sql.JpaAbstractDao; | |
36 | 34 | |
37 | 35 | import java.util.List; |
38 | -import java.util.UUID; | |
39 | 36 | import java.util.concurrent.Executors; |
40 | 37 | |
41 | 38 | /** |
... | ... | @@ -111,8 +108,9 @@ public class JpaRelationDao implements RelationDao { |
111 | 108 | RelationCompositeKey key = new RelationCompositeKey(relation); |
112 | 109 | return executorService.submit( |
113 | 110 | () -> { |
111 | + boolean relationExistsBeforeDelete = relationRepository.exists(key); | |
114 | 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 | 125 | typeGroup.name()); |
128 | 126 | return executorService.submit( |
129 | 127 | () -> { |
130 | - boolean result = relationRepository.exists(key); | |
128 | + boolean relationExistsBeforeDelete = relationRepository.exists(key); | |
131 | 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 | 139 | |
142 | 140 | return executorService.submit( |
143 | 141 | () -> { |
144 | - boolean result = relationRepository | |
142 | + boolean relationExistsBeforeDelete = relationRepository | |
145 | 143 | .findAllByFromIdAndFromType(relationEntity.getFromId(), relationEntity.getFromType()) |
146 | 144 | .size() > 0; |
147 | 145 | relationRepository.delete(relationEntity); |
148 | - return result; | |
146 | + return relationExistsBeforeDelete; | |
149 | 147 | }); |
150 | 148 | } |
151 | 149 | |
152 | 150 | @Override |
153 | 151 | public ListenableFuture<List<EntityRelation>> findRelations(EntityId from, String relationType, RelationTypeGroup typeGroup, EntityType childType, TimePageLink pageLink) { |
152 | +// TODO: | |
154 | 153 | // executorService.submit(() -> DaoUtil.convertDataList( |
155 | 154 | // relationRepository.findRelations( |
156 | 155 | // to.getId(), | ... | ... |
... | ... | @@ -15,29 +15,14 @@ |
15 | 15 | */ |
16 | 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 | 18 | import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; |
22 | -import org.springframework.data.jpa.repository.Query; | |
23 | 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 | 20 | import org.thingsboard.server.dao.model.sql.RelationCompositeKey; |
33 | 21 | import org.thingsboard.server.dao.model.sql.RelationEntity; |
34 | 22 | |
35 | -import java.util.Arrays; | |
36 | 23 | import java.util.List; |
37 | 24 | import java.util.UUID; |
38 | 25 | |
39 | -import static com.datastax.driver.core.querybuilder.QueryBuilder.eq; | |
40 | - | |
41 | 26 | @ConditionalOnProperty(prefix = "sql", value = "enabled", havingValue = "true") |
42 | 27 | public interface RelationRepository extends CrudRepository<RelationEntity, RelationCompositeKey> { |
43 | 28 | |
... | ... | @@ -62,46 +47,19 @@ public interface RelationRepository extends CrudRepository<RelationEntity, Relat |
62 | 47 | List<RelationEntity> findAllByFromIdAndFromType(UUID fromId, |
63 | 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 | 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); | |
\ No newline at end of file | ... | ... |
... | ... | @@ -25,16 +25,16 @@ import org.thingsboard.server.common.data.id.TenantId; |
25 | 25 | import org.thingsboard.server.common.data.page.TextPageLink; |
26 | 26 | import org.thingsboard.server.common.data.rule.RuleMetaData; |
27 | 27 | import org.thingsboard.server.dao.DaoUtil; |
28 | -import org.thingsboard.server.dao.model.ModelConstants; | |
29 | 28 | import org.thingsboard.server.dao.model.sql.RuleMetaDataEntity; |
30 | 29 | import org.thingsboard.server.dao.rule.RuleDao; |
31 | -import org.thingsboard.server.dao.sql.JpaAbstractDao; | |
32 | 30 | import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao; |
33 | 31 | |
34 | 32 | import java.util.Arrays; |
35 | 33 | import java.util.List; |
36 | 34 | import java.util.UUID; |
37 | 35 | |
36 | +import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID; | |
37 | + | |
38 | 38 | /** |
39 | 39 | * Created by Valerii Sosliuk on 4/30/2017. |
40 | 40 | */ |
... | ... | @@ -70,14 +70,13 @@ public class JpaBaseRuleDao extends JpaAbstractSearchTextDao<RuleMetaDataEntity, |
70 | 70 | @Override |
71 | 71 | public List<RuleMetaData> findByTenantIdAndPageLink(TenantId tenantId, TextPageLink pageLink) { |
72 | 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 | 80 | if (log.isTraceEnabled()) { |
82 | 81 | log.trace("Search result: [{}]", Arrays.toString(entities.toArray())); |
83 | 82 | } else { |
... | ... | @@ -89,14 +88,15 @@ public class JpaBaseRuleDao extends JpaAbstractSearchTextDao<RuleMetaDataEntity, |
89 | 88 | @Override |
90 | 89 | public List<RuleMetaData> findAllTenantRulesByTenantId(UUID tenantId, TextPageLink pageLink) { |
91 | 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 | 100 | if (log.isTraceEnabled()) { |
101 | 101 | log.trace("Search result: [{}]", Arrays.toString(entities.toArray())); |
102 | 102 | } else { | ... | ... |
... | ... | @@ -18,11 +18,9 @@ package org.thingsboard.server.dao.sql.rule; |
18 | 18 | import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; |
19 | 19 | import org.springframework.data.jpa.repository.Query; |
20 | 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 | 22 | import org.thingsboard.server.dao.model.sql.RuleMetaDataEntity; |
24 | 23 | |
25 | -import java.util.Collection; | |
26 | 24 | import java.util.List; |
27 | 25 | import java.util.UUID; |
28 | 26 | |
... | ... | @@ -34,23 +32,20 @@ public interface RuleMetaDataRepository extends CrudRepository<RuleMetaDataEntit |
34 | 32 | |
35 | 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 | 16 | package org.thingsboard.server.dao.sql.settings; |
17 | 17 | |
18 | 18 | import org.springframework.data.repository.CrudRepository; |
19 | -import org.thingsboard.server.dao.model.ToData; | |
20 | 19 | import org.thingsboard.server.dao.model.sql.AdminSettingsEntity; |
21 | 20 | |
22 | 21 | import java.util.UUID; | ... | ... |
... | ... | @@ -28,8 +28,6 @@ import org.thingsboard.server.dao.sql.JpaAbstractDao; |
28 | 28 | |
29 | 29 | import java.util.UUID; |
30 | 30 | |
31 | -import static org.thingsboard.server.dao.model.ModelConstants.ADMIN_SETTINGS_COLUMN_FAMILY_NAME; | |
32 | - | |
33 | 31 | @Component |
34 | 32 | @Slf4j |
35 | 33 | @ConditionalOnProperty(prefix = "sql", value = "enabled", havingValue = "true") | ... | ... |
... | ... | @@ -23,14 +23,13 @@ import org.thingsboard.server.common.data.Tenant; |
23 | 23 | import org.thingsboard.server.common.data.page.TextPageLink; |
24 | 24 | import org.thingsboard.server.dao.DaoUtil; |
25 | 25 | import org.thingsboard.server.dao.model.sql.TenantEntity; |
26 | -import org.thingsboard.server.dao.sql.JpaAbstractDao; | |
27 | 26 | import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao; |
28 | 27 | import org.thingsboard.server.dao.tenant.TenantDao; |
29 | 28 | |
30 | 29 | import java.util.List; |
31 | 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 | 35 | * Created by Valerii Sosliuk on 4/30/2017. |
... | ... | @@ -54,10 +53,11 @@ public class JpaTenantDao extends JpaAbstractSearchTextDao<TenantEntity, Tenant> |
54 | 53 | |
55 | 54 | @Override |
56 | 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 | 18 | import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; |
19 | 19 | import org.springframework.data.jpa.repository.Query; |
20 | 20 | import org.springframework.data.repository.CrudRepository; |
21 | +import org.springframework.data.repository.query.Param; | |
21 | 22 | import org.thingsboard.server.dao.model.sql.TenantEntity; |
22 | 23 | |
23 | 24 | import java.util.List; |
... | ... | @@ -29,15 +30,11 @@ import java.util.UUID; |
29 | 30 | @ConditionalOnProperty(prefix = "sql", value = "enabled", havingValue = "true", matchIfMissing = false) |
30 | 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 | 22 | import org.thingsboard.server.common.data.User; |
23 | 23 | import org.thingsboard.server.common.data.page.TextPageLink; |
24 | 24 | import org.thingsboard.server.dao.DaoUtil; |
25 | -import org.thingsboard.server.dao.model.ModelConstants; | |
26 | 25 | import org.thingsboard.server.dao.model.sql.UserEntity; |
27 | 26 | import org.thingsboard.server.dao.sql.JpaAbstractDao; |
28 | 27 | import org.thingsboard.server.dao.user.UserDao; |
... | ... | @@ -30,6 +29,8 @@ import org.thingsboard.server.dao.user.UserDao; |
30 | 29 | import java.util.List; |
31 | 30 | import java.util.UUID; |
32 | 31 | |
32 | +import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID; | |
33 | + | |
33 | 34 | /** |
34 | 35 | * @author Valerii Sosliuk |
35 | 36 | */ |
... | ... | @@ -57,20 +58,22 @@ public class JpaUserDao extends JpaAbstractDao<UserEntity, User> implements User |
57 | 58 | |
58 | 59 | @Override |
59 | 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 | 69 | @Override |
68 | 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 | 18 | import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; |
19 | 19 | import org.springframework.data.jpa.repository.Query; |
20 | 20 | import org.springframework.data.repository.CrudRepository; |
21 | +import org.springframework.data.repository.query.Param; | |
21 | 22 | import org.thingsboard.server.dao.model.sql.UserEntity; |
22 | 23 | |
23 | 24 | import java.util.List; |
... | ... | @@ -31,24 +32,19 @@ public interface UserRepository extends CrudRepository<UserEntity, UUID> { |
31 | 32 | |
32 | 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 | 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 | } |
\ No newline at end of file | ... | ... |
... | ... | @@ -58,34 +58,35 @@ public class JpaWidgetsBundleDao extends JpaAbstractSearchTextDao<WidgetsBundleE |
58 | 58 | |
59 | 59 | @Override |
60 | 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 | 70 | @Override |
71 | 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 | 81 | @Override |
82 | 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 | 18 | import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; |
19 | 19 | import org.springframework.data.jpa.repository.Query; |
20 | 20 | import org.springframework.data.repository.CrudRepository; |
21 | +import org.springframework.data.repository.query.Param; | |
21 | 22 | import org.thingsboard.server.dao.model.sql.WidgetsBundleEntity; |
22 | 23 | |
23 | 24 | import java.util.List; |
... | ... | @@ -31,33 +32,28 @@ public interface WidgetsBundleRepository extends CrudRepository<WidgetsBundleEnt |
31 | 32 | |
32 | 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 | 32 | @RunWith(SpringJUnit4ClassRunner.class) |
33 | 33 | @ContextConfiguration(classes = {JpaDaoConfig.class, JpaDbunitTestConfig.class}) |
34 | 34 | @TestPropertySource("classpath:jpa-test.properties") |
35 | -@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class, | |
35 | +@TestExecutionListeners({ | |
36 | + DependencyInjectionTestExecutionListener.class, | |
36 | 37 | DirtiesContextTestExecutionListener.class, |
37 | 38 | DbUnitTestExecutionListener.class }) |
38 | 39 | @DbUnitConfiguration(databaseConnection = "dbUnitDatabaseConnection") | ... | ... |
... | ... | @@ -22,7 +22,6 @@ import com.fasterxml.jackson.databind.node.ObjectNode; |
22 | 22 | import com.fasterxml.jackson.databind.node.TextNode; |
23 | 23 | import org.junit.runner.RunWith; |
24 | 24 | import org.springframework.beans.factory.annotation.Autowired; |
25 | -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; | |
26 | 25 | import org.springframework.context.annotation.ComponentScan; |
27 | 26 | import org.springframework.context.annotation.Configuration; |
28 | 27 | import org.springframework.test.annotation.DirtiesContext; |
... | ... | @@ -68,7 +67,6 @@ import java.util.concurrent.ThreadLocalRandom; |
68 | 67 | @TestPropertySource(locations = {"classpath:cassandra-test.properties", "classpath:application-test.properties"}) |
69 | 68 | @DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS) |
70 | 69 | @Configuration |
71 | -@EnableAutoConfiguration | |
72 | 70 | @ComponentScan("org.thingsboard.server") |
73 | 71 | public abstract class AbstractServiceTest { |
74 | 72 | ... | ... |
... | ... | @@ -15,8 +15,6 @@ |
15 | 15 | */ |
16 | 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 | 18 | import com.google.common.util.concurrent.ListenableFuture; |
21 | 19 | import org.junit.Test; |
22 | 20 | import org.springframework.beans.factory.annotation.Autowired; |
... | ... | @@ -25,7 +23,6 @@ import org.thingsboard.server.common.data.alarm.Alarm; |
25 | 23 | import org.thingsboard.server.common.data.alarm.AlarmId; |
26 | 24 | import org.thingsboard.server.common.data.alarm.AlarmStatus; |
27 | 25 | import org.thingsboard.server.common.data.id.DeviceId; |
28 | -import org.thingsboard.server.common.data.id.EntityId; | |
29 | 26 | import org.thingsboard.server.common.data.id.TenantId; |
30 | 27 | import org.thingsboard.server.dao.AbstractJpaDaoTest; |
31 | 28 | import org.thingsboard.server.dao.alarm.AlarmDao; | ... | ... |