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