From b6cfe37c84dc5ce1e5aaefe49fd62b627ef872f6 Mon Sep 17 00:00:00 2001 From: Francesco Date: Wed, 25 Oct 2023 10:06:31 +0200 Subject: [PATCH] Fixed implementation of search with enum fields --- .../java/tech/ailef/dbadmin/external/DbAdmin.java | 5 ++++- .../external/dbmapping/CustomJpaRepository.java | 2 +- .../external/dbmapping/fields/EnumFieldType.java | 13 +++++++++++-- .../templates/fragments/search_inputs.html | 14 ++++++++++++++ 4 files changed, 30 insertions(+), 4 deletions(-) diff --git a/src/main/java/tech/ailef/dbadmin/external/DbAdmin.java b/src/main/java/tech/ailef/dbadmin/external/DbAdmin.java index 6a5ff55..30dc140 100644 --- a/src/main/java/tech/ailef/dbadmin/external/DbAdmin.java +++ b/src/main/java/tech/ailef/dbadmin/external/DbAdmin.java @@ -40,6 +40,7 @@ import jakarta.annotation.PostConstruct; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.EntityManager; +import jakarta.persistence.EnumType; import jakarta.persistence.Enumerated; import jakarta.persistence.Id; import jakarta.persistence.JoinColumn; @@ -328,7 +329,9 @@ public class DbAdmin { if (fieldType == null) { Enumerated enumerated = f.getAnnotation(Enumerated.class); if (enumerated != null) { - fieldType = new EnumFieldType(f.getType()); + EnumType type = enumerated.value(); + + fieldType = new EnumFieldType(f.getType(), type); } } diff --git a/src/main/java/tech/ailef/dbadmin/external/dbmapping/CustomJpaRepository.java b/src/main/java/tech/ailef/dbadmin/external/dbmapping/CustomJpaRepository.java index acf18c6..e7b51b8 100644 --- a/src/main/java/tech/ailef/dbadmin/external/dbmapping/CustomJpaRepository.java +++ b/src/main/java/tech/ailef/dbadmin/external/dbmapping/CustomJpaRepository.java @@ -96,7 +96,7 @@ public class CustomJpaRepository extends SimpleJpaRepository { ) ); - + if (sortKey != null) query.orderBy(sortOrder.equals("DESC") ? cb.desc(root.get(sortKey)) : cb.asc(root.get(sortKey))); diff --git a/src/main/java/tech/ailef/dbadmin/external/dbmapping/fields/EnumFieldType.java b/src/main/java/tech/ailef/dbadmin/external/dbmapping/fields/EnumFieldType.java index dd2666e..82f0f86 100644 --- a/src/main/java/tech/ailef/dbadmin/external/dbmapping/fields/EnumFieldType.java +++ b/src/main/java/tech/ailef/dbadmin/external/dbmapping/fields/EnumFieldType.java @@ -24,15 +24,19 @@ import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; +import jakarta.persistence.EnumType; import tech.ailef.dbadmin.external.dto.CompareOperator; import tech.ailef.dbadmin.external.exceptions.DbAdminException; public class EnumFieldType extends DbFieldType { + private EnumType type; + private Class klass; - public EnumFieldType(Class klass) { + public EnumFieldType(Class klass, EnumType type) { this.klass = klass; + this.type = type; } @Override @@ -55,6 +59,7 @@ public class EnumFieldType extends DbFieldType { @Override public Object parseValue(Object value) { if (value == null || value.toString().isBlank()) return null; + try { Method valueOf = getJavaClass().getMethod("valueOf", String.class); return valueOf.invoke(null, value.toString()); @@ -75,6 +80,10 @@ public class EnumFieldType extends DbFieldType { @Override public List getCompareOperators() { - return List.of(CompareOperator.STRING_EQ); + return List.of(CompareOperator.EQ); + } + + public EnumType getType() { + return type; } } \ No newline at end of file diff --git a/src/main/resources/templates/fragments/search_inputs.html b/src/main/resources/templates/fragments/search_inputs.html index a7a0611..b623022 100644 --- a/src/main/resources/templates/fragments/search_inputs.html +++ b/src/main/resources/templates/fragments/search_inputs.html @@ -61,6 +61,20 @@ > + + + + +