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