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 2018/09/14 06:31:37 UTC

[isis] 02/02: ISIS-1976: further removing OAs where not required

This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit d1e90152d9dfb4a252daa434d4c81599a29aa9a5
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Sep 14 08:31:23 2018 +0200

    ISIS-1976: further removing OAs where not required
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../isis/core/metamodel/adapter/ObjectAdapter.java | 14 +--------
 .../apache/isis/core/metamodel/spec/Instance.java  | 35 ++++++++++++++++++++++
 .../system/persistence/PersistenceSession4.java    | 17 ++++-------
 .../system/persistence/PersistenceSession5.java    | 19 ++++--------
 .../adaptermanager/ObjectAdapterContext.java       |  3 +-
 ...ObjectAdapterContext_LifecycleEventSupport.java |  3 +-
 6 files changed, 51 insertions(+), 40 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java
index d005984..806ca13 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java
@@ -431,19 +431,7 @@ public interface ObjectAdapter extends Instance {
                 if(args.get(i) == null && cls.isPrimitive()) {
                     final Object object = ClassExtensions.toDefault(cls);
                     
-                    final Instance adapter = new Instance() {
-                        
-                        @Override
-                        public Specification getSpecification() {
-                            return null; // not needed for primitives
-                        }
-                        
-                        @Override
-                        public Object getObject() {
-                            return object;
-                        }
-                    }; 
-                            
+                    final Instance adapter = Instance.of((ObjectSpecification)null, object);
                     args.set(i, adapter);
                 }
             }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/Instance.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/Instance.java
index d2f46a7..ea387ee 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/Instance.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/Instance.java
@@ -19,6 +19,11 @@
 
 package org.apache.isis.core.metamodel.spec;
 
+import static org.apache.isis.commons.internal.base._With.requires;
+
+import java.util.function.Supplier;
+
+import org.apache.isis.commons.internal.base._Lazy;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 
 /**
@@ -42,5 +47,35 @@ public interface Instance {
      * with the framework.
      */
     Object getObject();
+    
+    // -- FACTORIES
+    
+    public static Instance of(Specification specification, Object pojo) {
+        return new Instance() {
+            @Override
+            public Specification getSpecification() {
+                return specification;
+            }
+            @Override
+            public Object getObject() {
+                return pojo;
+            }
+        };
+    }
+    
+    public static Instance of(Supplier<Specification> specificationSupplier, Object pojo) {
+        requires(specificationSupplier, "specificationSupplier");
+        return new Instance() {
+            private final _Lazy<Specification> specification = _Lazy.of(specificationSupplier);
+            @Override
+            public Specification getSpecification() {
+                return specification.get();
+            }
+            @Override
+            public Object getObject() {
+                return pojo;
+            }
+        };
+    }
 
 }
diff --git a/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java b/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java
index fbe578c..428e963 100644
--- a/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java
+++ b/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java
@@ -56,11 +56,8 @@ import org.apache.isis.core.commons.exceptions.IsisException;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapterByIdProvider;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapterProvider;
-import org.apache.isis.core.metamodel.adapter.concurrency.ConcurrencyChecking;
 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;
 import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet;
 import org.apache.isis.core.metamodel.facets.object.callbacks.CallbackFacet;
@@ -74,11 +71,10 @@ import org.apache.isis.core.metamodel.facets.object.callbacks.RemovingCallbackFa
 import org.apache.isis.core.metamodel.facets.object.callbacks.RemovingLifecycleEventFacet;
 import org.apache.isis.core.metamodel.facets.object.callbacks.UpdatedCallbackFacet;
 import org.apache.isis.core.metamodel.facets.object.callbacks.UpdatedLifecycleEventFacet;
-import org.apache.isis.core.metamodel.facets.object.callbacks.UpdatingCallbackFacet;
-import org.apache.isis.core.metamodel.facets.object.callbacks.UpdatingLifecycleEventFacet;
 import org.apache.isis.core.metamodel.services.ServicesInjector;
 import org.apache.isis.core.metamodel.services.container.query.QueryCardinality;
 import org.apache.isis.core.metamodel.spec.FreeStandingList;
+import org.apache.isis.core.metamodel.spec.Instance;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.runtime.persistence.FixturesInstalledFlag;
 import org.apache.isis.core.runtime.persistence.NotPersistableException;
@@ -787,14 +783,11 @@ implements IsisLifecycleListener.PersistenceSessionLifecycleManagement {
      */
     @Override
     public void invokeIsisPersistingCallback(final Persistable pojo) {
-        final ObjectAdapter adapter = null;
-        if (adapter == null) {
-            // not expected.
-            return;
-        }
+        if (isTransient(pojo)) {
+            final Instance adapter = Instance.of(
+                    ()->getSpecificationLoader().loadSpecification(pojo.getClass()),
+                    pojo);
 
-        final RootOid isisOid = (RootOid) adapter.getOid();
-        if (isisOid.isTransient()) {
             // persisting
             // previously this was performed in the DataNucleusSimplePersistAlgorithm.
             CallbackFacet.Util.callCallback(adapter, PersistingCallbackFacet.class);
diff --git a/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5.java b/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5.java
index be3c45f..ff546ed 100644
--- a/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5.java
+++ b/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5.java
@@ -56,11 +56,8 @@ import org.apache.isis.core.commons.exceptions.IsisException;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapterByIdProvider;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapterProvider;
-import org.apache.isis.core.metamodel.adapter.concurrency.ConcurrencyChecking;
 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;
 import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet;
 import org.apache.isis.core.metamodel.facets.object.callbacks.CallbackFacet;
@@ -74,11 +71,10 @@ import org.apache.isis.core.metamodel.facets.object.callbacks.RemovingCallbackFa
 import org.apache.isis.core.metamodel.facets.object.callbacks.RemovingLifecycleEventFacet;
 import org.apache.isis.core.metamodel.facets.object.callbacks.UpdatedCallbackFacet;
 import org.apache.isis.core.metamodel.facets.object.callbacks.UpdatedLifecycleEventFacet;
-import org.apache.isis.core.metamodel.facets.object.callbacks.UpdatingCallbackFacet;
-import org.apache.isis.core.metamodel.facets.object.callbacks.UpdatingLifecycleEventFacet;
 import org.apache.isis.core.metamodel.services.ServicesInjector;
 import org.apache.isis.core.metamodel.services.container.query.QueryCardinality;
 import org.apache.isis.core.metamodel.spec.FreeStandingList;
+import org.apache.isis.core.metamodel.spec.Instance;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.runtime.persistence.FixturesInstalledFlag;
 import org.apache.isis.core.runtime.persistence.NotPersistableException;
@@ -787,14 +783,11 @@ implements IsisLifecycleListener.PersistenceSessionLifecycleManagement {
      */
     @Override
     public void invokeIsisPersistingCallback(final Persistable pojo) {
-        final ObjectAdapter adapter = null;
-        if (adapter == null) {
-            // not expected.
-            return;
-        }
-
-        final RootOid isisOid = (RootOid) adapter.getOid();
-        if (isisOid.isTransient()) {
+        if (isTransient(pojo)) {
+            final Instance adapter = Instance.of(
+                    ()->getSpecificationLoader().loadSpecification(pojo.getClass()),
+                    pojo);
+            
             // persisting
             // previously this was performed in the DataNucleusSimplePersistAlgorithm.
             CallbackFacet.Util.callCallback(adapter, PersistingCallbackFacet.class);
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
index 0cf961a..d493d29 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
@@ -36,6 +36,7 @@ import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.adapter.version.Version;
 import org.apache.isis.core.metamodel.facets.object.callbacks.LifecycleEventFacet;
 import org.apache.isis.core.metamodel.services.ServicesInjector;
+import org.apache.isis.core.metamodel.spec.Instance;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
@@ -247,7 +248,7 @@ final public class ObjectAdapterContext {
     // -- LIFECYCLE EVENT SUPPORT
 
     public void postLifecycleEventIfRequired(
-            final ObjectAdapter adapter,
+            final Instance adapter,
             final Class<? extends LifecycleEventFacet> lifecycleEventFacetClass) {
         lifecycleEventMixin.postLifecycleEventIfRequired(adapter, lifecycleEventFacetClass);
     }
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_LifecycleEventSupport.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_LifecycleEventSupport.java
index 217ca05..34fb8ba 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_LifecycleEventSupport.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_LifecycleEventSupport.java
@@ -36,6 +36,7 @@ import org.apache.isis.core.metamodel.facets.object.callbacks.CreatedLifecycleEv
 import org.apache.isis.core.metamodel.facets.object.callbacks.LifecycleEventFacet;
 import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet;
 import org.apache.isis.core.metamodel.services.ServicesInjector;
+import org.apache.isis.core.metamodel.spec.Instance;
 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;
@@ -72,7 +73,7 @@ class ObjectAdapterContext_LifecycleEventSupport {
     
     @SuppressWarnings({ "unchecked", "rawtypes" })
     void postLifecycleEventIfRequired(
-            final ObjectAdapter adapter,
+            final Instance adapter,
             final Class<? extends LifecycleEventFacet> lifecycleEventFacetClass) {
         final LifecycleEventFacet facet = adapter.getSpecification().getFacet(lifecycleEventFacetClass);
         if(facet != null) {