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/03/16 05:33:14 UTC

[isis] branch master updated: ISIS-2976: wkt hotfix: refresh viewmodel on every property neg. start

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 6ea0052  ISIS-2976: wkt hotfix: refresh viewmodel on every property neg. start
6ea0052 is described below

commit 6ea00528a671cbfc2e7738a1493815dff70b2d9f
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Mar 16 06:33:04 2022 +0100

    ISIS-2976: wkt hotfix: refresh viewmodel on every property neg. start
---
 .../isis/core/metamodel/spec/ManagedObjects.java   | 35 ++++++++++++++++++++++
 .../interaction/prop/PropertyInteractionWkt.java   |  3 +-
 .../viewer/wicket/ui/pages/entity/EntityPage.java  | 28 ++++-------------
 3 files changed, 42 insertions(+), 24 deletions(-)

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 6385fb5..2f872b8 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
@@ -29,6 +29,7 @@ import java.util.Objects;
 import java.util.Optional;
 import java.util.Set;
 import java.util.function.Predicate;
+import java.util.function.Supplier;
 import java.util.function.UnaryOperator;
 import java.util.stream.Stream;
 
@@ -48,6 +49,8 @@ import org.apache.isis.commons.internal.base._Objects;
 import org.apache.isis.commons.internal.collections._Arrays;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.collections._Sets;
+import org.apache.isis.commons.internal.debug._Debug;
+import org.apache.isis.commons.internal.debug.xray.XrayUi;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.core.metamodel.commons.CanonicalInvoker;
 import org.apache.isis.core.metamodel.commons.ClassExtensions;
@@ -57,6 +60,7 @@ import org.apache.isis.core.metamodel.facets.collections.CollectionFacet;
 import org.apache.isis.core.metamodel.facets.object.entity.EntityFacet;
 import org.apache.isis.core.metamodel.facets.object.entity.PersistenceStandard;
 import org.apache.isis.core.metamodel.facets.object.title.TitleRenderRequest;
+import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet;
 import org.apache.isis.core.metamodel.interactions.InteractionHead;
 import org.apache.isis.core.metamodel.interactions.InteractionUtils;
 import org.apache.isis.core.metamodel.interactions.ObjectVisibilityContext;
@@ -1112,4 +1116,35 @@ public final class ManagedObjects {
 
     }
 
+    public static void refreshViewmodel(
+            final @Nullable ManagedObject viewmodel,
+            final @Nullable Supplier<Bookmark> bookmarkSupplier) {
+
+        if(isNullOrUnspecifiedOrEmpty(viewmodel)) {
+            return; // do nothing
+        }
+
+        val spec = viewmodel.getSpecification();
+        if(spec.isViewModel()) {
+            val viewModelFacet = spec.getFacet(ViewModelFacet.class);
+            if(viewModelFacet.containsEntities()) {
+
+                _Debug.onCondition(XrayUi.isXrayEnabled(), ()->{
+                    _Debug.log("about to refresh viewmodel ..");
+                });
+
+                if(viewmodel.isBookmarkMemoized()) {
+                    viewmodel.reloadViewmodelFromMemoizedBookmark();
+                } else {
+                    val bookmark = bookmarkSupplier!=null
+                            ? bookmarkSupplier.get()
+                            : null;
+                    if(bookmark!=null) {
+                        viewmodel.reloadViewmodelFromBookmark(bookmark);
+                    }
+                }
+            }
+        }
+    }
+
 }
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/interaction/prop/PropertyInteractionWkt.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/interaction/prop/PropertyInteractionWkt.java
index ce985ee..6c91584 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/interaction/prop/PropertyInteractionWkt.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/interaction/prop/PropertyInteractionWkt.java
@@ -79,8 +79,7 @@ extends HasBookmarkedOwnerAbstract<PropertyInteraction> {
                 _Lazy.threadSafe(()->{
                     val propIa = propertyInteraction();
                     val prop = propIa.getManagedProperty().orElseThrow();
-                    ManagedObjects.EntityUtil.refetch(prop.getPropertyValue());
-
+                    ManagedObjects.refreshViewmodel(prop.getOwner(), null);
                     return propIa.startPropertyNegotiation();
                 });
 
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java
index 60c99ad..626966a 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java
@@ -40,8 +40,8 @@ import org.apache.isis.commons.internal.debug._Debug;
 import org.apache.isis.commons.internal.debug.xray.XrayUi;
 import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet;
 import org.apache.isis.core.metamodel.facets.object.grid.GridFacet;
-import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
+import org.apache.isis.core.metamodel.spec.ManagedObjects;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
 import org.apache.isis.core.runtime.context.IsisAppCommonContext;
@@ -249,27 +249,11 @@ public class EntityPage extends PageAbstract {
             }
 
             val entityModel = (EntityModel)entityPage.getUiHintContainerIfAny();
-            val spec = entityModel.getObject().getSpecification();
-            if(spec.isViewModel()) {
-
-                val viewModelFacet = spec.getFacet(ViewModelFacet.class);
-                if(viewModelFacet.containsEntities()) {
-
-                    _Debug.onCondition(XrayUi.isXrayEnabled(), ()->{
-                        _Debug.log("about to refresh EntityPage ..");
-                    });
-
-                    val viewmodel = entityModel.getBookmarkedOwner();
-                    if(viewmodel.isBookmarkMemoized()) {
-                        viewmodel.reloadViewmodelFromMemoizedBookmark();
-                    } else {
-                        val bookmark = PageParameterUtils
-                                .toBookmark(entityPage.getPageParameters()).orElseThrow();
-                        viewmodel.reloadViewmodelFromBookmark(bookmark);
-                    }
-
-                }
-            }
+
+            ManagedObjects.refreshViewmodel(entityModel.getObject(),
+                    ()->PageParameterUtils
+                            .toBookmark(entityPage.getPageParameters())
+                            .orElseThrow());
         }
     }