use Context instead of WikiContext
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/plugin/DefaultPluginManager.java b/jspwiki-main/src/main/java/org/apache/wiki/plugin/DefaultPluginManager.java
index a0db25b..02a5fbb 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/plugin/DefaultPluginManager.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/plugin/DefaultPluginManager.java
@@ -30,7 +30,6 @@
import org.apache.oro.text.regex.Perl5Compiler;
import org.apache.oro.text.regex.Perl5Matcher;
import org.apache.wiki.InternalWikiException;
-import org.apache.wiki.WikiContext;
import org.apache.wiki.ajax.WikiAjaxDispatcherServlet;
import org.apache.wiki.ajax.WikiAjaxServlet;
import org.apache.wiki.api.core.Context;
@@ -160,23 +159,16 @@
public class DefaultPluginManager extends BaseModuleManager implements PluginManager {
private static final String PLUGIN_INSERT_PATTERN = "\\{?(INSERT)?\\s*([\\w\\._]+)[ \\t]*(WHERE)?[ \\t]*";
-
private static final Logger log = Logger.getLogger( DefaultPluginManager.class );
-
private static final String DEFAULT_FORMS_PACKAGE = "org.apache.wiki.forms";
- private ArrayList<String> m_searchPath = new ArrayList<>();
-
- private ArrayList<String> m_externalJars = new ArrayList<>();
-
+ private ArrayList< String > m_searchPath = new ArrayList<>();
+ private ArrayList< String > m_externalJars = new ArrayList<>();
private Pattern m_pluginPattern;
-
private boolean m_pluginsEnabled = true;
- /**
- * Keeps a list of all known plugin classes.
- */
- private Map<String, WikiPluginInfo> m_pluginClassMap = new HashMap<>();
+ /** Keeps a list of all known plugin classes. */
+ private Map< String, WikiPluginInfo > m_pluginClassMap = new HashMap<>();
/**
* Create a new PluginManager.
@@ -187,20 +179,16 @@
public DefaultPluginManager( final Engine engine, final Properties props ) {
super( engine );
final String packageNames = props.getProperty( PROP_SEARCHPATH );
-
if ( packageNames != null ) {
final StringTokenizer tok = new StringTokenizer( packageNames, "," );
-
while( tok.hasMoreTokens() ) {
m_searchPath.add( tok.nextToken().trim() );
}
}
final String externalJars = props.getProperty( PROP_EXTERNALJARS );
-
if( externalJars != null ) {
final StringTokenizer tok = new StringTokenizer( externalJars, "," );
-
while( tok.hasMoreTokens() ) {
m_externalJars.add( tok.nextToken().trim() );
}
@@ -208,50 +196,38 @@
registerPlugins();
- //
// The default packages are always added.
- //
m_searchPath.add( DEFAULT_PACKAGE );
m_searchPath.add( DEFAULT_FORMS_PACKAGE );
final PatternCompiler compiler = new Perl5Compiler();
-
try {
m_pluginPattern = compiler.compile( PLUGIN_INSERT_PATTERN );
} catch( final MalformedPatternException e ) {
log.fatal( "Internal error: someone messed with pluginmanager patterns.", e );
- throw new InternalWikiException( "PluginManager patterns are broken" , e);
+ throw new InternalWikiException( "PluginManager patterns are broken" , e );
}
-
}
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
@Override
public void enablePlugins( final boolean enabled ) {
m_pluginsEnabled = enabled;
}
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
@Override
public boolean pluginsEnabled() {
return m_pluginsEnabled;
}
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
@Override
public Pattern getPluginPattern() {
return m_pluginPattern;
}
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
@Override
public String getPluginSearchPath() {
return TextUtil.getStringProperty( m_engine.getWikiProperties(), PROP_SEARCHPATH, null );
@@ -260,61 +236,34 @@
/**
* Attempts to locate a plugin class from the class path set in the property file.
*
- * @param classname Either a fully fledged class name, or just the name of the file (that is,
- * "org.apache.wiki.plugin.Counter" or just plain "Counter").
- *
+ * @param classname Either a fully fledged class name, or just the name of the file (that is, "org.apache.wiki.plugin.Counter" or just plain "Counter").
* @return A found class.
- *
* @throws ClassNotFoundException if no such class exists.
*/
private Class< ? > findPluginClass( final String classname ) throws ClassNotFoundException {
return ClassUtil.findClass( m_searchPath, m_externalJars, classname );
}
- /**
- * Outputs a HTML-formatted version of a stack trace.
- */
- private String stackTrace( final Map<String,String> params, final Throwable t )
- {
- final Element div = XhtmlUtil.element(XHTML.div,"Plugin execution failed, stack trace follows:");
- div.setAttribute(XHTML.ATTR_class,"debug");
-
+ /** Outputs a HTML-formatted version of a stack trace. */
+ private String stackTrace( final Map<String,String> params, final Throwable t ) {
+ final Element div = XhtmlUtil.element( XHTML.div, "Plugin execution failed, stack trace follows:" );
+ div.setAttribute( XHTML.ATTR_class, "debug" );
final StringWriter out = new StringWriter();
- t.printStackTrace(new PrintWriter(out));
- div.addContent(XhtmlUtil.element(XHTML.pre,out.toString()));
- div.addContent(XhtmlUtil.element(XHTML.b,"Parameters to the plugin"));
+ t.printStackTrace( new PrintWriter( out ) );
+ div.addContent( XhtmlUtil.element( XHTML.pre, out.toString() ) );
+ div.addContent( XhtmlUtil.element( XHTML.b, "Parameters to the plugin" ) );
- final Element list = XhtmlUtil.element(XHTML.ul);
-
+ final Element list = XhtmlUtil.element( XHTML.ul );
for( final Map.Entry< String, String > e : params.entrySet() ) {
final String key = e.getKey();
list.addContent( XhtmlUtil.element( XHTML.li, key + "'='" + e.getValue() ) );
}
-
- div.addContent(list);
-
- return XhtmlUtil.serialize(div);
+ div.addContent( list );
+ return XhtmlUtil.serialize( div );
}
- /**
- * Executes a plugin class in the given context.
- * <P>Used to be private, but is public since 1.9.21.
- *
- * @param context The current WikiContext.
- * @param classname The name of the class. Can also be a
- * shortened version without the package name, since the class name is searched from the
- * package search path.
- *
- * @param params A parsed map of key-value pairs.
- *
- * @return Whatever the plugin returns.
- *
- * @throws PluginException If the plugin execution failed for
- * some reason.
- *
- * @since 2.0
- */
+ /** {@inheritDoc} */
@Override
public String execute( final Context context, final String classname, final Map< String, String > params ) throws PluginException {
if( !m_pluginsEnabled ) {
@@ -355,110 +304,75 @@
}
}
- /**
- * Parses plugin arguments. Handles quotes and all other kewl stuff.
- *
- * <h3>Special parameters</h3>
- * The plugin body is put into a special parameter defined by {@link #PARAM_BODY};
- * the plugin's command line into a parameter defined by {@link #PARAM_CMDLINE};
- * and the bounds of the plugin within the wiki page text by a parameter defined
- * by {@link #PARAM_BOUNDS}, whose value is stored as a two-element int[] array,
- * i.e., <tt>[start,end]</tt>.
- *
- * @param argstring The argument string to the plugin. This is
- * typically a list of key-value pairs, using "'" to escape
- * spaces in strings, followed by an empty line and then the
- * plugin body. In case the parameter is null, will return an
- * empty parameter list.
- *
- * @return A parsed list of parameters.
- *
- * @throws IOException If the parsing fails.
- */
+ /** {@inheritDoc} */
@Override
public Map< String, String > parseArgs( final String argstring ) throws IOException {
final Map< String, String > arglist = new HashMap<>();
-
// Protection against funny users.
if( argstring == null ) {
return arglist;
}
arglist.put( PARAM_CMDLINE, argstring );
-
- final StringReader in = new StringReader(argstring);
- final StreamTokenizer tok = new StreamTokenizer(in);
- int type;
+ final StringReader in = new StringReader( argstring );
+ final StreamTokenizer tok = new StreamTokenizer( in );
+ tok.eolIsSignificant( true );
String param = null;
String value;
-
- tok.eolIsSignificant( true );
-
boolean potentialEmptyLine = false;
- boolean quit = false;
-
+ boolean quit = false;
while( !quit ) {
final String s;
- type = tok.nextToken();
+ final int type = tok.nextToken();
switch( type ) {
- case StreamTokenizer.TT_EOF:
+ case StreamTokenizer.TT_EOF:
quit = true;
s = null;
break;
- case StreamTokenizer.TT_WORD:
+ case StreamTokenizer.TT_WORD:
s = tok.sval;
potentialEmptyLine = false;
break;
- case StreamTokenizer.TT_EOL:
+ case StreamTokenizer.TT_EOL:
quit = potentialEmptyLine;
potentialEmptyLine = true;
s = null;
break;
- case StreamTokenizer.TT_NUMBER:
- s = Integer.toString( (int) tok.nval );
+ case StreamTokenizer.TT_NUMBER:
+ s = Integer.toString( ( int )tok.nval );
potentialEmptyLine = false;
break;
- case '\'':
+ case '\'':
s = tok.sval;
break;
- default:
+ default:
s = null;
}
- //
- // Assume that alternate words on the line are
- // parameter and value, respectively.
- //
+ // Assume that alternate words on the line are parameter and value, respectively.
if( s != null ) {
if( param == null ) {
param = s;
} else {
value = s;
-
arglist.put( param, value );
-
- // log.debug("ARG: "+param+"="+value);
param = null;
}
}
}
- //
// Now, we'll check the body.
- //
if( potentialEmptyLine ) {
final StringWriter out = new StringWriter();
FileUtil.copyContents( in, out );
-
final String bodyContent = out.toString();
-
if( bodyContent != null ) {
arglist.put( PARAM_BODY, bodyContent );
}
@@ -467,22 +381,9 @@
return arglist;
}
- /**
- * Parses a plugin. Plugin commands are of the form:
- * [{INSERT myplugin WHERE param1=value1, param2=value2}]
- * myplugin may either be a class name or a plugin alias.
- * <P>
- * This is the main entry point that is used.
- *
- * @param context The current WikiContext.
- * @param commandline The full command line, including plugin name, parameters and body.
- *
- * @return HTML as returned by the plugin, or possibly an error message.
- *
- * @throws PluginException From the plugin itself, it propagates, waah!
- */
+ /** {@inheritDoc} */
@Override
- public String execute( final WikiContext context, final String commandline ) throws PluginException {
+ public String execute( final Context context, final String commandline ) throws PluginException {
if( !m_pluginsEnabled ) {
return "";
}
@@ -493,74 +394,64 @@
try {
if( matcher.contains( commandline, m_pluginPattern ) ) {
final MatchResult res = matcher.getMatch();
-
- final String plugin = res.group(2);
- final String args = commandline.substring(res.endOffset(0),
- commandline.length() -
- (commandline.charAt(commandline.length()-1) == '}' ? 1 : 0 ) );
- final Map<String, String> arglist = parseArgs( args );
-
+ final String plugin = res.group( 2 );
+ final int endIndex = commandline.length() - ( commandline.charAt( commandline.length() - 1 ) == '}' ? 1 : 0 );
+ final String args = commandline.substring( res.endOffset( 0 ), endIndex );
+ final Map< String, String > arglist = parseArgs( args );
return execute( context, plugin, arglist );
}
} catch( final NoSuchElementException e ) {
- final String msg = "Missing parameter in plugin definition: "+commandline;
+ final String msg = "Missing parameter in plugin definition: " + commandline;
log.warn( msg, e );
throw new PluginException( MessageFormat.format( rb.getString( "plugin.error.missingparameter" ), commandline ) );
} catch( final IOException e ) {
- final String msg = "Zyrf. Problems with parsing arguments: "+commandline;
+ final String msg = "Zyrf. Problems with parsing arguments: " + commandline;
log.warn( msg, e );
throw new PluginException( MessageFormat.format( rb.getString( "plugin.error.parsingarguments" ), commandline ) );
}
- // FIXME: We could either return an empty string "", or
- // the original line. If we want unsuccessful requests
+ // FIXME: We could either return an empty string "", or the original line. If we want unsuccessful requests
// to be invisible, then we should return an empty string.
return commandline;
}
- /**
- * Register a plugin.
- */
+ /** Register a plugin. */
private void registerPlugin( final WikiPluginInfo pluginClass ) {
String name;
- // Registrar the plugin with the className without the package-part
+ // Register the plugin with the className without the package-part
name = pluginClass.getName();
if( name != null ) {
log.debug( "Registering plugin [name]: " + name );
m_pluginClassMap.put( name, pluginClass );
}
- // Registrar the plugin with a short convenient name.
+ // Register the plugin with a short convenient name.
name = pluginClass.getAlias();
if( name != null ) {
log.debug( "Registering plugin [shortName]: " + name );
m_pluginClassMap.put( name, pluginClass );
}
- // Registrar the plugin with the className with the package-part
+ // Register the plugin with the className with the package-part
name = pluginClass.getClassName();
if( name != null ) {
log.debug( "Registering plugin [className]: " + name );
m_pluginClassMap.put( name, pluginClass );
}
- pluginClass.initializePlugin( pluginClass, m_engine , m_searchPath, m_externalJars);
+ pluginClass.initializePlugin( pluginClass, m_engine, m_searchPath, m_externalJars );
}
private void registerPlugins() {
+ // Register all plugins which have created a resource containing its properties.
log.info( "Registering plugins" );
final List< Element > plugins = XmlUtil.parse( PLUGIN_RESOURCE_LOCATION, "/modules/plugin" );
- //
- // Register all plugins which have created a resource containing its properties.
- //
// Get all resources of all plugins.
- //
for( final Element pluginEl : plugins ) {
final String className = pluginEl.getAttributeValue( "class" );
- final WikiPluginInfo pluginInfo = WikiPluginInfo.newInstance( className, pluginEl ,m_searchPath, m_externalJars);
-
+ final WikiPluginInfo pluginInfo = WikiPluginInfo.newInstance( className, pluginEl ,m_searchPath, m_externalJars );
if( pluginInfo != null ) {
registerPlugin( pluginInfo );
}
@@ -569,12 +460,9 @@
/**
* Contains information about a bunch of plugins.
- *
- *
*/
- // FIXME: This class needs a better interface to return all sorts of possible
- // information from the plugin XML. In fact, it probably should have
- // some sort of a superclass system.
+ // FIXME: This class needs a better interface to return all sorts of possible information from the plugin XML. In fact, it probably
+ // should have some sort of a superclass system.
public static final class WikiPluginInfo extends WikiModuleInfo {
private String m_className;
@@ -587,15 +475,16 @@
/**
* Creates a new plugin info object which can be used to access a plugin.
*
- * @param className Either a fully qualified class name, or a "short" name which is then
- * checked against the internal list of plugin packages.
+ * @param className Either a fully qualified class name, or a "short" name which is then checked against the internal list of plugin packages.
* @param el A JDOM Element containing the information about this class.
* @param searchPath A List of Strings, containing different package names.
* @param externalJars the list of external jars to search
* @return A WikiPluginInfo object.
*/
protected static WikiPluginInfo newInstance( final String className, final Element el, final List<String> searchPath, final List<String> externalJars ) {
- if( className == null || className.length() == 0 ) return null;
+ if( className == null || className.length() == 0 ) {
+ return null;
+ }
final WikiPluginInfo info = new WikiPluginInfo( className );
info.initializeFromXML( el );
@@ -603,8 +492,7 @@
}
/**
- * Initializes a plugin, if it has not yet been initialized.
- * If the plugin extends {@link HttpServlet} it will automatically
+ * Initializes a plugin, if it has not yet been initialized. If the plugin extends {@link HttpServlet} it will automatically
* register it as AJAX using {@link WikiAjaxDispatcherServlet#registerServlet(String, WikiAjaxServlet)}.
*
* @param engine The Engine
@@ -693,19 +581,18 @@
*
* @param searchPath A List of Strings, containing different package names.
* @param externalJars the list of external jars to search
-
* @return A new plugin.
* @throws ClassNotFoundException If the class declared was not found.
* @throws InstantiationException If the class cannot be instantiated-
* @throws IllegalAccessException If the class cannot be accessed.
*/
- public Plugin newPluginInstance( final List<String> searchPath, final List<String> externalJars) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
+ public Plugin newPluginInstance( final List< String > searchPath, final List< String > externalJars) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
if( m_clazz == null ) {
- m_clazz = ClassUtil.findClass(searchPath, externalJars ,m_className);
+ m_clazz = ClassUtil.findClass( searchPath, externalJars ,m_className );
}
- return (Plugin) m_clazz.newInstance();
+ return ( Plugin )m_clazz.newInstance();
}
/**
@@ -778,6 +665,7 @@
public String toString() {
return "Plugin :[name=" + m_name + "][className=" + m_className + "]";
}
+
} // WikiPluginClass
/**
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/plugin/PluginManager.java b/jspwiki-main/src/main/java/org/apache/wiki/plugin/PluginManager.java
index 7ed86fb..a7fee6d 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/plugin/PluginManager.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/plugin/PluginManager.java
@@ -19,7 +19,6 @@
package org.apache.wiki.plugin;
import org.apache.oro.text.regex.Pattern;
-import org.apache.wiki.WikiContext;
import org.apache.wiki.api.core.Context;
import org.apache.wiki.api.exceptions.PluginException;
import org.apache.wiki.api.plugin.Plugin;
@@ -117,19 +116,18 @@
Map< String, String > parseArgs( String argstring ) throws IOException;
/**
- * Parses a plugin. Plugin commands are of the form:
- * {@code [{INSERT myplugin WHERE param1=value1, param2=value2}] }
- * myplugin may either be a class name or a plugin alias.
- * <P>
- * This is the main entry point that is used.
+ * Parses a plugin. Plugin commands are of the form:<br/>
+ * {@code [{INSERT myplugin WHERE param1=value1, param2=value2}]}<br/>
+ * myplugin may either be a class name or a plugin alias.
+ * <P>
+ * This is the main entry point that is used.
*
- * @param context The current WikiContext.
- * @param commandline The full command line, including plugin name, parameters and body.
- * @return HTML as returned by the plugin, or possibly an error message.
- *
- * @throws PluginException From the plugin itself, it propagates, waah!
+ * @param context The current WikiContext.
+ * @param commandline The full command line, including plugin name, parameters and body.
+ * @return HTML as returned by the plugin, or possibly an error message.
+ * @throws PluginException From the plugin itself, it propagates, waah!
*/
- String execute( WikiContext context, String commandline ) throws PluginException;
+ String execute( Context context, String commandline ) throws PluginException;
/**
* Creates a {@link Plugin}.