You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jspwiki.apache.org by ju...@apache.org on 2020/03/21 17:04:33 UTC

[jspwiki] 31/36: reorganized WikiEngine initialization, to ease generalization of managers' creation and configuration later on

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 a493a169b0e58ca3f06f2f98e3f0cd42bd888055
Author: juanpablo <ju...@apache.org>
AuthorDate: Sat Mar 21 16:59:17 2020 +0100

    reorganized WikiEngine initialization, to ease generalization of managers' creation and configuration later on
---
 .../src/main/java/org/apache/wiki/WikiEngine.java  | 103 +++++++++++----------
 .../wiki/auth/acl/DefaultAclManagerTest.java       |   6 +-
 2 files changed, 55 insertions(+), 54 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 1af886b..5c5e7e2 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/WikiEngine.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/WikiEngine.java
@@ -402,75 +402,91 @@ public class WikiEngine implements Engine {
         //
         // FIXME: This part of the code is getting unwieldy.  We must think of a better way to do the startup-sequence.
         try {
-            //  Initializes the CommandResolver
+            final String aclClassName = m_properties.getProperty( PROP_ACL_MANAGER_IMPL, ClassUtil.getMappedClass( AclManager.class.getName() ).getName() );
+            final String urlConstructorClassnName = TextUtil.getStringProperty( props, PROP_URLCONSTRUCTOR, "DefaultURLConstructor" );
+            final Class< ? > urlclass = ClassUtil.findClass( "org.apache.wiki.url", urlConstructorClassnName );
+
             m_commandResolver = ClassUtil.getMappedObject( CommandResolver.class.getName(), this, props );
-            final Class< ? > urlclass = ClassUtil.findClass( "org.apache.wiki.url",
-                                                             TextUtil.getStringProperty( props, PROP_URLCONSTRUCTOR, "DefaultURLConstructor" ) );
+            managers.put( CommandResolver.class, m_commandResolver );
+
             m_urlConstructor = ( URLConstructor ) urlclass.getDeclaredConstructor().newInstance();
             m_urlConstructor.initialize( this, props );
+            managers.put( URLConstructor.class, m_urlConstructor );
 
             m_pageManager           = ClassUtil.getMappedObject( PageManager.class.getName(), this, props );
+            managers.put( PageManager.class, m_pageManager );
+
             m_pluginManager         = ClassUtil.getMappedObject( PluginManager.class.getName(), this, props );
+            managers.put( PluginManager.class, m_pluginManager );
+
             m_differenceManager     = ClassUtil.getMappedObject( DifferenceManager.class.getName(), this, props );
+            managers.put( DifferenceManager.class, m_differenceManager );
+
             m_attachmentManager     = ClassUtil.getMappedObject( AttachmentManager.class.getName(), this, props );
+            managers.put( AttachmentManager.class, m_attachmentManager );
+
             m_variableManager       = ClassUtil.getMappedObject( VariableManager.class.getName(), props );
-            m_renderingManager      = ClassUtil.getMappedObject( RenderingManager.class.getName() );
+            managers.put( VariableManager.class, m_variableManager );
+
             m_searchManager         = ClassUtil.getMappedObject( SearchManager.class.getName(), this, props );
+            managers.put( SearchManager.class, m_searchManager );
+
             m_authenticationManager = ClassUtil.getMappedObject( AuthenticationManager.class.getName() );
+            m_authenticationManager.initialize( this, props );
+            managers.put( AuthenticationManager.class, m_authenticationManager );
+
             m_authorizationManager  = ClassUtil.getMappedObject( AuthorizationManager.class.getName() );
+            m_authorizationManager.initialize( this, props );
+            managers.put( AuthorizationManager.class, m_authorizationManager );
+
             m_userManager           = ClassUtil.getMappedObject( UserManager.class.getName() );
+            m_userManager.initialize( this, props );
+            managers.put( UserManager.class, m_userManager );
+
             m_groupManager          = ClassUtil.getMappedObject( GroupManager.class.getName() );
+            m_groupManager.initialize( this, props );
+            managers.put( GroupManager.class, m_groupManager );
+
             m_editorManager         = ClassUtil.getMappedObject( EditorManager.class.getName(), this );
-            m_progressManager       = ClassUtil.getMappedObject( ProgressManager.class.getName(), this );
             m_editorManager.initialize( props );
+            managers.put( EditorManager.class, m_editorManager );
 
-            // Initialize the authentication, authorization, user and acl managers
-            m_authenticationManager.initialize( this, props );
-            m_authorizationManager.initialize( this, props );
-
-            managers.put( CommandResolver.class, m_commandResolver );
-            managers.put( URLConstructor.class, m_urlConstructor );
-            managers.put( PageManager.class, m_pageManager );
-            managers.put( PluginManager.class, m_pluginManager );
-            managers.put( DifferenceManager.class, m_differenceManager );
-            managers.put( AttachmentManager.class, m_attachmentManager );
-            managers.put( VariableManager.class, m_variableManager );
-            managers.put( RenderingManager.class, m_renderingManager );
-            managers.put( SearchManager.class, m_searchManager );
-            managers.put( AuthenticationManager.class, m_authenticationManager );
-            managers.put( AuthorizationManager.class, m_authorizationManager );
-            managers.put( UserManager.class, m_userManager );
+            m_progressManager       = ClassUtil.getMappedObject( ProgressManager.class.getName(), this );
+            managers.put( ProgressManager.class, m_progressManager );
 
-            m_userManager.initialize( this, props );
-            m_groupManager.initialize( this, props );
-            m_aclManager = getAclManager();
+            m_aclManager = ClassUtil.getMappedObject( aclClassName ); // TODO: I am not sure whether this is the right call
+            m_aclManager.initialize( this, m_properties );
+            managers.put( AclManager.class, m_aclManager );
 
             // Start the Workflow manager
             m_workflowMgr = ClassUtil.getMappedObject(WorkflowManager.class.getName());
             m_workflowMgr.initialize(this, props);
+            managers.put( WorkflowManager.class, m_workflowMgr );
+
             m_tasksManager = ClassUtil.getMappedObject(TasksManager.class.getName());
+            managers.put( TasksManager.class, m_tasksManager );
 
             m_internationalizationManager = ClassUtil.getMappedObject(InternationalizationManager.class.getName(),this);
+            managers.put( InternationalizationManager.class, m_internationalizationManager );
+
             m_templateManager = ClassUtil.getMappedObject(TemplateManager.class.getName(), this, props );
+            managers.put( TemplateManager.class, m_templateManager );
 
             // Since we want to use a page filters initilize() method as a engine startup listener where we can initialize global event
             // listeners, it must be called lastly, so that all object references in the engine are availabe to the initialize() method
             m_filterManager = ClassUtil.getMappedObject(FilterManager.class.getName(), this, props );
-
-            managers.put( GroupManager.class, m_groupManager );
-            managers.put( EditorManager.class, m_editorManager );
-            managers.put( ProgressManager.class, m_progressManager );
-            managers.put( AclManager.class, m_aclManager );
-            managers.put( WorkflowManager.class, m_workflowMgr );
-            managers.put( TasksManager.class, m_tasksManager );
-            managers.put( InternationalizationManager.class, m_internationalizationManager );
-            managers.put( TemplateManager.class, m_templateManager );
             managers.put( FilterManager.class, m_filterManager );
 
             m_adminBeanManager = ClassUtil.getMappedObject(AdminBeanManager.class.getName(),this);
+            managers.put( AdminBeanManager.class, m_adminBeanManager );
+
+            m_pageRenamer = ClassUtil.getMappedObject( PageRenamer.class.getName(), this, props );
+            managers.put( PageRenamer.class, m_pageRenamer );
 
             // RenderingManager depends on FilterManager events.
+            m_renderingManager = ClassUtil.getMappedObject( RenderingManager.class.getName() );
             m_renderingManager.initialize( this, props );
+            managers.put( RenderingManager.class, m_renderingManager );
 
             //  ReferenceManager has the side effect of loading all pages.  Therefore after this point, all page attributes are available.
             //  initReferenceManager is indirectly using m_filterManager, therefore it has to be called after it was initialized.
@@ -479,12 +495,6 @@ public class WikiEngine implements Engine {
             //  Hook the different manager routines into the system.
             m_filterManager.addPageFilter( m_referenceManager, -1001 );
             m_filterManager.addPageFilter( m_searchManager, -1002 );
-
-            m_pageRenamer = ClassUtil.getMappedObject( PageRenamer.class.getName(), this, props );
-
-            managers.put( ReferenceManager.class, m_referenceManager );
-            managers.put( AdminBeanManager.class, m_adminBeanManager );
-            managers.put( PageRenamer.class, m_pageRenamer );
         } catch( final RuntimeException e ) {
             // RuntimeExceptions may occur here, even if they shouldn't.
             log.fatal( "Failed to start managers.", e );
@@ -508,6 +518,7 @@ public class WikiEngine implements Engine {
         try {
             if( TextUtil.getBooleanProperty( props, RSSGenerator.PROP_GENERATE_RSS,false ) ) {
                 m_rssGenerator = ClassUtil.getMappedObject( RSSGenerator.class.getName(), this, props );
+                managers.put( RSSGenerator.class, m_rssGenerator );
             }
         } catch( final Exception e ) {
             log.error( "Unable to start RSS generator - JSPWiki will still work, but there will be no RSS feed.", e );
@@ -515,7 +526,6 @@ public class WikiEngine implements Engine {
 
         // Start the RSS generator & generator thread
         if( m_rssGenerator != null ) {
-            managers.put( RSSGenerator.class, m_rssGenerator );
             m_rssFile = TextUtil.getStringProperty( props, RSSGenerator.PROP_RSSFILE, "rss.rdf" );
             final File rssFile;
             if( m_rssFile.startsWith( File.separator ) ) { // honor absolute pathnames:
@@ -601,6 +611,7 @@ public class WikiEngine implements Engine {
             if( m_referenceManager == null ) {
                 m_referenceManager = ClassUtil.getMappedObject(ReferenceManager.class.getName(), this );
                 m_referenceManager.initialize( pages );
+                managers.put( ReferenceManager.class, m_referenceManager );
             }
 
         } catch( final ProviderException e ) {
@@ -987,17 +998,7 @@ public class WikiEngine implements Engine {
      * @return The current AclManager.
      */
     public AclManager getAclManager()  {
-        if( m_aclManager == null ) {
-            try {
-                final String s = m_properties.getProperty( PROP_ACL_MANAGER_IMPL, ClassUtil.getMappedClass( AclManager.class.getName() ).getName() );
-                m_aclManager = ClassUtil.getMappedObject(s); // TODO: I am not sure whether this is the right call
-                m_aclManager.initialize( this, m_properties );
-            } catch( final ReflectiveOperationException | IllegalArgumentException e ) {
-                log.fatal( "unable to instantiate class for AclManager: " + e.getMessage() );
-                throw new InternalWikiException( "Cannot instantiate AclManager, please check logs.", e );
-            }
-        }
-        return m_aclManager;
+        return getManager( AclManager.class );
     }
 
     /**
diff --git a/jspwiki-main/src/test/java/org/apache/wiki/auth/acl/DefaultAclManagerTest.java b/jspwiki-main/src/test/java/org/apache/wiki/auth/acl/DefaultAclManagerTest.java
index 06b4d23..d1fccb7 100644
--- a/jspwiki-main/src/test/java/org/apache/wiki/auth/acl/DefaultAclManagerTest.java
+++ b/jspwiki-main/src/test/java/org/apache/wiki/auth/acl/DefaultAclManagerTest.java
@@ -56,12 +56,12 @@ public class DefaultAclManagerTest
     public void testGetPermissions()
     {
         WikiPage page = ( WikiPage )m_engine.getManager( PageManager.class ).getPage( "TestDefaultPage" );
-        Acl acl = m_engine.getAclManager().getPermissions( page );
+        Acl acl = m_engine.getManager( AclManager.class ).getPermissions( page );
         Assertions.assertNotNull( page.getAcl() );
         Assertions.assertTrue(page.getAcl().isEmpty());
 
         page = ( WikiPage )m_engine.getManager( PageManager.class ).getPage( "TestAclPage" );
-        acl = m_engine.getAclManager().getPermissions( page );
+        acl = m_engine.getManager( AclManager.class ).getPermissions( page );
         Assertions.assertNotNull( page.getAcl() );
         Assertions.assertFalse(page.getAcl().isEmpty());
 
@@ -162,7 +162,7 @@ public class DefaultAclManagerTest
     {
         // Verify that the printed Acl for the test page is OK
         final WikiPage page = ( WikiPage )m_engine.getManager( PageManager.class ).getPage( "TestAclPage" );
-        Acl acl = m_engine.getAclManager().getPermissions( page );
+        Acl acl = m_engine.getManager( AclManager.class ).getPermissions( page );
         final String aclString = DefaultAclManager.printAcl( acl );
         Assertions.assertEquals( "[{ALLOW edit Charlie,Herman}]\n", aclString );