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 2021/11/12 10:04:47 UTC

[isis] branch master updated: ISIS-2877: fixes Bookmarked Panel broken entries

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 02b7c60  ISIS-2877: fixes Bookmarked Panel broken entries
02b7c60 is described below

commit 02b7c601ec0e53d7a865fb7272e1e1fbd6598258
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Nov 12 11:04:38 2021 +0100

    ISIS-2877: fixes Bookmarked Panel broken entries
---
 examples/demo/pre-flight.adoc                      | 34 ++++++++---------
 .../bookmarkedpages/BookmarkedPagesPanel.java      | 43 ++++++++--------------
 .../org/apache/isis/viewer/wicket/ui/util/Wkt.java | 15 ++++++++
 3 files changed, 48 insertions(+), 44 deletions(-)

diff --git a/examples/demo/pre-flight.adoc b/examples/demo/pre-flight.adoc
index cf88207..4f6e5ee 100644
--- a/examples/demo/pre-flight.adoc
+++ b/examples/demo/pre-flight.adoc
@@ -64,29 +64,29 @@ _For mixins, override the default method name_
 
 WARNING: Returns scalar of: `void`
 
-==== Nature Stateful
+==== Nature Stateful ✔ 
 
 _@DomainObject(nature=VIEW_MODEL) for a Stateful View Model_
 
 Returns scalar of: `demo.StatefulVmUsingJaxb`
 
-===== FieldSet 
-
-* [ ] Property `Sources` 
-
-===== FieldSet Demo
-
-* [ ] Property `Message` 
-
-===== FieldSet Referenced Property
-
 ===== Collection Children
-
-===== FieldSet Description
-
-* [ ] Action `Clear Hints` 
-
-* [ ] Property `Description` 
+* [x] Test: add Child(ren) 
+* [ ] Test: open a Child, then return to previous page (browser back button)
+
+[IMPORTANT]
+====
+ Caused by: java.util.NoSuchElementException: sources
+ 	at org.apache.isis.commons.internal.exceptions._Exceptions.noSuchElement(_Exceptions.java:110) ~[classes/:?]
+	at org.apache.isis.viewer.wicket.model.models.interaction.prop.PropertyInteractionWkt.lambda$1(PropertyInteractionWkt.java:80) ~[classes/:?]
+	at java.util.Optional.orElseThrow(Optional.java:408) ~[?:?]
+	at org.apache.isis.viewer.wicket.model.models.interaction.prop.PropertyInteractionWkt.load(PropertyInteractionWkt.java:80) ~[classes/:?]
+	at org.apache.isis.viewer.wicket.model.models.interaction.prop.PropertyInteractionWkt.load(PropertyInteractionWkt.java:1) ~[classes/:?]
+	at org.apache.wicket.model.LoadableDetachableModel.getObject(LoadableDetachableModel.java:128) ~[wicket-core-8.13.0.jar:8.13.0]
+	at org.apache.wicket.model.ChainingModel.getObject(ChainingModel.java:95) ~[wicket-core-8.13.0.jar:8.13.0]
+	at org.apache.isis.viewer.wicket.model.models.interaction.prop.PropertyUiModelWkt.propertyInteraction(PropertyUiModelWkt.java:61) ~[classes/:?]
+==== 
+* [x] Test: remove Child(ren)
 
 ==== Nature Stateful Refs Entity
 
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/bookmarkedpages/BookmarkedPagesPanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/bookmarkedpages/BookmarkedPagesPanel.java
index 4100534..8840660 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/bookmarkedpages/BookmarkedPagesPanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/bookmarkedpages/BookmarkedPagesPanel.java
@@ -19,6 +19,7 @@
 package org.apache.isis.viewer.wicket.ui.components.bookmarkedpages;
 
 import java.util.List;
+import java.util.Optional;
 
 import javax.inject.Inject;
 
@@ -29,17 +30,12 @@ import org.apache.wicket.markup.head.IHeaderResponse;
 import org.apache.wicket.markup.head.JavaScriptReferenceHeaderItem;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.image.Image;
-import org.apache.wicket.markup.html.link.AbstractLink;
 import org.apache.wicket.model.IModel;
-import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.request.resource.CssResourceReference;
 import org.apache.wicket.request.resource.JavaScriptResourceReference;
-import org.apache.wicket.request.resource.ResourceReference;
 import org.apache.wicket.util.string.Strings;
 
 import org.apache.isis.applib.exceptions.unrecoverable.ObjectNotFoundException;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.viewer.wicket.model.models.BookmarkTreeNode;
 import org.apache.isis.viewer.wicket.model.models.BookmarkedPagesModel;
 import org.apache.isis.viewer.wicket.model.models.PageType;
@@ -113,50 +109,43 @@ extends PanelAbstract<List<BookmarkTreeNode>, BookmarkedPagesModel> {
         }
 
         Wkt.listViewAdd(container, ID_BOOKMARKED_PAGE_ITEM, bookmarkedPagesModel, item->{
-            final BookmarkTreeNode node = item.getModelObject();
+            final BookmarkTreeNode bookmarkNode = item.getModelObject();
             try {
                 final Class<? extends Page> pageClass = pageClassRegistry.getPageClass(PageType.ENTITY);
 
                 val clearBookmarkLink = Wkt.linkAdd(item, ID_CLEAR_BOOKMARK_LINK, target->{
-                    bookmarkedPagesModel.remove(node);
+                    bookmarkedPagesModel.remove(bookmarkNode);
                     if(bookmarkedPagesModel.isEmpty()) {
                         permanentlyHide(CLEAR_BOOKMARKS);
                     }
                     target.add(container, clearAllBookmarksLink);
                 });
-                if(node.getDepth() == 0) {
+
+                if(bookmarkNode.getDepth() == 0) {
                     Wkt.cssAppend(clearBookmarkLink, "clearBookmark");
                 } else {
                     clearBookmarkLink.setEnabled(true);
                 }
 
-                PageParameters pageParameters = node.getPageParameters();
-                final AbstractLink link = Links.newBookmarkablePageLink(ID_BOOKMARKED_PAGE_LINK, pageParameters, pageClass);
+                val link = Wkt.add(item, Links.newBookmarkablePageLink(ID_BOOKMARKED_PAGE_LINK,
+                                bookmarkNode.getPageParameters(),
+                                pageClass));
 
-                ObjectSpecification objectSpec = null;
-                val oid = node.getOidNoVer();
-                if(oid != null) {
-                    objectSpec = getSpecificationLoader().specForLogicalTypeName(oid.getLogicalTypeName())
-                            .orElse(null);
-                }
-                final ResourceReference imageResource = getImageResourceCache().resourceReferenceForSpec(objectSpec);
-                final Image image = new Image(ID_BOOKMARKED_PAGE_ICON, imageResource) {
-                    private static final long serialVersionUID = 1L;
-                    @Override
-                    protected boolean shouldAddAntiCacheParameter() {
-                        return false;
-                    }
-                };
-                link.addOrReplace(image);
+                Optional.ofNullable(bookmarkNode.getOidNoVer())
+                .flatMap(oid->getSpecificationLoader().specForLogicalTypeName(oid.getLogicalTypeName()))
+                .ifPresent(objectSpec->{
+                    Wkt.imageAddCachable(link, ID_BOOKMARKED_PAGE_ICON,
+                            getImageResourceCache().resourceReferenceForSpec(objectSpec));
+                });
 
-                Wkt.labelAdd(link, ID_BOOKMARKED_PAGE_TITLE, node.getTitle());
+                Wkt.labelAdd(link, ID_BOOKMARKED_PAGE_TITLE, bookmarkNode.getTitle());
 
 //XXX seems broken when there is only one bookmark entry;
 // an alternative idea would be to render the item differently eg. bold, but don't disable it
 //                    if(bookmarkedPagesModel.isCurrent(pageParameters)) {
 //                        item.add(new CssClassAppender("disabled"));
 //                    }
-                Wkt.cssAppend(item, "bookmarkDepth" + node.getDepth());
+                Wkt.cssAppend(item, "bookmarkDepth" + bookmarkNode.getDepth());
             } catch(ObjectNotFoundException ex) {
                 // ignore
                 // this is a partial fix for an infinite redirect loop.
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/Wkt.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/Wkt.java
index de3a1b4..30875ae 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/Wkt.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/Wkt.java
@@ -38,10 +38,12 @@ import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.form.TextArea;
 import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.markup.html.image.Image;
 import org.apache.wicket.markup.html.list.ListItem;
 import org.apache.wicket.markup.html.list.ListView;
 import org.apache.wicket.markup.html.panel.Fragment;
 import org.apache.wicket.model.IModel;
+import org.apache.wicket.request.resource.ResourceReference;
 import org.apache.wicket.util.convert.IConverter;
 import org.apache.wicket.validation.IValidationError;
 import org.apache.wicket.validation.ValidationError;
@@ -293,6 +295,19 @@ public class Wkt {
         };
     }
 
+    // -- IMAGE
+
+    private Image imageCachable(final String id, final ResourceReference imageResource) {
+        return new Image(id, imageResource) {
+            private static final long serialVersionUID = 1L;
+            @Override protected boolean shouldAddAntiCacheParameter() { return false; }
+        };
+    }
+
+    public Image imageAddCachable(final MarkupContainer container, final String id, final ResourceReference imageResource) {
+        return add(container, imageCachable(id, imageResource));
+    }
+
     // -- LABEL
 
     public Label label(final String id, final String label) {