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