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
-    }
-
-
-}