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/12/22 20:29:07 UTC

[isis] branch master updated: ISIS-2033: dn integration: simplify (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 75c5e81  ISIS-2033: dn integration: simplify (2)
75c5e81 is described below

commit 75c5e8101a218ac7c6e4e785b9e7368ee105f8b1
Author: Andi Huber <ah...@apache.org>
AuthorDate: Tue Dec 22 21:28:51 2020 +0100

    ISIS-2033: dn integration: simplify (2)
---
 .../persistence/PersistenceSession5.java           | 21 ++-------
 .../jdo/integration/persistence/_Utils.java        | 55 ++++++++++------------
 2 files changed, 28 insertions(+), 48 deletions(-)

diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/PersistenceSession5.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/PersistenceSession5.java
index 0a5c7b5..c91e8bc 100644
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/PersistenceSession5.java
+++ b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/PersistenceSession5.java
@@ -565,12 +565,8 @@ implements IsisLifecycleListener.PersistenceSessionLifecycleManagement {
     @Override
     public ManagedObject initializeEntity(final Persistable pojo) {
 
-//        // need to do eagerly, because (if a viewModel then) a
-//        // viewModel's #viewModelMemento might need to use services
-//        serviceInjector.injectServicesInto(pojo); //redundant
-
-        final RootOid originalOid = _Utils.createRootOid(getMetaModelContext(), getJdoPersistenceManager(), pojo);
-        final ManagedObject entity = _Utils.recreatePojo(getMetaModelContext(), originalOid, pojo);
+        final ManagedObject entity = _Utils
+                .identify(getMetaModelContext(), getJdoPersistenceManager(), pojo);
 
         getEntityChangeTracker().recognizeLoaded(entity);
 
@@ -582,7 +578,6 @@ implements IsisLifecycleListener.PersistenceSessionLifecycleManagement {
         return JdoObjectIdSerializer.identifierForElseFail(getJdoPersistenceManager(), pojo);
     }
 
-
     /**
      * Called either when an entity is initially persisted, or when an entity is updated; fires the appropriate
      * lifecycle callback.
@@ -623,21 +618,13 @@ implements IsisLifecycleListener.PersistenceSessionLifecycleManagement {
 
     @Override
     public void enlistUpdatingAndInvokeIsisUpdatingCallback(final Persistable pojo) {
-        val entity = _Utils.fetchPersistent(getMetaModelContext(), getJdoPersistenceManager(), pojo);
-        if (entity == null) {
-            throw _Exceptions
-                .noSuchElement("DN could not find objectId for pojo (unexpected); pojo=[%s]", pojo);
-        }
+        val entity = _Utils.fetchEntityElseFail(getMetaModelContext(), getJdoPersistenceManager(), pojo);
         getEntityChangeTracker().enlistUpdating(entity);
     }
 
     @Override
     public void invokeIsisUpdatedCallback(Persistable pojo) {
-        val entity = _Utils.fetchPersistent(getMetaModelContext(), getJdoPersistenceManager(), pojo);
-        if (entity == null) {
-            throw _Exceptions
-                .noSuchElement("DN could not find objectId for pojo (unexpected); pojo=[%s]", pojo);
-        }
+        val entity = _Utils.fetchEntityElseFail(getMetaModelContext(), getJdoPersistenceManager(), pojo);
         // the callback and transaction.enlist are done in the preStore callback
         // (can't be done here, as the enlist requires to capture the 'before' values)
         getEntityChangeTracker().recognizeUpdating(entity);
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/_Utils.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/_Utils.java
index 17e1442..7eab3e9 100644
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/_Utils.java
+++ b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/_Utils.java
@@ -24,6 +24,8 @@ import javax.jdo.listener.InstanceLifecycleEvent;
 
 import org.datanucleus.enhancement.Persistable;
 
+import org.apache.isis.commons.functional.Result;
+import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.context.MetaModelContext;
@@ -77,48 +79,39 @@ final class _Utils {
         return adapter;
     }
     
-    static RootOid createRootOid(
+    static ManagedObject fetchEntityElseFail(
             final @NonNull MetaModelContext mmc,
             final @NonNull PersistenceManager pm,
-            final @NonNull Object pojo) {
+            final @Nullable Object pojo) {
+    
+        return Result.of(()->{
+            
+            if (pm.getObjectId(pojo) == null) {
+                throw _Exceptions
+                    .noSuchElement("DN could not find objectId for pojo (unexpected); pojo=[%s]", pojo);
+            }
+            final ManagedObject adapter = identify(mmc, pm, pojo);
+            return adapter;
+            
+        })
+        .orElseFail();
+    }
 
+    static ManagedObject identify(
+            final @NonNull MetaModelContext mmc,
+            final @NonNull PersistenceManager pm, 
+            final @NonNull Object pojo) {
+        
         val spec = mmc.getSpecification(pojo.getClass());
 
         final String identifier = JdoObjectIdSerializer.identifierForElseFail(pm, pojo);
 
         final ObjectSpecId objectSpecId = spec.getSpecId();
-        return Oid.Factory.root(objectSpecId, identifier);
-    }
-
-    static ManagedObject recreatePojo(
-            final @NonNull MetaModelContext mmc,
-            final @NonNull RootOid rootOid,
-            final @NonNull Object recreatedPojo) {
+        final RootOid rootOid = Oid.Factory.root(objectSpecId, identifier);
         
-        val spec = mmc.getSpecification(recreatedPojo.getClass());
-        
-        final ManagedObject createdAdapter = ManagedObject.identified(spec, recreatedPojo, rootOid);
+        final ManagedObject createdAdapter = ManagedObject.identified(spec, pojo, rootOid);
         return injectServices(mmc, createdAdapter);
     }
 
-    static ManagedObject fetchPersistent(
-            final @NonNull MetaModelContext mmc,
-            final @NonNull PersistenceManager pm,
-            final Object pojo) {
-        if (pm.getObjectId(pojo) == null) {
-            return null;
-        }
-        final RootOid oid = createRootOid(mmc, pm, pojo);
-        final ManagedObject adapter = recreatePojo(mmc, oid, pojo);
-        return adapter;
-    }
-   
-    
-//  @SuppressWarnings("unused")
-//  private static Object jdoObjectIdFor(InstanceLifecycleEvent event) {
-//      final Persistable persistable = persistableFor(event);
-//      final Object jdoObjectId = persistable.dnGetObjectId();
-//      return jdoObjectId;
-//  }
     
 }