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")