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 a7a108be4ee fixes regression AboutPage not serializable
a7a108be4ee is described below
commit a7a108be4ee44c5dbdfacb0f37c0e1504573056d
Author: Andi Huber <[email protected]>
AuthorDate: Fri Sep 19 09:55:52 2025 +0200
fixes regression AboutPage not serializable
---
.../commons/internal/base/_StableValue.java | 4 ++
.../viewer/wicket/model/models/AboutModel.java | 20 ++++++---
.../wicket/ui/components/about/AboutPanel.java | 47 ++++++++++------------
.../viewer/wicket/ui/pages/PageAbstract.java | 13 ++----
4 files changed, 44 insertions(+), 40 deletions(-)
diff --git
a/commons/src/main/java/org/apache/causeway/commons/internal/base/_StableValue.java
b/commons/src/main/java/org/apache/causeway/commons/internal/base/_StableValue.java
index d43c6d36cc1..2f46a325252 100644
---
a/commons/src/main/java/org/apache/causeway/commons/internal/base/_StableValue.java
+++
b/commons/src/main/java/org/apache/causeway/commons/internal/base/_StableValue.java
@@ -42,6 +42,10 @@ public _StableValue() {
this(new AtomicReference<>());
}
+ public _StableValue(T t) {
+ this(new AtomicReference<>(t));
+ }
+
/**
* Returns the current value if already set, or sets it using the provided
supplier
* and returns the result. This ensures the supplier is only executed
once, even
diff --git
a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/AboutModel.java
b/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/AboutModel.java
index 6a10f9a7ec9..0510f75d244 100644
---
a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/AboutModel.java
+++
b/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/AboutModel.java
@@ -18,19 +18,29 @@
*/
package org.apache.causeway.viewer.wicket.model.models;
-import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.causeway.core.config.CausewayConfiguration;
+import org.apache.causeway.core.metamodel.context.MetaModelContext;
/**
* Model providing welcome text.
*/
-public record AboutModel(CausewayConfiguration.Viewer.Common.Application
applicationSettings)
-implements IModel<CausewayConfiguration.Viewer.Common.Application> {
+public class AboutModel
+extends
LoadableDetachableModel<CausewayConfiguration.Viewer.Common.Application> {
+ private static final long serialVersionUID = 1L;
+
+ public AboutModel(CausewayConfiguration.Viewer.Common.Application value) {
+ super(value);
+ }
@Override
- public CausewayConfiguration.Viewer.Common.Application getObject() {
- return applicationSettings();
+ public CausewayConfiguration.Viewer.Common.Application load() {
+ return
MetaModelContext.instanceElseFail().getConfiguration().viewer().common().application();
}
+ public String name() { return getObject().name(); }
+ public String version() { return getObject().version(); }
+ public String about() { return getObject().about(); }
+
}
diff --git
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/about/AboutPanel.java
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/about/AboutPanel.java
index ccf45383162..829870cae2c 100644
---
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/about/AboutPanel.java
+++
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/about/AboutPanel.java
@@ -18,10 +18,7 @@
*/
package org.apache.causeway.viewer.wicket.ui.components.about;
-import java.io.InputStream;
-
import jakarta.inject.Inject;
-import jakarta.inject.Provider;
import jakarta.servlet.ServletContext;
import org.apache.wicket.markup.html.basic.Label;
@@ -29,6 +26,7 @@
import org.apache.wicket.model.LambdaModel;
import org.apache.causeway.commons.internal.base._NullSafe;
+import org.apache.causeway.commons.internal.base._StableValue;
import org.apache.causeway.core.config.CausewayConfiguration;
import org.apache.causeway.viewer.commons.model.about.JarManifestModel;
import org.apache.causeway.viewer.wicket.model.models.AboutModel;
@@ -49,8 +47,28 @@ class AboutPanel
private static final String ID_APPLICATION_VERSION = "applicationVersion";
private static final String ID_ABOUT_MESSAGE = "aboutMessage";
- public static class LabelVisibleOnlyIfNonEmpty extends Label {
+ public AboutPanel(final String id, final AboutModel aboutModel) {
+ super(id);
+
+ add(new LabelVisibleOnlyIfNonEmpty(ID_APPLICATION_NAME,
LambdaModel.of(aboutModel::name)));
+ add(new LabelVisibleOnlyIfNonEmpty(ID_APPLICATION_VERSION,
LambdaModel.of(aboutModel::version)));
+ add(new LabelVisibleOnlyIfNonEmpty(ID_ABOUT_MESSAGE,
LambdaModel.of(aboutModel::about)));
+ add(new JarManifestPanel(ID_MANIFEST_ATTRIBUTES, jarManifestModel()));
+ }
+
+ JarManifestModel jarManifestModel() {
+ return JAR_MANIFEST_MODEL_REF.orElseSet(this::createJarManifestModel);
+ }
+
+ // -- HELPER
+
+ private static final _StableValue<JarManifestModel> JAR_MANIFEST_MODEL_REF
= new _StableValue<>();
+ @Inject private transient ServletContext servletContext;
+ private JarManifestModel createJarManifestModel() {
+ return
JarManifestModel.of(()->servletContext.getResourceAsStream("/META-INF/MANIFEST.MF"));
+ }
+ public static class LabelVisibleOnlyIfNonEmpty extends Label {
private static final long serialVersionUID = 1L;
private final IModel<String> label;
@@ -65,25 +83,4 @@ public LabelVisibleOnlyIfNonEmpty(final String id, final
IModel<String> label) {
}
}
- @Inject
- private ServletContext servletContext;
-
- private JarManifestModel jarManifestModel;
-
- public AboutPanel(final String id, final AboutModel aboutModel) {
- super(id);
-
- add(new LabelVisibleOnlyIfNonEmpty(ID_APPLICATION_NAME,
LambdaModel.of(()->aboutModel.getObject().name())));
- add(new LabelVisibleOnlyIfNonEmpty(ID_APPLICATION_VERSION,
LambdaModel.of(()->aboutModel.getObject().version())));
- add(new LabelVisibleOnlyIfNonEmpty(ID_ABOUT_MESSAGE,
LambdaModel.of(()->aboutModel.getObject().about())));
-
- if(jarManifestModel == null) {
- Provider<InputStream> metaInfManifestProvider =
- () ->
servletContext.getResourceAsStream("/META-INF/MANIFEST.MF");
- jarManifestModel = JarManifestModel.of(metaInfManifestProvider);
- }
-
- add(new JarManifestPanel(ID_MANIFEST_ATTRIBUTES, jarManifestModel));
- }
-
}
diff --git
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/PageAbstract.java
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/PageAbstract.java
index 798ccebddbf..265b8e9aaf4 100644
---
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/PageAbstract.java
+++
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/PageAbstract.java
@@ -330,9 +330,7 @@ private void addComponent(final MarkupContainer container,
final UiComponentType
getComponentFactoryRegistry().addOrReplaceComponent(container,
uiComponentType, model);
}
- ////////////////////////////////////////////////////////////////
- // bookmarked pages
- ////////////////////////////////////////////////////////////////
+ // -- BOOKMARKED PAGES
/**
* Convenience for subclasses
@@ -391,9 +389,7 @@ protected Optional<BreadcrumbModel> getBreadcrumbModel() {
: Optional.empty();
}
- // ///////////////////////////////////////////////////////////////////
- // ActionPromptModalWindowProvider
- // ///////////////////////////////////////////////////////////////////
+ // -- ACTION PROMPT MODAL WINDOW PROVIDER
private ActionPromptModalWindow actionPromptModalWindow;
private ActionPromptSidebar actionPromptSidebar;
@@ -441,9 +437,7 @@ private void addActionPromptSidebar(final MarkupContainer
parent) {
parent.addOrReplace(actionPromptSidebar);
}
- // ///////////////////////////////////////////////////////////////////
- // UI Hint
- // ///////////////////////////////////////////////////////////////////
+ // -- UI HINT
/**
* Propagates all {@link
org.apache.causeway.viewer.wicket.model.hints.CausewayEventLetterAbstract
letter} events down to
@@ -456,7 +450,6 @@ public void onEvent(final org.apache.wicket.event.IEvent<?>
event) {
send(PageAbstract.this, Broadcast.BREADTH, new
CausewayEnvelopeEvent(letter)));
}
- // -- getComponentFactoryRegistry (Convenience)
protected ComponentFactoryRegistry getComponentFactoryRegistry() {
final HasComponentFactoryRegistry cfra = (HasComponentFactoryRegistry)
getApplication();
return cfra.getComponentFactoryRegistry();