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));
}
}