r1259 - in xwiki/trunk/src/main/java/com/xpn/xwiki/plugin: . test
Jeremi Joslin
jeremi at users.forge.objectweb.org
Sun Sep 3 14:22:41 CEST 2006
Author: jeremi
Date: 2006-09-03 14:22:40 +0200 (Sun, 03 Sep 2006)
New Revision: 1259
Added:
xwiki/trunk/src/main/java/com/xpn/xwiki/plugin/test/
xwiki/trunk/src/main/java/com/xpn/xwiki/plugin/test/testPlugin.java
Modified:
xwiki/trunk/src/main/java/com/xpn/xwiki/plugin/PluginException.java
xwiki/trunk/src/main/java/com/xpn/xwiki/plugin/XWikiPluginManager.java
Log:
improve the plugin manager:
Call only the implemented functions of the plugins
Modified: xwiki/trunk/src/main/java/com/xpn/xwiki/plugin/PluginException.java
===================================================================
--- xwiki/trunk/src/main/java/com/xpn/xwiki/plugin/PluginException.java 2006-09-02 15:29:58 UTC (rev 1258)
+++ xwiki/trunk/src/main/java/com/xpn/xwiki/plugin/PluginException.java 2006-09-03 12:22:40 UTC (rev 1259)
@@ -43,6 +43,23 @@
setPluginName(pluginName);
}
+ //java.lang.Class aClass
+ public PluginException(java.lang.Class plugin, int code, String message, Throwable e, Object[] args)
+ {
+ super(XWikiException.MODULE_XWIKI_PLUGINS, code, plugin.getName() + ": " + message, e, args);
+ setPluginName(plugin.getName());
+ }
+
+ public PluginException(java.lang.Class plugin, int code, String message, Throwable e){
+ super(XWikiException.MODULE_XWIKI_PLUGINS, code, plugin.getName() + ": " + message, e);
+ setPluginName(plugin.getName());
+ }
+
+ public PluginException(java.lang.Class plugin, int code, String message){
+ super(XWikiException.MODULE_XWIKI_PLUGINS, code, plugin.getName() + ": " + message);
+ setPluginName(plugin.getName());
+ }
+
public PluginException(){
super();
}
Modified: xwiki/trunk/src/main/java/com/xpn/xwiki/plugin/XWikiPluginManager.java
===================================================================
--- xwiki/trunk/src/main/java/com/xpn/xwiki/plugin/XWikiPluginManager.java 2006-09-02 15:29:58 UTC (rev 1258)
+++ xwiki/trunk/src/main/java/com/xpn/xwiki/plugin/XWikiPluginManager.java 2006-09-03 12:22:40 UTC (rev 1259)
@@ -23,9 +23,8 @@
package com.xpn.xwiki.plugin;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Vector;
+import java.util.*;
+import java.lang.reflect.Method;
import org.apache.commons.lang.StringUtils;
@@ -35,7 +34,10 @@
public class XWikiPluginManager {
private Vector plugins = new Vector();
private Map plugins_classes = new HashMap();
+ private Map functionList = new HashMap();
+
+
public XWikiPluginManager() {
}
@@ -58,10 +60,12 @@
args[0] = name;
args[1] = className;
args[2] = context;
- XWikiPluginInterface plugin = (XWikiPluginInterface) Class.forName(className).getConstructor(classes).newInstance(args);
+ Class pluginClass = Class.forName(className);
+ XWikiPluginInterface plugin = (XWikiPluginInterface) pluginClass.getConstructor(classes).newInstance(args);
if (plugin!=null) {
plugins.add(plugin.getName());
plugins_classes.put(plugin.getName(), plugin);
+ initPlugin(plugin, pluginClass);
}
} catch (Exception e) {
// Log an error but do not fail..
@@ -72,10 +76,20 @@
public void removePlugin(String className) {
plugins.remove(className);
+ Object plugin = plugins_classes.get(className);
plugins_classes.remove(className);
+
+ Iterator it = functionList.keySet().iterator();
+ while (it.hasNext())
+ {
+ String name = (String) it.next();
+ Vector pluginList = (Vector) functionList.get(name);
+ pluginList.remove(plugin);
+ }
}
public void addPlugins(String[] classNames, XWikiContext context) {
+ initInterface();
for (int i=0;i<classNames.length;i++) {
addPlugin(classNames[i], classNames[i], context);
}
@@ -93,28 +107,58 @@
this.plugins = plugins;
}
+ public void initInterface(){
+ Method[] methods = XWikiPluginInterface.class.getMethods();
+ for (int i = 0; i < methods.length; i++)
+ {
+ Method method = methods[i];
+ String name = method.getName();
+ functionList.put(name, new Vector());
+ }
+ }
+
+ public void initPlugin(Object plugin, Class pluginClass){
+ Method[] methods = pluginClass.getDeclaredMethods();
+ for (int i = 0; i < methods.length; i++)
+ {
+ Method method = methods[i];
+ String name = method.getName();
+ ((Vector)functionList.get(name)).add(plugin);
+ }
+ }
+
+ public Vector getPlugins(String functionName){
+ if (functionList.containsKey(functionName)){
+ return (Vector) functionList.get(functionName);
+ }
+ return null;
+ }
+
public void virtualInit(XWikiContext context) {
+ Vector plugins = getPlugins("virtualInit");
for (int i=0;i<plugins.size();i++) {
try {
- ((XWikiPluginInterface)plugins_classes.get(plugins.get(i))).virtualInit(context);
+ ((XWikiPluginInterface)plugins.get(i)).virtualInit(context);
} catch (Exception e)
{}
}
}
public void flushCache() {
+ Vector plugins = getPlugins("virtualInit");
for (int i=0;i<plugins.size();i++) {
try {
- ((XWikiPluginInterface)plugins_classes.get(plugins.get(i))).flushCache();
+ ((XWikiPluginInterface)plugins.get(i)).flushCache();
} catch (Exception e)
{}
}
}
public String commonTagsHandler(String text, XWikiContext context) {
+ Vector plugins = getPlugins("virtualInit");
for (int i=0;i<plugins.size();i++) {
try {
- text = ((XWikiPluginInterface)plugins_classes.get(plugins.get(i))).commonTagsHandler(text,context);
+ text = ((XWikiPluginInterface)plugins.get(i)).commonTagsHandler(text,context);
} catch (Exception e)
{}
}
@@ -122,9 +166,10 @@
}
public String startRenderingHandler(String text, XWikiContext context) {
+ Vector plugins = getPlugins("virtualInit");
for (int i=0;i<plugins.size();i++) {
try {
- text = ((XWikiPluginInterface)plugins_classes.get(plugins.get(i))).startRenderingHandler(text,context);
+ text = ((XWikiPluginInterface)plugins.get(i)).startRenderingHandler(text,context);
} catch (Exception e)
{}
}
@@ -132,9 +177,10 @@
}
public String outsidePREHandler(String text, XWikiContext context) {
+ Vector plugins = getPlugins("virtualInit");
for (int i=0;i<plugins.size();i++) {
try {
- text = ((XWikiPluginInterface)plugins_classes.get(plugins.get(i))).outsidePREHandler(text,context);
+ text = ((XWikiPluginInterface)plugins.get(i)).outsidePREHandler(text,context);
} catch (Exception e)
{}
}
@@ -144,7 +190,7 @@
public String insidePREHandler(String text, XWikiContext context) {
for (int i=0;i<plugins.size();i++) {
try {
- text = ((XWikiPluginInterface)plugins_classes.get(plugins.get(i))).insidePREHandler(text,context);
+ text = ((XWikiPluginInterface)plugins.get(i)).insidePREHandler(text,context);
} catch (Exception e)
{}
}
@@ -154,7 +200,7 @@
public String endRenderingHandler(String text, XWikiContext context) {
for (int i=0;i<plugins.size();i++) {
try {
- text = ((XWikiPluginInterface)plugins_classes.get(plugins.get(i))).endRenderingHandler(text,context);
+ text = ((XWikiPluginInterface)plugins.get(i)).endRenderingHandler(text,context);
} catch (Exception e)
{}
}
@@ -164,7 +210,7 @@
public void beginRendering(XWikiContext context) {
for (int i=0;i<plugins.size();i++) {
try {
- ((XWikiPluginInterface)plugins_classes.get(plugins.get(i))).beginRendering(context);
+ ((XWikiPluginInterface)plugins.get(i)).beginRendering(context);
} catch (Exception e)
{}
}
@@ -173,7 +219,7 @@
public void endRendering(XWikiContext context) {
for (int i=0;i<plugins.size();i++) {
try {
- ((XWikiPluginInterface)plugins_classes.get(plugins.get(i))).endRendering(context);
+ ((XWikiPluginInterface)plugins.get(i)).endRendering(context);
} catch (Exception e)
{}
}
@@ -183,7 +229,7 @@
XWikiAttachment attach = attachment;
for (int i=0;i<plugins.size();i++) {
try {
- attach = ((XWikiPluginInterface)plugins_classes.get(plugins.get(i))).downloadAttachment(attach, context);
+ attach = ((XWikiPluginInterface)plugins.get(i)).downloadAttachment(attach, context);
} catch (Exception e)
{}
}
Added: xwiki/trunk/src/main/java/com/xpn/xwiki/plugin/test/testPlugin.java
===================================================================
--- xwiki/trunk/src/main/java/com/xpn/xwiki/plugin/test/testPlugin.java 2006-09-02 15:29:58 UTC (rev 1258)
+++ xwiki/trunk/src/main/java/com/xpn/xwiki/plugin/test/testPlugin.java 2006-09-03 12:22:40 UTC (rev 1259)
@@ -0,0 +1,23 @@
+package com.xpn.xwiki.plugin.test;
+
+import com.xpn.xwiki.plugin.XWikiPluginInterface;
+import com.xpn.xwiki.plugin.XWikiDefaultPlugin;
+import com.xpn.xwiki.XWikiContext;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: jeremi
+ * Date: Sep 1, 2006
+ * Time: 12:33:02 PM
+ * To change this template use File | Settings | File Templates.
+ */
+public class testPlugin extends XWikiDefaultPlugin implements XWikiPluginInterface {
+ public testPlugin(String name, String className, XWikiContext context) {
+ super(name, className, context);
+ }
+
+ public String commonTagsHandler(String line, XWikiContext context){
+ return "It's working";
+ }
+
+}
More information about the Xwiki-notifications
mailing list