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 {