From 30384b738108b2a9d0354de466638a8af9623f59 Mon Sep 17 00:00:00 2001 From: Francesco Date: Wed, 11 Oct 2023 14:40:21 +0200 Subject: [PATCH] Support for UUID type (#13) --- .../controller/DefaultDbAdminController.java | 4 ++- .../external/dbmapping/DbFieldType.java | 28 ++++++++++++++++++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/src/main/java/tech/ailef/dbadmin/external/controller/DefaultDbAdminController.java b/src/main/java/tech/ailef/dbadmin/external/controller/DefaultDbAdminController.java index 8a70224..3705ecf 100644 --- a/src/main/java/tech/ailef/dbadmin/external/controller/DefaultDbAdminController.java +++ b/src/main/java/tech/ailef/dbadmin/external/controller/DefaultDbAdminController.java @@ -252,7 +252,9 @@ public class DefaultDbAdminController { public String show(Model model, @PathVariable String className, @PathVariable String id) { DbObjectSchema schema = dbAdmin.findSchemaByClassName(className); - DbObject object = repository.findById(schema, id).orElseThrow(() -> { + Object pkValue = schema.getPrimaryKey().getType().parseValue(id); + + DbObject object = repository.findById(schema, pkValue).orElseThrow(() -> { return new DbAdminNotFoundException( schema.getJavaClass().getSimpleName() + " with ID " + id + " not found." ); diff --git a/src/main/java/tech/ailef/dbadmin/external/dbmapping/DbFieldType.java b/src/main/java/tech/ailef/dbadmin/external/dbmapping/DbFieldType.java index 10b3768..f63aaca 100644 --- a/src/main/java/tech/ailef/dbadmin/external/dbmapping/DbFieldType.java +++ b/src/main/java/tech/ailef/dbadmin/external/dbmapping/DbFieldType.java @@ -38,6 +38,7 @@ import jakarta.persistence.OneToMany; import jakarta.persistence.OneToOne; import tech.ailef.dbadmin.external.dto.CompareOperator; import tech.ailef.dbadmin.external.exceptions.DbAdminException; +import tech.ailef.dbadmin.external.exceptions.UnsupportedFieldTypeException; /** * The enum for supported database field types. @@ -429,6 +430,29 @@ public enum DbFieldType { throw new DbAdminException("Binary fields are not comparable"); } }, + UUID { + + @Override + public String getFragmentName() { + return "text"; + } + + @Override + public Object parseValue(Object value) { + return java.util.UUID.fromString(value.toString()); + } + + @Override + public Class getJavaClass() { + return java.util.UUID.class; + } + + @Override + public List getCompareOperators() { + return List.of(CompareOperator.STRING_EQ, CompareOperator.CONTAINS); + } + + }, ONE_TO_MANY { @Override public String getFragmentName() { @@ -609,10 +633,12 @@ public enum DbFieldType { return OFFSET_DATE_TIME; } else if (klass == byte.class || klass == Byte.class) { return BYTE; + } else if (klass == java.util.UUID.class) { + return UUID; } else if (klass == char.class || klass == Character.class) { return CHAR; } else { - throw new DbAdminException("Unsupported field type: " + klass); + throw new UnsupportedFieldTypeException("Unsupported field type: " + klass); } } }