thingsboard-developers
Changes
dao/src/main/java/org/thingsboard/server/dao/sql/component/ComponentDescriptorRepository.java 25(+13 -12)
Details
diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/AdminSettingsEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/AdminSettingsEntity.java
index e268c45..6c98466 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/model/sql/AdminSettingsEntity.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/AdminSettingsEntity.java
@@ -47,7 +47,7 @@ public final class AdminSettingsEntity implements BaseEntity<AdminSettings> {
private String key;
@Type(type = "json")
- @Column(name = ADMIN_SETTINGS_JSON_VALUE_PROPERTY, columnDefinition = "json")
+ @Column(name = ADMIN_SETTINGS_JSON_VALUE_PROPERTY)
private JsonNode jsonValue;
public AdminSettingsEntity() {
diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/AlarmEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/AlarmEntity.java
index d9f6623..2107a5f 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/model/sql/AlarmEntity.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/AlarmEntity.java
@@ -82,7 +82,7 @@ public final class AlarmEntity implements BaseEntity<Alarm> {
private Long clearTs;
@Type(type = "json")
- @Column(name = ModelConstants.ASSET_ADDITIONAL_INFO_PROPERTY, columnDefinition = "json")
+ @Column(name = ModelConstants.ASSET_ADDITIONAL_INFO_PROPERTY)
private JsonNode details;
@Column(name = ALARM_PROPAGATE_PROPERTY)
diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/AssetEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/AssetEntity.java
index bd24fbd..5d24aeb 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/model/sql/AssetEntity.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/AssetEntity.java
@@ -62,7 +62,7 @@ public final class AssetEntity implements SearchTextEntity<Asset> {
private String searchText;
@Type(type = "json")
- @Column(name = ModelConstants.ASSET_ADDITIONAL_INFO_PROPERTY, columnDefinition = "json")
+ @Column(name = ModelConstants.ASSET_ADDITIONAL_INFO_PROPERTY)
private JsonNode additionalInfo;
public AssetEntity() {
diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/ComponentDescriptorEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/ComponentDescriptorEntity.java
index 2da59a7..eee9137 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/model/sql/ComponentDescriptorEntity.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/ComponentDescriptorEntity.java
@@ -58,7 +58,7 @@ public class ComponentDescriptorEntity implements SearchTextEntity<ComponentDesc
private String clazz;
@Type(type = "json")
- @Column(name = ModelConstants.COMPONENT_DESCRIPTOR_CONFIGURATION_DESCRIPTOR_PROPERTY, columnDefinition = "json")
+ @Column(name = ModelConstants.COMPONENT_DESCRIPTOR_CONFIGURATION_DESCRIPTOR_PROPERTY)
private JsonNode configurationDescriptor;
@Column(name = ModelConstants.COMPONENT_DESCRIPTOR_ACTIONS_PROPERTY)
diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/CustomerEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/CustomerEntity.java
index 12c4980..6646652 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/model/sql/CustomerEntity.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/CustomerEntity.java
@@ -77,7 +77,7 @@ public final class CustomerEntity implements SearchTextEntity<Customer> {
private String email;
@Type(type = "json")
- @Column(name = ModelConstants.CUSTOMER_ADDITIONAL_INFO_PROPERTY, columnDefinition = "json")
+ @Column(name = ModelConstants.CUSTOMER_ADDITIONAL_INFO_PROPERTY)
private JsonNode additionalInfo;
public CustomerEntity() {
diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/DashboardEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/DashboardEntity.java
index 2153db2..5266b90 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/model/sql/DashboardEntity.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/DashboardEntity.java
@@ -57,7 +57,7 @@ public final class DashboardEntity implements SearchTextEntity<Dashboard> {
private String searchText;
@Type(type = "json")
- @Column(name = ModelConstants.DASHBOARD_CONFIGURATION_PROPERTY, columnDefinition = "json")
+ @Column(name = ModelConstants.DASHBOARD_CONFIGURATION_PROPERTY)
private JsonNode configuration;
public DashboardEntity() {
diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/DeviceEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/DeviceEntity.java
index 06c9065..f4c8dd2 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/model/sql/DeviceEntity.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/DeviceEntity.java
@@ -60,7 +60,7 @@ public final class DeviceEntity implements SearchTextEntity<Device> {
private String searchText;
@Type(type = "json")
- @Column(name = ModelConstants.DEVICE_ADDITIONAL_INFO_PROPERTY, columnDefinition = "json")
+ @Column(name = ModelConstants.DEVICE_ADDITIONAL_INFO_PROPERTY)
private JsonNode additionalInfo;
public DeviceEntity() {
diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/EventEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/EventEntity.java
index 033aaa5..ff79687 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/model/sql/EventEntity.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/EventEntity.java
@@ -63,7 +63,7 @@ public class EventEntity implements BaseEntity<Event> {
private String eventUid;
@Type(type = "json")
- @Column(name = EVENT_BODY_PROPERTY, columnDefinition = "json")
+ @Column(name = EVENT_BODY_PROPERTY)
private JsonNode body;
public EventEntity(Event event) {
diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/PluginMetaDataEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/PluginMetaDataEntity.java
index 3972310..a53c1ab 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/model/sql/PluginMetaDataEntity.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/PluginMetaDataEntity.java
@@ -63,11 +63,11 @@ public class PluginMetaDataEntity implements SearchTextEntity<PluginMetaData> {
private ComponentLifecycleState state;
@Type(type = "json")
- @Column(name = ModelConstants.PLUGIN_CONFIGURATION_PROPERTY, columnDefinition = "json")
+ @Column(name = ModelConstants.PLUGIN_CONFIGURATION_PROPERTY)
private JsonNode configuration;
@Type(type = "json")
- @Column(name = ModelConstants.ADDITIONAL_INFO_PROPERTY, columnDefinition = "json")
+ @Column(name = ModelConstants.ADDITIONAL_INFO_PROPERTY)
private JsonNode additionalInfo;
@Column(name = ModelConstants.SEARCH_TEXT_PROPERTY)
diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/RelationEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/RelationEntity.java
index 3ee09d4..d13a7ef 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/model/sql/RelationEntity.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/RelationEntity.java
@@ -62,7 +62,7 @@ public final class RelationEntity implements ToData<EntityRelation> {
private String relationType;
@Type(type = "json")
- @Column(name = ADDITIONAL_INFO_PROPERTY, columnDefinition = "json")
+ @Column(name = ADDITIONAL_INFO_PROPERTY)
private JsonNode additionalInfo;
public RelationEntity() {
diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/RuleMetaDataEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/RuleMetaDataEntity.java
index 6191672..33971c3 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/model/sql/RuleMetaDataEntity.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/RuleMetaDataEntity.java
@@ -64,19 +64,19 @@ public class RuleMetaDataEntity implements SearchTextEntity<RuleMetaData> {
private String pluginToken;
@Type(type = "json")
- @Column(name = ModelConstants.RULE_FILTERS, columnDefinition = "json")
+ @Column(name = ModelConstants.RULE_FILTERS)
private JsonNode filters;
@Type(type = "json")
- @Column(name = ModelConstants.RULE_PROCESSOR, columnDefinition = "json")
+ @Column(name = ModelConstants.RULE_PROCESSOR)
private JsonNode processor;
@Type(type = "json")
- @Column(name = ModelConstants.RULE_ACTION, columnDefinition = "json")
+ @Column(name = ModelConstants.RULE_ACTION)
private JsonNode action;
@Type(type = "json")
- @Column(name = ModelConstants.ADDITIONAL_INFO_PROPERTY, columnDefinition = "json")
+ @Column(name = ModelConstants.ADDITIONAL_INFO_PROPERTY)
private JsonNode additionalInfo;
public RuleMetaDataEntity() {
diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/TenantEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/TenantEntity.java
index 755ca8c..19cfe4b 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/model/sql/TenantEntity.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/TenantEntity.java
@@ -76,7 +76,7 @@ public final class TenantEntity implements SearchTextEntity<Tenant> {
private String email;
@Type(type="json")
- @Column(name = ModelConstants.TENANT_ADDITIONAL_INFO_PROPERTY, columnDefinition = "json")
+ @Column(name = ModelConstants.TENANT_ADDITIONAL_INFO_PROPERTY)
private JsonNode additionalInfo;
public TenantEntity() {
diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/UserEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/UserEntity.java
index f76b2d8..ccfaba1 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/model/sql/UserEntity.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/UserEntity.java
@@ -70,7 +70,7 @@ public class UserEntity implements SearchTextEntity<User> {
private String lastName;
@Type(type="json")
- @Column(name = ModelConstants.USER_ADDITIONAL_INFO_PROPERTY, columnDefinition = "json")
+ @Column(name = ModelConstants.USER_ADDITIONAL_INFO_PROPERTY)
private JsonNode additionalInfo;
public UserEntity() {
diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/WidgetsBundleEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/WidgetsBundleEntity.java
index 90b1b71..c7d62d8 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/model/sql/WidgetsBundleEntity.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/WidgetsBundleEntity.java
@@ -51,9 +51,6 @@ public final class WidgetsBundleEntity implements SearchTextEntity<WidgetsBundle
@Column(name = ModelConstants.SEARCH_TEXT_PROPERTY)
private String searchText;
- @Column(name = ModelConstants.WIDGETS_BUNDLE_IMAGE_PROPERTY)
- private byte[] image;
-
public WidgetsBundleEntity() {
super();
}
@@ -67,9 +64,6 @@ public final class WidgetsBundleEntity implements SearchTextEntity<WidgetsBundle
}
this.alias = widgetsBundle.getAlias();
this.title = widgetsBundle.getTitle();
- if (widgetsBundle.getImage() != null) {
- this.image = widgetsBundle.getImage();
- }
}
@Override
@@ -101,7 +95,6 @@ public final class WidgetsBundleEntity implements SearchTextEntity<WidgetsBundle
}
widgetsBundle.setAlias(alias);
widgetsBundle.setTitle(title);
- widgetsBundle.setImage(image);
return widgetsBundle;
}
}
diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/WidgetTypeEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/WidgetTypeEntity.java
index 4f96b64..38f83cb 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/model/sql/WidgetTypeEntity.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/WidgetTypeEntity.java
@@ -56,7 +56,7 @@ public final class WidgetTypeEntity implements BaseEntity<WidgetType> {
private String name;
@Type(type="json")
- @Column(name = ModelConstants.WIDGET_TYPE_DESCRIPTOR_PROPERTY, columnDefinition = "json")
+ @Column(name = ModelConstants.WIDGET_TYPE_DESCRIPTOR_PROPERTY)
private JsonNode descriptor;
public WidgetTypeEntity() {
diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/alarm/AlarmRepository.java b/dao/src/main/java/org/thingsboard/server/dao/sql/alarm/AlarmRepository.java
index a7162cd..c89fef6 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/sql/alarm/AlarmRepository.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/sql/alarm/AlarmRepository.java
@@ -15,12 +15,15 @@
*/
package org.thingsboard.server.dao.sql.alarm;
+import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.query.Param;
+import org.thingsboard.server.common.data.EntityType;
import org.thingsboard.server.dao.annotation.SqlDao;
import org.thingsboard.server.dao.model.sql.AlarmEntity;
+import java.util.List;
import java.util.UUID;
/**
@@ -29,10 +32,11 @@ import java.util.UUID;
@SqlDao
public interface AlarmRepository extends CrudRepository<AlarmEntity, UUID> {
- @Query(nativeQuery = true, value = "SELECT * FROM ALARM WHERE TENANT_ID = :tenantId AND ORIGINATOR_ID = :originatorId " +
- "AND ORIGINATOR_TYPE = :entityType AND TYPE = :alarmType ORDER BY TYPE ASC, ID DESC LIMIT 1")
- AlarmEntity findLatestByOriginatorAndType(@Param("tenantId") UUID tenantId,
- @Param("originatorId") UUID originatorId,
- @Param("entityType") int entityType,
- @Param("alarmType") String alarmType);
+ @Query("SELECT a FROM AlarmEntity a WHERE a.tenantId = :tenantId AND a.originatorId = :originatorId " +
+ "AND a.originatorType = :entityType AND a.type = :alarmType ORDER BY a.type ASC, a.id DESC")
+ List<AlarmEntity> findLatestByOriginatorAndType(@Param("tenantId") UUID tenantId,
+ @Param("originatorId") UUID originatorId,
+ @Param("entityType") EntityType entityType,
+ @Param("alarmType") String alarmType,
+ Pageable pageable);
}
diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/alarm/JpaAlarmDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/alarm/JpaAlarmDao.java
index 5517ec1..322afe7 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/sql/alarm/JpaAlarmDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/sql/alarm/JpaAlarmDao.java
@@ -21,6 +21,7 @@ import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.PageRequest;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
@@ -74,12 +75,15 @@ public class JpaAlarmDao extends JpaAbstractDao<AlarmEntity, Alarm> implements A
@Override
@Transactional(propagation = REQUIRES_NEW)
public ListenableFuture<Alarm> findLatestByOriginatorAndType(TenantId tenantId, EntityId originator, String type) {
- return service.submit(() ->
- DaoUtil.getData(alarmRepository.findLatestByOriginatorAndType(
- tenantId.getId(),
- originator.getId(),
- originator.getEntityType().ordinal(),
- type)));
+ return service.submit(() -> {
+ List<AlarmEntity> latest = alarmRepository.findLatestByOriginatorAndType(
+ tenantId.getId(),
+ originator.getId(),
+ originator.getEntityType(),
+ type,
+ new PageRequest(0, 1));
+ return latest.isEmpty() ? null : DaoUtil.getData(latest.get(0));
+ });
}
@Override
diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/asset/AssetRepository.java b/dao/src/main/java/org/thingsboard/server/dao/sql/asset/AssetRepository.java
index 3f5e491..8f86437 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/sql/asset/AssetRepository.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/sql/asset/AssetRepository.java
@@ -15,6 +15,8 @@
*/
package org.thingsboard.server.dao.sql.asset;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.query.Param;
@@ -31,23 +33,23 @@ import java.util.UUID;
@SqlDao
public interface AssetRepository extends CrudRepository<AssetEntity, UUID> {
- @Query(nativeQuery = true, value = "SELECT * FROM ASSET WHERE TENANT_ID = :tenantId " +
- "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " +
- "AND ID > :idOffset ORDER BY ID LIMIT :limit")
- List<AssetEntity> findByTenantId(@Param("limit") int limit,
- @Param("tenantId") UUID tenantId,
+ @Query("SELECT a FROM AssetEntity a WHERE a.tenantId = :tenantId " +
+ "AND LOWER(a.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " +
+ "AND a.id > :idOffset ORDER BY a.id")
+ List<AssetEntity> findByTenantId(@Param("tenantId") UUID tenantId,
@Param("textSearch") String textSearch,
- @Param("idOffset") UUID idOffset);
+ @Param("idOffset") UUID idOffset,
+ Pageable pageable);
- @Query(nativeQuery = true, value = "SELECT * FROM ASSET WHERE TENANT_ID = :tenantId " +
- "AND CUSTOMER_ID = :customerId " +
- "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " +
- "AND ID > :idOffset ORDER BY ID LIMIT :limit")
- List<AssetEntity> findByTenantIdAndCustomerId(@Param("limit") int limit,
- @Param("tenantId") UUID tenantId,
+ @Query("SELECT a FROM AssetEntity a WHERE a.tenantId = :tenantId " +
+ "AND a.customerId = :customerId " +
+ "AND LOWER(a.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " +
+ "AND a.id > :idOffset ORDER BY a.id")
+ List<AssetEntity> findByTenantIdAndCustomerId(@Param("tenantId") UUID tenantId,
@Param("customerId") UUID customerId,
@Param("textSearch") String textSearch,
- @Param("idOffset") UUID idOffset);
+ @Param("idOffset") UUID idOffset,
+ Pageable pageable);
List<AssetEntity> findByTenantIdAndIdIn(UUID tenantId, List<UUID> assetIds);
@@ -55,27 +57,27 @@ public interface AssetRepository extends CrudRepository<AssetEntity, UUID> {
AssetEntity findByTenantIdAndName(UUID tenantId, String name);
- @Query(nativeQuery = true, value = "SELECT * FROM ASSET WHERE TENANT_ID = :tenantId " +
- "AND TYPE = :type " +
- "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " +
- "AND ID > :idOffset ORDER BY ID LIMIT :limit")
- List<AssetEntity> findByTenantIdAndType(@Param("limit") int limit,
- @Param("tenantId") UUID tenantId,
+ @Query("SELECT a FROM AssetEntity a WHERE a.tenantId = :tenantId " +
+ "AND a.type = :type " +
+ "AND LOWER(a.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " +
+ "AND a.id > :idOffset ORDER BY a.id")
+ List<AssetEntity> findByTenantIdAndType(@Param("tenantId") UUID tenantId,
@Param("type") String type,
@Param("textSearch") String textSearch,
- @Param("idOffset") UUID idOffset);
+ @Param("idOffset") UUID idOffset,
+ Pageable pageable);
- @Query(nativeQuery = true, value = "SELECT * FROM ASSET WHERE TENANT_ID = :tenantId " +
- "AND CUSTOMER_ID = :customerId AND TYPE = :type " +
- "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " +
- "AND ID > :idOffset ORDER BY ID LIMIT :limit")
- List<AssetEntity> findByTenantIdAndCustomerIdAndType(@Param("limit") int limit,
- @Param("tenantId") UUID tenantId,
+ @Query("SELECT a FROM AssetEntity a WHERE a.tenantId = :tenantId " +
+ "AND a.customerId = :customerId AND a.type = :type " +
+ "AND LOWER(a.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " +
+ "AND a.id > :idOffset ORDER BY a.id")
+ List<AssetEntity> findByTenantIdAndCustomerIdAndType(@Param("tenantId") UUID tenantId,
@Param("customerId") UUID customerId,
@Param("type") String type,
@Param("textSearch") String textSearch,
- @Param("idOffset") UUID idOffset);
+ @Param("idOffset") UUID idOffset,
+ Pageable pageable);
- @Query(value = "SELECT NEW org.thingsboard.server.common.data.asset.TenantAssetType(a.type, a.tenantId) FROM AssetEntity a GROUP BY a.tenantId, a.type")
+ @Query("SELECT NEW org.thingsboard.server.common.data.asset.TenantAssetType(a.type, a.tenantId) FROM AssetEntity a GROUP BY a.tenantId, a.type")
List<TenantAssetType> findTenantAssetTypes();
}
diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/asset/JpaAssetDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/asset/JpaAssetDao.java
index 39f8111..500b612 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/sql/asset/JpaAssetDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/sql/asset/JpaAssetDao.java
@@ -17,6 +17,7 @@ package org.thingsboard.server.dao.sql.asset;
import com.google.common.util.concurrent.ListenableFuture;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.PageRequest;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Component;
import org.thingsboard.server.common.data.asset.Asset;
@@ -29,6 +30,7 @@ import org.thingsboard.server.dao.model.sql.AssetEntity;
import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao;
import java.util.List;
+import java.util.Objects;
import java.util.Optional;
import java.util.UUID;
@@ -58,10 +60,10 @@ public class JpaAssetDao extends JpaAbstractSearchTextDao<AssetEntity, Asset> im
public List<Asset> findAssetsByTenantId(UUID tenantId, TextPageLink pageLink) {
return DaoUtil.convertDataList(assetRepository
.findByTenantId(
- pageLink.getLimit(),
tenantId,
- pageLink.getTextSearch(),
- pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset()));
+ Objects.toString(pageLink.getTextSearch(), ""),
+ pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(),
+ new PageRequest(0, pageLink.getLimit())));
}
@Override
@@ -74,11 +76,11 @@ public class JpaAssetDao extends JpaAbstractSearchTextDao<AssetEntity, Asset> im
public List<Asset> findAssetsByTenantIdAndCustomerId(UUID tenantId, UUID customerId, TextPageLink pageLink) {
return DaoUtil.convertDataList(assetRepository
.findByTenantIdAndCustomerId(
- pageLink.getLimit(),
tenantId,
customerId,
- pageLink.getTextSearch(),
- pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset()));
+ Objects.toString(pageLink.getTextSearch(), ""),
+ pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(),
+ new PageRequest(0, pageLink.getLimit())));
}
@Override
@@ -97,23 +99,23 @@ public class JpaAssetDao extends JpaAbstractSearchTextDao<AssetEntity, Asset> im
public List<Asset> findAssetsByTenantIdAndType(UUID tenantId, String type, TextPageLink pageLink) {
return DaoUtil.convertDataList(assetRepository
.findByTenantIdAndType(
- pageLink.getLimit(),
tenantId,
type,
- pageLink.getTextSearch(),
- pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset()));
+ Objects.toString(pageLink.getTextSearch(), ""),
+ pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(),
+ new PageRequest(0, pageLink.getLimit())));
}
@Override
public List<Asset> findAssetsByTenantIdAndCustomerIdAndType(UUID tenantId, UUID customerId, String type, TextPageLink pageLink) {
return DaoUtil.convertDataList(assetRepository
.findByTenantIdAndCustomerIdAndType(
- pageLink.getLimit(),
tenantId,
customerId,
type,
- pageLink.getTextSearch(),
- pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset()));
+ Objects.toString(pageLink.getTextSearch(), ""),
+ pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(),
+ new PageRequest(0, pageLink.getLimit())));
}
@Override
diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/component/ComponentDescriptorRepository.java b/dao/src/main/java/org/thingsboard/server/dao/sql/component/ComponentDescriptorRepository.java
index e86b838..f15bbbf 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/sql/component/ComponentDescriptorRepository.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/sql/component/ComponentDescriptorRepository.java
@@ -15,6 +15,7 @@
*/
package org.thingsboard.server.dao.sql.component;
+import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.query.Param;
@@ -32,22 +33,22 @@ public interface ComponentDescriptorRepository extends CrudRepository<ComponentD
ComponentDescriptorEntity findByClazz(String clazz);
- @Query(nativeQuery = true, value = "SELECT * FROM COMPONENT_DESCRIPTOR WHERE TYPE = :type " +
- "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " +
- "AND ID > :idOffset ORDER BY ID LIMIT :limit")
- List<ComponentDescriptorEntity> findByType(@Param("limit") int limit,
- @Param("type") String type,
+ @Query("SELECT cd FROM ComponentDescriptorEntity cd WHERE cd.type = :type " +
+ "AND LOWER(cd.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " +
+ "AND cd.id > :idOffset ORDER BY cd.id")
+ List<ComponentDescriptorEntity> findByType(@Param("type") String type,
@Param("textSearch") String textSearch,
- @Param("idOffset") UUID idOffset);
+ @Param("idOffset") UUID idOffset,
+ Pageable pageable);
- @Query(nativeQuery = true, value = "SELECT * FROM COMPONENT_DESCRIPTOR WHERE TYPE = :type " +
- "AND SCOPE = :scope AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " +
- "AND ID > :idOffset ORDER BY ID LIMIT :limit")
- List<ComponentDescriptorEntity> findByScopeAndType(@Param("limit") int limit,
- @Param("type") String type,
+ @Query("SELECT cd FROM ComponentDescriptorEntity cd WHERE cd.type = :type " +
+ "AND cd.scope = :scope AND LOWER(cd.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " +
+ "AND cd.id > :idOffset ORDER BY cd.id")
+ List<ComponentDescriptorEntity> findByScopeAndType(@Param("type") String type,
@Param("scope") String scope,
@Param("textSearch") String textSearch,
- @Param("idOffset") UUID idOffset);
+ @Param("idOffset") UUID idOffset,
+ Pageable pageable);
void deleteByClazz(String clazz);
}
diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/component/JpaBaseComponentDescriptorDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/component/JpaBaseComponentDescriptorDao.java
index 023e7a5..e259bba 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/sql/component/JpaBaseComponentDescriptorDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/sql/component/JpaBaseComponentDescriptorDao.java
@@ -17,6 +17,7 @@ package org.thingsboard.server.dao.sql.component;
import com.datastax.driver.core.utils.UUIDs;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.PageRequest;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Component;
import org.thingsboard.server.common.data.id.ComponentDescriptorId;
@@ -31,6 +32,7 @@ import org.thingsboard.server.dao.model.sql.ComponentDescriptorEntity;
import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao;
import java.util.List;
+import java.util.Objects;
import java.util.Optional;
import java.util.UUID;
@@ -83,21 +85,21 @@ public class JpaBaseComponentDescriptorDao extends JpaAbstractSearchTextDao<Comp
public List<ComponentDescriptor> findByTypeAndPageLink(ComponentType type, TextPageLink pageLink) {
return DaoUtil.convertDataList(componentDescriptorRepository
.findByType(
- pageLink.getLimit(),
type.toString(),
- pageLink.getTextSearch(),
- pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset()));
+ Objects.toString(pageLink.getTextSearch(), ""),
+ pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(),
+ new PageRequest(0, pageLink.getLimit())));
}
@Override
public List<ComponentDescriptor> findByScopeAndTypeAndPageLink(ComponentScope scope, ComponentType type, TextPageLink pageLink) {
return DaoUtil.convertDataList(componentDescriptorRepository
.findByScopeAndType(
- pageLink.getLimit(),
type.toString(),
scope.toString(),
- pageLink.getTextSearch(),
- pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset()));
+ Objects.toString(pageLink.getTextSearch(), ""),
+ pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(),
+ new PageRequest(0, pageLink.getLimit())));
}
@Override
diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/customer/CustomerRepository.java b/dao/src/main/java/org/thingsboard/server/dao/sql/customer/CustomerRepository.java
index 0bf4f13..009f926 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/sql/customer/CustomerRepository.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/sql/customer/CustomerRepository.java
@@ -15,6 +15,7 @@
*/
package org.thingsboard.server.dao.sql.customer;
+import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.query.Param;
@@ -30,13 +31,13 @@ import java.util.UUID;
@SqlDao
public interface CustomerRepository extends CrudRepository<CustomerEntity, UUID> {
- @Query(nativeQuery = true, value = "SELECT * FROM CUSTOMER WHERE TENANT_ID = :tenantId " +
- "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " +
- "AND ID > :idOffset ORDER BY ID LIMIT :limit")
- List<CustomerEntity> findByTenantId(@Param("limit") int limit,
- @Param("tenantId") UUID tenantId,
+ @Query("SELECT c FROM CustomerEntity c WHERE c.tenantId = :tenantId " +
+ "AND LOWER(c.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " +
+ "AND c.id > :idOffset ORDER BY c.id")
+ List<CustomerEntity> findByTenantId(@Param("tenantId") UUID tenantId,
@Param("textSearch") String textSearch,
- @Param("idOffset") UUID idOffset);
+ @Param("idOffset") UUID idOffset,
+ Pageable pageable);
CustomerEntity findByTenantIdAndTitle(UUID tenantId, String title);
diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/customer/JpaCustomerDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/customer/JpaCustomerDao.java
index d5ae9ab..de54835 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/sql/customer/JpaCustomerDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/sql/customer/JpaCustomerDao.java
@@ -16,6 +16,7 @@
package org.thingsboard.server.dao.sql.customer;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.PageRequest;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Component;
import org.thingsboard.server.common.data.Customer;
@@ -27,6 +28,7 @@ import org.thingsboard.server.dao.model.sql.CustomerEntity;
import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao;
import java.util.List;
+import java.util.Objects;
import java.util.Optional;
import java.util.UUID;
@@ -54,8 +56,11 @@ public class JpaCustomerDao extends JpaAbstractSearchTextDao<CustomerEntity, Cus
@Override
public List<Customer> findCustomersByTenantId(UUID tenantId, TextPageLink pageLink) {
- return DaoUtil.convertDataList(customerRepository.findByTenantId(pageLink.getLimit(), tenantId,
- pageLink.getTextSearch(), pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset()));
+ return DaoUtil.convertDataList(customerRepository.findByTenantId(
+ tenantId,
+ Objects.toString(pageLink.getTextSearch(), ""),
+ pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(),
+ new PageRequest(0, pageLink.getLimit())));
}
@Override
diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/dashboard/DashboardInfoRepository.java b/dao/src/main/java/org/thingsboard/server/dao/sql/dashboard/DashboardInfoRepository.java
index a4e3412..2569867 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/sql/dashboard/DashboardInfoRepository.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/sql/dashboard/DashboardInfoRepository.java
@@ -15,6 +15,7 @@
*/
package org.thingsboard.server.dao.sql.dashboard;
+import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.query.Param;
@@ -30,20 +31,20 @@ import java.util.UUID;
@SqlDao
public interface DashboardInfoRepository extends CrudRepository<DashboardInfoEntity, UUID> {
- @Query(nativeQuery = true, value = "SELECT * FROM DASHBOARD WHERE TENANT_ID = :tenantId " +
- "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " +
- "AND ID > :idOffset ORDER BY ID LIMIT :limit")
- List<DashboardInfoEntity> findByTenantId(@Param("limit") int limit,
- @Param("tenantId") UUID tenantId,
- @Param("textSearch") String textSearch,
- @Param("idOffset") UUID idOffset);
+ @Query("SELECT di FROM DashboardInfoEntity di WHERE di.tenantId = :tenantId " +
+ "AND LOWER(di.searchText) LIKE LOWER(CONCAT(:searchText, '%')) " +
+ "AND di.id > :idOffset ORDER BY di.id")
+ List<DashboardInfoEntity> findByTenantId(@Param("tenantId") UUID tenantId,
+ @Param("searchText") String searchText,
+ @Param("idOffset") UUID idOffset,
+ Pageable pageable);
- @Query(nativeQuery = true, value = "SELECT * FROM DASHBOARD WHERE TENANT_ID = :tenantId " +
- "AND CUSTOMER_ID = :customerId AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " +
- "AND ID > :idOffset ORDER BY ID LIMIT :limit")
- List<DashboardInfoEntity> findByTenantIdAndCustomerId(@Param("limit") int limit,
- @Param("tenantId") UUID tenantId,
+ @Query("SELECT di FROM DashboardInfoEntity di WHERE di.tenantId = :tenantId " +
+ "AND di.customerId = :customerId AND LOWER(di.searchText) LIKE LOWER(CONCAT(:searchText, '%')) " +
+ "AND di.id > :idOffset ORDER BY di.id")
+ List<DashboardInfoEntity> findByTenantIdAndCustomerId(@Param("tenantId") UUID tenantId,
@Param("customerId") UUID customerId,
- @Param("textSearch") String textSearch,
- @Param("idOffset") UUID idOffset);
+ @Param("searchText") String searchText,
+ @Param("idOffset") UUID idOffset,
+ Pageable pageable);
}
diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/dashboard/JpaDashboardInfoDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/dashboard/JpaDashboardInfoDao.java
index d1d2b77..c604c7e 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/sql/dashboard/JpaDashboardInfoDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/sql/dashboard/JpaDashboardInfoDao.java
@@ -16,6 +16,7 @@
package org.thingsboard.server.dao.sql.dashboard;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.PageRequest;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Component;
import org.thingsboard.server.common.data.DashboardInfo;
@@ -27,6 +28,7 @@ import org.thingsboard.server.dao.model.sql.DashboardInfoEntity;
import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao;
import java.util.List;
+import java.util.Objects;
import java.util.UUID;
import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID;
@@ -55,20 +57,20 @@ public class JpaDashboardInfoDao extends JpaAbstractSearchTextDao<DashboardInfoE
public List<DashboardInfo> findDashboardsByTenantId(UUID tenantId, TextPageLink pageLink) {
return DaoUtil.convertDataList(dashboardInfoRepository
.findByTenantId(
- pageLink.getLimit(),
tenantId,
- pageLink.getTextSearch(),
- pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset()));
+ Objects.toString(pageLink.getTextSearch(), ""),
+ pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(),
+ new PageRequest(0, pageLink.getLimit())));
}
@Override
public List<DashboardInfo> findDashboardsByTenantIdAndCustomerId(UUID tenantId, UUID customerId, TextPageLink pageLink) {
return DaoUtil.convertDataList(dashboardInfoRepository
.findByTenantIdAndCustomerId(
- pageLink.getLimit(),
tenantId,
customerId,
- pageLink.getTextSearch(),
- pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset()));
+ Objects.toString(pageLink.getTextSearch(), ""),
+ pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(),
+ new PageRequest(0, pageLink.getLimit())));
}
}
diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/device/DeviceRepository.java b/dao/src/main/java/org/thingsboard/server/dao/sql/device/DeviceRepository.java
index 8102553..771ab69 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/sql/device/DeviceRepository.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/sql/device/DeviceRepository.java
@@ -15,6 +15,7 @@
*/
package org.thingsboard.server.dao.sql.device;
+import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.query.Param;
@@ -32,47 +33,47 @@ import java.util.UUID;
public interface DeviceRepository extends CrudRepository<DeviceEntity, UUID> {
- @Query(nativeQuery = true, value = "SELECT * FROM DEVICE WHERE TENANT_ID = :tenantId " +
- "AND CUSTOMER_ID = :customerId " +
- "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:searchText, '%')) " +
- "AND ID > :idOffset ORDER BY ID LIMIT :limit")
- List<DeviceEntity> findByTenantIdAndCustomerId(@Param("limit") int limit,
- @Param("tenantId") UUID tenantId,
+ @Query("SELECT d FROM DeviceEntity d WHERE d.tenantId = :tenantId " +
+ "AND d.customerId = :customerId " +
+ "AND LOWER(d.searchText) LIKE LOWER(CONCAT(:searchText, '%')) " +
+ "AND d.id > :idOffset ORDER BY d.id")
+ List<DeviceEntity> findByTenantIdAndCustomerId(@Param("tenantId") UUID tenantId,
@Param("customerId") UUID customerId,
@Param("searchText") String searchText,
- @Param("idOffset") UUID idOffset);
+ @Param("idOffset") UUID idOffset,
+ Pageable pageable);
- @Query(nativeQuery = true, value = "SELECT * FROM DEVICE WHERE TENANT_ID = :tenantId " +
- "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " +
- "AND ID > :idOffset ORDER BY ID LIMIT :limit")
- List<DeviceEntity> findByTenantId(@Param("limit") int limit,
- @Param("tenantId") UUID tenantId,
+ @Query("SELECT d FROM DeviceEntity d WHERE d.tenantId = :tenantId " +
+ "AND LOWER(d.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " +
+ "AND d.id > :idOffset ORDER BY d.id")
+ List<DeviceEntity> findByTenantId(@Param("tenantId") UUID tenantId,
@Param("textSearch") String textSearch,
- @Param("idOffset") UUID idOffset);
+ @Param("idOffset") UUID idOffset,
+ Pageable pageable);
- @Query(nativeQuery = true, value = "SELECT * FROM DEVICE WHERE TENANT_ID = :tenantId " +
- "AND TYPE = :type " +
- "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " +
- "AND ID > :idOffset ORDER BY ID LIMIT :limit")
- List<DeviceEntity> findByTenantIdAndType(@Param("limit") int limit,
- @Param("tenantId") UUID tenantId,
+ @Query("SELECT d FROM DeviceEntity d WHERE d.tenantId = :tenantId " +
+ "AND d.type = :type " +
+ "AND LOWER(d.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " +
+ "AND d.id > :idOffset ORDER BY d.id")
+ List<DeviceEntity> findByTenantIdAndType(@Param("tenantId") UUID tenantId,
@Param("type") String type,
@Param("textSearch") String textSearch,
- @Param("idOffset") UUID idOffset);
+ @Param("idOffset") UUID idOffset,
+ Pageable pageable);
- @Query(nativeQuery = true, value = "SELECT * FROM DEVICE WHERE TENANT_ID = :tenantId " +
- "AND CUSTOMER_ID = :customerId " +
- "AND TYPE = :type " +
- "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " +
- "AND ID > :idOffset ORDER BY ID LIMIT :limit")
- List<DeviceEntity> findByTenantIdAndCustomerIdAndType(@Param("limit") int limit,
- @Param("tenantId") UUID tenantId,
+ @Query("SELECT d FROM DeviceEntity d WHERE d.tenantId = :tenantId " +
+ "AND d.customerId = :customerId " +
+ "AND d.type = :type " +
+ "AND LOWER(d.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " +
+ "AND d.id > :idOffset ORDER BY d.id")
+ List<DeviceEntity> findByTenantIdAndCustomerIdAndType(@Param("tenantId") UUID tenantId,
@Param("customerId") UUID customerId,
@Param("type") String type,
@Param("textSearch") String textSearch,
- @Param("idOffset") UUID idOffset);
+ @Param("idOffset") UUID idOffset,
+ Pageable pageable);
- @Query(value = "SELECT DISTINCT NEW org.thingsboard.server.dao.model.sql.TenantDeviceTypeEntity(d.tenantId, d.type) FROM DeviceEntity d")
+ @Query("SELECT DISTINCT NEW org.thingsboard.server.dao.model.sql.TenantDeviceTypeEntity(d.tenantId, d.type) FROM DeviceEntity d")
List<TenantDeviceTypeEntity> findTenantDeviceTypes();
DeviceEntity findByTenantIdAndName(UUID tenantId, String name);
diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/device/JpaDeviceDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/device/JpaDeviceDao.java
index 68f4262..d713040 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/sql/device/JpaDeviceDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/sql/device/JpaDeviceDao.java
@@ -17,6 +17,7 @@ package org.thingsboard.server.dao.sql.device;
import com.google.common.util.concurrent.ListenableFuture;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.PageRequest;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Component;
import org.thingsboard.server.common.data.Device;
@@ -58,11 +59,10 @@ public class JpaDeviceDao extends JpaAbstractSearchTextDao<DeviceEntity, Device>
public List<Device> findDevicesByTenantId(UUID tenantId, TextPageLink pageLink) {
return DaoUtil.convertDataList(
deviceRepository.findByTenantId(
- pageLink.getLimit(),
tenantId,
- pageLink.getTextSearch(),
- pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset())
- );
+ Objects.toString(pageLink.getTextSearch(), ""),
+ pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(),
+ new PageRequest(0, pageLink.getLimit())));
}
@Override
@@ -74,12 +74,11 @@ public class JpaDeviceDao extends JpaAbstractSearchTextDao<DeviceEntity, Device>
public List<Device> findDevicesByTenantIdAndCustomerId(UUID tenantId, UUID customerId, TextPageLink pageLink) {
return DaoUtil.convertDataList(
deviceRepository.findByTenantIdAndCustomerId(
- pageLink.getLimit(),
tenantId,
customerId,
- pageLink.getTextSearch(),
- pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset())
- );
+ Objects.toString(pageLink.getTextSearch(), ""),
+ pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(),
+ new PageRequest(0, pageLink.getLimit())));
}
@Override
@@ -98,25 +97,23 @@ public class JpaDeviceDao extends JpaAbstractSearchTextDao<DeviceEntity, Device>
public List<Device> findDevicesByTenantIdAndType(UUID tenantId, String type, TextPageLink pageLink) {
return DaoUtil.convertDataList(
deviceRepository.findByTenantIdAndType(
- pageLink.getLimit(),
tenantId,
type,
- pageLink.getTextSearch(),
- pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset())
- );
+ Objects.toString(pageLink.getTextSearch(), ""),
+ pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(),
+ new PageRequest(0, pageLink.getLimit())));
}
@Override
public List<Device> findDevicesByTenantIdAndCustomerIdAndType(UUID tenantId, UUID customerId, String type, TextPageLink pageLink) {
return DaoUtil.convertDataList(
deviceRepository.findByTenantIdAndCustomerIdAndType(
- pageLink.getLimit(),
tenantId,
customerId,
type,
- pageLink.getTextSearch(),
- pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset())
- );
+ Objects.toString(pageLink.getTextSearch(), ""),
+ pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(),
+ new PageRequest(0, pageLink.getLimit())));
}
@Override
diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/plugin/JpaBasePluginDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/plugin/JpaBasePluginDao.java
index 109ea55..b824ebd 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/sql/plugin/JpaBasePluginDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/sql/plugin/JpaBasePluginDao.java
@@ -17,6 +17,7 @@ package org.thingsboard.server.dao.sql.plugin;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.PageRequest;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Component;
import org.thingsboard.server.common.data.id.PluginId;
@@ -31,6 +32,7 @@ import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao;
import java.util.Arrays;
import java.util.List;
+import java.util.Objects;
import java.util.UUID;
import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID;
@@ -96,10 +98,10 @@ public class JpaBasePluginDao extends JpaAbstractSearchTextDao<PluginMetaDataEnt
log.debug("Try to find plugins by tenantId [{}] and pageLink [{}]", tenantId, pageLink);
List<PluginMetaDataEntity> entities = pluginMetaDataRepository
.findByTenantIdAndPageLink(
- pageLink.getLimit(),
tenantId.getId(),
- pageLink.getTextSearch(),
- pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset());
+ Objects.toString(pageLink.getTextSearch(), ""),
+ pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(),
+ new PageRequest(0, pageLink.getLimit()));
if (log.isTraceEnabled()) {
log.trace("Search result: [{}]", Arrays.toString(entities.toArray()));
} else {
@@ -113,11 +115,11 @@ public class JpaBasePluginDao extends JpaAbstractSearchTextDao<PluginMetaDataEnt
log.debug("Try to find all tenant plugins by tenantId [{}] and pageLink [{}]", tenantId, pageLink);
List<PluginMetaDataEntity> entities = pluginMetaDataRepository
.findAllTenantPluginsByTenantId(
- pageLink.getLimit(),
tenantId,
NULL_UUID,
- pageLink.getTextSearch(),
- pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset());
+ Objects.toString(pageLink.getTextSearch(), ""),
+ pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(),
+ new PageRequest(0, pageLink.getLimit()));
if (log.isTraceEnabled()) {
log.trace("Search result: [{}]", Arrays.toString(entities.toArray()));
} else {
diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/plugin/PluginMetaDataRepository.java b/dao/src/main/java/org/thingsboard/server/dao/sql/plugin/PluginMetaDataRepository.java
index e05fe81..7fc454a 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/sql/plugin/PluginMetaDataRepository.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/sql/plugin/PluginMetaDataRepository.java
@@ -15,6 +15,7 @@
*/
package org.thingsboard.server.dao.sql.plugin;
+import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.query.Param;
@@ -32,20 +33,20 @@ public interface PluginMetaDataRepository extends CrudRepository<PluginMetaDataE
PluginMetaDataEntity findByApiToken(String apiToken);
- @Query(nativeQuery = true, value = "SELECT * FROM PLUGIN WHERE TENANT_ID = :tenantId " +
- "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " +
- "AND ID > :idOffset ORDER BY ID LIMIT :limit")
- List<PluginMetaDataEntity> findByTenantIdAndPageLink(@Param("limit") int limit,
- @Param("tenantId") UUID tenantId,
+ @Query("SELECT pmd FROM PluginMetaDataEntity pmd WHERE pmd.tenantId = :tenantId " +
+ "AND LOWER(pmd.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " +
+ "AND pmd.id > :idOffset ORDER BY pmd.id")
+ List<PluginMetaDataEntity> findByTenantIdAndPageLink(@Param("tenantId") UUID tenantId,
@Param("textSearch") String textSearch,
- @Param("idOffset") UUID idOffset);
+ @Param("idOffset") UUID idOffset,
+ Pageable pageable);
- @Query(nativeQuery = true, value = "SELECT * FROM PLUGIN WHERE TENANT_ID IN (:tenantId, :nullTenantId) " +
- "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " +
- "AND ID > :idOffset ORDER BY ID LIMIT :limit")
- List<PluginMetaDataEntity> findAllTenantPluginsByTenantId(@Param("limit") int limit,
- @Param("tenantId") UUID tenantId,
+ @Query("SELECT pmd FROM PluginMetaDataEntity pmd WHERE pmd.tenantId IN (:tenantId, :nullTenantId) " +
+ "AND LOWER(pmd.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " +
+ "AND pmd.id > :idOffset ORDER BY pmd.id")
+ List<PluginMetaDataEntity> findAllTenantPluginsByTenantId(@Param("tenantId") UUID tenantId,
@Param("nullTenantId") UUID nullTenantId,
@Param("textSearch") String textSearch,
- @Param("idOffset") UUID idOffset);
+ @Param("idOffset") UUID idOffset,
+ Pageable pageable);
}
diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/rule/JpaBaseRuleDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/rule/JpaBaseRuleDao.java
index 1ad16e2..b21b20d 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/sql/rule/JpaBaseRuleDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/sql/rule/JpaBaseRuleDao.java
@@ -17,6 +17,7 @@ package org.thingsboard.server.dao.sql.rule;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.PageRequest;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Component;
import org.thingsboard.server.common.data.id.RuleId;
@@ -31,6 +32,7 @@ import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao;
import java.util.Arrays;
import java.util.List;
+import java.util.Objects;
import java.util.UUID;
import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID;
@@ -73,10 +75,10 @@ public class JpaBaseRuleDao extends JpaAbstractSearchTextDao<RuleMetaDataEntity,
List<RuleMetaDataEntity> entities =
ruleMetaDataRepository
.findByTenantIdAndPageLink(
- pageLink.getLimit(),
tenantId.getId(),
- pageLink.getTextSearch(),
- pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset());
+ Objects.toString(pageLink.getTextSearch(), ""),
+ pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(),
+ new PageRequest(0, pageLink.getLimit()));
if (log.isTraceEnabled()) {
log.trace("Search result: [{}]", Arrays.toString(entities.toArray()));
} else {
@@ -91,11 +93,11 @@ public class JpaBaseRuleDao extends JpaAbstractSearchTextDao<RuleMetaDataEntity,
List<RuleMetaDataEntity> entities =
ruleMetaDataRepository
.findAllTenantRulesByTenantId(
- pageLink.getLimit(),
tenantId,
NULL_UUID,
- pageLink.getTextSearch(),
- pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset());
+ Objects.toString(pageLink.getTextSearch(), ""),
+ pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(),
+ new PageRequest(0, pageLink.getLimit()));
if (log.isTraceEnabled()) {
log.trace("Search result: [{}]", Arrays.toString(entities.toArray()));
diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/rule/RuleMetaDataRepository.java b/dao/src/main/java/org/thingsboard/server/dao/sql/rule/RuleMetaDataRepository.java
index 9336e69..694a364 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/sql/rule/RuleMetaDataRepository.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/sql/rule/RuleMetaDataRepository.java
@@ -15,6 +15,7 @@
*/
package org.thingsboard.server.dao.sql.rule;
+import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.query.Param;
@@ -32,20 +33,20 @@ public interface RuleMetaDataRepository extends CrudRepository<RuleMetaDataEntit
List<RuleMetaDataEntity> findByPluginToken(String pluginToken);
- @Query(nativeQuery = true, value = "SELECT * FROM RULE WHERE TENANT_ID = :tenantId " +
- "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " +
- "AND ID > :idOffset ORDER BY ID LIMIT :limit")
- List<RuleMetaDataEntity> findByTenantIdAndPageLink(@Param("limit") int limit,
- @Param("tenantId") UUID tenantId,
+ @Query("SELECT rmd FROM RuleMetaDataEntity rmd WHERE rmd.tenantId = :tenantId " +
+ "AND LOWER(rmd.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " +
+ "AND rmd.id > :idOffset ORDER BY rmd.id")
+ List<RuleMetaDataEntity> findByTenantIdAndPageLink(@Param("tenantId") UUID tenantId,
@Param("textSearch") String textSearch,
- @Param("idOffset") UUID idOffset);
+ @Param("idOffset") UUID idOffset,
+ Pageable pageable);
- @Query(nativeQuery = true, value = "SELECT * FROM RULE WHERE TENANT_ID IN (:tenantId, :nullTenantId) " +
- "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " +
- "AND ID > :idOffset ORDER BY ID LIMIT :limit")
- List<RuleMetaDataEntity> findAllTenantRulesByTenantId(@Param("limit") int limit,
- @Param("tenantId") UUID tenantId,
+ @Query("SELECT rmd FROM RuleMetaDataEntity rmd WHERE rmd.tenantId IN (:tenantId, :nullTenantId) " +
+ "AND LOWER(rmd.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " +
+ "AND rmd.id > :idOffset ORDER BY rmd.id")
+ List<RuleMetaDataEntity> findAllTenantRulesByTenantId(@Param("tenantId") UUID tenantId,
@Param("nullTenantId") UUID nullTenantId,
@Param("textSearch") String textSearch,
- @Param("idOffset") UUID idOffset);
+ @Param("idOffset") UUID idOffset,
+ Pageable pageable);
}
diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/tenant/JpaTenantDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/tenant/JpaTenantDao.java
index ddd6f7d..4384362 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/sql/tenant/JpaTenantDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/sql/tenant/JpaTenantDao.java
@@ -16,6 +16,7 @@
package org.thingsboard.server.dao.sql.tenant;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.PageRequest;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Component;
import org.thingsboard.server.common.data.Tenant;
@@ -27,6 +28,7 @@ import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao;
import org.thingsboard.server.dao.tenant.TenantDao;
import java.util.List;
+import java.util.Objects;
import java.util.UUID;
import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID;
@@ -55,9 +57,9 @@ public class JpaTenantDao extends JpaAbstractSearchTextDao<TenantEntity, Tenant>
public List<Tenant> findTenantsByRegion(String region, TextPageLink pageLink) {
return DaoUtil.convertDataList(tenantRepository
.findByRegionNextPage(
- pageLink.getLimit(),
region,
- pageLink.getTextSearch(),
- pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset()));
+ Objects.toString(pageLink.getTextSearch(), ""),
+ pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(),
+ new PageRequest(0, pageLink.getLimit())));
}
}
diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/tenant/TenantRepository.java b/dao/src/main/java/org/thingsboard/server/dao/sql/tenant/TenantRepository.java
index 10f58b3..ffb28e0 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/sql/tenant/TenantRepository.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/sql/tenant/TenantRepository.java
@@ -15,6 +15,7 @@
*/
package org.thingsboard.server.dao.sql.tenant;
+import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.query.Param;
@@ -30,11 +31,11 @@ import java.util.UUID;
@SqlDao
public interface TenantRepository extends CrudRepository<TenantEntity, UUID> {
- @Query(nativeQuery = true, value = "SELECT * FROM TENANT WHERE REGION = :region " +
- "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " +
- "AND ID > :idOffset ORDER BY ID LIMIT :limit")
- List<TenantEntity> findByRegionNextPage(@Param("limit") int limit,
- @Param("region") String region,
+ @Query("SELECT t FROM TenantEntity t WHERE t.region = :region " +
+ "AND LOWER(t.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " +
+ "AND t.id > :idOffset ORDER BY t.id")
+ List<TenantEntity> findByRegionNextPage(@Param("region") String region,
@Param("textSearch") String textSearch,
- @Param("idOffset") UUID idOffset);
+ @Param("idOffset") UUID idOffset,
+ Pageable pageable);
}
diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/timeseries/JpaTimeseriesDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/timeseries/JpaTimeseriesDao.java
index 7df7605..bc056e1 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/sql/timeseries/JpaTimeseriesDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/sql/timeseries/JpaTimeseriesDao.java
@@ -15,12 +15,15 @@
*/
package org.thingsboard.server.dao.sql.timeseries;
+import com.google.common.base.Function;
import com.google.common.collect.Lists;
+import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.thingsboard.server.common.data.id.EntityId;
+import org.thingsboard.server.common.data.kv.Aggregation;
import org.thingsboard.server.common.data.kv.TsKvEntry;
import org.thingsboard.server.common.data.kv.TsKvQuery;
import org.thingsboard.server.dao.DaoUtil;
@@ -31,7 +34,9 @@ import org.thingsboard.server.dao.model.sql.TsKvLatestEntity;
import org.thingsboard.server.dao.sql.JpaAbstractDaoListeningExecutorService;
import org.thingsboard.server.dao.timeseries.TimeseriesDao;
+import javax.annotation.Nullable;
import java.util.List;
+import java.util.stream.Collectors;
@Component
@Slf4j
@@ -46,12 +51,34 @@ public class JpaTimeseriesDao extends JpaAbstractDaoListeningExecutorService imp
@Override
public ListenableFuture<List<TsKvEntry>> findAllAsync(EntityId entityId, List<TsKvQuery> queries) {
- // TODO - Add implementation
- return service.submit(() -> null);
+ List<ListenableFuture<List<TsKvEntry>>> futures = queries
+ .stream()
+ .map(query -> findAllAsync(entityId, query))
+ .collect(Collectors.toList());
+ return Futures.transform(Futures.allAsList(futures), new Function<List<List<TsKvEntry>>, List<TsKvEntry>>() {
+ @Nullable
+ @Override
+ public List<TsKvEntry> apply(@Nullable List<List<TsKvEntry>> results) {
+ if (results == null || results.isEmpty()) {
+ return null;
+ }
+ return results.stream()
+ .flatMap(List::stream)
+ .collect(Collectors.toList());
+ }
+ }, service);
}
private ListenableFuture<List<TsKvEntry>> findAllAsync(EntityId entityId, TsKvQuery query) {
- return null;
+ if (query.getAggregation() == Aggregation.NONE) {
+ return findAllAsyncWithLimit(entityId, query);
+ } else {
+ return service.submit(() -> null);
+ }
+ }
+
+ private ListenableFuture<List<TsKvEntry>> findAllAsyncWithLimit(EntityId entityId, TsKvQuery query) {
+ return service.submit(() -> null);
}
@Override
diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/user/JpaUserDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/user/JpaUserDao.java
index d4308cf..64ea0b4 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/sql/user/JpaUserDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/sql/user/JpaUserDao.java
@@ -16,6 +16,7 @@
package org.thingsboard.server.dao.sql.user;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.PageRequest;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Component;
import org.thingsboard.server.common.data.User;
@@ -24,11 +25,11 @@ import org.thingsboard.server.common.data.security.Authority;
import org.thingsboard.server.dao.DaoUtil;
import org.thingsboard.server.dao.annotation.SqlDao;
import org.thingsboard.server.dao.model.sql.UserEntity;
-import org.thingsboard.server.dao.sql.JpaAbstractDao;
import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao;
import org.thingsboard.server.dao.user.UserDao;
import java.util.List;
+import java.util.Objects;
import java.util.UUID;
import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID;
@@ -66,9 +67,9 @@ public class JpaUserDao extends JpaAbstractSearchTextDao<UserEntity, User> imple
tenantId,
NULL_UUID,
pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(),
- pageLink.getTextSearch(),
- Authority.TENANT_ADMIN.name(),
- pageLink.getLimit()));
+ Objects.toString(pageLink.getTextSearch(), ""),
+ Authority.TENANT_ADMIN,
+ new PageRequest(0, pageLink.getLimit())));
}
@Override
@@ -79,9 +80,9 @@ public class JpaUserDao extends JpaAbstractSearchTextDao<UserEntity, User> imple
tenantId,
customerId,
pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(),
- pageLink.getTextSearch(),
- Authority.CUSTOMER_USER.name(),
- pageLink.getLimit()));
+ Objects.toString(pageLink.getTextSearch(), ""),
+ Authority.CUSTOMER_USER,
+ new PageRequest(0, pageLink.getLimit())));
}
}
diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/user/UserRepository.java b/dao/src/main/java/org/thingsboard/server/dao/sql/user/UserRepository.java
index 128f45f..ebeb612 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/sql/user/UserRepository.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/sql/user/UserRepository.java
@@ -15,9 +15,11 @@
*/
package org.thingsboard.server.dao.sql.user;
+import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.query.Param;
+import org.thingsboard.server.common.data.security.Authority;
import org.thingsboard.server.dao.annotation.SqlDao;
import org.thingsboard.server.dao.model.sql.UserEntity;
@@ -32,15 +34,15 @@ public interface UserRepository extends CrudRepository<UserEntity, UUID> {
UserEntity findByEmail(String email);
- @Query(nativeQuery = true, value = "SELECT * FROM TB_USER WHERE TENANT_ID = :tenantId " +
- "AND CUSTOMER_ID = :customerId AND AUTHORITY = :authority " +
- "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:searchText, '%'))" +
- "AND ID > :idOffset ORDER BY ID LIMIT :limit")
+ @Query("SELECT u FROM UserEntity u WHERE u.tenantId = :tenantId " +
+ "AND u.customerId = :customerId AND u.authority = :authority " +
+ "AND LOWER(u.searchText) LIKE LOWER(CONCAT(:searchText, '%'))" +
+ "AND u.id > :idOffset ORDER BY u.id")
List<UserEntity> findUsersByAuthority(@Param("tenantId") UUID tenantId,
@Param("customerId") UUID customerId,
@Param("idOffset") UUID idOffset,
@Param("searchText") String searchText,
- @Param("authority") String authority,
- @Param("limit") int limit);
+ @Param("authority") Authority authority,
+ Pageable pageable);
}
\ No newline at end of file
diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/widget/JpaWidgetsBundleDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/widget/JpaWidgetsBundleDao.java
index a3c06f1..0e7c0f8 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/sql/widget/JpaWidgetsBundleDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/sql/widget/JpaWidgetsBundleDao.java
@@ -16,6 +16,7 @@
package org.thingsboard.server.dao.sql.widget;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.PageRequest;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Component;
import org.thingsboard.server.common.data.page.TextPageLink;
@@ -27,6 +28,7 @@ import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao;
import org.thingsboard.server.dao.widget.WidgetsBundleDao;
import java.util.List;
+import java.util.Objects;
import java.util.UUID;
import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID;
@@ -61,10 +63,10 @@ public class JpaWidgetsBundleDao extends JpaAbstractSearchTextDao<WidgetsBundleE
return DaoUtil.convertDataList(
widgetsBundleRepository
.findSystemWidgetsBundles(
- pageLink.getLimit(),
NULL_UUID,
- pageLink.getTextSearch(),
- pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset()));
+ Objects.toString(pageLink.getTextSearch(), ""),
+ pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(),
+ new PageRequest(0, pageLink.getLimit())));
}
@Override
@@ -72,10 +74,10 @@ public class JpaWidgetsBundleDao extends JpaAbstractSearchTextDao<WidgetsBundleE
return DaoUtil.convertDataList(
widgetsBundleRepository
.findTenantWidgetsBundlesByTenantId(
- pageLink.getLimit(),
tenantId,
- pageLink.getTextSearch(),
- pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset()));
+ Objects.toString(pageLink.getTextSearch(), ""),
+ pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(),
+ new PageRequest(0, pageLink.getLimit())));
}
@Override
@@ -83,10 +85,10 @@ public class JpaWidgetsBundleDao extends JpaAbstractSearchTextDao<WidgetsBundleE
return DaoUtil.convertDataList(
widgetsBundleRepository
.findAllTenantWidgetsBundlesByTenantId(
- pageLink.getLimit(),
tenantId,
NULL_UUID,
- pageLink.getTextSearch(),
- pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset()));
+ Objects.toString(pageLink.getTextSearch(), ""),
+ pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(),
+ new PageRequest(0, pageLink.getLimit())));
}
}
diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/widget/WidgetsBundleRepository.java b/dao/src/main/java/org/thingsboard/server/dao/sql/widget/WidgetsBundleRepository.java
index 34f167d..9a60ec0 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/sql/widget/WidgetsBundleRepository.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/sql/widget/WidgetsBundleRepository.java
@@ -15,6 +15,7 @@
*/
package org.thingsboard.server.dao.sql.widget;
+import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.query.Param;
@@ -32,28 +33,28 @@ public interface WidgetsBundleRepository extends CrudRepository<WidgetsBundleEnt
WidgetsBundleEntity findWidgetsBundleByTenantIdAndAlias(UUID tenantId, String alias);
- @Query(nativeQuery = true, value = "SELECT * FROM WIDGETS_BUNDLE WHERE TENANT_ID = :systemTenantId " +
- "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:searchText, '%')) " +
- "AND ID > :idOffset ORDER BY ID LIMIT :limit")
- List<WidgetsBundleEntity> findSystemWidgetsBundles(@Param("limit") int limit,
- @Param("systemTenantId") UUID systemTenantId,
+ @Query("SELECT wb FROM WidgetsBundleEntity wb WHERE wb.tenantId = :systemTenantId " +
+ "AND LOWER(wb.searchText) LIKE LOWER(CONCAT(:searchText, '%')) " +
+ "AND wb.id > :idOffset ORDER BY wb.id")
+ List<WidgetsBundleEntity> findSystemWidgetsBundles(@Param("systemTenantId") UUID systemTenantId,
@Param("searchText") String searchText,
- @Param("idOffset") UUID idOffset);
+ @Param("idOffset") UUID idOffset,
+ Pageable pageable);
- @Query(nativeQuery = true, value = "SELECT * FROM WIDGETS_BUNDLE WHERE TENANT_ID = :tenantId " +
- "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " +
- "AND ID > :idOffset ORDER BY ID LIMIT :limit")
- List<WidgetsBundleEntity> findTenantWidgetsBundlesByTenantId(@Param("limit") int limit,
- @Param("tenantId") UUID tenantId,
+ @Query("SELECT wb FROM WidgetsBundleEntity wb WHERE wb.tenantId = :tenantId " +
+ "AND LOWER(wb.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " +
+ "AND wb.id > :idOffset ORDER BY wb.id")
+ List<WidgetsBundleEntity> findTenantWidgetsBundlesByTenantId(@Param("tenantId") UUID tenantId,
@Param("textSearch") String textSearch,
- @Param("idOffset") UUID idOffset);
+ @Param("idOffset") UUID idOffset,
+ Pageable pageable);
- @Query(nativeQuery = true, value = "SELECT * FROM WIDGETS_BUNDLE WHERE TENANT_ID IN (:tenantId, :nullTenantId) " +
- "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " +
- "AND ID > :idOffset ORDER BY ID LIMIT :limit")
- List<WidgetsBundleEntity> findAllTenantWidgetsBundlesByTenantId(@Param("limit") int limit,
- @Param("tenantId") UUID tenantId,
+ @Query("SELECT wb FROM WidgetsBundleEntity wb WHERE wb.tenantId IN (:tenantId, :nullTenantId) " +
+ "AND LOWER(wb.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " +
+ "AND wb.id > :idOffset ORDER BY wb.id")
+ List<WidgetsBundleEntity> findAllTenantWidgetsBundlesByTenantId(@Param("tenantId") UUID tenantId,
@Param("nullTenantId") UUID nullTenantId,
@Param("textSearch") String textSearch,
- @Param("idOffset") UUID idOffset);
+ @Param("idOffset") UUID idOffset,
+ Pageable pageable);
}
diff --git a/dao/src/test/java/org/thingsboard/server/dao/sql/alarm/JpaAlarmDaoTest.java b/dao/src/test/java/org/thingsboard/server/dao/sql/alarm/JpaAlarmDaoTest.java
index ad0c9cf..2651854 100644
--- a/dao/src/test/java/org/thingsboard/server/dao/sql/alarm/JpaAlarmDaoTest.java
+++ b/dao/src/test/java/org/thingsboard/server/dao/sql/alarm/JpaAlarmDaoTest.java
@@ -18,6 +18,7 @@ package org.thingsboard.server.dao.sql.alarm;
import com.google.common.util.concurrent.ListenableFuture;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.PageRequest;
import org.thingsboard.server.common.data.EntityType;
import org.thingsboard.server.common.data.alarm.Alarm;
import org.thingsboard.server.common.data.alarm.AlarmId;
@@ -59,7 +60,7 @@ public class JpaAlarmDaoTest extends AbstractJpaDaoTest {
saveAlarm(alarm3Id, tenantId, originator2Id, "TEST_ALARM");
assertEquals(3, alarmDao.find().size());
AlarmEntity alarmEntity = alarmRepository.findLatestByOriginatorAndType(
- tenantId, originator1Id, EntityType.DEVICE.ordinal(), "TEST_ALARM");
+ tenantId, originator1Id, EntityType.DEVICE, "TEST_ALARM", new PageRequest(0, 1)).get(0);
assertNotNull(alarmEntity);
ListenableFuture<Alarm> future = alarmDao
.findLatestByOriginatorAndType(new TenantId(tenantId), new DeviceId(originator1Id), "TEST_ALARM");
diff --git a/dao/src/test/resources/jpa-test.properties b/dao/src/test/resources/jpa-test.properties
index 58ca25f..80ae6ff 100644
--- a/dao/src/test/resources/jpa-test.properties
+++ b/dao/src/test/resources/jpa-test.properties
@@ -7,4 +7,8 @@ spring.jpa.hibernate.ddl-auto=validate
spring.datasource.url=jdbc:postgresql://localhost:5432/thingsboard
spring.datasource.username=postgres
-spring.datasource.password=postgres
\ No newline at end of file
+spring.datasource.password=postgres
+
+#spring.datasource.url=jdbc:h2:mem:test;MODE=PostgreSQL
+#spring.datasource.schema=classpath:postgres/schema.sql
+#spring.datasource.data=classpath:postgres/system-data.sql;classpath:system-test.sql
\ No newline at end of file