Browse Source

add defaultSorting by default

pull/10345/head
dashevchenko 2 years ago
parent
commit
ab638cfa19
  1. 15
      common/data/src/main/java/org/thingsboard/server/common/data/page/PageLink.java
  2. 14
      common/data/src/main/java/org/thingsboard/server/common/data/page/TimePageLink.java
  3. 18
      dao/src/main/java/org/thingsboard/server/dao/DaoUtil.java
  4. 2
      dao/src/main/java/org/thingsboard/server/dao/sql/alarm/JpaAlarmDao.java
  5. 12
      dao/src/test/java/org/thingsboard/server/dao/sql/widget/JpaWidgetTypeDaoTest.java

15
common/data/src/main/java/org/thingsboard/server/common/data/page/PageLink.java

@ -66,12 +66,17 @@ public class PageLink {
return new PageLink(this.pageSize, this.page+1, this.textSearch, this.sortOrder);
}
public Sort toSort(SortOrder sortOrder, Map<String,String> columnMap) {
return toSort(new ArrayList<>(List.of(sortOrder)), columnMap);
public Sort toSort(SortOrder sortOrder, Map<String,String> columnMap, boolean addDefaultSorting) {
if (sortOrder == null) {
return DEFAULT_SORT;
} else {
return toSort(List.of(sortOrder), columnMap, addDefaultSorting);
}
}
public Sort toSort(List<SortOrder> sortOrders, Map<String,String> columnMap) {
if (!isDefaultSortOrderAvailable(sortOrders)) {
public Sort toSort(List<SortOrder> sortOrders, Map<String,String> columnMap, boolean addDefaultSorting) {
if (addDefaultSorting && !isDefaultSortOrderAvailable(sortOrders)) {
sortOrders = new ArrayList<>(sortOrders);
sortOrders.add(new SortOrder(DEFAULT_SORT_PROPERTY, SortOrder.Direction.ASC));
}
return Sort.by(sortOrders.stream().map(s -> toSortOrder(s, columnMap)).collect(Collectors.toList()));
@ -82,7 +87,7 @@ public class PageLink {
if (columnMap.containsKey(property)) {
property = columnMap.get(property);
}
return new Sort.Order(Sort.Direction.fromString(sortOrder.getDirection().name()), property, Sort.NullHandling.NULLS_LAST);
return new Sort.Order(Sort.Direction.fromString(sortOrder.getDirection().name()), property);
}
public boolean isDefaultSortOrderAvailable(List<SortOrder> sortOrders) {

14
common/data/src/main/java/org/thingsboard/server/common/data/page/TimePageLink.java

@ -19,11 +19,6 @@ 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)
@ -67,13 +62,4 @@ public class TimePageLink extends PageLink {
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);
}
}
}

18
dao/src/main/java/org/thingsboard/server/dao/DaoUtil.java

@ -56,11 +56,19 @@ public abstract class DaoUtil {
}
public static Pageable toPageable(PageLink pageLink) {
return toPageable(pageLink, Collections.emptyMap());
return toPageable(pageLink, true);
}
public static Pageable toPageable(PageLink pageLink, boolean addDefaultSorting) {
return toPageable(pageLink, Collections.emptyMap(), addDefaultSorting);
}
public static Pageable toPageable(PageLink pageLink, Map<String, String> columnMap) {
return PageRequest.of(pageLink.getPage(), pageLink.getPageSize(), pageLink.toSort(pageLink.getSortOrder(), columnMap));
return toPageable(pageLink, columnMap, true);
}
public static Pageable toPageable(PageLink pageLink, Map<String, String> columnMap, boolean addDefaultSorting) {
return PageRequest.of(pageLink.getPage(), pageLink.getPageSize(), pageLink.toSort(pageLink.getSortOrder(), columnMap, addDefaultSorting));
}
public static Pageable toPageable(PageLink pageLink, List<SortOrder> sortOrders) {
@ -68,7 +76,11 @@ public abstract class DaoUtil {
}
public static Pageable toPageable(PageLink pageLink, Map<String, String> columnMap, List<SortOrder> sortOrders) {
return PageRequest.of(pageLink.getPage(), pageLink.getPageSize(), pageLink.toSort(sortOrders, columnMap));
return toPageable(pageLink, columnMap, sortOrders, true);
}
public static Pageable toPageable(PageLink pageLink, Map<String, String> columnMap, List<SortOrder> sortOrders, boolean addDefaultSorting) {
return PageRequest.of(pageLink.getPage(), pageLink.getPageSize(), pageLink.toSort(sortOrders, columnMap, addDefaultSorting));
}
public static <T> List<T> convertDataList(Collection<? extends ToData<T>> toDataList) {

2
dao/src/main/java/org/thingsboard/server/dao/sql/alarm/JpaAlarmDao.java

@ -383,7 +383,7 @@ public class JpaAlarmDao extends JpaAbstractDao<AlarmEntity, Alarm> implements A
@Override
public PageData<EntitySubtype> findTenantAlarmTypes(UUID tenantId, PageLink pageLink) {
Page<String> page = alarmRepository.findTenantAlarmTypes(tenantId, Objects.toString(pageLink.getTextSearch(), ""), toPageable(pageLink));
Page<String> page = alarmRepository.findTenantAlarmTypes(tenantId, Objects.toString(pageLink.getTextSearch(), ""), toPageable(pageLink, false));
if (page.isEmpty()) {
return PageData.emptyPageData();
}

12
dao/src/test/java/org/thingsboard/server/dao/sql/widget/JpaWidgetTypeDaoTest.java

@ -16,12 +16,12 @@
package org.thingsboard.server.dao.sql.widget;
import com.datastax.oss.driver.api.core.uuid.Uuids;
import org.jetbrains.annotations.NotNull;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.thingsboard.common.util.JacksonUtil;
import org.thingsboard.server.common.data.StringUtils;
import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.data.id.WidgetsBundleId;
import org.thingsboard.server.common.data.page.PageData;
@ -164,15 +164,16 @@ public class JpaWidgetTypeDaoTest extends AbstractJpaDaoTest {
@Test
public void testFindSystemWidgetTypesForSameName() throws InterruptedException {
List<WidgetTypeDetails> widgetTypeList = new ArrayList<>();
List<WidgetTypeDetails> sameNameList = new ArrayList<>();
for (int i = 0; i < 20; i++) {
Thread.sleep(2);
var widgetType = saveWidgetType(TenantId.SYS_TENANT_ID, "widgetName");
sameNameList.add(widgetType);
widgetTypeList.add(widgetType);
}
widgetTypeList.sort(Comparator.comparing(BaseWidgetType::getName).thenComparing((BaseWidgetType baseWidgetType) -> baseWidgetType.getId().getId()));
List<WidgetTypeInfo> expected = widgetTypeList.stream().map(WidgetTypeInfo::new).collect(Collectors.toList());
sameNameList.sort(Comparator.comparing(BaseWidgetType::getName).thenComparing((BaseWidgetType baseWidgetType) -> baseWidgetType.getId().getId()));
List<WidgetTypeInfo> expected = sameNameList.stream().map(WidgetTypeInfo::new).collect(Collectors.toList());
PageData<WidgetTypeInfo> widgetTypesFirstPage = widgetTypeDao.findSystemWidgetTypes(TenantId.SYS_TENANT_ID, true, DeprecatedFilter.ALL, Collections.singletonList("static"),
new PageLink(10, 0, null, new SortOrder("name")));
@ -180,7 +181,7 @@ public class JpaWidgetTypeDaoTest extends AbstractJpaDaoTest {
assertThat(widgetTypesFirstPage.getData()).containsExactlyElementsOf(expected.subList(0, 10));
PageData<WidgetTypeInfo> widgetTypesSecondPage = widgetTypeDao.findSystemWidgetTypes(TenantId.SYS_TENANT_ID, true, DeprecatedFilter.ALL, Collections.singletonList("static"),
new PageLink(10, 0, null, new SortOrder("name")));
new PageLink(10, 1, null, new SortOrder("name")));
assertEquals(10, widgetTypesSecondPage.getData().size());
assertThat(widgetTypesSecondPage.getData()).containsExactlyElementsOf(expected.subList(10, 20));
}
@ -384,6 +385,7 @@ public class JpaWidgetTypeDaoTest extends AbstractJpaDaoTest {
private WidgetTypeDetails saveWidgetType(TenantId tenantId, String name) {
WidgetTypeDetails widgetType = new WidgetTypeDetails();
widgetType.setTenantId(tenantId);
widgetType.setDescription("WIDGET_TYPE_DESCRIPTION" + StringUtils.randomAlphabetic(7));
widgetType.setName(name);
var descriptor = JacksonUtil.newObjectNode();
descriptor.put("type","static");

Loading…
Cancel
Save