You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2015/09/14 08:37:18 UTC

[16/23] isis git commit: ISIS-1194: simplifications to AdapterManager and PersistenceSession

ISIS-1194: simplifications to AdapterManager and PersistenceSession

- removed adapterFor(Objet, ObjectAdapter parent), since identical to adapterFor(Object)   (now that we no longer have aggregated objects)
- renamed postStoreProcessing to enlistCreated... in PersistenceSession, and removed unnecessary checks.


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/5e9cba77
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/5e9cba77
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/5e9cba77

Branch: refs/heads/ISIS-1194
Commit: 5e9cba77fb873136984fdf3a38119d5d5825cde2
Parents: 04ff36a
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Fri Sep 11 19:24:02 2015 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Mon Sep 14 07:36:14 2015 +0100

----------------------------------------------------------------------
 .../metamodel/adapter/mgr/AdapterManager.java   | 11 +--
 .../noruntime/RuntimeContextNoRuntime.java      |  5 --
 .../specimpl/OneToOneAssociationImpl.java       |  2 +-
 .../adaptermanager/AdapterManagerDefault.java   | 83 +++++++++-----------
 .../internal/RuntimeContextFromSession.java     |  5 --
 .../persistence/IsisLifecycleListener2.java     |  4 +-
 .../system/persistence/PersistenceSession.java  | 23 ++----
 ...WrapperFactoryDefaultTest_wrappedObject.java |  4 +-
 8 files changed, 49 insertions(+), 88 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/5e9cba77/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/mgr/AdapterManager.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/mgr/AdapterManager.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/mgr/AdapterManager.java
index 9b8df59..cc0758b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/mgr/AdapterManager.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/mgr/AdapterManager.java
@@ -28,7 +28,6 @@ import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.adapter.version.ConcurrencyException;
 import org.apache.isis.core.metamodel.adapter.version.Version;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
 
 /**
@@ -162,10 +161,7 @@ public interface AdapterManager extends Injectable {
      * 
      * <p>
      * The pojo itself is recreated by delegating to a {@link org.apache.isis.core.metamodel.adapter.mgr.AdapterManager}.
-     * The default impl just uses the {@link ObjectSpecification#createObject()};
-     * however object stores (eg JDO/DataNucleus) can provide alternative implementations
-     * in order to ensure that the created pojo is attached to a persistence context.
-     * 
+     *
      * <p>
      * The {@link ConcurrencyChecking} parameter determines whether concurrency checking is performed.
      * If it is requested, then a check is made to ensure that the {@link Oid#getVersion() version} 
@@ -187,11 +183,6 @@ public interface AdapterManager extends Injectable {
     ObjectAdapter adapterFor(Object domainObject);
     
     /**
-     * Looks up or creates a standalone (value), aggregated or root adapter.
-     */
-    ObjectAdapter adapterFor(Object domainObject, ObjectAdapter parentAdapter);
-
-    /**
      * Looks up or creates a collection adapter.
      */
     public ObjectAdapter adapterFor(final Object pojo, final ObjectAdapter parentAdapter, OneToManyAssociation collection);

http://git-wip-us.apache.org/repos/asf/isis/blob/5e9cba77/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java
index d750448..fc8bdae 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java
@@ -121,11 +121,6 @@ public class RuntimeContextNoRuntime extends RuntimeContextAbstract {
             }
 
             @Override
-            public ObjectAdapter adapterFor(final Object pojo, final ObjectAdapter ownerAdapter) {
-                throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
-            }
-
-            @Override
             public ObjectAdapter adapterFor(final Object pojo, final ObjectAdapter ownerAdapter, final OneToManyAssociation collection) {
                 throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
             }

http://git-wip-us.apache.org/repos/asf/isis/blob/5e9cba77/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationImpl.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationImpl.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationImpl.java
index 963669f..b4deee8 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationImpl.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationImpl.java
@@ -148,7 +148,7 @@ public class OneToOneAssociationImpl extends ObjectAssociationAbstract implement
             return null;
         }
 
-        return getAdapterManager().adapterFor(referencedPojo, ownerAdapter);
+        return getAdapterManager().adapterFor(referencedPojo);
     }
 
     // UNUSED

http://git-wip-us.apache.org/repos/asf/isis/blob/5e9cba77/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/AdapterManagerDefault.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/AdapterManagerDefault.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/AdapterManagerDefault.java
index bafb47d..96e6336 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/AdapterManagerDefault.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/AdapterManagerDefault.java
@@ -192,53 +192,6 @@ public class AdapterManagerDefault implements AdapterManager,
         return mapAndInjectServices(newAdapter);
     }
 
-    private ObjectAdapter existingOrValueAdapter(Object pojo) {
-
-        // attempt to locate adapter for the pojo
-        final ObjectAdapter adapter = getAdapterFor(pojo);
-        if (adapter != null) {
-            return adapter;
-        }
-        
-        // pojo may have been lazily loaded by object store, but we haven't yet seen it
-        final ObjectAdapter lazilyLoadedAdapter =
-                pojo instanceof Persistable
-                        ? persistenceSession.mapPersistent((Persistable) pojo)
-                        : null;
-        if(lazilyLoadedAdapter != null) {
-            return lazilyLoadedAdapter;
-        }
-
-        // need to create (and possibly map) the adapter.
-        final ObjectSpecification objSpec = specificationLoader.loadSpecification(pojo.getClass());
-        
-        // we create value facets as standalone (so not added to maps)
-        if (objSpec.containsFacet(ValueFacet.class)) {
-            ObjectAdapter valueAdapter = createStandaloneAdapter(pojo);
-            return valueAdapter;
-        }
-        
-        return null;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public ObjectAdapter adapterFor(final Object pojo, final ObjectAdapter parentAdapter) {
-        
-        Ensure.ensureThatArg(parentAdapter, is(not(nullValue())));
-        
-        final ObjectAdapter existingOrValueAdapter = existingOrValueAdapter(pojo);
-        if(existingOrValueAdapter != null) {
-            return existingOrValueAdapter;
-        }
-        
-        final ObjectAdapter newAdapter = createTransientOrViewModelRootAdapter(pojo);
-
-        return mapAndInjectServices(newAdapter);
-    }
-
 
     /**
      * {@inheritDoc}
@@ -295,7 +248,6 @@ public class AdapterManagerDefault implements AdapterManager,
 
 
 
-
     @Override
     public ObjectAdapter adapterFor(final RootOid rootOid) {
         return adapterFor(rootOid, AdapterManager.ConcurrencyChecking.NO_CHECK);
@@ -363,6 +315,41 @@ public class AdapterManagerDefault implements AdapterManager,
         return adapter;
     }
 
+
+    private ObjectAdapter existingOrValueAdapter(Object pojo) {
+
+        // attempt to locate adapter for the pojo
+        ObjectAdapter adapter = getAdapterFor(pojo);
+        if (adapter != null) {
+            return adapter;
+        }
+
+        // pojo may have been lazily loaded by object store, but we haven't yet seen it
+        if (pojo instanceof Persistable) {
+            adapter = persistenceSession.mapPersistent((Persistable) pojo);
+
+            // TODO: could return null if the pojo passed in !dnIsPersistent() || !dnIsDetached()
+            // in which case, we would ought to map as a transient object, rather than fall through and treat as a value?
+        } else {
+            adapter = null;
+        }
+
+        if(adapter != null) {
+            return adapter;
+        }
+
+        // need to create (and possibly map) the adapter.
+        final ObjectSpecification objSpec = specificationLoader.loadSpecification(pojo.getClass());
+
+        // we create value facets as standalone (so not added to maps)
+        if (objSpec.containsFacet(ValueFacet.class)) {
+            adapter = createStandaloneAdapter(pojo);
+            return adapter;
+        }
+
+        return null;
+    }
+
     private Object recreatePojo(RootOid oid) {
         if(oid.isTransient() || oid.isViewModel()) {
             return recreatePojoDefault(oid);

http://git-wip-us.apache.org/repos/asf/isis/blob/5e9cba77/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java
index c9e852b..89a1e7b 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java
@@ -110,11 +110,6 @@ public class RuntimeContextFromSession extends RuntimeContextAbstract {
             }
 
             @Override
-            public ObjectAdapter adapterFor(final Object pojo, final ObjectAdapter ownerAdapter) {
-                return getRuntimeAdapterManager().adapterFor(pojo, ownerAdapter);
-            }
-
-            @Override
             public ObjectAdapter adapterFor(final Object pojo, final ObjectAdapter ownerAdapter, final OneToManyAssociation collection) {
                 return getRuntimeAdapterManager().adapterFor(pojo, ownerAdapter, collection);
             }

http://git-wip-us.apache.org/repos/asf/isis/blob/5e9cba77/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLifecycleListener2.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLifecycleListener2.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLifecycleListener2.java
index 4e400bc..42cb9ff 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLifecycleListener2.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLifecycleListener2.java
@@ -85,13 +85,13 @@ public class IsisLifecycleListener2
     @Override
     public void postStore(InstanceLifecycleEvent event) {
         final Persistable pojo = Utils.persistenceCapableFor(event);
-        persistenceSession.postStoreProcessingFor(pojo);
+        persistenceSession.enlistCreatedAndRemapIfRequiredThenInvokeIsisInvokePersistingOrUpdatedCallback(pojo);
     }
 
     @Override
     public void preDirty(InstanceLifecycleEvent event) {
         final Persistable pojo = Utils.persistenceCapableFor(event);
-        persistenceSession.preDirtyProcessingFor(pojo);
+        persistenceSession.enlistUpdatingAndInvokeIsisUpdatingCallback(pojo);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/5e9cba77/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
index 0281482..8448ee6 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
@@ -26,7 +26,6 @@ import java.util.Map;
 
 import javax.jdo.FetchGroup;
 import javax.jdo.FetchPlan;
-import javax.jdo.JDOHelper;
 import javax.jdo.PersistenceManager;
 
 import com.google.common.collect.Lists;
@@ -1324,19 +1323,13 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
      * The implementation therefore uses Isis' {@link org.apache.isis.core.metamodel.adapter.oid.Oid#isTransient() oid}
      * to determine which callback to fire.
      */
-    public void postStoreProcessingFor(final Persistable pojo) {
-        ensureRootObject(pojo);
-
-        // assert is persistent
-        if (!pojo.dnIsPersistent()) {
-            throw new IllegalStateException(
-                    "Pojo JDO state is not persistent! pojo dnOid: " + JDOHelper.getObjectId(pojo));
-        }
+    public void enlistCreatedAndRemapIfRequiredThenInvokeIsisInvokePersistingOrUpdatedCallback(final Persistable pojo) {
+        final ObjectAdapter objectAdapter = adapterFor(pojo);
 
-        final ObjectAdapter adapter = getAdapterFor(pojo);
-        final RootOid isisOid = (RootOid) adapter.getOid();
+        final ObjectAdapter adapter = objectAdapter;
+        final RootOid rootOid = (RootOid) adapter.getOid(); // ok since this is for a Persistable
 
-        if (isisOid.isTransient()) {
+        if (rootOid.isTransient()) {
             // persisting
             final RootOid persistentOid = oidGenerator.createPersistentOrViewModelOid(pojo);
 
@@ -1346,6 +1339,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
 
             final IsisTransaction transaction = getCurrentTransaction();
             transaction.enlistCreated(adapter);
+
         } else {
             // updating;
             // the callback and transaction.enlist are done in the preDirty callback
@@ -1358,7 +1352,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
     }
 
 
-    public void preDirtyProcessingFor(final Persistable pojo) {
+    public void enlistUpdatingAndInvokeIsisUpdatingCallback(final Persistable pojo) {
         ObjectAdapter adapter = getAdapterFor(pojo);
         if (adapter == null) {
             // seen this happen in the case when a parent entity (LeaseItem) has a collection of children
@@ -1387,8 +1381,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
 
         CallbackFacet.Util.callCallback(adapter, UpdatingCallbackFacet.class);
 
-        final IsisTransaction transaction = getCurrentTransaction();
-        transaction.enlistUpdating(adapter);
+        getCurrentTransaction().enlistUpdating(adapter);
 
         ensureRootObject(pojo);
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/5e9cba77/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryDefaultTest_wrappedObject.java
----------------------------------------------------------------------
diff --git a/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryDefaultTest_wrappedObject.java b/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryDefaultTest_wrappedObject.java
index 19b6d46..7c3559d 100644
--- a/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryDefaultTest_wrappedObject.java
+++ b/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryDefaultTest_wrappedObject.java
@@ -262,7 +262,7 @@ public class WrapperFactoryDefaultTest_wrappedObject {
         context.checking(new Expectations() {
             {
 
-                oneOf(mockAdapterManager).adapterFor("Jones", mockEmployeeAdapter);
+                oneOf(mockAdapterManager).adapterFor("Jones");
                 will(returnValue(mockAdapterForStringJones));
             }
         });
@@ -359,7 +359,7 @@ public class WrapperFactoryDefaultTest_wrappedObject {
     private void allowingEmployeeHasSmithAdapter() {
         context.checking(new Expectations() {
             {
-                allowing(mockAdapterManager).adapterFor("Smith", mockEmployeeAdapter);
+                allowing(mockAdapterManager).adapterFor("Smith");
                 will(returnValue(mockAdapterForStringSmith));
 
                 allowing(mockAdapterForStringSmith).getObject();