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 19:12:21 UTC
[isis] 03/04: ISIS-2033: remove PojoAdapter
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 64090580a3aa7b579cdf20ab23e4a8d08e52d05b
Author: Andi Huber <ah...@apache.org>
AuthorDate: Tue Dec 22 19:26:08 2020 +0100
ISIS-2033: remove PojoAdapter
---
.../objectadapter/ObjectAdapterContext.java | 16 ++-
...ObjectAdapterContext_ObjectAdapterProvider.java | 9 +-
.../jdo/integration/objectadapter/PojoAdapter.java | 149 ---------------------
3 files changed, 18 insertions(+), 156 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 ccec944..c793907 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
@@ -23,6 +23,7 @@ import org.apache.isis.commons.internal.exceptions._Exceptions;
import org.apache.isis.core.metamodel.adapter.oid.RootOid;
import org.apache.isis.core.metamodel.context.MetaModelContext;
import org.apache.isis.core.metamodel.spec.ManagedObject;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
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;
@@ -108,7 +109,10 @@ final public class ObjectAdapterContext {
}
public ManagedObject recreatePojo(RootOid oid, Object recreatedPojo) {
- final ManagedObject createdAdapter = createRootOrAggregatedAdapter(oid, recreatedPojo);
+
+ val spec = getSpecificationLoader().loadSpecification(recreatedPojo.getClass());
+
+ final ManagedObject createdAdapter = createRootOrAggregatedAdapter(spec, oid, recreatedPojo);
return injectServices(createdAdapter);
}
@@ -124,12 +128,16 @@ final public class ObjectAdapterContext {
return adapter;
}
- private ManagedObject createRootOrAggregatedAdapter(final RootOid oid, final Object pojo) {
+ private ManagedObject createRootOrAggregatedAdapter(
+ final @NonNull ObjectSpecification spec,
+ final RootOid oid,
+ final Object pojo) {
+
if(oid instanceof RootOid) {
final RootOid rootOid = (RootOid) oid;
- return PojoAdapter.of(pojo, rootOid, getSpecificationLoader());
+ return ManagedObject.identified(spec, pojo, rootOid);
}
- throw _Exceptions.illegalArgument("Parented Oids are no longer supported.");
+ throw _Exceptions.illegalArgument("Parented Oids are no longer supported, or cannot use Value Oid.");
}
// -- OBJECT ADAPTER PROVIDER SUPPORT
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 9913f14..3eb8b0a 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
@@ -18,6 +18,7 @@
*/
package org.apache.isis.persistence.jdo.integration.objectadapter;
+import org.apache.isis.commons.internal.assertions._Assert;
import org.apache.isis.core.metamodel.objectmanager.ObjectManager;
import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.runtime.context.RuntimeContext;
@@ -53,9 +54,11 @@ class ObjectAdapterContext_ObjectAdapterProvider implements ObjectAdapterProvide
val adapter = objectManager.adapt(pojo);
val rootOid = objectManager.identifyObject(adapter);
- val newAdapter = PojoAdapter.of(pojo, rootOid, objectAdapterContext.getSpecificationLoader());
- objectAdapterContext.injectServices(newAdapter);
- return newAdapter;
+ //val newAdapter = PojoAdapter.of(pojo, rootOid, objectAdapterContext.getSpecificationLoader());
+
+ _Assert.assertEquals(rootOid, adapter.getRootOid().orElse(null));
+
+ return objectAdapterContext.injectServices(adapter);
}
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/PojoAdapter.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/PojoAdapter.java
deleted file mode 100644
index be0b466..0000000
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/PojoAdapter.java
+++ /dev/null
@@ -1,149 +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 java.util.Objects;
-import java.util.Optional;
-
-import org.apache.isis.commons.exceptions.IsisException;
-import org.apache.isis.commons.internal.base._Lazy;
-import org.apache.isis.core.metamodel.adapter.oid.Oid;
-import org.apache.isis.core.metamodel.adapter.oid.RootOid;
-import org.apache.isis.core.metamodel.commons.ToString;
-import org.apache.isis.core.metamodel.spec.ManagedObject;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
-
-import static org.apache.isis.commons.internal.base._With.requires;
-
-import lombok.Getter;
-import lombok.val;
-
-final class PojoAdapter implements ManagedObject {
-
- private final SpecificationLoader specificationLoader;
-
- @Getter(onMethod = @__(@Override)) private final Object pojo;
- @Getter private final Oid oid;
-
- // -- FACTORIES
-
- public static PojoAdapter of(
- final Object pojo,
- final Oid oid,
- final SpecificationLoader specificationLoader) {
- return new PojoAdapter(pojo, oid, specificationLoader);
- }
-
- private PojoAdapter(
- final Object pojo,
- final Oid oid,
- final SpecificationLoader specificationLoader) {
-
- Objects.requireNonNull(pojo);
-
- this.specificationLoader = specificationLoader;
-
- if (pojo instanceof ManagedObject) {
- throw new IsisException("ObjectAdapter can't be used to wrap an ObjectAdapter: " + pojo);
- }
- if (pojo instanceof Oid) {
- throw new IsisException("ObjectAdapter can't be used to wrap an Oid: " + pojo);
- }
-
- this.pojo = pojo;
- this.oid = requires(oid, "oid");
- }
-
- // -- getSpecification
-
- final _Lazy<ObjectSpecification> objectSpecification = _Lazy.of(this::loadSpecification);
-
- @Override
- public ObjectSpecification getSpecification() {
- return objectSpecification.get();
- }
-
- private ObjectSpecification loadSpecification() {
- final Class<?> aClass = getPojo().getClass();
- final ObjectSpecification specification = specificationLoader.loadSpecification(aClass);
- return specification;
- }
-
- @Override
- public String toString() {
- final ToString str = new ToString(this);
- toString(str);
-
- // don't do title of any entities. For persistence entities, might
- // forces an unwanted resolve
- // of the object. For transient objects, may not be fully initialized.
-
- str.append("pojo-toString", pojo.toString());
- str.appendAsHex("pojo-hash", pojo.hashCode());
- return str.toString();
- }
-
- protected void toString(final ToString str) {
- str.append(aggregateResolveStateCode());
- final Oid oid = getOid();
- if (oid != null) {
- str.append(":");
- str.append(oid.toString());
- } else {
- str.append(":-");
- }
- str.setAddComma();
- if (!objectSpecification.isMemoized()) {
- str.append("class", getPojo().getClass().getName());
- } else {
- str.append("specification", getSpecification().getShortIdentifier());
- }
- }
-
- private String aggregateResolveStateCode() {
-
- // this is an approximate re-implementation...
- final Oid oid = getOid();
- if(oid != null) {
- return "B"; // bookmark-able
-// if(oid.isPersistent()) return "P";
-// if(oid.isTransient()) return "T";
-// if(oid.isViewModel()) return "V";
- }
- return "S"; // standalone adapter (value)
- }
-
- @Override
- public Optional<RootOid> getRootOid() {
- val oid = getOid();
- if (oid instanceof RootOid) {
- return Optional.of((RootOid)oid);
- }
- return Optional.empty();
- }
-
- @Override
- public boolean isRootOidMemoized() {
- return true; // oid is immutable
- }
-
-
-}