You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2020/06/05 08:29:03 UTC

[isis] branch master updated: ISIS-2340: ManagedObjects: move and gather entity utility methods (2)

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 a3972aa  ISIS-2340: ManagedObjects: move and gather entity utility methods (2)
a3972aa is described below

commit a3972aa89cf90fc0425637a2699b8984ddebb0cc
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Jun 5 10:28:32 2020 +0200

    ISIS-2340: ManagedObjects: move and gather entity utility methods (2)
---
 .../interactions/managed/ManagedMember.java        |  4 +-
 .../services/title/TitleServiceDefault.java        |  3 +-
 .../isis/core/metamodel/spec/ManagedObject.java    |  4 -
 .../isis/core/metamodel/spec/ManagedObjects.java   | 88 ++++++++++++----------
 .../transaction/ChangedObjectsService.java         |  3 +-
 .../wicket/ui/panels/FormExecutorDefault.java      |  5 +-
 6 files changed, 57 insertions(+), 50 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ManagedMember.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ManagedMember.java
index 91df6c6..0470352 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ManagedMember.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ManagedMember.java
@@ -27,7 +27,7 @@ import org.apache.isis.core.commons.internal.base._Casts;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.consent.Veto;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
-import org.apache.isis.core.metamodel.spec.ManagedObjects;
+import org.apache.isis.core.metamodel.spec.ManagedObjects.EntityUtil;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
@@ -90,7 +90,7 @@ public abstract class ManagedMember {
     
     @NonNull private ManagedObject owner;
     public ManagedObject getOwner() {
-        return owner = ManagedObjects.reattach(owner);
+        return owner = EntityUtil.reattach(owner);
     }
     
     public abstract ObjectMember getMember();
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/title/TitleServiceDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/title/TitleServiceDefault.java
index 1c112e8..4102aec 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/title/TitleServiceDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/title/TitleServiceDefault.java
@@ -31,6 +31,7 @@ import org.apache.isis.applib.annotation.OrderPrecedence;
 import org.apache.isis.applib.services.title.TitleService;
 import org.apache.isis.applib.services.wrapper.WrapperFactory;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
+import org.apache.isis.core.metamodel.spec.ManagedObjects.EntityUtil;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 
 import lombok.val;
@@ -60,7 +61,7 @@ public class TitleServiceDefault implements TitleService {
         
         val pojo = unwrapped(domainObject);
         val objectAdapter = ManagedObject.of(specificationLoader::loadSpecification, pojo);
-        val destroyed = ManagedObject._isDestroyed(objectAdapter);
+        val destroyed = EntityUtil.isDestroyed(objectAdapter);
         if(!destroyed) {
             return objectAdapter.getSpecification().getTitle(null, objectAdapter);
         } else {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObject.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObject.java
index b50e149..c9d5892 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObject.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObject.java
@@ -244,10 +244,6 @@ public interface ManagedObject {
         return identifier; 
     }
     
-    static boolean _isDestroyed(ManagedObject adapter) {
-        return EntityUtil.getEntityState(adapter) == EntityState.PERSISTABLE_DESTROYED;
-    }
-
     static void _whenFirstIsBookmarkable_ensureSecondIsAsWell(
             ManagedObject first,
             ManagedObject second) {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObjects.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObjects.java
index 337f884..c18d350 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObjects.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObjects.java
@@ -234,6 +234,7 @@ public final class ManagedObjects {
     @UtilityClass
     public static final class EntityUtil {
         
+        @NonNull
         public static EntityState getEntityState(@Nullable ManagedObject adapter) {
             if(adapter==null) {
                 return EntityState.NOT_PERSISTABLE;
@@ -253,51 +254,58 @@ public final class ManagedObjects {
             return entityFacet.getEntityState(pojo);
         }
         
-    }
-    
-    /**
-     * @param managedObject
-     * @return managedObject
-     * @throws AssertionError if managedObject is a detached entity  
-     */
-    public static ManagedObject requiresAttached(@NonNull ManagedObject managedObject) {
-        val entityState = EntityUtil.getEntityState(managedObject);
-        if(entityState.isPersistable()) {
-            // ensure we have an attached entity
-            _Assert.assertEquals(
-                    EntityState.PERSISTABLE_ATTACHED, 
-                    entityState,
-                    ()-> String.format("entity %s is required to be attached (not detached) at this stage", 
-                            managedObject.getSpecification().getSpecId()));
-        }
-        return managedObject;
-    }
-    
-    @Nullable
-    public static ManagedObject reattach(@Nullable ManagedObject managedObject) {
-        if(isNullOrUnspecifiedOrEmpty(managedObject)) {
-            return managedObject;
-        }
-        val entityState = EntityUtil.getEntityState(managedObject);
-        if(!entityState.isPersistable()) {
-            return managedObject;
-        }
-        if(!entityState.isDetached()) {
+        /**
+         * @param managedObject
+         * @return managedObject
+         * @throws AssertionError if managedObject is a detached entity  
+         */
+        @NonNull
+        public static ManagedObject requiresAttached(@NonNull ManagedObject managedObject) {
+            val entityState = EntityUtil.getEntityState(managedObject);
+            if(entityState.isPersistable()) {
+                // ensure we have an attached entity
+                _Assert.assertEquals(
+                        EntityState.PERSISTABLE_ATTACHED, 
+                        entityState,
+                        ()-> String.format("entity %s is required to be attached (not detached) at this stage", 
+                                managedObject.getSpecification().getSpecId()));
+            }
             return managedObject;
         }
         
-        val objectIdentifier = identify(managedObject)
-                .map(RootOid::getIdentifier);
-                
-        if(!objectIdentifier.isPresent()) {
-            return managedObject;
+        @Nullable
+        public static ManagedObject reattach(@Nullable ManagedObject managedObject) {
+            if(isNullOrUnspecifiedOrEmpty(managedObject)) {
+                return managedObject;
+            }
+            val entityState = EntityUtil.getEntityState(managedObject);
+            if(!entityState.isPersistable()) {
+                return managedObject;
+            }
+            if(!entityState.isDetached()) {
+                return managedObject;
+            }
+            
+            val objectIdentifier = identify(managedObject)
+                    .map(RootOid::getIdentifier);
+                    
+            if(!objectIdentifier.isPresent()) {
+                return managedObject;
+            }
+            
+            val objectLoadRequest = ObjectLoader.Request.of(
+                    managedObject.getSpecification(), 
+                    objectIdentifier.get());
+            
+            return managedObject.getObjectManager().loadObject(objectLoadRequest);
         }
         
-        val objectLoadRequest = ObjectLoader.Request.of(
-                managedObject.getSpecification(), 
-                objectIdentifier.get());
+        // -- SHORTCUTS
+        
+        public static boolean isDestroyed(@Nullable ManagedObject adapter) {
+            return EntityUtil.getEntityState(adapter).isDestroyed();
+        }
         
-        return managedObject.getObjectManager().loadObject(objectLoadRequest);
     }
 
     // -- VISIBILITY UTIL
@@ -367,7 +375,7 @@ public final class ManagedObjects {
             }
             val spec = adapter.getSpecification();
             if(spec.isEntity()) {
-                if(ManagedObject._isDestroyed(adapter)) {
+                if(EntityUtil.isDestroyed(adapter)) {
                     return false;
                 }
             }
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/transaction/ChangedObjectsService.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/transaction/ChangedObjectsService.java
index 1350387..fb25302 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/transaction/ChangedObjectsService.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/transaction/ChangedObjectsService.java
@@ -38,6 +38,7 @@ import org.apache.isis.applib.services.TransactionScopeListener;
 import org.apache.isis.core.commons.internal.collections._Maps;
 import org.apache.isis.core.commons.internal.collections._Sets;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
+import org.apache.isis.core.metamodel.spec.ManagedObjects.EntityUtil;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.Contributed;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
@@ -222,7 +223,7 @@ public class ChangedObjectsService implements TransactionScopeListener {
                 val preAndPostValues = changedObjectProperties.remove(adapterAndProperty);
 
                 ManagedObject adapter = adapterAndProperty.getAdapter();
-                if(ManagedObject._isDestroyed(adapter)) {
+                if(EntityUtil.isDestroyed(adapter)) {
                     // don't touch the object!!!
                     // JDO, for example, will complain otherwise...
                     preAndPostValues.setPost(IsisTransactionPlaceholder.DELETED);
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorDefault.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorDefault.java
index c70bd0b..c54d214 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorDefault.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorDefault.java
@@ -49,6 +49,7 @@ import org.apache.isis.core.commons.internal.exceptions._Exceptions;
 import org.apache.isis.core.metamodel.facets.actions.redirect.RedirectFacet;
 import org.apache.isis.core.metamodel.facets.properties.renderunchanged.UnchangingFacet;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
+import org.apache.isis.core.metamodel.spec.ManagedObjects.EntityUtil;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.runtime.events.RuntimeEventService;
 import org.apache.isis.core.runtime.iactn.IsisInteractionFactory;
@@ -156,7 +157,7 @@ implements FormExecutor {
 
             // update target, since version updated (concurrency checks)
             targetAdapter = targetEntityModel.getManagedObject();
-            if(!ManagedObject._isDestroyed(targetAdapter)) {
+            if(!EntityUtil.isDestroyed(targetAdapter)) {
                 targetEntityModel.resetPropertyModels();
             }
 
@@ -185,7 +186,7 @@ implements FormExecutor {
                     targetEntityModel.setObject(resultAdapter);
                     targetAdapter = targetEntityModel.getManagedObject();
                 }
-                if(!ManagedObject._isDestroyed(targetAdapter)) {
+                if(!EntityUtil.isDestroyed(targetAdapter)) {
                     targetEntityModel.resetPropertyModels();
                 }