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; + } } }