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,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; |