This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch v4
in repository https://gitbox.apache.org/repos/asf/causeway.git


The following commit(s) were added to refs/heads/v4 by this push:
     new 8b6df7fea89 CAUSEWAY-3905: Support Rendering of Images (Collection of 
Values)
8b6df7fea89 is described below

commit 8b6df7fea890d06e8f0d3674264e537f1c0d96ed
Author: a.huber <[email protected]>
AuthorDate: Tue Sep 23 09:48:58 2025 +0200

    CAUSEWAY-3905: Support Rendering of Images (Collection of Values)
---
 .../valuesemantics/BufferedImageValueSemantics.java  | 20 ++++++++++++++++++++
 .../ui/components/value/StandaloneValuePanel.java    |  2 ++
 2 files changed, 22 insertions(+)

diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/BufferedImageValueSemantics.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/BufferedImageValueSemantics.java
index dfa77b18983..96a25a82117 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/BufferedImageValueSemantics.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/BufferedImageValueSemantics.java
@@ -32,10 +32,13 @@
 import org.apache.causeway.applib.value.Blob;
 import org.apache.causeway.applib.value.NamedWithMimeType.CommonMimeType;
 import org.apache.causeway.applib.value.semantics.OrderRelation;
+import org.apache.causeway.applib.value.semantics.Renderer;
 import org.apache.causeway.applib.value.semantics.ValueDecomposition;
 import org.apache.causeway.applib.value.semantics.ValueSemanticsAbstract;
 import org.apache.causeway.commons.collections.Can;
 import org.apache.causeway.commons.internal.image._Images;
+import org.apache.causeway.commons.net.DataUri;
+import org.apache.causeway.commons.net.DataUri.ImageType;
 import org.apache.causeway.core.metamodel.object.ManagedObject;
 import org.apache.causeway.core.metamodel.object.ManagedObjects;
 import org.apache.causeway.schema.common.v2.BlobDto;
@@ -125,6 +128,23 @@ private Blob toBlob(final BufferedImage img) {
 //        /*sonar-ignore-off*/
 //    }
 
+    // -- RENDERER
+
+    @Override
+    public Renderer<BufferedImage> getRenderer() {
+        return new Renderer<>() {
+            @Override public String titlePresentation(Context context, 
BufferedImage img) {
+                if (img == null) return "no image";
+                return "Image %dx%d".formatted(img.getWidth(), 
img.getHeight());
+            }
+            @Override public String htmlPresentation(Context context, 
BufferedImage img) {
+                return "<img src=\"%s\"/>".formatted(
+                        DataUri.embeddedImage(ImageType.PNG, 
_Images.toBytes(img))
+                        .toExternalForm());
+            }
+        };
+    }
+
     // -- FACET
 
     @Override
diff --git 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/value/StandaloneValuePanel.java
 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/value/StandaloneValuePanel.java
index 477852efa86..77febf2f2c2 100644
--- 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/value/StandaloneValuePanel.java
+++ 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/value/StandaloneValuePanel.java
@@ -18,6 +18,7 @@
  */
 package org.apache.causeway.viewer.wicket.ui.components.value;
 
+import java.awt.image.BufferedImage;
 import java.net.URL;
 import java.util.UUID;
 
@@ -66,6 +67,7 @@ private boolean isProbablySimpleInlineHtml(final 
ObjectSpecification valueSpec)
         var cls = valueSpec.getCorrespondingClass();
 
         return PredefinedSerializables.isPredefinedSerializable(cls)
+                || BufferedImage.class.equals(cls)
                 || UUID.class.equals(cls)
                 || URL.class.equals(cls)
                 || LocalResourcePath.class.equals(cls);

Reply via email to