f.mkdirs();
//
// A bunch of sanity checks
//
if( !f.exists() ) throw new WikiException("Work directory does not exist: "+m_workDir);
if( !f.canRead() ) throw new WikiException("No permission to read work directory: "+m_workDir);
if( !f.canWrite() ) throw new WikiException("No permission to write to work directory: "+m_workDir);
if( !f.isDirectory() ) throw new WikiException("jspwiki.workDir does not point to a directory: "+m_workDir);
}
catch( SecurityException e )
{
log.fatal( "Unable to find or create the working directory: "+m_workDir, e );
throw new IllegalArgumentException( "Unable to find or create the working dir: " + m_workDir, e );
}
log.info("JSPWiki working directory is '"+m_workDir+"'");
m_saveUserInfo = TextUtil.getBooleanProperty( props,
PROP_STOREUSERNAME,
m_saveUserInfo );
m_useUTF8 = "UTF-8".equals( TextUtil.getStringProperty( props, PROP_ENCODING, "ISO-8859-1" ) );
m_baseURL = TextUtil.getStringProperty(props, PROP_BASEURL, "");
if (!m_baseURL.endsWith("/"))
{
m_baseURL = m_baseURL + "/";
}
m_beautifyTitle = TextUtil.getBooleanProperty( props,
PROP_BEAUTIFYTITLE,
m_beautifyTitle );
m_templateDir = TextUtil.getStringProperty( props, PROP_TEMPLATEDIR, "default" );
m_frontPage = TextUtil.getStringProperty( props, PROP_FRONTPAGE, "Main" );
// Initialize the page name comparator now as it may be used while
// initializing other modules
initPageSorter( props );
//
// Initialize the important modules. Any exception thrown by the
// managers means that we will not start up.
//
// FIXME: This part of the code is getting unwieldy. We must think
// of a better way to do the startup-sequence.
try
{
Class< ? > urlclass = ClassUtil.findClass( "org.apache.wiki.url",
TextUtil.getStringProperty( props, PROP_URLCONSTRUCTOR, "DefaultURLConstructor" ) );
m_urlConstructor = (URLConstructor) urlclass.newInstance();
m_urlConstructor.initialize( this, props );
m_pageManager = (PageManager)ClassUtil.getMappedObject(PageManager.class.getName(), this, props );
m_pluginManager = (PluginManager)ClassUtil.getMappedObject(PluginManager.class.getName(), this, props );
m_differenceManager = (DifferenceManager)ClassUtil.getMappedObject(DifferenceManager.class.getName(), this, props );
m_attachmentManager = (AttachmentManager)ClassUtil.getMappedObject(AttachmentManager.class.getName(), this, props );
m_variableManager = (VariableManager)ClassUtil.getMappedObject(VariableManager.class.getName(), props );
// m_filterManager = (FilterManager)ClassUtil.getMappedObject(FilterManager.class.getName(), this, props );
m_renderingManager = (RenderingManager) ClassUtil.getMappedObject(RenderingManager.class.getName());
m_searchManager = (SearchManager)ClassUtil.getMappedObject(SearchManager.class.getName(), this, props );
m_authenticationManager = (AuthenticationManager) ClassUtil.getMappedObject(AuthenticationManager.class.getName());
m_authorizationManager = (AuthorizationManager) ClassUtil.getMappedObject( AuthorizationManager.class.getName());
m_userManager = (UserManager) ClassUtil.getMappedObject(UserManager.class.getName());
m_groupManager = (GroupManager) ClassUtil.getMappedObject(GroupManager.class.getName());
m_editorManager = (EditorManager)ClassUtil.getMappedObject(EditorManager.class.getName(), this );
m_editorManager.initialize( props );
m_progressManager = new ProgressManager();
// Initialize the authentication, authorization, user and acl managers
m_authenticationManager.initialize( this, props );
m_authorizationManager.initialize( this, props );
m_userManager.initialize( this, props );
m_groupManager.initialize( this, props );
m_aclManager = getAclManager();
// Start the Workflow manager
m_workflowMgr = (WorkflowManager)ClassUtil.getMappedObject(WorkflowManager.class.getName());
m_workflowMgr.initialize(this, props);
m_internationalizationManager = (InternationalizationManager)
ClassUtil.getMappedObject(InternationalizationManager.class.getName(),this);
m_templateManager = (TemplateManager)
ClassUtil.getMappedObject(TemplateManager.class.getName(), this, props );
m_adminBeanManager = (AdminBeanManager)
ClassUtil.getMappedObject(AdminBeanManager.class.getName(),this);
// 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 = (FilterManager)
ClassUtil.getMappedObject(FilterManager.class.getName(), this, props );
// RenderingManager depends on FilterManager events.
m_renderingManager.initialize( this, props );
//
// 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.
//
initReferenceManager();
//
// Hook the different manager routines into the system.
//
m_filterManager.addPageFilter(m_referenceManager, -1001 );
m_filterManager.addPageFilter(m_searchManager, -1002 );
}
catch( RuntimeException e )
{
// RuntimeExceptions may occur here, even if they shouldn't.
log.fatal( "Failed to start managers.", e );
throw new WikiException( "Failed to start managers: "+e.getMessage(), e );
}
catch (ClassNotFoundException e)
{
log.fatal( "JSPWiki could not start, URLConstructor was not found: ",e );
throw new WikiException(e.getMessage(), e );
}
catch (InstantiationException e)
{
log.fatal( "JSPWiki could not start, URLConstructor could not be instantiated: ",e );
throw new WikiException(e.getMessage(), e );
}
catch (IllegalAccessException e)
{
log.fatal( "JSPWiki could not start, URLConstructor cannot be accessed: ",e );
throw new WikiException(e.getMessage(), e );
}
catch( Exception e )
{
// Final catch-all for everything
log.fatal( "JSPWiki could not start, due to an unknown exception when starting.",e );
throw new WikiException("Failed to start; please check log files for better information.", e );
}
//
// Initialize the good-to-have-but-not-fatal modules.
//