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

Aspekte (SwingGadget)

Jedes SwingGadget kann eine Vielzahl funktionaler Aspekte („Aspects“) implementieren. Die Funktionen „editierbar“ und „vergrößerbar“ einer Eingabekomponente stellen beispielsweise funktionale Aspekte dar. Diese Kernfunktionalitäten müssen im neuen FirstSpirit-Komponentenmodell nicht von der SwingGadget-Implementierung selber umgesetzt werden, sondern stehen als Interface (Aspekt-Typen) zur Verfügung. 

Dabei unterscheidet man:

  • Standardaspekte, die der neuen Komponente nicht explizit hinzugefügt werden müssen, sondern automatisch durch die Erweiterung der SwingGadget-Klasse mit der abstrakten Basis-Implementierung AbstractValueHoldingSwing Gadget<T, F extends GomFormElement> verfügbar sind und
  • Optionale Aspekte, die der neuen Komponente explizit über den Aufruf  addAspect(@NotNull AspectType<A> type, @NotNull A aspect) im Konstruktor der SwingGadget-Klasse hinzugefügt werden können.

Über Aspekte kann ein Komponentenentwickler komplexe Funktionalität, beispielsweise Drag&Drop, sehr einfach bei der Entwicklung neuer Eingabekomponenten verwenden. Er muss dazu lediglich das gewünschte Interface (bzw. die abstrakte Basis-Implementierung) einbinden und die dort gestellten Anforderungen an die Implementierung erfüllen. Das umliegende FirstSpirit-Gadget-Framework behandelt dann automatisch alle weiteren Funktionen, beispielsweise das Drop-Handling für eine Eingabekomponente.

STANDARD-ASPEKTE

Sofern eine Eingabekomponente das Bearbeiten und Speichern von Werten ermöglichen soll, werden die Aspekte Editable und ValueHolder benötigt:

Ein Beispiel zur Verwendung der Aspekte Editable und ValueHolder in einer SwingGadget-Implementierung ist im Abschnitt SwingGadgets und die Verwendung von Standard-Aspekten beschrieben.

Ist das Einblenden einer Beschriftung (Label) gewünscht, muss die Eingabekomponente den Aspekt Labelable implementieren:

OPTIONALE ASPEKTE

Abhängig von der Eingabekomponente kann das Hinzufügen weiterer Aspekte zur Anpassung des Layouts sinnvoll sein, beispielsweise für eine einzeilige Darstellung, die Einstellung einer festen Breite, eine Größenänderung durch den Redakteur oder das Bearbeiten in einem separaten Bearbeitungsfenster:

  • SingleLineable: Einzeilige, visuelle Darstellung von Eingabekomponenten (beispielsweise für die Auswahl zwischen zwei vorgegebenen Werten über einen Radiobutton (vgl. CMS_INPUT_TOGGLE) (siehe Aspekt: SingleLineable).
  • Resizable: Größenänderung einer Eingabekomponente durch den Redakteur über Buttons (+/-) (siehe Aspekt: Resizable).
  • SeparateEditable: Öffnen der Eingabekomponente in einem separaten, großen Bearbeitungsfenster über einen Button (vgl. CMS_INPUT_DOM) (siehe Aspekt: SeparateEditable).
  • WidthFixable: Einstellung einer festen Breite für die Eingabekomponente (siehe Aspekt: WidthFixable).

In einzeiligen Eingabekomponenten kann es erwünscht sein, die Beschriftung einer Eingabekomponente ein- oder auszublenden:

Eine Eingabekomponente kann Inhalte hervorheben und markieren. Über Aspekte kann auf die unterschiedlichen Markierungs-Ereignisse individuell reagiert werden.

  • SwingFocusable: Markierungsart FOCUS für die Umrahmung innerhalb des Content-Highlightings (siehe Aspekt: SwingFocusable).
  • Highlightable: Markierungsart MATCH für die Treffermarkierung bei der Suche (siehe Aspekt: Highlightable).
  • DifferenceVisualizing: Markierungsarten INSERTED, DELETED und CHANGED für die Markierung innerhalb der Differenz-Visualisierung (siehe Aspekt: DifferenceVisualizing)

Um das Speichern von Änderungen möglichst effizient zu gestalten, führt das FirstSpirit-Gadget-Framework bei jeder Änderung innerhalb einer Eingabekomponente einen Vergleich des zuletzt gespeicherten Wertes mit dem aktuell im SwingGadget enthaltenen Wert durch. Abhängig von der Art der Eingabekomponente und des zugehörigen Daten-Container-Typs kann dieser Vergleich unvorteilhaft sein. Eigene Methoden zur Änderungserkennung können über die funktionalen Aspekte ChangeManaging und ValueLikening implementiert werden.

  • ChangeManaging: Erkennen inhaltlicher Änderungen innerhalb einer Eingabekomponente. Dieser Aspekt sollte verwendet werden, wenn eine Transformation des inneren Modells der Eingabekomponente in den Persistenztyp teuer ist (siehe Aspekt: ChangeManaging).
  • ValueLikening: Erkennen inhaltlicher Änderungen innerhalb einer Eingabekomponente. Dieser Aspekt sollte verwendet werden, wenn eine Transformation des inneren Modells in den Persistenztyp nicht möglich ist (siehe Aspekt: ValueLikening).

Ein Beispiel zur Verwendung der Aspekte ChangeManaging und ValueLikening in einer SwingGadget-Implementierung ist im Abschnitt NotifyValueChange - Änderungen propagieren beschrieben.

Die Aspekte TransferHandling und TransferSupplying ermöglichen das Übertragen typisierter Objekte per Drag & Drop. Die SwingGadget-Komponente muss dazu lediglich als Anbieter oder Empfänger für den Drag&Drop-Transfer registriert werden. Das eigentliche Drag&Drop-Handling wird dann versteckt vom FirstSpirit-Framework ausgeführt.

Weitere Aspekte:

Die unterschiedlichen Aspekt-Typen stellen spezielle Anforderungen an die Implementierung der SwingGadget-Komponente, z. B. in Form von Rückgabe-Werten/-Typen dar, die nachfolgend erläutert werden.

© 2005 - 2021 e-Spirit AG | Alle Rechte vorbehalten. | FirstSpirit 2021-04 | Datenschutz | Impressum | Kontakt