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 8c0bd263e4 ISIS-3199: have ManagedObjects provide their mementos (wip)
8c0bd263e4 is described below

commit 8c0bd263e492002e33179feed86e4c8fc7035cb0
Author: Andi Huber <[email protected]>
AuthorDate: Mon Sep 5 08:31:20 2022 +0200

    ISIS-3199: have ManagedObjects provide their mementos (wip)
---
 .../isis/core/metamodel/object/Bookmarkable.java      | 19 ++++++++++++++++---
 .../metamodel/object/_ManagedObjectSpecified.java     | 14 ++++++++++++++
 .../objectmanager/memento/ObjectMemorizer.java        |  7 ++++---
 3 files changed, 34 insertions(+), 6 deletions(-)

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 55ecfe9f99..1e38acdbc6 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
@@ -18,12 +18,14 @@
  */
 package org.apache.isis.core.metamodel.object;
 
+import java.io.Serializable;
 import java.util.Optional;
 
 import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.commons.internal.base._Casts;
 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;
 
 public interface Bookmarkable {
 
@@ -46,6 +48,15 @@ public interface Bookmarkable {
             .ifPresent(Bookmarkable.BookmarkRefreshable::invalidateBookmark);
     }
 
+    /**
+     * Optionally a {@link Serializable} representation of this object,
+     *  with an additional memorized object title, based on whether
+     *  is supported and a {@link Bookmark} is available.
+     */
+    Optional<ObjectMemento> getMemento();
+
+    // -- SPECIAL SUB INTERFACES
+
     /**
      * Implements {@link Bookmarkable} reflecting
      * {@link 
org.apache.isis.core.metamodel.object.ManagedObject.Specialization.BookmarkPolicy#NO_BOOKMARK}
@@ -54,17 +65,19 @@ public interface Bookmarkable {
         @Override default boolean isBookmarkSupported() { return false; }
         @Override default Optional<Bookmark> getBookmark() { return 
Optional.empty(); }
         @Override default boolean isBookmarkMemoized() { return false; }
+        @Override default Optional<ObjectMemento> getMemento() { return 
Optional.empty(); }
     }
 
     static interface BookmarkRefreshable extends Bookmarkable {
         /**
          * Invalidates any memoized {@link Bookmark} for (lazy) recreation,
          * reflecting the object's current state.
-         * @apiNote only makes sense in the context of mutable viewmodels
+         * @apiNote only makes sense in the context of (mutable) viewmodels
          */
-        @Override
-        void invalidateBookmark();
+        @Override void invalidateBookmark();
 
     }
 
+
+
 }
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 f673e7e1a5..1921b99926 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
@@ -19,6 +19,7 @@
 package org.apache.isis.core.metamodel.object;
 
 import java.util.Objects;
+import java.util.Optional;
 import java.util.function.Supplier;
 
 import org.apache.isis.applib.services.bookmark.Bookmark;
@@ -26,6 +27,8 @@ import org.apache.isis.commons.internal.assertions._Assert;
 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.spec.ObjectSpecification;
 
 import lombok.AccessLevel;
@@ -87,6 +90,17 @@ implements ManagedObject {
                 TitleRenderRequest.forObject(this));
     }
 
+    @Override
+    public Optional<ObjectMemento> getMemento() {
+        return this instanceof PackedManagedObject
+                ? 
Optional.ofNullable(objectMementoService().mementoForMulti((PackedManagedObject)this))
+                : 
Optional.ofNullable(objectMementoService().mementoForSingle(this));
+    }
+
+    private ObjectMementoService objectMementoService() {
+        return 
getServiceRegistry().lookupServiceElseFail(ObjectMementoService.class);
+    }
+
     //XXX compares pojos by their 'equals' semantics -
     // note though: some value-types have an explicit order-relation which 
could potentially say differently
     @Override
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/memento/ObjectMemorizer.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/memento/ObjectMemorizer.java
index d4065a31c7..dab2b85b0e 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/memento/ObjectMemorizer.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/memento/ObjectMemorizer.java
@@ -19,6 +19,7 @@
 package org.apache.isis.core.metamodel.objectmanager.memento;
 
 import java.util.List;
+import java.util.Optional;
 
 import org.springframework.lang.Nullable;
 
@@ -49,9 +50,9 @@ public interface ObjectMemorizer {
     }
 
     default ObjectMemento serialize(final ManagedObject object) {
-        val request = BiForm.serializationRequest(object);
-        val response = serializeObject(request);
-        return response.getSerializedObject().getMemento();
+        return Optional.ofNullable(object)
+        .flatMap(ManagedObject::getMemento)
+        .orElse(null);
     }
 
     @Value(staticConstructor = "of")

Reply via email to