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]