Thema dieser Dokumentation / Das FirstSpirit 5 Modul- / Komponenten-Modell / Von Gadgets, Aspects, Brokern und Agents / Aspekte (SwingGadget) / Aspekt: ChangeManaging

Aspekt: ChangeManaging

Aspect: ChangeManaging

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 ChangeManaging sollte immer dann verwendet werden, wenn ein einfacher „Equals“-Vergleich des zuletzt gespeicherten Wertes mit dem aktuell im SwingGadget enthaltenen Wert mithilfe von getValue() zu teuer ist und/oder es eine performantere Implementierung zur Änderungserkennung gibt.

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 ChangeManaging {

...

public mySwingGadget(final SwingGadgetContext<myGomForm> context) {
super(context);
addAspect(ChangeManaging.TYPE, this);
}

...

}

Des Weiteren müssen alle Methoden des Interfaces implementiert werden:

  • Die Methode boolean hasChanges() ermittelt, ob der Inhalt einer Eingabekomponente geändert wurde oder nicht.
  • Die Methode void replaceValue(T value) ersetzt den aktuellen Inhalt einer Eingabekomponente durch den übergebenen, neuen Wert. Ein nachfolgender Aufruf der Methode boolean hasChanges() sollte anschließend true zurückliefern.
  • Die Methode void clearValue() löscht den aktuellen Inhalt einer Eingabekomponente. Ein nachfolgender Aufruf der Methode boolean hasChanges() sollte anschließend true zurückliefern.

Beispiel zur Verwendung des Aspekts siehe Den Aspekt ChangeManaging verwenden.

© 2005 - 2024 Crownpeak Technology GmbH | Alle Rechte vorbehalten. | FirstSpirit 2024.5 | Datenschutz