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

Erweitern von Actions in Confluence

Für die Entwicklung von Plugins bietet Confluence die Möglichkeit, die standardmäßig im System vorhandenen Actions (z.B. die ViewPageAction und die EditPageAction) mit eigenen Action-Klassen zu erweitern bzw. bestehende Klassen zu ersetzen. Auf diese Weise kann eine Vielzahl der Standardfunktionen auf individuelle Bedürfnisse angepasst sowie neue Funktionalität implementiert werden.

Die in Confluence verwendeten Actions sind in Packages organisiert und werden in der Datei xwork.xml verwaltet. Jedes der dort enthaltenen Packages kann in der Datei „atlassian-plugin.xml“ des eigenen Plugins erweitert werden. Soll z.B. die Klasse ViewPageAction überschrieben werden, muß das Package „pages“ erweitert werden. Ein solcher 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 grundsätzlich darauf zu achten, dass im Parameter „extends“ der Name des zu erweiternden xwork-Packages angegeben wird. Mit dem Tag <action> können dann eigene Action-Definitionen für dieses Package angegeben werden. Wird dabei im Parameter „name“ der Name einer bereits existierenden Action eingetragen, wird diese durch die in „class“ angegebene Klasse ersetzt. Dabei können auch die nach einer Action aufzurufenden Velocity-Templates und Actions im Tag <result> mit eigenen Results, Templates und Klassen ersetzt werden.

Beim Überschreiben der ViewPageAction ist allerdings eine Besonderheit zu beachten: beim Aufruf einer Seite durch die ViewPageAction wird standardmäßig in der Methode getWebInterfaceContext überprüft, ob die Seite von der Klasse „com.atlassian.confluence.pages.actions.ViewPageAction.class“ aufgerufen wurde. Anhand dieses Klassennamens wird ermittelt, ob die aufgerufene Seite gerade angezeigt oder editiert wird.
Ersetzt man nun die originale ViewPageAction durch eine eigene Klasse, muß also auch in dieser Klasse die Methode getWebInterfaceContext implementiert und entsprechend des neuen Klassennamens angepasst werden. Für obiges Beispiel muss also folgende Methode implementiert 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