danhaywood commented on code in PR #1019:
URL: https://github.com/apache/isis/pull/1019#discussion_r926787409


##########
core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/bookmarks/BookmarkServiceDefault.java:
##########
@@ -141,72 +144,47 @@ public Bookmark bookmarkForElseFail(final @Nullable 
Object domainObject) {
 
     @Override
     public <T> T read(final Class<T> cls, final Serializable value) {
+        if (stringifiers != null) {
+            for (IdStringifier<?> serializer : stringifiers) {
+                if (serializer.handles(cls)) {
+                    return (T) serializer.parse((String)value);
+                }
+            }
+        }
+
 
         if(Bookmark.class.equals(cls)) {
             return _Casts.uncheckedCast(value);
         }
 
         if(Bookmark.class.isAssignableFrom(value.getClass())) {
-            final Bookmark valueBookmark = (Bookmark) value;
-            return _Casts.uncheckedCast(lookup(valueBookmark).orElse(null));
+            final Bookmark valueAsBookmark = (Bookmark) value;
+            return _Casts.uncheckedCast(lookup(valueAsBookmark).orElse(null));
         }
 
         return _Casts.uncheckedCast(value);
     }
 
+    @SuppressWarnings("unchecked")
     @Override
     public Serializable write(final Object value) {
-        if(isPredefinedSerializable(value.getClass())) {
-            return (Serializable) value;
-        } else {
-            return bookmarkForElseFail(value);
+        if (stringifiers != null) {
+            for (IdStringifier stringifier : stringifiers) {
+                if (stringifier.handles(value.getClass())) {
+                    return stringified(stringifier, value);
+                }
+            }
         }
-    }
 
-    // -- HELPER
+        return bookmarkForElseFail(value);
+    }
 
-    private static final Set<Class<? extends Serializable>> 
serializableFinalTypes = _Sets.of(
-            String.class, String[].class,
-            Class.class, Class[].class,
-            Character.class, Character[].class, char[].class,
-            Boolean.class, Boolean[].class, boolean[].class,
-            // Numbers
-            Byte[].class, byte[].class,
-            Short[].class, short[].class,
-            Integer[].class, int[].class,
-            Long[].class, long[].class,
-            Float[].class, float[].class,
-            Double[].class, double[].class
-            );
-
-    private static final List<Class<? extends Serializable>> serializableTypes 
= _Lists.of(
-            java.util.Date.class,
-            java.sql.Date.class,
-            Enum.class,
-            Bookmark.class,
-            TreeState.class
-            );
-
-    private static boolean isPredefinedSerializable(final Class<?> cls) {
-        if(!Serializable.class.isAssignableFrom(cls)) {
-            return false;
-        }
-        // primitive ... boolean, byte, char, short, int, long, float, and 
double.
-        if(cls.isPrimitive() || Number.class.isAssignableFrom(cls)) {
-            return true;
-        }
-        //[ahuber] any non-scalar values could be problematic, so we are 
careful with wild-cards here
-        if(cls.getName().startsWith("java.time.")) {
-            return true;
-        }
-        if(cls.getName().startsWith("org.joda.time.")) {
-            return true;
-        }
-        if(serializableFinalTypes.contains(cls)) {
-            return true;
-        }
-        return serializableTypes.stream().anyMatch(t->t.isAssignableFrom(cls));
+    private static <T> String stringified(IdStringifier<T> stringifier, T 
value) {
+        return stringifier.stringify(value);
     }
 
+    // -- HELPER
+
+    @Inject List<IdStringifier<?>> stringifiers;

Review Comment:
   ok, not sure if I did that here, but it turns out that we framework-defined 
`IdStringifier`s now anyway, so not an issue.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to