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 14:53:23 UTC

[isis] 02/02: ISIS-2033: simplify ObjectAdapterContext

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

commit 883bf63ca67f88488c5f112c17a30b68e3e30272
Author: Andi Huber <ah...@apache.org>
AuthorDate: Tue Dec 22 15:53:01 2020 +0100

    ISIS-2033: simplify ObjectAdapterContext
---
 .../objectadapter/ObjectAdapterContext.java        | 57 +++------------
 .../ObjectAdapterContext_Factories.java            | 81 ----------------------
 ...ObjectAdapterContext_ObjectAdapterProvider.java |  2 +-
 .../jdo/integration/objectadapter/_Factories.java  | 58 ++++++++++++++++
 4 files changed, 67 insertions(+), 131 deletions(-)

diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/ObjectAdapterContext.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/ObjectAdapterContext.java
index 3cfc31d..e600019 100644
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/ObjectAdapterContext.java
+++ b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/ObjectAdapterContext.java
@@ -18,19 +18,17 @@
  */
 package org.apache.isis.persistence.jdo.integration.objectadapter;
 
-import java.util.Objects;
-
 import org.apache.isis.applib.services.inject.ServiceInjector;
 import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.metamodel.adapter.oid.ParentedOid;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.context.MetaModelContext;
-import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.runtime.context.RuntimeContextBase;
 import org.apache.isis.persistence.jdo.integration.persistence.IsisPersistenceSessionJdo;
 
 import lombok.Getter;
+import lombok.NonNull;
 import lombok.val;
 import lombok.extern.log4j.Log4j2;
 
@@ -70,8 +68,6 @@ final public class ObjectAdapterContext {
         this.persistenceSession = persistenceSession;
         this.specificationLoader = mmc.getSpecificationLoader();
         this.serviceInjector = mmc.getServiceInjector();
-
-        this.objectAdapterFactories = new ObjectAdapterContext_Factories(specificationLoader);
     }
 
     // -- DEBUG
@@ -100,44 +96,6 @@ final public class ObjectAdapterContext {
         return newIdentifierMixin.createPersistentOid(pojo);
     }
 
-    // -- FACTORIES
-
-    // package private
-    static interface ObjectAdapterFactories {
-
-        /**
-         * Creates (but does not {@link #mapAndInjectServices(ObjectAdapter) map}) a new
-         * root {@link ObjectAdapter adapter} for the supplied domain object.
-         *
-         * @see #createStandaloneAdapter(Object)
-         * @see #createCollectionAdapter(Object, ParentedOid)
-         */
-        ObjectAdapter createRootAdapter(Object pojo, RootOid rootOid);
-
-        ObjectAdapter createCollectionAdapter(Object pojo, ParentedOid collectionOid);
-
-        /**
-         * Creates an {@link ObjectAdapter adapter} to represent a collection
-         * of the parent.
-         *
-         * <p>
-         * The returned adapter will have a {@link ParentedOid}; its version
-         * and its persistence are the same as its owning parent.
-         *
-         * <p>
-         * Should only be called if the pojo is known not to be
-         * {@link #lookupAdapterFor(Object) mapped}.
-         */
-        ObjectAdapter createCollectionAdapter(Object pojo, RootOid parentOid, OneToManyAssociation otma);
-    }
-
-    private final ObjectAdapterFactories objectAdapterFactories;
-
-    // package private
-    ObjectAdapterFactories getFactories() {
-        return objectAdapterFactories;
-    }
-
     // -- ADAPTER MANAGER LEGACY
 
     public ObjectAdapter fetchPersistent(final Object pojo) {
@@ -155,12 +113,13 @@ final public class ObjectAdapterContext {
     }
 
     // package private
-    ObjectAdapter injectServices(final ObjectAdapter adapter) {
-        Objects.requireNonNull(adapter);
-        if(adapter.getOid().isValue()) {
+    ObjectAdapter injectServices(final @NonNull ObjectAdapter adapter) {
+        val spec = adapter.getSpecification();
+        if(spec==null 
+                || spec.isValue()) {
             return adapter; // guard against value objects
         }
-        final Object pojo = adapter.getPojo();
+        val pojo = adapter.getPojo();
         serviceInjector.injectServicesInto(pojo);
         return adapter;
     }
@@ -170,10 +129,10 @@ final public class ObjectAdapterContext {
         final ObjectAdapter createdAdapter;
         if(oid instanceof RootOid) {
             final RootOid rootOid = (RootOid) oid;
-            createdAdapter = getFactories().createRootAdapter(pojo, rootOid);
+            createdAdapter = _Factories.createRootAdapter(pojo, rootOid, getSpecificationLoader());
         } else /*if (oid instanceof CollectionOid)*/ {
             final ParentedOid collectionOid = (ParentedOid) oid;
-            createdAdapter = getFactories().createCollectionAdapter(pojo, collectionOid);
+            createdAdapter = _Factories.createCollectionAdapter(pojo, collectionOid, getSpecificationLoader());
         }
         return createdAdapter;
     }
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/ObjectAdapterContext_Factories.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/ObjectAdapterContext_Factories.java
deleted file mode 100644
index 74e563e..0000000
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/ObjectAdapterContext_Factories.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.isis.persistence.jdo.integration.objectadapter;
-
-import org.apache.isis.commons.internal.assertions._Assert;
-import org.apache.isis.core.metamodel.adapter.oid.Oid;
-import org.apache.isis.core.metamodel.adapter.oid.ParentedOid;
-import org.apache.isis.core.metamodel.adapter.oid.RootOid;
-import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
-import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
-import org.apache.isis.persistence.jdo.integration.objectadapter.ObjectAdapterContext.ObjectAdapterFactories;
-
-import static org.apache.isis.commons.internal.base._With.requires;
-
-import lombok.RequiredArgsConstructor;
-
-/**
- * package private mixin for ObjectAdapterContext
- * <p>
- * Responsibility: provides ObjectAdapter factories
- * </p>
- * @since 2.0
- */
-//@Log4j2
-@RequiredArgsConstructor
-class ObjectAdapterContext_Factories implements ObjectAdapterFactories {
-
-    private final SpecificationLoader specificationLoader;
-
-    @Override
-    public ObjectAdapter createRootAdapter(final Object pojo, RootOid rootOid) {
-        requires(rootOid, "rootOid");
-        return createAdapter(pojo, rootOid);
-    }
-
-    @Override
-    public ObjectAdapter createCollectionAdapter(
-            final Object pojo,
-            ParentedOid collectionOid) {
-        requires(collectionOid, "collectionOid");
-        return createAdapter(pojo, collectionOid);
-    }
-
-    @Override
-    public ObjectAdapter createCollectionAdapter(
-            final Object pojo,
-            final RootOid parentOid,
-            final OneToManyAssociation otma) {
-
-        _Assert.assertNotNull(pojo);
-
-        // persistence of collection follows the parent
-        final ParentedOid collectionOid = Oid.Factory.parented(parentOid, otma);
-        final ObjectAdapter collectionAdapter = createCollectionAdapter(pojo, collectionOid);
-        return collectionAdapter;
-    }
-
-    private ObjectAdapter createAdapter(
-            final Object pojo,
-            final Oid oid) {
-        return PojoAdapter.of(
-                pojo, oid,
-                specificationLoader);
-    }
-}
\ No newline at end of file
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/ObjectAdapterContext_ObjectAdapterProvider.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/ObjectAdapterContext_ObjectAdapterProvider.java
index b4f9727..34eef69 100644
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/ObjectAdapterContext_ObjectAdapterProvider.java
+++ b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/ObjectAdapterContext_ObjectAdapterProvider.java
@@ -52,7 +52,7 @@ class ObjectAdapterContext_ObjectAdapterProvider implements ObjectAdapterProvide
 
         val adapter = objectManager.adapt(pojo);
         val rootOid = objectManager.identifyObject(adapter);
-        val newAdapter = objectAdapterContext.getFactories().createRootAdapter(pojo, rootOid);
+        val newAdapter = _Factories.createRootAdapter(pojo, rootOid, objectAdapterContext.getSpecificationLoader());
         return objectAdapterContext.injectServices(newAdapter);
     }
 
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/_Factories.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/_Factories.java
new file mode 100644
index 0000000..fd3e71f
--- /dev/null
+++ b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/_Factories.java
@@ -0,0 +1,58 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.isis.persistence.jdo.integration.objectadapter;
+
+import org.apache.isis.core.metamodel.adapter.oid.Oid;
+import org.apache.isis.core.metamodel.adapter.oid.ParentedOid;
+import org.apache.isis.core.metamodel.adapter.oid.RootOid;
+import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
+import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
+
+import lombok.NonNull;
+
+final class _Factories {
+
+    public static ObjectAdapter createRootAdapter(
+            final Object pojo, 
+            final @NonNull RootOid rootOid, 
+            final @NonNull SpecificationLoader specificationLoader) {
+        
+        return PojoAdapter.of(pojo, rootOid, specificationLoader);
+    }
+
+    public static ObjectAdapter createCollectionAdapter(
+            final Object pojo,
+            final @NonNull ParentedOid collectionOid, 
+            final @NonNull SpecificationLoader specificationLoader) {
+        return PojoAdapter.of(pojo, collectionOid, specificationLoader);
+    }
+
+    public static ObjectAdapter createCollectionAdapter(
+            final @NonNull Object pojo,
+            final RootOid parentOid,
+            final OneToManyAssociation otma, 
+            final @NonNull SpecificationLoader specificationLoader) {
+
+        // persistence of collection follows the parent
+        final ParentedOid collectionOid = Oid.Factory.parented(parentOid, otma);
+        return createCollectionAdapter(pojo, collectionOid, specificationLoader);
+    }
+
+    
+}
\ No newline at end of file