Communardo Software GmbH, Kleiststraße 10 a, D-01129 Dresden

Erweitern von Actions in Confluence

Für die Entwicklung von Plugins bie­tet Confluence die Möglichkeit, die stan­dard­mä­ßig im System vor­han­de­nen Actions (z.B. die ViewPageAction und die EditPageAction) mit eige­nen Action-Klassen zu erwei­tern bzw. bestehende Klassen zu erset­zen. Auf diese Weise kann eine Vielzahl der Standardfunktionen auf indi­vi­du­elle Bedürfnisse ange­passt sowie neue Funktionalität imple­men­tiert werden.

Die in Confluence ver­wen­de­ten Actions sind in Packages orga­ni­siert und wer­den in der Datei xwork.xml ver­wal­tet. Jedes der dort ent­hal­te­nen Packages kann in der Datei "atlassian-plugin.xml" des eige­nen Plugins erwei­tert wer­den. Soll z.B. die Klasse ViewPageAction über­schrie­ben wer­den, muß das Package "pages" erwei­tert wer­den. Ein sol­cher Abschnitt kann wie folgt aussehen:

<xwork name="View Page Action" key="myviewpageaction">
	<package name="pages" extends="pages" namespace="/pages">
	<default-interceptor-ref name="validatingStack"/>
	<action name="viewpage" class="de.communardo.confluence.plugins.actions.MyViewPageAction">
		<result name="error" type="velocity">/pages/myerrorsite.vm</result>
		<result name="page" type="velocity">/pages/myviewpage.vm</result>
	</action>
	</package>
</xwork>

Dabei ist grund­sätz­lich dar­auf zu ach­ten, dass im Parameter "extends" der Name des zu erwei­tern­den xwork-Packages ange­ge­ben wird. Mit dem Tag <action> kön­nen dann eigene Action-Definitionen für die­ses Package ange­ge­ben wer­den. Wird dabei im Parameter "name" der Name einer bereits exis­tie­ren­den Action ein­ge­tra­gen, wird diese durch die in "class" ange­ge­bene Klasse ersetzt. Dabei kön­nen auch die nach einer Action auf­zu­ru­fen­den Velocity-Templates und Actions im Tag <result> mit eige­nen Results, Templates und Klassen ersetzt werden.

Beim Überschreiben der ViewPageAction ist aller­dings eine Besonderheit zu beach­ten: beim Aufruf einer Seite durch die ViewPageAction wird stan­dard­mä­ßig in der Methode getWebInterfaceContext über­prüft, ob die Seite von der Klasse "com.atlassian.confluence.pages.actions.ViewPageAction.class" auf­ge­ru­fen wurde. Anhand die­ses Klassennamens wird ermit­telt, ob die auf­ge­ru­fene Seite gerade ange­zeigt oder edi­tiert wird.
Ersetzt man nun die ori­gi­nale ViewPageAction durch eine eigene Klasse, muß also auch in die­ser Klasse die Methode getWebInterfaceContext imple­men­tiert und ent­spre­chend des neuen Klassennamens ange­passt wer­den. Für obi­ges Beispiel muss also fol­gende Methode imple­men­tiert werden:


public WebInterfaceContext getWebInterfaceContext() {
	DefaultWebInterfaceContext result = new
		DefaultWebInterfaceContext(super.getWebInterfaceContext());
	if (getClass().equals(MyViewPageAction.class)) {
		result.setParameter(ViewingContentCondition.CONTEXT_KEY, Boolean.TRUE);
	}
	return result;
}

Related Posts

Pin It on Pinterest