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

juanpablo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/jspwiki.git

commit 11ee43686b9a3abcccdf803b352cbb03c324ce13
Author: juanpablo <[email protected]>
AuthorDate: Mon Mar 2 19:59:04 2020 +0100

    decouple DefaultAdminBeanManager from specific module manager 
implementations
---
 jspwiki-main/src/main/java/org/apache/wiki/WikiEngine.java  | 13 +++++++++++++
 .../src/main/java/org/apache/wiki/api/core/Engine.java      | 12 +++++++++++-
 .../org/apache/wiki/ui/admin/DefaultAdminBeanManager.java   | 12 ++++--------
 .../src/test/java/org/apache/wiki/WikiEngineTest.java       | 11 +++++++++++
 4 files changed, 39 insertions(+), 9 deletions(-)

diff --git a/jspwiki-main/src/main/java/org/apache/wiki/WikiEngine.java 
b/jspwiki-main/src/main/java/org/apache/wiki/WikiEngine.java
index 6e5316f..f6856b0 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/WikiEngine.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/WikiEngine.java
@@ -72,11 +72,13 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Date;
 import java.util.Enumeration;
+import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 import java.util.Properties;
 import java.util.TimeZone;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.stream.Collectors;
 
 
 /**
@@ -532,12 +534,23 @@ public class WikiEngine implements Engine {
 
     /** {@inheritDoc} */
     @Override
+    @SuppressWarnings( "unchecked" )
     public < T > T getManager( final Class< T > manager ) {
         return ( T )managers.get( manager );
     }
 
     /** {@inheritDoc} */
     @Override
+    @SuppressWarnings( "unchecked" )
+    public < T > List< T > getManagers( final Class< T > manager ) {
+        return ( List< T > )managers.entrySet().stream()
+                                    .filter( e -> manager.isAssignableFrom( 
e.getKey() ) )
+                                    .map( e -> e.getValue() )
+                                    .collect( Collectors.toList() );
+    }
+
+    /** {@inheritDoc} */
+    @Override
     public boolean isConfigured() {
         return m_isConfigured;
     }
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/api/core/Engine.java 
b/jspwiki-main/src/main/java/org/apache/wiki/api/core/Engine.java
index 345f9e1..dbce244 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/api/core/Engine.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/api/core/Engine.java
@@ -34,6 +34,7 @@ import java.net.URL;
 import java.nio.charset.Charset;
 import java.util.Collection;
 import java.util.Date;
+import java.util.List;
 import java.util.Properties;
 
 
@@ -112,7 +113,7 @@ public interface Engine {
     }
 
     /**
-     * Retrieves the requested object instantiated by the Engine.
+     * Retrieves the object instantiated by the Engine matching the requested 
type.
      *
      * @param manager requested object instantiated by the Engine.
      * @param <T> type of the requested object.
@@ -121,6 +122,15 @@ public interface Engine {
     < T > T getManager( Class< T > manager );
 
     /**
+     * Retrieves the objects instantiated by the Engine that can be assigned 
to the requested type.
+     *
+     * @param manager requested objectx instantiated by the Engine.
+     * @param <T> type of the requested object.
+     * @return collection of requested objects instantiated by the Engine, 
{@code empty} list if none available.
+     */
+    < T > List< T > getManagers( Class< T > manager );
+
+    /**
      * check if the Engine has been configured.
      *
      * @return {@code true} if it has, {@code false} otherwise.
diff --git 
a/jspwiki-main/src/main/java/org/apache/wiki/ui/admin/DefaultAdminBeanManager.java
 
b/jspwiki-main/src/main/java/org/apache/wiki/ui/admin/DefaultAdminBeanManager.java
index f336fdb..1627b2c 100644
--- 
a/jspwiki-main/src/main/java/org/apache/wiki/ui/admin/DefaultAdminBeanManager.java
+++ 
b/jspwiki-main/src/main/java/org/apache/wiki/ui/admin/DefaultAdminBeanManager.java
@@ -24,11 +24,8 @@ import org.apache.wiki.api.core.Engine;
 import org.apache.wiki.event.WikiEngineEvent;
 import org.apache.wiki.event.WikiEvent;
 import org.apache.wiki.event.WikiEventListener;
-import org.apache.wiki.filters.FilterManager;
+import org.apache.wiki.modules.ModuleManager;
 import org.apache.wiki.modules.WikiModuleInfo;
-import org.apache.wiki.plugin.PluginManager;
-import org.apache.wiki.ui.EditorManager;
-import org.apache.wiki.ui.TemplateManager;
 import org.apache.wiki.ui.admin.beans.CoreBean;
 import org.apache.wiki.ui.admin.beans.FilterBean;
 import org.apache.wiki.ui.admin.beans.PluginBean;
@@ -170,10 +167,9 @@ public class DefaultAdminBeanManager implements 
WikiEventListener, AdminBeanMana
         } catch( final NotCompliantMBeanException e ) {
             log.error( e.getMessage(), e );
         }
-        registerBeans( m_engine.getManager( EditorManager.class ).modules() );
-        registerBeans( m_engine.getManager( PluginManager.class ).modules() );
-        registerBeans( m_engine.getManager( FilterManager.class ).modules() );
-        registerBeans( m_engine.getManager( TemplateManager.class ).modules() 
);
+        for( final ModuleManager moduleManager : m_engine.getManagers( 
ModuleManager.class ) ) {
+            registerBeans( moduleManager.modules() );
+        }
     }
 
     /* (non-Javadoc)
diff --git a/jspwiki-main/src/test/java/org/apache/wiki/WikiEngineTest.java 
b/jspwiki-main/src/test/java/org/apache/wiki/WikiEngineTest.java
index 7c78fed..e6f2042 100644
--- a/jspwiki-main/src/test/java/org/apache/wiki/WikiEngineTest.java
+++ b/jspwiki-main/src/test/java/org/apache/wiki/WikiEngineTest.java
@@ -22,6 +22,7 @@ package org.apache.wiki;
 import net.sf.ehcache.CacheManager;
 import org.apache.wiki.attachment.Attachment;
 import org.apache.wiki.attachment.AttachmentManager;
+import org.apache.wiki.modules.ModuleManager;
 import org.apache.wiki.pages.PageManager;
 import org.apache.wiki.providers.FileSystemProvider;
 import org.apache.wiki.references.ReferenceManager;
@@ -322,4 +323,14 @@ public class WikiEngineTest {
         Assertions.assertNull( p3.getAttribute( WikiPage.CHANGENOTE ) );
     }
 
+    @Test
+    public void testGetManagers() {
+        Assertions.assertNotNull( m_engine.getManager( PageManager.class ) );
+        Assertions.assertNull( m_engine.getManager( ModuleManager.class ) );
+
+        Assertions.assertEquals( 0, m_engine.getManagers( String.class 
).size() );
+        Assertions.assertEquals( 1, m_engine.getManagers( PageManager.class 
).size() );
+        Assertions.assertEquals( 4, m_engine.getManagers( ModuleManager.class 
).size() );
+    }
+
 }

Reply via email to