From ce8eba2137e31a0ba722e21398d065782c9ba523 Mon Sep 17 00:00:00 2001 From: Andrii Shvaika Date: Mon, 16 Oct 2023 17:39:47 +0300 Subject: [PATCH] Ability to sort widget types by createdTime --- .../dao/model/sql/AbstractWidgetTypeEntity.java | 2 +- .../dao/model/sql/WidgetTypeInfoEntity.java | 16 ++++++++++++---- .../server/dao/sql/widget/JpaWidgetTypeDao.java | 9 +++++---- .../dao/sql/widget/JpaWidgetTypeDaoTest.java | 13 +++++++------ 4 files changed, 25 insertions(+), 15 deletions(-) diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/AbstractWidgetTypeEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/AbstractWidgetTypeEntity.java index 08b2ebed77..fa700315d0 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/model/sql/AbstractWidgetTypeEntity.java +++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/AbstractWidgetTypeEntity.java @@ -31,7 +31,7 @@ import java.util.UUID; @Data @EqualsAndHashCode(callSuper = true) @MappedSuperclass -public abstract class AbstractWidgetTypeEntity extends BaseSqlEntity implements BaseEntity { +public abstract class AbstractWidgetTypeEntity extends BaseSqlEntity { @Column(name = ModelConstants.WIDGET_TYPE_TENANT_ID_PROPERTY) private UUID tenantId; diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/WidgetTypeInfoEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/WidgetTypeInfoEntity.java index fa6fd895cd..47d965a382 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/model/sql/WidgetTypeInfoEntity.java +++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/WidgetTypeInfoEntity.java @@ -18,7 +18,6 @@ package org.thingsboard.server.dao.model.sql; import io.hypersistence.utils.hibernate.type.array.StringArrayType; import lombok.Data; import lombok.EqualsAndHashCode; -import org.hibernate.annotations.Immutable; import org.hibernate.annotations.Type; import org.hibernate.annotations.TypeDef; import org.thingsboard.server.common.data.widget.BaseWidgetType; @@ -28,14 +27,23 @@ import org.thingsboard.server.dao.model.ModelConstants; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Table; +import java.util.HashMap; +import java.util.Map; @Data @EqualsAndHashCode(callSuper = true) @Entity -@Immutable @TypeDef(name = "string-array", typeClass = StringArrayType.class) @Table(name = ModelConstants.WIDGET_TYPE_INFO_VIEW_TABLE_NAME) -public final class WidgetTypeInfoEntity extends AbstractWidgetTypeEntity { +public class WidgetTypeInfoEntity extends AbstractWidgetTypeEntity { + + public static final Map SEARCH_COLUMNS_MAP = new HashMap<>(); + + static { + SEARCH_COLUMNS_MAP.put("createdTime", "created_time"); + SEARCH_COLUMNS_MAP.put("tenantId", "tenant_id"); + SEARCH_COLUMNS_MAP.put("widgetType", "widget_type"); + } @Column(name = ModelConstants.WIDGET_TYPE_IMAGE_PROPERTY) private String image; @@ -43,7 +51,7 @@ public final class WidgetTypeInfoEntity extends AbstractWidgetTypeEntity(); WidgetsBundle widgetsBundle = new WidgetsBundle(); @@ -74,6 +74,7 @@ public class JpaWidgetTypeDaoTest extends AbstractJpaDaoTest { this.widgetsBundle = widgetsBundleDao.save(TenantId.SYS_TENANT_ID, widgetsBundle); for (int i = 0; i < WIDGET_TYPE_COUNT; i++) { + Thread.sleep(2); var widgetType = createAndSaveWidgetType(TenantId.SYS_TENANT_ID, i); widgetTypeList.add(widgetType); widgetTypeDao.saveWidgetsBundleWidget(new WidgetsBundleWidget(this.widgetsBundle.getId(), widgetType.getId(), i)); @@ -112,12 +113,12 @@ public class JpaWidgetTypeDaoTest extends AbstractJpaDaoTest { @Test public void testFindSystemWidgetTypes() { PageData widgetTypes = widgetTypeDao.findSystemWidgetTypes(TenantId.SYS_TENANT_ID, true, DeprecatedFilter.ALL, Collections.singletonList("static"), - new PageLink(1024, 0, "TYPE_DESCRIPTION", new SortOrder("name"))); + new PageLink(1024, 0, "TYPE_DESCRIPTION", new SortOrder("createdTime"))); assertEquals(1, widgetTypes.getData().size()); assertEquals(new WidgetTypeInfo(widgetTypeList.get(1)), widgetTypes.getData().get(0)); widgetTypes = widgetTypeDao.findSystemWidgetTypes(TenantId.SYS_TENANT_ID, true, DeprecatedFilter.ALL, Collections.emptyList(), - new PageLink(1024, 0, "hfgfd tag2_2 ghg", new SortOrder("name"))); + new PageLink(1024, 0, "hfgfd tag2_2 ghg", new SortOrder("createdTime"))); assertEquals(1, widgetTypes.getData().size()); assertEquals(new WidgetTypeInfo(widgetTypeList.get(2)), widgetTypes.getData().get(0)); } @@ -130,7 +131,7 @@ public class JpaWidgetTypeDaoTest extends AbstractJpaDaoTest { widgetTypeList.add(widgetType); } PageData widgetTypes = widgetTypeDao.findTenantWidgetTypesByTenantId(tenantId, true, DeprecatedFilter.ALL, null, - new PageLink(10, 0, "", new SortOrder("name"))); + new PageLink(10, 0, "", new SortOrder("createdTime"))); assertEquals(WIDGET_TYPE_COUNT, widgetTypes.getData().size()); assertEquals(new WidgetTypeInfo(widgetTypeList.get(3)), widgetTypes.getData().get(0)); assertEquals(new WidgetTypeInfo(widgetTypeList.get(4)), widgetTypes.getData().get(1)); @@ -140,13 +141,13 @@ public class JpaWidgetTypeDaoTest extends AbstractJpaDaoTest { @Test public void testFindByWidgetTypeInfosByBundleId() { PageData widgetTypes = widgetTypeDao.findWidgetTypesInfosByWidgetsBundleId(TenantId.SYS_TENANT_ID.getId(), widgetsBundle.getUuidId(),true, DeprecatedFilter.ALL, Collections.singletonList("latest"), - new PageLink(1024, 0, "TYPE_DESCRIPTION", new SortOrder("name"))); + new PageLink(1024, 0, "TYPE_DESCRIPTION", new SortOrder("createdTime"))); assertEquals(2, widgetTypes.getData().size()); assertEquals(new WidgetTypeInfo(widgetTypeList.get(0)), widgetTypes.getData().get(0)); assertEquals(new WidgetTypeInfo(widgetTypeList.get(2)), widgetTypes.getData().get(1)); widgetTypes = widgetTypeDao.findWidgetTypesInfosByWidgetsBundleId(TenantId.SYS_TENANT_ID.getId(), widgetsBundle.getUuidId(), true, DeprecatedFilter.ALL, Collections.emptyList(), - new PageLink(1024, 0, "hfgfd TEST_0 ghg", new SortOrder("name"))); + new PageLink(1024, 0, "hfgfd TEST_0 ghg", new SortOrder("createdTime"))); assertEquals(1, widgetTypes.getData().size()); assertEquals(new WidgetTypeInfo(widgetTypeList.get(0)), widgetTypes.getData().get(0)); }