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 2022/09/05 09:09:51 UTC

[isis] branch 3199_mm.refactor created (now e82f676b9f)

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

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


      at e82f676b9f ISIS-3199: Wicket Viewer: ManagedObjects do provide mementos now

This branch includes the following new commits:

     new e82f676b9f ISIS-3199: Wicket Viewer: ManagedObjects do provide mementos now

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[isis] 01/01: ISIS-3199: Wicket Viewer: ManagedObjects do provide mementos now

Posted by ah...@apache.org.
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 <ah...@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);
     }
 
 }