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

ahuber pushed a commit to branch 3522-dead.end
in repository https://gitbox.apache.org/repos/asf/causeway.git

commit edc11f9b36a3780b04c5e4f53364eb33e1d52561
Author: andi-huber <[email protected]>
AuthorDate: Wed Jul 19 05:55:36 2023 +0200

    CAUSEWAY-3522: intermediate commit; not sure what to do in ManagedAction
---
 .../interactions/managed/ManagedAction.java        |  7 +++++-
 .../object/_ManagedObjectEntityHybrid.java         | 29 ++++++----------------
 .../metamodel/facets/entity/JdoEntityFacet.java    |  2 +-
 3 files changed, 15 insertions(+), 23 deletions(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/ManagedAction.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/ManagedAction.java
index e7a70bb374..71a8e71976 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/ManagedAction.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/ManagedAction.java
@@ -25,6 +25,7 @@ import org.springframework.lang.Nullable;
 
 import org.apache.causeway.applib.Identifier;
 import org.apache.causeway.applib.annotation.Where;
+import 
org.apache.causeway.applib.exceptions.unrecoverable.ObjectNotFoundException;
 import org.apache.causeway.applib.services.registry.ServiceRegistry;
 import org.apache.causeway.applib.services.routing.RoutingService;
 import org.apache.causeway.commons.collections.Can;
@@ -94,7 +95,11 @@ public final class ManagedAction extends ManagedMember {
             may still want to provide an action result, that does not need the 
mixee instance to be produced;
             eg. delete ApplicationUser mixin that returns a collection of all 
remaining users
             after deleting the selected one */
-        if(!owner.getSpecialization().isEntity()) {
+        if(owner.getSpecification().isEntity()) {
+            if(owner.getSpecialization().isEmpty()) {
+                throw new ObjectNotFoundException("?"); // OID not available 
at this point
+            }
+        } else {
             
_Assert.assertFalse(ManagedObjects.isNullOrUnspecifiedOrEmpty(owner), ()->
                     String.format("cannot create managed-action for action %s 
with an empty owner %s",
                             action.getFeatureIdentifier(),
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/_ManagedObjectEntityHybrid.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/_ManagedObjectEntityHybrid.java
index d60157259a..6a0ef17b89 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/_ManagedObjectEntityHybrid.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/_ManagedObjectEntityHybrid.java
@@ -20,7 +20,6 @@ package org.apache.causeway.core.metamodel.object;
 
 import java.util.Optional;
 
-import 
org.apache.causeway.applib.exceptions.unrecoverable.ObjectNotFoundException;
 import org.apache.causeway.applib.services.bookmark.Bookmark;
 import org.apache.causeway.applib.services.repository.EntityState;
 import org.apache.causeway.commons.internal.assertions._Assert;
@@ -115,7 +114,7 @@ implements _Refetchable {
             if(newMorphState.isBookmarked()) {
                 _Assert.assertTrue(isVariantBookmarked(), ()->"successful 
transition");
             } else if(newMorphState.isNotFound()) {
-                _Assert.assertTrue(isVariantRemoved(), ()->"successful 
transition");
+                _Assert.assertTrue(isVariantNotFound(), ()->"successful 
transition");
             }
             this.morphState = newMorphState;
         }
@@ -124,20 +123,14 @@ implements _Refetchable {
 
     @Override @SneakyThrows
     public Object getPojo() {
-        if(isVariantRemoved()) {
+        if(isVariantNotFound()) {
             return null; // don't reassess
         }
-
-        // handle the 'deleted' / 'not found' case gracefully ...
-        try {
-            val pojo = variant.getPojo();
-            triggerReassessment();
-            return pojo;
-        } catch (ObjectNotFoundException e) {
-            // if object not found, transition to 'removed' state
-            makeNotFound();
-            return null;
-        }
+        // re-fetch if required
+        val pojo = variant.getPojo();
+        // reassess variant
+        _Blackhole.consume(getEntityState());
+        return pojo;
     }
 
     @Override
@@ -157,12 +150,6 @@ implements _Refetchable {
 
     // -- HELPER
 
-    private void triggerReassessment() {
-        if(morphState.isTransient()) {
-            _Blackhole.consume(getEntityState());
-        }
-    }
-
     private boolean isVariantBookmarked() {
         return variant instanceof _ManagedObjectEntityBookmarked;
     }
@@ -171,7 +158,7 @@ implements _Refetchable {
         return variant instanceof _ManagedObjectEntityTransient;
     }
 
-    private boolean isVariantRemoved() {
+    private boolean isVariantNotFound() {
         return variant instanceof _ManagedObjectEntityRemoved;
     }
 
diff --git 
a/persistence/jdo/datanucleus/src/main/java/org/apache/causeway/persistence/jdo/datanucleus/metamodel/facets/entity/JdoEntityFacet.java
 
b/persistence/jdo/datanucleus/src/main/java/org/apache/causeway/persistence/jdo/datanucleus/metamodel/facets/entity/JdoEntityFacet.java
index fbf9a623d4..a96c7f5cc4 100644
--- 
a/persistence/jdo/datanucleus/src/main/java/org/apache/causeway/persistence/jdo/datanucleus/metamodel/facets/entity/JdoEntityFacet.java
+++ 
b/persistence/jdo/datanucleus/src/main/java/org/apache/causeway/persistence/jdo/datanucleus/metamodel/facets/entity/JdoEntityFacet.java
@@ -200,7 +200,7 @@ implements EntityFacet {
             val recognition = exceptionRecognizerService.recognize(ex);
             if(recognition.isPresent()) {
                 if(recognition.get().getCategory() == Category.NOT_FOUND) {
-                    Optional.empty(); // gracefully handle the not found case
+                    return Optional.empty(); // gracefully handle the not 
found case
                 }
             }
 

Reply via email to