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

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


The following commit(s) were added to refs/heads/main by this push:
     new a0df45b9572 CAUSEWAY-3859: simplify blob panel serialization 
(performance)
a0df45b9572 is described below

commit a0df45b95720c90c0dc947e05203a5b47cd69833
Author: Andi Huber <[email protected]>
AuthorDate: Thu Mar 13 22:14:33 2025 +0100

    CAUSEWAY-3859: simplify blob panel serialization (performance)
---
 .../causeway/viewer/wicket/model/models/PropertyModel.java |  2 +-
 .../{ScalarUnwrappingModel.java => ScalarUnwrapper.java}   | 11 ++++-------
 .../viewer/wicket/model/models/UiAttributeWkt.java         | 14 +++++++++++++-
 .../components/attributes/blobclob/BlobAttributePanel.java |  2 +-
 .../attributes/blobclob/BlobOrClobAttributePanel.java      | 12 +++---------
 .../components/attributes/blobclob/ClobAttributePanel.java |  2 +-
 .../components/attributes/image/ImageAttributePanel.java   |  5 +----
 7 files changed, 24 insertions(+), 24 deletions(-)

diff --git 
a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/PropertyModel.java
 
b/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/PropertyModel.java
index b6e8d2e4c3a..c9915b85fdf 100644
--- 
a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/PropertyModel.java
+++ 
b/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/PropertyModel.java
@@ -42,7 +42,7 @@ public final class PropertyModel
     private static final long serialVersionUID = 1L;
 
     @Getter(onMethod_={@Override})
-    private UiPropertyWkt uiProperty;
+    private final UiPropertyWkt uiProperty;
 
     public static PropertyModel wrap(
             final UiPropertyWkt uiProperty,
diff --git 
a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/ScalarUnwrappingModel.java
 
b/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/ScalarUnwrapper.java
similarity index 93%
rename from 
viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/ScalarUnwrappingModel.java
rename to 
viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/ScalarUnwrapper.java
index 32cda600685..5b72f44ebe6 100644
--- 
a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/ScalarUnwrappingModel.java
+++ 
b/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/ScalarUnwrapper.java
@@ -18,7 +18,6 @@
  */
 package org.apache.causeway.viewer.wicket.model.models;
 
-import org.apache.wicket.model.IModel;
 import org.jspecify.annotations.NonNull;
 
 import org.springframework.util.ClassUtils;
@@ -32,30 +31,28 @@
  * Wraps and unwraps the contained value within {@link ManagedObject},
  * as provided by a {@link UiAttributeWkt}.
  */
-public record ScalarUnwrappingModel<T>(
+record ScalarUnwrapper<T>(
     Class<T> type,
-    UiAttributeWkt attributeModel) implements IModel<T> {
+    UiAttributeWkt attributeModel) {
 
     // canonical constructor
-    public ScalarUnwrappingModel(
+    public ScalarUnwrapper(
             final @NonNull Class<T> type,
             final @NonNull UiAttributeWkt attributeModel) {
-        this.attributeModel = attributeModel;
         this.type = type;
+        this.attributeModel = attributeModel;
         
_Assert.assertTrue(attributeModel.getElementType().isAssignableFrom(type), ()->
                 String.format("cannot possibly unwrap model of type %s into 
target type %s",
                         
attributeModel.getElementType().getCorrespondingClass(),
                         type));
     }
 
-    @Override
     public T getObject() {
         var objectAdapter = attributeModel().getObject();
         var pojo = unwrap(objectAdapter);
         return pojo;
     }
 
-    @Override
     public void setObject(final T object) {
         var attributeModel = attributeModel();
         if (object == null) {
diff --git 
a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/UiAttributeWkt.java
 
b/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/UiAttributeWkt.java
index e4acd515bd6..63b53957b37 100644
--- 
a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/UiAttributeWkt.java
+++ 
b/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/UiAttributeWkt.java
@@ -110,8 +110,20 @@ public final Either<ParameterModel, PropertyModel> 
getSpecialization() {
                 : Either.right((PropertyModel) this);
     }
 
+    public <T> T unwrapAs(final Class<T> type) {
+        return new ScalarUnwrapper<T>(type, this).getObject();
+    }
+
     public <T> IModel<T> unwrapped(final Class<T> type) {
-        return new ScalarUnwrappingModel<T>(type, this);
+        return new IModel<T>() {
+            private static final long serialVersionUID = 1L;
+            @Override public T getObject() {
+                return new ScalarUnwrapper<T>(type, 
UiAttributeWkt.this).getObject();
+            }
+            @Override public void setObject(final T t) {
+                new ScalarUnwrapper<T>(type, UiAttributeWkt.this).setObject(t);
+            }
+        };
     }
 
     /**
diff --git 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/attributes/blobclob/BlobAttributePanel.java
 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/attributes/blobclob/BlobAttributePanel.java
index 6af8367735d..92b9017415f 100644
--- 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/attributes/blobclob/BlobAttributePanel.java
+++ 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/attributes/blobclob/BlobAttributePanel.java
@@ -47,7 +47,7 @@ protected IModel<List<FileUpload>> fileUploadModel() {
 
     @Override
     protected IResource newResource(final Blob blob) {
-        return new ByteArrayResource(blob.getMimeType().getBaseType(), 
blob.getBytes(), blob.getName());
+        return new ByteArrayResource(blob.mimeType().getBaseType(), 
blob.bytes(), blob.name());
     }
 
 }
diff --git 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/attributes/blobclob/BlobOrClobAttributePanel.java
 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/attributes/blobclob/BlobOrClobAttributePanel.java
index 618a21cb956..69c069737c2 100644
--- 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/attributes/blobclob/BlobOrClobAttributePanel.java
+++ 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/attributes/blobclob/BlobOrClobAttributePanel.java
@@ -29,14 +29,12 @@
 import org.apache.wicket.request.resource.IResource;
 
 import 
org.apache.causeway.applib.services.placeholder.PlaceholderRenderService.PlaceholderLiteral;
-import org.apache.causeway.applib.value.Blob;
-import org.apache.causeway.applib.value.Clob;
 import org.apache.causeway.applib.value.NamedWithMimeType;
 import org.apache.causeway.viewer.commons.model.components.UiString;
 import org.apache.causeway.viewer.wicket.model.models.UiAttributeWkt;
-import 
org.apache.causeway.viewer.wicket.ui.components.attributes.AttributePanelWithFormField;
 import 
org.apache.causeway.viewer.wicket.ui.components.attributes.AttributeFragmentFactory.CompactFragment;
 import 
org.apache.causeway.viewer.wicket.ui.components.attributes.AttributeFragmentFactory.InputFragment;
+import 
org.apache.causeway.viewer.wicket.ui.components.attributes.AttributePanelWithFormField;
 import org.apache.causeway.viewer.wicket.ui.util.Wkt;
 import org.apache.causeway.viewer.wicket.ui.util.WktTooltips;
 
@@ -45,12 +43,8 @@ abstract class BlobOrClobAttributePanel<T extends 
NamedWithMimeType>
 
     private static final long serialVersionUID = 1L;
 
-    /** Model that maps to either {@link Blob} or {@link Clob} */
-    private IModel<T> unwrapped;
-
     protected BlobOrClobAttributePanel(final String id, final UiAttributeWkt 
attributeModel, final Class<T> type) {
         super(id, attributeModel, type);
-        this.unwrapped = attributeModel.unwrapped(type);
     }
 
     protected abstract IModel<List<FileUpload>> fileUploadModel();
@@ -78,7 +72,7 @@ protected FormComponent createFormComponent(final String id, 
final UiAttributeWk
     @Override
     protected UiString obtainOutputFormat() {
         var caption = getBlobOrClobFromModel()
-                .map(NamedWithMimeType::getName)
+                .map(NamedWithMimeType::name)
                 .orElseGet(()->
                     getPlaceholderRenderService()
                     .asText(PlaceholderLiteral.NULL_REPRESENTATION));
@@ -100,7 +94,7 @@ private void addAcceptFilterTo(final Component component){
     }
 
     private Optional<T> getBlobOrClobFromModel() {
-        return Optional.ofNullable(unwrapped.getObject());
+        return Optional.ofNullable(attributeModel().unwrapAs(type));
     }
 
     private Component createDownloadLink(final String id, final IModel<String> 
labelModel) {
diff --git 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/attributes/blobclob/ClobAttributePanel.java
 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/attributes/blobclob/ClobAttributePanel.java
index 89042b07363..c4251c6610b 100644
--- 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/attributes/blobclob/ClobAttributePanel.java
+++ 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/attributes/blobclob/ClobAttributePanel.java
@@ -53,7 +53,7 @@ protected IModel<List<FileUpload>> fileUploadModel() {
 
     @Override
     protected IResource newResource(final Clob clob) {
-        return new CharSequenceResource(clob.getMimeType().getBaseType(), 
clob.getChars(), clob.getName());
+        return new CharSequenceResource(clob.mimeType().getBaseType(), 
clob.chars(), clob.name());
     }
 
 }
diff --git 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/attributes/image/ImageAttributePanel.java
 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/attributes/image/ImageAttributePanel.java
index cf78188f166..ea0ff7bec12 100644
--- 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/attributes/image/ImageAttributePanel.java
+++ 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/attributes/image/ImageAttributePanel.java
@@ -43,11 +43,8 @@ class ImageAttributePanel
 
     private static final long serialVersionUID = 1L;
 
-    private IModel<BufferedImage> unwrapped;
-
     public ImageAttributePanel(final String id, final UiAttributeWkt 
attributeModel) {
         super(id, attributeModel, BufferedImage.class);
-        this.unwrapped = attributeModel.unwrapped(type);
     }
 
     protected IModel<List<FileUpload>> fileUploadModel() {
@@ -95,7 +92,7 @@ private void addAcceptFilterTo(final Component component){
     }
 
     private Optional<BufferedImage> pojoOptional() {
-        return Optional.ofNullable(unwrapped.getObject());
+        return Optional.ofNullable(attributeModel().unwrapAs(type));
     }
 
 }

Reply via email to