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); return new PageLink(this.pageSize, this.page+1, this.textSearch, this.sortOrder);
} }
public Sort toSort(SortOrder sortOrder, Map<String,String> columnMap) { public Sort toSort(SortOrder sortOrder, Map<String,String> columnMap, boolean addDefaultSorting) {
return toSort(new ArrayList<>(List.of(sortOrder)), columnMap); if (sortOrder == null) {
return DEFAULT_SORT;
} else {
return toSort(List.of(sortOrder), columnMap, addDefaultSorting);
}
} }
public Sort toSort(List<SortOrder> sortOrders, Map<String,String> columnMap) { public Sort toSort(List<SortOrder> sortOrders, Map<String,String> columnMap, boolean addDefaultSorting) {
if (!isDefaultSortOrderAvailable(sortOrders)) { if (addDefaultSorting && !isDefaultSortOrderAvailable(sortOrders)) {
sortOrders = new ArrayList<>(sortOrders);
sortOrders.add(new SortOrder(DEFAULT_SORT_PROPERTY, SortOrder.Direction.ASC)); sortOrders.add(new SortOrder(DEFAULT_SORT_PROPERTY, SortOrder.Direction.ASC));
} }
return Sort.by(sortOrders.stream().map(s -> toSortOrder(s, columnMap)).collect(Collectors.toList())); return Sort.by(sortOrders.stream().map(s -> toSortOrder(s, columnMap)).collect(Collectors.toList()));
@ -82,7 +87,7 @@ public class PageLink {
if (columnMap.containsKey(property)) { if (columnMap.containsKey(property)) {
property = columnMap.get(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) { 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.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.ToString; import lombok.ToString;
import org.springframework.data.domain.Sort;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@Data @Data
@ToString(callSuper = true) @ToString(callSuper = true)
@ -67,13 +62,4 @@ public class TimePageLink extends PageLink {
this.startTime, this.endTime); 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) { 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) { 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) { 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) { 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) { 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 @Override
public PageData<EntitySubtype> findTenantAlarmTypes(UUID tenantId, PageLink pageLink) { 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()) { if (page.isEmpty()) {
return PageData.emptyPageData(); 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; package org.thingsboard.server.dao.sql.widget;
import com.datastax.oss.driver.api.core.uuid.Uuids; import com.datastax.oss.driver.api.core.uuid.Uuids;
import org.jetbrains.annotations.NotNull;
import org.junit.After; import org.junit.After;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.thingsboard.common.util.JacksonUtil; 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.TenantId;
import org.thingsboard.server.common.data.id.WidgetsBundleId; import org.thingsboard.server.common.data.id.WidgetsBundleId;
import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageData;
@ -164,15 +164,16 @@ public class JpaWidgetTypeDaoTest extends AbstractJpaDaoTest {
@Test @Test
public void testFindSystemWidgetTypesForSameName() throws InterruptedException { public void testFindSystemWidgetTypesForSameName() throws InterruptedException {
List<WidgetTypeDetails> widgetTypeList = new ArrayList<>(); List<WidgetTypeDetails> sameNameList = new ArrayList<>();
for (int i = 0; i < 20; i++) { for (int i = 0; i < 20; i++) {
Thread.sleep(2); Thread.sleep(2);
var widgetType = saveWidgetType(TenantId.SYS_TENANT_ID, "widgetName"); var widgetType = saveWidgetType(TenantId.SYS_TENANT_ID, "widgetName");
sameNameList.add(widgetType);
widgetTypeList.add(widgetType); widgetTypeList.add(widgetType);
} }
widgetTypeList.sort(Comparator.comparing(BaseWidgetType::getName).thenComparing((BaseWidgetType baseWidgetType) -> baseWidgetType.getId().getId())); sameNameList.sort(Comparator.comparing(BaseWidgetType::getName).thenComparing((BaseWidgetType baseWidgetType) -> baseWidgetType.getId().getId()));
List<WidgetTypeInfo> expected = widgetTypeList.stream().map(WidgetTypeInfo::new).collect(Collectors.toList()); 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"), PageData<WidgetTypeInfo> widgetTypesFirstPage = widgetTypeDao.findSystemWidgetTypes(TenantId.SYS_TENANT_ID, true, DeprecatedFilter.ALL, Collections.singletonList("static"),
new PageLink(10, 0, null, new SortOrder("name"))); 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)); assertThat(widgetTypesFirstPage.getData()).containsExactlyElementsOf(expected.subList(0, 10));
PageData<WidgetTypeInfo> widgetTypesSecondPage = widgetTypeDao.findSystemWidgetTypes(TenantId.SYS_TENANT_ID, true, DeprecatedFilter.ALL, Collections.singletonList("static"), 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()); assertEquals(10, widgetTypesSecondPage.getData().size());
assertThat(widgetTypesSecondPage.getData()).containsExactlyElementsOf(expected.subList(10, 20)); assertThat(widgetTypesSecondPage.getData()).containsExactlyElementsOf(expected.subList(10, 20));
} }
@ -384,6 +385,7 @@ public class JpaWidgetTypeDaoTest extends AbstractJpaDaoTest {
private WidgetTypeDetails saveWidgetType(TenantId tenantId, String name) { private WidgetTypeDetails saveWidgetType(TenantId tenantId, String name) {
WidgetTypeDetails widgetType = new WidgetTypeDetails(); WidgetTypeDetails widgetType = new WidgetTypeDetails();
widgetType.setTenantId(tenantId); widgetType.setTenantId(tenantId);
widgetType.setDescription("WIDGET_TYPE_DESCRIPTION" + StringUtils.randomAlphabetic(7));
widgetType.setName(name); widgetType.setName(name);
var descriptor = JacksonUtil.newObjectNode(); var descriptor = JacksonUtil.newObjectNode();
descriptor.put("type","static"); descriptor.put("type","static");

Loading…
Cancel
Save