WikiProvider accessed from ClassUtil
git-svn-id: https://svn.apache.org/repos/asf/jspwiki/branches/JSPWIKI_2_10_PICO_BRANCH@1688324 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/jspwiki-war/src/main/java/org/apache/wiki/PageManager.java b/jspwiki-war/src/main/java/org/apache/wiki/PageManager.java
index 271d566..a176fd9 100644
--- a/jspwiki-war/src/main/java/org/apache/wiki/PageManager.java
+++ b/jspwiki-war/src/main/java/org/apache/wiki/PageManager.java
@@ -18,7 +18,6 @@
*/
package org.apache.wiki;
-import java.io.IOException;
import java.security.Permission;
import java.security.Principal;
import java.util.ArrayList;
@@ -32,7 +31,6 @@
import org.apache.commons.lang.ArrayUtils;
import org.apache.wiki.api.engine.FilterManager;
-import org.apache.wiki.api.exceptions.NoRequiredPropertyException;
import org.apache.wiki.api.exceptions.ProviderException;
import org.apache.wiki.api.exceptions.WikiException;
import org.apache.wiki.auth.WikiPrincipal;
@@ -178,37 +176,40 @@
//
// If user wants to use a cache, then we'll use the CachingProvider.
//
- String classname;
+ String providerClassName;
if (useCache) {
- classname = "org.apache.wiki.providers.CachingProvider";
+ providerClassName = "org.apache.wiki.providers.CachingProvider";
} else {
- classname = TextUtil.getRequiredProperty(props, PROP_PAGEPROVIDER);
+ providerClassName = TextUtil.getRequiredProperty(props, PROP_PAGEPROVIDER);
}
+ m_provider = ClassUtil.getWikiProvider(WikiPageProvider.class, engine, props, "org.apache.wiki.providers", providerClassName, null, true);
+
+ /*
try {
- log.debug("Page provider class: '" + classname + "'");
- Class<?> providerclass = ClassUtil.findClass("org.apache.wiki.providers", classname);
+ log.debug("Page provider class: '" + providerClassName + "'");
+ Class<?> providerclass = ClassUtil.findClass("org.apache.wiki.providers", providerClassName);
m_provider = (WikiPageProvider) providerclass.newInstance();
log.debug("Initializing page provider class " + m_provider);
m_provider.initialize(m_engine, props);
} catch (ClassNotFoundException e) {
- log.error("Unable to locate provider class '" + classname + "' (" + e.getMessage() + ")", e);
+ log.error("Unable to locate provider class '" + providerClassName + "' (" + e.getMessage() + ")", e);
throw new WikiException("No provider class. (" + e.getMessage() + ")", e);
} catch (InstantiationException e) {
- log.error("Unable to create provider class '" + classname + "' (" + e.getMessage() + ")", e);
+ log.error("Unable to create provider class '" + providerClassName + "' (" + e.getMessage() + ")", e);
throw new WikiException("Faulty provider class. (" + e.getMessage() + ")", e);
} catch (IllegalAccessException e) {
- log.error("Illegal access to provider class '" + classname + "' (" + e.getMessage() + ")", e);
+ log.error("Illegal access to provider class '" + providerClassName + "' (" + e.getMessage() + ")", e);
throw new WikiException("Illegal provider class. (" + e.getMessage() + ")", e);
} catch (NoRequiredPropertyException e) {
log.error("Provider did not found a property it was looking for: " + e.getMessage(), e);
throw e; // Same exception works.
} catch (IOException e) {
- log.error("An I/O exception occurred while trying to create a new page provider: " + classname, e);
+ log.error("An I/O exception occurred while trying to create a new page provider: " + providerClassName, e);
throw new WikiException("Unable to start page provider: " + e.getMessage(), e);
}
-
+ */
}
/**
diff --git a/jspwiki-war/src/main/java/org/apache/wiki/WikiEngine.java b/jspwiki-war/src/main/java/org/apache/wiki/WikiEngine.java
index 66df265..c8fde3a 100644
--- a/jspwiki-war/src/main/java/org/apache/wiki/WikiEngine.java
+++ b/jspwiki-war/src/main/java/org/apache/wiki/WikiEngine.java
@@ -81,6 +81,7 @@
import org.apache.wiki.ui.EditorManager;
import org.apache.wiki.ui.TemplateManager;
import org.apache.wiki.ui.progress.ProgressManager;
+import org.apache.wiki.url.DefaultURLConstructor;
import org.apache.wiki.url.URLConstructor;
import org.apache.wiki.util.ClassUtil;
import org.apache.wiki.util.PropertyReader;
@@ -539,27 +540,24 @@
try
{
Class< ? > urlclass = ClassUtil.findClass( "org.apache.wiki.url",
- TextUtil.getStringProperty( props, PROP_URLCONSTRUCTOR, "DefaultURLConstructor" ) );
+ TextUtil.getStringProperty( props, PROP_URLCONSTRUCTOR, DefaultURLConstructor.class.getName() ) );
m_urlConstructor = (URLConstructor) urlclass.newInstance();
m_urlConstructor.initialize( this, props );
- m_pageSorter = ClassUtil.getInternalModule(PageSorter.class, this, props );
- m_pageManager = ClassUtil.getInternalModule(PageManager.class, this, props );
- m_pluginManager = ClassUtil.getInternalModule(PluginManager.class, this, props );
- m_differenceManager = ClassUtil.getInternalModule(DifferenceManager.class, this, props );
- m_attachmentManager = ClassUtil.getInternalModule(AttachmentManager.class, this, props );
- m_variableManager = ClassUtil.getInternalModule(VariableManager.class, this, props );
- m_filterManager = ClassUtil.getInternalModule(FilterManager.class, this, props );
- m_renderingManager = ClassUtil.getInternalModule(RenderingManager.class, this, props );
-
- m_searchManager = ClassUtil.getInternalModule(SearchManager.class, this, props );
-
+ m_pageSorter = ClassUtil.getInternalModule(PageSorter.class, this, props );
+ m_pageManager = ClassUtil.getInternalModule(PageManager.class, this, props );
+ m_pluginManager = ClassUtil.getInternalModule(PluginManager.class, this, props );
+ m_differenceManager = ClassUtil.getInternalModule(DifferenceManager.class, this, props );
+ m_attachmentManager = ClassUtil.getInternalModule(AttachmentManager.class, this, props );
+ m_variableManager = ClassUtil.getInternalModule(VariableManager.class, this, props );
+ m_filterManager = ClassUtil.getInternalModule(FilterManager.class, this, props );
+ m_renderingManager = ClassUtil.getInternalModule(RenderingManager.class, this, props );
+ m_searchManager = ClassUtil.getInternalModule(SearchManager.class, this, props );
m_authenticationManager = ClassUtil.getInternalModule(AuthenticationManager.class, this, props );
m_authorizationManager = ClassUtil.getInternalModule(AuthorizationManager.class, this, props );
m_userManager = ClassUtil.getInternalModule(UserManager.class, this, props );
m_groupManager = ClassUtil.getInternalModule(GroupManager.class, this, props );
-
- m_editorManager = ClassUtil.getInternalModule(EditorManager.class, this , props );
+ m_editorManager = ClassUtil.getInternalModule(EditorManager.class, this , props );
m_progressManager = new ProgressManager();
@@ -568,13 +566,13 @@
m_aclManager = getAclManager();
// Start the Workflow manager
- m_workflowMgr = ClassUtil.getInternalModule(WorkflowManager.class, this, props);
+ m_workflowMgr = ClassUtil.getInternalModule(WorkflowManager.class, this, props);
m_internationalizationManager = ClassUtil.getInternalModule(InternationalizationManager.class, this, props);
- m_templateManager = ClassUtil.getInternalModule(TemplateManager.class, this, props );
+ m_templateManager = ClassUtil.getInternalModule(TemplateManager.class, this, props );
- m_adminBeanManager = ClassUtil.getInternalModule(AdminBeanManager.class,this, props);
+ m_adminBeanManager = ClassUtil.getInternalModule(AdminBeanManager.class,this, props);
// Since we want to use a page filters initilize() method
// as a engine startup listener where we can initialize global event listeners,
@@ -625,13 +623,13 @@
log.fatal( "JSPWiki could not start, URLConstructor cannot be accessed: " + e.getMessage(), 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. Caused by: " + e.getMessage() +
-// "; please check log files for better information.", 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. Caused by: " + e.getMessage() +
+ "; please check log files for better information.", e );
+ }
//
// Initialize the good-to-have-but-not-fatal modules.
@@ -2317,14 +2315,19 @@
{
try
{
- String s = m_properties.getProperty( PROP_ACL_MANAGER_IMPL,
- DefaultAclManager.class.getName() );
- m_aclManager = (AclManager)ClassUtil.getMappedObject(s); // TODO: I am not sure whether this is the right call
- m_aclManager.initialize( this, m_properties );
+ String providerClassName = TextUtil.getStringProperty( m_properties, PROP_ACL_MANAGER_IMPL, DefaultAclManager.class.getName() );
+ Class<AclManager> aclclass = (Class<AclManager>) ClassUtil.findClass("org.apache.wiki.auth.acl", providerClassName);
+ m_aclManager = ClassUtil.getInternalModule(aclclass, this, m_properties);
+// m_aclManager = (AclManager)ClassUtil.getMappedObject(classname, this, m_properties); // TODO: I am not sure whether this is the right call
}
- catch ( WikiException we )
+ catch ( ClassNotFoundException e )
{
- log.fatal( "unable to instantiate class for AclManager: " + we.getMessage() );
+ log.fatal( "unable to find class for AclManager: " + e.getMessage() );
+ throw new InternalWikiException("Cannot find AclManager, please check logs.");
+ }
+ catch ( WikiException e )
+ {
+ log.fatal( "unable to instantiate class for AclManager: " + e.getMessage() );
throw new InternalWikiException("Cannot instantiate AclManager, please check logs.");
}
}
diff --git a/jspwiki-war/src/main/java/org/apache/wiki/WikiProvider.java b/jspwiki-war/src/main/java/org/apache/wiki/WikiProvider.java
index 5b5a9e9..13171c0 100644
--- a/jspwiki-war/src/main/java/org/apache/wiki/WikiProvider.java
+++ b/jspwiki-war/src/main/java/org/apache/wiki/WikiProvider.java
@@ -22,6 +22,7 @@
import java.io.IOException;
import org.apache.wiki.api.exceptions.NoRequiredPropertyException;
+import org.apache.wiki.api.exceptions.WikiException;
/**
* A generic Wiki provider for all sorts of things that the Wiki can
@@ -46,7 +47,7 @@
*/
void initialize( WikiEngine engine, Properties properties )
throws NoRequiredPropertyException,
- IOException;
+ WikiException;
/**
* Return a valid HTML string for information. May
diff --git a/jspwiki-war/src/main/java/org/apache/wiki/attachment/AttachmentManager.java b/jspwiki-war/src/main/java/org/apache/wiki/attachment/AttachmentManager.java
index d75175d..0ddbf63 100644
--- a/jspwiki-war/src/main/java/org/apache/wiki/attachment/AttachmentManager.java
+++ b/jspwiki-war/src/main/java/org/apache/wiki/attachment/AttachmentManager.java
@@ -42,7 +42,6 @@
import org.apache.wiki.WikiInternalModule;
import org.apache.wiki.WikiPage;
import org.apache.wiki.WikiProvider;
-import org.apache.wiki.api.exceptions.NoRequiredPropertyException;
import org.apache.wiki.api.exceptions.ProviderException;
import org.apache.wiki.api.exceptions.WikiException;
import org.apache.wiki.parser.MarkupParser;
@@ -91,8 +90,6 @@
private PageSorter m_pageSorter;
private CacheManager m_cacheManager = CacheManager.getInstance();
- private boolean initialized = false;
-
private Cache m_dynamicAttachments;
/** Name of the page cache. */
public static final String CACHE_NAME = "jspwiki.dynamicAttachmentCache";
@@ -133,20 +130,17 @@
// If user wants to use a cache, then we'll use the CachingProvider.
//
boolean useCache = "true".equals(props.getProperty( PageManager.PROP_USECACHE ));
- String classname;
- if( useCache )
- {
- classname = CachingAttachmentProvider.class.getName();
- }
- else
- {
- classname = props.getProperty( PROP_PROVIDER );
+ String providerClassName;
+ if( useCache ) {
+ providerClassName = CachingAttachmentProvider.class.getName();
+ } else {
+ providerClassName = props.getProperty( PROP_PROVIDER );
}
//
// If no class defined, then will just simply fail.
//
- if( classname == null )
+ if( providerClassName == null )
{
log.info( "No attachment provider defined - disabling attachment support." );
return;
@@ -156,22 +150,23 @@
// Create and initialize the provider.
//
String cacheName = engine.getApplicationName() + "." + CACHE_NAME;
+ if (m_cacheManager.cacheExists(cacheName)) {
+ m_dynamicAttachments = m_cacheManager.getCache(cacheName);
+ } else {
+ log.info("cache with name " + cacheName + " not found in ehcache.xml, creating it with defaults.");
+ m_dynamicAttachments = new Cache(cacheName, DEFAULT_CACHECAPACITY, false, false, 0, 0);
+ m_cacheManager.addCache(m_dynamicAttachments);
+ }
+
+ m_provider = ClassUtil.getWikiProvider(WikiAttachmentProvider.class, engine, props, "org.apache.wiki.providers", providerClassName, null, true);
+ /*
try {
- if (m_cacheManager.cacheExists(cacheName)) {
- m_dynamicAttachments = m_cacheManager.getCache(cacheName);
- } else {
- log.info("cache with name " + cacheName + " not found in ehcache.xml, creating it with defaults.");
- m_dynamicAttachments = new Cache(cacheName, DEFAULT_CACHECAPACITY, false, false, 0, 0);
- m_cacheManager.addCache(m_dynamicAttachments);
- }
-
- Class<?> providerclass = ClassUtil.findClass("org.apache.wiki.providers", classname);
-
+ Class<?> providerclass = ClassUtil.findClass("org.apache.wiki.providers", providerClassName);
+
m_provider = (WikiAttachmentProvider) providerclass.newInstance();
m_provider.initialize(engine, props);
- initialized = true;
} catch( ClassNotFoundException e )
{
log.error( "Attachment provider class not found",e);
@@ -194,13 +189,9 @@
log.error( "Attachment provider reports IO error", e );
m_provider = null;
}
+ */
}
- @Override
- public boolean isInitialized() {
- return initialized;
- }
-
/**
* Returns true, if attachments are enabled and running.
*
diff --git a/jspwiki-war/src/main/java/org/apache/wiki/auth/UserManager.java b/jspwiki-war/src/main/java/org/apache/wiki/auth/UserManager.java
index b5ec415..98d7f0e 100644
--- a/jspwiki-war/src/main/java/org/apache/wiki/auth/UserManager.java
+++ b/jspwiki-war/src/main/java/org/apache/wiki/auth/UserManager.java
@@ -724,6 +724,11 @@
{
}
+ @Override
+ public String getProviderInfo() {
+ return getClass().getName();
+ }
+
}
// workflow task inner classes....................................................
diff --git a/jspwiki-war/src/main/java/org/apache/wiki/auth/authorize/GroupDatabase.java b/jspwiki-war/src/main/java/org/apache/wiki/auth/authorize/GroupDatabase.java
index af105ff..3765a82 100644
--- a/jspwiki-war/src/main/java/org/apache/wiki/auth/authorize/GroupDatabase.java
+++ b/jspwiki-war/src/main/java/org/apache/wiki/auth/authorize/GroupDatabase.java
@@ -22,6 +22,7 @@
import java.util.Properties;
import org.apache.wiki.WikiEngine;
+import org.apache.wiki.WikiProvider;
import org.apache.wiki.api.exceptions.NoRequiredPropertyException;
import org.apache.wiki.auth.WikiSecurityException;
@@ -29,7 +30,7 @@
* Defines an interface for loading, persisting and storing wiki groups.
* @since 2.4.22
*/
-public interface GroupDatabase
+public interface GroupDatabase extends WikiProvider
{
/**
* No-op method that in previous versions of JSPWiki was intended to
diff --git a/jspwiki-war/src/main/java/org/apache/wiki/auth/authorize/JDBCGroupDatabase.java b/jspwiki-war/src/main/java/org/apache/wiki/auth/authorize/JDBCGroupDatabase.java
index b6d573e..5a6a318 100644
--- a/jspwiki-war/src/main/java/org/apache/wiki/auth/authorize/JDBCGroupDatabase.java
+++ b/jspwiki-war/src/main/java/org/apache/wiki/auth/authorize/JDBCGroupDatabase.java
@@ -694,4 +694,9 @@
}
}
+ @Override
+ public String getProviderInfo() {
+ return getClass().getName();
+ }
+
}
diff --git a/jspwiki-war/src/main/java/org/apache/wiki/auth/authorize/XMLGroupDatabase.java b/jspwiki-war/src/main/java/org/apache/wiki/auth/authorize/XMLGroupDatabase.java
index ac07015..5a5a361 100644
--- a/jspwiki-war/src/main/java/org/apache/wiki/auth/authorize/XMLGroupDatabase.java
+++ b/jspwiki-war/src/main/java/org/apache/wiki/auth/authorize/XMLGroupDatabase.java
@@ -39,16 +39,16 @@
import org.apache.commons.lang.StringEscapeUtils;
import org.apache.log4j.Logger;
-import org.apache.wiki.util.TextUtil;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.NodeList;
-import org.xml.sax.SAXException;
import org.apache.wiki.WikiEngine;
import org.apache.wiki.api.exceptions.NoRequiredPropertyException;
import org.apache.wiki.auth.NoSuchPrincipalException;
import org.apache.wiki.auth.WikiPrincipal;
import org.apache.wiki.auth.WikiSecurityException;
+import org.apache.wiki.util.TextUtil;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+import org.xml.sax.SAXException;
/**
* <p>
@@ -470,4 +470,9 @@
}
}
+ @Override
+ public String getProviderInfo() {
+ return getClass().getName();
+ }
+
}
diff --git a/jspwiki-war/src/main/java/org/apache/wiki/auth/user/AbstractUserDatabase.java b/jspwiki-war/src/main/java/org/apache/wiki/auth/user/AbstractUserDatabase.java
index aada83b..5900824 100644
--- a/jspwiki-war/src/main/java/org/apache/wiki/auth/user/AbstractUserDatabase.java
+++ b/jspwiki-war/src/main/java/org/apache/wiki/auth/user/AbstractUserDatabase.java
@@ -28,6 +28,7 @@
import org.apache.log4j.Logger;
import org.apache.wiki.WikiEngine;
+import org.apache.wiki.WikiInternalModule;
import org.apache.wiki.api.exceptions.NoRequiredPropertyException;
import org.apache.wiki.auth.NoSuchPrincipalException;
import org.apache.wiki.auth.WikiPrincipal;
@@ -40,7 +41,7 @@
* profiles, building Principal collections and hashing passwords.
* @since 2.3
*/
-public abstract class AbstractUserDatabase implements UserDatabase
+public abstract class AbstractUserDatabase extends WikiInternalModule implements UserDatabase
{
protected static final Logger log = Logger.getLogger( AbstractUserDatabase.class );
diff --git a/jspwiki-war/src/main/java/org/apache/wiki/auth/user/JDBCUserDatabase.java b/jspwiki-war/src/main/java/org/apache/wiki/auth/user/JDBCUserDatabase.java
index ba690a6..19dc34d 100644
--- a/jspwiki-war/src/main/java/org/apache/wiki/auth/user/JDBCUserDatabase.java
+++ b/jspwiki-war/src/main/java/org/apache/wiki/auth/user/JDBCUserDatabase.java
@@ -565,6 +565,7 @@
{
}
}
+ initialized = true;
log.info( "JDBCUserDatabase initialized from JNDI DataSource: " + jndiName );
// Determine if the datasource supports commits
@@ -933,4 +934,9 @@
}
+ @Override
+ public String getProviderInfo() {
+ return getClass().getName();
+ }
+
}
diff --git a/jspwiki-war/src/main/java/org/apache/wiki/auth/user/UserDatabase.java b/jspwiki-war/src/main/java/org/apache/wiki/auth/user/UserDatabase.java
index 590e6bb..9272908 100644
--- a/jspwiki-war/src/main/java/org/apache/wiki/auth/user/UserDatabase.java
+++ b/jspwiki-war/src/main/java/org/apache/wiki/auth/user/UserDatabase.java
@@ -22,6 +22,7 @@
import java.util.Properties;
import org.apache.wiki.WikiEngine;
+import org.apache.wiki.WikiProvider;
import org.apache.wiki.api.exceptions.NoRequiredPropertyException;
import org.apache.wiki.auth.NoSuchPrincipalException;
import org.apache.wiki.auth.WikiSecurityException;
@@ -30,7 +31,7 @@
* Defines an interface for loading, persisting and storing users.
* @since 2.3
*/
-public interface UserDatabase
+public interface UserDatabase extends WikiProvider
{
/**
diff --git a/jspwiki-war/src/main/java/org/apache/wiki/auth/user/XMLUserDatabase.java b/jspwiki-war/src/main/java/org/apache/wiki/auth/user/XMLUserDatabase.java
index 77bf668..75ecd11 100644
--- a/jspwiki-war/src/main/java/org/apache/wiki/auth/user/XMLUserDatabase.java
+++ b/jspwiki-war/src/main/java/org/apache/wiki/auth/user/XMLUserDatabase.java
@@ -817,4 +817,9 @@
element.setAttribute( attribute, value );
}
}
+
+ @Override
+ public String getProviderInfo() {
+ return getClass().getName();
+ }
}
\ No newline at end of file
diff --git a/jspwiki-war/src/main/java/org/apache/wiki/diff/ContextualDiffProvider.java b/jspwiki-war/src/main/java/org/apache/wiki/diff/ContextualDiffProvider.java
index c568b0f..248aa43 100644
--- a/jspwiki-war/src/main/java/org/apache/wiki/diff/ContextualDiffProvider.java
+++ b/jspwiki-war/src/main/java/org/apache/wiki/diff/ContextualDiffProvider.java
@@ -19,7 +19,6 @@
package org.apache.wiki.diff;
-import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
@@ -29,6 +28,7 @@
import org.apache.wiki.WikiContext;
import org.apache.wiki.WikiEngine;
import org.apache.wiki.api.exceptions.NoRequiredPropertyException;
+import org.apache.wiki.api.exceptions.WikiException;
import org.apache.wiki.util.TextUtil;
import org.suigeneris.jrcs.diff.Diff;
import org.suigeneris.jrcs.diff.DifferentiationFailedException;
@@ -114,7 +114,7 @@
*
* {@inheritDoc}
*/
- public void initialize(WikiEngine engine, Properties properties) throws NoRequiredPropertyException, IOException
+ public void initialize(WikiEngine engine, Properties properties) throws NoRequiredPropertyException, WikiException
{
String configuredLimit = properties.getProperty(PROP_UNCHANGED_CONTEXT_LIMIT,
Integer.toString(LIMIT_MAX_VALUE));
diff --git a/jspwiki-war/src/main/java/org/apache/wiki/diff/DiffProvider.java b/jspwiki-war/src/main/java/org/apache/wiki/diff/DiffProvider.java
index 774eaa6..878fed4 100644
--- a/jspwiki-war/src/main/java/org/apache/wiki/diff/DiffProvider.java
+++ b/jspwiki-war/src/main/java/org/apache/wiki/diff/DiffProvider.java
@@ -18,13 +18,13 @@
*/
package org.apache.wiki.diff;
-import java.io.IOException;
import java.util.Properties;
import org.apache.wiki.WikiContext;
import org.apache.wiki.WikiEngine;
import org.apache.wiki.WikiProvider;
import org.apache.wiki.api.exceptions.NoRequiredPropertyException;
+import org.apache.wiki.api.exceptions.WikiException;
/**
* Provides an SPI for creating a diff between two page versions.
@@ -59,7 +59,7 @@
* {@inheritDoc}
*/
public void initialize(WikiEngine engine, Properties properties)
- throws NoRequiredPropertyException, IOException
+ throws NoRequiredPropertyException, WikiException
{
}
diff --git a/jspwiki-war/src/main/java/org/apache/wiki/diff/DifferenceManager.java b/jspwiki-war/src/main/java/org/apache/wiki/diff/DifferenceManager.java
index f1b6322..19c4962 100644
--- a/jspwiki-war/src/main/java/org/apache/wiki/diff/DifferenceManager.java
+++ b/jspwiki-war/src/main/java/org/apache/wiki/diff/DifferenceManager.java
@@ -19,16 +19,15 @@
package org.apache.wiki.diff;
-import java.io.IOException;
import java.util.Properties;
import org.apache.log4j.Logger;
import org.apache.wiki.WikiContext;
import org.apache.wiki.WikiEngine;
import org.apache.wiki.WikiInternalModule;
-import org.apache.wiki.api.exceptions.NoRequiredPropertyException;
import org.apache.wiki.api.exceptions.WikiException;
import org.apache.wiki.util.ClassUtil;
+import org.apache.wiki.util.TextUtil;
/**
@@ -54,13 +53,18 @@
super.initialize(engine, props);
- loadProvider(props);
-
- initializeProvider(engine, props);
+
+ String providerClassName = TextUtil.getStringProperty( props, PROP_DIFF_PROVIDER, TraditionalDiffProvider.class.getName());
+ m_provider = ClassUtil.getWikiProvider(DiffProvider.class, engine, props, "org.apache.wiki.diff", providerClassName, new DiffProvider.NullDiffProvider(), false);
+
+// loadProvider(props);
+//
+// initializeProvider(engine, props);
log.info("Using difference provider: " + m_provider.getProviderInfo());
}
+ /*
private void loadProvider(Properties props) {
String providerClassName = props.getProperty(PROP_DIFF_PROVIDER,
TraditionalDiffProvider.class.getName());
@@ -93,6 +97,7 @@
m_provider = new DiffProvider.NullDiffProvider(); //doesn't need init'd
}
}
+ */
/**
* Returns valid XHTML string to be used in any way you please.
diff --git a/jspwiki-war/src/main/java/org/apache/wiki/diff/ExternalDiffProvider.java b/jspwiki-war/src/main/java/org/apache/wiki/diff/ExternalDiffProvider.java
index 04b976a..72c836c 100644
--- a/jspwiki-war/src/main/java/org/apache/wiki/diff/ExternalDiffProvider.java
+++ b/jspwiki-war/src/main/java/org/apache/wiki/diff/ExternalDiffProvider.java
@@ -29,6 +29,7 @@
import org.apache.wiki.WikiContext;
import org.apache.wiki.WikiEngine;
import org.apache.wiki.api.exceptions.NoRequiredPropertyException;
+import org.apache.wiki.api.exceptions.WikiException;
import org.apache.wiki.util.FileUtil;
import org.apache.wiki.util.TextUtil;
@@ -84,7 +85,7 @@
* @see org.apache.wiki.WikiProvider#initialize(org.apache.wiki.WikiEngine, java.util.Properties)
*/
public void initialize( WikiEngine engine, Properties properties )
- throws NoRequiredPropertyException, IOException
+ throws NoRequiredPropertyException, WikiException
{
m_diffCommand = properties.getProperty( PROP_DIFFCOMMAND );
diff --git a/jspwiki-war/src/main/java/org/apache/wiki/diff/TraditionalDiffProvider.java b/jspwiki-war/src/main/java/org/apache/wiki/diff/TraditionalDiffProvider.java
index 14df7d9..e272b7f 100644
--- a/jspwiki-war/src/main/java/org/apache/wiki/diff/TraditionalDiffProvider.java
+++ b/jspwiki-war/src/main/java/org/apache/wiki/diff/TraditionalDiffProvider.java
@@ -19,7 +19,6 @@
package org.apache.wiki.diff;
-import java.io.IOException;
import java.text.ChoiceFormat;
import java.text.Format;
import java.text.MessageFormat;
@@ -31,6 +30,7 @@
import org.apache.wiki.WikiContext;
import org.apache.wiki.WikiEngine;
import org.apache.wiki.api.exceptions.NoRequiredPropertyException;
+import org.apache.wiki.api.exceptions.WikiException;
import org.apache.wiki.i18n.InternationalizationManager;
import org.apache.wiki.preferences.Preferences;
import org.apache.wiki.util.TextUtil;
@@ -81,7 +81,7 @@
* @see org.apache.wiki.WikiProvider#initialize(org.apache.wiki.WikiEngine, java.util.Properties)
*/
public void initialize(WikiEngine engine, Properties properties)
- throws NoRequiredPropertyException, IOException
+ throws NoRequiredPropertyException, WikiException
{
}
diff --git a/jspwiki-war/src/main/java/org/apache/wiki/providers/AbstractFileProvider.java b/jspwiki-war/src/main/java/org/apache/wiki/providers/AbstractFileProvider.java
index 3a25294..aa8c848 100644
--- a/jspwiki-war/src/main/java/org/apache/wiki/providers/AbstractFileProvider.java
+++ b/jspwiki-war/src/main/java/org/apache/wiki/providers/AbstractFileProvider.java
@@ -46,6 +46,7 @@
import org.apache.wiki.WikiProvider;
import org.apache.wiki.api.exceptions.NoRequiredPropertyException;
import org.apache.wiki.api.exceptions.ProviderException;
+import org.apache.wiki.api.exceptions.WikiException;
import org.apache.wiki.search.QueryItem;
import org.apache.wiki.search.SearchMatcher;
import org.apache.wiki.search.SearchResult;
@@ -122,8 +123,7 @@
* @throws IOException In case the specified page directory is a file, not a directory.
*/
public void initialize( WikiEngine engine, Properties properties )
- throws NoRequiredPropertyException,
- IOException, FileNotFoundException
+ throws NoRequiredPropertyException, WikiException
{
log.debug("Initing FileSystemProvider");
m_pageDirectory = TextUtil.getCanonicalFilePathProperty(properties, PROP_PAGEDIR,
@@ -135,7 +135,7 @@
{
if( !f.mkdirs() )
{
- throw new IOException( "Failed to create page directory " + f.getAbsolutePath() + " , please check property "
+ throw new WikiException( "Failed to create page directory " + f.getAbsolutePath() + " , please check property "
+ PROP_PAGEDIR );
}
}
@@ -143,11 +143,11 @@
{
if( !f.isDirectory() )
{
- throw new IOException( "Page directory is not a directory: " + f.getAbsolutePath() );
+ throw new WikiException( "Page directory is not a directory: " + f.getAbsolutePath() );
}
if( !f.canWrite() )
{
- throw new IOException( "Page directory is not writable: " + f.getAbsolutePath() );
+ throw new WikiException( "Page directory is not writable: " + f.getAbsolutePath() );
}
}
diff --git a/jspwiki-war/src/main/java/org/apache/wiki/providers/BasicAttachmentProvider.java b/jspwiki-war/src/main/java/org/apache/wiki/providers/BasicAttachmentProvider.java
index 10b3f87..c426f67 100644
--- a/jspwiki-war/src/main/java/org/apache/wiki/providers/BasicAttachmentProvider.java
+++ b/jspwiki-war/src/main/java/org/apache/wiki/providers/BasicAttachmentProvider.java
@@ -43,6 +43,7 @@
import org.apache.wiki.WikiProvider;
import org.apache.wiki.api.exceptions.NoRequiredPropertyException;
import org.apache.wiki.api.exceptions.ProviderException;
+import org.apache.wiki.api.exceptions.WikiException;
import org.apache.wiki.attachment.Attachment;
import org.apache.wiki.search.QueryItem;
import org.apache.wiki.util.FileUtil;
@@ -112,8 +113,7 @@
* {@inheritDoc}
*/
public void initialize( WikiEngine engine, Properties properties )
- throws NoRequiredPropertyException,
- IOException
+ throws NoRequiredPropertyException, WikiException
{
m_engine = engine;
m_storageDir = TextUtil.getCanonicalFilePathProperty(properties, PROP_STORAGEDIR,
@@ -139,13 +139,13 @@
// Some sanity checks
//
if( !f.exists() )
- throw new IOException("Could not find or create attachment storage directory '"+m_storageDir+"'");
+ throw new WikiException("Could not find or create attachment storage directory '"+m_storageDir+"'");
if( !f.canWrite() )
- throw new IOException("Cannot write to the attachment storage directory '"+m_storageDir+"'");
+ throw new WikiException("Cannot write to the attachment storage directory '"+m_storageDir+"'");
if( !f.isDirectory() )
- throw new IOException("Your attachment storage points to a file, not a directory: '"+m_storageDir+"'");
+ throw new WikiException("Your attachment storage points to a file, not a directory: '"+m_storageDir+"'");
}
/**
diff --git a/jspwiki-war/src/main/java/org/apache/wiki/providers/CachingAttachmentProvider.java b/jspwiki-war/src/main/java/org/apache/wiki/providers/CachingAttachmentProvider.java
index 80207ec..4b8a677 100644
--- a/jspwiki-war/src/main/java/org/apache/wiki/providers/CachingAttachmentProvider.java
+++ b/jspwiki-war/src/main/java/org/apache/wiki/providers/CachingAttachmentProvider.java
@@ -20,16 +20,24 @@
import java.io.IOException;
import java.io.InputStream;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Properties;
import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Element;
import org.apache.log4j.Logger;
-import org.apache.wiki.*;
+import org.apache.wiki.WikiEngine;
+import org.apache.wiki.WikiPage;
+import org.apache.wiki.WikiProvider;
import org.apache.wiki.api.exceptions.NoRequiredPropertyException;
import org.apache.wiki.api.exceptions.ProviderException;
+import org.apache.wiki.api.exceptions.WikiException;
import org.apache.wiki.attachment.Attachment;
import org.apache.wiki.attachment.AttachmentManager;
import org.apache.wiki.search.QueryItem;
@@ -89,8 +97,7 @@
* {@inheritDoc}
*/
public void initialize( WikiEngine engine, Properties properties )
- throws NoRequiredPropertyException,
- IOException
+ throws NoRequiredPropertyException, WikiException
{
log.info("Initing CachingAttachmentProvider");
@@ -115,11 +122,17 @@
//
// Find and initialize real provider.
//
- String classname = TextUtil.getRequiredProperty( properties, AttachmentManager.PROP_PROVIDER );
-
+ String providerClassName = TextUtil.getRequiredProperty( properties, AttachmentManager.PROP_PROVIDER );
+ try {
+ m_provider = ClassUtil.getWikiProvider(WikiAttachmentProvider.class, engine, properties, "org.apache.wiki.providers", providerClassName, null, true);
+ } catch (WikiException e) {
+ log.error(e,e);
+ throw new IllegalArgumentException("no provider class", e);
+ }
+ /*
try
- {
- Class<?> providerclass = ClassUtil.findClass( "org.apache.wiki.providers", classname);
+ {
+ Class<?> providerclass = ClassUtil.findClass( "org.apache.wiki.providers", providerClassName);
m_provider = (WikiAttachmentProvider)providerclass.newInstance();
@@ -128,20 +141,20 @@
}
catch( ClassNotFoundException e )
{
- log.error("Unable to locate provider class "+classname,e);
+ log.error("Unable to locate provider class "+providerClassName,e);
throw new IllegalArgumentException("no provider class", e);
}
catch( InstantiationException e )
{
- log.error("Unable to create provider class "+classname,e);
+ log.error("Unable to create provider class "+providerClassName,e);
throw new IllegalArgumentException("faulty provider class", e);
}
catch( IllegalAccessException e )
{
- log.error("Illegal access to provider class "+classname,e);
+ log.error("Illegal access to provider class "+providerClassName,e);
throw new IllegalArgumentException("illegal provider class", e);
}
-
+ */
}
/**
diff --git a/jspwiki-war/src/main/java/org/apache/wiki/providers/CachingProvider.java b/jspwiki-war/src/main/java/org/apache/wiki/providers/CachingProvider.java
index 2ca7201..60ad21f 100644
--- a/jspwiki-war/src/main/java/org/apache/wiki/providers/CachingProvider.java
+++ b/jspwiki-war/src/main/java/org/apache/wiki/providers/CachingProvider.java
@@ -18,17 +18,25 @@
*/
package org.apache.wiki.providers;
-import java.io.IOException;
-import java.util.*;
+import java.util.Collection;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Properties;
+import java.util.TreeSet;
import net.sf.ehcache.Cache;
-import net.sf.ehcache.Element;
import net.sf.ehcache.CacheManager;
+import net.sf.ehcache.Element;
import org.apache.log4j.Logger;
-import org.apache.wiki.*;
+import org.apache.wiki.PageManager;
+import org.apache.wiki.WikiContext;
+import org.apache.wiki.WikiEngine;
+import org.apache.wiki.WikiPage;
import org.apache.wiki.api.exceptions.NoRequiredPropertyException;
import org.apache.wiki.api.exceptions.ProviderException;
+import org.apache.wiki.api.exceptions.WikiException;
import org.apache.wiki.parser.MarkupParser;
import org.apache.wiki.render.RenderingManager;
import org.apache.wiki.search.QueryItem;
@@ -94,7 +102,8 @@
* {@inheritDoc}
*/
public void initialize( WikiEngine engine, Properties properties )
- throws NoRequiredPropertyException, IOException {
+ throws NoRequiredPropertyException, WikiException
+ {
log.debug("Initing CachingProvider");
// engine is used for getting the search engine
@@ -133,12 +142,18 @@
//
// Find and initialize real provider.
//
- String classname = TextUtil.getRequiredProperty( properties, PageManager.PROP_PAGEPROVIDER );
+ String providerClassName = TextUtil.getRequiredProperty( properties, PageManager.PROP_PAGEPROVIDER );
+ try {
+ m_provider = ClassUtil.getWikiProvider(WikiPageProvider.class, engine, properties, "org.apache.wiki.providers", providerClassName, null, true);
+ } catch (WikiException e) {
+ log.error(e,e);
+ throw new IllegalArgumentException("no provider class", e);
+ }
-
+ /*
try
{
- Class< ? > providerclass = ClassUtil.findClass( "org.apache.wiki.providers", classname);
+ Class< ? > providerclass = ClassUtil.findClass( "org.apache.wiki.providers", providerClassName);
m_provider = (WikiPageProvider)providerclass.newInstance();
@@ -147,19 +162,20 @@
}
catch( ClassNotFoundException e )
{
- log.error("Unable to locate provider class "+classname,e);
+ log.error("Unable to locate provider class "+providerClassName,e);
throw new IllegalArgumentException("no provider class", e);
}
catch( InstantiationException e )
{
- log.error("Unable to create provider class "+classname,e);
+ log.error("Unable to create provider class "+providerClassName,e);
throw new IllegalArgumentException("faulty provider class", e);
}
catch( IllegalAccessException e )
{
- log.error("Illegal access to provider class "+classname,e);
+ log.error("Illegal access to provider class "+providerClassName,e);
throw new IllegalArgumentException("illegal provider class", e);
}
+ */
}
diff --git a/jspwiki-war/src/main/java/org/apache/wiki/providers/VersioningFileProvider.java b/jspwiki-war/src/main/java/org/apache/wiki/providers/VersioningFileProvider.java
index 7cdc713..b4cec84 100644
--- a/jspwiki-war/src/main/java/org/apache/wiki/providers/VersioningFileProvider.java
+++ b/jspwiki-war/src/main/java/org/apache/wiki/providers/VersioningFileProvider.java
@@ -41,6 +41,7 @@
import org.apache.wiki.WikiProvider;
import org.apache.wiki.api.exceptions.NoRequiredPropertyException;
import org.apache.wiki.api.exceptions.ProviderException;
+import org.apache.wiki.api.exceptions.WikiException;
import org.apache.wiki.util.FileUtil;
/**
@@ -86,8 +87,7 @@
* {@inheritDoc}
*/
public void initialize( WikiEngine engine, Properties properties )
- throws NoRequiredPropertyException,
- IOException
+ throws NoRequiredPropertyException, WikiException
{
super.initialize( engine, properties );
// some additional sanity checks :
@@ -96,18 +96,18 @@
{
if (!oldpages.mkdirs())
{
- throw new IOException("Failed to create page version directory " + oldpages.getAbsolutePath());
+ throw new WikiException("Failed to create page version directory " + oldpages.getAbsolutePath());
}
}
else
{
if (!oldpages.isDirectory())
{
- throw new IOException("Page version directory is not a directory: " + oldpages.getAbsolutePath());
+ throw new WikiException("Page version directory is not a directory: " + oldpages.getAbsolutePath());
}
if (!oldpages.canWrite())
{
- throw new IOException("Page version directory is not writable: " + oldpages.getAbsolutePath());
+ throw new WikiException("Page version directory is not writable: " + oldpages.getAbsolutePath());
}
}
log.info("Using directory " + oldpages.getAbsolutePath() + " for storing old versions of pages");
diff --git a/jspwiki-war/src/main/java/org/apache/wiki/search/BasicSearchProvider.java b/jspwiki-war/src/main/java/org/apache/wiki/search/BasicSearchProvider.java
index 409a01a..aa28f34 100644
--- a/jspwiki-war/src/main/java/org/apache/wiki/search/BasicSearchProvider.java
+++ b/jspwiki-war/src/main/java/org/apache/wiki/search/BasicSearchProvider.java
@@ -31,6 +31,7 @@
import org.apache.wiki.WikiPage;
import org.apache.wiki.api.exceptions.NoRequiredPropertyException;
import org.apache.wiki.api.exceptions.ProviderException;
+import org.apache.wiki.api.exceptions.WikiException;
import org.apache.wiki.attachment.Attachment;
import org.apache.wiki.auth.AuthorizationManager;
import org.apache.wiki.auth.permissions.PagePermission;
@@ -51,7 +52,7 @@
* {@inheritDoc}
*/
public void initialize(WikiEngine engine, Properties props)
- throws NoRequiredPropertyException, IOException
+ throws NoRequiredPropertyException, WikiException
{
m_engine = engine;
}
diff --git a/jspwiki-war/src/main/java/org/apache/wiki/search/LuceneSearchProvider.java b/jspwiki-war/src/main/java/org/apache/wiki/search/LuceneSearchProvider.java
index 70cc9c2..936d396 100644
--- a/jspwiki-war/src/main/java/org/apache/wiki/search/LuceneSearchProvider.java
+++ b/jspwiki-war/src/main/java/org/apache/wiki/search/LuceneSearchProvider.java
@@ -73,6 +73,7 @@
import org.apache.wiki.WikiProvider;
import org.apache.wiki.api.exceptions.NoRequiredPropertyException;
import org.apache.wiki.api.exceptions.ProviderException;
+import org.apache.wiki.api.exceptions.WikiException;
import org.apache.wiki.attachment.Attachment;
import org.apache.wiki.attachment.AttachmentManager;
import org.apache.wiki.auth.AuthorizationManager;
@@ -133,7 +134,7 @@
* {@inheritDoc}
*/
public void initialize(WikiEngine engine, Properties props)
- throws NoRequiredPropertyException, IOException
+ throws NoRequiredPropertyException, WikiException
{
m_engine = engine;
diff --git a/jspwiki-war/src/main/java/org/apache/wiki/search/SearchManager.java b/jspwiki-war/src/main/java/org/apache/wiki/search/SearchManager.java
index a017ef8..6addf68 100644
--- a/jspwiki-war/src/main/java/org/apache/wiki/search/SearchManager.java
+++ b/jspwiki-war/src/main/java/org/apache/wiki/search/SearchManager.java
@@ -34,7 +34,6 @@
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.time.StopWatch;
-import org.apache.log4j.Logger;
import org.apache.wiki.WikiContext;
import org.apache.wiki.WikiEngine;
import org.apache.wiki.WikiPage;
@@ -50,7 +49,6 @@
import org.apache.wiki.event.WikiEventListener;
import org.apache.wiki.event.WikiEventUtils;
import org.apache.wiki.event.WikiPageEvent;
-import org.apache.wiki.modules.InternalModule;
import org.apache.wiki.parser.MarkupParser;
import org.apache.wiki.util.ClassUtil;
import org.apache.wiki.util.TextUtil;
@@ -260,20 +258,7 @@
{
super.initialize(engine, properties);
- loadSearchProvider(properties);
-
- try
- {
- m_searchProvider.initialize(engine, properties);
- }
- catch (NoRequiredPropertyException e)
- {
- log.error( e.getMessage(), e );
- }
- catch (IOException e)
- {
- log.error( e.getMessage(), e );
- }
+ loadSearchProvider(engine, properties);
WikiEventUtils.addWikiEventListener(m_engine.getPageManager(),
WikiPageEvent.PAGE_DELETE_REQUEST, this);
@@ -283,7 +268,7 @@
}
- private void loadSearchProvider(Properties properties)
+ private void loadSearchProvider(WikiEngine engine, Properties properties)
{
//
// See if we're using Lucene, and if so, ensure that its
@@ -304,13 +289,30 @@
{
m_searchProvider = new BasicSearchProvider();
}
+ try
+ {
+ m_searchProvider.initialize(engine, properties);
+ }
+ catch (NoRequiredPropertyException e)
+ {
+ log.error( e.getMessage(), e );
+ }
+ catch (WikiException e)
+ {
+ log.error( e.getMessage(), e );
+ }
log.debug("useLucene was set, loading search provider " + m_searchProvider);
return;
}
- String providerClassName = properties.getProperty( PROP_SEARCHPROVIDER,
- DEFAULT_SEARCHPROVIDER );
-
+ String providerClassName = TextUtil.getStringProperty( properties, PROP_SEARCHPROVIDER, DEFAULT_SEARCHPROVIDER );
+ try {
+ m_searchProvider = ClassUtil.getWikiProvider(SearchProvider.class, engine, properties, "org.apache.wiki.search", providerClassName, new BasicSearchProvider(), false);
+ } catch (WikiException e) {
+ log.error(e,e);
+ throw new IllegalArgumentException("no provider class", e);
+ }
+ /*
try
{
Class providerClass = ClassUtil.findClass( "org.apache.wiki.search", providerClassName );
@@ -334,6 +336,7 @@
// FIXME: Make a static with the default search provider
m_searchProvider = new BasicSearchProvider();
}
+ */
log.debug("Loaded search provider " + m_searchProvider);
}
diff --git a/jspwiki-war/src/main/java/org/apache/wiki/util/ClassUtil.java b/jspwiki-war/src/main/java/org/apache/wiki/util/ClassUtil.java
index f5e2a4b..b0b18fb 100644
--- a/jspwiki-war/src/main/java/org/apache/wiki/util/ClassUtil.java
+++ b/jspwiki-war/src/main/java/org/apache/wiki/util/ClassUtil.java
@@ -26,10 +26,8 @@
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.Enumeration;
-import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
-import java.util.Map;
import java.util.Properties;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
@@ -38,7 +36,9 @@
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.apache.wiki.WikiEngine;
+import org.apache.wiki.WikiProvider;
import org.apache.wiki.api.engine.PluginManager;
+import org.apache.wiki.api.exceptions.NoRequiredPropertyException;
import org.apache.wiki.api.exceptions.WikiException;
import org.apache.wiki.modules.InternalModule;
import org.jdom2.Element;
@@ -61,8 +61,6 @@
*/
public static final String MAPPINGS = "ini/classmappings.xml";
- private static Map<String, String> c_classMappings = new Hashtable<String, String>();
-
private static MutablePicoContainer picoContainer = new DefaultPicoContainer();
private static boolean classLoaderSetup = false;
@@ -75,33 +73,6 @@
static {
List< Element > nodes = XmlUtil.parse( MAPPINGS, "/classmappings/mapping" );
-/*
- picoContainer.addComponent(PageManager.class);
- picoContainer.addComponent(ReferenceManager.class);
- picoContainer.addComponent(VariableManager.class);
- picoContainer.addComponent(DefaultFilterManager.class);
- picoContainer.addComponent(DefaultPluginManager.class);
- picoContainer.addComponent(DefaultAdminBeanManager.class);
- picoContainer.addComponent(AttachmentManager.class);
- picoContainer.addComponent(AuthenticationManager.class);
- picoContainer.addComponent(AuthorizationManager.class);
- picoContainer.addComponent(UserManager.class);
- picoContainer.addComponent(DefaultAclManager.class);
- picoContainer.addComponent(GroupManager.class);
- picoContainer.addComponent(DifferenceManager.class);
- picoContainer.addComponent(RenderingManager.class);
- picoContainer.addComponent(SearchManager.class);
- picoContainer.addComponent(EditorManager.class);
- picoContainer.addComponent(TemplateManager.class);
- picoContainer.addComponent(WorkflowManager.class);
- picoContainer.addComponent(InternationalizationManager.class);
- picoContainer.addComponent(PageRenamer.class);
- picoContainer.addComponent(RSSGenerator.class);
-// picoContainer.addComponent(WikiEngine.class);
-// picoContainer.addComponent(DummyUserDatabase.class);
-// picoContainer.addComponent(JDBCUserDatabase.class);
-// picoContainer.addComponent(XMLUserDatabase.class);
-*/
if( nodes.size() > 0 ) {
for( Iterator< Element > i = nodes.iterator(); i.hasNext(); ) {
Element f = i.next();
@@ -114,7 +85,6 @@
} catch (ClassNotFoundException e) {
log.fatal(e,e);
}
-// c_classMappings.put( key, className );
log.debug("Mapped class '"+key+"' to class '"+className+"'");
}
@@ -327,6 +297,52 @@
}
}
+ public static <T extends InternalModule> T getInternalModule( Class<T> classType, WikiEngine engine, Properties props ) throws WikiException {
+ InternalModule module = (InternalModule) getPicoContainer().getComponent(classType);
+ module.initialize(engine, props);
+ return classType.cast(module);
+ }
+
+ public static <T extends WikiProvider> T getWikiProvider( Class<T> classType, WikiEngine engine, Properties props, String packageName, String providerClassName, WikiProvider defaultProvider, boolean throwException) throws WikiException {
+ WikiProvider provider = defaultProvider;
+
+ String defaultProviderClassName = defaultProvider != null ? defaultProvider.getClass().getName() : null;
+ String errorMessageLoad = "Failed loading WikiProvider "+providerClassName+", will use "+defaultProviderClassName+". ";
+
+ try {
+ Class<?> providerClass = ClassUtil.findClass(packageName, providerClassName);
+ provider = (WikiProvider) providerClass.newInstance();
+ } catch (ClassNotFoundException e) {
+ log.warn("no class for WikiProvider "+providerClassName+" "+e.getMessage(), e);
+ if (throwException) { throw new WikiException(errorMessageLoad+e.getMessage()); }
+ } catch (InstantiationException e) {
+ log.warn("Faulty class WikiProvider "+providerClassName+" "+e.getMessage(), e);
+ if (throwException) { throw new WikiException(errorMessageLoad+e.getMessage()); }
+ } catch (IllegalAccessException e) {
+ log.warn("Illegal class WikiProvider "+providerClassName+" "+e.getMessage(), e);
+ if (throwException) { throw new WikiException(errorMessageLoad+e.getMessage()); }
+ }
+
+ if (null == provider) {
+ provider = defaultProvider;
+ } else {
+ String errorMessageInit = "Failed initializing WikiProvider "+providerClassName+", will use "+defaultProviderClassName+". ";
+ try {
+ provider.initialize(engine, props);
+ } catch (NoRequiredPropertyException e) {
+ log.warn(errorMessageInit+e.getMessage(), e);
+ if (throwException) { throw new WikiException(errorMessageInit+e.getMessage()); }
+ provider = defaultProvider;
+ } catch (WikiException e) {
+ log.warn(errorMessageInit+e.getMessage(), e);
+ if (throwException) { throw new WikiException(errorMessageInit+e.getMessage()); }
+ provider = defaultProvider;
+ }
+ }
+
+ return classType.cast(provider);
+ }
+
/**
* This method is used to locate and instantiate a mapped class.
* You may redefine anything in the resource file which is located in your classpath
@@ -349,12 +365,6 @@
// Properties props = engine.getWikiProperties();
return getMappedObject(requestedClass, null, null );
}
-
- public static <T extends InternalModule> T getInternalModule( Class<T> type, WikiEngine engine, Properties props ) throws WikiException {
- InternalModule module = (InternalModule) getPicoContainer().getComponent(type);
- module.initialize(engine, props);
- return type.cast(module);
- }
/**
* This method is used to locate and instantiate a mapped class.
@@ -387,99 +397,6 @@
} catch (ClassNotFoundException e) {
throw new WikiException(e.getMessage());
}
-// try
-// {
-// Class<?> cl = getMappedClass( requestedClass );
-//
-// Constructor<?>[] ctors = cl.getConstructors();
-//
-// //
-// // Try to find the proper constructor by comparing the
-// // initargs array classes and the constructor types.
-// //
-// for( int c = 0; c < ctors.length; c++ )
-// {
-// Class<?>[] params = ctors[c].getParameterTypes();
-//
-// if( params.length == initargs.length )
-// {
-// for( int arg = 0; arg < initargs.length; arg++ )
-// {
-// if( params[arg].isAssignableFrom(initargs[arg].getClass()))
-// {
-// //
-// // Ha, found it! Instantiating and returning...
-// //
-// return ctors[c].newInstance(initargs);
-// }
-// }
-// }
-// }
-//
-// //
-// // No arguments, so we can just call a default constructor and
-// // ignore the arguments.
-// //
-// Object o = cl.newInstance();
-//
-// return o;
-// }
-// catch( InstantiationException e )
-// {
-// log.info( "Cannot instantiate requested class "+requestedClass, e );
-//
-// throw new WikiException("Failed to instantiate class "+requestedClass, e );
-// }
-// catch (IllegalAccessException e)
-// {
-// log.info( "Cannot access requested class "+requestedClass, e );
-//
-// throw new WikiException("Failed to instantiate class "+requestedClass, e );
-// }
-// catch (IllegalArgumentException e)
-// {
-// log.info( "Illegal arguments when constructing new object", e );
-//
-// throw new WikiException("Failed to instantiate class "+requestedClass, e );
-// }
-// catch (InvocationTargetException e)
-// {
-// log.info( "You tried to instantiate an abstract class "+requestedClass, e );
-//
-// throw new WikiException("Failed to instantiate class "+requestedClass, e );
-// }
- }
-
- /**
- * Finds a mapped class from the c_classMappings list. If there is no
- * mappped class, will use the requestedClass.
- *
- * @param requestedClass
- * @return A Class object which you can then instantiate.
- * @throws WikiException
- */
- private static Class< ? > getMappedClass( String requestedClass )
- throws WikiException
- {
- String mappedClass = c_classMappings.get( requestedClass );
-
- if( mappedClass == null )
- {
- mappedClass = requestedClass;
- }
-
- try
- {
- Class< ? > cl = Class.forName(mappedClass);
-
- return cl;
- }
- catch (ClassNotFoundException e)
- {
- log.info( "Cannot find requested class", e );
-
- throw new WikiException("Failed to instantiate class "+requestedClass, e );
- }
}
public static PicoContainer getPicoContainer() {
diff --git a/jspwiki-war/src/test/java/org/apache/wiki/providers/FileSystemProviderTest.java b/jspwiki-war/src/test/java/org/apache/wiki/providers/FileSystemProviderTest.java
index 471833c..a5c8151 100644
--- a/jspwiki-war/src/test/java/org/apache/wiki/providers/FileSystemProviderTest.java
+++ b/jspwiki-war/src/test/java/org/apache/wiki/providers/FileSystemProviderTest.java
@@ -21,7 +21,6 @@
import java.io.File;
import java.io.FileInputStream;
-import java.io.IOException;
import java.util.Properties;
import junit.framework.Test;
@@ -33,6 +32,7 @@
import org.apache.wiki.TestEngine;
import org.apache.wiki.WikiEngine;
import org.apache.wiki.WikiPage;
+import org.apache.wiki.api.exceptions.WikiException;
import org.apache.wiki.util.FileUtil;
@@ -226,7 +226,7 @@
fail( "Wiki did not warn about wrong property." );
}
- catch( IOException e )
+ catch( WikiException e )
{
// This is okay.
}