From 1934b7387d0cae5662fa79e81c6f764d6869f8d2 Mon Sep 17 00:00:00 2001 From: Volodymyr Babak Date: Wed, 22 Dec 2021 17:10:28 +0200 Subject: [PATCH] Moved toSort from DaoUtil to PageLink/TimePageLink classes --- common/data/pom.xml | 4 ++ .../server/common/data/page/PageLink.java | 34 ++++++++++++++ .../server/common/data/page/TimePageLink.java | 31 +++++++++++++ .../org/thingsboard/server/dao/DaoUtil.java | 46 ++----------------- .../dao/sql/edge/JpaBaseEdgeEventDao.java | 9 +--- 5 files changed, 74 insertions(+), 50 deletions(-) diff --git a/common/data/pom.xml b/common/data/pom.xml index 80be41e6a0..5a5838d7da 100644 --- a/common/data/pom.xml +++ b/common/data/pom.xml @@ -64,6 +64,10 @@ com.fasterxml.jackson.core jackson-databind + + org.springframework.boot + spring-boot-starter-data-jpa + org.springframework.boot spring-boot-starter-test diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/page/PageLink.java b/common/data/src/main/java/org/thingsboard/server/common/data/page/PageLink.java index a31f834068..acf0d2f71e 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/page/PageLink.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/page/PageLink.java @@ -18,9 +18,19 @@ package org.thingsboard.server.common.data.page; import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Data; +import org.springframework.data.domain.Sort; + +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + @Data public class PageLink { + protected static final String DEFAULT_SORT_PROPERTY = "id"; + private static final Sort DEFAULT_SORT = Sort.by(Sort.Direction.ASC, DEFAULT_SORT_PROPERTY); + private final String textSearch; private final int pageSize; private final int page; @@ -57,4 +67,28 @@ public class PageLink { return new PageLink(this.pageSize, this.page+1, this.textSearch, this.sortOrder); } + public Sort toSort(SortOrder sortOrder, Map columnMap) { + if (sortOrder == null) { + return DEFAULT_SORT; + } else { + String property = sortOrder.getProperty(); + if (columnMap.containsKey(property)) { + property = columnMap.get(property); + } + return Sort.by(Sort.Direction.fromString(sortOrder.getDirection().name()), property); + } + } + + public Sort toSort(List sortOrders, Map columnMap) { + return Sort.by(sortOrders.stream().map(s -> toSortOrder(s, columnMap)).collect(Collectors.toList())); + } + + private Sort.Order toSortOrder(SortOrder sortOrder, Map columnMap) { + String property = sortOrder.getProperty(); + if (columnMap.containsKey(property)) { + property = columnMap.get(property); + } + return new Sort.Order(Sort.Direction.fromString(sortOrder.getDirection().name()), property, Sort.NullHandling.NULLS_LAST); + } + } diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/page/TimePageLink.java b/common/data/src/main/java/org/thingsboard/server/common/data/page/TimePageLink.java index be4878b50e..7be6f1ec8b 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/page/TimePageLink.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/page/TimePageLink.java @@ -19,6 +19,11 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; +import org.springframework.data.domain.Sort; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; @Data @ToString(callSuper = true) @@ -61,4 +66,30 @@ public class TimePageLink extends PageLink { return new TimePageLink(this.getPageSize(), this.getPage()+1, this.getTextSearch(), this.getSortOrder(), this.startTime, this.endTime); } + + @Override + public Sort toSort(SortOrder sortOrder, Map columnMap) { + if (sortOrder == null) { + return super.toSort(sortOrder, columnMap); + } else { + return toSort(new ArrayList<>(List.of(sortOrder)), columnMap); + } + } + + @Override + public Sort toSort(List sortOrders, Map columnMap) { + if (!isDefaultSortOrderAvailable(sortOrders)) { + sortOrders.add(new SortOrder(DEFAULT_SORT_PROPERTY, SortOrder.Direction.ASC)); + } + return super.toSort(sortOrders, columnMap); + } + + private boolean isDefaultSortOrderAvailable(List sortOrders) { + for (SortOrder sortOrder : sortOrders) { + if (DEFAULT_SORT_PROPERTY.equals(sortOrder.getProperty())) { + return true; + } + } + return false; + } } diff --git a/dao/src/main/java/org/thingsboard/server/dao/DaoUtil.java b/dao/src/main/java/org/thingsboard/server/dao/DaoUtil.java index 19f613bd30..b6ab190573 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/DaoUtil.java +++ b/dao/src/main/java/org/thingsboard/server/dao/DaoUtil.java @@ -18,7 +18,7 @@ package org.thingsboard.server.dao; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; -import org.springframework.data.domain.Sort; + import org.thingsboard.server.common.data.id.UUIDBased; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; @@ -32,13 +32,9 @@ import java.util.List; import java.util.Map; import java.util.Optional; import java.util.UUID; -import java.util.stream.Collectors; public abstract class DaoUtil { - public static final String DEFAULT_SORT_PROPERTY = "id"; - public static final Sort DEFAULT_SORT = Sort.by(Sort.Direction.ASC, DEFAULT_SORT_PROPERTY); - private DaoUtil() { } @@ -56,7 +52,7 @@ public abstract class DaoUtil { } public static Pageable toPageable(PageLink pageLink, Map columnMap) { - return PageRequest.of(pageLink.getPage(), pageLink.getPageSize(), toSort(pageLink.getSortOrder(), columnMap)); + return PageRequest.of(pageLink.getPage(), pageLink.getPageSize(), pageLink.toSort(pageLink.getSortOrder(), columnMap)); } public static Pageable toPageable(PageLink pageLink, List sortOrders) { @@ -64,43 +60,7 @@ public abstract class DaoUtil { } public static Pageable toPageable(PageLink pageLink, Map columnMap, List sortOrders) { - return PageRequest.of(pageLink.getPage(), pageLink.getPageSize(), toSort(sortOrders, columnMap)); - } - - public static Sort toSort(SortOrder sortOrder) { - return toSort(sortOrder, Collections.emptyMap()); - } - - public static Sort toSort(SortOrder sortOrder, Map columnMap) { - if (sortOrder == null) { - return DEFAULT_SORT; - } else { - String property = sortOrder.getProperty(); - if (columnMap.containsKey(property)) { - property = columnMap.get(property); - } - return Sort.by(Sort.Direction.fromString(sortOrder.getDirection().name()), property); - } - } - - public static Sort toSort(List sortOrders) { - return toSort(sortOrders, Collections.emptyMap()); - } - - public static Sort toSort(List sortOrders, Map columnMap) { - return toSort(sortOrders, columnMap, Sort.NullHandling.NULLS_LAST); - } - - public static Sort toSort(List sortOrders, Map columnMap, Sort.NullHandling nullHandlingHint) { - return Sort.by(sortOrders.stream().map(s -> toSortOrder(s, columnMap, nullHandlingHint)).collect(Collectors.toList())); - } - - public static Sort.Order toSortOrder(SortOrder sortOrder, Map columnMap, Sort.NullHandling nullHandlingHint) { - String property = sortOrder.getProperty(); - if (columnMap.containsKey(property)) { - property = columnMap.get(property); - } - return new Sort.Order(Sort.Direction.fromString(sortOrder.getDirection().name()), property, nullHandlingHint); + return PageRequest.of(pageLink.getPage(), pageLink.getPageSize(), pageLink.toSort(sortOrders, columnMap)); } public static List convertDataList(Collection> toDataList) { diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/edge/JpaBaseEdgeEventDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/edge/JpaBaseEdgeEventDao.java index 8645efccf7..dfb00eafcc 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/edge/JpaBaseEdgeEventDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/edge/JpaBaseEdgeEventDao.java @@ -99,11 +99,6 @@ public class JpaBaseEdgeEventDao extends JpaAbstractSearchTextDao findEdgeEvents(UUID tenantId, EdgeId edgeId, TimePageLink pageLink, boolean withTsUpdate) { - List sortOrders = new ArrayList<>(); - sortOrders.add(new SortOrder("id", SortOrder.Direction.ASC)); - if (pageLink.getSortOrder() != null) { - sortOrders.add(pageLink.getSortOrder()); - } final Lock readWriteLock = readWriteLocks.computeIfAbsent(edgeId, id -> new ReentrantLock()); readWriteLock.lock(); try { @@ -116,7 +111,7 @@ public class JpaBaseEdgeEventDao extends JpaAbstractSearchTextDao