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/05/18 14:57:02 UTC

[isis] branch master updated: ISIS-3058: eagerly memoize element bookmarks, before passing them over to the DataTable

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 f2a1bdbf53 ISIS-3058: eagerly memoize element bookmarks, before passing them over to the DataTable
f2a1bdbf53 is described below

commit f2a1bdbf530f468c5e46a5c7938e56326bd54d89
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed May 18 16:56:55 2022 +0200

    ISIS-3058: eagerly memoize element bookmarks, before passing them over
    to the DataTable
---
 .../ViewModelFacetForXmlRootElementAnnotation.java  | 21 ++++++++++++++++++---
 .../managed/nonscalar/DataTableModel.java           |  6 +++++-
 2 files changed, 23 insertions(+), 4 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/viewmodel/ViewModelFacetForXmlRootElementAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/viewmodel/ViewModelFacetForXmlRootElementAnnotation.java
index fb11ab09b1..e5a62b9b7d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/viewmodel/ViewModelFacetForXmlRootElementAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/viewmodel/ViewModelFacetForXmlRootElementAnnotation.java
@@ -47,6 +47,16 @@ extends ViewModelFacetAbstract {
             @NonNull final ObjectSpecification viewmodelSpec,
             @NonNull final Bookmark bookmark) {
         final String xmlStr = getUrlEncodingService().decodeToString(bookmark.getIdentifier());
+
+        _Debug.onCondition(XrayUi.isXrayEnabled(), ()->{
+            _Debug.log("[JAXB] de-serializing viewmodel %s\n"
+                    + "--- XML ---\n"
+                    + "%s"
+                    + "-----------\n",
+                    viewmodelSpec.getLogicalTypeName(),
+                    xmlStr);
+        });
+
         val viewmodelPojo = getJaxbService().fromXml(viewmodelSpec.getCorrespondingClass(), xmlStr);
         return viewmodelPojo!=null
                 ? ManagedObject.bookmarked(viewmodelSpec, viewmodelPojo, bookmark)
@@ -55,10 +65,15 @@ extends ViewModelFacetAbstract {
 
     @Override
     protected String serialize(final ManagedObject managedObject) {
-        final String xml = getJaxbService().toXml(managedObject.getPojo());
-        final String encoded = getUrlEncodingService().encodeString(xml);
+
+        final String xml = getJaxbService().toXml(managedObject.getPojo());        final String encoded = getUrlEncodingService().encodeString(xml);
         _Debug.onCondition(XrayUi.isXrayEnabled(), ()->{
-            _Debug.log("[JAXB] serializing viewmodel %s", managedObject.getSpecification().getLogicalTypeName());
+            _Debug.log("[JAXB] serializing viewmodel %s\n"
+                    + "--- XML ---\n"
+                    + "%s"
+                    + "-----------\n",
+                    managedObject.getSpecification().getLogicalTypeName(),
+                    xml);
         });
         return encoded;
     }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/nonscalar/DataTableModel.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/nonscalar/DataTableModel.java
index df7c3b758d..23c7296801 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/nonscalar/DataTableModel.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/nonscalar/DataTableModel.java
@@ -84,8 +84,12 @@ implements MultiselectChoices {
         if(!(actionResult instanceof PackedManagedObject)) {
             throw _Exceptions.unexpectedCodeReach();
         }
+
+        val elements = ((PackedManagedObject)actionResult).unpack();
+        elements.forEach(ManagedObject::getBookmark);
+
         return new DataTableModel(managedAction, managedAction.getWhere(),
-                ()->((PackedManagedObject)actionResult).unpack());
+                ()->elements);
     }
 
     // -- CONSTRUCTION