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) {