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

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

commit e82f676b9f01880fb4bb690c96dbd702271df27d
Author: Andi Huber <ahu...@apache.org>
AuthorDate: Mon Sep 5 11:09:43 2022 +0200

    ISIS-3199: Wicket Viewer: ManagedObjects do provide mementos now
---
 .../_testing/ObjectMementoService_forTesting.java  |  8 -------
 .../isis/core/metamodel/object/Bookmarkable.java   |  5 +++++
 .../metamodel/objectmanager/ObjectManager.java     |  3 +++
 .../memento/ObjectMementoService.java              |  3 ---
 .../core/runtime/context/IsisAppCommonContext.java | 25 +---------------------
 .../memento/ObjectMementoServiceDefault.java       |  7 ------
 .../wicket/model/models/ManagedObjectModel.java    | 10 ++-------
 .../model/models/ScalarModelWithMultiChoice.java   | 19 ++++++++++------
 .../model/models/ScalarModelWithSingleChoice.java  |  3 +--
 .../viewer/wicket/model/models/ValueModel.java     |  2 +-
 .../providers/ChoiceProviderForReferences.java     | 10 ++++-----
 .../select2/providers/ChoiceProviderForValues.java |  3 ++-
 12 files changed, 32 insertions(+), 66 deletions(-)

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
index b50e6e91d7..a57c4f73cb 100644
--- 
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
@@ -19,22 +19,14 @@
 package org.apache.isis.core.metamodel._testing;
 
 import org.apache.isis.applib.id.LogicalType;
-import org.apache.isis.applib.services.bookmark.Bookmark;
 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;
 
-import lombok.NonNull;
-
 public class ObjectMementoService_forTesting
 implements ObjectMementoService {
 
-    @Override
-    public ObjectMemento mementoForBookmark(@NonNull final Bookmark bookmark) {
-        return null;
-    }
-
     @Override
     public ObjectMemento mementoForSingle(final ManagedObject adapter) {
         return null;
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/Bookmarkable.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/Bookmarkable.java
index 1e38acdbc6..352a3ff369 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/Bookmarkable.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/Bookmarkable.java
@@ -23,6 +23,7 @@ import java.util.Optional;
 
 import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.commons.internal.base._Casts;
+import org.apache.isis.commons.internal.exceptions._Exceptions;
 import 
org.apache.isis.core.metamodel.object.ManagedObject.Specialization.BookmarkPolicy;
 import org.apache.isis.core.metamodel.objectmanager.ObjectManager;
 import org.apache.isis.core.metamodel.objectmanager.memento.ObjectMemento;
@@ -54,6 +55,10 @@ public interface Bookmarkable {
      *  is supported and a {@link Bookmark} is available.
      */
     Optional<ObjectMemento> getMemento();
+    default ObjectMemento getMementoElseFail() {
+        return getMemento()
+                .orElseThrow(()->_Exceptions.illegalState("failed to create 
memento for %s", this));
+    }
 
     // -- SPECIAL SUB INTERFACES
 
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 72465094b6..a6322cf434 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,6 +69,9 @@ 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 ObjectSpecification spec, final 
ObjectMemento memento);
 
     // -- SHORTCUTS
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
index f7479d97d6..dcecb2dbd0 100644
--- 
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
@@ -19,7 +19,6 @@
 package org.apache.isis.core.metamodel.objectmanager.memento;
 
 import org.apache.isis.applib.id.LogicalType;
-import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.core.metamodel.object.ManagedObject;
 import org.apache.isis.core.metamodel.object.PackedManagedObject;
 
@@ -30,8 +29,6 @@ import lombok.NonNull;
  */
 public interface ObjectMementoService {
 
-    ObjectMemento mementoForBookmark(@NonNull Bookmark bookmark);
-
     ObjectMemento mementoForSingle(ManagedObject adapter);
     ObjectMemento mementoForMulti(PackedManagedObject adapter);
 
diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/context/IsisAppCommonContext.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/context/IsisAppCommonContext.java
index b5c1a04a9c..a16ac8c110 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/context/IsisAppCommonContext.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/context/IsisAppCommonContext.java
@@ -23,7 +23,6 @@ import java.util.function.Supplier;
 
 import org.springframework.lang.Nullable;
 
-import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.applib.services.iactnlayer.InteractionLayerTracker;
 import org.apache.isis.applib.services.inject.ServiceInjector;
 import org.apache.isis.applib.services.menu.MenuBarsService;
@@ -36,12 +35,9 @@ import 
org.apache.isis.core.metamodel.context.MetaModelContext;
 import org.apache.isis.core.metamodel.object.ManagedObject;
 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.ObjectMementoService;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 
-import lombok.AccessLevel;
 import lombok.Getter;
-import lombok.NonNull;
 import lombok.val;
 
 /**
@@ -72,9 +68,6 @@ public class IsisAppCommonContext implements 
HasMetaModelContext {
     @Getter(lazy = true)
     private final InteractionLayerTracker interactionLayerTracker = 
lookupServiceElseFail(InteractionLayerTracker.class);
 
-    @Getter(lazy = true, value = AccessLevel.PRIVATE)
-    private final ObjectMementoService mementoService = 
lookupServiceElseFail(ObjectMementoService.class);
-
     public Optional<MessageBroker> getMessageBroker() {
         return 
getMetaModelContext().getServiceRegistry().lookupService(MessageBroker.class);
     }
@@ -104,20 +97,8 @@ public class IsisAppCommonContext implements 
HasMetaModelContext {
         return 
getMetaModelContext().getServiceInjector().injectServicesInto(pojo);
     }
 
-    public ObjectMemento mementoForSingle(final ManagedObject adapter) {
-        return getMementoService().mementoForSingle(adapter);
-    }
-
-    public ObjectMemento mementoForAnyCardinality(@NonNull final ManagedObject 
adapter) {
-        return getMementoService().mementoForAnyCardinality(adapter);
-    }
-
-    public ObjectMemento mementoForBookmark(final Bookmark bookmark) {
-        return getMementoService().mementoForBookmark(bookmark);
-    }
-
     public ManagedObject reconstructObject(final ObjectMemento memento) {
-        return getMementoService().reconstructObject(memento);
+        return getObjectManager().demementify(memento);
     }
 
     // -- FOR THOSE THAT IMPLEMENT BY DELEGATION
@@ -138,10 +119,6 @@ public class IsisAppCommonContext implements 
HasMetaModelContext {
             return getCommonContext().getSpecificationLoader();
         }
 
-        default ObjectMementoService getMementoService() {
-            return getCommonContext().getMementoService();
-        }
-
         default ServiceInjector getServiceInjector() {
             return getCommonContext().getServiceInjector();
         }
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
index 2ec22509f2..acb2f6c490 100644
--- 
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
@@ -31,7 +31,6 @@ import org.springframework.stereotype.Service;
 
 import org.apache.isis.applib.annotation.PriorityPrecedence;
 import org.apache.isis.applib.id.LogicalType;
-import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.commons.internal.base._NullSafe;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
@@ -49,7 +48,6 @@ import 
org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.runtimeservices.IsisModuleCoreRuntimeServices;
 
 import lombok.Getter;
-import lombok.NonNull;
 import lombok.val;
 
 /**
@@ -67,11 +65,6 @@ public class ObjectMementoServiceDefault implements 
ObjectMementoService {
     @Inject private MetaModelContext mmc;
     @Inject private ObjectManager objectManager;
 
-    @Override
-    public ObjectMemento mementoForBookmark(@NonNull final Bookmark bookmark) {
-        return _ObjectMementoForScalar.createPersistent(bookmark, 
specificationLoader);
-    }
-
     @Override
     public ObjectMemento mementoForSingle(@Nullable final ManagedObject 
adapter) {
         MmAssertionUtil.assertPojoIsScalar(adapter);
diff --git 
a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ManagedObjectModel.java
 
b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ManagedObjectModel.java
index 72a9f87ff1..0a34c4a5ea 100644
--- 
a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ManagedObjectModel.java
+++ 
b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ManagedObjectModel.java
@@ -26,7 +26,6 @@ import org.springframework.lang.Nullable;
 import org.apache.isis.applib.annotation.BookmarkPolicy;
 import org.apache.isis.applib.id.LogicalType;
 import org.apache.isis.applib.services.bookmark.Bookmark;
-import org.apache.isis.commons.internal.base._Casts;
 import org.apache.isis.core.metamodel.object.ManagedObject;
 import org.apache.isis.core.metamodel.object.ManagedObjects;
 import org.apache.isis.core.metamodel.object.PackedManagedObject;
@@ -85,7 +84,7 @@ extends ModelAbstract<ManagedObject> {
         if(adapter instanceof PackedManagedObject) {
             setObjectCollection((PackedManagedObject)adapter);
         } else {
-            memento = super.getMementoService().mementoForSingle(adapter);
+            memento = adapter.getMemento().orElseThrow();
         }
     }
 
@@ -98,12 +97,7 @@ extends ModelAbstract<ManagedObject> {
         }
 
         super.setObject(adapter);
-
-        val pojos = adapter.getPojo();
-        memento = super.getMementoService()
-                .mementoForPojos(getLogicalElementType()
-                            
.orElseGet(()->adapter.getElementSpecification().get().getLogicalType()),
-                        _Casts.uncheckedCast(pojos));
+        memento = adapter.getMemento().orElseThrow();
     }
 
     public final Bookmark asBookmarkIfSupported() {
diff --git 
a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModelWithMultiChoice.java
 
b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModelWithMultiChoice.java
index 2edeaa79ef..250c7dfd70 100644
--- 
a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModelWithMultiChoice.java
+++ 
b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModelWithMultiChoice.java
@@ -24,6 +24,8 @@ import java.util.stream.Collectors;
 import org.apache.wicket.model.ChainingModel;
 import org.apache.wicket.model.Model;
 
+import org.apache.isis.commons.internal.base._NullSafe;
+import org.apache.isis.core.metamodel.object.Bookmarkable;
 import org.apache.isis.core.metamodel.object.ManagedObjects;
 import org.apache.isis.core.metamodel.objectmanager.memento.ObjectMemento;
 
@@ -68,16 +70,19 @@ implements
     public ArrayList<ObjectMemento> getObject() {
 
         val packedValue = pendingValue().getValue().getValue();
-        val unpackedValue = 
ManagedObjects.unpack(scalarModel().getScalarTypeSpec(), packedValue);
+        val unpackedValues = 
ManagedObjects.unpack(scalarModel().getScalarTypeSpec(), packedValue);
 
-        log.debug("getObject() as unpackedValue {}", unpackedValue);
+        log.debug("getObject() as unpackedValue {}", unpackedValues);
 
-        val unpackedMemento = unpackedValue.stream()
-        .map(getCommonContext()::mementoForSingle)
-        .collect(Collectors.toCollection(()->new 
ArrayList<>(unpackedValue.size())));
+        val mementos = unpackedValues.stream()
+        .filter(Bookmarkable.class::isInstance)
+        .map(Bookmarkable::getMemento) //TODO why can we not flat map this?
+        .map(opt->opt.orElse(null))
+        .filter(_NullSafe::isPresent)
+        .collect(Collectors.toCollection(()->new ArrayList<ObjectMemento>()));
 
-        log.debug("getObject() as unpackedMemento {}", unpackedMemento);
-        return unpackedMemento;
+        log.debug("getObject() as unpackedMemento {}", mementos);
+        return mementos;
     }
 
     @Override
diff --git 
a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModelWithSingleChoice.java
 
b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModelWithSingleChoice.java
index eb8dcbdfcc..5ff1e1b4c9 100644
--- 
a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModelWithSingleChoice.java
+++ 
b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModelWithSingleChoice.java
@@ -60,8 +60,7 @@ implements
 
     @Override
     public ObjectMemento getObject() {
-        return getCommonContext().mementoForSingle(
-                pendingValue().getValue().getValue());
+        return pendingValue().getValue().getValue().getMemento().orElseThrow();
     }
 
     @Override
diff --git 
a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ValueModel.java
 
b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ValueModel.java
index f704a6e08f..387c87cf01 100644
--- 
a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ValueModel.java
+++ 
b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ValueModel.java
@@ -56,7 +56,7 @@ extends ModelAbstract<ManagedObject> {
             final @Nullable ManagedObject valueAdapter) {
         super(commonContext);
         this.objectMemberMemento = ObjectMemberMemento.forMember(objectMember);
-        adapterMemento = 
super.getMementoService().mementoForSingle(valueAdapter);
+        adapterMemento = valueAdapter.getMemento().orElseThrow();
     }
 
     @Override
diff --git 
a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ChoiceProviderForReferences.java
 
b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ChoiceProviderForReferences.java
index 7f19182bed..b76c3d2cca 100644
--- 
a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ChoiceProviderForReferences.java
+++ 
b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ChoiceProviderForReferences.java
@@ -69,24 +69,24 @@ extends ChoiceProviderAbstractForScalarModel {
         }
         val scalarTypeSpec = scalarModel().getScalarTypeSpec();
         val autoCompleteAdapters = Facets.autoCompleteExecute(scalarTypeSpec, 
term);
-        return autoCompleteAdapters.map(getCommonContext()::mementoForSingle);
+        return autoCompleteAdapters
+                .map(ManagedObject::getMementoElseFail);
     }
 
     // -- HELPER
 
     private Can<ObjectMemento> queryAll() {
         return scalarModel().getChoices() // must not return detached entities
-                .map(getCommonContext()::mementoForAnyCardinality);
+                .map(ManagedObject::getMementoElseFail);
     }
 
     private Can<ObjectMemento> queryWithAutoComplete(final String term) {
-        val commonContext = getCommonContext();
         val scalarModel = scalarModel();
         val pendingArgs = scalarModel.isParameter()
                 ? 
((ParameterUiModel)scalarModel).getParameterNegotiationModel().getParamValues()
                 : Can.<ManagedObject>empty();
         val pendingArgMementos = pendingArgs
-                .map(commonContext::mementoForAnyCardinality);
+                .map(ManagedObject::getMementoElseFail);
 
         if(scalarModel.isParameter()) {
             // recover any pendingArgs
@@ -100,7 +100,7 @@ extends ChoiceProviderAbstractForScalarModel {
 
         return scalarModel
                 .getAutoComplete(term)
-                .map(commonContext::mementoForSingle);
+                .map(ManagedObject::getMementoElseFail);
     }
 
     private Can<ManagedObject> reconstructPendingArgs(
diff --git 
a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ChoiceProviderForValues.java
 
b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ChoiceProviderForValues.java
index d1f239f33c..8d26511796 100644
--- 
a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ChoiceProviderForValues.java
+++ 
b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ChoiceProviderForValues.java
@@ -19,6 +19,7 @@
 package org.apache.isis.viewer.wicket.ui.components.widgets.select2.providers;
 
 import org.apache.isis.commons.collections.Can;
+import org.apache.isis.core.metamodel.object.ManagedObject;
 import org.apache.isis.core.metamodel.objectmanager.memento.ObjectMemento;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 
@@ -42,7 +43,7 @@ extends ChoiceProviderAbstractForScalarModel {
 
     private Can<ObjectMemento> queryAll() {
         return scalarModel().getChoices()
-            .map(getCommonContext()::mementoForSingle);
+            .map(ManagedObject::getMementoElseFail);
     }
 
 }

Reply via email to