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/causeway.git


The following commit(s) were added to refs/heads/master by this push:
     new 1dc44f172a CAUSEWAY-3406: wicket viewer: fixes icon resources not 
honoring custom icon suffixes for resource lookup
1dc44f172a is described below

commit 1dc44f172a80ca5e1b4f8d672a5a90c0cb4a681f
Author: andi-huber <[email protected]>
AuthorDate: Mon Apr 10 08:18:22 2023 +0200

    CAUSEWAY-3406: wicket viewer: fixes icon resources not honoring custom
    icon suffixes for resource lookup
---
 .../viewer/commons/model/action/UiActionForm.java  |  1 +
 .../viewer/commons/model/mixin/HasIcon.java}       | 20 +++++---------------
 .../wicket/model/models/BookmarkTreeNode.java      |  6 ++++++
 .../wicket/model/models/BookmarkableModel.java     | 22 ++++++++++++++++++----
 .../wicket/model/models/ImageResourceCache.java    |  9 +++++----
 .../viewer/wicket/model/models/UiObjectWkt.java    | 16 ++++++++++++++++
 .../bookmarkedpages/BookmarkedPagesPanel.java      |  9 +++------
 .../entity/icontitle/EntityIconAndTitlePanel.java  |  2 +-
 .../services/ImageResourceCacheClassPath.java      | 17 ++---------------
 9 files changed, 57 insertions(+), 45 deletions(-)

diff --git 
a/viewers/commons/model/src/main/java/org/apache/causeway/viewer/commons/model/action/UiActionForm.java
 
b/viewers/commons/model/src/main/java/org/apache/causeway/viewer/commons/model/action/UiActionForm.java
index a28668723b..804d1596c7 100644
--- 
a/viewers/commons/model/src/main/java/org/apache/causeway/viewer/commons/model/action/UiActionForm.java
+++ 
b/viewers/commons/model/src/main/java/org/apache/causeway/viewer/commons/model/action/UiActionForm.java
@@ -116,4 +116,5 @@ extends
     }
 
 
+
 }
diff --git 
a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/ImageResourceCache.java
 
b/viewers/commons/model/src/main/java/org/apache/causeway/viewer/commons/model/mixin/HasIcon.java
similarity index 54%
copy from 
viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/ImageResourceCache.java
copy to 
viewers/commons/model/src/main/java/org/apache/causeway/viewer/commons/model/mixin/HasIcon.java
index 7a4c21fd77..318235df16 100644
--- 
a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/ImageResourceCache.java
+++ 
b/viewers/commons/model/src/main/java/org/apache/causeway/viewer/commons/model/mixin/HasIcon.java
@@ -16,23 +16,13 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.wicket.model.models;
+package org.apache.causeway.viewer.commons.model.mixin;
 
-import java.io.Serializable;
+import org.apache.causeway.core.metamodel.facets.object.icon.ObjectIcon;
 
-import org.apache.wicket.request.resource.ResourceReference;
+@FunctionalInterface
+public interface HasIcon {
 
-import org.apache.causeway.core.metamodel.object.ManagedObject;
-import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
-
-/**
- * Ideally I'd like to move this to the 
<tt>org.apache.causeway.viewer.wicket.model.causeway</tt>
- * package, however to do so would break existing API (gmap3 has a dependency 
on this, for example).
- */
-public interface ImageResourceCache extends Serializable {
-
-    ResourceReference resourceReferenceFor(ManagedObject adapter);
-
-    ResourceReference resourceReferenceForSpec(ObjectSpecification 
objectSpecification);
+    ObjectIcon getIcon();
 
 }
diff --git 
a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/BookmarkTreeNode.java
 
b/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/BookmarkTreeNode.java
index 88f9c083d9..2b2cc6d4bf 100644
--- 
a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/BookmarkTreeNode.java
+++ 
b/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/BookmarkTreeNode.java
@@ -24,8 +24,10 @@ import java.util.Optional;
 import java.util.concurrent.atomic.LongAdder;
 
 import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.request.resource.ResourceReference;
 
 import org.apache.causeway.applib.services.bookmark.Bookmark;
+import org.apache.causeway.commons.internal.base._Casts;
 import org.apache.causeway.commons.internal.collections._Lists;
 import org.apache.causeway.commons.internal.functions._Functions;
 
@@ -45,6 +47,7 @@ implements
     @Getter private final @NonNull PageParameters pageParameters;
 
     @Getter private String title;
+    @Getter private ResourceReference iconResourceReference;
 
     //private final Set<Bookmark> propertyBookmarks; ... in support of parents 
referencing their child
 
@@ -69,6 +72,9 @@ implements
 //                .collect(Collectors.toCollection(HashSet::new));
 
         this.title = bookmarkableModel.getTitle();
+        this.iconResourceReference = _Casts.castTo(UiObjectWkt.class, 
bookmarkableModel)
+                .map(UiObjectWkt::getIconAsResourceReference)
+                .orElse(null);
 
         this.depth = depth;
     }
diff --git 
a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/BookmarkableModel.java
 
b/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/BookmarkableModel.java
index 6c8cdd880b..f4bdcd261a 100644
--- 
a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/BookmarkableModel.java
+++ 
b/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/BookmarkableModel.java
@@ -25,21 +25,23 @@ import 
org.apache.wicket.request.mapper.parameter.PageParameters;
 
 import org.apache.causeway.applib.annotation.BookmarkPolicy;
 import org.apache.causeway.applib.services.bookmark.Bookmark;
+import org.apache.causeway.core.metamodel.facets.object.icon.ObjectIcon;
+import org.apache.causeway.viewer.commons.model.mixin.HasIcon;
 import org.apache.causeway.viewer.commons.model.mixin.HasTitle;
 import org.apache.causeway.viewer.wicket.model.util.PageParameterUtils;
 
 public interface BookmarkableModel
-extends HasTitle {
+extends HasTitle, HasIcon {
 
     /**
      * So can be bookmarked / added to <tt>BookmarkedPagesModel</tt>.
      */
-    public abstract PageParameters getPageParameters();
+    PageParameters getPageParameters();
 
-    public abstract PageParameters getPageParametersWithoutUiHints();
+    PageParameters getPageParametersWithoutUiHints();
 
     /** governs how to populate the BookmarkPanel in the UI */
-    public abstract BookmarkPolicy getBookmarkPolicy();
+    BookmarkPolicy getBookmarkPolicy();
 
     default Optional<Bookmark> toBookmark() {
         return 
PageParameterUtils.toBookmark(getPageParametersWithoutUiHints());
@@ -55,4 +57,16 @@ extends HasTitle {
         return Stream.empty();
     }
 
+    /**
+     * XXX refactoring hint
+     * @apiNote There should be a unified common model for Object and Action 
icons,
+     * as both could utilize the same resource lookup and caching mechanics in 
the background.
+     * While objects do support font-awesome or image file icons,
+     * I believe actions only support the former. Hence the asymmetry here.
+     */
+    @Override
+    default ObjectIcon getIcon() {
+        return null; // overwritten for domain objects
+    }
+
 }
diff --git 
a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/ImageResourceCache.java
 
b/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/ImageResourceCache.java
index 7a4c21fd77..a36d27a1c1 100644
--- 
a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/ImageResourceCache.java
+++ 
b/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/ImageResourceCache.java
@@ -22,8 +22,7 @@ import java.io.Serializable;
 
 import org.apache.wicket.request.resource.ResourceReference;
 
-import org.apache.causeway.core.metamodel.object.ManagedObject;
-import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
+import org.apache.causeway.core.metamodel.facets.object.icon.ObjectIcon;
 
 /**
  * Ideally I'd like to move this to the 
<tt>org.apache.causeway.viewer.wicket.model.causeway</tt>
@@ -31,8 +30,10 @@ import 
org.apache.causeway.core.metamodel.spec.ObjectSpecification;
  */
 public interface ImageResourceCache extends Serializable {
 
-    ResourceReference resourceReferenceFor(ManagedObject adapter);
+    //ResourceReference resourceReferenceFor(ManagedObject adapter);
 
-    ResourceReference resourceReferenceForSpec(ObjectSpecification 
objectSpecification);
+    //ResourceReference resourceReferenceForSpec(ObjectSpecification 
objectSpecification);
 
+    ResourceReference resourceReferenceForObjectIcon(final ObjectIcon 
objectIcon);
+    
 }
diff --git 
a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/UiObjectWkt.java
 
b/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/UiObjectWkt.java
index cac6a8f6d1..83ace1ceff 100644
--- 
a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/UiObjectWkt.java
+++ 
b/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/UiObjectWkt.java
@@ -24,6 +24,7 @@ import java.util.stream.Stream;
 
 import org.apache.wicket.Component;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.request.resource.ResourceReference;
 import org.springframework.lang.Nullable;
 
 import org.apache.causeway.applib.services.bookmark.Bookmark;
@@ -34,6 +35,7 @@ import org.apache.causeway.commons.internal.collections._Maps;
 import org.apache.causeway.core.metamodel.commons.ScalarRepresentation;
 import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.causeway.core.metamodel.context.MetaModelContext;
+import org.apache.causeway.core.metamodel.facets.object.icon.ObjectIcon;
 import org.apache.causeway.core.metamodel.object.ManagedObject;
 import org.apache.causeway.core.metamodel.object.ManagedObjects;
 import org.apache.causeway.core.metamodel.spec.feature.MixedIn;
@@ -184,6 +186,15 @@ implements
         return getManagedObject().getTitle();
     }
 
+    @Override
+    public ObjectIcon getIcon() {
+        return getManagedObject().getIcon();
+    }
+
+    public ResourceReference getIconAsResourceReference() {
+        return imageResourceCache().resourceReferenceForObjectIcon(getIcon());
+    }
+
     @Override
     public ManagedObject getManagedObject() {
         return getObject();
@@ -290,6 +301,11 @@ implements
         return hintStore = 
getMetaModelContext().loadServiceIfAbsent(HintStore.class, hintStore);
     }
 
+    private transient ImageResourceCache imageResourceCache;
+    private ImageResourceCache imageResourceCache() {
+        return imageResourceCache = 
getMetaModelContext().loadServiceIfAbsent(ImageResourceCache.class, 
imageResourceCache);
+    }
+
 
 
 }
diff --git 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/bookmarkedpages/BookmarkedPagesPanel.java
 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/bookmarkedpages/BookmarkedPagesPanel.java
index 3ebd0c0e99..458f2b40bf 100644
--- 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/bookmarkedpages/BookmarkedPagesPanel.java
+++ 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/bookmarkedpages/BookmarkedPagesPanel.java
@@ -133,12 +133,9 @@ extends PanelAbstract<List<BookmarkTreeNode>, 
BookmarkedPagesModel> {
                                 bookmarkNode.getPageParameters(),
                                 pageClass));
 
-                Optional.ofNullable(bookmarkNode.getBookmark())
-                
.flatMap(oid->getSpecificationLoader().specForLogicalTypeName(oid.getLogicalTypeName()))
-                .ifPresent(objectSpec->{
-                    Wkt.imageAddCachable(link, ID_BOOKMARKED_PAGE_ICON,
-                            
getImageResourceCache().resourceReferenceForSpec(objectSpec));
-                });
+                Optional.ofNullable(bookmarkNode.getIconResourceReference())
+                .ifPresent(icon->
+                    Wkt.imageAddCachable(link, ID_BOOKMARKED_PAGE_ICON, icon));
 
                 Wkt.labelAdd(link, ID_BOOKMARKED_PAGE_TITLE, 
bookmarkNode.getTitle());
 
diff --git 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.java
 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.java
index 3d8fbbd197..6b9544fc8d 100644
--- 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.java
+++ 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.java
@@ -123,7 +123,7 @@ extends PanelAbstract<ManagedObject, ObjectAdapterModel> {
                 final CssClassFaFactory cssClassFaFactory = 
spec.getCssClassFaFactory().orElse(null);
                 if (iconName != null || cssClassFaFactory == null) {
                     Wkt.imageAddCachable(link, ID_ENTITY_ICON,
-                                    
getImageResourceCache().resourceReferenceFor(targetAdapter));
+                                    
getImageResourceCache().resourceReferenceForObjectIcon(targetAdapter.getIcon()));
                     WktComponents.permanentlyHide(link, 
ID_ENTITY_FONT_AWESOME);
                 } else {
                     Label dummy = Wkt.labelAdd(link, ID_ENTITY_FONT_AWESOME, 
"");
diff --git 
a/viewers/wicket/viewer/src/main/java/org/apache/causeway/viewer/wicket/viewer/services/ImageResourceCacheClassPath.java
 
b/viewers/wicket/viewer/src/main/java/org/apache/causeway/viewer/wicket/viewer/services/ImageResourceCacheClassPath.java
index 97e529d293..edc533a5cf 100644
--- 
a/viewers/wicket/viewer/src/main/java/org/apache/causeway/viewer/wicket/viewer/services/ImageResourceCacheClassPath.java
+++ 
b/viewers/wicket/viewer/src/main/java/org/apache/causeway/viewer/wicket/viewer/services/ImageResourceCacheClassPath.java
@@ -34,8 +34,6 @@ import org.springframework.stereotype.Service;
 
 import org.apache.causeway.applib.annotation.PriorityPrecedence;
 import org.apache.causeway.core.metamodel.facets.object.icon.ObjectIcon;
-import org.apache.causeway.core.metamodel.object.ManagedObject;
-import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
 import org.apache.causeway.viewer.wicket.model.models.ImageResourceCache;
 
 import lombok.NonNull;
@@ -60,23 +58,12 @@ implements ImageResourceCache {
     private static final long serialVersionUID = 1L;
 
     @Override
-    public ResourceReference resourceReferenceFor(final ManagedObject adapter) 
{
-        val objectIcon = adapter.getIcon();
-        return resourceReferenceForObjectIcon(objectIcon);
-    }
-
-    @Override
-    public ResourceReference resourceReferenceForSpec(final 
ObjectSpecification spec) {
-        val objectIcon = spec.getIcon(null);
-        return resourceReferenceForObjectIcon(objectIcon);
+    public ResourceReference resourceReferenceForObjectIcon(final ObjectIcon 
objectIcon) {
+        return new ObjectIconResourceReference(objectIcon);
     }
 
     // -- HELPER
 
-    private ResourceReference resourceReferenceForObjectIcon(final ObjectIcon 
objectIcon) {
-        return new ObjectIconResourceReference(objectIcon);
-    }
-
     private static class ObjectIconResourceReference
     extends ResourceReference {
 

Reply via email to