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/30 04:18:22 UTC

[isis] 01/06: ISIS-1976: remove InstanceAbstract

This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch v2
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 9072e5208cf1b4f0a832553dce8afc02ee664391
Author: Andi Huber <ah...@apache.org>
AuthorDate: Sun Sep 30 04:47:42 2018 +0200

    ISIS-1976: remove InstanceAbstract
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../isis/core/metamodel/spec/InstanceAbstract.java | 63 ----------------------
 .../runtime/persistence/adapter/PojoAdapter.java   | 13 ++---
 2 files changed, 7 insertions(+), 69 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/InstanceAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/InstanceAbstract.java
deleted file mode 100644
index 3d8a875..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/InstanceAbstract.java
+++ /dev/null
@@ -1,63 +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.core.metamodel.spec;
-
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-
-public abstract class InstanceAbstract implements Instance {
-
-    private Specification specification;
-
-    protected InstanceAbstract() {
-        this(null, null);
-    }
-
-    protected InstanceAbstract(final ObjectAdapter owner) {
-        this(owner, null);
-    }
-
-    protected InstanceAbstract(final ObjectAdapter owner, final Specification specification) {
-        this.specification = specification;
-    }
-
-    @Override
-    public Specification getSpecification() {
-        if (specification == null) {
-            specification = loadSpecification();
-        }
-        return specification;
-    }
-
-    /**
-     * Allows the specification to be lazily loaded.
-     */
-    protected Specification loadSpecification() {
-        return null;
-    }
-
-    /**
-     * Allows subclasses to get specification without necessarily triggering
-     * {@link #loadSpecification() loading} if not yet known.
-     */
-    protected final Specification getSpecificationNoLoad() {
-        return specification;
-    }
-
-}
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
index 8bcf6e7..1cd3690 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
@@ -24,6 +24,7 @@ import static org.apache.isis.commons.internal.base._With.requires;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.isis.commons.internal.base._Lazy;
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.commons.exceptions.IsisException;
 import org.apache.isis.core.commons.util.ToString;
@@ -35,13 +36,12 @@ 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.spec.Instance;
-import org.apache.isis.core.metamodel.spec.InstanceAbstract;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.Specification;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
 
-public final class PojoAdapter extends InstanceAbstract implements ObjectAdapter {
+public final class PojoAdapter implements ObjectAdapter {
 
     private final static Logger LOG = LoggerFactory.getLogger(PojoAdapter.class);
 
@@ -91,17 +91,18 @@ public final class PojoAdapter extends InstanceAbstract implements ObjectAdapter
     }
     
     // -- getSpecification
+    
+    final _Lazy<ObjectSpecification> objectSpecification = _Lazy.of(this::loadSpecification);
 
     /**
      * Downcasts {@link #getSpecification()}.
      */
     @Override
     public ObjectSpecification getSpecification() {
-        return (ObjectSpecification) super.getSpecification();
+        return objectSpecification.get();
     }
 
-    @Override
-    protected ObjectSpecification loadSpecification() {
+    private ObjectSpecification loadSpecification() {
         final Class<?> aClass = getObject().getClass();
         final ObjectSpecification specification = specificationLoader.loadSpecification(aClass);
         return specification;
@@ -240,7 +241,7 @@ public final class PojoAdapter extends InstanceAbstract implements ObjectAdapter
             str.append(":-");
         }
         str.setAddComma();
-        if (getSpecificationNoLoad() == null) {
+        if (!objectSpecification.isMemoized()) {
             str.append("class", getObject().getClass().getName());
         } else {
             str.append("specification", getSpecification().getShortIdentifier());