Thema dieser Dokumentation / Das FirstSpirit 5 Modul- / Komponenten-Modell / Von Gadgets, Aspects, Brokern und Agents / Aspekte (SwingGadget) / Aspekt: ValueLikening
Aspekt: ValueLikening
Aspect: ValueLikening
Package: de.espirit.firstspirit.ui.gadgets.aspects
Sofern eine Eingabekomponente Werte speichern und bearbeiten kann (vgl. Aspekt: ValueHolder<T> und Aspekt: Editable), müssen Änderungen innerhalb der Komponente nach außen propagiert werden. Über den Aufruf von notifyValueChange(final GadgetIdentifier identifier) teilt das SwingGadget dem äußeren Framework mit, dass sich sein Inhalt geändert hat. Um unnötiges Speichern und die damit verbundene Erzeugung einer neuen Revision eines FirstSpirit-Objekts zu vermeiden, wird bei jeder Änderung im Editor (also nach jedem Aufruf von notifyValueChange(final GadgetIdentifier identifier)) zunächst überprüft, ob der geänderte Wert dem zuletzt gespeicherten Wert entspricht (Speichern nicht notwendig) oder nicht (Speichern notwendig). Das FirstSpirit-Gadget-Framework führt dazu einen „Equals“-Vergleich des zuletzt gespeicherten Wertes mit dem aktuell im SwingGadget enthaltenen Wert durch, indem der Wert des SwingGadgets über die Methode getValue() abgefragt wird.
Der Aspekt ValueLikening sollte immer dann verwendet werden, wenn eine Transformation in das Persistenzformat (beim Aufruf von getValue()) nicht zu jedem Zeitpunkt möglich ist.
Dieser Aspekt kann der SwingGadget-Implementierung über die Implements-Bedingung und den Aufruf von addAspect(…) im öffentlichen Konstruktor der SwingGadget-Implementierung hinzugefügt werden:
public class mySwingGadget implements ValueLikening<T> {
...
public mySwingGadget(final SwingGadgetContext<myGomForm> context) {
super(context);
addAspect(ValueLikening.TYPE, this);
}
...
}
Das Interface ValueLikening ist typisiert, d. h. der zu verwaltende Wertetyp wird über die (Java 5) Generics-Funktionalität innerhalb der Implementierung festgelegt.
Des Weiteren muss die Methode boolean likenTo(T value) implementiert werden, die ermittelt, ob der Inhalt einer Eingabekomponente dem gegebenen Wert entspricht oder nicht.
Beispiel zur Verwendung des Aspekts siehe Den Aspekt ValueLikening verwenden.