tohokuaikiのチラシの裏

技術的ネタとか。

Confluenceのプラグインで、Confluenceの各種情報を取得したりする方法

ServletXWorkのActionからConfluenceのページ情報やスペース情報などを取得したい場合には、各種Managerを使う。

このあたりの方法が、Accessing Confluence Components from Plugin Modules - Confluence Development - Atlassian Developer Documentationにまとめられている。上記のページにはどのようなManagerがあるかも一覧になっている。

XWorkのActionクラスや、ServletクラスにそれらのManagerをinjectionするには2つ方法があるらしい。

setterによる方法(プラグインVersion1の頃使われた)

使いたいManagerのsetterを定義しておく。LabelManagerが使いたい場合は、

private LabelManager labelManager;
public void setLabelManager(LabelManager labelManager)
{
	this.labelManager = labelManager;
}

というフィールドとsetternを用意しておく。

コンストラクタによる方法(プラグインVersion2以降)

実際に調べたところ、XWorkのActionクラスや、Servletクラスは可変コンストラクタを取っているらしい。

ということで、コンストラクタに欲しいManagerを引数として追加してやればいい。

    public MypostServlet(SpaceManager spaceManager, PageManager pageManager, ContentPropertyManager contentPropertyManager, UserManager userManager, LoginUriProvider loginUriProvider, BandanaManager bandanaManager, TemplateRenderer renderer) {
        this.spaceManager = spaceManager;
        this.pageManager = pageManager;
        this.contentPropertyManager = contentPropertyManager;
        this.userManager = userManager;
        this.loginUriProvider = loginUriProvider;
        this.bandanaManager = bandanaManager;
        this.renderer = renderer;
    }

とかてんこ盛りにできている。