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/01/06 11:40:23 UTC

[isis] branch master updated: ISIS-2183: Convert ComponentFactory to an interface for managed beans

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 eb81ba6  ISIS-2183: Convert ComponentFactory to an interface for managed beans
eb81ba6 is described below

commit eb81ba6f4f67e9f8524c9f6aaf2a4f560a30aacb
Author: Andi Huber <ah...@apache.org>
AuthorDate: Mon Jan 6 12:40:15 2020 +0100

    ISIS-2183: Convert ComponentFactory to an interface for managed beans
---
 .../isis/viewer/wicket/ui/ComponentFactory.java    |  5 ++++-
 .../ui/app/registry/ComponentFactoryRegistrar.java |  3 +++
 .../ComponentFactoryRegistrarDefault.java          | 22 +++++++++++++---------
 .../ComponentFactoryRegistryDefault.java           |  2 --
 .../demo/src/main/java/demoapp/webapp/DemoApp.java |  2 ++
 .../asciidoc/ui/IsisModuleExtAsciidocUi.java       |  5 ++++-
 .../AsciiDocPanelFactoriesForWicket.java           |  4 ++++
 ...g.apache.isis.viewer.wicket.ui.ComponentFactory |  2 --
 .../wicket/excel/IsisModuleExtExcelDownload.java   |  6 ++++++
 .../CollectionContentsAsExcelFactory.java          |  1 +
 ...g.apache.isis.viewer.wicket.ui.ComponentFactory |  1 -
 .../markdown/ui/IsisModuleExtMarkdownUi.java       |  7 ++++++-
 ...g.apache.isis.viewer.wicket.ui.ComponentFactory |  2 --
 .../isis/extensions/sse/IsisModuleExtSse.java      |  5 ++++-
 .../ListeningMarkupPanelFactoriesForWicket.java    |  4 ++++
 ...g.apache.isis.viewer.wicket.ui.ComponentFactory |  2 --
 16 files changed, 51 insertions(+), 22 deletions(-)

diff --git a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/ComponentFactory.java b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/ComponentFactory.java
index 3c8a6fa..f812d14 100644
--- a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/ComponentFactory.java
+++ b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/ComponentFactory.java
@@ -31,7 +31,6 @@ import org.apache.isis.viewer.wicket.ui.app.registry.ComponentFactoryRegistry;
  * Creates {@link Component}s of a specified {@link ComponentType}, optionally
  * {@link #appliesTo(ComponentType, IModel) dependent on} the provided
  * {@link IModel model}.
- *
  * <p>
  * This interface is at the very heart of the Wicket Objects' model, being an
  * usage of the chain-of-responsibility design pattern. The available
@@ -39,6 +38,10 @@ import org.apache.isis.viewer.wicket.ui.app.registry.ComponentFactoryRegistry;
  * {@link ComponentFactoryRegistry} (bootstrapped from the
  * <tt>IsisWicketApplication</tt>); various adapters make it easy to lookup
  * {@link Component}s from this registry.
+ * 
+ * @apiNote any implementing class (when used as a plugin) must also be 
+ * discovered/managed by Spring, that is, 
+ * it needs a direct- or meta-annotation of type {@link Component}
  */
 public interface ComponentFactory extends Serializable {
 
diff --git a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/app/registry/ComponentFactoryRegistrar.java b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/app/registry/ComponentFactoryRegistrar.java
index 4a0e17c..d469466 100644
--- a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/app/registry/ComponentFactoryRegistrar.java
+++ b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/app/registry/ComponentFactoryRegistrar.java
@@ -40,6 +40,9 @@ public interface ComponentFactoryRegistrar {
         private final List<ComponentFactory> componentFactories = _Lists.newArrayList();
 
         public void add(ComponentFactory componentFactory) {
+            if(componentFactories.contains(componentFactory)) {
+                return;
+            }
             componentFactories.add(componentFactory);
         }
 
diff --git a/core/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/components/ComponentFactoryRegistrarDefault.java b/core/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/components/ComponentFactoryRegistrarDefault.java
index 2b27838..11e95be 100644
--- a/core/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/components/ComponentFactoryRegistrarDefault.java
+++ b/core/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/components/ComponentFactoryRegistrarDefault.java
@@ -19,17 +19,18 @@
 
 package org.apache.isis.viewer.wicket.viewer.registries.components;
 
-import java.util.ServiceLoader;
+import java.util.List;
 
 import javax.inject.Named;
 
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.context.annotation.Primary;
 import org.springframework.core.annotation.Order;
 import org.springframework.stereotype.Service;
 
 import org.apache.isis.applib.annotation.OrderPrecedence;
-import org.apache.isis.commons.internal.context._Plugin;
+import org.apache.isis.commons.internal.base._NullSafe;
 import org.apache.isis.viewer.wicket.ui.ComponentFactory;
 import org.apache.isis.viewer.wicket.ui.app.registry.ComponentFactoryRegistrar;
 import org.apache.isis.viewer.wicket.ui.components.about.AboutPanelFactory;
@@ -94,8 +95,7 @@ import org.apache.isis.viewer.wicket.ui.components.widgets.entitysimplelink.Enti
 /**
  * Default implementation of {@link ComponentFactoryRegistrar} that registers a
  * hardcoded set of built-in {@link ComponentFactory}s, along with any
- * implementations loaded using {@link ServiceLoader} (ie from
- * <tt>META-INF/services</tt>).
+ * implementations discovered by the IoC container.
  */
 @Service
 @Named("isisWicketViewer.ComponentFactoryRegistrarDefault")
@@ -104,12 +104,14 @@ import org.apache.isis.viewer.wicket.ui.components.widgets.entitysimplelink.Enti
 @Qualifier("Default")
 public class ComponentFactoryRegistrarDefault implements ComponentFactoryRegistrar {
     
+    @Autowired(required = false) private List<ComponentFactory> componentFactoriesPluggedIn;
+    
     @Override
     public void addComponentFactories(final ComponentFactoryList componentFactories) {
 
         addComponentFactoriesActingAsSelectors(componentFactories);
 
-        addComponentFactoriesUsingServiceLoader(componentFactories);
+        addComponentFactoriesFromPlugins(componentFactories);
 
         addBuiltInComponentFactories(componentFactories);
     }
@@ -129,10 +131,12 @@ public class ComponentFactoryRegistrarDefault implements ComponentFactoryRegistr
         componentFactories.add(new CollectionContentsMultipleViewsPanelFactory());
     }
 
-    protected void addComponentFactoriesUsingServiceLoader(final ComponentFactoryList componentFactories) {
-
-        _Plugin.loadAll(ComponentFactory.class).forEach(componentFactories::add);
-
+    protected void addComponentFactoriesFromPlugins(final ComponentFactoryList componentFactories) {
+        
+        System.out.println("!!!! " + componentFactoriesPluggedIn);
+        
+        _NullSafe.stream(componentFactoriesPluggedIn)
+            .forEach(componentFactories::add);
     }
 
     private void addBuiltInComponentFactories(final ComponentFactoryList componentFactories) {
diff --git a/core/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/components/ComponentFactoryRegistryDefault.java b/core/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/components/ComponentFactoryRegistryDefault.java
index 4783d39..9673525 100644
--- a/core/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/components/ComponentFactoryRegistryDefault.java
+++ b/core/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/components/ComponentFactoryRegistryDefault.java
@@ -51,7 +51,6 @@ import org.apache.isis.viewer.wicket.ui.app.registry.ComponentFactoryRegistry;
 import org.apache.isis.webapp.context.IsisWebAppCommonContext;
 
 import lombok.val;
-import lombok.extern.log4j.Log4j2;
 
 /**
  * Implementation of {@link ComponentFactoryRegistry} that delegates to a
@@ -62,7 +61,6 @@ import lombok.extern.log4j.Log4j2;
 @Order(OrderPrecedence.MIDPOINT)
 @Primary
 @Qualifier("Default")
-@Log4j2
 public class ComponentFactoryRegistryDefault implements ComponentFactoryRegistry {
 
     @Inject private ComponentFactoryRegistrar componentFactoryRegistrar;
diff --git a/examples/demo/src/main/java/demoapp/webapp/DemoApp.java b/examples/demo/src/main/java/demoapp/webapp/DemoApp.java
index b7bd88e..fb0a95a 100644
--- a/examples/demo/src/main/java/demoapp/webapp/DemoApp.java
+++ b/examples/demo/src/main/java/demoapp/webapp/DemoApp.java
@@ -31,6 +31,7 @@ import org.springframework.context.annotation.PropertySource;
 import org.springframework.context.annotation.PropertySources;
 
 import org.apache.isis.config.presets.IsisPresets;
+import org.apache.isis.extensions.asciidoc.ui.IsisModuleExtAsciidocUi;
 import org.apache.isis.extensions.fixtures.IsisModuleExtFixtures;
 import org.apache.isis.extensions.secman.api.SecurityModuleConfig;
 import org.apache.isis.extensions.secman.api.permission.PermissionsEvaluationService;
@@ -92,6 +93,7 @@ public class DemoApp extends SpringBootServletInitializer {
         IsisModuleJdoDataNucleus5.class,
         IsisModuleWicketViewer.class,
         IsisModuleExtSse.class, // server sent events
+        IsisModuleExtAsciidocUi.class, // ascii-doc rendering support
         
         // REST
         IsisModuleRestfulObjectsViewer.class,
diff --git a/extensions/vw/asciidoc/src/main/java/org/apache/isis/extensions/asciidoc/ui/IsisModuleExtAsciidocUi.java b/extensions/vw/asciidoc/src/main/java/org/apache/isis/extensions/asciidoc/ui/IsisModuleExtAsciidocUi.java
index c68bee4..10f7790 100644
--- a/extensions/vw/asciidoc/src/main/java/org/apache/isis/extensions/asciidoc/ui/IsisModuleExtAsciidocUi.java
+++ b/extensions/vw/asciidoc/src/main/java/org/apache/isis/extensions/asciidoc/ui/IsisModuleExtAsciidocUi.java
@@ -22,10 +22,13 @@ import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Import;
 
 import org.apache.isis.extensions.asciidoc.applib.IsisModuleExtAsciidocApplib;
+import org.apache.isis.extensions.asciidoc.ui.components.AsciiDocPanelFactoriesForWicket;
 
 @Configuration
 @Import({
-        IsisModuleExtAsciidocApplib.class
+    IsisModuleExtAsciidocApplib.class,
+    AsciiDocPanelFactoriesForWicket.Parented.class,
+    AsciiDocPanelFactoriesForWicket.Standalone.class
 })
 public class IsisModuleExtAsciidocUi {
 }
diff --git a/extensions/vw/asciidoc/src/main/java/org/apache/isis/extensions/asciidoc/ui/components/AsciiDocPanelFactoriesForWicket.java b/extensions/vw/asciidoc/src/main/java/org/apache/isis/extensions/asciidoc/ui/components/AsciiDocPanelFactoriesForWicket.java
index 5f1214a..8d4c078 100644
--- a/extensions/vw/asciidoc/src/main/java/org/apache/isis/extensions/asciidoc/ui/components/AsciiDocPanelFactoriesForWicket.java
+++ b/extensions/vw/asciidoc/src/main/java/org/apache/isis/extensions/asciidoc/ui/components/AsciiDocPanelFactoriesForWicket.java
@@ -19,6 +19,8 @@
 
 package org.apache.isis.extensions.asciidoc.ui.components;
 
+import org.springframework.stereotype.Component;
+
 import org.apache.isis.extensions.asciidoc.applib.value.AsciiDoc;
 import org.apache.isis.viewer.wicket.ui.components.scalars.markup.MarkupComponentFactory;
 import org.apache.isis.viewer.wicket.ui.components.scalars.markup.MarkupPanelFactories;
@@ -35,6 +37,7 @@ public class AsciiDocPanelFactoriesForWicket {
 
     // -- PARENTED
 
+    @Component
     public static class Parented extends MarkupPanelFactories.ParentedAbstract {
         private static final long serialVersionUID = 1L;
 
@@ -56,6 +59,7 @@ public class AsciiDocPanelFactoriesForWicket {
 
     // -- STANDALONE
 
+    @Component
     public static class Standalone extends MarkupPanelFactories.StandaloneAbstract {
         private static final long serialVersionUID = 1L;
 
diff --git a/extensions/vw/asciidoc/src/main/resources/META-INF/services/org.apache.isis.viewer.wicket.ui.ComponentFactory b/extensions/vw/asciidoc/src/main/resources/META-INF/services/org.apache.isis.viewer.wicket.ui.ComponentFactory
deleted file mode 100644
index fe60388..0000000
--- a/extensions/vw/asciidoc/src/main/resources/META-INF/services/org.apache.isis.viewer.wicket.ui.ComponentFactory
+++ /dev/null
@@ -1,2 +0,0 @@
-org.apache.isis.extensions.asciidoc.ui.components.AsciiDocPanelFactoriesForWicket$Parented
-org.apache.isis.extensions.asciidoc.ui.components.AsciiDocPanelFactoriesForWicket$Standalone
\ No newline at end of file
diff --git a/extensions/vw/exceldownload/src/main/java/org/apache/isis/extensions/viewer/wicket/excel/IsisModuleExtExcelDownload.java b/extensions/vw/exceldownload/src/main/java/org/apache/isis/extensions/viewer/wicket/excel/IsisModuleExtExcelDownload.java
index da671ec..dbc38e2 100644
--- a/extensions/vw/exceldownload/src/main/java/org/apache/isis/extensions/viewer/wicket/excel/IsisModuleExtExcelDownload.java
+++ b/extensions/vw/exceldownload/src/main/java/org/apache/isis/extensions/viewer/wicket/excel/IsisModuleExtExcelDownload.java
@@ -19,7 +19,13 @@
 package org.apache.isis.extensions.viewer.wicket.excel;
 
 import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
+
+import org.apache.isis.extensions.viewer.wicket.excel.components.CollectionContentsAsExcelFactory;
 
 @Configuration
+@Import({
+    CollectionContentsAsExcelFactory.class
+})
 public class IsisModuleExtExcelDownload {
 }
diff --git a/extensions/vw/exceldownload/src/main/java/org/apache/isis/extensions/viewer/wicket/excel/components/CollectionContentsAsExcelFactory.java b/extensions/vw/exceldownload/src/main/java/org/apache/isis/extensions/viewer/wicket/excel/components/CollectionContentsAsExcelFactory.java
index 3900dd2..71a581a 100644
--- a/extensions/vw/exceldownload/src/main/java/org/apache/isis/extensions/viewer/wicket/excel/components/CollectionContentsAsExcelFactory.java
+++ b/extensions/vw/exceldownload/src/main/java/org/apache/isis/extensions/viewer/wicket/excel/components/CollectionContentsAsExcelFactory.java
@@ -31,6 +31,7 @@ import org.apache.isis.viewer.wicket.ui.ComponentType;
 /**
  * {@link ComponentFactory} for {@link CollectionContentsAsExcel}.
  */
+@org.springframework.stereotype.Component
 public class CollectionContentsAsExcelFactory 
 extends ComponentFactoryAbstract 
 implements CollectionContentsAsFactory {
diff --git a/extensions/vw/exceldownload/src/main/resources/META-INF/services/org.apache.isis.viewer.wicket.ui.ComponentFactory b/extensions/vw/exceldownload/src/main/resources/META-INF/services/org.apache.isis.viewer.wicket.ui.ComponentFactory
deleted file mode 100644
index ac0d6ce..0000000
--- a/extensions/vw/exceldownload/src/main/resources/META-INF/services/org.apache.isis.viewer.wicket.ui.ComponentFactory
+++ /dev/null
@@ -1 +0,0 @@
-org.apache.isis.extensions.viewer.wicket.excel.components.CollectionContentsAsExcelFactory
\ No newline at end of file
diff --git a/extensions/vw/markdown/src/main/java/org/apache/isis/extensions/markdown/ui/IsisModuleExtMarkdownUi.java b/extensions/vw/markdown/src/main/java/org/apache/isis/extensions/markdown/ui/IsisModuleExtMarkdownUi.java
index e4ba3ce..4b6cbe8 100644
--- a/extensions/vw/markdown/src/main/java/org/apache/isis/extensions/markdown/ui/IsisModuleExtMarkdownUi.java
+++ b/extensions/vw/markdown/src/main/java/org/apache/isis/extensions/markdown/ui/IsisModuleExtMarkdownUi.java
@@ -4,8 +4,13 @@ import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Import;
 
 import org.apache.isis.extensions.markdown.applib.IsisModuleExtMarkdownApplib;
+import org.apache.isis.extensions.markdown.ui.components.MarkdownPanelFactoriesForWicket;
 
 @Configuration
-@Import({IsisModuleExtMarkdownApplib.class})
+@Import({
+    IsisModuleExtMarkdownApplib.class,
+    MarkdownPanelFactoriesForWicket.Parented.class,
+    MarkdownPanelFactoriesForWicket.Standalone.class,
+})
 public class IsisModuleExtMarkdownUi {
 }
diff --git a/extensions/vw/markdown/src/main/resources/META-INF/services/org.apache.isis.viewer.wicket.ui.ComponentFactory b/extensions/vw/markdown/src/main/resources/META-INF/services/org.apache.isis.viewer.wicket.ui.ComponentFactory
deleted file mode 100644
index 8738ce1..0000000
--- a/extensions/vw/markdown/src/main/resources/META-INF/services/org.apache.isis.viewer.wicket.ui.ComponentFactory
+++ /dev/null
@@ -1,2 +0,0 @@
-org.apache.isis.extensions.markdown.ui.components.MarkdownPanelFactoriesForWicket$Parented
-org.apache.isis.extensions.markdown.ui.components.MarkdownPanelFactoriesForWicket$Standalone
\ No newline at end of file
diff --git a/extensions/vw/sse/src/main/java/org/apache/isis/extensions/sse/IsisModuleExtSse.java b/extensions/vw/sse/src/main/java/org/apache/isis/extensions/sse/IsisModuleExtSse.java
index fafaf4f..b62e7b4 100644
--- a/extensions/vw/sse/src/main/java/org/apache/isis/extensions/sse/IsisModuleExtSse.java
+++ b/extensions/vw/sse/src/main/java/org/apache/isis/extensions/sse/IsisModuleExtSse.java
@@ -21,6 +21,7 @@ package org.apache.isis.extensions.sse;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Import;
 
+import org.apache.isis.extensions.sse.markup.ListeningMarkupPanelFactoriesForWicket;
 import org.apache.isis.extensions.sse.services.SseServiceDefault;
 import org.apache.isis.extensions.sse.webmodule.WebModuleServerSentEvents;
 
@@ -28,7 +29,9 @@ import org.apache.isis.extensions.sse.webmodule.WebModuleServerSentEvents;
 @Import({
         // @Component's
         SseMetaModelPlugin.class,
-
+        ListeningMarkupPanelFactoriesForWicket.Parented.class,
+        ListeningMarkupPanelFactoriesForWicket.Standalone.class,
+        
         // @Service's
         SseServiceDefault.class,
         WebModuleServerSentEvents.class
diff --git a/extensions/vw/sse/src/main/java/org/apache/isis/extensions/sse/markup/ListeningMarkupPanelFactoriesForWicket.java b/extensions/vw/sse/src/main/java/org/apache/isis/extensions/sse/markup/ListeningMarkupPanelFactoriesForWicket.java
index 96f20be..d7b7079 100644
--- a/extensions/vw/sse/src/main/java/org/apache/isis/extensions/sse/markup/ListeningMarkupPanelFactoriesForWicket.java
+++ b/extensions/vw/sse/src/main/java/org/apache/isis/extensions/sse/markup/ListeningMarkupPanelFactoriesForWicket.java
@@ -19,6 +19,8 @@
 
 package org.apache.isis.extensions.sse.markup;
 
+import org.springframework.stereotype.Component;
+
 import org.apache.isis.applib.value.LocalResourcePath;
 import org.apache.isis.extensions.sse.facets.SseObserveFacet;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
@@ -37,6 +39,7 @@ public class ListeningMarkupPanelFactoriesForWicket {
 
     // -- PARENTED
 
+    @Component
     public static class Parented extends MarkupPanelFactories.ParentedAbstract {
         private static final long serialVersionUID = 1L;
 
@@ -70,6 +73,7 @@ public class ListeningMarkupPanelFactoriesForWicket {
 
     // -- STANDALONE
 
+    @Component
     public static class Standalone extends MarkupPanelFactories.StandaloneAbstract {
         private static final long serialVersionUID = 1L;
 
diff --git a/extensions/vw/sse/src/main/resources/META-INF/services/org.apache.isis.viewer.wicket.ui.ComponentFactory b/extensions/vw/sse/src/main/resources/META-INF/services/org.apache.isis.viewer.wicket.ui.ComponentFactory
deleted file mode 100644
index 47a186b..0000000
--- a/extensions/vw/sse/src/main/resources/META-INF/services/org.apache.isis.viewer.wicket.ui.ComponentFactory
+++ /dev/null
@@ -1,2 +0,0 @@
-org.apache.isis.extensions.sse.markup.ListeningMarkupPanelFactoriesForWicket$Parented
-org.apache.isis.extensions.sse.markup.ListeningMarkupPanelFactoriesForWicket$Standalone
\ No newline at end of file