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 cb6c132f69 CAUSEWAY-3402: properly lookup PageClassRegistry for
ExceptionStackTracePanel
cb6c132f69 is described below
commit cb6c132f69b4489136650b340b9febdfc7012083
Author: andi-huber <[email protected]>
AuthorDate: Thu Apr 13 09:30:01 2023 +0200
CAUSEWAY-3402: properly lookup PageClassRegistry for
ExceptionStackTracePanel
---
.../wicket/ui/errors/ExceptionStackTracePanel.java | 108 ++++++++++-----------
.../accmngt/AccountManagementPageAbstract.java | 5 +-
.../viewer/wicket/ui/pages/error/ErrorPage.java | 5 +-
3 files changed, 60 insertions(+), 58 deletions(-)
diff --git
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/errors/ExceptionStackTracePanel.java
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/errors/ExceptionStackTracePanel.java
index 50a8274b3b..fe67a363fd 100644
---
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/errors/ExceptionStackTracePanel.java
+++
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/errors/ExceptionStackTracePanel.java
@@ -18,7 +18,7 @@
*/
package org.apache.causeway.viewer.wicket.ui.errors;
-import javax.inject.Inject;
+import java.util.List;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.MarkupContainer;
@@ -29,7 +29,6 @@ import
org.apache.wicket.markup.head.JavaScriptReferenceHeaderItem;
import org.apache.wicket.markup.html.WebComponent;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.link.AbstractLink;
-import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.Model;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.request.resource.JavaScriptResourceReference;
@@ -40,24 +39,24 @@ import
org.apache.causeway.viewer.wicket.model.models.UiObjectWkt;
import
org.apache.causeway.viewer.wicket.ui.components.widgets.breadcrumbs.BreadcrumbModel;
import
org.apache.causeway.viewer.wicket.ui.components.widgets.breadcrumbs.BreadcrumbModelProvider;
import org.apache.causeway.viewer.wicket.ui.pages.PageClassRegistry;
+import org.apache.causeway.viewer.wicket.ui.panels.PanelBase;
import org.apache.causeway.viewer.wicket.ui.util.Wkt;
import org.apache.causeway.viewer.wicket.ui.util.WktComponents;
import org.apache.causeway.viewer.wicket.ui.util.WktLinks;
-public class ExceptionStackTracePanel extends Panel {
+public class ExceptionStackTracePanel
+extends PanelBase<List<StackTraceDetail>> {
private static final long serialVersionUID = 1L;
private static final String ID_MAIN_MESSAGE = "mainMessage";
-
private static final String ID_EXCEPTION_DETAIL_DIV = "exceptionDetailDiv";
-
private static final String ID_TICKET_MARKUP = "ticketMarkup";
-
private static final String ID_STACK_TRACE_ELEMENT = "stackTraceElement";
private static final String ID_LINE = "stackTraceElementLine";
- private static final JavaScriptResourceReference DIV_TOGGLE_JS = new
JavaScriptResourceReference(ExceptionStackTracePanel.class, "div-toggle.js");
+ private static final JavaScriptResourceReference DIV_TOGGLE_JS =
+ new JavaScriptResourceReference(ExceptionStackTracePanel.class,
"div-toggle.js");
public class ExternalImageUrl extends WebComponent {
@@ -77,65 +76,64 @@ public class ExceptionStackTracePanel extends Panel {
}
}
- public ExceptionStackTracePanel(final String id, final ExceptionModel
exceptionModel) {
+ public ExceptionStackTracePanel(
+ final PageClassRegistry pageClassRegistry,
+ final String id, final ExceptionModel exceptionModel) {
super(id, exceptionModel);
final Ticket ticket = exceptionModel.getTicket();
final String mainMessage =
- ticket != null && ticket.getUserMessage() != null
- ? ticket.getUserMessage()
+ ticket != null
+ && ticket.getUserMessage() != null
+ ? ticket.getUserMessage()
: exceptionModel.getMainMessage();
- Wkt.labelAdd(this, ID_MAIN_MESSAGE, mainMessage);
-
- // to avoid potential XSS attacks, no longer escape model
strings
- // (risk is low but could just happen: error message being
rendered might accidentally or deliberately contain rogue JavaScript)
- // label.setEscapeModelStrings(false);
-
- final String ticketMarkup = ticket != null ?
ticket.getMarkup(): null;
- if(ticketMarkup == null) {
- WktComponents.permanentlyHide(this, ID_TICKET_MARKUP);
- } else {
- Wkt.markupAdd(this, ID_TICKET_MARKUP, ticket.getMarkup());
- }
+ Wkt.labelAdd(this, ID_MAIN_MESSAGE, mainMessage);
- final boolean suppressExceptionDetail =
- exceptionModel.isAuthorizationException() ||
- exceptionModel.isRecognized() ||
- (ticket != null && ticket.getStackTracePolicy() ==
Ticket.StackTracePolicy.HIDE);
- if(suppressExceptionDetail) {
- WktComponents.permanentlyHide(this,
ID_EXCEPTION_DETAIL_DIV);
- } else {
- MarkupContainer container = new
WebMarkupContainer(ID_EXCEPTION_DETAIL_DIV) {
- private static final long serialVersionUID = 1L;
- @Override
- public void renderHead(final IHeaderResponse response)
{
-
response.render(JavaScriptReferenceHeaderItem.forReference(DIV_TOGGLE_JS));
- }
- };
- container.add(new
StackTraceListView(ID_STACK_TRACE_ELEMENT, ExceptionStackTracePanel.ID_LINE,
exceptionModel.getStackTrace()));
- add(container);
- }
+ final String ticketMarkup = ticket != null ? ticket.getMarkup(): null;
+ if(ticketMarkup == null) {
+ WktComponents.permanentlyHide(this, ID_TICKET_MARKUP);
+ } else {
+ Wkt.markupAdd(this, ID_TICKET_MARKUP, ticket.getMarkup());
+ }
- final BreadcrumbModelProvider session =
(BreadcrumbModelProvider) getSession();
- final BreadcrumbModel breadcrumbModel =
session.getBreadcrumbModel();
- final UiObjectWkt entityModel =
breadcrumbModel.getMostRecentlyVisited();
-
- final Class<? extends Page> pageClass;
- final PageParameters pageParameters;
- if (entityModel != null) {
- pageClass =
pageClassRegistry.getPageClass(PageType.ENTITY);
- pageParameters = entityModel.getPageParameters();
- } else {
- pageClass = pageClassRegistry.getPageClass(PageType.HOME);
- pageParameters = null;
+ final boolean suppressExceptionDetail =
+ exceptionModel.isAuthorizationException() ||
+ exceptionModel.isRecognized() ||
+ (ticket != null && ticket.getStackTracePolicy() ==
Ticket.StackTracePolicy.HIDE);
+ if(suppressExceptionDetail) {
+ WktComponents.permanentlyHide(this, ID_EXCEPTION_DETAIL_DIV);
+ } else {
+ MarkupContainer container = new
WebMarkupContainer(ID_EXCEPTION_DETAIL_DIV) {
+ private static final long serialVersionUID = 1L;
+ @Override
+ public void renderHead(final IHeaderResponse response) {
+
response.render(JavaScriptReferenceHeaderItem.forReference(DIV_TOGGLE_JS));
}
+ };
+ container.add(new StackTraceListView(
+ ID_STACK_TRACE_ELEMENT,
+ ExceptionStackTracePanel.ID_LINE,
+ exceptionModel.getStackTrace()));
+ add(container);
+ }
- final AbstractLink link =
WktLinks.newBookmarkablePageLink("continueButton", pageParameters, pageClass);
- add(link);
+ final BreadcrumbModelProvider session = (BreadcrumbModelProvider)
getSession();
+ final BreadcrumbModel breadcrumbModel = session.getBreadcrumbModel();
+ final UiObjectWkt entityModel =
breadcrumbModel.getMostRecentlyVisited();
+
+ final Class<? extends Page> pageClass;
+ final PageParameters pageParameters;
+ if (entityModel != null) {
+ pageClass = pageClassRegistry.getPageClass(PageType.ENTITY);
+ pageParameters = entityModel.getPageParameters();
+ } else {
+ pageClass = pageClassRegistry.getPageClass(PageType.HOME);
+ pageParameters = null;
+ }
+ final AbstractLink link =
WktLinks.newBookmarkablePageLink("continueButton", pageParameters, pageClass);
+ add(link);
}
- @Inject PageClassRegistry pageClassRegistry;
-
}
diff --git
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/accmngt/AccountManagementPageAbstract.java
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/accmngt/AccountManagementPageAbstract.java
index 74567a8770..7c0483a07f 100644
---
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/accmngt/AccountManagementPageAbstract.java
+++
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/accmngt/AccountManagementPageAbstract.java
@@ -38,6 +38,7 @@ import
org.apache.causeway.viewer.wicket.ui.components.widgets.navbar.BrandName;
import org.apache.causeway.viewer.wicket.ui.errors.ExceptionModel;
import org.apache.causeway.viewer.wicket.ui.errors.ExceptionStackTracePanel;
import org.apache.causeway.viewer.wicket.ui.pages.PageAbstract;
+import org.apache.causeway.viewer.wicket.ui.pages.PageClassRegistry;
import org.apache.causeway.viewer.wicket.ui.pages.WebPageBase;
import org.apache.causeway.viewer.wicket.ui.util.Wkt;
@@ -54,7 +55,6 @@ public class AccountManagementPageAbstract extends
WebPageBase {
private static final String ID_PAGE_TITLE = "pageTitle";
private static final String ID_APPLICATION_NAME = "applicationName";
-
private static final String ID_EXCEPTION_STACK_TRACE =
"exceptionStackTrace";
/**
@@ -81,7 +81,8 @@ public class AccountManagementPageAbstract extends
WebPageBase {
addApplicationName(signInLink);
if(exceptionModel != null) {
- add(new ExceptionStackTracePanel(ID_EXCEPTION_STACK_TRACE,
exceptionModel));
+ val pageClassRegistry =
super.getServiceRegistry().lookupServiceElseFail(PageClassRegistry.class);
+ add(new ExceptionStackTracePanel(pageClassRegistry,
ID_EXCEPTION_STACK_TRACE, exceptionModel));
} else {
add(new
WebMarkupContainer(ID_EXCEPTION_STACK_TRACE).setVisible(false));
}
diff --git
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/error/ErrorPage.java
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/error/ErrorPage.java
index c105d1b4b4..d215d94563 100644
---
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/error/ErrorPage.java
+++
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/error/ErrorPage.java
@@ -32,6 +32,7 @@ import
org.apache.causeway.viewer.wicket.ui.errors.ExceptionModel;
import org.apache.causeway.viewer.wicket.ui.errors.ExceptionStackTracePanel;
import org.apache.causeway.viewer.wicket.ui.errors.StackTraceDetail;
import org.apache.causeway.viewer.wicket.ui.pages.PageAbstract;
+import org.apache.causeway.viewer.wicket.ui.pages.PageClassRegistry;
import lombok.val;
@@ -80,7 +81,9 @@ public class ErrorPage extends PageAbstract {
}
- themeDiv.add(new ExceptionStackTracePanel(ID_EXCEPTION_STACK_TRACE,
exceptionModel));
+ val pageClassRegistry =
super.getServiceRegistry().lookupServiceElseFail(PageClassRegistry.class);
+
+ themeDiv.add(new ExceptionStackTracePanel(pageClassRegistry,
ID_EXCEPTION_STACK_TRACE, exceptionModel));
}