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 <[email protected]>
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;
+ }
}
}