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);
+ }
}