Moved toSort from DaoUtil to PageLink/TimePageLink classes
This commit is contained in:
parent
5cbc78fbf4
commit
1934b7387d
@ -64,6 +64,10 @@
|
||||
<groupId>com.fasterxml.jackson.core</groupId>
|
||||
<artifactId>jackson-databind</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-data-jpa</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-test</artifactId>
|
||||
|
||||
@ -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<String,String> 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<SortOrder> sortOrders, Map<String,String> columnMap) {
|
||||
return Sort.by(sortOrders.stream().map(s -> toSortOrder(s, columnMap)).collect(Collectors.toList()));
|
||||
}
|
||||
|
||||
private Sort.Order toSortOrder(SortOrder sortOrder, Map<String,String> 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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -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<String,String> columnMap) {
|
||||
if (sortOrder == null) {
|
||||
return super.toSort(sortOrder, columnMap);
|
||||
} else {
|
||||
return toSort(new ArrayList<>(List.of(sortOrder)), columnMap);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Sort toSort(List<SortOrder> sortOrders, Map<String,String> columnMap) {
|
||||
if (!isDefaultSortOrderAvailable(sortOrders)) {
|
||||
sortOrders.add(new SortOrder(DEFAULT_SORT_PROPERTY, SortOrder.Direction.ASC));
|
||||
}
|
||||
return super.toSort(sortOrders, columnMap);
|
||||
}
|
||||
|
||||
private boolean isDefaultSortOrderAvailable(List<SortOrder> sortOrders) {
|
||||
for (SortOrder sortOrder : sortOrders) {
|
||||
if (DEFAULT_SORT_PROPERTY.equals(sortOrder.getProperty())) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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<String,String> 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<SortOrder> sortOrders) {
|
||||
@ -64,43 +60,7 @@ public abstract class DaoUtil {
|
||||
}
|
||||
|
||||
public static Pageable toPageable(PageLink pageLink, Map<String,String> columnMap, List<SortOrder> 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<String,String> 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<SortOrder> sortOrders) {
|
||||
return toSort(sortOrders, Collections.emptyMap());
|
||||
}
|
||||
|
||||
public static Sort toSort(List<SortOrder> sortOrders, Map<String,String> columnMap) {
|
||||
return toSort(sortOrders, columnMap, Sort.NullHandling.NULLS_LAST);
|
||||
}
|
||||
|
||||
public static Sort toSort(List<SortOrder> sortOrders, Map<String,String> 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<String,String> 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 <T> List<T> convertDataList(Collection<? extends ToData<T>> toDataList) {
|
||||
|
||||
@ -99,11 +99,6 @@ public class JpaBaseEdgeEventDao extends JpaAbstractSearchTextDao<EdgeEventEntit
|
||||
|
||||
@Override
|
||||
public PageData<EdgeEvent> findEdgeEvents(UUID tenantId, EdgeId edgeId, TimePageLink pageLink, boolean withTsUpdate) {
|
||||
List<SortOrder> 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<EdgeEventEntit
|
||||
Objects.toString(pageLink.getTextSearch(), ""),
|
||||
pageLink.getStartTime(),
|
||||
pageLink.getEndTime(),
|
||||
DaoUtil.toPageable(pageLink, sortOrders)));
|
||||
DaoUtil.toPageable(pageLink)));
|
||||
} else {
|
||||
return DaoUtil.toPageData(
|
||||
edgeEventRepository
|
||||
@ -126,7 +121,7 @@ public class JpaBaseEdgeEventDao extends JpaAbstractSearchTextDao<EdgeEventEntit
|
||||
Objects.toString(pageLink.getTextSearch(), ""),
|
||||
pageLink.getStartTime(),
|
||||
pageLink.getEndTime(),
|
||||
DaoUtil.toPageable(pageLink, sortOrders)));
|
||||
DaoUtil.toPageable(pageLink)));
|
||||
|
||||
}
|
||||
} finally {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user