From 1172f84c1ac64f51b23eb22da48d871211841328 Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Fri, 22 Sep 2023 10:26:38 +0200 Subject: [PATCH] Fix cast to Java type --- org.argeo.cms.jcr/src/org/argeo/jcr/Jcr.java | 31 ++++++++++++++++---- 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/org.argeo.cms.jcr/src/org/argeo/jcr/Jcr.java b/org.argeo.cms.jcr/src/org/argeo/jcr/Jcr.java index bdeaac7..b6ee85e 100644 --- a/org.argeo.cms.jcr/src/org/argeo/jcr/Jcr.java +++ b/org.argeo.cms.jcr/src/org/argeo/jcr/Jcr.java @@ -14,6 +14,7 @@ import java.util.Date; import java.util.GregorianCalendar; import java.util.Iterator; import java.util.List; +import java.util.Objects; import javax.jcr.Binary; import javax.jcr.ItemNotFoundException; @@ -595,6 +596,7 @@ public class Jcr { */ @SuppressWarnings("unchecked") public static T getAs(Node node, String property, T defaultValue) { + Objects.requireNonNull(defaultValue); try { // TODO deal with multiple if (node.hasProperty(property)) { @@ -619,13 +621,30 @@ public class Jcr { @SuppressWarnings("unchecked") public static T getAs(Node node, String property, Class clss) { - if (String.class.isAssignableFrom(clss)) { - return (T) get(node, property); - } else if (Long.class.isAssignableFrom(clss)) { - return (T) get(node, property); - } else { - throw new IllegalArgumentException("Unsupported format " + clss); + try { + Property p = node.getProperty(property); + try { + if (p.isMultiple()) { + throw new UnsupportedOperationException("Multiple values properties are not supported"); + } + Value value = p.getValue(); + return (T) get(value); + } catch (ClassCastException e) { + throw new IllegalArgumentException( + "Cannot cast property of type " + PropertyType.nameFromValue(p.getType()), e); + } + } catch (RepositoryException e) { + throw new JcrException("Cannot retrieve property " + property + " from " + node, e); } +// if (String.class.isAssignableFrom(clss)) { +// return (T) get(node, property); +// } else if (Long.class.isAssignableFrom(clss)) { +// return (T) get(node, property); +// } else if (Boolean.class.isAssignableFrom(clss)) { +// return (T) get(node, property); +// } else { +// throw new IllegalArgumentException("Unsupported format " + clss); +// } } /** -- 2.30.2