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 2019/10/25 11:16:24 UTC

[isis] branch v2 updated: ISIS-2158: fixes de-serialization issue also for panels

This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch v2
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/v2 by this push:
     new f266316  ISIS-2158: fixes de-serialization issue also for panels
f266316 is described below

commit f266316cfca389c8836fa2421eebea7fd0d84705
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Oct 25 13:16:11 2019 +0200

    ISIS-2158: fixes de-serialization issue also for panels
    
    - it seems with wicket, injection points are not honored for
    de-serialized panels, models and pages
---
 .../viewer/wicket/model/models/ModelAbstract.java  | 11 +---
 .../isis/viewer/wicket/ui/pages/WebPageBase.java   | 32 ++++-----
 .../isis/viewer/wicket/ui/panels/PanelBase.java    | 76 ++++++++++++++++------
 3 files changed, 71 insertions(+), 48 deletions(-)

diff --git a/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ModelAbstract.java b/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ModelAbstract.java
index 0ea3b83..8382490 100644
--- a/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ModelAbstract.java
+++ b/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ModelAbstract.java
@@ -51,17 +51,8 @@ implements IsisWebAppCommonContext.Delegating {
 
     @Override
     public IsisWebAppCommonContext getCommonContext() {
-        commonContext = CommonContextUtils.computeIfAbsent(commonContext);
-        return commonContext;
+        return commonContext = CommonContextUtils.computeIfAbsent(commonContext);
     }
     
-//    public IsisSessionFactory getIsisSessionFactory() {
-//        if(isisSessionFactory==null) {
-//            isisSessionFactory = getCommonContext().lookupServiceElseFail(IsisSessionFactory.class);
-//        }
-//        return isisSessionFactory;
-//    }
-
-    
     
 }
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/WebPageBase.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/WebPageBase.java
index 8f1f36f..46ed4a6 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/WebPageBase.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/WebPageBase.java
@@ -50,34 +50,28 @@ public abstract class WebPageBase extends WebPage implements IsisWebAppCommonCon
     
     @Override
     public IsisWebAppCommonContext getCommonContext() {
-        commonContext = CommonContextUtils.computeIfAbsent(commonContext);
-        
-        this.webAppConfigBean = commonContext.lookupServiceElseFail(WebAppConfigBean.class);
-        this.pageClassRegistry = commonContext.lookupServiceElseFail(PageClassRegistry.class);
-        
-        return commonContext;
+        return commonContext = CommonContextUtils.computeIfAbsent(commonContext);
     }
     
     public WebAppConfigBean getWebAppConfigBean() {
-        if(webAppConfigBean==null) {
-            webAppConfigBean = getCommonContext().lookupServiceElseFail(WebAppConfigBean.class);
-        }
-        return webAppConfigBean;
+        return webAppConfigBean = computeIfAbsent(WebAppConfigBean.class, webAppConfigBean);
     }
     
     public PageClassRegistry getPageClassRegistry() {
-        if(pageClassRegistry==null) {
-            pageClassRegistry = getCommonContext().lookupServiceElseFail(PageClassRegistry.class);
-        }
-        return pageClassRegistry;
+        return pageClassRegistry = computeIfAbsent(PageClassRegistry.class, pageClassRegistry);
     }
-    
+
     public IsisSessionFactory getIsisSessionFactory() {
-        if(isisSessionFactory==null) {
-            isisSessionFactory = getCommonContext().lookupServiceElseFail(IsisSessionFactory.class);
-        }
-        return isisSessionFactory;
+        return isisSessionFactory = computeIfAbsent(IsisSessionFactory.class, isisSessionFactory);
     }
     
     
+    // -- HELPER
+    
+    private <X> X computeIfAbsent(Class<X> type, X existingIfAny) {
+        return existingIfAny!=null
+                ? existingIfAny
+                        : getCommonContext().lookupServiceElseFail(type);
+    }
+    
 }
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PanelBase.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PanelBase.java
index 6d93d7e..6d04b80 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PanelBase.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PanelBase.java
@@ -19,7 +19,6 @@
 package org.apache.isis.viewer.wicket.ui.panels;
 
 import javax.annotation.Nullable;
-import javax.inject.Inject;
 
 import org.apache.wicket.markup.html.panel.GenericPanel;
 import org.apache.wicket.model.IModel;
@@ -30,6 +29,7 @@ import org.apache.isis.config.beans.WebAppConfigBean;
 import org.apache.isis.metamodel.MetaModelContext;
 import org.apache.isis.runtime.system.session.IsisSessionFactory;
 import org.apache.isis.security.authentication.MessageBroker;
+import org.apache.isis.viewer.wicket.model.common.CommonContextUtils;
 import org.apache.isis.viewer.wicket.model.hints.UiHintContainer;
 import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
 import org.apache.isis.viewer.wicket.model.models.ImageResourceCache;
@@ -38,8 +38,6 @@ import org.apache.isis.viewer.wicket.ui.app.registry.ComponentFactoryRegistryAcc
 import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistry;
 import org.apache.isis.webapp.context.IsisWebAppCommonContext;
 
-import lombok.Getter;
-
 /**
  * Provides the <em>common context</em> for all implementing sub-classes.
  * @since 2.0
@@ -48,17 +46,15 @@ public class PanelBase<T> extends GenericPanel<T> implements IsisWebAppCommonCon
 
     private static final long serialVersionUID = 1L;
 
-    @Inject @Getter protected transient WicketViewerSettings settings;
-    @Inject protected transient WebAppConfigBean webAppConfigBean;
-    @Inject @Getter protected transient PageClassRegistry pageClassRegistry;
-    @Inject @Getter protected transient ImageResourceCache imageCache;
-    
-    @Inject private transient MetaModelContext metaModelContext;
-    @Getter protected final transient IsisWebAppCommonContext commonContext;
-    
-    @Getter protected final transient IsisSessionFactory isisSessionFactory;
-    @Getter protected final transient TranslationService translationService;
-    @Getter protected final transient LocaleProvider localeProvider;
+    private transient WicketViewerSettings settings;
+    private transient WebAppConfigBean webAppConfigBean;
+    private transient PageClassRegistry pageClassRegistry;
+    private transient ImageResourceCache imageCache;
+    private transient MetaModelContext metaModelContext;
+    private transient IsisWebAppCommonContext commonContext;
+    private transient IsisSessionFactory isisSessionFactory;
+    private transient TranslationService translationService;
+    private transient LocaleProvider localeProvider;
     
     protected PanelBase(String id) {
         this(id, null);
@@ -66,14 +62,49 @@ public class PanelBase<T> extends GenericPanel<T> implements IsisWebAppCommonCon
     
     public PanelBase(String id, @Nullable IModel<T> model) {
         super(id, model);
-        this.commonContext = IsisWebAppCommonContext.of(metaModelContext);
-        this.isisSessionFactory = commonContext.lookupServiceElseFail(IsisSessionFactory.class);
-        this.translationService = commonContext.lookupServiceElseFail(TranslationService.class);
-        this.localeProvider = commonContext.lookupServiceElseFail(LocaleProvider.class);
+    }
+    
+    
+    @Override
+    public IsisWebAppCommonContext getCommonContext() {
+        commonContext = CommonContextUtils.computeIfAbsent(commonContext);
+        return commonContext;
+    }
+    
+    public WicketViewerSettings getWicketViewerSettings() {
+        return settings = computeIfAbsent(WicketViewerSettings.class, settings);
+    }
+    
+    public WebAppConfigBean getWebAppConfigBean() {
+        return webAppConfigBean = computeIfAbsent(WebAppConfigBean.class, webAppConfigBean);
+    }
+    
+    public PageClassRegistry getPageClassRegistry() {
+        return pageClassRegistry = computeIfAbsent(PageClassRegistry.class, pageClassRegistry);
+    }
+    
+    public ImageResourceCache getImageResourceCache() {
+        return imageCache = computeIfAbsent(ImageResourceCache.class, imageCache);
+    }
+    
+    public MetaModelContext getMetaModelContext() {
+        return metaModelContext = computeIfAbsent(MetaModelContext.class, metaModelContext);
+    }
+    
+    public IsisSessionFactory getIsisSessionFactory() {
+        return isisSessionFactory = computeIfAbsent(IsisSessionFactory.class, isisSessionFactory);
+    }
+    
+    public TranslationService getTranslationService() {
+        return translationService = computeIfAbsent(TranslationService.class, translationService);
+    }
+    
+    public LocaleProvider getLocaleProvider() {
+        return localeProvider = computeIfAbsent(LocaleProvider.class, localeProvider);
     }
     
     protected MessageBroker getMessageBroker() {
-        return commonContext.getAuthenticationSession().getMessageBroker();
+        return commonContext.getAuthenticationSession().getMessageBroker(); // don't cache?
     }
 
     // Hint support
@@ -88,5 +119,12 @@ public class PanelBase<T> extends GenericPanel<T> implements IsisWebAppCommonCon
         return ((ComponentFactoryRegistryAccessor) getApplication()).getComponentFactoryRegistry();
     }
 
+    // -- HELPER
+    
+    private <X> X computeIfAbsent(Class<X> type, X existingIfAny) {
+        return existingIfAny!=null
+                ? existingIfAny
+                        : getCommonContext().lookupServiceElseFail(type);
+    }
 
 }