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/06/02 10:46:36 UTC

[isis] branch master updated: ISIS-3049: optimize choice rendering, without the need to (re-)fetch entire object graphs

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 af910f2e9b ISIS-3049: optimize choice rendering, without the need to (re-)fetch entire object graphs
af910f2e9b is described below

commit af910f2e9bf475b414b1a65392bb8748200b0f8a
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Jun 2 12:46:28 2022 +0200

    ISIS-3049: optimize choice rendering, without the need to (re-)fetch
    entire object graphs
---
 .../metamodel/objectmanager/memento/ObjectMemento.java |  9 +++++++++
 .../objectmanager/memento/ObjectMementoCollection.java |  5 +++++
 .../objectmanager/memento/ObjectMementoForEmpty.java   |  6 ++++++
 .../isis/core/metamodel/spec/ManagedObjects.java       |  8 ++++++--
 .../memento/ObjectMementoServiceDefault.java           |  5 +++++
 .../core/runtimeservices/memento/_ObjectMemento.java   | 10 ++++++++--
 .../scalars/valuechoices/ValueChoicesSelect2Panel.java |  2 +-
 .../wicket/ui/components/widgets/select2/Select2.java  | 18 ++----------------
 .../ObjectAdapterMementoProviderAbstract.java          |  7 +------
 9 files changed, 43 insertions(+), 27 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/memento/ObjectMemento.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/memento/ObjectMemento.java
index 81923c3749..132ab88a2f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/memento/ObjectMemento.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/memento/ObjectMemento.java
@@ -27,12 +27,21 @@ import org.apache.isis.applib.id.HasLogicalType;
 import org.apache.isis.applib.id.LogicalType;
 import org.apache.isis.applib.services.bookmark.BookmarkHolder;
 import org.apache.isis.commons.internal.collections._Lists;
+import org.apache.isis.core.metamodel.spec.ManagedObject;
 
 /**
  * @since 2.0
  */
 public interface ObjectMemento extends BookmarkHolder, HasLogicalType, Serializable {
 
+    /**
+     * The object's title for rendering (before translation).
+     * Corresponds to {@link ManagedObject#titleString()}.
+     * <p>
+     * Directly support choice rendering, without the need to (re-)fetch entire object graphs.
+     */
+    String getTitle();
+
     // -- FACTORIES
 
     static ObjectMemento pack(
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/memento/ObjectMementoCollection.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/memento/ObjectMementoCollection.java
index 9ab5a8eb67..d4cb6503a8 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/memento/ObjectMementoCollection.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/memento/ObjectMementoCollection.java
@@ -43,6 +43,11 @@ public final class ObjectMementoCollection implements ObjectMemento {
     @Getter(onMethod_ = {@Override})
     @NonNull private final LogicalType logicalType;
 
+    @Override
+    public String getTitle() {
+        throw _Exceptions.notImplemented(); // please unwrap at call-site
+    }
+
     @Override
     public Bookmark bookmark() {
         throw _Exceptions.notImplemented(); // please unwrap at call-site
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/memento/ObjectMementoForEmpty.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/memento/ObjectMementoForEmpty.java
index 20330e73bc..fc20ad9696 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/memento/ObjectMementoForEmpty.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/memento/ObjectMementoForEmpty.java
@@ -20,6 +20,7 @@ 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.applib.value.semantics.ValueSemanticsAbstract;
 
 import lombok.Getter;
 import lombok.NonNull;
@@ -33,6 +34,11 @@ public class ObjectMementoForEmpty implements ObjectMemento {
     @Getter(onMethod_ = {@Override})
     @NonNull private LogicalType logicalType;
 
+    @Override
+    public String getTitle() {
+        return ValueSemanticsAbstract.PlaceholderLiteral.NULL_REPRESENTATION.getLiteral();
+    }
+
     @Override
     public Bookmark bookmark() {
         return Bookmark.empty(logicalType);
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObjects.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObjects.java
index a2eb418e42..74330e565c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObjects.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObjects.java
@@ -354,11 +354,15 @@ public final class ManagedObjects {
     }
 
     public static String titleOf(final ManagedObject adapter) {
-        return adapter!=null?adapter.titleString():"";
+        return adapter!=null
+                ? adapter.titleString()
+                : "";
     }
 
     private static String abbreviated(final String str, final int maxLength, final String suffix) {
-        return str.length() < maxLength ? str : str.substring(0, maxLength - 3) + suffix;
+        return str.length() < maxLength
+                ? str
+                : str.substring(0, maxLength - 3) + suffix;
     }
 
     // -- COMMON SUPER TYPE FINDER
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 b08297a340..5f18e5ad97 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
@@ -168,6 +168,11 @@ public class ObjectMementoServiceDefault implements ObjectMementoService {
 
         private final _ObjectMemento delegate;
 
+        @Override
+        public String getTitle() {
+            return delegate.getTitleString();
+        }
+
         @Override
         public Bookmark bookmark() {
             return delegate.asBookmark();
diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/memento/_ObjectMemento.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/memento/_ObjectMemento.java
index 4f5e9d34e0..b7c027953c 100644
--- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/memento/_ObjectMemento.java
+++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/memento/_ObjectMemento.java
@@ -392,9 +392,9 @@ final class _ObjectMemento implements HasLogicalType, Serializable {
     private Bookmark bookmark;
 
     /**
-     * Only populated for {@link ManagedObject#getPojo() domain object}s that implement {@link HintIdProvider}.
+     * Untranslated String for rendering.
      */
-    //private String hintId;
+    private String titleString;
 
     /**
      * populated only if {@link #getCardinality() sort} is {@link Cardinality#VECTOR vector}
@@ -450,6 +450,8 @@ final class _ObjectMemento implements HasLogicalType, Serializable {
 
     private void init(final ManagedObject adapter) {
 
+        titleString = ManagedObjects.titleOf(adapter);
+
         val spec = adapter.getSpecification();
 
         if(spec.isIdentifiable() || spec.isParented() ) {
@@ -497,6 +499,10 @@ final class _ObjectMemento implements HasLogicalType, Serializable {
         return cardinality;
     }
 
+    public String getTitleString() {
+        return titleString;
+    }
+
     public Bookmark asBookmark() {
         val bookmark = asStrictBookmark();
         return bookmark!=null
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
index bb09114b7d..6ba5656d23 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
@@ -76,7 +76,7 @@ extends ScalarPanelSelectAbstract {
 
     @Override
     protected String obtainOutputFormat() {
-        return select2.obtainOutputFormatModelForValue().getObject();
+        return select2.obtainOutputFormatModel().getObject();
     }
 
     // --
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/Select2.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/Select2.java
index cc6491b24c..0732242c87 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/Select2.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/Select2.java
@@ -155,22 +155,8 @@ implements
     public IModel<String> obtainOutputFormatModel() {
         return LambdaModel.<String>of(()->{
             val memento = memento();
-            if(memento == null) {
-                return null;
-            }
-            val adapter = getCommonContext().reconstructObject(memento);
-            return adapter != null
-                    ? adapter.titleString()
-                    : null;
-        });
-    }
-
-    @Deprecated // value case should be handled by obtainInlinePromptModel()
-    public IModel<String> obtainOutputFormatModelForValue() {
-        return LambdaModel.<String>of(()->{
-            val memento = memento();
-            return memento != null
-                    ? memento.bookmark().getIdentifier()
+            return memento!=null
+                    ? memento.getTitle()
                     : null;
         });
     }
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderAbstract.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderAbstract.java
index 706c6f83ad..e233f5b5a8 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderAbstract.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderAbstract.java
@@ -35,7 +35,6 @@ import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.core.metamodel.objectmanager.memento.ObjectMemento;
 import org.apache.isis.core.metamodel.objectmanager.memento.ObjectMementoForEmpty;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
-import org.apache.isis.core.metamodel.spec.ManagedObjects;
 import org.apache.isis.core.runtime.context.IsisAppCommonContext;
 import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
@@ -64,11 +63,7 @@ extends ChoiceProvider<ObjectMemento> {
                 || choiceMemento instanceof ObjectMementoForEmpty) {
             return PlaceholderLiteral.NULL_REPRESENTATION.asText(this::translate);
         }
-        val choice = getCommonContext().reconstructObject(choiceMemento);
-        if(ManagedObjects.isNullOrUnspecifiedOrEmpty(choice)) {
-            return "Internal error: broken memento " + choiceMemento;
-        }
-        return translate(choice.titleString());
+        return translate(choiceMemento.getTitle());
     }
 
     @Override