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 {