You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@causeway.apache.org by ah...@apache.org on 2023/03/13 18:24:27 UTC
[causeway] branch master updated: CAUSEWAY-3373: some minor refactoring (code quality)
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 2c373c00af CAUSEWAY-3373: some minor refactoring (code quality)
2c373c00af is described below
commit 2c373c00afe4ad2e593f2ba01d9d7053254e67de
Author: Andi Huber <ah...@apache.org>
AuthorDate: Mon Mar 13 19:24:21 2023 +0100
CAUSEWAY-3373: some minor refactoring (code quality)
---
.../services/publishing/log/PageRenderLogger.java | 57 +++++++++++++---------
.../publishing/spi/PageRenderSubscriber.java | 32 ++++++++++--
.../applib/services/publishing/spi/PageType.java | 41 ----------------
.../commons/model/components/UiComponentType.java | 15 ++++++
.../viewer/wicket/model/models/PageType.java | 44 ++++++++---------
.../viewer/wicket/ui/pages/PageAbstract.java | 31 +++++++-----
.../viewer/wicket/ui/pages/entity/EntityPage.java | 24 ++++++---
.../StandaloneCollectionPage.java | 38 +++++++--------
.../viewer/wicket/ui/pages/value/ValuePage.java | 23 ++++++---
9 files changed, 168 insertions(+), 137 deletions(-)
diff --git a/api/applib/src/main/java/org/apache/causeway/applib/services/publishing/log/PageRenderLogger.java b/api/applib/src/main/java/org/apache/causeway/applib/services/publishing/log/PageRenderLogger.java
index 304d600807..f1a7251e3d 100644
--- a/api/applib/src/main/java/org/apache/causeway/applib/services/publishing/log/PageRenderLogger.java
+++ b/api/applib/src/main/java/org/apache/causeway/applib/services/publishing/log/PageRenderLogger.java
@@ -18,22 +18,26 @@
*/
package org.apache.causeway.applib.services.publishing.log;
-import lombok.extern.log4j.Log4j2;
-import lombok.val;
-
import java.util.List;
-import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.Objects;
import java.util.function.Supplier;
+import java.util.stream.Collectors;
import javax.annotation.Priority;
import javax.inject.Named;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.lang.Nullable;
+import org.springframework.stereotype.Service;
+
import org.apache.causeway.applib.CausewayModuleApplib;
import org.apache.causeway.applib.annotation.PriorityPrecedence;
import org.apache.causeway.applib.services.bookmark.Bookmark;
import org.apache.causeway.applib.services.publishing.spi.PageRenderSubscriber;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.stereotype.Service;
+import org.apache.causeway.commons.internal.base._NullSafe;
+
+import lombok.val;
+import lombok.extern.log4j.Log4j2;
/**
* Simple implementation of {@link PageRenderSubscriber} that just
@@ -48,37 +52,42 @@ import org.springframework.stereotype.Service;
@Log4j2
public class PageRenderLogger implements PageRenderSubscriber {
- static final String LOGICAL_TYPE_NAME = CausewayModuleApplib.NAMESPACE + ".ObjectRenderedLogger";
+ static final String LOGICAL_TYPE_NAME = CausewayModuleApplib.NAMESPACE + ".PageRenderLogger";
@Override
public boolean isEnabled() {
return log.isDebugEnabled();
}
-
@Override
- public void onRenderedDomainObject(Bookmark bookmark) {
- log.debug("rendered object: [ \"{}\" ]", bookmark.stringify());
+ public void onRenderedDomainObject(final Bookmark bookmark) {
+ log.debug("rendered object: [ {} ]", doubleQuoted(bookmark.stringify()));
}
@Override
- public void onRenderedCollection(Supplier<List<Bookmark>> bookmarkSupplier) {
- val buf = new StringBuffer();
- val first = new boolean[] {true};
- bookmarkSupplier.get().forEach(x -> {
- if(first[0]) {
- first[0] = false;
- } else {
- buf.append(", ");
- }
- buf.append("\"").append(x.stringify()).append("\"");
- });
- log.debug("rendered collection: [ {} ]", buf.toString());
+ public void onRenderedCollection(final Supplier<List<Bookmark>> bookmarkSupplier) {
+
+ val bookmarksStringified =
+ _NullSafe.stream(bookmarkSupplier.get())
+ .filter(Objects::nonNull)
+ .map(Bookmark::stringify)
+ .map(this::doubleQuoted)
+ .collect(Collectors.joining(", "));
+
+ log.debug("rendered collection: [ {} ]", bookmarksStringified);
}
@Override
- public void onRenderedValue(Object value) {
- log.debug("rendered value: [ \"{}\" ]", value.toString());
+ public void onRenderedValue(final Object value) {
+ log.debug("rendered value: [ {} ]", doubleQuoted(value));
}
+
+ // -- HELPER
+
+ private String doubleQuoted(final @Nullable Object obj) {
+ return "\"" + obj + "\"";
+ }
+
+
}
diff --git a/api/applib/src/main/java/org/apache/causeway/applib/services/publishing/spi/PageRenderSubscriber.java b/api/applib/src/main/java/org/apache/causeway/applib/services/publishing/spi/PageRenderSubscriber.java
index c4713beadf..088d32e7a1 100644
--- a/api/applib/src/main/java/org/apache/causeway/applib/services/publishing/spi/PageRenderSubscriber.java
+++ b/api/applib/src/main/java/org/apache/causeway/applib/services/publishing/spi/PageRenderSubscriber.java
@@ -21,6 +21,8 @@ package org.apache.causeway.applib.services.publishing.spi;
import java.util.List;
import java.util.function.Supplier;
+import org.springframework.lang.Nullable;
+
import org.apache.causeway.applib.services.bookmark.Bookmark;
import org.apache.causeway.commons.having.HasEnabling;
@@ -32,6 +34,28 @@ import org.apache.causeway.commons.having.HasEnabling;
*/
public interface PageRenderSubscriber extends HasEnabling {
+ /**
+ * Enumerates the different types of pages that can be rendered.
+ */
+ public enum PageType {
+ /**
+ * Either a view model or an entity.
+ */
+ DOMAIN_OBJECT,
+ /**
+ * A collection of view models or entities.
+ */
+ COLLECTION,
+ /**
+ * A single value
+ */
+ VALUE,
+ /**
+ * Anything else; might include void, or sign in pages.
+ */
+ OTHER;
+ }
+
/**
* Called just before the rendering process starts.
*
@@ -56,7 +80,7 @@ public interface PageRenderSubscriber extends HasEnabling {
*
* @param pageType - determines which of the subsequent <code>onRenderedXxx</code> callbacks (if any) will next be called.
*/
- default void onRendering(PageType pageType) {}
+ default void onRendering(final PageType pageType) {}
/**
@@ -64,20 +88,20 @@ public interface PageRenderSubscriber extends HasEnabling {
*
* @param bookmark - representation of the domain object that has been rendered.
*/
- default void onRenderedDomainObject(Bookmark bookmark) {}
+ default void onRenderedDomainObject(final Bookmark bookmark) {}
/**
* Indicates that a standalone list of domain objects (each represented by a {@link Bookmark} has been rendered.
*
* @param bookmarkSupplier - a supplier representations of the collection of domain objects that have been rendered. The level of indirection is for performance (in case no implementation is interested)
*/
- default void onRenderedCollection(Supplier<List<Bookmark>> bookmarkSupplier) {}
+ default void onRenderedCollection(final Supplier<List<Bookmark>> bookmarkSupplier) {}
/**
* Indicates that a value has been rendered.
*
* @param value - the actual value that has been rendered.
*/
- default void onRenderedValue(Object value) {}
+ default void onRenderedValue(final @Nullable Object value) {}
}
diff --git a/api/applib/src/main/java/org/apache/causeway/applib/services/publishing/spi/PageType.java b/api/applib/src/main/java/org/apache/causeway/applib/services/publishing/spi/PageType.java
deleted file mode 100644
index 8cf97de942..0000000000
--- a/api/applib/src/main/java/org/apache/causeway/applib/services/publishing/spi/PageType.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.causeway.applib.services.publishing.spi;
-
-/**
- * Enumerates the different types of pages that can be rendered.
- */
-public enum PageType {
- /**
- * Either a view model or an entity.
- */
- DOMAIN_OBJECT,
- /**
- * A collection of view models or entities.
- */
- COLLECTION,
- /**
- * A single value
- */
- VALUE,
- /**
- * Anything else; might include void, or sign in pages.
- */
- OTHER;
-}
diff --git a/viewers/commons/model/src/main/java/org/apache/causeway/viewer/commons/model/components/UiComponentType.java b/viewers/commons/model/src/main/java/org/apache/causeway/viewer/commons/model/components/UiComponentType.java
index f1e7de7655..0fa7541855 100644
--- a/viewers/commons/model/src/main/java/org/apache/causeway/viewer/commons/model/components/UiComponentType.java
+++ b/viewers/commons/model/src/main/java/org/apache/causeway/viewer/commons/model/components/UiComponentType.java
@@ -21,6 +21,7 @@ package org.apache.causeway.viewer.commons.model.components;
import org.springframework.lang.Nullable;
import org.apache.causeway.applib.annotation.Optionality;
+import org.apache.causeway.applib.services.publishing.spi.PageRenderSubscriber;
import org.apache.causeway.core.metamodel.commons.StringExtensions;
import lombok.Getter;
@@ -160,6 +161,17 @@ public enum UiComponentType {
private UiComponentType() {
this.optionality = Optionality.MANDATORY;
+ this.subscriberPageType = PageRenderSubscriber.PageType.OTHER;
+ }
+
+ private UiComponentType(final Optionality optionality) {
+ this.optionality = optionality;
+ this.subscriberPageType = PageRenderSubscriber.PageType.OTHER;
+ }
+
+ private UiComponentType(final PageRenderSubscriber.PageType pageType) {
+ this.optionality = Optionality.MANDATORY;
+ this.subscriberPageType = pageType;
}
@Override
@@ -184,6 +196,9 @@ public enum UiComponentType {
@Getter
private final Optionality optionality;
+ @Getter
+ private final PageRenderSubscriber.PageType subscriberPageType;
+
@Nullable
public static UiComponentType lookup(final String id) {
for (final UiComponentType uiComponentType : values()) {
diff --git a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/PageType.java b/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/PageType.java
index b5d9797581..da83b7af17 100644
--- a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/PageType.java
+++ b/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/PageType.java
@@ -18,6 +18,12 @@
*/
package org.apache.causeway.viewer.wicket.model.models;
+import org.apache.causeway.applib.services.publishing.spi.PageRenderSubscriber;
+
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+import lombok.experimental.Accessors;
+
/**
* Enumerates the different types of pages that can be rendered.
*
@@ -26,29 +32,21 @@ package org.apache.causeway.viewer.wicket.model.models;
* different types of pages. This allows the large-scale structure of page
* layout (eg headers, footers) to be altered.
*/
+@RequiredArgsConstructor
public enum PageType {
- SIGN_IN,
- SIGN_UP,
- SIGN_UP_VERIFY,
- PASSWORD_RESET,
- HOME,
- HOME_AFTER_PAGETIMEOUT,
- ABOUT,
- ENTITY,
- STANDALONE_COLLECTION,
- VALUE,
- VOID_RETURN;
+ SIGN_IN(PageRenderSubscriber.PageType.OTHER),
+ SIGN_UP(PageRenderSubscriber.PageType.OTHER),
+ SIGN_UP_VERIFY(PageRenderSubscriber.PageType.OTHER),
+ PASSWORD_RESET(PageRenderSubscriber.PageType.OTHER),
+ HOME(PageRenderSubscriber.PageType.OTHER),
+ HOME_AFTER_PAGETIMEOUT(PageRenderSubscriber.PageType.OTHER),
+ ABOUT(PageRenderSubscriber.PageType.OTHER),
+ ENTITY(PageRenderSubscriber.PageType.DOMAIN_OBJECT),
+ STANDALONE_COLLECTION(PageRenderSubscriber.PageType.COLLECTION),
+ VALUE(PageRenderSubscriber.PageType.VALUE),
+ VOID_RETURN(PageRenderSubscriber.PageType.OTHER);
+
+ @Getter @Accessors(fluent=true)
+ private final PageRenderSubscriber.PageType asApplibPageType;
- public org.apache.causeway.applib.services.publishing.spi.PageType asApplibPageType() {
- switch (this) {
- case ENTITY:
- return org.apache.causeway.applib.services.publishing.spi.PageType.DOMAIN_OBJECT;
- case STANDALONE_COLLECTION:
- return org.apache.causeway.applib.services.publishing.spi.PageType.COLLECTION;
- case VALUE:
- return org.apache.causeway.applib.services.publishing.spi.PageType.VALUE;
- default:
- return org.apache.causeway.applib.services.publishing.spi.PageType.OTHER;
- }
- }
}
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 2241ec2a13..8ced04608f 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
@@ -22,8 +22,6 @@ import java.util.Iterator;
import java.util.List;
import java.util.Optional;
-import org.apache.causeway.applib.services.publishing.spi.PageRenderSubscriber;
-import org.apache.causeway.commons.collections.Can;
import org.apache.wicket.Component;
import org.apache.wicket.MarkupContainer;
import org.apache.wicket.Page;
@@ -48,6 +46,8 @@ import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.causeway.applib.annotation.PromptStyle;
import org.apache.causeway.applib.services.exceprecog.ExceptionRecognizerService;
import org.apache.causeway.applib.services.metamodel.BeanSort;
+import org.apache.causeway.applib.services.publishing.spi.PageRenderSubscriber;
+import org.apache.causeway.commons.collections.Can;
import org.apache.causeway.commons.internal.base._Casts;
import org.apache.causeway.commons.internal.base._Timing;
import org.apache.causeway.commons.internal.debug._Debug;
@@ -474,30 +474,30 @@ implements ActionPromptProvider {
return cfra.getComponentFactoryRegistry();
}
-
// -- RE-ATTACH ENTITIES
@Override
public void renderPage() {
- val enabledObjectRenderSubscribers = getServiceRegistry().select(PageRenderSubscriber.class)
- .filter(PageRenderSubscriber::isEnabled);
- enabledObjectRenderSubscribers
- .forEach(subscriber -> {
- subscriber.onRendering(getPageClassRegistry().getPageType(this).asApplibPageType());
- });
+
+ val pageType = getPageClassRegistry().getPageType(this).asApplibPageType();
+ val enabledPageRenderSubscribers = enabledPageRenderSubscriber();
+
+ enabledPageRenderSubscribers
+ .forEach(subscriber -> subscriber.onRendering(pageType));
+
if(XrayUi.isXrayEnabled()){
_Debug.log("about to render %s ..", this.getClass().getSimpleName());
val stopWatch = _Timing.now();
onNewRequestCycle();
super.renderPage();
- onRendered(enabledObjectRenderSubscribers);
stopWatch.stop();
_Debug.log(".. rendering took %s", stopWatch.toString());
} else {
onNewRequestCycle();
super.renderPage();
- onRendered(enabledObjectRenderSubscribers);
}
+
+ onRendered(enabledPageRenderSubscribers);
}
/**
@@ -514,7 +514,14 @@ implements ActionPromptProvider {
*
* @param enabledObjectRenderSubscribers - those {@link PageRenderSubscriber}s that are {@link PageRenderSubscriber#isEnabled() enabled}
*/
- public void onRendered(Can<PageRenderSubscriber> enabledObjectRenderSubscribers) {
+ protected void onRendered(final Can<PageRenderSubscriber> enabledObjectRenderSubscribers) {
+ }
+
+ // -- HELPER
+
+ private Can<PageRenderSubscriber> enabledPageRenderSubscriber() {
+ return getServiceRegistry().select(PageRenderSubscriber.class)
+ .filter(PageRenderSubscriber::isEnabled);
}
}
diff --git a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/entity/EntityPage.java b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/entity/EntityPage.java
index 461eef51b2..76d0c0daca 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/entity/EntityPage.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/entity/EntityPage.java
@@ -18,8 +18,8 @@
*/
package org.apache.causeway.viewer.wicket.ui.pages.entity;
-import org.apache.causeway.applib.services.publishing.spi.PageRenderSubscriber;
-import org.apache.causeway.commons.collections.Can;
+import java.util.Optional;
+
import org.apache.wicket.Application;
import org.apache.wicket.RestartResponseException;
import org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation;
@@ -31,7 +31,9 @@ import org.apache.wicket.markup.repeater.RepeatingView;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.request.resource.CssResourceReference;
+import org.apache.causeway.applib.services.publishing.spi.PageRenderSubscriber;
import org.apache.causeway.applib.services.user.UserMemento;
+import org.apache.causeway.commons.collections.Can;
import org.apache.causeway.commons.internal.debug._Debug;
import org.apache.causeway.commons.internal.debug.xray.XrayUi;
import org.apache.causeway.core.metamodel.context.MetaModelContext;
@@ -217,13 +219,19 @@ public class EntityPage extends PageAbstract {
}
@Override
- public void onRendered(Can<PageRenderSubscriber> objectRenderSubscribers) {
- final ManagedObject objectAdapter;
- objectAdapter = model.getObject();
- val bookmarkIfAny = objectAdapter.getBookmark();
+ public void onRendered(final Can<PageRenderSubscriber> pageRenderSubscribers) {
+
+ // guard against unspecified
+ ManagedObjects.asSpecified(model.getObject())
+ .map(ManagedObject::getBookmark)
+ // guard against no bookmark available
+ .filter(Optional::isPresent)
+ .map(Optional::get)
+ .ifPresent(bookmark->{
+ pageRenderSubscribers
+ .forEach(objectRenderSubscriber -> objectRenderSubscriber.onRenderedDomainObject(bookmark));
+ });
- objectRenderSubscribers
- .forEach(objectRenderSubscriber -> objectRenderSubscriber.onRenderedDomainObject(bookmarkIfAny.get()));
}
// -- HELPER
diff --git a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/standalonecollection/StandaloneCollectionPage.java b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/standalonecollection/StandaloneCollectionPage.java
index 1c4f1ff612..7f2a26458c 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/standalonecollection/StandaloneCollectionPage.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/standalonecollection/StandaloneCollectionPage.java
@@ -18,25 +18,23 @@
*/
package org.apache.causeway.viewer.wicket.ui.pages.standalonecollection;
-import lombok.val;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.function.Supplier;
+import java.util.Optional;
+import java.util.stream.Collectors;
-import org.apache.causeway.applib.services.bookmark.Bookmark;
-import org.apache.causeway.applib.services.publishing.spi.PageRenderSubscriber;
-import org.apache.causeway.commons.collections.Can;
-import org.apache.causeway.commons.internal.base._Lazy;
import org.apache.wicket.Component;
import org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation;
+import org.apache.causeway.applib.services.publishing.spi.PageRenderSubscriber;
import org.apache.causeway.applib.services.user.UserMemento;
+import org.apache.causeway.commons.collections.Can;
+import org.apache.causeway.core.metamodel.object.ManagedObject;
import org.apache.causeway.viewer.commons.model.components.UiComponentType;
import org.apache.causeway.viewer.wicket.model.models.EntityCollectionModelStandalone;
import org.apache.causeway.viewer.wicket.model.util.PageParameterUtils;
import org.apache.causeway.viewer.wicket.ui.pages.PageAbstract;
+import lombok.val;
+
/**
* Web page representing an action invocation.
*/
@@ -61,19 +59,21 @@ public class StandaloneCollectionPage extends PageAbstract {
}
@Override
- public void onRendered(Can<PageRenderSubscriber> objectRenderSubscribers) {
+ public void onRendered(final Can<PageRenderSubscriber> objectRenderSubscribers) {
+
+ if(objectRenderSubscribers.isEmpty()) {
+ return;
+ }
- Supplier<List<Bookmark>> bookmarkSupplier = _Lazy.threadSafe(
- () -> {
- val bookmarks = new ArrayList<Bookmark>();
- collectionModel.getObject().getDataElements().getValue().forEach(x -> {
- x.getBookmark().ifPresent(bookmarks::add);
- });
- return bookmarks;
- });
+ val bookmarks =
+ collectionModel.getObject().getDataElements().getValue().stream()
+ .map(ManagedObject::getBookmark)
+ .filter(Optional::isPresent)
+ .map(Optional::get)
+ .collect(Collectors.toUnmodifiableList());
objectRenderSubscribers
- .forEach(subscriber -> subscriber.onRenderedCollection(bookmarkSupplier));
+ .forEach(subscriber -> subscriber.onRenderedCollection(()->bookmarks));
}
}
diff --git a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/value/ValuePage.java b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/value/ValuePage.java
index fb8d88a859..262e17a58c 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/value/ValuePage.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/value/ValuePage.java
@@ -18,12 +18,13 @@
*/
package org.apache.causeway.viewer.wicket.ui.pages.value;
-import org.apache.causeway.applib.services.publishing.spi.PageRenderSubscriber;
-import org.apache.causeway.commons.collections.Can;
import org.apache.wicket.Component;
import org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation;
+import org.apache.causeway.applib.services.publishing.spi.PageRenderSubscriber;
import org.apache.causeway.applib.services.user.UserMemento;
+import org.apache.causeway.commons.collections.Can;
+import org.apache.causeway.core.metamodel.object.ManagedObjects;
import org.apache.causeway.viewer.commons.model.components.UiComponentType;
import org.apache.causeway.viewer.wicket.model.models.ActionModel;
import org.apache.causeway.viewer.wicket.model.models.ValueModel;
@@ -31,6 +32,8 @@ import org.apache.causeway.viewer.wicket.model.util.PageParameterUtils;
import org.apache.causeway.viewer.wicket.ui.pages.PageAbstract;
import org.apache.causeway.viewer.wicket.ui.util.Wkt;
+import lombok.val;
+
/**
* Web page representing an action invocation.
*/
@@ -47,7 +50,6 @@ public class ValuePage extends PageAbstract {
*/
public ValuePage(final ValueModel valueModel) {
this(valueModel, actionNameFrom(valueModel));
-
}
private ValuePage(final ValueModel valueModel, final String actionName) {
@@ -69,9 +71,18 @@ public class ValuePage extends PageAbstract {
}
@Override
- public void onRendered(Can<PageRenderSubscriber> enabledObjectRenderSubscribers) {
- enabledObjectRenderSubscribers.forEach(objectRenderSubscriber -> {
- objectRenderSubscriber.onRenderedValue(valueModel.getObject().getPojo());
+ public void onRendered(final Can<PageRenderSubscriber> enabledObjectRenderSubscribers) {
+
+ // guard against unspecified
+ ManagedObjects.asSpecified(valueModel.getObject())
+ .ifPresent(managedObject->{
+
+ val nullableValuePojo = managedObject.getPojo();
+
+ enabledObjectRenderSubscribers.forEach(objectRenderSubscriber -> {
+ objectRenderSubscriber.onRenderedValue(nullableValuePojo);
+ });
});
+
}
}