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