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 e4e3ac53c1 ISIS-3202: non-throwing shallow PK detection
e4e3ac53c1 is described below

commit e4e3ac53c1b55d08481a41b134f5716c52525627
Author: Andi Huber <ahu...@apache.org>
AuthorDate: Sat Sep 3 14:06:20 2022 +0200

    ISIS-3202: non-throwing shallow PK detection
---
 .../isis/applib/services/bookmark/IdStringifier.java     | 16 ++++++++++++++++
 .../core/metamodel/facets/object/entity/EntityFacet.java |  7 ++++---
 .../extensions/commandlog/jpa/dom/CommandLogEntryPK.java |  5 +++++
 .../executionoutbox/jdo/dom/ExecutionOutboxEntryPK.java  |  5 +++++
 .../executionoutbox/jpa/dom/ExecutionOutboxEntryPK.java  |  6 ++++++
 .../extensions/sessionlog/jpa/dom/SessionLogEntryPK.java |  5 +++++
 6 files changed, 41 insertions(+), 3 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 cdb44eb3e6..6344aec6ba 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
@@ -72,6 +72,22 @@ public interface IdStringifier<T> {
      */
     T destring(@NonNull Class<?> targetEntityClass, @NonNull String 
stringified);
 
+    /**
+     * Whether the non-null primary key object is valid,
+     * that is, in the case of a composite, whether it is fully populated.
+     * @implNote in the invalid case, the default implementation generates a 
stacktrace;
+     * @apiNote override for performance reasons if applicable
+     */
+    default boolean isValid(final @NonNull T value) {
+        try {
+            return enstring(value)!=null;
+        } catch (Throwable e) {
+            return false;
+        }
+    }
+
+    // Try.call(()->enstringWithCast(primaryKey)).isSuccess();
+
     /**
      * Entity agnostic variant of {@link IdStringifier}.
      */
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/entity/EntityFacet.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/entity/EntityFacet.java
index 1dfe71c74e..b814ad62a0 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/entity/EntityFacet.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/entity/EntityFacet.java
@@ -30,7 +30,6 @@ import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.applib.services.bookmark.IdStringifier;
 import org.apache.isis.applib.services.repository.EntityState;
 import org.apache.isis.commons.collections.Can;
-import org.apache.isis.commons.functional.Try;
 import org.apache.isis.commons.internal.base._Casts;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.core.config.beans.PersistenceStack;
@@ -69,8 +68,10 @@ public interface EntityFacet extends Facet {
             return idStringifier.destring(owningEntityClass, 
stringifiedPrimaryKey);
         }
         /** shallow PK detection */
-        public boolean isValid(final Object primaryKey) {
-            return Try.call(()->enstringWithCast(primaryKey)).isSuccess();
+        public boolean isValid(final @NonNull Object primaryKey) {
+            return _Casts.castTo(primaryKeyClass, primaryKey)
+                    .map(idStringifier::isValid)
+                    .orElse(false);
         }
         public static <T> PrimaryKeyType<T> getInstance(
                 final @NonNull Class<?> owningEntityClass,
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 43b3124d51..1be2720eeb 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
@@ -82,6 +82,11 @@ public class CommandLogEntryPK implements Serializable {
             return new CommandLogEntryPK(UUID.fromString(stringified));
         }
 
+        @Override
+        public boolean isValid(@NonNull final CommandLogEntryPK value) {
+            return value.getInteractionId()!=null;
+        }
+
     }
 
 
diff --git 
a/extensions/core/executionoutbox/persistence-jdo/src/main/java/org/apache/isis/extensions/executionoutbox/jdo/dom/ExecutionOutboxEntryPK.java
 
b/extensions/core/executionoutbox/persistence-jdo/src/main/java/org/apache/isis/extensions/executionoutbox/jdo/dom/ExecutionOutboxEntryPK.java
index 25e33143ec..007bffca16 100644
--- 
a/extensions/core/executionoutbox/persistence-jdo/src/main/java/org/apache/isis/extensions/executionoutbox/jdo/dom/ExecutionOutboxEntryPK.java
+++ 
b/extensions/core/executionoutbox/persistence-jdo/src/main/java/org/apache/isis/extensions/executionoutbox/jdo/dom/ExecutionOutboxEntryPK.java
@@ -79,5 +79,10 @@ public class ExecutionOutboxEntryPK implements Serializable {
                 final @NonNull String stringified) {
             return new ExecutionOutboxEntryPK(stringified);
         }
+
+        @Override
+        public boolean isValid(@NonNull final ExecutionOutboxEntryPK value) {
+            return value.getInteractionId()!=null;
+        }
     }
 }
diff --git 
a/extensions/core/executionoutbox/persistence-jpa/src/main/java/org/apache/isis/extensions/executionoutbox/jpa/dom/ExecutionOutboxEntryPK.java
 
b/extensions/core/executionoutbox/persistence-jpa/src/main/java/org/apache/isis/extensions/executionoutbox/jpa/dom/ExecutionOutboxEntryPK.java
index bbc25b7f79..bc6190a509 100644
--- 
a/extensions/core/executionoutbox/persistence-jpa/src/main/java/org/apache/isis/extensions/executionoutbox/jpa/dom/ExecutionOutboxEntryPK.java
+++ 
b/extensions/core/executionoutbox/persistence-jpa/src/main/java/org/apache/isis/extensions/executionoutbox/jpa/dom/ExecutionOutboxEntryPK.java
@@ -90,6 +90,12 @@ public class ExecutionOutboxEntryPK implements Serializable {
                 final @NonNull String stringified) {
             return new ExecutionOutboxEntryPK(stringified);
         }
+
+        @Override
+        public boolean isValid(@NonNull final ExecutionOutboxEntryPK value) {
+            return value.getInteractionId()!=null;
+        }
+
     }
 
 }
diff --git 
a/extensions/security/sessionlog/persistence-jpa/src/main/java/org/apache/isis/extensions/sessionlog/jpa/dom/SessionLogEntryPK.java
 
b/extensions/security/sessionlog/persistence-jpa/src/main/java/org/apache/isis/extensions/sessionlog/jpa/dom/SessionLogEntryPK.java
index bde94c4c83..6079e9ed4e 100644
--- 
a/extensions/security/sessionlog/persistence-jpa/src/main/java/org/apache/isis/extensions/sessionlog/jpa/dom/SessionLogEntryPK.java
+++ 
b/extensions/security/sessionlog/persistence-jpa/src/main/java/org/apache/isis/extensions/sessionlog/jpa/dom/SessionLogEntryPK.java
@@ -83,5 +83,10 @@ public class SessionLogEntryPK implements Serializable {
         public SessionLogEntryPK destring(final @NonNull String 
stringifiedUuid) {
             return new SessionLogEntryPK(UUID.fromString(stringifiedUuid));
         }
+
+        @Override
+        public boolean isValid(@NonNull final SessionLogEntryPK value) {
+            return value.getSessionGuid()!=null;
+        }
     }
 }

Reply via email to