From 1142e393e722964021fc7777804018ba68db1dd4 Mon Sep 17 00:00:00 2001 From: Francesco Date: Thu, 5 Oct 2023 14:43:20 +0200 Subject: [PATCH] Enabled OffsetDateTime support --- .../external/dbmapping/DbFieldType.java | 50 +++++++++---------- .../external/dbmapping/DbFieldValue.java | 13 +++++ .../resources/templates/model/schema.html | 2 +- 3 files changed, 39 insertions(+), 26 deletions(-) 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 64ef97b..127f5ae 100644 --- a/src/main/java/tech/ailef/dbadmin/external/dbmapping/DbFieldType.java +++ b/src/main/java/tech/ailef/dbadmin/external/dbmapping/DbFieldType.java @@ -123,29 +123,29 @@ public enum DbFieldType { return List.of(CompareOperator.GT, CompareOperator.EQ, CompareOperator.LT); } }, -// OFFSET_DATE_TIME { -// @Override -// public String getFragmentName(FragmentContext c) { -// return "text"; -// } -// -// @Override -// public Object parseValue(Object value) { -// if (value == null) return null; -// return OffsetDateTime.parse(value.toString()); -// } -// -// @Override -// public Class getJavaClass() { -// return OffsetDateTime.class; -// } -// -// @Override -// public List getCompareOperators() { -// return List.of(CompareOperator.AFTER, CompareOperator.STRING_EQ, CompareOperator.BEFORE); -// } -// -// }, + OFFSET_DATE_TIME { + @Override + public String getFragmentName(FragmentContext c) { + return "datetime"; + } + + @Override + public Object parseValue(Object value) { + if (value == null) return null; + return OffsetDateTime.parse(value.toString()); + } + + @Override + public Class getJavaClass() { + return OffsetDateTime.class; + } + + @Override + public List getCompareOperators() { + return List.of(CompareOperator.AFTER, CompareOperator.STRING_EQ, CompareOperator.BEFORE); + } + + }, LOCAL_DATE { @Override public String getFragmentName(FragmentContext c) { @@ -450,8 +450,8 @@ public enum DbFieldType { return BIG_DECIMAL; } else if (klass == byte[].class) { return BYTE_ARRAY; -// } else if (klass == OffsetDateTime.class) { -// return OFFSET_DATE_TIME; + } else if (klass == OffsetDateTime.class) { + return OFFSET_DATE_TIME; } else { throw new DbAdminException("Unsupported field type: " + klass); } diff --git a/src/main/java/tech/ailef/dbadmin/external/dbmapping/DbFieldValue.java b/src/main/java/tech/ailef/dbadmin/external/dbmapping/DbFieldValue.java index d294a83..8c87494 100644 --- a/src/main/java/tech/ailef/dbadmin/external/dbmapping/DbFieldValue.java +++ b/src/main/java/tech/ailef/dbadmin/external/dbmapping/DbFieldValue.java @@ -19,6 +19,8 @@ package tech.ailef.dbadmin.external.dbmapping; +import java.time.LocalDateTime; +import java.time.OffsetDateTime; import java.util.Objects; import com.fasterxml.jackson.annotation.JsonIgnore; @@ -38,6 +40,17 @@ public class DbFieldValue { } public Object getValue() { + /* + * Special handling of OffsetDateTime to be compatbile + * with the HTML datetime-local input field: we "cast" + * it to a LocalDateTime so the toString() method will + * not produce the ending "Z" which prevents the datepicker + * to be autofilled on edit pages. + */ + if (value instanceof OffsetDateTime) { + return LocalDateTime.from((OffsetDateTime)value); + } + return value; } diff --git a/src/main/resources/templates/model/schema.html b/src/main/resources/templates/model/schema.html index 1ee6e34..2578413 100644 --- a/src/main/resources/templates/model/schema.html +++ b/src/main/resources/templates/model/schema.html @@ -70,7 +70,7 @@

Errors

-
    +