You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2022/04/22 13:32:33 UTC

[isis] branch master updated: ISIS-3017: adds warning toast on recognized ex. in WebRequestCycleForIsis

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/isis.git


The following commit(s) were added to refs/heads/master by this push:
     new 4d81d58ec0 ISIS-3017: adds warning toast on recognized ex. in WebRequestCycleForIsis
4d81d58ec0 is described below

commit 4d81d58ec04b42155153ea4996efc7a2ee67be3a
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Apr 22 15:32:25 2022 +0200

    ISIS-3017: adds warning toast on recognized ex. in
    WebRequestCycleForIsis
---
 .../viewer/integration/WebRequestCycleForIsis.java | 44 ++++++++++++----------
 1 file changed, 25 insertions(+), 19 deletions(-)

diff --git a/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/WebRequestCycleForIsis.java b/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/WebRequestCycleForIsis.java
index 0c6eb67a12..1ae2750c63 100644
--- a/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/WebRequestCycleForIsis.java
+++ b/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/WebRequestCycleForIsis.java
@@ -43,6 +43,7 @@ import org.apache.wicket.request.cycle.IRequestCycleListener;
 import org.apache.wicket.request.cycle.PageRequestHandlerTracker;
 import org.apache.wicket.request.cycle.RequestCycle;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.springframework.lang.Nullable;
 
 import org.apache.isis.applib.services.exceprecog.ExceptionRecognizer;
 import org.apache.isis.applib.services.exceprecog.ExceptionRecognizerForType;
@@ -67,8 +68,8 @@ import org.apache.isis.viewer.wicket.ui.pages.login.WicketSignInPage;
 import org.apache.isis.viewer.wicket.ui.pages.mmverror.MmvErrorPage;
 import org.apache.isis.viewer.wicket.ui.panels.PromptFormAbstract;
 
-import lombok.extern.log4j.Log4j2;
 import lombok.val;
+import lombok.extern.log4j.Log4j2;
 
 /**
  * Isis-specific implementation of the Wicket's {@link RequestCycle},
@@ -116,7 +117,7 @@ public class WebRequestCycleForIsis implements IRequestCycleListener {
     private IsisAppCommonContext commonContext;
 
     @Override
-    public synchronized void onBeginRequest(RequestCycle requestCycle) {
+    public synchronized void onBeginRequest(final RequestCycle requestCycle) {
 
         log.debug("onBeginRequest in");
 
@@ -210,7 +211,7 @@ public class WebRequestCycleForIsis implements IRequestCycleListener {
      * throw an exception.
      */
     @Override
-    public void onRequestHandlerExecuted(RequestCycle requestCycle, IRequestHandler handler) {
+    public void onRequestHandlerExecuted(final RequestCycle requestCycle, final IRequestHandler handler) {
         log.debug("onRequestHandlerExecuted: handler: {}", handler.getClass().getName());
 
     }
@@ -219,7 +220,7 @@ public class WebRequestCycleForIsis implements IRequestCycleListener {
      * It is not possible to throw exceptions here, hence use of {@link #onRequestHandlerExecuted(RequestCycle, IRequestHandler)}.
      */
     @Override
-    public synchronized void onEndRequest(RequestCycle requestCycle) {
+    public synchronized void onEndRequest(final RequestCycle requestCycle) {
 
         log.debug("onEndRequest");
 
@@ -230,14 +231,14 @@ public class WebRequestCycleForIsis implements IRequestCycleListener {
     }
 
     @Override
-    public void onDetach(RequestCycle requestCycle) {
+    public void onDetach(final RequestCycle requestCycle) {
         // detach the current @RequestScope, if any
         IRequestCycleListener.super.onDetach(requestCycle);
     }
 
 
     @Override
-    public IRequestHandler onException(RequestCycle cycle, Exception ex) {
+    public IRequestHandler onException(final RequestCycle cycle, final Exception ex) {
 
         log.debug("onException {}", ex.getClass().getSimpleName());
 
@@ -259,7 +260,7 @@ public class WebRequestCycleForIsis implements IRequestCycleListener {
                     // no message.
                     // this seems to occur when press ESC twice in rapid succession on a modal dialog.
                 } else {
-                    addMessage(null);
+                    addActionNoLongerAvailableMessage(null);
 
                 }
                 return respondGracefully(cycle);
@@ -269,6 +270,7 @@ public class WebRequestCycleForIsis implements IRequestCycleListener {
             val exceptionRecognizerService = getExceptionRecognizerService();
             val recognizedIfAny = exceptionRecognizerService.recognize(ex);
             if(recognizedIfAny.isPresent()) {
+                addWarning(recognizedIfAny.get().toMessage(getCommonContext().getTranslationService()));
                 return respondGracefully(cycle);
             }
 
@@ -276,13 +278,13 @@ public class WebRequestCycleForIsis implements IRequestCycleListener {
             final Optional<Throwable> hiddenIfAny = causalChain.stream()
                     .filter(ObjectMember.HiddenException::isInstanceOf).findFirst();
             if(hiddenIfAny.isPresent()) {
-                addMessage("hidden");
+                addActionNoLongerAvailableMessage("hidden");
                 return respondGracefully(cycle);
             }
             final Optional<Throwable> disabledIfAny = causalChain.stream()
                     .filter(ObjectMember.DisabledException::isInstanceOf).findFirst();
             if(disabledIfAny.isPresent()) {
-                addTranslatedMessage(disabledIfAny.get().getMessage());
+                addActionNoLongerAvailableMessage(disabledIfAny.get().getMessage());
                 return respondGracefully(cycle);
             }
 
@@ -306,18 +308,22 @@ public class WebRequestCycleForIsis implements IRequestCycleListener {
         return new RenderPageRequestHandler(pageProvider);
     }
 
-    private void addMessage(final String message) {
-        final String translatedMessage = translate(message);
-        addTranslatedMessage(translatedMessage);
+    private void addWarning(final @Nullable String translatedWarning) {
+        _Strings.nonEmpty(translatedWarning)
+        .ifPresent(warning->{
+            getMessageBroker().ifPresent(broker->{
+                broker.addWarning(warning);
+            });
+        });
     }
 
-    private void addTranslatedMessage(final String translatedSuffixIfAny) {
+    private void addActionNoLongerAvailableMessage(final @Nullable String suffixIfAny) {
 
         getMessageBroker().ifPresent(broker->{
 
             final String translatedPrefix = translate("Action no longer available");
-            final String message = translatedSuffixIfAny != null
-                    ? String.format("%s (%s)", translatedPrefix, translatedSuffixIfAny)
+            final String message = suffixIfAny != null
+                    ? String.format("%s (%s)", translatedPrefix, translate(suffixIfAny))
                     : translatedPrefix;
 
             broker.addMessage(message);
@@ -335,7 +341,7 @@ public class WebRequestCycleForIsis implements IRequestCycleListener {
                 		text);
     }
 
-    protected PageProvider errorPageProviderFor(Exception ex) {
+    protected PageProvider errorPageProviderFor(final Exception ex) {
         IRequestablePage errorPage = errorPageFor(ex);
         return errorPage != null
                 ? new PageProvider(errorPage)
@@ -348,7 +354,7 @@ public class WebRequestCycleForIsis implements IRequestCycleListener {
                     PageExpiredException.class,
                     __->"Requested page is no longer available.");
 
-    protected IRequestablePage errorPageFor(Exception ex) {
+    protected IRequestablePage errorPageFor(final Exception ex) {
 
         val commmonContext = getCommonContext();
 
@@ -424,7 +430,7 @@ public class WebRequestCycleForIsis implements IRequestCycleListener {
         return getWicketAuthenticatedWebSession().isSignedIn();
     }
 
-    private boolean userHasSessionWithRememberMe(RequestCycle requestCycle) {
+    private boolean userHasSessionWithRememberMe(final RequestCycle requestCycle) {
         val containerRequest = requestCycle.getRequest().getContainerRequest();
 
         if (containerRequest instanceof HttpServletRequest) {
@@ -442,7 +448,7 @@ public class WebRequestCycleForIsis implements IRequestCycleListener {
     }
 
 
-    public void setPageClassRegistry(PageClassRegistry pageClassRegistry) {
+    public void setPageClassRegistry(final PageClassRegistry pageClassRegistry) {
         this.pageClassRegistry = pageClassRegistry;
     }