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/10 19:09:24 UTC

[2/3] isis git commit: ISIS-1194: pass PojoAdapter to PersistenceSession, rather than use IsisContext (and don't pass in AdapterManager)

ISIS-1194: pass PojoAdapter to PersistenceSession, rather than use IsisContext (and don't pass in AdapterManager)

Also:
- tidy up of comments/regions
- inlining of getters to dependencies used only internally


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

Branch: refs/heads/ISIS-1194
Commit: 97eed79626f6ee691333ff547d5057beb4a693a2
Parents: 775871c
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Thu Sep 10 17:58:53 2015 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Sep 10 17:58:53 2015 +0100

----------------------------------------------------------------------
 .../persistence/adapter/PojoAdapter.java        | 139 +++++++++----------
 .../adaptermanager/AdapterManagerDefault.java   |   2 +-
 .../system/persistence/PersistenceSession.java  |  61 ++++----
 .../adapterfactory/pojo/PojoAdapterTest.java    |   2 +-
 .../transaction/PojoAdapterBuilder.java         |   2 +-
 5 files changed, 94 insertions(+), 112 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/97eed796/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
index dc44b22..e41acfc 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
@@ -29,10 +29,9 @@ import org.apache.isis.core.commons.ensure.Ensure;
 import org.apache.isis.core.commons.exceptions.IsisException;
 import org.apache.isis.core.commons.util.ToString;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager.ConcurrencyChecking;
-import org.apache.isis.core.metamodel.adapter.oid.ParentedCollectionOid;
 import org.apache.isis.core.metamodel.adapter.oid.Oid;
+import org.apache.isis.core.metamodel.adapter.oid.ParentedCollectionOid;
 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;
@@ -43,7 +42,7 @@ import org.apache.isis.core.metamodel.spec.InstanceAbstract;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.Specification;
 import org.apache.isis.core.metamodel.spec.SpecificationLoader;
-import org.apache.isis.core.runtime.system.context.IsisContext;
+import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
 import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
 
 import static org.hamcrest.CoreMatchers.is;
@@ -53,36 +52,40 @@ public class PojoAdapter extends InstanceAbstract implements ObjectAdapter {
 
     private final static Logger LOG = LoggerFactory.getLogger(PojoAdapter.class);
 
-    private static final int INCOMPLETE_COLLECTION = -1;
+    //region > Constructor, fields, finalizer
 
+    private final AuthenticationSession authenticationSession;
     private final SpecificationLoader specificationLoader;
-    private final AdapterManager adapterManager;
     private final Localization localization;
-    
+    private final PersistenceSession persistenceSession;
+
+    /**
+     * can be {@link #replacePojo(Object) replace}d.
+     */
     private Object pojo;
+    /**
+     * can be {@link #replaceOid(Oid) replace}d.
+     */
     private Oid oid;
 
+    /**
+     * only for standalone or parented collections.
+     */
     private ElementSpecificationProvider elementSpecificationProvider;
 
-    private AuthenticationSession authenticationSession;
-
-
-    // ///////////////////////////////////////////////////////////////////
-    // Constructor, finalizer
-    // ///////////////////////////////////////////////////////////////////
-
     public PojoAdapter(
             final Object pojo,
             final Oid oid,
             final AuthenticationSession authenticationSession,
             final Localization localization,
             final SpecificationLoader specificationLoader,
-            final AdapterManager adapterManager) {
+            final PersistenceSession persistenceSession) {
+
+        this.persistenceSession = persistenceSession;
 
         Ensure.ensureThatArg(specificationLoader, is(notNullValue()));
 
         this.specificationLoader = specificationLoader;
-        this.adapterManager = adapterManager;
         this.localization = localization;
         this.authenticationSession = authenticationSession;
         
@@ -92,19 +95,9 @@ public class PojoAdapter extends InstanceAbstract implements ObjectAdapter {
         this.pojo = pojo;
         this.oid = oid;
     }
+    //endregion
 
-    
-    // ///////////////////////////////////////////////////////////////////
-    // Specification
-    // ///////////////////////////////////////////////////////////////////
-
-    @Override
-    protected ObjectSpecification loadSpecification() {
-        final Class<?> aClass = getObject().getClass();
-        final ObjectSpecification specification = specificationLoader.loadSpecification(aClass);
-        //String defaultTitle = "A" + (" " + specification.getSingularName()).toLowerCase();
-        return specification;
-    }
+    //region > getSpecification
 
     /**
      * Downcasts {@link #getSpecification()}.
@@ -114,10 +107,16 @@ public class PojoAdapter extends InstanceAbstract implements ObjectAdapter {
         return (ObjectSpecification) super.getSpecification();
     }
 
-    // ///////////////////////////////////////////////////////////////////
-    // Object, replacePojo
-    // ///////////////////////////////////////////////////////////////////
+    @Override
+    protected ObjectSpecification loadSpecification() {
+        final Class<?> aClass = getObject().getClass();
+        final ObjectSpecification specification = specificationLoader.loadSpecification(aClass);
+        return specification;
+    }
+
+    //endregion
 
+    //region > getObject, replacePojo
     @Override
     public Object getObject() {
         return pojo;
@@ -132,17 +131,9 @@ public class PojoAdapter extends InstanceAbstract implements ObjectAdapter {
     public void replacePojo(final Object pojo) {
         this.pojo = pojo;
     }
+    //endregion
 
-
-
-
-
-
-    
-    // ///////////////////////////////////////////////////////////////////
-    // Oid
-    // ///////////////////////////////////////////////////////////////////
-
+    //region > getOid, replaceOid
     @Override
     public Oid getOid() {
         return oid;
@@ -153,6 +144,9 @@ public class PojoAdapter extends InstanceAbstract implements ObjectAdapter {
         Ensure.ensureThatArg(oid, is(notNullValue())); // values have no oid, so cannot be replaced 
         this.oid = persistedOid;
     }
+    //endregion
+
+    //region > isParentedCollection, isValue
 
     @Override
     public boolean isParentedCollection() {
@@ -164,6 +158,10 @@ public class PojoAdapter extends InstanceAbstract implements ObjectAdapter {
         return oid == null;
     }
 
+    //endregion
+
+    //region > isTransient, representsPersistent, isDestroyed
+
     @Override
     public boolean isTransient() {
         if(getSpecification().isService() || getSpecification().isViewModel()) {
@@ -214,7 +212,9 @@ public class PojoAdapter extends InstanceAbstract implements ObjectAdapter {
         }
         return false;
     }
+    //endregion
 
+    //region > getAggregateRoot
     @Override
     public ObjectAdapter getAggregateRoot() {
         if(!isParentedCollection()) {
@@ -222,20 +222,16 @@ public class PojoAdapter extends InstanceAbstract implements ObjectAdapter {
         }
         ParentedCollectionOid collectionOid = (ParentedCollectionOid) oid;
         final Oid rootOid = collectionOid.getRootOid();
-        ObjectAdapter rootadapter = adapterManager.getAdapterFor(rootOid);
+        ObjectAdapter rootadapter = persistenceSession.getAdapterFor(rootOid);
         if(rootadapter == null) {
-            final Oid parentOidNowPersisted = getPersistenceSession().remappedFrom(rootOid);
-            rootadapter = adapterManager.getAdapterFor(parentOidNowPersisted);
+            final Oid parentOidNowPersisted = persistenceSession.remappedFrom(rootOid);
+            rootadapter = persistenceSession.getAdapterFor(parentOidNowPersisted);
         }
         return rootadapter;
     }
+    //endregion
 
-    
-
-    // ///////////////////////////////////////////////////////////////////
-    // Version 
-    // (nb: delegates to parent if parented)
-    // ///////////////////////////////////////////////////////////////////
+    //region > getVersion, setVersion, checkLock
 
     @Override
     public Version getVersion() {
@@ -264,7 +260,7 @@ public class PojoAdapter extends InstanceAbstract implements ObjectAdapter {
             
             if(ConcurrencyChecking.isCurrentlyEnabled()) {
                 LOG.info("concurrency conflict detected on " + thisOid + " (" + otherVersion + ")");
-                final String currentUser = getAuthenticationSession().getUserName();
+                final String currentUser = authenticationSession.getUserName();
                 throw new ConcurrencyException(currentUser, thisOid, thisVersion, otherVersion);
             } else {
                 LOG.warn("concurrency conflict detected but suppressed, on " + thisOid + " (" + otherVersion + ")");
@@ -289,10 +285,9 @@ public class PojoAdapter extends InstanceAbstract implements ObjectAdapter {
         return version == null || otherVersion == null || otherVersion.different(version);
     }
 
-    // ///////////////////////////////////////////////////////////////////
-    // Title, toString
-    // ///////////////////////////////////////////////////////////////////
+    //endregion
 
+    //region > titleString
     /**
      * Returns the title from the underlying business object.
      * 
@@ -409,10 +404,9 @@ public class PojoAdapter extends InstanceAbstract implements ObjectAdapter {
         }
         return "S"; // standalone adapter (value)
     }
+    //endregion
 
-    // ///////////////////////////////////////////////////////////////////
-    // IconName
-    // ///////////////////////////////////////////////////////////////////
+    //region > iconName
 
     /**
      * Returns the name of the icon to use to represent this object.
@@ -422,9 +416,9 @@ public class PojoAdapter extends InstanceAbstract implements ObjectAdapter {
         return getSpecification().getIconName(this);
     }
 
-    // ///////////////////////////////////////////////////////////////////
-    // ElementType
-    // ///////////////////////////////////////////////////////////////////
+    //endregion
+
+    //region > elementSpecification
 
     @Override
     public ObjectSpecification getElementSpecification() {
@@ -434,14 +428,21 @@ public class PojoAdapter extends InstanceAbstract implements ObjectAdapter {
         return elementSpecificationProvider.getElementType();
     }
 
+    /**
+     * Called whenever there is a {@link org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacet} present.
+     *
+     * <p>
+     *     Specifically, if an action which has been annotated (is copied by {@link org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet action invocation facet}), and for a parented collection
+     *     (is copied by the {@link org.apache.isis.core.runtime.persistence.adaptermanager.AdapterManagerDefault adapter manager} when {@link org.apache.isis.core.runtime.persistence.adaptermanager.AdapterManagerDefault#adapterFor(Object, ObjectAdapter, OneToManyAssociation) creating} an adapter for a collection.
+     * </p>
+     */
     @Override
     public void setElementSpecificationProvider(final ElementSpecificationProvider elementSpecificationProvider) {
         this.elementSpecificationProvider = elementSpecificationProvider;
     }
+    //endregion
 
-    // /////////////////////////////////////////////////////////////
-    // getInstance
-    // /////////////////////////////////////////////////////////////
+    //region > getInstance (unsupported for this impl)
 
     /**
      * Not supported by this implementation.
@@ -451,18 +452,6 @@ public class PojoAdapter extends InstanceAbstract implements ObjectAdapter {
         throw new UnsupportedOperationException();
     }
 
-
-    
-    ////////////////////////////////////////////////////////////////////
-    // Dependencies (from context)
-    ////////////////////////////////////////////////////////////////////
-
-    protected PersistenceSession getPersistenceSession() {
-        return IsisContext.getPersistenceSession();
-    }
-
-    protected AuthenticationSession getAuthenticationSession() {
-        return authenticationSession;
-    }
+    //endregion
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/97eed796/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 954bdc9..89c00bc 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
@@ -646,7 +646,7 @@ public class AdapterManagerDefault implements AdapterManager,
         return new PojoAdapter(
                 pojo, oid,
                 authenticationSession, getLocalization(),
-                specificationLoader, this);
+                specificationLoader, persistenceSession);
     }
 
     //endregion

http://git-wip-us.apache.org/repos/asf/isis/blob/97eed796/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 53ecf94..9afba03 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
@@ -127,7 +127,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
     public static final String DATANUCLEUS_PROPERTIES_ROOT = ROOT_KEY + "impl.";
 
 
-    //region > constructor, fields
+    //region > constructor, fields, finalize()
     private final ObjectFactory objectFactory;
 
     private final PersistenceSessionFactory persistenceSessionFactory;
@@ -203,6 +203,12 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
         }
     }
 
+    @Override
+    protected void finalize() throws Throwable {
+        super.finalize();
+        LOG.debug("finalizing persistence session");
+    }
+
     //endregion
 
     //region > open
@@ -494,7 +500,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
 
         final PersistenceQueryProcessor<? extends PersistenceQuery> processor = lookupProcessorFor(persistenceQuery);
 
-        final List<ObjectAdapter> instances = getTransactionManager().executeWithinTransaction(
+        final List<ObjectAdapter> instances = transactionManager.executeWithinTransaction(
                 new TransactionalClosureWithReturn<List<ObjectAdapter>>() {
                     @Override
                     public List<ObjectAdapter> execute() {
@@ -540,23 +546,9 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
         return persistenceQueryProcessor.process((Q) persistenceQuery);
     }
 
-
-
     //endregion
 
-    //region > Services
-
-    /**
-     * Returns the OID for the adapted service. This allows a service object to
-     * be given the same OID that it had when it was created in a different
-     * session.
-     */
-    protected RootOid getOidForService(final ObjectSpecification serviceSpec) {
-        final ObjectSpecId serviceSpecId = serviceSpec.getSpecId();
-        final RootOid oid = this.registeredServices.get(serviceSpecId);
-        return oid;
-    }
-
+    //region > getServices, getService
 
     // REVIEW why does this get called multiple times when starting up
     public List<ObjectAdapter> getServices() {
@@ -577,6 +569,17 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
         return serviceAdapter;
     }
 
+    /**
+     * Returns the OID for the adapted service. This allows a service object to
+     * be given the same OID that it had when it was created in a different
+     * session.
+     */
+    private RootOid getOidForService(final ObjectSpecification serviceSpec) {
+        final ObjectSpecId serviceSpecId = serviceSpec.getSpecId();
+        final RootOid oid = this.registeredServices.get(serviceSpecId);
+        return oid;
+    }
+
     //endregion
 
     //region > fixture installation
@@ -631,11 +634,6 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
         return !installFixtures;
     }
 
-    @Override
-    protected void finalize() throws Throwable {
-        super.finalize();
-        LOG.debug("finalizing persistence session");
-    }
     //endregion
 
     //region > loadObject
@@ -694,12 +692,12 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
         // could be refactored to use getAdapterManager().adapterFor(...)
         ensureThatArg(oid, is(notNullValue()));
 
-        final ObjectAdapter adapter = getAdapterManager().getAdapterFor(oid);
+        final ObjectAdapter adapter = adapterManager.getAdapterFor(oid);
         if (adapter != null) {
             return adapter;
         }
 
-        return getTransactionManager().executeWithinTransaction(
+        return transactionManager.executeWithinTransaction(
                 new TransactionalClosureWithReturn<ObjectAdapter>() {
                     @Override
                     public ObjectAdapter execute() {
@@ -708,7 +706,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
                         }
 
                         final Object pojo = loadPojo(oid);
-                        return getAdapterManager().mapRecreatedPojo(oid, pojo);
+                        return adapterManager.mapRecreatedPojo(oid, pojo);
                     }
                 });
     }
@@ -899,15 +897,12 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
         if (LOG.isDebugEnabled()) {
             LOG.debug("destroyObject " + adapter);
         }
-        getTransactionManager().executeWithinTransaction(new TransactionalClosure() {
-
+        transactionManager.executeWithinTransaction(new TransactionalClosure() {
             @Override
             public void execute() {
                 final DestroyObjectCommand command = newDestroyObjectCommand(adapter);
-                getTransactionManager().addCommand(command);
+                transactionManager.addCommand(command);
             }
-
-
         });
     }
 
@@ -934,7 +929,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
      * </p>
      *
      */
-    public CreateObjectCommand newCreateObjectCommand(final ObjectAdapter adapter) {
+    private CreateObjectCommand newCreateObjectCommand(final ObjectAdapter adapter) {
         ensureOpened();
         ensureInSession();
 
@@ -951,9 +946,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
         ensureThatContext(IsisContext.inSession(), is(true));
     }
 
-
-
-    public DestroyObjectCommand newDestroyObjectCommand(final ObjectAdapter adapter) {
+    private DestroyObjectCommand newDestroyObjectCommand(final ObjectAdapter adapter) {
         ensureOpened();
         ensureInSession();
 

http://git-wip-us.apache.org/repos/asf/isis/blob/97eed796/core/runtime/src/test/java/org/apache/isis/core/runtime/persistence/adapterfactory/pojo/PojoAdapterTest.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/test/java/org/apache/isis/core/runtime/persistence/adapterfactory/pojo/PojoAdapterTest.java b/core/runtime/src/test/java/org/apache/isis/core/runtime/persistence/adapterfactory/pojo/PojoAdapterTest.java
index 687a944..04702b2 100644
--- a/core/runtime/src/test/java/org/apache/isis/core/runtime/persistence/adapterfactory/pojo/PojoAdapterTest.java
+++ b/core/runtime/src/test/java/org/apache/isis/core/runtime/persistence/adapterfactory/pojo/PojoAdapterTest.java
@@ -70,7 +70,7 @@ public class PojoAdapterTest {
         domainObject = new RuntimeTestPojo();
         
         adapter = new PojoAdapter(domainObject, RootOid.create(ObjectSpecId.of("CUS"), "1"), mockAuthenticationSession,
-                mockLocalization, mockSpecificationLoader, mockObjectAdapterLookup);
+                mockLocalization, mockSpecificationLoader, persistenceSession);
         adapter.setVersion(mockVersion);
         
         allowUnimportantMethodCallsOn(mockVersion);

http://git-wip-us.apache.org/repos/asf/isis/blob/97eed796/core/runtime/src/test/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PojoAdapterBuilder.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/test/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PojoAdapterBuilder.java b/core/runtime/src/test/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PojoAdapterBuilder.java
index 1145141..68c5ec5 100644
--- a/core/runtime/src/test/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PojoAdapterBuilder.java
+++ b/core/runtime/src/test/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PojoAdapterBuilder.java
@@ -200,7 +200,7 @@ public class PojoAdapterBuilder {
         final RootOid rootOid = persistence.createOid(objectSpecId, identifier);
         final Oid oid = type.oidFor(rootOid, objectSpecId, aggregatedId);
         final PojoAdapter pojoAdapter = new PojoAdapter(pojo, oid, authenticationSession, localization,
-                specificationLoader, objectAdapterLookup) {
+                specificationLoader, persistenceSession) {
             @Override
             public ObjectSpecification getSpecification() { return objectSpec != null? objectSpec: super.getSpecification(); }
             @Override