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