Thema dieser Dokumentation / Das FirstSpirit 5 Modul- / Komponenten-Modell / Beispiel: Implementierung einer Eingabekomponente / NotifyValueChange - Änderungen propagieren / Den Aspekt ValueLikening verwenden

Den Aspekt ValueLikening verwenden

Dieser Aspekt sollte immer dann verwendet werden, wenn eine Transformation in das Persistenzformat (beim Aufruf von getValue()) nicht zu jedem Zeitpunkt möglich ist. Manche Eingabekomponenten erlauben beispielsweise die manuelle Eingabe eines Wertes, der während der Eingabe keinen gültigen Wert für die Komponente darstellt. Hier darf der Aufruf von getValue() erst erfolgen, wenn die Eingabekomponente einen gültigen Wert vom Typ T enthält. Das Interface ValueLikening ist typisiert, d. h. der zu verwaltende Wertetyp wird über die (Java 5) Generics-Funktionalität innerhalb der Implementierung festgelegt.

Beispiel Datums-Eingabekomponente: Neben der Auswahl eines gültigen Datums aus einem Auswahlfeld (Date Picker) erlaubt die Eingabekomponente auch die manuelle Eingabe eines Datums innerhalb eines Textfelds. Hier kann der einfache „Equals“-Vergleich zur Änderungsfeststellung, der durch das FirstSpirit-Gadget-Framework ausgeführt wird, nicht verwendet werden, da der Wert der Eingabekomponente zu Beginn der Eingabe nicht in ein Objekt vom Typ Date umgewandelt werden kann.

Um die vom Framework durchgeführte, einfache „Equals“-Prüfung und damit auch den Aufruf von getValue() zu einem ungünstigen Zeitpunkt zu umgehen, muss  die SwingGadget-Implementierung den Aspekt ValueLikening<T> implementieren. Dazu muss der Aspekt ValueLikening<T> innerhalb der SwingGadget-Implementierung hinzugefügt werden und anschließend die Methode likenTo(T value) implementiert werden, wobei T immer der Daten-Container-Typ des zugehörigen EditorValue<T> (hier Date) ist:

Listing: Beispiel Änderungen propagieren – der Aspekt ValueLikening

public class DateSwingGadget extends AbstractValueHoldingSwingGadget<Date, GomDate>
implements ValueLikening<Date> {

public DateSwingGadget(final SwingGadgetContext<GomDate> context) {
super(context);
addAspect(ValueLikening.TYPE, this);
}

/* ValueLikening ============================================== */

public boolean likenTo(final Date value) {
if (!_datePanel.hasValidFormat()) {
return false;
}
return Objects.equal(_datePanel.getDate(), value);
}

}

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