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 e93d8d7542bce535bb18ddddc86a671f4cd9ea72
Author: Andi Huber <ahu...@apache.org>
AuthorDate: Mon Aug 29 08:28:38 2022 +0200

    ISIS-3167: prepare removal of _ManagedObjectWithLazySpec
---
 .../isis/core/metamodel/object/ManagedObject.java  | 116 +++++++++++++++------
 .../object/_ManagedObjectWithEagerSpec.java        |   1 +
 .../object/_ManagedObjectWithLazySpec.java         |   1 +
 3 files changed, 87 insertions(+), 31 deletions(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/ManagedObject.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/ManagedObject.java
index 3d965b3416..71cc7e5872 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/ManagedObject.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/ManagedObject.java
@@ -32,7 +32,6 @@ import 
org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.core.metamodel.context.HasMetaModelContext;
 import org.apache.isis.core.metamodel.facets.object.icon.ObjectIcon;
 import org.apache.isis.core.metamodel.facets.object.title.TitleRenderRequest;
-import org.apache.isis.core.metamodel.object.ManagedObject.Specialization;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 
@@ -365,63 +364,79 @@ public interface ManagedObject extends 
HasMetaModelContext {
 
     /**
      * Factory for Specialization#UNSPECIFIED.
-     * @see Specialization.TypePolicy#NO_TYPE
-     * @see Specialization.BookmarkPolicy#NO_BOOKMARK
-     * @see Specialization.PojoPolicy#NO_POJO
+     * @see ManagedObject.Specialization.TypePolicy#NO_TYPE
+     * @see ManagedObject.Specialization.BookmarkPolicy#NO_BOOKMARK
+     * @see ManagedObject.Specialization.PojoPolicy#NO_POJO
      */
     static ManagedObject unspecified() {
         return _ManagedObjectUnspecified.INSTANCE;
     }
     /**
      * EMPTY
-     * @see Specialization.TypePolicy#ABSTRACT_TYPE_ALLOWED
-     * @see Specialization.BookmarkPolicy#NO_BOOKMARK
-     * @see Specialization.PojoPolicy#NO_POJO
+     * @see ManagedObject.Specialization.TypePolicy#ABSTRACT_TYPE_ALLOWED
+     * @see ManagedObject.Specialization.BookmarkPolicy#NO_BOOKMARK
+     * @see ManagedObject.Specialization.PojoPolicy#NO_POJO
      */
     static ManagedObject empty(final @NonNull ObjectSpecification spec) {
-        return new _ManagedObjectWithEagerSpec(spec, null);
+        return new _ManagedObjectEmpty(spec);
     }
     /**
      * VALUE
-     * @see Specialization.TypePolicy#EXACT_TYPE_REQUIRED
-     * @see Specialization.BookmarkPolicy#IMMUTABLE
-     * @see Specialization.PojoPolicy#IMMUTABLE
+     * @param pojo
+     * @param spec
+     * @see ManagedObject.Specialization.TypePolicy#EXACT_TYPE_REQUIRED
+     * @see ManagedObject.Specialization.BookmarkPolicy#IMMUTABLE
+     * @see ManagedObject.Specialization.PojoPolicy#IMMUTABLE
      */
-    static ManagedObject value() {
-        return null; //FIXME
+    static ManagedObject value(
+            final @NonNull ObjectSpecification spec,
+            final @NonNull Object pojo) {
+        return new _ManagedObjectWithEagerSpec(spec, pojo); //FIXME
     }
     /**
      * SERVICE
-     * @see Specialization.TypePolicy#EXACT_TYPE_REQUIRED
-     * @see Specialization.BookmarkPolicy#IMMUTABLE
-     * @see Specialization.PojoPolicy#IMMUTABLE
+     * @param pojo
+     * @param spec
+     * @see ManagedObject.Specialization.TypePolicy#EXACT_TYPE_REQUIRED
+     * @see ManagedObject.Specialization.BookmarkPolicy#IMMUTABLE
+     * @see ManagedObject.Specialization.PojoPolicy#IMMUTABLE
      */
-    static ManagedObject service() {
-        return null; //FIXME
+    static ManagedObject service(
+            final @NonNull ObjectSpecification spec,
+            final @NonNull Object pojo) {
+        return new _ManagedObjectWithEagerSpec(spec, pojo); //FIXME
     }
     /**
      * VIEWMODEL
-     * @see Specialization.TypePolicy#EXACT_TYPE_REQUIRED
-     * @see Specialization.BookmarkPolicy#REFRESHABLE
-     * @see Specialization.PojoPolicy#STATEFUL
+     * @param pojo
+     * @param spec
+     * @see ManagedObject.Specialization.TypePolicy#EXACT_TYPE_REQUIRED
+     * @see ManagedObject.Specialization.BookmarkPolicy#REFRESHABLE
+     * @see ManagedObject.Specialization.PojoPolicy#STATEFUL
      */
-    static ManagedObject viewmodel() {
-        return null; //FIXME
+    static ManagedObject viewmodel(
+            final @NonNull ObjectSpecification spec,
+            final @NonNull Object pojo) {
+        return new _ManagedObjectWithEagerSpec(spec, pojo); //FIXME
     }
     /**
      * ENTITY
-     * @see Specialization.TypePolicy#EXACT_TYPE_REQUIRED
-     * @see Specialization.BookmarkPolicy#IMMUTABLE
-     * @see Specialization.PojoPolicy#REFETCHABLE
+     * @param pojo
+     * @param spec
+     * @see ManagedObject.Specialization.TypePolicy#EXACT_TYPE_REQUIRED
+     * @see ManagedObject.Specialization.BookmarkPolicy#IMMUTABLE
+     * @see ManagedObject.Specialization.PojoPolicy#REFETCHABLE
      */
-    static ManagedObject entity() {
-        return null; //FIXME
+    static ManagedObject entity(
+            final @NonNull ObjectSpecification spec,
+            final @NonNull Object pojo) {
+        return new _ManagedObjectWithEagerSpec(spec, pojo); //FIXME
     }
     /**
      * PACKED
-     * @see Specialization.TypePolicy#ABSTRACT_TYPE_ALLOWED
-     * @see Specialization.BookmarkPolicy#NO_BOOKMARK
-     * @see Specialization.PojoPolicy#PACKED
+     * @see ManagedObject.Specialization.TypePolicy#ABSTRACT_TYPE_ALLOWED
+     * @see ManagedObject.Specialization.BookmarkPolicy#NO_BOOKMARK
+     * @see ManagedObject.Specialization.PojoPolicy#PACKED
      */
     static PackedManagedObject packed(
             final @NonNull ObjectSpecification elementSpec,
@@ -429,6 +444,45 @@ public interface ManagedObject extends HasMetaModelContext 
{
         return new _ManagedObjectPacked(elementSpec, nonScalar);
     }
 
+    /**
+     * For cases, when the pojo's specification is not available and needs to 
be looked up.
+     * <p>
+     * Fails if the pojo is non-scalar.
+     * @param specLoader - required
+     * @param pojo - required, required non-scalar
+     */
+    static ManagedObject wrapScalar(
+            final @NonNull SpecificationLoader specLoader,
+            final @NonNull Object pojo) {
+        if(pojo instanceof ManagedObject) {
+            return (ManagedObject)pojo;
+        }
+        
_Assert.assertFalse(_Collections.isCollectionOrArrayOrCanType(pojo.getClass()));
+
+        val spec = specLoader.specForType(pojo.getClass()).orElse(null);
+        val specialization = spec!=null
+                ? Specialization.inferFrom(spec, pojo)
+                : Specialization.UNSPECIFIED;
+
+        switch(specialization) {
+        case UNSPECIFIED:
+            return unspecified();
+        case VALUE:
+            return value(spec, pojo);
+        case SERVICE:
+            return service(spec, pojo);
+        case VIEWMODEL:
+            return viewmodel(spec, pojo);
+        case ENTITY:
+            return entity(spec, pojo);
+        // unreachable (in this context)
+        case EMPTY:
+        case PACKED:
+            throw _Exceptions.unexpectedCodeReach();
+        }
+        throw _Exceptions.unmatchedCase(specialization);
+    }
+
     // -- FACTORIES LEGACY
 
     @Deprecated
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/_ManagedObjectWithEagerSpec.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/_ManagedObjectWithEagerSpec.java
index 307e140361..d5aab332cf 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/_ManagedObjectWithEagerSpec.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/_ManagedObjectWithEagerSpec.java
@@ -34,6 +34,7 @@ import lombok.NonNull;
 import lombok.ToString;
 import lombok.val;
 
+@Deprecated
 @EqualsAndHashCode(of = "pojo", callSuper = false)
 @ToString(of = {"specification", "pojo"}) //ISIS-2317 make sure toString() is 
without side-effects
 @Getter
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/_ManagedObjectWithLazySpec.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/_ManagedObjectWithLazySpec.java
index 7b52c25002..0ca4c35c08 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/_ManagedObjectWithLazySpec.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/_ManagedObjectWithLazySpec.java
@@ -28,6 +28,7 @@ import lombok.EqualsAndHashCode;
 import lombok.Getter;
 import lombok.NonNull;
 
+@Deprecated
 @EqualsAndHashCode(of = "pojo", callSuper = false)
 final class _ManagedObjectWithLazySpec
 extends _ManagedObjectWithBookmark {

Reply via email to