GroovyでWikiプラグイン

JSPWikiプラグインをGroovyで書く手順をまとめておきます。

ここで作るのは引数としてsrc=ファイル名を指定するMikiという名前のプラグインです。JSPWikiのページ上でのプラグインの指定方法は次のようになります。

[{INSERT Miki src='test1'}]

このMikiプラグインはこの引数の文字列をそのまま結果で返すだけの単純なものです。Groovyは正規表現ライブラリをサポートしているので、このプラグインをファイルの内容を解析するように改良するのは簡単でしょう。

JSPWikiでプラグインを作るには、WikiPluginを実装したクラスを書きます。Groovyでもこれは一緒です。このGroovyスクリプトMiki.groovyという名前になります。

#!/usr/bin/env groovy

import com.ecyrd.jspwiki.plugin.WikiPlugin;
import com.ecyrd.jspwiki.WikiContext;
import java.util.Map;

class Miki implements WikiPlugin {

    public String execute(WikiContext context, Map params ) 
      throws PluginException {
      fileName = params.get("src");
      // 実際の処理はここに書く。
      return "src=" + fileName;
    }
}

Groovyスクリプトが書けたところで、次に、このスクリプトをgroovycを使ってJavaクラスにコンパイルします。結果はMiki.classになります。

> groovyc Miki.groovy

Miki.classをjavapで見ると次のようになります。プラグインとして使っているのはexecuteメソッドだけです。

Compiled from "Miki.groovy"
public class Miki extends java.lang.Object implements com.ecyrd.jspwiki.plugin.WikiPlugin,groovy.lang.GroovyObject{
    transient groovy.lang.MetaClass metaClass;
    static java.lang.Class class$groovy$lang$MetaClass;
    static java.lang.Class class$java$lang$String;
    public Miki();
    public java.lang.String execute(com.ecyrd.jspwiki.WikiContext,java.util.Map);
    public groovy.lang.MetaClass getMetaClass();
    public java.lang.Object invokeMethod(java.lang.String,java.lang.Object);
    public java.lang.Object getProperty(java.lang.String);
    public void setProperty(java.lang.String,java.lang.Object);
    public void setMetaClass(groovy.lang.MetaClass);
    static java.lang.Class class$(java.lang.String);

最後に出来上がったMiki.classをJSPWiki.warのWEB-INF/classesに置きます。JBoss上で動かすならプラグインをJARにまとめてホットデプロイがいいです。