This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/master by this push:
     new 534d4ae12e ISIS-3119: simplifies IdStringifier interface
534d4ae12e is described below

commit 534d4ae12eb05e5b5352f06b6d8ffaaec52e2785
Author: Andi Huber <[email protected]>
AuthorDate: Thu Aug 11 12:33:34 2022 +0200

    ISIS-3119: simplifies IdStringifier interface
---
 .../applib/services/bookmark/IdStringifier.java    | 27 +++++++++++++++++-----
 .../ValueSemanticsBasedOnIdStringifier.java        |  9 --------
 .../valuesemantics/BigDecimalValueSemantics.java   |  3 +--
 .../valuesemantics/BigIntegerValueSemantics.java   |  3 +--
 .../valuesemantics/ByteValueSemantics.java         |  3 +--
 .../valuesemantics/CharacterValueSemantics.java    |  3 +--
 .../valuesemantics/IntValueSemantics.java          |  3 +--
 .../valuesemantics/LongValueSemantics.java         |  3 +--
 .../valuesemantics/SerializableValueSemantics.java |  2 +-
 .../valuesemantics/ShortValueSemantics.java        |  3 +--
 .../valuesemantics/StringValueSemantics.java       |  3 +--
 .../valuesemantics/UUIDValueSemantics.java         |  2 +-
 .../IdStringifierForBigDecimal_Test.java           |  4 +---
 .../IdStringifierForBigInteger_Test.java           |  4 +---
 .../valuesemantics/IdStringifierForByte_Test.java  |  4 +---
 .../IdStringifierForByte_primitive_Test.java       |  4 +---
 .../IdStringifierForCharacter_Test.java            |  4 +---
 .../IdStringifierForInteger_Test.java              |  4 +---
 .../IdStringifierForInteger_primitive_Test.java    |  4 +---
 .../valuesemantics/IdStringifierForLong_Test.java  |  4 +---
 .../IdStringifierForLong_primitive_Test.java       |  4 +---
 .../IdStringifierForSerializable_Test.java         |  5 +---
 .../valuesemantics/IdStringifierForShort_Test.java |  4 +---
 .../IdStringifierForShort_primitive_Test.java      |  4 +---
 .../IdStringifierForString_Test.java               |  4 +---
 .../valuesemantics/IdStringifierForUuid_Test.java  |  4 +---
 .../commandlog/jpa/dom/CommandLogEntryPK.java      |  2 +-
 .../dom/CommandLogEntryPK_Stringifier_Test.java    |  4 +---
 .../facets/entity/IdStringifierForCharId.java      |  2 +-
 .../entity/IdStringifierForCharIdentity.java       |  2 +-
 .../facets/entity/IdStringifierForStringId.java    |  2 +-
 .../entity/IdStringifierForStringIdentity.java     |  2 +-
 .../metamodel/facets/entity/JdoEntityFacet.java    | 13 ++++++-----
 .../jpa/integration/entity/JpaEntityFacet.java     | 11 +++++----
 34 files changed, 65 insertions(+), 94 deletions(-)

diff --git 
a/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/IdStringifier.java
 
b/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/IdStringifier.java
index 7ecc3699c4..04c8e96033 100644
--- 
a/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/IdStringifier.java
+++ 
b/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/IdStringifier.java
@@ -23,6 +23,7 @@ package org.apache.isis.applib.services.bookmark;
 import org.springframework.util.ClassUtils;
 
 import org.apache.isis.commons.internal.assertions._Assert;
+import org.apache.isis.commons.internal.exceptions._Exceptions;
 
 import lombok.Getter;
 import lombok.NonNull;
@@ -63,17 +64,17 @@ public interface IdStringifier<T> {
 //     *
 //     * @param candidateValueClass
 //     */
+    @Deprecated
     default boolean handles(final @NonNull Class<?> candidateValueClass) {
         return getCorrespondingClass()
                 
.isAssignableFrom(ClassUtils.resolvePrimitiveIfNecessary(candidateValueClass));
     }
 
-
     /**
      * Convert the value (which will be of the same type as is {@link 
#handles(Class) handled} into a string
      * representation.
      *
-     * @see #destring(String, Class)
+     * @see #destring(String)
      * @see #handles(Class)
      */
     String enstring(@NonNull T value);
@@ -83,11 +84,8 @@ public interface IdStringifier<T> {
      * that can be used to retrieve.
      *
      * @param stringified - as returned by {@link #enstring(Object)}
-     * @param targetEntityClass - the class of the target entity, eg 
<code>Customer</code>.  For both JDO and JPA,
-     *                                 we always have this information 
available, and is needed (at least) by the JDO
-     *                                 implementations of application primary 
keys using built-ins, eg <code>LongIdentity</code>.
      */
-    T destring(@NonNull String stringified, @NonNull Class<?> 
targetEntityClass);
+    T destring(@NonNull String stringified);
 
     abstract class Abstract<T> implements IdStringifier<T> {
 
@@ -107,6 +105,7 @@ public interface IdStringifier<T> {
             this.correspondingClass = correspondingClass;
         }
 
+        @Deprecated
         @Override
         public final boolean handles(final @NonNull Class<?> 
candidateValueClass) {
             return getCorrespondingClass()
@@ -122,6 +121,22 @@ public interface IdStringifier<T> {
             return value.toString();
         }
 
+        /**
+         * Convert a string representation of the identifier (as returned by 
{@link #enstring(Object)}) into an object
+         * that can be used to retrieve.
+         *
+         * @param stringified - as returned by {@link #enstring(Object)}
+         * @param targetEntityClass - the class of the target entity, eg 
<code>Customer</code>.  For both JDO and JPA,
+         *                                 we always have this information 
available, and is needed (at least) by the JDO
+         *                                 implementations of application 
primary keys using built-ins, eg <code>LongIdentity</code>.
+         */
+        public abstract T destring(@NonNull String stringified, @NonNull 
Class<?> targetEntityClass);
+
+        @Override
+        public final T destring(@NonNull final String stringified) {
+            throw _Exceptions.unsupportedOperation();
+        }
+
     }
 
     /**
diff --git 
a/api/applib/src/main/java/org/apache/isis/applib/value/semantics/ValueSemanticsBasedOnIdStringifier.java
 
b/api/applib/src/main/java/org/apache/isis/applib/value/semantics/ValueSemanticsBasedOnIdStringifier.java
index 6a07f027dc..0ebaf7772f 100644
--- 
a/api/applib/src/main/java/org/apache/isis/applib/value/semantics/ValueSemanticsBasedOnIdStringifier.java
+++ 
b/api/applib/src/main/java/org/apache/isis/applib/value/semantics/ValueSemanticsBasedOnIdStringifier.java
@@ -63,11 +63,6 @@ implements
         return value.toString();
     }
 
-    @Override
-    public final T destring(@NonNull final String stringified, @NonNull final 
Class<?> targetEntityClass) {
-        return destring(stringified);
-    }
-
     // -- COMPOSER
 
     @Override
@@ -80,8 +75,4 @@ implements
         return composeFromString(decomposition, this::destring, ()->null);
     }
 
-    // --
-
-    protected abstract T destring(@NonNull String stringified);
-
 }
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/BigDecimalValueSemantics.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/BigDecimalValueSemantics.java
index d4c4b13495..6b0af5ff2e 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/BigDecimalValueSemantics.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/BigDecimalValueSemantics.java
@@ -97,8 +97,7 @@ implements
 
     @Override
     public BigDecimal destring(
-            final @NonNull String stringified,
-            final @NonNull Class<?> targetEntityClass) {
+            final @NonNull String stringified) {
         return new BigDecimal(stringified);
     }
 
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/BigIntegerValueSemantics.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/BigIntegerValueSemantics.java
index e93648d9a2..10dfbb6e13 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/BigIntegerValueSemantics.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/BigIntegerValueSemantics.java
@@ -99,8 +99,7 @@ implements
 
     @Override
     public BigInteger destring(
-            final @NonNull String stringified,
-            final @NonNull Class<?> targetEntityClass) {
+            final @NonNull String stringified) {
         return new BigInteger(stringified);
     }
 
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/ByteValueSemantics.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/ByteValueSemantics.java
index be758b969c..3321e23ce5 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/ByteValueSemantics.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/ByteValueSemantics.java
@@ -93,8 +93,7 @@ implements
 
     @Override
     public Byte destring(
-            final @NonNull String stringified,
-            final @NonNull Class<?> targetEntityClass) {
+            final @NonNull String stringified) {
         return Byte.parseByte(stringified);
     }
 
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/CharacterValueSemantics.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/CharacterValueSemantics.java
index ba5366247c..68b2f0808c 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/CharacterValueSemantics.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/CharacterValueSemantics.java
@@ -112,8 +112,7 @@ implements
 
     @Override
     public Character destring(
-            final @NonNull String stringified,
-            final @NonNull Class<?> targetEntityClass) {
+            final @NonNull String stringified) {
         if(stringified.startsWith(REGULAR_PREFIX)) {
             return stringified.substring(REGULAR_PREFIX.length()).charAt(0);
         }
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/IntValueSemantics.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/IntValueSemantics.java
index 1e52d8dc26..5767b375dc 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/IntValueSemantics.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/IntValueSemantics.java
@@ -93,8 +93,7 @@ implements
 
     @Override
     public Integer destring(
-            final @NonNull String stringified,
-            final @NonNull Class<?> targetEntityClass) {
+            final @NonNull String stringified) {
         return Integer.parseInt(stringified);
     }
 
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/LongValueSemantics.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/LongValueSemantics.java
index 31d9e60c5a..2499a680a1 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/LongValueSemantics.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/LongValueSemantics.java
@@ -93,8 +93,7 @@ implements
 
     @Override
     public Long destring(
-            final @NonNull String stringified,
-            final @NonNull Class<?> targetEntityClass) {
+            final @NonNull String stringified) {
         return Long.parseLong(stringified);
     }
 
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/SerializableValueSemantics.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/SerializableValueSemantics.java
index 252a5c9fd0..19c85d2202 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/SerializableValueSemantics.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/SerializableValueSemantics.java
@@ -77,7 +77,7 @@ extends ValueSemanticsBasedOnIdStringifier<Serializable> {
     // -- HELPER
 
     @Override
-    protected Serializable destring(
+    public Serializable destring(
             @NonNull final String stringified) {
         return destringAs(stringified, Serializable.class);
     }
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/ShortValueSemantics.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/ShortValueSemantics.java
index c5071c822d..065e884076 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/ShortValueSemantics.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/ShortValueSemantics.java
@@ -93,8 +93,7 @@ implements
 
     @Override
     public Short destring(
-            final @NonNull String stringified,
-            final @NonNull Class<?> targetEntityClass) {
+            final @NonNull String stringified) {
         return Short.parseShort(stringified);
     }
 
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/StringValueSemantics.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/StringValueSemantics.java
index 9021cd8787..7a1e709dbc 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/StringValueSemantics.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/StringValueSemantics.java
@@ -88,8 +88,7 @@ implements
 
     @Override
     public String destring(
-            final @NonNull String stringified,
-            final @NonNull Class<?> targetEntityClass) {
+            final @NonNull String stringified) {
         if(stringified.startsWith(REGULAR_PREFIX)) {
             return stringified.substring(REGULAR_PREFIX.length());
         }
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/UUIDValueSemantics.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/UUIDValueSemantics.java
index 75563c08cb..5a57dcd907 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/UUIDValueSemantics.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/UUIDValueSemantics.java
@@ -79,7 +79,7 @@ implements
     }
 
     @Override
-    public UUID destring(final @NonNull String stringified, @NonNull final 
Class<?> targetEntityClass) {
+    public UUID destring(final @NonNull String stringified) {
         return UUID.fromString(stringified);
     }
 
diff --git 
a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/valuesemantics/IdStringifierForBigDecimal_Test.java
 
b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/valuesemantics/IdStringifierForBigDecimal_Test.java
index 22e6594b6b..6d5c85d480 100644
--- 
a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/valuesemantics/IdStringifierForBigDecimal_Test.java
+++ 
b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/valuesemantics/IdStringifierForBigDecimal_Test.java
@@ -50,8 +50,6 @@ class IdStringifierForBigDecimal_Test {
         );
     }
 
-    static class Customer {}
-
     @ParameterizedTest
     @MethodSource()
     void roundtrip(final BigDecimal bigDecimal) {
@@ -59,7 +57,7 @@ class IdStringifierForBigDecimal_Test {
         val stringifier = new BigDecimalValueSemantics();
 
         String stringified = stringifier.enstring(bigDecimal);
-        BigDecimal parse = stringifier.destring(stringified, Customer.class);
+        BigDecimal parse = stringifier.destring(stringified);
 
         assertThat(parse).isEqualTo(bigDecimal);
     }
diff --git 
a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/valuesemantics/IdStringifierForBigInteger_Test.java
 
b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/valuesemantics/IdStringifierForBigInteger_Test.java
index 20ce00e7e7..30bfbce5c0 100644
--- 
a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/valuesemantics/IdStringifierForBigInteger_Test.java
+++ 
b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/valuesemantics/IdStringifierForBigInteger_Test.java
@@ -47,8 +47,6 @@ class IdStringifierForBigInteger_Test {
         );
     }
 
-    static class Customer {}
-
     @ParameterizedTest
     @MethodSource()
     void roundtrip(final BigInteger bigInteger) {
@@ -56,7 +54,7 @@ class IdStringifierForBigInteger_Test {
         val stringifier = new BigIntegerValueSemantics();
 
         String stringified = stringifier.enstring(bigInteger);
-        BigInteger parse = stringifier.destring(stringified, Customer.class);
+        BigInteger parse = stringifier.destring(stringified);
 
         assertThat(parse).isEqualTo(bigInteger);
     }
diff --git 
a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/valuesemantics/IdStringifierForByte_Test.java
 
b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/valuesemantics/IdStringifierForByte_Test.java
index f7424b1a43..e1faa37321 100644
--- 
a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/valuesemantics/IdStringifierForByte_Test.java
+++ 
b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/valuesemantics/IdStringifierForByte_Test.java
@@ -42,8 +42,6 @@ class IdStringifierForByte_Test {
         );
     }
 
-    static class Customer {}
-
     @ParameterizedTest
     @MethodSource()
     void roundtrip(final Byte value) {
@@ -51,7 +49,7 @@ class IdStringifierForByte_Test {
         val stringifier = new ByteValueSemantics();
 
         String stringified = stringifier.enstring(value);
-        Byte parse = stringifier.destring(stringified, Customer.class);
+        Byte parse = stringifier.destring(stringified);
 
         assertThat(parse).isEqualTo(value);
     }
diff --git 
a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/valuesemantics/IdStringifierForByte_primitive_Test.java
 
b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/valuesemantics/IdStringifierForByte_primitive_Test.java
index e3430968bd..7e742d9c57 100644
--- 
a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/valuesemantics/IdStringifierForByte_primitive_Test.java
+++ 
b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/valuesemantics/IdStringifierForByte_primitive_Test.java
@@ -43,8 +43,6 @@ class IdStringifierForByte_primitive_Test {
         );
     }
 
-    static class Customer {}
-
     @ParameterizedTest
     @MethodSource()
     void roundtrip(final byte value) {
@@ -52,7 +50,7 @@ class IdStringifierForByte_primitive_Test {
         val stringifier = new ByteValueSemantics();
 
         String stringified = stringifier.enstring(value);
-        Byte parse = stringifier.destring(stringified, Customer.class);
+        Byte parse = stringifier.destring(stringified);
 
         assertThat(parse).isEqualTo(value);
     }
diff --git 
a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/valuesemantics/IdStringifierForCharacter_Test.java
 
b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/valuesemantics/IdStringifierForCharacter_Test.java
index ea42a09394..3848302928 100644
--- 
a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/valuesemantics/IdStringifierForCharacter_Test.java
+++ 
b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/valuesemantics/IdStringifierForCharacter_Test.java
@@ -57,8 +57,6 @@ class IdStringifierForCharacter_Test {
         );
     }
 
-    static class Customer {}
-
     @ParameterizedTest
     @MethodSource()
     void roundtrip(final char value) {
@@ -66,7 +64,7 @@ class IdStringifierForCharacter_Test {
         val stringifier = new CharacterValueSemantics();
 
         val stringified = stringifier.enstring(value);
-        val parse = stringifier.destring(stringified, Customer.class);
+        val parse = stringifier.destring(stringified);
 
         Assertions.assertThat(parse).isEqualTo(value);
     }
diff --git 
a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/valuesemantics/IdStringifierForInteger_Test.java
 
b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/valuesemantics/IdStringifierForInteger_Test.java
index 6329c3cf4f..ee2cd66029 100644
--- 
a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/valuesemantics/IdStringifierForInteger_Test.java
+++ 
b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/valuesemantics/IdStringifierForInteger_Test.java
@@ -43,8 +43,6 @@ class IdStringifierForInteger_Test {
         );
     }
 
-    static class Customer {}
-
     @ParameterizedTest
     @MethodSource()
     void roundtrip(final Integer value) {
@@ -52,7 +50,7 @@ class IdStringifierForInteger_Test {
         val stringifier = new IntValueSemantics();
 
         String stringified = stringifier.enstring(value);
-        Integer parse = stringifier.destring(stringified, Customer.class);
+        Integer parse = stringifier.destring(stringified);
 
         assertThat(parse).isEqualTo(value);
     }
diff --git 
a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/valuesemantics/IdStringifierForInteger_primitive_Test.java
 
b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/valuesemantics/IdStringifierForInteger_primitive_Test.java
index 1eb6aa1696..fe15d53e28 100644
--- 
a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/valuesemantics/IdStringifierForInteger_primitive_Test.java
+++ 
b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/valuesemantics/IdStringifierForInteger_primitive_Test.java
@@ -42,8 +42,6 @@ class IdStringifierForInteger_primitive_Test {
         );
     }
 
-    static class Customer {}
-
     @ParameterizedTest
     @MethodSource()
     void roundtrip(final int value) {
@@ -51,7 +49,7 @@ class IdStringifierForInteger_primitive_Test {
         val stringifier = new IntValueSemantics();
 
         String stringified = stringifier.enstring(value);
-        Integer parse = stringifier.destring(stringified, Customer.class);
+        Integer parse = stringifier.destring(stringified);
 
         assertThat(parse).isEqualTo(value);
     }
diff --git 
a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/valuesemantics/IdStringifierForLong_Test.java
 
b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/valuesemantics/IdStringifierForLong_Test.java
index 628f854b48..350d2a90cc 100644
--- 
a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/valuesemantics/IdStringifierForLong_Test.java
+++ 
b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/valuesemantics/IdStringifierForLong_Test.java
@@ -42,8 +42,6 @@ class IdStringifierForLong_Test {
         );
     }
 
-    static class Customer {}
-
     @ParameterizedTest
     @MethodSource()
     void roundtrip(final Long value) {
@@ -51,7 +49,7 @@ class IdStringifierForLong_Test {
         val stringifier = new LongValueSemantics();
 
         String stringified = stringifier.enstring(value);
-        Long parse = stringifier.destring(stringified, Customer.class);
+        Long parse = stringifier.destring(stringified);
 
         assertThat(parse).isEqualTo(value);
     }
diff --git 
a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/valuesemantics/IdStringifierForLong_primitive_Test.java
 
b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/valuesemantics/IdStringifierForLong_primitive_Test.java
index 6d64e88e31..bae004145e 100644
--- 
a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/valuesemantics/IdStringifierForLong_primitive_Test.java
+++ 
b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/valuesemantics/IdStringifierForLong_primitive_Test.java
@@ -43,8 +43,6 @@ class IdStringifierForLong_primitive_Test {
         );
     }
 
-    static class Customer {}
-
     @ParameterizedTest
     @MethodSource()
     void roundtrip(final long value) {
@@ -52,7 +50,7 @@ class IdStringifierForLong_primitive_Test {
         val stringifier = new LongValueSemantics();
 
         String stringified = stringifier.enstring(value);
-        Long parse = stringifier.destring(stringified, Customer.class);
+        Long parse = stringifier.destring(stringified);
 
         assertThat(parse).isEqualTo(value);
     }
diff --git 
a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/valuesemantics/IdStringifierForSerializable_Test.java
 
b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/valuesemantics/IdStringifierForSerializable_Test.java
index 646fe680ff..b62c780834 100644
--- 
a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/valuesemantics/IdStringifierForSerializable_Test.java
+++ 
b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/valuesemantics/IdStringifierForSerializable_Test.java
@@ -40,9 +40,6 @@ class IdStringifierForSerializable_Test {
 
     // -- SCENARIO
 
-    static class Customer {
-    }
-
     @Value
     static class CustomerPK implements Serializable{
         private static final long serialVersionUID = 1L;
@@ -71,7 +68,7 @@ class IdStringifierForSerializable_Test {
         val stringifier = new SerializableValueSemantics(codec);
 
         String stringified = stringifier.enstring(value);
-        Serializable parse = stringifier.destring(stringified, Customer.class);
+        Serializable parse = stringifier.destring(stringified);
 
         assertThat(parse).isEqualTo(value);
     }
diff --git 
a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/valuesemantics/IdStringifierForShort_Test.java
 
b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/valuesemantics/IdStringifierForShort_Test.java
index 27d8907785..a68ed23389 100644
--- 
a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/valuesemantics/IdStringifierForShort_Test.java
+++ 
b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/valuesemantics/IdStringifierForShort_Test.java
@@ -42,8 +42,6 @@ class IdStringifierForShort_Test {
         );
     }
 
-    static class Customer {}
-
     @ParameterizedTest
     @MethodSource()
     void roundtrip(final Short value) {
@@ -51,7 +49,7 @@ class IdStringifierForShort_Test {
         val stringifier = new ShortValueSemantics();
 
         String stringified = stringifier.enstring(value);
-        Short parse = stringifier.destring(stringified, Customer.class);
+        Short parse = stringifier.destring(stringified);
 
         assertThat(parse).isEqualTo(value);
     }
diff --git 
a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/valuesemantics/IdStringifierForShort_primitive_Test.java
 
b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/valuesemantics/IdStringifierForShort_primitive_Test.java
index 9ad428493c..c10552c669 100644
--- 
a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/valuesemantics/IdStringifierForShort_primitive_Test.java
+++ 
b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/valuesemantics/IdStringifierForShort_primitive_Test.java
@@ -42,8 +42,6 @@ class IdStringifierForShort_primitive_Test {
         );
     }
 
-    static class Customer {}
-
     @ParameterizedTest
     @MethodSource()
     void roundtrip(final short value) {
@@ -51,7 +49,7 @@ class IdStringifierForShort_primitive_Test {
         val stringifier = new ShortValueSemantics();
 
         String stringified = stringifier.enstring(value);
-        Short parse = stringifier.destring(stringified, Customer.class);
+        Short parse = stringifier.destring(stringified);
 
         assertThat(parse).isEqualTo(value);
     }
diff --git 
a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/valuesemantics/IdStringifierForString_Test.java
 
b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/valuesemantics/IdStringifierForString_Test.java
index be2a222542..cdb7e53d8f 100644
--- 
a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/valuesemantics/IdStringifierForString_Test.java
+++ 
b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/valuesemantics/IdStringifierForString_Test.java
@@ -47,8 +47,6 @@ class IdStringifierForString_Test {
         );
     }
 
-    static class Customer {}
-
     @ParameterizedTest
     @MethodSource()
     void roundtrip(final String value) {
@@ -56,7 +54,7 @@ class IdStringifierForString_Test {
         val stringifier = new StringValueSemantics();
 
         val stringified = stringifier.enstring(value);
-        val parse = stringifier.destring(stringified, Customer.class);
+        val parse = stringifier.destring(stringified);
 
         Assertions.assertThat(parse).isEqualTo(value);
     }
diff --git 
a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/valuesemantics/IdStringifierForUuid_Test.java
 
b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/valuesemantics/IdStringifierForUuid_Test.java
index 72b57bfa35..9aad689fa4 100644
--- 
a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/valuesemantics/IdStringifierForUuid_Test.java
+++ 
b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/valuesemantics/IdStringifierForUuid_Test.java
@@ -41,8 +41,6 @@ class IdStringifierForUuid_Test {
         );
     }
 
-    static class Customer {}
-
     @ParameterizedTest
     @MethodSource()
     void roundtrip(final UUID value) {
@@ -50,7 +48,7 @@ class IdStringifierForUuid_Test {
         val stringifier = new UUIDValueSemantics();
 
         String stringified = stringifier.enstring(value);
-        UUID parse = stringifier.destring(stringified, Customer.class);
+        UUID parse = stringifier.destring(stringified);
 
         assertThat(parse).isEqualTo(value);
     }
diff --git 
a/extensions/core/commandlog/persistence-jpa/src/main/java/org/apache/isis/extensions/commandlog/jpa/dom/CommandLogEntryPK.java
 
b/extensions/core/commandlog/persistence-jpa/src/main/java/org/apache/isis/extensions/commandlog/jpa/dom/CommandLogEntryPK.java
index 0e8a8c0ae2..049e5f634d 100644
--- 
a/extensions/core/commandlog/persistence-jpa/src/main/java/org/apache/isis/extensions/commandlog/jpa/dom/CommandLogEntryPK.java
+++ 
b/extensions/core/commandlog/persistence-jpa/src/main/java/org/apache/isis/extensions/commandlog/jpa/dom/CommandLogEntryPK.java
@@ -77,7 +77,7 @@ public class CommandLogEntryPK implements Serializable {
         }
 
         @Override
-        protected CommandLogEntryPK destring(
+        public CommandLogEntryPK destring(
                 @NonNull final String stringified) {
             return new CommandLogEntryPK(UUID.fromString(stringified));
         }
diff --git 
a/extensions/core/commandlog/persistence-jpa/src/test/java/org/apache/isis/extensions/commandlog/jpa/dom/CommandLogEntryPK_Stringifier_Test.java
 
b/extensions/core/commandlog/persistence-jpa/src/test/java/org/apache/isis/extensions/commandlog/jpa/dom/CommandLogEntryPK_Stringifier_Test.java
index 31a2fc76f3..b9aa8c8b55 100644
--- 
a/extensions/core/commandlog/persistence-jpa/src/test/java/org/apache/isis/extensions/commandlog/jpa/dom/CommandLogEntryPK_Stringifier_Test.java
+++ 
b/extensions/core/commandlog/persistence-jpa/src/test/java/org/apache/isis/extensions/commandlog/jpa/dom/CommandLogEntryPK_Stringifier_Test.java
@@ -41,8 +41,6 @@ class CommandLogEntryPK_Stringifier_Test {
         );
     }
 
-    static class Customer {}
-
     @ParameterizedTest
     @MethodSource()
     void roundtrip(final UUID uuid) {
@@ -51,7 +49,7 @@ class CommandLogEntryPK_Stringifier_Test {
         val stringifier = new CommandLogEntryPK.Semantics();
 
         String stringified = stringifier.enstring(value);
-        val parse = stringifier.destring(stringified, Customer.class);
+        val parse = stringifier.destring(stringified);
 
         assertThat(parse).isEqualTo(value);
     }
diff --git 
a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/metamodel/facets/entity/IdStringifierForCharId.java
 
b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/metamodel/facets/entity/IdStringifierForCharId.java
index 00797bb422..9835a2641f 100644
--- 
a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/metamodel/facets/entity/IdStringifierForCharId.java
+++ 
b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/metamodel/facets/entity/IdStringifierForCharId.java
@@ -59,7 +59,7 @@ public class IdStringifierForCharId extends 
IdStringifier.Abstract<CharId> {
     public CharId destring(
             final @NonNull String stringified,
             final @NonNull Class<?> targetEntityClass) {
-        val idValue = idStringifierForCharacter.destring(stringified, 
targetEntityClass);
+        val idValue = idStringifierForCharacter.destring(stringified);
         return new CharId(targetEntityClass, idValue);
     }
 }
diff --git 
a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/metamodel/facets/entity/IdStringifierForCharIdentity.java
 
b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/metamodel/facets/entity/IdStringifierForCharIdentity.java
index 5e27490c2b..3ce97b71b6 100644
--- 
a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/metamodel/facets/entity/IdStringifierForCharIdentity.java
+++ 
b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/metamodel/facets/entity/IdStringifierForCharIdentity.java
@@ -59,7 +59,7 @@ public class IdStringifierForCharIdentity extends 
IdStringifier.Abstract<CharIde
     public CharIdentity destring(
             final @NonNull String stringified,
             final @NonNull Class<?> targetEntityClass) {
-        val idValue = idStringifierForCharacter.destring(stringified, 
targetEntityClass);
+        val idValue = idStringifierForCharacter.destring(stringified);
         return new CharIdentity(targetEntityClass, idValue);
     }
 }
diff --git 
a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/metamodel/facets/entity/IdStringifierForStringId.java
 
b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/metamodel/facets/entity/IdStringifierForStringId.java
index ffd4e4e94e..cfcd09b637 100644
--- 
a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/metamodel/facets/entity/IdStringifierForStringId.java
+++ 
b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/metamodel/facets/entity/IdStringifierForStringId.java
@@ -59,7 +59,7 @@ public class IdStringifierForStringId extends 
IdStringifier.Abstract<StringIdent
     public StringIdentity destring(
             final @NonNull String stringified,
             final @NonNull Class<?> targetEntityClass) {
-        val idValue = idStringifierForString.destring(stringified, 
targetEntityClass);
+        val idValue = idStringifierForString.destring(stringified);
         return new StringIdentity(targetEntityClass, idValue);
     }
 }
diff --git 
a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/metamodel/facets/entity/IdStringifierForStringIdentity.java
 
b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/metamodel/facets/entity/IdStringifierForStringIdentity.java
index 0f5c604840..b10991ae3a 100644
--- 
a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/metamodel/facets/entity/IdStringifierForStringIdentity.java
+++ 
b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/metamodel/facets/entity/IdStringifierForStringIdentity.java
@@ -59,7 +59,7 @@ public class IdStringifierForStringIdentity extends 
IdStringifier.Abstract<Strin
     public StringIdentity destring(
             final @NonNull String stringified,
             final @NonNull Class<?> targetEntityClass) {
-        val idValue = idStringifierForString.destring(stringified, 
targetEntityClass);
+        val idValue = idStringifierForString.destring(stringified);
         return new StringIdentity(targetEntityClass, idValue);
     }
 }
diff --git 
a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/metamodel/facets/entity/JdoEntityFacet.java
 
b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/metamodel/facets/entity/JdoEntityFacet.java
index 4c92f3a0b1..426a9eeea6 100644
--- 
a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/metamodel/facets/entity/JdoEntityFacet.java
+++ 
b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/metamodel/facets/entity/JdoEntityFacet.java
@@ -38,8 +38,6 @@ import org.apache.isis.applib.query.NamedQuery;
 import org.apache.isis.applib.query.Query;
 import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.applib.services.bookmark.IdStringifier;
-import 
org.apache.isis.core.metamodel.services.objectlifecycle.ObjectLifecyclePublisher;
-import org.apache.isis.core.runtime.idstringifier.IdStringifierLookupService;
 import org.apache.isis.applib.services.exceprecog.Category;
 import org.apache.isis.applib.services.exceprecog.ExceptionRecognizerService;
 import org.apache.isis.applib.services.repository.EntityState;
@@ -58,9 +56,10 @@ import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.object.entity.EntityFacet;
 import org.apache.isis.core.metamodel.objectmanager.ObjectManager;
+import 
org.apache.isis.core.metamodel.services.objectlifecycle.ObjectLifecyclePublisher;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.transaction.changetracking.EntityChangeTracker;
+import org.apache.isis.core.runtime.idstringifier.IdStringifierLookupService;
 import 
org.apache.isis.persistence.jdo.datanucleus.entities.DnEntityStateProvider;
 import 
org.apache.isis.persistence.jdo.metamodel.facets.object.persistencecapable.JdoPersistenceCapableFacetFactory;
 import org.apache.isis.persistence.jdo.provider.entities.JdoFacetContext;
@@ -157,7 +156,9 @@ implements EntityFacet {
             val primaryKeyType = primaryKeyTypeFor(entityClass);
 
             val idStringifier = 
idStringifierLookupService.lookupElseFail(primaryKeyType);
-            val primaryKey = idStringifier.destring(bookmark.getIdentifier(), 
entityClass);
+            val primaryKey = _Casts.castTo(IdStringifier.Abstract.class, 
idStringifier)
+                    
.map(stringifier->stringifier.destring(bookmark.getIdentifier(), entityClass))
+                    
.orElseGet(()->idStringifier.destring(bookmark.getIdentifier()));
 
             val fetchPlan = persistenceManager.getFetchPlan();
             fetchPlan.addGroup(FetchGroup.DEFAULT);
@@ -187,11 +188,11 @@ implements EntityFacet {
 
     private Map<Class<?>, Class<?>> primaryKeyClassByEntityClass = new 
ConcurrentHashMap<>();
 
-    private Class<?> primaryKeyTypeFor(Class<?> entityClass) {
+    private Class<?> primaryKeyTypeFor(final Class<?> entityClass) {
         return primaryKeyClassByEntityClass.computeIfAbsent(entityClass, 
this::lookupPrimaryKeyTypeFor);
     }
 
-    private Class<?> lookupPrimaryKeyTypeFor(Class<?> entityClass) {
+    private Class<?> lookupPrimaryKeyTypeFor(final Class<?> entityClass) {
 
         val persistenceManager = getPersistenceManager();
         val pmf = (JDOPersistenceManagerFactory) 
persistenceManager.getPersistenceManagerFactory();
diff --git 
a/persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/entity/JpaEntityFacet.java
 
b/persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/entity/JpaEntityFacet.java
index b4fe2c3dcf..74138f2944 100644
--- 
a/persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/entity/JpaEntityFacet.java
+++ 
b/persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/entity/JpaEntityFacet.java
@@ -35,7 +35,6 @@ import org.apache.isis.applib.query.NamedQuery;
 import org.apache.isis.applib.query.Query;
 import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.applib.services.bookmark.IdStringifier;
-import org.apache.isis.core.runtime.idstringifier.IdStringifierLookupService;
 import org.apache.isis.applib.services.registry.ServiceRegistry;
 import org.apache.isis.applib.services.repository.EntityState;
 import org.apache.isis.commons.collections.Can;
@@ -48,6 +47,7 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.object.entity.EntityFacet;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.runtime.idstringifier.IdStringifierLookupService;
 
 import lombok.NonNull;
 import lombok.val;
@@ -106,12 +106,12 @@ public class JpaEntityFacet
         return identifierFor(primaryKeyType, _Casts.uncheckedCast(primaryKey));
     }
 
-    private <T> String identifierFor(Class<T> primaryKeyType, T primaryKey) {
+    private <T> String identifierFor(final Class<T> primaryKeyType, final T 
primaryKey) {
         val stringifier = lookupIdStringifier(primaryKeyType);
         return stringifier.enstring(primaryKey);
     }
 
-    private <T> IdStringifier<T> lookupIdStringifier(Class<T> primaryKeyType) {
+    private <T> IdStringifier<T> lookupIdStringifier(final Class<T> 
primaryKeyType) {
         return 
_Casts.uncheckedCast(idStringifierLookupService.lookupElseFail(primaryKeyType));
     }
 
@@ -122,7 +122,10 @@ public class JpaEntityFacet
         log.debug("fetchEntity; bookmark={}", bookmark);
 
         val idStringifier = lookupIdStringifier(getPrimaryKeyType());
-        val primaryKey = idStringifier.destring(bookmark.getIdentifier(), 
entityClass);
+        val primaryKey = _Casts.castTo(IdStringifier.Abstract.class, 
idStringifier)
+                
.map(stringifier->stringifier.destring(bookmark.getIdentifier(), entityClass))
+                
.orElseGet(()->idStringifier.destring(bookmark.getIdentifier()));
+
         val entityManager = getEntityManager();
         val entityPojo = entityManager.find(entityClass, primaryKey);
 

Reply via email to