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/31 12:57:09 UTC

[isis] 02/02: ISIS-2158: tree-theme-provider no longer to be looked up statically

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

commit 533d524300dca55dace3415ff23aacde9f47e9e7
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Oct 31 13:56:56 2019 +0100

    ISIS-2158: tree-theme-provider no longer to be looked up statically
---
 .../isis/webapp/context/IsisWebAppCommonContext.java  |  9 ++++++++-
 .../ui/components/tree/StandaloneTreePanel.java       |  4 +---
 .../viewer/wicket/ui/components/tree/TreePanel.java   |  6 +++---
 .../ui/components/tree/themes/TreeThemeProvider.java  | 19 +------------------
 .../isis/viewer/wicket/ui/panels/PanelAbstract.java   |  2 +-
 .../isis/viewer/wicket/ui/panels/PanelBase.java       | 17 ++++++++++++++++-
 6 files changed, 30 insertions(+), 27 deletions(-)

diff --git a/core/runtime-web/src/main/java/org/apache/isis/webapp/context/IsisWebAppCommonContext.java b/core/runtime-web/src/main/java/org/apache/isis/webapp/context/IsisWebAppCommonContext.java
index b82601e..77ff67f 100644
--- a/core/runtime-web/src/main/java/org/apache/isis/webapp/context/IsisWebAppCommonContext.java
+++ b/core/runtime-web/src/main/java/org/apache/isis/webapp/context/IsisWebAppCommonContext.java
@@ -19,6 +19,7 @@
 package org.apache.isis.webapp.context;
 
 import java.util.function.Function;
+import java.util.function.Supplier;
 
 import org.springframework.transaction.PlatformTransactionManager;
 import org.springframework.transaction.support.TransactionTemplate;
@@ -28,7 +29,6 @@ import org.apache.isis.applib.services.menu.MenuBarsService;
 import org.apache.isis.applib.services.registry.ServiceRegistry;
 import org.apache.isis.config.IsisConfiguration;
 import org.apache.isis.metamodel.MetaModelContext;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.adapter.oid.RootOid;
 import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.specloader.SpecificationLoader;
@@ -78,6 +78,11 @@ public class IsisWebAppCommonContext implements MetaModelContext.Delegating {
         return getMetaModelContext().getServiceRegistry().lookupServiceElseFail(serviceClass);
     }
     
+    public <T> T lookupServiceElseFallback(Class<T> serviceClass, Supplier<T> fallback) {
+        return getMetaModelContext().getServiceRegistry().lookupService(serviceClass)
+                .orElseGet(fallback);
+    }
+    
     public <T> T injectServicesInto(T pojo) {
         return getMetaModelContext().getServiceInjector().injectServicesInto(pojo);
     }
@@ -135,6 +140,8 @@ public class IsisWebAppCommonContext implements MetaModelContext.Delegating {
         
     }
 
+
+
     
 
     
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/StandaloneTreePanel.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/StandaloneTreePanel.java
index f4da7f5..e545b44 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/StandaloneTreePanel.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/StandaloneTreePanel.java
@@ -23,7 +23,6 @@ import org.apache.wicket.Component;
 import org.apache.wicket.behavior.Behavior;
 
 import org.apache.isis.viewer.wicket.model.models.ValueModel;
-import org.apache.isis.viewer.wicket.ui.components.tree.themes.TreeThemeProvider;
 import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
 
 public class StandaloneTreePanel extends PanelAbstract<ValueModel> {
@@ -35,10 +34,9 @@ public class StandaloneTreePanel extends PanelAbstract<ValueModel> {
         super(id, valueModel);
 
         final Component tree = IsisToWicketTreeAdapter.adapt(ID_TREE, valueModel);
-        final Behavior treeTheme = TreeThemeProvider.get().treeThemeFor(valueModel); 
+        final Behavior treeTheme = super.getTreeThemeProvider().treeThemeFor(valueModel); 
 
         add(tree.add(treeTheme));
     }
 
-
 }
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/TreePanel.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/TreePanel.java
index 480d352..449edbd 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/TreePanel.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/TreePanel.java
@@ -27,7 +27,6 @@ import org.apache.wicket.model.Model;
 
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldParseableAbstract;
-import org.apache.isis.viewer.wicket.ui.components.tree.themes.TreeThemeProvider;
 import org.apache.isis.viewer.wicket.ui.components.widgets.bootstrap.FormGroup;
 
 /**
@@ -55,7 +54,7 @@ public class TreePanel extends ScalarPanelTextFieldParseableAbstract {
         }
 
         final Component treeComponent = createTreeComponent("scalarValueContainer");
-        final Behavior treeTheme = TreeThemeProvider.get().treeThemeFor(super.getModel());
+        final Behavior treeTheme = getTreeThemeProvider().treeThemeFor(super.getModel());
 
 
         getTextField().setLabel(Model.of(getModel().getName()));
@@ -78,7 +77,7 @@ public class TreePanel extends ScalarPanelTextFieldParseableAbstract {
         // adds the tree-theme behavior to the tree component 
         //TODO [2088] not tested yet: if tree renders without applying the theme, behavior needs 
         // to go to a container up the hierarchy 
-        final Behavior treeTheme = TreeThemeProvider.get().treeThemeFor(super.getModel());
+        final Behavior treeTheme = getTreeThemeProvider().treeThemeFor(super.getModel());
         return tree.add(treeTheme);
     }
 
@@ -87,5 +86,6 @@ public class TreePanel extends ScalarPanelTextFieldParseableAbstract {
     private Component createTreeComponent(String id) {
         return IsisToWicketTreeAdapter.adapt(id, getModel());
     }
+    
 
 }
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/themes/TreeThemeProvider.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/themes/TreeThemeProvider.java
index 1d271c6..df67db3 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/themes/TreeThemeProvider.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/themes/TreeThemeProvider.java
@@ -21,30 +21,13 @@ package org.apache.isis.viewer.wicket.ui.components.tree.themes;
 
 import org.apache.wicket.behavior.Behavior;
 
-import org.apache.isis.commons.internal.context._Context;
-
 public interface TreeThemeProvider {
 
-    // -- INTERFACE
-
     /**
      * @param model - TODO yet just a draft, refine the type 
      * @return tree-theme to use for given model 
      */
     public Behavior treeThemeFor(Object model);
-
-    // -- LOOKUP
-
-    /**
-     * Gets the singleton TreeThemeProvider from current context.
-     * <p> 
-     * Note: As of now, we always return a TreeThemeProviderDefault instance. 
-     * Could be made plug-able in the future. 
-     */
-    public static TreeThemeProvider get() {
-        return _Context.computeIfAbsent(
-                TreeThemeProvider.class, 
-                TreeThemeProviderDefault::new);
-    }
+   
 
 }
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PanelAbstract.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PanelAbstract.java
index a30676e..34111d7 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PanelAbstract.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PanelAbstract.java
@@ -31,7 +31,7 @@ import org.apache.isis.viewer.wicket.ui.util.Components;
  * Convenience adapter for {@link Panel}s built up using {@link ComponentType}s.
  * @param <M>
  */
-public abstract class PanelAbstract<T extends IModel<?>> extends PanelBase {
+public abstract class PanelAbstract<T extends IModel<?>> extends PanelBase/*<IModel<X>>*/ {
 
     private static final long serialVersionUID = 1L;
 
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 f8837e5..428235f 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
@@ -18,6 +18,8 @@
  */
 package org.apache.isis.viewer.wicket.ui.panels;
 
+import java.util.function.Supplier;
+
 import javax.annotation.Nullable;
 
 import org.apache.wicket.markup.html.panel.GenericPanel;
@@ -35,6 +37,8 @@ import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
 import org.apache.isis.viewer.wicket.model.models.ImageResourceCache;
 import org.apache.isis.viewer.wicket.ui.app.registry.ComponentFactoryRegistry;
 import org.apache.isis.viewer.wicket.ui.app.registry.ComponentFactoryRegistryAccessor;
+import org.apache.isis.viewer.wicket.ui.components.tree.themes.TreeThemeProvider;
+import org.apache.isis.viewer.wicket.ui.components.tree.themes.TreeThemeProviderDefault;
 import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistry;
 import org.apache.isis.webapp.context.IsisWebAppCommonContext;
 
@@ -55,6 +59,7 @@ public class PanelBase<T> extends GenericPanel<T> implements IsisWebAppCommonCon
     private transient IsisSessionFactory isisSessionFactory;
     private transient TranslationService translationService;
     private transient LocaleProvider localeProvider;
+    private transient TreeThemeProvider treeThemeProvider;
     
     protected PanelBase(String id) {
         this(id, null);
@@ -102,6 +107,10 @@ public class PanelBase<T> extends GenericPanel<T> implements IsisWebAppCommonCon
         return localeProvider = computeIfAbsent(LocaleProvider.class, localeProvider);
     }
     
+    protected TreeThemeProvider getTreeThemeProvider() {
+        return treeThemeProvider = computeIfAbsentOrFallback(TreeThemeProvider.class, treeThemeProvider, TreeThemeProviderDefault::new);
+    }
+    
     protected MessageBroker getMessageBroker() {
         return commonContext.getAuthenticationSession().getMessageBroker(); // don't cache?
     }
@@ -117,7 +126,7 @@ public class PanelBase<T> extends GenericPanel<T> implements IsisWebAppCommonCon
     protected ComponentFactoryRegistry getComponentFactoryRegistry() {
         return ((ComponentFactoryRegistryAccessor) getApplication()).getComponentFactoryRegistry();
     }
-
+    
     // -- HELPER
     
     private <X> X computeIfAbsent(Class<X> type, X existingIfAny) {
@@ -125,5 +134,11 @@ public class PanelBase<T> extends GenericPanel<T> implements IsisWebAppCommonCon
                 ? existingIfAny
                         : getCommonContext().lookupServiceElseFail(type);
     }
+    
+    private <X> X computeIfAbsentOrFallback(Class<X> type, X existingIfAny, Supplier<X> fallback) {
+        return existingIfAny!=null
+                ? existingIfAny
+                        : getCommonContext().lookupServiceElseFallback(type, fallback);
+    }
 
 }