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


The following commit(s) were added to refs/heads/master by this push:
     new 3ef5e520a1 ISIS-3199: purge ObjectMementoService
3ef5e520a1 is described below

commit 3ef5e520a103160ebcea725657587616d4fb5e9d
Author: Andi Huber <[email protected]>
AuthorDate: Mon Sep 5 16:50:31 2022 +0200

    ISIS-3199: purge ObjectMementoService
---
 .../_testing/MetaModelContext_forTesting.java      |  12 +-
 .../_testing/ObjectMementoService_forTesting.java  |  55 --------
 .../metamodel/object/_ManagedObjectSpecified.java  |  31 ++++-
 .../metamodel/objectmanager/ObjectManager.java     |   6 +-
 .../objectmanager/ObjectManagerDefault.java        |  49 +++++--
 .../memento/ObjectMementoForScalar.java}           |  23 ++--
 .../memento/ObjectMementoService.java              |  48 -------
 .../objectmanager}/memento/_Recreatable.java       |  14 +-
 .../objectmanager}/memento/_RecreatableLookup.java |   8 +-
 .../memento/_RecreatableSerializable.java          |  10 +-
 .../objectmanager}/memento/_RecreatableValue.java  |  10 +-
 .../IsisModuleCoreRuntimeServices.java             |   2 -
 .../memento/ObjectMementoServiceDefault.java       | 141 ---------------------
 .../choices/ChoiceProviderTestAbstract.java        |  16 ---
 14 files changed, 102 insertions(+), 323 deletions(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/_testing/MetaModelContext_forTesting.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/_testing/MetaModelContext_forTesting.java
index 8eac24bd36..c99e0b0456 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/_testing/MetaModelContext_forTesting.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/_testing/MetaModelContext_forTesting.java
@@ -79,7 +79,6 @@ import 
org.apache.isis.core.metamodel.facets.object.value.annotcfg.ValueFacetFor
 import org.apache.isis.core.metamodel.object.ManagedObject;
 import org.apache.isis.core.metamodel.objectmanager.ObjectManager;
 import org.apache.isis.core.metamodel.objectmanager.ObjectManagerDefault;
-import 
org.apache.isis.core.metamodel.objectmanager.memento.ObjectMementoService;
 import org.apache.isis.core.metamodel.progmodel.ProgrammingModel;
 import org.apache.isis.core.metamodel.progmodel.ProgrammingModelAbstract;
 import 
org.apache.isis.core.metamodel.progmodel.ProgrammingModelInitFilterDefault;
@@ -257,8 +256,7 @@ implements MetaModelContext {
                     _ManagedBeanAdapter.forTestingLazy(JaxbService.class, 
this::getJaxbService),
                     _ManagedBeanAdapter.forTestingLazy(MenuBarsService.class, 
this::getMenuBarsService),
                     _ManagedBeanAdapter.forTestingLazy(LayoutService.class, 
this::getLayoutService),
-                    
_ManagedBeanAdapter.forTestingLazy(SpecificationLoader.class, 
this::getSpecificationLoader),
-                    
_ManagedBeanAdapter.forTestingLazy(ObjectMementoService.class, 
this::getObjectMementoService)
+                    
_ManagedBeanAdapter.forTestingLazy(SpecificationLoader.class, 
this::getSpecificationLoader)
                 )
                 );
     }
@@ -379,14 +377,6 @@ implements MetaModelContext {
     @Builder.Default
     private final MessageService messageService = new MessageServiceNoop();
 
-    private ObjectMementoService objectMementoService;
-    private ObjectMementoService getObjectMementoService(){
-        if(objectMementoService==null) {
-            objectMementoService = new ObjectMementoService_forTesting();
-        }
-        return objectMementoService;
-    }
-
     @Override
     public ManagedObject getHomePageAdapter() {
         // not supported
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/_testing/ObjectMementoService_forTesting.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/_testing/ObjectMementoService_forTesting.java
deleted file mode 100644
index a57c4f73cb..0000000000
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/_testing/ObjectMementoService_forTesting.java
+++ /dev/null
@@ -1,55 +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._testing;
-
-import org.apache.isis.applib.id.LogicalType;
-import org.apache.isis.core.metamodel.object.ManagedObject;
-import org.apache.isis.core.metamodel.object.PackedManagedObject;
-import org.apache.isis.core.metamodel.objectmanager.memento.ObjectMemento;
-import 
org.apache.isis.core.metamodel.objectmanager.memento.ObjectMementoService;
-
-public class ObjectMementoService_forTesting
-implements ObjectMementoService {
-
-    @Override
-    public ObjectMemento mementoForSingle(final ManagedObject adapter) {
-        return null;
-    }
-
-    @Override
-    public ObjectMemento mementoForMulti(final PackedManagedObject adapter) {
-        return null;
-    }
-
-    @Override
-    public ObjectMemento mementoForPojo(final Object pojo) {
-        return null;
-    }
-
-    @Override
-    public ObjectMemento mementoForPojos(final LogicalType logicalType, final 
Iterable<Object> iterablePojos) {
-        return null;
-    }
-
-    @Override
-    public ManagedObject reconstructObject(final ObjectMemento memento) {
-        return null;
-    }
-
-}
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/_ManagedObjectSpecified.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/_ManagedObjectSpecified.java
index 1921b99926..00e11aaa64 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/_ManagedObjectSpecified.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/_ManagedObjectSpecified.java
@@ -18,9 +18,13 @@
  */
 package org.apache.isis.core.metamodel.object;
 
+import java.util.ArrayList;
 import java.util.Objects;
 import java.util.Optional;
 import java.util.function.Supplier;
+import java.util.stream.Collectors;
+
+import org.springframework.lang.Nullable;
 
 import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.commons.internal.assertions._Assert;
@@ -28,7 +32,9 @@ import 
org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.core.metamodel.context.MetaModelContext;
 import org.apache.isis.core.metamodel.facets.object.title.TitleRenderRequest;
 import org.apache.isis.core.metamodel.objectmanager.memento.ObjectMemento;
-import 
org.apache.isis.core.metamodel.objectmanager.memento.ObjectMementoService;
+import 
org.apache.isis.core.metamodel.objectmanager.memento.ObjectMementoCollection;
+import 
org.apache.isis.core.metamodel.objectmanager.memento.ObjectMementoForEmpty;
+import 
org.apache.isis.core.metamodel.objectmanager.memento.ObjectMementoForScalar;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 
 import lombok.AccessLevel;
@@ -93,12 +99,27 @@ implements ManagedObject {
     @Override
     public Optional<ObjectMemento> getMemento() {
         return this instanceof PackedManagedObject
-                ? 
Optional.ofNullable(objectMementoService().mementoForMulti((PackedManagedObject)this))
-                : 
Optional.ofNullable(objectMementoService().mementoForSingle(this));
+                ? 
Optional.ofNullable(mementoForPacked((PackedManagedObject)this))
+                : Optional.ofNullable(mementoForScalar(this));
+    }
+
+    private ObjectMemento mementoForScalar(@Nullable final ManagedObject 
adapter) {
+        MmAssertionUtil.assertPojoIsScalar(adapter);
+        return ObjectMementoForScalar.create(adapter)
+                .map(ObjectMemento.class::cast)
+                .orElseGet(()->
+                ManagedObjects.isSpecified(adapter)
+                ? new ObjectMementoForEmpty(adapter.getLogicalType())
+                        : null);
     }
 
-    private ObjectMementoService objectMementoService() {
-        return 
getServiceRegistry().lookupServiceElseFail(ObjectMementoService.class);
+    private ObjectMemento mementoForPacked(@Nullable final PackedManagedObject 
packedAdapter) {
+        val listOfMementos = packedAdapter.unpack().stream()
+                .map(this::mementoForScalar)
+                .collect(Collectors.toCollection(ArrayList::new)); // 
ArrayList is serializable
+        return ObjectMementoCollection.of(
+                listOfMementos,
+                packedAdapter.getLogicalType());
     }
 
     //XXX compares pojos by their 'equals' semantics -
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/ObjectManager.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/ObjectManager.java
index a6322cf434..b682900b55 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/ObjectManager.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/ObjectManager.java
@@ -69,10 +69,10 @@ public interface ObjectManager extends HasMetaModelContext {
                     _Exceptions.unrecoverable("failed to create memento for  
%s", object.getSpecification()));
     }
 
-    default ManagedObject demementify(final ObjectMemento memento) {
-        return loadObjectElseFail(memento.getBookmark());
+    ManagedObject demementify(final ObjectMemento memento);
+    default ManagedObject demementify(final ObjectSpecification spec, final 
ObjectMemento memento) {
+        return demementify(memento);
     }
-    ManagedObject demementify(final ObjectSpecification spec, final 
ObjectMemento memento);
 
     // -- SHORTCUTS
 
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/ObjectManagerDefault.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/ObjectManagerDefault.java
index c86a762cae..9680b90de7 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/ObjectManagerDefault.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/ObjectManagerDefault.java
@@ -24,18 +24,21 @@ import javax.inject.Inject;
 import javax.inject.Named;
 
 import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.lang.Nullable;
 import org.springframework.stereotype.Service;
 
 import org.apache.isis.applib.annotation.PriorityPrecedence;
-import org.apache.isis.commons.internal.base._Lazy;
+import org.apache.isis.commons.collections.Can;
+import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.core.metamodel.IsisModuleCoreMetamodel;
 import org.apache.isis.core.metamodel.context.MetaModelContext;
 import org.apache.isis.core.metamodel.object.ManagedObject;
 import org.apache.isis.core.metamodel.objectmanager.memento.ObjectMemento;
-import 
org.apache.isis.core.metamodel.objectmanager.memento.ObjectMementoService;
+import 
org.apache.isis.core.metamodel.objectmanager.memento.ObjectMementoCollection;
+import 
org.apache.isis.core.metamodel.objectmanager.memento.ObjectMementoForEmpty;
+import 
org.apache.isis.core.metamodel.objectmanager.memento.ObjectMementoForScalar;
 import org.apache.isis.core.metamodel.objectmanager.query.ObjectBulkLoader;
 import org.apache.isis.core.metamodel.objectmanager.serialize.ObjectSerializer;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
@@ -54,10 +57,6 @@ public class ObjectManagerDefault implements ObjectManager {
     @Getter(onMethod_ = {@Override})
     private final MetaModelContext metaModelContext;
 
-    // resolve lazily (dependency cycle, simple JUnit support)
-    private _Lazy<ObjectMementoService> objectMementoService = 
_Lazy.threadSafe(()->
-            
getServiceRegistry().lookupServiceElseFail(ObjectMementoService.class));
-
     @Getter(onMethod_ = {@Override}) private ObjectLoader objectLoader;
     @Getter(onMethod_ = {@Override}) private ObjectBulkLoader objectBulkLoader;
     @Getter(onMethod_ = {@Override}) private ObjectCreator objectCreator;
@@ -74,10 +73,42 @@ public class ObjectManagerDefault implements ObjectManager {
     }
 
     @Override
-    public ManagedObject demementify(final ObjectSpecification spec, final 
ObjectMemento memento) {
-       return objectMementoService.get().reconstructObject(memento);
+    public ManagedObject demementify(final @Nullable ObjectMemento memento) {
+
+        if(memento==null) {
+            return null;
+        }
+
+        if(memento instanceof ObjectMementoForEmpty) {
+            val objectMementoForEmpty = (ObjectMementoForEmpty) memento;
+            val logicalType = objectMementoForEmpty.getLogicalType();
+            val spec = 
getSpecificationLoader().specForLogicalType(logicalType);
+            return spec.isPresent()
+                    ? ManagedObject.empty(spec.get())
+                    : ManagedObject.unspecified();
+        }
+
+        if(memento instanceof ObjectMementoCollection) {
+            val objectMementoCollection = (ObjectMementoCollection) memento;
+
+            val elementSpec = 
getSpecificationLoader().specForLogicalTypeNameElseFail(memento.getLogicalTypeName());
+
+            val objects = objectMementoCollection.unwrapList().stream()
+                    .map(this::demementify)
+                    .collect(Can.toCan());
+
+            return ManagedObject.packed(elementSpec, objects);
+        }
+
+        if(memento instanceof ObjectMementoForScalar) {
+            val objectMementoAdapter = (ObjectMementoForScalar) memento;
+            return 
objectMementoAdapter.reconstructObject(getMetaModelContext());
+        }
+
+        throw _Exceptions.unrecoverable("unsupported ObjectMemento type %s", 
memento.getClass());
     }
 
+
     // JUnit support
     public static ObjectManager forTesting(final MetaModelContext 
metaModelContext) {
         val objectManager = new ObjectManagerDefault(metaModelContext);
diff --git 
a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/memento/_ObjectMementoForScalar.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/memento/ObjectMementoForScalar.java
similarity index 87%
rename from 
core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/memento/_ObjectMementoForScalar.java
rename to 
core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/memento/ObjectMementoForScalar.java
index 9553ce4494..8967684dc3 100644
--- 
a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/memento/_ObjectMementoForScalar.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/memento/ObjectMementoForScalar.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.core.runtimeservices.memento;
+package org.apache.isis.core.metamodel.objectmanager.memento;
 
 import java.io.Serializable;
 import java.util.Optional;
@@ -32,30 +32,29 @@ import 
org.apache.isis.core.metamodel.context.MetaModelContext;
 import org.apache.isis.core.metamodel.object.ManagedObject;
 import org.apache.isis.core.metamodel.object.ManagedObjects;
 import org.apache.isis.core.metamodel.object.MmTitleUtil;
-import org.apache.isis.core.metamodel.objectmanager.memento.ObjectMemento;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 
 import lombok.Getter;
 import lombok.NonNull;
 import lombok.val;
 
-final class _ObjectMementoForScalar
+public final class ObjectMementoForScalar
 implements HasLogicalType, Serializable, ObjectMemento {
 
     private static final long serialVersionUID = 1L;
 
     // -- FACTORIES
 
-    public static Optional<_ObjectMementoForScalar> create(final @Nullable 
ManagedObject adapter) {
+    public static Optional<ObjectMementoForScalar> create(final @Nullable 
ManagedObject adapter) {
         return ManagedObjects.isNullOrUnspecifiedOrEmpty(adapter)
                 ? Optional.empty()
-                : Optional.of(new _ObjectMementoForScalar(adapter));
+                : Optional.of(new ObjectMementoForScalar(adapter));
     }
 
-    static _ObjectMementoForScalar createPersistent(
+    static ObjectMementoForScalar createPersistent(
             final Bookmark bookmark,
             final SpecificationLoader specificationLoader) {
-        return new _ObjectMementoForScalar(bookmark, specificationLoader);
+        return new ObjectMementoForScalar(bookmark, specificationLoader);
     }
 
     // --
@@ -69,7 +68,7 @@ implements HasLogicalType, Serializable, ObjectMemento {
 
     byte[] serializedPayload;
 
-    private _ObjectMementoForScalar(
+    private ObjectMementoForScalar(
             final @NonNull Bookmark bookmark,
             final @NonNull SpecificationLoader specLoader) {
 
@@ -89,7 +88,7 @@ implements HasLogicalType, Serializable, ObjectMemento {
                 : _Recreatable.RecreateStrategy.LOOKUP;
     }
 
-    private _ObjectMementoForScalar(final @NonNull ManagedObject adapter) {
+    private ObjectMementoForScalar(final @NonNull ManagedObject adapter) {
 
         this.logicalType = adapter.getLogicalType();
         this.title = MmTitleUtil.titleOf(adapter);
@@ -140,7 +139,7 @@ implements HasLogicalType, Serializable, ObjectMemento {
 
     }
 
-    ManagedObject reconstructObject(final MetaModelContext mmc) {
+    public ManagedObject reconstructObject(final MetaModelContext mmc) {
         val spec = mmc.getSpecificationLoader()
                 .specForLogicalType(logicalType).orElse(null);
         if(spec==null) {
@@ -163,10 +162,10 @@ implements HasLogicalType, Serializable, ObjectMemento {
 
     @Override
     public boolean equals(final Object other) {
-        if (!(other instanceof _ObjectMementoForScalar)) {
+        if (!(other instanceof ObjectMementoForScalar)) {
             return false;
         }
-        return recreateStrategy.equals(this, (_ObjectMementoForScalar) other);
+        return recreateStrategy.equals(this, (ObjectMementoForScalar) other);
     }
 
 }
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/memento/ObjectMementoService.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/memento/ObjectMementoService.java
deleted file mode 100644
index dcecb2dbd0..0000000000
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/memento/ObjectMementoService.java
+++ /dev/null
@@ -1,48 +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.objectmanager.memento;
-
-import org.apache.isis.applib.id.LogicalType;
-import org.apache.isis.core.metamodel.object.ManagedObject;
-import org.apache.isis.core.metamodel.object.PackedManagedObject;
-
-import lombok.NonNull;
-
-/**
- * @since 2.0
- */
-public interface ObjectMementoService {
-
-    ObjectMemento mementoForSingle(ManagedObject adapter);
-    ObjectMemento mementoForMulti(PackedManagedObject adapter);
-
-    default ObjectMemento mementoForAnyCardinality(@NonNull final 
ManagedObject adapterAny) {
-        if(adapterAny instanceof PackedManagedObject) {
-            return mementoForMulti((PackedManagedObject) adapterAny);
-        }
-        return mementoForSingle(adapterAny);
-    }
-
-    ObjectMemento mementoForPojo(Object pojo);
-
-    ObjectMemento mementoForPojos(LogicalType logicalType, Iterable<Object> 
iterablePojos);
-
-    ManagedObject reconstructObject(ObjectMemento memento);
-
-}
diff --git 
a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/memento/_Recreatable.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/memento/_Recreatable.java
similarity index 78%
rename from 
core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/memento/_Recreatable.java
rename to 
core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/memento/_Recreatable.java
index 2bcb565ff7..50dd84f829 100644
--- 
a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/memento/_Recreatable.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/memento/_Recreatable.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.core.runtimeservices.memento;
+package org.apache.isis.core.metamodel.objectmanager.memento;
 
 import org.apache.isis.applib.services.bookmark.Oid;
 import org.apache.isis.core.metamodel.context.MetaModelContext;
@@ -49,26 +49,26 @@ interface _Recreatable {
         private final _Recreatable delegate;
 
         @Override
-        public ManagedObject recreateObject(final _ObjectMementoForScalar 
memento, final MetaModelContext mmc) {
+        public ManagedObject recreateObject(final ObjectMementoForScalar 
memento, final MetaModelContext mmc) {
             return delegate.recreateObject(memento, mmc);
         }
 
         @Override
-        public boolean equals(final _ObjectMementoForScalar memento, final 
_ObjectMementoForScalar otherMemento) {
+        public boolean equals(final ObjectMementoForScalar memento, final 
ObjectMementoForScalar otherMemento) {
             return delegate.equals(memento, otherMemento);
         }
 
         @Override
-        public int hashCode(final _ObjectMementoForScalar memento) {
+        public int hashCode(final ObjectMementoForScalar memento) {
             return delegate.hashCode();
         }
 
     }
 
-    ManagedObject recreateObject(_ObjectMementoForScalar memento, 
MetaModelContext mmc);
+    ManagedObject recreateObject(ObjectMementoForScalar memento, 
MetaModelContext mmc);
 
-    boolean equals(_ObjectMementoForScalar memento, _ObjectMementoForScalar 
otherMemento);
+    boolean equals(ObjectMementoForScalar memento, ObjectMementoForScalar 
otherMemento);
 
-    int hashCode(_ObjectMementoForScalar memento);
+    int hashCode(ObjectMementoForScalar memento);
 
 }
\ No newline at end of file
diff --git 
a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/memento/_RecreatableLookup.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/memento/_RecreatableLookup.java
similarity index 87%
rename from 
core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/memento/_RecreatableLookup.java
rename to 
core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/memento/_RecreatableLookup.java
index d18bffd951..3557408cbe 100644
--- 
a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/memento/_RecreatableLookup.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/memento/_RecreatableLookup.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.core.runtimeservices.memento;
+package org.apache.isis.core.metamodel.objectmanager.memento;
 
 import org.springframework.lang.Nullable;
 
@@ -32,7 +32,7 @@ class _RecreatableLookup implements _Recreatable{
 
     @Override
     public @Nullable ManagedObject recreateObject(
-            final _ObjectMementoForScalar memento,
+            final ObjectMementoForScalar memento,
             final MetaModelContext mmc) {
 
         if(memento.bookmark==null) {
@@ -47,13 +47,13 @@ class _RecreatableLookup implements _Recreatable{
     }
 
     @Override
-    public boolean equals(final _ObjectMementoForScalar oam, final 
_ObjectMementoForScalar other) {
+    public boolean equals(final ObjectMementoForScalar oam, final 
ObjectMementoForScalar other) {
         return other.recreateStrategy == RecreateStrategy.LOOKUP
                 && oam.bookmark.equals(other.bookmark);
     }
 
     @Override
-    public int hashCode(final _ObjectMementoForScalar oam) {
+    public int hashCode(final ObjectMementoForScalar oam) {
         return oam.bookmark.hashCode();
     }
 }
diff --git 
a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/memento/_RecreatableSerializable.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/memento/_RecreatableSerializable.java
similarity index 87%
rename from 
core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/memento/_RecreatableSerializable.java
rename to 
core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/memento/_RecreatableSerializable.java
index fbd1d9552f..bbc3023b8a 100644
--- 
a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/memento/_RecreatableSerializable.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/memento/_RecreatableSerializable.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.core.runtimeservices.memento;
+package org.apache.isis.core.metamodel.objectmanager.memento;
 
 import java.util.Objects;
 
@@ -28,7 +28,7 @@ class _RecreatableSerializable implements _Recreatable{
 
     @Override
     public ManagedObject recreateObject(
-            final _ObjectMementoForScalar memento,
+            final ObjectMementoForScalar memento,
             final MetaModelContext mmc) {
         ObjectSpecification spec = mmc.getSpecificationLoader()
                 .specForLogicalTypeElseFail(memento.logicalType);
@@ -38,15 +38,15 @@ class _RecreatableSerializable implements _Recreatable{
 
     @Override
     public boolean equals(
-            final _ObjectMementoForScalar memento,
-            final _ObjectMementoForScalar otherMemento) {
+            final ObjectMementoForScalar memento,
+            final ObjectMementoForScalar otherMemento) {
         return otherMemento.recreateStrategy == RecreateStrategy.SERIALIZABLE
                 && Objects.equals(memento.logicalType, 
otherMemento.logicalType)
                 && Objects.equals(memento.serializedPayload, 
otherMemento.serializedPayload);
     }
 
     @Override
-    public int hashCode(final _ObjectMementoForScalar memento) {
+    public int hashCode(final ObjectMementoForScalar memento) {
         // thats where we stored the hash of the originating pojo
         return memento.bookmark.getIdentifier().hashCode();
     }
diff --git 
a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/memento/_RecreatableValue.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/memento/_RecreatableValue.java
similarity index 83%
rename from 
core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/memento/_RecreatableValue.java
rename to 
core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/memento/_RecreatableValue.java
index d2f13d93e4..f381ea3787 100644
--- 
a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/memento/_RecreatableValue.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/memento/_RecreatableValue.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.core.runtimeservices.memento;
+package org.apache.isis.core.metamodel.objectmanager.memento;
 
 import org.apache.isis.core.metamodel.context.MetaModelContext;
 import org.apache.isis.core.metamodel.object.ManagedObject;
@@ -25,7 +25,7 @@ class _RecreatableValue implements _Recreatable{
 
     @Override
     public ManagedObject recreateObject(
-            final _ObjectMementoForScalar memento,
+            final ObjectMementoForScalar memento,
             final MetaModelContext mmc) {
 
         return mmc.getObjectManager().loadObjectElseFail(memento.bookmark);
@@ -33,15 +33,15 @@ class _RecreatableValue implements _Recreatable{
 
     @Override
     public boolean equals(
-            final _ObjectMementoForScalar memento,
-            final _ObjectMementoForScalar otherMemento) {
+            final ObjectMementoForScalar memento,
+            final ObjectMementoForScalar otherMemento) {
 
         return otherMemento.recreateStrategy == RecreateStrategy.VALUE
                 && memento.bookmark.equals(otherMemento.bookmark);
     }
 
     @Override
-    public int hashCode(final _ObjectMementoForScalar memento) {
+    public int hashCode(final ObjectMementoForScalar memento) {
         return memento.bookmark.hashCode();
     }
 
diff --git 
a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/IsisModuleCoreRuntimeServices.java
 
b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/IsisModuleCoreRuntimeServices.java
index a5bf42d8fa..f073423d5f 100644
--- 
a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/IsisModuleCoreRuntimeServices.java
+++ 
b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/IsisModuleCoreRuntimeServices.java
@@ -44,7 +44,6 @@ import 
org.apache.isis.core.runtimeservices.interaction.InteractionDtoFactoryDef
 import org.apache.isis.core.runtimeservices.jaxb.JaxbServiceDefault;
 import org.apache.isis.core.runtimeservices.locale.LanguageProviderDefault;
 import org.apache.isis.core.runtimeservices.locale.LocaleChoiceProviderDefault;
-import 
org.apache.isis.core.runtimeservices.memento.ObjectMementoServiceDefault;
 import 
org.apache.isis.core.runtimeservices.menubars.MenuBarsLoaderServiceDefault;
 import 
org.apache.isis.core.runtimeservices.menubars.bootstrap.MenuBarsServiceBS;
 import org.apache.isis.core.runtimeservices.message.MessageServiceDefault;
@@ -109,7 +108,6 @@ import 
org.apache.isis.core.runtimeservices.xmlsnapshot.XmlSnapshotServiceDefaul
         MessageServiceDefault.class,
         ObjectIconServiceDefault.class,
         ObjectLifecyclePublisherDefault.class,
-        ObjectMementoServiceDefault.class,
         PlaceholderRenderServiceDefault.class,
         LifecycleCallbackNotifier.class,
         SchemaValueMarshallerDefault.class,
diff --git 
a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/memento/ObjectMementoServiceDefault.java
 
b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/memento/ObjectMementoServiceDefault.java
deleted file mode 100644
index acb2f6c490..0000000000
--- 
a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/memento/ObjectMementoServiceDefault.java
+++ /dev/null
@@ -1,141 +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.runtimeservices.memento;
-
-import java.util.ArrayList;
-import java.util.stream.Collectors;
-
-import javax.annotation.Priority;
-import javax.inject.Inject;
-import javax.inject.Named;
-
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.lang.Nullable;
-import org.springframework.stereotype.Service;
-
-import org.apache.isis.applib.annotation.PriorityPrecedence;
-import org.apache.isis.applib.id.LogicalType;
-import org.apache.isis.commons.collections.Can;
-import org.apache.isis.commons.internal.base._NullSafe;
-import org.apache.isis.commons.internal.exceptions._Exceptions;
-import org.apache.isis.core.metamodel.context.MetaModelContext;
-import org.apache.isis.core.metamodel.object.ManagedObject;
-import org.apache.isis.core.metamodel.object.ManagedObjects;
-import org.apache.isis.core.metamodel.object.MmAssertionUtil;
-import org.apache.isis.core.metamodel.object.PackedManagedObject;
-import org.apache.isis.core.metamodel.objectmanager.ObjectManager;
-import org.apache.isis.core.metamodel.objectmanager.memento.ObjectMemento;
-import 
org.apache.isis.core.metamodel.objectmanager.memento.ObjectMementoCollection;
-import 
org.apache.isis.core.metamodel.objectmanager.memento.ObjectMementoForEmpty;
-import 
org.apache.isis.core.metamodel.objectmanager.memento.ObjectMementoService;
-import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
-import org.apache.isis.core.runtimeservices.IsisModuleCoreRuntimeServices;
-
-import lombok.Getter;
-import lombok.val;
-
-/**
- *
- * @since 2.0
- *
- */
-@Service
-@Named(IsisModuleCoreRuntimeServices.NAMESPACE + 
".ObjectMementoServiceDefault")
-@Priority(PriorityPrecedence.MIDPOINT)
-@Qualifier("Default")
-public class ObjectMementoServiceDefault implements ObjectMementoService {
-
-    @Inject @Getter private SpecificationLoader specificationLoader;
-    @Inject private MetaModelContext mmc;
-    @Inject private ObjectManager objectManager;
-
-    @Override
-    public ObjectMemento mementoForSingle(@Nullable final ManagedObject 
adapter) {
-        MmAssertionUtil.assertPojoIsScalar(adapter);
-
-        return _ObjectMementoForScalar.create(adapter)
-            .map(ObjectMemento.class::cast)
-            .orElseGet(()->
-                ManagedObjects.isSpecified(adapter)
-                        ? new ObjectMementoForEmpty(adapter.getLogicalType())
-                        : null);
-    }
-
-    @Override
-    public ObjectMemento mementoForMulti(@Nullable final PackedManagedObject 
packedAdapter) {
-        val listOfMementos = packedAdapter.unpack().stream()
-                .map(this::mementoForSingle)
-                .collect(Collectors.toCollection(ArrayList::new)); // 
ArrayList is serializable
-        return ObjectMementoCollection.of(
-                listOfMementos,
-                packedAdapter.getLogicalType());
-    }
-
-    @Override
-    public ObjectMemento mementoForPojo(final Object pojo) {
-        val managedObject = objectManager.adapt(pojo);
-        return mementoForSingle(managedObject);
-    }
-
-    @Override
-    public ObjectMemento mementoForPojos(final LogicalType logicalType, final 
Iterable<Object> iterablePojos) {
-        val listOfMementos = _NullSafe.stream(iterablePojos)
-                .map(pojo->mementoForPojo(pojo))
-                .collect(Collectors.toCollection(ArrayList::new)); // 
ArrayList is serializable
-
-        return ObjectMementoCollection.of(listOfMementos, logicalType);
-    }
-
-    @Override
-    public ManagedObject reconstructObject(@Nullable final ObjectMemento 
memento) {
-
-        if(memento==null) {
-            return null;
-        }
-
-        if(memento instanceof ObjectMementoForEmpty) {
-            val objectMementoForEmpty = (ObjectMementoForEmpty) memento;
-            val logicalType = objectMementoForEmpty.getLogicalType();
-            val spec = specificationLoader.specForLogicalType(logicalType);
-            return spec.isPresent()
-                    ? ManagedObject.empty(spec.get())
-                    : ManagedObject.unspecified();
-        }
-
-        if(memento instanceof ObjectMementoCollection) {
-            val objectMementoCollection = (ObjectMementoCollection) memento;
-
-            val elementSpec = 
specificationLoader.specForLogicalTypeNameElseFail(memento.getLogicalTypeName());
-
-            val objects = objectMementoCollection.unwrapList().stream()
-                    .map(this::reconstructObject)
-                    .collect(Can.toCan());
-
-            return ManagedObject.packed(elementSpec, objects);
-        }
-
-        if(memento instanceof _ObjectMementoForScalar) {
-            val objectMementoAdapter = (_ObjectMementoForScalar) memento;
-            return objectMementoAdapter.reconstructObject(mmc);
-        }
-
-        throw _Exceptions.unrecoverable("unsupported ObjectMemento type %s", 
memento.getClass());
-    }
-
-}
diff --git 
a/viewers/wicket/ui/src/test/java/org/apache/isis/viewer/wicket/ui/components/widgets/choices/ChoiceProviderTestAbstract.java
 
b/viewers/wicket/ui/src/test/java/org/apache/isis/viewer/wicket/ui/components/widgets/choices/ChoiceProviderTestAbstract.java
index 785e142cc8..2cd32a71f4 100644
--- 
a/viewers/wicket/ui/src/test/java/org/apache/isis/viewer/wicket/ui/components/widgets/choices/ChoiceProviderTestAbstract.java
+++ 
b/viewers/wicket/ui/src/test/java/org/apache/isis/viewer/wicket/ui/components/widgets/choices/ChoiceProviderTestAbstract.java
@@ -18,20 +18,16 @@
  */
 package org.apache.isis.viewer.wicket.ui.components.widgets.choices;
 
-import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
 import org.apache.isis.commons.collections.Can;
-import org.apache.isis.commons.internal.ioc._ManagedBeanAdapter;
 import org.apache.isis.core.metamodel._testing.MetaModelContext_forTesting;
 import org.apache.isis.core.metamodel.context.MetaModelContext;
 import org.apache.isis.core.metamodel.object.ManagedObject;
-import 
org.apache.isis.core.metamodel.objectmanager.memento.ObjectMementoService;
 import org.apache.isis.core.metamodel.valuesemantics.BigDecimalValueSemantics;
 import org.apache.isis.core.metamodel.valuesemantics.IntValueSemantics;
 import org.apache.isis.core.metamodel.valuesemantics.UUIDValueSemantics;
-import 
org.apache.isis.core.runtimeservices.memento.ObjectMementoServiceDefault;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 
 import lombok.val;
@@ -40,24 +36,13 @@ abstract class ChoiceProviderTestAbstract {
 
     protected MetaModelContext mmc;
 
-    private ObjectMementoServiceDefault mementoService() {
-        return mmc.getServiceInjector().injectServicesInto(new 
ObjectMementoServiceDefault());
-    }
-
     protected void setUp() {
         mmc = MetaModelContext_forTesting.builder()
-                
.singletonProvider(_ManagedBeanAdapter.forTestingLazy(ObjectMementoService.class,
 this::mementoService))
                 .build()
                 .withValueSemantics(new BigDecimalValueSemantics())
                 .withValueSemantics(new IntValueSemantics())
                 .withValueSemantics(new UUIDValueSemantics())
                 ;
-
-        // verify
-        {
-            val mementoService = 
mmc.getServiceRegistry().lookupServiceElseFail(ObjectMementoService.class);
-            assertEquals(ObjectMementoServiceDefault.class, 
mementoService.getClass());
-        }
     }
 
     protected ScalarModel mockScalarModel(final Can<ManagedObject> choices, 
final boolean isRequired) {
@@ -69,5 +54,4 @@ abstract class ChoiceProviderTestAbstract {
         return mockScalarModel;
     }
 
-
 }

Reply via email to