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 2020/02/17 05:39:47 UTC

[isis] branch master updated: ISIS-2291: fix possible NPE on JGrowlBehaviour for good

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 88bf3d7  ISIS-2291: fix possible NPE on JGrowlBehaviour for good
88bf3d7 is described below

commit 88bf3d732aca86a23e68dff892a0c9bba5318a74
Author: Andi Huber <ah...@apache.org>
AuthorDate: Mon Feb 17 06:39:38 2020 +0100

    ISIS-2291: fix possible NPE on JGrowlBehaviour for good
---
 .../webapp/context/IsisWebAppCommonContext.java    | 14 +++++++++++++
 .../viewer/wicket/ui/errors/JGrowlBehaviour.java   | 23 ++++++----------------
 2 files changed, 20 insertions(+), 17 deletions(-)

diff --git a/core/webapp/src/main/java/org/apache/isis/core/webapp/context/IsisWebAppCommonContext.java b/core/webapp/src/main/java/org/apache/isis/core/webapp/context/IsisWebAppCommonContext.java
index 6b4c2af..d6d5956 100644
--- a/core/webapp/src/main/java/org/apache/isis/core/webapp/context/IsisWebAppCommonContext.java
+++ b/core/webapp/src/main/java/org/apache/isis/core/webapp/context/IsisWebAppCommonContext.java
@@ -18,6 +18,7 @@
  */
 package org.apache.isis.core.webapp.context;
 
+import java.util.Optional;
 import java.util.function.Function;
 import java.util.function.Supplier;
 
@@ -33,18 +34,22 @@ import org.apache.isis.core.metamodel.context.MetaModelContext;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.runtime.session.IsisSession;
+import org.apache.isis.core.security.authentication.AuthenticationSession;
+import org.apache.isis.core.security.authentication.MessageBroker;
 import org.apache.isis.core.webapp.context.memento.ObjectMemento;
 import org.apache.isis.core.webapp.context.memento.ObjectMementoService;
 
 import lombok.AccessLevel;
 import lombok.Getter;
 import lombok.val;
+import lombok.extern.log4j.Log4j2;
 
 /**
  * 
  * @since 2.0
  *
  */
+@Log4j2
 public class IsisWebAppCommonContext implements MetaModelContext.Delegating {
 
     /**
@@ -72,6 +77,15 @@ public class IsisWebAppCommonContext implements MetaModelContext.Delegating {
         return IsisSession.currentOrElseNull();
     }
     
+    public Optional<MessageBroker> getMessageBroker() {
+        val messageBroker = Optional.ofNullable(getAuthenticationSession())
+                .map(AuthenticationSession::getMessageBroker);
+        if(!messageBroker.isPresent()) {
+            log.warn("failed to locate a MessageBroker on current AuthenticationSession");
+        }
+        return messageBroker;
+    }
+    
     // -- SHORTCUTS
     
     public <T> T lookupServiceElseFail(Class<T> serviceClass) {
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/errors/JGrowlBehaviour.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/errors/JGrowlBehaviour.java
index 6177f4d..93d7def 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/errors/JGrowlBehaviour.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/errors/JGrowlBehaviour.java
@@ -18,8 +18,6 @@
  */
 package org.apache.isis.viewer.wicket.ui.errors;
 
-import java.util.Optional;
-
 import org.apache.wicket.Component;
 import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
@@ -30,12 +28,9 @@ import org.apache.wicket.request.resource.JavaScriptResourceReference;
 
 import org.apache.isis.applib.RecoverableException;
 import org.apache.isis.core.commons.internal.base._Strings;
-import org.apache.isis.core.security.authentication.AuthenticationSession;
 import org.apache.isis.core.security.authentication.MessageBroker;
 import org.apache.isis.core.webapp.context.IsisWebAppCommonContext;
-
-import lombok.val;
-import lombok.extern.log4j.Log4j2;
+import org.apache.isis.viewer.wicket.model.common.CommonContextUtils;
 
 /**
  * Attach to any Ajax button that might trigger a notification (ie calls
@@ -49,11 +44,10 @@ import lombok.extern.log4j.Log4j2;
  * editButton.add(new JGrowlBehaviour());
  * </pre>
  */
-@Log4j2
 public class JGrowlBehaviour extends AbstractDefaultAjaxBehavior {
 
     private static final long serialVersionUID = 1L;
-    private final transient IsisWebAppCommonContext commonContext;
+    private transient IsisWebAppCommonContext commonContext;
     
     public JGrowlBehaviour(IsisWebAppCommonContext commonContext) {
         this.commonContext = commonContext;
@@ -62,7 +56,7 @@ public class JGrowlBehaviour extends AbstractDefaultAjaxBehavior {
     @Override
     protected void respond(AjaxRequestTarget target) {
         
-        getMessageBroker().ifPresent(messageBroker->{
+        getCommonContext().getMessageBroker().ifPresent(messageBroker->{
             String feedbackMsg = JGrowlUtil.asJGrowlCalls(messageBroker);
             if(!_Strings.isNullOrEmpty(feedbackMsg)) {
                 target.appendJavaScript(feedbackMsg);
@@ -82,7 +76,7 @@ public class JGrowlBehaviour extends AbstractDefaultAjaxBehavior {
                 JavaScriptHeaderItem
                 .forReference(new JavaScriptResourceReference(JGrowlBehaviour.class, "js/bootstrap-growl.js")));
 
-        getMessageBroker().ifPresent(messageBroker->{
+        getCommonContext().getMessageBroker().ifPresent(messageBroker->{
         
             String feedbackMsg = JGrowlUtil.asJGrowlCalls(messageBroker);
             if(_Strings.isNotEmpty(feedbackMsg)) {
@@ -93,13 +87,8 @@ public class JGrowlBehaviour extends AbstractDefaultAjaxBehavior {
         
     }
 
-    protected Optional<MessageBroker> getMessageBroker() {
-        val messageBroker = Optional.ofNullable(commonContext.getAuthenticationSession())
-                .map(AuthenticationSession::getMessageBroker);
-        if(!messageBroker.isPresent()) {
-            log.warn("failed to locate a MessageBroker on current AuthenticationSession");
-        }
-        return messageBroker;
+    protected IsisWebAppCommonContext getCommonContext() {
+        return commonContext = CommonContextUtils.computeIfAbsent(commonContext);
     }
 
 }