GSB 7.0 Standardlösung

Mandantenspezifisches RichtextEnhancer-Plugin

Ein RichtextEnhancer-Plugin erweitert den Prozess der Richtextverarbeitung um vor- und nachgelagerte Funktionen.

Bei dem Plugin handelt es sich um eine Java-Klasse, die die abstrakte Klasse RichtextEnhancerPlugin erweitern und als Spring-Bean instanziiert werden muss. Des Weiteren wird vorausgesetzt, dass der Bean-Name aus der Mandantenkennung und der Suffix "RichtextEnhancerPlugin" besteht (Beispiel: standardlsgRichtextEnhancerPlugin). Für die Ablage wird die Verwendung des Packages "de.bund.gsb.customers.MANDANT.site.text.xml" empfohlen.

Die abstrakte Oberklasse RichtextEnhancerPlugin stellt dem Entwickler mehrere Hooks bereit, um die eigenen Funktionen in den Prozess der Richtextverarbeitung zu integrieren.

Um vor der Basis-Verarbeitung des Richtextes einzugreifen, können die folgenden Methoden überschrieben werden:

void prepareDom(Node node)
void prepareDom(Node node, Markup markup)
void prepareDom(Node node, AbsDocumentImpl bean)

Nach der Verarbeitung ist es möglich, mittels der folgenden Methoden, die Darstellung des Richtextes zu verändern:

public void reworkDom(Node node)
public void reworkDom(Node node, Markup markup)
public void reworkDom(Node node, AbsDocumentImpl bean)

Die Methoden werden vom Basis-Framework in der oben zu sehenden Reihenfolge aufgerufen.

Sowohl innerhalb der vor- als auch nachgelagerten Methoden beinflußen Modifikationen am Node-Objekt die Darstellung des Richtextes. Es können bestehende Unterelemente modifziert, neue Elemente hinzugefügt oder unerwünschte entfernt werden. Jegliche Operationen werden mittels der JAXP-API, bzw. der zur Verfügung stehenden DOM-Schnittstelle, durchgeführt.

Beispiel eines Richtextenhancerplugins für den Mandanten standardlsg

In dem nachfolgenden Beispiel soll die Implementierung eines RichtextEnhancer-Plugins präsentiert werden, deren Aufgabe es ist, die im Editor ausgezeichneten Info-Boxen mit einem einleitenden Text zu versehen.

Das Plugin soll nur bei Dokumenten vom Typ "Basepage" aktiv werden. Die TinyMCE-Konfiguration im Editor wurde um die Funktion "Infobox" erweitert, die das selektierte p-Element um die CSS-Klasse "info-box" ergänzt.

Das RichtextEnhancer-Plugin erkennt die ausgezeichneten "Info-Boxen" und fügt ein neues Span-Element mit dem Text "Wichtiger Hinweis" hinzu.

public class StandardlsgRichtextEnhancerPlugin extends RichtextEnhancerPlugin {

@Override

public void reworkDom(Node node, AbsDocumentImpl absDocument) {

if (!"Basepage".equals(absDocument.getDoctype())) {

return;

}

Node nodeChild = node.getFirstChild();

while (null != nodeChild) {

Node nodeNext = nodeChild.getNextSibling();

if (nodeChild instanceof Element) {

Element element = (Element) nodeChild;

reworkDom(element, absDocument);

if (element.getNodeName().startsWith("p") && element.getAttribute("class").contains("info-box")) {

Element span = element.getOwnerDocument().createElement("span");

Text text = element.getOwnerDocument().createTextNode("Wichtiger Hinweis: ");

span.appendChild(text);

element.insertBefore(span, element.getFirstChild());

}

}

nodeChild = nodeNext;

}

}

}

Um das RichtextEnhancer-Plugin in die Site zu integrieren, muss dieser in den Spring-Kontext eingebunden werden.

<bean id="standardlsgRichtextEnhancerPlugin" class="de.bund.gsb.customers.standardlsg.site.text.xml.StandardlsgRichtextEnhancerPlugin" />