From 439f901151a69aafffaa6453d511deac759419db Mon Sep 17 00:00:00 2001 From: Jacob Laursen Date: Wed, 21 Sep 2022 19:10:02 +0200 Subject: [PATCH] Fix ClassCastException for LocalDateTime (#13425) Signed-off-by: Jacob Laursen --- .../java/org/openhab/persistence/jdbc/db/JdbcBaseDAO.java | 8 +++++++- .../org/openhab/persistence/jdbc/db/JdbcBaseDAOTest.java | 5 +++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/db/JdbcBaseDAO.java b/bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/db/JdbcBaseDAO.java index 7dc19e6d4ca52..ac6194151cc3d 100644 --- a/bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/db/JdbcBaseDAO.java +++ b/bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/db/JdbcBaseDAO.java @@ -583,8 +583,14 @@ protected Long objectAsLong(Object v) { return ((Number) v).longValue(); } else if (v instanceof java.sql.Date) { return ((java.sql.Date) v).getTime(); + } else if (v instanceof LocalDateTime) { + return ((LocalDateTime) v).atZone(ZoneId.systemDefault()).toInstant().toEpochMilli(); + } else if (v instanceof Instant) { + return ((Instant) v).toEpochMilli(); + } else if (v instanceof java.sql.Timestamp) { + return ((java.sql.Timestamp) v).getTime(); } - return ((java.sql.Timestamp) v).getTime(); + throw new UnsupportedOperationException("Date of type " + v.getClass().getName() + " is not supported"); } protected Integer objectAsInteger(Object v) { diff --git a/bundles/org.openhab.persistence.jdbc/src/test/java/org/openhab/persistence/jdbc/db/JdbcBaseDAOTest.java b/bundles/org.openhab.persistence.jdbc/src/test/java/org/openhab/persistence/jdbc/db/JdbcBaseDAOTest.java index 019b1271cad7d..79551fcef414a 100644 --- a/bundles/org.openhab.persistence.jdbc/src/test/java/org/openhab/persistence/jdbc/db/JdbcBaseDAOTest.java +++ b/bundles/org.openhab.persistence.jdbc/src/test/java/org/openhab/persistence/jdbc/db/JdbcBaseDAOTest.java @@ -89,6 +89,11 @@ public void testObjectAsStateReturnsValidState() { assertInstanceOf(DateTimeType.class, dateTimeType); assertThat(dateTimeType, is(DateTimeType.valueOf("2021-02-01T23:30:02.049"))); + dateTimeType = jdbcBaseDAO.objectAsState(new DateTimeItem("testDateTimeItem"), null, + LocalDateTime.parse("2021-02-01T23:30:02.049")); + assertInstanceOf(DateTimeType.class, dateTimeType); + assertThat(dateTimeType, is(DateTimeType.valueOf("2021-02-01T23:30:02.049"))); + State hsbType = jdbcBaseDAO.objectAsState(new ColorItem("testColorItem"), null, "184,100,52"); assertInstanceOf(HSBType.class, hsbType); assertThat(hsbType, is(HSBType.valueOf("184,100,52")));