Improve ACR attribute typing.
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / acr / AbstractContent.java
index c6e07e638b9b24b7bd0ebee667446b5de25b05ed..54d7410155961e6f1522f88fff4a1eddf7509e97 100644 (file)
@@ -13,6 +13,7 @@ import java.util.Set;
 import javax.xml.namespace.QName;
 
 import org.argeo.api.acr.Content;
+import org.argeo.api.acr.CrAttributeType;
 import org.argeo.api.acr.CrName;
 import org.argeo.api.acr.NamespaceUtils;
 import org.argeo.api.acr.spi.ProvidedContent;
@@ -60,22 +61,18 @@ public abstract class AbstractContent extends AbstractMap<QName, Object> impleme
                if (value == null)
                        return new ArrayList<>();
                if (value instanceof List) {
-                       if (isDefaultAttrTypeRequested(clss))
+                       if (clss.isAssignableFrom(Object.class))
                                return (List<A>) value;
                        List<A> res = new ArrayList<>();
                        List<?> lst = (List<?>) value;
                        for (Object o : lst) {
-                               A item = clss.isAssignableFrom(String.class) ? (A) o.toString() : (A) o;
+                               A item = CrAttributeType.cast(clss, o).get();
                                res.add(item);
                        }
                        return res;
                } else {// singleton
-//                     try {
-                       A res = (A) value;
+                       A res = CrAttributeType.cast(clss, value).get();
                        return Collections.singletonList(res);
-//                     } catch (ClassCastException e) {
-//                             return Optional.empty();
-//                     }
                }
        }
 
@@ -151,10 +148,10 @@ public abstract class AbstractContent extends AbstractMap<QName, Object> impleme
        /*
         * UTILITIES
         */
-       protected boolean isDefaultAttrTypeRequested(Class<?> clss) {
-               // check whether clss is Object.class
-               return clss.isAssignableFrom(Object.class);
-       }
+//     protected boolean isDefaultAttrTypeRequested(Class<?> clss) {
+//             // check whether clss is Object.class
+//             return clss.isAssignableFrom(Object.class);
+//     }
 
 //     @Override
 //     public String toString() {
@@ -188,7 +185,7 @@ public abstract class AbstractContent extends AbstractMap<QName, Object> impleme
 
        @Override
        public <A> Optional<A> get(QName key, Class<A> clss) {
-               return null;
+               return Optional.empty();
        }
 
        protected void removeAttr(QName key) {